create-appraisejs 0.1.7 → 0.1.8
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 +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/copy-template.d.ts.map +1 -1
- package/dist/copy-template.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,167 +1,167 @@
|
|
|
1
|
-
import { promises as fs } from 'fs'
|
|
2
|
-
import { join } from 'path'
|
|
3
|
-
import prettier from 'prettier'
|
|
4
|
-
import { TemplateStep, TemplateStepGroupType } from '@prisma/client'
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Sanitizes a template step group name for file naming
|
|
8
|
-
* Converts to kebab-case (lowercase with underscores for spaces)
|
|
9
|
-
*/
|
|
10
|
-
export function sanitizeFileName(groupName: string): string {
|
|
11
|
-
return groupName
|
|
12
|
-
.toLowerCase()
|
|
13
|
-
.trim()
|
|
14
|
-
.replace(/\s+/g, '_') // Replace spaces with underscores
|
|
15
|
-
.replace(/[^a-z0-9_]/g, '') // Remove special characters except underscores
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Generates the content for a template step group file
|
|
20
|
-
* Concatenates all function definitions from template steps in the group
|
|
21
|
-
*/
|
|
22
|
-
export function generateFileContent(templateSteps: TemplateStep[]): string {
|
|
23
|
-
// Required imports for all template step group files
|
|
24
|
-
const requiredImports = `import { When } from '@cucumber/cucumber';
|
|
25
|
-
import { CustomWorld } from '../../config/executor/world.js';
|
|
26
|
-
import { SelectorName } from '@/types/locator/locator.type';
|
|
27
|
-
import { resolveLocator } from '../../utils/locator.util';
|
|
28
|
-
|
|
29
|
-
`
|
|
30
|
-
|
|
31
|
-
if (!templateSteps || templateSteps.length === 0) {
|
|
32
|
-
return (
|
|
33
|
-
requiredImports + '// This file is generated automatically. Add template steps to this group to generate content.'
|
|
34
|
-
)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Extract and concatenate function definitions
|
|
38
|
-
const functionDefinitions = templateSteps
|
|
39
|
-
.map(step => step.functionDefinition)
|
|
40
|
-
.filter(Boolean) // Remove undefined/null values
|
|
41
|
-
.join('\n\n')
|
|
42
|
-
|
|
43
|
-
return requiredImports + functionDefinitions
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Formats the file content using Prettier
|
|
48
|
-
*/
|
|
49
|
-
export async function formatFileContent(content: string): Promise<string> {
|
|
50
|
-
try {
|
|
51
|
-
const formattedContent = await prettier.format(content, {
|
|
52
|
-
parser: 'typescript',
|
|
53
|
-
semi: true,
|
|
54
|
-
singleQuote: true,
|
|
55
|
-
trailingComma: 'es5',
|
|
56
|
-
printWidth: 80,
|
|
57
|
-
tabWidth: 2,
|
|
58
|
-
})
|
|
59
|
-
return formattedContent
|
|
60
|
-
} catch (error) {
|
|
61
|
-
console.error('Prettier formatting failed:', error)
|
|
62
|
-
// Return original content if formatting fails
|
|
63
|
-
return content
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Gets the subdirectory name for a given template step group type
|
|
69
|
-
*/
|
|
70
|
-
export function getSubdirectoryName(type: TemplateStepGroupType | string): string {
|
|
71
|
-
const typeStr = String(type)
|
|
72
|
-
return typeStr === 'ACTION' ? 'actions' : 'validations'
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Ensures the steps directory and subdirectories exist, creates them if they don't
|
|
77
|
-
*/
|
|
78
|
-
export async function ensureStepsDirectory(): Promise<string> {
|
|
79
|
-
const stepsDir = join(process.cwd(), 'src', 'tests', 'steps')
|
|
80
|
-
|
|
81
|
-
try {
|
|
82
|
-
await fs.access(stepsDir)
|
|
83
|
-
} catch {
|
|
84
|
-
// Directory doesn't exist, create it
|
|
85
|
-
await fs.mkdir(stepsDir, { recursive: true })
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Ensure both subdirectories exist
|
|
89
|
-
const actionsDir = join(stepsDir, 'actions')
|
|
90
|
-
const validationsDir = join(stepsDir, 'validations')
|
|
91
|
-
|
|
92
|
-
try {
|
|
93
|
-
await fs.access(actionsDir)
|
|
94
|
-
} catch {
|
|
95
|
-
await fs.mkdir(actionsDir, { recursive: true })
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
try {
|
|
99
|
-
await fs.access(validationsDir)
|
|
100
|
-
} catch {
|
|
101
|
-
await fs.mkdir(validationsDir, { recursive: true })
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return stepsDir
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Generates the full file path for a template step group
|
|
109
|
-
*/
|
|
110
|
-
export function getFilePath(groupName: string, type: TemplateStepGroupType | string): string {
|
|
111
|
-
const sanitizedName = sanitizeFileName(groupName)
|
|
112
|
-
const subdirectory = getSubdirectoryName(type)
|
|
113
|
-
return join(process.cwd(), 'src', 'tests', 'steps', subdirectory, `${sanitizedName}.step.ts`)
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Writes content to a template step group file
|
|
118
|
-
*/
|
|
119
|
-
export async function writeTemplateStepFile(
|
|
120
|
-
groupName: string,
|
|
121
|
-
content: string,
|
|
122
|
-
type: TemplateStepGroupType | string,
|
|
123
|
-
): Promise<void> {
|
|
124
|
-
try {
|
|
125
|
-
// Ensure directory exists
|
|
126
|
-
await ensureStepsDirectory()
|
|
127
|
-
|
|
128
|
-
// Format content with Prettier
|
|
129
|
-
const formattedContent = await formatFileContent(content)
|
|
130
|
-
|
|
131
|
-
// Get file path
|
|
132
|
-
const filePath = getFilePath(groupName, type)
|
|
133
|
-
|
|
134
|
-
// Write file
|
|
135
|
-
await fs.writeFile(filePath, formattedContent, 'utf8')
|
|
136
|
-
|
|
137
|
-
console.log(`Template step file generated: ${filePath}`)
|
|
138
|
-
} catch (error) {
|
|
139
|
-
console.error(`Failed to write template step file for group "${groupName}":`, error)
|
|
140
|
-
throw new Error(`File generation failed: ${error}`)
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Deletes a template step group file
|
|
146
|
-
*/
|
|
147
|
-
export async function deleteTemplateStepFile(groupName: string, type: TemplateStepGroupType | string): Promise<void> {
|
|
148
|
-
try {
|
|
149
|
-
const filePath = getFilePath(groupName, type)
|
|
150
|
-
|
|
151
|
-
// Check if file exists before trying to delete
|
|
152
|
-
try {
|
|
153
|
-
await fs.access(filePath)
|
|
154
|
-
} catch {
|
|
155
|
-
// File doesn't exist, nothing to delete
|
|
156
|
-
return
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// Delete file
|
|
160
|
-
await fs.unlink(filePath)
|
|
161
|
-
|
|
162
|
-
console.log(`Template step file deleted: ${filePath}`)
|
|
163
|
-
} catch (error) {
|
|
164
|
-
console.error(`Failed to delete template step file for group "${groupName}":`, error)
|
|
165
|
-
throw new Error(`File deletion failed: ${error}`)
|
|
166
|
-
}
|
|
167
|
-
}
|
|
1
|
+
import { promises as fs } from 'fs'
|
|
2
|
+
import { join } from 'path'
|
|
3
|
+
import prettier from 'prettier'
|
|
4
|
+
import { TemplateStep, TemplateStepGroupType } from '@prisma/client'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Sanitizes a template step group name for file naming
|
|
8
|
+
* Converts to kebab-case (lowercase with underscores for spaces)
|
|
9
|
+
*/
|
|
10
|
+
export function sanitizeFileName(groupName: string): string {
|
|
11
|
+
return groupName
|
|
12
|
+
.toLowerCase()
|
|
13
|
+
.trim()
|
|
14
|
+
.replace(/\s+/g, '_') // Replace spaces with underscores
|
|
15
|
+
.replace(/[^a-z0-9_]/g, '') // Remove special characters except underscores
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Generates the content for a template step group file
|
|
20
|
+
* Concatenates all function definitions from template steps in the group
|
|
21
|
+
*/
|
|
22
|
+
export function generateFileContent(templateSteps: TemplateStep[]): string {
|
|
23
|
+
// Required imports for all template step group files
|
|
24
|
+
const requiredImports = `import { When } from '@cucumber/cucumber';
|
|
25
|
+
import { CustomWorld } from '../../config/executor/world.js';
|
|
26
|
+
import { SelectorName } from '@/types/locator/locator.type';
|
|
27
|
+
import { resolveLocator } from '../../utils/locator.util';
|
|
28
|
+
|
|
29
|
+
`
|
|
30
|
+
|
|
31
|
+
if (!templateSteps || templateSteps.length === 0) {
|
|
32
|
+
return (
|
|
33
|
+
requiredImports + '// This file is generated automatically. Add template steps to this group to generate content.'
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Extract and concatenate function definitions
|
|
38
|
+
const functionDefinitions = templateSteps
|
|
39
|
+
.map(step => step.functionDefinition)
|
|
40
|
+
.filter(Boolean) // Remove undefined/null values
|
|
41
|
+
.join('\n\n')
|
|
42
|
+
|
|
43
|
+
return requiredImports + functionDefinitions
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Formats the file content using Prettier
|
|
48
|
+
*/
|
|
49
|
+
export async function formatFileContent(content: string): Promise<string> {
|
|
50
|
+
try {
|
|
51
|
+
const formattedContent = await prettier.format(content, {
|
|
52
|
+
parser: 'typescript',
|
|
53
|
+
semi: true,
|
|
54
|
+
singleQuote: true,
|
|
55
|
+
trailingComma: 'es5',
|
|
56
|
+
printWidth: 80,
|
|
57
|
+
tabWidth: 2,
|
|
58
|
+
})
|
|
59
|
+
return formattedContent
|
|
60
|
+
} catch (error) {
|
|
61
|
+
console.error('Prettier formatting failed:', error)
|
|
62
|
+
// Return original content if formatting fails
|
|
63
|
+
return content
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Gets the subdirectory name for a given template step group type
|
|
69
|
+
*/
|
|
70
|
+
export function getSubdirectoryName(type: TemplateStepGroupType | string): string {
|
|
71
|
+
const typeStr = String(type)
|
|
72
|
+
return typeStr === 'ACTION' ? 'actions' : 'validations'
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Ensures the steps directory and subdirectories exist, creates them if they don't
|
|
77
|
+
*/
|
|
78
|
+
export async function ensureStepsDirectory(): Promise<string> {
|
|
79
|
+
const stepsDir = join(process.cwd(), 'src', 'tests', 'steps')
|
|
80
|
+
|
|
81
|
+
try {
|
|
82
|
+
await fs.access(stepsDir)
|
|
83
|
+
} catch {
|
|
84
|
+
// Directory doesn't exist, create it
|
|
85
|
+
await fs.mkdir(stepsDir, { recursive: true })
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Ensure both subdirectories exist
|
|
89
|
+
const actionsDir = join(stepsDir, 'actions')
|
|
90
|
+
const validationsDir = join(stepsDir, 'validations')
|
|
91
|
+
|
|
92
|
+
try {
|
|
93
|
+
await fs.access(actionsDir)
|
|
94
|
+
} catch {
|
|
95
|
+
await fs.mkdir(actionsDir, { recursive: true })
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
try {
|
|
99
|
+
await fs.access(validationsDir)
|
|
100
|
+
} catch {
|
|
101
|
+
await fs.mkdir(validationsDir, { recursive: true })
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return stepsDir
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Generates the full file path for a template step group
|
|
109
|
+
*/
|
|
110
|
+
export function getFilePath(groupName: string, type: TemplateStepGroupType | string): string {
|
|
111
|
+
const sanitizedName = sanitizeFileName(groupName)
|
|
112
|
+
const subdirectory = getSubdirectoryName(type)
|
|
113
|
+
return join(process.cwd(), 'src', 'tests', 'steps', subdirectory, `${sanitizedName}.step.ts`)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Writes content to a template step group file
|
|
118
|
+
*/
|
|
119
|
+
export async function writeTemplateStepFile(
|
|
120
|
+
groupName: string,
|
|
121
|
+
content: string,
|
|
122
|
+
type: TemplateStepGroupType | string,
|
|
123
|
+
): Promise<void> {
|
|
124
|
+
try {
|
|
125
|
+
// Ensure directory exists
|
|
126
|
+
await ensureStepsDirectory()
|
|
127
|
+
|
|
128
|
+
// Format content with Prettier
|
|
129
|
+
const formattedContent = await formatFileContent(content)
|
|
130
|
+
|
|
131
|
+
// Get file path
|
|
132
|
+
const filePath = getFilePath(groupName, type)
|
|
133
|
+
|
|
134
|
+
// Write file
|
|
135
|
+
await fs.writeFile(filePath, formattedContent, 'utf8')
|
|
136
|
+
|
|
137
|
+
console.log(`Template step file generated: ${filePath}`)
|
|
138
|
+
} catch (error) {
|
|
139
|
+
console.error(`Failed to write template step file for group "${groupName}":`, error)
|
|
140
|
+
throw new Error(`File generation failed: ${error}`)
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Deletes a template step group file
|
|
146
|
+
*/
|
|
147
|
+
export async function deleteTemplateStepFile(groupName: string, type: TemplateStepGroupType | string): Promise<void> {
|
|
148
|
+
try {
|
|
149
|
+
const filePath = getFilePath(groupName, type)
|
|
150
|
+
|
|
151
|
+
// Check if file exists before trying to delete
|
|
152
|
+
try {
|
|
153
|
+
await fs.access(filePath)
|
|
154
|
+
} catch {
|
|
155
|
+
// File doesn't exist, nothing to delete
|
|
156
|
+
return
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Delete file
|
|
160
|
+
await fs.unlink(filePath)
|
|
161
|
+
|
|
162
|
+
console.log(`Template step file deleted: ${filePath}`)
|
|
163
|
+
} catch (error) {
|
|
164
|
+
console.error(`Failed to delete template step file for group "${groupName}":`, error)
|
|
165
|
+
throw new Error(`File deletion failed: ${error}`)
|
|
166
|
+
}
|
|
167
|
+
}
|