@sun-asterisk/sungen 1.0.19 ā 1.0.21
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 +3 -3
- package/dist/cli/commands/add.d.ts +3 -0
- package/dist/cli/commands/add.d.ts.map +1 -0
- package/dist/cli/commands/add.js +27 -0
- package/dist/cli/commands/add.js.map +1 -0
- package/dist/cli/commands/cache-clear.d.ts +3 -0
- package/dist/cli/commands/cache-clear.d.ts.map +1 -0
- package/dist/cli/commands/cache-clear.js +24 -0
- package/dist/cli/commands/cache-clear.js.map +1 -0
- package/dist/cli/commands/full.d.ts +3 -0
- package/dist/cli/commands/full.d.ts.map +1 -0
- package/dist/cli/commands/full.js +37 -0
- package/dist/cli/commands/full.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +3 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +53 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +20 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/live-scan.d.ts +3 -0
- package/dist/cli/commands/live-scan.d.ts.map +1 -0
- package/dist/cli/commands/{live-scan-command.js ā live-scan.js} +22 -16
- package/dist/cli/commands/live-scan.js.map +1 -0
- package/dist/cli/commands/makeauth.d.ts +3 -0
- package/dist/cli/commands/makeauth.d.ts.map +1 -0
- package/dist/cli/commands/makeauth.js +76 -0
- package/dist/cli/commands/makeauth.js.map +1 -0
- package/dist/cli/commands/map.d.ts +3 -0
- package/dist/cli/commands/map.d.ts.map +1 -0
- package/dist/cli/commands/map.js +93 -0
- package/dist/cli/commands/map.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +3 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +43 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/index.js +29 -442
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/types.d.ts +9 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +7 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/utils.d.ts +6 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cli/utils.js +101 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/core/live-scanner/matrix-reader.d.ts.map +1 -1
- package/dist/core/live-scanner/matrix-reader.js +2 -40
- package/dist/core/live-scanner/matrix-reader.js.map +1 -1
- package/dist/core/live-scanner/scanner.d.ts.map +1 -1
- package/dist/core/live-scanner/scanner.js +22 -4
- package/dist/core/live-scanner/scanner.js.map +1 -1
- package/dist/core/live-scanner/step-replayer.d.ts +1 -1
- package/dist/core/live-scanner/step-replayer.d.ts.map +1 -1
- package/dist/core/live-scanner/step-replayer.js +107 -6
- package/dist/core/live-scanner/step-replayer.js.map +1 -1
- package/dist/core/live-scanner/types.d.ts +1 -0
- package/dist/core/live-scanner/types.d.ts.map +1 -1
- package/dist/core/validator/selector-validator.d.ts.map +1 -1
- package/dist/core/validator/selector-validator.js +2 -1
- package/dist/core/validator/selector-validator.js.map +1 -1
- package/dist/generators/scaffold-generator/index.d.ts +2 -1
- package/dist/generators/scaffold-generator/index.d.ts.map +1 -1
- package/dist/generators/scaffold-generator/index.js +21 -1
- package/dist/generators/scaffold-generator/index.js.map +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/click-select-action.hbs +2 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role-with-data.hbs +1 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role.hbs +1 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/checked-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/column-cell-assertion.hbs +3 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/contain-text-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/count-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-filter-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +4 -3
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-variable-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/empty-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/enabled-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/focused-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/have-text-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-dialog-heading-assertion.hbs +2 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-filter-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +4 -3
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-variable-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/is-hidden-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/list-item-count-assertion.hbs +2 -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/page-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-dialog-heading-assertion.hbs +2 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-locator-variable-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-role-variable-assertion.hbs +4 -3
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-variable-assertion.hbs +1 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/navigation/navigation.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/navigation/wait-for-element-with-text.hbs +1 -1
- package/dist/generators/test-generator/patterns/assertion-patterns.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/assertion-patterns.js +95 -58
- package/dist/generators/test-generator/patterns/assertion-patterns.js.map +1 -1
- package/dist/generators/test-generator/patterns/form-patterns.d.ts +0 -2
- package/dist/generators/test-generator/patterns/form-patterns.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/form-patterns.js +34 -47
- package/dist/generators/test-generator/patterns/form-patterns.js.map +1 -1
- package/dist/generators/test-generator/patterns/index.d.ts +3 -1
- package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/index.js +20 -3
- package/dist/generators/test-generator/patterns/index.js.map +1 -1
- package/dist/generators/test-generator/patterns/interaction-patterns.d.ts +0 -1
- package/dist/generators/test-generator/patterns/interaction-patterns.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/interaction-patterns.js +44 -85
- package/dist/generators/test-generator/patterns/interaction-patterns.js.map +1 -1
- package/dist/generators/test-generator/patterns/legacy-patterns.d.ts +7 -0
- package/dist/generators/test-generator/patterns/legacy-patterns.d.ts.map +1 -0
- package/dist/generators/test-generator/patterns/legacy-patterns.js +98 -0
- package/dist/generators/test-generator/patterns/legacy-patterns.js.map +1 -0
- package/dist/generators/test-generator/patterns/navigation-patterns.d.ts +0 -2
- package/dist/generators/test-generator/patterns/navigation-patterns.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/navigation-patterns.js +14 -42
- package/dist/generators/test-generator/patterns/navigation-patterns.js.map +1 -1
- package/dist/generators/test-generator/patterns/setup-patterns.d.ts +0 -1
- package/dist/generators/test-generator/patterns/setup-patterns.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/setup-patterns.js +23 -35
- package/dist/generators/test-generator/patterns/setup-patterns.js.map +1 -1
- package/dist/generators/test-generator/patterns/types.d.ts +18 -3
- package/dist/generators/test-generator/patterns/types.d.ts.map +1 -1
- package/dist/generators/test-generator/step-mapper.d.ts +0 -15
- package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
- package/dist/generators/test-generator/step-mapper.js +4 -106
- package/dist/generators/test-generator/step-mapper.js.map +1 -1
- package/dist/{executor/test-generator.d.ts ā generators/test-generator/types.d.ts} +4 -25
- package/dist/generators/test-generator/types.d.ts.map +1 -0
- package/dist/generators/test-generator/types.js +106 -0
- package/dist/generators/test-generator/types.js.map +1 -0
- package/dist/generators/test-generator/utils/data-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/data-resolver.js +8 -17
- package/dist/generators/test-generator/utils/data-resolver.js.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.js +10 -18
- package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
- package/dist/orchestrator/cache-manager.d.ts +1 -23
- package/dist/orchestrator/cache-manager.d.ts.map +1 -1
- package/dist/orchestrator/cache-manager.js +1 -87
- package/dist/orchestrator/cache-manager.js.map +1 -1
- package/dist/orchestrator/pipeline.d.ts +11 -28
- package/dist/orchestrator/pipeline.d.ts.map +1 -1
- package/dist/orchestrator/pipeline.js +52 -371
- package/dist/orchestrator/pipeline.js.map +1 -1
- package/dist/orchestrator/reporter.d.ts +1 -1
- package/dist/orchestrator/reporter.d.ts.map +1 -1
- package/dist/orchestrator/screen-manager.js +1 -1
- package/dist/orchestrator/screen-manager.js.map +1 -1
- package/dist/utils/feature-finder.d.ts +9 -0
- package/dist/utils/feature-finder.d.ts.map +1 -0
- package/dist/utils/feature-finder.js +67 -0
- package/dist/utils/feature-finder.js.map +1 -0
- package/dist/utils/screen-paths.d.ts +10 -0
- package/dist/utils/screen-paths.d.ts.map +1 -0
- package/dist/utils/screen-paths.js +73 -0
- package/dist/utils/screen-paths.js.map +1 -0
- package/dist/utils/selector-loader.d.ts +6 -0
- package/dist/utils/selector-loader.d.ts.map +1 -0
- package/dist/utils/selector-loader.js +20 -0
- package/dist/utils/selector-loader.js.map +1 -0
- package/dist/utils/selector-types.d.ts +7 -0
- package/dist/utils/selector-types.d.ts.map +1 -0
- package/dist/utils/selector-types.js +19 -0
- package/dist/utils/selector-types.js.map +1 -0
- package/dist/utils/test-data-loader.d.ts +6 -0
- package/dist/utils/test-data-loader.d.ts.map +1 -0
- package/dist/utils/test-data-loader.js +20 -0
- package/dist/utils/test-data-loader.js.map +1 -0
- package/dist/utils/yaml-io.d.ts +14 -0
- package/dist/utils/yaml-io.d.ts.map +1 -0
- package/dist/utils/yaml-io.js +72 -0
- package/dist/utils/yaml-io.js.map +1 -0
- package/package.json +1 -1
- package/src/cli/commands/add.ts +25 -0
- package/src/cli/commands/cache-clear.ts +22 -0
- package/src/cli/commands/full.ts +35 -0
- package/src/cli/commands/generate.ts +55 -0
- package/src/cli/commands/init.ts +17 -0
- package/src/cli/commands/{live-scan-command.ts ā live-scan.ts} +21 -18
- package/src/cli/commands/makeauth.ts +77 -0
- package/src/cli/commands/map.ts +97 -0
- package/src/cli/commands/validate.ts +43 -0
- package/src/cli/index.ts +32 -473
- package/src/cli/types.ts +9 -0
- package/src/cli/utils.ts +106 -0
- package/src/core/live-scanner/matrix-reader.ts +2 -8
- package/src/core/live-scanner/scanner.ts +27 -4
- package/src/core/live-scanner/step-replayer.ts +92 -6
- package/src/core/live-scanner/types.ts +1 -0
- package/src/core/validator/selector-validator.ts +3 -2
- package/src/generators/scaffold-generator/index.ts +23 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/click-select-action.hbs +2 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role-with-data.hbs +1 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-role.hbs +1 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/checked-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/column-cell-assertion.hbs +3 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/contain-text-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/count-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-filter-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +4 -3
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-variable-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/empty-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/enabled-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/focused-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/have-text-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-dialog-heading-assertion.hbs +2 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-filter-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +4 -3
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-variable-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/is-hidden-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/list-item-count-assertion.hbs +2 -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/page-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-dialog-heading-assertion.hbs +2 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-locator-variable-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-role-variable-assertion.hbs +4 -3
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-variable-assertion.hbs +1 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/navigation/navigation.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/navigation/wait-for-element-with-text.hbs +1 -1
- package/src/generators/test-generator/patterns/assertion-patterns.ts +102 -62
- package/src/generators/test-generator/patterns/form-patterns.ts +38 -60
- package/src/generators/test-generator/patterns/index.ts +22 -4
- package/src/generators/test-generator/patterns/interaction-patterns.ts +47 -107
- package/src/generators/test-generator/patterns/legacy-patterns.ts +104 -0
- package/src/generators/test-generator/patterns/navigation-patterns.ts +27 -69
- package/src/generators/test-generator/patterns/setup-patterns.ts +23 -41
- package/src/generators/test-generator/patterns/types.ts +26 -9
- package/src/generators/test-generator/step-mapper.ts +4 -124
- package/src/generators/test-generator/types.ts +131 -0
- package/src/generators/test-generator/utils/data-resolver.ts +8 -13
- package/src/generators/test-generator/utils/selector-resolver.ts +15 -17
- package/src/orchestrator/cache-manager.ts +1 -107
- package/src/orchestrator/pipeline.ts +58 -433
- package/src/orchestrator/reporter.ts +1 -1
- package/src/orchestrator/screen-manager.ts +1 -1
- package/src/utils/feature-finder.ts +33 -0
- package/src/utils/screen-paths.ts +37 -0
- package/src/utils/selector-loader.ts +23 -0
- package/src/utils/selector-types.ts +17 -0
- package/src/utils/test-data-loader.ts +23 -0
- package/src/utils/yaml-io.ts +33 -0
- package/dist/cli/commands/auto-tag-command.d.ts +0 -8
- package/dist/cli/commands/auto-tag-command.d.ts.map +0 -1
- package/dist/cli/commands/auto-tag-command.js +0 -104
- package/dist/cli/commands/auto-tag-command.js.map +0 -1
- package/dist/cli/commands/live-scan-command.d.ts +0 -9
- package/dist/cli/commands/live-scan-command.d.ts.map +0 -1
- package/dist/cli/commands/live-scan-command.js.map +0 -1
- package/dist/executor/playwright/playwright-generator.d.ts +0 -33
- package/dist/executor/playwright/playwright-generator.d.ts.map +0 -1
- package/dist/executor/playwright/playwright-generator.js +0 -136
- package/dist/executor/playwright/playwright-generator.js.map +0 -1
- package/dist/executor/test-generator.d.ts.map +0 -1
- package/dist/executor/test-generator.js +0 -30
- package/dist/executor/test-generator.js.map +0 -1
- package/dist/generators/cli.d.ts +0 -7
- package/dist/generators/cli.d.ts.map +0 -1
- package/dist/generators/cli.js +0 -570
- package/dist/generators/cli.js.map +0 -1
- package/dist/input/cli-adapter.d.ts +0 -75
- package/dist/input/cli-adapter.d.ts.map +0 -1
- package/dist/input/cli-adapter.js +0 -218
- package/dist/input/cli-adapter.js.map +0 -1
- package/dist/input/config-adapter.d.ts +0 -25
- package/dist/input/config-adapter.d.ts.map +0 -1
- package/dist/input/config-adapter.js +0 -70
- package/dist/input/config-adapter.js.map +0 -1
- package/dist/input/input-adapter.d.ts +0 -28
- package/dist/input/input-adapter.d.ts.map +0 -1
- package/dist/input/input-adapter.js +0 -17
- package/dist/input/input-adapter.js.map +0 -1
- package/dist/input/vscode-adapter.d.ts +0 -62
- package/dist/input/vscode-adapter.d.ts.map +0 -1
- package/dist/input/vscode-adapter.js +0 -64
- package/dist/input/vscode-adapter.js.map +0 -1
- package/dist/tools/auto-tagger.d.ts +0 -107
- package/dist/tools/auto-tagger.d.ts.map +0 -1
- package/dist/tools/auto-tagger.js +0 -502
- package/dist/tools/auto-tagger.js.map +0 -1
- package/src/cli/commands/auto-tag-command.ts +0 -80
- package/src/executor/playwright/playwright-generator.ts +0 -125
- package/src/executor/test-generator.ts +0 -90
- package/src/generators/cli.ts +0 -640
- package/src/input/cli-adapter.ts +0 -233
- package/src/input/config-adapter.ts +0 -71
- package/src/input/input-adapter.ts +0 -32
- package/src/input/vscode-adapter.ts +0 -90
- package/src/tools/auto-tagger.ts +0 -572
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.findFeatureFiles = findFeatureFiles;
|
|
37
|
+
exports.findAllFeatureFiles = findAllFeatureFiles;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const screen_paths_1 = require("./screen-paths");
|
|
41
|
+
/**
|
|
42
|
+
* Find all .feature files for a specific screen.
|
|
43
|
+
*/
|
|
44
|
+
function findFeatureFiles(screensRoot, screenName) {
|
|
45
|
+
const featuresDir = (0, screen_paths_1.getFeaturesDir)(screensRoot, screenName);
|
|
46
|
+
if (!fs.existsSync(featuresDir)) {
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
return fs.readdirSync(featuresDir)
|
|
50
|
+
.filter(f => f.endsWith('.feature'))
|
|
51
|
+
.map(f => path.join(featuresDir, f));
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Find all .feature files across all screens.
|
|
55
|
+
*/
|
|
56
|
+
function findAllFeatureFiles(screensRoot) {
|
|
57
|
+
if (!fs.existsSync(screensRoot)) {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
const files = [];
|
|
61
|
+
const screens = fs.readdirSync(screensRoot).filter(d => fs.statSync(path.join(screensRoot, d)).isDirectory());
|
|
62
|
+
for (const screen of screens) {
|
|
63
|
+
files.push(...findFeatureFiles(screensRoot, screen));
|
|
64
|
+
}
|
|
65
|
+
return files;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=feature-finder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-finder.js","sourceRoot":"","sources":["../../src/utils/feature-finder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,4CAQC;AAKD,kDAYC;AAhCD,uCAAyB;AACzB,2CAA6B;AAC7B,iDAAgD;AAEhD;;GAEG;AACH,SAAgB,gBAAgB,CAAC,WAAmB,EAAE,UAAkB;IACtE,MAAM,WAAW,GAAG,IAAA,6BAAc,EAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC5D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC;SAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;SACnC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,WAAmB;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACrD,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CACrD,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function getScreenDir(screensRoot: string, screenName: string): string;
|
|
2
|
+
export declare function getFeaturesDir(screensRoot: string, screenName: string): string;
|
|
3
|
+
export declare function getSelectorsDir(screensRoot: string, screenName: string): string;
|
|
4
|
+
export declare function getTestDataDir(screensRoot: string, screenName: string): string;
|
|
5
|
+
export declare function getSelectorBasePath(screensRoot: string, screenName: string, featureName: string): string;
|
|
6
|
+
export declare function getSelectorOverridePath(screensRoot: string, screenName: string, featureName: string): string;
|
|
7
|
+
export declare function getTestDataBasePath(screensRoot: string, screenName: string, featureName: string): string;
|
|
8
|
+
export declare function getTestDataOverridePath(screensRoot: string, screenName: string, featureName: string): string;
|
|
9
|
+
export declare function getLiveScanPath(screensRoot: string, screenName: string, featureName: string): string;
|
|
10
|
+
//# sourceMappingURL=screen-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-paths.d.ts","sourceRoot":"","sources":["../../src/utils/screen-paths.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAExG;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAE5G;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAExG;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAE5G;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpG"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getScreenDir = getScreenDir;
|
|
37
|
+
exports.getFeaturesDir = getFeaturesDir;
|
|
38
|
+
exports.getSelectorsDir = getSelectorsDir;
|
|
39
|
+
exports.getTestDataDir = getTestDataDir;
|
|
40
|
+
exports.getSelectorBasePath = getSelectorBasePath;
|
|
41
|
+
exports.getSelectorOverridePath = getSelectorOverridePath;
|
|
42
|
+
exports.getTestDataBasePath = getTestDataBasePath;
|
|
43
|
+
exports.getTestDataOverridePath = getTestDataOverridePath;
|
|
44
|
+
exports.getLiveScanPath = getLiveScanPath;
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
function getScreenDir(screensRoot, screenName) {
|
|
47
|
+
return path.join(screensRoot, screenName);
|
|
48
|
+
}
|
|
49
|
+
function getFeaturesDir(screensRoot, screenName) {
|
|
50
|
+
return path.join(screensRoot, screenName, 'features');
|
|
51
|
+
}
|
|
52
|
+
function getSelectorsDir(screensRoot, screenName) {
|
|
53
|
+
return path.join(screensRoot, screenName, 'selectors');
|
|
54
|
+
}
|
|
55
|
+
function getTestDataDir(screensRoot, screenName) {
|
|
56
|
+
return path.join(screensRoot, screenName, 'test-data');
|
|
57
|
+
}
|
|
58
|
+
function getSelectorBasePath(screensRoot, screenName, featureName) {
|
|
59
|
+
return path.join(screensRoot, screenName, 'selectors', `${featureName}.yaml`);
|
|
60
|
+
}
|
|
61
|
+
function getSelectorOverridePath(screensRoot, screenName, featureName) {
|
|
62
|
+
return path.join(screensRoot, screenName, 'selectors', `${featureName}.override.yaml`);
|
|
63
|
+
}
|
|
64
|
+
function getTestDataBasePath(screensRoot, screenName, featureName) {
|
|
65
|
+
return path.join(screensRoot, screenName, 'test-data', `${featureName}.yaml`);
|
|
66
|
+
}
|
|
67
|
+
function getTestDataOverridePath(screensRoot, screenName, featureName) {
|
|
68
|
+
return path.join(screensRoot, screenName, 'test-data', `${featureName}.override.yaml`);
|
|
69
|
+
}
|
|
70
|
+
function getLiveScanPath(screensRoot, screenName, featureName) {
|
|
71
|
+
return path.join(screensRoot, screenName, 'selectors', `${featureName}.live-scan.yaml`);
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=screen-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-paths.js","sourceRoot":"","sources":["../../src/utils/screen-paths.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,oCAEC;AAED,wCAEC;AAED,0CAEC;AAED,wCAEC;AAED,kDAEC;AAED,0DAEC;AAED,kDAEC;AAED,0DAEC;AAED,0CAEC;AApCD,2CAA6B;AAE7B,SAAgB,YAAY,CAAC,WAAmB,EAAE,UAAkB;IAClE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,cAAc,CAAC,WAAmB,EAAE,UAAkB;IACpE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AACxD,CAAC;AAED,SAAgB,eAAe,CAAC,WAAmB,EAAE,UAAkB;IACrE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,cAAc,CAAC,WAAmB,EAAE,UAAkB;IACpE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,mBAAmB,CAAC,WAAmB,EAAE,UAAkB,EAAE,WAAmB;IAC9F,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,WAAW,OAAO,CAAC,CAAC;AAChF,CAAC;AAED,SAAgB,uBAAuB,CAAC,WAAmB,EAAE,UAAkB,EAAE,WAAmB;IAClG,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,WAAW,gBAAgB,CAAC,CAAC;AACzF,CAAC;AAED,SAAgB,mBAAmB,CAAC,WAAmB,EAAE,UAAkB,EAAE,WAAmB;IAC9F,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,WAAW,OAAO,CAAC,CAAC;AAChF,CAAC;AAED,SAAgB,uBAAuB,CAAC,WAAmB,EAAE,UAAkB,EAAE,WAAmB;IAClG,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,WAAW,gBAAgB,CAAC,CAAC;AACzF,CAAC;AAED,SAAgB,eAAe,CAAC,WAAmB,EAAE,UAAkB,EAAE,WAAmB;IAC1F,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,WAAW,iBAAiB,CAAC,CAAC;AAC1F,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load selectors for a feature, merging base and override files.
|
|
3
|
+
* Returns empty object if no files found.
|
|
4
|
+
*/
|
|
5
|
+
export declare function loadSelectors<T = Record<string, any>>(screensRoot: string, screenName: string, featureName: string): T;
|
|
6
|
+
//# sourceMappingURL=selector-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector-loader.d.ts","sourceRoot":"","sources":["../../src/utils/selector-loader.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnD,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,CAAC,CAWH"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadSelectors = loadSelectors;
|
|
4
|
+
const yaml_io_1 = require("./yaml-io");
|
|
5
|
+
const screen_paths_1 = require("./screen-paths");
|
|
6
|
+
/**
|
|
7
|
+
* Load selectors for a feature, merging base and override files.
|
|
8
|
+
* Returns empty object if no files found.
|
|
9
|
+
*/
|
|
10
|
+
function loadSelectors(screensRoot, screenName, featureName) {
|
|
11
|
+
const basePath = (0, screen_paths_1.getSelectorBasePath)(screensRoot, screenName, featureName);
|
|
12
|
+
const overridePath = (0, screen_paths_1.getSelectorOverridePath)(screensRoot, screenName, featureName);
|
|
13
|
+
const base = (0, yaml_io_1.readYamlIfExists)(basePath) || {};
|
|
14
|
+
const override = (0, yaml_io_1.readYamlIfExists)(overridePath);
|
|
15
|
+
if (override) {
|
|
16
|
+
return { ...base, ...override };
|
|
17
|
+
}
|
|
18
|
+
return base;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=selector-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector-loader.js","sourceRoot":"","sources":["../../src/utils/selector-loader.ts"],"names":[],"mappings":";;AAOA,sCAeC;AAtBD,uCAA6C;AAC7C,iDAA8E;AAE9E;;;GAGG;AACH,SAAgB,aAAa,CAC3B,WAAmB,EACnB,UAAkB,EAClB,WAAmB;IAEnB,MAAM,QAAQ,GAAG,IAAA,kCAAmB,EAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,IAAA,sCAAuB,EAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAEnF,MAAM,IAAI,GAAG,IAAA,0BAAgB,EAAI,QAAQ,CAAC,IAAI,EAAO,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAA,0BAAgB,EAAI,YAAY,CAAC,CAAC;IAEnD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Valid selector types used across scaffold generator, selector resolver, and validator.
|
|
3
|
+
* Single source of truth ā import this instead of hardcoding.
|
|
4
|
+
*/
|
|
5
|
+
export declare const VALID_SELECTOR_TYPES: readonly ["placeholder", "role", "testid", "label", "text", "page", "column", "locator", "id"];
|
|
6
|
+
export type SelectorType = (typeof VALID_SELECTOR_TYPES)[number];
|
|
7
|
+
//# sourceMappingURL=selector-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector-types.d.ts","sourceRoot":"","sources":["../../src/utils/selector-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,gGAUvB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VALID_SELECTOR_TYPES = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Valid selector types used across scaffold generator, selector resolver, and validator.
|
|
6
|
+
* Single source of truth ā import this instead of hardcoding.
|
|
7
|
+
*/
|
|
8
|
+
exports.VALID_SELECTOR_TYPES = [
|
|
9
|
+
'placeholder',
|
|
10
|
+
'role',
|
|
11
|
+
'testid',
|
|
12
|
+
'label',
|
|
13
|
+
'text',
|
|
14
|
+
'page',
|
|
15
|
+
'column',
|
|
16
|
+
'locator',
|
|
17
|
+
'id',
|
|
18
|
+
];
|
|
19
|
+
//# sourceMappingURL=selector-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector-types.js","sourceRoot":"","sources":["../../src/utils/selector-types.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,oBAAoB,GAAG;IAClC,aAAa;IACb,MAAM;IACN,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,SAAS;IACT,IAAI;CACI,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Load test data for a feature, merging base and override files.
|
|
3
|
+
* Returns empty object if no files found.
|
|
4
|
+
*/
|
|
5
|
+
export declare function loadTestData<T = Record<string, any>>(screensRoot: string, screenName: string, featureName: string): T;
|
|
6
|
+
//# sourceMappingURL=test-data-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-data-loader.d.ts","sourceRoot":"","sources":["../../src/utils/test-data-loader.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClD,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,CAAC,CAWH"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadTestData = loadTestData;
|
|
4
|
+
const yaml_io_1 = require("./yaml-io");
|
|
5
|
+
const screen_paths_1 = require("./screen-paths");
|
|
6
|
+
/**
|
|
7
|
+
* Load test data for a feature, merging base and override files.
|
|
8
|
+
* Returns empty object if no files found.
|
|
9
|
+
*/
|
|
10
|
+
function loadTestData(screensRoot, screenName, featureName) {
|
|
11
|
+
const basePath = (0, screen_paths_1.getTestDataBasePath)(screensRoot, screenName, featureName);
|
|
12
|
+
const overridePath = (0, screen_paths_1.getTestDataOverridePath)(screensRoot, screenName, featureName);
|
|
13
|
+
const base = (0, yaml_io_1.readYamlIfExists)(basePath) || {};
|
|
14
|
+
const override = (0, yaml_io_1.readYamlIfExists)(overridePath);
|
|
15
|
+
if (override) {
|
|
16
|
+
return { ...base, ...override };
|
|
17
|
+
}
|
|
18
|
+
return base;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=test-data-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-data-loader.js","sourceRoot":"","sources":["../../src/utils/test-data-loader.ts"],"names":[],"mappings":";;AAOA,oCAeC;AAtBD,uCAA6C;AAC7C,iDAA8E;AAE9E;;;GAGG;AACH,SAAgB,YAAY,CAC1B,WAAmB,EACnB,UAAkB,EAClB,WAAmB;IAEnB,MAAM,QAAQ,GAAG,IAAA,kCAAmB,EAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,IAAA,sCAAuB,EAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAEnF,MAAM,IAAI,GAAG,IAAA,0BAAgB,EAAI,QAAQ,CAAC,IAAI,EAAO,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAA,0BAAgB,EAAI,YAAY,CAAC,CAAC;IAEnD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import yaml from 'yaml';
|
|
2
|
+
/**
|
|
3
|
+
* Read and parse a YAML file. Throws if file doesn't exist or YAML is invalid.
|
|
4
|
+
*/
|
|
5
|
+
export declare function readYaml<T = any>(filePath: string): T;
|
|
6
|
+
/**
|
|
7
|
+
* Read and parse a YAML file, returning null if the file doesn't exist.
|
|
8
|
+
*/
|
|
9
|
+
export declare function readYamlIfExists<T = any>(filePath: string): T | null;
|
|
10
|
+
/**
|
|
11
|
+
* Write data to a YAML file, creating parent directories if needed.
|
|
12
|
+
*/
|
|
13
|
+
export declare function writeYaml(filePath: string, data: any, options?: yaml.DocumentOptions): void;
|
|
14
|
+
//# sourceMappingURL=yaml-io.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml-io.d.ts","sourceRoot":"","sources":["../../src/utils/yaml-io.ts"],"names":[],"mappings":"AAEA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAGrD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAMpE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAM3F"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.readYaml = readYaml;
|
|
40
|
+
exports.readYamlIfExists = readYamlIfExists;
|
|
41
|
+
exports.writeYaml = writeYaml;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const yaml_1 = __importDefault(require("yaml"));
|
|
45
|
+
/**
|
|
46
|
+
* Read and parse a YAML file. Throws if file doesn't exist or YAML is invalid.
|
|
47
|
+
*/
|
|
48
|
+
function readYaml(filePath) {
|
|
49
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
50
|
+
return yaml_1.default.parse(content);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Read and parse a YAML file, returning null if the file doesn't exist.
|
|
54
|
+
*/
|
|
55
|
+
function readYamlIfExists(filePath) {
|
|
56
|
+
if (!fs.existsSync(filePath)) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
60
|
+
return yaml_1.default.parse(content);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Write data to a YAML file, creating parent directories if needed.
|
|
64
|
+
*/
|
|
65
|
+
function writeYaml(filePath, data, options) {
|
|
66
|
+
const dir = path.dirname(filePath);
|
|
67
|
+
if (!fs.existsSync(dir)) {
|
|
68
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
69
|
+
}
|
|
70
|
+
fs.writeFileSync(filePath, yaml_1.default.stringify(data, options), 'utf-8');
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=yaml-io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml-io.js","sourceRoot":"","sources":["../../src/utils/yaml-io.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,4BAGC;AAKD,4CAMC;AAKD,8BAMC;AAhCD,uCAAyB;AACzB,2CAA6B;AAC7B,gDAAwB;AAExB;;GAEG;AACH,SAAgB,QAAQ,CAAU,QAAgB;IAChD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,cAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAU,QAAgB;IACxD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,cAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,QAAgB,EAAE,IAAS,EAAE,OAA8B;IACnF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,cAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AACrE,CAAC"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
|
|
3
|
+
export function registerAddCommand(program: Command): void {
|
|
4
|
+
program
|
|
5
|
+
.command('add')
|
|
6
|
+
.description('Add screen definition with scaffolded files')
|
|
7
|
+
.requiredOption('--screen <name>', 'Screen name')
|
|
8
|
+
.option('-p, --path <path>', 'Screen route path')
|
|
9
|
+
.option('-d, --description <text>', 'Screen description')
|
|
10
|
+
.action(async (options) => {
|
|
11
|
+
try {
|
|
12
|
+
const { ScreenManager } = require('../../orchestrator/screen-manager');
|
|
13
|
+
const manager = new ScreenManager();
|
|
14
|
+
|
|
15
|
+
await manager.addScreen({
|
|
16
|
+
name: options.screen,
|
|
17
|
+
path: options.path,
|
|
18
|
+
description: options.description,
|
|
19
|
+
});
|
|
20
|
+
} catch (error) {
|
|
21
|
+
console.error('ā Add screen failed:', error);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { ConfigLoader } from '../../config/config-loader';
|
|
3
|
+
import { CacheManager } from '../../orchestrator/cache-manager';
|
|
4
|
+
|
|
5
|
+
export function registerCacheClearCommand(program: Command): void {
|
|
6
|
+
program
|
|
7
|
+
.command('cache-clear')
|
|
8
|
+
.description('Clear all caches')
|
|
9
|
+
.action(async () => {
|
|
10
|
+
try {
|
|
11
|
+
const config = new ConfigLoader().load({});
|
|
12
|
+
const cacheManager = new CacheManager(config);
|
|
13
|
+
|
|
14
|
+
console.log('šļø Clearing cache...');
|
|
15
|
+
await cacheManager.clear();
|
|
16
|
+
console.log('ā
Cache cleared successfully');
|
|
17
|
+
} catch (error) {
|
|
18
|
+
console.error('ā Cache clear failed:', error);
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { ConfigLoader } from '../../config/config-loader';
|
|
3
|
+
import { Pipeline } from '../../orchestrator/pipeline';
|
|
4
|
+
|
|
5
|
+
export function registerFullCommand(program: Command): void {
|
|
6
|
+
program
|
|
7
|
+
.command('full')
|
|
8
|
+
.description('Run full pipeline (live-scan + map + generate)')
|
|
9
|
+
.option('-s, --screen <name>', 'Process specific screen (optional)')
|
|
10
|
+
.option('-f, --force', 'Force rescan and overwrite')
|
|
11
|
+
.option('--headed', 'Launch browser in headed mode during live-scan', false)
|
|
12
|
+
.option('--auth-dir <path>', 'Auth storage state directory for live-scan', 'specs/.auth')
|
|
13
|
+
.option('--skip-live-scan', 'Skip live-scan phase')
|
|
14
|
+
.action(async (options) => {
|
|
15
|
+
try {
|
|
16
|
+
const cliOptions = {
|
|
17
|
+
...program.opts(),
|
|
18
|
+
...options,
|
|
19
|
+
};
|
|
20
|
+
const config = new ConfigLoader().load(cliOptions);
|
|
21
|
+
const pipeline = new Pipeline(config);
|
|
22
|
+
|
|
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
|
+
} catch (error) {
|
|
31
|
+
console.error('ā Full pipeline failed:', error);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { ConfigLoader } from '../../config/config-loader';
|
|
3
|
+
import { Pipeline } from '../../orchestrator/pipeline';
|
|
4
|
+
import { ValidationResult } from '../../core/validator';
|
|
5
|
+
import { printValidationResult } from '../utils';
|
|
6
|
+
|
|
7
|
+
export function registerGenerateCommand(program: Command): void {
|
|
8
|
+
program
|
|
9
|
+
.command('generate')
|
|
10
|
+
.description('Generate Playwright test code from features')
|
|
11
|
+
.option('--ai-mapper', 'Enable AI fallback for unknown Gherkin patterns')
|
|
12
|
+
.option('--framework <name>', 'Test framework (playwright, appium, integration)', 'playwright')
|
|
13
|
+
.option('-s, --screen <name>', 'Filter generation to specific screen')
|
|
14
|
+
.option('-f, --force', 'Force regeneration, bypass cache')
|
|
15
|
+
.option('--skip-validation', 'Skip validation before generation')
|
|
16
|
+
.action(async (options) => {
|
|
17
|
+
try {
|
|
18
|
+
// Run validation first (unless --skip-validation is set)
|
|
19
|
+
if (!options.skipValidation) {
|
|
20
|
+
const { ScreenValidator } = require('../../core/validator');
|
|
21
|
+
const validator = new ScreenValidator();
|
|
22
|
+
|
|
23
|
+
let validationResult: ValidationResult;
|
|
24
|
+
if (options.screen) {
|
|
25
|
+
console.log(`š Validating screen: ${options.screen}...\n`);
|
|
26
|
+
validationResult = validator.validateScreen(options.screen);
|
|
27
|
+
} else {
|
|
28
|
+
console.log('š Validating all screens...\n');
|
|
29
|
+
validationResult = validator.validateAll();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (!validationResult.valid) {
|
|
33
|
+
printValidationResult(validationResult, false);
|
|
34
|
+
console.error('\nā Validation failed. Fix errors before generating tests.');
|
|
35
|
+
console.error(' Tip: Use --skip-validation to bypass validation (not recommended)');
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
console.log(`ā
Validation passed (${validationResult.summary.totalFiles} files)\n`);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const cliOptions = {
|
|
43
|
+
...program.opts(),
|
|
44
|
+
...options,
|
|
45
|
+
};
|
|
46
|
+
const config = new ConfigLoader().load(cliOptions);
|
|
47
|
+
const pipeline = new Pipeline(config);
|
|
48
|
+
|
|
49
|
+
await pipeline.runTestGeneration(options.screen);
|
|
50
|
+
} catch (error) {
|
|
51
|
+
console.error('ā Test generation failed:', error);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
|
|
3
|
+
export function registerInitCommand(program: Command): void {
|
|
4
|
+
program
|
|
5
|
+
.command('init [projectName]')
|
|
6
|
+
.description('Initialize Sungen project (optionally create and initialize in a new project folder)')
|
|
7
|
+
.action(async (projectName?: string) => {
|
|
8
|
+
try {
|
|
9
|
+
const { ProjectInitializer } = require('../../orchestrator/project-initializer');
|
|
10
|
+
const initializer = new ProjectInitializer();
|
|
11
|
+
await initializer.initialize(projectName);
|
|
12
|
+
} catch (error) {
|
|
13
|
+
console.error('ā Init failed:', error);
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
@@ -1,34 +1,32 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Live Scan CLI Command
|
|
3
|
-
* Launches a browser, replays Gherkin steps, and produces .live-scan.yaml matrix files.
|
|
4
|
-
* Auto-detects baseURL from playwright.config.ts.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
1
|
import { Command } from 'commander';
|
|
8
|
-
import { RuntimeConfig } from '../../config/config-schema';
|
|
9
|
-
import { LiveScanner } from '../../core/live-scanner';
|
|
10
|
-
|
|
11
|
-
export function createLiveScanCommand(config: RuntimeConfig): Command {
|
|
12
|
-
const cmd = new Command('live-scan');
|
|
13
2
|
|
|
14
|
-
|
|
3
|
+
export function registerLiveScanCommand(program: Command): void {
|
|
4
|
+
program
|
|
5
|
+
.command('live-scan')
|
|
15
6
|
.description('Scan a live site to discover real selectors for Gherkin element references')
|
|
16
7
|
.requiredOption('-s, --screen <name>', 'Screen name to scan')
|
|
17
8
|
.option('--url <baseUrl>', 'Override base URL (default: read from playwright.config.ts)')
|
|
18
9
|
.option('--headed', 'Launch browser in headed (visible) mode', false)
|
|
19
10
|
.option('--auth-dir <path>', 'Directory containing auth storage state files', 'specs/.auth')
|
|
11
|
+
.option('-f, --force', 'Force rescan all elements, ignoring existing results', false)
|
|
20
12
|
.action(async (options) => {
|
|
21
13
|
try {
|
|
14
|
+
const { LiveScanner } = require('../../core/live-scanner');
|
|
15
|
+
|
|
22
16
|
console.log('\nš Sungen Live Scanner\n');
|
|
23
17
|
console.log(`š Screen: ${options.screen}`);
|
|
24
18
|
console.log(`š„ļø Mode: ${options.headed ? 'headed' : 'headless'}`);
|
|
19
|
+
if (options.force) {
|
|
20
|
+
console.log(`š Force mode: rescanning all elements`);
|
|
21
|
+
}
|
|
25
22
|
|
|
26
23
|
const scanner = new LiveScanner({
|
|
27
|
-
baseUrl: options.url,
|
|
24
|
+
baseUrl: options.url,
|
|
28
25
|
screenName: options.screen,
|
|
29
26
|
screensDir: 'qa/screens',
|
|
30
27
|
headed: options.headed,
|
|
31
28
|
authDir: options.authDir,
|
|
29
|
+
force: options.force,
|
|
32
30
|
});
|
|
33
31
|
|
|
34
32
|
const results = await scanner.scan();
|
|
@@ -40,12 +38,16 @@ export function createLiveScanCommand(config: RuntimeConfig): Command {
|
|
|
40
38
|
let totalResolved = 0;
|
|
41
39
|
let totalWarnings = 0;
|
|
42
40
|
let totalUnresolved = 0;
|
|
41
|
+
let totalSkipped = 0;
|
|
43
42
|
|
|
44
43
|
for (const result of results) {
|
|
45
|
-
for (const scenario of Object.values(result.scenarios)) {
|
|
46
|
-
for (const element of Object.values(scenario.elements)) {
|
|
44
|
+
for (const scenario of Object.values(result.scenarios) as any[]) {
|
|
45
|
+
for (const element of Object.values(scenario.elements) as any[]) {
|
|
47
46
|
totalElements++;
|
|
48
|
-
if (element
|
|
47
|
+
if ((element as any).skipped) {
|
|
48
|
+
totalSkipped++;
|
|
49
|
+
totalResolved++;
|
|
50
|
+
} else if (element.matchMethod === 'unresolved') {
|
|
49
51
|
totalUnresolved++;
|
|
50
52
|
} else {
|
|
51
53
|
totalResolved++;
|
|
@@ -57,6 +59,9 @@ export function createLiveScanCommand(config: RuntimeConfig): Command {
|
|
|
57
59
|
|
|
58
60
|
console.log(`Total Elements: ${totalElements}`);
|
|
59
61
|
console.log(`Resolved: ${totalResolved}`);
|
|
62
|
+
if (totalSkipped > 0) {
|
|
63
|
+
console.log(`Skipped (cached): ${totalSkipped}`);
|
|
64
|
+
}
|
|
60
65
|
console.log(`Warnings: ${totalWarnings}`);
|
|
61
66
|
console.log(`Unresolved: ${totalUnresolved}`);
|
|
62
67
|
|
|
@@ -74,6 +79,4 @@ export function createLiveScanCommand(config: RuntimeConfig): Command {
|
|
|
74
79
|
process.exit(1);
|
|
75
80
|
}
|
|
76
81
|
});
|
|
77
|
-
|
|
78
|
-
return cmd;
|
|
79
82
|
}
|