From c06f7ee0a40255214c477e13d9b956a7e07c2900 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Sat, 14 Oct 2023 15:05:55 +0800 Subject: postcss,(plugins): nanocss, postcss-preset-env --- node_modules/postcss-ordered-values/src/index.js | 163 +++++++++++++++++++++ .../postcss-ordered-values/src/lib/addSpace.js | 8 + .../postcss-ordered-values/src/lib/getValue.js | 36 +++++ .../src/lib/joinGridValue.js | 8 + .../src/lib/mathfunctions.js | 3 + .../src/lib/vendorUnprefixed.js | 10 ++ .../postcss-ordered-values/src/rules/animation.js | 148 +++++++++++++++++++ .../postcss-ordered-values/src/rules/border.js | 60 ++++++++ .../postcss-ordered-values/src/rules/boxShadow.js | 73 +++++++++ .../postcss-ordered-values/src/rules/columns.js | 39 +++++ .../postcss-ordered-values/src/rules/flexFlow.js | 36 +++++ .../postcss-ordered-values/src/rules/grid.js | 100 +++++++++++++ .../postcss-ordered-values/src/rules/listStyle.js | 44 ++++++ .../src/rules/listStyleTypes.json | 102 +++++++++++++ .../postcss-ordered-values/src/rules/transition.js | 76 ++++++++++ 15 files changed, 906 insertions(+) create mode 100644 node_modules/postcss-ordered-values/src/index.js create mode 100644 node_modules/postcss-ordered-values/src/lib/addSpace.js create mode 100644 node_modules/postcss-ordered-values/src/lib/getValue.js create mode 100644 node_modules/postcss-ordered-values/src/lib/joinGridValue.js create mode 100644 node_modules/postcss-ordered-values/src/lib/mathfunctions.js create mode 100644 node_modules/postcss-ordered-values/src/lib/vendorUnprefixed.js create mode 100644 node_modules/postcss-ordered-values/src/rules/animation.js create mode 100644 node_modules/postcss-ordered-values/src/rules/border.js create mode 100644 node_modules/postcss-ordered-values/src/rules/boxShadow.js create mode 100644 node_modules/postcss-ordered-values/src/rules/columns.js create mode 100644 node_modules/postcss-ordered-values/src/rules/flexFlow.js create mode 100644 node_modules/postcss-ordered-values/src/rules/grid.js create mode 100644 node_modules/postcss-ordered-values/src/rules/listStyle.js create mode 100644 node_modules/postcss-ordered-values/src/rules/listStyleTypes.json create mode 100644 node_modules/postcss-ordered-values/src/rules/transition.js (limited to 'node_modules/postcss-ordered-values/src') diff --git a/node_modules/postcss-ordered-values/src/index.js b/node_modules/postcss-ordered-values/src/index.js new file mode 100644 index 00000000..42c168a3 --- /dev/null +++ b/node_modules/postcss-ordered-values/src/index.js @@ -0,0 +1,163 @@ +'use strict'; +const valueParser = require('postcss-value-parser'); +const { + normalizeGridAutoFlow, + normalizeGridColumnRowGap, + normalizeGridColumnRow, +} = require('./rules/grid'); + +// rules +const animation = require('./rules/animation'); +const border = require('./rules/border'); +const boxShadow = require('./rules/boxShadow'); +const flexFlow = require('./rules/flexFlow'); +const transition = require('./rules/transition'); +const listStyle = require('./rules/listStyle'); +const column = require('./rules/columns'); +const vendorUnprefixed = require('./lib/vendorUnprefixed.js'); + +/** @type {[string, (parsed: valueParser.ParsedValue) => string][]} */ +const borderRules = [ + ['border', border], + ['border-block', border], + ['border-inline', border], + ['border-block-end', border], + ['border-block-start', border], + ['border-inline-end', border], + ['border-inline-start', border], + ['border-top', border], + ['border-right', border], + ['border-bottom', border], + ['border-left', border], +]; + +/** @type {[string, (parsed: valueParser.ParsedValue) => string | string[] | valueParser.ParsedValue][]} */ +const grid = [ + ['grid-auto-flow', normalizeGridAutoFlow], + ['grid-column-gap', normalizeGridColumnRowGap], // normal | + ['grid-row-gap', normalizeGridColumnRowGap], // normal | + ['grid-column', normalizeGridColumnRow], // + + ['grid-row', normalizeGridColumnRow], // + + ['grid-row-start', normalizeGridColumnRow], // + ['grid-row-end', normalizeGridColumnRow], // + ['grid-column-start', normalizeGridColumnRow], // + ['grid-column-end', normalizeGridColumnRow], // +]; + +/** @type {[string, (parsed: valueParser.ParsedValue) => string | valueParser.ParsedValue][]} */ +const columnRules = [ + ['column-rule', border], + ['columns', column], +]; + +/** @type {Map string | string[] | valueParser.ParsedValue)>} */ +const rules = new Map([ + ['animation', animation], + ['outline', border], + ['box-shadow', boxShadow], + ['flex-flow', flexFlow], + ['list-style', listStyle], + ['transition', transition], + ...borderRules, + ...grid, + ...columnRules, +]); + +const variableFunctions = new Set(['var', 'env', 'constant']); + +/** + * @param {valueParser.Node} node + * @return {boolean} + */ +function isVariableFunctionNode(node) { + if (node.type !== 'function') { + return false; + } + + return variableFunctions.has(node.value.toLowerCase()); +} + +/** + * @param {valueParser.ParsedValue} parsed + * @return {boolean} + */ +function shouldAbort(parsed) { + let abort = false; + + parsed.walk((node) => { + if ( + node.type === 'comment' || + isVariableFunctionNode(node) || + (node.type === 'word' && node.value.includes(`___CSS_LOADER_IMPORT___`)) + ) { + abort = true; + + return false; + } + }); + + return abort; +} + +/** + * @param {import('postcss').Declaration} decl + * @return {string} + */ +function getValue(decl) { + let { value, raws } = decl; + + if (raws && raws.value && raws.value.raw) { + value = raws.value.raw; + } + + return value; +} +/** + * @type {import('postcss').PluginCreator} + * @return {import('postcss').Plugin} + */ +function pluginCreator() { + return { + postcssPlugin: 'postcss-ordered-values', + prepare() { + const cache = new Map(); + return { + OnceExit(css) { + css.walkDecls((decl) => { + const lowerCasedProp = decl.prop.toLowerCase(); + const normalizedProp = vendorUnprefixed(lowerCasedProp); + const processor = rules.get(normalizedProp); + + if (!processor) { + return; + } + + const value = getValue(decl); + + if (cache.has(value)) { + decl.value = cache.get(value); + + return; + } + + const parsed = valueParser(value); + + if (parsed.nodes.length < 2 || shouldAbort(parsed)) { + cache.set(value, value); + + return; + } + + const result = processor(parsed); + + decl.value = result.toString(); + cache.set(value, result.toString()); + }); + }, + }; + }, + }; +} + +pluginCreator.postcss = true; +module.exports = pluginCreator; diff --git a/node_modules/postcss-ordered-values/src/lib/addSpace.js b/node_modules/postcss-ordered-values/src/lib/addSpace.js new file mode 100644 index 00000000..0e0bef9c --- /dev/null +++ b/node_modules/postcss-ordered-values/src/lib/addSpace.js @@ -0,0 +1,8 @@ +'use strict'; +/** @return {import('postcss-value-parser').SpaceNode} */ +module.exports = function addSpace() { + return /** @type import('postcss-value-parser').SpaceNode */ ({ + type: 'space', + value: ' ', + }); +}; diff --git a/node_modules/postcss-ordered-values/src/lib/getValue.js b/node_modules/postcss-ordered-values/src/lib/getValue.js new file mode 100644 index 00000000..6d94d4e2 --- /dev/null +++ b/node_modules/postcss-ordered-values/src/lib/getValue.js @@ -0,0 +1,36 @@ +'use strict'; +const { stringify } = require('postcss-value-parser'); + +/** + * @param {import('postcss-value-parser').Node[][]} values + * @return {string} + */ +module.exports = function getValue(values) { + return stringify(flatten(values)); +}; +/** + * @param {import('postcss-value-parser').Node[][]} values + * @return {import('postcss-value-parser').Node[]} + */ +function flatten(values) { + /** @type {import('postcss-value-parser').Node[]} */ + const nodes = []; + for (const [index, arg] of values.entries()) { + arg.forEach((val, idx) => { + if ( + idx === arg.length - 1 && + index === values.length - 1 && + val.type === 'space' + ) { + return; + } + nodes.push(val); + }); + + if (index !== values.length - 1) { + nodes[nodes.length - 1].type = 'div'; + nodes[nodes.length - 1].value = ','; + } + } + return nodes; +} diff --git a/node_modules/postcss-ordered-values/src/lib/joinGridValue.js b/node_modules/postcss-ordered-values/src/lib/joinGridValue.js new file mode 100644 index 00000000..4794db5d --- /dev/null +++ b/node_modules/postcss-ordered-values/src/lib/joinGridValue.js @@ -0,0 +1,8 @@ +'use strict'; +/** + * @param {string[]} grid + * @return {string} + */ +module.exports = function joinGridVal(grid) { + return grid.join(' / ').trim(); +}; diff --git a/node_modules/postcss-ordered-values/src/lib/mathfunctions.js b/node_modules/postcss-ordered-values/src/lib/mathfunctions.js new file mode 100644 index 00000000..3e63717f --- /dev/null +++ b/node_modules/postcss-ordered-values/src/lib/mathfunctions.js @@ -0,0 +1,3 @@ +'use strict'; +// All of the curently implemented math functions +module.exports = new Set(['calc', 'clamp', 'max', 'min']); diff --git a/node_modules/postcss-ordered-values/src/lib/vendorUnprefixed.js b/node_modules/postcss-ordered-values/src/lib/vendorUnprefixed.js new file mode 100644 index 00000000..69e93640 --- /dev/null +++ b/node_modules/postcss-ordered-values/src/lib/vendorUnprefixed.js @@ -0,0 +1,10 @@ +'use strict'; +/** + * @param {string} prop + * @return {string} + */ +function vendorUnprefixed(prop) { + return prop.replace(/^-\w+-/, ''); +} + +module.exports = vendorUnprefixed; diff --git a/node_modules/postcss-ordered-values/src/rules/animation.js b/node_modules/postcss-ordered-values/src/rules/animation.js new file mode 100644 index 00000000..a49dde58 --- /dev/null +++ b/node_modules/postcss-ordered-values/src/rules/animation.js @@ -0,0 +1,148 @@ +'use strict'; +const { unit } = require('postcss-value-parser'); +const { getArguments } = require('cssnano-utils'); +const addSpace = require('../lib/addSpace'); +const getValue = require('../lib/getValue'); + +// animation: [ none | ] ||