compile with typescript

This commit is contained in:
Joel Einbinder 2020-01-14 16:54:07 -08:00
parent 7530007466
commit 3cb4d27550
6 changed files with 22 additions and 27 deletions

View file

@ -59,8 +59,8 @@ export interface AXNode {
}
export class Accessibility {
private _getAXTree: (needle?: dom.ElementHandle) => Promise<{tree: AXNode, needle?: AXNode}>;
constructor(getAXTree: (needle?: dom.ElementHandle) => Promise<{tree: AXNode, needle?: AXNode}>) {
private _getAXTree: (needle?: dom.ElementHandle) => Promise<{tree: AXNode, needle: AXNode | null}>;
constructor(getAXTree: (needle?: dom.ElementHandle) => Promise<{tree: AXNode, needle: AXNode | null}>) {
this._getAXTree = getAXTree;
}
@ -81,7 +81,7 @@ export class Accessibility {
const interestingNodes: Set<AXNode> = new Set();
collectInterestingNodes(interestingNodes, tree, false);
if (root && !interestingNodes.has(needle))
if (root && (!needle || !interestingNodes.has(needle)))
return null;
return serializeTree(needle || tree, interestingNodes)[0];
}

View file

@ -20,12 +20,12 @@ import { Protocol } from './protocol';
import * as dom from '../dom';
import * as accessibility from '../accessibility';
export async function getAccessibilityTree(client: CRSession, needle?: dom.ElementHandle) : Promise<{tree: accessibility.AXNode, needle?: accessibility.AXNode}> {
export async function getAccessibilityTree(client: CRSession, needle?: dom.ElementHandle) : Promise<{tree: accessibility.AXNode, needle: accessibility.AXNode | null}> {
const {nodes} = await client.send('Accessibility.getFullAXTree');
const tree = CRAXNode.createTree(client, nodes);
return {
tree,
needle: needle && await tree._findElement(needle)
needle: needle ? await tree._findElement(needle) : null
};
}

View file

@ -20,13 +20,13 @@ import { FFSession } from './ffConnection';
import { Protocol } from './protocol';
import * as dom from '../dom';
export async function getAccessibilityTree(session: FFSession, needle: dom.ElementHandle) : Promise<{tree: accessibility.AXNode, needle?: accessibility.AXNode}> {
export async function getAccessibilityTree(session: FFSession, needle?: dom.ElementHandle) : Promise<{tree: accessibility.AXNode, needle: accessibility.AXNode | null}> {
const objectId = needle ? needle._remoteObject.objectId : undefined;
const { tree } = await session.send('Accessibility.getFullAXTree', { objectId });
const axNode = new FFAXNode(tree);
return {
tree: axNode,
needle: needle && axNode._findNeedle()
needle: needle ? axNode._findNeedle() : null
};
}
@ -59,7 +59,7 @@ const FFRoleToARIARole = new Map(Object.entries({
class FFAXNode implements accessibility.AXNode {
_children: FFAXNode[];
private _payload: Protocol.AXTree;
private _payload: Protocol.Accessibility.AXTree;
private _editable: boolean;
private _richlyEditable: boolean;
private _focusable: boolean;
@ -203,7 +203,7 @@ class FFAXNode implements accessibility.AXNode {
role: FFRoleToARIARole.get(this._role) || this._role,
name: this._name || ''
};
const userStringProperties: Array<keyof accessibility.SerializedAXNode> = [
const userStringProperties: Array<keyof accessibility.SerializedAXNode & keyof Protocol.Accessibility.AXTree> = [
'name',
'value',
'description',
@ -216,7 +216,7 @@ class FFAXNode implements accessibility.AXNode {
continue;
node[userStringProperty] = this._payload[userStringProperty];
}
const booleanProperties: Array<keyof accessibility.SerializedAXNode> = [
const booleanProperties: Array<keyof accessibility.SerializedAXNode & keyof Protocol.Accessibility.AXTree> = [
'disabled',
'expanded',
'focused',
@ -235,7 +235,7 @@ class FFAXNode implements accessibility.AXNode {
continue;
node[booleanProperty] = value;
}
const tristateProperties: Array<keyof accessibility.SerializedAXNode> = [
const tristateProperties: Array<keyof accessibility.SerializedAXNode & keyof Protocol.Accessibility.AXTree> = [
'checked',
'pressed',
];
@ -245,7 +245,7 @@ class FFAXNode implements accessibility.AXNode {
const value = this._payload[tristateProperty];
node[tristateProperty] = value;
}
const numericalProperties: Array<keyof accessibility.SerializedAXNode> = [
const numericalProperties: Array<keyof accessibility.SerializedAXNode & keyof Protocol.Accessibility.AXTree> = [
'level'
];
for (const numericalProperty of numericalProperties) {
@ -253,7 +253,7 @@ class FFAXNode implements accessibility.AXNode {
continue;
node[numericalProperty] = this._payload[numericalProperty];
}
const tokenProperties: Array<keyof accessibility.SerializedAXNode> = [
const tokenProperties: Array<keyof accessibility.SerializedAXNode & keyof Protocol.Accessibility.AXTree> = [
'autocomplete',
'haspopup',
'invalid',

View file

@ -68,7 +68,7 @@ export interface PageDelegate {
setInputFiles(handle: dom.ElementHandle<HTMLInputElement>, files: types.FilePayload[]): Promise<void>;
getBoundingBox(handle: dom.ElementHandle): Promise<types.Rect | null>;
getAccessibilityTree(needle?: dom.ElementHandle): Promise<{tree: accessibility.AXNode, needle?: accessibility.AXNode}>;
getAccessibilityTree(needle?: dom.ElementHandle): Promise<{tree: accessibility.AXNode, needle: accessibility.AXNode | null}>;
pdf?: (options?: types.PDFOptions) => Promise<platform.BufferType>;
coverage(): Coverage | undefined;
}

View file

@ -24,7 +24,7 @@ export async function getAccessibilityTree(session: WKSession, needle?: dom.Elem
const tree = new WKAXNode(axNode);
return {
tree,
needle: needle && tree._findNeedle()
needle: needle ? tree._findNeedle() : null
};
}
@ -184,22 +184,17 @@ class WKAXNode implements accessibility.AXNode {
if ('value' in this._payload && this._payload.role !== 'text')
node.value = this._payload.value;
type AXPropertyOfType<Type> = {
[Key in keyof Protocol.Page.AXNode]:
Protocol.Page.AXNode[Key] extends Type ? Key : never
}[keyof Protocol.Page.AXNode];
const userStringProperties: string[] = [
const userStringProperties: Array<keyof accessibility.SerializedAXNode & keyof Protocol.Page.AXNode> = [
'keyshortcuts',
'valuetext'
];
for (const userStringProperty of userStringProperties) {
if (!(userStringProperty in this._payload))
continue;
(node as any)[userStringProperty] = (this._payload as any)[userStringProperty];
(node as any)[userStringProperty] = this._payload[userStringProperty];
}
const booleanProperties: string[] = [
const booleanProperties: Array<keyof accessibility.SerializedAXNode & keyof Protocol.Page.AXNode> = [
'disabled',
'expanded',
'focused',
@ -215,7 +210,7 @@ class WKAXNode implements accessibility.AXNode {
// not whether focus is specifically on the root node.
if (booleanProperty === 'focused' && (this._payload.role === 'WebArea' || this._payload.role === 'ScrollArea'))
continue;
const value = (this._payload as any)[booleanProperty];
const value = this._payload[booleanProperty];
if (!value)
continue;
(node as any)[booleanProperty] = value;
@ -231,7 +226,7 @@ class WKAXNode implements accessibility.AXNode {
const value = this._payload[tristateProperty];
node[tristateProperty] = value === 'mixed' ? 'mixed' : value === 'true' ? true : false;
}
const numericalProperties: string[] = [
const numericalProperties: Array<keyof accessibility.SerializedAXNode & keyof Protocol.Page.AXNode> = [
'level',
'valuemax',
'valuemin',
@ -241,7 +236,7 @@ class WKAXNode implements accessibility.AXNode {
continue;
(node as any)[numericalProperty] = (this._payload as any)[numericalProperty];
}
const tokenProperties: string[] = [
const tokenProperties: Array<keyof accessibility.SerializedAXNode & keyof Protocol.Page.AXNode> = [
'autocomplete',
'haspopup',
'invalid',

View file

@ -497,7 +497,7 @@ export class WKPage implements PageDelegate {
return to._createHandle(result.object) as dom.ElementHandle<T>;
}
async getAccessibilityTree(needle?: dom.ElementHandle) : Promise<{tree: accessibility.AXNode, needle?: accessibility.AXNode}> {
async getAccessibilityTree(needle?: dom.ElementHandle) : Promise<{tree: accessibility.AXNode, needle: accessibility.AXNode | null}> {
return getAccessibilityTree(this._session, needle);
}