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.
Files changed (316) hide show
  1. package/README.md +45 -45
  2. package/dist/cli.js +2 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/copy-template.d.ts.map +1 -1
  5. package/dist/copy-template.js.map +1 -1
  6. package/package.json +69 -67
  7. package/templates/default/.vscode/settings.json +5 -0
  8. package/templates/default/appraisejs.config.json +1 -1
  9. package/templates/default/components.json +24 -24
  10. package/templates/default/cucumber.mjs +16 -0
  11. package/templates/default/eslint.config.mjs +15 -15
  12. package/templates/default/next.config.ts +13 -7
  13. package/templates/default/package-lock.json +13732 -14321
  14. package/templates/default/package.json +11 -9
  15. package/templates/default/postcss.config.mjs +8 -8
  16. package/templates/default/prisma/migrations/20251104113456_add_type_for_template_step_groups/migration.sql +16 -16
  17. package/templates/default/prisma/migrations/20251104170946_add_tags_to_test_suite_and_test_case/migration.sql +27 -27
  18. package/templates/default/prisma/migrations/20251112190024_add_cascade_delete_to_test_run_test_case/migration.sql +17 -17
  19. package/templates/default/prisma/migrations/20251113181100_add_test_run_log/migration.sql +12 -12
  20. package/templates/default/prisma/migrations/20251119191838_add_tag_type/migration.sql +28 -28
  21. package/templates/default/prisma/migrations/20251121164059_add_conflict_resolution/migration.sql +12 -12
  22. package/templates/default/prisma/migrations/20251223183400_add_report_model_to_db_schema/migration.sql +10 -10
  23. package/templates/default/prisma/migrations/20251223183637_add_report_test_case_entity_for_storing_test_results_for_individual_test_cases/migration.sql +10 -10
  24. package/templates/default/prisma/migrations/20251224083549_add_comprehensive_report_storage/migration.sql +108 -108
  25. package/templates/default/prisma/migrations/20251229194422_migrate_duration_to_string/migration.sql +55 -55
  26. package/templates/default/prisma/migrations/20251230124637_add_unique_constraint_to_test_run_name/migration.sql +27 -27
  27. package/templates/default/prisma/migrations/20260115094436_add_dashboard_metrics/migration.sql +59 -59
  28. package/templates/default/prisma/migrations/20260127172022_add_cascade_delete_to_step_parameters/migration.sql +34 -34
  29. package/templates/default/prisma/schema.prisma +554 -554
  30. package/templates/default/scripts/regenerate-features.ts +94 -94
  31. package/templates/default/scripts/setup-env.ts +19 -19
  32. package/templates/default/scripts/sync-all.ts +341 -341
  33. package/templates/default/scripts/sync-appraise-base-template.ts +52 -2
  34. package/templates/default/scripts/sync-environments.ts +323 -323
  35. package/templates/default/scripts/sync-locator-groups.ts +413 -413
  36. package/templates/default/scripts/sync-locators.ts +402 -402
  37. package/templates/default/scripts/sync-modules.ts +349 -349
  38. package/templates/default/scripts/sync-tags.ts +292 -292
  39. package/templates/default/scripts/sync-template-step-groups.ts +399 -399
  40. package/templates/default/scripts/sync-template-steps.ts +806 -806
  41. package/templates/default/scripts/sync-test-cases.ts +905 -905
  42. package/templates/default/scripts/sync-test-suites.ts +411 -411
  43. package/templates/default/src/actions/conflict/conflict.action.ts +33 -33
  44. package/templates/default/src/actions/dashboard/dashboard-actions.ts +240 -240
  45. package/templates/default/src/actions/environments/environment-actions.ts +205 -205
  46. package/templates/default/src/actions/locator/locator-actions.ts +547 -547
  47. package/templates/default/src/actions/locator-groups/locator-group-actions.ts +344 -344
  48. package/templates/default/src/actions/modules/module-actions.ts +133 -133
  49. package/templates/default/src/actions/reports/report-actions.ts +613 -613
  50. package/templates/default/src/actions/review/review-actions.ts +147 -147
  51. package/templates/default/src/actions/tags/tag-actions.ts +104 -104
  52. package/templates/default/src/actions/template-step/template-step-actions.ts +332 -332
  53. package/templates/default/src/actions/template-step-group/template-step-group-actions.ts +278 -278
  54. package/templates/default/src/actions/template-test-case/template-test-case-actions.ts +238 -238
  55. package/templates/default/src/actions/test-case/test-case-actions.ts +419 -419
  56. package/templates/default/src/actions/test-run/test-run-actions.ts +1185 -1185
  57. package/templates/default/src/actions/test-suite/test-suite-actions.ts +253 -253
  58. package/templates/default/src/actions/user/user-actions.ts +13 -13
  59. package/templates/default/src/app/(base)/environments/create/page.tsx +28 -28
  60. package/templates/default/src/app/(base)/environments/environment-form.tsx +219 -219
  61. package/templates/default/src/app/(base)/environments/environment-table-columns.tsx +96 -96
  62. package/templates/default/src/app/(base)/environments/environment-table.tsx +24 -24
  63. package/templates/default/src/app/(base)/environments/modify/[id]/page.tsx +46 -46
  64. package/templates/default/src/app/(base)/environments/page.tsx +59 -59
  65. package/templates/default/src/app/(base)/layout.tsx +10 -10
  66. package/templates/default/src/app/(base)/locator-groups/create/page.tsx +44 -44
  67. package/templates/default/src/app/(base)/locator-groups/locator-group-form.tsx +215 -215
  68. package/templates/default/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -77
  69. package/templates/default/src/app/(base)/locator-groups/locator-group-table.tsx +28 -28
  70. package/templates/default/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -46
  71. package/templates/default/src/app/(base)/locator-groups/page.tsx +61 -61
  72. package/templates/default/src/app/(base)/locators/create/page.tsx +38 -38
  73. package/templates/default/src/app/(base)/locators/locator-form.tsx +163 -163
  74. package/templates/default/src/app/(base)/locators/locator-table-columns.tsx +73 -90
  75. package/templates/default/src/app/(base)/locators/locator-table.tsx +28 -28
  76. package/templates/default/src/app/(base)/locators/modify/[id]/page.tsx +45 -45
  77. package/templates/default/src/app/(base)/locators/page.tsx +65 -65
  78. package/templates/default/src/app/(base)/locators/sync-locators-button.tsx +66 -66
  79. package/templates/default/src/app/(base)/modules/create/page.tsx +34 -34
  80. package/templates/default/src/app/(base)/modules/modify/[id]/page.tsx +46 -46
  81. package/templates/default/src/app/(base)/modules/module-form.tsx +126 -126
  82. package/templates/default/src/app/(base)/modules/module-table-columns.tsx +85 -85
  83. package/templates/default/src/app/(base)/modules/module-table.tsx +24 -24
  84. package/templates/default/src/app/(base)/modules/page.tsx +59 -59
  85. package/templates/default/src/app/(base)/reports/[id]/page.tsx +517 -517
  86. package/templates/default/src/app/(base)/reports/duration-chart.tsx +33 -33
  87. package/templates/default/src/app/(base)/reports/feature-chart.tsx +78 -78
  88. package/templates/default/src/app/(base)/reports/overview-chart.tsx +46 -46
  89. package/templates/default/src/app/(base)/reports/page.tsx +98 -98
  90. package/templates/default/src/app/(base)/reports/report-metric-card.tsx +16 -16
  91. package/templates/default/src/app/(base)/reports/report-table-columns.tsx +189 -189
  92. package/templates/default/src/app/(base)/reports/report-table.tsx +72 -72
  93. package/templates/default/src/app/(base)/reports/report-view-table-columns.tsx +131 -131
  94. package/templates/default/src/app/(base)/reports/report-view-table.tsx +82 -82
  95. package/templates/default/src/app/(base)/reports/test-cases/page.tsx +42 -42
  96. package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +115 -115
  97. package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -27
  98. package/templates/default/src/app/(base)/reports/test-suites/page.tsx +42 -42
  99. package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +79 -79
  100. package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +27 -27
  101. package/templates/default/src/app/(base)/reports/view-logs-button.tsx +60 -60
  102. package/templates/default/src/app/(base)/reviews/create/page.tsx +26 -26
  103. package/templates/default/src/app/(base)/reviews/created-reviews-table.tsx +15 -15
  104. package/templates/default/src/app/(base)/reviews/modify/[id]/page.tsx +26 -26
  105. package/templates/default/src/app/(base)/reviews/page.tsx +26 -26
  106. package/templates/default/src/app/(base)/reviews/review/[id]/page.tsx +26 -26
  107. package/templates/default/src/app/(base)/reviews/review-form.tsx +11 -11
  108. package/templates/default/src/app/(base)/reviews/review-table-by-creator-columns.tsx +9 -9
  109. package/templates/default/src/app/(base)/reviews/review-table-by-reviewer-columns.tsx +9 -9
  110. package/templates/default/src/app/(base)/reviews/reviewer-reviews-table.tsx +15 -15
  111. package/templates/default/src/app/(base)/tags/create/page.tsx +39 -39
  112. package/templates/default/src/app/(base)/tags/modify/[id]/page.tsx +50 -50
  113. package/templates/default/src/app/(base)/tags/page.tsx +58 -58
  114. package/templates/default/src/app/(base)/tags/tag-form.tsx +147 -147
  115. package/templates/default/src/app/(base)/tags/tag-table-columns.tsx +63 -63
  116. package/templates/default/src/app/(base)/tags/tag-table.tsx +29 -29
  117. package/templates/default/src/app/(base)/template-step-groups/create/page.tsx +28 -28
  118. package/templates/default/src/app/(base)/template-step-groups/modify/[id]/page.tsx +45 -45
  119. package/templates/default/src/app/(base)/template-step-groups/page.tsx +60 -60
  120. package/templates/default/src/app/(base)/template-step-groups/template-step-group-form.tsx +167 -167
  121. package/templates/default/src/app/(base)/template-step-groups/template-step-group-table-columns.tsx +89 -89
  122. package/templates/default/src/app/(base)/template-step-groups/template-step-group-table.tsx +32 -32
  123. package/templates/default/src/app/(base)/template-steps/create/page.tsx +37 -37
  124. package/templates/default/src/app/(base)/template-steps/modify/[id]/page.tsx +49 -49
  125. package/templates/default/src/app/(base)/template-steps/page.tsx +59 -59
  126. package/templates/default/src/app/(base)/template-steps/paramChip.tsx +213 -213
  127. package/templates/default/src/app/(base)/template-steps/template-step-form.tsx +384 -384
  128. package/templates/default/src/app/(base)/template-steps/template-step-table-columns.tsx +158 -158
  129. package/templates/default/src/app/(base)/template-steps/template-step-table.tsx +24 -24
  130. package/templates/default/src/app/(base)/template-test-cases/create/page.tsx +56 -56
  131. package/templates/default/src/app/(base)/template-test-cases/modify/[id]/page.tsx +89 -89
  132. package/templates/default/src/app/(base)/template-test-cases/page.tsx +58 -58
  133. package/templates/default/src/app/(base)/template-test-cases/template-test-case-flow.tsx +84 -84
  134. package/templates/default/src/app/(base)/template-test-cases/template-test-case-form.tsx +262 -262
  135. package/templates/default/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -76
  136. package/templates/default/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -32
  137. package/templates/default/src/app/(base)/test-cases/create/page.tsx +76 -76
  138. package/templates/default/src/app/(base)/test-cases/create-from-template/generate/[id]/page.tsx +96 -96
  139. package/templates/default/src/app/(base)/test-cases/create-from-template/page.tsx +38 -38
  140. package/templates/default/src/app/(base)/test-cases/create-from-template/template-selection-form.tsx +73 -73
  141. package/templates/default/src/app/(base)/test-cases/modify/[id]/page.tsx +106 -106
  142. package/templates/default/src/app/(base)/test-cases/page.tsx +60 -60
  143. package/templates/default/src/app/(base)/test-cases/test-case-flow.tsx +82 -82
  144. package/templates/default/src/app/(base)/test-cases/test-case-form.tsx +395 -395
  145. package/templates/default/src/app/(base)/test-cases/test-case-table-columns.tsx +90 -90
  146. package/templates/default/src/app/(base)/test-cases/test-case-table.tsx +35 -35
  147. package/templates/default/src/app/(base)/test-runs/[id]/page.tsx +56 -56
  148. package/templates/default/src/app/(base)/test-runs/create/page.tsx +47 -47
  149. package/templates/default/src/app/(base)/test-runs/page.tsx +60 -60
  150. package/templates/default/src/app/(base)/test-runs/test-run-form.tsx +508 -512
  151. package/templates/default/src/app/(base)/test-runs/test-run-table-columns.tsx +229 -229
  152. package/templates/default/src/app/(base)/test-runs/test-run-table.tsx +127 -127
  153. package/templates/default/src/app/(base)/test-suites/create/page.tsx +45 -45
  154. package/templates/default/src/app/(base)/test-suites/modify/[id]/page.tsx +55 -55
  155. package/templates/default/src/app/(base)/test-suites/page.tsx +82 -82
  156. package/templates/default/src/app/(base)/test-suites/test-suite-form.tsx +269 -269
  157. package/templates/default/src/app/(base)/test-suites/test-suite-table-columns.tsx +97 -97
  158. package/templates/default/src/app/(base)/test-suites/test-suite-table.tsx +29 -29
  159. package/templates/default/src/app/(dashboard-components)/app-drawer.tsx +187 -187
  160. package/templates/default/src/app/(dashboard-components)/data-card-grid.tsx +12 -12
  161. package/templates/default/src/app/(dashboard-components)/data-card.tsx +26 -26
  162. package/templates/default/src/app/(dashboard-components)/execution-health-panel.tsx +56 -56
  163. package/templates/default/src/app/(dashboard-components)/ongoing-test-runs-card.tsx +87 -87
  164. package/templates/default/src/app/(dashboard-components)/quick-actions-drawer.tsx +44 -44
  165. package/templates/default/src/app/api/test-runs/[runId]/download/route.ts +133 -133
  166. package/templates/default/src/app/api/test-runs/[runId]/logs/route.ts +420 -420
  167. package/templates/default/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.ts +146 -146
  168. package/templates/default/src/app/globals.css +147 -147
  169. package/templates/default/src/app/layout.tsx +171 -171
  170. package/templates/default/src/app/page.tsx +64 -64
  171. package/templates/default/src/assets/icons/empty-tube.tsx +23 -23
  172. package/templates/default/src/assets/icons/tube-plus.tsx +29 -29
  173. package/templates/default/src/components/base-node.tsx +21 -21
  174. package/templates/default/src/components/chart/pie-chart.tsx +73 -73
  175. package/templates/default/src/components/data-extraction/locator-inspector.tsx +460 -460
  176. package/templates/default/src/components/data-state/empty-state.tsx +40 -40
  177. package/templates/default/src/components/data-visualization/info-card.tsx +70 -70
  178. package/templates/default/src/components/data-visualization/info-grid.tsx +22 -22
  179. package/templates/default/src/components/devtools/providers.tsx +19 -13
  180. package/templates/default/src/components/diagram/button-edge.tsx +54 -54
  181. package/templates/default/src/components/diagram/dynamic-parameters.tsx +438 -438
  182. package/templates/default/src/components/diagram/edit-header-option.tsx +36 -36
  183. package/templates/default/src/components/diagram/flow-diagram.tsx +470 -470
  184. package/templates/default/src/components/diagram/node-form.tsx +262 -262
  185. package/templates/default/src/components/diagram/options-header-node.tsx +57 -57
  186. package/templates/default/src/components/diagram/template-step-combobox.tsx +155 -155
  187. package/templates/default/src/components/form/error-message.tsx +7 -7
  188. package/templates/default/src/components/kokonutui/smooth-tab.tsx +453 -453
  189. package/templates/default/src/components/loading-skeleton/data-table/data-table-skeleton.tsx +30 -30
  190. package/templates/default/src/components/loading-skeleton/form/button-skeleton.tsx +8 -8
  191. package/templates/default/src/components/loading-skeleton/form/icon-button-skeleton.tsx +8 -8
  192. package/templates/default/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -8
  193. package/templates/default/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -14
  194. package/templates/default/src/components/logo.tsx +15 -15
  195. package/templates/default/src/components/navigation/command-badge.tsx +34 -34
  196. package/templates/default/src/components/navigation/command-chain-input.tsx +51 -51
  197. package/templates/default/src/components/navigation/entity-search-command.tsx +116 -116
  198. package/templates/default/src/components/navigation/nav-card.tsx +31 -31
  199. package/templates/default/src/components/navigation/nav-command.tsx +508 -508
  200. package/templates/default/src/components/navigation/nav-link.tsx +60 -60
  201. package/templates/default/src/components/navigation/nav-menu-card-deck.tsx +112 -112
  202. package/templates/default/src/components/node-header.tsx +159 -159
  203. package/templates/default/src/components/reports/test-case-logs-modal.tsx +253 -253
  204. package/templates/default/src/components/table/table-actions.tsx +172 -172
  205. package/templates/default/src/components/test-run/download-logs-button.tsx +99 -99
  206. package/templates/default/src/components/test-run/log-viewer.tsx +445 -445
  207. package/templates/default/src/components/test-run/test-run-details.tsx +611 -611
  208. package/templates/default/src/components/test-run/test-run-header.tsx +149 -149
  209. package/templates/default/src/components/test-run/view-report-button.tsx +102 -102
  210. package/templates/default/src/components/theme/mode-toggle.tsx +54 -54
  211. package/templates/default/src/components/theme/theme-provider.tsx +8 -8
  212. package/templates/default/src/components/typography/page-header-subtitle.tsx +7 -7
  213. package/templates/default/src/components/typography/page-header.tsx +7 -7
  214. package/templates/default/src/components/ui/alert-dialog.tsx +106 -106
  215. package/templates/default/src/components/ui/alert.tsx +43 -43
  216. package/templates/default/src/components/ui/avatar.tsx +40 -40
  217. package/templates/default/src/components/ui/badge.tsx +29 -29
  218. package/templates/default/src/components/ui/button.tsx +47 -47
  219. package/templates/default/src/components/ui/calendar.tsx +158 -158
  220. package/templates/default/src/components/ui/card.tsx +43 -43
  221. package/templates/default/src/components/ui/checkbox.tsx +28 -28
  222. package/templates/default/src/components/ui/command.tsx +135 -135
  223. package/templates/default/src/components/ui/data-table-column-header.tsx +61 -61
  224. package/templates/default/src/components/ui/data-table-pagination.tsx +87 -87
  225. package/templates/default/src/components/ui/data-table-view-options.tsx +50 -50
  226. package/templates/default/src/components/ui/data-table.tsx +267 -267
  227. package/templates/default/src/components/ui/dialog.tsx +97 -97
  228. package/templates/default/src/components/ui/dropdown-menu.tsx +182 -182
  229. package/templates/default/src/components/ui/input.tsx +22 -22
  230. package/templates/default/src/components/ui/kbd.tsx +28 -28
  231. package/templates/default/src/components/ui/label.tsx +19 -19
  232. package/templates/default/src/components/ui/loading.tsx +12 -12
  233. package/templates/default/src/components/ui/multi-select-with-preview.tsx +116 -116
  234. package/templates/default/src/components/ui/multi-select.tsx +142 -142
  235. package/templates/default/src/components/ui/navigation-menu.tsx +120 -120
  236. package/templates/default/src/components/ui/popover.tsx +33 -33
  237. package/templates/default/src/components/ui/progress.tsx +25 -25
  238. package/templates/default/src/components/ui/radio-group.tsx +44 -44
  239. package/templates/default/src/components/ui/scroll-area.tsx +40 -40
  240. package/templates/default/src/components/ui/select.tsx +151 -144
  241. package/templates/default/src/components/ui/separator.tsx +22 -22
  242. package/templates/default/src/components/ui/skeleton.tsx +7 -7
  243. package/templates/default/src/components/ui/table.tsx +76 -76
  244. package/templates/default/src/components/ui/tabs.tsx +55 -55
  245. package/templates/default/src/components/ui/textarea.tsx +21 -21
  246. package/templates/default/src/components/ui/toast.tsx +113 -113
  247. package/templates/default/src/components/ui/toaster.tsx +26 -26
  248. package/templates/default/src/components/user-prompt/delete-prompt.tsx +87 -87
  249. package/templates/default/src/config/db-config.ts +10 -10
  250. package/templates/default/src/constants/form-opts/diagram/node-form.ts +30 -30
  251. package/templates/default/src/constants/form-opts/environment-form-opts.ts +24 -24
  252. package/templates/default/src/constants/form-opts/locator-form-opts.ts +20 -20
  253. package/templates/default/src/constants/form-opts/locator-group-form-opts.ts +28 -28
  254. package/templates/default/src/constants/form-opts/module-form-opts.ts +21 -21
  255. package/templates/default/src/constants/form-opts/review-form-opts.ts +23 -23
  256. package/templates/default/src/constants/form-opts/tag-form-opts.ts +42 -42
  257. package/templates/default/src/constants/form-opts/template-selection-form-opts.ts +16 -16
  258. package/templates/default/src/constants/form-opts/template-step-group-form-opts.ts +24 -24
  259. package/templates/default/src/constants/form-opts/template-test-case-form-opts.ts +39 -39
  260. package/templates/default/src/constants/form-opts/template-test-step-form-opts.ts +36 -36
  261. package/templates/default/src/constants/form-opts/test-case-form-opts.ts +43 -43
  262. package/templates/default/src/constants/form-opts/test-run-form-opts.ts +31 -31
  263. package/templates/default/src/constants/form-opts/test-suite-form-opts.ts +24 -24
  264. package/templates/default/src/hooks/use-toast.ts +187 -187
  265. package/templates/default/src/lib/bidirectional-sync.ts +432 -432
  266. package/templates/default/src/lib/database-sync.ts +531 -531
  267. package/templates/default/src/lib/environment-file-utils.ts +221 -221
  268. package/templates/default/src/lib/feature-file-generator.ts +411 -411
  269. package/templates/default/src/lib/gherkin-parser.ts +259 -259
  270. package/templates/default/src/lib/locator-group-file-utils.ts +370 -370
  271. package/templates/default/src/lib/metrics/metric-calculator.ts +613 -613
  272. package/templates/default/src/lib/module-hierarchy-builder.ts +205 -205
  273. package/templates/default/src/lib/path-helpers/module-path.ts +71 -71
  274. package/templates/default/src/lib/test-case-utils.ts +6 -6
  275. package/templates/default/src/lib/test-run/log-formatter.ts +83 -83
  276. package/templates/default/src/lib/test-run/process-manager.ts +191 -191
  277. package/templates/default/src/lib/test-run/report-parser.ts +316 -316
  278. package/templates/default/src/lib/test-run/test-run-executor.ts +144 -144
  279. package/templates/default/src/lib/test-run/winston-logger.ts +95 -95
  280. package/templates/default/src/lib/transformers/gherkin-converter.ts +42 -42
  281. package/templates/default/src/lib/transformers/key-to-icon-transformer.tsx +95 -95
  282. package/templates/default/src/lib/transformers/template-test-case-converter.ts +160 -160
  283. package/templates/default/src/lib/utils/node-param-validation.ts +81 -81
  284. package/templates/default/src/lib/utils/template-step-file-generator.ts +167 -167
  285. package/templates/default/src/lib/utils/template-step-file-manager-intelligent.ts +723 -723
  286. package/templates/default/src/lib/utils/template-step-file-manager.ts +166 -166
  287. package/templates/default/src/lib/utils.ts +31 -31
  288. package/templates/default/src/tests/config/executor/world.ts +41 -41
  289. package/templates/default/src/tests/executor.ts +80 -80
  290. package/templates/default/src/tests/hooks/hooks.ts +99 -99
  291. package/templates/default/src/tests/mapping/locator-map.json +1 -1
  292. package/templates/default/src/tests/steps/actions/click.step.ts +62 -62
  293. package/templates/default/src/tests/steps/actions/navigation.step.ts +73 -72
  294. package/templates/default/src/tests/steps/validations/active_state_assertion.step.ts +34 -34
  295. package/templates/default/src/tests/steps/validations/navigation_assertion.step.ts +24 -23
  296. package/templates/default/src/tests/steps/validations/text_assertion.step.ts +111 -111
  297. package/templates/default/src/tests/steps/validations/visibility_assertion.step.ts +30 -30
  298. package/templates/default/src/tests/support/parameter-types.ts +12 -12
  299. package/templates/default/src/tests/utils/cache.util.ts +260 -260
  300. package/templates/default/src/tests/utils/cli.util.ts +177 -177
  301. package/templates/default/src/tests/utils/environment.util.ts +65 -65
  302. package/templates/default/src/tests/utils/locator.util.ts +248 -248
  303. package/templates/default/src/tests/utils/random-data.util.ts +44 -44
  304. package/templates/default/src/tests/utils/spawner.util.ts +617 -617
  305. package/templates/default/src/types/diagram/diagram.ts +34 -34
  306. package/templates/default/src/types/diagram/template-step.ts +11 -11
  307. package/templates/default/src/types/executor/browser.type.ts +1 -1
  308. package/templates/default/src/types/form/actionHandler.ts +6 -6
  309. package/templates/default/src/types/locator/locator.type.ts +11 -11
  310. package/templates/default/src/types/step/step.type.ts +1 -1
  311. package/templates/default/src/types/table/data-table.ts +6 -6
  312. package/templates/default/tailwind.config.ts +62 -62
  313. package/templates/default/.env +0 -2
  314. package/templates/default/next-env.d.ts +0 -6
  315. package/templates/default/prisma/prisma/dev.db +0 -0
  316. package/templates/default/src/tests/config/environments/environments.json +0 -14
