diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2023-11-01 20:49:36 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2023-11-01 20:49:36 +0800 |
| commit | e99f950f5018cfe737c0d1150e50d97c6e6a4823 (patch) | |
| tree | 16f329a1b22128ed67f3fcae15a9b0a030f2ccbf /node_modules/postcss-calc/src/lib/transform.js | |
| parent | c5d8a744dd584749e0b920119b42e731e37e5f62 (diff) | |
update
Diffstat (limited to 'node_modules/postcss-calc/src/lib/transform.js')
| -rw-r--r-- | node_modules/postcss-calc/src/lib/transform.js | 109 |
1 files changed, 0 insertions, 109 deletions
diff --git a/node_modules/postcss-calc/src/lib/transform.js b/node_modules/postcss-calc/src/lib/transform.js deleted file mode 100644 index 78bff2ef..00000000 --- a/node_modules/postcss-calc/src/lib/transform.js +++ /dev/null @@ -1,109 +0,0 @@ -'use strict'; -const selectorParser = require('postcss-selector-parser'); -const valueParser = require('postcss-value-parser'); - -const { parser } = require('../parser.js'); - -const reducer = require('./reducer.js'); -const stringifier = require('./stringifier.js'); - -const MATCH_CALC = /((?:-(moz|webkit)-)?calc)/i; - -/** - * @param {string} value - * @param {{precision: number, warnWhenCannotResolve: boolean}} options - * @param {import("postcss").Result} result - * @param {import("postcss").ChildNode} item - */ -function transformValue(value, options, result, item) { - return valueParser(value) - .walk((node) => { - // skip anything which isn't a calc() function - if (node.type !== 'function' || !MATCH_CALC.test(node.value)) { - return; - } - - // stringify calc expression and produce an AST - const contents = valueParser.stringify(node.nodes); - const ast = parser.parse(contents); - - // reduce AST to its simplest form, that is, either to a single value - // or a simplified calc expression - const reducedAst = reducer(ast, options.precision); - - // stringify AST and write it back - /** @type {valueParser.Node} */ (node).type = 'word'; - node.value = stringifier( - node.value, - reducedAst, - value, - options, - result, - item - ); - - return false; - }) - .toString(); -} -/** - * @param {import("postcss-selector-parser").Selectors} value - * @param {{precision: number, warnWhenCannotResolve: boolean}} options - * @param {import("postcss").Result} result - * @param {import("postcss").ChildNode} item - */ -function transformSelector(value, options, result, item) { - return selectorParser((selectors) => { - selectors.walk((node) => { - // attribute value - // e.g. the "calc(3*3)" part of "div[data-size="calc(3*3)"]" - if (node.type === 'attribute' && node.value) { - node.setValue(transformValue(node.value, options, result, item)); - } - - // tag value - // e.g. the "calc(3*3)" part of "div:nth-child(2n + calc(3*3))" - if (node.type === 'tag') { - node.value = transformValue(node.value, options, result, item); - } - - return; - }); - }).processSync(value); -} - -/** - * @param {any} node - * @param {{precision: number, preserve: boolean, warnWhenCannotResolve: boolean}} options - * @param {'value'|'params'|'selector'} property - * @param {import("postcss").Result} result - */ -module.exports = (node, property, options, result) => { - let value = node[property]; - - try { - value = - property === 'selector' - ? transformSelector(node[property], options, result, node) - : transformValue(node[property], options, result, node); - } catch (error) { - if (error instanceof Error) { - result.warn(error.message, { node }); - } else { - result.warn('Error', { node }); - } - return; - } - - // if the preserve option is enabled and the value has changed, write the - // transformed value into a cloned node which is inserted before the current - // node, preserving the original value. Otherwise, overwrite the original - // value. - if (options.preserve && node[property] !== value) { - const clone = node.clone(); - clone[property] = value; - node.parent.insertBefore(node, clone); - } else { - node[property] = value; - } -}; |
