"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

var _browserslist = _interopRequireDefault(require("browserslist"));

var _caniuseApi = require("caniuse-api");

var _fromInitial = _interopRequireDefault(require("../data/fromInitial.json"));

var _toInitial = _interopRequireDefault(require("../data/toInitial.json"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const initial = 'initial'; // In most of the browser including chrome the initial for `writing-mode` is not `horizontal-tb`. Ref https://github.com/cssnano/cssnano/pull/905

const defaultIgnoreProps = ['writing-mode', 'transform-box'];

function pluginCreator() {
  return {
    postcssPlugin: 'postcss-reduce-initial',

    prepare(result) {
      const resultOpts = result.opts || {};
      const browsers = (0, _browserslist.default)(null, {
        stats: resultOpts.stats,
        path: __dirname,
        env: resultOpts.env
      });
      const initialSupport = (0, _caniuseApi.isSupported)('css-initial-value', browsers);
      return {
        OnceExit(css) {
          css.walkDecls(decl => {
            const lowerCasedProp = decl.prop.toLowerCase();
            const ignoreProp = new Set(defaultIgnoreProps.concat(resultOpts.ignore || []));

            if (ignoreProp.has(lowerCasedProp)) {
              return;
            }

            if (initialSupport && Object.prototype.hasOwnProperty.call(_toInitial.default, lowerCasedProp) && decl.value.toLowerCase() === _toInitial.default[lowerCasedProp]) {
              decl.value = initial;
              return;
            }

            if (decl.value.toLowerCase() !== initial || !_fromInitial.default[lowerCasedProp]) {
              return;
            }

            decl.value = _fromInitial.default[lowerCasedProp];
          });
        }

      };
    }

  };
}

pluginCreator.postcss = true;
var _default = pluginCreator;
exports.default = _default;
module.exports = exports.default;