@markuplint/ml-spec 3.12.0 → 3.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/lib/constant/aria-version.d.ts +2 -2
  2. package/lib/dom-traverse/get-attr-specs.d.ts +1 -1
  3. package/lib/dom-traverse/get-computed-aria-props.d.ts +5 -5
  4. package/lib/dom-traverse/get-computed-role.d.ts +6 -1
  5. package/lib/dom-traverse/get-content-model.d.ts +26 -1
  6. package/lib/dom-traverse/get-implicit-role.d.ts +5 -1
  7. package/lib/dom-traverse/get-non-presentational-ancestor.d.ts +10 -4
  8. package/lib/dom-traverse/get-permitted-roles.d.ts +7 -3
  9. package/lib/dom-traverse/get-spec.d.ts +4 -1
  10. package/lib/dom-traverse/has-required-owned-elements.d.ts +7 -1
  11. package/lib/dom-traverse/matches-context-role.d.ts +6 -1
  12. package/lib/specs/aria-specs.d.ts +7 -4
  13. package/lib/specs/content-model-category-to-tag-names.d.ts +4 -1
  14. package/lib/specs/get-aria.d.ts +7 -1
  15. package/lib/specs/get-attr-specs.d.ts +6 -2
  16. package/lib/specs/get-implicit-role.d.ts +7 -1
  17. package/lib/specs/get-permitted-roles.d.ts +9 -3
  18. package/lib/specs/get-role-spec.d.ts +10 -3
  19. package/lib/specs/get-spec-by-tag-name.d.ts +5 -1
  20. package/lib/specs/is-palpable-elements.d.ts +8 -4
  21. package/lib/specs/resolve-version.d.ts +4 -1
  22. package/lib/specs/schema-to-spec.d.ts +3 -3
  23. package/lib/types/aria.d.ts +147 -133
  24. package/lib/types/attributes.d.ts +1504 -110
  25. package/lib/types/index.d.ts +173 -145
  26. package/lib/types/permitted-structures.d.ts +74 -35
  27. package/lib/utils/merge-array.d.ts +9 -4
  28. package/lib/utils/resolve-namespace.d.ts +4 -4
  29. package/package.json +6 -6
  30. package/test/dom-traverse/get-computed-role.spec.js +1 -1
@@ -8,188 +8,216 @@ import type { ReadonlyDeep } from 'type-fest';
8
8
  * markuplint Markup-language spec
9
9
  */
10
10
  export interface MLMLSpec {
11
- readonly cites: Cites;
12
- readonly def: SpecDefs;
13
- readonly specs: readonly ElementSpec[];
11
+ readonly cites: Cites;
12
+ readonly def: SpecDefs;
13
+ readonly specs: readonly ElementSpec[];
14
14
  }
15
15
  export type ExtendedElementSpec = Partial<Omit<ElementSpec, 'name' | 'attributes'>> & {
16
- readonly name: ElementSpec['name'];
17
- readonly attributes?: Readonly<Record<string, Partial<Attribute>>>;
16
+ readonly name: ElementSpec['name'];
17
+ readonly attributes?: Readonly<Record<string, Partial<Attribute>>>;
18
18
  };
19
19
  export type ExtendedSpec = {
20
- readonly cites?: Cites;
21
- readonly def?: Partial<SpecDefs>;
22
- readonly specs?: readonly ExtendedElementSpec[];
20
+ readonly cites?: Cites;
21
+ readonly def?: Partial<SpecDefs>;
22
+ readonly specs?: readonly ExtendedElementSpec[];
23
23
  };
24
24
  /**
25
25
  * Reference URLs
26
26
  */
27
27
  export type Cites = readonly string[];
28
28
  export type SpecDefs = {
29
- readonly '#globalAttrs': {
30
- readonly [category: string]: Readonly<Record<string, Partial<Attribute>>>;
31
- };
32
- readonly '#aria': {
33
- readonly '1.3': ARIASpec;
34
- readonly '1.2': ARIASpec;
35
- readonly '1.1': ARIASpec;
36
- };
37
- readonly '#contentModels': {
38
- readonly [model in Category]?: readonly string[];
39
- };
29
+ readonly '#globalAttrs': {
30
+ readonly [category: string]: Readonly<Record<string, Partial<Attribute>>>;
31
+ };
32
+ readonly '#aria': {
33
+ readonly '1.3': ARIASpec;
34
+ readonly '1.2': ARIASpec;
35
+ readonly '1.1': ARIASpec;
36
+ };
37
+ readonly '#contentModels': {
38
+ readonly [model in Category]?: readonly string[];
39
+ };
40
40
  };
