@healflow/playwright 0.1.1 → 0.1.3
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/README.md +38 -21
- package/dist/index.d.ts +2 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -691
- package/dist/index.js.map +1 -1
- package/dist/plugin/classification.d.ts +6 -0
- package/dist/plugin/classification.d.ts.map +1 -0
- package/dist/plugin/classification.js +343 -0
- package/dist/plugin/classification.js.map +1 -0
- package/dist/plugin/constants.d.ts +5 -0
- package/dist/plugin/constants.d.ts.map +1 -0
- package/dist/plugin/constants.js +55 -0
- package/dist/plugin/constants.js.map +1 -0
- package/dist/plugin/heal-emit.d.ts +5 -0
- package/dist/plugin/heal-emit.d.ts.map +1 -0
- package/dist/plugin/heal-emit.js +69 -0
- package/dist/plugin/heal-emit.js.map +1 -0
- package/dist/plugin/index.d.ts +5 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +11 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/locator-wrap.d.ts +4 -0
- package/dist/plugin/locator-wrap.d.ts.map +1 -0
- package/dist/plugin/locator-wrap.js +68 -0
- package/dist/plugin/locator-wrap.js.map +1 -0
- package/dist/plugin/options.d.ts +3 -0
- package/dist/plugin/options.d.ts.map +1 -0
- package/dist/plugin/options.js +25 -0
- package/dist/plugin/options.js.map +1 -0
- package/dist/plugin/page-wrap.d.ts +9 -0
- package/dist/plugin/page-wrap.d.ts.map +1 -0
- package/dist/plugin/page-wrap.js +99 -0
- package/dist/plugin/page-wrap.js.map +1 -0
- package/dist/plugin/types.d.ts +19 -0
- package/dist/plugin/types.d.ts.map +1 -0
- package/dist/plugin/types.js +3 -0
- package/dist/plugin/types.js.map +1 -0
- package/dist/report-html/build.d.ts +7 -0
- package/dist/report-html/build.d.ts.map +1 -0
- package/dist/report-html/build.js +138 -0
- package/dist/report-html/build.js.map +1 -0
- package/dist/report-html/format.d.ts +6 -0
- package/dist/report-html/format.d.ts.map +1 -0
- package/dist/report-html/format.js +37 -0
- package/dist/report-html/format.js.map +1 -0
- package/dist/report-html/icons.d.ts +4 -0
- package/dist/report-html/icons.d.ts.map +1 -0
- package/dist/report-html/icons.js +7 -0
- package/dist/report-html/icons.js.map +1 -0
- package/dist/report-html/index.d.ts +3 -0
- package/dist/report-html/index.d.ts.map +1 -0
- package/dist/report-html/index.js +6 -0
- package/dist/report-html/index.js.map +1 -0
- package/dist/report-html/render.d.ts +6 -0
- package/dist/report-html/render.d.ts.map +1 -0
- package/dist/report-html/render.js +139 -0
- package/dist/report-html/render.js.map +1 -0
- package/dist/report-html/script.d.ts +2 -0
- package/dist/report-html/script.d.ts.map +1 -0
- package/dist/report-html/script.js +75 -0
- package/dist/report-html/script.js.map +1 -0
- package/dist/report-html/status.d.ts +2 -0
- package/dist/report-html/status.d.ts.map +1 -0
- package/dist/report-html/status.js +13 -0
- package/dist/report-html/status.js.map +1 -0
- package/dist/report-html/styles.d.ts +2 -0
- package/dist/report-html/styles.d.ts.map +1 -0
- package/dist/report-html/styles.js +441 -0
- package/dist/report-html/styles.js.map +1 -0
- package/dist/report-html/tree.d.ts +8 -0
- package/dist/report-html/tree.d.ts.map +1 -0
- package/dist/report-html/tree.js +57 -0
- package/dist/report-html/tree.js.map +1 -0
- package/dist/report-html/types.d.ts +19 -0
- package/dist/report-html/types.d.ts.map +1 -0
- package/dist/report-html/types.js +3 -0
- package/dist/report-html/types.js.map +1 -0
- package/dist/report-html.d.ts +2 -6
- package/dist/report-html.d.ts.map +1 -1
- package/dist/report-html.js +3 -859
- package/dist/report-html.js.map +1 -1
- package/dist/runtime-ladder.d.ts +17 -0
- package/dist/runtime-ladder.d.ts.map +1 -0
- package/dist/runtime-ladder.js +61 -0
- package/dist/runtime-ladder.js.map +1 -0
- package/dist/runtime-techniques/heal-helpers.d.ts +10 -0
- package/dist/runtime-techniques/heal-helpers.d.ts.map +1 -0
- package/dist/runtime-techniques/heal-helpers.js +304 -0
- package/dist/runtime-techniques/heal-helpers.js.map +1 -0
- package/dist/runtime-techniques/index.d.ts +11 -0
- package/dist/runtime-techniques/index.d.ts.map +1 -0
- package/dist/runtime-techniques/index.js +34 -0
- package/dist/runtime-techniques/index.js.map +1 -0
- package/dist/runtime-techniques/registry.d.ts +5 -0
- package/dist/runtime-techniques/registry.d.ts.map +1 -0
- package/dist/runtime-techniques/registry.js +29 -0
- package/dist/runtime-techniques/registry.js.map +1 -0
- package/dist/runtime-techniques/shared/constants.d.ts +4 -0
- package/dist/runtime-techniques/shared/constants.d.ts.map +1 -0
- package/dist/runtime-techniques/shared/constants.js +7 -0
- package/dist/runtime-techniques/shared/constants.js.map +1 -0
- package/dist/runtime-techniques/shared/error-utils.d.ts +9 -0
- package/dist/runtime-techniques/shared/error-utils.d.ts.map +1 -0
- package/dist/runtime-techniques/shared/error-utils.js +27 -0
- package/dist/runtime-techniques/shared/error-utils.js.map +1 -0
- package/dist/runtime-techniques/shared/heal-alternate.d.ts +6 -0
- package/dist/runtime-techniques/shared/heal-alternate.d.ts.map +1 -0
- package/dist/runtime-techniques/shared/heal-alternate.js +130 -0
- package/dist/runtime-techniques/shared/heal-alternate.js.map +1 -0
- package/dist/runtime-techniques/shared/heal-candidates.d.ts +11 -0
- package/dist/runtime-techniques/shared/heal-candidates.d.ts.map +1 -0
- package/dist/runtime-techniques/shared/heal-candidates.js +127 -0
- package/dist/runtime-techniques/shared/heal-candidates.js.map +1 -0
- package/dist/runtime-techniques/shared/heal-history.d.ts +10 -0
- package/dist/runtime-techniques/shared/heal-history.d.ts.map +1 -0
- package/dist/runtime-techniques/shared/heal-history.js +42 -0
- package/dist/runtime-techniques/shared/heal-history.js.map +1 -0
- package/dist/runtime-techniques/shared/locator-actions.d.ts +6 -0
- package/dist/runtime-techniques/shared/locator-actions.d.ts.map +1 -0
- package/dist/runtime-techniques/shared/locator-actions.js +66 -0
- package/dist/runtime-techniques/shared/locator-actions.js.map +1 -0
- package/dist/runtime-techniques/shared/page-waits.d.ts +6 -0
- package/dist/runtime-techniques/shared/page-waits.d.ts.map +1 -0
- package/dist/runtime-techniques/shared/page-waits.js +57 -0
- package/dist/runtime-techniques/shared/page-waits.js.map +1 -0
- package/dist/runtime-techniques/shared.d.ts +8 -0
- package/dist/runtime-techniques/shared.d.ts.map +1 -0
- package/dist/runtime-techniques/shared.js +24 -0
- package/dist/runtime-techniques/shared.js.map +1 -0
- package/dist/runtime-techniques/t0-retry.d.ts +4 -0
- package/dist/runtime-techniques/t0-retry.d.ts.map +1 -0
- package/dist/runtime-techniques/t0-retry.js +334 -0
- package/dist/runtime-techniques/t0-retry.js.map +1 -0
- package/dist/runtime-techniques/t1-scope.d.ts +4 -0
- package/dist/runtime-techniques/t1-scope.d.ts.map +1 -0
- package/dist/runtime-techniques/t1-scope.js +70 -0
- package/dist/runtime-techniques/t1-scope.js.map +1 -0
- package/dist/runtime-techniques/t2-normalize.d.ts +3 -0
- package/dist/runtime-techniques/t2-normalize.d.ts.map +1 -0
- package/dist/runtime-techniques/t2-normalize.js +12 -0
- package/dist/runtime-techniques/t2-normalize.js.map +1 -0
- package/dist/runtime-techniques/t3-fingerprint.d.ts +4 -0
- package/dist/runtime-techniques/t3-fingerprint.d.ts.map +1 -0
- package/dist/runtime-techniques/t3-fingerprint.js +13 -0
- package/dist/runtime-techniques/t3-fingerprint.js.map +1 -0
- package/dist/runtime-techniques/t4-trace.d.ts +4 -0
- package/dist/runtime-techniques/t4-trace.d.ts.map +1 -0
- package/dist/runtime-techniques/t4-trace.js +125 -0
- package/dist/runtime-techniques/t4-trace.js.map +1 -0
- package/dist/runtime-techniques/t5-history.d.ts +3 -0
- package/dist/runtime-techniques/t5-history.d.ts.map +1 -0
- package/dist/runtime-techniques/t5-history.js +50 -0
- package/dist/runtime-techniques/t5-history.js.map +1 -0
- package/dist/runtime-techniques/types.d.ts +36 -0
- package/dist/runtime-techniques/types.d.ts.map +1 -0
- package/dist/runtime-techniques/types.js +3 -0
- package/dist/runtime-techniques/types.js.map +1 -0
- package/dist/runtime-techniques.d.ts +2 -0
- package/dist/runtime-techniques.d.ts.map +1 -0
- package/dist/runtime-techniques.js +18 -0
- package/dist/runtime-techniques.js.map +1 -0
- package/dist/terminal.d.ts.map +1 -1
- package/dist/terminal.js +52 -3
- package/dist/terminal.js.map +1 -1
- package/package.json +3 -3
package/dist/report-html.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report-html.js","sourceRoot":"","sources":["../src/report-html.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"report-html.js","sourceRoot":"","sources":["../src/report-html.ts"],"names":[],"mappings":";;;AACA,mDAAyD;AAAhD,2GAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ClassificationResult } from '@healflow/shared';
|
|
2
|
+
import type { HealFlowConfig } from '@healflow/shared/config';
|
|
3
|
+
import type { Page, Locator } from '@playwright/test';
|
|
4
|
+
import { type HealResult, type LocatorAction } from './runtime-techniques.js';
|
|
5
|
+
export type PrepareHealOutcome = {
|
|
6
|
+
type: 'retry';
|
|
7
|
+
heal?: HealResult;
|
|
8
|
+
} | {
|
|
9
|
+
type: 'done';
|
|
10
|
+
result: unknown;
|
|
11
|
+
heal?: HealResult;
|
|
12
|
+
} | {
|
|
13
|
+
type: 'abort';
|
|
14
|
+
};
|
|
15
|
+
export declare function enrichRuntimeClassification(classification: ClassificationResult, errorMessage: string): ClassificationResult;
|
|
16
|
+
export declare function executeRuntimeTechniqueLadder(rawPage: Page, locator: Locator, action: LocatorAction, args: unknown[], error: Error, classification: ClassificationResult, config: HealFlowConfig, testFile?: string): Promise<PrepareHealOutcome>;
|
|
17
|
+
//# sourceMappingURL=runtime-ladder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-ladder.d.ts","sourceRoot":"","sources":["../src/runtime-ladder.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,oBAAoB,EAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,aAAa,EAEnB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAWtB,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,oBAAoB,EACpC,YAAY,EAAE,MAAM,GACnB,oBAAoB,CAEtB;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,OAAO,EAAE,EACf,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,oBAAoB,EACpC,MAAM,EAAE,cAAc,EACtB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC,CAoD7B"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.enrichRuntimeClassification = enrichRuntimeClassification;
|
|
4
|
+
exports.executeRuntimeTechniqueLadder = executeRuntimeTechniqueLadder;
|
|
5
|
+
const shared_1 = require("@healflow/shared");
|
|
6
|
+
const runtime_techniques_js_1 = require("./runtime-techniques.js");
|
|
7
|
+
function runtimeStack(classification) {
|
|
8
|
+
const fromMatrix = (classification.techniqueStack ?? []).filter((t) => t !== shared_1.HealingTechnique.T6_AST && t !== shared_1.HealingTechnique.T7_AI);
|
|
9
|
+
const base = fromMatrix.length > 0 ? fromMatrix : runtime_techniques_js_1.RUNTIME_TECHNIQUE_ORDER;
|
|
10
|
+
const withoutT0 = base.filter((t) => t !== shared_1.HealingTechnique.T0_RETRY);
|
|
11
|
+
return [shared_1.HealingTechnique.T0_RETRY, ...withoutT0];
|
|
12
|
+
}
|
|
13
|
+
function enrichRuntimeClassification(classification, errorMessage) {
|
|
14
|
+
return (0, shared_1.enrichClassificationWithMatrix)(classification, errorMessage);
|
|
15
|
+
}
|
|
16
|
+
async function executeRuntimeTechniqueLadder(rawPage, locator, action, args, error, classification, config, testFile) {
|
|
17
|
+
const enriched = enrichRuntimeClassification(classification, (0, runtime_techniques_js_1.errorHaystack)(error));
|
|
18
|
+
if (enriched.matrixEntryId) {
|
|
19
|
+
const entry = (0, shared_1.matchMatrixEntry)((0, runtime_techniques_js_1.errorHaystack)(error), enriched.category, enriched.matrixEntryId);
|
|
20
|
+
if (entry && !(0, shared_1.isRuntimeHealAllowed)(entry.entry)) {
|
|
21
|
+
return { type: 'abort' };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const ctx = {
|
|
25
|
+
rawPage,
|
|
26
|
+
locator,
|
|
27
|
+
action,
|
|
28
|
+
args,
|
|
29
|
+
error,
|
|
30
|
+
classification: enriched,
|
|
31
|
+
config,
|
|
32
|
+
testFile,
|
|
33
|
+
};
|
|
34
|
+
const stack = runtimeStack(enriched);
|
|
35
|
+
for (const technique of stack) {
|
|
36
|
+
const executor = runtime_techniques_js_1.RUNTIME_TECHNIQUE_EXECUTORS[technique];
|
|
37
|
+
const outcome = await executor(ctx);
|
|
38
|
+
const attachMeta = (heal) => heal
|
|
39
|
+
? {
|
|
40
|
+
...heal,
|
|
41
|
+
matrixEntryId: enriched.matrixEntryId,
|
|
42
|
+
technique: heal.technique ?? technique,
|
|
43
|
+
}
|
|
44
|
+
: undefined;
|
|
45
|
+
if (outcome.type === 'done') {
|
|
46
|
+
return {
|
|
47
|
+
type: 'done',
|
|
48
|
+
result: outcome.result,
|
|
49
|
+
heal: attachMeta(outcome.heal),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (outcome.type === 'retry') {
|
|
53
|
+
return { type: 'retry', heal: attachMeta(outcome.heal) };
|
|
54
|
+
}
|
|
55
|
+
if (outcome.type === 'abort') {
|
|
56
|
+
return { type: 'abort' };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return { type: 'abort' };
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=runtime-ladder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-ladder.js","sourceRoot":"","sources":["../src/runtime-ladder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Page, Locator } from '@playwright/test';
|
|
2
|
+
import { HealingTechnique } from '@healflow/shared';
|
|
3
|
+
import type { HealFlowConfig } from '@healflow/shared/config';
|
|
4
|
+
import type { HealResult, LocatorAction } from './types.js';
|
|
5
|
+
import type { TraceHint } from './shared.js';
|
|
6
|
+
export declare function healSelector(rawPage: Page, action: LocatorAction, args: unknown[], error: Error, technique: HealingTechnique): Promise<HealResult | null>;
|
|
7
|
+
export declare function healIframe(rawPage: Page, locator: Locator, action: LocatorAction, args: unknown[], error: Error, traceHints?: TraceHint): Promise<HealResult | null>;
|
|
8
|
+
export declare function healShadowDom(rawPage: Page, action: LocatorAction, args: unknown[], error: Error, traceHints?: TraceHint): Promise<HealResult | null>;
|
|
9
|
+
export declare function healAuth(rawPage: Page, config: HealFlowConfig): Promise<HealResult | null>;
|
|
10
|
+
//# sourceMappingURL=heal-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heal-helpers.d.ts","sourceRoot":"","sources":["../../src/runtime-techniques/heal-helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAmB,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAc7C,wBAAsB,YAAY,CAChC,OAAO,EAAE,IAAI,EACb,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,OAAO,EAAE,EACf,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA6G5B;AAmBD,wBAAsB,UAAU,CAC9B,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,OAAO,EAAE,EACf,KAAK,EAAE,KAAK,EACZ,UAAU,CAAC,EAAE,SAAS,GACrB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA2E5B;AACD,wBAAsB,aAAa,CACjC,OAAO,EAAE,IAAI,EACb,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,OAAO,EAAE,EACf,KAAK,EAAE,KAAK,EACZ,UAAU,CAAC,EAAE,SAAS,GACrB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAgC5B;AACD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA0DhG"}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.healSelector = healSelector;
|
|
4
|
+
exports.healIframe = healIframe;
|
|
5
|
+
exports.healShadowDom = healShadowDom;
|
|
6
|
+
exports.healAuth = healAuth;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const shared_1 = require("@healflow/shared");
|
|
9
|
+
const shared_js_1 = require("./shared.js");
|
|
10
|
+
async function healSelector(rawPage, action, args, error, technique) {
|
|
11
|
+
const haystack = (0, shared_js_1.errorHaystack)(error);
|
|
12
|
+
const staleIdMatch = haystack.match(/getByTestId\(['"]([^'"]+)['"]\)/i);
|
|
13
|
+
const staleId = staleIdMatch?.[1] ?? null;
|
|
14
|
+
if (/strict mode violation|resolved to \d+ elements/i.test(haystack)) {
|
|
15
|
+
const alternate = await (0, shared_js_1.healAlternateLocators)(rawPage, action, args, error, technique);
|
|
16
|
+
if (alternate)
|
|
17
|
+
return alternate;
|
|
18
|
+
}
|
|
19
|
+
const candidates = (0, shared_js_1.buildFingerprintCandidates)(rawPage, staleId, error, technique);
|
|
20
|
+
for (const candidate of candidates) {
|
|
21
|
+
const confident = await (0, shared_js_1.assertUniqueVisibleCandidate)(candidate.locator);
|
|
22
|
+
if (!confident)
|
|
23
|
+
continue;
|
|
24
|
+
try {
|
|
25
|
+
const resolvedLocator = candidate.locator.first();
|
|
26
|
+
await (0, shared_js_1.runLocatorAction)(resolvedLocator, action, (0, shared_js_1.healActionArgs)(action, args));
|
|
27
|
+
const resolvedTestId = await resolvedLocator.getAttribute('data-testid').catch(() => null);
|
|
28
|
+
const ariaLabel = await resolvedLocator.getAttribute('aria-label').catch(() => null);
|
|
29
|
+
return {
|
|
30
|
+
oldValue: staleId ?? undefined,
|
|
31
|
+
newValue: resolvedTestId ?? ariaLabel ?? candidate.label,
|
|
32
|
+
category: shared_1.FailureCategory.SELECTOR,
|
|
33
|
+
rootCause: technique === shared_1.HealingTechnique.T3_FINGERPRINT
|
|
34
|
+
? 'Fingerprint Match'
|
|
35
|
+
: 'Selector Normalize',
|
|
36
|
+
confidence: technique === shared_1.HealingTechnique.T3_FINGERPRINT ? 0.95 : 0.9,
|
|
37
|
+
technique,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// try next candidate
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const alternate = await (0, shared_js_1.healAlternateLocators)(rawPage, action, args, error, technique);
|
|
45
|
+
if (alternate)
|
|
46
|
+
return alternate;
|
|
47
|
+
if (/iframe-action|widget-iframe|iframe-action-btn/i.test(haystack) ||
|
|
48
|
+
/iframe-action/i.test(staleId ?? '')) {
|
|
49
|
+
const iframeHeal = await healIframe(rawPage, rawPage.locator('body'), action, args, error);
|
|
50
|
+
if (iframeHeal) {
|
|
51
|
+
return { ...iframeHeal, technique };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (/not visible|hidden|opacity|not enabled|disabled/i.test(haystack) && staleId) {
|
|
55
|
+
for (const normalized of (0, shared_js_1.normalizeStaleTestIds)(staleId)) {
|
|
56
|
+
const target = rawPage.getByTestId(normalized);
|
|
57
|
+
if ((await target.count().catch(() => 0)) !== 1)
|
|
58
|
+
continue;
|
|
59
|
+
if (action === 'fill' || action === 'type' || action === 'press') {
|
|
60
|
+
try {
|
|
61
|
+
await (0, shared_js_1.runLocatorAction)(target.first(), action, (0, shared_js_1.healActionArgs)(action, args));
|
|
62
|
+
return {
|
|
63
|
+
category: shared_1.FailureCategory.SELECTOR,
|
|
64
|
+
rootCause: 'Stale Input Fallback',
|
|
65
|
+
confidence: 0.84,
|
|
66
|
+
technique,
|
|
67
|
+
oldValue: staleId,
|
|
68
|
+
newValue: normalized,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// try force click path
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const forced = await (0, shared_js_1.healAttachedForceAction)(target, action, args);
|
|
76
|
+
if (forced) {
|
|
77
|
+
return {
|
|
78
|
+
category: shared_1.FailureCategory.SELECTOR,
|
|
79
|
+
rootCause: 'Force Click Hidden',
|
|
80
|
+
confidence: 0.75,
|
|
81
|
+
technique,
|
|
82
|
+
oldValue: staleId ?? undefined,
|
|
83
|
+
newValue: normalized,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (staleId && (action === 'click' || action === 'tap')) {
|
|
89
|
+
for (const normalized of (0, shared_js_1.normalizeStaleTestIds)(staleId)) {
|
|
90
|
+
const target = rawPage.getByTestId(normalized);
|
|
91
|
+
if ((await target.count().catch(() => 0)) !== 1)
|
|
92
|
+
continue;
|
|
93
|
+
const forced = await (0, shared_js_1.healAttachedForceAction)(target, action, args);
|
|
94
|
+
if (forced) {
|
|
95
|
+
return {
|
|
96
|
+
category: shared_1.FailureCategory.SELECTOR,
|
|
97
|
+
rootCause: 'Force Click Stale Target',
|
|
98
|
+
confidence: 0.76,
|
|
99
|
+
technique,
|
|
100
|
+
oldValue: staleId,
|
|
101
|
+
newValue: normalized,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (/not visible|hidden|opacity/i.test(haystack)) {
|
|
107
|
+
const forced = await (0, shared_js_1.healAttachedForceAction)(staleId ? rawPage.getByTestId(staleId) : rawPage.locator('#matrix-mount button'), action, args);
|
|
108
|
+
if (forced) {
|
|
109
|
+
return {
|
|
110
|
+
category: shared_1.FailureCategory.SELECTOR,
|
|
111
|
+
rootCause: 'Force Click Hidden',
|
|
112
|
+
confidence: 0.75,
|
|
113
|
+
technique,
|
|
114
|
+
oldValue: staleId ?? undefined,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
function isValidFrameSelector(selector) {
|
|
121
|
+
return selector.length > 1 && !/^[\]"')}\s]+$/.test(selector) && !selector.startsWith('-');
|
|
122
|
+
}
|
|
123
|
+
function extractIframeSelector(message) {
|
|
124
|
+
const frameMatch = message.match(/frame(?:Locator)?\(['"]([^'"]+)['"]\)/i);
|
|
125
|
+
if (frameMatch?.[1] && isValidFrameSelector(frameMatch[1]))
|
|
126
|
+
return frameMatch[1];
|
|
127
|
+
const dataTestIdMatch = message.match(/\[data-testid="([^"]*iframe[^"]*)"\]/i);
|
|
128
|
+
if (dataTestIdMatch?.[1]) {
|
|
129
|
+
return `[data-testid="${dataTestIdMatch[1]}"]`;
|
|
130
|
+
}
|
|
131
|
+
const nameMatch = message.match(/iframe[^'"]*['"]([^'"]+)['"]/i);
|
|
132
|
+
if (nameMatch?.[1] && isValidFrameSelector(nameMatch[1]))
|
|
133
|
+
return nameMatch[1];
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
function extractShadowSelector(message) {
|
|
137
|
+
const selectorMatch = message.match(/locator\(['"]([^'"]+)['"]\)/i);
|
|
138
|
+
return selectorMatch?.[1] ?? null;
|
|
139
|
+
}
|
|
140
|
+
async function healIframe(rawPage, locator, action, args, error, traceHints) {
|
|
141
|
+
const haystack = (0, shared_js_1.errorHaystack)(error);
|
|
142
|
+
const extracted = traceHints?.frameSelector ?? extractIframeSelector(haystack);
|
|
143
|
+
const targetTestIdRaw = traceHints?.targetTestId ??
|
|
144
|
+
haystack.match(/getByTestId\(['"]([^'"]+)['"]\)/i)?.[1] ??
|
|
145
|
+
'iframe-action-btn';
|
|
146
|
+
const targetTestIds = [
|
|
147
|
+
...new Set([targetTestIdRaw, ...(0, shared_js_1.normalizeStaleTestIds)(targetTestIdRaw)].filter((id) => /^[\w-]+$/.test(id))),
|
|
148
|
+
];
|
|
149
|
+
const frameSelectors = [
|
|
150
|
+
...new Set([extracted, '[data-testid="widget-iframe"]', '#widget-frame', 'iframe'].filter((s) => typeof s === 'string' && s.length > 0)),
|
|
151
|
+
];
|
|
152
|
+
for (const selector of frameSelectors) {
|
|
153
|
+
if (!isValidFrameSelector(selector))
|
|
154
|
+
continue;
|
|
155
|
+
const frameLocator = rawPage.frameLocator(selector);
|
|
156
|
+
const innerCandidates = [
|
|
157
|
+
...targetTestIds.flatMap((targetTestId) => [frameLocator.getByTestId(targetTestId)]),
|
|
158
|
+
frameLocator.locator('[data-testid]'),
|
|
159
|
+
frameLocator.getByRole('button'),
|
|
160
|
+
];
|
|
161
|
+
for (const candidate of innerCandidates) {
|
|
162
|
+
const confident = await (0, shared_js_1.assertUniqueVisibleCandidate)(candidate);
|
|
163
|
+
if (!confident)
|
|
164
|
+
continue;
|
|
165
|
+
try {
|
|
166
|
+
await (0, shared_js_1.runLocatorAction)(candidate.first(), action, (0, shared_js_1.healActionArgs)(action, args));
|
|
167
|
+
return {
|
|
168
|
+
oldValue: error.message.slice(0, 80),
|
|
169
|
+
newValue: `frameLocator('${selector}') >> ${targetTestIdRaw}`,
|
|
170
|
+
category: shared_1.FailureCategory.IFRAME,
|
|
171
|
+
rootCause: 'Iframe Context',
|
|
172
|
+
confidence: 0.85,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// try next candidate
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
for (const frame of rawPage.frames()) {
|
|
181
|
+
if (frame === rawPage.mainFrame())
|
|
182
|
+
continue;
|
|
183
|
+
const frameBody = frame.locator('[data-testid], button, a');
|
|
184
|
+
const count = await frameBody.count().catch(() => 0);
|
|
185
|
+
if (count !== 1)
|
|
186
|
+
continue;
|
|
187
|
+
try {
|
|
188
|
+
await (0, shared_js_1.runLocatorAction)(frameBody.first(), action, (0, shared_js_1.healActionArgs)(action, args));
|
|
189
|
+
return {
|
|
190
|
+
category: shared_1.FailureCategory.IFRAME,
|
|
191
|
+
rootCause: 'Iframe Context',
|
|
192
|
+
confidence: 0.82,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
// try next frame
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
try {
|
|
200
|
+
for (const frame of rawPage.frames()) {
|
|
201
|
+
await frame.waitForLoadState('domcontentloaded').catch(() => { });
|
|
202
|
+
}
|
|
203
|
+
await (0, shared_js_1.waitForLocator)(locator);
|
|
204
|
+
return {
|
|
205
|
+
category: shared_1.FailureCategory.IFRAME,
|
|
206
|
+
rootCause: 'Iframe Context',
|
|
207
|
+
confidence: 0.8,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
async function healShadowDom(rawPage, action, args, error, traceHints) {
|
|
215
|
+
if (/closed shadow/i.test((0, shared_js_1.errorHaystack)(error)))
|
|
216
|
+
return null;
|
|
217
|
+
const baseSelector = extractShadowSelector((0, shared_js_1.errorHaystack)(error)) ??
|
|
218
|
+
(traceHints?.targetTestId ? `[data-testid="${traceHints.targetTestId}"]` : null);
|
|
219
|
+
const pierceCandidates = [];
|
|
220
|
+
if (baseSelector) {
|
|
221
|
+
pierceCandidates.push(rawPage.locator(`${baseSelector.replace(/\s*>>>\s*.*/, '')} >>> *`));
|
|
222
|
+
}
|
|
223
|
+
pierceCandidates.push(rawPage.locator('renamed-custom-element >>> button'), rawPage.locator('open-shadow-host >>> button'), rawPage.locator('#matrix-mount >>> button'), rawPage.locator('[data-testid="shadow-inner-btn"]'));
|
|
224
|
+
for (const pierced of pierceCandidates) {
|
|
225
|
+
const confident = await (0, shared_js_1.assertUniqueVisibleCandidate)(pierced);
|
|
226
|
+
if (!confident)
|
|
227
|
+
continue;
|
|
228
|
+
try {
|
|
229
|
+
await (0, shared_js_1.runLocatorAction)(pierced.first(), action, (0, shared_js_1.healActionArgs)(action, args));
|
|
230
|
+
return {
|
|
231
|
+
oldValue: baseSelector ?? 'shadow host',
|
|
232
|
+
newValue: 'shadow pierce candidate',
|
|
233
|
+
category: shared_1.FailureCategory.SHADOW_DOM,
|
|
234
|
+
rootCause: 'Shadow DOM',
|
|
235
|
+
confidence: 0.8,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
// try next candidate
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
async function healAuth(rawPage, config) {
|
|
245
|
+
const authConfig = config.auth;
|
|
246
|
+
const storageStatePath = authConfig?.storageStatePath;
|
|
247
|
+
if (storageStatePath && (0, node_fs_1.existsSync)(storageStatePath)) {
|
|
248
|
+
try {
|
|
249
|
+
const state = JSON.parse((0, node_fs_1.readFileSync)(storageStatePath, 'utf-8'));
|
|
250
|
+
if (state.cookies?.length) {
|
|
251
|
+
await rawPage.context().addCookies(state.cookies);
|
|
252
|
+
await rawPage.reload({ waitUntil: 'domcontentloaded' });
|
|
253
|
+
return {
|
|
254
|
+
category: shared_1.FailureCategory.AUTH,
|
|
255
|
+
rootCause: 'Auth Session Restore',
|
|
256
|
+
newValue: storageStatePath,
|
|
257
|
+
confidence: 0.85,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
// fall through
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
await rawPage
|
|
266
|
+
.context()
|
|
267
|
+
.addCookies([
|
|
268
|
+
{ name: 'healflow-auth', value: 'valid', domain: '127.0.0.1', path: '/' },
|
|
269
|
+
{ name: 'healflow-session', value: 'active', domain: '127.0.0.1', path: '/' },
|
|
270
|
+
]);
|
|
271
|
+
await rawPage.evaluate(() => localStorage.setItem('healflow-auth', 'valid')).catch(() => { });
|
|
272
|
+
const currentUrl = rawPage.url();
|
|
273
|
+
if (/\/session\.html/.test(currentUrl)) {
|
|
274
|
+
await rawPage
|
|
275
|
+
.reload({ waitUntil: 'domcontentloaded', timeout: shared_js_1.HEAL_RETRY_TIMEOUT_MS })
|
|
276
|
+
.catch(() => { });
|
|
277
|
+
return {
|
|
278
|
+
category: shared_1.FailureCategory.SESSION,
|
|
279
|
+
rootCause: 'Auth Session Restore',
|
|
280
|
+
newValue: 'healflow-session=active',
|
|
281
|
+
confidence: 0.78,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
const loginUrl = authConfig?.loginUrl;
|
|
285
|
+
if (loginUrl) {
|
|
286
|
+
await rawPage.goto(loginUrl, { waitUntil: 'domcontentloaded', timeout: shared_js_1.HEAL_RETRY_TIMEOUT_MS });
|
|
287
|
+
return {
|
|
288
|
+
category: shared_1.FailureCategory.AUTH,
|
|
289
|
+
rootCause: 'Auth Redirect',
|
|
290
|
+
newValue: loginUrl,
|
|
291
|
+
confidence: 0.8,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
await rawPage
|
|
295
|
+
.goto('/protected.html', { waitUntil: 'domcontentloaded', timeout: shared_js_1.HEAL_RETRY_TIMEOUT_MS })
|
|
296
|
+
.catch(() => { });
|
|
297
|
+
return {
|
|
298
|
+
category: shared_1.FailureCategory.AUTH,
|
|
299
|
+
rootCause: 'Auth Session Restore',
|
|
300
|
+
newValue: 'healflow-auth=valid',
|
|
301
|
+
confidence: 0.78,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=heal-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heal-helpers.js","sourceRoot":"","sources":["../../src/runtime-techniques/heal-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export * from './shared.js';
|
|
3
|
+
export { executeT0Retry } from './t0-retry.js';
|
|
4
|
+
export { executeT1Scope } from './t1-scope.js';
|
|
5
|
+
export { executeT2Normalize } from './t2-normalize.js';
|
|
6
|
+
export { executeT3Fingerprint } from './t3-fingerprint.js';
|
|
7
|
+
export { executeT4Trace } from './t4-trace.js';
|
|
8
|
+
export { executeT5History } from './t5-history.js';
|
|
9
|
+
export * from './heal-helpers.js';
|
|
10
|
+
export * from './registry.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime-techniques/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.executeT5History = exports.executeT4Trace = exports.executeT3Fingerprint = exports.executeT2Normalize = exports.executeT1Scope = exports.executeT0Retry = void 0;
|
|
18
|
+
__exportStar(require("./types.js"), exports);
|
|
19
|
+
__exportStar(require("./shared.js"), exports);
|
|
20
|
+
var t0_retry_js_1 = require("./t0-retry.js");
|
|
21
|
+
Object.defineProperty(exports, "executeT0Retry", { enumerable: true, get: function () { return t0_retry_js_1.executeT0Retry; } });
|
|
22
|
+
var t1_scope_js_1 = require("./t1-scope.js");
|
|
23
|
+
Object.defineProperty(exports, "executeT1Scope", { enumerable: true, get: function () { return t1_scope_js_1.executeT1Scope; } });
|
|
24
|
+
var t2_normalize_js_1 = require("./t2-normalize.js");
|
|
25
|
+
Object.defineProperty(exports, "executeT2Normalize", { enumerable: true, get: function () { return t2_normalize_js_1.executeT2Normalize; } });
|
|
26
|
+
var t3_fingerprint_js_1 = require("./t3-fingerprint.js");
|
|
27
|
+
Object.defineProperty(exports, "executeT3Fingerprint", { enumerable: true, get: function () { return t3_fingerprint_js_1.executeT3Fingerprint; } });
|
|
28
|
+
var t4_trace_js_1 = require("./t4-trace.js");
|
|
29
|
+
Object.defineProperty(exports, "executeT4Trace", { enumerable: true, get: function () { return t4_trace_js_1.executeT4Trace; } });
|
|
30
|
+
var t5_history_js_1 = require("./t5-history.js");
|
|
31
|
+
Object.defineProperty(exports, "executeT5History", { enumerable: true, get: function () { return t5_history_js_1.executeT5History; } });
|
|
32
|
+
__exportStar(require("./heal-helpers.js"), exports);
|
|
33
|
+
__exportStar(require("./registry.js"), exports);
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime-techniques/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,8CAA4B;AAC5B,6CAA+C;AAAtC,6GAAA,cAAc,OAAA;AACvB,6CAA+C;AAAtC,6GAAA,cAAc,OAAA;AACvB,qDAAuD;AAA9C,qHAAA,kBAAkB,OAAA;AAC3B,yDAA2D;AAAlD,yHAAA,oBAAoB,OAAA;AAC7B,6CAA+C;AAAtC,6GAAA,cAAc,OAAA;AACvB,iDAAmD;AAA1C,iHAAA,gBAAgB,OAAA;AACzB,oDAAkC;AAClC,gDAA8B"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { HealingTechnique } from '@healflow/shared';
|
|
2
|
+
import type { RuntimeTechniqueContext, RuntimeTechniqueOutcome } from './types.js';
|
|
3
|
+
export declare const RUNTIME_TECHNIQUE_ORDER: HealingTechnique[];
|
|
4
|
+
export declare const RUNTIME_TECHNIQUE_EXECUTORS: Record<HealingTechnique, (ctx: RuntimeTechniqueContext) => Promise<RuntimeTechniqueOutcome>>;
|
|
5
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/runtime-techniques/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAQnF,eAAO,MAAM,uBAAuB,EAAE,gBAAgB,EAOrD,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAC9C,gBAAgB,EAChB,CAAC,GAAG,EAAE,uBAAuB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAUnE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RUNTIME_TECHNIQUE_EXECUTORS = exports.RUNTIME_TECHNIQUE_ORDER = void 0;
|
|
4
|
+
const shared_1 = require("@healflow/shared");
|
|
5
|
+
const t0_retry_js_1 = require("./t0-retry.js");
|
|
6
|
+
const t1_scope_js_1 = require("./t1-scope.js");
|
|
7
|
+
const t2_normalize_js_1 = require("./t2-normalize.js");
|
|
8
|
+
const t3_fingerprint_js_1 = require("./t3-fingerprint.js");
|
|
9
|
+
const t4_trace_js_1 = require("./t4-trace.js");
|
|
10
|
+
const t5_history_js_1 = require("./t5-history.js");
|
|
11
|
+
exports.RUNTIME_TECHNIQUE_ORDER = [
|
|
12
|
+
shared_1.HealingTechnique.T0_RETRY,
|
|
13
|
+
shared_1.HealingTechnique.T1_SCOPE,
|
|
14
|
+
shared_1.HealingTechnique.T2_NORMALIZE,
|
|
15
|
+
shared_1.HealingTechnique.T3_FINGERPRINT,
|
|
16
|
+
shared_1.HealingTechnique.T4_TRACE,
|
|
17
|
+
shared_1.HealingTechnique.T5_HISTORY,
|
|
18
|
+
];
|
|
19
|
+
exports.RUNTIME_TECHNIQUE_EXECUTORS = {
|
|
20
|
+
[shared_1.HealingTechnique.T0_RETRY]: t0_retry_js_1.executeT0Retry,
|
|
21
|
+
[shared_1.HealingTechnique.T1_SCOPE]: t1_scope_js_1.executeT1Scope,
|
|
22
|
+
[shared_1.HealingTechnique.T2_NORMALIZE]: t2_normalize_js_1.executeT2Normalize,
|
|
23
|
+
[shared_1.HealingTechnique.T3_FINGERPRINT]: t3_fingerprint_js_1.executeT3Fingerprint,
|
|
24
|
+
[shared_1.HealingTechnique.T4_TRACE]: t4_trace_js_1.executeT4Trace,
|
|
25
|
+
[shared_1.HealingTechnique.T5_HISTORY]: t5_history_js_1.executeT5History,
|
|
26
|
+
[shared_1.HealingTechnique.T6_AST]: async () => ({ type: 'continue' }),
|
|
27
|
+
[shared_1.HealingTechnique.T7_AI]: async () => ({ type: 'continue' }),
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/runtime-techniques/registry.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAEpD,+CAA+C;AAC/C,+CAA+C;AAC/C,uDAAuD;AACvD,2DAA2D;AAC3D,+CAA+C;AAC/C,mDAAmD;AAEtC,QAAA,uBAAuB,GAAuB;IACzD,yBAAgB,CAAC,QAAQ;IACzB,yBAAgB,CAAC,QAAQ;IACzB,yBAAgB,CAAC,YAAY;IAC7B,yBAAgB,CAAC,cAAc;IAC/B,yBAAgB,CAAC,QAAQ;IACzB,yBAAgB,CAAC,UAAU;CAC5B,CAAC;AAEW,QAAA,2BAA2B,GAGpC;IACF,CAAC,yBAAgB,CAAC,QAAQ,CAAC,EAAE,4BAAc;IAC3C,CAAC,yBAAgB,CAAC,QAAQ,CAAC,EAAE,4BAAc;IAC3C,CAAC,yBAAgB,CAAC,YAAY,CAAC,EAAE,oCAAkB;IACnD,CAAC,yBAAgB,CAAC,cAAc,CAAC,EAAE,wCAAoB;IACvD,CAAC,yBAAgB,CAAC,QAAQ,CAAC,EAAE,4BAAc;IAC3C,CAAC,yBAAgB,CAAC,UAAU,CAAC,EAAE,gCAAgB;IAC/C,CAAC,yBAAgB,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC7D,CAAC,yBAAgB,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;CAC7D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/runtime-techniques/shared/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B,OAAQ,CAAC;AACnD,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAC5C,eAAO,MAAM,mBAAmB,OAAQ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.T0_QUICK_TIMEOUT_MS = exports.HEAL_RETRY_TIMEOUT_MS = exports.HEAL_FIRST_ATTEMPT_TIMEOUT_MS = void 0;
|
|
4
|
+
exports.HEAL_FIRST_ATTEMPT_TIMEOUT_MS = 3_000;
|
|
5
|
+
exports.HEAL_RETRY_TIMEOUT_MS = 15_000;
|
|
6
|
+
exports.T0_QUICK_TIMEOUT_MS = 4_000;
|
|
7
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/runtime-techniques/shared/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,6BAA6B,GAAG,KAAK,CAAC;AACtC,QAAA,qBAAqB,GAAG,MAAM,CAAC;AAC/B,QAAA,mBAAmB,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function errorHaystack(error: Error): string;
|
|
2
|
+
export interface TraceHint {
|
|
3
|
+
frameSelector?: string;
|
|
4
|
+
targetTestId?: string;
|
|
5
|
+
targetRole?: string;
|
|
6
|
+
targetName?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function parsePlaywrightTraceHints(error: Error): TraceHint;
|
|
9
|
+
//# sourceMappingURL=error-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-utils.d.ts","sourceRoot":"","sources":["../../../src/runtime-techniques/shared/error-utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAElD;AAED,MAAM,WAAW,SAAS;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAqBjE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.errorHaystack = errorHaystack;
|
|
4
|
+
exports.parsePlaywrightTraceHints = parsePlaywrightTraceHints;
|
|
5
|
+
function errorHaystack(error) {
|
|
6
|
+
return `${error.message}\n${error.stack ?? ''}`;
|
|
7
|
+
}
|
|
8
|
+
function parsePlaywrightTraceHints(error) {
|
|
9
|
+
const haystack = errorHaystack(error);
|
|
10
|
+
const hints = {};
|
|
11
|
+
const frameMatch = haystack.match(/frame(?:Locator)?\(['"]([^'"]+)['"]\)/i);
|
|
12
|
+
if (frameMatch?.[1])
|
|
13
|
+
hints.frameSelector = frameMatch[1];
|
|
14
|
+
const testIdMatch = haystack.match(/data-testid="([^"]+)"/i);
|
|
15
|
+
if (testIdMatch?.[1] && /^[\w-]+$/.test(testIdMatch[1]))
|
|
16
|
+
hints.targetTestId = testIdMatch[1];
|
|
17
|
+
const roleMatch = haystack.match(/getByRole\(['"]([^'"]+)['"],\s*\{\s*name:\s*['"]([^'"]+)['"]/i);
|
|
18
|
+
if (roleMatch?.[1] && roleMatch[2]) {
|
|
19
|
+
hints.targetRole = roleMatch[1];
|
|
20
|
+
hints.targetName = roleMatch[2];
|
|
21
|
+
}
|
|
22
|
+
const resolvedMatch = haystack.match(/locator resolved to <[^>]+data-testid="([^"]+)"/i);
|
|
23
|
+
if (resolvedMatch?.[1] && /^[\w-]+$/.test(resolvedMatch[1]))
|
|
24
|
+
hints.targetTestId = resolvedMatch[1];
|
|
25
|
+
return hints;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=error-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-utils.js","sourceRoot":"","sources":["../../../src/runtime-techniques/shared/error-utils.ts"],"names":[],"mappings":";;AAAA,sCAEC;AASD,8DAqBC;AAhCD,SAAgB,aAAa,CAAC,KAAY;IACxC,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;AAClD,CAAC;AASD,SAAgB,yBAAyB,CAAC,KAAY;IACpD,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,KAAK,GAAc,EAAE,CAAC;IAE5B,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5E,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC;QAAE,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAEzD,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC7D,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAAE,KAAK,CAAC,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAE7F,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;IAClG,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACzF,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACzD,KAAK,CAAC,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAExC,OAAO,KAAK,CAAC;AACf,CAAC"}
|