@sun-asterisk/sungen 3.2.29 → 3.2.30
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/dist/cli/commands/delivery.d.ts.map +1 -1
- package/dist/cli/commands/delivery.js +2 -1
- package/dist/cli/commands/delivery.js.map +1 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +6 -2
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/inspect.js +1 -1
- package/dist/cli/commands/inspect.js.map +1 -1
- package/dist/cli/commands/results-merge.d.ts.map +1 -1
- package/dist/cli/commands/results-merge.js +9 -2
- package/dist/cli/commands/results-merge.js.map +1 -1
- package/dist/cli/commands/results-sanitize.d.ts +24 -0
- package/dist/cli/commands/results-sanitize.d.ts.map +1 -0
- package/dist/cli/commands/results-sanitize.js +126 -0
- package/dist/cli/commands/results-sanitize.js.map +1 -0
- package/dist/cli/commands/script-check.d.ts.map +1 -1
- package/dist/cli/commands/script-check.js +3 -1
- package/dist/cli/commands/script-check.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +3 -0
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/exporters/api-testcase-formatter.d.ts +3 -6
- package/dist/exporters/api-testcase-formatter.d.ts.map +1 -1
- package/dist/exporters/api-testcase-formatter.js +7 -10
- package/dist/exporters/api-testcase-formatter.js.map +1 -1
- package/dist/exporters/matrix/build.d.ts.map +1 -1
- package/dist/exporters/matrix/build.js +4 -2
- package/dist/exporters/matrix/build.js.map +1 -1
- package/dist/exporters/matrix/render-coverage-sheet.d.ts.map +1 -1
- package/dist/exporters/matrix/render-coverage-sheet.js +3 -1
- package/dist/exporters/matrix/render-coverage-sheet.js.map +1 -1
- package/dist/exporters/matrix/render-csv.d.ts.map +1 -1
- package/dist/exporters/matrix/render-csv.js +3 -1
- package/dist/exporters/matrix/render-csv.js.map +1 -1
- package/dist/exporters/matrix/render-overview-sheet.d.ts.map +1 -1
- package/dist/exporters/matrix/render-overview-sheet.js +5 -9
- package/dist/exporters/matrix/render-overview-sheet.js.map +1 -1
- package/dist/exporters/matrix/result-totals.d.ts +23 -0
- package/dist/exporters/matrix/result-totals.d.ts.map +1 -0
- package/dist/exporters/matrix/result-totals.js +21 -0
- package/dist/exporters/matrix/result-totals.js.map +1 -0
- package/dist/exporters/matrix/testcase-summary-band.d.ts.map +1 -1
- package/dist/exporters/matrix/testcase-summary-band.js +2 -6
- package/dist/exporters/matrix/testcase-summary-band.js.map +1 -1
- package/dist/exporters/qa-env-secret-denylist.js +2 -2
- package/dist/exporters/qa-env-secret-denylist.js.map +1 -1
- package/dist/exporters/report-path-sanitizer.d.ts +38 -0
- package/dist/exporters/report-path-sanitizer.d.ts.map +1 -0
- package/dist/exporters/report-path-sanitizer.js +137 -0
- package/dist/exporters/report-path-sanitizer.js.map +1 -0
- package/dist/exporters/result-variants.d.ts.map +1 -1
- package/dist/exporters/result-variants.js +2 -1
- package/dist/exporters/result-variants.js.map +1 -1
- package/dist/exporters/sensitive-key.d.ts +31 -0
- package/dist/exporters/sensitive-key.d.ts.map +1 -0
- package/dist/exporters/sensitive-key.js +50 -0
- package/dist/exporters/sensitive-key.js.map +1 -0
- package/dist/exporters/test-data-resolver.d.ts +4 -1
- package/dist/exporters/test-data-resolver.d.ts.map +1 -1
- package/dist/exporters/test-data-resolver.js +12 -2
- package/dist/exporters/test-data-resolver.js.map +1 -1
- package/dist/generators/gherkin-parser/index.d.ts +3 -0
- package/dist/generators/gherkin-parser/index.d.ts.map +1 -1
- package/dist/generators/gherkin-parser/index.js +17 -9
- package/dist/generators/gherkin-parser/index.js.map +1 -1
- package/dist/generators/gherkin-parser/parent-scope-clause.d.ts +54 -0
- package/dist/generators/gherkin-parser/parent-scope-clause.d.ts.map +1 -0
- package/dist/generators/gherkin-parser/parent-scope-clause.js +109 -0
- package/dist/generators/gherkin-parser/parent-scope-clause.js.map +1 -0
- package/dist/generators/test-generator/adapters/adapter-interface.d.ts +23 -18
- package/dist/generators/test-generator/adapters/adapter-interface.d.ts.map +1 -1
- package/dist/generators/test-generator/adapters/appium/appium-adapter.d.ts +4 -19
- package/dist/generators/test-generator/adapters/appium/appium-adapter.d.ts.map +1 -1
- package/dist/generators/test-generator/adapters/appium/appium-adapter.js.map +1 -1
- package/dist/generators/test-generator/adapters/appium/templates/after-all.hbs +18 -0
- package/dist/generators/test-generator/adapters/appium/templates/after-each.hbs +18 -0
- package/dist/generators/test-generator/adapters/appium/templates/before-all.hbs +18 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/click-at-position-action.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/click-element-with-text.hbs +1 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/double-click-action.hbs +7 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/frame-enter-action.hbs +3 -6
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/table-paginate-action.hbs +3 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/visible-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/long-press-action.hbs +4 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/pinch-zoom-action.hbs +4 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/partials/locator.hbs +9 -1
- package/dist/generators/test-generator/adapters/appium/templates/test-file.hbs +54 -23
- package/dist/generators/test-generator/adapters/index.d.ts +1 -1
- package/dist/generators/test-generator/adapters/index.d.ts.map +1 -1
- package/dist/generators/test-generator/adapters/playwright/playwright-adapter.d.ts +4 -19
- package/dist/generators/test-generator/adapters/playwright/playwright-adapter.d.ts.map +1 -1
- package/dist/generators/test-generator/adapters/playwright/playwright-adapter.js.map +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/after-all.hbs +19 -1
- package/dist/generators/test-generator/adapters/playwright/templates/after-each.hbs +18 -0
- package/dist/generators/test-generator/adapters/playwright/templates/before-all.hbs +19 -1
- package/dist/generators/test-generator/adapters/playwright/templates/imports.hbs +3 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/check-action.hbs +6 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/click-at-position-action.hbs +23 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/expand-action.hbs +8 -8
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/fill-editor-action.hbs +7 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row-nth.hbs +3 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +3 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/table-paginate-action.hbs +5 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/uncheck-action.hbs +3 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/unknown-element-action.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-page.hbs +18 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/all-contain-assertion.hbs +32 -4
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/all-contain-element.hbs +5 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/checked-assertion.hbs +5 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/column-cell-assertion.hbs +13 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/contain-text-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +2 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-variable-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/have-text-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +2 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-variable-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/not-checked-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/selected-assertion.hbs +14 -3
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/state-with-filter-assertion.hbs +13 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-role-variable-assertion.hbs +3 -3
- 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/assertions/visible-with-variable-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/checked-opts.hbs +8 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-nth.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/test-file.hbs +10 -8
- package/dist/generators/test-generator/code-generator.d.ts +37 -0
- package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
- package/dist/generators/test-generator/code-generator.js +160 -39
- package/dist/generators/test-generator/code-generator.js.map +1 -1
- package/dist/generators/test-generator/diagnostics.d.ts +79 -5
- package/dist/generators/test-generator/diagnostics.d.ts.map +1 -1
- package/dist/generators/test-generator/diagnostics.js +78 -4
- package/dist/generators/test-generator/diagnostics.js.map +1 -1
- package/dist/generators/test-generator/patterns/index.d.ts +24 -5
- package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/index.js +92 -14
- package/dist/generators/test-generator/patterns/index.js.map +1 -1
- package/dist/generators/test-generator/patterns/with-parent-scope.d.ts +18 -0
- package/dist/generators/test-generator/patterns/with-parent-scope.d.ts.map +1 -0
- package/dist/generators/test-generator/patterns/with-parent-scope.js +40 -0
- package/dist/generators/test-generator/patterns/with-parent-scope.js.map +1 -0
- package/dist/generators/test-generator/step-mapper.d.ts +63 -9
- package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
- package/dist/generators/test-generator/step-mapper.js +166 -28
- package/dist/generators/test-generator/step-mapper.js.map +1 -1
- package/dist/generators/test-generator/template-engine.d.ts +4 -19
- package/dist/generators/test-generator/template-engine.d.ts.map +1 -1
- package/dist/generators/test-generator/template-engine.js +17 -12
- package/dist/generators/test-generator/template-engine.js.map +1 -1
- package/dist/generators/test-generator/utils/data-resolver.d.ts +7 -0
- package/dist/generators/test-generator/utils/data-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/data-resolver.js +19 -2
- package/dist/generators/test-generator/utils/data-resolver.js.map +1 -1
- package/dist/generators/test-generator/utils/dialog-scope-identity.d.ts +41 -0
- package/dist/generators/test-generator/utils/dialog-scope-identity.d.ts.map +1 -0
- package/dist/generators/test-generator/utils/dialog-scope-identity.js +61 -0
- package/dist/generators/test-generator/utils/dialog-scope-identity.js.map +1 -0
- package/dist/generators/test-generator/utils/escape-js-string.d.ts +17 -0
- package/dist/generators/test-generator/utils/escape-js-string.d.ts.map +1 -0
- package/dist/generators/test-generator/utils/escape-js-string.js +29 -0
- package/dist/generators/test-generator/utils/escape-js-string.js.map +1 -0
- package/dist/generators/test-generator/utils/nearest-match.d.ts +24 -0
- package/dist/generators/test-generator/utils/nearest-match.d.ts.map +1 -0
- package/dist/generators/test-generator/utils/nearest-match.js +56 -0
- package/dist/generators/test-generator/utils/nearest-match.js.map +1 -0
- package/dist/generators/test-generator/utils/selector-entry-fields.d.ts +58 -0
- package/dist/generators/test-generator/utils/selector-entry-fields.d.ts.map +1 -0
- package/dist/generators/test-generator/utils/selector-entry-fields.js +119 -0
- package/dist/generators/test-generator/utils/selector-entry-fields.js.map +1 -0
- package/dist/generators/test-generator/utils/selector-entry-walk.d.ts +25 -0
- package/dist/generators/test-generator/utils/selector-entry-walk.d.ts.map +1 -0
- package/dist/generators/test-generator/utils/selector-entry-walk.js +54 -0
- package/dist/generators/test-generator/utils/selector-entry-walk.js.map +1 -0
- package/dist/generators/test-generator/utils/selector-nth-validation.d.ts +59 -0
- package/dist/generators/test-generator/utils/selector-nth-validation.d.ts.map +1 -0
- package/dist/generators/test-generator/utils/selector-nth-validation.js +91 -0
- package/dist/generators/test-generator/utils/selector-nth-validation.js.map +1 -0
- package/dist/generators/test-generator/utils/selector-resolver.d.ts +30 -1
- package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.js +195 -15
- package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
- package/dist/generators/test-generator/utils/selector-type-validation.d.ts +51 -0
- package/dist/generators/test-generator/utils/selector-type-validation.d.ts.map +1 -0
- package/dist/generators/test-generator/utils/selector-type-validation.js +77 -0
- package/dist/generators/test-generator/utils/selector-type-validation.js.map +1 -0
- package/dist/harness/data-driven-lint.d.ts.map +1 -1
- package/dist/harness/data-driven-lint.js +217 -33
- package/dist/harness/data-driven-lint.js.map +1 -1
- package/dist/harness/script-check.d.ts +2 -2
- package/dist/harness/script-check.d.ts.map +1 -1
- package/dist/harness/script-check.js +186 -25
- package/dist/harness/script-check.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/orchestrator/project-initializer.d.ts +6 -0
- package/dist/orchestrator/project-initializer.d.ts.map +1 -1
- package/dist/orchestrator/project-initializer.js +16 -0
- package/dist/orchestrator/project-initializer.js.map +1 -1
- package/dist/orchestrator/report-sanitize-reporter-install.d.ts +24 -0
- package/dist/orchestrator/report-sanitize-reporter-install.d.ts.map +1 -0
- package/dist/orchestrator/report-sanitize-reporter-install.js +161 -0
- package/dist/orchestrator/report-sanitize-reporter-install.js.map +1 -0
- package/dist/orchestrator/templates/ai-src/commands/run-test.md +9 -1
- package/dist/orchestrator/templates/ai-src/skills/sungen-api-coverage-model/SKILL.md +10 -0
- package/dist/orchestrator/templates/ai-src/skills/sungen-error-mapping/SKILL.md +14 -2
- package/dist/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +108 -8
- package/dist/orchestrator/templates/ai-src/skills/sungen-selector-fix/SKILL.md +1 -0
- package/dist/orchestrator/templates/ai-src/skills/sungen-selector-keys/SKILL.md +9 -2
- package/dist/orchestrator/templates/ai-src/skills/sungen-tc-review/SKILL.md +4 -4
- package/dist/orchestrator/templates/playwright.config.ts +7 -0
- package/dist/orchestrator/templates/specs-checked-state.d.ts +83 -0
- package/dist/orchestrator/templates/specs-checked-state.d.ts.map +1 -0
- package/dist/orchestrator/templates/specs-checked-state.js +261 -0
- package/dist/orchestrator/templates/specs-checked-state.js.map +1 -0
- package/dist/orchestrator/templates/specs-checked-state.ts +324 -0
- package/dist/orchestrator/templates/specs-report-path-sanitize-reporter.d.ts +36 -0
- package/dist/orchestrator/templates/specs-report-path-sanitize-reporter.d.ts.map +1 -0
- package/dist/orchestrator/templates/specs-report-path-sanitize-reporter.js +155 -0
- package/dist/orchestrator/templates/specs-report-path-sanitize-reporter.js.map +1 -0
- package/dist/orchestrator/templates/specs-report-path-sanitize-reporter.ts +142 -0
- package/dist/orchestrator/templates/specs-url-assert.d.ts +50 -25
- package/dist/orchestrator/templates/specs-url-assert.d.ts.map +1 -1
- package/dist/orchestrator/templates/specs-url-assert.js +65 -24
- package/dist/orchestrator/templates/specs-url-assert.js.map +1 -1
- package/dist/orchestrator/templates/specs-url-assert.ts +101 -28
- package/dist/utils/selector-types.d.ts +43 -1
- package/dist/utils/selector-types.d.ts.map +1 -1
- package/dist/utils/selector-types.js +51 -7
- package/dist/utils/selector-types.js.map +1 -1
- package/package.json +3 -3
- package/src/cli/commands/delivery.ts +2 -1
- package/src/cli/commands/generate.ts +5 -2
- package/src/cli/commands/inspect.ts +1 -1
- package/src/cli/commands/results-merge.ts +9 -2
- package/src/cli/commands/results-sanitize.ts +98 -0
- package/src/cli/commands/script-check.ts +3 -1
- package/src/cli/commands/update.ts +3 -0
- package/src/exporters/api-testcase-formatter.ts +5 -7
- package/src/exporters/matrix/build.ts +4 -2
- package/src/exporters/matrix/render-coverage-sheet.ts +3 -1
- package/src/exporters/matrix/render-csv.ts +3 -1
- package/src/exporters/matrix/render-overview-sheet.ts +5 -10
- package/src/exporters/matrix/result-totals.ts +37 -0
- package/src/exporters/matrix/testcase-summary-band.ts +2 -7
- package/src/exporters/qa-env-secret-denylist.ts +1 -1
- package/src/exporters/report-path-sanitizer.ts +144 -0
- package/src/exporters/result-variants.ts +2 -1
- package/src/exporters/sensitive-key.ts +48 -0
- package/src/exporters/test-data-resolver.ts +12 -2
- package/src/generators/gherkin-parser/index.ts +21 -10
- package/src/generators/gherkin-parser/parent-scope-clause.ts +130 -0
- package/src/generators/test-generator/adapters/adapter-interface.ts +25 -3
- package/src/generators/test-generator/adapters/appium/appium-adapter.ts +4 -4
- package/src/generators/test-generator/adapters/appium/templates/after-all.hbs +18 -0
- package/src/generators/test-generator/adapters/appium/templates/after-each.hbs +18 -0
- package/src/generators/test-generator/adapters/appium/templates/before-all.hbs +18 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/click-at-position-action.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/click-element-with-text.hbs +1 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/double-click-action.hbs +7 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/frame-enter-action.hbs +3 -6
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/table-paginate-action.hbs +3 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/visible-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/long-press-action.hbs +4 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/pinch-zoom-action.hbs +4 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/partials/locator.hbs +9 -1
- package/src/generators/test-generator/adapters/appium/templates/test-file.hbs +54 -23
- package/src/generators/test-generator/adapters/index.ts +1 -1
- package/src/generators/test-generator/adapters/playwright/playwright-adapter.ts +4 -4
- package/src/generators/test-generator/adapters/playwright/templates/after-all.hbs +19 -1
- package/src/generators/test-generator/adapters/playwright/templates/after-each.hbs +18 -0
- package/src/generators/test-generator/adapters/playwright/templates/before-all.hbs +19 -1
- package/src/generators/test-generator/adapters/playwright/templates/imports.hbs +3 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/check-action.hbs +6 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/click-at-position-action.hbs +23 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/expand-action.hbs +8 -8
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/fill-editor-action.hbs +7 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row-nth.hbs +3 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +3 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/table-paginate-action.hbs +5 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/uncheck-action.hbs +3 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/unknown-element-action.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-page.hbs +18 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/all-contain-assertion.hbs +32 -4
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/all-contain-element.hbs +5 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/checked-assertion.hbs +5 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/column-cell-assertion.hbs +13 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/contain-text-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +2 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-variable-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/have-text-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +2 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-variable-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/not-checked-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/selected-assertion.hbs +14 -3
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/state-with-filter-assertion.hbs +13 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-role-variable-assertion.hbs +3 -3
- 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/assertions/visible-with-variable-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/checked-opts.hbs +8 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-nth.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/test-file.hbs +10 -8
- package/src/generators/test-generator/code-generator.ts +176 -45
- package/src/generators/test-generator/diagnostics.ts +79 -5
- package/src/generators/test-generator/patterns/index.ts +97 -16
- package/src/generators/test-generator/patterns/with-parent-scope.ts +41 -0
- package/src/generators/test-generator/step-mapper.ts +170 -26
- package/src/generators/test-generator/template-engine.ts +21 -21
- package/src/generators/test-generator/utils/data-resolver.ts +23 -2
- package/src/generators/test-generator/utils/dialog-scope-identity.ts +71 -0
- package/src/generators/test-generator/utils/escape-js-string.ts +24 -0
- package/src/generators/test-generator/utils/nearest-match.ts +55 -0
- package/src/generators/test-generator/utils/selector-entry-fields.ts +131 -0
- package/src/generators/test-generator/utils/selector-entry-walk.ts +58 -0
- package/src/generators/test-generator/utils/selector-nth-validation.ts +99 -0
- package/src/generators/test-generator/utils/selector-resolver.ts +245 -16
- package/src/generators/test-generator/utils/selector-type-validation.ts +87 -0
- package/src/harness/data-driven-lint.ts +192 -32
- package/src/harness/script-check.ts +186 -21
- package/src/index.ts +7 -0
- package/src/orchestrator/project-initializer.ts +17 -0
- package/src/orchestrator/report-sanitize-reporter-install.ts +109 -0
- package/src/orchestrator/templates/ai-src/commands/run-test.md +9 -1
- package/src/orchestrator/templates/ai-src/skills/sungen-api-coverage-model/SKILL.md +10 -0
- package/src/orchestrator/templates/ai-src/skills/sungen-error-mapping/SKILL.md +14 -2
- package/src/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +108 -8
- package/src/orchestrator/templates/ai-src/skills/sungen-selector-fix/SKILL.md +1 -0
- package/src/orchestrator/templates/ai-src/skills/sungen-selector-keys/SKILL.md +9 -2
- package/src/orchestrator/templates/ai-src/skills/sungen-tc-review/SKILL.md +4 -4
- package/src/orchestrator/templates/playwright.config.ts +7 -0
- package/src/orchestrator/templates/specs-checked-state.ts +324 -0
- package/src/orchestrator/templates/specs-report-path-sanitize-reporter.ts +142 -0
- package/src/orchestrator/templates/specs-url-assert.ts +101 -28
- package/src/utils/selector-types.ts +54 -5
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.COUNT_START = void 0;
|
|
8
8
|
exports.addSummaryBand = addSummaryBand;
|
|
9
9
|
const xlsx_report_builder_1 = require("../xlsx-report-builder");
|
|
10
|
+
const result_totals_1 = require("./result-totals");
|
|
10
11
|
const xlsx_cells_1 = require("./xlsx-cells");
|
|
11
12
|
/** The counted data area — the template's own range, so a QA-appended row counts. */
|
|
12
13
|
exports.COUNT_START = 14;
|
|
@@ -34,12 +35,7 @@ const BAND_LABELS = ['Total TCs', 'Passed', 'Failed', 'Pending', 'N/A', 'Remaini
|
|
|
34
35
|
* cell is filled, not merely its ID. See the spec, §8.3.
|
|
35
36
|
*/
|
|
36
37
|
function addSummaryBand(ws, items) {
|
|
37
|
-
const
|
|
38
|
-
const total = items.reduce((a, i) => a + i.variants.length, 0);
|
|
39
|
-
const passed = sum('passed');
|
|
40
|
-
const failed = sum('failed');
|
|
41
|
-
const pending = sum('notRun');
|
|
42
|
-
const na = sum('na');
|
|
38
|
+
const { total, passed, failed, pending, na } = (0, result_totals_1.resultTotals)(items);
|
|
43
39
|
const remaining = total - passed - na;
|
|
44
40
|
const denom = Math.max(1, total - na);
|
|
45
41
|
BAND_LABELS.forEach((label, i) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testcase-summary-band.js","sourceRoot":"","sources":["../../../src/exporters/matrix/testcase-summary-band.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
1
|
+
{"version":3,"file":"testcase-summary-band.js","sourceRoot":"","sources":["../../../src/exporters/matrix/testcase-summary-band.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,7 +62,7 @@ const fs = __importStar(require("fs"));
|
|
|
62
62
|
const path = __importStar(require("path"));
|
|
63
63
|
// Sensitive-name signal shared with the API exporter's key/body-field classifier —
|
|
64
64
|
// here it is applied to the ENV VAR NAME (QA_ACCESS_TOKEN), not the yaml key.
|
|
65
|
-
const
|
|
65
|
+
const sensitive_key_1 = require("./sensitive-key");
|
|
66
66
|
/** `${QA_*}` env reference — same shape the runtime resolver allowlists (uppercase, QA_ prefix). */
|
|
67
67
|
const QA_ENV_REF = /\$\{(QA_[A-Z0-9_]+)\}/g;
|
|
68
68
|
/**
|
|
@@ -78,7 +78,7 @@ function collectQaEnvSecretDenylist(testData, cwd = process.cwd()) {
|
|
|
78
78
|
for (const m of v.matchAll(QA_ENV_REF))
|
|
79
79
|
referenced.add(m[1]);
|
|
80
80
|
}
|
|
81
|
-
const sensitive = [...referenced].filter((n) =>
|
|
81
|
+
const sensitive = [...referenced].filter((n) => sensitive_key_1.SENSITIVE_NAME.test(n));
|
|
82
82
|
if (sensitive.length === 0)
|
|
83
83
|
return { values: [], unresolved: [] };
|
|
84
84
|
const fileEnv = readEnvQaFiles(cwd);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qa-env-secret-denylist.js","sourceRoot":"","sources":["../../src/exporters/qa-env-secret-denylist.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBH,gEA0BC;AAgCD,8DAcC;AA7FD,uCAAyB;AACzB,2CAA6B;AAC7B,mFAAmF;AACnF,8EAA8E;AAC9E,
|
|
1
|
+
{"version":3,"file":"qa-env-secret-denylist.js","sourceRoot":"","sources":["../../src/exporters/qa-env-secret-denylist.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Report path sanitizer — rewrites the operator's machine paths out of a result/report JSON.
|
|
3
|
+
*
|
|
4
|
+
* Playwright's JSON reporter (and sungen's own script-check report) record ABSOLUTE paths:
|
|
5
|
+
* `config.configFile`, `rootDir`, `projects[].testDir/outputDir`, every `error.location.file`,
|
|
6
|
+
* attachment paths, and the paths quoted inside `stack`/`message`/`snippet` text. Teams commit these
|
|
7
|
+
* files next to the spec (the delivery reads them), so a username and a machine layout travel into
|
|
8
|
+
* the repository and the deliverable. Nothing downstream needs them absolute: delivery, dashboard and
|
|
9
|
+
* merge read titles, statuses and attachment names.
|
|
10
|
+
*
|
|
11
|
+
* Rules (pure — no I/O, no mutation of the input):
|
|
12
|
+
* - A string that IS an absolute path (POSIX, `C:\…`, `file:///…`) under the report's project root
|
|
13
|
+
* becomes the POSIX path relative to that root (the root itself → `.`); outside the root a path that
|
|
14
|
+
* names a machine (a home directory, a drive) keeps only its basename; any other absolute string —
|
|
15
|
+
* a URL route such as `/products` — is left alone.
|
|
16
|
+
* - Inside longer text (stack traces, messages, snippets) every occurrence of the root becomes a
|
|
17
|
+
* relative path, and a home directory (`/Users/<name>/`, `/home/<name>/`, `C:\Users\<name>\`) becomes
|
|
18
|
+
* `~/` — the text is rewritten, never dropped, so the trace stays readable.
|
|
19
|
+
* - URLs are untouched: a `/home/...` inside `https://host/home/...` is not a filesystem path.
|
|
20
|
+
* - Idempotent: sanitizing an already-sanitized report rewrites nothing.
|
|
21
|
+
*
|
|
22
|
+
* The root is the report's OWN `dirname(config.configFile)` when it carries one (self-describing —
|
|
23
|
+
* a report produced on another machine relativizes against ITS root, not the reader's cwd); callers
|
|
24
|
+
* fall back to their cwd otherwise.
|
|
25
|
+
*/
|
|
26
|
+
export interface SanitizeOptions {
|
|
27
|
+
/** Project root the report's paths are made relative to (absolute; POSIX or Windows). */
|
|
28
|
+
root: string;
|
|
29
|
+
}
|
|
30
|
+
export interface SanitizeOutcome<T> {
|
|
31
|
+
doc: T;
|
|
32
|
+
/** Number of string values that changed. */
|
|
33
|
+
rewritten: number;
|
|
34
|
+
}
|
|
35
|
+
/** The project root a report describes itself against, if it says. */
|
|
36
|
+
export declare function detectReportRoot(doc: unknown): string | undefined;
|
|
37
|
+
export declare function sanitizeReportPaths<T>(doc: T, opts: SanitizeOptions): SanitizeOutcome<T>;
|
|
38
|
+
//# sourceMappingURL=report-path-sanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-path-sanitizer.d.ts","sourceRoot":"","sources":["../../src/exporters/report-path-sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,WAAW,eAAe;IAC9B,yFAAyF;IACzF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,GAAG,EAAE,CAAC,CAAC;IACP,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;CACnB;AAWD,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMjE;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,CAqBxF"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Report path sanitizer — rewrites the operator's machine paths out of a result/report JSON.
|
|
4
|
+
*
|
|
5
|
+
* Playwright's JSON reporter (and sungen's own script-check report) record ABSOLUTE paths:
|
|
6
|
+
* `config.configFile`, `rootDir`, `projects[].testDir/outputDir`, every `error.location.file`,
|
|
7
|
+
* attachment paths, and the paths quoted inside `stack`/`message`/`snippet` text. Teams commit these
|
|
8
|
+
* files next to the spec (the delivery reads them), so a username and a machine layout travel into
|
|
9
|
+
* the repository and the deliverable. Nothing downstream needs them absolute: delivery, dashboard and
|
|
10
|
+
* merge read titles, statuses and attachment names.
|
|
11
|
+
*
|
|
12
|
+
* Rules (pure — no I/O, no mutation of the input):
|
|
13
|
+
* - A string that IS an absolute path (POSIX, `C:\…`, `file:///…`) under the report's project root
|
|
14
|
+
* becomes the POSIX path relative to that root (the root itself → `.`); outside the root a path that
|
|
15
|
+
* names a machine (a home directory, a drive) keeps only its basename; any other absolute string —
|
|
16
|
+
* a URL route such as `/products` — is left alone.
|
|
17
|
+
* - Inside longer text (stack traces, messages, snippets) every occurrence of the root becomes a
|
|
18
|
+
* relative path, and a home directory (`/Users/<name>/`, `/home/<name>/`, `C:\Users\<name>\`) becomes
|
|
19
|
+
* `~/` — the text is rewritten, never dropped, so the trace stays readable.
|
|
20
|
+
* - URLs are untouched: a `/home/...` inside `https://host/home/...` is not a filesystem path.
|
|
21
|
+
* - Idempotent: sanitizing an already-sanitized report rewrites nothing.
|
|
22
|
+
*
|
|
23
|
+
* The root is the report's OWN `dirname(config.configFile)` when it carries one (self-describing —
|
|
24
|
+
* a report produced on another machine relativizes against ITS root, not the reader's cwd); callers
|
|
25
|
+
* fall back to their cwd otherwise.
|
|
26
|
+
*/
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.detectReportRoot = detectReportRoot;
|
|
29
|
+
exports.sanitizeReportPaths = sanitizeReportPaths;
|
|
30
|
+
const ABSOLUTE = /^(?:file:\/\/\/?|[A-Za-z]:[\\/]|\/)/;
|
|
31
|
+
const WINDOWS_DRIVE = /^[A-Za-z]:/;
|
|
32
|
+
/**
|
|
33
|
+
* A home directory quoted inside text, not embedded in a URL or a longer token: `/Users/<name>/`,
|
|
34
|
+
* `/home/<name>/`, `C:\Users\<name>\`, each optionally behind a `file://` scheme (Node ESM errors
|
|
35
|
+
* quote modules as `file:///Users/<name>/…`).
|
|
36
|
+
*/
|
|
37
|
+
const HOME_DIR = /(?<![\w.:/\\-])(?:file:\/\/\/?)?(?:\/(?:Users|home)\/[^/\\\s"'`)\]]+[/\\]|[A-Za-z]:[\\/]Users[\\/][^/\\\s"'`)\]]+[\\/])/g;
|
|
38
|
+
/** The project root a report describes itself against, if it says. */
|
|
39
|
+
function detectReportRoot(doc) {
|
|
40
|
+
const configFile = doc?.config?.configFile;
|
|
41
|
+
if (typeof configFile !== 'string' || !ABSOLUTE.test(configFile))
|
|
42
|
+
return undefined;
|
|
43
|
+
const p = toPosix(stripFileScheme(configFile));
|
|
44
|
+
const i = p.lastIndexOf('/');
|
|
45
|
+
return i > 0 ? p.slice(0, i) : undefined;
|
|
46
|
+
}
|
|
47
|
+
function sanitizeReportPaths(doc, opts) {
|
|
48
|
+
const root = normalizeRoot(opts.root);
|
|
49
|
+
// A root of `/` (or empty) would make every `/` a "root prefix" and shred the document.
|
|
50
|
+
if (root.posix.length < 2)
|
|
51
|
+
return { doc, rewritten: 0 };
|
|
52
|
+
let rewritten = 0;
|
|
53
|
+
const rewrite = (value) => {
|
|
54
|
+
const next = sanitizeString(value, root);
|
|
55
|
+
if (next !== value)
|
|
56
|
+
rewritten++;
|
|
57
|
+
return next;
|
|
58
|
+
};
|
|
59
|
+
const walk = (v) => {
|
|
60
|
+
if (typeof v === 'string')
|
|
61
|
+
return rewrite(v);
|
|
62
|
+
if (Array.isArray(v))
|
|
63
|
+
return v.map(walk);
|
|
64
|
+
if (v && typeof v === 'object') {
|
|
65
|
+
const out = {};
|
|
66
|
+
for (const [k, x] of Object.entries(v))
|
|
67
|
+
out[k] = walk(x);
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
return v;
|
|
71
|
+
};
|
|
72
|
+
return { doc: walk(doc), rewritten };
|
|
73
|
+
}
|
|
74
|
+
function normalizeRoot(raw) {
|
|
75
|
+
const posix = toPosix(stripFileScheme(raw)).replace(/\/+$/, '');
|
|
76
|
+
const caseInsensitive = WINDOWS_DRIVE.test(posix);
|
|
77
|
+
// The root as it may appear inside text: either separator style, optional file:// scheme, and the
|
|
78
|
+
// separator that follows it (consumed, so what remains starts at the relative path).
|
|
79
|
+
const body = posix.split('/').map(escapeRegExp).join('[\\\\/]');
|
|
80
|
+
return { posix, caseInsensitive, pattern: new RegExp(`(?:file:\\/\\/\\/?)?${body}(?:[\\\\/](?![\\\\/])|(?=$|[\\s"'\`):,]))`, caseInsensitive ? 'gi' : 'g') };
|
|
81
|
+
}
|
|
82
|
+
function sanitizeString(value, root) {
|
|
83
|
+
const trimmed = value.trim();
|
|
84
|
+
if (ABSOLUTE.test(trimmed) && !/\s/.test(trimmed)) {
|
|
85
|
+
// The whole value is one path.
|
|
86
|
+
const p = toPosix(stripFileScheme(trimmed)).replace(/\/+$/, '');
|
|
87
|
+
const rel = relativeToRoot(p, root);
|
|
88
|
+
if (rel !== undefined)
|
|
89
|
+
return rel;
|
|
90
|
+
// Outside the root: only a path that names a MACHINE (a home directory, a drive) is cut to its
|
|
91
|
+
// basename. Any other absolute string is left alone — `/products` in an audit report is a route.
|
|
92
|
+
if (isMachinePath(p)) {
|
|
93
|
+
// Another machine's checkout of THIS project (`…/work/<project>/specs/x.ts`, root `/home/me/<project>`):
|
|
94
|
+
// the part after the project directory is the honest relative path; only then fall back to the basename.
|
|
95
|
+
const marker = '/' + root.posix.slice(root.posix.lastIndexOf('/') + 1) + '/';
|
|
96
|
+
const i = marker.length > 2 ? (root.caseInsensitive ? p.toLowerCase().indexOf(marker.toLowerCase()) : p.indexOf(marker)) : -1;
|
|
97
|
+
if (i >= 0)
|
|
98
|
+
return p.slice(i + marker.length);
|
|
99
|
+
return p.slice(p.lastIndexOf('/') + 1) || p;
|
|
100
|
+
}
|
|
101
|
+
return value;
|
|
102
|
+
}
|
|
103
|
+
// Paths quoted inside text: root → relative (the root alone → `.`), home → ~/.
|
|
104
|
+
const out = value.replace(root.pattern, (m) => (/[\\/]$/.test(m) ? '' : '.'));
|
|
105
|
+
return out.replace(HOME_DIR, '~/');
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* A path that identifies the operator's machine: a drive-letter path, or a home directory with
|
|
109
|
+
* something UNDER the user's folder (`/Users/<name>/<…>`). Case-sensitive and two segments deep on
|
|
110
|
+
* purpose — `/users/42/orders` and `/home/dashboard` are routes an audit report lists, not homes.
|
|
111
|
+
*/
|
|
112
|
+
function isMachinePath(posixPath) {
|
|
113
|
+
return WINDOWS_DRIVE.test(posixPath) || /\/(?:Users|home)\/[^/]+\/./.test(posixPath);
|
|
114
|
+
}
|
|
115
|
+
function relativeToRoot(p, root) {
|
|
116
|
+
const a = root.caseInsensitive ? p.toLowerCase() : p;
|
|
117
|
+
const b = root.caseInsensitive ? root.posix.toLowerCase() : root.posix;
|
|
118
|
+
if (a === b)
|
|
119
|
+
return '.';
|
|
120
|
+
if (a.startsWith(b + '/'))
|
|
121
|
+
return p.slice(root.posix.length + 1);
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
function stripFileScheme(p) {
|
|
125
|
+
if (!p.startsWith('file://'))
|
|
126
|
+
return p;
|
|
127
|
+
const rest = p.slice('file://'.length);
|
|
128
|
+
// file:///C:/x → C:/x ; file:///home/x → /home/x
|
|
129
|
+
return /^\/[A-Za-z]:/.test(rest) ? rest.slice(1) : rest;
|
|
130
|
+
}
|
|
131
|
+
function toPosix(p) {
|
|
132
|
+
return p.replace(/\\/g, '/');
|
|
133
|
+
}
|
|
134
|
+
function escapeRegExp(s) {
|
|
135
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=report-path-sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-path-sanitizer.js","sourceRoot":"","sources":["../../src/exporters/report-path-sanitizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-variants.d.ts","sourceRoot":"","sources":["../../src/exporters/result-variants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"result-variants.d.ts","sourceRoot":"","sources":["../../src/exporters/result-variants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAG3C,MAAM,WAAW,aAAa;IAC5B;sEACkE;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;0EAEsE;IACtE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,cAAc,EACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,GAClD,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAUvC;AAOD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CACnC,CAAC,EAAE,cAAc,EACjB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,IAAI,EAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GACvC,aAAa,EAAE,CA0BjB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,GAAE,MAAa,GAAG,MAAM,CAOzF"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getCasesDatasetRows = getCasesDatasetRows;
|
|
4
4
|
exports.resolveResultVariants = resolveResultVariants;
|
|
5
5
|
exports.formatVariantRow = formatVariantRow;
|
|
6
|
+
const sensitive_key_1 = require("./sensitive-key");
|
|
6
7
|
/**
|
|
7
8
|
* Read the `@cases:<name>` dataset rows for a scenario from the (flattened) test-data map.
|
|
8
9
|
* `loadTestData()` flattens arrays to JSON strings — accept that shape and raw arrays.
|
|
@@ -84,7 +85,7 @@ function formatVariantRow(variant, separator = '\n') {
|
|
|
84
85
|
const useBullet = separator.includes('\n');
|
|
85
86
|
return Object.entries(variant.row)
|
|
86
87
|
.filter(([k]) => !k.startsWith('__'))
|
|
87
|
-
.map(([k, v]) => `${useBullet ? '• ' : ''}${k}: ${v}`)
|
|
88
|
+
.map(([k, v]) => `${useBullet ? '• ' : ''}${k}: ${(0, sensitive_key_1.maskCredentialValue)(k, String(v))}`)
|
|
88
89
|
.join(separator);
|
|
89
90
|
}
|
|
90
91
|
//# sourceMappingURL=result-variants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-variants.js","sourceRoot":"","sources":["../../src/exporters/result-variants.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"result-variants.js","sourceRoot":"","sources":["../../src/exporters/result-variants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credential-name matching shared by the delivery exporters (key-based masking, value-based
|
|
3
|
+
* redaction, the qa-env secret denylist). Kept in its own module so the test-data loader can
|
|
4
|
+
* mask a cell without importing the API formatter.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Credential name matcher (substring, not anchored) for body-field keys and test-data keys —
|
|
8
|
+
* catches variants like confirmPassword / new_password / password_confirmation / access_token /
|
|
9
|
+
* client_secret / otp / passcode.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SENSITIVE_NAME: RegExp;
|
|
12
|
+
/**
|
|
13
|
+
* The segment of a flattened test-data key that NAMES the value: the last dot-segment, skipping
|
|
14
|
+
* array indexes. `accounts.0.password` → `password`; `passwords.0` → `passwords`; `tokens.0.label`
|
|
15
|
+
* → `label`. Matching the whole key would treat every field under a list called `tokens` as a
|
|
16
|
+
* secret — `tokens.0.label: "New"` is a label, not a token.
|
|
17
|
+
*/
|
|
18
|
+
export declare function sensitivityKeyName(key: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Is this test-data key a credential? A non-indexed key is judged as a whole, exactly as before
|
|
21
|
+
* arrays were flattened per index — `api_key.value` and `token.value` stay credentials. An indexed
|
|
22
|
+
* key is judged by the segment that names the value, so `tokens.0.label` is not one.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isSensitiveKey(key: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* What a Test Data cell may show for `key`: `***` for a credential-named key, else the value. An
|
|
27
|
+
* unresolved `${QA_*}` placeholder is not a value but the name of the variable the tester must
|
|
28
|
+
* set — it stays literal (also inside a composed value like `Bearer ${QA_TOKEN}`) so they can find it.
|
|
29
|
+
*/
|
|
30
|
+
export declare function maskCredentialValue(key: string, value: string): string;
|
|
31
|
+
//# sourceMappingURL=sensitive-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitive-key.d.ts","sourceRoot":"","sources":["../../src/exporters/sensitive-key.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc,QAAwG,CAAC;AAEpI;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtD;AAKD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGnD;AAKD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Credential-name matching shared by the delivery exporters (key-based masking, value-based
|
|
4
|
+
* redaction, the qa-env secret denylist). Kept in its own module so the test-data loader can
|
|
5
|
+
* mask a cell without importing the API formatter.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.SENSITIVE_NAME = void 0;
|
|
9
|
+
exports.sensitivityKeyName = sensitivityKeyName;
|
|
10
|
+
exports.isSensitiveKey = isSensitiveKey;
|
|
11
|
+
exports.maskCredentialValue = maskCredentialValue;
|
|
12
|
+
/**
|
|
13
|
+
* Credential name matcher (substring, not anchored) for body-field keys and test-data keys —
|
|
14
|
+
* catches variants like confirmPassword / new_password / password_confirmation / access_token /
|
|
15
|
+
* client_secret / otp / passcode.
|
|
16
|
+
*/
|
|
17
|
+
exports.SENSITIVE_NAME = /pass(word|code)?|passwd|pwd|secret|token|otp|api[-_]?key|apikey|credential|authorization|signature/i;
|
|
18
|
+
/**
|
|
19
|
+
* The segment of a flattened test-data key that NAMES the value: the last dot-segment, skipping
|
|
20
|
+
* array indexes. `accounts.0.password` → `password`; `passwords.0` → `passwords`; `tokens.0.label`
|
|
21
|
+
* → `label`. Matching the whole key would treat every field under a list called `tokens` as a
|
|
22
|
+
* secret — `tokens.0.label: "New"` is a label, not a token.
|
|
23
|
+
*/
|
|
24
|
+
function sensitivityKeyName(key) {
|
|
25
|
+
const segments = key.split('.').filter((seg) => !/^\d+$/.test(seg));
|
|
26
|
+
return segments[segments.length - 1] ?? key;
|
|
27
|
+
}
|
|
28
|
+
/** Key path that walks into an array (`list.0.field`, `tags.0`). */
|
|
29
|
+
const HAS_INDEX_SEGMENT = /(^|\.)\d+(\.|$)/;
|
|
30
|
+
/**
|
|
31
|
+
* Is this test-data key a credential? A non-indexed key is judged as a whole, exactly as before
|
|
32
|
+
* arrays were flattened per index — `api_key.value` and `token.value` stay credentials. An indexed
|
|
33
|
+
* key is judged by the segment that names the value, so `tokens.0.label` is not one.
|
|
34
|
+
*/
|
|
35
|
+
function isSensitiveKey(key) {
|
|
36
|
+
if (exports.SENSITIVE_NAME.test(sensitivityKeyName(key)))
|
|
37
|
+
return true;
|
|
38
|
+
return !HAS_INDEX_SEGMENT.test(key) && exports.SENSITIVE_NAME.test(key);
|
|
39
|
+
}
|
|
40
|
+
/** A value that still carries a raw `${QA_*}` env placeholder (nothing substituted at export time). */
|
|
41
|
+
const UNRESOLVED_QA_ENV_REF = /\$\{QA_[A-Z0-9_]+\}/;
|
|
42
|
+
/**
|
|
43
|
+
* What a Test Data cell may show for `key`: `***` for a credential-named key, else the value. An
|
|
44
|
+
* unresolved `${QA_*}` placeholder is not a value but the name of the variable the tester must
|
|
45
|
+
* set — it stays literal (also inside a composed value like `Bearer ${QA_TOKEN}`) so they can find it.
|
|
46
|
+
*/
|
|
47
|
+
function maskCredentialValue(key, value) {
|
|
48
|
+
return isSensitiveKey(key) && !UNRESOLVED_QA_ENV_REF.test(value) ? '***' : value;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=sensitive-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitive-key.js","sourceRoot":"","sources":["../../src/exporters/sensitive-key.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAeH,gDAGC;AAUD,wCAGC;AAUD,kDAEC;AAzCD;;;;GAIG;AACU,QAAA,cAAc,GAAG,qGAAqG,CAAC;AAEpI;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,GAAW;IAC5C,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;AAC9C,CAAC;AAED,oEAAoE;AACpE,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAE5C;;;;GAIG;AACH,SAAgB,cAAc,CAAC,GAAW;IACxC,IAAI,sBAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9D,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,sBAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,uGAAuG;AACvG,MAAM,qBAAqB,GAAG,qBAAqB,CAAC;AAEpD;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,GAAW,EAAE,KAAa;IAC5D,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACnF,CAAC"}
|
|
@@ -7,7 +7,10 @@
|
|
|
7
7
|
* kudos:
|
|
8
8
|
* recipient: "An"
|
|
9
9
|
* become { "kudos.recipient": "An" }, matching {{kudos.recipient}} refs.
|
|
10
|
-
*
|
|
10
|
+
* An array is kept whole as a JSON string under its own key (the `@cases` dataset
|
|
11
|
+
* reader parses it back) AND flattened per index, so `{{list.0.field}}` /
|
|
12
|
+
* `{{tags.0}}` / `{{m.0.1}}` refs resolve exactly as the compile-time resolver
|
|
13
|
+
* resolves them. Returns empty map if both files are missing.
|
|
11
14
|
*
|
|
12
15
|
* When `SUNGEN_ENV` is set, also merges the matching overlay file alongside
|
|
13
16
|
* the base (e.g. `login.yaml` + `login.vi.yaml`). Shallow root-level merge —
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-data-resolver.d.ts","sourceRoot":"","sources":["../../src/exporters/test-data-resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"test-data-resolver.d.ts","sourceRoot":"","sources":["../../src/exporters/test-data-resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;;;;;;;;;;;;;;;GAgBG;AACH;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcrG;AA4DD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,cAAc,EAAE,MAAM,EAAE,EACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,MAAM,GAAE,MAAiB,EACzB,SAAS,GAAE,MAAa,GACvB,MAAM,CAgBR;AAQD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAQ7F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAcxD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEvE"}
|
|
@@ -44,13 +44,17 @@ exports.resolveTestDataPath = resolveTestDataPath;
|
|
|
44
44
|
const fs = __importStar(require("fs"));
|
|
45
45
|
const path = __importStar(require("path"));
|
|
46
46
|
const yaml_1 = require("yaml");
|
|
47
|
+
const sensitive_key_1 = require("./sensitive-key");
|
|
47
48
|
/**
|
|
48
49
|
* Load test-data.yaml into a flat key→value map.
|
|
49
50
|
* Nested objects are flattened with dot notation so flow files like
|
|
50
51
|
* kudos:
|
|
51
52
|
* recipient: "An"
|
|
52
53
|
* become { "kudos.recipient": "An" }, matching {{kudos.recipient}} refs.
|
|
53
|
-
*
|
|
54
|
+
* An array is kept whole as a JSON string under its own key (the `@cases` dataset
|
|
55
|
+
* reader parses it back) AND flattened per index, so `{{list.0.field}}` /
|
|
56
|
+
* `{{tags.0}}` / `{{m.0.1}}` refs resolve exactly as the compile-time resolver
|
|
57
|
+
* resolves them. Returns empty map if both files are missing.
|
|
54
58
|
*
|
|
55
59
|
* When `SUNGEN_ENV` is set, also merges the matching overlay file alongside
|
|
56
60
|
* the base (e.g. `login.yaml` + `login.vi.yaml`). Shallow root-level merge —
|
|
@@ -123,6 +127,10 @@ function flatten(obj, prefix, out) {
|
|
|
123
127
|
const path = prefix ? `${prefix}.${key}` : key;
|
|
124
128
|
if (Array.isArray(value)) {
|
|
125
129
|
out[path] = JSON.stringify(value);
|
|
130
|
+
// Per-index leaves (`list.0.field`, `tags.0`, nested `m.0.1`) — dot form only, matching
|
|
131
|
+
// the compile-time resolver; a shorter overlay list replaces the whole array, so no
|
|
132
|
+
// stale `.N` leaves survive from the base.
|
|
133
|
+
flatten(Object.fromEntries(value.map((el, i) => [String(i), el])), path, out);
|
|
126
134
|
}
|
|
127
135
|
else if (typeof value === 'object') {
|
|
128
136
|
flatten(value, path, out);
|
|
@@ -154,7 +162,9 @@ function formatTestData(referencedVars, testData, maxLen = Infinity, separator =
|
|
|
154
162
|
const value = testData[key];
|
|
155
163
|
if (value === undefined)
|
|
156
164
|
continue;
|
|
157
|
-
|
|
165
|
+
// A credential-named key shows `***` in this cell, whatever the unit kind (the same rule the
|
|
166
|
+
// matrix data column and @cases rows apply); unresolved `${QA_*}` placeholders stay literal.
|
|
167
|
+
const line = `${key}: ${truncate((0, sensitive_key_1.maskCredentialValue)(key, value), maxLen)}`;
|
|
158
168
|
pairs.push(useBullet ? `• ${line}` : line);
|
|
159
169
|
}
|
|
160
170
|
return pairs.join(separator);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-data-resolver.js","sourceRoot":"","sources":["../../src/exporters/test-data-resolver.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"test-data-resolver.js","sourceRoot":"","sources":["../../src/exporters/test-data-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/gherkin-parser/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/gherkin-parser/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAGpE;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,WAAW,CAIpD,CAAC;AAiCF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,YAAY,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;IAClD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,MAAM,CAAiB;;IAS/B;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa;IAgCjD;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IA0B9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;IACH,OAAO,CAAC,SAAS;IAyGjB;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE;CAmB3D"}
|
|
@@ -44,6 +44,7 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
44
44
|
const path_1 = __importDefault(require("path"));
|
|
45
45
|
const selector_resolver_1 = require("../test-generator/utils/selector-resolver");
|
|
46
46
|
const mask_refs_for_matching_1 = require("../test-generator/utils/mask-refs-for-matching");
|
|
47
|
+
const parent_scope_clause_1 = require("./parent-scope-clause");
|
|
47
48
|
/**
|
|
48
49
|
* Canonical state clauses, longest-first. Order is load-bearing twice over: `sorted ascending` must
|
|
49
50
|
* be tried before any bare word so it is not split, and `unchecked` before `checked` so the
|
|
@@ -193,17 +194,21 @@ class GherkinParser {
|
|
|
193
194
|
*/
|
|
194
195
|
parseStep(step) {
|
|
195
196
|
let text = step.text;
|
|
196
|
-
// === Extract parent scoping: "in [Parent Name]
|
|
197
|
-
// Must be extracted first so the parent [brackets] don't interfere with target selector
|
|
198
|
-
//
|
|
199
|
-
|
|
197
|
+
// === Extract parent scoping: "in [Parent Name] containerType [with <value>]" ===
|
|
198
|
+
// Must be extracted first so the parent [brackets] don't interfere with target selector
|
|
199
|
+
// extraction. See parent-scope-clause.ts for the container vocabulary and why an unrecognized
|
|
200
|
+
// clause is reported (SG-W028) rather than left to be absorbed into the target's tokens.
|
|
201
|
+
const { clause: parentScope, unsupportedType } = (0, parent_scope_clause_1.extractParentScopeClause)(text);
|
|
200
202
|
let parentRef;
|
|
201
203
|
let parentType;
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
204
|
+
let parentValueRef;
|
|
205
|
+
let parentValueText;
|
|
206
|
+
if (parentScope) {
|
|
207
|
+
parentRef = parentScope.ref;
|
|
208
|
+
parentType = parentScope.type;
|
|
209
|
+
parentValueRef = parentScope.valueRef;
|
|
210
|
+
parentValueText = parentScope.valueText;
|
|
211
|
+
text = parentScope.remainingText;
|
|
207
212
|
}
|
|
208
213
|
// Extract selector reference: [Email Address] or [login:email_field] (legacy)
|
|
209
214
|
// Support natural language and legacy formats
|
|
@@ -277,6 +282,9 @@ class GherkinParser {
|
|
|
277
282
|
nth,
|
|
278
283
|
parentRef,
|
|
279
284
|
parentType,
|
|
285
|
+
parentValueRef,
|
|
286
|
+
parentValueText,
|
|
287
|
+
unsupportedScopeType: unsupportedType,
|
|
280
288
|
dataTable,
|
|
281
289
|
state: extractStateClause(step.text),
|
|
282
290
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/gherkin-parser/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc;AACd,2DAA6C;AAC7C,6DAA+C;AAC/C,4CAAoB;AACpB,gDAAwB;AACxB,iFAA6E;AAC7E,2FAAqF;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/gherkin-parser/index.ts"],"names":[],"mappings":"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"}
|