41
41
  type ARIASpec = {
42
- readonly roles: readonly ARIARoleInSchema[];
43
- readonly graphicsRoles: readonly ARIARoleInSchema[];
44
- readonly props: readonly ARIAProperty[];
42
+ readonly roles: readonly ARIARoleInSchema[];
43
+ readonly graphicsRoles: readonly ARIARoleInSchema[];
44
+ readonly props: readonly ARIAProperty[];
45
45
  };
46
46
  /**
47
47
  * Element spec
48
48
  */
49
49
  export type ElementSpec = {
50
- /**
51
- * Tag name
52
- */
53
- readonly name: string;
54
- /**
55
- * Namespaces in XML
56
- * @see https://www.w3.org/TR/xml-names/
57
- */
58
- readonly namespace?: NamespaceURI;
59
- /**
60
- * Reference URL
61
- */
62
- readonly cite: string;
63
- /**
64
- * Description
65
- */
66
- readonly description?: string;
67
- /**
68
- * Experimental technology
69
- */
70
- readonly experimental?: true;
71
- /**
72
- * Obsolete or alternative elements
73
- */
74
- readonly obsolete?: true | {
75
- readonly alt: string;
76
- };
77
- /**
78
- * Deprecated
79
- */
80
- readonly deprecated?: true;
81
- /**
82
- * Non-standard
83
- */
84
- readonly nonStandard?: true;
85
- /**
86
- * Element categories
87
- */
88
- readonly categories: readonly Category[];
89
- /**
90
- * Permitted contents and permitted parents
91
- */
92
- readonly contentModel: ReadonlyDeep<ContentModel>;
93
- /**
94
- * Tag omission
95
- */
96
- readonly omission: ElementSpecOmission;
97
- /**
98
- * Global Attributes
99
- */
100
- readonly globalAttrs: ReadonlyDeep<GlobalAttributes>;
101
- /**
102
- * Attributes
103
- */
104
- readonly attributes: Readonly<Record<string, Attribute>>;
105
- /**
106
- * WAI-ARIA role and properties
107
- */
108
- readonly aria: ReadonlyDeep<ARIA>;
109
- /**
110
- * If true, it is possible to add any properties as attributes,
111
- * for example, when using a template engine or a view language.
112
- *
113
- * @see https://v2.vuejs.org/v2/guide/components-slots.html#Scoped-Slots
114
- *
115
- * **It assumes to specify it on the parser plugin.**
116
- */
117
- readonly possibleToAddProperties?: true;
50
+ /**
51
+ * Tag name
52
+ */
53
+ readonly name: string;
54
+ /**
55
+ * Namespaces in XML
56
+ * @see https://www.w3.org/TR/xml-names/
57
+ */
58
+ readonly namespace?: NamespaceURI;
59
+ /**
60
+ * Reference URL
61
+ */
62
+ readonly cite: string;
63
+ /**
64
+ * Description
65
+ */
66
+ readonly description?: string;
67
+ /**
68
+ * Experimental technology
69
+ */
70
+ readonly experimental?: true;
71
+ /**
72
+ * Obsolete or alternative elements
73
+ */
74
+ readonly obsolete?:
75
+ | true
76
+ | {
77
+ readonly alt: string;
78
+ };
79
+ /**
80
+ * Deprecated
81
+ */
82
+ readonly deprecated?: true;
83
+ /**
84
+ * Non-standard
85
+ */
86
+ readonly nonStandard?: true;
87
+ /**
88
+ * Element categories
89
+ */
90
+ readonly categories: readonly Category[];
91
+ /**
92
+ * Permitted contents and permitted parents
93
+ */
94
+ readonly contentModel: ReadonlyDeep<ContentModel>;
95
+ /**
96
+ * Tag omission
97
+ */
98
+ readonly omission: ElementSpecOmission;
99
+ /**
100
+ * Global Attributes
101
+ */
102
+ readonly globalAttrs: ReadonlyDeep<GlobalAttributes>;
103
+ /**
104
+ * Attributes
105
+ */
106
+ readonly attributes: Readonly<Record<string, Attribute>>;
107
+ /**
108
+ * WAI-ARIA role and properties
109
+ */
110
+ readonly aria: ReadonlyDeep<ARIA>;
111
+ /**
112
+ * If true, it is possible to add any properties as attributes,
113
+ * for example, when using a template engine or a view language.
114
+ *
115
+ * @see https://v2.vuejs.org/v2/guide/components-slots.html#Scoped-Slots
116
+ *
117
+ * **It assumes to specify it on the parser plugin.**
118
+ */
119
+ readonly possibleToAddProperties?: true;
118
120
  };
