craftdriver 1.7.0 → 1.9.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.
- package/CHANGELOG.md +25 -12
- package/README.md +16 -6
- package/dist/cli/agentSession.d.ts +62 -0
- package/dist/cli/agentSession.d.ts.map +1 -0
- package/dist/cli/agentSession.js +100 -0
- package/dist/cli/agentSession.js.map +1 -0
- package/dist/cli/artifactPaths.d.ts +42 -0
- package/dist/cli/artifactPaths.d.ts.map +1 -0
- package/dist/cli/artifactPaths.js +144 -0
- package/dist/cli/artifactPaths.js.map +1 -0
- package/dist/cli/bounds.d.ts +88 -0
- package/dist/cli/bounds.d.ts.map +1 -0
- package/dist/cli/bounds.js +128 -0
- package/dist/cli/bounds.js.map +1 -0
- package/dist/cli/client.d.ts +3 -0
- package/dist/cli/client.d.ts.map +1 -1
- package/dist/cli/client.js +24 -8
- package/dist/cli/client.js.map +1 -1
- package/dist/cli/daemon.d.ts +3 -0
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +152 -39
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/defaults.d.ts +23 -3
- package/dist/cli/defaults.d.ts.map +1 -1
- package/dist/cli/defaults.js +50 -5
- package/dist/cli/defaults.js.map +1 -1
- package/dist/cli/dispatcher.d.ts +54 -11
- package/dist/cli/dispatcher.d.ts.map +1 -1
- package/dist/cli/dispatcher.js +851 -54
- package/dist/cli/dispatcher.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +305 -56
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts +14 -14
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +328 -180
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/journal.d.ts +153 -0
- package/dist/cli/journal.d.ts.map +1 -0
- package/dist/cli/journal.js +252 -0
- package/dist/cli/journal.js.map +1 -0
- package/dist/cli/lineReader.d.ts +33 -0
- package/dist/cli/lineReader.d.ts.map +1 -0
- package/dist/cli/lineReader.js +66 -0
- package/dist/cli/lineReader.js.map +1 -0
- package/dist/cli/locatorCandidates.d.ts +44 -0
- package/dist/cli/locatorCandidates.d.ts.map +1 -0
- package/dist/cli/locatorCandidates.js +190 -0
- package/dist/cli/locatorCandidates.js.map +1 -0
- package/dist/cli/mcp/artifacts.d.ts +39 -1
- package/dist/cli/mcp/artifacts.d.ts.map +1 -1
- package/dist/cli/mcp/artifacts.js +104 -9
- package/dist/cli/mcp/artifacts.js.map +1 -1
- package/dist/cli/mcp/bounds.d.ts +65 -0
- package/dist/cli/mcp/bounds.d.ts.map +1 -0
- package/dist/cli/mcp/bounds.js +124 -0
- package/dist/cli/mcp/bounds.js.map +1 -0
- package/dist/cli/mcp/params.d.ts +38 -0
- package/dist/cli/mcp/params.d.ts.map +1 -0
- package/dist/cli/mcp/params.js +174 -0
- package/dist/cli/mcp/params.js.map +1 -0
- package/dist/cli/mcp/server.d.ts +94 -16
- package/dist/cli/mcp/server.d.ts.map +1 -1
- package/dist/cli/mcp/server.js +304 -150
- package/dist/cli/mcp/server.js.map +1 -1
- package/dist/cli/mcp/tools.d.ts +62 -17
- package/dist/cli/mcp/tools.d.ts.map +1 -1
- package/dist/cli/mcp/tools.js +373 -158
- package/dist/cli/mcp/tools.js.map +1 -1
- package/dist/cli/pageSemantics.d.ts +6 -0
- package/dist/cli/pageSemantics.d.ts.map +1 -0
- package/dist/cli/pageSemantics.js +6 -0
- package/dist/cli/pageSemantics.js.map +1 -0
- package/dist/cli/parseArgs.d.ts +6 -18
- package/dist/cli/parseArgs.d.ts.map +1 -1
- package/dist/cli/parseArgs.js +689 -45
- package/dist/cli/parseArgs.js.map +1 -1
- package/dist/cli/protocol.d.ts +8 -0
- package/dist/cli/protocol.d.ts.map +1 -1
- package/dist/cli/selector.d.ts +3 -3
- package/dist/cli/selector.d.ts.map +1 -1
- package/dist/cli/selector.js +6 -9
- package/dist/cli/selector.js.map +1 -1
- package/dist/cli/sessionRegistry.d.ts +42 -0
- package/dist/cli/sessionRegistry.d.ts.map +1 -0
- package/dist/cli/sessionRegistry.js +99 -0
- package/dist/cli/sessionRegistry.js.map +1 -0
- package/dist/cli/snapshot.d.ts +100 -19
- package/dist/cli/snapshot.d.ts.map +1 -1
- package/dist/cli/snapshot.js +295 -108
- package/dist/cli/snapshot.js.map +1 -1
- package/dist/cli/stateStore.d.ts +50 -0
- package/dist/cli/stateStore.d.ts.map +1 -0
- package/dist/cli/stateStore.js +122 -0
- package/dist/cli/stateStore.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/a11y.d.ts +6 -2
- package/dist/lib/a11y.d.ts.map +1 -1
- package/dist/lib/a11y.js +3 -1
- package/dist/lib/a11y.js.map +1 -1
- package/dist/lib/bidi/evaluate.d.ts +11 -0
- package/dist/lib/bidi/evaluate.d.ts.map +1 -0
- package/dist/lib/bidi/evaluate.js +25 -0
- package/dist/lib/bidi/evaluate.js.map +1 -0
- package/dist/lib/bidi/index.d.ts +1 -1
- package/dist/lib/bidi/index.d.ts.map +1 -1
- package/dist/lib/bidi/index.js +2 -2
- package/dist/lib/bidi/index.js.map +1 -1
- package/dist/lib/bidi/logs.d.ts +3 -0
- package/dist/lib/bidi/logs.d.ts.map +1 -1
- package/dist/lib/bidi/logs.js +7 -0
- package/dist/lib/bidi/logs.js.map +1 -1
- package/dist/lib/bidi/network.d.ts +14 -1
- package/dist/lib/bidi/network.d.ts.map +1 -1
- package/dist/lib/bidi/network.js +45 -7
- package/dist/lib/bidi/network.js.map +1 -1
- package/dist/lib/bidi/storage.d.ts +30 -6
- package/dist/lib/bidi/storage.d.ts.map +1 -1
- package/dist/lib/bidi/storage.js +190 -45
- package/dist/lib/bidi/storage.js.map +1 -1
- package/dist/lib/bidi/types.d.ts +9 -2
- package/dist/lib/bidi/types.d.ts.map +1 -1
- package/dist/lib/browser.d.ts +7 -4
- package/dist/lib/browser.d.ts.map +1 -1
- package/dist/lib/browser.js +186 -65
- package/dist/lib/browser.js.map +1 -1
- package/dist/lib/browserContext.d.ts +58 -24
- package/dist/lib/browserContext.d.ts.map +1 -1
- package/dist/lib/browserContext.js +300 -99
- package/dist/lib/browserContext.js.map +1 -1
- package/dist/lib/by.d.ts +68 -30
- package/dist/lib/by.d.ts.map +1 -1
- package/dist/lib/by.js +54 -23
- package/dist/lib/by.js.map +1 -1
- package/dist/lib/clearFastPath.d.ts.map +1 -1
- package/dist/lib/clearFastPath.js +2 -0
- package/dist/lib/clearFastPath.js.map +1 -1
- package/dist/lib/clickFastPath.d.ts.map +1 -1
- package/dist/lib/clickFastPath.js +2 -0
- package/dist/lib/clickFastPath.js.map +1 -1
- package/dist/lib/driver.d.ts +26 -0
- package/dist/lib/driver.d.ts.map +1 -1
- package/dist/lib/driver.js +123 -4
- package/dist/lib/driver.js.map +1 -1
- package/dist/lib/elementHandle.d.ts +13 -10
- package/dist/lib/elementHandle.d.ts.map +1 -1
- package/dist/lib/elementHandle.js +119 -50
- package/dist/lib/elementHandle.js.map +1 -1
- package/dist/lib/errors.d.ts +12 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +12 -0
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/expect.d.ts +10 -0
- package/dist/lib/expect.d.ts.map +1 -1
- package/dist/lib/expect.js +76 -49
- package/dist/lib/expect.js.map +1 -1
- package/dist/lib/fillFastPath.d.ts.map +1 -1
- package/dist/lib/fillFastPath.js +2 -0
- package/dist/lib/fillFastPath.js.map +1 -1
- package/dist/lib/frame.d.ts.map +1 -1
- package/dist/lib/frame.js +29 -17
- package/dist/lib/frame.js.map +1 -1
- package/dist/lib/initScript.d.ts +9 -0
- package/dist/lib/initScript.d.ts.map +1 -0
- package/dist/lib/initScript.js +14 -0
- package/dist/lib/initScript.js.map +1 -0
- package/dist/lib/locator.d.ts +21 -54
- package/dist/lib/locator.d.ts.map +1 -1
- package/dist/lib/locator.js +165 -208
- package/dist/lib/locator.js.map +1 -1
- package/dist/lib/page.d.ts +22 -0
- package/dist/lib/page.d.ts.map +1 -1
- package/dist/lib/page.js +71 -13
- package/dist/lib/page.js.map +1 -1
- package/dist/lib/pageSemantics.d.ts +42 -0
- package/dist/lib/pageSemantics.d.ts.map +1 -0
- package/dist/lib/pageSemantics.js +216 -0
- package/dist/lib/pageSemantics.js.map +1 -0
- package/dist/lib/query.d.ts +68 -0
- package/dist/lib/query.d.ts.map +1 -0
- package/dist/lib/query.js +590 -0
- package/dist/lib/query.js.map +1 -0
- package/dist/lib/secureFile.d.ts +8 -0
- package/dist/lib/secureFile.d.ts.map +1 -0
- package/dist/lib/secureFile.js +67 -0
- package/dist/lib/secureFile.js.map +1 -0
- package/dist/lib/sessionStateValidation.d.ts +35 -0
- package/dist/lib/sessionStateValidation.d.ts.map +1 -0
- package/dist/lib/sessionStateValidation.js +223 -0
- package/dist/lib/sessionStateValidation.js.map +1 -0
- package/dist/lib/shadowRoot.d.ts +21 -0
- package/dist/lib/shadowRoot.d.ts.map +1 -0
- package/dist/lib/shadowRoot.js +29 -0
- package/dist/lib/shadowRoot.js.map +1 -0
- package/dist/lib/shadowRootLocator.d.ts +31 -0
- package/dist/lib/shadowRootLocator.d.ts.map +1 -0
- package/dist/lib/shadowRootLocator.js +55 -0
- package/dist/lib/shadowRootLocator.js.map +1 -0
- package/dist/lib/timing.d.ts +2 -2
- package/dist/lib/timing.js +2 -2
- package/dist/lib/tracing.d.ts +2 -1
- package/dist/lib/tracing.d.ts.map +1 -1
- package/dist/lib/tracing.js +12 -1
- package/dist/lib/tracing.js.map +1 -1
- package/docs/accessibility.md +9 -1
- package/docs/agents.md +56 -61
- package/docs/api-reference.md +5 -1
- package/docs/browser-api.md +27 -7
- package/docs/browser-context.md +21 -15
- package/docs/cli.md +353 -30
- package/docs/error-codes.md +7 -4
- package/docs/getting-started.md +6 -1
- package/docs/index.md +1 -1
- package/docs/mcp.md +136 -65
- package/docs/public/examples/agent-actions.html +48 -0
- package/docs/public/examples/agent-debug.html +86 -0
- package/docs/public/examples/agent-late-mutation.html +18 -0
- package/docs/public/examples/agent-ref-shift.html +33 -0
- package/docs/public/examples/iframe-child.html +12 -1
- package/docs/public/examples/shadow-dom.html +137 -0
- package/docs/recipes/login-once-reuse-session.md +33 -5
- package/docs/selectors.md +61 -0
- package/docs/session-management.md +80 -12
- package/docs/why-craftdriver.md +1 -1
- package/package.json +5 -3
- package/skills/craftdriver/SKILL.md +59 -75
- package/skills/craftdriver/agents/openai.yaml +4 -0
- package/skills/craftdriver/cheatsheet.md +18 -4
- package/skills/craftdriver/cli.md +194 -68
- package/skills/craftdriver/patterns.md +17 -8
- package/skills/craftdriver/workflow.md +149 -0
package/dist/lib/page.js
CHANGED
|
@@ -18,6 +18,7 @@ import { DEFAULT_NAVIGATION_TIMEOUT_MS, STATE_POLL_INTERVAL_MS } from './timing.
|
|
|
18
18
|
import { CraftdriverError, ErrorCode } from './errors.js';
|
|
19
19
|
import { clickWithFastPath } from './clickFastPath.js';
|
|
20
20
|
import { fillWithFastPath } from './fillFastPath.js';
|
|
21
|
+
import { withRealmRetry } from './bidi/evaluate.js';
|
|
21
22
|
export function isNoSuchWindowError(err) {
|
|
22
23
|
if (!CraftdriverError.is(err, ErrorCode.DRIVER_ERROR))
|
|
23
24
|
return false;
|
|
@@ -52,6 +53,54 @@ export class Page {
|
|
|
52
53
|
context() {
|
|
53
54
|
return this._owner;
|
|
54
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Make this page the browser's active target and leave it there.
|
|
58
|
+
*
|
|
59
|
+
* Most page methods switch to this window and switch back, so they never
|
|
60
|
+
* disturb `browser.activePage()`. This is the deliberate exception: it is
|
|
61
|
+
* how a caller driving several tabs says "everything after this goes
|
|
62
|
+
* here", including `browser.click(...)` and other browser-level helpers.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* const [, second] = await browser.pages();
|
|
66
|
+
* await second.activate();
|
|
67
|
+
* await browser.click('#confirm'); // acts on the second tab
|
|
68
|
+
*/
|
|
69
|
+
async activate() {
|
|
70
|
+
await this.driver.switchToWindow(this.contextId);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Close this page.
|
|
74
|
+
*
|
|
75
|
+
* W3C leaves no window focused after a close, so this switches to a
|
|
76
|
+
* remaining page when one exists — otherwise every following command
|
|
77
|
+
* would fail with "no such window" rather than a useful error.
|
|
78
|
+
*/
|
|
79
|
+
async close() {
|
|
80
|
+
// Remember where the caller was. Closing requires switching to the target,
|
|
81
|
+
// so without this a close would silently move focus: closing a background
|
|
82
|
+
// tab left the session on whichever window happened to come back first,
|
|
83
|
+
// not the one the caller was working in.
|
|
84
|
+
let previous;
|
|
85
|
+
try {
|
|
86
|
+
previous = await this.driver.getCurrentWindowHandle();
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
/* nothing focused; the fallback below covers it */
|
|
90
|
+
}
|
|
91
|
+
await this.driver.switchToWindow(this.contextId);
|
|
92
|
+
const remaining = await this.driver.closeWindow();
|
|
93
|
+
if (remaining.length === 0)
|
|
94
|
+
return;
|
|
95
|
+
// Prefer restoring the caller's window. It is absent from `remaining`
|
|
96
|
+
// exactly when the caller closed the page it was already on, in which case
|
|
97
|
+
// any survivor will do — W3C leaves nothing focused after a close, so
|
|
98
|
+
// every later command would otherwise fail with "no such window".
|
|
99
|
+
const target = previous !== undefined && previous !== this.contextId && remaining.includes(previous)
|
|
100
|
+
? previous
|
|
101
|
+
: remaining[0];
|
|
102
|
+
await this.driver.switchToWindow(target).catch(() => { });
|
|
103
|
+
}
|
|
55
104
|
/** Switch the Classic driver to this window for element operations. */
|
|
56
105
|
async _activate() {
|
|
57
106
|
let prev;
|
|
@@ -242,25 +291,25 @@ export class Page {
|
|
|
242
291
|
// ── Evaluate ─────────────────────────────────────────────────────────────
|
|
243
292
|
async evaluate(fn, ...args) {
|
|
244
293
|
const fnSrc = typeof fn === 'function' ? fn.toString() : fn;
|
|
245
|
-
|
|
294
|
+
const conn = this.conn;
|
|
295
|
+
if (conn) {
|
|
246
296
|
const target = { context: this.contextId };
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
result = await this.conn.send('script.callFunction', {
|
|
297
|
+
const result = await withRealmRetry(() => {
|
|
298
|
+
if (typeof fn === 'function') {
|
|
299
|
+
return conn.send('script.callFunction', {
|
|
300
|
+
functionDeclaration: fnSrc,
|
|
301
|
+
target,
|
|
302
|
+
arguments: args.map(serializeLocalValue),
|
|
303
|
+
awaitPromise: true,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
return conn.send('script.callFunction', {
|
|
258
307
|
functionDeclaration: `function() { ${fnSrc} }`,
|
|
259
308
|
target,
|
|
260
309
|
arguments: [],
|
|
261
310
|
awaitPromise: true,
|
|
262
311
|
});
|
|
263
|
-
}
|
|
312
|
+
});
|
|
264
313
|
if (result.type === 'exception') {
|
|
265
314
|
throw new CraftdriverError(ErrorCode.EVAL_THREW, `evaluate() threw an exception: ${result.exceptionDetails?.text ?? 'unknown error'}`, { detail: { exception: result.exceptionDetails?.text ?? null } });
|
|
266
315
|
}
|
|
@@ -328,6 +377,9 @@ export class Page {
|
|
|
328
377
|
const sw = this._makeContextSwitcher();
|
|
329
378
|
if (sw)
|
|
330
379
|
handle.withContext(sw);
|
|
380
|
+
handle.withBiDi(() => this.conn?.isConnected()
|
|
381
|
+
? { connection: this.conn, contextId: this.contextId }
|
|
382
|
+
: undefined);
|
|
331
383
|
return handle;
|
|
332
384
|
}
|
|
333
385
|
locator(selector) {
|
|
@@ -336,6 +388,9 @@ export class Page {
|
|
|
336
388
|
const sw = this._makeContextSwitcher();
|
|
337
389
|
if (sw)
|
|
338
390
|
loc.withContext(sw);
|
|
391
|
+
loc.withBiDi(() => this.conn?.isConnected()
|
|
392
|
+
? { connection: this.conn, contextId: this.contextId }
|
|
393
|
+
: undefined);
|
|
339
394
|
return loc;
|
|
340
395
|
}
|
|
341
396
|
expect(selector) {
|
|
@@ -350,6 +405,9 @@ export class Page {
|
|
|
350
405
|
const handle = ElementHandle.fromWebElement(this.driver, we, this.getDefaultTimeout);
|
|
351
406
|
if (sw)
|
|
352
407
|
handle.withContext(sw);
|
|
408
|
+
handle.withBiDi(() => this.conn?.isConnected()
|
|
409
|
+
? { connection: this.conn, contextId: this.contextId }
|
|
410
|
+
: undefined);
|
|
353
411
|
return handle;
|
|
354
412
|
});
|
|
355
413
|
}
|
package/dist/lib/page.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/lib/page.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../src/lib/page.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page-side role and accessible-name extraction, shared by the snapshot and
|
|
3
|
+
* the locator-candidate builder.
|
|
4
|
+
*
|
|
5
|
+
* These two surfaces must agree, and both must agree with `By.role` — that is
|
|
6
|
+
* the whole point of the module. The snapshot tells an agent an element is a
|
|
7
|
+
* `listbox`; the candidate builder proposes `role=listbox[name=Colors]`; and
|
|
8
|
+
* `By.role('listbox', { name: 'Colors' })` has to actually resolve it in the
|
|
9
|
+
* committed test. When those three drifted apart, the recommended locator for
|
|
10
|
+
* a multi-select was a brittle `text=RedBlue`.
|
|
11
|
+
*
|
|
12
|
+
* So the mapping lives here once, `src/lib/by.ts` stays the resolution
|
|
13
|
+
* authority, and `tests/cli/role-conformance.test.ts` pins the agreement
|
|
14
|
+
* against a real browser.
|
|
15
|
+
*
|
|
16
|
+
* Emitted as JS **source text**: both callers assemble a body for
|
|
17
|
+
* `page.evaluate`, and the build has no DOM lib. Keep it dependency-free and
|
|
18
|
+
* side-effect-free — it is concatenated into larger scripts.
|
|
19
|
+
*
|
|
20
|
+
* ## The ARIA role / display token split
|
|
21
|
+
*
|
|
22
|
+
* `ariaRole` returns a real ARIA role or `null`. `null` is not a failure: an
|
|
23
|
+
* `<input type="password">` genuinely has no ARIA role, and pretending it is a
|
|
24
|
+
* `textbox` produces a `role=textbox[name=Password]` that resolves to nothing.
|
|
25
|
+
* The snapshot falls back to `displayRole` (the tag name) so the element still
|
|
26
|
+
* appears, while the candidate builder proposes a role locator only when
|
|
27
|
+
* `ariaRole` is non-null. Honest over convenient.
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Function declarations injected into a page-side script.
|
|
31
|
+
*
|
|
32
|
+
* Provides `firstRoleToken`, `hasSectioningAncestor`, `ariaRole`,
|
|
33
|
+
* `displayRole`, `associatedLabel` and `accName`.
|
|
34
|
+
*/
|
|
35
|
+
export declare const PAGE_SEMANTICS_JS = "\nfunction firstRoleToken(el) {\n const role = (el.getAttribute('role') || '').trim();\n return role ? role.split(/\\s+/)[0] : null;\n}\n// Mirrors HAS_SECTIONING_ANCESTOR in src/lib/by.ts: header/footer are only\n// banner/contentinfo when not nested in sectioning content.\nfunction hasSectioningAncestor(el) {\n for (let p = el.parentElement; p; p = p.parentElement) {\n const t = p.tagName.toLowerCase();\n if (t === 'article' || t === 'aside' || t === 'main' || t === 'nav' || t === 'section') {\n return true;\n }\n const role = firstRoleToken(p);\n if (\n role === 'article' ||\n role === 'complementary' ||\n role === 'main' ||\n role === 'navigation' ||\n role === 'region'\n ) {\n return true;\n }\n }\n return false;\n}\n// The ARIA role, or null when the element has none that By.role can resolve.\n// Every branch here must have a counterpart in IMPLICIT_ROLE_XPATH.\nfunction ariaRole(el) {\n const explicit = firstRoleToken(el);\n if (explicit) return explicit;\n const t = el.tagName.toLowerCase();\n if (t === 'a' || t === 'area') return el.hasAttribute('href') ? 'link' : null;\n if (t === 'button' || t === 'summary') return 'button';\n if (t === 'input') {\n const it = (el.getAttribute('type') || 'text').toLowerCase();\n if (it === 'submit' || it === 'button' || it === 'reset' || it === 'image') return 'button';\n if (it === 'checkbox') return 'checkbox';\n if (it === 'radio') return 'radio';\n if (it === 'search') return 'searchbox';\n if (it === 'number') return 'spinbutton';\n if (it === 'range') return 'slider';\n if (it === 'text' || it === 'email' || it === 'tel' || it === 'url') return 'textbox';\n // password, date, file, color, hidden\u2026 have no corresponding ARIA role.\n return el.hasAttribute('type') ? null : 'textbox';\n }\n if (t === 'textarea') return 'textbox';\n // multiple/size are reflected IDL attributes, so reading the properties\n // stays equivalent to the attribute test By.role compiles to XPath.\n if (t === 'select') return el.multiple || el.size > 1 ? 'listbox' : 'combobox';\n if (/^h[1-6]$/.test(t)) return 'heading';\n if (t === 'img') return 'img';\n if (t === 'ul' || t === 'ol') return 'list';\n if (t === 'li') return 'listitem';\n if (t === 'table') return 'table';\n if (t === 'tr') return 'row';\n if (t === 'td') return 'cell';\n if (t === 'th') return 'columnheader';\n if (t === 'nav') return 'navigation';\n if (t === 'main') return 'main';\n if (t === 'article') return 'article';\n if (t === 'form') return 'form';\n if (t === 'header') return hasSectioningAncestor(el) ? null : 'banner';\n if (t === 'footer') return hasSectioningAncestor(el) ? null : 'contentinfo';\n return null;\n}\n// What the snapshot prints. Falls back to the tag name so an element with no\n// ARIA role is still listed and still addressable by ref.\nfunction displayRole(el) {\n return ariaRole(el) || el.tagName.toLowerCase();\n}\nfunction semanticRoot(el) {\n const root = el && el.getRootNode ? el.getRootNode() : null;\n return root && typeof root.querySelectorAll === 'function' ? root : document;\n}\nfunction elementByIdInRoot(root, id) {\n if (!id) return null;\n if (typeof root.getElementById === 'function') return root.getElementById(id);\n const nodes = root.querySelectorAll('[id]');\n for (let i = 0; i < nodes.length; i++) {\n if (nodes[i].id === id) return nodes[i];\n }\n return null;\n}\n// The <label> a user reads for a form control, independent of accName \u2014\n// By.labelText resolves against exactly this.\nfunction associatedLabel(el) {\n const t = el.tagName;\n if (t !== 'INPUT' && t !== 'TEXTAREA' && t !== 'SELECT') return null;\n if (el.labels && el.labels.length) {\n const nativeLabel = el.labels[0];\n return (nativeLabel.textContent || '').trim() || null;\n }\n if (el.id) {\n const root = semanticRoot(el);\n const labels = root.querySelectorAll('label[for]');\n for (let i = 0; i < labels.length; i++) {\n if (labels[i].getAttribute('for') === el.id) {\n return (labels[i].textContent || '').trim() || null;\n }\n }\n }\n const parentLabel = el.closest('label');\n if (parentLabel) return (parentLabel.textContent || '').trim() || null;\n return null;\n}\n// Approximates the accessible name, in the same source order By.role's name\n// predicate checks. Sources By.role cannot match must not appear here.\nfunction accName(el) {\n const aria = el.getAttribute('aria-label');\n if (aria && aria.trim()) return aria.trim();\n const labelledby = el.getAttribute('aria-labelledby');\n if (labelledby) {\n // Single id only \u2014 By.role's @aria-labelledby test is an equality match.\n const ref = elementByIdInRoot(semanticRoot(el), labelledby);\n if (ref) {\n const t = (ref.textContent || '').trim();\n if (t) return t;\n }\n }\n const label = associatedLabel(el);\n if (label) return label;\n const tag = el.tagName;\n if (tag === 'INPUT') {\n const it = (el.getAttribute('type') || 'text').toLowerCase();\n // Native buttons carry their name in value=, not in text content.\n if (it === 'submit' || it === 'button' || it === 'reset') {\n const v = el.getAttribute('value');\n if (v && v.trim()) return v.trim();\n }\n if (it === 'image') {\n const alt = el.getAttribute('alt');\n if (alt && alt.trim()) return alt.trim();\n }\n }\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') {\n const placeholder = el.getAttribute('placeholder');\n if (placeholder && placeholder.trim()) return placeholder.trim();\n }\n if (tag === 'IMG') {\n const alt = el.getAttribute('alt');\n if (alt && alt.trim()) return alt.trim();\n }\n const text = (el.textContent || '').trim().replace(/\\s+/g, ' ');\n if (text) return text;\n const title = el.getAttribute('title');\n if (title && title.trim()) return title.trim();\n return '';\n}\n";
|
|
36
|
+
/**
|
|
37
|
+
* Every role `ariaRole` can emit for a native element. The conformance test
|
|
38
|
+
* walks this list, so a new branch above without a `By.role` counterpart
|
|
39
|
+
* fails CI rather than shipping an unresolvable recommendation.
|
|
40
|
+
*/
|
|
41
|
+
export declare const EMITTABLE_ROLES: readonly ["link", "button", "checkbox", "radio", "searchbox", "spinbutton", "slider", "textbox", "listbox", "combobox", "heading", "img", "list", "listitem", "table", "row", "cell", "columnheader", "navigation", "main", "article", "form", "banner", "contentinfo"];
|
|
42
|
+
//# sourceMappingURL=pageSemantics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageSemantics.d.ts","sourceRoot":"","sources":["../../src/lib/pageSemantics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,g3LAqJ7B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,yQAyBlB,CAAC"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Page-side role and accessible-name extraction, shared by the snapshot and
|
|
3
|
+
* the locator-candidate builder.
|
|
4
|
+
*
|
|
5
|
+
* These two surfaces must agree, and both must agree with `By.role` — that is
|
|
6
|
+
* the whole point of the module. The snapshot tells an agent an element is a
|
|
7
|
+
* `listbox`; the candidate builder proposes `role=listbox[name=Colors]`; and
|
|
8
|
+
* `By.role('listbox', { name: 'Colors' })` has to actually resolve it in the
|
|
9
|
+
* committed test. When those three drifted apart, the recommended locator for
|
|
10
|
+
* a multi-select was a brittle `text=RedBlue`.
|
|
11
|
+
*
|
|
12
|
+
* So the mapping lives here once, `src/lib/by.ts` stays the resolution
|
|
13
|
+
* authority, and `tests/cli/role-conformance.test.ts` pins the agreement
|
|
14
|
+
* against a real browser.
|
|
15
|
+
*
|
|
16
|
+
* Emitted as JS **source text**: both callers assemble a body for
|
|
17
|
+
* `page.evaluate`, and the build has no DOM lib. Keep it dependency-free and
|
|
18
|
+
* side-effect-free — it is concatenated into larger scripts.
|
|
19
|
+
*
|
|
20
|
+
* ## The ARIA role / display token split
|
|
21
|
+
*
|
|
22
|
+
* `ariaRole` returns a real ARIA role or `null`. `null` is not a failure: an
|
|
23
|
+
* `<input type="password">` genuinely has no ARIA role, and pretending it is a
|
|
24
|
+
* `textbox` produces a `role=textbox[name=Password]` that resolves to nothing.
|
|
25
|
+
* The snapshot falls back to `displayRole` (the tag name) so the element still
|
|
26
|
+
* appears, while the candidate builder proposes a role locator only when
|
|
27
|
+
* `ariaRole` is non-null. Honest over convenient.
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Function declarations injected into a page-side script.
|
|
31
|
+
*
|
|
32
|
+
* Provides `firstRoleToken`, `hasSectioningAncestor`, `ariaRole`,
|
|
33
|
+
* `displayRole`, `associatedLabel` and `accName`.
|
|
34
|
+
*/
|
|
35
|
+
export const PAGE_SEMANTICS_JS = `
|
|
36
|
+
function firstRoleToken(el) {
|
|
37
|
+
const role = (el.getAttribute('role') || '').trim();
|
|
38
|
+
return role ? role.split(/\\s+/)[0] : null;
|
|
39
|
+
}
|
|
40
|
+
// Mirrors HAS_SECTIONING_ANCESTOR in src/lib/by.ts: header/footer are only
|
|
41
|
+
// banner/contentinfo when not nested in sectioning content.
|
|
42
|
+
function hasSectioningAncestor(el) {
|
|
43
|
+
for (let p = el.parentElement; p; p = p.parentElement) {
|
|
44
|
+
const t = p.tagName.toLowerCase();
|
|
45
|
+
if (t === 'article' || t === 'aside' || t === 'main' || t === 'nav' || t === 'section') {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
const role = firstRoleToken(p);
|
|
49
|
+
if (
|
|
50
|
+
role === 'article' ||
|
|
51
|
+
role === 'complementary' ||
|
|
52
|
+
role === 'main' ||
|
|
53
|
+
role === 'navigation' ||
|
|
54
|
+
role === 'region'
|
|
55
|
+
) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
// The ARIA role, or null when the element has none that By.role can resolve.
|
|
62
|
+
// Every branch here must have a counterpart in IMPLICIT_ROLE_XPATH.
|
|
63
|
+
function ariaRole(el) {
|
|
64
|
+
const explicit = firstRoleToken(el);
|
|
65
|
+
if (explicit) return explicit;
|
|
66
|
+
const t = el.tagName.toLowerCase();
|
|
67
|
+
if (t === 'a' || t === 'area') return el.hasAttribute('href') ? 'link' : null;
|
|
68
|
+
if (t === 'button' || t === 'summary') return 'button';
|
|
69
|
+
if (t === 'input') {
|
|
70
|
+
const it = (el.getAttribute('type') || 'text').toLowerCase();
|
|
71
|
+
if (it === 'submit' || it === 'button' || it === 'reset' || it === 'image') return 'button';
|
|
72
|
+
if (it === 'checkbox') return 'checkbox';
|
|
73
|
+
if (it === 'radio') return 'radio';
|
|
74
|
+
if (it === 'search') return 'searchbox';
|
|
75
|
+
if (it === 'number') return 'spinbutton';
|
|
76
|
+
if (it === 'range') return 'slider';
|
|
77
|
+
if (it === 'text' || it === 'email' || it === 'tel' || it === 'url') return 'textbox';
|
|
78
|
+
// password, date, file, color, hidden… have no corresponding ARIA role.
|
|
79
|
+
return el.hasAttribute('type') ? null : 'textbox';
|
|
80
|
+
}
|
|
81
|
+
if (t === 'textarea') return 'textbox';
|
|
82
|
+
// multiple/size are reflected IDL attributes, so reading the properties
|
|
83
|
+
// stays equivalent to the attribute test By.role compiles to XPath.
|
|
84
|
+
if (t === 'select') return el.multiple || el.size > 1 ? 'listbox' : 'combobox';
|
|
85
|
+
if (/^h[1-6]$/.test(t)) return 'heading';
|
|
86
|
+
if (t === 'img') return 'img';
|
|
87
|
+
if (t === 'ul' || t === 'ol') return 'list';
|
|
88
|
+
if (t === 'li') return 'listitem';
|
|
89
|
+
if (t === 'table') return 'table';
|
|
90
|
+
if (t === 'tr') return 'row';
|
|
91
|
+
if (t === 'td') return 'cell';
|
|
92
|
+
if (t === 'th') return 'columnheader';
|
|
93
|
+
if (t === 'nav') return 'navigation';
|
|
94
|
+
if (t === 'main') return 'main';
|
|
95
|
+
if (t === 'article') return 'article';
|
|
96
|
+
if (t === 'form') return 'form';
|
|
97
|
+
if (t === 'header') return hasSectioningAncestor(el) ? null : 'banner';
|
|
98
|
+
if (t === 'footer') return hasSectioningAncestor(el) ? null : 'contentinfo';
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
// What the snapshot prints. Falls back to the tag name so an element with no
|
|
102
|
+
// ARIA role is still listed and still addressable by ref.
|
|
103
|
+
function displayRole(el) {
|
|
104
|
+
return ariaRole(el) || el.tagName.toLowerCase();
|
|
105
|
+
}
|
|
106
|
+
function semanticRoot(el) {
|
|
107
|
+
const root = el && el.getRootNode ? el.getRootNode() : null;
|
|
108
|
+
return root && typeof root.querySelectorAll === 'function' ? root : document;
|
|
109
|
+
}
|
|
110
|
+
function elementByIdInRoot(root, id) {
|
|
111
|
+
if (!id) return null;
|
|
112
|
+
if (typeof root.getElementById === 'function') return root.getElementById(id);
|
|
113
|
+
const nodes = root.querySelectorAll('[id]');
|
|
114
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
115
|
+
if (nodes[i].id === id) return nodes[i];
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
// The <label> a user reads for a form control, independent of accName —
|
|
120
|
+
// By.labelText resolves against exactly this.
|
|
121
|
+
function associatedLabel(el) {
|
|
122
|
+
const t = el.tagName;
|
|
123
|
+
if (t !== 'INPUT' && t !== 'TEXTAREA' && t !== 'SELECT') return null;
|
|
124
|
+
if (el.labels && el.labels.length) {
|
|
125
|
+
const nativeLabel = el.labels[0];
|
|
126
|
+
return (nativeLabel.textContent || '').trim() || null;
|
|
127
|
+
}
|
|
128
|
+
if (el.id) {
|
|
129
|
+
const root = semanticRoot(el);
|
|
130
|
+
const labels = root.querySelectorAll('label[for]');
|
|
131
|
+
for (let i = 0; i < labels.length; i++) {
|
|
132
|
+
if (labels[i].getAttribute('for') === el.id) {
|
|
133
|
+
return (labels[i].textContent || '').trim() || null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const parentLabel = el.closest('label');
|
|
138
|
+
if (parentLabel) return (parentLabel.textContent || '').trim() || null;
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
// Approximates the accessible name, in the same source order By.role's name
|
|
142
|
+
// predicate checks. Sources By.role cannot match must not appear here.
|
|
143
|
+
function accName(el) {
|
|
144
|
+
const aria = el.getAttribute('aria-label');
|
|
145
|
+
if (aria && aria.trim()) return aria.trim();
|
|
146
|
+
const labelledby = el.getAttribute('aria-labelledby');
|
|
147
|
+
if (labelledby) {
|
|
148
|
+
// Single id only — By.role's @aria-labelledby test is an equality match.
|
|
149
|
+
const ref = elementByIdInRoot(semanticRoot(el), labelledby);
|
|
150
|
+
if (ref) {
|
|
151
|
+
const t = (ref.textContent || '').trim();
|
|
152
|
+
if (t) return t;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const label = associatedLabel(el);
|
|
156
|
+
if (label) return label;
|
|
157
|
+
const tag = el.tagName;
|
|
158
|
+
if (tag === 'INPUT') {
|
|
159
|
+
const it = (el.getAttribute('type') || 'text').toLowerCase();
|
|
160
|
+
// Native buttons carry their name in value=, not in text content.
|
|
161
|
+
if (it === 'submit' || it === 'button' || it === 'reset') {
|
|
162
|
+
const v = el.getAttribute('value');
|
|
163
|
+
if (v && v.trim()) return v.trim();
|
|
164
|
+
}
|
|
165
|
+
if (it === 'image') {
|
|
166
|
+
const alt = el.getAttribute('alt');
|
|
167
|
+
if (alt && alt.trim()) return alt.trim();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') {
|
|
171
|
+
const placeholder = el.getAttribute('placeholder');
|
|
172
|
+
if (placeholder && placeholder.trim()) return placeholder.trim();
|
|
173
|
+
}
|
|
174
|
+
if (tag === 'IMG') {
|
|
175
|
+
const alt = el.getAttribute('alt');
|
|
176
|
+
if (alt && alt.trim()) return alt.trim();
|
|
177
|
+
}
|
|
178
|
+
const text = (el.textContent || '').trim().replace(/\\s+/g, ' ');
|
|
179
|
+
if (text) return text;
|
|
180
|
+
const title = el.getAttribute('title');
|
|
181
|
+
if (title && title.trim()) return title.trim();
|
|
182
|
+
return '';
|
|
183
|
+
}
|
|
184
|
+
`;
|
|
185
|
+
/**
|
|
186
|
+
* Every role `ariaRole` can emit for a native element. The conformance test
|
|
187
|
+
* walks this list, so a new branch above without a `By.role` counterpart
|
|
188
|
+
* fails CI rather than shipping an unresolvable recommendation.
|
|
189
|
+
*/
|
|
190
|
+
export const EMITTABLE_ROLES = [
|
|
191
|
+
'link',
|
|
192
|
+
'button',
|
|
193
|
+
'checkbox',
|
|
194
|
+
'radio',
|
|
195
|
+
'searchbox',
|
|
196
|
+
'spinbutton',
|
|
197
|
+
'slider',
|
|
198
|
+
'textbox',
|
|
199
|
+
'listbox',
|
|
200
|
+
'combobox',
|
|
201
|
+
'heading',
|
|
202
|
+
'img',
|
|
203
|
+
'list',
|
|
204
|
+
'listitem',
|
|
205
|
+
'table',
|
|
206
|
+
'row',
|
|
207
|
+
'cell',
|
|
208
|
+
'columnheader',
|
|
209
|
+
'navigation',
|
|
210
|
+
'main',
|
|
211
|
+
'article',
|
|
212
|
+
'form',
|
|
213
|
+
'banner',
|
|
214
|
+
'contentinfo',
|
|
215
|
+
];
|
|
216
|
+
//# sourceMappingURL=pageSemantics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageSemantics.js","sourceRoot":"","sources":["../../src/lib/pageSemantics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqJhC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,MAAM;IACN,QAAQ;IACR,UAAU;IACV,OAAO;IACP,WAAW;IACX,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,SAAS;IACT,UAAU;IACV,SAAS;IACT,KAAK;IACL,MAAM;IACN,UAAU;IACV,OAAO;IACP,KAAK;IACL,MAAM;IACN,cAAc;IACd,YAAY;IACZ,MAAM;IACN,SAAS;IACT,MAAM;IACN,QAAQ;IACR,aAAa;CACL,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { By } from './by.js';
|
|
2
|
+
import type { BiDiConnection } from './bidi/connection.js';
|
|
3
|
+
import type { Driver } from './driver.js';
|
|
4
|
+
import { CraftdriverError } from './errors.js';
|
|
5
|
+
import type { WebElement } from './webelement.js';
|
|
6
|
+
export type ContextSwitcher = {
|
|
7
|
+
in: () => Promise<void>;
|
|
8
|
+
out: () => Promise<void>;
|
|
9
|
+
};
|
|
10
|
+
export interface QueryBiDiContext {
|
|
11
|
+
connection: BiDiConnection;
|
|
12
|
+
contextId: string;
|
|
13
|
+
}
|
|
14
|
+
export type QueryBiDiProvider = () => QueryBiDiContext | undefined;
|
|
15
|
+
export type ElementTargetPlan = {
|
|
16
|
+
kind: 'locator';
|
|
17
|
+
plan: LocatorPlan;
|
|
18
|
+
} | {
|
|
19
|
+
kind: 'fixed';
|
|
20
|
+
element: WebElement;
|
|
21
|
+
};
|
|
22
|
+
export type SearchRootPlan = {
|
|
23
|
+
kind: 'document';
|
|
24
|
+
} | {
|
|
25
|
+
kind: 'element';
|
|
26
|
+
target: ElementTargetPlan;
|
|
27
|
+
} | {
|
|
28
|
+
kind: 'shadow';
|
|
29
|
+
host: ElementTargetPlan;
|
|
30
|
+
};
|
|
31
|
+
export interface LocatorPlan {
|
|
32
|
+
root: SearchRootPlan;
|
|
33
|
+
by: By;
|
|
34
|
+
index: number | 'last' | null;
|
|
35
|
+
filterText: string | RegExp | null;
|
|
36
|
+
filterHas: LocatorPlan | null;
|
|
37
|
+
}
|
|
38
|
+
export declare function createLocatorPlan(by: By, root?: SearchRootPlan): LocatorPlan;
|
|
39
|
+
export declare function cloneLocatorPlan(plan: LocatorPlan): LocatorPlan;
|
|
40
|
+
/** Rebase a locator used by `filter({ has })` beneath the candidate element. */
|
|
41
|
+
export declare function rebaseLocatorPlan(plan: LocatorPlan, base: SearchRootPlan, origin?: SearchRootPlan): LocatorPlan;
|
|
42
|
+
export declare function describeTarget(target: ElementTargetPlan): string;
|
|
43
|
+
export declare function describeRoot(root: SearchRootPlan): string;
|
|
44
|
+
export declare function describeBy(by: By): string;
|
|
45
|
+
export declare function describeLocatorPlan(plan: LocatorPlan): string;
|
|
46
|
+
export declare function isTerminalQueryError(error: unknown): boolean;
|
|
47
|
+
export declare function isDetachedShadowError(error: unknown): error is CraftdriverError;
|
|
48
|
+
/** Attach retry diagnostics when detachment remained the terminal outcome. */
|
|
49
|
+
export declare function withShadowRetryAttempts(error: unknown, attempts: number): unknown;
|
|
50
|
+
export declare class QueryEnvironment {
|
|
51
|
+
readonly driver: Driver;
|
|
52
|
+
private contextSwitcher?;
|
|
53
|
+
private bidiProvider?;
|
|
54
|
+
constructor(driver: Driver, options?: {
|
|
55
|
+
contextSwitcher?: ContextSwitcher;
|
|
56
|
+
bidiProvider?: QueryBiDiProvider;
|
|
57
|
+
});
|
|
58
|
+
setContextSwitcher(switcher: ContextSwitcher): void;
|
|
59
|
+
setBiDiProvider(provider: QueryBiDiProvider): void;
|
|
60
|
+
withContext<T>(operation: () => Promise<T>): Promise<T>;
|
|
61
|
+
resolveTarget(target: ElementTargetPlan): Promise<WebElement | null>;
|
|
62
|
+
resolveAll(plan: LocatorPlan): Promise<WebElement[]>;
|
|
63
|
+
private resolveRoot;
|
|
64
|
+
private openShadowRoot;
|
|
65
|
+
private findFromRoot;
|
|
66
|
+
private findSemanticFromBidiRoot;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/lib/query.ts"],"names":[],"mappings":"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"}
|