@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
|
@@ -9,6 +9,7 @@ import * as path from 'path';
|
|
|
9
9
|
export interface ScreenOptions {
|
|
10
10
|
name: string;
|
|
11
11
|
path?: string;
|
|
12
|
+
feature?: string;
|
|
12
13
|
description?: string;
|
|
13
14
|
}
|
|
14
15
|
|
|
@@ -25,20 +26,23 @@ export class ScreenManager {
|
|
|
25
26
|
* Add a new screen definition
|
|
26
27
|
*/
|
|
27
28
|
async addScreen(options: ScreenOptions): Promise<void> {
|
|
28
|
-
console.log(`š± Adding screen: ${options.name}...\n`);
|
|
29
|
-
|
|
30
29
|
// Validate screen name
|
|
31
30
|
this.validateScreenName(options.name);
|
|
32
31
|
|
|
33
32
|
// Normalize screen name for directory
|
|
34
33
|
const screenName = this.normalizeScreenName(options.name);
|
|
35
34
|
const screenDir = path.join(this.screensDir, screenName);
|
|
36
|
-
|
|
37
|
-
// Derive filename
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
|
|
36
|
+
// Derive filename: --feature flag creates "<screen>-<feature>" name
|
|
37
|
+
let filename: string;
|
|
38
|
+
if (options.feature) {
|
|
39
|
+
filename = `${screenName}-${this.normalizeScreenName(options.feature)}`;
|
|
40
|
+
} else if (options.path) {
|
|
41
|
+
filename = this.extractFilenameFromPath(options.path);
|
|
42
|
+
} else {
|
|
43
|
+
filename = screenName;
|
|
44
|
+
}
|
|
45
|
+
|
|
42
46
|
// Create directory structure
|
|
43
47
|
const featuresDir = path.join(screenDir, 'features');
|
|
44
48
|
const selectorsDir = path.join(screenDir, 'selectors');
|
|
@@ -46,102 +50,92 @@ export class ScreenManager {
|
|
|
46
50
|
|
|
47
51
|
// File paths
|
|
48
52
|
const featurePath = path.join(featuresDir, `${filename}.feature`);
|
|
49
|
-
const
|
|
50
|
-
const
|
|
53
|
+
const selectorPath = path.join(selectorsDir, `${filename}.yaml`);
|
|
54
|
+
const testDataPath = path.join(testDataDir, `${filename}.yaml`);
|
|
51
55
|
|
|
52
56
|
// Smart behavior: Create dirs only if first file
|
|
53
57
|
const isFirstFile = !fs.existsSync(screenDir);
|
|
54
|
-
|
|
58
|
+
|
|
55
59
|
if (isFirstFile) {
|
|
56
|
-
console.log(
|
|
57
|
-
|
|
58
|
-
// Create directories
|
|
60
|
+
console.log(`Creating screen: ${options.name}\n`);
|
|
61
|
+
|
|
59
62
|
try {
|
|
60
63
|
if (!fs.existsSync(this.screensDir)) {
|
|
61
64
|
fs.mkdirSync(this.screensDir, { recursive: true });
|
|
62
|
-
console.log(`ā Created directory: qa/screens/\n`);
|
|
63
65
|
}
|
|
64
66
|
fs.mkdirSync(featuresDir, { recursive: true });
|
|
65
67
|
fs.mkdirSync(selectorsDir, { recursive: true });
|
|
66
68
|
fs.mkdirSync(testDataDir, { recursive: true });
|
|
67
69
|
} catch (error) {
|
|
68
|
-
console.error(
|
|
69
|
-
console.error(`
|
|
70
|
-
console.error(' Check file permissions and try again.\n');
|
|
70
|
+
console.error(`Error: Failed to create directories`);
|
|
71
|
+
console.error(` ${error instanceof Error ? error.message : String(error)}`);
|
|
71
72
|
process.exit(1);
|
|
72
73
|
}
|
|
73
74
|
} else {
|
|
74
|
-
console.log(
|
|
75
|
+
console.log(`Adding feature to screen: ${options.name}\n`);
|
|
75
76
|
}
|
|
76
|
-
|
|
77
|
+
|
|
77
78
|
// Check file existence to prevent overwrite
|
|
78
79
|
if (fs.existsSync(featurePath)) {
|
|
79
|
-
console.error(
|
|
80
|
-
console.error(`
|
|
81
|
-
console.error(`
|
|
80
|
+
console.error(`Error: Feature file "${filename}.feature" already exists`);
|
|
81
|
+
console.error(` Path: ${featurePath}`);
|
|
82
|
+
console.error(` Use a different --path or --feature value.`);
|
|
82
83
|
process.exit(1);
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
// Generate and write feature file
|
|
86
87
|
const featureContent = this.generateFeatureTemplate(options, filename);
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
88
|
+
fs.writeFileSync(featurePath, featureContent, 'utf-8');
|
|
89
|
+
|
|
90
|
+
// Generate empty selector YAML (with page entry)
|
|
91
|
+
if (!fs.existsSync(selectorPath)) {
|
|
92
|
+
const pagePath = options.path || `/${screenName}`;
|
|
93
|
+
fs.writeFileSync(selectorPath, [
|
|
94
|
+
`# ${options.name} Screen Selectors`,
|
|
95
|
+
`# Fill via AI or manually`,
|
|
96
|
+
``,
|
|
97
|
+
`${screenName}:`,
|
|
98
|
+
` type: 'page'`,
|
|
99
|
+
` value: '${pagePath}'`,
|
|
100
|
+
` nth: 0`,
|
|
101
|
+
``,
|
|
102
|
+
].join('\n'), 'utf-8');
|
|
93
103
|
}
|
|
94
104
|
|
|
95
|
-
// Generate
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
105
|
+
// Generate empty test-data YAML
|
|
106
|
+
if (!fs.existsSync(testDataPath)) {
|
|
107
|
+
fs.writeFileSync(testDataPath, [
|
|
108
|
+
`# ${options.name} Screen Test Data`,
|
|
109
|
+
`# Fill via AI or manually`,
|
|
110
|
+
`# Reference in features using {{variable}} syntax`,
|
|
111
|
+
``,
|
|
112
|
+
].join('\n'), 'utf-8');
|
|
103
113
|
}
|
|
104
114
|
|
|
105
|
-
//
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
console.error(`ā Error: Failed to create test data override file at ${testDataOverridePath}`);
|
|
111
|
-
console.error(` ${error instanceof Error ? error.message : String(error)}`);
|
|
112
|
-
process.exit(1);
|
|
113
|
-
}
|
|
115
|
+
// Display success
|
|
116
|
+
console.log(`Created files:`);
|
|
117
|
+
console.log(` ${path.relative(this.cwd, featurePath)}`);
|
|
118
|
+
console.log(` ${path.relative(this.cwd, selectorPath)}`);
|
|
119
|
+
console.log(` ${path.relative(this.cwd, testDataPath)}\n`);
|
|
114
120
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
this.displaySuccess(options.name, filename, screenDir);
|
|
121
|
+
console.log('Next steps:');
|
|
122
|
+
console.log(` 1. Use AI (Copilot/Claude) to generate Gherkin + selectors from the live page`);
|
|
123
|
+
console.log(` 2. Fill in test-data values`);
|
|
124
|
+
console.log(` 3. Compile: sungen generate --screen ${screenName}`);
|
|
125
|
+
console.log(` 4. Run: npx playwright test\n`);
|
|
123
126
|
}
|
|
124
127
|
|
|
125
|
-
/**
|
|
126
|
-
* Validate screen name
|
|
127
|
-
*/
|
|
128
128
|
private validateScreenName(name: string): void {
|
|
129
129
|
if (!name || name.trim().length === 0) {
|
|
130
|
-
console.error('
|
|
130
|
+
console.error('Error: Screen name cannot be empty');
|
|
131
131
|
process.exit(1);
|
|
132
132
|
}
|
|
133
|
-
|
|
134
|
-
// Check if name contains at least one alphanumeric character
|
|
135
133
|
if (!/[a-zA-Z0-9]/.test(name)) {
|
|
136
|
-
console.error('
|
|
137
|
-
console.error(' Valid examples: login, user-profile, Dashboard');
|
|
134
|
+
console.error('Error: Screen name must contain at least one alphanumeric character');
|
|
138
135
|
process.exit(1);
|
|
139
136
|
}
|
|
140
137
|
}
|
|
141
138
|
|
|
142
|
-
/**
|
|
143
|
-
* Normalize screen name to kebab-case for filename
|
|
144
|
-
*/
|
|
145
139
|
private normalizeScreenName(name: string): string {
|
|
146
140
|
return name
|
|
147
141
|
.toLowerCase()
|
|
@@ -150,29 +144,18 @@ export class ScreenManager {
|
|
|
150
144
|
.replace(/-+/g, '-');
|
|
151
145
|
}
|
|
152
146
|
|
|
153
|
-
/**
|
|
154
|
-
* Extract filename from path value
|
|
155
|
-
*/
|
|
156
147
|
private extractFilenameFromPath(pathString: string): string {
|
|
157
|
-
// Remove leading and trailing slashes
|
|
158
148
|
const cleanPath = pathString.replace(/^\/+/, '').replace(/\/+$/, '');
|
|
159
|
-
|
|
160
|
-
// Split by '/' and take last segment
|
|
161
149
|
const segments = cleanPath.split('/');
|
|
162
150
|
const lastSegment = segments[segments.length - 1];
|
|
163
|
-
|
|
164
|
-
// Normalize to kebab-case
|
|
165
151
|
return this.normalizeScreenName(lastSegment);
|
|
166
152
|
}
|
|
167
153
|
|
|
168
|
-
/**
|
|
169
|
-
* Generate feature file template
|
|
170
|
-
*/
|
|
171
154
|
private generateFeatureTemplate(options: ScreenOptions, filename: string): string {
|
|
172
155
|
const screenName = this.normalizeScreenName(options.name);
|
|
173
156
|
const featurePath = options.path || `/${screenName}`;
|
|
174
157
|
const description = options.description || `interact with the ${options.name} screen`;
|
|
175
|
-
|
|
158
|
+
|
|
176
159
|
return `Feature: ${options.name} Screen
|
|
177
160
|
|
|
178
161
|
As a user
|
|
@@ -182,164 +165,9 @@ export class ScreenManager {
|
|
|
182
165
|
|
|
183
166
|
@high
|
|
184
167
|
Scenario: Sample scenario for ${options.name}
|
|
185
|
-
Given User is on [${
|
|
168
|
+
Given User is on [${screenName}] page
|
|
186
169
|
When User click [element] button
|
|
187
170
|
Then User see [result] text with {{success}}
|
|
188
171
|
`;
|
|
189
172
|
}
|
|
190
|
-
|
|
191
|
-
/**
|
|
192
|
-
* Generate selector YAML template
|
|
193
|
-
*/
|
|
194
|
-
private generateSelectorTemplate(options: ScreenOptions, filename: string): string {
|
|
195
|
-
const timestamp = new Date().toISOString().split('T')[0];
|
|
196
|
-
const screenPath = options.path || '';
|
|
197
|
-
|
|
198
|
-
return `# ${options.name} Screen Selectors
|
|
199
|
-
# Created: ${timestamp}
|
|
200
|
-
${screenPath ? `# Path: ${screenPath}` : '# Path: (not specified - update as needed)'}
|
|
201
|
-
|
|
202
|
-
# Example element - replace with actual elements or use 'sungen map'
|
|
203
|
-
#
|
|
204
|
-
# Element structure:
|
|
205
|
-
# key: element-identifier
|
|
206
|
-
# locator: "" # Playwright locator
|
|
207
|
-
# type: text|role|placeholder|testid|xpath
|
|
208
|
-
# value: "text content" # Element value/text/label
|
|
209
|
-
# name: "Display Name" # Optional: readable name
|
|
210
|
-
# nth: 0 # Optional: element index if multiple matches
|
|
211
|
-
|
|
212
|
-
# element:
|
|
213
|
-
# locator: ""
|
|
214
|
-
# type: role
|
|
215
|
-
# value: "button"
|
|
216
|
-
# name: "element"
|
|
217
|
-
# nth: 0
|
|
218
|
-
|
|
219
|
-
# Next steps:
|
|
220
|
-
# 1. Edit the feature file: qa/screens/${filename}/features/${filename}.feature
|
|
221
|
-
# 2. Run: sungen map --screen ${filename}
|
|
222
|
-
# This will populate selectors from your feature file
|
|
223
|
-
#
|
|
224
|
-
# Documentation: https://github.com/sun-asterisk/sungen
|
|
225
|
-
`;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
* Generate test data YAML template
|
|
230
|
-
*/
|
|
231
|
-
private generateTestDataTemplate(options: ScreenOptions): string {
|
|
232
|
-
const timestamp = new Date().toISOString().split('T')[0];
|
|
233
|
-
|
|
234
|
-
return `# ${options.name} Screen Test Data
|
|
235
|
-
# Created: ${timestamp}
|
|
236
|
-
|
|
237
|
-
# Define test data variables here
|
|
238
|
-
# Example:
|
|
239
|
-
# success: "Operation completed successfully"
|
|
240
|
-
# username: "testuser@example.com"
|
|
241
|
-
# password: "SecurePassword123"
|
|
242
|
-
|
|
243
|
-
# Next steps:
|
|
244
|
-
# 1. Add test data variables referenced in your feature scenarios
|
|
245
|
-
# 2. Use {{variable}} syntax in your feature files to reference these values
|
|
246
|
-
`;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
/**
|
|
250
|
-
* Generate selector override YAML template (empty with guidelines)
|
|
251
|
-
*/
|
|
252
|
-
private generateSelectorOverrideTemplate(filename: string): string {
|
|
253
|
-
return `# ${filename}.override.yaml - User Override File
|
|
254
|
-
# This file will NEVER be modified by 'sungen map' command
|
|
255
|
-
# Use this to override auto-generated selectors or add custom ones
|
|
256
|
-
#
|
|
257
|
-
# Format:
|
|
258
|
-
# element.key:
|
|
259
|
-
# locator: "css-locator-here" # Optional: custom CSS locator
|
|
260
|
-
# type: role|testid|placeholder|label|text
|
|
261
|
-
# value: "value-for-type"
|
|
262
|
-
# name: "Display Name" # Optional
|
|
263
|
-
# nth: 0 # Optional: element index
|
|
264
|
-
#
|
|
265
|
-
# Examples:
|
|
266
|
-
# email.field:
|
|
267
|
-
# type: testid
|
|
268
|
-
# value: "login-email"
|
|
269
|
-
#
|
|
270
|
-
# submit.button:
|
|
271
|
-
# type: role
|
|
272
|
-
# value: "button"
|
|
273
|
-
# name: "Sign In"
|
|
274
|
-
#
|
|
275
|
-
# custom.element:
|
|
276
|
-
# locator: "#my-custom-id"
|
|
277
|
-
# type: placeholder
|
|
278
|
-
# value: "Enter text"
|
|
279
|
-
#
|
|
280
|
-
# Leave empty if no overrides needed
|
|
281
|
-
# Base selectors will be auto-generated by: sungen map --screen ${filename}
|
|
282
|
-
`;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* Generate test-data override YAML template (empty with guidelines)
|
|
287
|
-
*/
|
|
288
|
-
private generateTestDataOverrideTemplate(filename: string): string {
|
|
289
|
-
return `# ${filename}.override.yaml - User Override File
|
|
290
|
-
# This file will NEVER be modified by 'sungen map' command
|
|
291
|
-
# Use this to override auto-generated test data or add custom data
|
|
292
|
-
#
|
|
293
|
-
# Format:
|
|
294
|
-
# variable_name: "value"
|
|
295
|
-
#
|
|
296
|
-
# nested:
|
|
297
|
-
# variable: "value"
|
|
298
|
-
#
|
|
299
|
-
# array_example:
|
|
300
|
-
# - "item1"
|
|
301
|
-
# - "item2"
|
|
302
|
-
#
|
|
303
|
-
# Examples:
|
|
304
|
-
# # Simple string override
|
|
305
|
-
# valid_email: "custom@example.com"
|
|
306
|
-
#
|
|
307
|
-
# # Nested object override
|
|
308
|
-
# api:
|
|
309
|
-
# url: "https://staging.example.com"
|
|
310
|
-
# timeout: 5000
|
|
311
|
-
#
|
|
312
|
-
# # Array override
|
|
313
|
-
# test_users:
|
|
314
|
-
# - "user1@example.com"
|
|
315
|
-
# - "user2@example.com"
|
|
316
|
-
#
|
|
317
|
-
# Leave empty if no overrides needed
|
|
318
|
-
# Base test data will be auto-generated by: sungen map --screen ${filename}
|
|
319
|
-
`;
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
/**
|
|
323
|
-
* Display success message with next steps
|
|
324
|
-
*/
|
|
325
|
-
private displaySuccess(name: string, filename: string, screenDir: string): void {
|
|
326
|
-
console.log('ā
Screen definition created successfully!\n');
|
|
327
|
-
console.log(`Screen: ${name}`);
|
|
328
|
-
console.log(`Path: ${screenDir}\n`);
|
|
329
|
-
|
|
330
|
-
console.log('Created files:');
|
|
331
|
-
console.log(` š ${path.join(screenDir, 'features', `${filename}.feature`)}`);
|
|
332
|
-
console.log(` š ${path.join(screenDir, 'selectors', `${filename}.override.yaml`)} (user-editable)`);
|
|
333
|
-
console.log(` š ${path.join(screenDir, 'test-data', `${filename}.override.yaml`)} (user-editable)\n`);
|
|
334
|
-
|
|
335
|
-
console.log('š Note: Override files will NEVER be modified by automation');
|
|
336
|
-
console.log(' Edit these files to customize selectors and test data\n');
|
|
337
|
-
|
|
338
|
-
console.log('Next steps:');
|
|
339
|
-
console.log(` 1. Edit the Gherkin feature file to define test scenarios`);
|
|
340
|
-
console.log(` 2. Run: sungen map --screen ${name}`);
|
|
341
|
-
console.log(` This will generate BASE selector and test-data files`);
|
|
342
|
-
console.log(` (Override files remain untouched)\n`);
|
|
343
|
-
console.log('Documentation: https://github.com/sun-asterisk/sungen');
|
|
344
|
-
}
|
|
345
173
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache-clear.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cache-clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiBhE"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.registerCacheClearCommand = registerCacheClearCommand;
|
|
4
|
-
const config_loader_1 = require("../../config/config-loader");
|
|
5
|
-
const cache_manager_1 = require("../../orchestrator/cache-manager");
|
|
6
|
-
function registerCacheClearCommand(program) {
|
|
7
|
-
program
|
|
8
|
-
.command('cache-clear')
|
|
9
|
-
.description('Clear all caches')
|
|
10
|
-
.action(async () => {
|
|
11
|
-
try {
|
|
12
|
-
const config = new config_loader_1.ConfigLoader().load({});
|
|
13
|
-
const cacheManager = new cache_manager_1.CacheManager(config);
|
|
14
|
-
console.log('šļø Clearing cache...');
|
|
15
|
-
await cacheManager.clear();
|
|
16
|
-
console.log('ā
Cache cleared successfully');
|
|
17
|
-
}
|
|
18
|
-
catch (error) {
|
|
19
|
-
console.error('ā Cache clear failed:', error);
|
|
20
|
-
process.exit(1);
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=cache-clear.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache-clear.js","sourceRoot":"","sources":["../../../src/cli/commands/cache-clear.ts"],"names":[],"mappings":";;AAIA,8DAiBC;AApBD,8DAA0D;AAC1D,oEAAgE;AAEhE,SAAgB,yBAAyB,CAAC,OAAgB;IACxD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,4BAAY,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3C,MAAM,YAAY,GAAG,IAAI,4BAAY,CAAC,MAAM,CAAC,CAAC;YAE9C,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACtC,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"full.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/full.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8B1D"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.registerFullCommand = registerFullCommand;
|
|
4
|
-
const config_loader_1 = require("../../config/config-loader");
|
|
5
|
-
const pipeline_1 = require("../../orchestrator/pipeline");
|
|
6
|
-
function registerFullCommand(program) {
|
|
7
|
-
program
|
|
8
|
-
.command('full')
|
|
9
|
-
.description('Run full pipeline (live-scan + map + generate)')
|
|
10
|
-
.option('-s, --screen <name>', 'Process specific screen (optional)')
|
|
11
|
-
.option('-f, --force', 'Force rescan and overwrite')
|
|
12
|
-
.option('--headed', 'Launch browser in headed mode during live-scan', false)
|
|
13
|
-
.option('--auth-dir <path>', 'Auth storage state directory for live-scan', 'specs/.auth')
|
|
14
|
-
.option('--skip-live-scan', 'Skip live-scan phase')
|
|
15
|
-
.action(async (options) => {
|
|
16
|
-
try {
|
|
17
|
-
const cliOptions = {
|
|
18
|
-
...program.opts(),
|
|
19
|
-
...options,
|
|
20
|
-
};
|
|
21
|
-
const config = new config_loader_1.ConfigLoader().load(cliOptions);
|
|
22
|
-
const pipeline = new pipeline_1.Pipeline(config);
|
|
23
|
-
const screens = options.screen ? [options.screen] : undefined;
|
|
24
|
-
await pipeline.runFull(screens, {
|
|
25
|
-
headed: options.headed,
|
|
26
|
-
authDir: options.authDir,
|
|
27
|
-
skipLiveScan: options.skipLiveScan,
|
|
28
|
-
force: options.force,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
console.error('ā Full pipeline failed:', error);
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=full.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"full.js","sourceRoot":"","sources":["../../../src/cli/commands/full.ts"],"names":[],"mappings":";;AAIA,kDA8BC;AAjCD,8DAA0D;AAC1D,0DAAuD;AAEvD,SAAgB,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,qBAAqB,EAAE,oCAAoC,CAAC;SACnE,MAAM,CAAC,aAAa,EAAE,4BAA4B,CAAC;SACnD,MAAM,CAAC,UAAU,EAAE,gDAAgD,EAAE,KAAK,CAAC;SAC3E,MAAM,CAAC,mBAAmB,EAAE,4CAA4C,EAAE,aAAa,CAAC;SACxF,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG;gBACjB,GAAG,OAAO,CAAC,IAAI,EAAE;gBACjB,GAAG,OAAO;aACX,CAAC;YACF,MAAM,MAAM,GAAG,IAAI,4BAAY,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,CAAC;YAEtC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9D,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE;gBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"live-scan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/live-scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+E9D"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.registerLiveScanCommand = registerLiveScanCommand;
|
|
4
|
-
function registerLiveScanCommand(program) {
|
|
5
|
-
program
|
|
6
|
-
.command('live-scan')
|
|
7
|
-
.description('Scan a live site to discover real selectors for Gherkin element references')
|
|
8
|
-
.requiredOption('-s, --screen <name>', 'Screen name to scan')
|
|
9
|
-
.option('--url <baseUrl>', 'Override base URL (default: read from playwright.config.ts)')
|
|
10
|
-
.option('--headed', 'Launch browser in headed (visible) mode', false)
|
|
11
|
-
.option('--auth-dir <path>', 'Directory containing auth storage state files', 'specs/.auth')
|
|
12
|
-
.option('-f, --force', 'Force rescan all elements, ignoring existing results', false)
|
|
13
|
-
.action(async (options) => {
|
|
14
|
-
try {
|
|
15
|
-
const { LiveScanner } = require('../../core/live-scanner');
|
|
16
|
-
console.log('\nš Sungen Live Scanner\n');
|
|
17
|
-
console.log(`š Screen: ${options.screen}`);
|
|
18
|
-
console.log(`š„ļø Mode: ${options.headed ? 'headed' : 'headless'}`);
|
|
19
|
-
if (options.force) {
|
|
20
|
-
console.log(`š Force mode: rescanning all elements`);
|
|
21
|
-
}
|
|
22
|
-
const scanner = new LiveScanner({
|
|
23
|
-
baseUrl: options.url,
|
|
24
|
-
screenName: options.screen,
|
|
25
|
-
screensDir: 'qa/screens',
|
|
26
|
-
headed: options.headed,
|
|
27
|
-
authDir: options.authDir,
|
|
28
|
-
force: options.force,
|
|
29
|
-
});
|
|
30
|
-
const results = await scanner.scan();
|
|
31
|
-
// Print final summary
|
|
32
|
-
console.log('\nš SCAN SUMMARY\n');
|
|
33
|
-
let totalElements = 0;
|
|
34
|
-
let totalResolved = 0;
|
|
35
|
-
let totalWarnings = 0;
|
|
36
|
-
let totalUnresolved = 0;
|
|
37
|
-
let totalSkipped = 0;
|
|
38
|
-
for (const result of results) {
|
|
39
|
-
for (const scenario of Object.values(result.scenarios)) {
|
|
40
|
-
for (const element of Object.values(scenario.elements)) {
|
|
41
|
-
totalElements++;
|
|
42
|
-
if (element.skipped) {
|
|
43
|
-
totalSkipped++;
|
|
44
|
-
totalResolved++;
|
|
45
|
-
}
|
|
46
|
-
else if (element.matchMethod === 'unresolved') {
|
|
47
|
-
totalUnresolved++;
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
totalResolved++;
|
|
51
|
-
if (element.warning)
|
|
52
|
-
totalWarnings++;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
console.log(`Total Elements: ${totalElements}`);
|
|
58
|
-
console.log(`Resolved: ${totalResolved}`);
|
|
59
|
-
if (totalSkipped > 0) {
|
|
60
|
-
console.log(`Skipped (cached): ${totalSkipped}`);
|
|
61
|
-
}
|
|
62
|
-
console.log(`Warnings: ${totalWarnings}`);
|
|
63
|
-
console.log(`Unresolved: ${totalUnresolved}`);
|
|
64
|
-
if (totalUnresolved > 0) {
|
|
65
|
-
console.log(`\nā ļø ${totalUnresolved} element(s) could not be found on the live site`);
|
|
66
|
-
}
|
|
67
|
-
if (totalResolved > 0) {
|
|
68
|
-
console.log(`\nā
Live scan complete. Run 'sungen map --screen ${options.screen}' to generate selectors.`);
|
|
69
|
-
}
|
|
70
|
-
console.log('');
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
console.error('\nā Live scan failed:', error.message);
|
|
74
|
-
process.exit(1);
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=live-scan.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"live-scan.js","sourceRoot":"","sources":["../../../src/cli/commands/live-scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6FzD"}
|