119
121
  type ElementSpecOmission = false | ElementSpecOmissionTags;
120
122
  type ElementSpecOmissionTags = {
121
- readonly startTag: boolean | ElementCondition;
122
- readonly endTag: boolean | ElementCondition;
123
+ readonly startTag: boolean | ElementCondition;
124
+ readonly endTag: boolean | ElementCondition;
123
125
  };
124
126
  type ElementCondition = {
125
- readonly __WIP__: 'WORK_IN_PROGRESS';
127
+ readonly __WIP__: 'WORK_IN_PROGRESS';
126
128
  };
127
129
  export type Attribute = {
128
- readonly name: string;
129
- readonly type: ReadonlyDeep<AttributeType> | readonly ReadonlyDeep<AttributeType>[];
130
- readonly description?: string;
131
- readonly caseSensitive?: true;
132
- readonly experimental?: boolean;
133
- readonly obsolete?: true;
134
- readonly deprecated?: boolean;
135
- readonly nonStandard?: true;
130
+ readonly name: string;
131
+ readonly type: ReadonlyDeep<AttributeType> | readonly ReadonlyDeep<AttributeType>[];
132
+ readonly description?: string;
133
+ readonly caseSensitive?: true;
134
+ readonly experimental?: boolean;
135
+ readonly obsolete?: true;
136
+ readonly deprecated?: boolean;
137
+ readonly nonStandard?: true;
136
138
  } & ExtendableAttributeSpec;
137
139
  type ExtendableAttributeSpec = Omit<ReadonlyDeep<AttributeJSON>, 'type'>;
138
140
  export type ARIARole = {
139
- readonly name: string;
140
- readonly isAbstract: boolean;
141
- readonly requiredContextRole: readonly string[];
142
- readonly requiredOwnedElements: readonly string[];
143
- readonly accessibleNameRequired: boolean;
144
- readonly accessibleNameFromAuthor: boolean;
145
- readonly accessibleNameFromContent: boolean;
146
- readonly accessibleNameProhibited: boolean;
147
- readonly childrenPresentational: boolean;
148
- readonly ownedProperties: readonly ARIARoleOwnedProperties[];
149
- readonly prohibitedProperties: readonly string[];
141
+ readonly name: string;
142
+ readonly isAbstract: boolean;
143
+ readonly requiredContextRole: readonly string[];
144
+ readonly requiredOwnedElements: readonly string[];
145
+ readonly accessibleNameRequired: boolean;
146
+ readonly accessibleNameFromAuthor: boolean;
147
+ readonly accessibleNameFromContent: boolean;
148
+ readonly accessibleNameProhibited: boolean;
149
+ readonly childrenPresentational: boolean;
150
+ readonly ownedProperties: readonly ARIARoleOwnedProperties[];
151
+ readonly prohibitedProperties: readonly string[];
150
152
  };
