@sudobility/testomniac_runner_service 0.1.24
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/CLAUDE.md +338 -0
- package/README.md +15 -0
- package/dist/adapter.d.ts +56 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +1 -0
- package/dist/adapter.js.map +1 -0
- package/dist/ai/analyzer.d.ts +16 -0
- package/dist/ai/analyzer.d.ts.map +1 -0
- package/dist/ai/analyzer.js +55 -0
- package/dist/ai/analyzer.js.map +1 -0
- package/dist/ai/input-generator.d.ts +9 -0
- package/dist/ai/input-generator.d.ts.map +1 -0
- package/dist/ai/input-generator.js +20 -0
- package/dist/ai/input-generator.js.map +1 -0
- package/dist/ai/persona-generator.d.ts +7 -0
- package/dist/ai/persona-generator.d.ts.map +1 -0
- package/dist/ai/persona-generator.js +23 -0
- package/dist/ai/persona-generator.js.map +1 -0
- package/dist/ai/use-case-generator.d.ts +7 -0
- package/dist/ai/use-case-generator.d.ts.map +1 -0
- package/dist/ai/use-case-generator.js +23 -0
- package/dist/ai/use-case-generator.js.map +1 -0
- package/dist/api/client.d.ts +69 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +327 -0
- package/dist/api/client.js.map +1 -0
- package/dist/browser/dom-snapshot.d.ts +4 -0
- package/dist/browser/dom-snapshot.d.ts.map +1 -0
- package/dist/browser/dom-snapshot.js +382 -0
- package/dist/browser/dom-snapshot.js.map +1 -0
- package/dist/browser/page-utils.d.ts +9 -0
- package/dist/browser/page-utils.d.ts.map +1 -0
- package/dist/browser/page-utils.js +63 -0
- package/dist/browser/page-utils.js.map +1 -0
- package/dist/config/constants.d.ts +28 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +99 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/detectors/action-description.d.ts +4 -0
- package/dist/detectors/action-description.d.ts.map +1 -0
- package/dist/detectors/action-description.js +25 -0
- package/dist/detectors/action-description.js.map +1 -0
- package/dist/detectors/bug-detector.d.ts +23 -0
- package/dist/detectors/bug-detector.d.ts.map +1 -0
- package/dist/detectors/bug-detector.js +214 -0
- package/dist/detectors/bug-detector.js.map +1 -0
- package/dist/detectors/content-checker.d.ts +10 -0
- package/dist/detectors/content-checker.d.ts.map +1 -0
- package/dist/detectors/content-checker.js +76 -0
- package/dist/detectors/content-checker.js.map +1 -0
- package/dist/detectors/detection-rule.d.ts +28 -0
- package/dist/detectors/detection-rule.d.ts.map +1 -0
- package/dist/detectors/detection-rule.js +1 -0
- package/dist/detectors/detection-rule.js.map +1 -0
- package/dist/detectors/functional-checker.d.ts +22 -0
- package/dist/detectors/functional-checker.d.ts.map +1 -0
- package/dist/detectors/functional-checker.js +88 -0
- package/dist/detectors/functional-checker.js.map +1 -0
- package/dist/detectors/index.d.ts +10 -0
- package/dist/detectors/index.d.ts.map +1 -0
- package/dist/detectors/index.js +9 -0
- package/dist/detectors/index.js.map +1 -0
- package/dist/detectors/link-checker.d.ts +24 -0
- package/dist/detectors/link-checker.d.ts.map +1 -0
- package/dist/detectors/link-checker.js +85 -0
- package/dist/detectors/link-checker.js.map +1 -0
- package/dist/detectors/modal-handler.d.ts +7 -0
- package/dist/detectors/modal-handler.d.ts.map +1 -0
- package/dist/detectors/modal-handler.js +60 -0
- package/dist/detectors/modal-handler.js.map +1 -0
- package/dist/detectors/rules/blank-page-rule.d.ts +3 -0
- package/dist/detectors/rules/blank-page-rule.d.ts.map +1 -0
- package/dist/detectors/rules/blank-page-rule.js +21 -0
- package/dist/detectors/rules/blank-page-rule.js.map +1 -0
- package/dist/detectors/rules/broken-image-rule.d.ts +3 -0
- package/dist/detectors/rules/broken-image-rule.d.ts.map +1 -0
- package/dist/detectors/rules/broken-image-rule.js +34 -0
- package/dist/detectors/rules/broken-image-rule.js.map +1 -0
- package/dist/detectors/rules/broken-link-rule.d.ts +3 -0
- package/dist/detectors/rules/broken-link-rule.d.ts.map +1 -0
- package/dist/detectors/rules/broken-link-rule.js +55 -0
- package/dist/detectors/rules/broken-link-rule.js.map +1 -0
- package/dist/detectors/rules/broken-media-rule.d.ts +3 -0
- package/dist/detectors/rules/broken-media-rule.d.ts.map +1 -0
- package/dist/detectors/rules/broken-media-rule.js +46 -0
- package/dist/detectors/rules/broken-media-rule.js.map +1 -0
- package/dist/detectors/rules/console-error-rule.d.ts +3 -0
- package/dist/detectors/rules/console-error-rule.d.ts.map +1 -0
- package/dist/detectors/rules/console-error-rule.js +9 -0
- package/dist/detectors/rules/console-error-rule.js.map +1 -0
- package/dist/detectors/rules/dead-click-rule.d.ts +3 -0
- package/dist/detectors/rules/dead-click-rule.d.ts.map +1 -0
- package/dist/detectors/rules/dead-click-rule.js +9 -0
- package/dist/detectors/rules/dead-click-rule.js.map +1 -0
- package/dist/detectors/rules/duplicate-heading-rule.d.ts +3 -0
- package/dist/detectors/rules/duplicate-heading-rule.d.ts.map +1 -0
- package/dist/detectors/rules/duplicate-heading-rule.js +35 -0
- package/dist/detectors/rules/duplicate-heading-rule.js.map +1 -0
- package/dist/detectors/rules/duplicate-id-rule.d.ts +3 -0
- package/dist/detectors/rules/duplicate-id-rule.d.ts.map +1 -0
- package/dist/detectors/rules/duplicate-id-rule.js +33 -0
- package/dist/detectors/rules/duplicate-id-rule.js.map +1 -0
- package/dist/detectors/rules/empty-link-rule.d.ts +3 -0
- package/dist/detectors/rules/empty-link-rule.d.ts.map +1 -0
- package/dist/detectors/rules/empty-link-rule.js +35 -0
- package/dist/detectors/rules/empty-link-rule.js.map +1 -0
- package/dist/detectors/rules/error-page-rule.d.ts +3 -0
- package/dist/detectors/rules/error-page-rule.d.ts.map +1 -0
- package/dist/detectors/rules/error-page-rule.js +40 -0
- package/dist/detectors/rules/error-page-rule.js.map +1 -0
- package/dist/detectors/rules/index.d.ts +16 -0
- package/dist/detectors/rules/index.d.ts.map +1 -0
- package/dist/detectors/rules/index.js +32 -0
- package/dist/detectors/rules/index.js.map +1 -0
- package/dist/detectors/rules/network-error-rule.d.ts +3 -0
- package/dist/detectors/rules/network-error-rule.d.ts.map +1 -0
- package/dist/detectors/rules/network-error-rule.js +9 -0
- package/dist/detectors/rules/network-error-rule.js.map +1 -0
- package/dist/detectors/rules/placeholder-text-rule.d.ts +3 -0
- package/dist/detectors/rules/placeholder-text-rule.d.ts.map +1 -0
- package/dist/detectors/rules/placeholder-text-rule.js +34 -0
- package/dist/detectors/rules/placeholder-text-rule.js.map +1 -0
- package/dist/detectors/visual-checker.d.ts +11 -0
- package/dist/detectors/visual-checker.d.ts.map +1 -0
- package/dist/detectors/visual-checker.js +78 -0
- package/dist/detectors/visual-checker.js.map +1 -0
- package/dist/domain/types.d.ts +3 -0
- package/dist/domain/types.d.ts.map +1 -0
- package/dist/domain/types.js +3 -0
- package/dist/domain/types.js.map +1 -0
- package/dist/domain/url-ownership.d.ts +7 -0
- package/dist/domain/url-ownership.d.ts.map +1 -0
- package/dist/domain/url-ownership.js +49 -0
- package/dist/domain/url-ownership.js.map +1 -0
- package/dist/extractors/buttons.d.ts +3 -0
- package/dist/extractors/buttons.d.ts.map +1 -0
- package/dist/extractors/buttons.js +30 -0
- package/dist/extractors/buttons.js.map +1 -0
- package/dist/extractors/clickables.d.ts +3 -0
- package/dist/extractors/clickables.d.ts.map +1 -0
- package/dist/extractors/clickables.js +35 -0
- package/dist/extractors/clickables.js.map +1 -0
- package/dist/extractors/form-extractor.d.ts +4 -0
- package/dist/extractors/form-extractor.d.ts.map +1 -0
- package/dist/extractors/form-extractor.js +47 -0
- package/dist/extractors/form-extractor.js.map +1 -0
- package/dist/extractors/helpers.d.ts +7 -0
- package/dist/extractors/helpers.d.ts.map +1 -0
- package/dist/extractors/helpers.js +43 -0
- package/dist/extractors/helpers.js.map +1 -0
- package/dist/extractors/index.d.ts +5 -0
- package/dist/extractors/index.d.ts.map +1 -0
- package/dist/extractors/index.js +25 -0
- package/dist/extractors/index.js.map +1 -0
- package/dist/extractors/product-actions.d.ts +3 -0
- package/dist/extractors/product-actions.d.ts.map +1 -0
- package/dist/extractors/product-actions.js +23 -0
- package/dist/extractors/product-actions.js.map +1 -0
- package/dist/extractors/selectors.d.ts +3 -0
- package/dist/extractors/selectors.d.ts.map +1 -0
- package/dist/extractors/selectors.js +42 -0
- package/dist/extractors/selectors.js.map +1 -0
- package/dist/extractors/selects.d.ts +3 -0
- package/dist/extractors/selects.d.ts.map +1 -0
- package/dist/extractors/selects.js +13 -0
- package/dist/extractors/selects.js.map +1 -0
- package/dist/extractors/text-inputs.d.ts +3 -0
- package/dist/extractors/text-inputs.d.ts.map +1 -0
- package/dist/extractors/text-inputs.js +35 -0
- package/dist/extractors/text-inputs.js.map +1 -0
- package/dist/extractors/toggles.d.ts +3 -0
- package/dist/extractors/toggles.d.ts.map +1 -0
- package/dist/extractors/toggles.js +14 -0
- package/dist/extractors/toggles.js.map +1 -0
- package/dist/extractors/types.d.ts +36 -0
- package/dist/extractors/types.d.ts.map +1 -0
- package/dist/extractors/types.js +1 -0
- package/dist/extractors/types.js.map +1 -0
- package/dist/generation/e2e.d.ts +15 -0
- package/dist/generation/e2e.d.ts.map +1 -0
- package/dist/generation/e2e.js +59 -0
- package/dist/generation/e2e.js.map +1 -0
- package/dist/generation/form-negative.d.ts +14 -0
- package/dist/generation/form-negative.d.ts.map +1 -0
- package/dist/generation/form-negative.js +36 -0
- package/dist/generation/form-negative.js.map +1 -0
- package/dist/generation/form.d.ts +23 -0
- package/dist/generation/form.d.ts.map +1 -0
- package/dist/generation/form.js +48 -0
- package/dist/generation/form.js.map +1 -0
- package/dist/generation/generator.d.ts +13 -0
- package/dist/generation/generator.d.ts.map +1 -0
- package/dist/generation/generator.js +38 -0
- package/dist/generation/generator.js.map +1 -0
- package/dist/generation/interaction.d.ts +14 -0
- package/dist/generation/interaction.d.ts.map +1 -0
- package/dist/generation/interaction.js +26 -0
- package/dist/generation/interaction.js.map +1 -0
- package/dist/generation/navigation.d.ts +14 -0
- package/dist/generation/navigation.d.ts.map +1 -0
- package/dist/generation/navigation.js +21 -0
- package/dist/generation/navigation.js.map +1 -0
- package/dist/generation/password.d.ts +20 -0
- package/dist/generation/password.d.ts.map +1 -0
- package/dist/generation/password.js +45 -0
- package/dist/generation/password.js.map +1 -0
- package/dist/generation/playwright-export.d.ts +3 -0
- package/dist/generation/playwright-export.d.ts.map +1 -0
- package/dist/generation/playwright-export.js +22 -0
- package/dist/generation/playwright-export.js.map +1 -0
- package/dist/generation/render.d.ts +29 -0
- package/dist/generation/render.d.ts.map +1 -0
- package/dist/generation/render.js +94 -0
- package/dist/generation/render.js.map +1 -0
- package/dist/generation/suite-tagger.d.ts +4 -0
- package/dist/generation/suite-tagger.d.ts.map +1 -0
- package/dist/generation/suite-tagger.js +20 -0
- package/dist/generation/suite-tagger.js.map +1 -0
- package/dist/identity/element-matcher.d.ts +23 -0
- package/dist/identity/element-matcher.d.ts.map +1 -0
- package/dist/identity/element-matcher.js +60 -0
- package/dist/identity/element-matcher.js.map +1 -0
- package/dist/identity/identity-cache.d.ts +12 -0
- package/dist/identity/identity-cache.d.ts.map +1 -0
- package/dist/identity/identity-cache.js +25 -0
- package/dist/identity/identity-cache.js.map +1 -0
- package/dist/identity/playwright-locator.d.ts +4 -0
- package/dist/identity/playwright-locator.d.ts.map +1 -0
- package/dist/identity/playwright-locator.js +67 -0
- package/dist/identity/playwright-locator.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator/decomposition.d.ts +6 -0
- package/dist/orchestrator/decomposition.d.ts.map +1 -0
- package/dist/orchestrator/decomposition.js +55 -0
- package/dist/orchestrator/decomposition.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +5 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator.js +122 -0
- package/dist/orchestrator/orchestrator.js.map +1 -0
- package/dist/orchestrator/test-execution.d.ts +5 -0
- package/dist/orchestrator/test-execution.d.ts.map +1 -0
- package/dist/orchestrator/test-execution.js +205 -0
- package/dist/orchestrator/test-execution.js.map +1 -0
- package/dist/orchestrator/types.d.ts +69 -0
- package/dist/orchestrator/types.d.ts.map +1 -0
- package/dist/orchestrator/types.js +1 -0
- package/dist/orchestrator/types.js.map +1 -0
- package/dist/planners/fill-value-planner.d.ts +9 -0
- package/dist/planners/fill-value-planner.d.ts.map +1 -0
- package/dist/planners/fill-value-planner.js +166 -0
- package/dist/planners/fill-value-planner.js.map +1 -0
- package/dist/plugins/registry.d.ts +6 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +16 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/types.d.ts +42 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +1 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/scanner/action-classifier.d.ts +7 -0
- package/dist/scanner/action-classifier.d.ts.map +1 -0
- package/dist/scanner/action-classifier.js +64 -0
- package/dist/scanner/action-classifier.js.map +1 -0
- package/dist/scanner/action-queue.d.ts +18 -0
- package/dist/scanner/action-queue.d.ts.map +1 -0
- package/dist/scanner/action-queue.js +20 -0
- package/dist/scanner/action-queue.js.map +1 -0
- package/dist/scanner/component-detector.d.ts +43 -0
- package/dist/scanner/component-detector.d.ts.map +1 -0
- package/dist/scanner/component-detector.js +231 -0
- package/dist/scanner/component-detector.js.map +1 -0
- package/dist/scanner/email-detector.d.ts +3 -0
- package/dist/scanner/email-detector.d.ts.map +1 -0
- package/dist/scanner/email-detector.js +12 -0
- package/dist/scanner/email-detector.js.map +1 -0
- package/dist/scanner/html-decomposer.d.ts +19 -0
- package/dist/scanner/html-decomposer.d.ts.map +1 -0
- package/dist/scanner/html-decomposer.js +41 -0
- package/dist/scanner/html-decomposer.js.map +1 -0
- package/dist/scanner/issue-detector.d.ts +8 -0
- package/dist/scanner/issue-detector.d.ts.map +1 -0
- package/dist/scanner/issue-detector.js +71 -0
- package/dist/scanner/issue-detector.js.map +1 -0
- package/dist/scanner/loop-guard.d.ts +18 -0
- package/dist/scanner/loop-guard.d.ts.map +1 -0
- package/dist/scanner/loop-guard.js +33 -0
- package/dist/scanner/loop-guard.js.map +1 -0
- package/dist/scanner/navigator.d.ts +25 -0
- package/dist/scanner/navigator.d.ts.map +1 -0
- package/dist/scanner/navigator.js +56 -0
- package/dist/scanner/navigator.js.map +1 -0
- package/dist/scanner/page-cache.d.ts +22 -0
- package/dist/scanner/page-cache.d.ts.map +1 -0
- package/dist/scanner/page-cache.js +42 -0
- package/dist/scanner/page-cache.js.map +1 -0
- package/dist/scanner/pairwise.d.ts +7 -0
- package/dist/scanner/pairwise.d.ts.map +1 -0
- package/dist/scanner/pairwise.js +64 -0
- package/dist/scanner/pairwise.js.map +1 -0
- package/dist/scanner/pattern-detector.d.ts +22 -0
- package/dist/scanner/pattern-detector.d.ts.map +1 -0
- package/dist/scanner/pattern-detector.js +108 -0
- package/dist/scanner/pattern-detector.js.map +1 -0
- package/dist/scanner/phase-timer.d.ts +9 -0
- package/dist/scanner/phase-timer.d.ts.map +1 -0
- package/dist/scanner/phase-timer.js +27 -0
- package/dist/scanner/phase-timer.js.map +1 -0
- package/dist/scanner/reusable-element-cache.d.ts +13 -0
- package/dist/scanner/reusable-element-cache.d.ts.map +1 -0
- package/dist/scanner/reusable-element-cache.js +37 -0
- package/dist/scanner/reusable-element-cache.js.map +1 -0
- package/dist/scanner/scroll-scanner.d.ts +3 -0
- package/dist/scanner/scroll-scanner.d.ts.map +1 -0
- package/dist/scanner/scroll-scanner.js +19 -0
- package/dist/scanner/scroll-scanner.js.map +1 -0
- package/dist/scanner/state-manager.d.ts +11 -0
- package/dist/scanner/state-manager.d.ts.map +1 -0
- package/dist/scanner/state-manager.js +24 -0
- package/dist/scanner/state-manager.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
function gatherSignals(item) {
|
|
2
|
+
const parts = [];
|
|
3
|
+
if (item.inputType)
|
|
4
|
+
parts.push(item.inputType);
|
|
5
|
+
if (item.accessibleName)
|
|
6
|
+
parts.push(item.accessibleName);
|
|
7
|
+
if (item.textContent)
|
|
8
|
+
parts.push(item.textContent);
|
|
9
|
+
const attrs = (item.attributes || {});
|
|
10
|
+
if (attrs.placeholder)
|
|
11
|
+
parts.push(attrs.placeholder);
|
|
12
|
+
if (attrs.name)
|
|
13
|
+
parts.push(attrs.name);
|
|
14
|
+
if (attrs.id)
|
|
15
|
+
parts.push(attrs.id);
|
|
16
|
+
if (attrs.autocomplete)
|
|
17
|
+
parts.push(attrs.autocomplete);
|
|
18
|
+
if (attrs.labelText)
|
|
19
|
+
parts.push(attrs.labelText);
|
|
20
|
+
return parts.join(" ").toLowerCase();
|
|
21
|
+
}
|
|
22
|
+
function matches(signal, ...keywords) {
|
|
23
|
+
return keywords.some(k => signal.includes(k));
|
|
24
|
+
}
|
|
25
|
+
const TEST_VALUES = {
|
|
26
|
+
email: "jane.tester@example.com",
|
|
27
|
+
password: "T3st!Pass#2026",
|
|
28
|
+
phone: "(555) 012-3456",
|
|
29
|
+
firstName: "Jane",
|
|
30
|
+
lastName: "Tester",
|
|
31
|
+
fullName: "Jane Tester",
|
|
32
|
+
username: "jane.tester",
|
|
33
|
+
street: "742 Evergreen Terrace",
|
|
34
|
+
address2: "Apt 4B",
|
|
35
|
+
city: "Springfield",
|
|
36
|
+
state: "IL",
|
|
37
|
+
zip: "62704",
|
|
38
|
+
country: "United States",
|
|
39
|
+
url: "https://example.com",
|
|
40
|
+
company: "Acme Testing Co.",
|
|
41
|
+
title: "QA Engineer",
|
|
42
|
+
date: "2026-01-21",
|
|
43
|
+
time: "09:30",
|
|
44
|
+
number: "3",
|
|
45
|
+
creditCard: "4111111111111111",
|
|
46
|
+
cvv: "123",
|
|
47
|
+
expiry: "12/28",
|
|
48
|
+
search: "blue shirt",
|
|
49
|
+
comment: "This is a test comment for automated UI testing.",
|
|
50
|
+
message: "Hello, this is an automated test message from Testomniac.",
|
|
51
|
+
generic: "Test input",
|
|
52
|
+
};
|
|
53
|
+
export class RuleBasedFillValuePlanner {
|
|
54
|
+
planValue(item) {
|
|
55
|
+
const signal = gatherSignals(item);
|
|
56
|
+
const inputType = (item.inputType || "").toLowerCase();
|
|
57
|
+
const autocomplete = (item.attributes?.autocomplete || "").toLowerCase();
|
|
58
|
+
if (inputType === "email")
|
|
59
|
+
return TEST_VALUES.email;
|
|
60
|
+
if (inputType === "password")
|
|
61
|
+
return TEST_VALUES.password;
|
|
62
|
+
if (inputType === "tel")
|
|
63
|
+
return TEST_VALUES.phone;
|
|
64
|
+
if (inputType === "url")
|
|
65
|
+
return TEST_VALUES.url;
|
|
66
|
+
if (inputType === "date")
|
|
67
|
+
return TEST_VALUES.date;
|
|
68
|
+
if (inputType === "time")
|
|
69
|
+
return TEST_VALUES.time;
|
|
70
|
+
if (inputType === "number")
|
|
71
|
+
return TEST_VALUES.number;
|
|
72
|
+
if (inputType === "search")
|
|
73
|
+
return TEST_VALUES.search;
|
|
74
|
+
if (autocomplete === "email")
|
|
75
|
+
return TEST_VALUES.email;
|
|
76
|
+
if (autocomplete === "tel" || autocomplete === "tel-national")
|
|
77
|
+
return TEST_VALUES.phone;
|
|
78
|
+
if (autocomplete === "given-name")
|
|
79
|
+
return TEST_VALUES.firstName;
|
|
80
|
+
if (autocomplete === "family-name")
|
|
81
|
+
return TEST_VALUES.lastName;
|
|
82
|
+
if (autocomplete === "name")
|
|
83
|
+
return TEST_VALUES.fullName;
|
|
84
|
+
if (autocomplete === "username")
|
|
85
|
+
return TEST_VALUES.username;
|
|
86
|
+
if (autocomplete === "new-password" || autocomplete === "current-password")
|
|
87
|
+
return TEST_VALUES.password;
|
|
88
|
+
if (autocomplete === "street-address" || autocomplete === "address-line1")
|
|
89
|
+
return TEST_VALUES.street;
|
|
90
|
+
if (autocomplete === "address-line2")
|
|
91
|
+
return TEST_VALUES.address2;
|
|
92
|
+
if (autocomplete === "address-level2")
|
|
93
|
+
return TEST_VALUES.city;
|
|
94
|
+
if (autocomplete === "address-level1")
|
|
95
|
+
return TEST_VALUES.state;
|
|
96
|
+
if (autocomplete === "postal-code")
|
|
97
|
+
return TEST_VALUES.zip;
|
|
98
|
+
if (autocomplete === "country-name" || autocomplete === "country")
|
|
99
|
+
return TEST_VALUES.country;
|
|
100
|
+
if (autocomplete === "organization")
|
|
101
|
+
return TEST_VALUES.company;
|
|
102
|
+
if (autocomplete === "cc-number")
|
|
103
|
+
return TEST_VALUES.creditCard;
|
|
104
|
+
if (autocomplete === "cc-csc")
|
|
105
|
+
return TEST_VALUES.cvv;
|
|
106
|
+
if (autocomplete === "cc-exp")
|
|
107
|
+
return TEST_VALUES.expiry;
|
|
108
|
+
if (autocomplete === "url")
|
|
109
|
+
return TEST_VALUES.url;
|
|
110
|
+
if (matches(signal, "email", "e-mail", "correo"))
|
|
111
|
+
return TEST_VALUES.email;
|
|
112
|
+
if (matches(signal, "password", "passwd", "contraseña", "mot de passe"))
|
|
113
|
+
return TEST_VALUES.password;
|
|
114
|
+
if (matches(signal, "phone", "mobile", "cell", "tel", "fax", "teléfono"))
|
|
115
|
+
return TEST_VALUES.phone;
|
|
116
|
+
if (matches(signal, "first name", "first_name", "firstname", "given name", "given_name", "prenom", "vorname"))
|
|
117
|
+
return TEST_VALUES.firstName;
|
|
118
|
+
if (matches(signal, "last name", "last_name", "lastname", "family name", "family_name", "surname", "nachname"))
|
|
119
|
+
return TEST_VALUES.lastName;
|
|
120
|
+
if (matches(signal, "username", "user name", "user_name", "login", "handle"))
|
|
121
|
+
return TEST_VALUES.username;
|
|
122
|
+
if (matches(signal, "full name", "full_name", "fullname", "your name"))
|
|
123
|
+
return TEST_VALUES.fullName;
|
|
124
|
+
if (matches(signal, "name") &&
|
|
125
|
+
!matches(signal, "user", "company", "product", "file"))
|
|
126
|
+
return TEST_VALUES.fullName;
|
|
127
|
+
if (matches(signal, "street", "address line 1", "address1", "address_1", "address_line1", "dirección"))
|
|
128
|
+
return TEST_VALUES.street;
|
|
129
|
+
if (matches(signal, "address line 2", "address2", "address_2", "apt", "suite", "unit"))
|
|
130
|
+
return TEST_VALUES.address2;
|
|
131
|
+
if (matches(signal, "city", "ciudad", "town", "locality"))
|
|
132
|
+
return TEST_VALUES.city;
|
|
133
|
+
if (matches(signal, "state", "province", "region", "estado"))
|
|
134
|
+
return TEST_VALUES.state;
|
|
135
|
+
if (matches(signal, "zip", "postal", "postcode", "zip code", "zipcode", "plz"))
|
|
136
|
+
return TEST_VALUES.zip;
|
|
137
|
+
if (matches(signal, "country", "país", "land"))
|
|
138
|
+
return TEST_VALUES.country;
|
|
139
|
+
if (matches(signal, "company", "organization", "organisation", "business", "empresa"))
|
|
140
|
+
return TEST_VALUES.company;
|
|
141
|
+
if (matches(signal, "website", "url", "homepage", "sitio web"))
|
|
142
|
+
return TEST_VALUES.url;
|
|
143
|
+
if (matches(signal, "card number", "card_number", "cardnumber", "cc-number", "credit card"))
|
|
144
|
+
return TEST_VALUES.creditCard;
|
|
145
|
+
if (matches(signal, "cvv", "cvc", "security code", "card code"))
|
|
146
|
+
return TEST_VALUES.cvv;
|
|
147
|
+
if (matches(signal, "expir", "exp date", "exp_date", "valid until"))
|
|
148
|
+
return TEST_VALUES.expiry;
|
|
149
|
+
if (matches(signal, "search", "query", "buscar", "recherche", "find"))
|
|
150
|
+
return TEST_VALUES.search;
|
|
151
|
+
if (matches(signal, "title", "subject", "topic", "asunto", "betreff"))
|
|
152
|
+
return TEST_VALUES.title;
|
|
153
|
+
if (matches(signal, "comment", "message", "description", "details", "feedback", "note", "bio", "about", "summary", "body", "content", "text", "review", "reason", "steps", "expected", "actual", "remarks")) {
|
|
154
|
+
return item.tagName === "TEXTAREA"
|
|
155
|
+
? TEST_VALUES.comment
|
|
156
|
+
: TEST_VALUES.message;
|
|
157
|
+
}
|
|
158
|
+
if (item.tagName === "TEXTAREA")
|
|
159
|
+
return TEST_VALUES.comment;
|
|
160
|
+
if (matches(signal, "address") && !matches(signal, "email", "ip"))
|
|
161
|
+
return TEST_VALUES.street;
|
|
162
|
+
return TEST_VALUES.generic;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
export const fillValuePlanner = new RuleBasedFillValuePlanner();
|
|
166
|
+
//# sourceMappingURL=fill-value-planner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fill-value-planner.js","sourceRoot":"","sources":["../../src/planners/fill-value-planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Plugin } from "./types";
|
|
2
|
+
export declare function registerPlugin(plugin: Plugin, enabled?: boolean): void;
|
|
3
|
+
export declare function getPlugin(name: string): Plugin | undefined;
|
|
4
|
+
export declare function getEnabledPlugins(): Plugin[];
|
|
5
|
+
export declare function getAllPluginNames(): string[];
|
|
6
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/plugins/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAItC,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,UAAO,GAAG,IAAI,CAEnE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE1D;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAI5C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const plugins = new Map();
|
|
2
|
+
export function registerPlugin(plugin, enabled = true) {
|
|
3
|
+
plugins.set(plugin.name, { plugin, enabled });
|
|
4
|
+
}
|
|
5
|
+
export function getPlugin(name) {
|
|
6
|
+
return plugins.get(name)?.plugin;
|
|
7
|
+
}
|
|
8
|
+
export function getEnabledPlugins() {
|
|
9
|
+
return Array.from(plugins.values())
|
|
10
|
+
.filter(entry => entry.enabled)
|
|
11
|
+
.map(entry => entry.plugin);
|
|
12
|
+
}
|
|
13
|
+
export function getAllPluginNames() {
|
|
14
|
+
return Array.from(plugins.keys());
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/plugins/registry.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgD,CAAC;AAExE,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAO,GAAG,IAAI;IAC3D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;SAChC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;SAC9B,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { BrowserAdapter } from "../adapter";
|
|
2
|
+
import type { NetworkLogEntry, FormInfo } from "../domain/types";
|
|
3
|
+
export interface PluginContext {
|
|
4
|
+
appId: number;
|
|
5
|
+
runId: number;
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
pages: {
|
|
8
|
+
id: number;
|
|
9
|
+
url: string;
|
|
10
|
+
}[];
|
|
11
|
+
pageStates: {
|
|
12
|
+
id: number;
|
|
13
|
+
pageId: number;
|
|
14
|
+
html: string;
|
|
15
|
+
text: string;
|
|
16
|
+
url: string;
|
|
17
|
+
headers: Record<string, string>;
|
|
18
|
+
}[];
|
|
19
|
+
networkLogs: NetworkLogEntry[];
|
|
20
|
+
forms: FormInfo[];
|
|
21
|
+
openai?: unknown;
|
|
22
|
+
browser: BrowserAdapter;
|
|
23
|
+
}
|
|
24
|
+
export interface PluginIssue {
|
|
25
|
+
type: string;
|
|
26
|
+
severity: "error" | "warning" | "info";
|
|
27
|
+
description: string;
|
|
28
|
+
pageUrl: string;
|
|
29
|
+
pageId?: number;
|
|
30
|
+
pageStateId?: number;
|
|
31
|
+
details?: Record<string, unknown>;
|
|
32
|
+
}
|
|
33
|
+
export interface PluginResult {
|
|
34
|
+
issues: PluginIssue[];
|
|
35
|
+
metadata?: Record<string, unknown>;
|
|
36
|
+
}
|
|
37
|
+
export interface Plugin {
|
|
38
|
+
name: string;
|
|
39
|
+
description: string;
|
|
40
|
+
analyze(context: PluginContext): Promise<PluginResult>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrC,UAAU,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,EAAE,CAAC;IACJ,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACxD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ActionableItem } from "@sudobility/testomniac_types";
|
|
2
|
+
export declare function normalizeHref(href: string, baseUrl: string): string | null;
|
|
3
|
+
export declare function shouldExpectNavigation(item: ActionableItem, beforeUrl: string): boolean;
|
|
4
|
+
export declare function looksLikeSubmitAction(item: ActionableItem): boolean;
|
|
5
|
+
export declare function looksLikeEnterCommitField(item: ActionableItem): boolean;
|
|
6
|
+
export declare function getActionPriority(item: ActionableItem): number;
|
|
7
|
+
//# sourceMappingURL=action-classifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-classifier.d.ts","sourceRoot":"","sources":["../../src/scanner/action-classifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ1E;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAKT;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAcnE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAYvE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAwB9D"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export function normalizeHref(href, baseUrl) {
|
|
2
|
+
try {
|
|
3
|
+
const url = new URL(href, baseUrl);
|
|
4
|
+
url.hash = "";
|
|
5
|
+
return url.href;
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function shouldExpectNavigation(item, beforeUrl) {
|
|
12
|
+
if (item.actionKind !== "navigate" || !item.href)
|
|
13
|
+
return false;
|
|
14
|
+
const target = normalizeHref(item.href, beforeUrl);
|
|
15
|
+
if (!target)
|
|
16
|
+
return false;
|
|
17
|
+
return target !== beforeUrl.split("#")[0];
|
|
18
|
+
}
|
|
19
|
+
export function looksLikeSubmitAction(item) {
|
|
20
|
+
const text = `${item.accessibleName || ""} ${item.textContent || ""}`.toLowerCase();
|
|
21
|
+
const inputType = (item.inputType || "").toLowerCase();
|
|
22
|
+
return (inputType === "submit" ||
|
|
23
|
+
text.includes("submit") ||
|
|
24
|
+
text.includes("send") ||
|
|
25
|
+
text.includes("search") ||
|
|
26
|
+
text.includes("book") ||
|
|
27
|
+
text.includes("report") ||
|
|
28
|
+
text.includes("save"));
|
|
29
|
+
}
|
|
30
|
+
export function looksLikeEnterCommitField(item) {
|
|
31
|
+
const text = `${item.accessibleName || ""} ${item.textContent || ""}`.toLowerCase();
|
|
32
|
+
const inputType = (item.inputType || "").toLowerCase();
|
|
33
|
+
const role = (item.role || "").toLowerCase();
|
|
34
|
+
return (inputType === "search" ||
|
|
35
|
+
role === "combobox" ||
|
|
36
|
+
text.includes("search") ||
|
|
37
|
+
text.includes("query"));
|
|
38
|
+
}
|
|
39
|
+
export function getActionPriority(item) {
|
|
40
|
+
const text = `${item.accessibleName || ""} ${item.textContent || ""}`.toLowerCase();
|
|
41
|
+
const href = (item.href || "").toLowerCase();
|
|
42
|
+
if (item.actionKind === "fill" || item.actionKind === "select")
|
|
43
|
+
return 0;
|
|
44
|
+
if (item.actionKind === "radio_select")
|
|
45
|
+
return 1;
|
|
46
|
+
if (href.includes("/store/") ||
|
|
47
|
+
href.includes("ec_action=addtocart") ||
|
|
48
|
+
href.includes("/my-cart/")) {
|
|
49
|
+
return 2;
|
|
50
|
+
}
|
|
51
|
+
if (looksLikeSubmitAction(item))
|
|
52
|
+
return 2;
|
|
53
|
+
if (text.includes("add to cart") ||
|
|
54
|
+
text.includes("checkout") ||
|
|
55
|
+
text.includes("select options")) {
|
|
56
|
+
return 2;
|
|
57
|
+
}
|
|
58
|
+
if (item.actionKind === "navigate")
|
|
59
|
+
return 4;
|
|
60
|
+
if (item.actionKind === "click")
|
|
61
|
+
return 3;
|
|
62
|
+
return 3;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=action-classifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-classifier.js","sourceRoot":"","sources":["../../src/scanner/action-classifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface QueuedAction {
|
|
2
|
+
id: number;
|
|
3
|
+
type: string;
|
|
4
|
+
status: string;
|
|
5
|
+
startingPageStateId?: number;
|
|
6
|
+
actionableItemId?: number;
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
}
|
|
9
|
+
export declare class ActionQueue {
|
|
10
|
+
private actions;
|
|
11
|
+
private completedIds;
|
|
12
|
+
add(action: QueuedAction): void;
|
|
13
|
+
next(): QueuedAction | undefined;
|
|
14
|
+
complete(id: number): void;
|
|
15
|
+
hasOpen(): boolean;
|
|
16
|
+
openCount(): number;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=action-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-queue.d.ts","sourceRoot":"","sources":["../../src/scanner/action-queue.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,YAAY,CAAqB;IAEzC,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAI/B,IAAI,IAAI,YAAY,GAAG,SAAS;IAIhC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI1B,OAAO,IAAI,OAAO;IAIlB,SAAS,IAAI,MAAM;CAGpB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export class ActionQueue {
|
|
2
|
+
actions = [];
|
|
3
|
+
completedIds = new Set();
|
|
4
|
+
add(action) {
|
|
5
|
+
this.actions.push(action);
|
|
6
|
+
}
|
|
7
|
+
next() {
|
|
8
|
+
return this.actions.find(a => !this.completedIds.has(a.id));
|
|
9
|
+
}
|
|
10
|
+
complete(id) {
|
|
11
|
+
this.completedIds.add(id);
|
|
12
|
+
}
|
|
13
|
+
hasOpen() {
|
|
14
|
+
return this.actions.some(a => !this.completedIds.has(a.id));
|
|
15
|
+
}
|
|
16
|
+
openCount() {
|
|
17
|
+
return this.actions.filter(a => !this.completedIds.has(a.id)).length;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=action-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-queue.js","sourceRoot":"","sources":["../../src/scanner/action-queue.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,WAAW;IACd,OAAO,GAAmB,EAAE,CAAC;IAC7B,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,GAAG,CAAC,MAAoB;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACvE,CAAC;CACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { BrowserAdapter } from "../adapter";
|
|
2
|
+
import type { HtmlComponentType } from "@sudobility/testomniac_types";
|
|
3
|
+
export declare const COMPONENT_SELECTORS: string[];
|
|
4
|
+
export declare const COMPONENT_TYPE_SELECTORS: Record<HtmlComponentType, string[]>;
|
|
5
|
+
export interface DetectedReusableRegion {
|
|
6
|
+
type: HtmlComponentType;
|
|
7
|
+
selector: string;
|
|
8
|
+
outerHtml: string;
|
|
9
|
+
hash: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function detectReusableRegions(adapter: BrowserAdapter): Promise<DetectedReusableRegion[]>;
|
|
12
|
+
export interface CandidateRegion {
|
|
13
|
+
pageStateId: number;
|
|
14
|
+
selector: string;
|
|
15
|
+
innerHtml: string;
|
|
16
|
+
hash: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ComponentGroup {
|
|
19
|
+
selector: string;
|
|
20
|
+
hash: string;
|
|
21
|
+
instances: Array<{
|
|
22
|
+
pageStateId: number;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
export declare function extractCandidateRegions(html: string): Array<{
|
|
26
|
+
selector: string;
|
|
27
|
+
innerHtml: string;
|
|
28
|
+
}>;
|
|
29
|
+
export declare function hashRegion(innerHtml: string): string;
|
|
30
|
+
export declare function groupByHash(regions: CandidateRegion[]): ComponentGroup[];
|
|
31
|
+
export interface DetectedComponent {
|
|
32
|
+
name: string;
|
|
33
|
+
selector: string;
|
|
34
|
+
hash: string;
|
|
35
|
+
canonicalPageStateId: number;
|
|
36
|
+
instances: Array<{
|
|
37
|
+
pageStateId: number;
|
|
38
|
+
isIdentical: boolean;
|
|
39
|
+
hash: string;
|
|
40
|
+
}>;
|
|
41
|
+
}
|
|
42
|
+
export declare function detectComponents(allRegions: CandidateRegion[]): DetectedComponent[];
|
|
43
|
+
//# sourceMappingURL=component-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-detector.d.ts","sourceRoot":"","sources":["../../src/scanner/component-detector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,eAAO,MAAM,mBAAmB,UAW/B,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAiGxE,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CA6CnC;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3C;AAMD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,GACX,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA6BhD;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,cAAc,EAAE,CAcxE;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,KAAK,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ;AAED,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,eAAe,EAAE,GAC5B,iBAAiB,EAAE,CAwCrB"}
|