Skip to content

Commit 629f1d5

Browse files
committed
feat(axe.d.ts): add nodeSerializer API
This API was added in pr dequelabs#4093, but TS definitions were never added.
1 parent 4d8c87e commit 629f1d5

File tree

2 files changed

+39
-4
lines changed

2 files changed

+39
-4
lines changed

axe.d.ts

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,9 @@ declare namespace axe {
342342
interface DqElement extends SerialDqElement {
343343
element: Element;
344344
toJSON(): SerialDqElement;
345+
}
346+
interface DqElementConstructor {
347+
new (elm: Element, options?: { absolutePaths?: boolean }): DqElement;
345348
mergeSpecs(
346349
childSpec: SerialDqElement,
347350
parentSpec: SerialDqElement
@@ -405,6 +408,27 @@ declare namespace axe {
405408
boundingClientRect: DOMRect;
406409
}
407410

411+
interface CustomNodeSerializer {
412+
toSpec: (dqElm: DqElement) => SerialDqElement;
413+
mergeSpecs: (
414+
nodeSpec: SerialDqElement,
415+
parentFrameSpec: SerialDqElement
416+
) => SerialDqElement;
417+
}
418+
419+
interface NodeSerializer {
420+
update: (serializer: CustomNodeSerializer) => void;
421+
toSpec: (node: Element | VirtualNode) => SerialDqElement;
422+
dqElmToSpec: (
423+
dqElm: DqElement | SerialDqElement,
424+
options?: RunOptions
425+
) => SerialDqElement;
426+
mergeSpecs: (
427+
nodeSpec: SerialDqElement,
428+
parentFrameSpec: SerialDqElement
429+
) => SerialDqElement;
430+
}
431+
408432
interface Utils {
409433
getFrameContexts: (
410434
context?: ElementContext,
@@ -423,15 +447,13 @@ declare namespace axe {
423447
selector: unknown
424448
) => selector is LabelledShadowDomSelector;
425449

426-
DqElement: new (
427-
elm: Element,
428-
options?: { absolutePaths?: boolean }
429-
) => DqElement;
450+
DqElement: DqElementConstructor;
430451
uuid: (
431452
options?: { random?: Uint8Array | Array<number> },
432453
buf?: Uint8Array | Array<number>,
433454
offset?: number
434455
) => string | Uint8Array | Array<number>;
456+
nodeSerializer: NodeSerializer;
435457
}
436458

437459
interface Aria {

typings/axe-core/axe-core-tests.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,19 @@ if (axe.utils.isLabelledShadowDomSelector(unknownContext)) {
450450
} else if (axe.utils.isContextSpec(unknownContext)) {
451451
let context: axe.ContextSpec = unknownContext;
452452
}
453+
axe.utils.nodeSerializer.update({
454+
toSpec(dqElm: axe.DqElement) {
455+
return dqElm.toJSON();
456+
},
457+
mergeSpecs(childSpec: axe.SerialDqElement, parentSpec: axe.SerialDqElement) {
458+
return axe.utils.DqElement.mergeSpecs(childSpec, parentSpec);
459+
}
460+
});
461+
const spec2: axe.SerialDqElement = axe.utils.nodeSerializer.toSpec(element);
462+
const spec3: axe.SerialDqElement = axe.utils.nodeSerializer.dqElmToSpec(
463+
dqElement,
464+
options
465+
);
453466

454467
// Commons
455468
axe.commons.aria.getRoleType('img');

0 commit comments

Comments
 (0)