151
- export type ARIARoleInSchema = Partial<ARIARole & {
152
- readonly description: string;
153
- readonly generalization: readonly string[];
154
- }> & {
155
- readonly name: string;
153
+ export type ARIARoleInSchema = Partial<
154
+ ARIARole & {
155
+ readonly description: string;
156
+ readonly generalization: readonly string[];
157
+ }
158
+ > & {
159
+ readonly name: string;
156
160
  };
157
161
  export type ARIARoleOwnedProperties = {
158
- readonly name: string;
159
- readonly inherited?: true;
160
- readonly required?: true;
161
- readonly deprecated?: true;
162
+ readonly name: string;
163
+ readonly inherited?: true;
164
+ readonly required?: true;
165
+ readonly deprecated?: true;
162
166
  };
163
167
  export type ARIAProperty = {
164
- readonly name: string;
165
- readonly type: 'property' | 'state';
166
- readonly deprecated?: true;
167
- readonly isGlobal?: true;
168
- readonly value: ARIAAttributeValue;
169
- readonly conditionalValue?: readonly {
170
- readonly role: readonly string[];
171
- readonly value: ARIAAttributeValue;
172
- }[];
173
- readonly enum: readonly string[];
174
- readonly defaultValue?: string;
175
- readonly equivalentHtmlAttrs?: readonly EquivalentHtmlAttr[];
176
- readonly valueDescriptions?: Readonly<Record<string, string>>;
168
+ readonly name: string;
169
+ readonly type: 'property' | 'state';
170
+ readonly deprecated?: true;
171
+ readonly isGlobal?: true;
172
+ readonly value: ARIAAttributeValue;
173
+ readonly conditionalValue?: readonly {
174
+ readonly role: readonly string[];
175
+ readonly value: ARIAAttributeValue;
176
+ }[];
177
+ readonly enum: readonly string[];
178
+ readonly defaultValue?: string;
179
+ readonly equivalentHtmlAttrs?: readonly EquivalentHtmlAttr[];
180
+ readonly valueDescriptions?: Readonly<Record<string, string>>;
177
181
  };
178
- export type ARIAAttributeValue = 'true/false' | 'tristate' | 'true/false/undefined' | 'ID reference' | 'ID reference list' | 'integer' | 'number' | 'string' | 'token' | 'token list' | 'URI';
182
+ export type ARIAAttributeValue =
183
+ | 'true/false'
184
+ | 'tristate'
185
+ | 'true/false/undefined'
186
+ | 'ID reference'
187
+ | 'ID reference list'
188
+ | 'integer'
189
+ | 'number'
190
+ | 'string'
191
+ | 'token'
192
+ | 'token list'
193
+ | 'URI';
179
194
  export type ARIAVersion = (typeof ariaVersions)[number];
180
195
  export type EquivalentHtmlAttr = {
181
- readonly htmlAttrName: string;
182
- readonly isNotStrictEquivalent?: true;
183
- readonly value: string | null;
196
+ readonly htmlAttrName: string;
197
+ readonly isNotStrictEquivalent?: true;
198
+ readonly value: string | null;
184
199
  };
185
200
  export type Matches = (selector: string) => boolean;
186
201
  export type ComputedRole = {
187
- readonly el: Element;
188
- readonly role: (ARIARole & {
189
- readonly superClassRoles: readonly ARIARoleInSchema[];
190
- readonly isImplicit?: boolean;
191
- }) | null;
192
- readonly errorType?: RoleComputationError;
202
+ readonly el: Element;
203
+ readonly role:
204
+ | (ARIARole & {
205
+ readonly superClassRoles: readonly ARIARoleInSchema[];
206
+ readonly isImplicit?: boolean;
207
+ })
208
+ | null;
209
+ readonly errorType?: RoleComputationError;
193
210
  };
194
- export type RoleComputationError = 'ABSTRACT' | 'GLOBAL_PROP_MUST_NOT_BE_PRESENTATIONAL' | 'IMPLICIT_ROLE_NAMESPACE_ERROR' | 'INTERACTIVE_ELEMENT_MUST_NOT_BE_PRESENTATIONAL' | 'INVALID_LANDMARK' | 'INVALID_REQUIRED_CONTEXT_ROLE' | 'NO_EXPLICIT' | 'NO_OWNER' | 'NO_PERMITTED' | 'REQUIRED_OWNED_ELEMENT_MUST_NOT_BE_PRESENTATIONAL' | 'ROLE_NO_EXISTS';
211
+ export type RoleComputationError =
212
+ | 'ABSTRACT'
213
+ | 'GLOBAL_PROP_MUST_NOT_BE_PRESENTATIONAL'
214
+ | 'IMPLICIT_ROLE_NAMESPACE_ERROR'
215
+ | 'INTERACTIVE_ELEMENT_MUST_NOT_BE_PRESENTATIONAL'
216
+ | 'INVALID_LANDMARK'
217
+ | 'INVALID_REQUIRED_CONTEXT_ROLE'
218
+ | 'NO_EXPLICIT'
219
+ | 'NO_OWNER'
220
+ | 'NO_PERMITTED'
221
+ | 'REQUIRED_OWNED_ELEMENT_MUST_NOT_BE_PRESENTATIONAL'
222
+ | 'ROLE_NO_EXISTS';
195
223
  export {};
@@ -3,56 +3,95 @@
3
3
  * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
4
4
  * and run json-schema-to-typescript to regenerate this file.
5
5
  */
6
- export type PermittedContentPattern = PermittedContentRequire | PermittedContentOptional | PermittedContentOneOrMore | PermittedContentZeroOrMore | PermittedContentChoice | PermittedContentTransparent;
6
+ export type PermittedContentPattern =
7
+ | PermittedContentRequire
8
+ | PermittedContentOptional
9
+ | PermittedContentOneOrMore
10
+ | PermittedContentZeroOrMore
11
+ | PermittedContentChoice
12
+ | PermittedContentTransparent;
7
13
  export type Model = ContentType | ContentType[];
8
14
  export type ContentType = string | Category;
9
- export type Category = '#text' | '#phrasing' | '#flow' | '#interactive' | '#heading' | '#sectioning' | '#metadata' | '#embedded' | '#palpable' | '#script-supporting' | '#SVGAnimation' | '#SVGBasicShapes' | '#SVGContainer' | '#SVGDescriptive' | '#SVGFilterPrimitive' | '#SVGFont' | '#SVGGradient' | '#SVGGraphics' | '#SVGGraphicsReferencing' | '#SVGLightSource' | '#SVGNeverRendered' | '#SVGNone' | '#SVGPaintServer' | '#SVGRenderable' | '#SVGShape' | '#SVGStructural' | '#SVGStructurallyExternal' | '#SVGTextContent' | '#SVGTextContentChild';
15
+ export type Category =
16
+ | '#text'
17
+ | '#phrasing'
18
+ | '#flow'
19
+ | '#interactive'
20
+ | '#heading'
21
+ | '#sectioning'
22
+ | '#metadata'
23
+ | '#embedded'
24
+ | '#palpable'
25
+ | '#script-supporting'
26
+ | '#SVGAnimation'
27
+ | '#SVGBasicShapes'
28
+ | '#SVGContainer'
29
+ | '#SVGDescriptive'
30
+ | '#SVGFilterPrimitive'
31
+ | '#SVGFont'
32
+ | '#SVGGradient'
33
+ | '#SVGGraphics'
34
+ | '#SVGGraphicsReferencing'
35
+ | '#SVGLightSource'
36
+ | '#SVGNeverRendered'
37
+ | '#SVGNone'
38
+ | '#SVGPaintServer'
39
+ | '#SVGRenderable'
40
+ | '#SVGShape'
41
+ | '#SVGStructural'
42
+ | '#SVGStructurallyExternal'
43
+ | '#SVGTextContent'
44
+ | '#SVGTextContentChild';
10
45
  export interface ContentModelsSchema {
11
- __contentModel?: ContentModel;
46
+ __contentModel?: ContentModel;
12
47
  }
13
48
  export interface ContentModel {
14
- contents: PermittedContentPattern[] | boolean;
15
- descendantOf?: string;
16
- conditional?: {
17
- condition: string;
18
- contents: PermittedContentPattern[] | boolean;
19
- }[];
49
+ contents: PermittedContentPattern[] | boolean;
50
+ descendantOf?: string;
51
+ conditional?: {
52
+ condition: string;
53
+ contents: PermittedContentPattern[] | boolean;
54
+ }[];
20
55
  }
21
56
  export interface PermittedContentRequire {
22
- require: Model | PermittedContentPattern[];
23
- max?: number;
24
- min?: number;
25
- _TODO_?: string;
57
+ require: Model | PermittedContentPattern[];
58
+ max?: number;
59
+ min?: number;
60
+ _TODO_?: string;
26
61
  }
27
62
  export interface PermittedContentOptional {
28
- optional: Model | PermittedContentPattern[];
29
- max?: number;
30
- _TODO_?: string;
63
+ optional: Model | PermittedContentPattern[];
64
+ max?: number;
65
+ _TODO_?: string;
31
66
  }
32
67
  export interface PermittedContentOneOrMore {
33
- oneOrMore: Model | PermittedContentPattern[];
34
- max?: number;
35
- _TODO_?: string;
68
+ oneOrMore: Model | PermittedContentPattern[];
69
+ max?: number;
70
+ _TODO_?: string;
36
71
  }
37
72
  export interface PermittedContentZeroOrMore {
38
- zeroOrMore: Model | PermittedContentPattern[];
39
- max?: number;
40
- _TODO_?: string;
73
+ zeroOrMore: Model | PermittedContentPattern[];
74
+ max?: number;
75
+ _TODO_?: string;
41
76
  }
42
77
  export interface PermittedContentChoice {
43
- /**
44
- * @minItems 2
45
- * @maxItems 5
46
- */
47
- choice: [PermittedContentPattern[], PermittedContentPattern[]] | [PermittedContentPattern[], PermittedContentPattern[], PermittedContentPattern[]] | [PermittedContentPattern[], PermittedContentPattern[], PermittedContentPattern[], PermittedContentPattern[]] | [
48
- PermittedContentPattern[],
49
- PermittedContentPattern[],
50
- PermittedContentPattern[],
51
- PermittedContentPattern[],
52
- PermittedContentPattern[]
53
- ];
54
- _TODO_?: string;
78
+ /**
79
+ * @minItems 2
80
+ * @maxItems 5
81
+ */
82
+ choice:
83
+ | [PermittedContentPattern[], PermittedContentPattern[]]
84
+ | [PermittedContentPattern[], PermittedContentPattern[], PermittedContentPattern[]]
85
+ | [PermittedContentPattern[], PermittedContentPattern[], PermittedContentPattern[], PermittedContentPattern[]]
86
+ | [
87
+ PermittedContentPattern[],
88
+ PermittedContentPattern[],
89
+ PermittedContentPattern[],
90
+ PermittedContentPattern[],
91
+ PermittedContentPattern[],
92
+ ];
93
+ _TODO_?: string;
55
94
  }
56
95
  export interface PermittedContentTransparent {
57
- transparent: string;
96
+ transparent: string;
58
97
  }
@@ -1,5 +1,10 @@
1
- type NamedDefinition = string | {
2
- readonly name: string;
3
- };
4
- export declare function mergeArray<T extends NamedDefinition>(a: readonly T[], b: readonly T[] | null | undefined): readonly T[];
1
+ type NamedDefinition =
2
+ | string
3
+ | {
4
+ readonly name: string;
5
+ };
6
+ export declare function mergeArray<T extends NamedDefinition>(
7
+ a: readonly T[],
8
+ b: readonly T[] | null | undefined,
9
+ ): readonly T[];
5
10
  export {};
@@ -1,9 +1,9 @@
1
1
  import type { NamespaceURI, Namespace } from '@markuplint/ml-ast';
2
2
  type NamespacedElementName = {
3
- localNameWithNS: string;
4
- localName: string;
5
- namespace: Namespace;
6
- namespaceURI: NamespaceURI;
3
+ localNameWithNS: string;
4
+ localName: string;
5
+ namespace: Namespace;
6
+ namespaceURI: NamespaceURI;
7
7
  };
8
8
  export declare function resolveNamespace(name: string, namespaceURI?: string | null): NamespacedElementName;
9
9
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@markuplint/ml-spec",
3
- "version": "3.12.0",
3
+ "version": "3.14.0",
4
4
  "description": "Types and schema that specs of the Markup languages for markuplint",
5
5
  "repository": "git@github.com:markuplint/markuplint.git",
6
6
  "author": "Yusuke Hirao <yusukehirao@me.com>",
@@ -26,15 +26,15 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@markuplint/ml-ast": "3.2.0",
29
- "@markuplint/types": "3.10.0",
30
- "dom-accessibility-api": "^0.6.1",
29
+ "@markuplint/types": "3.12.0",
30
+ "dom-accessibility-api": "^0.6.3",
31
31
  "is-plain-object": "^5.0.0",
32
32
  "tslib": "^2.6.2",
33
- "type-fest": "^4.3.1"
33
+ "type-fest": "^4.8.2"
34
34
  },
35
35
  "devDependencies": {
36
- "@markuplint/test-tools": "3.6.1",
36
+ "@markuplint/test-tools": "3.8.0",
37
37
  "json-schema-to-typescript": "13.1.1"
38
38
  },
39
- "gitHead": "ef31aef8f2fff319d0f692feead332ec5fc5c7cf"
39
+ "gitHead": "b37b749d7ac0f9e6cbd022ee7031bc020c6677d3"
40
40
  }
@@ -254,7 +254,7 @@ describe('1.3', () => {
254
254
  expect(tree('<table role="none"><tr><td>foo</td></tr></table>', '1.3')).toStrictEqual([
255
255
  ['table', 'none'],
256
256
  ['tbody', null, 'NO_OWNER'],
257
- ['tr', null, 'INVALID_REQUIRED_CONTEXT_ROLE'],
257
+ ['tr', 'row'],
258
258
  ['td', null /* NOT MATCHING THE CONDITIONS */],
259
259
  ]);
260
260
  expect(