@sun-asterisk/sungen 1.0.24 → 2.0.1
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/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 +10 -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 +2 -0
- 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 +5 -3
- package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
- package/dist/generators/test-generator/step-mapper.js +38 -27
- 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 +12 -0
- package/dist/orchestrator/project-initializer.d.ts.map +1 -1
- package/dist/orchestrator/project-initializer.js +72 -160
- 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/orchestrator/templates/ai-rules.md +189 -0
- package/dist/orchestrator/templates/gitignore +16 -0
- package/dist/orchestrator/templates/playwright.config.d.ts +10 -0
- package/dist/orchestrator/templates/playwright.config.d.ts.map +1 -0
- package/dist/orchestrator/templates/playwright.config.js +77 -0
- package/dist/orchestrator/templates/playwright.config.js.map +1 -0
- package/dist/orchestrator/templates/playwright.config.ts +80 -0
- package/dist/orchestrator/templates/readme.md +197 -0
- 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/docs/gherkin standards/gherkin-core-standard.md +377 -0
- package/docs/gherkin standards/gherkin-core-standard.vi.md +303 -0
- package/docs/gherkin-dictionary.md +1071 -0
- package/docs/makeauth.md +225 -0
- package/package.json +4 -3
- 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/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 +11 -59
- package/src/generators/test-generator/patterns/assertion-patterns.ts +2 -0
- 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 +42 -27
- 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 +75 -160
- package/src/orchestrator/screen-manager.ts +61 -233
- package/src/orchestrator/templates/ai-rules.md +189 -0
- package/src/orchestrator/templates/gitignore +16 -0
- package/src/orchestrator/templates/playwright.config.ts +80 -0
- package/src/orchestrator/templates/readme.md +197 -0
- 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 -481
- 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 -46
- package/dist/core/live-scanner/role-fallback.js.map +0 -1
- package/dist/core/live-scanner/scanner.d.ts +0 -22
- package/dist/core/live-scanner/scanner.d.ts.map +0 -1
- package/dist/core/live-scanner/scanner.js +0 -303
- 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 -473
- 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 -877
- 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 -534
- 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 -44
- package/src/core/live-scanner/scanner.ts +0 -321
- package/src/core/live-scanner/step-replayer.ts +0 -503
- 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 -1029
- 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
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Sungen Test Automation
|
|
2
|
+
|
|
3
|
+
This project uses [Sungen v2](https://github.com/sun-asterisk/sungen) — a deterministic E2E test compiler.
|
|
4
|
+
|
|
5
|
+
## How it works
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
AI (Copilot/Claude + MCP Playwright) → visits URL → generates files
|
|
9
|
+
sungen generate → compiles Gherkin + selectors + data → Playwright .spec.ts
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Directory Structure
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
├── qa/screens/<name>/
|
|
16
|
+
│ ├── features/ # .feature files (Gherkin)
|
|
17
|
+
│ ├── selectors/ # Element locator YAML mappings
|
|
18
|
+
│ └── test-data/ # Test data YAML values
|
|
19
|
+
├── specs/
|
|
20
|
+
│ ├── generated/ # Auto-generated Playwright tests
|
|
21
|
+
│ └── .auth/ # Auth storage states
|
|
22
|
+
├── docs/
|
|
23
|
+
│ └── gherkin-dictionary.md # Full grammar & compiler rules
|
|
24
|
+
├── .github/
|
|
25
|
+
│ └── copilot-instructions.md # AI rules for GitHub Copilot
|
|
26
|
+
└── CLAUDE.md # AI rules for Claude Code
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Workflow
|
|
30
|
+
|
|
31
|
+
### 1. Add a screen
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
sungen add --screen login --path /login
|
|
35
|
+
# Add more features to an existing screen:
|
|
36
|
+
sungen add --screen login --feature forgot-password
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 2. Set up auth (if needed)
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
sungen makeauth admin
|
|
43
|
+
# Opens browser → login manually → saves specs/.auth/admin.json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 3. Generate Gherkin + selectors with AI
|
|
47
|
+
|
|
48
|
+
Use your AI assistant (GitHub Copilot or Claude Code) to:
|
|
49
|
+
1. Navigate to the page URL via MCP Playwright
|
|
50
|
+
2. Take an accessibility snapshot
|
|
51
|
+
3. Generate `.feature` + `selectors.yaml` + `test-data.yaml`
|
|
52
|
+
|
|
53
|
+
The AI rules in `.github/copilot-instructions.md` and `CLAUDE.md` teach the AI
|
|
54
|
+
how to write correct Gherkin syntax and selector YAML for sungen.
|
|
55
|
+
|
|
56
|
+
### 4. Compile to Playwright tests
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
sungen generate --screen login
|
|
60
|
+
# or for all screens:
|
|
61
|
+
sungen generate --all
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 5. Run tests
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npx playwright test
|
|
68
|
+
npx playwright test --ui # interactive mode
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 6. Fix failures (AI Verify loop)
|
|
72
|
+
|
|
73
|
+
When tests fail, use AI to read the error → fix `selectors.yaml` → recompile → re-run.
|
|
74
|
+
|
|
75
|
+
| Error | Fix in selectors.yaml |
|
|
76
|
+
|---|---|
|
|
77
|
+
| strict mode: resolved to N elements | Add `exact: true` or `scope` or `nth` |
|
|
78
|
+
| element(s) not found | Fix `name`, `type`, or `value` |
|
|
79
|
+
| getByText matched too many | Add `match: 'exact'` or `nth` |
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Gherkin Guide
|
|
84
|
+
|
|
85
|
+
### Syntax
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
User <action> [<Target>] <type> with {{<Value>}}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
- `[Target]` → selector reference → lookup in `selectors/*.yaml`
|
|
92
|
+
- `{{Value}}` → test data reference → lookup in `test-data/*.yaml`
|
|
93
|
+
- `<type>` → element type: button, link, field, heading, text, etc.
|
|
94
|
+
|
|
95
|
+
### Pattern Shapes (17 total)
|
|
96
|
+
|
|
97
|
+
#### Actions
|
|
98
|
+
|
|
99
|
+
| Pattern | Example |
|
|
100
|
+
|---|---|
|
|
101
|
+
| Simple click | `User click [Submit] button` |
|
|
102
|
+
| Click with data | `User click [Teammate] button with {{name}}` |
|
|
103
|
+
| Fill field | `User fill [Email] field with {{email}}` |
|
|
104
|
+
| Check/Uncheck | `User check [Remember me] checkbox` |
|
|
105
|
+
| Select dropdown | `User select [Country] dropdown with {{country}}` |
|
|
106
|
+
| Upload file | `User upload [Avatar] file with {{path}}` |
|
|
107
|
+
| Double click | `User double click [Cell] element` |
|
|
108
|
+
| Hover | `User hover [Info] icon` |
|
|
109
|
+
| Clear | `User clear [Search] field` |
|
|
110
|
+
|
|
111
|
+
#### Keyboard
|
|
112
|
+
|
|
113
|
+
| Pattern | Example |
|
|
114
|
+
|---|---|
|
|
115
|
+
| Global key | `User press Escape key` |
|
|
116
|
+
| Key on element | `User press Enter on [Search] field` |
|
|
117
|
+
|
|
118
|
+
#### Navigation
|
|
119
|
+
|
|
120
|
+
| Pattern | Example |
|
|
121
|
+
|---|---|
|
|
122
|
+
| Open page | `User is on [login] page` |
|
|
123
|
+
| See page (URL) | `User see [dashboard] page` |
|
|
124
|
+
|
|
125
|
+
#### Wait
|
|
126
|
+
|
|
127
|
+
| Pattern | Example |
|
|
128
|
+
|---|---|
|
|
129
|
+
| Wait timeout | `User wait for 3 seconds` |
|
|
130
|
+
| Wait element | `User wait for [Modal] dialog` |
|
|
131
|
+
| Wait hidden | `User wait for [Loading] spinner is hidden` |
|
|
132
|
+
| Wait with data | `User wait for [Dialog] dialog with {{title}}` |
|
|
133
|
+
|
|
134
|
+
#### Assertions
|
|
135
|
+
|
|
136
|
+
| Pattern | Example |
|
|
137
|
+
|---|---|
|
|
138
|
+
| See element | `User see [Welcome] heading` |
|
|
139
|
+
| See with value | `User see [Title] heading with {{title}}` |
|
|
140
|
+
| State check | `User see [Submit] button is disabled` |
|
|
141
|
+
| State + data | `User see [Panel] dialog with {{title}} is hidden` |
|
|
142
|
+
| Text contains | `User see [Message] text contains {{partial}}` |
|
|
143
|
+
|
|
144
|
+
States: `hidden`, `visible`, `disabled`, `enabled`, `checked`, `unchecked`, `focused`, `empty`
|
|
145
|
+
|
|
146
|
+
#### Table
|
|
147
|
+
|
|
148
|
+
| Pattern | Example |
|
|
149
|
+
|---|---|
|
|
150
|
+
| Row exists | `User see [Users] table has row with {{name}}` |
|
|
151
|
+
| No row | `User see [Users] table has no row with {{name}}` |
|
|
152
|
+
| Row count | `User see [Users] table has {{count}} rows` |
|
|
153
|
+
| Column exists | `User see [Users] table has [Email] column` |
|
|
154
|
+
| Cell by filter | `User see [Users] table row with {{name}} has [Status] with {{status}}` |
|
|
155
|
+
| Cell by index | `User see [Users] table row 1 [Name] cell with {{name}}` |
|
|
156
|
+
| Action in row | `User click [Edit] in [Users] table row with {{name}}` |
|
|
157
|
+
| Empty table | `User see [Users] table is empty` |
|
|
158
|
+
|
|
159
|
+
#### Scope
|
|
160
|
+
|
|
161
|
+
| Pattern | Example |
|
|
162
|
+
|---|---|
|
|
163
|
+
| Scroll | `User scroll to [Footer] section` |
|
|
164
|
+
| Frame enter | `User switch to [Payment] frame` |
|
|
165
|
+
| Frame exit | `User switch to [main] frame` |
|
|
166
|
+
|
|
167
|
+
### Tags
|
|
168
|
+
|
|
169
|
+
| Tag | Purpose |
|
|
170
|
+
|---|---|
|
|
171
|
+
| `@auth:role` | Use Playwright storage state for auth |
|
|
172
|
+
| `@steps:name` | Define reusable step group |
|
|
173
|
+
| `@extend:name` | Inherit steps from another scenario |
|
|
174
|
+
| `@manual` | Skip scenario in generation |
|
|
175
|
+
|
|
176
|
+
### Selector YAML
|
|
177
|
+
|
|
178
|
+
```yaml
|
|
179
|
+
submit.button:
|
|
180
|
+
type: 'role' # testid, role, text, label, placeholder, locator, page
|
|
181
|
+
value: 'button' # role name, testid value, CSS selector, etc.
|
|
182
|
+
name: 'Submit' # accessible name
|
|
183
|
+
nth: 0 # element index (0=first, 1=.nth(0), 2=.nth(1))
|
|
184
|
+
exact: true # exact name match (avoid "Submit" matching "Submit Form")
|
|
185
|
+
scope: 'desktop navigation' # scope to parent landmark
|
|
186
|
+
match: 'exact' # exact text match for getByText
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Locator priority: `data-testid` > `role+name` > `label` > `text` > `CSS`
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Documentation
|
|
194
|
+
|
|
195
|
+
- [Gherkin Dictionary](docs/gherkin-dictionary.md) — full grammar, all 17 patterns, compiler rules
|
|
196
|
+
- [Sungen GitHub](https://github.com/sun-asterisk/sungen)
|
|
197
|
+
- [Playwright Documentation](https://playwright.dev)
|
|
@@ -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"}
|
package/dist/cli/commands/map.js
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.registerMapCommand = registerMapCommand;
|
|
4
|
-
const config_loader_1 = require("../../config/config-loader");
|
|
5
|
-
function registerMapCommand(program) {
|
|
6
|
-
program
|
|
7
|
-
.command('map')
|
|
8
|
-
.description('Generate selector and test-data YAML from Gherkin feature files')
|
|
9
|
-
.option('-s, --screen <name>', 'Screen name (reads from qa/screens/<name>/features/)')
|
|
10
|
-
.option('--file <path>', 'Single feature file path (generates selectors next to features folder)')
|
|
11
|
-
.option('-o, --output <dir>', 'Output directory for generated files')
|
|
12
|
-
.option('-f, --force', 'Force overwrite existing YAML files and rescan all elements')
|
|
13
|
-
.option('--skip-live-scan', 'Skip live-scan before mapping (live-scan runs by default)')
|
|
14
|
-
.option('--headed', 'Launch browser in headed mode during live-scan', false)
|
|
15
|
-
.option('--auth-dir <path>', 'Auth storage state directory for live-scan', 'specs/.auth')
|
|
16
|
-
.option('-v, --verbose', 'Detailed output')
|
|
17
|
-
.action(async (options) => {
|
|
18
|
-
try {
|
|
19
|
-
const path = require('path');
|
|
20
|
-
const cliOptions = {
|
|
21
|
-
...program.opts(),
|
|
22
|
-
...options,
|
|
23
|
-
};
|
|
24
|
-
const config = new config_loader_1.ConfigLoader().load(cliOptions);
|
|
25
|
-
const { ScaffoldGenerator } = require('../../generators/scaffold-generator');
|
|
26
|
-
const generator = new ScaffoldGenerator();
|
|
27
|
-
if (options.screen) {
|
|
28
|
-
const screensDir = options.output || 'qa/screens';
|
|
29
|
-
const forceOverwrite = cliOptions.force || false;
|
|
30
|
-
// Run live-scan by default before mapping (skip with --skip-live-scan)
|
|
31
|
-
if (!options.skipLiveScan) {
|
|
32
|
-
const { LiveScanner } = require('../../core/live-scanner');
|
|
33
|
-
console.log('🔍 Running live-scan before mapping...\n');
|
|
34
|
-
const scanner = new LiveScanner({
|
|
35
|
-
screenName: options.screen,
|
|
36
|
-
screensDir,
|
|
37
|
-
headed: options.headed,
|
|
38
|
-
authDir: options.authDir,
|
|
39
|
-
});
|
|
40
|
-
await scanner.scan();
|
|
41
|
-
console.log('');
|
|
42
|
-
}
|
|
43
|
-
if (forceOverwrite) {
|
|
44
|
-
console.log(`Mapping screen: ${options.screen} (force: selectors will be overwritten)\n`);
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
console.log(`Mapping screen: ${options.screen}\n`);
|
|
48
|
-
}
|
|
49
|
-
const results = generator.processScreen(options.screen, screensDir, forceOverwrite);
|
|
50
|
-
for (const result of results) {
|
|
51
|
-
console.log(`✓ Mapped ${result.featureFile}.feature`);
|
|
52
|
-
if (result.selectorsSkipped) {
|
|
53
|
-
console.log(` ⊘ ${path.basename(result.selectorsPath)} (skipped - already exists)`);
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
console.log(` → ${path.basename(result.selectorsPath)} (${result.elementCount} elements)`);
|
|
57
|
-
}
|
|
58
|
-
if (result.testDataMerged) {
|
|
59
|
-
console.log(` ↻ ${path.basename(result.testDataPath)} (smart-merged — ${result.dataRefCount} variables)\n`);
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
console.log(` → ${path.basename(result.testDataPath)} (${result.dataRefCount} variables)\n`);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
console.log(`Next step: sungen generate --screen ${options.screen}`);
|
|
66
|
-
console.log(' This will create the test specs based on the mapped selectors and test data.');
|
|
67
|
-
}
|
|
68
|
-
else if (options.file) {
|
|
69
|
-
const deriveOutputDir = (featureFilePath) => {
|
|
70
|
-
const featureDir = path.dirname(featureFilePath);
|
|
71
|
-
if (featureDir.includes('features')) {
|
|
72
|
-
return featureDir.replace(/features\/?$/, 'selectors/screens');
|
|
73
|
-
}
|
|
74
|
-
return path.join(featureDir, '..', 'selectors', 'screens');
|
|
75
|
-
};
|
|
76
|
-
const outputDir = options.output || deriveOutputDir(options.file);
|
|
77
|
-
const forceOverwrite = cliOptions.force || false;
|
|
78
|
-
console.log(`Mapping from file: ${options.file}\n`);
|
|
79
|
-
const result = generator.processFeatureFile(options.file, outputDir, forceOverwrite);
|
|
80
|
-
console.log(`✓ Generated: ${result.outputPath} (${result.elementCount} elements)`);
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
console.error('❌ Error: Please specify --screen <name> or --file <path>');
|
|
84
|
-
process.exit(1);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
console.error('❌ Mapping failed:', error);
|
|
89
|
-
process.exit(1);
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=map.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/cli/commands/map.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsC9D"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.registerValidateCommand = registerValidateCommand;
|
|
4
|
-
const utils_1 = require("../utils");
|
|
5
|
-
function registerValidateCommand(program) {
|
|
6
|
-
program
|
|
7
|
-
.command('validate')
|
|
8
|
-
.description('Validate Gherkin features and selector/test-data mappings')
|
|
9
|
-
.option('-s, --screen <name>', 'Validate specific screen (optional, defaults to all)')
|
|
10
|
-
.option('--json', 'Output results as JSON')
|
|
11
|
-
.option('-v, --verbose', 'Show all checks, not just failures')
|
|
12
|
-
.action(async (options) => {
|
|
13
|
-
try {
|
|
14
|
-
const { ScreenValidator } = require('../../core/validator');
|
|
15
|
-
const validator = new ScreenValidator({
|
|
16
|
-
verbose: options.verbose,
|
|
17
|
-
});
|
|
18
|
-
let result;
|
|
19
|
-
if (options.screen) {
|
|
20
|
-
console.log(`Validating screen: ${options.screen}\n`);
|
|
21
|
-
result = validator.validateScreen(options.screen);
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
console.log('Validating all screens...\n');
|
|
25
|
-
result = validator.validateAll();
|
|
26
|
-
}
|
|
27
|
-
if (options.json) {
|
|
28
|
-
console.log(JSON.stringify(result, null, 2));
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
(0, utils_1.printValidationResult)(result, options.verbose);
|
|
32
|
-
}
|
|
33
|
-
if (!result.valid) {
|
|
34
|
-
process.exit(1);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
console.error('❌ Validation failed:', error);
|
|
39
|
-
process.exit(1);
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=validate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":";;AAIA,0DAsCC;AAxCD,oCAAiD;AAEjD,SAAgB,uBAAuB,CAAC,OAAgB;IACtD,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,2DAA2D,CAAC;SACxE,MAAM,CAAC,qBAAqB,EAAE,sDAAsD,CAAC;SACrF,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;SAC1C,MAAM,CAAC,eAAe,EAAE,oCAAoC,CAAC;SAC7D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;YAE5D,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC;gBACpC,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;YAEH,IAAI,MAAwB,CAAC;YAC7B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;gBACtD,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;gBAC3C,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YACnC,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,IAAA,6BAAqB,EAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/cli/utils.d.ts
DELETED
package/dist/cli/utils.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/cli/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAqBrD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAE,OAAe,GAAG,IAAI,CAiF9F"}
|