@tbela99/css-parser 1.0.0 → 1.1.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.
Files changed (86) hide show
  1. package/CHANGELOG.md +265 -0
  2. package/README.md +16 -11
  3. package/dist/index-umd-web.js +3613 -1829
  4. package/dist/index.cjs +3611 -1827
  5. package/dist/index.d.ts +160 -50
  6. package/dist/lib/ast/expand.js +2 -1
  7. package/dist/lib/ast/features/calc.js +12 -1
  8. package/dist/lib/ast/features/inlinecssvariables.js +47 -24
  9. package/dist/lib/ast/features/prefix.js +117 -86
  10. package/dist/lib/ast/features/shorthand.js +29 -6
  11. package/dist/lib/ast/features/transform.js +10 -3
  12. package/dist/lib/ast/features/type.js +7 -0
  13. package/dist/lib/ast/math/expression.js +7 -1
  14. package/dist/lib/ast/math/math.js +6 -0
  15. package/dist/lib/ast/minify.js +165 -77
  16. package/dist/lib/ast/transform/compute.js +1 -0
  17. package/dist/lib/ast/transform/matrix.js +1 -0
  18. package/dist/lib/ast/types.js +17 -15
  19. package/dist/lib/ast/walk.js +33 -7
  20. package/dist/lib/fs/resolve.js +10 -0
  21. package/dist/lib/parser/declaration/list.js +48 -45
  22. package/dist/lib/parser/declaration/map.js +1 -0
  23. package/dist/lib/parser/declaration/set.js +2 -1
  24. package/dist/lib/parser/parse.js +364 -276
  25. package/dist/lib/parser/tokenize.js +147 -72
  26. package/dist/lib/parser/utils/declaration.js +4 -3
  27. package/dist/lib/parser/utils/type.js +2 -1
  28. package/dist/lib/renderer/color/a98rgb.js +2 -1
  29. package/dist/lib/renderer/color/color-mix.js +10 -7
  30. package/dist/lib/renderer/color/color.js +171 -153
  31. package/dist/lib/renderer/color/hex.js +2 -1
  32. package/dist/lib/renderer/color/hsl.js +2 -1
  33. package/dist/lib/renderer/color/hwb.js +2 -1
  34. package/dist/lib/renderer/color/lab.js +2 -1
  35. package/dist/lib/renderer/color/lch.js +2 -1
  36. package/dist/lib/renderer/color/oklab.js +2 -1
  37. package/dist/lib/renderer/color/oklch.js +2 -1
  38. package/dist/lib/renderer/color/p3.js +2 -1
  39. package/dist/lib/renderer/color/rec2020.js +2 -1
  40. package/dist/lib/renderer/color/relativecolor.js +17 -11
  41. package/dist/lib/renderer/color/rgb.js +4 -3
  42. package/dist/lib/renderer/color/srgb.js +18 -17
  43. package/dist/lib/renderer/color/utils/components.js +6 -5
  44. package/dist/lib/renderer/color/utils/constants.js +47 -3
  45. package/dist/lib/renderer/color/xyz.js +2 -1
  46. package/dist/lib/renderer/color/xyzd50.js +2 -1
  47. package/dist/lib/renderer/render.js +48 -20
  48. package/dist/lib/syntax/syntax.js +253 -140
  49. package/dist/lib/validation/at-rules/container.js +75 -97
  50. package/dist/lib/validation/at-rules/counter-style.js +9 -8
  51. package/dist/lib/validation/at-rules/custom-media.js +13 -15
  52. package/dist/lib/validation/at-rules/document.js +22 -27
  53. package/dist/lib/validation/at-rules/font-feature-values.js +8 -8
  54. package/dist/lib/validation/at-rules/import.js +30 -81
  55. package/dist/lib/validation/at-rules/keyframes.js +18 -22
  56. package/dist/lib/validation/at-rules/layer.js +5 -5
  57. package/dist/lib/validation/at-rules/media.js +42 -52
  58. package/dist/lib/validation/at-rules/namespace.js +19 -23
  59. package/dist/lib/validation/at-rules/page-margin-box.js +15 -18
  60. package/dist/lib/validation/at-rules/page.js +8 -7
  61. package/dist/lib/validation/at-rules/supports.js +73 -82
  62. package/dist/lib/validation/at-rules/when.js +32 -36
  63. package/dist/lib/validation/atrule.js +15 -14
  64. package/dist/lib/validation/config.js +24 -1
  65. package/dist/lib/validation/config.json.js +563 -63
  66. package/dist/lib/validation/parser/parse.js +196 -185
  67. package/dist/lib/validation/parser/types.js +1 -1
  68. package/dist/lib/validation/selector.js +3 -3
  69. package/dist/lib/validation/syntax.js +828 -0
  70. package/dist/lib/validation/syntaxes/complex-selector-list.js +10 -11
  71. package/dist/lib/validation/syntaxes/complex-selector.js +10 -11
  72. package/dist/lib/validation/syntaxes/compound-selector.js +40 -50
  73. package/dist/lib/validation/syntaxes/family-name.js +9 -8
  74. package/dist/lib/validation/syntaxes/keyframe-block-list.js +4 -3
  75. package/dist/lib/validation/syntaxes/keyframe-selector.js +15 -18
  76. package/dist/lib/validation/syntaxes/layer-name.js +6 -5
  77. package/dist/lib/validation/syntaxes/relative-selector-list.js +7 -6
  78. package/dist/lib/validation/syntaxes/relative-selector.js +2 -1
  79. package/dist/lib/validation/syntaxes/url.js +18 -22
  80. package/dist/lib/validation/utils/list.js +2 -1
  81. package/dist/lib/validation/utils/whitespace.js +2 -1
  82. package/dist/node/index.js +4 -2
  83. package/dist/node/load.js +5 -0
  84. package/dist/web/index.js +4 -2
  85. package/dist/web/load.js +5 -0
  86. package/package.json +12 -11
