UNPKG

babel-plugin-styled-components-px2vw

Version:
73 lines (72 loc) 3.21 kB
"use strict"; 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); });