@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.
- package/LICENSE +1 -1
- package/README.md +63 -61
- package/lib/css-syntax.js +16 -11
- package/lib/defs.d.ts +1 -0
- package/lib/defs.js +172 -52
- package/lib/enum.js +1 -1
- package/lib/get-candidate.js +2 -2
- package/lib/keyword-type.js +3 -3
- package/lib/number.d.ts +2 -2
- package/lib/number.js +2 -2
- package/lib/primitive/is-float.js +1 -1
- package/lib/primitive/is-int.js +1 -1
- package/lib/primitive/is-non-zero-uint.js +1 -1
- package/lib/primitive/is-uint.js +3 -3
- package/lib/primitive/range.js +2 -2
- package/lib/primitive/split-unit.js +1 -1
- package/lib/token/token-collection.d.ts +4 -5
- package/lib/token/token-collection.js +23 -18
- package/lib/token/token.d.ts +1 -1
- package/lib/token/token.js +9 -8
- package/lib/types.d.ts +1 -0
- package/lib/types.schema.d.ts +1 -1
- package/lib/w3c/check-serialized-permissions-policy.js +5 -5
- package/lib/whatwg/check-autocomplete.js +10 -13
- package/lib/whatwg/check-datetime/date-string.js +3 -3
- package/lib/whatwg/check-datetime/datetime-tokens.js +18 -18
- package/lib/whatwg/check-datetime/duration-string.js +30 -29
- package/lib/whatwg/check-datetime/global-date-and-time-string.js +8 -8
- package/lib/whatwg/check-datetime/local-date-and-time-string.js +17 -16
- package/lib/whatwg/check-datetime/month-string.js +1 -1
- package/lib/whatwg/check-datetime/time-string.js +4 -4
- package/lib/whatwg/check-datetime/time-zone-offset-string.js +6 -6
- package/lib/whatwg/check-datetime/week-string.js +2 -2
- package/lib/whatwg/check-datetime/yearless-date-string.js +2 -2
- package/lib/whatwg/is-abs-url.js +7 -7
- package/lib/whatwg/is-browser-context-name.d.ts +2 -0
- package/lib/whatwg/is-browser-context-name.js +2 -0
- package/lib/whatwg/is-custom-element-name.d.ts +9 -4
- package/lib/whatwg/is-custom-element-name.js +21 -33
- package/lib/whatwg/is-navigable-target-name.d.ts +11 -0
- package/lib/whatwg/is-navigable-target-name.js +20 -0
- package/package.json +12 -9
- package/types.schema.json +3 -0
package/lib/primitive/is-int.js
CHANGED
package/lib/primitive/is-uint.js
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* @param value
|
|
5
5
|
*/
|
|
6
6
|
export function isUint(value, options) {
|
|
7
|
-
const matched =
|
|
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;
|
package/lib/primitive/range.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export function splitUnit(value) {
|
|
7
7
|
value = value.trim().toLowerCase();
|
|
8
|
-
const matched = value.match(/(
|
|
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:
|
|
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?:
|
|
9
|
+
static fromPatterns(value: Readonly<Token> | string, patterns: readonly Readonly<RegExp>[], typeOptions?: Omit<TokenCollectionOptions, 'specificSeparator'> & {
|
|
11
10
|
repeat?: boolean;
|
|
12
|
-
}
|
|
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?:
|
|
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,
|
|
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 (
|
|
23
|
-
|
|
24
|
-
|
|
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,
|
|
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
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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,
|
|
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;
|
package/lib/token/token.d.ts
CHANGED
|
@@ -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
|
-
|
|
45
|
+
matches(value: TokenValue, caseInsensitive?: boolean): boolean;
|
|
46
46
|
toJSON(): {
|
|
47
47
|
type: number;
|
|
48
48
|
value: string;
|
package/lib/token/token.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export class Token {
|
|
2
2
|
static getCol(value, offset) {
|
|
3
|
-
const lines = value.slice(0, offset).split(/\n/
|
|
4
|
-
return (lines
|
|
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/
|
|
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
|
-
|
|
65
|
+
matches(value, caseInsensitive) {
|
|
65
66
|
if (Array.isArray(value)) {
|
|
66
|
-
return value.some(v => this.
|
|
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';
|
package/lib/types.schema.d.ts
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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
|
-
|
|
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.
|
|
142
|
+
if (allow.matches(['*', "'self'", "'src'", "'none'"], true)) {
|
|
143
143
|
continue;
|
|
144
144
|
}
|
|
145
|
-
if (allow.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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].
|
|
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.
|
|
241
|
+
if (head.matches([...autofillFieldNames, ...contactableFieldNames], true)) {
|
|
242
242
|
if (tail[0]) {
|
|
243
|
-
if (tail[0].
|
|
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.
|
|
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
|
-
|
|
13
|
+
/\D?/,
|
|
14
14
|
// MM
|
|
15
15
|
/[^-]*/,
|
|
16
16
|
// -
|
|
17
|
-
|
|
17
|
+
/\D/,
|
|
18
18
|
// DD
|
|
19
|
-
|
|
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);
|