123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552 |
- 'use strict';
- function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
- var postcss = _interopDefault(require('postcss'));
- var valueParser = _interopDefault(require('postcss-values-parser'));
- var fs = _interopDefault(require('fs'));
- var path = _interopDefault(require('path'));
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
- try {
- var info = gen[key](arg);
- var value = info.value;
- } catch (error) {
- reject(error);
- return;
- }
- if (info.done) {
- resolve(value);
- } else {
- Promise.resolve(value).then(_next, _throw);
- }
- }
- function _asyncToGenerator(fn) {
- return function () {
- var self = this,
- args = arguments;
- return new Promise(function (resolve, reject) {
- var gen = fn.apply(self, args);
- function _next(value) {
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
- }
- function _throw(err) {
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
- }
- _next(undefined);
- });
- };
- }
- function parse(string) {
- return valueParser(string).parse();
- }
- function isBlockIgnored(ruleOrDeclaration) {
- var rule = ruleOrDeclaration.selector ? ruleOrDeclaration : ruleOrDeclaration.parent;
- return /(!\s*)?postcss-custom-properties:\s*off\b/i.test(rule.toString());
- }
- function isRuleIgnored(rule) {
- var previous = rule.prev();
- return Boolean(isBlockIgnored(rule) || previous && previous.type === 'comment' && /(!\s*)?postcss-custom-properties:\s*ignore\s+next\b/i.test(previous.text));
- }
- function getCustomPropertiesFromRoot(root, opts) {
-
- const customPropertiesFromHtmlElement = {};
- const customPropertiesFromRootPseudo = {};
- root.nodes.slice().forEach(rule => {
- const customPropertiesObject = isHtmlRule(rule) ? customPropertiesFromHtmlElement : isRootRule(rule) ? customPropertiesFromRootPseudo : null;
- if (customPropertiesObject) {
- rule.nodes.slice().forEach(decl => {
- if (isCustomDecl(decl) && !isBlockIgnored(decl)) {
- const prop = decl.prop;
- customPropertiesObject[prop] = parse(decl.value).nodes;
- if (!opts.preserve) {
- decl.remove();
- }
- }
- });
- if (!opts.preserve && isEmptyParent(rule) && !isBlockIgnored(rule)) {
- rule.remove();
- }
- }
- });
- return Object.assign({}, customPropertiesFromHtmlElement, customPropertiesFromRootPseudo);
- }
- const htmlSelectorRegExp = /^html$/i;
- const rootSelectorRegExp = /^:root$/i;
- const customPropertyRegExp = /^--[A-z][\w-]*$/;
- const isHtmlRule = node => node.type === 'rule' && htmlSelectorRegExp.test(node.selector) && Object(node.nodes).length;
- const isRootRule = node => node.type === 'rule' && rootSelectorRegExp.test(node.selector) && Object(node.nodes).length;
- const isCustomDecl = node => node.type === 'decl' && customPropertyRegExp.test(node.prop);
- const isEmptyParent = node => Object(node.nodes).length === 0;
|