@eslint/css-tree 3.3.4 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/generator/create.cjs +8 -8
- package/cjs/lexer/prepare-tokens.cjs +5 -4
- package/cjs/parser/create.cjs +4 -3
- package/cjs/syntax/config/mix.cjs +6 -0
- package/cjs/syntax/config/parser.cjs +3 -1
- package/cjs/syntax/create.cjs +2 -2
- package/cjs/syntax/node/Block.cjs +15 -1
- package/cjs/syntax/node/CDC.cjs +1 -1
- package/cjs/syntax/node/CDO.cjs +1 -1
- package/cjs/utils/get-tokenizer.cjs +22 -0
- package/dist/csstree.esm.js +8 -8
- package/dist/csstree.js +8 -8
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/lib/generator/create.js +9 -8
- package/lib/index.d.ts +10 -7
- package/lib/lexer/prepare-tokens.js +4 -3
- package/lib/parser/create.js +4 -3
- package/lib/syntax/config/mix.js +6 -0
- package/lib/syntax/config/parser.js +3 -1
- package/lib/syntax/create.js +2 -2
- package/lib/syntax/node/Block.js +19 -1
- package/lib/syntax/node/CDC.js +1 -1
- package/lib/syntax/node/CDO.js +1 -1
- package/lib/utils/get-tokenizer.js +18 -0
- package/package.json +1 -1
package/cjs/generator/create.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const getTokenizer = require('../utils/get-tokenizer.cjs');
|
|
4
4
|
const sourceMap = require('./sourceMap.cjs');
|
|
5
5
|
const tokenBefore = require('./token-before.cjs');
|
|
6
6
|
const types = require('../tokenizer/types.cjs');
|
|
@@ -26,12 +26,6 @@ function processChildren(node, delimeter) {
|
|
|
26
26
|
node.children.forEach(this.node, this);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
function processChunk(chunk) {
|
|
30
|
-
index.tokenize(chunk, (type, start, end) => {
|
|
31
|
-
this.token(type, chunk.slice(start, end));
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
|
|
35
29
|
function createGenerator(config) {
|
|
36
30
|
const types$1 = new Map();
|
|
37
31
|
|
|
@@ -90,7 +84,13 @@ function createGenerator(config) {
|
|
|
90
84
|
node: (node) => handlers.node(node),
|
|
91
85
|
children: processChildren,
|
|
92
86
|
token: (type, value) => handlers.token(type, value),
|
|
93
|
-
tokenize:
|
|
87
|
+
tokenize: function (chunk) {
|
|
88
|
+
const tokenize = getTokenizer.getTokenizer(config);
|
|
89
|
+
|
|
90
|
+
return tokenize(chunk, (type, start, end) => {
|
|
91
|
+
this.token(type, chunk.slice(start, end));
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
94
|
};
|
|
95
95
|
|
|
96
96
|
handlers.node(node);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
const getTokenizer = require('../utils/get-tokenizer.cjs');
|
|
4
4
|
|
|
5
5
|
const astToTokens = {
|
|
6
6
|
decorator(handlers) {
|
|
@@ -29,10 +29,11 @@ const astToTokens = {
|
|
|
29
29
|
}
|
|
30
30
|
};
|
|
31
31
|
|
|
32
|
-
function stringToTokens(str) {
|
|
32
|
+
function stringToTokens(str, syntax) {
|
|
33
33
|
const tokens = [];
|
|
34
|
+
const tokenize = getTokenizer.getTokenizer(syntax);
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
tokenize(str, (type, start, end) =>
|
|
36
37
|
tokens.push({
|
|
37
38
|
type,
|
|
38
39
|
value: str.slice(start, end),
|
|
@@ -45,7 +46,7 @@ function stringToTokens(str) {
|
|
|
45
46
|
|
|
46
47
|
function prepareTokens(value, syntax) {
|
|
47
48
|
if (typeof value === 'string') {
|
|
48
|
-
return stringToTokens(value);
|
|
49
|
+
return stringToTokens(value, syntax);
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
return syntax.generate(value, astToTokens);
|
package/cjs/parser/create.cjs
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
const List = require('../utils/List.cjs');
|
|
4
4
|
const SyntaxError = require('./SyntaxError.cjs');
|
|
5
|
-
const index = require('../tokenizer/index.cjs');
|
|
6
5
|
const sequence = require('./sequence.cjs');
|
|
6
|
+
const getTokenizer = require('../utils/get-tokenizer.cjs');
|
|
7
7
|
const OffsetToLocation = require('../tokenizer/OffsetToLocation.cjs');
|
|
8
8
|
const TokenStream = require('../tokenizer/TokenStream.cjs');
|
|
9
9
|
const utils = require('../tokenizer/utils.cjs');
|
|
@@ -45,7 +45,8 @@ function processConfig(config) {
|
|
|
45
45
|
scope: Object.assign(Object.create(null), config.scope),
|
|
46
46
|
atrule: fetchParseValues(config.atrule),
|
|
47
47
|
pseudo: fetchParseValues(config.pseudo),
|
|
48
|
-
node: fetchParseValues(config.node)
|
|
48
|
+
node: fetchParseValues(config.node),
|
|
49
|
+
tokenize: getTokenizer.getTokenizer(config)
|
|
49
50
|
};
|
|
50
51
|
|
|
51
52
|
for (const [name, context] of Object.entries(config.parseContext)) {
|
|
@@ -315,7 +316,7 @@ function createParser(config) {
|
|
|
315
316
|
source = source_;
|
|
316
317
|
options = options || {};
|
|
317
318
|
|
|
318
|
-
parser.setSource(source,
|
|
319
|
+
parser.setSource(source, parser.tokenize);
|
|
319
320
|
locationMap.setSource(
|
|
320
321
|
source,
|
|
321
322
|
options.offset,
|
|
@@ -117,6 +117,12 @@ function mix(dest, src) {
|
|
|
117
117
|
case 'node':
|
|
118
118
|
result[prop] = mergeDicts(dest[prop], value, ['name', 'structure', 'parse', 'generate', 'walkContext']);
|
|
119
119
|
break;
|
|
120
|
+
|
|
121
|
+
case 'tokenize':
|
|
122
|
+
if (typeof value === 'function') {
|
|
123
|
+
result[prop] = value;
|
|
124
|
+
}
|
|
125
|
+
break;
|
|
120
126
|
}
|
|
121
127
|
}
|
|
122
128
|
|
|
@@ -4,6 +4,7 @@ const index = require('../scope/index.cjs');
|
|
|
4
4
|
const index$1 = require('../atrule/index.cjs');
|
|
5
5
|
const index$2 = require('../pseudo/index.cjs');
|
|
6
6
|
const indexParse = require('../node/index-parse.cjs');
|
|
7
|
+
const index$3 = require('../../tokenizer/index.cjs');
|
|
7
8
|
|
|
8
9
|
const config = {
|
|
9
10
|
parseContext: {
|
|
@@ -43,7 +44,8 @@ const config = {
|
|
|
43
44
|
scope: index,
|
|
44
45
|
atrule: index$1,
|
|
45
46
|
pseudo: index$2,
|
|
46
|
-
node: indexParse
|
|
47
|
+
node: indexParse,
|
|
48
|
+
tokenize: index$3.tokenize
|
|
47
49
|
};
|
|
48
50
|
|
|
49
51
|
module.exports = config;
|
package/cjs/syntax/create.cjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const index = require('../tokenizer/index.cjs');
|
|
4
3
|
const create = require('../parser/create.cjs');
|
|
5
4
|
const create$2 = require('../generator/create.cjs');
|
|
6
5
|
const create$3 = require('../convertor/create.cjs');
|
|
7
6
|
const create$1 = require('../walker/create.cjs');
|
|
8
7
|
const Lexer = require('../lexer/Lexer.cjs');
|
|
9
8
|
const mix = require('./config/mix.cjs');
|
|
9
|
+
const getTokenizer = require('../utils/get-tokenizer.cjs');
|
|
10
10
|
|
|
11
11
|
function createSyntax(config) {
|
|
12
12
|
const parse = create.createParser(config);
|
|
@@ -18,7 +18,7 @@ function createSyntax(config) {
|
|
|
18
18
|
lexer: null,
|
|
19
19
|
createLexer: config => new Lexer.Lexer(config, syntax, syntax.lexer.structure),
|
|
20
20
|
|
|
21
|
-
tokenize:
|
|
21
|
+
tokenize: getTokenizer.getTokenizer(config),
|
|
22
22
|
parse,
|
|
23
23
|
generate,
|
|
24
24
|
|
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
const types = require('../../tokenizer/types.cjs');
|
|
4
4
|
|
|
5
5
|
const AMPERSAND = 0x0026; // U+0026 AMPERSAND (&)
|
|
6
|
+
const DOT = 0x002E; // U+002E FULL STOP (.)
|
|
7
|
+
const STAR = 0x002A; // U+002A ASTERISK (*);
|
|
8
|
+
|
|
9
|
+
const selectorStarts = new Set([
|
|
10
|
+
AMPERSAND,
|
|
11
|
+
DOT,
|
|
12
|
+
STAR
|
|
13
|
+
]);
|
|
6
14
|
|
|
7
15
|
function consumeRaw() {
|
|
8
16
|
return this.Raw(null, true);
|
|
@@ -27,6 +35,12 @@ function consumeDeclaration() {
|
|
|
27
35
|
return node;
|
|
28
36
|
}
|
|
29
37
|
|
|
38
|
+
function isSelectorStart() {
|
|
39
|
+
return this.tokenType === types.Delim && selectorStarts.has(this.source.charCodeAt(this.tokenStart)) ||
|
|
40
|
+
this.tokenType === types.Hash || this.tokenType === types.LeftSquareBracket ||
|
|
41
|
+
this.tokenType === types.Colon;
|
|
42
|
+
}
|
|
43
|
+
|
|
30
44
|
const name = 'Block';
|
|
31
45
|
const walkContext = 'block';
|
|
32
46
|
const structure = {
|
|
@@ -60,7 +74,7 @@ function parse(isStyleBlock) {
|
|
|
60
74
|
break;
|
|
61
75
|
|
|
62
76
|
default:
|
|
63
|
-
if (isStyleBlock &&
|
|
77
|
+
if (isStyleBlock && isSelectorStart.call(this)) {
|
|
64
78
|
children.push(consumeRule.call(this));
|
|
65
79
|
} else {
|
|
66
80
|
children.push(consumer.call(this));
|
package/cjs/syntax/node/CDC.cjs
CHANGED
package/cjs/syntax/node/CDO.cjs
CHANGED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const index = require('../tokenizer/index.cjs');
|
|
4
|
+
|
|
5
|
+
const FUNCTION_TYPE = 'function';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Gets the tokenizer function from the configuration object or returns the default tokenizer
|
|
9
|
+
*
|
|
10
|
+
* @param config Configuration object
|
|
11
|
+
* @returns Corresponding tokenizer function
|
|
12
|
+
*/
|
|
13
|
+
function getTokenizer(config) {
|
|
14
|
+
if (config && typeof config.tokenize === FUNCTION_TYPE) {
|
|
15
|
+
return config.tokenize;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Fallback to the default tokenizer
|
|
19
|
+
return index.tokenize;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
exports.getTokenizer = getTokenizer;
|