@tbela99/css-parser 1.3.3 → 1.3.4

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 (46) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +20 -17
  3. package/dist/index-umd-web.js +1031 -571
  4. package/dist/index.cjs +1031 -566
  5. package/dist/index.d.ts +247 -171
  6. package/dist/lib/ast/expand.js +5 -10
  7. package/dist/lib/ast/features/calc.js +3 -2
  8. package/dist/lib/ast/features/inlinecssvariables.js +5 -3
  9. package/dist/lib/ast/features/prefix.js +1 -1
  10. package/dist/lib/ast/features/shorthand.js +1 -0
  11. package/dist/lib/ast/features/transform.js +13 -19
  12. package/dist/lib/ast/minify.js +5 -2
  13. package/dist/lib/ast/transform/compute.js +2 -4
  14. package/dist/lib/ast/transform/matrix.js +20 -20
  15. package/dist/lib/ast/transform/minify.js +105 -12
  16. package/dist/lib/ast/transform/rotate.js +11 -11
  17. package/dist/lib/ast/transform/scale.js +6 -6
  18. package/dist/lib/ast/transform/skew.js +4 -4
  19. package/dist/lib/ast/transform/translate.js +3 -3
  20. package/dist/lib/ast/transform/utils.js +30 -37
  21. package/dist/lib/ast/types.js +14 -2
  22. package/dist/lib/ast/walk.js +61 -49
  23. package/dist/lib/fs/resolve.js +6 -3
  24. package/dist/lib/parser/declaration/list.js +3 -1
  25. package/dist/lib/parser/parse.js +345 -305
  26. package/dist/lib/parser/tokenize.js +11 -13
  27. package/dist/lib/renderer/render.js +2 -2
  28. package/dist/lib/syntax/syntax.js +36 -18
  29. package/dist/lib/validation/at-rules/container.js +11 -0
  30. package/dist/lib/validation/at-rules/counter-style.js +11 -0
  31. package/dist/lib/validation/at-rules/font-feature-values.js +11 -0
  32. package/dist/lib/validation/at-rules/keyframes.js +11 -0
  33. package/dist/lib/validation/at-rules/layer.js +11 -0
  34. package/dist/lib/validation/at-rules/media.js +11 -0
  35. package/dist/lib/validation/at-rules/page-margin-box.js +11 -0
  36. package/dist/lib/validation/at-rules/page.js +11 -0
  37. package/dist/lib/validation/at-rules/supports.js +11 -0
  38. package/dist/lib/validation/at-rules/when.js +11 -0
  39. package/dist/lib/validation/config.js +0 -2
  40. package/dist/lib/validation/config.json.js +21 -1
  41. package/dist/lib/validation/parser/parse.js +53 -2
  42. package/dist/lib/validation/syntax.js +199 -36
  43. package/dist/node.js +17 -12
  44. package/dist/web.js +11 -11
  45. package/package.json +6 -3
  46. package/dist/lib/validation/parser/types.js +0 -54
@@ -182,13 +182,15 @@ function* tokenize(parseInfo, yieldEOFToken = true) {
182
182
  yield pushToken(buffer, parseInfo);
183
183
  buffer = '';
184
184
  }
185
+ buffer += value;
185
186
  while (value = next(parseInfo)) {
186
187
  charCode = value.charCodeAt(0);
187
188
  if (!isWhiteSpace(charCode)) {
188
189
  break;
189
190
  }
191
+ buffer += value;
190
192
  }
191
- yield pushToken('', parseInfo, EnumToken.WhitespaceTokenType);
193
+ yield pushToken(buffer, parseInfo, EnumToken.WhitespaceTokenType);
192
194
  buffer = '';
193
195
  }
