@enricai/barnacle 1.9.11 → 1.9.12
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/dist/scraper/browser-click-expr.d.ts +44 -0
- package/dist/scraper/browser-click-expr.d.ts.map +1 -0
- package/dist/scraper/browser-click-expr.js +69 -0
- package/dist/scraper/browser-click-expr.js.map +1 -0
- package/dist/scraper/deep-locator-candidates.d.ts +43 -11
- package/dist/scraper/deep-locator-candidates.d.ts.map +1 -1
- package/dist/scraper/deep-locator-candidates.js +72 -19
- package/dist/scraper/deep-locator-candidates.js.map +1 -1
- package/dist/scraper/deep-locator-click.d.ts +40 -2
- package/dist/scraper/deep-locator-click.d.ts.map +1 -1
- package/dist/scraper/deep-locator-click.js +29 -3
- package/dist/scraper/deep-locator-click.js.map +1 -1
- package/dist/scraper/deep-locator-fake.d.ts.map +1 -1
- package/dist/scraper/deep-locator-fake.js +1 -0
- package/dist/scraper/deep-locator-fake.js.map +1 -1
- package/dist/scraper/deep-locator-scan.d.ts +9 -5
- package/dist/scraper/deep-locator-scan.d.ts.map +1 -1
- package/dist/scraper/deep-locator-scan.js +44 -14
- package/dist/scraper/deep-locator-scan.js.map +1 -1
- package/dist/scraper/deep-query.d.ts +5 -5
- package/dist/scraper/deep-query.d.ts.map +1 -1
- package/dist/scraper/deep-query.js +7 -9
- package/dist/scraper/deep-query.js.map +1 -1
- package/dist/scraper/flow-runner.d.ts.map +1 -1
- package/dist/scraper/flow-runner.js +36 -6
- package/dist/scraper/flow-runner.js.map +1 -1
- package/dist/scraper/submit-control.d.ts +5 -3
- package/dist/scraper/submit-control.d.ts.map +1 -1
- package/dist/scraper/submit-control.js +7 -7
- package/dist/scraper/submit-control.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared browser-context click-activation snippet. Three primitives —
|
|
3
|
+
* `buildClickFrameCandidateExpr` (`deep-locator-scan.ts`),
|
|
4
|
+
* `buildDeepSubmitClickExpr` (`deep-query.ts`), and `buildClickByDeepIndexExpr`
|
|
5
|
+
* (`submit-control.ts`) — each need to activate a resolved element from inside
|
|
6
|
+
* a `page.evaluate`/`Frame.evaluate` string. They used to dispatch bare
|
|
7
|
+
* `new Event("mousedown"/"mouseup"/"click", { bubbles: true })`, which BUBBLES
|
|
8
|
+
* (so analytics/telemetry listeners fire) but is NOT a `MouseEvent`/`PointerEvent`
|
|
9
|
+
* instance — React's synthetic-event system and design-system widgets (Base Web,
|
|
10
|
+
* etc.) refuse a bare `Event` as a real user activation. The observed symptom on
|
|
11
|
+
* a markerless multi-select wizard: an option/toggle click reached the element
|
|
12
|
+
* and its analytics pixel recorded the click, yet the widget's "N selected"
|
|
13
|
+
* counter stayed flat because the selection never registered. This snippet
|
|
14
|
+
* dispatches a realistic `PointerEvent`/`MouseEvent` gesture
|
|
15
|
+
* (`pointerdown → mousedown → pointerup → mouseup`) and then triggers the
|
|
16
|
+
* activation with EXACTLY ONE click: native `el.click()` when the element has it
|
|
17
|
+
* (the trusted-path activation a `<button>` toggle listens for), else a single
|
|
18
|
+
* synthetic `MouseEvent("click")`. It must never do BOTH — a synthetic `click`
|
|
19
|
+
* dispatch plus a native `click()` fires a toggle handler twice
|
|
20
|
+
* (select → deselect = net zero), re-creating the very phantom this snippet
|
|
21
|
+
* exists to cure. Kept as a single interpolated string so all four primitives
|
|
22
|
+
* stay identical (DRY) rather than drifting copies.
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Emits a browser-context statement block that activates the element bound to
|
|
26
|
+
* `elVar`: focus, then a `pointerdown → mousedown → pointerup → mouseup` gesture
|
|
27
|
+
* using real `MouseEvent`/`PointerEvent` constructors (feature-detecting
|
|
28
|
+
* `PointerEvent`, since a non-pointer environment still has `MouseEvent`),
|
|
29
|
+
* followed by EXACTLY ONE click activation.
|
|
30
|
+
*
|
|
31
|
+
* `elVar` is interpolated verbatim as an already-in-scope identifier — the
|
|
32
|
+
* caller resolves the element (e.g. `const el = matches[index]`) before
|
|
33
|
+
* interpolating this block. The single click is delivered via native
|
|
34
|
+
* `elVar.click()` when the element exposes one (every `HTMLElement` does; it is
|
|
35
|
+
* the trusted-path activation that drives React/Base Web toggle state), and via
|
|
36
|
+
* one synthetic `MouseEvent("click")` ONLY as the `else` for a non-`HTMLElement`
|
|
37
|
+
* that has no native `click()`. The two paths are mutually exclusive on purpose:
|
|
38
|
+
* dispatching a synthetic `click` AND calling native `click()` would fire the
|
|
39
|
+
* element's handler twice, and on a toggle that is select → deselect = net zero.
|
|
40
|
+
* The gesture events (down/up) are not click activations, so they never
|
|
41
|
+
* double-fire the handler.
|
|
42
|
+
*/
|
|
43
|
+
export declare function clickActivationExpr(elVar: string): string;
|
|
44
|
+
//# sourceMappingURL=browser-click-expr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-click-expr.d.ts","sourceRoot":"","sources":["../../src/scraper/browser-click-expr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsBzD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared browser-context click-activation snippet. Three primitives —
|
|
4
|
+
* `buildClickFrameCandidateExpr` (`deep-locator-scan.ts`),
|
|
5
|
+
* `buildDeepSubmitClickExpr` (`deep-query.ts`), and `buildClickByDeepIndexExpr`
|
|
6
|
+
* (`submit-control.ts`) — each need to activate a resolved element from inside
|
|
7
|
+
* a `page.evaluate`/`Frame.evaluate` string. They used to dispatch bare
|
|
8
|
+
* `new Event("mousedown"/"mouseup"/"click", { bubbles: true })`, which BUBBLES
|
|
9
|
+
* (so analytics/telemetry listeners fire) but is NOT a `MouseEvent`/`PointerEvent`
|
|
10
|
+
* instance — React's synthetic-event system and design-system widgets (Base Web,
|
|
11
|
+
* etc.) refuse a bare `Event` as a real user activation. The observed symptom on
|
|
12
|
+
* a markerless multi-select wizard: an option/toggle click reached the element
|
|
13
|
+
* and its analytics pixel recorded the click, yet the widget's "N selected"
|
|
14
|
+
* counter stayed flat because the selection never registered. This snippet
|
|
15
|
+
* dispatches a realistic `PointerEvent`/`MouseEvent` gesture
|
|
16
|
+
* (`pointerdown → mousedown → pointerup → mouseup`) and then triggers the
|
|
17
|
+
* activation with EXACTLY ONE click: native `el.click()` when the element has it
|
|
18
|
+
* (the trusted-path activation a `<button>` toggle listens for), else a single
|
|
19
|
+
* synthetic `MouseEvent("click")`. It must never do BOTH — a synthetic `click`
|
|
20
|
+
* dispatch plus a native `click()` fires a toggle handler twice
|
|
21
|
+
* (select → deselect = net zero), re-creating the very phantom this snippet
|
|
22
|
+
* exists to cure. Kept as a single interpolated string so all four primitives
|
|
23
|
+
* stay identical (DRY) rather than drifting copies.
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.clickActivationExpr = clickActivationExpr;
|
|
27
|
+
/**
|
|
28
|
+
* Emits a browser-context statement block that activates the element bound to
|
|
29
|
+
* `elVar`: focus, then a `pointerdown → mousedown → pointerup → mouseup` gesture
|
|
30
|
+
* using real `MouseEvent`/`PointerEvent` constructors (feature-detecting
|
|
31
|
+
* `PointerEvent`, since a non-pointer environment still has `MouseEvent`),
|
|
32
|
+
* followed by EXACTLY ONE click activation.
|
|
33
|
+
*
|
|
34
|
+
* `elVar` is interpolated verbatim as an already-in-scope identifier — the
|
|
35
|
+
* caller resolves the element (e.g. `const el = matches[index]`) before
|
|
36
|
+
* interpolating this block. The single click is delivered via native
|
|
37
|
+
* `elVar.click()` when the element exposes one (every `HTMLElement` does; it is
|
|
38
|
+
* the trusted-path activation that drives React/Base Web toggle state), and via
|
|
39
|
+
* one synthetic `MouseEvent("click")` ONLY as the `else` for a non-`HTMLElement`
|
|
40
|
+
* that has no native `click()`. The two paths are mutually exclusive on purpose:
|
|
41
|
+
* dispatching a synthetic `click` AND calling native `click()` would fire the
|
|
42
|
+
* element's handler twice, and on a toggle that is select → deselect = net zero.
|
|
43
|
+
* The gesture events (down/up) are not click activations, so they never
|
|
44
|
+
* double-fire the handler.
|
|
45
|
+
*/
|
|
46
|
+
function clickActivationExpr(elVar) {
|
|
47
|
+
return `{
|
|
48
|
+
if (typeof ${elVar}.focus === "function") { try { ${elVar}.focus(); } catch (e) {} }
|
|
49
|
+
const __ceOpts = { bubbles: true, cancelable: true, composed: true, view: (typeof window !== "undefined" ? window : undefined), button: 0 };
|
|
50
|
+
const __mouse = (type, buttons) => {
|
|
51
|
+
try { return new MouseEvent(type, Object.assign({}, __ceOpts, { buttons: buttons })); }
|
|
52
|
+
catch (e) { return new Event(type, { bubbles: true, cancelable: true }); }
|
|
53
|
+
};
|
|
54
|
+
const __pointer = (type, buttons) => {
|
|
55
|
+
if (typeof PointerEvent === "function") {
|
|
56
|
+
try { return new PointerEvent(type, Object.assign({}, __ceOpts, { buttons: buttons, pointerType: "mouse", isPrimary: true })); }
|
|
57
|
+
catch (e) {}
|
|
58
|
+
}
|
|
59
|
+
return __mouse(type, buttons);
|
|
60
|
+
};
|
|
61
|
+
${elVar}.dispatchEvent(__pointer("pointerdown", 1));
|
|
62
|
+
${elVar}.dispatchEvent(__mouse("mousedown", 1));
|
|
63
|
+
${elVar}.dispatchEvent(__pointer("pointerup", 0));
|
|
64
|
+
${elVar}.dispatchEvent(__mouse("mouseup", 0));
|
|
65
|
+
if (typeof ${elVar}.click === "function") { try { ${elVar}.click(); } catch (e) {} }
|
|
66
|
+
else { ${elVar}.dispatchEvent(__mouse("click", 0)); }
|
|
67
|
+
}`;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=browser-click-expr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-click-expr.js","sourceRoot":"","sources":["../../src/scraper/browser-click-expr.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,6BAAoC,KAAa;IAC/C,OAAO;iBACQ,KAAK,kCAAkC,KAAK;;;;;;;;;;;;;MAavD,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;iBACM,KAAK,kCAAkC,KAAK;aAChD,KAAK;IACd,CAAC;AACL,CAAC"}
|
|
@@ -59,6 +59,15 @@ export interface DeepLocatorCandidate {
|
|
|
59
59
|
* enumeration fallback.
|
|
60
60
|
*/
|
|
61
61
|
accessibleText: string;
|
|
62
|
+
/**
|
|
63
|
+
* `true` when the batched scan flagged this candidate as a navigation/advance
|
|
64
|
+
* control (BACK/Next/Cancel — see {@link IS_NAV_CANDIDATE_EXPR}). Feeds
|
|
65
|
+
* {@link scoreCandidate}'s nav-demotion tier so a "select '<option>'" step
|
|
66
|
+
* never resolves to the wizard's back/next button. Always `false` on the
|
|
67
|
+
* legacy per-candidate path (which can't read `data-testid`); there
|
|
68
|
+
* {@link scoreCandidate} re-derives the text-based portion of the nav check.
|
|
69
|
+
*/
|
|
70
|
+
isNav: boolean;
|
|
62
71
|
}
|
|
63
72
|
/** One quoted phrase from an instruction, tagged with whether a negation marker (`NEGATION_MARKERS`) governs it. See {@link extractTaggedPhrases}. */
|
|
64
73
|
export interface TaggedPhrase {
|
|
@@ -82,18 +91,41 @@ export interface TaggedPhrase {
|
|
|
82
91
|
export declare function extractTaggedPhrases(instruction: string): TaggedPhrase[];
|
|
83
92
|
/**
|
|
84
93
|
* Scores one candidate's relevance to `instruction`'s tagged phrases, higher
|
|
85
|
-
* is more relevant. Parallels `submit-control.ts`'s tiered-ranking shape
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
94
|
+
* is more relevant. Parallels `submit-control.ts`'s tiered-ranking shape but
|
|
95
|
+
* adds two tiers the markerless-widget bug report needs: a nav/back demotion
|
|
96
|
+
* (so a "select '<option>'" step never lands on the wizard's BACK/Next button,
|
|
97
|
+
* whose own text may exact-match nothing OR be empty) and an ends-with tier (so
|
|
98
|
+
* an option whose accessible name is polluted by a leading icon-glyph name —
|
|
99
|
+
* an icon-font/`<svg><title>` prefix rendering as `"<IconName><Label>"` — still
|
|
100
|
+
* beats a bare exact-text decoy by matching on the trailing label).
|
|
101
|
+
*
|
|
102
|
+
* Strict-priority tiers, first match wins:
|
|
103
|
+
* - negated-phrase match → `-2` (worst: a decoy sibling is worse than an
|
|
104
|
+
* unrelated structural node — the invariant the original tiering established),
|
|
105
|
+
* - exact positive → `4`,
|
|
106
|
+
* - ends-with a positive → `3` (the icon-glyph suffix case),
|
|
107
|
+
* - contains a positive (either direction) → `2`,
|
|
108
|
+
* - nav/back control with NO positive textual match → `-1`,
|
|
109
|
+
* - else → `0`.
|
|
110
|
+
*
|
|
111
|
+
* Crucially, the nav/back demotion sits BELOW the positive tiers, not above
|
|
112
|
+
* them: it only sinks a candidate that would otherwise score `0` (no phrase
|
|
113
|
+
* match at all) — the empty BACK button, or a bare "Next"/"Cancel" chrome
|
|
114
|
+
* button the instruction doesn't name. A candidate that positively matches the
|
|
115
|
+
* instruction phrase — exact, ends-with, or contains — is the control the step
|
|
116
|
+
* named and keeps its positive score even if its label happens to contain a nav
|
|
117
|
+
* word (`select 'Next'` → the "Next" option scores 4; "primary Next" whose step
|
|
118
|
+
* quotes 'Next' scores 2 via containment). This makes the demotion a tie-breaker
|
|
119
|
+
* against chrome, never an override of a real target.
|
|
120
|
+
*
|
|
121
|
+
* `isNav` comes from the batched scan (`data-testid` + empty-text signals it
|
|
122
|
+
* alone can see); the text-word portion is re-derived here via
|
|
123
|
+
* {@link matchesNavText} so the legacy per-candidate path (always `isNav=false`)
|
|
124
|
+
* still demotes a bare "Back"/"Next". Exported so `flow-runner.ts` can detect a
|
|
125
|
+
* tie for the top rank among `resolveDeepLocatorCandidates`'s already-sorted
|
|
126
|
+
* output (see {@link extractTaggedPhrases}'s docblock).
|
|
95
127
|
*/
|
|
96
|
-
export declare function scoreCandidate(accessibleText: string, phrases: TaggedPhrase[]): number;
|
|
128
|
+
export declare function scoreCandidate(accessibleText: string, phrases: TaggedPhrase[], isNav?: boolean): number;
|
|
97
129
|
/**
|
|
98
130
|
* Enumerates every element `page.deepLocator()` matches inside the frame
|
|
99
131
|
* scoped by `frameSelector`, ranked by relevance to `instruction` (highest
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-locator-candidates.d.ts","sourceRoot":"","sources":["../../src/scraper/deep-locator-candidates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAWrD,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,wBAAwB,CAAC;AA2BhC,sJAAsJ;AACtJ,MAAM,WAAW,yBAAyB;IACxC,mIAAmI;IACnI,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uJAAuJ;IACvJ,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;;;;;;;;;;;OAgBG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAKD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,oBAAoB;IACnC,kJAAkJ;IAClJ,KAAK,EAAE,MAAM,CAAC;IACd,gLAAgL;IAChL,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"deep-locator-candidates.d.ts","sourceRoot":"","sources":["../../src/scraper/deep-locator-candidates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAWrD,OAAO,EAEL,KAAK,WAAW,EAEjB,MAAM,wBAAwB,CAAC;AA2BhC,sJAAsJ;AACtJ,MAAM,WAAW,yBAAyB;IACxC,mIAAmI;IACnI,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uJAAuJ;IACvJ,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;;;;;;;;;;;OAgBG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAKD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,oBAAoB;IACnC,kJAAkJ;IAClJ,KAAK,EAAE,MAAM,CAAC;IACd,gLAAgL;IAChL,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,KAAK,EAAE,OAAO,CAAC;CAChB;AAsBD,sJAAsJ;AACtJ,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,EAAE,CAaxE;AAkCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,cAAc,CAC5B,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,YAAY,EAAE,EACvB,KAAK,UAAQ,GACZ,MAAM,CAiBR;AA+JD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,EAC3B,cAAc,GAAE,yBAA8B,GAC7C,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAuCjC;AAqDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,cAAc,GAAE,yBAA8B,GAC7C,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;;;;;;;GAQG"}
|
|
@@ -89,31 +89,82 @@ function extractTaggedPhrases(instruction) {
|
|
|
89
89
|
function normalize(text) {
|
|
90
90
|
return text.replace(/\s+/g, " ").trim().toLowerCase();
|
|
91
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Nav/advance words that mark a control as chrome (BACK/Next/Cancel), matched
|
|
94
|
+
* with the same word-boundary predicate SHAPE `submit-control.ts`'s
|
|
95
|
+
* `NEGATIVE_TEXT_EXPR` uses, over a nav-word list that adds `"next"` (an advance
|
|
96
|
+
* button a "select '<option>'" step must be de-prioritized against). Kept here
|
|
97
|
+
* (not imported from that browser-context string) so {@link scoreCandidate} can
|
|
98
|
+
* re-derive the text portion of the nav check on the legacy per-candidate path,
|
|
99
|
+
* which can't read `data-testid` and so always arrives with `isNav === false`.
|
|
100
|
+
*/
|
|
101
|
+
const NAV_TEXT_WORDS = [
|
|
102
|
+
"back",
|
|
103
|
+
"cancel",
|
|
104
|
+
"previous",
|
|
105
|
+
"next",
|
|
106
|
+
"close",
|
|
107
|
+
"save draft",
|
|
108
|
+
"save for later",
|
|
109
|
+
];
|
|
110
|
+
/** True when `normalizedText` is one of {@link NAV_TEXT_WORDS} (whole-word / edge match), the text-only half of the scan's `IS_NAV_CANDIDATE_EXPR`. */
|
|
111
|
+
function matchesNavText(normalizedText) {
|
|
112
|
+
return NAV_TEXT_WORDS.some((n) => normalizedText === n || normalizedText.startsWith(`${n} `) || normalizedText.endsWith(` ${n}`));
|
|
113
|
+
}
|
|
92
114
|
/**
|
|
93
115
|
* Scores one candidate's relevance to `instruction`'s tagged phrases, higher
|
|
94
|
-
* is more relevant. Parallels `submit-control.ts`'s tiered-ranking shape
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
116
|
+
* is more relevant. Parallels `submit-control.ts`'s tiered-ranking shape but
|
|
117
|
+
* adds two tiers the markerless-widget bug report needs: a nav/back demotion
|
|
118
|
+
* (so a "select '<option>'" step never lands on the wizard's BACK/Next button,
|
|
119
|
+
* whose own text may exact-match nothing OR be empty) and an ends-with tier (so
|
|
120
|
+
* an option whose accessible name is polluted by a leading icon-glyph name —
|
|
121
|
+
* an icon-font/`<svg><title>` prefix rendering as `"<IconName><Label>"` — still
|
|
122
|
+
* beats a bare exact-text decoy by matching on the trailing label).
|
|
123
|
+
*
|
|
124
|
+
* Strict-priority tiers, first match wins:
|
|
125
|
+
* - negated-phrase match → `-2` (worst: a decoy sibling is worse than an
|
|
126
|
+
* unrelated structural node — the invariant the original tiering established),
|
|
127
|
+
* - exact positive → `4`,
|
|
128
|
+
* - ends-with a positive → `3` (the icon-glyph suffix case),
|
|
129
|
+
* - contains a positive (either direction) → `2`,
|
|
130
|
+
* - nav/back control with NO positive textual match → `-1`,
|
|
131
|
+
* - else → `0`.
|
|
132
|
+
*
|
|
133
|
+
* Crucially, the nav/back demotion sits BELOW the positive tiers, not above
|
|
134
|
+
* them: it only sinks a candidate that would otherwise score `0` (no phrase
|
|
135
|
+
* match at all) — the empty BACK button, or a bare "Next"/"Cancel" chrome
|
|
136
|
+
* button the instruction doesn't name. A candidate that positively matches the
|
|
137
|
+
* instruction phrase — exact, ends-with, or contains — is the control the step
|
|
138
|
+
* named and keeps its positive score even if its label happens to contain a nav
|
|
139
|
+
* word (`select 'Next'` → the "Next" option scores 4; "primary Next" whose step
|
|
140
|
+
* quotes 'Next' scores 2 via containment). This makes the demotion a tie-breaker
|
|
141
|
+
* against chrome, never an override of a real target.
|
|
142
|
+
*
|
|
143
|
+
* `isNav` comes from the batched scan (`data-testid` + empty-text signals it
|
|
144
|
+
* alone can see); the text-word portion is re-derived here via
|
|
145
|
+
* {@link matchesNavText} so the legacy per-candidate path (always `isNav=false`)
|
|
146
|
+
* still demotes a bare "Back"/"Next". Exported so `flow-runner.ts` can detect a
|
|
147
|
+
* tie for the top rank among `resolveDeepLocatorCandidates`'s already-sorted
|
|
148
|
+
* output (see {@link extractTaggedPhrases}'s docblock).
|
|
104
149
|
*/
|
|
105
|
-
function scoreCandidate(accessibleText, phrases) {
|
|
150
|
+
function scoreCandidate(accessibleText, phrases, isNav = false) {
|
|
106
151
|
const normalizedText = normalize(accessibleText);
|
|
107
|
-
if (!normalizedText)
|
|
108
|
-
return 0;
|
|
109
152
|
const positives = phrases.filter((p) => !p.negated).map((p) => normalize(p.text));
|
|
110
153
|
const negatives = phrases.filter((p) => p.negated).map((p) => normalize(p.text));
|
|
111
|
-
if (
|
|
154
|
+
if (normalizedText.length > 0 &&
|
|
155
|
+
negatives.some((n) => n === normalizedText || normalizedText.includes(n))) {
|
|
156
|
+
return -2;
|
|
157
|
+
}
|
|
158
|
+
if (normalizedText.length > 0) {
|
|
159
|
+
if (positives.some((p) => p === normalizedText))
|
|
160
|
+
return 4;
|
|
161
|
+
if (positives.some((p) => normalizedText.endsWith(p)))
|
|
162
|
+
return 3;
|
|
163
|
+
if (positives.some((p) => normalizedText.includes(p) || p.includes(normalizedText)))
|
|
164
|
+
return 2;
|
|
165
|
+
}
|
|
166
|
+
if (isNav || matchesNavText(normalizedText))
|
|
112
167
|
return -1;
|
|
113
|
-
if (positives.some((p) => p === normalizedText))
|
|
114
|
-
return 3;
|
|
115
|
-
if (positives.some((p) => normalizedText.includes(p) || p.includes(normalizedText)))
|
|
116
|
-
return 2;
|
|
117
168
|
return 0;
|
|
118
169
|
}
|
|
119
170
|
/**
|
|
@@ -200,6 +251,7 @@ async function scanFrameCandidatesBatched(page, frameSelector, innerSelector, ho
|
|
|
200
251
|
index: entry.index,
|
|
201
252
|
selector: candidateSelector(hopSelector, entry.index),
|
|
202
253
|
accessibleText: entry.text.trim(),
|
|
254
|
+
isNav: entry.isNav === true,
|
|
203
255
|
}));
|
|
204
256
|
}
|
|
205
257
|
/**
|
|
@@ -238,6 +290,7 @@ async function enumerateCandidatesViaLegacyLoop(delegate, hopSelector, callTimeo
|
|
|
238
290
|
index,
|
|
239
291
|
selector: candidateSelector(hopSelector, index),
|
|
240
292
|
accessibleText: accessibleText.trim(),
|
|
293
|
+
isNav: false,
|
|
241
294
|
});
|
|
242
295
|
}
|
|
243
296
|
return candidates;
|
|
@@ -297,7 +350,7 @@ async function resolveDeepLocatorCandidates(page, frameSelector, innerSelector,
|
|
|
297
350
|
.map((candidate, originalOrder) => ({
|
|
298
351
|
candidate,
|
|
299
352
|
originalOrder,
|
|
300
|
-
score: scoreCandidate(candidate.accessibleText, phrases),
|
|
353
|
+
score: scoreCandidate(candidate.accessibleText, phrases, candidate.isNav),
|
|
301
354
|
}))
|
|
302
355
|
.sort((a, b) => b.score - a.score || a.originalOrder - b.originalOrder)
|
|
303
356
|
.map(({ candidate }) => candidate);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-locator-candidates.js","sourceRoot":"","sources":["../../src/scraper/deep-locator-candidates.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;AAIH,yCAA8C;AAC9C,2CAA0C;AAC1C,mEAMqC;AACrC,yDAIgC;AAChC,iDAAkD;AAElD,MAAM,MAAM,GAAG,IAAA,mBAAS,EAAC,EAAE,IAAI,EAAE,iCAAiC,EAAE,CAAC,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,oCAAoC,GAAG,MAAM,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,MAAM,0CAA0C,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"deep-locator-candidates.js","sourceRoot":"","sources":["../../src/scraper/deep-locator-candidates.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,20 +39,45 @@ export declare const DEFAULT_CLICK_CANDIDATE_ATTEMPT_CAP = 5;
|
|
|
39
39
|
export type ClickCandidateFn = (candidate: DeepLocatorCandidate) => Promise<void>;
|
|
40
40
|
/** Refuses a candidate before it's clicked — e.g. `flow-runner.ts`'s `isWizardExitAction` deny-list, injected so this module stays site-agnostic. */
|
|
41
41
|
export type DenyCandidatePredicate = (candidate: DeepLocatorCandidate) => boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Reads the running "N selected" counter AFTER a candidate's click resolved,
|
|
44
|
+
* returning the current count or `null` when no counter is exposed. Injected so
|
|
45
|
+
* this module stays site-agnostic and `Page`-free — `flow-runner.ts` supplies a
|
|
46
|
+
* reader that re-snapshots the frame and parses the count via
|
|
47
|
+
* `selectionCountFromSignature`. See {@link ClickCandidateCascadeOptions.readSelectionCount}.
|
|
48
|
+
*/
|
|
49
|
+
export type ReadSelectionCountFn = () => Promise<number | null>;
|
|
42
50
|
export interface ClickCandidateCascadeOptions {
|
|
43
51
|
/** Skips a candidate without clicking it when this returns `true`. Optional — omit to click every non-not-actionable candidate in rank order. */
|
|
44
52
|
denyCandidate?: DenyCandidatePredicate;
|
|
45
53
|
/** Overrides {@link DEFAULT_CLICK_CANDIDATE_ATTEMPT_CAP}. */
|
|
46
54
|
attemptCap?: number;
|
|
55
|
+
/**
|
|
56
|
+
* When supplied (alongside a numeric {@link baselineSelectionCount}), a
|
|
57
|
+
* candidate whose click RESOLVED but did not raise the selection count above
|
|
58
|
+
* the baseline is treated like a not-actionable rejection: the walk keeps
|
|
59
|
+
* going to the next candidate instead of reporting success. This is the
|
|
60
|
+
* next-best-candidate recovery for a markerless multi-select phantom (the
|
|
61
|
+
* #163/#164 counter veto knows the click didn't register; this feeds that
|
|
62
|
+
* back into re-resolution before a replan is spent). A `null` read means "no
|
|
63
|
+
* counter exposed" and never vetoes, mirroring `isSelectionCounterStalled`'s
|
|
64
|
+
* null-safety. Omit for non-selection steps — the walk then behaves exactly
|
|
65
|
+
* as before.
|
|
66
|
+
*/
|
|
67
|
+
readSelectionCount?: ReadSelectionCountFn;
|
|
68
|
+
/** The pre-walk selection count; a post-click read at or below this counts as "did not register". Ignored unless {@link readSelectionCount} is set. `null` disables the check (counter-less widget). */
|
|
69
|
+
baselineSelectionCount?: number | null;
|
|
47
70
|
}
|
|
48
71
|
/** Outcome of a {@link clickFirstActionableCandidate} walk. */
|
|
49
72
|
export interface ClickCandidateCascadeOutcome {
|
|
50
|
-
/** `true` only when a candidate's click resolved (didn't reject). */
|
|
73
|
+
/** `true` only when a candidate's click resolved (didn't reject) AND, when a selection-count check is wired, registered the selection. */
|
|
51
74
|
clicked: boolean;
|
|
52
75
|
/** The candidate that was clicked, or `null` when the walk exhausted the list/cap without a successful click. */
|
|
53
76
|
candidate: DeepLocatorCandidate | null;
|
|
54
77
|
/** Selectors of every candidate this walk actually clicked (attempted), in attempt order — denied candidates are excluded since they were never clicked. */
|
|
55
78
|
triedSelectors: string[];
|
|
79
|
+
/** Selectors of candidates that clicked cleanly but were rejected because the selection counter did not rise (a subset of {@link triedSelectors}). Empty unless {@link ClickCandidateCascadeOptions.readSelectionCount} vetoed at least one — lets the caller emit a "clicked but nothing registered" failure reason distinct from not-actionable. */
|
|
80
|
+
counterStalledSelectors: string[];
|
|
56
81
|
}
|
|
57
82
|
/**
|
|
58
83
|
* Walks `candidates` in rank order, clicking each via `click` until one
|
|
@@ -65,7 +90,20 @@ export interface ClickCandidateCascadeOutcome {
|
|
|
65
90
|
* with actionability (a detached frame, a wedged click's
|
|
66
91
|
* `WatchdogTimeoutError`). Never throws on exhaustion — an exhausted list
|
|
67
92
|
* (every candidate denied or not-actionable, or the cap reached) resolves to
|
|
68
|
-
* `{ clicked: false, candidate: null, triedSelectors }`
|
|
93
|
+
* `{ clicked: false, candidate: null, triedSelectors, counterStalledSelectors }`
|
|
94
|
+
* instead.
|
|
95
|
+
*
|
|
96
|
+
* When `readSelectionCount`/`baselineSelectionCount` are supplied, a click that
|
|
97
|
+
* RESOLVED but left the selection count at or below the baseline is treated
|
|
98
|
+
* like a not-actionable rejection — the walk advances to the next candidate
|
|
99
|
+
* instead of reporting a phantom success. A count that rose returns immediately
|
|
100
|
+
* (so a click that DID register never triggers a second click — the
|
|
101
|
+
* toggle-double-click guard), and a `null` read is never a veto (counter-less
|
|
102
|
+
* widget). Because the check runs after `click` already awaited its own settle,
|
|
103
|
+
* a synchronously-updated counter is visible; the only residual is a genuinely-
|
|
104
|
+
* registered click whose counter lags, which is the same false-negative the
|
|
105
|
+
* caller's late counter veto already tolerates today — behaviour is no worse,
|
|
106
|
+
* and now recovers via the next candidate.
|
|
69
107
|
*/
|
|
70
108
|
export declare function clickFirstActionableCandidate(candidates: readonly DeepLocatorCandidate[], click: ClickCandidateFn, options?: ClickCandidateCascadeOptions): Promise<ClickCandidateCascadeOutcome>;
|
|
71
109
|
//# sourceMappingURL=deep-locator-click.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-locator-click.d.ts","sourceRoot":"","sources":["../../src/scraper/deep-locator-click.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAG9E;;;;;;;;;GASG;AACH,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElF,qJAAqJ;AACrJ,MAAM,MAAM,sBAAsB,GAAG,CAAC,SAAS,EAAE,oBAAoB,KAAK,OAAO,CAAC;AAElF,MAAM,WAAW,4BAA4B;IAC3C,iJAAiJ;IACjJ,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"deep-locator-click.d.ts","sourceRoot":"","sources":["../../src/scraper/deep-locator-click.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAG9E;;;;;;;;;GASG;AACH,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAElF,qJAAqJ;AACrJ,MAAM,MAAM,sBAAsB,GAAG,CAAC,SAAS,EAAE,oBAAoB,KAAK,OAAO,CAAC;AAElF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAEhE,MAAM,WAAW,4BAA4B;IAC3C,iJAAiJ;IACjJ,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,EAAE,oBAAoB,CAAC;IAC1C,wMAAwM;IACxM,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED,+DAA+D;AAC/D,MAAM,WAAW,4BAA4B;IAC3C,0IAA0I;IAC1I,OAAO,EAAE,OAAO,CAAC;IACjB,iHAAiH;IACjH,SAAS,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACvC,4JAA4J;IAC5J,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,sVAAsV;IACtV,uBAAuB,EAAE,MAAM,EAAE,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,6BAA6B,CACjD,UAAU,EAAE,SAAS,oBAAoB,EAAE,EAC3C,KAAK,EAAE,gBAAgB,EACvB,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,4BAA4B,CAAC,CAmCvC"}
|
|
@@ -44,11 +44,29 @@ exports.DEFAULT_CLICK_CANDIDATE_ATTEMPT_CAP = 5;
|
|
|
44
44
|
* with actionability (a detached frame, a wedged click's
|
|
45
45
|
* `WatchdogTimeoutError`). Never throws on exhaustion — an exhausted list
|
|
46
46
|
* (every candidate denied or not-actionable, or the cap reached) resolves to
|
|
47
|
-
* `{ clicked: false, candidate: null, triedSelectors }`
|
|
47
|
+
* `{ clicked: false, candidate: null, triedSelectors, counterStalledSelectors }`
|
|
48
|
+
* instead.
|
|
49
|
+
*
|
|
50
|
+
* When `readSelectionCount`/`baselineSelectionCount` are supplied, a click that
|
|
51
|
+
* RESOLVED but left the selection count at or below the baseline is treated
|
|
52
|
+
* like a not-actionable rejection — the walk advances to the next candidate
|
|
53
|
+
* instead of reporting a phantom success. A count that rose returns immediately
|
|
54
|
+
* (so a click that DID register never triggers a second click — the
|
|
55
|
+
* toggle-double-click guard), and a `null` read is never a veto (counter-less
|
|
56
|
+
* widget). Because the check runs after `click` already awaited its own settle,
|
|
57
|
+
* a synchronously-updated counter is visible; the only residual is a genuinely-
|
|
58
|
+
* registered click whose counter lags, which is the same false-negative the
|
|
59
|
+
* caller's late counter veto already tolerates today — behaviour is no worse,
|
|
60
|
+
* and now recovers via the next candidate.
|
|
48
61
|
*/
|
|
49
62
|
async function clickFirstActionableCandidate(candidates, click, options = {}) {
|
|
50
63
|
const attemptCap = options.attemptCap ?? exports.DEFAULT_CLICK_CANDIDATE_ATTEMPT_CAP;
|
|
64
|
+
const { readSelectionCount, baselineSelectionCount } = options;
|
|
65
|
+
const checkCounter = readSelectionCount !== undefined &&
|
|
66
|
+
baselineSelectionCount !== undefined &&
|
|
67
|
+
baselineSelectionCount !== null;
|
|
51
68
|
const triedSelectors = [];
|
|
69
|
+
const counterStalledSelectors = [];
|
|
52
70
|
let attempts = 0;
|
|
53
71
|
for (const candidate of candidates) {
|
|
54
72
|
if (attempts >= attemptCap)
|
|
@@ -59,13 +77,21 @@ async function clickFirstActionableCandidate(candidates, click, options = {}) {
|
|
|
59
77
|
triedSelectors.push(candidate.selector);
|
|
60
78
|
try {
|
|
61
79
|
await click(candidate);
|
|
62
|
-
return { clicked: true, candidate, triedSelectors };
|
|
63
80
|
}
|
|
64
81
|
catch (error) {
|
|
65
82
|
if (!(0, deep_locator_scan_1.isNodeNotActionableError)(error))
|
|
66
83
|
throw error;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (checkCounter) {
|
|
87
|
+
const after = await readSelectionCount();
|
|
88
|
+
if (after !== null && after <= baselineSelectionCount) {
|
|
89
|
+
counterStalledSelectors.push(candidate.selector);
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
67
92
|
}
|
|
93
|
+
return { clicked: true, candidate, triedSelectors, counterStalledSelectors };
|
|
68
94
|
}
|
|
69
|
-
return { clicked: false, candidate: null, triedSelectors };
|
|
95
|
+
return { clicked: false, candidate: null, triedSelectors, counterStalledSelectors };
|
|
70
96
|
}
|
|
71
97
|
//# sourceMappingURL=deep-locator-click.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-locator-click.js","sourceRoot":"","sources":["../../src/scraper/deep-locator-click.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;;AAGH,mEAAuE;AAEvE;;;;;;;;;GASG;AACU,QAAA,mCAAmC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"deep-locator-click.js","sourceRoot":"","sources":["../../src/scraper/deep-locator-click.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;;AAGH,mEAAuE;AAEvE;;;;;;;;;GASG;AACU,QAAA,mCAAmC,GAAG,CAAC,CAAC;AAyDrD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACI,KAAK,wCACV,UAA2C,EAC3C,KAAuB,EACvB,OAAO,GAAiC,EAAE;IAE1C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,QAAA,mCAAmC,CAAC;IAC7E,MAAM,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC;IAC/D,MAAM,YAAY,GAChB,kBAAkB,KAAK,SAAS;QAChC,sBAAsB,KAAK,SAAS;QACpC,sBAAsB,KAAK,IAAI,CAAC;IAClC,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,uBAAuB,GAAa,EAAE,CAAC;IAC7C,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,QAAQ,IAAI,UAAU;YAAE,MAAM;QAClC,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC;YAAE,SAAS;QAEjD,QAAQ,IAAI,CAAC,CAAC;QACd,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAA,4CAAwB,EAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YAClD,SAAS;QACX,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,kBAAkB,EAAE,CAAC;YACzC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,sBAAsB,EAAE,CAAC;gBACtD,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACjD,SAAS;YACX,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,uBAAuB,EAAE,CAAC;IAC/E,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,uBAAuB,EAAE,CAAC;AACtF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep-locator-fake.d.ts","sourceRoot":"","sources":["../../src/scraper/deep-locator-fake.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2DAA2D,CAAC;AACrG,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE5B,OAAO,KAAK,EACV,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,6BAA6B,CAAC;AAErC;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,8FAA8F;IAC9F,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAsBD;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,MAAM,EAChB,IAAI,SAAK,GACR,kBAAkB,CAEpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,aAAa,CAAC,MAAM,GAAG,0BAA0B,CAAC,GAC3D,kBAAkB,CAepB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,wBAAwB,GAChC,OAAO,GACP,OAAO,GACP,aAAa,GACb,MAAM,GACN,cAAc,GACd,YAAY,CAAC;AA6BjB,MAAM,WAAW,oCAAoC;IACnD,uFAAuF;IACvF,QAAQ,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,wBAAwB,EAAE,CAAC;IAChF,wGAAwG;IACxG,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC;IACjC;;;;;OAKG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oCAAoC,GAC5C,yBAAyB,CAM3B;AAED;;;;;;GAMG;AACH,MAAM,MAAM,wBAAwB,GAChC,wBAAwB,GACxB,MAAM,GACN,cAAc,GACd,aAAa,GACb,eAAe,CAAC;AAEpB,MAAM,WAAW,oCAAoC;IACnD,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,wBAAwB,GAAG,SAAS,wBAAwB,EAAE,CAAC;IACjF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAkCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,kBAAkB,EACvB,OAAO,EAAE,oCAAoC,GAC5C,IAAI,CAGN;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACpC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAClC,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAC9C,YAAY,EAAE,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAClD,WAAW,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAChD,KAAK,IAAI,uBAAuB,CAAC;IACjC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,uBAAuB,CAAC;CAC7C;AAED;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,8CAA8C,CAAC;AAsHvF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,oBAAoB,GAC1B,CAAC,QAAQ,EAAE,MAAM,KAAK,uBAAuB,CAE/C;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,QAAQ,CAAC,aAAa,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAClF,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,wLAAwL;IACxL,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtF,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,qBAAqB,IAAI;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7E,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC1C,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IACjD,aAAa,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;IACzD,KAAK,IAAI,IAAI,CAAC;CACf;AAED,kJAAkJ;AAClJ,MAAM,WAAW,WAAW;IAC1B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CAAC;IACrD,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;CACnD;AAED,+FAA+F;AAC/F,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,QAAQ,CAAC,aAAa,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACnF,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACxC,6IAA6I;IAC7I,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,2HAA2H;IAC3H,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACxF;AA4BD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,SAAK,EAChB,OAAO,GAAE,yBAA8B,GACtC,cAAc,CAqChB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,GAAG,WAAW,CAUzF;AAED,+IAA+I;AAC/I,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,8TAA8T;AAC9T,eAAO,MAAM,sBAAsB,uBAAuB,CAAC;AAE3D,iOAAiO;AACjO,eAAO,MAAM,sBAAsB,YAAI,oBAAoB,EAAE,sBAAsB,CAAU,CAAC;AAE9F,+MAA+M;AAC/M,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,CA0DxD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,MAAM,GACf,CAAC,UAAU,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,wBAAwB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"deep-locator-fake.d.ts","sourceRoot":"","sources":["../../src/scraper/deep-locator-fake.ts"],"names":[],"mappings":"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"}
|