babel-plugin-styled-components-px2vw
Version:
Babel plugin for convert px to vw units of styled-components
73 lines (72 loc) • 3.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.replace = void 0;
var tslib_1 = require("tslib");
var postcss_1 = tslib_1.__importDefault(require("postcss"));
var memoizerific_1 = tslib_1.__importDefault(require("memoizerific"));
var postcss_px_to_viewport_1 = tslib_1.__importDefault(require("postcss-px-to-viewport"));
var configuration_1 = tslib_1.__importDefault(require("./configuration"));
var FAKE_OPENING_WRAPPER = "styled-fake-wrapper/* start of styled-fake-wrapper */{\n";
var FAKE_CLOSING_WRAPPER = "\n}/* end of styled-fake-wrapper */";
var FAKE_RULE = '/* start of styled-fake-rule */padding:/* end of styled-fake-rule */';
var PAIR_REG = /[\s\w-]+:([\s\w.-])+/;
var PX_UNIT_REG = new RegExp("([\\s-\\d]+" + configuration_1.default.config.unitToConvert + ")+");
var SPLIT_SEPARATORS = [';', '\n', '{', '}'];
var errorTokenMap = new Map();
function process(css) {
var _a = configuration_1.default.config, tags = _a.tags, others = tslib_1.__rest(_a, ["tags"]);
var options = tslib_1.__assign({}, others);
return postcss_1.default([postcss_px_to_viewport_1.default(options)]).process(css, {}).css;
}
function replaceWithRecord(cssText) {
var unitToConvert = configuration_1.default.config.unitToConvert;
try {
if (PAIR_REG.test(cssText)) {
var replaced = process("" + FAKE_OPENING_WRAPPER + cssText + FAKE_CLOSING_WRAPPER);
if (errorTokenMap.has(cssText)) {
errorTokenMap.delete(cssText);
}
return replaced.replace(FAKE_OPENING_WRAPPER, '').replace(FAKE_CLOSING_WRAPPER, '');
}
else if (PX_UNIT_REG.test(cssText)) {
var replaced = process("" + FAKE_RULE + cssText);
if (errorTokenMap.has(cssText)) {
errorTokenMap.delete(cssText);
}
return replaced.replace(FAKE_RULE, '');
}
else {
if (errorTokenMap.has(cssText)) {
errorTokenMap.delete(cssText);
}
return cssText;
}
}
catch (ignored) {
var tempResults_1 = [];
var cssStr_1 = cssText;
SPLIT_SEPARATORS.forEach(function (separator) {
var tokens = cssStr_1.split(separator);
for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {
var token = tokens_1[_i];
var tokenRemoveComments = token.replace(/\s*(?<!(\/\*.*|[::]))\/\/.*$/gm, '');
if (PAIR_REG.test(tokenRemoveComments) &&
tokenRemoveComments.includes(unitToConvert) &&
!errorTokenMap.get(tokenRemoveComments) &&
!!token.trim()) {
errorTokenMap.set(tokenRemoveComments, true);
tempResults_1.push(exports.replace(tokenRemoveComments));
}
else {
tempResults_1.push(token);
}
}
cssStr_1 = tempResults_1.join(separator);
tempResults_1 = [];
});
return cssStr_1;
}
}
exports.replace = memoizerific_1.default(10)(function (cssText) {
return replaceWithRecord(cssText);
});