diff options
Diffstat (limited to 'vanilla/node_modules/css-tree/lib/syntax/config')
6 files changed, 203 insertions, 0 deletions
diff --git a/vanilla/node_modules/css-tree/lib/syntax/config/generator.js b/vanilla/node_modules/css-tree/lib/syntax/config/generator.js new file mode 100644 index 0000000..82e874c --- /dev/null +++ b/vanilla/node_modules/css-tree/lib/syntax/config/generator.js @@ -0,0 +1,5 @@ +import * as node from '../node/index-generate.js'; + +export default { + node +}; diff --git a/vanilla/node_modules/css-tree/lib/syntax/config/lexer.js b/vanilla/node_modules/css-tree/lib/syntax/config/lexer.js new file mode 100644 index 0000000..b479ac5 --- /dev/null +++ b/vanilla/node_modules/css-tree/lib/syntax/config/lexer.js @@ -0,0 +1,10 @@ +import { cssWideKeywords } from '../../lexer/generic-const.js'; +import definitions from '../../data.js'; +import * as node from '../node/index.js'; + +export default { + generic: true, + cssWideKeywords, + ...definitions, + node +}; diff --git a/vanilla/node_modules/css-tree/lib/syntax/config/mix.js b/vanilla/node_modules/css-tree/lib/syntax/config/mix.js new file mode 100644 index 0000000..f722ceb --- /dev/null +++ b/vanilla/node_modules/css-tree/lib/syntax/config/mix.js @@ -0,0 +1,123 @@ +function appendOrSet(a, b) { + if (typeof b === 'string' && /^\s*\|/.test(b)) { + return typeof a === 'string' + ? a + b + : b.replace(/^\s*\|\s*/, ''); + } + + return b || null; +} + +function sliceProps(obj, props) { + const result = Object.create(null); + + for (const [key, value] of Object.entries(obj)) { + if (value) { + result[key] = {}; + for (const prop of Object.keys(value)) { + if (props.includes(prop)) { + result[key][prop] = value[prop]; + } + } + } + } + + return result; +} + +export default function mix(dest, src) { + const result = { ...dest }; + + for (const [prop, value] of Object.entries(src)) { + switch (prop) { + case 'generic': + result[prop] = Boolean(value); + break; + + case 'cssWideKeywords': + result[prop] = dest[prop] + ? [...dest[prop], ...value] + : value || []; + break; + + case 'units': + result[prop] = { ...dest[prop] }; + for (const [name, patch] of Object.entries(value)) { + result[prop][name] = Array.isArray(patch) ? patch : []; + } + break; + + case 'atrules': + result[prop] = { ...dest[prop] }; + + for (const [name, atrule] of Object.entries(value)) { + const exists = result[prop][name] || {}; + const current = result[prop][name] = { + prelude: exists.prelude || null, + descriptors: { + ...exists.descriptors + } + }; + + if (!atrule) { + continue; + } + + current.prelude = atrule.prelude + ? appendOrSet(current.prelude, atrule.prelude) + : current.prelude || null; + + for (const [descriptorName, descriptorValue] of Object.entries(atrule.descriptors || {})) { + current.descriptors[descriptorName] = descriptorValue + ? appendOrSet(current.descriptors[descriptorName], descriptorValue) + : null; + } + + if (!Object.keys(current.descriptors).length) { + current.descriptors = null; + } + } + break; + + case 'types': + case 'properties': + result[prop] = { ...dest[prop] }; + for (const [name, syntax] of Object.entries(value)) { + result[prop][name] = appendOrSet(result[prop][name], syntax); + } + break; + + case 'scope': + case 'features': + result[prop] = { ...dest[prop] }; + for (const [name, props] of Object.entries(value)) { + result[prop][name] = { ...result[prop][name], ...props }; + } + break; + + case 'parseContext': + result[prop] = { + ...dest[prop], + ...value + }; + break; + + case 'atrule': + case 'pseudo': + result[prop] = { + ...dest[prop], + ...sliceProps(value, ['parse']) + }; + break; + + case 'node': + result[prop] = { + ...dest[prop], + ...sliceProps(value, ['name', 'structure', 'parse', 'generate', 'walkContext']) + }; + break; + } + } + + return result; +} diff --git a/vanilla/node_modules/css-tree/lib/syntax/config/parser-selector.js b/vanilla/node_modules/css-tree/lib/syntax/config/parser-selector.js new file mode 100644 index 0000000..c9e0ee2 --- /dev/null +++ b/vanilla/node_modules/css-tree/lib/syntax/config/parser-selector.js @@ -0,0 +1,15 @@ +import { Selector } from '../scope/index.js'; +import pseudo from '../pseudo/index.js'; +import * as node from '../node/index-parse-selector.js'; + +export default { + parseContext: { + default: 'SelectorList', + selectorList: 'SelectorList', + selector: 'Selector' + }, + scope: { Selector }, + atrule: {}, + pseudo, + node +}; diff --git a/vanilla/node_modules/css-tree/lib/syntax/config/parser.js b/vanilla/node_modules/css-tree/lib/syntax/config/parser.js new file mode 100644 index 0000000..0b455aa --- /dev/null +++ b/vanilla/node_modules/css-tree/lib/syntax/config/parser.js @@ -0,0 +1,45 @@ +import * as scope from '../scope/index.js'; +import atrule from '../atrule/index.js'; +import pseudo from '../pseudo/index.js'; +import * as node from '../node/index-parse.js'; + +export default { + parseContext: { + default: 'StyleSheet', + stylesheet: 'StyleSheet', + atrule: 'Atrule', + atrulePrelude(options) { + return this.AtrulePrelude(options.atrule ? String(options.atrule) : null); + }, + mediaQueryList: 'MediaQueryList', + mediaQuery: 'MediaQuery', + condition(options) { + return this.Condition(options.kind); + }, + rule: 'Rule', + selectorList: 'SelectorList', + selector: 'Selector', + block() { + return this.Block(true); + }, + declarationList: 'DeclarationList', + declaration: 'Declaration', + value: 'Value' + }, + features: { + supports: { + selector() { + return this.Selector(); + } + }, + container: { + style() { + return this.Declaration(); + } + } + }, + scope, + atrule, + pseudo, + node +}; diff --git a/vanilla/node_modules/css-tree/lib/syntax/config/walker.js b/vanilla/node_modules/css-tree/lib/syntax/config/walker.js new file mode 100644 index 0000000..215d024 --- /dev/null +++ b/vanilla/node_modules/css-tree/lib/syntax/config/walker.js @@ -0,0 +1,5 @@ +import * as node from '../node/index.js'; + +export default { + node +}; |