@@ -1,21 +1,21 @@
1
- import * as React from 'react'
2
-
3
- import { cn } from '@/lib/utils'
4
-
5
- const Textarea = React.forwardRef<HTMLTextAreaElement, React.ComponentProps<'textarea'>>(
6
- ({ className, ...props }, ref) => {
7
- return (
8
- <textarea
9
- className={cn(
10
- 'flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',
11
- className,
12
- )}
13
- ref={ref}
14
- {...props}
15
- />
16
- )
17
- },
18
- )
19
- Textarea.displayName = 'Textarea'
20
-
21
- export { Textarea }
1
+ import * as React from 'react'
2
+
3
+ import { cn } from '@/lib/utils'
4
+
5
+ const Textarea = React.forwardRef<HTMLTextAreaElement, React.ComponentProps<'textarea'>>(
6
+ ({ className, ...props }, ref) => {
7
+ return (
8
+ <textarea
9
+ className={cn(
10
+ 'flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',
11
+ className,
12
+ )}
13
+ ref={ref}
14
+ {...props}
15
+ />
16
+ )
17
+ },
18
+ )
19
+ Textarea.displayName = 'Textarea'
20
+
21
+ export { Textarea }
@@ -1,113 +1,113 @@
1
- 'use client'
2
-
3
- import * as React from 'react'
4
- import * as ToastPrimitives from '@radix-ui/react-toast'
5
- import { cva, type VariantProps } from 'class-variance-authority'
6
- import { X } from 'lucide-react'
7
-
8
- import { cn } from '@/lib/utils'
9
-
10
- const ToastProvider = ToastPrimitives.Provider
11
-
12
- const ToastViewport = React.forwardRef<
13
- React.ElementRef<typeof ToastPrimitives.Viewport>,
14
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>
15
- >(({ className, ...props }, ref) => (
16
- <ToastPrimitives.Viewport
17
- ref={ref}
18
- className={cn(
19
- 'fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]',
20
- className,
21
- )}
22
- {...props}
23
- />
24
- ))
25
- ToastViewport.displayName = ToastPrimitives.Viewport.displayName
26
-
27
- const toastVariants = cva(
28
- 'group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full',
29
- {
30
- variants: {
31
- variant: {
32
- default: 'border bg-background text-foreground',
33
- destructive: 'destructive group border-destructive bg-destructive text-destructive-foreground',
34
- },
35
- },
36
- defaultVariants: {
37
- variant: 'default',
38
- },
39
- },
40
- )
41
-
42
- const Toast = React.forwardRef<
43
- React.ElementRef<typeof ToastPrimitives.Root>,
44
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> & VariantProps<typeof toastVariants>
45
- >(({ className, variant, ...props }, ref) => {
46
- return <ToastPrimitives.Root ref={ref} className={cn(toastVariants({ variant }), className)} {...props} />
47
- })
48
- Toast.displayName = ToastPrimitives.Root.displayName
49
-
50
- const ToastAction = React.forwardRef<
51
- React.ElementRef<typeof ToastPrimitives.Action>,
52
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>
53
- >(({ className, ...props }, ref) => (
54
- <ToastPrimitives.Action
55
- ref={ref}
56
- className={cn(
57
- 'inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium transition-colors hover:bg-secondary focus:outline-none focus:ring-1 focus:ring-ring disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive',
58
- className,
59
- )}
60
- {...props}
61
- />
62
- ))
63
- ToastAction.displayName = ToastPrimitives.Action.displayName
64
-
65
- const ToastClose = React.forwardRef<
66
- React.ElementRef<typeof ToastPrimitives.Close>,
67
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>
68
- >(({ className, ...props }, ref) => (
69
- <ToastPrimitives.Close
70
- ref={ref}
71
- className={cn(
72
- 'absolute right-1 top-1 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-1 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600',
73
- className,
74
- )}
75
- toast-close=""
76
- {...props}
77
- >
78
- <X className="h-4 w-4" />
79
- </ToastPrimitives.Close>
80
- ))
81
- ToastClose.displayName = ToastPrimitives.Close.displayName
82
-
83
- const ToastTitle = React.forwardRef<
84
- React.ElementRef<typeof ToastPrimitives.Title>,
85
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>
86
- >(({ className, ...props }, ref) => (
87
- <ToastPrimitives.Title ref={ref} className={cn('text-sm font-semibold [&+div]:text-xs', className)} {...props} />
88
- ))
89
- ToastTitle.displayName = ToastPrimitives.Title.displayName
90
-
91
- const ToastDescription = React.forwardRef<
92
- React.ElementRef<typeof ToastPrimitives.Description>,
93
- React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>
94
- >(({ className, ...props }, ref) => (
95
- <ToastPrimitives.Description ref={ref} className={cn('text-sm opacity-90', className)} {...props} />
96
- ))
97
- ToastDescription.displayName = ToastPrimitives.Description.displayName
98
-
99
- type ToastProps = React.ComponentPropsWithoutRef<typeof Toast>
100
-
101
- type ToastActionElement = React.ReactElement<typeof ToastAction>
102
-
103
- export {
104
- type ToastProps,
105
- type ToastActionElement,
106
- ToastProvider,
107
- ToastViewport,
108
- Toast,
109
- ToastTitle,
110
- ToastDescription,
111
- ToastClose,
112
- ToastAction,
113
- }
1
+ 'use client'
2
+
3
+ import * as React from 'react'
4
+ import * as ToastPrimitives from '@radix-ui/react-toast'
5
+ import { cva, type VariantProps } from 'class-variance-authority'
6
+ import { X } from 'lucide-react'
7
+
8
+ import { cn } from '@/lib/utils'
9
+
10
+ const ToastProvider = ToastPrimitives.Provider
11
+
12
+ const ToastViewport = React.forwardRef<
13
+ React.ElementRef<typeof ToastPrimitives.Viewport>,
14
+ React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>
15
+ >(({ className, ...props }, ref) => (
16
+ <ToastPrimitives.Viewport
17
+ ref={ref}
18
+ className={cn(
19
+ 'fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]',
20
+ className,
21
+ )}
22
+ {...props}
23
+ />
24
+ ))
25
+ ToastViewport.displayName = ToastPrimitives.Viewport.displayName
26
+
27
+ const toastVariants = cva(
28
+ 'group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full',
29
+ {
30
+ variants: {
31
+ variant: {
32
+ default: 'border bg-background text-foreground',
33
+ destructive: 'destructive group border-destructive bg-destructive text-destructive-foreground',
34
+ },
35
+ },
36
+ defaultVariants: {
37
+ variant: 'default',
38
+ },
39
+ },
40
+ )
41
+
42
+ const Toast = React.forwardRef<
43
+ React.ElementRef<typeof ToastPrimitives.Root>,
44
+ React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> & VariantProps<typeof toastVariants>
45
+ >(({ className, variant, ...props }, ref) => {
46
+ return <ToastPrimitives.Root ref={ref} className={cn(toastVariants({ variant }), className)} {...props} />
47
+ })
48
+ Toast.displayName = ToastPrimitives.Root.displayName
49
+
50
+ const ToastAction = React.forwardRef<
51
+ React.ElementRef<typeof ToastPrimitives.Action>,
52
+ React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>
53
+ >(({ className, ...props }, ref) => (
54
+ <ToastPrimitives.Action
55
+ ref={ref}
56
+ className={cn(
57
+ 'inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium transition-colors hover:bg-secondary focus:outline-none focus:ring-1 focus:ring-ring disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive',
58
+ className,
59
+ )}
60
+ {...props}
61
+ />
62
+ ))
63
+ ToastAction.displayName = ToastPrimitives.Action.displayName
64
+
65
+ const ToastClose = React.forwardRef<
66
+ React.ElementRef<typeof ToastPrimitives.Close>,
67
+ React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>
68
+ >(({ className, ...props }, ref) => (
69
+ <ToastPrimitives.Close
70
+ ref={ref}
71
+ className={cn(
72
+ 'absolute right-1 top-1 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-1 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600',
73
+ className,
74
+ )}
75
+ toast-close=""
76
+ {...props}
77
+ >
78
+ <X className="h-4 w-4" />
79
+ </ToastPrimitives.Close>
80
+ ))
81
+ ToastClose.displayName = ToastPrimitives.Close.displayName
82
+
83
+ const ToastTitle = React.forwardRef<
84
+ React.ElementRef<typeof ToastPrimitives.Title>,
85
+ React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>
86
+ >(({ className, ...props }, ref) => (
87
+ <ToastPrimitives.Title ref={ref} className={cn('text-sm font-semibold [&+div]:text-xs', className)} {...props} />
88
+ ))
89
+ ToastTitle.displayName = ToastPrimitives.Title.displayName
90
+
91
+ const ToastDescription = React.forwardRef<
92
+ React.ElementRef<typeof ToastPrimitives.Description>,
93
+ React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>
94
+ >(({ className, ...props }, ref) => (
95
+ <ToastPrimitives.Description ref={ref} className={cn('text-sm opacity-90', className)} {...props} />
96
+ ))
97
+ ToastDescription.displayName = ToastPrimitives.Description.displayName
98
+
99
+ type ToastProps = React.ComponentPropsWithoutRef<typeof Toast>
100
+
101
+ type ToastActionElement = React.ReactElement<typeof ToastAction>
102
+
103
+ export {
104
+ type ToastProps,
105
+ type ToastActionElement,
106
+ ToastProvider,
107
+ ToastViewport,
108
+ Toast,
109
+ ToastTitle,
110
+ ToastDescription,
111
+ ToastClose,
112
+ ToastAction,
113
+ }
@@ -1,26 +1,26 @@
1
- 'use client'
2
-
3
- import { useToast } from '@/hooks/use-toast'
4
- import { Toast, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport } from '@/components/ui/toast'
5
-
6
- export function Toaster() {
7
- const { toasts } = useToast()
8
-
9
- return (
10
- <ToastProvider>
11
- {toasts.map(function ({ id, title, description, action, ...props }) {
12
- return (
13
- <Toast key={id} {...props}>
14
- <div className="grid gap-1">
15
- {title && <ToastTitle>{title}</ToastTitle>}
16
- {description && <ToastDescription>{description}</ToastDescription>}
17
- </div>
18
- {action}
19
- <ToastClose />
20
- </Toast>
21
- )
22
- })}
23
- <ToastViewport />
24
- </ToastProvider>
25
- )
26
- }
1
+ 'use client'
2
+
3
+ import { useToast } from '@/hooks/use-toast'
4
+ import { Toast, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport } from '@/components/ui/toast'
5
+
6
+ export function Toaster() {
7
+ const { toasts } = useToast()
8
+
9
+ return (
10
+ <ToastProvider>
11
+ {toasts.map(function ({ id, title, description, action, ...props }) {
12
+ return (
13
+ <Toast key={id} {...props}>
14
+ <div className="grid gap-1">
15
+ {title && <ToastTitle>{title}</ToastTitle>}
16
+ {description && <ToastDescription>{description}</ToastDescription>}
17
+ </div>
18
+ {action}
19
+ <ToastClose />
20
+ </Toast>
21
+ )
22
+ })}
23
+ <ToastViewport />
24
+ </ToastProvider>
25
+ )
26
+ }
@@ -1,87 +1,87 @@
1
- 'use client'
2
-
3
- import {
4
- Dialog,
5
- DialogContent,
6
- DialogDescription,
7
- DialogFooter,
8
- DialogHeader,
9
- DialogTitle,
10
- DialogTrigger,
11
- DialogClose,
12
- } from '../ui/dialog'
13
- import { Button } from '../ui/button'
14
- import { AlertCircle, Trash, X } from 'lucide-react'
15
- import { useState } from 'react'
16
-
17
- export default function DeletePrompt({
18
- isDisabled,
19
- dialogTitle,
20
- dialogDescription,
21
- confirmationText,
22
- deleteHandler,
23
- open,
24
- onOpenChange,
25
- }: {
26
- isDisabled?: boolean
27
- dialogTitle: string
28
- dialogDescription: string
29
- confirmationText: string
30
- deleteHandler: () => Promise<void>
31
- open?: boolean
32
- onOpenChange?: (open: boolean) => void
33
- }) {
34
- const [internalOpen, setInternalOpen] = useState(false)
35
-
36
- // Use controlled state if provided, otherwise use internal state
37
- const isOpen = open !== undefined ? open : internalOpen
38
- const setIsOpen = onOpenChange || setInternalOpen
39
-
40
- // Determine if we're in controlled mode (open prop provided)
41
- const isControlled = open !== undefined
42
-
43
- return (
44
- <Dialog open={isOpen} onOpenChange={setIsOpen}>
45
- {!isControlled && (
46
- <DialogTrigger asChild disabled={isDisabled}>
47
- <Button variant="outline" size="icon">
48
- <Trash className="h-4 w-4" />
49
- </Button>
50
- </DialogTrigger>
51
- )}
52
- <DialogContent className="border-none">
53
- <DialogHeader>
54
- <DialogTitle className="flex items-end gap-2">
55
- <AlertCircle className="h-5 w-5" />
56
- {dialogTitle}
57
- </DialogTitle>
58
- <DialogDescription>{dialogDescription}</DialogDescription>
59
- </DialogHeader>
60
- <div className="mb-4 flex flex-col gap-2">
61
- <h1 className="text-md">{confirmationText}</h1>
62
- </div>
63
- <DialogFooter>
64
- <Button
65
- variant="destructive"
66
- className="bg-red-500 hover:bg-red-600"
67
- onClick={async () => {
68
- await deleteHandler()
69
- setIsOpen(false)
70
- }}
71
- >
72
- <span className="flex items-center gap-2 text-white">
73
- <Trash className="h-4 w-4" />
74
- Delete
75
- </span>
76
- </Button>
77
- <DialogClose asChild className="bg-gray-700 text-white hover:bg-gray-800">
78
- <Button variant="secondary">
79
- <X className="h-4 w-4" />
80
- Cancel
81
- </Button>
82
- </DialogClose>
83
- </DialogFooter>
84
- </DialogContent>
85
- </Dialog>
86
- )
87
- }
1
+ 'use client'
2
+
3
+ import {
4
+ Dialog,
5
+ DialogContent,
6
+ DialogDescription,
7
+ DialogFooter,
8
+ DialogHeader,
9
+ DialogTitle,
10
+ DialogTrigger,
11
+ DialogClose,
12
+ } from '../ui/dialog'
13
+ import { Button } from '../ui/button'
14
+ import { AlertCircle, Trash, X } from 'lucide-react'
15
+ import { useState } from 'react'
16
+
17
+ export default function DeletePrompt({
18
+ isDisabled,
19
+ dialogTitle,
20
+ dialogDescription,
21
+ confirmationText,
22
+ deleteHandler,
23
+ open,
24
+ onOpenChange,
25
+ }: {
26
+ isDisabled?: boolean
27
+ dialogTitle: string
28
+ dialogDescription: string
29
+ confirmationText: string
30
+ deleteHandler: () => Promise<void>
31
+ open?: boolean
32
+ onOpenChange?: (open: boolean) => void
33
+ }) {
34
+ const [internalOpen, setInternalOpen] = useState(false)
35
+
36
+ // Use controlled state if provided, otherwise use internal state
37
+ const isOpen = open !== undefined ? open : internalOpen
38
+ const setIsOpen = onOpenChange || setInternalOpen
39
+
40
+ // Determine if we're in controlled mode (open prop provided)
41
+ const isControlled = open !== undefined
42
+
43
+ return (
44
+ <Dialog open={isOpen} onOpenChange={setIsOpen}>
45
+ {!isControlled && (
46
+ <DialogTrigger asChild disabled={isDisabled}>
47
+ <Button variant="outline" size="icon">
48
+ <Trash className="h-4 w-4" />
49
+ </Button>
50
+ </DialogTrigger>
51
+ )}
52
+ <DialogContent className="border-none">
53
+ <DialogHeader>
54
+ <DialogTitle className="flex items-end gap-2">
55
+ <AlertCircle className="h-5 w-5" />
56
+ {dialogTitle}
57
+ </DialogTitle>
58
+ <DialogDescription>{dialogDescription}</DialogDescription>
59
+ </DialogHeader>
60
+ <div className="mb-4 flex flex-col gap-2">
61
+ <h1 className="text-md">{confirmationText}</h1>
62
+ </div>
63
+ <DialogFooter>
64
+ <Button
65
+ variant="destructive"
66
+ className="bg-red-500 hover:bg-red-600"
67
+ onClick={async () => {
68
+ await deleteHandler()
69
+ setIsOpen(false)
70
+ }}
71
+ >
72
+ <span className="flex items-center gap-2 text-white">
73
+ <Trash className="h-4 w-4" />
74
+ Delete
75
+ </span>
76
+ </Button>
77
+ <DialogClose asChild className="bg-gray-700 text-white hover:bg-gray-800">
78
+ <Button variant="secondary">
79
+ <X className="h-4 w-4" />
80
+ Cancel
81
+ </Button>
82
+ </DialogClose>
83
+ </DialogFooter>
84
+ </DialogContent>
85
+ </Dialog>
86
+ )
87
+ }
@@ -1,10 +1,10 @@
1
- import { PrismaClient } from '@prisma/client'
2
-
3
- const globalForPrisma = global as unknown as {
4
- prisma: PrismaClient | undefined
5
- }
6
- const prisma = globalForPrisma.prisma ?? new PrismaClient()
7
-
8
- if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma
9
-
10
- export default prisma
1
+ import { PrismaClient } from '@prisma/client'
2
+
3
+ const globalForPrisma = global as unknown as {
4
+ prisma: PrismaClient | undefined
5
+ }
6
+ const prisma = globalForPrisma.prisma ?? new PrismaClient()
7
+
8
+ if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma
9
+
10
+ export default prisma
@@ -1,30 +1,30 @@
1
- import { StepParameterType } from '@prisma/client'
2
- import { z } from 'zod'
3
-
4
- export const nodeDataSchema = z.object({
5
- label: z.string().min(3, { message: 'Label must be at least 3 characters' }),
6
- gherkinStep: z.string(),
7
- templateStepId: z.string().min(1, { message: 'Template step is required' }),
8
- parameters: z.array(
9
- z.object({
10
- name: z.string(),
11
- value: z.string(),
12
- type: z.nativeEnum(StepParameterType),
13
- order: z.number(),
14
- }),
15
- ),
16
- })
17
-
18
- export type NodeData = z.infer<typeof nodeDataSchema>
19
-
20
- export const formOpts = {
21
- defaultValues: {
22
- label: '',
23
- gherkinStep: '',
24
- templateStepId: '',
25
- parameters: [],
26
- } as NodeData,
27
- validators: {
28
- onChange: nodeDataSchema,
29
- },
30
- }
1
+ import { StepParameterType } from '@prisma/client'
2
+ import { z } from 'zod'
3
+
4
+ export const nodeDataSchema = z.object({
5
+ label: z.string().min(3, { message: 'Label must be at least 3 characters' }),
6
+ gherkinStep: z.string(),
7
+ templateStepId: z.string().min(1, { message: 'Template step is required' }),
8
+ parameters: z.array(
9
+ z.object({
10
+ name: z.string(),
11
+ value: z.string(),
12
+ type: z.nativeEnum(StepParameterType),
13
+ order: z.number(),
14
+ }),
15
+ ),
16
+ })
17
+
18
+ export type NodeData = z.infer<typeof nodeDataSchema>
19
+
20
+ export const formOpts = {
21
+ defaultValues: {
22
+ label: '',
23
+ gherkinStep: '',
24
+ templateStepId: '',
25
+ parameters: [],
26
+ } as NodeData,
27
+ validators: {
28
+ onChange: nodeDataSchema,
29
+ },
30
+ }
@@ -1,24 +1,24 @@
1
- import { z } from 'zod'
2
-
3
- export const environmentSchema = z.object({
4
- name: z.string().min(1, { message: 'Name is required' }),
5
- baseUrl: z.string().url({ message: 'Base URL must be a valid URL' }),
6
- apiBaseUrl: z.string().url({ message: 'API Base URL must be a valid URL' }).optional().or(z.literal('')),
7
- username: z.string().optional().or(z.literal('')),
8
- password: z.string().optional().or(z.literal('')),
9
- })
10
-
11
- export type Environment = z.infer<typeof environmentSchema>
12
-
13
- export const formOpts = {
14
- defaultValues: {
15
- name: '',
16
- baseUrl: '',
17
- apiBaseUrl: '',
18
- username: '',
19
- password: '',
20
- },
21
- validators: {
22
- onChange: environmentSchema,
23
- },
24
- }
1
+ import { z } from 'zod'
2
+
3
+ export const environmentSchema = z.object({
4
+ name: z.string().min(1, { message: 'Name is required' }),
5
+ baseUrl: z.string().url({ message: 'Base URL must be a valid URL' }),
6
+ apiBaseUrl: z.string().url({ message: 'API Base URL must be a valid URL' }).optional().or(z.literal('')),
7
+ username: z.string().optional().or(z.literal('')),
8
+ password: z.string().optional().or(z.literal('')),
9
+ })
10
+
11
+ export type Environment = z.infer<typeof environmentSchema>
12
+
13
+ export const formOpts = {
14
+ defaultValues: {
15
+ name: '',
16
+ baseUrl: '',
17
+ apiBaseUrl: '',
18
+ username: '',
19
+ password: '',
20
+ },
21
+ validators: {
22
+ onChange: environmentSchema,
23
+ },
24
+ }