@@ -2,11 +2,42 @@ import { EnumToken } from '../ast/types.js';
2
2
  import '../ast/minify.js';
3
3
  import '../ast/walk.js';
4
4
  import './parse.js';
5
- import { isWhiteSpace, isNewLine, isDigit, isNonPrintable } from '../syntax/syntax.js';
6
5
  import './utils/config.js';
6
+ import { isWhiteSpace, isIdentStart, isIdent, isNewLine, isDigit, isNonPrintable } from '../syntax/syntax.js';
7
7
  import '../renderer/color/utils/constants.js';
8
8
  import '../renderer/sourcemap/lib/encode.js';
9
9
 
10
+ var TokenMap;
11
+ (function (TokenMap) {
12
+ TokenMap[TokenMap["SLASH"] = 47] = "SLASH";
13
+ TokenMap[TokenMap["AMPERSAND"] = 38] = "AMPERSAND";
14
+ TokenMap[TokenMap["LOWERTHAN"] = 60] = "LOWERTHAN";
15
+ TokenMap[TokenMap["HASH"] = 35] = "HASH";
16
+ TokenMap[TokenMap["REVERSE_SOLIDUS"] = 92] = "REVERSE_SOLIDUS";
17
+ TokenMap[TokenMap["DOUBLE_QUOTE"] = 34] = "DOUBLE_QUOTE";
18
+ TokenMap[TokenMap["SINGLE_QUOTE"] = 39] = "SINGLE_QUOTE";
19
+ // ^
20
+ TokenMap[TokenMap["CIRCUMFLEX"] = 94] = "CIRCUMFLEX";
21
+ TokenMap[TokenMap["TILDA"] = 126] = "TILDA";
22
+ TokenMap[TokenMap["PIPE"] = 124] = "PIPE";
23
+ TokenMap[TokenMap["DOLLAR"] = 36] = "DOLLAR";
24
+ TokenMap[TokenMap["GREATER_THAN"] = 62] = "GREATER_THAN";
25
+ TokenMap[TokenMap["DOT"] = 46] = "DOT";
26
+ TokenMap[TokenMap["PLUS"] = 43] = "PLUS";
27
+ TokenMap[TokenMap["STAR"] = 42] = "STAR";
28
+ TokenMap[TokenMap["COLON"] = 58] = "COLON";
29
+ TokenMap[TokenMap["COMMA"] = 44] = "COMMA";
30
+ TokenMap[TokenMap["EQUAL"] = 61] = "EQUAL";
31
+ TokenMap[TokenMap["CLOSE_PAREN"] = 41] = "CLOSE_PAREN";
32
+ TokenMap[TokenMap["OPEN_PAREN"] = 40] = "OPEN_PAREN";
33
+ TokenMap[TokenMap["OPEN_BRACKET"] = 91] = "OPEN_BRACKET";
34
+ TokenMap[TokenMap["CLOSE_BRACKET"] = 93] = "CLOSE_BRACKET";
35
+ TokenMap[TokenMap["OPEN_CURLY_BRACE"] = 123] = "OPEN_CURLY_BRACE";
36
+ TokenMap[TokenMap["CLOSE_CURLY_BRACE"] = 125] = "CLOSE_CURLY_BRACE";
37
+ TokenMap[TokenMap["SEMICOLON"] = 59] = "SEMICOLON";
38
+ TokenMap[TokenMap["EXCLAMATION"] = 33] = "EXCLAMATION";
39
+ TokenMap[TokenMap["AT"] = 64] = "AT";
40
+ })(TokenMap || (TokenMap = {}));
10
41
  function consumeWhiteSpace(parseInfo) {
11
42
  let count = 0;
12
43
  while (isWhiteSpace(parseInfo.stream.charAt(count + parseInfo.currentPosition.ind + 1).charCodeAt(0))) {
@@ -18,14 +49,18 @@ function consumeWhiteSpace(parseInfo) {
18
49
  function pushToken(token, parseInfo, hint) {
19
50
  const result = {
20
51
  token,
21
- len: parseInfo.currentPosition.ind - parseInfo.position.ind,
52
+ len: parseInfo.currentPosition.ind - parseInfo.position.ind - 1,
22
53
  hint,
23
- position: { ...parseInfo.position },
54
+ sta: { ...parseInfo.position },
55
+ end: { ...parseInfo.currentPosition },
24
56
  bytesIn: parseInfo.currentPosition.ind + 1
25
57
  };
26
58
  parseInfo.position.ind = parseInfo.currentPosition.ind;
27
59
  parseInfo.position.lin = parseInfo.currentPosition.lin;
28
60
  parseInfo.position.col = Math.max(parseInfo.currentPosition.col, 1);
61
+ if (result.end.col == 0) {
62
+ result.end.col = 1;
63
+ }
29
64
  return result;
30
65
  }
31
66
  function* consumeString(quoteStr, buffer, parseInfo) {
@@ -108,6 +143,9 @@ function* consumeString(quoteStr, buffer, parseInfo) {
108
143
  yield pushToken(buffer + quote, parseInfo, EnumToken.StringTokenType);
109
144
  }
110
145
  }
146
+ function match(parseInfo, input) {
147
+ return parseInfo.stream.slice(parseInfo.currentPosition.ind + 1, parseInfo.currentPosition.ind + input.length + 1) == input;
148
+ }
111
149
  function peek(parseInfo, count = 1) {
112
150
  if (count == 1) {
113
151
  return parseInfo.stream.charAt(parseInfo.currentPosition.ind + 1);
@@ -154,37 +192,40 @@ function* tokenize(stream) {
154
192
  };
155
193
  let value;
156
194
  let buffer = '';
195
+ let charCode;
157
196
  while (value = next(parseInfo)) {
158
- if (isWhiteSpace(value.charCodeAt(0))) {
197
+ charCode = value.charCodeAt(0);
198
+ if (isWhiteSpace(charCode)) {
159
199
  if (buffer.length > 0) {
160
200
  yield pushToken(buffer, parseInfo);
161
201
  buffer = '';
162
202
  }
163
203
  while (value = next(parseInfo)) {
164
- if (!isWhiteSpace(value.charCodeAt(0))) {
204
+ charCode = value.charCodeAt(0);
205
+ if (!isWhiteSpace(charCode)) {
165
206
  break;
166
207
  }
167
208
  }
168
209
  yield pushToken('', parseInfo, EnumToken.WhitespaceTokenType);
169
210
  buffer = '';
170
211
  }
171
- switch (value) {
172
- case '/':
212
+ switch (charCode) {
213
+ case 47 /* TokenMap.SLASH */:
173
214
  if (buffer.length > 0) {
174
215
  yield pushToken(buffer, parseInfo);
175
216
  buffer = '';
176
- if (peek(parseInfo) != '*') {
217
+ if (!match(parseInfo, '*')) {
177
218
  yield pushToken(value, parseInfo);
178
219
  break;
179
220
  }
180
221
  }
181
222
  buffer += value;
182
- if (peek(parseInfo) == '*') {
223
+ if (match(parseInfo, '*')) {
183
224
  buffer += next(parseInfo);
184
225
  while (value = next(parseInfo)) {
185
226
  if (value == '*') {
186
227
  buffer += value;
187
- if (peek(parseInfo) == '/') {
228
+ if (match(parseInfo, '/')) {
188
229
  yield pushToken(buffer + next(parseInfo), parseInfo, EnumToken.CommentTokenType);
189
230
  buffer = '';
190
231
  break;
@@ -200,29 +241,29 @@ function* tokenize(stream) {
200
241
  }
201
242
  }
202
243
  break;
203
- case '&':
244
+ case 38 /* TokenMap.AMPERSAND */:
204
245
  if (buffer.length > 0) {
205
246
  yield pushToken(buffer, parseInfo);
206
247
  buffer = '';
207
248
  }
208
249
  yield pushToken(value, parseInfo);
209
250
  break;
210
- case '<':
251
+ case 60 /* TokenMap.LOWERTHAN */:
211
252
  if (buffer.length > 0) {
212
253
  yield pushToken(buffer, parseInfo);
213
254
  buffer = '';
214
255
  }
215
- if (peek(parseInfo) == '=') {
256
+ if (match(parseInfo, '=')) {
216
257
  yield pushToken('', parseInfo, EnumToken.LteTokenType);
217
258
  next(parseInfo);
218
259
  break;
219
260
  }
220
261
  buffer += value;
221
- if (peek(parseInfo, 3) == '!--') {
262
+ if (match(parseInfo, '!--')) {
222
263
  buffer += next(parseInfo, 3);
223
264
  while (value = next(parseInfo)) {
224
265
  buffer += value;
225
- if (value == '-' && peek(parseInfo, 2) == '->') {
266
+ if (value == '-' && match(parseInfo, '->')) {
226
267
  break;
227
268
  }
228
269
  }
@@ -235,14 +276,14 @@ function* tokenize(stream) {
235
276
  buffer = '';
236
277
  }
237
278
  break;
238
- case '#':
279
+ case 35 /* TokenMap.HASH */:
239
280
  if (buffer.length > 0) {
240
281
  yield pushToken(buffer, parseInfo);
241
282
  buffer = '';
242
283
  }
243
284
  buffer += value;
244
285
  break;
245
- case '\\':
286
+ case 92 /* TokenMap.REVERSE_SOLIDUS */:
246
287
  // EOF
247
288
  if (!(value = next(parseInfo))) {
248
289
  // end of stream ignore \\
@@ -254,25 +295,25 @@ function* tokenize(stream) {
254
295
  }
255
296
  buffer += prev(parseInfo) + value;
256
297
  break;
257
- case '"':
258
- case "'":
298
+ case 39 /* TokenMap.SINGLE_QUOTE */:
299
+ case 34 /* TokenMap.DOUBLE_QUOTE */:
259
300
  yield* consumeString(value, buffer, parseInfo);
260
301
  buffer = '';
261
302
  break;
262
- case '^':
263
- case '~':
264
- case '|':
265
- case '$':
303
+ case 94 /* TokenMap.CIRCUMFLEX */:
304
+ case 126 /* TokenMap.TILDA */:
305
+ case 124 /* TokenMap.PIPE */:
306
+ case 36 /* TokenMap.DOLLAR */:
266
307
  if (buffer.length > 0) {
267
308
  yield pushToken(buffer, parseInfo);
268
309
  buffer = '';
269
310
  }
270
- if (value == '|') {
271
- if (peek(parseInfo) == '|') {
311
+ if (charCode == 124 /* TokenMap.PIPE */) {
312
+ if (match(parseInfo, '|')) {
272
313
  next(parseInfo);
273
314
  yield pushToken('', parseInfo, EnumToken.ColumnCombinatorTokenType);
274
315
  }
275
- else if (peek(parseInfo) == '=') {
316
+ else if (match(parseInfo, '=')) {
276
317
  buffer += next(parseInfo);
277
318
  yield pushToken(buffer, parseInfo);
278
319
  }
@@ -280,7 +321,7 @@ function* tokenize(stream) {
280
321
  yield pushToken('|', parseInfo);
281
322
  }
282
323
  buffer = '';
283
- break;
324
+ continue;
284
325
  }
285
326
  if (buffer.length > 0) {
286
327
  yield pushToken(buffer, parseInfo);
@@ -296,19 +337,19 @@ function* tokenize(stream) {
296
337
  // ^=
297
338
  // $=
298
339
  // |=
299
- if (peek(parseInfo) == '=') {
340
+ if (match(parseInfo, '=')) {
300
341
  next(parseInfo);
301
- switch (buffer.charAt(0)) {
302
- case '~':
342
+ switch (buffer.charCodeAt(0)) {
343
+ case 126 /* TokenMap.TILDA */:
303
344
  yield pushToken(buffer, parseInfo, EnumToken.IncludeMatchTokenType);
304
345
  break;
305
- case '^':
346
+ case 94 /* TokenMap.CIRCUMFLEX */:
306
347
  yield pushToken(buffer, parseInfo, EnumToken.StartMatchTokenType);
307
348
  break;
308
- case '$':
349
+ case 36 /* TokenMap.DOLLAR */:
309
350
  yield pushToken(buffer, parseInfo, EnumToken.EndMatchTokenType);
310
351
  break;
311
- case '|':
352
+ case 124 /* TokenMap.PIPE */:
312
353
  yield pushToken(buffer, parseInfo, EnumToken.DashMatchTokenType);
313
354
  break;
314
355
  }
@@ -318,12 +359,12 @@ function* tokenize(stream) {
318
359
  yield pushToken(buffer, parseInfo);
319
360
  buffer = '';
320
361
  break;
321
- case '>':
362
+ case 62 /* TokenMap.GREATER_THAN */:
322
363
  if (buffer !== '') {
323
364
  yield pushToken(buffer, parseInfo);
324
365
  buffer = '';
325
366
  }
326
- if (peek(parseInfo) == '=') {
367
+ if (match(parseInfo, '=')) {
327
368
  yield pushToken('', parseInfo, EnumToken.GteTokenType);
328
369
  next(parseInfo);
329
370
  }
@@ -332,7 +373,7 @@ function* tokenize(stream) {
332
373
  }
333
374
  consumeWhiteSpace(parseInfo);
334
375
  break;
335
- case '.':
376
+ case 46 /* TokenMap.DOT */:
336
377
  const codepoint = peek(parseInfo).charCodeAt(0);
337
378
  if (!isDigit(codepoint) && buffer !== '') {
338
379
  yield pushToken(buffer, parseInfo);
@@ -341,11 +382,11 @@ function* tokenize(stream) {
341
382
  }
342
383
  buffer += value;
343
384
  break;
344
- case '+':
345
- case '*':
346
- case ':':
347
- case ',':
348
- case '=':
385
+ case 58 /* TokenMap.COLON */:
386
+ case 43 /* TokenMap.PLUS */:
387
+ case 42 /* TokenMap.STAR */:
388
+ case 44 /* TokenMap.COMMA */:
389
+ case 61 /* TokenMap.EQUAL */:
349
390
  if (buffer.length > 0 && buffer != ':') {
350
391
  yield pushToken(buffer, parseInfo);
351
392
  buffer = '';
@@ -374,14 +415,14 @@ function* tokenize(stream) {
374
415
  next(parseInfo);
375
416
  }
376
417
  break;
377
- case ')':
418
+ case 41 /* TokenMap.CLOSE_PAREN */:
378
419
  if (buffer.length > 0) {
379
420
  yield pushToken(buffer, parseInfo);
380
421
  buffer = '';
381
422
  }
382
423
  yield pushToken('', parseInfo, EnumToken.EndParensTokenType);
383
424
  break;
384
- case '(':
425
+ case 40 /* TokenMap.OPEN_PAREN */:
385
426
  if (buffer.length == 0) {
386
427
  yield pushToken(value, parseInfo);
387
428
  break;
@@ -393,7 +434,7 @@ function* tokenize(stream) {
393
434
  buffer = '';
394
435
  consumeWhiteSpace(parseInfo);
395
436
  value = peek(parseInfo);
396
- let cp;
437
+ // let cp: number;
397
438
  let whitespace = '';
398
439
  let hasWhiteSpace = false;
399
440
  let errorState = false;
@@ -403,11 +444,11 @@ function* tokenize(stream) {
403
444
  let hasNewLine = false;
404
445
  buffer = next(parseInfo);
405
446
  while (value = next(parseInfo)) {
406
- cp = value.charCodeAt(0);
447
+ charCode = value.charCodeAt(0);
407
448
  // consume an invalid string
408
449
  if (inquote) {
409
450
  buffer += value;
410
- if (isNewLine(cp)) {
451
+ if (isNewLine(charCode)) {
411
452
  hasNewLine = true;
412
453
  while (value = next(parseInfo)) {
413
454
  buffer += value;
@@ -421,10 +462,10 @@ function* tokenize(stream) {
421
462
  buffer = '';
422
463
  break;
423
464
  }
424
- cp = value.charCodeAt(0);
465
+ charCode = value.charCodeAt(0);
425
466
  }
426
467
  // '\\'
427
- if (cp == 0x5c) {
468
+ if (charCode == 0x5c) {
428
469
  buffer += next(parseInfo);
429
470
  }
430
471
  else if (value == quote) {
@@ -433,7 +474,7 @@ function* tokenize(stream) {
433
474
  continue;
434
475
  }
435
476
  if (!inquote) {
436
- if (isWhiteSpace(cp)) {
477
+ if (isWhiteSpace(charCode)) {
437
478
  whitespace += value;
438
479
  while (value = peek(parseInfo)) {
439
480
  hasWhiteSpace = true;
@@ -449,21 +490,21 @@ function* tokenize(stream) {
449
490
  break;
450
491
  }
451
492
  }
452
- cp = value.charCodeAt(0);
493
+ charCode = value.charCodeAt(0);
453
494
  // ')'
454
- if (cp == 0x29) {
495
+ if (charCode == 0x29) {
455
496
  yield pushToken(buffer, parseInfo, hasNewLine ? EnumToken.BadStringTokenType : EnumToken.StringTokenType);
456
497
  yield pushToken('', parseInfo, EnumToken.EndParensTokenType);
457
498
  buffer = '';
458
499
  break;
459
500
  }
460
501
  while (value = next(parseInfo)) {
461
- cp = value.charCodeAt(0);
462
- if (cp == 0x5c) {
502
+ charCode = value.charCodeAt(0);
503
+ if (charCode == 0x5c) {
463
504
  buffer += value + next(parseInfo);
464
505
  continue;
465
506
  }
466
- if (cp == 0x29) {
507
+ if (charCode == 0x29) {
467
508
  yield pushToken(buffer, parseInfo, EnumToken.BadStringTokenType);
468
509
  yield pushToken('', parseInfo, EnumToken.EndParensTokenType);
469
510
  buffer = '';
@@ -484,15 +525,15 @@ function* tokenize(stream) {
484
525
  else {
485
526
  buffer = '';
486
527
  while (value = next(parseInfo)) {
487
- cp = value.charCodeAt(0);
528
+ charCode = value.charCodeAt(0);
488
529
  // ')'
489
- if (cp == 0x29) {
530
+ if (charCode == 0x29) {
490
531
  yield pushToken(buffer, parseInfo, EnumToken.UrlTokenTokenType);
491
532
  yield pushToken('', parseInfo, EnumToken.EndParensTokenType);
492
533
  buffer = '';
493
534
  break;
494
535
  }
495
- if (isWhiteSpace(cp)) {
536
+ if (isWhiteSpace(charCode)) {
496
537
  hasWhiteSpace = true;
497
538
  whitespace = value;
498
539
  while (isWhiteSpace(peek(parseInfo)?.charCodeAt(0))) {
@@ -500,26 +541,26 @@ function* tokenize(stream) {
500
541
  }
501
542
  continue;
502
543
  }
503
- if (isNonPrintable(cp) ||
544
+ if (isNonPrintable(charCode) ||
504
545
  // '"'
505
- cp == 0x22 ||
546
+ charCode == 0x22 ||
506
547
  // "'"
507
- cp == 0x27 ||
548
+ charCode == 0x27 ||
508
549
  // \('
509
- cp == 0x28 ||
550
+ charCode == 0x28 ||
510
551
  hasWhiteSpace) {
511
552
  errorState = true;
512
553
  }
513
554
  if (errorState) {
514
555
  buffer += whitespace + value;
515
556
  while (value = peek(parseInfo)) {
516
- cp = value.charCodeAt(0);
517
- if (cp == 0x5c) {
557
+ charCode = value.charCodeAt(0);
558
+ if (charCode == 0x5c) {
518
559
  buffer += next(parseInfo, 2);
519
560
  continue;
520
561
  }
521
562
  // ')'
522
- if (cp == 0x29) {
563
+ if (charCode == 0x29) {
523
564
  break;
524
565
  }
525
566
  buffer += next(parseInfo);
@@ -541,23 +582,23 @@ function* tokenize(stream) {
541
582
  yield pushToken(buffer, parseInfo);
542
583
  buffer = '';
543
584
  break;
544
- case '[':
545
- case ']':
546
- case '{':
547
- case '}':
548
- case ';':
585
+ case 91 /* TokenMap.OPEN_BRACKET */:
586
+ case 93 /* TokenMap.CLOSE_BRACKET */:
587
+ case 123 /* TokenMap.OPEN_CURLY_BRACE */:
588
+ case 125 /* TokenMap.CLOSE_CURLY_BRACE */:
589
+ case 59 /* TokenMap.SEMICOLON */:
549
590
  if (buffer.length > 0) {
550
591
  yield pushToken(buffer, parseInfo);
551
592
  buffer = '';
552
593
  }
553
594
  yield pushToken(value, parseInfo);
554
595
  break;
555
- case '!':
596
+ case 33 /* TokenMap.EXCLAMATION */:
556
597
  if (buffer.length > 0) {
557
598
  yield pushToken(buffer, parseInfo);
558
599
  buffer = '';
559
600
  }
560
- if (peek(parseInfo, 9) == 'important') {
601
+ if (match(parseInfo, 'important')) {
561
602
  yield pushToken('', parseInfo, EnumToken.ImportantTokenType);
562
603
  next(parseInfo, 9);
563
604
  buffer = '';
@@ -565,15 +606,49 @@ function* tokenize(stream) {
565
606
  }
566
607
  buffer = '!';
567
608
  break;
609
+ case 64 /* TokenMap.AT */:
610
+ if (buffer.length > 0) {
611
+ yield pushToken(buffer, parseInfo);
612
+ buffer = '';
613
+ }
614
+ buffer = value;
615
+ {
616
+ let val = peek(parseInfo);
617
+ if (val == '-' || isIdentStart(val.charCodeAt(0))) {
618
+ buffer = next(parseInfo);
619
+ val = peek(parseInfo);
620
+ while (isIdent(val) || val == '-') {
621
+ buffer += next(parseInfo);
622
+ val = peek(parseInfo);
623
+ }
624
+ yield pushToken(buffer, parseInfo, EnumToken.AtRuleTokenType);
625
+ buffer = '';
626
+ }
627
+ }
628
+ break;
568
629
  default:
569
630
  buffer += value;
631
+ if (buffer.length == 1) {
632
+ if (buffer == 'h') {
633
+ if (match(parseInfo, 'ttp://') || match(parseInfo, 'ttps://')) {
634
+ let val = peek(parseInfo);
635
+ while (val != ')' && val != ';' && !isWhiteSpace(val.charCodeAt(0))) {
636
+ buffer += next(parseInfo);
637
+ val = peek(parseInfo);
638
+ }
639
+ yield pushToken(buffer, parseInfo);
640
+ buffer = '';
641
+ break;
642
+ }
643
+ }
644
+ }
570
645
  break;
571
646
  }
572
647
  }
573
648
  if (buffer.length > 0) {
574
649
  yield pushToken(buffer, parseInfo);
575
650
  }
576
- // yield pushToken('', EnumToken.EOFTokenType);
651
+ yield pushToken('', parseInfo, EnumToken.EOFTokenType);
577
652
  }
578
653
 
579
654
  export { tokenize };
@@ -2,12 +2,13 @@ import { EnumToken } from '../../ast/types.js';
2
2
  import '../../ast/minify.js';
3
3
  import { walkValues } from '../../ast/walk.js';
4
4
  import '../parse.js';
5
- import { isWhiteSpace } from '../../syntax/syntax.js';
5
+ import '../tokenize.js';
6
6
  import './config.js';
7
+ import { isWhiteSpace } from '../../syntax/syntax.js';
7
8
  import '../../renderer/color/utils/constants.js';
8
9
  import '../../renderer/sourcemap/lib/encode.js';
9
10
 
10
- function parseDeclarationNode(node, errors, src, position) {
11
+ function parseDeclarationNode(node, errors, location) {
11
12
  while (node.val[0]?.typ == EnumToken.WhitespaceTokenType) {
12
13
  node.val.shift();
13
14
  }
@@ -15,7 +16,7 @@ function parseDeclarationNode(node, errors, src, position) {
15
16
  errors.push({
16
17
  action: 'drop',
17
18
  message: 'doParse: invalid declaration',
18
- location: { src, ...position }
19
+ location
19
20
  });
20
21
  return null;
21
22
  }
@@ -2,8 +2,9 @@ import { EnumToken } from '../../ast/types.js';
2
2
  import '../../ast/minify.js';
3
3
  import '../../ast/walk.js';
4
4
  import '../parse.js';
5
- import { mathFuncs } from '../../syntax/syntax.js';
5
+ import '../tokenize.js';
6
6
  import './config.js';
7
+ import { mathFuncs } from '../../syntax/syntax.js';
7
8
  import '../../renderer/color/utils/constants.js';
8
9
  import '../../renderer/sourcemap/lib/encode.js';
9
10
 
@@ -5,9 +5,10 @@ import '../../ast/types.js';
5
5
  import '../../ast/minify.js';
6
6
  import '../../ast/walk.js';
7
7
  import '../../parser/parse.js';
8
+ import '../../parser/tokenize.js';
9
+ import '../../parser/utils/config.js';
8
10
  import { srgb2xyz } from './xyz.js';
9
11
  import '../sourcemap/lib/encode.js';
10
- import '../../parser/utils/config.js';
11
12
 
12
13
  function a98rgb2srgbvalues(r, g, b, a = null) {
13
14
  // @ts-ignore
@@ -2,11 +2,12 @@ import { EnumToken } from '../../ast/types.js';
2
2
  import '../../ast/minify.js';
3
3
  import '../../ast/walk.js';
4
4
  import '../../parser/parse.js';
5
- import { isRectangularOrthogonalColorspace, isPolarColorspace } from '../../syntax/syntax.js';
5
+ import '../../parser/tokenize.js';
6
6
  import '../../parser/utils/config.js';
7
+ import { isRectangularOrthogonalColorspace, isPolarColorspace } from '../../syntax/syntax.js';
7
8
  import { getNumber } from './color.js';
8
9
  import { srgb2rgb } from './rgb.js';
9
- import './utils/constants.js';
10
+ import { ColorKind } from './utils/constants.js';
10
11
  import { getComponents } from './utils/components.js';
11
12
  import { srgb2hwb } from './hwb.js';
12
13
  import { srgb2hsl } from './hsl.js';
@@ -229,14 +230,16 @@ function colorMix(colorSpace, hueInterpolationMethod, color1, percentage1, color
229
230
  return null;
230
231
  }
231
232
  const lchSpaces = ['lch', 'oklch'];
233
+ const colorSpace1 = ColorKind[color1.kin].toLowerCase().replaceAll('_', '-');
234
+ const colorSpace2 = ColorKind[color2.kin].toLowerCase().replaceAll('_', '-');
232
235
  // powerless
233
- if (lchSpaces.includes(color1.kin) || lchSpaces.includes(colorSpace.val)) {
236
+ if (lchSpaces.includes(colorSpace1) || lchSpaces.includes(colorSpace.val)) {
234
237
  if ((components1[2].typ == EnumToken.IdenTokenType && components1[2].val == 'none') || values1[2] == 0) {
235
238
  values1[2] = values2[2];
236
239
  }
237
240
  }
238
241
  // powerless
239
- if (lchSpaces.includes(color1.kin) || lchSpaces.includes(colorSpace.val)) {
242
+ if (lchSpaces.includes(colorSpace2) || lchSpaces.includes(colorSpace.val)) {
240
243
  if ((components2[2].typ == EnumToken.IdenTokenType && components2[2].val == 'none') || values2[2] == 0) {
241
244
  values2[2] = values1[2];
242
245
  }
@@ -276,7 +279,7 @@ function colorMix(colorSpace, hueInterpolationMethod, color1, percentage1, color
276
279
  val: String(v)
277
280
  };
278
281
  }),
279
- kin: 'lch'
282
+ kin: ColorKind.LCH
280
283
  };
281
284
  case 'srgb':
282
285
  case 'srgb-linear':
@@ -287,7 +290,7 @@ function colorMix(colorSpace, hueInterpolationMethod, color1, percentage1, color
287
290
  typ: EnumToken.ColorTokenType,
288
291
  val: 'color',
289
292
  chi: calculate(),
290
- kin: 'color',
293
+ kin: ColorKind.COLOR,
291
294
  cal: 'col'
292
295
  };
293
296
  case 'rgb':
@@ -326,7 +329,7 @@ function colorMix(colorSpace, hueInterpolationMethod, color1, percentage1, color
326
329
  typ: EnumToken.ColorTokenType,
327
330
  val: colorSpace.val,
328
331
  chi: calculate().slice(1),
329
- kin: colorSpace.val
332
+ kin: ColorKind[colorSpace.val.toLowerCase().replaceAll('-', '_')]
330
333
  };
331
334
  if (colorSpace.val == 'hsl' || colorSpace.val == 'hwb') {
332
335
  // @ts-ignore