@sun-asterisk/sungen 3.2.31 ā 3.2.33
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/audit.d.ts +1 -0
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +13 -2
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/capability.d.ts.map +1 -1
- package/dist/cli/commands/capability.js +46 -17
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/delivery.d.ts.map +1 -1
- package/dist/cli/commands/delivery.js +39 -18
- 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 +14 -7
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +2 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/results-merge.d.ts.map +1 -1
- package/dist/cli/commands/results-merge.js +2 -12
- package/dist/cli/commands/results-merge.js.map +1 -1
- package/dist/cli/commands/results-sanitize.d.ts.map +1 -1
- package/dist/cli/commands/results-sanitize.js +2 -13
- package/dist/cli/commands/results-sanitize.js.map +1 -1
- package/dist/cli/commands/setup-mobile-env.d.ts +15 -0
- package/dist/cli/commands/setup-mobile-env.d.ts.map +1 -0
- package/dist/cli/commands/setup-mobile-env.js +65 -0
- package/dist/cli/commands/setup-mobile-env.js.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/dashboard/snapshot-builder.d.ts.map +1 -1
- package/dist/dashboard/snapshot-builder.js +6 -10
- package/dist/dashboard/snapshot-builder.js.map +1 -1
- package/dist/exporters/feature-parser.d.ts +21 -0
- package/dist/exporters/feature-parser.d.ts.map +1 -1
- package/dist/exporters/feature-parser.js +32 -1
- package/dist/exporters/feature-parser.js.map +1 -1
- package/dist/exporters/locale-variants.d.ts +7 -1
- package/dist/exporters/locale-variants.d.ts.map +1 -1
- package/dist/exporters/locale-variants.js +23 -16
- package/dist/exporters/locale-variants.js.map +1 -1
- package/dist/exporters/matrix/build.d.ts.map +1 -1
- package/dist/exporters/matrix/build.js +13 -7
- package/dist/exporters/matrix/build.js.map +1 -1
- package/dist/exporters/matrix/carry-manual-results.d.ts +70 -0
- package/dist/exporters/matrix/carry-manual-results.d.ts.map +1 -0
- package/dist/exporters/matrix/carry-manual-results.js +232 -0
- package/dist/exporters/matrix/carry-manual-results.js.map +1 -0
- package/dist/exporters/matrix/export.d.ts +2 -0
- package/dist/exporters/matrix/export.d.ts.map +1 -1
- package/dist/exporters/matrix/export.js +7 -1
- package/dist/exporters/matrix/export.js.map +1 -1
- package/dist/exporters/matrix/wording.d.ts +7 -0
- package/dist/exporters/matrix/wording.d.ts.map +1 -1
- package/dist/exporters/matrix/wording.js +27 -1
- package/dist/exporters/matrix/wording.js.map +1 -1
- package/dist/exporters/xlsx-exporter.d.ts +2 -0
- package/dist/exporters/xlsx-exporter.d.ts.map +1 -1
- package/dist/exporters/xlsx-exporter.js +7 -2
- package/dist/exporters/xlsx-exporter.js.map +1 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/reinstall-app-action.hbs +2 -2
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/all-contain-assertion.hbs +1 -2
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/all-contain-element.hbs +8 -5
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/count-assertion.hbs +5 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/disabled-with-filter-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/hidden-with-filter-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/label-value-assertion.hbs +8 -2
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/list-item-count-assertion.hbs +5 -2
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/state-with-filter-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/visible-filtered-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/visible-with-role-variable-assertion.hbs +7 -3
- package/dist/generators/test-generator/adapters/appium/templates/steps/partials/await-elements.hbs +12 -0
- package/dist/generators/test-generator/adapters/appium/templates/test-file.hbs +94 -4
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/capture-variable.hbs +7 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/label-value-assertion.hbs +7 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/row-scoped-column-assertion.hbs +23 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-role-variable-assertion.hbs +8 -4
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +4 -4
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-strategies/default.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-strategies/id.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +4 -4
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/url-assertion.hbs +17 -2
- package/dist/generators/test-generator/adapters/playwright/templates/test-file.hbs +14 -0
- package/dist/generators/test-generator/code-generator.d.ts +2 -1
- package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
- package/dist/generators/test-generator/code-generator.js +122 -15
- package/dist/generators/test-generator/code-generator.js.map +1 -1
- package/dist/generators/test-generator/diagnostics.d.ts +70 -4
- package/dist/generators/test-generator/diagnostics.d.ts.map +1 -1
- package/dist/generators/test-generator/diagnostics.js +69 -3
- package/dist/generators/test-generator/diagnostics.js.map +1 -1
- package/dist/generators/test-generator/patterns/index.d.ts +13 -3
- package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/index.js +16 -10
- package/dist/generators/test-generator/patterns/index.js.map +1 -1
- package/dist/generators/test-generator/patterns/types.d.ts +15 -0
- package/dist/generators/test-generator/patterns/types.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/with-parent-scope.d.ts +5 -0
- package/dist/generators/test-generator/patterns/with-parent-scope.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/with-parent-scope.js +6 -0
- package/dist/generators/test-generator/patterns/with-parent-scope.js.map +1 -1
- package/dist/generators/test-generator/step-mapper.d.ts +81 -0
- package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
- package/dist/generators/test-generator/step-mapper.js +187 -13
- package/dist/generators/test-generator/step-mapper.js.map +1 -1
- package/dist/generators/test-generator/template-engine.d.ts.map +1 -1
- package/dist/generators/test-generator/template-engine.js +18 -0
- package/dist/generators/test-generator/template-engine.js.map +1 -1
- package/dist/generators/test-generator/utils/data-resolver.d.ts +25 -0
- package/dist/generators/test-generator/utils/data-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/data-resolver.js +39 -8
- package/dist/generators/test-generator/utils/data-resolver.js.map +1 -1
- package/dist/generators/test-generator/utils/selector-entry-fields.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/selector-entry-fields.js +1 -0
- package/dist/generators/test-generator/utils/selector-entry-fields.js.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.d.ts +84 -4
- package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.js +229 -82
- package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
- package/dist/harness/audit.d.ts.map +1 -1
- package/dist/harness/audit.js +35 -8
- package/dist/harness/audit.js.map +1 -1
- package/dist/harness/capability.d.ts +7 -1
- package/dist/harness/capability.d.ts.map +1 -1
- package/dist/harness/capability.js +15 -12
- package/dist/harness/capability.js.map +1 -1
- package/dist/harness/catalog/universal-viewpoints.yaml +5 -5
- package/dist/harness/config-file.d.ts +17 -0
- package/dist/harness/config-file.d.ts.map +1 -0
- package/dist/harness/config-file.js +100 -0
- package/dist/harness/config-file.js.map +1 -0
- package/dist/harness/depth-lint.d.ts.map +1 -1
- package/dist/harness/depth-lint.js +2 -1
- package/dist/harness/depth-lint.js.map +1 -1
- package/dist/harness/flow-check.d.ts.map +1 -1
- package/dist/harness/flow-check.js +6 -2
- package/dist/harness/flow-check.js.map +1 -1
- package/dist/harness/keyword-match.d.ts +59 -0
- package/dist/harness/keyword-match.d.ts.map +1 -0
- package/dist/harness/keyword-match.js +86 -0
- package/dist/harness/keyword-match.js.map +1 -0
- package/dist/harness/next-step.d.ts.map +1 -1
- package/dist/harness/next-step.js +2 -1
- package/dist/harness/next-step.js.map +1 -1
- package/dist/harness/parse.d.ts.map +1 -1
- package/dist/harness/parse.js +42 -7
- package/dist/harness/parse.js.map +1 -1
- package/dist/harness/perf.d.ts +7 -1
- package/dist/harness/perf.d.ts.map +1 -1
- package/dist/harness/perf.js +13 -10
- package/dist/harness/perf.js.map +1 -1
- package/dist/harness/quality-gates.d.ts +9 -2
- package/dist/harness/quality-gates.d.ts.map +1 -1
- package/dist/harness/quality-gates.js +16 -4
- package/dist/harness/quality-gates.js.map +1 -1
- package/dist/harness/query-catalog.js +0 -0
- package/dist/harness/query-catalog.js.map +1 -1
- package/dist/harness/read-text.d.ts +6 -0
- package/dist/harness/read-text.d.ts.map +1 -1
- package/dist/harness/read-text.js +7 -1
- package/dist/harness/read-text.js.map +1 -1
- package/dist/harness/secret-scan.d.ts +27 -1
- package/dist/harness/secret-scan.d.ts.map +1 -1
- package/dist/harness/secret-scan.js +57 -4
- package/dist/harness/secret-scan.js.map +1 -1
- package/dist/harness/sensors.d.ts +12 -0
- package/dist/harness/sensors.d.ts.map +1 -1
- package/dist/harness/sensors.js +41 -18
- package/dist/harness/sensors.js.map +1 -1
- package/dist/harness/spec-branches.d.ts +7 -20
- package/dist/harness/spec-branches.d.ts.map +1 -1
- package/dist/harness/spec-branches.js +85 -13
- package/dist/harness/spec-branches.js.map +1 -1
- package/dist/harness/spec-coverage.d.ts +16 -0
- package/dist/harness/spec-coverage.d.ts.map +1 -1
- package/dist/harness/spec-coverage.js +131 -12
- package/dist/harness/spec-coverage.js.map +1 -1
- package/dist/harness/viewpoint-ledger.d.ts.map +1 -1
- package/dist/harness/viewpoint-ledger.js +2 -1
- package/dist/harness/viewpoint-ledger.js.map +1 -1
- package/dist/harness/write-atomic.d.ts +2 -0
- package/dist/harness/write-atomic.d.ts.map +1 -0
- package/dist/harness/write-atomic.js +62 -0
- package/dist/harness/write-atomic.js.map +1 -0
- package/dist/orchestrator/ai-skills/writer.d.ts.map +1 -1
- package/dist/orchestrator/ai-skills/writer.js +15 -7
- package/dist/orchestrator/ai-skills/writer.js.map +1 -1
- package/dist/orchestrator/appium-environment-setup.d.ts +24 -0
- package/dist/orchestrator/appium-environment-setup.d.ts.map +1 -0
- package/dist/orchestrator/appium-environment-setup.js +157 -0
- package/dist/orchestrator/appium-environment-setup.js.map +1 -0
- package/dist/orchestrator/assets-drift.d.ts.map +1 -1
- package/dist/orchestrator/assets-drift.js +11 -6
- package/dist/orchestrator/assets-drift.js.map +1 -1
- package/dist/orchestrator/mobile-runtime-scaffolder.d.ts +2 -0
- package/dist/orchestrator/mobile-runtime-scaffolder.d.ts.map +1 -1
- package/dist/orchestrator/mobile-runtime-scaffolder.js.map +1 -1
- package/dist/orchestrator/project-deps-sync.d.ts.map +1 -1
- package/dist/orchestrator/project-deps-sync.js +22 -1
- package/dist/orchestrator/project-deps-sync.js.map +1 -1
- package/dist/orchestrator/project-initializer.d.ts +9 -0
- package/dist/orchestrator/project-initializer.d.ts.map +1 -1
- package/dist/orchestrator/project-initializer.js +63 -7
- package/dist/orchestrator/project-initializer.js.map +1 -1
- package/dist/orchestrator/security-overrides-catalog.d.ts +39 -0
- package/dist/orchestrator/security-overrides-catalog.d.ts.map +1 -0
- package/dist/orchestrator/security-overrides-catalog.js +63 -0
- package/dist/orchestrator/security-overrides-catalog.js.map +1 -0
- package/dist/orchestrator/security-overrides.d.ts +51 -0
- package/dist/orchestrator/security-overrides.d.ts.map +1 -0
- package/dist/orchestrator/security-overrides.js +165 -0
- package/dist/orchestrator/security-overrides.js.map +1 -0
- package/dist/orchestrator/templates/ai-src/skills/sungen-delivery/SKILL.md +14 -0
- package/dist/orchestrator/templates/ai-src/skills/sungen-error-mapping/SKILL.md +8 -2
- package/dist/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +64 -2
- package/dist/orchestrator/templates/ai-src/skills/sungen-selector-keys/SKILL.md +13 -1
- package/dist/orchestrator/templates/ai-src/skills/sungen-tc-generation/SKILL.md +20 -5
- package/dist/orchestrator/templates/ai-src/skills/sungen-tc-review/SKILL.md +3 -3
- package/dist/orchestrator/templates/appium-environment/README.md +83 -0
- package/dist/orchestrator/templates/appium-environment/scripts/common/install-appium.ps1 +44 -0
- package/dist/orchestrator/templates/appium-environment/scripts/common/install-appium.sh +50 -0
- package/dist/orchestrator/templates/appium-environment/scripts/common/lib.ps1 +108 -0
- package/dist/orchestrator/templates/appium-environment/scripts/common/lib.sh +141 -0
- package/dist/orchestrator/templates/appium-environment/scripts/common/verify-appium.ps1 +39 -0
- package/dist/orchestrator/templates/appium-environment/scripts/common/verify-appium.sh +43 -0
- package/dist/orchestrator/templates/appium-environment/scripts/common/verify-node.ps1 +13 -0
- package/dist/orchestrator/templates/appium-environment/scripts/common/verify-node.sh +16 -0
- package/dist/orchestrator/templates/appium-environment/scripts/macos/install-android.sh +110 -0
- package/dist/orchestrator/templates/appium-environment/scripts/macos/install-ios.sh +32 -0
- package/dist/orchestrator/templates/appium-environment/scripts/macos/verify-android.sh +32 -0
- package/dist/orchestrator/templates/appium-environment/scripts/macos/verify-ios.sh +15 -0
- package/dist/orchestrator/templates/appium-environment/scripts/windows/install-android.ps1 +153 -0
- package/dist/orchestrator/templates/appium-environment/scripts/windows/verify-android.ps1 +26 -0
- package/dist/orchestrator/templates/appium-environment/setup.ps1 +58 -0
- package/dist/orchestrator/templates/appium-environment/setup.sh +88 -0
- package/dist/orchestrator/templates/specs-checked-state.d.ts +1 -1
- package/dist/orchestrator/templates/specs-checked-state.d.ts.map +1 -1
- package/dist/orchestrator/templates/specs-checked-state.js +26 -3
- package/dist/orchestrator/templates/specs-checked-state.js.map +1 -1
- package/dist/orchestrator/templates/specs-checked-state.ts +31 -6
- package/dist/orchestrator/templates/specs-locale-fixture.ts +21 -9
- package/dist/orchestrator/templates/specs-mock.d.ts +2 -1
- package/dist/orchestrator/templates/specs-mock.d.ts.map +1 -1
- package/dist/orchestrator/templates/specs-mock.js +10 -3
- package/dist/orchestrator/templates/specs-mock.js.map +1 -1
- package/dist/orchestrator/templates/specs-mock.ts +12 -4
- package/dist/orchestrator/templates/specs-pw-shape-reporter.ts +0 -0
- package/dist/orchestrator/templates/specs-url-assert.d.ts +17 -1
- package/dist/orchestrator/templates/specs-url-assert.d.ts.map +1 -1
- package/dist/orchestrator/templates/specs-url-assert.js +14 -2
- package/dist/orchestrator/templates/specs-url-assert.js.map +1 -1
- package/dist/orchestrator/templates/specs-url-assert.ts +24 -2
- package/dist/orchestrator/templates/wdio.conf.ts +24 -1
- package/package.json +3 -3
- package/src/cli/commands/audit.ts +12 -3
- package/src/cli/commands/capability.ts +63 -19
- package/src/cli/commands/delivery.ts +38 -16
- package/src/cli/commands/generate.ts +15 -7
- package/src/cli/commands/init.ts +3 -0
- package/src/cli/commands/results-merge.ts +2 -8
- package/src/cli/commands/results-sanitize.ts +2 -9
- package/src/cli/commands/setup-mobile-env.ts +64 -0
- package/src/cli/index.ts +2 -0
- package/src/dashboard/snapshot-builder.ts +6 -8
- package/src/exporters/feature-parser.ts +32 -2
- package/src/exporters/locale-variants.ts +23 -17
- package/src/exporters/matrix/build.ts +14 -8
- package/src/exporters/matrix/carry-manual-results.ts +229 -0
- package/src/exporters/matrix/export.ts +10 -4
- package/src/exporters/matrix/wording.ts +26 -1
- package/src/exporters/xlsx-exporter.ts +7 -2
- package/src/generators/test-generator/adapters/adapter-interface.ts +2 -2
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/reinstall-app-action.hbs +2 -2
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/all-contain-assertion.hbs +1 -2
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/all-contain-element.hbs +8 -5
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/count-assertion.hbs +5 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/disabled-with-filter-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/hidden-with-filter-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/label-value-assertion.hbs +8 -2
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/list-item-count-assertion.hbs +5 -2
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/state-with-filter-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/visible-filtered-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/visible-with-role-variable-assertion.hbs +7 -3
- package/src/generators/test-generator/adapters/appium/templates/steps/partials/await-elements.hbs +12 -0
- package/src/generators/test-generator/adapters/appium/templates/test-file.hbs +94 -4
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/capture-variable.hbs +7 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/label-value-assertion.hbs +7 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/row-scoped-column-assertion.hbs +23 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-role-variable-assertion.hbs +8 -4
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +4 -4
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-strategies/default.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-strategies/id.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +4 -4
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/url-assertion.hbs +17 -2
- package/src/generators/test-generator/adapters/playwright/templates/test-file.hbs +14 -0
- package/src/generators/test-generator/code-generator.ts +119 -19
- package/src/generators/test-generator/diagnostics.ts +70 -4
- package/src/generators/test-generator/patterns/index.ts +16 -9
- package/src/generators/test-generator/patterns/types.ts +15 -0
- package/src/generators/test-generator/patterns/with-parent-scope.ts +6 -0
- package/src/generators/test-generator/step-mapper.ts +196 -13
- package/src/generators/test-generator/template-engine.ts +18 -0
- package/src/generators/test-generator/utils/data-resolver.ts +41 -12
- package/src/generators/test-generator/utils/selector-entry-fields.ts +1 -0
- package/src/generators/test-generator/utils/selector-resolver.ts +256 -85
- package/src/harness/audit.ts +41 -12
- package/src/harness/capability.ts +23 -12
- package/src/harness/catalog/universal-viewpoints.yaml +5 -5
- package/src/harness/config-file.ts +66 -0
- package/src/harness/depth-lint.ts +2 -1
- package/src/harness/flow-check.ts +6 -2
- package/src/harness/keyword-match.ts +85 -0
- package/src/harness/next-step.ts +2 -1
- package/src/harness/parse.ts +42 -7
- package/src/harness/perf.ts +15 -7
- package/src/harness/quality-gates.ts +16 -4
- package/src/harness/query-catalog.ts +0 -0
- package/src/harness/read-text.ts +7 -1
- package/src/harness/secret-scan.ts +60 -4
- package/src/harness/sensors.ts +50 -19
- package/src/harness/spec-branches.ts +72 -14
- package/src/harness/spec-coverage.ts +133 -13
- package/src/harness/viewpoint-ledger.ts +2 -1
- package/src/harness/write-atomic.ts +22 -0
- package/src/orchestrator/ai-skills/writer.ts +18 -3
- package/src/orchestrator/appium-environment-setup.ts +127 -0
- package/src/orchestrator/assets-drift.ts +10 -5
- package/src/orchestrator/mobile-runtime-scaffolder.ts +2 -0
- package/src/orchestrator/project-deps-sync.ts +23 -1
- package/src/orchestrator/project-initializer.ts +69 -7
- package/src/orchestrator/security-overrides-catalog.ts +69 -0
- package/src/orchestrator/security-overrides.ts +149 -0
- package/src/orchestrator/templates/ai-src/skills/sungen-delivery/SKILL.md +14 -0
- package/src/orchestrator/templates/ai-src/skills/sungen-error-mapping/SKILL.md +8 -2
- package/src/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +64 -2
- package/src/orchestrator/templates/ai-src/skills/sungen-selector-keys/SKILL.md +13 -1
- package/src/orchestrator/templates/ai-src/skills/sungen-tc-generation/SKILL.md +20 -5
- package/src/orchestrator/templates/ai-src/skills/sungen-tc-review/SKILL.md +3 -3
- package/src/orchestrator/templates/appium-environment/README.md +83 -0
- package/src/orchestrator/templates/appium-environment/scripts/common/install-appium.ps1 +44 -0
- package/src/orchestrator/templates/appium-environment/scripts/common/install-appium.sh +50 -0
- package/src/orchestrator/templates/appium-environment/scripts/common/lib.ps1 +108 -0
- package/src/orchestrator/templates/appium-environment/scripts/common/lib.sh +141 -0
- package/src/orchestrator/templates/appium-environment/scripts/common/verify-appium.ps1 +39 -0
- package/src/orchestrator/templates/appium-environment/scripts/common/verify-appium.sh +43 -0
- package/src/orchestrator/templates/appium-environment/scripts/common/verify-node.ps1 +13 -0
- package/src/orchestrator/templates/appium-environment/scripts/common/verify-node.sh +16 -0
- package/src/orchestrator/templates/appium-environment/scripts/macos/install-android.sh +110 -0
- package/src/orchestrator/templates/appium-environment/scripts/macos/install-ios.sh +32 -0
- package/src/orchestrator/templates/appium-environment/scripts/macos/verify-android.sh +32 -0
- package/src/orchestrator/templates/appium-environment/scripts/macos/verify-ios.sh +15 -0
- package/src/orchestrator/templates/appium-environment/scripts/windows/install-android.ps1 +153 -0
- package/src/orchestrator/templates/appium-environment/scripts/windows/verify-android.ps1 +26 -0
- package/src/orchestrator/templates/appium-environment/setup.ps1 +58 -0
- package/src/orchestrator/templates/appium-environment/setup.sh +88 -0
- package/src/orchestrator/templates/specs-checked-state.ts +31 -6
- package/src/orchestrator/templates/specs-locale-fixture.ts +21 -9
- package/src/orchestrator/templates/specs-mock.ts +12 -4
- package/src/orchestrator/templates/specs-pw-shape-reporter.ts +0 -0
- package/src/orchestrator/templates/specs-url-assert.ts +24 -2
- package/src/orchestrator/templates/wdio.conf.ts +24 -1
|
@@ -0,0 +1,157 @@
|
|
|
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.APPIUM_ENV_DIR = void 0;
|
|
37
|
+
exports.emitAppiumEnvironment = emitAppiumEnvironment;
|
|
38
|
+
exports.appiumEnvironmentRerunCommand = appiumEnvironmentRerunCommand;
|
|
39
|
+
exports.runAppiumEnvironmentSetup = runAppiumEnvironmentSetup;
|
|
40
|
+
/**
|
|
41
|
+
* Appium environment bundle ā emit `appium-environment/` into a mobile project and run its entry point.
|
|
42
|
+
*
|
|
43
|
+
* The bundle (bash for macOS, PowerShell for Windows) provisions the OS layer BELOW Appium: JDK, Android
|
|
44
|
+
* SDK + env vars, Xcode CLT, applesimutils, then the project-local Appium platform drivers, and ends with
|
|
45
|
+
* `appium driver doctor`. Emitted by `sungen init --mobile` / `sungen capability add mobile` and run once
|
|
46
|
+
* right after the driver install (spec: docs/spec/sungen_mobile_environment_setup_spec.md, issue #718).
|
|
47
|
+
*
|
|
48
|
+
* Core ships the scripts as templates only ā no runtime is embedded, nothing is installed globally.
|
|
49
|
+
*/
|
|
50
|
+
const fs = __importStar(require("fs"));
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const child_process_1 = require("child_process");
|
|
53
|
+
exports.APPIUM_ENV_DIR = 'appium-environment';
|
|
54
|
+
/** Bundled template root ā resolves from src/orchestrator (tsx) and dist/orchestrator (copy-templates). */
|
|
55
|
+
const TEMPLATE_ROOT = path.join(__dirname, 'templates', exports.APPIUM_ENV_DIR);
|
|
56
|
+
/** Files under `dir`, relative and posix-separated, sorted for a deterministic emit order. */
|
|
57
|
+
function listTemplateFiles(dir, prefix = '') {
|
|
58
|
+
const out = [];
|
|
59
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name));
|
|
60
|
+
for (const entry of entries) {
|
|
61
|
+
const rel = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
62
|
+
if (entry.isDirectory())
|
|
63
|
+
out.push(...listTemplateFiles(path.join(dir, entry.name), rel));
|
|
64
|
+
else
|
|
65
|
+
out.push(rel);
|
|
66
|
+
}
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Copy the bundle into `<cwd>/appium-environment/`, skipping every file that already exists (a QA may
|
|
71
|
+
* have edited the pinned cmdline-tools build or a hint ā same idempotency as the other emitted files).
|
|
72
|
+
* `*.sh` get the executable bit explicitly: npm and git do not reliably preserve it.
|
|
73
|
+
*/
|
|
74
|
+
function emitAppiumEnvironment(cwd) {
|
|
75
|
+
const created = [];
|
|
76
|
+
const skipped = [];
|
|
77
|
+
// Non-fatal like the other provisioning steps: a broken install (templates missing) must not abort
|
|
78
|
+
// `init` / `capability add` ā the harness scaffold is still valid without the bundle.
|
|
79
|
+
try {
|
|
80
|
+
for (const rel of listTemplateFiles(TEMPLATE_ROOT)) {
|
|
81
|
+
const dest = path.join(cwd, exports.APPIUM_ENV_DIR, rel);
|
|
82
|
+
const label = `${exports.APPIUM_ENV_DIR}/${rel}`;
|
|
83
|
+
if (fs.existsSync(dest)) {
|
|
84
|
+
skipped.push(label);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
88
|
+
fs.copyFileSync(path.join(TEMPLATE_ROOT, rel), dest);
|
|
89
|
+
if (rel.endsWith('.sh'))
|
|
90
|
+
fs.chmodSync(dest, 0o755);
|
|
91
|
+
created.push(label);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
console.warn(`ā ļø Could not emit ${exports.APPIUM_ENV_DIR}/ (${e instanceof Error ? e.message : e}) ā reinstall @sun-asterisk/sungen and re-run: sungen capability add mobile`);
|
|
96
|
+
}
|
|
97
|
+
return { created, skipped };
|
|
98
|
+
}
|
|
99
|
+
/** The command a QA re-runs by hand, for hints and the init summary. */
|
|
100
|
+
function appiumEnvironmentRerunCommand() {
|
|
101
|
+
return process.platform === 'win32'
|
|
102
|
+
? `powershell -NoProfile -ExecutionPolicy Bypass -File .\\${exports.APPIUM_ENV_DIR}\\setup.ps1`
|
|
103
|
+
: `./${exports.APPIUM_ENV_DIR}/setup.sh`;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Translate the bundle's POSIX flags to their PowerShell switches. `sungen setup-mobile-env` speaks
|
|
107
|
+
* one flag vocabulary on both OSes, so the user does not have to know which script is underneath.
|
|
108
|
+
*/
|
|
109
|
+
const PS_SWITCH = {
|
|
110
|
+
'--check': '-Check',
|
|
111
|
+
'--skip-android': '-SkipAndroid',
|
|
112
|
+
'--no-profile': '-NoProfile',
|
|
113
|
+
// `--skip-ios` has no Windows counterpart: setup.ps1 has no iOS steps to skip.
|
|
114
|
+
};
|
|
115
|
+
function entryCommand(cwd, flags = []) {
|
|
116
|
+
const bundle = path.join(cwd, exports.APPIUM_ENV_DIR);
|
|
117
|
+
if (process.platform === 'win32') {
|
|
118
|
+
const switches = flags.map(f => PS_SWITCH[f]).filter((s) => !!s);
|
|
119
|
+
return {
|
|
120
|
+
file: 'powershell',
|
|
121
|
+
// -NoProfile here is powershell.exe's own "skip the user profile" flag, unrelated to the
|
|
122
|
+
// bundle's -NoProfile switch; the latter arrives through `switches` after -File.
|
|
123
|
+
args: ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', path.join(bundle, 'setup.ps1'), ...switches],
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// setup.sh handles Darwin; on Linux it prints the manual-path notice and exits 0.
|
|
127
|
+
if (process.platform === 'darwin' || process.platform === 'linux') {
|
|
128
|
+
return { file: 'bash', args: [path.join(bundle, 'setup.sh'), ...flags] };
|
|
129
|
+
}
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Run the emitted entry point for this OS with inherited stdio ā its per-step output IS the UX, and any
|
|
134
|
+
* Homebrew / sudo prompt must reach the user. Non-fatal by contract: problems are reported with the re-run
|
|
135
|
+
* command and init continues, because the scaffold itself is already complete.
|
|
136
|
+
*/
|
|
137
|
+
function runAppiumEnvironmentSetup(cwd, opts = {}) {
|
|
138
|
+
if (opts.skip) {
|
|
139
|
+
console.log(`ā skipped environment setup (--skip-env-setup) ā run it later: sungen setup-mobile-env`);
|
|
140
|
+
return 'skipped';
|
|
141
|
+
}
|
|
142
|
+
const cmd = entryCommand(cwd, opts.flags);
|
|
143
|
+
if (!cmd) {
|
|
144
|
+
console.log(`ā¹ļø environment setup ships for macOS (setup.sh) and Windows (setup.ps1) ā on ${process.platform} follow ${exports.APPIUM_ENV_DIR}/README.md ā Manual fallback`);
|
|
145
|
+
return 'unsupported';
|
|
146
|
+
}
|
|
147
|
+
console.log(`\nš§ Provisioning the Appium environment (${exports.APPIUM_ENV_DIR}/) ā idempotent, re-run any time...`);
|
|
148
|
+
const result = (0, child_process_1.spawnSync)(cmd.file, cmd.args, { cwd, stdio: 'inherit' });
|
|
149
|
+
if (result.status === 0)
|
|
150
|
+
return 'ran';
|
|
151
|
+
// status null = the shell itself could not start (ENOENT) or was killed ā name the real cause.
|
|
152
|
+
const exit = result.error ? `could not start ${cmd.file}: ${result.error.message}`
|
|
153
|
+
: result.status === null ? `signal ${result.signal ?? '?'}` : `exit ${result.status}`;
|
|
154
|
+
console.warn(`ā ļø environment setup reported problems (${exit}) ā fix the ā items above, then re-run: sungen setup-mobile-env (or ${appiumEnvironmentRerunCommand()} directly)`);
|
|
155
|
+
return 'failed';
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=appium-environment-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appium-environment-setup.js","sourceRoot":"","sources":["../../src/orchestrator/appium-environment-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets-drift.d.ts","sourceRoot":"","sources":["../../src/orchestrator/assets-drift.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assets-drift.d.ts","sourceRoot":"","sources":["../../src/orchestrator/assets-drift.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CA4BhE;AAED,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAWjD"}
|
|
@@ -38,17 +38,22 @@ exports.warnAssetsDrift = warnAssetsDrift;
|
|
|
38
38
|
const fs = __importStar(require("fs"));
|
|
39
39
|
const path = __importStar(require("path"));
|
|
40
40
|
const package_info_1 = require("../exporters/package-info");
|
|
41
|
+
const config_file_1 = require("../harness/config-file");
|
|
41
42
|
function checkAssetsDrift(cwd) {
|
|
42
43
|
const manifestPath = path.join(cwd, '.sungen', 'manifest.json');
|
|
43
44
|
if (!fs.existsSync(manifestPath))
|
|
44
45
|
return null; // not a sungen project (yet)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
const read = (0, config_file_1.readJsonConfig)(manifestPath);
|
|
47
|
+
if (read.state === 'unreadable') {
|
|
48
|
+
// This function IS the drift alarm. Staying silent on a broken manifest disables the only
|
|
49
|
+
// warning that a project's .claude/ assets have gone stale ā and a truncated manifest is the
|
|
50
|
+
// likeliest way to get one (it is written non-atomically by `ai-skills/writer.ts`).
|
|
51
|
+
(0, config_file_1.warnUnreadableConfig)(manifestPath, read.error, 'stale-assets drift cannot be checked ā re-run `sungen init` to rewrite it');
|
|
52
|
+
return null;
|
|
51
53
|
}
|
|
54
|
+
if (read.state === 'absent')
|
|
55
|
+
return null;
|
|
56
|
+
const manifest = read.value;
|
|
52
57
|
const recordedVersion = manifest.version ?? '';
|
|
53
58
|
const runningVersion = (0, package_info_1.getPackageVersion)();
|
|
54
59
|
const managed = manifest.managed ?? {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets-drift.js","sourceRoot":"","sources":["../../src/orchestrator/assets-drift.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"assets-drift.js","sourceRoot":"","sources":["../../src/orchestrator/assets-drift.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,4CA4BC;AAGD,0CAWC;AApED,uCAAyB;AACzB,2CAA6B;AAC7B,4DAA8D;AAC9D,wDAA8E;AAuB9E,SAAgB,gBAAgB,CAAC,GAAW;IAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAChE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC,CAAG,6BAA6B;IAE9E,MAAM,IAAI,GAAG,IAAA,4BAAc,EAAyD,YAAY,CAAC,CAAC;IAClG,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;QAChC,0FAA0F;QAC1F,6FAA6F;QAC7F,oFAAoF;QACpF,IAAA,kCAAoB,EAAC,YAAY,EAAE,IAAI,CAAC,KAAK,EAAE,2EAA2E,CAAC,CAAC;QAC5H,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;IAC5B,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IAC/C,MAAM,cAAc,GAAG,IAAA,gCAAiB,GAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,CAAC,eAAe,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,2EAA2E;IAC3E,IAAI,eAAe,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC;IAEpD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;IACrD,CAAC;IACD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC7D,CAAC;AAED,qEAAqE;AACrE,SAAgB,eAAe,CAAC,GAAW;IACzC,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,MAAM,IAAI,GAAG,UAAU,CAAC;IACxB,MAAM,IAAI,GAAG,UAAU,CAAC;IACxB,MAAM,KAAK,GAAG,SAAS,CAAC;IACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,kEAAkE,KAAK,CAAC,eAAe,IAAI;QAClG,mBAAmB,KAAK,CAAC,cAAc,UAAU,IAAI,gBAAgB,KAAK,GAAG,IAAI,mBAAmB;QACpG,0CAA0C,KAAK,IAAI,CACpD,CAAC;AACJ,CAAC"}
|
|
@@ -16,6 +16,8 @@ export interface MobileInitOptions {
|
|
|
16
16
|
iosBundleId?: string;
|
|
17
17
|
iosDevice?: string;
|
|
18
18
|
iosVersion?: string;
|
|
19
|
+
/** Emit `appium-environment/` but do not run it now (`--skip-env-setup`); QA re-runs it by hand. */
|
|
20
|
+
skipEnvSetup?: boolean;
|
|
19
21
|
}
|
|
20
22
|
export interface ScaffoldResult {
|
|
21
23
|
created: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobile-runtime-scaffolder.d.ts","sourceRoot":"","sources":["../../src/orchestrator/mobile-runtime-scaffolder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,+FAA+F;IAC/F,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"mobile-runtime-scaffolder.d.ts","sourceRoot":"","sources":["../../src/orchestrator/mobile-runtime-scaffolder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,+FAA+F;IAC/F,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oGAAoG;IACpG,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAQD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,cAAc,CAsEtF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3D;AAgGD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAyCxD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobile-runtime-scaffolder.js","sourceRoot":"","sources":["../../src/orchestrator/mobile-runtime-scaffolder.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"mobile-runtime-scaffolder.js","sourceRoot":"","sources":["../../src/orchestrator/mobile-runtime-scaffolder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-deps-sync.d.ts","sourceRoot":"","sources":["../../src/orchestrator/project-deps-sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project-deps-sync.d.ts","sourceRoot":"","sources":["../../src/orchestrator/project-deps-sync.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,kGAAkG;IAClG,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,8FAA8F;IAC9F,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,2DAA2D;IAC3D,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,yDAAyD;IACzD,OAAO,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7C,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAsBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAA6B,GACpE,WAAW,CA6Cb;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CA4DzF"}
|
|
@@ -39,6 +39,7 @@ const child_process_1 = require("child_process");
|
|
|
39
39
|
const fs = __importStar(require("fs"));
|
|
40
40
|
const path = __importStar(require("path"));
|
|
41
41
|
const lockstep_version_1 = require("./lockstep-version");
|
|
42
|
+
const security_overrides_1 = require("./security-overrides");
|
|
42
43
|
/**
|
|
43
44
|
* Project-local sync of the sungen package family after a global `sungen update`.
|
|
44
45
|
*
|
|
@@ -146,8 +147,28 @@ function syncProjectSungenDeps(cwd, core, dryRun) {
|
|
|
146
147
|
}
|
|
147
148
|
for (const s of plan.skipped)
|
|
148
149
|
console.log(` ā skipped ${s.pkg} ā ${s.why}`);
|
|
150
|
+
// A project scaffolded before #764 carries no security overrides, and npm will never pick them up
|
|
151
|
+
// from sungen's own manifest ā `sungen update` is the one pass that can put them there. Write them
|
|
152
|
+
// before any install below, since npm reads `overrides` when it resolves.
|
|
153
|
+
const overridePlan = (0, security_overrides_1.ensureSecurityOverrides)(path.join(cwd, 'package.json'), dryRun);
|
|
154
|
+
(0, security_overrides_1.reportSecurityOverrides)(overridePlan, dryRun);
|
|
149
155
|
if (!plan.specs.length) {
|
|
150
|
-
console.log(` ā already on ${core}: ${plan.found.map((f) => f.pkg).join(', ')}
|
|
156
|
+
console.log(` ā already on ${core}: ${plan.found.map((f) => f.pkg).join(', ')}`);
|
|
157
|
+
// Family already in lockstep, so nothing would re-resolve ā but freshly written overrides only
|
|
158
|
+
// reach the tree through a resolution pass. Run one.
|
|
159
|
+
if (overridePlan?.add.length) {
|
|
160
|
+
if (dryRun) {
|
|
161
|
+
console.log(' [dry-run] would run: npm install (re-resolve under the new security overrides)\n');
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
console.log(' š¦ npm install (re-resolving under the new security overrides)');
|
|
165
|
+
const r = (0, child_process_1.spawnSync)('npm', ['install'], { cwd, stdio: 'inherit', shell: true });
|
|
166
|
+
if (r.status !== 0) {
|
|
167
|
+
console.warn('ā ļø Overrides were written to package.json but `npm install` failed ā run it by hand.\n');
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
console.log('');
|
|
151
172
|
return true;
|
|
152
173
|
}
|
|
153
174
|
for (const f of plan.found) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-deps-sync.js","sourceRoot":"","sources":["../../src/orchestrator/project-deps-sync.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"project-deps-sync.js","sourceRoot":"","sources":["../../src/orchestrator/project-deps-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,14 @@ export declare class ProjectInitializer {
|
|
|
25
25
|
private cwd;
|
|
26
26
|
private createdItems;
|
|
27
27
|
private skippedItems;
|
|
28
|
+
/**
|
|
29
|
+
* Actions the user asked for that could NOT be performed. Kept apart from `skippedItems`:
|
|
30
|
+
* that list renders under "Already exists", which is a statement of fact about the project ā
|
|
31
|
+
* printing "package.json scripts (invalid JSON)" under it tells the user the opposite of what
|
|
32
|
+
* happened. An action that was not done needs its own heading, or the init summary reads as a
|
|
33
|
+
* clean success while `npm test` is missing.
|
|
34
|
+
*/
|
|
35
|
+
private notDoneItems;
|
|
28
36
|
/** set by createCodexMCPConfig when the project isn't Codex-trusted (config would never load) */
|
|
29
37
|
private codexTrustWarning;
|
|
30
38
|
private agents;
|
|
@@ -42,6 +50,7 @@ export declare class ProjectInitializer {
|
|
|
42
50
|
iosBundleId?: string;
|
|
43
51
|
iosDevice?: string;
|
|
44
52
|
iosVersion?: string;
|
|
53
|
+
skipEnvSetup?: boolean;
|
|
45
54
|
});
|
|
46
55
|
/** Mobile-only project: no Playwright/web scaffolding. */
|
|
47
56
|
private get mobileOnly();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-initializer.d.ts","sourceRoot":"","sources":["../../src/orchestrator/project-initializer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EACL,iBAAiB,EAIlB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"project-initializer.d.ts","sourceRoot":"","sources":["../../src/orchestrator/project-initializer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EACL,iBAAiB,EAIlB,MAAM,6BAA6B,CAAC;AAKrC,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAqB7B;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAgBtF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAkBlF;AAED,qBAAa,kBAAkB;IAmBjB,OAAO,CAAC,OAAO;IAlB3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,YAAY,CAAgB;IACpC;;;;;;OAMG;IACH,OAAO,CAAC,YAAY,CAAgB;IACpC,iGAAiG;IACjG,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,MAAM,CAAoB;gBAEd,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAO;IAoB5S,0DAA0D;IAC1D,OAAO,KAAK,UAAU,GAErB;IAED;;OAEG;IACG,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsErD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IASzB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAc9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAmCvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA0C5B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAoDtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAuDtB;;;;OAIG;IACH;;;OAGG;IACH,OAAO,CAAC,aAAa;IASrB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAarB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;;;OAIG;IACH,OAAO,CAAC,iCAAiC;IAWzC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;YACW,iBAAiB;IA4D/B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAyD5B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAInC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAG1B"}
|
|
@@ -47,6 +47,9 @@ const child_process_1 = require("child_process");
|
|
|
47
47
|
const build_1 = require("./ai-skills/build");
|
|
48
48
|
const writer_1 = require("./ai-skills/writer");
|
|
49
49
|
const mobile_runtime_scaffolder_1 = require("./mobile-runtime-scaffolder");
|
|
50
|
+
const appium_environment_setup_1 = require("./appium-environment-setup");
|
|
51
|
+
const security_overrides_1 = require("./security-overrides");
|
|
52
|
+
const read_text_1 = require("../harness/read-text");
|
|
50
53
|
function sungenVersion() {
|
|
51
54
|
try {
|
|
52
55
|
return require(path.join(__dirname, '..', '..', 'package.json')).version || '0.0.0';
|
|
@@ -122,6 +125,14 @@ class ProjectInitializer {
|
|
|
122
125
|
this.baseUrl = baseUrl;
|
|
123
126
|
this.createdItems = [];
|
|
124
127
|
this.skippedItems = [];
|
|
128
|
+
/**
|
|
129
|
+
* Actions the user asked for that could NOT be performed. Kept apart from `skippedItems`:
|
|
130
|
+
* that list renders under "Already exists", which is a statement of fact about the project ā
|
|
131
|
+
* printing "package.json scripts (invalid JSON)" under it tells the user the opposite of what
|
|
132
|
+
* happened. An action that was not done needs its own heading, or the init summary reads as a
|
|
133
|
+
* clean success while `npm test` is missing.
|
|
134
|
+
*/
|
|
135
|
+
this.notDoneItems = [];
|
|
125
136
|
/** set by createCodexMCPConfig when the project isn't Codex-trusted (config would never load) */
|
|
126
137
|
this.codexTrustWarning = false;
|
|
127
138
|
this.baseCwd = process.cwd();
|
|
@@ -138,6 +149,8 @@ class ProjectInitializer {
|
|
|
138
149
|
iosBundleId: opts.iosBundleId,
|
|
139
150
|
iosDevice: opts.iosDevice,
|
|
140
151
|
iosVersion: opts.iosVersion,
|
|
152
|
+
// `--skip-env-setup`: emit appium-environment/ but do not run it (CI, or the manual path).
|
|
153
|
+
skipEnvSetup: opts.skipEnvSetup ?? false,
|
|
141
154
|
};
|
|
142
155
|
}
|
|
143
156
|
/** Mobile-only project: no Playwright/web scaffolding. */
|
|
@@ -154,6 +167,7 @@ class ProjectInitializer {
|
|
|
154
167
|
: this.baseCwd;
|
|
155
168
|
this.createdItems = [];
|
|
156
169
|
this.skippedItems = [];
|
|
170
|
+
this.notDoneItems = [];
|
|
157
171
|
console.log(`š Initializing Sungen ${this.mobileOnly ? 'mobile-only ' : ''}project...\n`);
|
|
158
172
|
if (normalizedProjectName) {
|
|
159
173
|
this.createProjectRoot(normalizedProjectName);
|
|
@@ -408,10 +422,16 @@ class ProjectInitializer {
|
|
|
408
422
|
const existed = fs.existsSync(filePath);
|
|
409
423
|
if (existed) {
|
|
410
424
|
try {
|
|
411
|
-
|
|
425
|
+
// via readTextFile: a UTF-8 BOM is the one thing `JSON.parse` rejects that every other tool
|
|
426
|
+
// reading this file ignores, and it is invisible in an editor. A config the rest of the
|
|
427
|
+
// toolchain loads fine must not cost the user their MCP servers here.
|
|
428
|
+
config = JSON.parse((0, read_text_1.readTextFile)(filePath));
|
|
412
429
|
}
|
|
413
|
-
catch {
|
|
414
|
-
|
|
430
|
+
catch (e) {
|
|
431
|
+
// Anything still unparseable is genuinely broken. Say WHERE ā "is not valid JSON" alone
|
|
432
|
+
// leaves the user to find a missing comma in a file they did not know was the problem.
|
|
433
|
+
this.notDoneItems.push(`${displayName} (${e.message.split('\n')[0]}) ā MCP servers not registered; `
|
|
434
|
+
+ `fix the JSON and re-run \`sungen init\``);
|
|
415
435
|
return;
|
|
416
436
|
}
|
|
417
437
|
}
|
|
@@ -449,6 +469,12 @@ class ProjectInitializer {
|
|
|
449
469
|
console.log(` ā³ ${item}`);
|
|
450
470
|
});
|
|
451
471
|
}
|
|
472
|
+
if (this.notDoneItems.length > 0) {
|
|
473
|
+
console.log('\nā Not done ā needs your attention:');
|
|
474
|
+
this.notDoneItems.forEach(item => {
|
|
475
|
+
console.log(` ā ${item}`);
|
|
476
|
+
});
|
|
477
|
+
}
|
|
452
478
|
if (this.codexTrustWarning) {
|
|
453
479
|
console.log('\nā Codex: this project is not trusted yet, so .codex/config.toml (the MCP browser');
|
|
454
480
|
console.log(' config for run-test) will be SILENTLY IGNORED by Codex. To fix, either:');
|
|
@@ -464,6 +490,8 @@ class ProjectInitializer {
|
|
|
464
490
|
console.log(` ${stepIndex++}. cd ${projectName}`);
|
|
465
491
|
}
|
|
466
492
|
if (this.mobileOnly) {
|
|
493
|
+
console.log(` ${stepIndex++}. Open a NEW terminal if the environment setup wrote your shell profile (PATH / JAVA_HOME / ANDROID_HOME)`);
|
|
494
|
+
console.log(` ${stepIndex++}. Environment not ready, or a new machine? Re-run: ${(0, appium_environment_setup_1.appiumEnvironmentRerunCommand)()} (idempotent)`);
|
|
467
495
|
console.log(` ${stepIndex++}. Fill in .env.appium with your device/app details (see .env.appium.example)`);
|
|
468
496
|
console.log(` ${stepIndex++}. Create your first screen: sungen add --screen <name>`);
|
|
469
497
|
console.log(` ${stepIndex++}. Use AI (Copilot/Claude) to generate Gherkin + selectors from the live app`);
|
|
@@ -590,8 +618,17 @@ class ProjectInitializer {
|
|
|
590
618
|
const result = (0, mobile_runtime_scaffolder_1.emitMobileRuntime)(this.cwd, this.mobile);
|
|
591
619
|
this.createdItems.push(...result.created);
|
|
592
620
|
this.skippedItems.push(...result.skipped);
|
|
621
|
+
// appium-environment/ provisioning bundle ā emitted BEFORE the driver install so it lands even when
|
|
622
|
+
// npm is offline, run AFTER it so its Appium step finds the project-local CLI. One summary line, not 17.
|
|
623
|
+
const env = (0, appium_environment_setup_1.emitAppiumEnvironment)(this.cwd);
|
|
624
|
+
if (env.created.length > 0)
|
|
625
|
+
this.createdItems.push(`appium-environment/ (${env.created.length} files)`);
|
|
626
|
+
else
|
|
627
|
+
this.skippedItems.push('appium-environment/');
|
|
593
628
|
// Best-effort driver install ā non-fatal so offline init still scaffolds.
|
|
594
629
|
(0, mobile_runtime_scaffolder_1.installMobileDriver)(this.cwd);
|
|
630
|
+
// Provision JDK / Android SDK / Xcode CLT / env vars / platform drivers ā non-fatal by contract.
|
|
631
|
+
(0, appium_environment_setup_1.runAppiumEnvironmentSetup)(this.cwd, { skip: this.mobile.skipEnvSetup });
|
|
595
632
|
}
|
|
596
633
|
/**
|
|
597
634
|
* Read a template file from the templates directory
|
|
@@ -614,6 +651,12 @@ class ProjectInitializer {
|
|
|
614
651
|
}
|
|
615
652
|
// Ensure standard scripts exist in package.json
|
|
616
653
|
this.ensurePackageScripts(packageJsonPath);
|
|
654
|
+
// Pin the transitive packages that would otherwise make `npm audit` red here. This MUST happen
|
|
655
|
+
// before the install below: npm reads `overrides` at resolution time, so a lockfile written
|
|
656
|
+
// first would already hold the vulnerable versions. See security-overrides.ts for why the pins
|
|
657
|
+
// cannot simply live in sungen's own manifest.
|
|
658
|
+
const overridePlan = (0, security_overrides_1.ensureSecurityOverrides)(packageJsonPath);
|
|
659
|
+
(0, security_overrides_1.reportSecurityOverrides)(overridePlan);
|
|
617
660
|
// Mobile-only drops @playwright/test (no web runner needed). `ajv`/`ajv-formats` back the API
|
|
618
661
|
// Driver's `expect {{name.body}} matches schema [Ref]` (loaded lazily; harmless if unused).
|
|
619
662
|
// fast-xml-parser: the API driver's XML request/response support lazy-requires it
|
|
@@ -624,7 +667,7 @@ class ProjectInitializer {
|
|
|
624
667
|
: ['@playwright/test', '@types/node', 'yaml', 'ajv', 'ajv-formats', 'fast-xml-parser'];
|
|
625
668
|
let missingDeps = requiredDeps;
|
|
626
669
|
try {
|
|
627
|
-
const packageJson = JSON.parse(
|
|
670
|
+
const packageJson = JSON.parse((0, read_text_1.readTextFile)(packageJsonPath));
|
|
628
671
|
const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };
|
|
629
672
|
missingDeps = requiredDeps.filter(d => !deps[d]);
|
|
630
673
|
}
|
|
@@ -633,6 +676,12 @@ class ProjectInitializer {
|
|
|
633
676
|
}
|
|
634
677
|
if (missingDeps.length === 0) {
|
|
635
678
|
console.log('ā All dependencies already installed\n');
|
|
679
|
+
// Nothing to install means nothing re-resolves, so overrides just written would sit in
|
|
680
|
+
// package.json while the lockfile keeps the vulnerable tree. Re-resolve once so they land.
|
|
681
|
+
if (overridePlan?.add.length) {
|
|
682
|
+
console.log('š¦ Re-resolving the tree so the new security overrides take effect...\n');
|
|
683
|
+
(0, child_process_1.execSync)('npm install', execOpts);
|
|
684
|
+
}
|
|
636
685
|
}
|
|
637
686
|
else {
|
|
638
687
|
console.log(`š¦ Installing ${missingDeps.join(', ')}...\n`);
|
|
@@ -652,9 +701,16 @@ class ProjectInitializer {
|
|
|
652
701
|
ensurePackageScripts(packageJsonPath) {
|
|
653
702
|
let packageJson;
|
|
654
703
|
try {
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
704
|
+
// via readTextFile: a package.json carrying a UTF-8 BOM is one npm reads without complaint,
|
|
705
|
+
// so it must not be treated as unparseable here. That was the trigger that actually reached
|
|
706
|
+
// this catch ā genuinely broken JSON aborts `npm install` a few lines below instead.
|
|
707
|
+
packageJson = JSON.parse((0, read_text_1.readTextFile)(packageJsonPath));
|
|
708
|
+
}
|
|
709
|
+
catch (e) {
|
|
710
|
+
// Returning here used to add nothing and say nothing, so init reported success and the user
|
|
711
|
+
// met `npm error Missing script: "test"` later with nothing pointing back to this run.
|
|
712
|
+
this.notDoneItems.push(`package.json scripts (${e.message.split('\n')[0]}) ā `
|
|
713
|
+
+ `fix the JSON and re-run \`sungen init\`, or add the scripts by hand`);
|
|
658
714
|
return;
|
|
659
715
|
}
|
|
660
716
|
if (!packageJson.scripts || typeof packageJson.scripts !== 'object') {
|