@markuplint/types 4.0.0-alpha.1 → 4.0.0-alpha.10

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 (43) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +63 -61
  3. package/lib/css-syntax.js +16 -11
  4. package/lib/defs.d.ts +1 -0
  5. package/lib/defs.js +172 -52
  6. package/lib/enum.js +1 -1
  7. package/lib/get-candidate.js +2 -2
  8. package/lib/keyword-type.js +3 -3
  9. package/lib/number.d.ts +2 -2
  10. package/lib/number.js +2 -2
  11. package/lib/primitive/is-float.js +1 -1
  12. package/lib/primitive/is-int.js +1 -1
  13. package/lib/primitive/is-non-zero-uint.js +1 -1
  14. package/lib/primitive/is-uint.js +3 -3
  15. package/lib/primitive/range.js +2 -2
  16. package/lib/primitive/split-unit.js +1 -1
  17. package/lib/token/token-collection.d.ts +4 -5
  18. package/lib/token/token-collection.js +23 -18
  19. package/lib/token/token.d.ts +1 -1
  20. package/lib/token/token.js +9 -8
  21. package/lib/types.d.ts +1 -0
  22. package/lib/types.schema.d.ts +1 -1
  23. package/lib/w3c/check-serialized-permissions-policy.js +5 -5
  24. package/lib/whatwg/check-autocomplete.js +10 -13
  25. package/lib/whatwg/check-datetime/date-string.js +3 -3
  26. package/lib/whatwg/check-datetime/datetime-tokens.js +18 -18
  27. package/lib/whatwg/check-datetime/duration-string.js +30 -29
  28. package/lib/whatwg/check-datetime/global-date-and-time-string.js +8 -8
  29. package/lib/whatwg/check-datetime/local-date-and-time-string.js +17 -16
  30. package/lib/whatwg/check-datetime/month-string.js +1 -1
  31. package/lib/whatwg/check-datetime/time-string.js +4 -4
  32. package/lib/whatwg/check-datetime/time-zone-offset-string.js +6 -6
  33. package/lib/whatwg/check-datetime/week-string.js +2 -2
  34. package/lib/whatwg/check-datetime/yearless-date-string.js +2 -2
  35. package/lib/whatwg/is-abs-url.js +7 -7
  36. package/lib/whatwg/is-browser-context-name.d.ts +2 -0
  37. package/lib/whatwg/is-browser-context-name.js +2 -0
  38. package/lib/whatwg/is-custom-element-name.d.ts +9 -4
  39. package/lib/whatwg/is-custom-element-name.js +21 -33
  40. package/lib/whatwg/is-navigable-target-name.d.ts +11 -0
  41. package/lib/whatwg/is-navigable-target-name.js +20 -0
  42. package/package.json +12 -9
  43. package/types.schema.json +3 -0
@@ -4,5 +4,5 @@
4
4
  * @param value
5
5
  */
6
6
  export function isFloat(value) {
7
- return value === value.trim() && Number.isFinite(parseFloat(value));
7
+ return value === value.trim() && Number.isFinite(Number.parseFloat(value));
8
8
  }
@@ -4,5 +4,5 @@
4
4
  * @param value
5
5
  */
6
6
  export function isInt(value) {
7
- return /^-?[0-9]+$/.test(value);
7
+ return /^-?\d+$/.test(value);
8
8
  }
@@ -4,5 +4,5 @@
4
4
  * @param value
5
5
  */
6
6
  export function isNonZeroUint(value) {
7
- return /^[0-9]+$/.test(value) && !/^0+$/.test(value);
7
+ return /^\d+$/.test(value) && !/^0+$/.test(value);
8
8
  }
@@ -4,11 +4,11 @@
4
4
  * @param value
5
5
  */
