create-appraisejs 0.1.6 → 0.1.8-alpha
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 +45 -45
- package/dist/cli.js +4 -4
- package/dist/cli.js.map +1 -1
- package/dist/copy-template.d.ts +2 -1
- package/dist/copy-template.d.ts.map +1 -1
- package/dist/copy-template.js +10 -7
- package/dist/copy-template.js.map +1 -1
- package/dist/copy-template.test.js +19 -0
- package/dist/copy-template.test.js.map +1 -1
- package/package.json +69 -67
- package/templates/default/.vscode/settings.json +5 -0
- package/templates/default/appraisejs.config.json +1 -1
- package/templates/default/components.json +24 -24
- package/templates/default/cucumber.mjs +16 -0
- package/templates/default/eslint.config.mjs +15 -15
- package/templates/default/next.config.ts +13 -7
- package/templates/default/package-lock.json +13732 -14321
- package/templates/default/package.json +11 -9
- package/templates/default/postcss.config.mjs +8 -8
- package/templates/default/prisma/migrations/20251104113456_add_type_for_template_step_groups/migration.sql +16 -16
- package/templates/default/prisma/migrations/20251104170946_add_tags_to_test_suite_and_test_case/migration.sql +27 -27
- package/templates/default/prisma/migrations/20251112190024_add_cascade_delete_to_test_run_test_case/migration.sql +17 -17
- package/templates/default/prisma/migrations/20251113181100_add_test_run_log/migration.sql +12 -12
- package/templates/default/prisma/migrations/20251119191838_add_tag_type/migration.sql +28 -28
- package/templates/default/prisma/migrations/20251121164059_add_conflict_resolution/migration.sql +12 -12
- package/templates/default/prisma/migrations/20251223183400_add_report_model_to_db_schema/migration.sql +10 -10
- package/templates/default/prisma/migrations/20251223183637_add_report_test_case_entity_for_storing_test_results_for_individual_test_cases/migration.sql +10 -10
- package/templates/default/prisma/migrations/20251224083549_add_comprehensive_report_storage/migration.sql +108 -108
- package/templates/default/prisma/migrations/20251229194422_migrate_duration_to_string/migration.sql +55 -55
- package/templates/default/prisma/migrations/20251230124637_add_unique_constraint_to_test_run_name/migration.sql +27 -27
- package/templates/default/prisma/migrations/20260115094436_add_dashboard_metrics/migration.sql +59 -59
- package/templates/default/prisma/migrations/20260127172022_add_cascade_delete_to_step_parameters/migration.sql +34 -34
- package/templates/default/prisma/schema.prisma +554 -554
- package/templates/default/scripts/regenerate-features.ts +94 -94
- package/templates/default/scripts/setup-env.ts +19 -19
- package/templates/default/scripts/sync-all.ts +341 -341
- package/templates/default/scripts/sync-appraise-base-template.ts +52 -2
- package/templates/default/scripts/sync-environments.ts +323 -323
- package/templates/default/scripts/sync-locator-groups.ts +413 -413
- package/templates/default/scripts/sync-locators.ts +402 -402
- package/templates/default/scripts/sync-modules.ts +349 -349
- package/templates/default/scripts/sync-tags.ts +292 -292
- package/templates/default/scripts/sync-template-step-groups.ts +399 -399
- package/templates/default/scripts/sync-template-steps.ts +806 -806
- package/templates/default/scripts/sync-test-cases.ts +905 -905
- package/templates/default/scripts/sync-test-suites.ts +411 -411
- package/templates/default/src/actions/conflict/conflict.action.ts +33 -33
- package/templates/default/src/actions/dashboard/dashboard-actions.ts +240 -240
- package/templates/default/src/actions/environments/environment-actions.ts +205 -205
- package/templates/default/src/actions/locator/locator-actions.ts +547 -547
- package/templates/default/src/actions/locator-groups/locator-group-actions.ts +344 -344
- package/templates/default/src/actions/modules/module-actions.ts +133 -133
- package/templates/default/src/actions/reports/report-actions.ts +613 -613
- package/templates/default/src/actions/review/review-actions.ts +147 -147
- package/templates/default/src/actions/tags/tag-actions.ts +104 -104
- package/templates/default/src/actions/template-step/template-step-actions.ts +332 -332
- package/templates/default/src/actions/template-step-group/template-step-group-actions.ts +278 -278
- package/templates/default/src/actions/template-test-case/template-test-case-actions.ts +238 -238
- package/templates/default/src/actions/test-case/test-case-actions.ts +419 -419
- package/templates/default/src/actions/test-run/test-run-actions.ts +1185 -1185
- package/templates/default/src/actions/test-suite/test-suite-actions.ts +253 -253
- package/templates/default/src/actions/user/user-actions.ts +13 -13
- package/templates/default/src/app/(base)/environments/create/page.tsx +28 -28
- package/templates/default/src/app/(base)/environments/environment-form.tsx +219 -219
- package/templates/default/src/app/(base)/environments/environment-table-columns.tsx +96 -96
- package/templates/default/src/app/(base)/environments/environment-table.tsx +24 -24
- package/templates/default/src/app/(base)/environments/modify/[id]/page.tsx +46 -46
- package/templates/default/src/app/(base)/environments/page.tsx +59 -59
- package/templates/default/src/app/(base)/layout.tsx +10 -10
- package/templates/default/src/app/(base)/locator-groups/create/page.tsx +44 -44
- package/templates/default/src/app/(base)/locator-groups/locator-group-form.tsx +215 -215
- package/templates/default/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -77
- package/templates/default/src/app/(base)/locator-groups/locator-group-table.tsx +28 -28
- package/templates/default/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -46
- package/templates/default/src/app/(base)/locator-groups/page.tsx +61 -61
- package/templates/default/src/app/(base)/locators/create/page.tsx +38 -38
- package/templates/default/src/app/(base)/locators/locator-form.tsx +163 -163
- package/templates/default/src/app/(base)/locators/locator-table-columns.tsx +73 -90
- package/templates/default/src/app/(base)/locators/locator-table.tsx +28 -28
- package/templates/default/src/app/(base)/locators/modify/[id]/page.tsx +45 -45
- package/templates/default/src/app/(base)/locators/page.tsx +65 -65
- package/templates/default/src/app/(base)/locators/sync-locators-button.tsx +66 -66
- package/templates/default/src/app/(base)/modules/create/page.tsx +34 -34
- package/templates/default/src/app/(base)/modules/modify/[id]/page.tsx +46 -46
- package/templates/default/src/app/(base)/modules/module-form.tsx +126 -126
- package/templates/default/src/app/(base)/modules/module-table-columns.tsx +85 -85
- package/templates/default/src/app/(base)/modules/module-table.tsx +24 -24
- package/templates/default/src/app/(base)/modules/page.tsx +59 -59
- package/templates/default/src/app/(base)/reports/[id]/page.tsx +517 -517
- package/templates/default/src/app/(base)/reports/duration-chart.tsx +33 -33
- package/templates/default/src/app/(base)/reports/feature-chart.tsx +78 -78
- package/templates/default/src/app/(base)/reports/overview-chart.tsx +46 -46
- package/templates/default/src/app/(base)/reports/page.tsx +98 -98
- package/templates/default/src/app/(base)/reports/report-metric-card.tsx +16 -16
- package/templates/default/src/app/(base)/reports/report-table-columns.tsx +189 -189
- package/templates/default/src/app/(base)/reports/report-table.tsx +72 -72
- package/templates/default/src/app/(base)/reports/report-view-table-columns.tsx +131 -131
- package/templates/default/src/app/(base)/reports/report-view-table.tsx +82 -82
- package/templates/default/src/app/(base)/reports/test-cases/page.tsx +42 -42
- package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +115 -115
- package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -27
- package/templates/default/src/app/(base)/reports/test-suites/page.tsx +42 -42
- package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +79 -79
- package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +27 -27
- package/templates/default/src/app/(base)/reports/view-logs-button.tsx +60 -60
- package/templates/default/src/app/(base)/reviews/create/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/created-reviews-table.tsx +15 -15
- package/templates/default/src/app/(base)/reviews/modify/[id]/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/review/[id]/page.tsx +26 -26
- package/templates/default/src/app/(base)/reviews/review-form.tsx +11 -11
- package/templates/default/src/app/(base)/reviews/review-table-by-creator-columns.tsx +9 -9
- package/templates/default/src/app/(base)/reviews/review-table-by-reviewer-columns.tsx +9 -9
- package/templates/default/src/app/(base)/reviews/reviewer-reviews-table.tsx +15 -15
- package/templates/default/src/app/(base)/tags/create/page.tsx +39 -39
- package/templates/default/src/app/(base)/tags/modify/[id]/page.tsx +50 -50
- package/templates/default/src/app/(base)/tags/page.tsx +58 -58
- package/templates/default/src/app/(base)/tags/tag-form.tsx +147 -147
- package/templates/default/src/app/(base)/tags/tag-table-columns.tsx +63 -63
- package/templates/default/src/app/(base)/tags/tag-table.tsx +29 -29
- package/templates/default/src/app/(base)/template-step-groups/create/page.tsx +28 -28
- package/templates/default/src/app/(base)/template-step-groups/modify/[id]/page.tsx +45 -45
- package/templates/default/src/app/(base)/template-step-groups/page.tsx +60 -60
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-form.tsx +167 -167
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-table-columns.tsx +89 -89
- package/templates/default/src/app/(base)/template-step-groups/template-step-group-table.tsx +32 -32
- package/templates/default/src/app/(base)/template-steps/create/page.tsx +37 -37
- package/templates/default/src/app/(base)/template-steps/modify/[id]/page.tsx +49 -49
- package/templates/default/src/app/(base)/template-steps/page.tsx +59 -59
- package/templates/default/src/app/(base)/template-steps/paramChip.tsx +213 -213
- package/templates/default/src/app/(base)/template-steps/template-step-form.tsx +384 -384
- package/templates/default/src/app/(base)/template-steps/template-step-table-columns.tsx +158 -158
- package/templates/default/src/app/(base)/template-steps/template-step-table.tsx +24 -24
- package/templates/default/src/app/(base)/template-test-cases/create/page.tsx +56 -56
- package/templates/default/src/app/(base)/template-test-cases/modify/[id]/page.tsx +89 -89
- package/templates/default/src/app/(base)/template-test-cases/page.tsx +58 -58
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-flow.tsx +84 -84
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-form.tsx +262 -262
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -76
- package/templates/default/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -32
- package/templates/default/src/app/(base)/test-cases/create/page.tsx +76 -76
- package/templates/default/src/app/(base)/test-cases/create-from-template/generate/[id]/page.tsx +96 -96
- package/templates/default/src/app/(base)/test-cases/create-from-template/page.tsx +38 -38
- package/templates/default/src/app/(base)/test-cases/create-from-template/template-selection-form.tsx +73 -73
- package/templates/default/src/app/(base)/test-cases/modify/[id]/page.tsx +106 -106
- package/templates/default/src/app/(base)/test-cases/page.tsx +60 -60
- package/templates/default/src/app/(base)/test-cases/test-case-flow.tsx +82 -82
- package/templates/default/src/app/(base)/test-cases/test-case-form.tsx +395 -395
- package/templates/default/src/app/(base)/test-cases/test-case-table-columns.tsx +90 -90
- package/templates/default/src/app/(base)/test-cases/test-case-table.tsx +35 -35
- package/templates/default/src/app/(base)/test-runs/[id]/page.tsx +56 -56
- package/templates/default/src/app/(base)/test-runs/create/page.tsx +47 -47
- package/templates/default/src/app/(base)/test-runs/page.tsx +60 -60
- package/templates/default/src/app/(base)/test-runs/test-run-form.tsx +508 -512
- package/templates/default/src/app/(base)/test-runs/test-run-table-columns.tsx +229 -229
- package/templates/default/src/app/(base)/test-runs/test-run-table.tsx +127 -127
- package/templates/default/src/app/(base)/test-suites/create/page.tsx +45 -45
- package/templates/default/src/app/(base)/test-suites/modify/[id]/page.tsx +55 -55
- package/templates/default/src/app/(base)/test-suites/page.tsx +82 -82
- package/templates/default/src/app/(base)/test-suites/test-suite-form.tsx +269 -269
- package/templates/default/src/app/(base)/test-suites/test-suite-table-columns.tsx +97 -97
- package/templates/default/src/app/(base)/test-suites/test-suite-table.tsx +29 -29
- package/templates/default/src/app/(dashboard-components)/app-drawer.tsx +187 -187
- package/templates/default/src/app/(dashboard-components)/data-card-grid.tsx +12 -12
- package/templates/default/src/app/(dashboard-components)/data-card.tsx +26 -26
- package/templates/default/src/app/(dashboard-components)/execution-health-panel.tsx +56 -56
- package/templates/default/src/app/(dashboard-components)/ongoing-test-runs-card.tsx +87 -87
- package/templates/default/src/app/(dashboard-components)/quick-actions-drawer.tsx +44 -44
- package/templates/default/src/app/api/test-runs/[runId]/download/route.ts +133 -133
- package/templates/default/src/app/api/test-runs/[runId]/logs/route.ts +420 -420
- package/templates/default/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.ts +146 -146
- package/templates/default/src/app/globals.css +147 -147
- package/templates/default/src/app/layout.tsx +171 -171
- package/templates/default/src/app/page.tsx +64 -64
- package/templates/default/src/assets/icons/empty-tube.tsx +23 -23
- package/templates/default/src/assets/icons/tube-plus.tsx +29 -29
- package/templates/default/src/components/base-node.tsx +21 -21
- package/templates/default/src/components/chart/pie-chart.tsx +73 -73
- package/templates/default/src/components/data-extraction/locator-inspector.tsx +460 -460
- package/templates/default/src/components/data-state/empty-state.tsx +40 -40
- package/templates/default/src/components/data-visualization/info-card.tsx +70 -70
- package/templates/default/src/components/data-visualization/info-grid.tsx +22 -22
- package/templates/default/src/components/devtools/providers.tsx +19 -13
- package/templates/default/src/components/diagram/button-edge.tsx +54 -54
- package/templates/default/src/components/diagram/dynamic-parameters.tsx +438 -438
- package/templates/default/src/components/diagram/edit-header-option.tsx +36 -36
- package/templates/default/src/components/diagram/flow-diagram.tsx +470 -470
- package/templates/default/src/components/diagram/node-form.tsx +262 -262
- package/templates/default/src/components/diagram/options-header-node.tsx +57 -57
- package/templates/default/src/components/diagram/template-step-combobox.tsx +155 -155
- package/templates/default/src/components/form/error-message.tsx +7 -7
- package/templates/default/src/components/kokonutui/smooth-tab.tsx +453 -453
- package/templates/default/src/components/loading-skeleton/data-table/data-table-skeleton.tsx +30 -30
- package/templates/default/src/components/loading-skeleton/form/button-skeleton.tsx +8 -8
- package/templates/default/src/components/loading-skeleton/form/icon-button-skeleton.tsx +8 -8
- package/templates/default/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -8
- package/templates/default/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -14
- package/templates/default/src/components/logo.tsx +15 -15
- package/templates/default/src/components/navigation/command-badge.tsx +34 -34
- package/templates/default/src/components/navigation/command-chain-input.tsx +51 -51
- package/templates/default/src/components/navigation/entity-search-command.tsx +116 -116
- package/templates/default/src/components/navigation/nav-card.tsx +31 -31
- package/templates/default/src/components/navigation/nav-command.tsx +508 -508
- package/templates/default/src/components/navigation/nav-link.tsx +60 -60
- package/templates/default/src/components/navigation/nav-menu-card-deck.tsx +112 -112
- package/templates/default/src/components/node-header.tsx +159 -159
- package/templates/default/src/components/reports/test-case-logs-modal.tsx +253 -253
- package/templates/default/src/components/table/table-actions.tsx +172 -172
- package/templates/default/src/components/test-run/download-logs-button.tsx +99 -99
- package/templates/default/src/components/test-run/log-viewer.tsx +445 -445
- package/templates/default/src/components/test-run/test-run-details.tsx +611 -611
- package/templates/default/src/components/test-run/test-run-header.tsx +149 -149
- package/templates/default/src/components/test-run/view-report-button.tsx +102 -102
- package/templates/default/src/components/theme/mode-toggle.tsx +54 -54
- package/templates/default/src/components/theme/theme-provider.tsx +8 -8
- package/templates/default/src/components/typography/page-header-subtitle.tsx +7 -7
- package/templates/default/src/components/typography/page-header.tsx +7 -7
- package/templates/default/src/components/ui/alert-dialog.tsx +106 -106
- package/templates/default/src/components/ui/alert.tsx +43 -43
- package/templates/default/src/components/ui/avatar.tsx +40 -40
- package/templates/default/src/components/ui/badge.tsx +29 -29
- package/templates/default/src/components/ui/button.tsx +47 -47
- package/templates/default/src/components/ui/calendar.tsx +158 -158
- package/templates/default/src/components/ui/card.tsx +43 -43
- package/templates/default/src/components/ui/checkbox.tsx +28 -28
- package/templates/default/src/components/ui/command.tsx +135 -135
- package/templates/default/src/components/ui/data-table-column-header.tsx +61 -61
- package/templates/default/src/components/ui/data-table-pagination.tsx +87 -87
- package/templates/default/src/components/ui/data-table-view-options.tsx +50 -50
- package/templates/default/src/components/ui/data-table.tsx +267 -267
- package/templates/default/src/components/ui/dialog.tsx +97 -97
- package/templates/default/src/components/ui/dropdown-menu.tsx +182 -182
- package/templates/default/src/components/ui/input.tsx +22 -22
- package/templates/default/src/components/ui/kbd.tsx +28 -28
- package/templates/default/src/components/ui/label.tsx +19 -19
- package/templates/default/src/components/ui/loading.tsx +12 -12
- package/templates/default/src/components/ui/multi-select-with-preview.tsx +116 -116
- package/templates/default/src/components/ui/multi-select.tsx +142 -142
- package/templates/default/src/components/ui/navigation-menu.tsx +120 -120
- package/templates/default/src/components/ui/popover.tsx +33 -33
- package/templates/default/src/components/ui/progress.tsx +25 -25
- package/templates/default/src/components/ui/radio-group.tsx +44 -44
- package/templates/default/src/components/ui/scroll-area.tsx +40 -40
- package/templates/default/src/components/ui/select.tsx +151 -144
- package/templates/default/src/components/ui/separator.tsx +22 -22
- package/templates/default/src/components/ui/skeleton.tsx +7 -7
- package/templates/default/src/components/ui/table.tsx +76 -76
- package/templates/default/src/components/ui/tabs.tsx +55 -55
- package/templates/default/src/components/ui/textarea.tsx +21 -21
- package/templates/default/src/components/ui/toast.tsx +113 -113
- package/templates/default/src/components/ui/toaster.tsx +26 -26
- package/templates/default/src/components/user-prompt/delete-prompt.tsx +87 -87
- package/templates/default/src/config/db-config.ts +10 -10
- package/templates/default/src/constants/form-opts/diagram/node-form.ts +30 -30
- package/templates/default/src/constants/form-opts/environment-form-opts.ts +24 -24
- package/templates/default/src/constants/form-opts/locator-form-opts.ts +20 -20
- package/templates/default/src/constants/form-opts/locator-group-form-opts.ts +28 -28
- package/templates/default/src/constants/form-opts/module-form-opts.ts +21 -21
- package/templates/default/src/constants/form-opts/review-form-opts.ts +23 -23
- package/templates/default/src/constants/form-opts/tag-form-opts.ts +42 -42
- package/templates/default/src/constants/form-opts/template-selection-form-opts.ts +16 -16
- package/templates/default/src/constants/form-opts/template-step-group-form-opts.ts +24 -24
- package/templates/default/src/constants/form-opts/template-test-case-form-opts.ts +39 -39
- package/templates/default/src/constants/form-opts/template-test-step-form-opts.ts +36 -36
- package/templates/default/src/constants/form-opts/test-case-form-opts.ts +43 -43
- package/templates/default/src/constants/form-opts/test-run-form-opts.ts +31 -31
- package/templates/default/src/constants/form-opts/test-suite-form-opts.ts +24 -24
- package/templates/default/src/hooks/use-toast.ts +187 -187
- package/templates/default/src/lib/bidirectional-sync.ts +432 -432
- package/templates/default/src/lib/database-sync.ts +531 -531
- package/templates/default/src/lib/environment-file-utils.ts +221 -221
- package/templates/default/src/lib/feature-file-generator.ts +411 -411
- package/templates/default/src/lib/gherkin-parser.ts +259 -259
- package/templates/default/src/lib/locator-group-file-utils.ts +370 -370
- package/templates/default/src/lib/metrics/metric-calculator.ts +613 -613
- package/templates/default/src/lib/module-hierarchy-builder.ts +205 -205
- package/templates/default/src/lib/path-helpers/module-path.ts +71 -71
- package/templates/default/src/lib/test-case-utils.ts +6 -6
- package/templates/default/src/lib/test-run/log-formatter.ts +83 -83
- package/templates/default/src/lib/test-run/process-manager.ts +191 -191
- package/templates/default/src/lib/test-run/report-parser.ts +316 -316
- package/templates/default/src/lib/test-run/test-run-executor.ts +144 -144
- package/templates/default/src/lib/test-run/winston-logger.ts +95 -95
- package/templates/default/src/lib/transformers/gherkin-converter.ts +42 -42
- package/templates/default/src/lib/transformers/key-to-icon-transformer.tsx +95 -95
- package/templates/default/src/lib/transformers/template-test-case-converter.ts +160 -160
- package/templates/default/src/lib/utils/node-param-validation.ts +81 -81
- package/templates/default/src/lib/utils/template-step-file-generator.ts +167 -167
- package/templates/default/src/lib/utils/template-step-file-manager-intelligent.ts +723 -723
- package/templates/default/src/lib/utils/template-step-file-manager.ts +166 -166
- package/templates/default/src/lib/utils.ts +31 -31
- package/templates/default/src/tests/config/executor/world.ts +41 -41
- package/templates/default/src/tests/executor.ts +80 -80
- package/templates/default/src/tests/hooks/hooks.ts +99 -99
- package/templates/default/src/tests/mapping/locator-map.json +1 -1
- package/templates/default/src/tests/steps/actions/click.step.ts +62 -62
- package/templates/default/src/tests/steps/actions/navigation.step.ts +73 -72
- package/templates/default/src/tests/steps/validations/active_state_assertion.step.ts +34 -34
- package/templates/default/src/tests/steps/validations/navigation_assertion.step.ts +24 -23
- package/templates/default/src/tests/steps/validations/text_assertion.step.ts +111 -111
- package/templates/default/src/tests/steps/validations/visibility_assertion.step.ts +30 -30
- package/templates/default/src/tests/support/parameter-types.ts +12 -12
- package/templates/default/src/tests/utils/cache.util.ts +260 -260
- package/templates/default/src/tests/utils/cli.util.ts +177 -177
- package/templates/default/src/tests/utils/environment.util.ts +65 -65
- package/templates/default/src/tests/utils/locator.util.ts +248 -248
- package/templates/default/src/tests/utils/random-data.util.ts +44 -44
- package/templates/default/src/tests/utils/spawner.util.ts +617 -617
- package/templates/default/src/types/diagram/diagram.ts +34 -34
- package/templates/default/src/types/diagram/template-step.ts +11 -11
- package/templates/default/src/types/executor/browser.type.ts +1 -1
- package/templates/default/src/types/form/actionHandler.ts +6 -6
- package/templates/default/src/types/locator/locator.type.ts +11 -11
- package/templates/default/src/types/step/step.type.ts +1 -1
- package/templates/default/src/types/table/data-table.ts +6 -6
- package/templates/default/tailwind.config.ts +62 -62
- package/templates/default/.env +0 -2
- package/templates/default/next-env.d.ts +0 -6
- package/templates/default/prisma/prisma/dev.db +0 -0
- package/templates/default/src/tests/config/environments/environments.json +0 -14
|
@@ -1,221 +1,221 @@
|
|
|
1
|
-
import { promises as fs } from 'fs'
|
|
2
|
-
import * as path from 'path'
|
|
3
|
-
import prisma from '@/config/db-config'
|
|
4
|
-
|
|
5
|
-
interface EnvironmentConfig {
|
|
6
|
-
baseUrl: string
|
|
7
|
-
apiBaseUrl: string
|
|
8
|
-
email: string
|
|
9
|
-
password: string
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Gets the file path for the environments.json file
|
|
14
|
-
*/
|
|
15
|
-
export function getEnvironmentsFilePath(): string {
|
|
16
|
-
return path.join('src', 'tests', 'config', 'environments', 'environments.json')
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Ensures the config directory exists
|
|
21
|
-
*/
|
|
22
|
-
export async function ensureConfigDirectoryExists(): Promise<void> {
|
|
23
|
-
const filePath = getEnvironmentsFilePath()
|
|
24
|
-
const dir = path.dirname(filePath)
|
|
25
|
-
try {
|
|
26
|
-
await fs.access(dir)
|
|
27
|
-
} catch {
|
|
28
|
-
await fs.mkdir(dir, { recursive: true })
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Generates JSON content for environments from database
|
|
34
|
-
*/
|
|
35
|
-
export async function generateEnvironmentsContent(): Promise<Record<string, EnvironmentConfig>> {
|
|
36
|
-
try {
|
|
37
|
-
const environments = await prisma.environment.findMany({
|
|
38
|
-
orderBy: { createdAt: 'asc' },
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
const environmentsConfig: Record<string, EnvironmentConfig> = {}
|
|
42
|
-
|
|
43
|
-
environments.forEach(env => {
|
|
44
|
-
const envKey = env.name.toLowerCase().replace(/\s+/g, '_')
|
|
45
|
-
environmentsConfig[envKey] = {
|
|
46
|
-
baseUrl: env.baseUrl,
|
|
47
|
-
apiBaseUrl: env.apiBaseUrl || '',
|
|
48
|
-
email: env.username || '',
|
|
49
|
-
password: env.password || '',
|
|
50
|
-
}
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
return environmentsConfig
|
|
54
|
-
} catch (error) {
|
|
55
|
-
console.error('Error generating environments content:', error)
|
|
56
|
-
return {}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Creates or updates the environments.json file
|
|
62
|
-
*/
|
|
63
|
-
export async function createOrUpdateEnvironmentsFile(): Promise<boolean> {
|
|
64
|
-
try {
|
|
65
|
-
const filePath = getEnvironmentsFilePath()
|
|
66
|
-
await ensureConfigDirectoryExists()
|
|
67
|
-
|
|
68
|
-
const content = await generateEnvironmentsContent()
|
|
69
|
-
|
|
70
|
-
// If no environments exist, delete the file
|
|
71
|
-
if (Object.keys(content).length === 0) {
|
|
72
|
-
await deleteEnvironmentsFile()
|
|
73
|
-
return true
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
await fs.writeFile(filePath, JSON.stringify(content, null, 2))
|
|
77
|
-
return true
|
|
78
|
-
} catch (error) {
|
|
79
|
-
console.error('Error creating/updating environments file:', error)
|
|
80
|
-
return false
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Deletes the environments.json file
|
|
86
|
-
*/
|
|
87
|
-
export async function deleteEnvironmentsFile(): Promise<boolean> {
|
|
88
|
-
try {
|
|
89
|
-
const filePath = getEnvironmentsFilePath()
|
|
90
|
-
|
|
91
|
-
// Check if file exists before trying to delete
|
|
92
|
-
try {
|
|
93
|
-
await fs.access(filePath)
|
|
94
|
-
} catch {
|
|
95
|
-
return true // File doesn't exist, nothing to delete
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
await fs.unlink(filePath)
|
|
99
|
-
return true
|
|
100
|
-
} catch (error) {
|
|
101
|
-
console.error('Error deleting environments file:', error)
|
|
102
|
-
return false
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Reads and parses the content of the environments.json file
|
|
108
|
-
*/
|
|
109
|
-
export async function readEnvironmentsFile(): Promise<{
|
|
110
|
-
filePath: string
|
|
111
|
-
content: Record<string, EnvironmentConfig>
|
|
112
|
-
} | null> {
|
|
113
|
-
try {
|
|
114
|
-
const filePath = getEnvironmentsFilePath()
|
|
115
|
-
|
|
116
|
-
try {
|
|
117
|
-
await fs.access(filePath)
|
|
118
|
-
} catch {
|
|
119
|
-
return null // File doesn't exist
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
const fileContent = await fs.readFile(filePath, 'utf-8')
|
|
123
|
-
const jsonContent = JSON.parse(fileContent)
|
|
124
|
-
|
|
125
|
-
return { filePath, content: jsonContent }
|
|
126
|
-
} catch (error) {
|
|
127
|
-
console.error('Error reading environments file:', error)
|
|
128
|
-
return null
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Updates a specific environment entry in the environments.json file
|
|
134
|
-
*/
|
|
135
|
-
export async function updateEnvironmentEntry(environmentId: string, oldName?: string): Promise<boolean> {
|
|
136
|
-
try {
|
|
137
|
-
// Get the environment from database
|
|
138
|
-
const environment = await prisma.environment.findUnique({
|
|
139
|
-
where: { id: environmentId },
|
|
140
|
-
})
|
|
141
|
-
|
|
142
|
-
if (!environment) {
|
|
143
|
-
console.error(`Environment with ID ${environmentId} not found`)
|
|
144
|
-
return false
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
const filePath = getEnvironmentsFilePath()
|
|
148
|
-
|
|
149
|
-
// Read existing content
|
|
150
|
-
let environmentsConfig: Record<string, EnvironmentConfig> = {}
|
|
151
|
-
try {
|
|
152
|
-
await fs.access(filePath)
|
|
153
|
-
const fileContent = await fs.readFile(filePath, 'utf-8')
|
|
154
|
-
environmentsConfig = JSON.parse(fileContent)
|
|
155
|
-
} catch {
|
|
156
|
-
// File doesn't exist, start with empty object
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// Remove old entry if name changed
|
|
160
|
-
if (oldName) {
|
|
161
|
-
const oldKey = oldName.toLowerCase().replace(/\s+/g, '_')
|
|
162
|
-
delete environmentsConfig[oldKey]
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// Add/update the environment entry
|
|
166
|
-
const envKey = environment.name.toLowerCase().replace(/\s+/g, '_')
|
|
167
|
-
environmentsConfig[envKey] = {
|
|
168
|
-
baseUrl: environment.baseUrl,
|
|
169
|
-
apiBaseUrl: environment.apiBaseUrl || '',
|
|
170
|
-
email: environment.username || '',
|
|
171
|
-
password: environment.password || '',
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// Ensure directory exists
|
|
175
|
-
await ensureConfigDirectoryExists()
|
|
176
|
-
|
|
177
|
-
// Write updated content
|
|
178
|
-
await fs.writeFile(filePath, JSON.stringify(environmentsConfig, null, 2))
|
|
179
|
-
return true
|
|
180
|
-
} catch (error) {
|
|
181
|
-
console.error('Error updating environment entry:', error)
|
|
182
|
-
return false
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
* Removes a specific environment entry from the environments.json file
|
|
188
|
-
*/
|
|
189
|
-
export async function removeEnvironmentEntry(environmentName: string): Promise<boolean> {
|
|
190
|
-
try {
|
|
191
|
-
const filePath = getEnvironmentsFilePath()
|
|
192
|
-
|
|
193
|
-
// Check if file exists
|
|
194
|
-
try {
|
|
195
|
-
await fs.access(filePath)
|
|
196
|
-
} catch {
|
|
197
|
-
return true // File doesn't exist, nothing to remove
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// Read existing content
|
|
201
|
-
const fileContent = await fs.readFile(filePath, 'utf-8')
|
|
202
|
-
const environmentsConfig: Record<string, EnvironmentConfig> = JSON.parse(fileContent)
|
|
203
|
-
|
|
204
|
-
// Remove the environment entry
|
|
205
|
-
const envKey = environmentName.toLowerCase().replace(/\s+/g, '_')
|
|
206
|
-
delete environmentsConfig[envKey]
|
|
207
|
-
|
|
208
|
-
// If no environments left, delete the file
|
|
209
|
-
if (Object.keys(environmentsConfig).length === 0) {
|
|
210
|
-
await deleteEnvironmentsFile()
|
|
211
|
-
return true
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
// Write updated content
|
|
215
|
-
await fs.writeFile(filePath, JSON.stringify(environmentsConfig, null, 2))
|
|
216
|
-
return true
|
|
217
|
-
} catch (error) {
|
|
218
|
-
console.error('Error removing environment entry:', error)
|
|
219
|
-
return false
|
|
220
|
-
}
|
|
221
|
-
}
|
|
1
|
+
import { promises as fs } from 'fs'
|
|
2
|
+
import * as path from 'path'
|
|
3
|
+
import prisma from '@/config/db-config'
|
|
4
|
+
|
|
5
|
+
interface EnvironmentConfig {
|
|
6
|
+
baseUrl: string
|
|
7
|
+
apiBaseUrl: string
|
|
8
|
+
email: string
|
|
9
|
+
password: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Gets the file path for the environments.json file
|
|
14
|
+
*/
|
|
15
|
+
export function getEnvironmentsFilePath(): string {
|
|
16
|
+
return path.join('src', 'tests', 'config', 'environments', 'environments.json')
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Ensures the config directory exists
|
|
21
|
+
*/
|
|
22
|
+
export async function ensureConfigDirectoryExists(): Promise<void> {
|
|
23
|
+
const filePath = getEnvironmentsFilePath()
|
|
24
|
+
const dir = path.dirname(filePath)
|
|
25
|
+
try {
|
|
26
|
+
await fs.access(dir)
|
|
27
|
+
} catch {
|
|
28
|
+
await fs.mkdir(dir, { recursive: true })
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Generates JSON content for environments from database
|
|
34
|
+
*/
|
|
35
|
+
export async function generateEnvironmentsContent(): Promise<Record<string, EnvironmentConfig>> {
|
|
36
|
+
try {
|
|
37
|
+
const environments = await prisma.environment.findMany({
|
|
38
|
+
orderBy: { createdAt: 'asc' },
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
const environmentsConfig: Record<string, EnvironmentConfig> = {}
|
|
42
|
+
|
|
43
|
+
environments.forEach(env => {
|
|
44
|
+
const envKey = env.name.toLowerCase().replace(/\s+/g, '_')
|
|
45
|
+
environmentsConfig[envKey] = {
|
|
46
|
+
baseUrl: env.baseUrl,
|
|
47
|
+
apiBaseUrl: env.apiBaseUrl || '',
|
|
48
|
+
email: env.username || '',
|
|
49
|
+
password: env.password || '',
|
|
50
|
+
}
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
return environmentsConfig
|
|
54
|
+
} catch (error) {
|
|
55
|
+
console.error('Error generating environments content:', error)
|
|
56
|
+
return {}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Creates or updates the environments.json file
|
|
62
|
+
*/
|
|
63
|
+
export async function createOrUpdateEnvironmentsFile(): Promise<boolean> {
|
|
64
|
+
try {
|
|
65
|
+
const filePath = getEnvironmentsFilePath()
|
|
66
|
+
await ensureConfigDirectoryExists()
|
|
67
|
+
|
|
68
|
+
const content = await generateEnvironmentsContent()
|
|
69
|
+
|
|
70
|
+
// If no environments exist, delete the file
|
|
71
|
+
if (Object.keys(content).length === 0) {
|
|
72
|
+
await deleteEnvironmentsFile()
|
|
73
|
+
return true
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
await fs.writeFile(filePath, JSON.stringify(content, null, 2))
|
|
77
|
+
return true
|
|
78
|
+
} catch (error) {
|
|
79
|
+
console.error('Error creating/updating environments file:', error)
|
|
80
|
+
return false
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Deletes the environments.json file
|
|
86
|
+
*/
|
|
87
|
+
export async function deleteEnvironmentsFile(): Promise<boolean> {
|
|
88
|
+
try {
|
|
89
|
+
const filePath = getEnvironmentsFilePath()
|
|
90
|
+
|
|
91
|
+
// Check if file exists before trying to delete
|
|
92
|
+
try {
|
|
93
|
+
await fs.access(filePath)
|
|
94
|
+
} catch {
|
|
95
|
+
return true // File doesn't exist, nothing to delete
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
await fs.unlink(filePath)
|
|
99
|
+
return true
|
|
100
|
+
} catch (error) {
|
|
101
|
+
console.error('Error deleting environments file:', error)
|
|
102
|
+
return false
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Reads and parses the content of the environments.json file
|
|
108
|
+
*/
|
|
109
|
+
export async function readEnvironmentsFile(): Promise<{
|
|
110
|
+
filePath: string
|
|
111
|
+
content: Record<string, EnvironmentConfig>
|
|
112
|
+
} | null> {
|
|
113
|
+
try {
|
|
114
|
+
const filePath = getEnvironmentsFilePath()
|
|
115
|
+
|
|
116
|
+
try {
|
|
117
|
+
await fs.access(filePath)
|
|
118
|
+
} catch {
|
|
119
|
+
return null // File doesn't exist
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const fileContent = await fs.readFile(filePath, 'utf-8')
|
|
123
|
+
const jsonContent = JSON.parse(fileContent)
|
|
124
|
+
|
|
125
|
+
return { filePath, content: jsonContent }
|
|
126
|
+
} catch (error) {
|
|
127
|
+
console.error('Error reading environments file:', error)
|
|
128
|
+
return null
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Updates a specific environment entry in the environments.json file
|
|
134
|
+
*/
|
|
135
|
+
export async function updateEnvironmentEntry(environmentId: string, oldName?: string): Promise<boolean> {
|
|
136
|
+
try {
|
|
137
|
+
// Get the environment from database
|
|
138
|
+
const environment = await prisma.environment.findUnique({
|
|
139
|
+
where: { id: environmentId },
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
if (!environment) {
|
|
143
|
+
console.error(`Environment with ID ${environmentId} not found`)
|
|
144
|
+
return false
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const filePath = getEnvironmentsFilePath()
|
|
148
|
+
|
|
149
|
+
// Read existing content
|
|
150
|
+
let environmentsConfig: Record<string, EnvironmentConfig> = {}
|
|
151
|
+
try {
|
|
152
|
+
await fs.access(filePath)
|
|
153
|
+
const fileContent = await fs.readFile(filePath, 'utf-8')
|
|
154
|
+
environmentsConfig = JSON.parse(fileContent)
|
|
155
|
+
} catch {
|
|
156
|
+
// File doesn't exist, start with empty object
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Remove old entry if name changed
|
|
160
|
+
if (oldName) {
|
|
161
|
+
const oldKey = oldName.toLowerCase().replace(/\s+/g, '_')
|
|
162
|
+
delete environmentsConfig[oldKey]
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Add/update the environment entry
|
|
166
|
+
const envKey = environment.name.toLowerCase().replace(/\s+/g, '_')
|
|
167
|
+
environmentsConfig[envKey] = {
|
|
168
|
+
baseUrl: environment.baseUrl,
|
|
169
|
+
apiBaseUrl: environment.apiBaseUrl || '',
|
|
170
|
+
email: environment.username || '',
|
|
171
|
+
password: environment.password || '',
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Ensure directory exists
|
|
175
|
+
await ensureConfigDirectoryExists()
|
|
176
|
+
|
|
177
|
+
// Write updated content
|
|
178
|
+
await fs.writeFile(filePath, JSON.stringify(environmentsConfig, null, 2))
|
|
179
|
+
return true
|
|
180
|
+
} catch (error) {
|
|
181
|
+
console.error('Error updating environment entry:', error)
|
|
182
|
+
return false
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Removes a specific environment entry from the environments.json file
|
|
188
|
+
*/
|
|
189
|
+
export async function removeEnvironmentEntry(environmentName: string): Promise<boolean> {
|
|
190
|
+
try {
|
|
191
|
+
const filePath = getEnvironmentsFilePath()
|
|
192
|
+
|
|
193
|
+
// Check if file exists
|
|
194
|
+
try {
|
|
195
|
+
await fs.access(filePath)
|
|
196
|
+
} catch {
|
|
197
|
+
return true // File doesn't exist, nothing to remove
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Read existing content
|
|
201
|
+
const fileContent = await fs.readFile(filePath, 'utf-8')
|
|
202
|
+
const environmentsConfig: Record<string, EnvironmentConfig> = JSON.parse(fileContent)
|
|
203
|
+
|
|
204
|
+
// Remove the environment entry
|
|
205
|
+
const envKey = environmentName.toLowerCase().replace(/\s+/g, '_')
|
|
206
|
+
delete environmentsConfig[envKey]
|
|
207
|
+
|
|
208
|
+
// If no environments left, delete the file
|
|
209
|
+
if (Object.keys(environmentsConfig).length === 0) {
|
|
210
|
+
await deleteEnvironmentsFile()
|
|
211
|
+
return true
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Write updated content
|
|
215
|
+
await fs.writeFile(filePath, JSON.stringify(environmentsConfig, null, 2))
|
|
216
|
+
return true
|
|
217
|
+
} catch (error) {
|
|
218
|
+
console.error('Error removing environment entry:', error)
|
|
219
|
+
return false
|
|
220
|
+
}
|
|
221
|
+
}
|