import type { AccessibilityElement, Extracted, State } from "./types.ts"; export function extract(getter: (state: State) => T): Extracted; export function extract(name: string, getter: (state: State) => T): Extracted; export function extract( nameOrGetter: string | ((state: State) => T), maybeGetter?: (state: State) => T, ): Extracted { if (typeof nameOrGetter === "string") { if (maybeGetter == null) { throw new TypeError("extract(name, getter): getter is required when a name is supplied"); } return globalThis.__sanderling__.extract(maybeGetter, nameOrGetter); } return globalThis.__sanderling__.extract(nameOrGetter); } const KEY_DELIMITER = "\x1f"; export function keyedBy( element: AccessibilityElement | undefined, tags: readonly string[], ): string { if (!element) return ""; return tags .map(tag => element.find({ testTag: tag })?.text ?? "") .join(KEY_DELIMITER); }