@sun-asterisk/sungen 1.0.23 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +198 -74
- package/dist/cli/commands/add.d.ts.map +1 -1
- package/dist/cli/commands/add.js +5 -3
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +110 -35
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/index.d.ts +2 -2
- package/dist/cli/index.js +5 -16
- package/dist/cli/index.js.map +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/frame-enter-action.hbs +1 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/frame-exit-action.hbs +1 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/keyboard-global-action.hbs +1 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/scroll-action.hbs +1 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +2 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/label-value-assertion.hbs +2 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-filter.hbs +3 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-index.hbs +3 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-column-exists.hbs +2 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +2 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +2 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +2 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +2 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +11 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +11 -2
- package/dist/generators/test-generator/code-generator.d.ts +0 -1
- package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
- package/dist/generators/test-generator/code-generator.js +0 -47
- package/dist/generators/test-generator/code-generator.js.map +1 -1
- package/dist/generators/test-generator/patterns/assertion-patterns.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/assertion-patterns.js +33 -8
- package/dist/generators/test-generator/patterns/assertion-patterns.js.map +1 -1
- package/dist/generators/test-generator/patterns/index.d.ts +4 -1
- package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/index.js +17 -5
- package/dist/generators/test-generator/patterns/index.js.map +1 -1
- package/dist/generators/test-generator/patterns/interaction-patterns.js +1 -1
- package/dist/generators/test-generator/patterns/interaction-patterns.js.map +1 -1
- package/dist/generators/test-generator/patterns/keyboard-patterns.d.ts +7 -0
- package/dist/generators/test-generator/patterns/keyboard-patterns.d.ts.map +1 -0
- package/dist/generators/test-generator/patterns/keyboard-patterns.js +47 -0
- package/dist/generators/test-generator/patterns/keyboard-patterns.js.map +1 -0
- package/dist/generators/test-generator/patterns/scope-patterns.d.ts +7 -0
- package/dist/generators/test-generator/patterns/scope-patterns.d.ts.map +1 -0
- package/dist/generators/test-generator/patterns/scope-patterns.js +36 -0
- package/dist/generators/test-generator/patterns/scope-patterns.js.map +1 -0
- package/dist/generators/test-generator/patterns/scroll-patterns.d.ts +7 -0
- package/dist/generators/test-generator/patterns/scroll-patterns.d.ts.map +1 -0
- package/dist/generators/test-generator/patterns/scroll-patterns.js +25 -0
- package/dist/generators/test-generator/patterns/scroll-patterns.js.map +1 -0
- package/dist/generators/test-generator/patterns/table-patterns.d.ts +7 -0
- package/dist/generators/test-generator/patterns/table-patterns.d.ts.map +1 -0
- package/dist/generators/test-generator/patterns/table-patterns.js +192 -0
- package/dist/generators/test-generator/patterns/table-patterns.js.map +1 -0
- package/dist/generators/test-generator/step-mapper.d.ts +1 -3
- package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
- package/dist/generators/test-generator/step-mapper.js +36 -34
- package/dist/generators/test-generator/step-mapper.js.map +1 -1
- package/dist/generators/test-generator/template-engine.d.ts.map +1 -1
- package/dist/generators/test-generator/template-engine.js +4 -1
- package/dist/generators/test-generator/template-engine.js.map +1 -1
- package/dist/generators/test-generator/types.d.ts +7 -24
- package/dist/generators/test-generator/types.d.ts.map +1 -1
- package/dist/generators/test-generator/types.js +2 -101
- package/dist/generators/test-generator/types.js.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.d.ts +14 -0
- package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.js +37 -11
- package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
- package/dist/orchestrator/project-initializer.d.ts +8 -0
- package/dist/orchestrator/project-initializer.d.ts.map +1 -1
- package/dist/orchestrator/project-initializer.js +343 -32
- package/dist/orchestrator/project-initializer.js.map +1 -1
- package/dist/orchestrator/screen-manager.d.ts +1 -32
- package/dist/orchestrator/screen-manager.d.ts.map +1 -1
- package/dist/orchestrator/screen-manager.js +55 -216
- package/dist/orchestrator/screen-manager.js.map +1 -1
- package/dist/utils/selector-types.d.ts +1 -1
- package/dist/utils/selector-types.d.ts.map +1 -1
- package/dist/utils/selector-types.js +3 -0
- package/dist/utils/selector-types.js.map +1 -1
- package/package.json +2 -2
- package/src/cli/commands/add.ts +5 -3
- package/src/cli/commands/generate.ts +90 -38
- package/src/cli/index.ts +5 -16
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/frame-enter-action.hbs +1 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/frame-exit-action.hbs +1 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/keyboard-global-action.hbs +1 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/scroll-action.hbs +1 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +2 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/label-value-assertion.hbs +2 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-filter.hbs +3 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-index.hbs +3 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-column-exists.hbs +2 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +2 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +2 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +2 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +2 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +11 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +11 -2
- package/src/generators/test-generator/code-generator.ts +0 -59
- package/src/generators/test-generator/patterns/assertion-patterns.ts +39 -8
- package/src/generators/test-generator/patterns/index.ts +12 -3
- package/src/generators/test-generator/patterns/interaction-patterns.ts +1 -1
- package/src/generators/test-generator/patterns/keyboard-patterns.ts +51 -0
- package/src/generators/test-generator/patterns/scope-patterns.ts +40 -0
- package/src/generators/test-generator/patterns/scroll-patterns.ts +27 -0
- package/src/generators/test-generator/patterns/table-patterns.ts +232 -0
- package/src/generators/test-generator/step-mapper.ts +39 -34
- package/src/generators/test-generator/template-engine.ts +3 -1
- package/src/generators/test-generator/types.ts +7 -112
- package/src/generators/test-generator/utils/selector-resolver.ts +70 -25
- package/src/orchestrator/project-initializer.ts +345 -32
- package/src/orchestrator/screen-manager.ts +61 -233
- package/src/utils/selector-types.ts +3 -0
- package/dist/cli/commands/cache-clear.d.ts +0 -3
- package/dist/cli/commands/cache-clear.d.ts.map +0 -1
- package/dist/cli/commands/cache-clear.js +0 -24
- package/dist/cli/commands/cache-clear.js.map +0 -1
- package/dist/cli/commands/full.d.ts +0 -3
- package/dist/cli/commands/full.d.ts.map +0 -1
- package/dist/cli/commands/full.js +0 -37
- package/dist/cli/commands/full.js.map +0 -1
- package/dist/cli/commands/live-scan.d.ts +0 -3
- package/dist/cli/commands/live-scan.d.ts.map +0 -1
- package/dist/cli/commands/live-scan.js +0 -78
- package/dist/cli/commands/live-scan.js.map +0 -1
- package/dist/cli/commands/map.d.ts +0 -3
- package/dist/cli/commands/map.d.ts.map +0 -1
- package/dist/cli/commands/map.js +0 -93
- package/dist/cli/commands/map.js.map +0 -1
- package/dist/cli/commands/validate.d.ts +0 -3
- package/dist/cli/commands/validate.d.ts.map +0 -1
- package/dist/cli/commands/validate.js +0 -43
- package/dist/cli/commands/validate.js.map +0 -1
- package/dist/cli/utils.d.ts +0 -6
- package/dist/cli/utils.d.ts.map +0 -1
- package/dist/cli/utils.js +0 -101
- package/dist/cli/utils.js.map +0 -1
- package/dist/config/config-loader.d.ts +0 -51
- package/dist/config/config-loader.d.ts.map +0 -1
- package/dist/config/config-loader.js +0 -216
- package/dist/config/config-loader.js.map +0 -1
- package/dist/config/config-schema.d.ts +0 -121
- package/dist/config/config-schema.d.ts.map +0 -1
- package/dist/config/config-schema.js +0 -7
- package/dist/config/config-schema.js.map +0 -1
- package/dist/core/live-scanner/config-reader.d.ts +0 -10
- package/dist/core/live-scanner/config-reader.d.ts.map +0 -1
- package/dist/core/live-scanner/config-reader.js +0 -87
- package/dist/core/live-scanner/config-reader.js.map +0 -1
- package/dist/core/live-scanner/element-finder.d.ts +0 -20
- package/dist/core/live-scanner/element-finder.d.ts.map +0 -1
- package/dist/core/live-scanner/element-finder.js +0 -486
- package/dist/core/live-scanner/element-finder.js.map +0 -1
- package/dist/core/live-scanner/index.d.ts +0 -8
- package/dist/core/live-scanner/index.d.ts.map +0 -1
- package/dist/core/live-scanner/index.js +0 -33
- package/dist/core/live-scanner/index.js.map +0 -1
- package/dist/core/live-scanner/matrix-reader.d.ts +0 -17
- package/dist/core/live-scanner/matrix-reader.d.ts.map +0 -1
- package/dist/core/live-scanner/matrix-reader.js +0 -60
- package/dist/core/live-scanner/matrix-reader.js.map +0 -1
- package/dist/core/live-scanner/matrix-writer.d.ts +0 -7
- package/dist/core/live-scanner/matrix-writer.d.ts.map +0 -1
- package/dist/core/live-scanner/matrix-writer.js +0 -103
- package/dist/core/live-scanner/matrix-writer.js.map +0 -1
- package/dist/core/live-scanner/role-fallback.d.ts +0 -15
- package/dist/core/live-scanner/role-fallback.d.ts.map +0 -1
- package/dist/core/live-scanner/role-fallback.js +0 -45
- package/dist/core/live-scanner/role-fallback.js.map +0 -1
- package/dist/core/live-scanner/scanner.d.ts +0 -13
- package/dist/core/live-scanner/scanner.d.ts.map +0 -1
- package/dist/core/live-scanner/scanner.js +0 -243
- package/dist/core/live-scanner/scanner.js.map +0 -1
- package/dist/core/live-scanner/step-replayer.d.ts +0 -26
- package/dist/core/live-scanner/step-replayer.d.ts.map +0 -1
- package/dist/core/live-scanner/step-replayer.js +0 -286
- package/dist/core/live-scanner/step-replayer.js.map +0 -1
- package/dist/core/live-scanner/types.d.ts +0 -52
- package/dist/core/live-scanner/types.d.ts.map +0 -1
- package/dist/core/live-scanner/types.js +0 -14
- package/dist/core/live-scanner/types.js.map +0 -1
- package/dist/core/selector-base/annotation-handler.d.ts +0 -45
- package/dist/core/selector-base/annotation-handler.d.ts.map +0 -1
- package/dist/core/selector-base/annotation-handler.js +0 -102
- package/dist/core/selector-base/annotation-handler.js.map +0 -1
- package/dist/core/selector-base/base-generator.d.ts +0 -49
- package/dist/core/selector-base/base-generator.d.ts.map +0 -1
- package/dist/core/selector-base/base-generator.js +0 -214
- package/dist/core/selector-base/base-generator.js.map +0 -1
- package/dist/core/selector-base/gherkin-parser.d.ts +0 -24
- package/dist/core/selector-base/gherkin-parser.d.ts.map +0 -1
- package/dist/core/selector-base/gherkin-parser.js +0 -42
- package/dist/core/selector-base/gherkin-parser.js.map +0 -1
- package/dist/core/selector-mapper/priority-mapper.d.ts +0 -74
- package/dist/core/selector-mapper/priority-mapper.d.ts.map +0 -1
- package/dist/core/selector-mapper/priority-mapper.js +0 -477
- package/dist/core/selector-mapper/priority-mapper.js.map +0 -1
- package/dist/core/ui-scanner/heuristics/base-heuristic.d.ts +0 -91
- package/dist/core/ui-scanner/heuristics/base-heuristic.d.ts.map +0 -1
- package/dist/core/ui-scanner/heuristics/base-heuristic.js +0 -175
- package/dist/core/ui-scanner/heuristics/base-heuristic.js.map +0 -1
- package/dist/core/ui-scanner/react-scanner.d.ts +0 -32
- package/dist/core/ui-scanner/react-scanner.d.ts.map +0 -1
- package/dist/core/ui-scanner/react-scanner.js +0 -163
- package/dist/core/ui-scanner/react-scanner.js.map +0 -1
- package/dist/core/ui-scanner/scanner-interface.d.ts +0 -94
- package/dist/core/ui-scanner/scanner-interface.d.ts.map +0 -1
- package/dist/core/ui-scanner/scanner-interface.js +0 -33
- package/dist/core/ui-scanner/scanner-interface.js.map +0 -1
- package/dist/core/ui-scanner/strict-scanner.d.ts +0 -81
- package/dist/core/ui-scanner/strict-scanner.d.ts.map +0 -1
- package/dist/core/ui-scanner/strict-scanner.js +0 -511
- package/dist/core/ui-scanner/strict-scanner.js.map +0 -1
- package/dist/core/validator/data-validator.d.ts +0 -38
- package/dist/core/validator/data-validator.d.ts.map +0 -1
- package/dist/core/validator/data-validator.js +0 -212
- package/dist/core/validator/data-validator.js.map +0 -1
- package/dist/core/validator/feature-validator.d.ts +0 -27
- package/dist/core/validator/feature-validator.d.ts.map +0 -1
- package/dist/core/validator/feature-validator.js +0 -182
- package/dist/core/validator/feature-validator.js.map +0 -1
- package/dist/core/validator/index.d.ts +0 -46
- package/dist/core/validator/index.d.ts.map +0 -1
- package/dist/core/validator/index.js +0 -17
- package/dist/core/validator/index.js.map +0 -1
- package/dist/core/validator/screen-validator.d.ts +0 -35
- package/dist/core/validator/screen-validator.d.ts.map +0 -1
- package/dist/core/validator/screen-validator.js +0 -195
- package/dist/core/validator/screen-validator.js.map +0 -1
- package/dist/core/validator/selector-validator.d.ts +0 -36
- package/dist/core/validator/selector-validator.d.ts.map +0 -1
- package/dist/core/validator/selector-validator.js +0 -210
- package/dist/core/validator/selector-validator.js.map +0 -1
- package/dist/external/ai-provider.d.ts +0 -60
- package/dist/external/ai-provider.d.ts.map +0 -1
- package/dist/external/ai-provider.js +0 -30
- package/dist/external/ai-provider.js.map +0 -1
- package/dist/external/anthropic-provider.d.ts +0 -29
- package/dist/external/anthropic-provider.d.ts.map +0 -1
- package/dist/external/anthropic-provider.js +0 -85
- package/dist/external/anthropic-provider.js.map +0 -1
- package/dist/generators/cache/cache-manager.d.ts +0 -66
- package/dist/generators/cache/cache-manager.d.ts.map +0 -1
- package/dist/generators/cache/cache-manager.js +0 -286
- package/dist/generators/cache/cache-manager.js.map +0 -1
- package/dist/generators/dsl-writer/index.d.ts +0 -33
- package/dist/generators/dsl-writer/index.d.ts.map +0 -1
- package/dist/generators/dsl-writer/index.js +0 -226
- package/dist/generators/dsl-writer/index.js.map +0 -1
- package/dist/generators/scaffold-generator/index.d.ts +0 -162
- package/dist/generators/scaffold-generator/index.d.ts.map +0 -1
- package/dist/generators/scaffold-generator/index.js +0 -868
- package/dist/generators/scaffold-generator/index.js.map +0 -1
- package/dist/generators/selector-mapper/ai-mapper.d.ts +0 -56
- package/dist/generators/selector-mapper/ai-mapper.d.ts.map +0 -1
- package/dist/generators/selector-mapper/ai-mapper.js +0 -457
- package/dist/generators/selector-mapper/ai-mapper.js.map +0 -1
- package/dist/generators/selector-mapper/hybrid-mapper.d.ts +0 -67
- package/dist/generators/selector-mapper/hybrid-mapper.d.ts.map +0 -1
- package/dist/generators/selector-mapper/hybrid-mapper.js +0 -349
- package/dist/generators/selector-mapper/hybrid-mapper.js.map +0 -1
- package/dist/generators/selector-mapper/index.d.ts +0 -8
- package/dist/generators/selector-mapper/index.d.ts.map +0 -1
- package/dist/generators/selector-mapper/index.js +0 -12
- package/dist/generators/selector-mapper/index.js.map +0 -1
- package/dist/generators/selector-mapper/intelligent-mapper.d.ts +0 -125
- package/dist/generators/selector-mapper/intelligent-mapper.d.ts.map +0 -1
- package/dist/generators/selector-mapper/intelligent-mapper.js +0 -391
- package/dist/generators/selector-mapper/intelligent-mapper.js.map +0 -1
- package/dist/generators/test-generator/ai-step-mapper.d.ts +0 -27
- package/dist/generators/test-generator/ai-step-mapper.d.ts.map +0 -1
- package/dist/generators/test-generator/ai-step-mapper.js +0 -204
- package/dist/generators/test-generator/ai-step-mapper.js.map +0 -1
- package/dist/generators/test-generator/auth-setup-generator.d.ts +0 -18
- package/dist/generators/test-generator/auth-setup-generator.d.ts.map +0 -1
- package/dist/generators/test-generator/auth-setup-generator.js +0 -82
- package/dist/generators/test-generator/auth-setup-generator.js.map +0 -1
- package/dist/generators/test-generator/patterns/legacy-patterns.d.ts +0 -7
- package/dist/generators/test-generator/patterns/legacy-patterns.d.ts.map +0 -1
- package/dist/generators/test-generator/patterns/legacy-patterns.js +0 -98
- package/dist/generators/test-generator/patterns/legacy-patterns.js.map +0 -1
- package/dist/generators/test-generator/templates/auth-setup.ts.hbs +0 -36
- package/dist/generators/ui-model-builder/deep-scanner.d.ts +0 -121
- package/dist/generators/ui-model-builder/deep-scanner.d.ts.map +0 -1
- package/dist/generators/ui-model-builder/deep-scanner.js +0 -1113
- package/dist/generators/ui-model-builder/deep-scanner.js.map +0 -1
- package/dist/generators/ui-model-builder/enhanced-deep-scanner.d.ts +0 -110
- package/dist/generators/ui-model-builder/enhanced-deep-scanner.d.ts.map +0 -1
- package/dist/generators/ui-model-builder/enhanced-deep-scanner.js +0 -608
- package/dist/generators/ui-model-builder/enhanced-deep-scanner.js.map +0 -1
- package/dist/generators/ui-model-builder/react-scanner.d.ts +0 -107
- package/dist/generators/ui-model-builder/react-scanner.d.ts.map +0 -1
- package/dist/generators/ui-model-builder/react-scanner.js +0 -797
- package/dist/generators/ui-model-builder/react-scanner.js.map +0 -1
- package/dist/orchestrator/cache-manager.d.ts +0 -15
- package/dist/orchestrator/cache-manager.d.ts.map +0 -1
- package/dist/orchestrator/cache-manager.js +0 -62
- package/dist/orchestrator/cache-manager.js.map +0 -1
- package/dist/orchestrator/pipeline.d.ts +0 -56
- package/dist/orchestrator/pipeline.d.ts.map +0 -1
- package/dist/orchestrator/pipeline.js +0 -298
- package/dist/orchestrator/pipeline.js.map +0 -1
- package/dist/orchestrator/reporter.d.ts +0 -15
- package/dist/orchestrator/reporter.d.ts.map +0 -1
- package/dist/orchestrator/reporter.js +0 -30
- package/dist/orchestrator/reporter.js.map +0 -1
- package/src/cli/commands/cache-clear.ts +0 -22
- package/src/cli/commands/full.ts +0 -35
- package/src/cli/commands/live-scan.ts +0 -82
- package/src/cli/commands/map.ts +0 -97
- package/src/cli/commands/validate.ts +0 -43
- package/src/cli/utils.ts +0 -106
- package/src/config/ai-providers.yaml +0 -56
- package/src/config/config-loader.ts +0 -248
- package/src/config/config-schema.ts +0 -148
- package/src/config/default.config.yaml +0 -107
- package/src/config/framework.config.yaml +0 -52
- package/src/config/routes.yaml +0 -31
- package/src/core/live-scanner/config-reader.ts +0 -57
- package/src/core/live-scanner/element-finder.ts +0 -541
- package/src/core/live-scanner/index.ts +0 -7
- package/src/core/live-scanner/matrix-reader.ts +0 -65
- package/src/core/live-scanner/matrix-writer.ts +0 -77
- package/src/core/live-scanner/role-fallback.ts +0 -43
- package/src/core/live-scanner/scanner.ts +0 -254
- package/src/core/live-scanner/step-replayer.ts +0 -306
- package/src/core/live-scanner/types.ts +0 -58
- package/src/core/selector-base/annotation-handler.ts +0 -127
- package/src/core/selector-base/base-generator.ts +0 -234
- package/src/core/selector-base/gherkin-parser.ts +0 -57
- package/src/core/selector-mapper/priority-mapper.ts +0 -607
- package/src/core/ui-scanner/heuristics/base-heuristic.ts +0 -216
- package/src/core/ui-scanner/react-scanner.ts +0 -156
- package/src/core/ui-scanner/scanner-interface.ts +0 -133
- package/src/core/ui-scanner/strict-scanner.ts +0 -629
- package/src/core/validator/data-validator.ts +0 -202
- package/src/core/validator/feature-validator.ts +0 -176
- package/src/core/validator/index.ts +0 -57
- package/src/core/validator/screen-validator.ts +0 -209
- package/src/core/validator/selector-validator.ts +0 -209
- package/src/external/ai-provider.ts +0 -90
- package/src/external/anthropic-provider.ts +0 -114
- package/src/generators/README.md +0 -410
- package/src/generators/cache/cache-manager.ts +0 -322
- package/src/generators/dsl-writer/index.ts +0 -253
- package/src/generators/scaffold-generator/index.ts +0 -1019
- package/src/generators/selector-mapper/ai-mapper.ts +0 -528
- package/src/generators/selector-mapper/hybrid-mapper.ts +0 -427
- package/src/generators/selector-mapper/index.ts +0 -10
- package/src/generators/selector-mapper/intelligent-mapper.ts +0 -530
- package/src/generators/test-generator/ai-step-mapper.ts +0 -224
- package/src/generators/test-generator/auth-setup-generator.ts +0 -59
- package/src/generators/test-generator/patterns/legacy-patterns.ts +0 -104
- package/src/generators/test-generator/templates/auth-setup.ts.hbs +0 -36
- package/src/generators/ui-model-builder/deep-scanner.ts +0 -1244
- package/src/generators/ui-model-builder/enhanced-deep-scanner.ts +0 -731
- package/src/generators/ui-model-builder/react-scanner.ts +0 -959
- package/src/orchestrator/cache-manager.ts +0 -32
- package/src/orchestrator/pipeline.ts +0 -354
- package/src/orchestrator/reporter.ts +0 -36
|
@@ -1,486 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Element Finder
|
|
4
|
-
*
|
|
5
|
-
* Searches for elements using Playwright's own locator strategies in priority order:
|
|
6
|
-
* ① getByTestId — data-testid attribute
|
|
7
|
-
* ② getByRole — ARIA role + accessible name (exact match, then fallback roles)
|
|
8
|
-
* ③ getByLabel — associated <label> text
|
|
9
|
-
* ④ getByPlaceholder — placeholder attribute
|
|
10
|
-
* ⑤ getByText — visible text content
|
|
11
|
-
*
|
|
12
|
-
* The result records WHICH Playwright strategy found the element,
|
|
13
|
-
* so `map` can generate the correct locator code.
|
|
14
|
-
*/
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.findElement = findElement;
|
|
17
|
-
const role_fallback_1 = require("./role-fallback");
|
|
18
|
-
/**
|
|
19
|
-
* Find an element on the page using cascading Playwright locator strategies.
|
|
20
|
-
*/
|
|
21
|
-
async function findElement(page, gherkinRef, gherkinType, nth = 0, context = 'page') {
|
|
22
|
-
const namePattern = new RegExp(escapeRegex(gherkinRef), 'i');
|
|
23
|
-
const result = await cascadingSearch(page, gherkinRef, gherkinType, namePattern, nth, context);
|
|
24
|
-
if (!result) {
|
|
25
|
-
return buildUnresolvedElement(gherkinRef, gherkinType);
|
|
26
|
-
}
|
|
27
|
-
const attrs = await extractElementAttributes(result.locator);
|
|
28
|
-
// Use Playwright's computed accessible name (includes alt text, aria-label, etc.)
|
|
29
|
-
// This matches what getByRole/getByText actually see, unlike textContent
|
|
30
|
-
let playwrightName = '';
|
|
31
|
-
try {
|
|
32
|
-
playwrightName = await result.locator.evaluate((el) => {
|
|
33
|
-
// computedRole/computedLabel not available in all browsers, fallback to aria
|
|
34
|
-
const raw = el.computedName
|
|
35
|
-
|| el.getAttribute('aria-label')
|
|
36
|
-
|| el.textContent?.trim()?.substring(0, 100)
|
|
37
|
-
|| '';
|
|
38
|
-
return raw.replace(/[\n\r\t]/g, ' ').replace(/\s+/g, ' ').trim();
|
|
39
|
-
});
|
|
40
|
-
// Better approach: use Playwright's accessibility snapshot
|
|
41
|
-
const ariaSnapshot = await result.locator.ariaSnapshot();
|
|
42
|
-
// Parse accessible name from snapshot (format: "- role \"name\"" or "- role \"name\": ...")
|
|
43
|
-
// Regex handles escaped quotes (\") inside the name string
|
|
44
|
-
const nameMatch = ariaSnapshot?.match(/"((?:[^"\\]|\\.)*)"/);
|
|
45
|
-
if (nameMatch) {
|
|
46
|
-
playwrightName = unescapeAriaSnapshot(nameMatch[1]);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
playwrightName = attrs.accessibleName || gherkinRef;
|
|
51
|
-
}
|
|
52
|
-
const actualName = playwrightName || attrs.accessibleName || gherkinRef;
|
|
53
|
-
const isExactMatch = actualName.toLowerCase().trim() === gherkinRef.toLowerCase().trim();
|
|
54
|
-
return {
|
|
55
|
-
gherkinRef,
|
|
56
|
-
gherkinType,
|
|
57
|
-
selectorType: result.selectorType,
|
|
58
|
-
selectorValue: result.selectorValue,
|
|
59
|
-
role: result.role,
|
|
60
|
-
name: actualName,
|
|
61
|
-
testid: attrs.testid,
|
|
62
|
-
tag: attrs.tag,
|
|
63
|
-
contenteditable: attrs.contenteditable,
|
|
64
|
-
placeholder: attrs.placeholder,
|
|
65
|
-
label: attrs.label,
|
|
66
|
-
context: 'page',
|
|
67
|
-
matchMethod: result.matchMethod,
|
|
68
|
-
exact: isExactMatch,
|
|
69
|
-
warning: result.warning,
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
async function cascadingSearch(page, gherkinRef, gherkinType, namePattern, nth, context = 'page') {
|
|
73
|
-
// ① getByTestId
|
|
74
|
-
const testidResult = await tryTestId(page, gherkinRef, nth);
|
|
75
|
-
if (testidResult)
|
|
76
|
-
return testidResult;
|
|
77
|
-
// For text-only types (text, message, error), skip role and go to text
|
|
78
|
-
if (!(0, role_fallback_1.isTextOnlyType)(gherkinType)) {
|
|
79
|
-
// ② getByRole — exact role match
|
|
80
|
-
const roles = (0, role_fallback_1.getRoleFallbacks)(gherkinType);
|
|
81
|
-
if (roles.length > 0) {
|
|
82
|
-
const exactResult = await tryRole(page, roles[0], gherkinRef, namePattern, nth);
|
|
83
|
-
if (exactResult) {
|
|
84
|
-
return {
|
|
85
|
-
...exactResult,
|
|
86
|
-
matchMethod: 'exact_role',
|
|
87
|
-
warning: null,
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
// ③ getByRole — fallback roles
|
|
91
|
-
for (let i = 1; i < roles.length; i++) {
|
|
92
|
-
const fallbackResult = await tryRole(page, roles[i], gherkinRef, namePattern, nth);
|
|
93
|
-
if (fallbackResult) {
|
|
94
|
-
return {
|
|
95
|
-
...fallbackResult,
|
|
96
|
-
matchMethod: 'role_fallback',
|
|
97
|
-
warning: `Gherkin says '${gherkinType}' but found role '${roles[i]}'`,
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
// ④ getByLabel — for form elements
|
|
103
|
-
const labelResult = await tryLabel(page, gherkinRef, namePattern, nth);
|
|
104
|
-
if (labelResult)
|
|
105
|
-
return labelResult;
|
|
106
|
-
// ⑤ getByPlaceholder — for input fields
|
|
107
|
-
const placeholderResult = await tryPlaceholder(page, gherkinRef, namePattern, nth);
|
|
108
|
-
if (placeholderResult)
|
|
109
|
-
return placeholderResult;
|
|
110
|
-
// ⑤.5 contenteditable — for rich text editors (textarea/textbox/field types)
|
|
111
|
-
// When role match fails (editor has role="textbox" but no accessible name),
|
|
112
|
-
// try to find a [contenteditable="true"] element scoped to the current context
|
|
113
|
-
if (isEditableType(gherkinType)) {
|
|
114
|
-
const ceResult = await tryContentEditable(page, nth, context);
|
|
115
|
-
if (ceResult)
|
|
116
|
-
return ceResult;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// ⑥ getByText — final fallback
|
|
120
|
-
const textResult = await tryText(page, gherkinRef, namePattern, nth);
|
|
121
|
-
if (textResult)
|
|
122
|
-
return textResult;
|
|
123
|
-
return null;
|
|
124
|
-
}
|
|
125
|
-
// ① getByTestId
|
|
126
|
-
async function tryTestId(page, ref, nth) {
|
|
127
|
-
const normalized = ref.toLowerCase().replace(/[\s_-]+/g, '-');
|
|
128
|
-
const patterns = [normalized, ref.toLowerCase().replace(/\s+/g, '')];
|
|
129
|
-
for (const pattern of patterns) {
|
|
130
|
-
try {
|
|
131
|
-
const locator = page.locator(`[data-testid*="${pattern}" i]`);
|
|
132
|
-
const count = await locator.count();
|
|
133
|
-
if (count > 0) {
|
|
134
|
-
const target = nth > 0 ? locator.nth(nth) : locator.first();
|
|
135
|
-
if (await target.isVisible({ timeout: 3000 })) {
|
|
136
|
-
const testid = await target.getAttribute('data-testid');
|
|
137
|
-
return {
|
|
138
|
-
locator: target,
|
|
139
|
-
selectorType: 'testid',
|
|
140
|
-
selectorValue: testid || pattern,
|
|
141
|
-
role: '',
|
|
142
|
-
matchMethod: 'testid',
|
|
143
|
-
warning: null,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
catch {
|
|
149
|
-
// Continue
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return null;
|
|
153
|
-
}
|
|
154
|
-
// ② ③ getByRole — regex first, exact disambiguation when ambiguous
|
|
155
|
-
async function tryRole(page, role, gherkinRef, namePattern, nth) {
|
|
156
|
-
try {
|
|
157
|
-
const locator = page.getByRole(role, { name: namePattern });
|
|
158
|
-
const count = await locator.count();
|
|
159
|
-
if (count === 0)
|
|
160
|
-
return null;
|
|
161
|
-
if (count === 1) {
|
|
162
|
-
// Single match — use directly, zero overhead
|
|
163
|
-
const target = nth > 0 ? locator.nth(nth) : locator.first();
|
|
164
|
-
if (await target.isVisible({ timeout: 3000 })) {
|
|
165
|
-
// Get the actual accessible name for the selector
|
|
166
|
-
const accessibleName = await target.evaluate((el) => el.getAttribute('aria-label') || el.textContent?.trim()?.substring(0, 100) || '');
|
|
167
|
-
return {
|
|
168
|
-
locator: target,
|
|
169
|
-
selectorType: 'role',
|
|
170
|
-
selectorValue: role,
|
|
171
|
-
role: role,
|
|
172
|
-
matchMethod: 'exact_role',
|
|
173
|
-
warning: null,
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
// Multiple matches — try exact to disambiguate
|
|
179
|
-
try {
|
|
180
|
-
const exactLocator = page.getByRole(role, { name: gherkinRef, exact: true });
|
|
181
|
-
const exactCount = await exactLocator.count();
|
|
182
|
-
if (exactCount > 0) {
|
|
183
|
-
const target = nth > 0 ? exactLocator.nth(nth) : exactLocator.first();
|
|
184
|
-
if (await target.isVisible({ timeout: 3000 })) {
|
|
185
|
-
return {
|
|
186
|
-
locator: target,
|
|
187
|
-
selectorType: 'role',
|
|
188
|
-
selectorValue: role,
|
|
189
|
-
role: role,
|
|
190
|
-
matchMethod: 'exact_role',
|
|
191
|
-
warning: null,
|
|
192
|
-
};
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
catch {
|
|
197
|
-
// Exact disambiguation failed
|
|
198
|
-
}
|
|
199
|
-
// Fall back to first regex match
|
|
200
|
-
const target = nth > 0 ? locator.nth(nth) : locator.first();
|
|
201
|
-
if (await target.isVisible({ timeout: 3000 })) {
|
|
202
|
-
// Get the actual accessible name for the selector
|
|
203
|
-
const accessibleName = await target.evaluate((el) => el.getAttribute('aria-label') || el.textContent?.trim()?.substring(0, 100) || '');
|
|
204
|
-
return {
|
|
205
|
-
locator: target,
|
|
206
|
-
selectorType: 'role',
|
|
207
|
-
selectorValue: role,
|
|
208
|
-
role: role,
|
|
209
|
-
matchMethod: 'exact_role',
|
|
210
|
-
warning: null,
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
catch {
|
|
216
|
-
// Role not found
|
|
217
|
-
}
|
|
218
|
-
return null;
|
|
219
|
-
}
|
|
220
|
-
// ④ getByLabel — regex first, exact disambiguation when ambiguous
|
|
221
|
-
async function tryLabel(page, gherkinRef, namePattern, nth) {
|
|
222
|
-
try {
|
|
223
|
-
const locator = page.getByLabel(namePattern);
|
|
224
|
-
const count = await locator.count();
|
|
225
|
-
if (count === 0)
|
|
226
|
-
return null;
|
|
227
|
-
if (count > 1) {
|
|
228
|
-
// Multiple matches — try exact to disambiguate
|
|
229
|
-
try {
|
|
230
|
-
const exactLocator = page.getByLabel(gherkinRef, { exact: true });
|
|
231
|
-
const exactCount = await exactLocator.count();
|
|
232
|
-
if (exactCount > 0) {
|
|
233
|
-
const target = nth > 0 ? exactLocator.nth(nth) : exactLocator.first();
|
|
234
|
-
if (await target.isVisible({ timeout: 3000 })) {
|
|
235
|
-
return {
|
|
236
|
-
locator: target,
|
|
237
|
-
selectorType: 'label',
|
|
238
|
-
selectorValue: '',
|
|
239
|
-
role: '',
|
|
240
|
-
matchMethod: 'label',
|
|
241
|
-
warning: null,
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
catch {
|
|
247
|
-
// Exact disambiguation failed
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
// Single match or exact failed — use first regex match
|
|
251
|
-
const target = nth > 0 ? locator.nth(nth) : locator.first();
|
|
252
|
-
if (await target.isVisible({ timeout: 3000 })) {
|
|
253
|
-
return {
|
|
254
|
-
locator: target,
|
|
255
|
-
selectorType: 'label',
|
|
256
|
-
selectorValue: '',
|
|
257
|
-
role: '',
|
|
258
|
-
matchMethod: 'label',
|
|
259
|
-
warning: null,
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
catch {
|
|
264
|
-
// Label not found
|
|
265
|
-
}
|
|
266
|
-
return null;
|
|
267
|
-
}
|
|
268
|
-
// ⑤ getByPlaceholder — regex first, exact disambiguation when ambiguous
|
|
269
|
-
async function tryPlaceholder(page, gherkinRef, namePattern, nth) {
|
|
270
|
-
try {
|
|
271
|
-
const locator = page.getByPlaceholder(namePattern);
|
|
272
|
-
const count = await locator.count();
|
|
273
|
-
if (count === 0)
|
|
274
|
-
return null;
|
|
275
|
-
if (count > 1) {
|
|
276
|
-
// Multiple matches — try exact to disambiguate
|
|
277
|
-
try {
|
|
278
|
-
const exactLocator = page.getByPlaceholder(gherkinRef, { exact: true });
|
|
279
|
-
const exactCount = await exactLocator.count();
|
|
280
|
-
if (exactCount > 0) {
|
|
281
|
-
const target = nth > 0 ? exactLocator.nth(nth) : exactLocator.first();
|
|
282
|
-
if (await target.isVisible({ timeout: 3000 })) {
|
|
283
|
-
const rawPlaceholder = await target.getAttribute('placeholder');
|
|
284
|
-
return {
|
|
285
|
-
locator: target,
|
|
286
|
-
selectorType: 'placeholder',
|
|
287
|
-
selectorValue: sanitizeText(rawPlaceholder || ''),
|
|
288
|
-
role: '',
|
|
289
|
-
matchMethod: 'placeholder',
|
|
290
|
-
warning: null,
|
|
291
|
-
};
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
catch {
|
|
296
|
-
// Exact disambiguation failed
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
// Single match or exact failed — use first regex match
|
|
300
|
-
const target = nth > 0 ? locator.nth(nth) : locator.first();
|
|
301
|
-
if (await target.isVisible({ timeout: 3000 })) {
|
|
302
|
-
const rawPlaceholder = await target.getAttribute('placeholder');
|
|
303
|
-
return {
|
|
304
|
-
locator: target,
|
|
305
|
-
selectorType: 'placeholder',
|
|
306
|
-
selectorValue: sanitizeText(rawPlaceholder || ''),
|
|
307
|
-
role: '',
|
|
308
|
-
matchMethod: 'placeholder',
|
|
309
|
-
warning: null,
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
catch {
|
|
314
|
-
// Placeholder not found
|
|
315
|
-
}
|
|
316
|
-
return null;
|
|
317
|
-
}
|
|
318
|
-
/**
|
|
319
|
-
* Check if gherkinType is an editable/input type that could be a contenteditable div
|
|
320
|
-
*/
|
|
321
|
-
function isEditableType(gherkinType) {
|
|
322
|
-
const normalized = gherkinType.toLowerCase().trim();
|
|
323
|
-
return normalized === 'textarea' || normalized === 'textbox' || normalized === 'field' || normalized === 'editor';
|
|
324
|
-
}
|
|
325
|
-
// ⑤.5 contenteditable — for rich text editors
|
|
326
|
-
// Scoped to current context (dialog/page) to avoid matching wrong editor.
|
|
327
|
-
// The nth from Gherkin refers to text matches, not contenteditable count,
|
|
328
|
-
// so we try the requested nth first, then fall back to first match.
|
|
329
|
-
async function tryContentEditable(page, nth, context) {
|
|
330
|
-
try {
|
|
331
|
-
// Scope the search to the current context
|
|
332
|
-
const root = context === 'dialog' ? page.getByRole('dialog') : page;
|
|
333
|
-
const locator = root.locator('[contenteditable="true"]');
|
|
334
|
-
const count = await locator.count();
|
|
335
|
-
if (count === 0)
|
|
336
|
-
return null;
|
|
337
|
-
// Try requested nth first, then fall back to first visible
|
|
338
|
-
const candidates = nth > 0 && count > nth ? [nth, 0] : [0];
|
|
339
|
-
for (const idx of candidates) {
|
|
340
|
-
const target = idx > 0 ? locator.nth(idx) : locator.first();
|
|
341
|
-
if (await target.isVisible({ timeout: 3000 })) {
|
|
342
|
-
return {
|
|
343
|
-
locator: target,
|
|
344
|
-
selectorType: 'locator',
|
|
345
|
-
selectorValue: '[contenteditable="true"]',
|
|
346
|
-
role: 'textbox',
|
|
347
|
-
matchMethod: 'contenteditable',
|
|
348
|
-
warning: count > 1
|
|
349
|
-
? `${count} contenteditable elements in ${context}, using index ${idx}. Use nth in Gherkin to disambiguate.`
|
|
350
|
-
: null,
|
|
351
|
-
};
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
catch {
|
|
356
|
-
// Not found
|
|
357
|
-
}
|
|
358
|
-
return null;
|
|
359
|
-
}
|
|
360
|
-
// ⑥ getByText — regex first, exact disambiguation when ambiguous
|
|
361
|
-
async function tryText(page, gherkinRef, namePattern, nth) {
|
|
362
|
-
try {
|
|
363
|
-
const locator = page.getByText(namePattern);
|
|
364
|
-
const count = await locator.count();
|
|
365
|
-
if (count === 0)
|
|
366
|
-
return null;
|
|
367
|
-
if (count > 1) {
|
|
368
|
-
// Multiple matches — try exact to disambiguate
|
|
369
|
-
try {
|
|
370
|
-
const exactLocator = page.getByText(gherkinRef, { exact: true });
|
|
371
|
-
const exactCount = await exactLocator.count();
|
|
372
|
-
if (exactCount > 0) {
|
|
373
|
-
const target = nth > 0 ? exactLocator.nth(nth) : exactLocator.first();
|
|
374
|
-
if (await target.isVisible({ timeout: 3000 })) {
|
|
375
|
-
return {
|
|
376
|
-
locator: target,
|
|
377
|
-
selectorType: 'text',
|
|
378
|
-
selectorValue: '',
|
|
379
|
-
role: '',
|
|
380
|
-
matchMethod: 'text_only',
|
|
381
|
-
warning: null,
|
|
382
|
-
};
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
catch {
|
|
387
|
-
// Exact disambiguation failed
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
// Single match or exact failed — use first regex match
|
|
391
|
-
const target = nth > 0 ? locator.nth(nth) : locator.first();
|
|
392
|
-
if (await target.isVisible({ timeout: 3000 })) {
|
|
393
|
-
return {
|
|
394
|
-
locator: target,
|
|
395
|
-
selectorType: 'text',
|
|
396
|
-
selectorValue: '',
|
|
397
|
-
role: '',
|
|
398
|
-
matchMethod: 'text_only',
|
|
399
|
-
warning: null,
|
|
400
|
-
};
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
catch {
|
|
404
|
-
// Text not found
|
|
405
|
-
}
|
|
406
|
-
return null;
|
|
407
|
-
}
|
|
408
|
-
async function extractElementAttributes(locator) {
|
|
409
|
-
try {
|
|
410
|
-
return await locator.evaluate((el) => {
|
|
411
|
-
// Inline sanitizer — browser context can't access Node functions
|
|
412
|
-
const clean = (s) => (s || '').replace(/[\n\r\t]/g, ' ').replace(/\s+/g, ' ').trim();
|
|
413
|
-
// Find associated label
|
|
414
|
-
let label = null;
|
|
415
|
-
if (el.id) {
|
|
416
|
-
const labelEl = el.ownerDocument.querySelector(`label[for="${el.id}"]`);
|
|
417
|
-
if (labelEl)
|
|
418
|
-
label = clean(labelEl.textContent) || null;
|
|
419
|
-
}
|
|
420
|
-
if (!label && el.closest('label')) {
|
|
421
|
-
label = clean(el.closest('label')?.textContent) || null;
|
|
422
|
-
}
|
|
423
|
-
// Detect contenteditable: check element itself and ancestors (rich text editors
|
|
424
|
-
// often have contenteditable on a parent div wrapping the editable area)
|
|
425
|
-
const isContentEditable = el.getAttribute('contenteditable') === 'true'
|
|
426
|
-
|| el.isContentEditable;
|
|
427
|
-
return {
|
|
428
|
-
testid: el.getAttribute('data-testid'),
|
|
429
|
-
tag: el.tagName.toLowerCase(),
|
|
430
|
-
contenteditable: isContentEditable,
|
|
431
|
-
accessibleName: clean(el.getAttribute('aria-label') || el.textContent?.trim()?.substring(0, 100)),
|
|
432
|
-
placeholder: clean(el.getAttribute('placeholder')) || null,
|
|
433
|
-
label,
|
|
434
|
-
};
|
|
435
|
-
});
|
|
436
|
-
}
|
|
437
|
-
catch {
|
|
438
|
-
return { testid: null, tag: 'unknown', contenteditable: false, accessibleName: '', placeholder: null, label: null };
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
function buildUnresolvedElement(gherkinRef, gherkinType) {
|
|
442
|
-
return {
|
|
443
|
-
gherkinRef,
|
|
444
|
-
gherkinType,
|
|
445
|
-
selectorType: '',
|
|
446
|
-
selectorValue: '',
|
|
447
|
-
role: '',
|
|
448
|
-
name: gherkinRef,
|
|
449
|
-
testid: null,
|
|
450
|
-
tag: '',
|
|
451
|
-
contenteditable: false,
|
|
452
|
-
placeholder: null,
|
|
453
|
-
label: null,
|
|
454
|
-
context: 'page',
|
|
455
|
-
matchMethod: 'unresolved',
|
|
456
|
-
exact: false,
|
|
457
|
-
warning: 'Element not found on page',
|
|
458
|
-
};
|
|
459
|
-
}
|
|
460
|
-
/**
|
|
461
|
-
* Normalize a DOM text value for YAML output:
|
|
462
|
-
* collapse real newlines/tabs/carriage-returns into spaces, then deduplicate whitespace.
|
|
463
|
-
* Runs in both browser evaluate() and Node context.
|
|
464
|
-
*/
|
|
465
|
-
function sanitizeText(str) {
|
|
466
|
-
return str.replace(/[\n\r\t]/g, ' ').replace(/\s+/g, ' ').trim();
|
|
467
|
-
}
|
|
468
|
-
/**
|
|
469
|
-
* Unescape a string extracted from Playwright's ariaSnapshot() output.
|
|
470
|
-
* ariaSnapshot encodes special chars as literal escape sequences:
|
|
471
|
-
* \n → newline, \t → tab, \\ → backslash, \" → quote
|
|
472
|
-
* We unescape them then normalize whitespace.
|
|
473
|
-
*/
|
|
474
|
-
function unescapeAriaSnapshot(str) {
|
|
475
|
-
return str
|
|
476
|
-
.replace(/\\n/g, ' ')
|
|
477
|
-
.replace(/\\t/g, ' ')
|
|
478
|
-
.replace(/\\"/g, '"')
|
|
479
|
-
.replace(/\\\\/g, '\\')
|
|
480
|
-
.replace(/\s+/g, ' ')
|
|
481
|
-
.trim();
|
|
482
|
-
}
|
|
483
|
-
function escapeRegex(str) {
|
|
484
|
-
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
485
|
-
}
|
|
486
|
-
//# sourceMappingURL=element-finder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element-finder.js","sourceRoot":"","sources":["../../../src/core/live-scanner/element-finder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { LiveScanner } from './scanner';
|
|
2
|
-
export { findElement } from './element-finder';
|
|
3
|
-
export { getRoleFallbacks, isTextOnlyType } from './role-fallback';
|
|
4
|
-
export { writeMatrix } from './matrix-writer';
|
|
5
|
-
export { readMatrix, mergeMatrixElements } from './matrix-reader';
|
|
6
|
-
export { readBaseUrlFromPlaywrightConfig } from './config-reader';
|
|
7
|
-
export * from './types';
|
|
8
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/live-scanner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAClE,cAAc,SAAS,CAAC"}
|
|
@@ -1,33 +0,0 @@
|
|
|
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.readBaseUrlFromPlaywrightConfig = exports.mergeMatrixElements = exports.readMatrix = exports.writeMatrix = exports.isTextOnlyType = exports.getRoleFallbacks = exports.findElement = exports.LiveScanner = void 0;
|
|
18
|
-
var scanner_1 = require("./scanner");
|
|
19
|
-
Object.defineProperty(exports, "LiveScanner", { enumerable: true, get: function () { return scanner_1.LiveScanner; } });
|
|
20
|
-
var element_finder_1 = require("./element-finder");
|
|
21
|
-
Object.defineProperty(exports, "findElement", { enumerable: true, get: function () { return element_finder_1.findElement; } });
|
|
22
|
-
var role_fallback_1 = require("./role-fallback");
|
|
23
|
-
Object.defineProperty(exports, "getRoleFallbacks", { enumerable: true, get: function () { return role_fallback_1.getRoleFallbacks; } });
|
|
24
|
-
Object.defineProperty(exports, "isTextOnlyType", { enumerable: true, get: function () { return role_fallback_1.isTextOnlyType; } });
|
|
25
|
-
var matrix_writer_1 = require("./matrix-writer");
|
|
26
|
-
Object.defineProperty(exports, "writeMatrix", { enumerable: true, get: function () { return matrix_writer_1.writeMatrix; } });
|
|
27
|
-
var matrix_reader_1 = require("./matrix-reader");
|
|
28
|
-
Object.defineProperty(exports, "readMatrix", { enumerable: true, get: function () { return matrix_reader_1.readMatrix; } });
|
|
29
|
-
Object.defineProperty(exports, "mergeMatrixElements", { enumerable: true, get: function () { return matrix_reader_1.mergeMatrixElements; } });
|
|
30
|
-
var config_reader_1 = require("./config-reader");
|
|
31
|
-
Object.defineProperty(exports, "readBaseUrlFromPlaywrightConfig", { enumerable: true, get: function () { return config_reader_1.readBaseUrlFromPlaywrightConfig; } });
|
|
32
|
-
__exportStar(require("./types"), exports);
|
|
33
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/live-scanner/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qCAAwC;AAA/B,sGAAA,WAAW,OAAA;AACpB,mDAA+C;AAAtC,6GAAA,WAAW,OAAA;AACpB,iDAAmE;AAA1D,iHAAA,gBAAgB,OAAA;AAAE,+GAAA,cAAc,OAAA;AACzC,iDAA8C;AAArC,4GAAA,WAAW,OAAA;AACpB,iDAAkE;AAAzD,2GAAA,UAAU,OAAA;AAAE,oHAAA,mBAAmB,OAAA;AACxC,iDAAkE;AAAzD,gIAAA,+BAA+B,OAAA;AACxC,0CAAwB"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Matrix Reader
|
|
3
|
-
* Loads and parses a .live-scan.yaml file for consumption by the map command.
|
|
4
|
-
* Merges elements across scenarios (first match wins).
|
|
5
|
-
*/
|
|
6
|
-
import { LiveElement, LiveScanResult } from './types';
|
|
7
|
-
/**
|
|
8
|
-
* Read a .live-scan.yaml file and return the parsed result.
|
|
9
|
-
* Returns null if file doesn't exist.
|
|
10
|
-
*/
|
|
11
|
-
export declare function readMatrix(filePath: string): LiveScanResult | null;
|
|
12
|
-
/**
|
|
13
|
-
* Merge all elements across scenarios into a flat map.
|
|
14
|
-
* First successful (non-unresolved) match wins for duplicate keys.
|
|
15
|
-
*/
|
|
16
|
-
export declare function mergeMatrixElements(result: LiveScanResult): Record<string, LiveElement>;
|
|
17
|
-
//# sourceMappingURL=matrix-reader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"matrix-reader.d.ts","sourceRoot":"","sources":["../../../src/core/live-scanner/matrix-reader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAQlE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAqCvF"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Matrix Reader
|
|
4
|
-
* Loads and parses a .live-scan.yaml file for consumption by the map command.
|
|
5
|
-
* Merges elements across scenarios (first match wins).
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.readMatrix = readMatrix;
|
|
9
|
-
exports.mergeMatrixElements = mergeMatrixElements;
|
|
10
|
-
const yaml_io_1 = require("../../utils/yaml-io");
|
|
11
|
-
/**
|
|
12
|
-
* Read a .live-scan.yaml file and return the parsed result.
|
|
13
|
-
* Returns null if file doesn't exist.
|
|
14
|
-
*/
|
|
15
|
-
function readMatrix(filePath) {
|
|
16
|
-
const parsed = (0, yaml_io_1.readYamlIfExists)(filePath);
|
|
17
|
-
if (!parsed || !parsed.scenarios) {
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
return parsed;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Merge all elements across scenarios into a flat map.
|
|
24
|
-
* First successful (non-unresolved) match wins for duplicate keys.
|
|
25
|
-
*/
|
|
26
|
-
function mergeMatrixElements(result) {
|
|
27
|
-
const merged = {};
|
|
28
|
-
for (const scenario of Object.values(result.scenarios)) {
|
|
29
|
-
const elements = scenario.elements;
|
|
30
|
-
if (!elements)
|
|
31
|
-
continue;
|
|
32
|
-
for (const [key, raw] of Object.entries(elements)) {
|
|
33
|
-
const el = raw;
|
|
34
|
-
// Convert from YAML snake_case to interface camelCase
|
|
35
|
-
const element = {
|
|
36
|
-
gherkinRef: el.name || key,
|
|
37
|
-
gherkinType: el.gherkin_type || '',
|
|
38
|
-
selectorType: el.selector_type || '',
|
|
39
|
-
selectorValue: el.selector_value || '',
|
|
40
|
-
role: el.role || '',
|
|
41
|
-
name: el.name || '',
|
|
42
|
-
testid: el.testid || null,
|
|
43
|
-
tag: el.tag || '',
|
|
44
|
-
contenteditable: el.contenteditable === true,
|
|
45
|
-
placeholder: el.placeholder || null,
|
|
46
|
-
label: el.label || null,
|
|
47
|
-
context: el.context || 'page',
|
|
48
|
-
matchMethod: el.match_method || 'unresolved',
|
|
49
|
-
exact: el.exact === true,
|
|
50
|
-
warning: el.warning || null,
|
|
51
|
-
};
|
|
52
|
-
// First non-unresolved match wins
|
|
53
|
-
if (!merged[key] || (merged[key].matchMethod === 'unresolved' && element.matchMethod !== 'unresolved')) {
|
|
54
|
-
merged[key] = element;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return merged;
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=matrix-reader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"matrix-reader.js","sourceRoot":"","sources":["../../../src/core/live-scanner/matrix-reader.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AASH,gCAQC;AAMD,kDAqCC;AA1DD,iDAAuD;AAGvD;;;GAGG;AACH,SAAgB,UAAU,CAAC,QAAgB;IACzC,MAAM,MAAM,GAAG,IAAA,0BAAgB,EAAM,QAAQ,CAAC,CAAC;IAE/C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAwB,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,MAAsB;IACxD,MAAM,MAAM,GAAgC,EAAE,CAAC;IAE/C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAI,QAAgB,CAAC,QAAQ,CAAC;QAC5C,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClD,MAAM,EAAE,GAAG,GAAU,CAAC;YAEtB,sDAAsD;YACtD,MAAM,OAAO,GAAgB;gBAC3B,UAAU,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG;gBAC1B,WAAW,EAAE,EAAE,CAAC,YAAY,IAAI,EAAE;gBAClC,YAAY,EAAE,EAAE,CAAC,aAAa,IAAI,EAAE;gBACpC,aAAa,EAAE,EAAE,CAAC,cAAc,IAAI,EAAE;gBACtC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE;gBACnB,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE;gBACnB,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI;gBACzB,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE;gBACjB,eAAe,EAAE,EAAE,CAAC,eAAe,KAAK,IAAI;gBAC5C,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,IAAI;gBACnC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI;gBACvB,OAAO,EAAG,EAAE,CAAC,OAAe,IAAI,MAAM;gBACtC,WAAW,EAAG,EAAE,CAAC,YAAoB,IAAI,YAAY;gBACrD,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI;gBACxB,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,IAAI;aAC5B,CAAC;YAEF,kCAAkC;YAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,YAAY,IAAI,OAAO,CAAC,WAAW,KAAK,YAAY,CAAC,EAAE,CAAC;gBACvG,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|