6
6
  export function isUint(value, options) {
7
- const matched = /^[0-9]+$/.test(value);
7
+ const matched = /^\d+$/.test(value);
8
8
  if (matched && options) {
9
- const n = parseInt(value, 10);
9
+ const n = Number.parseInt(value, 10);
10
10
  if (options.gt != null) {
11
- return isFinite(n) && options.gt < n;
11
+ return Number.isFinite(n) && options.gt < n;
12
12
  }
13
13
  }
14
14
  return matched;
@@ -6,8 +6,8 @@
6
6
  * @param to
7
7
  */
8
8
  export function range(value, from, to) {
9
- const num = parseFloat(value);
10
- if (isNaN(num)) {
9
+ const num = Number.parseFloat(value);
10
+ if (Number.isNaN(num)) {
11
11
  return false;
12
12
  }
13
13
  return from <= num && num <= to;
@@ -5,7 +5,7 @@
5
5
  */
6
6
  export function splitUnit(value) {
7
7
  value = value.trim().toLowerCase();
8
- const matched = value.match(/(^-?\.[0-9]+|^-?[0-9]+(?:\.[0-9]+(?:e[+-][0-9]+)?)?)([a-z]+$)/i);
8
+ const matched = value.match(/(^-?\.\d+|^-?\d+(?:\.\d+(?:e[+-]\d+)?)?)([a-z]+$)/i);
9
9
  if (!matched) {
10
10
  return {
11
11
  num: value,
@@ -1,15 +1,14 @@
1
1
  import type { TokenValue } from './types.js';
2
2
  import type { Expect, Result, List, UnmatchedResult } from '../types.js';
3
- import type { ReadonlyDeep } from 'type-fest';
4
3
  import { Token } from './token.js';
5
4
  type TokenCollectionOptions = Partial<Omit<List, 'token'> & {
6
5
  specificSeparator: string | string[];
7
6
  }>;
8
- export type TokenEachCheck = (head: Readonly<Token> | null, tail: ReadonlyDeep<TokenCollection>) => Result | void;
7
+ export type TokenEachCheck = (head: Readonly<Token> | null, tail: TokenCollection) => Result | void;
9
8
  export declare class TokenCollection extends Array<Token> {
10
- static fromPatterns(value: Readonly<Token> | string, patterns: readonly Readonly<RegExp>[], typeOptions?: ReadonlyDeep<Omit<TokenCollectionOptions, 'specificSeparator'> & {
9
+ static fromPatterns(value: Readonly<Token> | string, patterns: readonly Readonly<RegExp>[], typeOptions?: Omit<TokenCollectionOptions, 'specificSeparator'> & {
11
10
  repeat?: boolean;
12
- }>): TokenCollection;
11
+ }): TokenCollection;
13
12
  static get [Symbol.species](): ArrayConstructor;
14
13
  readonly allowEmpty: NonNullable<List['allowEmpty']>;
15
14
  readonly caseInsensitive: NonNullable<List['caseInsensitive']>;
@@ -18,7 +17,7 @@ export declare class TokenCollection extends Array<Token> {
18
17
  readonly ordered: NonNullable<List['ordered']>;
19
18
  readonly separator: NonNullable<List['separator']>;
20
19
  readonly unique: NonNullable<List['unique']>;
21
- constructor(value?: string, typeOptions?: ReadonlyDeep<TokenCollectionOptions>);
20
+ constructor(value?: string, typeOptions?: TokenCollectionOptions);
22
21
  constructor(value?: number);
23
22
  get value(): string;
24
23
  check(options?: {
@@ -1,7 +1,9 @@
1
1
  import { matched, unmatched } from '../match-result.js';
2
2
  import { Token } from './token.js';
3
3
  export class TokenCollection extends Array {
4
- static fromPatterns(value, patterns, typeOptions) {
4
+ static fromPatterns(value, patterns,
5
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
6
+ typeOptions) {
5
7
  const originalValue = typeof value === 'string' ? value : value.originalValue;
6
8
  let strings = typeof value === 'string' ? value : value.value;
7
9
  let cumulativeOffset = typeof value === 'string' ? 0 : value.offset;
@@ -19,18 +21,18 @@ export class TokenCollection extends Array {
19
21
  for (const pattern of patterns) {
20
22
  const res = pattern.exec(strings);
21
23
  let value;
22
- if (!res) {
23
- isBroken = true;
24
- value = '';
25
- }
26
- else {
27
- if (res.index !== 0) {
28
- value = strings.slice(res.index + res[0].length);
24
+ if (res) {
25
+ if (res.index === 0) {
26
+ value = res[0] ?? '';
29
27
  }
30
28
  else {
31
- value = res[0] ?? '';
29
+ value = strings.slice(res.index + res[0].length);
32
30
  }
33
31
  }
32
+ else {
33
+ isBroken = true;
34
+ value = '';
35
+ }
34
36
  const token = addToken(value);
35
37
  // @ts-ignore
36
38
  token._ = pattern;
@@ -47,7 +49,9 @@ export class TokenCollection extends Array {
47
49
  static get [Symbol.species]() {
48
50
  return Array;
49
51
  }
50
- constructor(value, typeOptions) {
52
+ constructor(value,
53
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
54
+ typeOptions) {
51
55
  super();
52
56
  this.disallowToSurroundBySpaces = typeOptions?.disallowToSurroundBySpaces ?? false;
53
57
  this.allowEmpty = typeOptions?.allowEmpty ?? true;
@@ -75,7 +79,7 @@ export class TokenCollection extends Array {
75
79
  separators.push(...typeOptions.specificSeparator);
76
80
  }
77
81
  }
78
- const chars = value.split('');
82
+ const chars = [...value];
79
83
  const values = [];
80
84
  let char;
81
85
  while ((char = chars.shift())) {
@@ -93,16 +97,15 @@ export class TokenCollection extends Array {
93
97
  values.push(last + char);
94
98
  }
95
99
  else {
96
- values.push(last);
97
- values.push(char);
100
+ values.push(last, char);
98
101
  }
99
102
  }
100
103
  let offset = 0;
101
- values.forEach(v => {
104
+ for (const v of values) {
102
105
  const token = new Token(v, offset, value, separators);
103
106
  this.push(token);
104
107
  offset += v.length;
105
- });
108
+ }
106
109
  }
107
110
  get value() {
108
111
  const value = this.map(t => t.value).join('');
@@ -264,7 +267,7 @@ export class TokenCollection extends Array {
264
267
  return result;
265
268
  }
266
269
  else {
267
- if (head?.value && !head.match(/^\s*$/)) {
270
+ if (head?.value && !head.matches(/^\s*$/)) {
268
271
  passCount += 4 * wait;
269
272
  }
270
273
  }
@@ -323,7 +326,7 @@ export class TokenCollection extends Array {
323
326
  * @param value The token value or the token type or its list
324
327
  */
325
328
  has(value) {
326
- return this.some(t => t.match(value));
329
+ return this.some(t => t.matches(value));
327
330
  }
328
331
  headAndTail() {
329
332
  const copy = this.slice();
@@ -374,7 +377,9 @@ export class TokenCollection extends Array {
374
377
  toJSON() {
375
378
  return this.map(t => t.toJSON());
376
379
  }
377
- static _new(tokens, old) {
380
+ static _new(tokens,
381
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
382
+ old) {
378
383
  const newCollection = new TokenCollection('', old);
379
384
  newCollection.push(...tokens);
380
385
  return newCollection;
@@ -42,7 +42,7 @@ export declare class Token {
42
42
  *
43
43
  * @param value The token value or the token type or its list
44
44
  */
45
- match(value: TokenValue, caseInsensitive?: boolean): boolean;
45
+ matches(value: TokenValue, caseInsensitive?: boolean): boolean;
46
46
  toJSON(): {
47
47
  type: number;
48
48
  value: string;
@@ -1,10 +1,10 @@
1
1
  export class Token {
2
2
  static getCol(value, offset) {
3
- const lines = value.slice(0, offset).split(/\n/g);
4
- return (lines[lines.length - 1] ?? '').length + 1;
3
+ const lines = value.slice(0, offset).split(/\n/);
4
+ return (lines.at(-1) ?? '').length + 1;
5
5
  }
6
6
  static getLine(value, offset) {
7
- return value.slice(0, offset).split(/\n/g).length;
7
+ return value.slice(0, offset).split(/\n/).length;
8
8
  }
9
9
  static getType(value, separators) {
10
10
  if (Token.whitespace.includes(value[0] ?? '')) {
@@ -12,8 +12,9 @@ export class Token {
12
12
  }
13
13
  if (separators?.includes(value[0] ?? '')) {
14
14
  switch (value[0]) {
15
- case ',':
15
+ case ',': {
16
16
  return Token.Comma;
17
+ }
17
18
  }
18
19
  }
19
20
  return Token.Ident;
@@ -61,9 +62,9 @@ export class Token {
61
62
  *
62
63
  * @param value The token value or the token type or its list
63
64
  */
64
- match(value, caseInsensitive) {
65
+ matches(value, caseInsensitive) {
65
66
  if (Array.isArray(value)) {
66
- return value.some(v => this.match(v));
67
+ return value.some(v => this.matches(v));
67
68
  }
68
69
  if (typeof value === 'string') {
69
70
  const a = caseInsensitive ? this.value.toLowerCase() : this.value;
@@ -84,8 +85,8 @@ export class Token {
84
85
  };
85
86
  }
86
87
  toNumber() {
87
- const num = parseFloat(this.value);
88
- return isNaN(num) ? 0 : num;
88
+ const num = Number.parseFloat(this.value);
89
+ return Number.isNaN(num) ? 0 : num;
89
90
  }
90
91
  unmatched(options) {
91
92
  return {
package/lib/types.d.ts CHANGED
@@ -17,6 +17,7 @@ export type UnmatchedResultOptions = {
17
17
  readonly expects?: readonly Expect[];
18
18
  readonly extra?: Expect;
19
19
  readonly candidate?: string;
20
+ readonly fallbackTo?: string;
20
21
  };
21
22
  export type UnmatchedResultReason = 'syntax-error' | 'typo' | 'missing-token' | 'missing-comma' | 'unexpected-token' | 'unexpected-space' | 'unexpected-newline' | 'unexpected-comma' | 'empty-token' | 'out-of-range' | 'doesnt-exist-in-enum' | 'duplicated' | 'illegal-combination' | 'illegal-order' | 'extra-token' | 'must-be-percent-encoded' | 'must-be-serialized' | {
22
23
  readonly type: 'out-of-range';
@@ -6,7 +6,7 @@
6
6
  export type Type = KeywordDefinedType | List | Enum | Number;
7
7
  export type KeywordDefinedType = CssSyntax | ExtendedType | HtmlAttrRequirement;
8
8
  export type CssSyntax = "<'--*'>" | "<'-moz-appearance'>" | "<'-moz-background-clip'>" | "<'-moz-binding'>" | "<'-moz-border-bottom-colors'>" | "<'-moz-border-left-colors'>" | "<'-moz-border-radius-bottomleft'>" | "<'-moz-border-radius-bottomright'>" | "<'-moz-border-radius-topleft'>" | "<'-moz-border-radius-topright'>" | "<'-moz-border-right-colors'>" | "<'-moz-border-top-colors'>" | "<'-moz-context-properties'>" | "<'-moz-control-character-visibility'>" | "<'-moz-float-edge'>" | "<'-moz-force-broken-image-icon'>" | "<'-moz-image-region'>" | "<'-moz-orient'>" | "<'-moz-osx-font-smoothing'>" | "<'-moz-outline-radius'>" | "<'-moz-outline-radius-bottomleft'>" | "<'-moz-outline-radius-bottomright'>" | "<'-moz-outline-radius-topleft'>" | "<'-moz-outline-radius-topright'>" | "<'-moz-stack-sizing'>" | "<'-moz-text-blink'>" | "<'-moz-user-focus'>" | "<'-moz-user-input'>" | "<'-moz-user-modify'>" | "<'-moz-user-select'>" | "<'-moz-window-dragging'>" | "<'-moz-window-shadow'>" | "<'-ms-accelerator'>" | "<'-ms-block-progression'>" | "<'-ms-content-zoom-chaining'>" | "<'-ms-content-zoom-limit'>" | "<'-ms-content-zoom-limit-max'>" | "<'-ms-content-zoom-limit-min'>" | "<'-ms-content-zoom-snap'>" | "<'-ms-content-zoom-snap-points'>" | "<'-ms-content-zoom-snap-type'>" | "<'-ms-content-zooming'>" | "<'-ms-filter'>" | "<'-ms-flex-align'>" | "<'-ms-flex-item-align'>" | "<'-ms-flex-line-pack'>" | "<'-ms-flex-negative'>" | "<'-ms-flex-order'>" | "<'-ms-flex-pack'>" | "<'-ms-flex-positive'>" | "<'-ms-flex-preferred-size'>" | "<'-ms-flow-from'>" | "<'-ms-flow-into'>" | "<'-ms-grid-column-align'>" | "<'-ms-grid-columns'>" | "<'-ms-grid-row-align'>" | "<'-ms-grid-rows'>" | "<'-ms-high-contrast-adjust'>" | "<'-ms-hyphenate-limit-chars'>" | "<'-ms-hyphenate-limit-last'>" | "<'-ms-hyphenate-limit-lines'>" | "<'-ms-hyphenate-limit-zone'>" | "<'-ms-ime-align'>" | "<'-ms-interpolation-mode'>" | "<'-ms-overflow-style'>" | "<'-ms-scroll-chaining'>" | "<'-ms-scroll-limit'>" | "<'-ms-scroll-limit-x-max'>" | "<'-ms-scroll-limit-x-min'>" | "<'-ms-scroll-limit-y-max'>" | "<'-ms-scroll-limit-y-min'>" | "<'-ms-scroll-rails'>" | "<'-ms-scroll-snap-points-x'>" | "<'-ms-scroll-snap-points-y'>" | "<'-ms-scroll-snap-type'>" | "<'-ms-scroll-snap-x'>" | "<'-ms-scroll-snap-y'>" | "<'-ms-scroll-translation'>" | "<'-ms-scrollbar-3dlight-color'>" | "<'-ms-scrollbar-arrow-color'>" | "<'-ms-scrollbar-base-color'>" | "<'-ms-scrollbar-darkshadow-color'>" | "<'-ms-scrollbar-face-color'>" | "<'-ms-scrollbar-highlight-color'>" | "<'-ms-scrollbar-shadow-color'>" | "<'-ms-scrollbar-track-color'>" | "<'-ms-text-autospace'>" | "<'-ms-touch-select'>" | "<'-ms-user-select'>" | "<'-ms-wrap-flow'>" | "<'-ms-wrap-margin'>" | "<'-ms-wrap-through'>" | "<'-webkit-appearance'>" | "<'-webkit-background-clip'>" | "<'-webkit-border-before'>" | "<'-webkit-border-before-color'>" | "<'-webkit-border-before-style'>" | "<'-webkit-border-before-width'>" | "<'-webkit-box-reflect'>" | "<'-webkit-column-break-after'>" | "<'-webkit-column-break-before'>" | "<'-webkit-column-break-inside'>" | "<'-webkit-font-smoothing'>" | "<'-webkit-line-clamp'>" | "<'-webkit-mask'>" | "<'-webkit-mask-attachment'>" | "<'-webkit-mask-box-image'>" | "<'-webkit-mask-clip'>" | "<'-webkit-mask-composite'>" | "<'-webkit-mask-image'>" | "<'-webkit-mask-origin'>" | "<'-webkit-mask-position'>" | "<'-webkit-mask-position-x'>" | "<'-webkit-mask-position-y'>" | "<'-webkit-mask-repeat'>" | "<'-webkit-mask-repeat-x'>" | "<'-webkit-mask-repeat-y'>" | "<'-webkit-mask-size'>" | "<'-webkit-overflow-scrolling'>" | "<'-webkit-print-color-adjust'>" | "<'-webkit-tap-highlight-color'>" | "<'-webkit-text-fill-color'>" | "<'-webkit-text-security'>" | "<'-webkit-text-stroke'>" | "<'-webkit-text-stroke-color'>" | "<'-webkit-text-stroke-width'>" | "<'-webkit-touch-callout'>" | "<'-webkit-user-drag'>" | "<'-webkit-user-modify'>" | "<'-webkit-user-select'>" | "<'accent-color'>" | "<'align-content'>" | "<'align-items'>" | "<'align-self'>" | "<'align-tracks'>" | "<'alignment-baseline'>" | "<'all'>" | "<'animation'>" | "<'animation-composition'>" | "<'animation-delay'>" | "<'animation-direction'>" | "<'animation-duration'>" | "<'animation-fill-mode'>" | "<'animation-iteration-count'>" | "<'animation-name'>" | "<'animation-play-state'>" | "<'animation-timeline'>" | "<'animation-timing-function'>" | "<'appearance'>" | "<'aspect-ratio'>" | "<'azimuth'>" | "<'backdrop-filter'>" | "<'backface-visibility'>" | "<'background'>" | "<'background-attachment'>" | "<'background-blend-mode'>" | "<'background-clip'>" | "<'background-color'>" | "<'background-image'>" | "<'background-origin'>" | "<'background-position'>" | "<'background-position-x'>" | "<'background-position-y'>" | "<'background-repeat'>" | "<'background-size'>" | "<'baseline-shift'>" | "<'behavior'>" | "<'block-overflow'>" | "<'block-size'>" | "<'border'>" | "<'border-block'>" | "<'border-block-color'>" | "<'border-block-end'>" | "<'border-block-end-color'>" | "<'border-block-end-style'>" | "<'border-block-end-width'>" | "<'border-block-start'>" | "<'border-block-start-color'>" | "<'border-block-start-style'>" | "<'border-block-start-width'>" | "<'border-block-style'>" | "<'border-block-width'>" | "<'border-bottom'>" | "<'border-bottom-color'>" | "<'border-bottom-left-radius'>" | "<'border-bottom-right-radius'>" | "<'border-bottom-style'>" | "<'border-bottom-width'>" | "<'border-collapse'>" | "<'border-color'>" | "<'border-end-end-radius'>" | "<'border-end-start-radius'>" | "<'border-image'>" | "<'border-image-outset'>" | "<'border-image-repeat'>" | "<'border-image-slice'>" | "<'border-image-source'>" | "<'border-image-width'>" | "<'border-inline'>" | "<'border-inline-color'>" | "<'border-inline-end'>" | "<'border-inline-end-color'>" | "<'border-inline-end-style'>" | "<'border-inline-end-width'>" | "<'border-inline-start'>" | "<'border-inline-start-color'>" | "<'border-inline-start-style'>" | "<'border-inline-start-width'>" | "<'border-inline-style'>" | "<'border-inline-width'>" | "<'border-left'>" | "<'border-left-color'>" | "<'border-left-style'>" | "<'border-left-width'>" | "<'border-radius'>" | "<'border-right'>" | "<'border-right-color'>" | "<'border-right-style'>" | "<'border-right-width'>" | "<'border-spacing'>" | "<'border-start-end-radius'>" | "<'border-start-start-radius'>" | "<'border-style'>" | "<'border-top'>" | "<'border-top-color'>" | "<'border-top-left-radius'>" | "<'border-top-right-radius'>" | "<'border-top-style'>" | "<'border-top-width'>" | "<'border-width'>" | "<'bottom'>" | "<'box-align'>" | "<'box-decoration-break'>" | "<'box-direction'>" | "<'box-flex'>" | "<'box-flex-group'>" | "<'box-lines'>" | "<'box-ordinal-group'>" | "<'box-orient'>" | "<'box-pack'>" | "<'box-shadow'>" | "<'box-sizing'>" | "<'break-after'>" | "<'break-before'>" | "<'break-inside'>" | "<'caption-side'>" | "<'caret'>" | "<'caret-color'>" | "<'caret-shape'>" | "<'clear'>" | "<'clip'>" | "<'clip-path'>" | "<'clip-rule'>" | "<'color'>" | "<'color-scheme'>" | "<'column-count'>" | "<'column-fill'>" | "<'column-gap'>" | "<'column-rule'>" | "<'column-rule-color'>" | "<'column-rule-style'>" | "<'column-rule-width'>" | "<'column-span'>" | "<'column-width'>" | "<'columns'>" | "<'contain'>" | "<'contain-intrinsic-block-size'>" | "<'contain-intrinsic-height'>" | "<'contain-intrinsic-inline-size'>" | "<'contain-intrinsic-size'>" | "<'contain-intrinsic-width'>" | "<'content'>" | "<'content-visibility'>" | "<'counter-increment'>" | "<'counter-reset'>" | "<'counter-set'>" | "<'cue'>" | "<'cue-after'>" | "<'cue-before'>" | "<'cursor'>" | "<'direction'>" | "<'display'>" | "<'dominant-baseline'>" | "<'empty-cells'>" | "<'fill'>" | "<'fill-opacity'>" | "<'fill-rule'>" | "<'filter'>" | "<'flex'>" | "<'flex-basis'>" | "<'flex-direction'>" | "<'flex-flow'>" | "<'flex-grow'>" | "<'flex-shrink'>" | "<'flex-wrap'>" | "<'float'>" | "<'font'>" | "<'font-family'>" | "<'font-feature-settings'>" | "<'font-kerning'>" | "<'font-language-override'>" | "<'font-optical-sizing'>" | "<'font-size'>" | "<'font-size-adjust'>" | "<'font-smooth'>" | "<'font-stretch'>" | "<'font-style'>" | "<'font-synthesis'>" | "<'font-variant'>" | "<'font-variant-alternates'>" | "<'font-variant-caps'>" | "<'font-variant-east-asian'>" | "<'font-variant-ligatures'>" | "<'font-variant-numeric'>" | "<'font-variant-position'>" | "<'font-variation-settings'>" | "<'font-weight'>" | "<'forced-color-adjust'>" | "<'gap'>" | "<'glyph-orientation-horizontal'>" | "<'glyph-orientation-vertical'>" | "<'grid'>" | "<'grid-area'>" | "<'grid-auto-columns'>" | "<'grid-auto-flow'>" | "<'grid-auto-rows'>" | "<'grid-column'>" | "<'grid-column-end'>" | "<'grid-column-gap'>" | "<'grid-column-start'>" | "<'grid-gap'>" | "<'grid-row'>" | "<'grid-row-end'>" | "<'grid-row-gap'>" | "<'grid-row-start'>" | "<'grid-template'>" | "<'grid-template-areas'>" | "<'grid-template-columns'>" | "<'grid-template-rows'>" | "<'hanging-punctuation'>" | "<'height'>" | "<'hyphenate-character'>" | "<'hyphens'>" | "<'image-orientation'>" | "<'image-rendering'>" | "<'image-resolution'>" | "<'ime-mode'>" | "<'initial-letter'>" | "<'initial-letter-align'>" | "<'inline-size'>" | "<'input-security'>" | "<'inset'>" | "<'inset-block'>" | "<'inset-block-end'>" | "<'inset-block-start'>" | "<'inset-inline'>" | "<'inset-inline-end'>" | "<'inset-inline-start'>" | "<'isolation'>" | "<'justify-content'>" | "<'justify-items'>" | "<'justify-self'>" | "<'justify-tracks'>" | "<'kerning'>" | "<'left'>" | "<'letter-spacing'>" | "<'line-break'>" | "<'line-clamp'>" | "<'line-height'>" | "<'line-height-step'>" | "<'list-style'>" | "<'list-style-image'>" | "<'list-style-position'>" | "<'list-style-type'>" | "<'margin'>" | "<'margin-block'>" | "<'margin-block-end'>" | "<'margin-block-start'>" | "<'margin-bottom'>" | "<'margin-inline'>" | "<'margin-inline-end'>" | "<'margin-inline-start'>" | "<'margin-left'>" | "<'margin-right'>" | "<'margin-top'>" | "<'margin-trim'>" | "<'marker'>" | "<'marker-end'>" | "<'marker-mid'>" | "<'marker-start'>" | "<'mask'>" | "<'mask-border'>" | "<'mask-border-mode'>" | "<'mask-border-outset'>" | "<'mask-border-repeat'>" | "<'mask-border-slice'>" | "<'mask-border-source'>" | "<'mask-border-width'>" | "<'mask-clip'>" | "<'mask-composite'>" | "<'mask-image'>" | "<'mask-mode'>" | "<'mask-origin'>" | "<'mask-position'>" | "<'mask-repeat'>" | "<'mask-size'>" | "<'mask-type'>" | "<'masonry-auto-flow'>" | "<'math-depth'>" | "<'math-shift'>" | "<'math-style'>" | "<'max-block-size'>" | "<'max-height'>" | "<'max-inline-size'>" | "<'max-lines'>" | "<'max-width'>" | "<'min-block-size'>" | "<'min-height'>" | "<'min-inline-size'>" | "<'min-width'>" | "<'mix-blend-mode'>" | "<'object-fit'>" | "<'object-position'>" | "<'offset'>" | "<'offset-anchor'>" | "<'offset-distance'>" | "<'offset-path'>" | "<'offset-position'>" | "<'offset-rotate'>" | "<'opacity'>" | "<'order'>" | "<'orphans'>" | "<'outline'>" | "<'outline-color'>" | "<'outline-offset'>" | "<'outline-style'>" | "<'outline-width'>" | "<'overflow'>" | "<'overflow-anchor'>" | "<'overflow-block'>" | "<'overflow-clip-box'>" | "<'overflow-clip-margin'>" | "<'overflow-inline'>" | "<'overflow-wrap'>" | "<'overflow-x'>" | "<'overflow-y'>" | "<'overscroll-behavior'>" | "<'overscroll-behavior-block'>" | "<'overscroll-behavior-inline'>" | "<'overscroll-behavior-x'>" | "<'overscroll-behavior-y'>" | "<'padding'>" | "<'padding-block'>" | "<'padding-block-end'>" | "<'padding-block-start'>" | "<'padding-bottom'>" | "<'padding-inline'>" | "<'padding-inline-end'>" | "<'padding-inline-start'>" | "<'padding-left'>" | "<'padding-right'>" | "<'padding-top'>" | "<'page-break-after'>" | "<'page-break-before'>" | "<'page-break-inside'>" | "<'paint-order'>" | "<'pause'>" | "<'pause-after'>" | "<'pause-before'>" | "<'perspective'>" | "<'perspective-origin'>" | "<'place-content'>" | "<'place-items'>" | "<'place-self'>" | "<'pointer-events'>" | "<'position'>" | "<'print-color-adjust'>" | "<'quotes'>" | "<'resize'>" | "<'rest'>" | "<'rest-after'>" | "<'rest-before'>" | "<'right'>" | "<'rotate'>" | "<'row-gap'>" | "<'ruby-align'>" | "<'ruby-merge'>" | "<'ruby-position'>" | "<'scale'>" | "<'scroll-behavior'>" | "<'scroll-margin'>" | "<'scroll-margin-block'>" | "<'scroll-margin-block-end'>" | "<'scroll-margin-block-start'>" | "<'scroll-margin-bottom'>" | "<'scroll-margin-inline'>" | "<'scroll-margin-inline-end'>" | "<'scroll-margin-inline-start'>" | "<'scroll-margin-left'>" | "<'scroll-margin-right'>" | "<'scroll-margin-top'>" | "<'scroll-padding'>" | "<'scroll-padding-block'>" | "<'scroll-padding-block-end'>" | "<'scroll-padding-block-start'>" | "<'scroll-padding-bottom'>" | "<'scroll-padding-inline'>" | "<'scroll-padding-inline-end'>" | "<'scroll-padding-inline-start'>" | "<'scroll-padding-left'>" | "<'scroll-padding-right'>" | "<'scroll-padding-top'>" | "<'scroll-snap-align'>" | "<'scroll-snap-coordinate'>" | "<'scroll-snap-destination'>" | "<'scroll-snap-points-x'>" | "<'scroll-snap-points-y'>" | "<'scroll-snap-stop'>" | "<'scroll-snap-type'>" | "<'scroll-snap-type-x'>" | "<'scroll-snap-type-y'>" | "<'scroll-timeline'>" | "<'scroll-timeline-axis'>" | "<'scroll-timeline-name'>" | "<'scrollbar-color'>" | "<'scrollbar-gutter'>" | "<'scrollbar-width'>" | "<'shape-image-threshold'>" | "<'shape-margin'>" | "<'shape-outside'>" | "<'shape-rendering'>" | "<'speak'>" | "<'speak-as'>" | "<'src'>" | "<'stroke'>" | "<'stroke-dasharray'>" | "<'stroke-dashoffset'>" | "<'stroke-linecap'>" | "<'stroke-linejoin'>" | "<'stroke-miterlimit'>" | "<'stroke-opacity'>" | "<'stroke-width'>" | "<'tab-size'>" | "<'table-layout'>" | "<'text-align'>" | "<'text-align-last'>" | "<'text-anchor'>" | "<'text-combine-upright'>" | "<'text-decoration'>" | "<'text-decoration-color'>" | "<'text-decoration-line'>" | "<'text-decoration-skip'>" | "<'text-decoration-skip-ink'>" | "<'text-decoration-style'>" | "<'text-decoration-thickness'>" | "<'text-emphasis'>" | "<'text-emphasis-color'>" | "<'text-emphasis-position'>" | "<'text-emphasis-style'>" | "<'text-indent'>" | "<'text-justify'>" | "<'text-orientation'>" | "<'text-overflow'>" | "<'text-rendering'>" | "<'text-shadow'>" | "<'text-size-adjust'>" | "<'text-transform'>" | "<'text-underline-offset'>" | "<'text-underline-position'>" | "<'top'>" | "<'touch-action'>" | "<'transform'>" | "<'transform-box'>" | "<'transform-origin'>" | "<'transform-style'>" | "<'transition'>" | "<'transition-delay'>" | "<'transition-duration'>" | "<'transition-property'>" | "<'transition-timing-function'>" | "<'translate'>" | "<'unicode-bidi'>" | "<'unicode-range'>" | "<'user-select'>" | "<'vertical-align'>" | "<'visibility'>" | "<'voice-balance'>" | "<'voice-duration'>" | "<'voice-family'>" | "<'voice-pitch'>" | "<'voice-range'>" | "<'voice-rate'>" | "<'voice-stress'>" | "<'voice-volume'>" | "<'white-space'>" | "<'widows'>" | "<'width'>" | "<'will-change'>" | "<'word-break'>" | "<'word-spacing'>" | "<'word-wrap'>" | "<'writing-mode'>" | "<'z-index'>" | "<'zoom'>" | '<(-token>' | '<)-token>' | '<-legacy-gradient>' | '<-legacy-linear-gradient-arguments>' | '<-legacy-linear-gradient>' | '<-legacy-radial-gradient-arguments>' | '<-legacy-radial-gradient-shape>' | '<-legacy-radial-gradient-size>' | '<-legacy-radial-gradient>' | '<-legacy-repeating-linear-gradient>' | '<-legacy-repeating-radial-gradient>' | '<-ms-filter-function-legacy>' | '<-ms-filter-function-list>' | '<-ms-filter-function-progid>' | '<-ms-filter-function>' | '<-ms-filter>' | '<-non-standard-color>' | '<-non-standard-display>' | '<-non-standard-font>' | '<-non-standard-image-rendering>' | '<-non-standard-overflow>' | '<-non-standard-width>' | '<-webkit-gradient()>' | '<-webkit-gradient-color-stop>' | '<-webkit-gradient-point>' | '<-webkit-gradient-radius>' | '<-webkit-gradient-type>' | '<-webkit-mask-box-repeat>' | '<-webkit-mask-clip-style>' | '<CDC-token>' | '<CDO-token>' | '<[-token>' | '<]-token>' | '<abs()>' | '<absolute-size>' | '<acos()>' | '<age>' | '<alpha-value>' | '<an-plus-b>' | '<angle-percentage>' | '<angle>' | '<angular-color-hint>' | '<angular-color-stop-list>' | '<angular-color-stop>' | '<animateable-feature>' | '<any-value>' | '<asin()>' | '<at-keyword-token>' | '<atan()>' | '<atan2()>' | '<attachment>' | '<attr()>' | '<attr-fallback>' | '<attr-matcher>' | '<attr-modifier>' | '<attr-name>' | '<attribute-selector>' | '<auto-repeat>' | '<auto-track-list>' | '<axis>' | '<bad-string-token>' | '<bad-url-token>' | '<baseline-position>' | '<basic-shape>' | '<bcp-47>' | '<bg-clip>' | '<bg-image>' | '<bg-layer>' | '<bg-position>' | '<bg-size>' | '<blend-mode>' | '<blur()>' | '<bottom>' | '<box>' | '<brightness()>' | '<calc()>' | '<calc-constant>' | '<calc-product>' | '<calc-sum>' | '<calc-value>' | '<cf-final-image>' | '<cf-mixing-image>' | '<circle()>' | '<clamp()>' | '<class-selector>' | '<clip-source>' | '<colon-token>' | '<color-stop-angle>' | '<color-stop-length>' | '<color-stop-list>' | '<color-stop>' | '<color>' | '<combinator>' | '<comma-token>' | '<common-lig-values>' | '<compat-auto>' | '<complex-selector-list>' | '<complex-selector>' | '<composite-style>' | '<compositing-operator>' | '<compound-selector-list>' | '<compound-selector>' | '<conic-gradient()>' | '<content-distribution>' | '<content-list>' | '<content-position>' | '<content-replacement>' | '<contextual-alt-values>' | '<contrast()>' | '<cos()>' | '<counter()>' | '<counter-name>' | '<counter-style-name>' | '<counter-style>' | '<counter>' | '<counters()>' | '<cross-fade()>' | '<cubic-bezier-timing-function>' | '<custom-ident>' | '<custom-property-name>' | '<decibel>' | '<declaration-list>' | '<declaration-value>' | '<declaration>' | '<delim-token>' | '<deprecated-system-color>' | '<dimension-token>' | '<dimension>' | '<discretionary-lig-values>' | '<display-box>' | '<display-inside>' | '<display-internal>' | '<display-legacy>' | '<display-listitem>' | '<display-outside>' | '<drop-shadow()>' | '<easing-function>' | '<east-asian-variant-values>' | '<east-asian-width-values>' | '<element()>' | '<ellipse()>' | '<ending-shape>' | '<env()>' | '<exp()>' | '<explicit-track-list>' | '<family-name>' | '<feature-tag-value>' | '<feature-type>' | '<feature-value-block-list>' | '<feature-value-block>' | '<feature-value-declaration-list>' | '<feature-value-declaration>' | '<feature-value-name>' | '<fill-rule>' | '<filter-function-list>' | '<filter-function>' | '<final-bg-layer>' | '<fixed-breadth>' | '<fixed-repeat>' | '<fixed-size>' | '<flex>' | '<font-stretch-absolute>' | '<font-variant-css21>' | '<font-weight-absolute>' | '<frequency-percentage>' | '<frequency>' | '<function-token>' | '<gender>' | '<general-enclosed>' | '<generic-family>' | '<generic-name>' | '<generic-voice>' | '<geometry-box>' | '<gradient>' | '<grayscale()>' | '<grid-line>' | '<hash-token>' | '<hex-color>' | '<historical-lig-values>' | '<hsl()>' | '<hsla()>' | '<hue-rotate()>' | '<hue>' | '<hwb()>' | '<hypot()>' | '<id-selector>' | '<ident-token>' | '<ident>' | '<image()>' | '<image-set()>' | '<image-set-option>' | '<image-src>' | '<image-tags>' | '<image>' | '<inflexible-breadth>' | '<inset()>' | '<integer>' | '<invert()>' | '<keyframe-block-list>' | '<keyframe-block>' | '<keyframe-selector>' | '<keyframes-name>' | '<lab()>' | '<layer()>' | '<layer-name>' | '<lch()>' | '<leader()>' | '<leader-type>' | '<left>' | '<length-percentage>' | '<length>' | '<line-name-list>' | '<line-names>' | '<line-style>' | '<line-width>' | '<linear-color-hint>' | '<linear-color-stop>' | '<linear-gradient()>' | '<log()>' | '<mask-image>' | '<mask-layer>' | '<mask-position>' | '<mask-reference>' | '<mask-source>' | '<masking-mode>' | '<matrix()>' | '<matrix3d()>' | '<max()>' | '<media-and>' | '<media-condition-without-or>' | '<media-condition>' | '<media-feature>' | '<media-in-parens>' | '<media-not>' | '<media-or>' | '<media-query-list>' | '<media-query>' | '<media-type>' | '<mf-boolean>' | '<mf-name>' | '<mf-plain>' | '<mf-range>' | '<mf-value>' | '<min()>' | '<minmax()>' | '<mod()>' | '<name-repeat>' | '<named-color>' | '<namespace-prefix>' | '<ns-prefix>' | '<nth>' | '<number-one-or-greater>' | '<number-percentage>' | '<number-token>' | '<number-zero-one>' | '<number>' | '<numeric-figure-values>' | '<numeric-fraction-values>' | '<numeric-spacing-values>' | '<opacity()>' | '<outline-radius>' | '<overflow-position>' | '<page-body>' | '<page-margin-box-type>' | '<page-margin-box>' | '<page-selector-list>' | '<page-selector>' | '<page-size>' | '<paint()>' | '<paint>' | '<path()>' | '<percentage-token>' | '<percentage>' | '<perspective()>' | '<polygon()>' | '<position>' | '<pow()>' | '<pseudo-class-selector>' | '<pseudo-element-selector>' | '<pseudo-page>' | '<quote>' | '<radial-gradient()>' | '<ratio>' | '<relative-selector-list>' | '<relative-selector>' | '<relative-size>' | '<rem()>' | '<repeat-style>' | '<repeating-conic-gradient()>' | '<repeating-linear-gradient()>' | '<repeating-radial-gradient()>' | '<resolution>' | '<reversed-counter-name>' | '<rgb()>' | '<rgba()>' | '<right>' | '<rotate()>' | '<rotate3d()>' | '<rotateX()>' | '<rotateY()>' | '<rotateZ()>' | '<round()>' | '<rounding-strategy>' | '<saturate()>' | '<scale()>' | '<scale3d()>' | '<scaleX()>' | '<scaleY()>' | '<scaleZ()>' | '<scroll-timeline-axis>' | '<scroll-timeline-name>' | '<scroller>' | '<self-position>' | '<semicolon-token>' | '<semitones>' | '<sepia()>' | '<shadow-t>' | '<shadow>' | '<shape-box>' | '<shape-radius>' | '<shape>' | '<side-or-corner>' | '<sign()>' | '<sin()>' | '<single-animation-composition>' | '<single-animation-direction>' | '<single-animation-fill-mode>' | '<single-animation-iteration-count>' | '<single-animation-play-state>' | '<single-animation-timeline>' | '<single-animation>' | '<single-transition-property>' | '<single-transition>' | '<size>' | '<skew()>' | '<skewX()>' | '<skewY()>' | '<sqrt()>' | '<step-position>' | '<step-timing-function>' | '<string-token>' | '<string>' | '<subclass-selector>' | '<supports-condition>' | '<supports-decl>' | '<supports-feature>' | '<supports-in-parens>' | '<supports-selector-fn>' | '<svg-length>' | '<svg-writing-mode>' | '<symbol>' | '<tan()>' | '<target-counter()>' | '<target-counters()>' | '<target-text()>' | '<target>' | '<time-percentage>' | '<time>' | '<timeline-name>' | '<top>' | '<track-breadth>' | '<track-list>' | '<track-repeat>' | '<track-size>' | '<transform-function>' | '<transform-list>' | '<translate()>' | '<translate3d()>' | '<translateX()>' | '<translateY()>' | '<translateZ()>' | '<type-or-unit>' | '<type-selector>' | '<urange>' | '<url-modifier>' | '<url-token>' | '<url>' | '<var()>' | '<viewport-length>' | '<visual-box>' | '<whitespace-token>' | '<wq-name>' | '<x>' | '<y>' | '<zero>' | '<{-token>' | '<}-token>';
9
- export type ExtendedType = "<'color-profile'>" | "<'color-rendering'>" | "<'enable-background'>" | '<animatable-value>' | '<begin-value-list>' | '<class-list>' | '<clock-value>' | '<color-matrix>' | '<css-declaration-list>' | '<dasharray>' | '<end-value-list>' | '<key-points>' | '<key-splines>' | '<key-times>' | '<list-of-lengths>' | '<list-of-numbers>' | '<list-of-percentages>' | '<list-of-svg-feature-string>' | '<list-of-value>' | '<number-optional-number>' | '<origin>' | '<points>' | '<preserve-aspect-ratio>' | '<rotate>' | '<svg-font-size-adjust>' | '<svg-font-size>' | '<svg-path>' | '<system-language>' | '<text-coordinate>' | '<view-box>' | 'AbsoluteURL' | 'Accept' | 'Any' | 'AutoComplete' | 'BCP47' | 'BrowsingContextName' | 'BrowsingContextNameOrKeyword' | 'CustomElementName' | 'DOMID' | 'DateTime' | 'FunctionBody' | 'HTTPSchemaURL' | 'HashName' | 'IconSize' | 'Int' | 'ItemProp' | 'MIMEType' | 'NoEmptyAny' | 'Number' | 'OneCodePointChar' | 'OneLineAny' | 'Pattern' | 'SerializedPermissionsPolicy' | 'SourceSizeList' | 'Srcset' | 'TabIndex' | 'URL' | 'Uint' | 'XMLName' | 'Zero';
9
+ export type ExtendedType = "<'color-profile'>" | "<'color-rendering'>" | "<'enable-background'>" | '<animatable-value>' | '<begin-value-list>' | '<class-list>' | '<clock-value>' | '<color-matrix>' | '<css-declaration-list>' | '<dasharray>' | '<end-value-list>' | '<key-points>' | '<key-splines>' | '<key-times>' | '<list-of-lengths>' | '<list-of-numbers>' | '<list-of-percentages>' | '<list-of-svg-feature-string>' | '<list-of-value>' | '<number-optional-number>' | '<origin>' | '<points>' | '<preserve-aspect-ratio>' | '<rotate>' | '<svg-font-size-adjust>' | '<svg-font-size>' | '<svg-path>' | '<system-language>' | '<text-coordinate>' | '<view-box>' | 'AbsoluteURL' | 'Accept' | 'Any' | 'AutoComplete' | 'BCP47' | 'BaseURL' | 'BrowsingContextName' | 'BrowsingContextNameOrKeyword' | 'CustomElementName' | 'DOMID' | 'DateTime' | 'FunctionBody' | 'HTTPSchemaURL' | 'HashName' | 'IconSize' | 'Int' | 'ItemProp' | 'MIMEType' | 'NavigableTargetName' | 'NavigableTargetNameOrKeyword' | 'NoEmptyAny' | 'Number' | 'OneCodePointChar' | 'OneLineAny' | 'Pattern' | 'SerializedPermissionsPolicy' | 'SourceSizeList' | 'Srcset' | 'TabIndex' | 'URL' | 'Uint' | 'XMLName' | 'Zero';
10
10
  export type HtmlAttrRequirement = 'Boolean';
11
11
  export interface TypesSchema {
12
12
  type?: Type;
@@ -66,7 +66,7 @@ function _checkSerializedPermissionsPolicy(value) {
66
66
  * > feature-identifier = 1*( ALPHA / DIGIT / "-")
67
67
  * > ```
68
68
  */
69
- /[^\s]*/,
69
+ /\S*/,
70
70
  /**
71
71
  * RWS (Required whitespace)
72
72
  *
@@ -89,7 +89,7 @@ function _checkSerializedPermissionsPolicy(value) {
89
89
  * > feature-identifier = 1*( ALPHA / DIGIT / "-")
90
90
  * > ```
91
91
  */
92
- if (!featureIdentifier || !featureIdentifier.match(/^[a-z0-9-]+$/i)) {
92
+ if (!featureIdentifier || !featureIdentifier.matches(/^[\da-z-]+$/i)) {
93
93
  return featureIdentifier.unmatched({
94
94
  reason: 'unexpected-token',
95
95
  expects: [{ type: 'common', value: 'feature-identifier' }],
@@ -112,7 +112,7 @@ function _checkSerializedPermissionsPolicy(value) {
112
112
  }
113
113
  const allowListPatterns = [
114
114
  // Value
115
- /[^\s]*/,
115
+ /\S*/,
116
116
  // Separator
117
117
  /\s*/,
118
118
  ];
@@ -139,10 +139,10 @@ function _checkSerializedPermissionsPolicy(value) {
139
139
  if (origin.reason !== 'syntax-error') {
140
140
  return origin;
141
141
  }
142
- if (allow.match(['*', "'self'", "'src'", "'none'"], true)) {
142
+ if (allow.matches(['*', "'self'", "'src'", "'none'"], true)) {
143
143
  continue;
144
144
  }
145
- if (allow.match(['self', 'src', 'none'], true)) {
145
+ if (allow.matches(['self', 'src', 'none'], true)) {
146
146
  return allow.unmatched({
147
147
  reason: 'missing-token',
148
148
  expects: [{ type: 'common', value: 'single-quote' }],
@@ -128,7 +128,7 @@ export const checkAutoComplete = () => value => {
128
128
  // > an ordered set of space-separated tokens consisting of
129
129
  // > just autofill detail tokens
130
130
  // > (i.e. the "on" and "off" keywords are not allowed).
131
- if (head.match(['on', 'off'], true)) {
131
+ if (head.matches(['on', 'off'], true)) {
132
132
  if (tail[0]) {
133
133
  acLog('[Unmatched ("%s")] Unexpected pair with "on" or "off": "%s"', value, tail.value);
134
134
  return tail[0].unmatched({
@@ -147,7 +147,7 @@ export const checkAutoComplete = () => value => {
147
147
  // > Optionally, a token whose first eight characters are
148
148
  // > an ASCII case-insensitive match for the string "section-",
149
149
  // > meaning that the field belongs to the named group.
150
- if (head.match(namedGroup, true)) {
150
+ if (head.matches(namedGroup, true)) {
151
151
  hasNamedGroup = true;
152
152
  const sectionToken = tail.search(namedGroup);
153
153
  if (sectionToken) {
@@ -170,7 +170,7 @@ export const checkAutoComplete = () => value => {
170
170
  // > one of the following strings:
171
171
  // > - "shipping", meaning the field is part of the shipping address or contact information
172
172
  // > - "billing", meaning the field is part of the billing address or contact information
173
- if (head.match(partOfAddress, true)) {
173
+ if (head.matches(partOfAddress, true)) {
174
174
  hasPartOfAddress = true;
175
175
  const partToken = tail.search(partOfAddress);
176
176
  if (partToken) {
@@ -194,14 +194,14 @@ export const checkAutoComplete = () => value => {
194
194
  return matched();
195
195
  }
196
196
  }
197
- if (head.match(contactingTokens, true)) {
197
+ if (head.matches(contactingTokens, true)) {
198
198
  hasContactingToken = true;
199
199
  const contactableFiledToken = tail[0];
200
200
  if (!contactableFiledToken) {
201
201
  // Missing autofill field name but it is valid
202
202
  return matched();
203
203
  }
204
- if (!contactableFiledToken.match(contactableFieldNames, true)) {
204
+ if (!contactableFiledToken.matches(contactableFieldNames, true)) {
205
205
  const candidate = getCandidate(contactableFiledToken.value, contactableFieldNames);
206
206
  acLog('[Unmatched ("%s")] Unexpected token: "%s"', value, contactableFiledToken.value);
207
207
  return contactableFiledToken.unmatched({
@@ -215,7 +215,7 @@ export const checkAutoComplete = () => value => {
215
215
  });
216
216
  }
217
217
  if (tail[1]) {
218
- if (tail[1].match(webauthnFieldNames)) {
218
+ if (tail[1].matches(webauthnFieldNames)) {
219
219
  return matched();
220
220
  }
221
221
  const candidate = getCandidate(tail[1].value, webauthnFieldNames);
@@ -238,9 +238,9 @@ export const checkAutoComplete = () => value => {
238
238
  }
239
239
  return matched();
240
240
  }
241
- if (head.match([...autofillFieldNames, ...contactableFieldNames], true)) {
241
+ if (head.matches([...autofillFieldNames, ...contactableFieldNames], true)) {
242
242
  if (tail[0]) {
243
- if (tail[0].match(webauthnFieldNames)) {
243
+ if (tail[0].matches(webauthnFieldNames)) {
244
244
  return matched();
245
245
  }
246
246
  const candidate = getCandidate(tail[0].value, webauthnFieldNames);
@@ -263,7 +263,7 @@ export const checkAutoComplete = () => value => {
263
263
  }
264
264
  return matched();
265
265
  }
266
- if (head.match(webauthnFieldNames)) {
266
+ if (head.matches(webauthnFieldNames)) {
267
267
  return matched();
268
268
  }
269
269
  const expects = [
@@ -286,10 +286,7 @@ export const checkAutoComplete = () => value => {
286
286
  }
287
287
  }
288
288
  else if (!hasPartOfAddress) {
289
- expects.unshift(...partOfAddress
290
- .slice()
291
- .reverse()
292
- .map(token => ({
289
+ expects.unshift(...[...partOfAddress].reverse().map(token => ({
293
290
  type: 'const',
294
291
  value: token,
295
292
  })));
@@ -10,13 +10,13 @@ export const checkDateString = () => function checkDateString(value) {
10
10
  // YYYY
11
11
  /[^-]*/,
12
12
  // -
13
- /[^0-9]?/,
13
+ /\D?/,
14
14
  // MM
15
15
  /[^-]*/,
16
16
  // -
17
- /[^0-9]/,
17
+ /\D/,
18
18
  // DD
19
- /.[0-9]*/,
19
+ /.\d*/,
20
20
  ]);
21
21
  log('Date: "%s" => %O', tokens.value, tokens);
22
22
  const res = tokens.eachCheck(datetimeTokenCheck.year, datetimeTokenCheck.hyphen, datetimeTokenCheck.month, datetimeTokenCheck.hyphen, datetimeTokenCheck.date, datetimeTokenCheck.extra);