babel-plugin-styled-components-px2rem
Version:
Babel plugin for convert px to rem units of styled-components
74 lines • 3.13 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var postcss_1 = __importDefault(require("postcss"));
var memoizerific_1 = __importDefault(require("memoizerific"));
var postcss_plugin_px2rem_1 = __importDefault(require("postcss-plugin-px2rem"));
var postcss_scss_1 = __importDefault(require("postcss-scss"));
var configuration_1 = __importDefault(require("./configuration"));
var FAKE_OPENING_WRAPPER = 'styled-fake-wrapper/* start of styled-fake-wrapper */{';
var FAKE_CLOSING_WRAPPER = '}/* 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-\d]+px)+/;
var PX_UNIT_REG = /([\s-\d]+px)+/;
function process(css) {
var _a = configuration_1.default.config, tags = _a.tags, multiplier = _a.multiplier, rootValue = _a.rootValue, others = __rest(_a, ["tags", "multiplier", "rootValue"]);
return postcss_1.default([postcss_plugin_px2rem_1.default(__assign(__assign({}, others), { rootValue: rootValue / multiplier }))]).process(css, {
syntax: postcss_scss_1.default,
}).css;
}
function replaceWithRetry(cssText, retry) {
if (retry === void 0) { retry = 1; }
try {
if (PAIR_REG.test(cssText)) {
var replaced = process("" + FAKE_OPENING_WRAPPER + cssText + FAKE_CLOSING_WRAPPER);
return replaced.replace(FAKE_OPENING_WRAPPER, '').replace(FAKE_CLOSING_WRAPPER, '');
}
else if (PX_UNIT_REG.test(cssText)) {
var replaced = process("" + FAKE_RULE + cssText);
return replaced.replace(FAKE_RULE, '');
}
else {
return cssText;
}
}
catch (ignored) {
if (retry > 0) {
return cssText
.split(';')
.map(function (token) { return replaceWithRetry(token, retry - 1); })
.join(';');
}
else {
return cssText;
}
}
}
exports.replace = memoizerific_1.default(10)(function (cssText) {
return replaceWithRetry(cssText);
});
//# sourceMappingURL=replace.js.map