@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.
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const index = require('../tokenizer/index.cjs');
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: processChunk
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 index = require('../tokenizer/index.cjs');
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
- index.tokenize(str, (type, start, end) =>
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);
@@ -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, index.tokenize);
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;
@@ -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: index.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 && this.isDelim(AMPERSAND)) {
77
+ if (isStyleBlock && isSelectorStart.call(this)) {
64
78
  children.push(consumeRule.call(this));
65
79
  } else {
66
80
  children.push(consumer.call(this));
@@ -3,7 +3,7 @@
3
3
  const types = require('../../tokenizer/types.cjs');
4
4
 
5
5
  const name = 'CDC';
6
- const structure = [];
6
+ const structure = {};
7
7
 
8
8
  function parse() {
9
9
  const start = this.tokenStart;
@@ -3,7 +3,7 @@
3
3
  const types = require('../../tokenizer/types.cjs');
4
4
 
5
5
  const name = 'CDO';
6
- const structure = [];
6
+ const structure = {};
7
7
 
8
8
  function parse() {
9
9
  const start = this.tokenStart;
@@ -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;