create-appraisejs 0.3.1-alpha.0 → 0.3.1-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -17
- package/dist/cli.e2e.test.d.ts +2 -2
- package/dist/cli.e2e.test.js +74 -72
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/config.test.d.ts +2 -2
- package/dist/config.test.js +64 -64
- package/dist/copy-template.test.d.ts +2 -2
- package/dist/copy-template.test.js +70 -70
- package/dist/download-repo.test.d.ts +2 -2
- package/dist/download-repo.test.js +15 -13
- package/dist/install.test.d.ts +2 -2
- package/dist/install.test.js +115 -114
- package/dist/prepare-template-utils.d.ts.map +1 -1
- package/dist/prepare-template-utils.js.map +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +2 -2
- package/dist/prompts.js.map +1 -1
- package/dist/prompts.test.d.ts +2 -2
- package/dist/prompts.test.js +54 -54
- package/dist/sync-templates-utils.d.ts.map +1 -1
- package/dist/sync-templates-utils.js +1 -5
- package/dist/sync-templates-utils.js.map +1 -1
- package/package.json +1 -1
- package/templates/blank/.editorconfig +11 -0
- package/templates/blank/.gitattributes +21 -0
- package/templates/blank/.gitconfig.appraise +14 -0
- package/templates/blank/.prettierrc +13 -0
- package/templates/blank/.vscode/settings.json +2 -0
- package/templates/blank/README.md +12 -12
- package/templates/blank/components.json +24 -24
- package/templates/blank/cucumber.mjs +16 -16
- package/templates/blank/e2e/README.md +56 -0
- package/templates/blank/e2e/apply-migrations.mjs +76 -0
- package/templates/blank/e2e/appraise-smoke.spec.ts +78 -0
- package/templates/blank/e2e/authoring.spec.ts +53 -0
- package/templates/blank/e2e/crud-configuration.spec.ts +138 -0
- package/templates/blank/e2e/crud-tests.spec.ts +76 -0
- package/templates/blank/e2e/helpers/forms.ts +186 -0
- package/templates/blank/e2e/helpers/navigation.ts +27 -0
- package/templates/blank/e2e/helpers/table.ts +45 -0
- package/templates/blank/e2e/helpers/test-data.ts +549 -0
- package/templates/blank/e2e/helpers/ui.ts +41 -0
- package/templates/blank/e2e/navigation.spec.ts +101 -0
- package/templates/blank/e2e/runs-and-reports.spec.ts +82 -0
- package/templates/blank/e2e/settings-sync.spec.ts +39 -0
- package/templates/blank/e2e/start-server.mjs +61 -0
- package/templates/blank/eslint.config.mjs +4 -4
- package/templates/blank/gitignore +0 -3
- package/templates/blank/next-env.d.ts +1 -1
- package/templates/blank/package-lock.json +58 -102
- package/templates/blank/package.json +10 -9
- package/templates/blank/packages/cucumber-runtime/package.json +13 -13
- package/templates/blank/packages/cucumber-runtime/src/cache.util.ts +93 -93
- package/templates/blank/packages/cucumber-runtime/src/cli.ts +77 -68
- package/templates/blank/packages/cucumber-runtime/src/environment.util.ts +21 -21
- package/templates/blank/packages/cucumber-runtime/src/executor.ts +32 -32
- package/templates/blank/packages/cucumber-runtime/src/index.ts +17 -17
- package/templates/blank/packages/cucumber-runtime/src/locator.util.ts +234 -234
- package/templates/blank/packages/cucumber-runtime/src/parameter-types.ts +7 -7
- package/templates/blank/packages/cucumber-runtime/src/random-data.util.ts +35 -35
- package/templates/blank/packages/cucumber-runtime/src/types.ts +13 -13
- package/templates/blank/packages/cucumber-runtime/src/world.ts +44 -44
- package/templates/blank/packages/cucumber-runtime/tsconfig.json +11 -11
- package/templates/blank/packages/locator-picker-companion/dist/cli.js +1 -1
- package/templates/blank/packages/locator-picker-companion/dist/index.d.ts +3 -3
- package/templates/blank/packages/locator-picker-companion/dist/index.js +3 -3
- package/templates/blank/packages/locator-picker-companion/dist/injected-picker-script.js +13 -3
- package/templates/blank/packages/locator-picker-companion/dist/selector-generator.d.ts +6 -3
- package/templates/blank/packages/locator-picker-companion/dist/selector-generator.js +233 -229
- package/templates/blank/packages/locator-picker-companion/src/cli.ts +1 -7
- package/templates/blank/packages/locator-picker-companion/src/injected-picker-script.ts +26 -5
- package/templates/blank/packages/locator-picker-companion/src/launcher.ts +1 -3
- package/templates/blank/packages/locator-picker-companion/src/session-file.ts +4 -15
- package/templates/blank/packages/locator-picker-companion/src/types.ts +1 -8
- package/templates/blank/playwright.config.ts +46 -0
- package/templates/blank/postcss.config.mjs +8 -8
- package/templates/blank/prisma/dev.db +0 -0
- package/templates/blank/scripts/configure-git-line-endings.mjs +91 -0
- package/templates/blank/scripts/install-template-step.ts +5 -1
- package/templates/blank/scripts/lib/step-matcher.test.ts +3 -3
- package/templates/blank/scripts/lib/step-matcher.ts +5 -1
- package/templates/blank/scripts/lib/template-step-installer.test.ts +4 -2
- package/templates/blank/scripts/lib/template-step-installer.ts +16 -4
- package/templates/blank/scripts/lib/template-step-registry.test.ts +1 -1
- package/templates/blank/scripts/lib/template-step-registry.ts +4 -1
- package/templates/blank/scripts/run-fallow-commit.mjs +4 -6
- package/templates/blank/scripts/sync-all.ts +7 -6
- package/templates/blank/scripts/sync-appraise-base-template.ts +84 -77
- package/templates/blank/scripts/sync-environments.ts +47 -44
- package/templates/blank/scripts/sync-locator-groups.ts +67 -76
- package/templates/blank/scripts/sync-locators.ts +50 -53
- package/templates/blank/scripts/sync-modules.ts +42 -42
- package/templates/blank/scripts/sync-tags.ts +51 -51
- package/templates/blank/scripts/sync-template-step-groups.ts +34 -32
- package/templates/blank/scripts/sync-template-steps.ts +97 -97
- package/templates/blank/scripts/sync-test-cases.ts +65 -74
- package/templates/blank/scripts/sync-test-suites.ts +85 -80
- package/templates/blank/src/actions/server-action-boundary.test.ts +1 -7
- package/templates/blank/src/actions/settings/sync-actions.ts +3 -1
- package/templates/blank/src/actions/tags/tag-actions.ts +1 -7
- package/templates/blank/src/actions/template-test-case/template-test-case-actions.ts +3 -1
- package/templates/blank/src/app/(base)/environments/create/page.tsx +28 -28
- package/templates/blank/src/app/(base)/environments/environment-form.tsx +3 -2
- package/templates/blank/src/app/(base)/environments/environment-helpers.ts +4 -1
- package/templates/blank/src/app/(base)/layout.tsx +10 -10
- package/templates/blank/src/app/(base)/locator-groups/locator-group-form.tsx +5 -3
- package/templates/blank/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -77
- package/templates/blank/src/app/(base)/locator-groups/locator-group-table.tsx +28 -28
- package/templates/blank/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -46
- package/templates/blank/src/app/(base)/locator-groups/page.tsx +9 -19
- package/templates/blank/src/app/(base)/locators/create/create-locator-workspace-helpers.test.ts +3 -6
- package/templates/blank/src/app/(base)/locators/create/create-locator-workspace-response.ts +22 -5
- package/templates/blank/src/app/(base)/locators/create/create-locator-workspace-state.ts +5 -1
- package/templates/blank/src/app/(base)/locators/create/use-locator-workspace.ts +7 -2
- package/templates/blank/src/app/(base)/locators/locator-file-sync.ts +1 -5
- package/templates/blank/src/app/(base)/locators/locator-helpers.ts +2 -12
- package/templates/blank/src/app/(base)/locators/locator-table-columns.tsx +59 -60
- package/templates/blank/src/app/(base)/modules/module-form.tsx +3 -1
- package/templates/blank/src/app/(base)/reports/overview-chart.tsx +49 -49
- package/templates/blank/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +114 -115
- package/templates/blank/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -27
- package/templates/blank/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +80 -79
- package/templates/blank/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +29 -27
- package/templates/blank/src/app/(base)/settings/settings-sync-panel-helpers.test.tsx +4 -6
- package/templates/blank/src/app/(base)/settings/settings-sync-panel.tsx +22 -23
- package/templates/blank/src/app/(base)/tags/tag-form.test.tsx +2 -10
- package/templates/blank/src/app/(base)/tags/tag-form.tsx +5 -3
- package/templates/blank/src/app/(base)/tags/tag-table-columns.tsx +63 -63
- package/templates/blank/src/app/(base)/tags/tag-table.tsx +29 -29
- package/templates/blank/src/app/(base)/template-step-groups/create/page.tsx +28 -28
- package/templates/blank/src/app/(base)/template-step-groups/template-step-group-form.tsx +3 -1
- package/templates/blank/src/app/(base)/template-step-groups/template-step-group-helpers.ts +4 -1
- package/templates/blank/src/app/(base)/template-steps/paramChip.tsx +6 -10
- package/templates/blank/src/app/(base)/template-steps/template-step-form-helpers.ts +4 -2
- package/templates/blank/src/app/(base)/template-steps/template-step-helpers.test.ts +19 -1
- package/templates/blank/src/app/(base)/template-steps/template-step-helpers.ts +1 -5
- package/templates/blank/src/app/(base)/template-steps/template-step-row-guards.ts +1 -5
- package/templates/blank/src/app/(base)/template-steps/template-step-types.ts +1 -5
- package/templates/blank/src/app/(base)/template-test-cases/create-template-test-case-page-data.test.ts +4 -1
- package/templates/blank/src/app/(base)/template-test-cases/create-template-test-case-page-data.ts +1 -2
- package/templates/blank/src/app/(base)/template-test-cases/modify/[id]/page.tsx +1 -0
- package/templates/blank/src/app/(base)/template-test-cases/template-test-case-flow.test.tsx +0 -1
- package/templates/blank/src/app/(base)/template-test-cases/template-test-case-form.tsx +3 -1
- package/templates/blank/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -76
- package/templates/blank/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -32
- package/templates/blank/src/app/(base)/test-cases/create/page.tsx +1 -5
- package/templates/blank/src/app/(base)/test-cases/create-from-template/create-from-template-selection-helpers.ts +1 -4
- package/templates/blank/src/app/(base)/test-cases/create-from-template/page.test.tsx +2 -2
- package/templates/blank/src/app/(base)/test-cases/inline-tag-creation-dialog.tsx +1 -7
- package/templates/blank/src/app/(base)/test-cases/inline-test-suite-creation-dialog.tsx +1 -7
- package/templates/blank/src/app/(base)/test-cases/modify/[id]/page.tsx +1 -5
- package/templates/blank/src/app/(base)/test-cases/test-case-form.tsx +63 -78
- package/templates/blank/src/app/(base)/test-cases/test-case-route-helpers.test.ts +2 -7
- package/templates/blank/src/app/(base)/test-suites/editable-test-suite-helpers.ts +1 -6
- package/templates/blank/src/app/(base)/test-suites/test-suite-form.test.tsx +2 -10
- package/templates/blank/src/app/(dashboard-components)/data-card-grid.tsx +10 -10
- package/templates/blank/src/app/api/test-runs/[runId]/download/route.ts +1 -4
- package/templates/blank/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.test.ts +18 -9
- package/templates/blank/src/assets/icons/empty-tube.tsx +23 -23
- package/templates/blank/src/assets/icons/tube-plus.tsx +29 -29
- package/templates/blank/src/components/data-visualization/info-card.tsx +56 -70
- package/templates/blank/src/components/data-visualization/info-grid.tsx +22 -22
- package/templates/blank/src/components/diagram/add-node-prompt-node.tsx +1 -1
- package/templates/blank/src/components/diagram/dynamic-parameters-helpers.ts +4 -3
- package/templates/blank/src/components/diagram/dynamic-parameters.test.tsx +4 -1
- package/templates/blank/src/components/diagram/dynamic-parameters.tsx +0 -1
- package/templates/blank/src/components/diagram/flow-diagram-block-dialog.test.tsx +26 -0
- package/templates/blank/src/components/diagram/flow-diagram-block-dialog.tsx +3 -1
- package/templates/blank/src/components/diagram/flow-diagram-connection-guards.ts +24 -6
- package/templates/blank/src/components/diagram/flow-diagram-helpers.test.ts +27 -0
- package/templates/blank/src/components/diagram/flow-diagram-node-search.tsx +65 -65
- package/templates/blank/src/components/diagram/flow-diagram-toolbar.tsx +1 -3
- package/templates/blank/src/components/diagram/flow-diagram-view.tsx +1 -7
- package/templates/blank/src/components/diagram/flow-node-data-helpers.ts +1 -1
- package/templates/blank/src/components/diagram/node-form-fields-content.tsx +9 -2
- package/templates/blank/src/components/diagram/node-form-helpers.test.ts +3 -1
- package/templates/blank/src/components/diagram/node-form-helpers.ts +1 -4
- package/templates/blank/src/components/diagram/node-form-template-step-selection.ts +1 -4
- package/templates/blank/src/components/diagram/node-form.test.tsx +25 -0
- package/templates/blank/src/components/diagram/node-form.tsx +2 -12
- package/templates/blank/src/components/diagram/options-header-node.test.tsx +4 -1
- package/templates/blank/src/components/diagram/options-header-node.tsx +140 -130
- package/templates/blank/src/components/diagram/use-flow-diagram.ts +1 -2
- package/templates/blank/src/components/form/error-message.tsx +7 -7
- package/templates/blank/src/components/loading-skeleton/form/button-skeleton.tsx +8 -8
- package/templates/blank/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -8
- package/templates/blank/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -14
- package/templates/blank/src/components/navigation/entity-search-command.tsx +3 -9
- package/templates/blank/src/components/navigation/nav-link.tsx +60 -60
- package/templates/blank/src/components/test-case/test-case-form-helpers.test.ts +1 -5
- package/templates/blank/src/components/test-case/test-case-form-helpers.ts +1 -5
- package/templates/blank/src/components/test-case/test-case-picker-helpers.ts +8 -7
- package/templates/blank/src/components/test-case/test-case-picker.tsx +2 -6
- package/templates/blank/src/components/test-run/log-viewer.test.tsx +25 -0
- package/templates/blank/src/components/test-run/log-viewer.tsx +2 -2
- package/templates/blank/src/components/test-run/test-run-details-guards.ts +10 -1
- package/templates/blank/src/components/test-run/test-run-details.test.tsx +9 -19
- package/templates/blank/src/components/test-run/use-log-viewer.ts +2 -8
- package/templates/blank/src/components/test-run/use-test-run-header.ts +1 -4
- package/templates/blank/src/components/test-suite/test-suite-picker.tsx +1 -1
- package/templates/blank/src/components/theme/theme-provider.tsx +7 -1
- package/templates/blank/src/components/typography/page-header-subtitle.tsx +7 -7
- package/templates/blank/src/components/typography/page-header.tsx +7 -7
- package/templates/blank/src/components/ui/chart.tsx +2 -8
- package/templates/blank/src/components/ui/command.tsx +2 -5
- package/templates/blank/src/components/ui/data-table-column-header.tsx +3 -3
- package/templates/blank/src/components/ui/data-table.test.tsx +1 -8
- package/templates/blank/src/components/ui/dialog.tsx +1 -4
- package/templates/blank/src/components/ui/select.tsx +2 -2
- package/templates/blank/src/components/ui/separator.tsx +5 -1
- package/templates/blank/src/components/ui/skeleton.tsx +7 -7
- package/templates/blank/src/components/ui/table.tsx +1 -1
- package/templates/blank/src/components/ui/toaster.tsx +26 -26
- package/templates/blank/src/components/ui/tooltip.tsx +1 -1
- package/templates/blank/src/constants/form-opts/locator-group-form-opts.ts +1 -1
- package/templates/blank/src/lib/locator-group-file-utils.ts +5 -1
- package/templates/blank/src/lib/locator-picker/session-manager.ts +1 -2
- package/templates/blank/src/lib/metrics/metric-calculator.test.ts +105 -6
- package/templates/blank/src/lib/metrics/metric-calculator.ts +39 -40
- package/templates/blank/src/lib/sync/sync-executor.ts +1 -4
- package/templates/blank/src/lib/sync/sync-pending-counts.test.ts +201 -7
- package/templates/blank/src/lib/sync/sync-pending-counts.ts +81 -13
- package/templates/blank/src/lib/template-automation-paths.ts +1 -1
- package/templates/blank/src/lib/template-sync-utils.d.ts +14 -7
- package/templates/blank/src/lib/test-case-utils.ts +6 -6
- package/templates/blank/src/lib/test-run/log-formatter.ts +82 -83
- package/templates/blank/src/lib/test-run/report-parser.ts +352 -352
- package/templates/blank/src/lib/transformers/gherkin-converter.ts +42 -42
- package/templates/blank/src/lib/transformers/key-to-icon-transformer.tsx +95 -95
- package/templates/blank/src/lib/utils/node-param-validation.ts +81 -81
- package/templates/blank/src/lib/utils/template-step-file-generator.ts +5 -3
- package/templates/blank/src/lib/utils/template-step-file-manager-intelligent.ts +11 -1
- package/templates/blank/src/services/dashboard/dashboard-service.test.ts +28 -1
- package/templates/blank/src/services/dashboard/dashboard-service.ts +2 -0
- package/templates/blank/src/services/locator/locator-service.test.ts +1 -3
- package/templates/blank/src/services/locator/locator-service.ts +3 -1
- package/templates/blank/src/services/locator/locator-sync-utils.test.ts +1 -4
- package/templates/blank/src/services/module/module-service.ts +1 -4
- package/templates/blank/src/services/report/report-service.test.ts +70 -6
- package/templates/blank/src/services/report/report-service.ts +52 -9
- package/templates/blank/src/services/shared/errors.ts +2 -4
- package/templates/blank/src/services/template-step/template-step-service.ts +3 -1
- package/templates/blank/src/services/template-step-group/template-step-group-service.ts +3 -1
- package/templates/blank/src/services/test-case/test-case-service.ts +0 -5
- package/templates/blank/src/services/test-run/test-run-service.test.ts +3 -6
- package/templates/blank/src/services/test-run/test-run-service.ts +12 -7
- package/templates/blank/src/services/test-suite/test-suite-service.test.ts +1 -5
- package/templates/blank/src/services/test-suite/test-suite-service.ts +2 -4
- package/templates/blank/src/types/form/actionHandler.ts +1 -5
- package/templates/blank/tsconfig.json +8 -8
- package/templates/default/packages/locator-picker-companion/dist/cli.d.ts +1 -1
- package/templates/default/packages/locator-picker-companion/dist/cli.js +313 -279
- package/templates/default/packages/locator-picker-companion/dist/index.d.ts +3 -3
- package/templates/default/packages/locator-picker-companion/dist/index.js +3 -3
- package/templates/default/packages/locator-picker-companion/dist/injected-picker-script.d.ts +1 -1
- package/templates/default/packages/locator-picker-companion/dist/injected-picker-script.js +526 -481
- package/templates/default/packages/locator-picker-companion/dist/launcher.d.ts +13 -10
- package/templates/default/packages/locator-picker-companion/dist/launcher.js +47 -48
- package/templates/default/packages/locator-picker-companion/dist/selector-generator.d.ts +6 -3
- package/templates/default/packages/locator-picker-companion/dist/selector-generator.js +233 -229
- package/templates/default/packages/locator-picker-companion/dist/session-file.d.ts +30 -22
- package/templates/default/packages/locator-picker-companion/dist/session-file.js +116 -104
- package/templates/default/packages/locator-picker-companion/dist/types.d.ts +25 -25
- package/templates/default/packages/locator-picker-companion/dist/types.js +1 -1
- package/templates/starter/.editorconfig +11 -0
- package/templates/starter/.gitattributes +21 -0
- package/templates/starter/.gitconfig.appraise +14 -0
- package/templates/starter/.prettierrc +13 -0
- package/templates/starter/.vscode/settings.json +2 -0
- package/templates/starter/README.md +12 -12
- package/templates/starter/automation/steps/actions/click.step.ts +56 -58
- package/templates/starter/automation/steps/actions/hover.step.ts +25 -27
- package/templates/starter/automation/steps/actions/input.step.ts +85 -108
- package/templates/starter/automation/steps/actions/navigation.step.ts +67 -70
- package/templates/starter/automation/steps/actions/random_data.step.ts +149 -143
- package/templates/starter/automation/steps/actions/store.step.ts +69 -1
- package/templates/starter/automation/steps/actions/wait.step.ts +84 -1
- package/templates/starter/automation/steps/validations/active_state_assertion.step.ts +28 -30
- package/templates/starter/automation/steps/validations/navigation_assertion.step.ts +20 -22
- package/templates/starter/automation/steps/validations/text_assertion.step.ts +67 -107
- package/templates/starter/automation/steps/validations/visibility_assertion.step.ts +24 -26
- package/templates/starter/components.json +24 -24
- package/templates/starter/cucumber.mjs +16 -16
- package/templates/starter/e2e/README.md +56 -0
- package/templates/starter/e2e/apply-migrations.mjs +76 -0
- package/templates/starter/e2e/appraise-smoke.spec.ts +78 -0
- package/templates/starter/e2e/authoring.spec.ts +53 -0
- package/templates/starter/e2e/crud-configuration.spec.ts +138 -0
- package/templates/starter/e2e/crud-tests.spec.ts +76 -0
- package/templates/starter/e2e/helpers/forms.ts +186 -0
- package/templates/starter/e2e/helpers/navigation.ts +27 -0
- package/templates/starter/e2e/helpers/table.ts +45 -0
- package/templates/starter/e2e/helpers/test-data.ts +549 -0
- package/templates/starter/e2e/helpers/ui.ts +41 -0
- package/templates/starter/e2e/navigation.spec.ts +101 -0
- package/templates/starter/e2e/runs-and-reports.spec.ts +82 -0
- package/templates/starter/e2e/settings-sync.spec.ts +39 -0
- package/templates/starter/e2e/start-server.mjs +61 -0
- package/templates/starter/eslint.config.mjs +4 -4
- package/templates/starter/gitignore +0 -3
- package/templates/starter/next-env.d.ts +1 -1
- package/templates/starter/package-lock.json +58 -102
- package/templates/starter/package.json +10 -9
- package/templates/starter/packages/cucumber-runtime/package.json +13 -13
- package/templates/starter/packages/cucumber-runtime/src/cache.util.ts +93 -93
- package/templates/starter/packages/cucumber-runtime/src/cli.ts +77 -68
- package/templates/starter/packages/cucumber-runtime/src/environment.util.ts +21 -21
- package/templates/starter/packages/cucumber-runtime/src/executor.ts +32 -32
- package/templates/starter/packages/cucumber-runtime/src/index.ts +17 -17
- package/templates/starter/packages/cucumber-runtime/src/locator.util.ts +234 -234
- package/templates/starter/packages/cucumber-runtime/src/parameter-types.ts +7 -7
- package/templates/starter/packages/cucumber-runtime/src/random-data.util.ts +35 -35
- package/templates/starter/packages/cucumber-runtime/src/types.ts +13 -13
- package/templates/starter/packages/cucumber-runtime/src/world.ts +44 -44
- package/templates/starter/packages/cucumber-runtime/tsconfig.json +11 -11
- package/templates/starter/packages/locator-picker-companion/dist/cli.js +1 -1
- package/templates/starter/packages/locator-picker-companion/dist/index.d.ts +3 -3
- package/templates/starter/packages/locator-picker-companion/dist/index.js +3 -3
- package/templates/starter/packages/locator-picker-companion/dist/injected-picker-script.js +13 -3
- package/templates/starter/packages/locator-picker-companion/dist/selector-generator.d.ts +6 -3
- package/templates/starter/packages/locator-picker-companion/dist/selector-generator.js +233 -229
- package/templates/starter/packages/locator-picker-companion/src/cli.ts +1 -7
- package/templates/starter/packages/locator-picker-companion/src/injected-picker-script.ts +26 -5
- package/templates/starter/packages/locator-picker-companion/src/launcher.ts +1 -3
- package/templates/starter/packages/locator-picker-companion/src/session-file.ts +4 -15
- package/templates/starter/packages/locator-picker-companion/src/types.ts +1 -8
- package/templates/starter/playwright.config.ts +46 -0
- package/templates/starter/postcss.config.mjs +8 -8
- package/templates/starter/prisma/dev.db +0 -0
- package/templates/starter/scripts/configure-git-line-endings.mjs +91 -0
- package/templates/starter/scripts/install-template-step.ts +5 -1
- package/templates/starter/scripts/lib/step-matcher.test.ts +3 -3
- package/templates/starter/scripts/lib/step-matcher.ts +5 -1
- package/templates/starter/scripts/lib/template-step-installer.test.ts +4 -2
- package/templates/starter/scripts/lib/template-step-installer.ts +16 -4
- package/templates/starter/scripts/lib/template-step-registry.test.ts +1 -1
- package/templates/starter/scripts/lib/template-step-registry.ts +4 -1
- package/templates/starter/scripts/run-fallow-commit.mjs +4 -6
- package/templates/starter/scripts/sync-all.ts +7 -6
- package/templates/starter/scripts/sync-appraise-base-template.ts +84 -77
- package/templates/starter/scripts/sync-environments.ts +47 -44
- package/templates/starter/scripts/sync-locator-groups.ts +67 -76
- package/templates/starter/scripts/sync-locators.ts +50 -53
- package/templates/starter/scripts/sync-modules.ts +42 -42
- package/templates/starter/scripts/sync-tags.ts +51 -51
- package/templates/starter/scripts/sync-template-step-groups.ts +34 -32
- package/templates/starter/scripts/sync-template-steps.ts +97 -97
- package/templates/starter/scripts/sync-test-cases.ts +65 -74
- package/templates/starter/scripts/sync-test-suites.ts +85 -80
- package/templates/starter/src/actions/server-action-boundary.test.ts +1 -7
- package/templates/starter/src/actions/settings/sync-actions.ts +3 -1
- package/templates/starter/src/actions/tags/tag-actions.ts +1 -7
- package/templates/starter/src/actions/template-test-case/template-test-case-actions.ts +3 -1
- package/templates/starter/src/app/(base)/environments/create/page.tsx +28 -28
- package/templates/starter/src/app/(base)/environments/environment-form.tsx +3 -2
- package/templates/starter/src/app/(base)/environments/environment-helpers.ts +4 -1
- package/templates/starter/src/app/(base)/layout.tsx +10 -10
- package/templates/starter/src/app/(base)/locator-groups/locator-group-form.tsx +5 -3
- package/templates/starter/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -77
- package/templates/starter/src/app/(base)/locator-groups/locator-group-table.tsx +28 -28
- package/templates/starter/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -46
- package/templates/starter/src/app/(base)/locator-groups/page.tsx +9 -19
- package/templates/starter/src/app/(base)/locators/create/create-locator-workspace-helpers.test.ts +3 -6
- package/templates/starter/src/app/(base)/locators/create/create-locator-workspace-response.ts +22 -5
- package/templates/starter/src/app/(base)/locators/create/create-locator-workspace-state.ts +5 -1
- package/templates/starter/src/app/(base)/locators/create/use-locator-workspace.ts +7 -2
- package/templates/starter/src/app/(base)/locators/locator-file-sync.ts +1 -5
- package/templates/starter/src/app/(base)/locators/locator-helpers.ts +2 -12
- package/templates/starter/src/app/(base)/locators/locator-table-columns.tsx +59 -60
- package/templates/starter/src/app/(base)/modules/module-form.tsx +3 -1
- package/templates/starter/src/app/(base)/reports/overview-chart.tsx +49 -49
- package/templates/starter/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +114 -115
- package/templates/starter/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -27
- package/templates/starter/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +80 -79
- package/templates/starter/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +29 -27
- package/templates/starter/src/app/(base)/settings/settings-sync-panel-helpers.test.tsx +4 -6
- package/templates/starter/src/app/(base)/settings/settings-sync-panel.tsx +22 -23
- package/templates/starter/src/app/(base)/tags/tag-form.test.tsx +2 -10
- package/templates/starter/src/app/(base)/tags/tag-form.tsx +5 -3
- package/templates/starter/src/app/(base)/tags/tag-table-columns.tsx +63 -63
- package/templates/starter/src/app/(base)/tags/tag-table.tsx +29 -29
- package/templates/starter/src/app/(base)/template-step-groups/create/page.tsx +28 -28
- package/templates/starter/src/app/(base)/template-step-groups/template-step-group-form.tsx +3 -1
- package/templates/starter/src/app/(base)/template-step-groups/template-step-group-helpers.ts +4 -1
- package/templates/starter/src/app/(base)/template-steps/paramChip.tsx +6 -10
- package/templates/starter/src/app/(base)/template-steps/template-step-form-helpers.ts +4 -2
- package/templates/starter/src/app/(base)/template-steps/template-step-helpers.test.ts +19 -1
- package/templates/starter/src/app/(base)/template-steps/template-step-helpers.ts +1 -5
- package/templates/starter/src/app/(base)/template-steps/template-step-row-guards.ts +1 -5
- package/templates/starter/src/app/(base)/template-steps/template-step-types.ts +1 -5
- package/templates/starter/src/app/(base)/template-test-cases/create-template-test-case-page-data.test.ts +4 -1
- package/templates/starter/src/app/(base)/template-test-cases/create-template-test-case-page-data.ts +1 -2
- package/templates/starter/src/app/(base)/template-test-cases/modify/[id]/page.tsx +1 -0
- package/templates/starter/src/app/(base)/template-test-cases/template-test-case-flow.test.tsx +0 -1
- package/templates/starter/src/app/(base)/template-test-cases/template-test-case-form.tsx +3 -1
- package/templates/starter/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -76
- package/templates/starter/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -32
- package/templates/starter/src/app/(base)/test-cases/create/page.tsx +1 -5
- package/templates/starter/src/app/(base)/test-cases/create-from-template/create-from-template-selection-helpers.ts +1 -4
- package/templates/starter/src/app/(base)/test-cases/create-from-template/page.test.tsx +2 -2
- package/templates/starter/src/app/(base)/test-cases/inline-tag-creation-dialog.tsx +1 -7
- package/templates/starter/src/app/(base)/test-cases/inline-test-suite-creation-dialog.tsx +1 -7
- package/templates/starter/src/app/(base)/test-cases/modify/[id]/page.tsx +1 -5
- package/templates/starter/src/app/(base)/test-cases/test-case-form.tsx +63 -78
- package/templates/starter/src/app/(base)/test-cases/test-case-route-helpers.test.ts +2 -7
- package/templates/starter/src/app/(base)/test-suites/editable-test-suite-helpers.ts +1 -6
- package/templates/starter/src/app/(base)/test-suites/test-suite-form.test.tsx +2 -10
- package/templates/starter/src/app/(dashboard-components)/data-card-grid.tsx +10 -10
- package/templates/starter/src/app/api/test-runs/[runId]/download/route.ts +1 -4
- package/templates/starter/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.test.ts +18 -9
- package/templates/starter/src/assets/icons/empty-tube.tsx +23 -23
- package/templates/starter/src/assets/icons/tube-plus.tsx +29 -29
- package/templates/starter/src/components/data-visualization/info-card.tsx +56 -70
- package/templates/starter/src/components/data-visualization/info-grid.tsx +22 -22
- package/templates/starter/src/components/diagram/add-node-prompt-node.tsx +1 -1
- package/templates/starter/src/components/diagram/dynamic-parameters-helpers.ts +4 -3
- package/templates/starter/src/components/diagram/dynamic-parameters.test.tsx +4 -1
- package/templates/starter/src/components/diagram/dynamic-parameters.tsx +0 -1
- package/templates/starter/src/components/diagram/flow-diagram-block-dialog.test.tsx +26 -0
- package/templates/starter/src/components/diagram/flow-diagram-block-dialog.tsx +3 -1
- package/templates/starter/src/components/diagram/flow-diagram-connection-guards.ts +24 -6
- package/templates/starter/src/components/diagram/flow-diagram-helpers.test.ts +27 -0
- package/templates/starter/src/components/diagram/flow-diagram-node-search.tsx +65 -65
- package/templates/starter/src/components/diagram/flow-diagram-toolbar.tsx +1 -3
- package/templates/starter/src/components/diagram/flow-diagram-view.tsx +1 -7
- package/templates/starter/src/components/diagram/flow-node-data-helpers.ts +1 -1
- package/templates/starter/src/components/diagram/node-form-fields-content.tsx +9 -2
- package/templates/starter/src/components/diagram/node-form-helpers.test.ts +3 -1
- package/templates/starter/src/components/diagram/node-form-helpers.ts +1 -4
- package/templates/starter/src/components/diagram/node-form-template-step-selection.ts +1 -4
- package/templates/starter/src/components/diagram/node-form.test.tsx +25 -0
- package/templates/starter/src/components/diagram/node-form.tsx +2 -12
- package/templates/starter/src/components/diagram/options-header-node.test.tsx +4 -1
- package/templates/starter/src/components/diagram/options-header-node.tsx +140 -130
- package/templates/starter/src/components/diagram/use-flow-diagram.ts +1 -2
- package/templates/starter/src/components/form/error-message.tsx +7 -7
- package/templates/starter/src/components/loading-skeleton/form/button-skeleton.tsx +8 -8
- package/templates/starter/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -8
- package/templates/starter/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -14
- package/templates/starter/src/components/navigation/entity-search-command.tsx +3 -9
- package/templates/starter/src/components/navigation/nav-link.tsx +60 -60
- package/templates/starter/src/components/test-case/test-case-form-helpers.test.ts +1 -5
- package/templates/starter/src/components/test-case/test-case-form-helpers.ts +1 -5
- package/templates/starter/src/components/test-case/test-case-picker-helpers.ts +8 -7
- package/templates/starter/src/components/test-case/test-case-picker.tsx +2 -6
- package/templates/starter/src/components/test-run/log-viewer.test.tsx +25 -0
- package/templates/starter/src/components/test-run/log-viewer.tsx +2 -2
- package/templates/starter/src/components/test-run/test-run-details-guards.ts +10 -1
- package/templates/starter/src/components/test-run/test-run-details.test.tsx +9 -19
- package/templates/starter/src/components/test-run/use-log-viewer.ts +2 -8
- package/templates/starter/src/components/test-run/use-test-run-header.ts +1 -4
- package/templates/starter/src/components/test-suite/test-suite-picker.tsx +1 -1
- package/templates/starter/src/components/theme/theme-provider.tsx +7 -1
- package/templates/starter/src/components/typography/page-header-subtitle.tsx +7 -7
- package/templates/starter/src/components/typography/page-header.tsx +7 -7
- package/templates/starter/src/components/ui/chart.tsx +2 -8
- package/templates/starter/src/components/ui/command.tsx +2 -5
- package/templates/starter/src/components/ui/data-table-column-header.tsx +3 -3
- package/templates/starter/src/components/ui/data-table.test.tsx +1 -8
- package/templates/starter/src/components/ui/dialog.tsx +1 -4
- package/templates/starter/src/components/ui/select.tsx +2 -2
- package/templates/starter/src/components/ui/separator.tsx +5 -1
- package/templates/starter/src/components/ui/skeleton.tsx +7 -7
- package/templates/starter/src/components/ui/table.tsx +1 -1
- package/templates/starter/src/components/ui/toaster.tsx +26 -26
- package/templates/starter/src/components/ui/tooltip.tsx +1 -1
- package/templates/starter/src/constants/form-opts/locator-group-form-opts.ts +1 -1
- package/templates/starter/src/lib/locator-group-file-utils.ts +5 -1
- package/templates/starter/src/lib/locator-picker/session-manager.ts +1 -2
- package/templates/starter/src/lib/metrics/metric-calculator.test.ts +105 -6
- package/templates/starter/src/lib/metrics/metric-calculator.ts +39 -40
- package/templates/starter/src/lib/sync/sync-executor.ts +1 -4
- package/templates/starter/src/lib/sync/sync-pending-counts.test.ts +201 -7
- package/templates/starter/src/lib/sync/sync-pending-counts.ts +81 -13
- package/templates/starter/src/lib/template-automation-paths.ts +1 -1
- package/templates/starter/src/lib/template-sync-utils.d.ts +14 -7
- package/templates/starter/src/lib/test-case-utils.ts +6 -6
- package/templates/starter/src/lib/test-run/log-formatter.ts +82 -83
- package/templates/starter/src/lib/test-run/report-parser.ts +352 -352
- package/templates/starter/src/lib/transformers/gherkin-converter.ts +42 -42
- package/templates/starter/src/lib/transformers/key-to-icon-transformer.tsx +95 -95
- package/templates/starter/src/lib/utils/node-param-validation.ts +81 -81
- package/templates/starter/src/lib/utils/template-step-file-generator.ts +5 -3
- package/templates/starter/src/lib/utils/template-step-file-manager-intelligent.ts +11 -1
- package/templates/starter/src/services/dashboard/dashboard-service.test.ts +28 -1
- package/templates/starter/src/services/dashboard/dashboard-service.ts +2 -0
- package/templates/starter/src/services/locator/locator-service.test.ts +1 -3
- package/templates/starter/src/services/locator/locator-service.ts +3 -1
- package/templates/starter/src/services/locator/locator-sync-utils.test.ts +1 -4
- package/templates/starter/src/services/module/module-service.ts +1 -4
- package/templates/starter/src/services/report/report-service.test.ts +70 -6
- package/templates/starter/src/services/report/report-service.ts +52 -9
- package/templates/starter/src/services/shared/errors.ts +2 -4
- package/templates/starter/src/services/template-step/template-step-service.ts +3 -1
- package/templates/starter/src/services/template-step-group/template-step-group-service.ts +3 -1
- package/templates/starter/src/services/test-case/test-case-service.ts +0 -5
- package/templates/starter/src/services/test-run/test-run-service.test.ts +3 -6
- package/templates/starter/src/services/test-run/test-run-service.ts +12 -7
- package/templates/starter/src/services/test-suite/test-suite-service.test.ts +1 -5
- package/templates/starter/src/services/test-suite/test-suite-service.ts +2 -4
- package/templates/starter/src/types/form/actionHandler.ts +1 -5
- package/templates/starter/tsconfig.json +8 -8
|
@@ -1,22 +1,30 @@
|
|
|
1
|
-
import type { CompanionSessionFile } from './types.js'
|
|
2
|
-
export declare function getLocatorPickerRootDir(repoRoot?: string): string
|
|
3
|
-
export declare function getLocatorPickerSessionsDir(repoRoot?: string): string
|
|
4
|
-
export declare function getLocatorPickerProfilesDir(repoRoot?: string): string
|
|
5
|
-
export declare function getLocatorPickerLogsDir(repoRoot?: string): string
|
|
6
|
-
export declare function getLocatorPickerProfileDir(sessionId: string, repoRoot?: string): string
|
|
7
|
-
export declare function getLocatorPickerRuntimeDir(repoRoot?: string): string
|
|
8
|
-
export declare function getLocatorPickerRuntimeHomeDir(repoRoot?: string): string
|
|
9
|
-
export declare function getLocatorPickerRuntimeEnv(repoRoot?: string, baseEnv?: NodeJS.ProcessEnv): NodeJS.ProcessEnv
|
|
10
|
-
export declare function getLocatorPickerSessionFilePath(sessionId: string, repoRoot?: string): string
|
|
11
|
-
export declare function getLocatorPickerCrashLogPath(sessionId: string, repoRoot?: string): string
|
|
12
|
-
export declare function removeLocatorPickerProfileDir(sessionId: string, repoRoot?: string): Promise<void
|
|
13
|
-
export declare function removeLocatorPickerSessionFile(sessionId: string, repoRoot?: string): Promise<void
|
|
14
|
-
export declare function clearLocatorPickerCrashLogs(repoRoot?: string): Promise<void
|
|
15
|
-
export declare function createLocatorPickerCrashLog(logFilePath: string): Promise<void
|
|
16
|
-
export declare function appendLocatorPickerCrashLog(logFilePath: string, message: string): Promise<void
|
|
17
|
-
export declare function ensureLocatorPickerDirectories(repoRoot?: string): Promise<void
|
|
18
|
-
export declare function readLocatorPickerSessionFile(sessionFilePath: string): Promise<CompanionSessionFile | null
|
|
19
|
-
export declare function writeLocatorPickerSessionFile(
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
1
|
+
import type { CompanionSessionFile } from './types.js'
|
|
2
|
+
export declare function getLocatorPickerRootDir(repoRoot?: string): string
|
|
3
|
+
export declare function getLocatorPickerSessionsDir(repoRoot?: string): string
|
|
4
|
+
export declare function getLocatorPickerProfilesDir(repoRoot?: string): string
|
|
5
|
+
export declare function getLocatorPickerLogsDir(repoRoot?: string): string
|
|
6
|
+
export declare function getLocatorPickerProfileDir(sessionId: string, repoRoot?: string): string
|
|
7
|
+
export declare function getLocatorPickerRuntimeDir(repoRoot?: string): string
|
|
8
|
+
export declare function getLocatorPickerRuntimeHomeDir(repoRoot?: string): string
|
|
9
|
+
export declare function getLocatorPickerRuntimeEnv(repoRoot?: string, baseEnv?: NodeJS.ProcessEnv): NodeJS.ProcessEnv
|
|
10
|
+
export declare function getLocatorPickerSessionFilePath(sessionId: string, repoRoot?: string): string
|
|
11
|
+
export declare function getLocatorPickerCrashLogPath(sessionId: string, repoRoot?: string): string
|
|
12
|
+
export declare function removeLocatorPickerProfileDir(sessionId: string, repoRoot?: string): Promise<void>
|
|
13
|
+
export declare function removeLocatorPickerSessionFile(sessionId: string, repoRoot?: string): Promise<void>
|
|
14
|
+
export declare function clearLocatorPickerCrashLogs(repoRoot?: string): Promise<void>
|
|
15
|
+
export declare function createLocatorPickerCrashLog(logFilePath: string): Promise<void>
|
|
16
|
+
export declare function appendLocatorPickerCrashLog(logFilePath: string, message: string): Promise<void>
|
|
17
|
+
export declare function ensureLocatorPickerDirectories(repoRoot?: string): Promise<void>
|
|
18
|
+
export declare function readLocatorPickerSessionFile(sessionFilePath: string): Promise<CompanionSessionFile | null>
|
|
19
|
+
export declare function writeLocatorPickerSessionFile(
|
|
20
|
+
sessionFilePath: string,
|
|
21
|
+
session: Omit<CompanionSessionFile, 'updatedAt'> & {
|
|
22
|
+
updatedAt?: string
|
|
23
|
+
},
|
|
24
|
+
): Promise<CompanionSessionFile>
|
|
25
|
+
export declare function patchLocatorPickerSessionFile(
|
|
26
|
+
sessionFilePath: string,
|
|
27
|
+
patch:
|
|
28
|
+
| Partial<CompanionSessionFile>
|
|
29
|
+
| ((current: CompanionSessionFile) => Partial<CompanionSessionFile> | CompanionSessionFile),
|
|
30
|
+
): Promise<CompanionSessionFile | null>
|
|
@@ -1,150 +1,162 @@
|
|
|
1
|
-
import { randomUUID } from 'crypto'
|
|
2
|
-
import { access, appendFile, mkdir, readFile, rename, rm, unlink, writeFile } from 'fs/promises'
|
|
3
|
-
import path from 'path'
|
|
4
|
-
const sessionFileOperationQueue = new Map()
|
|
1
|
+
import { randomUUID } from 'crypto'
|
|
2
|
+
import { access, appendFile, mkdir, readFile, rename, rm, unlink, writeFile } from 'fs/promises'
|
|
3
|
+
import path from 'path'
|
|
4
|
+
const sessionFileOperationQueue = new Map()
|
|
5
5
|
function withTimestamp(session) {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
var _a
|
|
7
|
+
return Object.assign(Object.assign({}, session), {
|
|
8
|
+
updatedAt: (_a = session.updatedAt) !== null && _a !== void 0 ? _a : new Date().toISOString(),
|
|
9
|
+
})
|
|
8
10
|
}
|
|
9
11
|
export function getLocatorPickerRootDir(repoRoot = process.cwd()) {
|
|
10
|
-
|
|
12
|
+
return path.join(repoRoot, '.tmp', 'locator-picker')
|
|
11
13
|
}
|
|
12
14
|
export function getLocatorPickerSessionsDir(repoRoot = process.cwd()) {
|
|
13
|
-
|
|
15
|
+
return path.join(getLocatorPickerRootDir(repoRoot), 'sessions')
|
|
14
16
|
}
|
|
15
17
|
export function getLocatorPickerProfilesDir(repoRoot = process.cwd()) {
|
|
16
|
-
|
|
18
|
+
return path.join(getLocatorPickerRootDir(repoRoot), 'profiles')
|
|
17
19
|
}
|
|
18
20
|
export function getLocatorPickerLogsDir(repoRoot = process.cwd()) {
|
|
19
|
-
|
|
21
|
+
return path.join(getLocatorPickerRootDir(repoRoot), 'logs')
|
|
20
22
|
}
|
|
21
23
|
export function getLocatorPickerProfileDir(sessionId, repoRoot = process.cwd()) {
|
|
22
|
-
|
|
24
|
+
return path.join(getLocatorPickerProfilesDir(repoRoot), sessionId)
|
|
23
25
|
}
|
|
24
26
|
export function getLocatorPickerRuntimeDir(repoRoot = process.cwd()) {
|
|
25
|
-
|
|
27
|
+
return path.join(getLocatorPickerRootDir(repoRoot), 'runtime')
|
|
26
28
|
}
|
|
27
29
|
export function getLocatorPickerRuntimeHomeDir(repoRoot = process.cwd()) {
|
|
28
|
-
|
|
30
|
+
return path.join(getLocatorPickerRuntimeDir(repoRoot), 'home')
|
|
29
31
|
}
|
|
30
32
|
export function getLocatorPickerRuntimeEnv(repoRoot = process.cwd(), baseEnv = process.env) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
const runtimeDir = getLocatorPickerRuntimeDir(repoRoot)
|
|
34
|
+
const runtimeHomeDir = getLocatorPickerRuntimeHomeDir(repoRoot)
|
|
35
|
+
const tempDir = path.join(runtimeDir, 'tmp')
|
|
36
|
+
const configDir = path.join(runtimeDir, 'config')
|
|
37
|
+
const cacheDir = path.join(runtimeDir, 'cache')
|
|
38
|
+
const appDataDir = path.join(runtimeDir, 'appdata')
|
|
39
|
+
const localAppDataDir = path.join(runtimeDir, 'localappdata')
|
|
40
|
+
return Object.assign(Object.assign({}, baseEnv), {
|
|
41
|
+
HOME: runtimeHomeDir,
|
|
42
|
+
USERPROFILE: runtimeHomeDir,
|
|
43
|
+
APPDATA: appDataDir,
|
|
44
|
+
LOCALAPPDATA: localAppDataDir,
|
|
45
|
+
XDG_CONFIG_HOME: configDir,
|
|
46
|
+
XDG_CACHE_HOME: cacheDir,
|
|
47
|
+
TMPDIR: tempDir,
|
|
48
|
+
TMP: tempDir,
|
|
49
|
+
TEMP: tempDir,
|
|
50
|
+
})
|
|
39
51
|
}
|
|
40
52
|
export function getLocatorPickerSessionFilePath(sessionId, repoRoot = process.cwd()) {
|
|
41
|
-
|
|
53
|
+
return path.join(getLocatorPickerSessionsDir(repoRoot), `${sessionId}.json`)
|
|
42
54
|
}
|
|
43
55
|
export function getLocatorPickerCrashLogPath(sessionId, repoRoot = process.cwd()) {
|
|
44
|
-
|
|
56
|
+
return path.join(getLocatorPickerLogsDir(repoRoot), `${sessionId}.log`)
|
|
45
57
|
}
|
|
46
58
|
export async function removeLocatorPickerProfileDir(sessionId, repoRoot = process.cwd()) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
59
|
+
await rm(getLocatorPickerProfileDir(sessionId, repoRoot), {
|
|
60
|
+
force: true,
|
|
61
|
+
recursive: true,
|
|
62
|
+
}).catch(() => undefined)
|
|
51
63
|
}
|
|
52
64
|
export async function removeLocatorPickerSessionFile(sessionId, repoRoot = process.cwd()) {
|
|
53
|
-
|
|
65
|
+
await unlink(getLocatorPickerSessionFilePath(sessionId, repoRoot)).catch(() => undefined)
|
|
54
66
|
}
|
|
55
67
|
export async function clearLocatorPickerCrashLogs(repoRoot = process.cwd()) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
68
|
+
await rm(getLocatorPickerLogsDir(repoRoot), {
|
|
69
|
+
force: true,
|
|
70
|
+
recursive: true,
|
|
71
|
+
}).catch(() => console.error('Failed to clear locator picker crash logs.'))
|
|
72
|
+
await mkdir(getLocatorPickerLogsDir(repoRoot), { recursive: true })
|
|
61
73
|
}
|
|
62
74
|
export async function createLocatorPickerCrashLog(logFilePath) {
|
|
63
|
-
|
|
64
|
-
|
|
75
|
+
await mkdir(path.dirname(logFilePath), { recursive: true })
|
|
76
|
+
await writeFile(logFilePath, '', 'utf8')
|
|
65
77
|
}
|
|
66
78
|
export async function appendLocatorPickerCrashLog(logFilePath, message) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
await appendFile(logFilePath, `[${new Date().toISOString()}] ${message}\n`, 'utf8');
|
|
79
|
+
try {
|
|
80
|
+
await access(logFilePath)
|
|
81
|
+
} catch (_a) {
|
|
82
|
+
return
|
|
83
|
+
}
|
|
84
|
+
await appendFile(logFilePath, `[${new Date().toISOString()}] ${message}\n`, 'utf8')
|
|
74
85
|
}
|
|
75
86
|
export async function ensureLocatorPickerDirectories(repoRoot = process.cwd()) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
87
|
+
const runtimeDir = getLocatorPickerRuntimeDir(repoRoot)
|
|
88
|
+
const runtimeHomeDir = getLocatorPickerRuntimeHomeDir(repoRoot)
|
|
89
|
+
const tempDir = path.join(runtimeDir, 'tmp')
|
|
90
|
+
const configDir = path.join(runtimeDir, 'config')
|
|
91
|
+
const cacheDir = path.join(runtimeDir, 'cache')
|
|
92
|
+
const appDataDir = path.join(runtimeDir, 'appdata')
|
|
93
|
+
const localAppDataDir = path.join(runtimeDir, 'localappdata')
|
|
94
|
+
await mkdir(getLocatorPickerSessionsDir(repoRoot), { recursive: true })
|
|
95
|
+
await mkdir(getLocatorPickerProfilesDir(repoRoot), { recursive: true })
|
|
96
|
+
await mkdir(getLocatorPickerLogsDir(repoRoot), { recursive: true })
|
|
97
|
+
await mkdir(runtimeHomeDir, { recursive: true })
|
|
98
|
+
await mkdir(tempDir, { recursive: true })
|
|
99
|
+
await mkdir(configDir, { recursive: true })
|
|
100
|
+
await mkdir(cacheDir, { recursive: true })
|
|
101
|
+
await mkdir(appDataDir, { recursive: true })
|
|
102
|
+
await mkdir(localAppDataDir, { recursive: true })
|
|
92
103
|
}
|
|
93
104
|
export async function readLocatorPickerSessionFile(sessionFilePath) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
105
|
+
try {
|
|
106
|
+
const raw = await readFile(sessionFilePath, 'utf8')
|
|
107
|
+
return JSON.parse(raw)
|
|
108
|
+
} catch (_a) {
|
|
109
|
+
return null
|
|
110
|
+
}
|
|
101
111
|
}
|
|
102
112
|
async function enqueueSessionFileOperation(sessionFilePath, operation) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
113
|
+
var _a
|
|
114
|
+
const previousOperation =
|
|
115
|
+
(_a = sessionFileOperationQueue.get(sessionFilePath)) !== null && _a !== void 0 ? _a : Promise.resolve()
|
|
116
|
+
const nextOperation = previousOperation.catch(() => undefined).then(operation)
|
|
117
|
+
sessionFileOperationQueue.set(sessionFilePath, nextOperation)
|
|
118
|
+
try {
|
|
119
|
+
return await nextOperation
|
|
120
|
+
} finally {
|
|
121
|
+
if (sessionFileOperationQueue.get(sessionFilePath) === nextOperation) {
|
|
122
|
+
sessionFileOperationQueue.delete(sessionFilePath)
|
|
114
123
|
}
|
|
124
|
+
}
|
|
115
125
|
}
|
|
116
126
|
async function writeLocatorPickerSessionFileImmediate(sessionFilePath, session) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
else {
|
|
132
|
-
throw error;
|
|
133
|
-
}
|
|
127
|
+
await mkdir(path.dirname(sessionFilePath), { recursive: true })
|
|
128
|
+
const normalized = withTimestamp(session)
|
|
129
|
+
const serialized = `${JSON.stringify(normalized, null, 2)}\n`
|
|
130
|
+
const tempFilePath = `${sessionFilePath}.${process.pid}.${randomUUID()}.tmp`
|
|
131
|
+
try {
|
|
132
|
+
await writeFile(tempFilePath, serialized, 'utf8')
|
|
133
|
+
await rename(tempFilePath, sessionFilePath)
|
|
134
|
+
} catch (error) {
|
|
135
|
+
await unlink(tempFilePath).catch(() => undefined)
|
|
136
|
+
const code = error instanceof Error && 'code' in error ? String(error.code) : ''
|
|
137
|
+
if (process.platform === 'win32' || code === 'EPERM' || code === 'EACCES' || code === 'ENOENT') {
|
|
138
|
+
await writeFile(sessionFilePath, serialized, 'utf8')
|
|
139
|
+
} else {
|
|
140
|
+
throw error
|
|
134
141
|
}
|
|
135
|
-
|
|
142
|
+
}
|
|
143
|
+
return normalized
|
|
136
144
|
}
|
|
137
145
|
export async function writeLocatorPickerSessionFile(sessionFilePath, session) {
|
|
138
|
-
|
|
146
|
+
return enqueueSessionFileOperation(sessionFilePath, () =>
|
|
147
|
+
writeLocatorPickerSessionFileImmediate(sessionFilePath, session),
|
|
148
|
+
)
|
|
139
149
|
}
|
|
140
150
|
export async function patchLocatorPickerSessionFile(sessionFilePath, patch) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
})
|
|
151
|
+
return enqueueSessionFileOperation(sessionFilePath, async () => {
|
|
152
|
+
const current = await readLocatorPickerSessionFile(sessionFilePath)
|
|
153
|
+
if (!current) {
|
|
154
|
+
return null
|
|
155
|
+
}
|
|
156
|
+
const nextPatch = typeof patch === 'function' ? patch(current) : patch
|
|
157
|
+
const nextSession = Object.assign(Object.assign(Object.assign({}, current), nextPatch), {
|
|
158
|
+
updatedAt: new Date().toISOString(),
|
|
159
|
+
})
|
|
160
|
+
return writeLocatorPickerSessionFileImmediate(sessionFilePath, nextSession)
|
|
161
|
+
})
|
|
150
162
|
}
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
export type CompanionSessionStatus = 'starting' | 'ready' | 'picked' | 'saving' | 'closed' | 'error'
|
|
2
|
-
export type CompanionPickedLocatorStrategy = 'test-id' | 'role' | 'label' | 'placeholder' | 'id' | 'css' | 'xpath'
|
|
1
|
+
export type CompanionSessionStatus = 'starting' | 'ready' | 'picked' | 'saving' | 'closed' | 'error'
|
|
2
|
+
export type CompanionPickedLocatorStrategy = 'test-id' | 'role' | 'label' | 'placeholder' | 'id' | 'css' | 'xpath'
|
|
3
3
|
export interface CompanionLaunchSource {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
environmentId?: string
|
|
5
|
+
environmentName?: string
|
|
6
|
+
url: string
|
|
7
7
|
}
|
|
8
8
|
export interface CompanionPickedLocatorPayload {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
selector: string
|
|
10
|
+
currentUrl: string
|
|
11
|
+
pathname: string
|
|
12
|
+
pageTitle: string
|
|
13
|
+
tagName: string
|
|
14
|
+
text?: string
|
|
15
|
+
accessibleName?: string
|
|
16
|
+
strategy?: CompanionPickedLocatorStrategy
|
|
17
17
|
}
|
|
18
18
|
export interface CompanionSessionFile {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
19
|
+
sessionId: string
|
|
20
|
+
status: CompanionSessionStatus
|
|
21
|
+
launchSource: CompanionLaunchSource
|
|
22
|
+
currentUrl: string
|
|
23
|
+
currentPathname: string
|
|
24
|
+
pageTitle: string
|
|
25
|
+
companionPid: number | null
|
|
26
|
+
crashLogPath?: string
|
|
27
|
+
pickedLocator?: CompanionPickedLocatorPayload
|
|
28
|
+
error?: string
|
|
29
|
+
startedAt: string
|
|
30
|
+
updatedAt: string
|
|
31
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export {}
|
|
1
|
+
export {}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Line endings: LF in Git (matches .editorconfig, .prettierrc endOfLine=lf).
|
|
2
|
+
# Run `npm run setup:git` on Windows so local core.autocrlf does not fight this file.
|
|
3
|
+
|
|
4
|
+
* text=auto eol=lf
|
|
5
|
+
|
|
6
|
+
*.{ts,tsx,js,mjs,cjs,jsx,json,md,mdx,yml,yaml,css,scss,html,prisma,sql,feature} text eol=lf
|
|
7
|
+
|
|
8
|
+
*.bat text eol=crlf
|
|
9
|
+
*.cmd text eol=crlf
|
|
10
|
+
*.ps1 text eol=crlf
|
|
11
|
+
|
|
12
|
+
*.ico binary
|
|
13
|
+
*.png binary
|
|
14
|
+
*.jpg binary
|
|
15
|
+
*.jpeg binary
|
|
16
|
+
*.gif binary
|
|
17
|
+
*.pdf binary
|
|
18
|
+
*.woff binary
|
|
19
|
+
*.woff2 binary
|
|
20
|
+
*.ttf binary
|
|
21
|
+
*.eot binary
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# AppraiseJS repository Git defaults (LF). Applied via:
|
|
2
|
+
# npm run setup:git
|
|
3
|
+
# which runs: git config --local include.path ../.gitconfig.appraise
|
|
4
|
+
#
|
|
5
|
+
# Keeps index and working-tree diffs aligned with .gitattributes (eol=lf) on Windows.
|
|
6
|
+
|
|
7
|
+
[core]
|
|
8
|
+
autocrlf = false
|
|
9
|
+
eol = lf
|
|
10
|
+
safecrlf = warn
|
|
11
|
+
|
|
12
|
+
[diff]
|
|
13
|
+
# Ignore CRLF-only noise when comparing index to working tree (safety net).
|
|
14
|
+
ignoreCrAtEol = true
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"semi": false,
|
|
3
|
+
"singleQuote": true,
|
|
4
|
+
"trailingComma": "all",
|
|
5
|
+
"arrowParens": "avoid",
|
|
6
|
+
"printWidth": 120,
|
|
7
|
+
"tabWidth": 2,
|
|
8
|
+
"useTabs": false,
|
|
9
|
+
"bracketSpacing": true,
|
|
10
|
+
"bracketSameLine": false,
|
|
11
|
+
"endOfLine": "lf",
|
|
12
|
+
"plugins": ["prettier-plugin-tailwindcss"]
|
|
13
|
+
}
|
|
@@ -32,18 +32,18 @@ npm run start
|
|
|
32
32
|
|
|
33
33
|
## Scripts
|
|
34
34
|
|
|
35
|
-
| Script
|
|
36
|
-
|
|
|
37
|
-
| `npm run setup`
|
|
38
|
-
| `npm run build:local`
|
|
39
|
-
| `npm run start`
|
|
40
|
-
| `npm run dev`
|
|
41
|
-
| `npm run install-playwright -- <browser...>`
|
|
42
|
-
| `npm run setup:db`
|
|
43
|
-
| `npm run setup:full`
|
|
44
|
-
| `npm run sync-all`
|
|
45
|
-
| `npm run appraisejs:sync`
|
|
46
|
-
| `npm run appraisejs:install-step -- --payload-file <path>` | Internal script used by `npx appraisejs@latest add step ...`
|
|
35
|
+
| Script | Description |
|
|
36
|
+
| ---------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
|
37
|
+
| `npm run setup` | Install deps, create `.env`, and build the cucumber runtime plus the local production app |
|
|
38
|
+
| `npm run build:local` | Build the cucumber runtime and the local production app |
|
|
39
|
+
| `npm run start` | Start the local production server |
|
|
40
|
+
| `npm run dev` | Start the Next.js development server |
|
|
41
|
+
| `npm run install-playwright -- <browser...>` | Install selected Playwright browsers |
|
|
42
|
+
| `npm run setup:db` | Recreate the local SQLite database from migrations and rerun `sync-all` |
|
|
43
|
+
| `npm run setup:full` | Reinstall dependencies, rebuild the DB, rerun `sync-all`, and rebuild the production app |
|
|
44
|
+
| `npm run sync-all` | Sync all starter entities from the bundled automation workspace into the database |
|
|
45
|
+
| `npm run appraisejs:sync` | Alias for `sync-all` |
|
|
46
|
+
| `npm run appraisejs:install-step -- --payload-file <path>` | Internal script used by `npx appraisejs@latest add step ...` |
|
|
47
47
|
|
|
48
48
|
## Configuration
|
|
49
49
|
|
|
@@ -1,59 +1,57 @@
|
|
|
1
1
|
import { When, Then, CustomWorld, expect, SelectorName, resolveLocator, getEnvironment, generateRandomData, RandomDataType } from '../../../packages/cucumber-runtime/src/index.js'
|
|
2
|
-
/**
|
|
3
|
-
* @name click
|
|
4
|
-
* @description Template step for handling element click
|
|
5
|
-
* @type ACTION
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
* @
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
* @
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
* @
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
})
|
|
2
|
+
/**
|
|
3
|
+
* @name click
|
|
4
|
+
* @description Template step for handling element click
|
|
5
|
+
* @type ACTION
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @name click
|
|
10
|
+
* @description Template step for clicking on an element
|
|
11
|
+
* @icon MOUSE
|
|
12
|
+
*/
|
|
13
|
+
When('the user clicks on the {string} element', async function (this: CustomWorld, elementName: SelectorName) {
|
|
14
|
+
const selector = await resolveLocator(this.page, elementName)
|
|
15
|
+
if (!selector) {
|
|
16
|
+
throw new Error(`Selector ${elementName} not found. Current url: ${this.page.url()}`)
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
await this.page.locator(selector).click()
|
|
20
|
+
} catch (error) {
|
|
21
|
+
throw new Error(`Failed to click on the ${elementName} element: ${error}`)
|
|
22
|
+
}
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @name double click
|
|
27
|
+
* @description Template step for double clicking on an element
|
|
28
|
+
* @icon MOUSE
|
|
29
|
+
*/
|
|
30
|
+
When('the user double clicks on the {string} element', async function (this: CustomWorld, elementName: SelectorName) {
|
|
31
|
+
const selector = await resolveLocator(this.page, elementName)
|
|
32
|
+
if (!selector) {
|
|
33
|
+
throw new Error(`Selector ${elementName} not found. Current url: ${this.page.url()}`)
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
await this.page.locator(selector).dblclick()
|
|
37
|
+
} catch (error) {
|
|
38
|
+
throw new Error(`Failed to double click on the ${elementName} element: ${error}`)
|
|
39
|
+
}
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @name right click
|
|
44
|
+
* @description Template step for right clicking on an element
|
|
45
|
+
* @icon MOUSE
|
|
46
|
+
*/
|
|
47
|
+
When('the user right clicks on the {string} element', async function (this: CustomWorld, elementName: SelectorName) {
|
|
48
|
+
const selector = await resolveLocator(this.page, elementName)
|
|
49
|
+
if (!selector) {
|
|
50
|
+
throw new Error(`Selector ${elementName} not found. Current url: ${this.page.url()}`)
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
await this.page.locator(selector).click({ button: 'right' })
|
|
54
|
+
} catch (error) {
|
|
55
|
+
throw new Error(`Failed to right click on the ${elementName} element: ${error}`)
|
|
56
|
+
}
|
|
57
|
+
})
|