194
196
  switch (charCode) {
@@ -236,8 +238,7 @@ function* tokenize(parseInfo, yieldEOFToken = true) {
236
238
  buffer = '';
237
239
  }
238
240
  if (match(parseInfo, '=')) {
239
- yield pushToken('', parseInfo, EnumToken.LteTokenType);
240
- next(parseInfo);
241
+ yield pushToken(value + next(parseInfo), parseInfo, EnumToken.LteTokenType);
241
242
  break;
242
243
  }
243
244
  buffer += value;
@@ -292,8 +293,7 @@ function* tokenize(parseInfo, yieldEOFToken = true) {
292
293
  }
293
294
  if (charCode == 124 /* TokenMap.PIPE */) {
294
295
  if (match(parseInfo, '|')) {
295
- next(parseInfo);
296
- yield pushToken('', parseInfo, EnumToken.ColumnCombinatorTokenType);
296
+ yield pushToken(value + next(parseInfo), parseInfo, EnumToken.ColumnCombinatorTokenType);
297
297
  }
298
298
  else if (match(parseInfo, '=')) {
299
299
  buffer += next(parseInfo);
@@ -347,11 +347,10 @@ function* tokenize(parseInfo, yieldEOFToken = true) {
347
347
  buffer = '';
348
348
  }
349
349
  if (match(parseInfo, '=')) {
350
- yield pushToken('', parseInfo, EnumToken.GteTokenType);
351
- next(parseInfo);
350
+ yield pushToken(value + next(parseInfo), parseInfo, EnumToken.GteTokenType);
352
351
  }
353
352
  else {
354
- yield pushToken('', parseInfo, EnumToken.GtTokenType);
353
+ yield pushToken(value, parseInfo, EnumToken.GtTokenType);
355
354
  }
356
355
  consumeWhiteSpace(parseInfo);
357
356
  break;
@@ -402,7 +401,7 @@ function* tokenize(parseInfo, yieldEOFToken = true) {
402
401
  yield pushToken(buffer, parseInfo);
403
402
  buffer = '';
404
403
  }
405
- yield pushToken('', parseInfo, EnumToken.EndParensTokenType);
404
+ yield pushToken(value, parseInfo, EnumToken.EndParensTokenType);
406
405
  break;
407
406
  case 40 /* TokenMap.OPEN_PAREN */:
408
407
  if (buffer.length == 0) {
@@ -468,7 +467,7 @@ function* tokenize(parseInfo, yieldEOFToken = true) {
468
467
  // ')'
469
468
  if (charCode == 0x29) {
470
469
  yield pushToken(buffer, parseInfo, hasNewLine ? EnumToken.BadStringTokenType : EnumToken.StringTokenType);
471
- yield pushToken('', parseInfo, EnumToken.EndParensTokenType);
470
+ yield pushToken(value, parseInfo, EnumToken.EndParensTokenType);
472
471
  buffer = '';
473
472
  break;
474
473
  }
@@ -492,7 +491,7 @@ function* tokenize(parseInfo, yieldEOFToken = true) {
492
491
  charCode = value.charCodeAt(0);
493
492
  if (charCode == 0x29) { // ')'
494
493
  yield pushToken(buffer, parseInfo, EnumToken.UrlTokenTokenType);
495
- yield pushToken('', parseInfo, EnumToken.EndParensTokenType);
494
+ yield pushToken(value, parseInfo, EnumToken.EndParensTokenType);
496
495
  buffer = '';
497
496
  break;
498
497
  }
@@ -526,8 +525,7 @@ function* tokenize(parseInfo, yieldEOFToken = true) {
526
525
  buffer = '';
527
526
  }
528
527
  if (match(parseInfo, 'important')) {
529
- yield pushToken('', parseInfo, EnumToken.ImportantTokenType);
530
- next(parseInfo, 9);
528
+ yield pushToken(value + next(parseInfo, 9), parseInfo, EnumToken.ImportantTokenType);
531
529
  buffer = '';
532
530
  break;
533
531
  }
@@ -69,7 +69,7 @@ function doRender(data, options = {}) {
69
69
  const sourcemap = options.sourcemap ? new SourceMap : null;
70
70
  const cache = Object.create(null);
71
71
  const result = {
72
- code: renderAstNode(options.expandNestingRules ? expand(data) : data, options, sourcemap, {
72
+ code: renderAstNode(options.expandNestingRules && [EnumToken.StyleSheetNodeType, EnumToken.AtRuleNodeType, EnumToken.RuleNodeType].includes(data.typ) && 'chi' in data ? expand(data) : data, options, sourcemap, {
73
73
  ind: 0,
74
74
  lin: 1,
75
75
  col: 1
@@ -209,7 +209,7 @@ function renderAstNode(data, options, sourcemap, position, errors, reducer, cach
209
209
  str = `${node.nam}:${options.indent}${(options.minify ? filterValues(node.val) : node.val).reduce(reducer, '').trimEnd()};`;
210
210
  }
211
211
  else if (node.typ == EnumToken.AtRuleNodeType && !('chi' in node)) {
212
- str = `${data.val === '' ? '' : options.indent || ' '}${data.val};`;
212
+ str = `${node.val === '' ? '' : options.indent || ' '}${node.val};`;
213
213
  }
214
214
  else {
215
215
  str = renderAstNode(node, options, sourcemap, { ...position }, errors, reducer, cache, level + 1, indents);
@@ -528,7 +528,7 @@ function isColor(token) {
528
528
  }
529
529
  if (token.typ == EnumToken.IdenTokenType) {
530
530
  // named color
531
- return token.val.toLowerCase() in COLORS_NAMES;
531
+ return token.val.toLowerCase() in COLORS_NAMES || 'currentcolor' === token.val.toLowerCase() || 'transparent' === token.val.toLowerCase();
532
532
  }
533
533
  let isLegacySyntax = false;
534
534
  if (token.typ == EnumToken.FunctionTokenType) {
@@ -581,8 +581,13 @@ function isColor(token) {
581
581
  return false;
582
582
  }
583
583
  }
584
- if (children[i].typ == EnumToken.FunctionTokenType && !mathFuncs.includes(children[i].val)) {
585
- return false;
584
+ if (children[i].typ == EnumToken.FunctionTokenType) {
585
+ if ('var' == children[i].val.toLowerCase()) {
586
+ continue;
587
+ }
588
+ if (!mathFuncs.includes(children[i].val)) {
589
+ return false;
590
+ }
586
591
  }
587
592
  }
588
593
  if (children.length == 4 || (isRelative && children.length == 6)) {
@@ -869,23 +874,29 @@ function isNumber(name) {
869
874
  }
870
875
  return true;
871
876
  }
872
- function isDimension(name) {
873
- let index = name.length;
874
- while (index--) {
875
- if (isLetter(name.charCodeAt(index))) {
876
- continue;
877
- }
878
- index++;
879
- break;
880
- }
881
- const number = name.slice(0, index);
882
- return number.length > 0 && isIdentStart(name.charCodeAt(index)) && isNumber(number);
883
- }
877
+ // export function isDimension(name: string) {
878
+ //
879
+ // let index: number = name.length;
880
+ //
881
+ // while (index--) {
882
+ //
883
+ // if (isLetter(<number>name.charCodeAt(index))) {
884
+ //
885
+ // continue
886
+ // }
887
+ //
888
+ // index++;
889
+ // break;
890
+ // }
891
+ //
892
+ // const number: string = name.slice(0, index);
893
+ // return number.length > 0 && isIdentStart(name.charCodeAt(index)) && isNumber(number);
894
+ // }
884
895
  function isPercentage(name) {
885
896
  return name.endsWith('%') && isNumber(name.slice(0, -1));
886
897
  }
887
- function isFlex(name) {
888
- return name.endsWith('fr') && isNumber(name.slice(0, -2));
898
+ function isFlex(dimension) {
899
+ return 'unit' in dimension && 'fr' == dimension.unit.toLowerCase();
889
900
  }
890
901
  function parseDimension(name) {
891
902
  let index = name.length;
@@ -901,6 +912,9 @@ function parseDimension(name) {
901
912
  val: +name.slice(0, index),
902
913
  unit: name.slice(index)
903
914
  };
915
+ if (index < 0 || Number.isNaN(dimension.val)) {
916
+ return null;
917
+ }
904
918
  if (isAngle(dimension)) {
905
919
  // @ts-ignore
906
920
  dimension.typ = EnumToken.AngleTokenType;
@@ -924,6 +938,10 @@ function parseDimension(name) {
924
938
  // @ts-ignore
925
939
  dimension.typ = EnumToken.FrequencyTokenType;
926
940
  }
941
+ else if (isFlex(dimension)) {
942
+ // @ts-ignore
943
+ dimension.typ = EnumToken.FlexTokenType;
944
+ }
927
945
  return dimension;
928
946
  }
929
947
  function isHexColor(name) {
@@ -958,4 +976,4 @@ function isWhiteSpace(codepoint) {
958
976
  codepoint == 0xa || codepoint == 0xc || codepoint == 0xd;
959
977
  }
960
978
 
961
- export { colorFontTech, fontFeaturesTech, fontFormat, isAngle, isAtKeyword, isColor, isColorspace, isDigit, isDimension, isFlex, isFrequency, isFunction, isHash, isHexColor, isHueInterpolationMethod, isIdent, isIdentCodepoint, isIdentColor, isIdentStart, isLength, isNewLine, isNumber, isPercentage, isPercentageToken, isPolarColorspace, isPseudo, isRectangularOrthogonalColorspace, isResolution, isTime, isWhiteSpace, mathFuncs, mediaTypes, mozExtensions, parseColor, parseDimension, pseudoAliasMap, pseudoElements, transformFunctions, webkitExtensions, wildCardFuncs };
979
+ export { colorFontTech, fontFeaturesTech, fontFormat, isAngle, isAtKeyword, isColor, isColorspace, isDigit, isFlex, isFrequency, isFunction, isHash, isHexColor, isHueInterpolationMethod, isIdent, isIdentCodepoint, isIdentColor, isIdentStart, isLength, isNewLine, isNumber, isPercentage, isPercentageToken, isPolarColorspace, isPseudo, isRectangularOrthogonalColorspace, isResolution, isTime, isWhiteSpace, mathFuncs, mediaTypes, mozExtensions, parseColor, parseDimension, pseudoAliasMap, pseudoElements, transformFunctions, webkitExtensions, wildCardFuncs };
@@ -11,6 +11,17 @@ import { splitTokenList } from '../utils/list.js';
11
11
 
12
12
  const validateContainerScrollStateFeature = validateContainerSizeFeature;
13
13
  function validateAtRuleContainer(atRule, options, root) {
14
+ if (!Array.isArray(atRule.chi)) {
15
+ // @ts-ignore
16
+ return {
17
+ valid: SyntaxValidationResult.Drop,
18
+ matches: [],
19
+ node: atRule,
20
+ syntax: '@' + atRule.nam,
21
+ error: 'expected supports body',
22
+ tokens: []
23
+ };
24
+ }
14
25
  // media-query-list
15
26
  if (!Array.isArray(atRule.tokens) || atRule.tokens.length == 0) {
16
27
  // @ts-ignore
@@ -8,6 +8,17 @@ import '../../syntax/color/utils/constants.js';
8
8
  import '../../renderer/sourcemap/lib/encode.js';
9
9
 
10
10
  function validateAtRuleCounterStyle(atRule, options, root) {
11
+ if (!Array.isArray(atRule.chi)) {
12
+ // @ts-ignore
13
+ return {
14
+ valid: SyntaxValidationResult.Drop,
15
+ matches: [],
16
+ node: atRule,
17
+ syntax: '@' + atRule.nam,
18
+ error: 'expected supports body',
19
+ tokens: []
20
+ };
21
+ }
11
22
  // media-query-list
12
23
  if (!Array.isArray(atRule.tokens) || atRule.tokens.length == 0) {
13
24
  // @ts-ignore
@@ -12,6 +12,17 @@ import '../syntax.js';
12
12
  import '../config.js';
13
13
 
14
14
  function validateAtRuleFontFeatureValues(atRule, options, root) {
15
+ if (!Array.isArray(atRule.chi)) {
16
+ // @ts-ignore
17
+ return {
18
+ valid: SyntaxValidationResult.Drop,
19
+ matches: [],
20
+ node: atRule,
21
+ syntax: '@' + atRule.nam,
22
+ error: 'expected supports body',
23
+ tokens: []
24
+ };
25
+ }
15
26
  if (!Array.isArray(atRule.tokens) || atRule.tokens.length == 0) {
16
27
  // @ts-ignore
17
28
  return {
@@ -9,6 +9,17 @@ import '../../renderer/sourcemap/lib/encode.js';
9
9
  import { consumeWhitespace } from '../utils/whitespace.js';
10
10
 
11
11
  function validateAtRuleKeyframes(atRule, options, root) {
12
+ if (!Array.isArray(atRule.chi)) {
13
+ // @ts-ignore
14
+ return {
15
+ valid: SyntaxValidationResult.Drop,
16
+ matches: [],
17
+ node: atRule,
18
+ syntax: '@' + atRule.nam,
19
+ error: 'expected supports body',
20
+ tokens: []
21
+ };
22
+ }
12
23
  if (!Array.isArray(atRule.tokens) || atRule.tokens.length == 0) {
13
24
  // @ts-ignore
14
25
  return {
@@ -12,6 +12,17 @@ import '../syntax.js';
12
12
  import '../config.js';
13
13
 
14
14
  function validateAtRuleLayer(atRule, options, root) {
15
+ if (!Array.isArray(atRule.chi)) {
16
+ // @ts-ignore
17
+ return {
18
+ valid: SyntaxValidationResult.Drop,
19
+ matches: [],
20
+ node: atRule,
21
+ syntax: '@' + atRule.nam,
22
+ error: 'expected supports body',
23
+ tokens: []
24
+ };
25
+ }
15
26
  // media-query-list
16
27
  if (!Array.isArray(atRule.tokens) || atRule.tokens.length == 0) {
17
28
  // @ts-ignore
@@ -10,6 +10,17 @@ import { consumeWhitespace } from '../utils/whitespace.js';
10
10
  import { splitTokenList } from '../utils/list.js';
11
11
 
12
12
  function validateAtRuleMedia(atRule, options, root) {
13
+ if (!Array.isArray(atRule.chi)) {
14
+ // @ts-ignore
15
+ return {
16
+ valid: SyntaxValidationResult.Drop,
17
+ matches: [],
18
+ node: atRule,
19
+ syntax: '@' + atRule.nam,
20
+ error: 'expected supports body',
21
+ tokens: []
22
+ };
23
+ }
13
24
  // media-query-list
14
25
  if (!Array.isArray(atRule.tokens) || atRule.tokens.length == 0) {
15
26
  // @ts-ignore
@@ -8,6 +8,17 @@ import '../../syntax/color/utils/constants.js';
8
8
  import '../../renderer/sourcemap/lib/encode.js';
9
9
 
10
10
  function validateAtRulePageMarginBox(atRule, options, root) {
11
+ if (!Array.isArray(atRule.chi)) {
12
+ // @ts-ignore
13
+ return {
14
+ valid: SyntaxValidationResult.Drop,
15
+ matches: [],
16
+ node: atRule,
17
+ syntax: '@' + atRule.nam,
18
+ error: 'expected supports body',
19
+ tokens: []
20
+ };
21
+ }
11
22
  if (Array.isArray(atRule.tokens) && atRule.tokens.length > 0) {
12
23
  // @ts-ignore
13
24
  return {
@@ -9,6 +9,17 @@ import '../../renderer/sourcemap/lib/encode.js';
9
9
  import { splitTokenList } from '../utils/list.js';
10
10
 
11
11
  function validateAtRulePage(atRule, options, root) {
12
+ if (!Array.isArray(atRule.chi)) {
13
+ // @ts-ignore
14
+ return {
15
+ valid: SyntaxValidationResult.Drop,
16
+ matches: [],
17
+ node: atRule,
18
+ syntax: '@' + atRule.nam,
19
+ error: 'expected supports body',
20
+ tokens: []
21
+ };
22
+ }
12
23
  // media-query-list
13
24
  if (!Array.isArray(atRule.tokens) || atRule.tokens.length == 0) {
14
25
  // @ts-ignore
@@ -23,6 +23,17 @@ function validateAtRuleSupports(atRule, options, root) {
23
23
  tokens: []
24
24
  };
25
25
  }
26
+ if (!Array.isArray(atRule.chi)) {
27
+ // @ts-ignore
28
+ return {
29
+ valid: SyntaxValidationResult.Drop,
30
+ matches: [],
31
+ node: atRule,
32
+ syntax: '@' + atRule.nam,
33
+ error: 'expected supports body',
34
+ tokens: []
35
+ };
36
+ }
26
37
  const result = validateAtRuleSupportsConditions(atRule, atRule.tokens);
27
38
  if (result) {
28
39
  if (result.node == null) {
@@ -12,6 +12,17 @@ import { validateMediaFeature, validateMediaCondition } from './media.js';
12
12
  import { validateSupportCondition } from './supports.js';
13
13
 
14
14
  function validateAtRuleWhen(atRule, options, root) {
15
+ if (!Array.isArray(atRule.chi)) {
16
+ // @ts-ignore
17
+ return {
18
+ valid: SyntaxValidationResult.Drop,
19
+ matches: [],
20
+ node: atRule,
21
+ syntax: '@' + atRule.nam,
22
+ error: 'expected supports body',
23
+ tokens: []
24
+ };
25
+ }
15
26
  const slice = Array.isArray(atRule.tokens) ? atRule.tokens.slice() : [];
16
27
  consumeWhitespace(slice);
17
28
  if (slice.length == 0) {
@@ -1,5 +1,4 @@
1
1
  import config from './config.json.js';
2
- import './parser/types.js';
3
2
  import { parseSyntax } from './parser/parse.js';
4
3
 
5
4
  const parsedSyntaxes = new Map();
@@ -51,7 +50,6 @@ function getParsedSyntax(group, key) {
51
50
  const index = group + '.' + keys.join('.');
52
51
  // @ts-ignore
53
52
  if (!parsedSyntaxes.has(index)) {
54
- // @ts-ignore
55
53
  const syntax = parseSyntax(obj.syntax);
56
54
  // @ts-ignore
57
55
  parsedSyntaxes.set(index, syntax.chi);
@@ -4190,7 +4190,27 @@ var atRules = {
4190
4190
  }
4191
4191
  },
4192
4192
  "@nest": {
4193
- syntax: "<complex-selector-list>"
4193
+ },
4194
+ "@stylistic": {
4195
+ syntax: " @stylistic { <feature-value-declaration-list> } "
4196
+ },
4197
+ "@historical-forms": {
4198
+ syntax: " @historical-forms { <feature-value-declaration-list> } "
4199
+ },
4200
+ "@styleset": {
4201
+ syntax: " @styleset { <feature-value-declaration-list> } "
4202
+ },
4203
+ "@character-variant": {
4204
+ syntax: " @character-variant { <feature-value-declaration-list> } "
4205
+ },
4206
+ "@swash": {
4207
+ syntax: " @swash { <feature-value-declaration-list> } "
4208
+ },
4209
+ "@ornaments": {
4210
+ syntax: " @ornaments { <feature-value-declaration-list> } "
4211
+ },
4212
+ "@annotation": {
4213
+ syntax: " @annotation { <feature-value-declaration-list> } "
4194
4214
  }
4195
4215
  };
4196
4216
  var config = {
@@ -1,4 +1,3 @@
1
- import { ValidationTokenEnum } from './types.js';
2
1
  import { isIdent, isPseudo } from '../../syntax/syntax.js';
3
2
  import { EnumToken } from '../../ast/types.js';
4
3
  import '../../ast/minify.js';
@@ -9,6 +8,58 @@ import '../../parser/utils/config.js';
9
8
  import '../../syntax/color/utils/constants.js';
10
9
  import '../../renderer/sourcemap/lib/encode.js';
11
10
 
11
+ var ValidationTokenEnum;
12
+ (function (ValidationTokenEnum) {
13
+ ValidationTokenEnum[ValidationTokenEnum["Root"] = 0] = "Root";
14
+ ValidationTokenEnum[ValidationTokenEnum["Keyword"] = 1] = "Keyword";
15
+ ValidationTokenEnum[ValidationTokenEnum["PropertyType"] = 2] = "PropertyType";
16
+ ValidationTokenEnum[ValidationTokenEnum["DeclarationType"] = 3] = "DeclarationType";
17
+ ValidationTokenEnum[ValidationTokenEnum["AtRule"] = 4] = "AtRule";
18
+ ValidationTokenEnum[ValidationTokenEnum["ValidationFunctionDefinition"] = 5] = "ValidationFunctionDefinition";
19
+ ValidationTokenEnum[ValidationTokenEnum["OpenBracket"] = 6] = "OpenBracket";
20
+ ValidationTokenEnum[ValidationTokenEnum["CloseBracket"] = 7] = "CloseBracket";
21
+ ValidationTokenEnum[ValidationTokenEnum["OpenParenthesis"] = 8] = "OpenParenthesis";
22
+ ValidationTokenEnum[ValidationTokenEnum["CloseParenthesis"] = 9] = "CloseParenthesis";
23
+ ValidationTokenEnum[ValidationTokenEnum["Comma"] = 10] = "Comma";
24
+ ValidationTokenEnum[ValidationTokenEnum["Pipe"] = 11] = "Pipe";
25
+ ValidationTokenEnum[ValidationTokenEnum["Column"] = 12] = "Column";
26
+ ValidationTokenEnum[ValidationTokenEnum["Star"] = 13] = "Star";
27
+ ValidationTokenEnum[ValidationTokenEnum["OpenCurlyBrace"] = 14] = "OpenCurlyBrace";
28
+ ValidationTokenEnum[ValidationTokenEnum["CloseCurlyBrace"] = 15] = "CloseCurlyBrace";
29
+ ValidationTokenEnum[ValidationTokenEnum["HashMark"] = 16] = "HashMark";
30
+ ValidationTokenEnum[ValidationTokenEnum["QuestionMark"] = 17] = "QuestionMark";
31
+ ValidationTokenEnum[ValidationTokenEnum["Function"] = 18] = "Function";
32
+ ValidationTokenEnum[ValidationTokenEnum["Number"] = 19] = "Number";
33
+ ValidationTokenEnum[ValidationTokenEnum["Whitespace"] = 20] = "Whitespace";
34
+ ValidationTokenEnum[ValidationTokenEnum["Parenthesis"] = 21] = "Parenthesis";
35
+ ValidationTokenEnum[ValidationTokenEnum["Bracket"] = 22] = "Bracket";
36
+ ValidationTokenEnum[ValidationTokenEnum["Block"] = 23] = "Block";
37
+ ValidationTokenEnum[ValidationTokenEnum["AtLeastOnce"] = 24] = "AtLeastOnce";
38
+ ValidationTokenEnum[ValidationTokenEnum["Separator"] = 25] = "Separator";
39
+ ValidationTokenEnum[ValidationTokenEnum["Exclamation"] = 26] = "Exclamation";
40
+ ValidationTokenEnum[ValidationTokenEnum["Ampersand"] = 27] = "Ampersand";
41
+ ValidationTokenEnum[ValidationTokenEnum["PipeToken"] = 28] = "PipeToken";
42
+ ValidationTokenEnum[ValidationTokenEnum["ColumnToken"] = 29] = "ColumnToken";
43
+ ValidationTokenEnum[ValidationTokenEnum["AmpersandToken"] = 30] = "AmpersandToken";
44
+ ValidationTokenEnum[ValidationTokenEnum["Parens"] = 31] = "Parens";
45
+ ValidationTokenEnum[ValidationTokenEnum["PseudoClassToken"] = 32] = "PseudoClassToken";
46
+ ValidationTokenEnum[ValidationTokenEnum["PseudoClassFunctionToken"] = 33] = "PseudoClassFunctionToken";
47
+ ValidationTokenEnum[ValidationTokenEnum["StringToken"] = 34] = "StringToken";
48
+ ValidationTokenEnum[ValidationTokenEnum["AtRuleDefinition"] = 35] = "AtRuleDefinition";
49
+ ValidationTokenEnum[ValidationTokenEnum["DeclarationNameToken"] = 36] = "DeclarationNameToken";
50
+ ValidationTokenEnum[ValidationTokenEnum["DeclarationDefinitionToken"] = 37] = "DeclarationDefinitionToken";
51
+ ValidationTokenEnum[ValidationTokenEnum["SemiColon"] = 38] = "SemiColon";
52
+ ValidationTokenEnum[ValidationTokenEnum["Character"] = 39] = "Character";
53
+ ValidationTokenEnum[ValidationTokenEnum["InfinityToken"] = 40] = "InfinityToken";
54
+ })(ValidationTokenEnum || (ValidationTokenEnum = {}));
55
+ var ValidationSyntaxGroupEnum;
56
+ (function (ValidationSyntaxGroupEnum) {
57
+ ValidationSyntaxGroupEnum["Declarations"] = "declarations";
58
+ ValidationSyntaxGroupEnum["Functions"] = "functions";
59
+ ValidationSyntaxGroupEnum["Syntaxes"] = "syntaxes";
60
+ ValidationSyntaxGroupEnum["Selectors"] = "selectors";
61
+ ValidationSyntaxGroupEnum["AtRules"] = "atRules";
62
+ })(ValidationSyntaxGroupEnum || (ValidationSyntaxGroupEnum = {}));
12
63
  const skipped = [
13
64
  ValidationTokenEnum.Star,
14
65
  ValidationTokenEnum.HashMark,
@@ -1040,4 +1091,4 @@ function minify(ast) {
1040
1091
  return ast;
1041
1092
  }
1042
1093
 
1043
- export { parseSyntax, renderSyntax };
1094
+ export { ValidationSyntaxGroupEnum, ValidationTokenEnum, parseSyntax, renderSyntax };