create-appraisejs 0.3.1-alpha.0 → 0.3.1-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (503) hide show
  1. package/README.md +17 -17
  2. package/dist/cli.e2e.test.d.ts +2 -2
  3. package/dist/cli.e2e.test.js +74 -72
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js.map +1 -1
  6. package/dist/config.test.d.ts +2 -2
  7. package/dist/config.test.js +64 -64
  8. package/dist/copy-template.test.d.ts +2 -2
  9. package/dist/copy-template.test.js +70 -70
  10. package/dist/download-repo.test.d.ts +2 -2
  11. package/dist/download-repo.test.js +15 -13
  12. package/dist/install.test.d.ts +2 -2
  13. package/dist/install.test.js +115 -114
  14. package/dist/prepare-template-utils.d.ts.map +1 -1
  15. package/dist/prepare-template-utils.js.map +1 -1
  16. package/dist/prompts.d.ts.map +1 -1
  17. package/dist/prompts.js +2 -2
  18. package/dist/prompts.js.map +1 -1
  19. package/dist/prompts.test.d.ts +2 -2
  20. package/dist/prompts.test.js +54 -54
  21. package/dist/sync-templates-utils.d.ts.map +1 -1
  22. package/dist/sync-templates-utils.js +1 -5
  23. package/dist/sync-templates-utils.js.map +1 -1
  24. package/package.json +1 -1
  25. package/templates/blank/.editorconfig +11 -0
  26. package/templates/blank/.gitattributes +21 -0
  27. package/templates/blank/.gitconfig.appraise +14 -0
  28. package/templates/blank/.prettierrc +13 -0
  29. package/templates/blank/.vscode/settings.json +2 -0
  30. package/templates/blank/README.md +12 -12
  31. package/templates/blank/components.json +24 -24
  32. package/templates/blank/cucumber.mjs +16 -16
  33. package/templates/blank/e2e/README.md +56 -0
  34. package/templates/blank/e2e/apply-migrations.mjs +76 -0
  35. package/templates/blank/e2e/appraise-smoke.spec.ts +78 -0
  36. package/templates/blank/e2e/authoring.spec.ts +53 -0
  37. package/templates/blank/e2e/crud-configuration.spec.ts +138 -0
  38. package/templates/blank/e2e/crud-tests.spec.ts +76 -0
  39. package/templates/blank/e2e/helpers/forms.ts +186 -0
  40. package/templates/blank/e2e/helpers/navigation.ts +27 -0
  41. package/templates/blank/e2e/helpers/table.ts +45 -0
  42. package/templates/blank/e2e/helpers/test-data.ts +549 -0
  43. package/templates/blank/e2e/helpers/ui.ts +41 -0
  44. package/templates/blank/e2e/navigation.spec.ts +101 -0
  45. package/templates/blank/e2e/runs-and-reports.spec.ts +82 -0
  46. package/templates/blank/e2e/settings-sync.spec.ts +39 -0
  47. package/templates/blank/e2e/start-server.mjs +61 -0
  48. package/templates/blank/eslint.config.mjs +4 -4
  49. package/templates/blank/gitignore +0 -3
  50. package/templates/blank/next-env.d.ts +1 -1
  51. package/templates/blank/package-lock.json +58 -102
  52. package/templates/blank/package.json +10 -9
  53. package/templates/blank/packages/cucumber-runtime/package.json +13 -13
  54. package/templates/blank/packages/cucumber-runtime/src/cache.util.ts +93 -93
  55. package/templates/blank/packages/cucumber-runtime/src/cli.ts +77 -68
  56. package/templates/blank/packages/cucumber-runtime/src/environment.util.ts +21 -21
  57. package/templates/blank/packages/cucumber-runtime/src/executor.ts +32 -32
  58. package/templates/blank/packages/cucumber-runtime/src/index.ts +17 -17
  59. package/templates/blank/packages/cucumber-runtime/src/locator.util.ts +234 -234
  60. package/templates/blank/packages/cucumber-runtime/src/parameter-types.ts +7 -7
  61. package/templates/blank/packages/cucumber-runtime/src/random-data.util.ts +35 -35
  62. package/templates/blank/packages/cucumber-runtime/src/types.ts +13 -13
  63. package/templates/blank/packages/cucumber-runtime/src/world.ts +44 -44
  64. package/templates/blank/packages/cucumber-runtime/tsconfig.json +11 -11
  65. package/templates/blank/packages/locator-picker-companion/dist/cli.js +1 -1
  66. package/templates/blank/packages/locator-picker-companion/dist/index.d.ts +3 -3
  67. package/templates/blank/packages/locator-picker-companion/dist/index.js +3 -3
  68. package/templates/blank/packages/locator-picker-companion/dist/injected-picker-script.js +13 -3
  69. package/templates/blank/packages/locator-picker-companion/dist/selector-generator.d.ts +6 -3
  70. package/templates/blank/packages/locator-picker-companion/dist/selector-generator.js +233 -229
  71. package/templates/blank/packages/locator-picker-companion/src/cli.ts +1 -7
  72. package/templates/blank/packages/locator-picker-companion/src/injected-picker-script.ts +26 -5
  73. package/templates/blank/packages/locator-picker-companion/src/launcher.ts +1 -3
  74. package/templates/blank/packages/locator-picker-companion/src/session-file.ts +4 -15
  75. package/templates/blank/packages/locator-picker-companion/src/types.ts +1 -8
  76. package/templates/blank/playwright.config.ts +46 -0
  77. package/templates/blank/postcss.config.mjs +8 -8
  78. package/templates/blank/prisma/dev.db +0 -0
  79. package/templates/blank/scripts/configure-git-line-endings.mjs +91 -0
  80. package/templates/blank/scripts/install-template-step.ts +5 -1
  81. package/templates/blank/scripts/lib/step-matcher.test.ts +3 -3
  82. package/templates/blank/scripts/lib/step-matcher.ts +5 -1
  83. package/templates/blank/scripts/lib/template-step-installer.test.ts +4 -2
  84. package/templates/blank/scripts/lib/template-step-installer.ts +16 -4
  85. package/templates/blank/scripts/lib/template-step-registry.test.ts +1 -1
  86. package/templates/blank/scripts/lib/template-step-registry.ts +4 -1
  87. package/templates/blank/scripts/run-fallow-commit.mjs +4 -6
  88. package/templates/blank/scripts/sync-all.ts +7 -6
  89. package/templates/blank/scripts/sync-appraise-base-template.ts +84 -77
  90. package/templates/blank/scripts/sync-environments.ts +47 -44
  91. package/templates/blank/scripts/sync-locator-groups.ts +67 -76
  92. package/templates/blank/scripts/sync-locators.ts +50 -53
  93. package/templates/blank/scripts/sync-modules.ts +42 -42
  94. package/templates/blank/scripts/sync-tags.ts +51 -51
  95. package/templates/blank/scripts/sync-template-step-groups.ts +34 -32
  96. package/templates/blank/scripts/sync-template-steps.ts +97 -97
  97. package/templates/blank/scripts/sync-test-cases.ts +65 -74
  98. package/templates/blank/scripts/sync-test-suites.ts +85 -80
  99. package/templates/blank/src/actions/server-action-boundary.test.ts +1 -7
  100. package/templates/blank/src/actions/settings/sync-actions.ts +3 -1
  101. package/templates/blank/src/actions/tags/tag-actions.ts +1 -7
  102. package/templates/blank/src/actions/template-test-case/template-test-case-actions.ts +3 -1
  103. package/templates/blank/src/app/(base)/environments/create/page.tsx +28 -28
  104. package/templates/blank/src/app/(base)/environments/environment-form.tsx +3 -2
  105. package/templates/blank/src/app/(base)/environments/environment-helpers.ts +4 -1
  106. package/templates/blank/src/app/(base)/layout.tsx +10 -10
  107. package/templates/blank/src/app/(base)/locator-groups/locator-group-form.tsx +5 -3
  108. package/templates/blank/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -77
  109. package/templates/blank/src/app/(base)/locator-groups/locator-group-table.tsx +28 -28
  110. package/templates/blank/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -46
  111. package/templates/blank/src/app/(base)/locator-groups/page.tsx +9 -19
  112. package/templates/blank/src/app/(base)/locators/create/create-locator-workspace-helpers.test.ts +3 -6
  113. package/templates/blank/src/app/(base)/locators/create/create-locator-workspace-response.ts +22 -5
  114. package/templates/blank/src/app/(base)/locators/create/create-locator-workspace-state.ts +5 -1
  115. package/templates/blank/src/app/(base)/locators/create/use-locator-workspace.ts +7 -2
  116. package/templates/blank/src/app/(base)/locators/locator-file-sync.ts +1 -5
  117. package/templates/blank/src/app/(base)/locators/locator-helpers.ts +2 -12
  118. package/templates/blank/src/app/(base)/locators/locator-table-columns.tsx +59 -60
  119. package/templates/blank/src/app/(base)/modules/module-form.tsx +3 -1
  120. package/templates/blank/src/app/(base)/reports/overview-chart.tsx +49 -49
  121. package/templates/blank/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +114 -115
  122. package/templates/blank/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -27
  123. package/templates/blank/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +80 -79
  124. package/templates/blank/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +29 -27
  125. package/templates/blank/src/app/(base)/settings/settings-sync-panel-helpers.test.tsx +4 -6
  126. package/templates/blank/src/app/(base)/settings/settings-sync-panel.tsx +22 -23
  127. package/templates/blank/src/app/(base)/tags/tag-form.test.tsx +2 -10
  128. package/templates/blank/src/app/(base)/tags/tag-form.tsx +5 -3
  129. package/templates/blank/src/app/(base)/tags/tag-table-columns.tsx +63 -63
  130. package/templates/blank/src/app/(base)/tags/tag-table.tsx +29 -29
  131. package/templates/blank/src/app/(base)/template-step-groups/create/page.tsx +28 -28
  132. package/templates/blank/src/app/(base)/template-step-groups/template-step-group-form.tsx +3 -1
  133. package/templates/blank/src/app/(base)/template-step-groups/template-step-group-helpers.ts +4 -1
  134. package/templates/blank/src/app/(base)/template-steps/paramChip.tsx +6 -10
  135. package/templates/blank/src/app/(base)/template-steps/template-step-form-helpers.ts +4 -2
  136. package/templates/blank/src/app/(base)/template-steps/template-step-helpers.test.ts +19 -1
  137. package/templates/blank/src/app/(base)/template-steps/template-step-helpers.ts +1 -5
  138. package/templates/blank/src/app/(base)/template-steps/template-step-row-guards.ts +1 -5
  139. package/templates/blank/src/app/(base)/template-steps/template-step-types.ts +1 -5
  140. package/templates/blank/src/app/(base)/template-test-cases/create-template-test-case-page-data.test.ts +4 -1
  141. package/templates/blank/src/app/(base)/template-test-cases/create-template-test-case-page-data.ts +1 -2
  142. package/templates/blank/src/app/(base)/template-test-cases/modify/[id]/page.tsx +1 -0
  143. package/templates/blank/src/app/(base)/template-test-cases/template-test-case-flow.test.tsx +0 -1
  144. package/templates/blank/src/app/(base)/template-test-cases/template-test-case-form.tsx +3 -1
  145. package/templates/blank/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -76
  146. package/templates/blank/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -32
  147. package/templates/blank/src/app/(base)/test-cases/create/page.tsx +1 -5
  148. package/templates/blank/src/app/(base)/test-cases/create-from-template/create-from-template-selection-helpers.ts +1 -4
  149. package/templates/blank/src/app/(base)/test-cases/create-from-template/page.test.tsx +2 -2
  150. package/templates/blank/src/app/(base)/test-cases/inline-tag-creation-dialog.tsx +1 -7
  151. package/templates/blank/src/app/(base)/test-cases/inline-test-suite-creation-dialog.tsx +1 -7
  152. package/templates/blank/src/app/(base)/test-cases/modify/[id]/page.tsx +1 -5
  153. package/templates/blank/src/app/(base)/test-cases/test-case-form.tsx +63 -78
  154. package/templates/blank/src/app/(base)/test-cases/test-case-route-helpers.test.ts +2 -7
  155. package/templates/blank/src/app/(base)/test-suites/editable-test-suite-helpers.ts +1 -6
  156. package/templates/blank/src/app/(base)/test-suites/test-suite-form.test.tsx +2 -10
  157. package/templates/blank/src/app/(dashboard-components)/data-card-grid.tsx +10 -10
  158. package/templates/blank/src/app/api/test-runs/[runId]/download/route.ts +1 -4
  159. package/templates/blank/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.test.ts +18 -9
  160. package/templates/blank/src/assets/icons/empty-tube.tsx +23 -23
  161. package/templates/blank/src/assets/icons/tube-plus.tsx +29 -29
  162. package/templates/blank/src/components/data-visualization/info-card.tsx +56 -70
  163. package/templates/blank/src/components/data-visualization/info-grid.tsx +22 -22
  164. package/templates/blank/src/components/diagram/add-node-prompt-node.tsx +1 -1
  165. package/templates/blank/src/components/diagram/dynamic-parameters-helpers.ts +4 -3
  166. package/templates/blank/src/components/diagram/dynamic-parameters.test.tsx +4 -1
  167. package/templates/blank/src/components/diagram/dynamic-parameters.tsx +0 -1
  168. package/templates/blank/src/components/diagram/flow-diagram-block-dialog.test.tsx +26 -0
  169. package/templates/blank/src/components/diagram/flow-diagram-block-dialog.tsx +3 -1
  170. package/templates/blank/src/components/diagram/flow-diagram-connection-guards.ts +24 -6
  171. package/templates/blank/src/components/diagram/flow-diagram-helpers.test.ts +27 -0
  172. package/templates/blank/src/components/diagram/flow-diagram-node-search.tsx +65 -65
  173. package/templates/blank/src/components/diagram/flow-diagram-toolbar.tsx +1 -3
  174. package/templates/blank/src/components/diagram/flow-diagram-view.tsx +1 -7
  175. package/templates/blank/src/components/diagram/flow-node-data-helpers.ts +1 -1
  176. package/templates/blank/src/components/diagram/node-form-fields-content.tsx +9 -2
  177. package/templates/blank/src/components/diagram/node-form-helpers.test.ts +3 -1
  178. package/templates/blank/src/components/diagram/node-form-helpers.ts +1 -4
  179. package/templates/blank/src/components/diagram/node-form-template-step-selection.ts +1 -4
  180. package/templates/blank/src/components/diagram/node-form.test.tsx +25 -0
  181. package/templates/blank/src/components/diagram/node-form.tsx +2 -12
  182. package/templates/blank/src/components/diagram/options-header-node.test.tsx +4 -1
  183. package/templates/blank/src/components/diagram/options-header-node.tsx +140 -130
  184. package/templates/blank/src/components/diagram/use-flow-diagram.ts +1 -2
  185. package/templates/blank/src/components/form/error-message.tsx +7 -7
  186. package/templates/blank/src/components/loading-skeleton/form/button-skeleton.tsx +8 -8
  187. package/templates/blank/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -8
  188. package/templates/blank/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -14
  189. package/templates/blank/src/components/navigation/entity-search-command.tsx +3 -9
  190. package/templates/blank/src/components/navigation/nav-link.tsx +60 -60
  191. package/templates/blank/src/components/test-case/test-case-form-helpers.test.ts +1 -5
  192. package/templates/blank/src/components/test-case/test-case-form-helpers.ts +1 -5
  193. package/templates/blank/src/components/test-case/test-case-picker-helpers.ts +8 -7
  194. package/templates/blank/src/components/test-case/test-case-picker.tsx +2 -6
  195. package/templates/blank/src/components/test-run/log-viewer.test.tsx +25 -0
  196. package/templates/blank/src/components/test-run/log-viewer.tsx +2 -2
  197. package/templates/blank/src/components/test-run/test-run-details-guards.ts +10 -1
  198. package/templates/blank/src/components/test-run/test-run-details.test.tsx +9 -19
  199. package/templates/blank/src/components/test-run/use-log-viewer.ts +2 -8
  200. package/templates/blank/src/components/test-run/use-test-run-header.ts +1 -4
  201. package/templates/blank/src/components/test-suite/test-suite-picker.tsx +1 -1
  202. package/templates/blank/src/components/theme/theme-provider.tsx +7 -1
  203. package/templates/blank/src/components/typography/page-header-subtitle.tsx +7 -7
  204. package/templates/blank/src/components/typography/page-header.tsx +7 -7
  205. package/templates/blank/src/components/ui/chart.tsx +2 -8
  206. package/templates/blank/src/components/ui/command.tsx +2 -5
  207. package/templates/blank/src/components/ui/data-table-column-header.tsx +3 -3
  208. package/templates/blank/src/components/ui/data-table.test.tsx +1 -8
  209. package/templates/blank/src/components/ui/dialog.tsx +1 -4
  210. package/templates/blank/src/components/ui/select.tsx +2 -2
  211. package/templates/blank/src/components/ui/separator.tsx +5 -1
  212. package/templates/blank/src/components/ui/skeleton.tsx +7 -7
  213. package/templates/blank/src/components/ui/table.tsx +1 -1
  214. package/templates/blank/src/components/ui/toaster.tsx +26 -26
  215. package/templates/blank/src/components/ui/tooltip.tsx +1 -1
  216. package/templates/blank/src/constants/form-opts/locator-group-form-opts.ts +1 -1
  217. package/templates/blank/src/lib/locator-group-file-utils.ts +5 -1
  218. package/templates/blank/src/lib/locator-picker/session-manager.ts +1 -2
  219. package/templates/blank/src/lib/metrics/metric-calculator.test.ts +105 -6
  220. package/templates/blank/src/lib/metrics/metric-calculator.ts +39 -40
  221. package/templates/blank/src/lib/sync/sync-executor.ts +1 -4
  222. package/templates/blank/src/lib/sync/sync-pending-counts.test.ts +201 -7
  223. package/templates/blank/src/lib/sync/sync-pending-counts.ts +81 -13
  224. package/templates/blank/src/lib/template-automation-paths.ts +1 -1
  225. package/templates/blank/src/lib/template-sync-utils.d.ts +14 -7
  226. package/templates/blank/src/lib/test-case-utils.ts +6 -6
  227. package/templates/blank/src/lib/test-run/log-formatter.ts +82 -83
  228. package/templates/blank/src/lib/test-run/report-parser.ts +352 -352
  229. package/templates/blank/src/lib/transformers/gherkin-converter.ts +42 -42
  230. package/templates/blank/src/lib/transformers/key-to-icon-transformer.tsx +95 -95
  231. package/templates/blank/src/lib/utils/node-param-validation.ts +81 -81
  232. package/templates/blank/src/lib/utils/template-step-file-generator.ts +5 -3
  233. package/templates/blank/src/lib/utils/template-step-file-manager-intelligent.ts +11 -1
  234. package/templates/blank/src/services/dashboard/dashboard-service.test.ts +28 -1
  235. package/templates/blank/src/services/dashboard/dashboard-service.ts +2 -0
  236. package/templates/blank/src/services/locator/locator-service.test.ts +1 -3
  237. package/templates/blank/src/services/locator/locator-service.ts +3 -1
  238. package/templates/blank/src/services/locator/locator-sync-utils.test.ts +1 -4
  239. package/templates/blank/src/services/module/module-service.ts +1 -4
  240. package/templates/blank/src/services/report/report-service.test.ts +70 -6
  241. package/templates/blank/src/services/report/report-service.ts +52 -9
  242. package/templates/blank/src/services/shared/errors.ts +2 -4
  243. package/templates/blank/src/services/template-step/template-step-service.ts +3 -1
  244. package/templates/blank/src/services/template-step-group/template-step-group-service.ts +3 -1
  245. package/templates/blank/src/services/test-case/test-case-service.ts +0 -5
  246. package/templates/blank/src/services/test-run/test-run-service.test.ts +3 -6
  247. package/templates/blank/src/services/test-run/test-run-service.ts +12 -7
  248. package/templates/blank/src/services/test-suite/test-suite-service.test.ts +1 -5
  249. package/templates/blank/src/services/test-suite/test-suite-service.ts +2 -4
  250. package/templates/blank/src/types/form/actionHandler.ts +1 -5
  251. package/templates/blank/tsconfig.json +8 -8
  252. package/templates/default/packages/locator-picker-companion/dist/cli.d.ts +1 -1
  253. package/templates/default/packages/locator-picker-companion/dist/cli.js +313 -279
  254. package/templates/default/packages/locator-picker-companion/dist/index.d.ts +3 -3
  255. package/templates/default/packages/locator-picker-companion/dist/index.js +3 -3
  256. package/templates/default/packages/locator-picker-companion/dist/injected-picker-script.d.ts +1 -1
  257. package/templates/default/packages/locator-picker-companion/dist/injected-picker-script.js +526 -481
  258. package/templates/default/packages/locator-picker-companion/dist/launcher.d.ts +13 -10
  259. package/templates/default/packages/locator-picker-companion/dist/launcher.js +47 -48
  260. package/templates/default/packages/locator-picker-companion/dist/selector-generator.d.ts +6 -3
  261. package/templates/default/packages/locator-picker-companion/dist/selector-generator.js +233 -229
  262. package/templates/default/packages/locator-picker-companion/dist/session-file.d.ts +30 -22
  263. package/templates/default/packages/locator-picker-companion/dist/session-file.js +116 -104
  264. package/templates/default/packages/locator-picker-companion/dist/types.d.ts +25 -25
  265. package/templates/default/packages/locator-picker-companion/dist/types.js +1 -1
  266. package/templates/starter/.editorconfig +11 -0
  267. package/templates/starter/.gitattributes +21 -0
  268. package/templates/starter/.gitconfig.appraise +14 -0
  269. package/templates/starter/.prettierrc +13 -0
  270. package/templates/starter/.vscode/settings.json +2 -0
  271. package/templates/starter/README.md +12 -12
  272. package/templates/starter/automation/steps/actions/click.step.ts +56 -58
  273. package/templates/starter/automation/steps/actions/hover.step.ts +25 -27
  274. package/templates/starter/automation/steps/actions/input.step.ts +85 -108
  275. package/templates/starter/automation/steps/actions/navigation.step.ts +67 -70
  276. package/templates/starter/automation/steps/actions/random_data.step.ts +149 -143
  277. package/templates/starter/automation/steps/actions/store.step.ts +69 -1
  278. package/templates/starter/automation/steps/actions/wait.step.ts +84 -1
  279. package/templates/starter/automation/steps/validations/active_state_assertion.step.ts +28 -30
  280. package/templates/starter/automation/steps/validations/navigation_assertion.step.ts +20 -22
  281. package/templates/starter/automation/steps/validations/text_assertion.step.ts +67 -107
  282. package/templates/starter/automation/steps/validations/visibility_assertion.step.ts +24 -26
  283. package/templates/starter/components.json +24 -24
  284. package/templates/starter/cucumber.mjs +16 -16
  285. package/templates/starter/e2e/README.md +56 -0
  286. package/templates/starter/e2e/apply-migrations.mjs +76 -0
  287. package/templates/starter/e2e/appraise-smoke.spec.ts +78 -0
  288. package/templates/starter/e2e/authoring.spec.ts +53 -0
  289. package/templates/starter/e2e/crud-configuration.spec.ts +138 -0
  290. package/templates/starter/e2e/crud-tests.spec.ts +76 -0
  291. package/templates/starter/e2e/helpers/forms.ts +186 -0
  292. package/templates/starter/e2e/helpers/navigation.ts +27 -0
  293. package/templates/starter/e2e/helpers/table.ts +45 -0
  294. package/templates/starter/e2e/helpers/test-data.ts +549 -0
  295. package/templates/starter/e2e/helpers/ui.ts +41 -0
  296. package/templates/starter/e2e/navigation.spec.ts +101 -0
  297. package/templates/starter/e2e/runs-and-reports.spec.ts +82 -0
  298. package/templates/starter/e2e/settings-sync.spec.ts +39 -0
  299. package/templates/starter/e2e/start-server.mjs +61 -0
  300. package/templates/starter/eslint.config.mjs +4 -4
  301. package/templates/starter/gitignore +0 -3
  302. package/templates/starter/next-env.d.ts +1 -1
  303. package/templates/starter/package-lock.json +58 -102
  304. package/templates/starter/package.json +10 -9
  305. package/templates/starter/packages/cucumber-runtime/package.json +13 -13
  306. package/templates/starter/packages/cucumber-runtime/src/cache.util.ts +93 -93
  307. package/templates/starter/packages/cucumber-runtime/src/cli.ts +77 -68
  308. package/templates/starter/packages/cucumber-runtime/src/environment.util.ts +21 -21
  309. package/templates/starter/packages/cucumber-runtime/src/executor.ts +32 -32
  310. package/templates/starter/packages/cucumber-runtime/src/index.ts +17 -17
  311. package/templates/starter/packages/cucumber-runtime/src/locator.util.ts +234 -234
  312. package/templates/starter/packages/cucumber-runtime/src/parameter-types.ts +7 -7
  313. package/templates/starter/packages/cucumber-runtime/src/random-data.util.ts +35 -35
  314. package/templates/starter/packages/cucumber-runtime/src/types.ts +13 -13
  315. package/templates/starter/packages/cucumber-runtime/src/world.ts +44 -44
  316. package/templates/starter/packages/cucumber-runtime/tsconfig.json +11 -11
  317. package/templates/starter/packages/locator-picker-companion/dist/cli.js +1 -1
  318. package/templates/starter/packages/locator-picker-companion/dist/index.d.ts +3 -3
  319. package/templates/starter/packages/locator-picker-companion/dist/index.js +3 -3
  320. package/templates/starter/packages/locator-picker-companion/dist/injected-picker-script.js +13 -3
  321. package/templates/starter/packages/locator-picker-companion/dist/selector-generator.d.ts +6 -3
  322. package/templates/starter/packages/locator-picker-companion/dist/selector-generator.js +233 -229
  323. package/templates/starter/packages/locator-picker-companion/src/cli.ts +1 -7
  324. package/templates/starter/packages/locator-picker-companion/src/injected-picker-script.ts +26 -5
  325. package/templates/starter/packages/locator-picker-companion/src/launcher.ts +1 -3
  326. package/templates/starter/packages/locator-picker-companion/src/session-file.ts +4 -15
  327. package/templates/starter/packages/locator-picker-companion/src/types.ts +1 -8
  328. package/templates/starter/playwright.config.ts +46 -0
  329. package/templates/starter/postcss.config.mjs +8 -8
  330. package/templates/starter/prisma/dev.db +0 -0
  331. package/templates/starter/scripts/configure-git-line-endings.mjs +91 -0
  332. package/templates/starter/scripts/install-template-step.ts +5 -1
  333. package/templates/starter/scripts/lib/step-matcher.test.ts +3 -3
  334. package/templates/starter/scripts/lib/step-matcher.ts +5 -1
  335. package/templates/starter/scripts/lib/template-step-installer.test.ts +4 -2
  336. package/templates/starter/scripts/lib/template-step-installer.ts +16 -4
  337. package/templates/starter/scripts/lib/template-step-registry.test.ts +1 -1
  338. package/templates/starter/scripts/lib/template-step-registry.ts +4 -1
  339. package/templates/starter/scripts/run-fallow-commit.mjs +4 -6
  340. package/templates/starter/scripts/sync-all.ts +7 -6
  341. package/templates/starter/scripts/sync-appraise-base-template.ts +84 -77
  342. package/templates/starter/scripts/sync-environments.ts +47 -44
  343. package/templates/starter/scripts/sync-locator-groups.ts +67 -76
  344. package/templates/starter/scripts/sync-locators.ts +50 -53
  345. package/templates/starter/scripts/sync-modules.ts +42 -42
  346. package/templates/starter/scripts/sync-tags.ts +51 -51
  347. package/templates/starter/scripts/sync-template-step-groups.ts +34 -32
  348. package/templates/starter/scripts/sync-template-steps.ts +97 -97
  349. package/templates/starter/scripts/sync-test-cases.ts +65 -74
  350. package/templates/starter/scripts/sync-test-suites.ts +85 -80
  351. package/templates/starter/src/actions/server-action-boundary.test.ts +1 -7
  352. package/templates/starter/src/actions/settings/sync-actions.ts +3 -1
  353. package/templates/starter/src/actions/tags/tag-actions.ts +1 -7
  354. package/templates/starter/src/actions/template-test-case/template-test-case-actions.ts +3 -1
  355. package/templates/starter/src/app/(base)/environments/create/page.tsx +28 -28
  356. package/templates/starter/src/app/(base)/environments/environment-form.tsx +3 -2
  357. package/templates/starter/src/app/(base)/environments/environment-helpers.ts +4 -1
  358. package/templates/starter/src/app/(base)/layout.tsx +10 -10
  359. package/templates/starter/src/app/(base)/locator-groups/locator-group-form.tsx +5 -3
  360. package/templates/starter/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -77
  361. package/templates/starter/src/app/(base)/locator-groups/locator-group-table.tsx +28 -28
  362. package/templates/starter/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -46
  363. package/templates/starter/src/app/(base)/locator-groups/page.tsx +9 -19
  364. package/templates/starter/src/app/(base)/locators/create/create-locator-workspace-helpers.test.ts +3 -6
  365. package/templates/starter/src/app/(base)/locators/create/create-locator-workspace-response.ts +22 -5
  366. package/templates/starter/src/app/(base)/locators/create/create-locator-workspace-state.ts +5 -1
  367. package/templates/starter/src/app/(base)/locators/create/use-locator-workspace.ts +7 -2
  368. package/templates/starter/src/app/(base)/locators/locator-file-sync.ts +1 -5
  369. package/templates/starter/src/app/(base)/locators/locator-helpers.ts +2 -12
  370. package/templates/starter/src/app/(base)/locators/locator-table-columns.tsx +59 -60
  371. package/templates/starter/src/app/(base)/modules/module-form.tsx +3 -1
  372. package/templates/starter/src/app/(base)/reports/overview-chart.tsx +49 -49
  373. package/templates/starter/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +114 -115
  374. package/templates/starter/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -27
  375. package/templates/starter/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +80 -79
  376. package/templates/starter/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +29 -27
  377. package/templates/starter/src/app/(base)/settings/settings-sync-panel-helpers.test.tsx +4 -6
  378. package/templates/starter/src/app/(base)/settings/settings-sync-panel.tsx +22 -23
  379. package/templates/starter/src/app/(base)/tags/tag-form.test.tsx +2 -10
  380. package/templates/starter/src/app/(base)/tags/tag-form.tsx +5 -3
  381. package/templates/starter/src/app/(base)/tags/tag-table-columns.tsx +63 -63
  382. package/templates/starter/src/app/(base)/tags/tag-table.tsx +29 -29
  383. package/templates/starter/src/app/(base)/template-step-groups/create/page.tsx +28 -28
  384. package/templates/starter/src/app/(base)/template-step-groups/template-step-group-form.tsx +3 -1
  385. package/templates/starter/src/app/(base)/template-step-groups/template-step-group-helpers.ts +4 -1
  386. package/templates/starter/src/app/(base)/template-steps/paramChip.tsx +6 -10
  387. package/templates/starter/src/app/(base)/template-steps/template-step-form-helpers.ts +4 -2
  388. package/templates/starter/src/app/(base)/template-steps/template-step-helpers.test.ts +19 -1
  389. package/templates/starter/src/app/(base)/template-steps/template-step-helpers.ts +1 -5
  390. package/templates/starter/src/app/(base)/template-steps/template-step-row-guards.ts +1 -5
  391. package/templates/starter/src/app/(base)/template-steps/template-step-types.ts +1 -5
  392. package/templates/starter/src/app/(base)/template-test-cases/create-template-test-case-page-data.test.ts +4 -1
  393. package/templates/starter/src/app/(base)/template-test-cases/create-template-test-case-page-data.ts +1 -2
  394. package/templates/starter/src/app/(base)/template-test-cases/modify/[id]/page.tsx +1 -0
  395. package/templates/starter/src/app/(base)/template-test-cases/template-test-case-flow.test.tsx +0 -1
  396. package/templates/starter/src/app/(base)/template-test-cases/template-test-case-form.tsx +3 -1
  397. package/templates/starter/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -76
  398. package/templates/starter/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -32
  399. package/templates/starter/src/app/(base)/test-cases/create/page.tsx +1 -5
  400. package/templates/starter/src/app/(base)/test-cases/create-from-template/create-from-template-selection-helpers.ts +1 -4
  401. package/templates/starter/src/app/(base)/test-cases/create-from-template/page.test.tsx +2 -2
  402. package/templates/starter/src/app/(base)/test-cases/inline-tag-creation-dialog.tsx +1 -7
  403. package/templates/starter/src/app/(base)/test-cases/inline-test-suite-creation-dialog.tsx +1 -7
  404. package/templates/starter/src/app/(base)/test-cases/modify/[id]/page.tsx +1 -5
  405. package/templates/starter/src/app/(base)/test-cases/test-case-form.tsx +63 -78
  406. package/templates/starter/src/app/(base)/test-cases/test-case-route-helpers.test.ts +2 -7
  407. package/templates/starter/src/app/(base)/test-suites/editable-test-suite-helpers.ts +1 -6
  408. package/templates/starter/src/app/(base)/test-suites/test-suite-form.test.tsx +2 -10
  409. package/templates/starter/src/app/(dashboard-components)/data-card-grid.tsx +10 -10
  410. package/templates/starter/src/app/api/test-runs/[runId]/download/route.ts +1 -4
  411. package/templates/starter/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.test.ts +18 -9
  412. package/templates/starter/src/assets/icons/empty-tube.tsx +23 -23
  413. package/templates/starter/src/assets/icons/tube-plus.tsx +29 -29
  414. package/templates/starter/src/components/data-visualization/info-card.tsx +56 -70
  415. package/templates/starter/src/components/data-visualization/info-grid.tsx +22 -22
  416. package/templates/starter/src/components/diagram/add-node-prompt-node.tsx +1 -1
  417. package/templates/starter/src/components/diagram/dynamic-parameters-helpers.ts +4 -3
  418. package/templates/starter/src/components/diagram/dynamic-parameters.test.tsx +4 -1
  419. package/templates/starter/src/components/diagram/dynamic-parameters.tsx +0 -1
  420. package/templates/starter/src/components/diagram/flow-diagram-block-dialog.test.tsx +26 -0
  421. package/templates/starter/src/components/diagram/flow-diagram-block-dialog.tsx +3 -1
  422. package/templates/starter/src/components/diagram/flow-diagram-connection-guards.ts +24 -6
  423. package/templates/starter/src/components/diagram/flow-diagram-helpers.test.ts +27 -0
  424. package/templates/starter/src/components/diagram/flow-diagram-node-search.tsx +65 -65
  425. package/templates/starter/src/components/diagram/flow-diagram-toolbar.tsx +1 -3
  426. package/templates/starter/src/components/diagram/flow-diagram-view.tsx +1 -7
  427. package/templates/starter/src/components/diagram/flow-node-data-helpers.ts +1 -1
  428. package/templates/starter/src/components/diagram/node-form-fields-content.tsx +9 -2
  429. package/templates/starter/src/components/diagram/node-form-helpers.test.ts +3 -1
  430. package/templates/starter/src/components/diagram/node-form-helpers.ts +1 -4
  431. package/templates/starter/src/components/diagram/node-form-template-step-selection.ts +1 -4
  432. package/templates/starter/src/components/diagram/node-form.test.tsx +25 -0
  433. package/templates/starter/src/components/diagram/node-form.tsx +2 -12
  434. package/templates/starter/src/components/diagram/options-header-node.test.tsx +4 -1
  435. package/templates/starter/src/components/diagram/options-header-node.tsx +140 -130
  436. package/templates/starter/src/components/diagram/use-flow-diagram.ts +1 -2
  437. package/templates/starter/src/components/form/error-message.tsx +7 -7
  438. package/templates/starter/src/components/loading-skeleton/form/button-skeleton.tsx +8 -8
  439. package/templates/starter/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -8
  440. package/templates/starter/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -14
  441. package/templates/starter/src/components/navigation/entity-search-command.tsx +3 -9
  442. package/templates/starter/src/components/navigation/nav-link.tsx +60 -60
  443. package/templates/starter/src/components/test-case/test-case-form-helpers.test.ts +1 -5
  444. package/templates/starter/src/components/test-case/test-case-form-helpers.ts +1 -5
  445. package/templates/starter/src/components/test-case/test-case-picker-helpers.ts +8 -7
  446. package/templates/starter/src/components/test-case/test-case-picker.tsx +2 -6
  447. package/templates/starter/src/components/test-run/log-viewer.test.tsx +25 -0
  448. package/templates/starter/src/components/test-run/log-viewer.tsx +2 -2
  449. package/templates/starter/src/components/test-run/test-run-details-guards.ts +10 -1
  450. package/templates/starter/src/components/test-run/test-run-details.test.tsx +9 -19
  451. package/templates/starter/src/components/test-run/use-log-viewer.ts +2 -8
  452. package/templates/starter/src/components/test-run/use-test-run-header.ts +1 -4
  453. package/templates/starter/src/components/test-suite/test-suite-picker.tsx +1 -1
  454. package/templates/starter/src/components/theme/theme-provider.tsx +7 -1
  455. package/templates/starter/src/components/typography/page-header-subtitle.tsx +7 -7
  456. package/templates/starter/src/components/typography/page-header.tsx +7 -7
  457. package/templates/starter/src/components/ui/chart.tsx +2 -8
  458. package/templates/starter/src/components/ui/command.tsx +2 -5
  459. package/templates/starter/src/components/ui/data-table-column-header.tsx +3 -3
  460. package/templates/starter/src/components/ui/data-table.test.tsx +1 -8
  461. package/templates/starter/src/components/ui/dialog.tsx +1 -4
  462. package/templates/starter/src/components/ui/select.tsx +2 -2
  463. package/templates/starter/src/components/ui/separator.tsx +5 -1
  464. package/templates/starter/src/components/ui/skeleton.tsx +7 -7
  465. package/templates/starter/src/components/ui/table.tsx +1 -1
  466. package/templates/starter/src/components/ui/toaster.tsx +26 -26
  467. package/templates/starter/src/components/ui/tooltip.tsx +1 -1
  468. package/templates/starter/src/constants/form-opts/locator-group-form-opts.ts +1 -1
  469. package/templates/starter/src/lib/locator-group-file-utils.ts +5 -1
  470. package/templates/starter/src/lib/locator-picker/session-manager.ts +1 -2
  471. package/templates/starter/src/lib/metrics/metric-calculator.test.ts +105 -6
  472. package/templates/starter/src/lib/metrics/metric-calculator.ts +39 -40
  473. package/templates/starter/src/lib/sync/sync-executor.ts +1 -4
  474. package/templates/starter/src/lib/sync/sync-pending-counts.test.ts +201 -7
  475. package/templates/starter/src/lib/sync/sync-pending-counts.ts +81 -13
  476. package/templates/starter/src/lib/template-automation-paths.ts +1 -1
  477. package/templates/starter/src/lib/template-sync-utils.d.ts +14 -7
  478. package/templates/starter/src/lib/test-case-utils.ts +6 -6
  479. package/templates/starter/src/lib/test-run/log-formatter.ts +82 -83
  480. package/templates/starter/src/lib/test-run/report-parser.ts +352 -352
  481. package/templates/starter/src/lib/transformers/gherkin-converter.ts +42 -42
  482. package/templates/starter/src/lib/transformers/key-to-icon-transformer.tsx +95 -95
  483. package/templates/starter/src/lib/utils/node-param-validation.ts +81 -81
  484. package/templates/starter/src/lib/utils/template-step-file-generator.ts +5 -3
  485. package/templates/starter/src/lib/utils/template-step-file-manager-intelligent.ts +11 -1
  486. package/templates/starter/src/services/dashboard/dashboard-service.test.ts +28 -1
  487. package/templates/starter/src/services/dashboard/dashboard-service.ts +2 -0
  488. package/templates/starter/src/services/locator/locator-service.test.ts +1 -3
  489. package/templates/starter/src/services/locator/locator-service.ts +3 -1
  490. package/templates/starter/src/services/locator/locator-sync-utils.test.ts +1 -4
  491. package/templates/starter/src/services/module/module-service.ts +1 -4
  492. package/templates/starter/src/services/report/report-service.test.ts +70 -6
  493. package/templates/starter/src/services/report/report-service.ts +52 -9
  494. package/templates/starter/src/services/shared/errors.ts +2 -4
  495. package/templates/starter/src/services/template-step/template-step-service.ts +3 -1
  496. package/templates/starter/src/services/template-step-group/template-step-group-service.ts +3 -1
  497. package/templates/starter/src/services/test-case/test-case-service.ts +0 -5
  498. package/templates/starter/src/services/test-run/test-run-service.test.ts +3 -6
  499. package/templates/starter/src/services/test-run/test-run-service.ts +12 -7
  500. package/templates/starter/src/services/test-suite/test-suite-service.test.ts +1 -5
  501. package/templates/starter/src/services/test-suite/test-suite-service.ts +2 -4
  502. package/templates/starter/src/types/form/actionHandler.ts +1 -5
  503. package/templates/starter/tsconfig.json +8 -8
@@ -0,0 +1,82 @@
1
+ import { test, expect } from '@playwright/test'
2
+
3
+ import { disconnectPrisma, findTestRunById, resetE2eData, seedCoreData, seededIds } from './helpers/test-data'
4
+ import { expectPageHeading } from './helpers/ui'
5
+
6
+ test.describe('Runs and reports @runs', () => {
7
+ test.beforeEach(async () => {
8
+ await resetE2eData()
9
+ await seedCoreData()
10
+ })
11
+
12
+ test.afterAll(async () => {
13
+ await disconnectPrisma()
14
+ })
15
+
16
+ test('test runs list shows seeded variants and recent failed filter', async ({ page }) => {
17
+ await page.goto('/test-runs')
18
+ await expectPageHeading(page, 'Test Runs')
19
+ await expect(page.getByText('E2E Completed Run', { exact: true }).first()).toBeVisible()
20
+ await expect(page.getByText('E2E Failed Run', { exact: true }).first()).toBeVisible()
21
+ await expect(page.getByText('E2E Queued Run', { exact: true }).first()).toBeVisible()
22
+ await expect(page.getByText('E2E Running Run', { exact: true }).first()).toBeVisible()
23
+
24
+ await page.goto('/test-runs?filter=recentFailed')
25
+ await expect(page.getByText('E2E Failed Run', { exact: true }).first()).toBeVisible()
26
+ await expect(page.getByText('E2E Completed Run', { exact: true }).first()).toBeHidden()
27
+ })
28
+
29
+ test('test run detail shows status logs and report navigation', async ({ page }) => {
30
+ await page.goto(`/test-runs/${seededIds.testRun}`)
31
+ await expectPageHeading(page, 'Test Run Details')
32
+ await expect(page.getByText('E2E Completed Run')).toBeVisible()
33
+ await expect(page.getByText('Finished', { exact: true }).first()).toBeVisible()
34
+ await expect(page.getByText('E2E seeded run started')).toBeVisible()
35
+ await expect(page.getByText('E2E seeded login works')).toBeVisible()
36
+
37
+ await page.getByRole('link', { name: /View Report/ }).click()
38
+ await expectPageHeading(page, /Test Run Report:/)
39
+ await expect(page.getByText('Total Tests')).toBeVisible()
40
+ })
41
+
42
+ test('create test run form loads selections without starting execution', async ({ page }) => {
43
+ await page.goto('/test-runs/create')
44
+ await expectPageHeading(page, 'Create Test Run')
45
+ await page.getByLabel('Name').fill('E2E Draft Run')
46
+ await page.getByLabel('Environment').click()
47
+ await page.getByRole('option', { name: 'E2E Local' }).click()
48
+ await page.getByRole('combobox', { name: 'Test tags' }).click()
49
+ await page.getByRole('option', { name: 'E2E Smoke' }).click()
50
+ await expect(page.getByRole('button', { name: 'Start' })).toBeVisible()
51
+ })
52
+
53
+ test('reports list and metric drill-down pages render seeded data', async ({ page }) => {
54
+ await page.goto('/reports')
55
+ await expectPageHeading(page, 'Reports')
56
+ await expect(page.getByText('E2E Completed Run', { exact: true }).first()).toBeVisible()
57
+
58
+ await page.goto('/reports/test-cases?filter=repeatedlyFailing')
59
+ await expectPageHeading(page, 'Failing Test Cases Report')
60
+ await expect(page.getByText('E2E seeded login works', { exact: true }).first()).toBeVisible()
61
+
62
+ await page.goto('/reports/test-cases?filter=flaky')
63
+ await expect(page.getByText('E2E seeded login works', { exact: true }).first()).toBeVisible()
64
+
65
+ await page.goto('/reports/test-suites?filter=notExecutedRecently')
66
+ await expectPageHeading(page, 'Test Suites Report')
67
+ await expect(page.getByText('E2E Auth Suite', { exact: true }).first()).toBeVisible()
68
+ })
69
+
70
+ test('cancel run updates seeded running run status', async ({ page }) => {
71
+ await page.goto(`/test-runs/${seededIds.runningTestRun}`)
72
+ await expectPageHeading(page, 'Test Run Details')
73
+ await page.getByRole('button', { name: /Cancel Run/i }).click()
74
+
75
+ await expect
76
+ .poll(async () => {
77
+ const run = await findTestRunById(seededIds.runningTestRun)
78
+ return run?.status
79
+ })
80
+ .toMatch(/CANCELLED|CANCELLING/)
81
+ })
82
+ })
@@ -0,0 +1,39 @@
1
+ import { test, expect } from '@playwright/test'
2
+
3
+ import { disconnectPrisma, resetE2eData, seedCoreData } from './helpers/test-data'
4
+
5
+ const syncScriptLabels = [
6
+ 'Sync Modules',
7
+ 'Sync Environments',
8
+ 'Sync Tags',
9
+ 'Sync Template Step Groups',
10
+ 'Sync Template Steps',
11
+ 'Sync Locator Groups',
12
+ 'Sync Locators',
13
+ 'Sync Test Suites',
14
+ 'Sync Test Cases',
15
+ ] as const
16
+ import { expectPageHeading } from './helpers/ui'
17
+
18
+ test.describe('Settings sync @sync', () => {
19
+ test.beforeEach(async () => {
20
+ await resetE2eData()
21
+ await seedCoreData()
22
+ })
23
+
24
+ test.afterAll(async () => {
25
+ await disconnectPrisma()
26
+ })
27
+
28
+ for (const label of syncScriptLabels) {
29
+ test(`sync script ${label} completes`, async ({ page }) => {
30
+ test.setTimeout(120_000)
31
+
32
+ await page.goto('/settings')
33
+ await expectPageHeading(page, 'Settings')
34
+ await page.getByRole('button', { name: label, exact: true }).click()
35
+ await expect(page.getByText(/Sync completed|Sync failed/).first()).toBeVisible({ timeout: 90_000 })
36
+ await expect(page.getByText(/fatal|uncaught/i)).toHaveCount(0)
37
+ })
38
+ }
39
+ })
@@ -0,0 +1,61 @@
1
+ import { rmSync } from 'node:fs'
2
+ import { isAbsolute, resolve } from 'node:path'
3
+ import { spawn, spawnSync } from 'node:child_process'
4
+
5
+ const port = process.argv[2] ?? '3200'
6
+ const databaseUrl = process.env.DATABASE_URL ?? 'file:./e2e.db'
7
+
8
+ function sqlitePathFromDatabaseUrl(value) {
9
+ if (!value.startsWith('file:')) {
10
+ return null
11
+ }
12
+
13
+ const sqlitePath = value.replace(/^file:/, '')
14
+ return isAbsolute(sqlitePath) ? sqlitePath : resolve(process.cwd(), 'prisma', sqlitePath)
15
+ }
16
+
17
+ function run(command, args) {
18
+ const result = spawnSync(command, args, {
19
+ cwd: process.cwd(),
20
+ stdio: 'inherit',
21
+ shell: false,
22
+ env: {
23
+ ...process.env,
24
+ DATABASE_URL: databaseUrl,
25
+ },
26
+ })
27
+
28
+ if (result.status !== 0) {
29
+ process.exit(result.status ?? 1)
30
+ }
31
+ }
32
+
33
+ const sqlitePath = sqlitePathFromDatabaseUrl(databaseUrl)
34
+ if (sqlitePath) {
35
+ rmSync(sqlitePath, { force: true })
36
+ rmSync(`${sqlitePath}-journal`, { force: true })
37
+ }
38
+
39
+ run(process.execPath, ['e2e/apply-migrations.mjs'])
40
+
41
+ const server = spawn('npx', ['next', 'start', '-p', port], {
42
+ cwd: process.cwd(),
43
+ stdio: 'inherit',
44
+ shell: process.platform === 'win32',
45
+ env: {
46
+ ...process.env,
47
+ DATABASE_URL: databaseUrl,
48
+ ENVIRONMENT: 'local',
49
+ NEXT_TELEMETRY_DISABLED: '1',
50
+ },
51
+ })
52
+
53
+ server.on('exit', code => {
54
+ process.exit(code ?? 0)
55
+ })
56
+
57
+ for (const signal of ['SIGINT', 'SIGTERM']) {
58
+ process.on(signal, () => {
59
+ server.kill(signal)
60
+ })
61
+ }
@@ -1,5 +1,5 @@
1
- import nextCoreWebVitals from 'eslint-config-next/core-web-vitals';
2
- import nextTypescript from 'eslint-config-next/typescript';
1
+ import nextCoreWebVitals from 'eslint-config-next/core-web-vitals'
2
+ import nextTypescript from 'eslint-config-next/typescript'
3
3
 
4
4
  const eslintConfig = [
5
5
  ...nextCoreWebVitals,
@@ -15,6 +15,6 @@ const eslintConfig = [
15
15
  'packages/create-appraisejs/templates/**/*',
16
16
  ],
17
17
  },
18
- ];
18
+ ]
19
19
 
20
- export default eslintConfig;
20
+ export default eslintConfig
@@ -55,8 +55,5 @@ packages/cucumber-runtime/dist/*
55
55
  # temporary files
56
56
  .tmp
57
57
  .fallow
58
-
59
- # graphify knowledge graph output (regenerate with: graphify extract .)
60
- /graphify-out/
61
58
  !prisma/dev.db
62
59
  !automation/config/environments/environments.json
@@ -1,6 +1,6 @@
1
1
  /// <reference types="next" />
2
2
  /// <reference types="next/image-types/global" />
3
- import "./.next/dev/types/routes.d.ts";
3
+ import "./.next/types/routes.d.ts";
4
4
 
5
5
  // NOTE: This file should not be edited
6
6
  // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
@@ -35,6 +35,8 @@
35
35
  "@uiw/react-codemirror": "^4.25.4",
36
36
  "@xyflow/react": "^12.4.4",
37
37
  "archiver": "^7.0.1",
38
+ "chai": "^6.2.2",
39
+ "chai-as-promised": "^8.0.2",
38
40
  "class-variance-authority": "^0.7.1",
39
41
  "clsx": "^2.1.1",
40
42
  "cmdk": "^1.1.1",
@@ -55,6 +57,7 @@
55
57
  "devDependencies": {
56
58
  "@babel/traverse": "^7.28.5",
57
59
  "@cucumber/cucumber": "^12.8.3",
60
+ "@playwright/test": "^1.58.0",
58
61
  "@testing-library/dom": "^10.4.1",
59
62
  "@testing-library/jest-dom": "^6.9.1",
60
63
  "@testing-library/react": "^16.3.2",
@@ -3012,9 +3015,6 @@
3012
3015
  "cpu": [
3013
3016
  "arm64"
3014
3017
  ],
3015
- "libc": [
3016
- "glibc"
3017
- ],
3018
3018
  "license": "MIT",
3019
3019
  "optional": true,
3020
3020
  "os": [
@@ -3031,9 +3031,6 @@
3031
3031
  "cpu": [
3032
3032
  "arm64"
3033
3033
  ],
3034
- "libc": [
3035
- "musl"
3036
- ],
3037
3034
  "license": "MIT",
3038
3035
  "optional": true,
3039
3036
  "os": [
@@ -3050,9 +3047,6 @@
3050
3047
  "cpu": [
3051
3048
  "x64"
3052
3049
  ],
3053
- "libc": [
3054
- "glibc"
3055
- ],
3056
3050
  "license": "MIT",
3057
3051
  "optional": true,
3058
3052
  "os": [
@@ -3069,9 +3063,6 @@
3069
3063
  "cpu": [
3070
3064
  "x64"
3071
3065
  ],
3072
- "libc": [
3073
- "musl"
3074
- ],
3075
3066
  "license": "MIT",
3076
3067
  "optional": true,
3077
3068
  "os": [
@@ -3288,9 +3279,6 @@
3288
3279
  "arm64"
3289
3280
  ],
3290
3281
  "dev": true,
3291
- "libc": [
3292
- "glibc"
3293
- ],
3294
3282
  "license": "MIT",
3295
3283
  "optional": true,
3296
3284
  "os": [
@@ -3308,9 +3296,6 @@
3308
3296
  "arm64"
3309
3297
  ],
3310
3298
  "dev": true,
3311
- "libc": [
3312
- "musl"
3313
- ],
3314
3299
  "license": "MIT",
3315
3300
  "optional": true,
3316
3301
  "os": [
@@ -3328,9 +3313,6 @@
3328
3313
  "ppc64"
3329
3314
  ],
3330
3315
  "dev": true,
3331
- "libc": [
3332
- "glibc"
3333
- ],
3334
3316
  "license": "MIT",
3335
3317
  "optional": true,
3336
3318
  "os": [
@@ -3348,9 +3330,6 @@
3348
3330
  "riscv64"
3349
3331
  ],
3350
3332
  "dev": true,
3351
- "libc": [
3352
- "glibc"
3353
- ],
3354
3333
  "license": "MIT",
3355
3334
  "optional": true,
3356
3335
  "os": [
@@ -3368,9 +3347,6 @@
3368
3347
  "riscv64"
3369
3348
  ],
3370
3349
  "dev": true,
3371
- "libc": [
3372
- "musl"
3373
- ],
3374
3350
  "license": "MIT",
3375
3351
  "optional": true,
3376
3352
  "os": [
@@ -3388,9 +3364,6 @@
3388
3364
  "s390x"
3389
3365
  ],
3390
3366
  "dev": true,
3391
- "libc": [
3392
- "glibc"
3393
- ],
3394
3367
  "license": "MIT",
3395
3368
  "optional": true,
3396
3369
  "os": [
@@ -3408,9 +3381,6 @@
3408
3381
  "x64"
3409
3382
  ],
3410
3383
  "dev": true,
3411
- "libc": [
3412
- "glibc"
3413
- ],
3414
3384
  "license": "MIT",
3415
3385
  "optional": true,
3416
3386
  "os": [
@@ -3428,9 +3398,6 @@
3428
3398
  "x64"
3429
3399
  ],
3430
3400
  "dev": true,
3431
- "libc": [
3432
- "musl"
3433
- ],
3434
3401
  "license": "MIT",
3435
3402
  "optional": true,
3436
3403
  "os": [
@@ -3666,9 +3633,6 @@
3666
3633
  "arm64"
3667
3634
  ],
3668
3635
  "dev": true,
3669
- "libc": [
3670
- "glibc"
3671
- ],
3672
3636
  "license": "MIT",
3673
3637
  "optional": true,
3674
3638
  "os": [
@@ -3683,9 +3647,6 @@
3683
3647
  "arm64"
3684
3648
  ],
3685
3649
  "dev": true,
3686
- "libc": [
3687
- "musl"
3688
- ],
3689
3650
  "license": "MIT",
3690
3651
  "optional": true,
3691
3652
  "os": [
@@ -3700,9 +3661,6 @@
3700
3661
  "ppc64"
3701
3662
  ],
3702
3663
  "dev": true,
3703
- "libc": [
3704
- "glibc"
3705
- ],
3706
3664
  "license": "MIT",
3707
3665
  "optional": true,
3708
3666
  "os": [
@@ -3717,9 +3675,6 @@
3717
3675
  "riscv64"
3718
3676
  ],
3719
3677
  "dev": true,
3720
- "libc": [
3721
- "glibc"
3722
- ],
3723
3678
  "license": "MIT",
3724
3679
  "optional": true,
3725
3680
  "os": [
@@ -3734,9 +3689,6 @@
3734
3689
  "riscv64"
3735
3690
  ],
3736
3691
  "dev": true,
3737
- "libc": [
3738
- "musl"
3739
- ],
3740
3692
  "license": "MIT",
3741
3693
  "optional": true,
3742
3694
  "os": [
@@ -3751,9 +3703,6 @@
3751
3703
  "s390x"
3752
3704
  ],
3753
3705
  "dev": true,
3754
- "libc": [
3755
- "glibc"
3756
- ],
3757
3706
  "license": "MIT",
3758
3707
  "optional": true,
3759
3708
  "os": [
@@ -3768,9 +3717,6 @@
3768
3717
  "x64"
3769
3718
  ],
3770
3719
  "dev": true,
3771
- "libc": [
3772
- "glibc"
3773
- ],
3774
3720
  "license": "MIT",
3775
3721
  "optional": true,
3776
3722
  "os": [
@@ -3785,9 +3731,6 @@
3785
3731
  "x64"
3786
3732
  ],
3787
3733
  "dev": true,
3788
- "libc": [
3789
- "musl"
3790
- ],
3791
3734
  "license": "MIT",
3792
3735
  "optional": true,
3793
3736
  "os": [
@@ -3994,9 +3937,6 @@
3994
3937
  "arm64"
3995
3938
  ],
3996
3939
  "dev": true,
3997
- "libc": [
3998
- "glibc"
3999
- ],
4000
3940
  "license": "MIT",
4001
3941
  "optional": true,
4002
3942
  "os": [
@@ -4014,9 +3954,6 @@
4014
3954
  "arm64"
4015
3955
  ],
4016
3956
  "dev": true,
4017
- "libc": [
4018
- "musl"
4019
- ],
4020
3957
  "license": "MIT",
4021
3958
  "optional": true,
4022
3959
  "os": [
@@ -4034,9 +3971,6 @@
4034
3971
  "ppc64"
4035
3972
  ],
4036
3973
  "dev": true,
4037
- "libc": [
4038
- "glibc"
4039
- ],
4040
3974
  "license": "MIT",
4041
3975
  "optional": true,
4042
3976
  "os": [
@@ -4054,9 +3988,6 @@
4054
3988
  "riscv64"
4055
3989
  ],
4056
3990
  "dev": true,
4057
- "libc": [
4058
- "glibc"
4059
- ],
4060
3991
  "license": "MIT",
4061
3992
  "optional": true,
4062
3993
  "os": [
@@ -4074,9 +4005,6 @@
4074
4005
  "riscv64"
4075
4006
  ],
4076
4007
  "dev": true,
4077
- "libc": [
4078
- "musl"
4079
- ],
4080
4008
  "license": "MIT",
4081
4009
  "optional": true,
4082
4010
  "os": [
@@ -4094,9 +4022,6 @@
4094
4022
  "s390x"
4095
4023
  ],
4096
4024
  "dev": true,
4097
- "libc": [
4098
- "glibc"
4099
- ],
4100
4025
  "license": "MIT",
4101
4026
  "optional": true,
4102
4027
  "os": [
@@ -4114,9 +4039,6 @@
4114
4039
  "x64"
4115
4040
  ],
4116
4041
  "dev": true,
4117
- "libc": [
4118
- "glibc"
4119
- ],
4120
4042
  "license": "MIT",
4121
4043
  "optional": true,
4122
4044
  "os": [
@@ -4134,9 +4056,6 @@
4134
4056
  "x64"
4135
4057
  ],
4136
4058
  "dev": true,
4137
- "libc": [
4138
- "musl"
4139
- ],
4140
4059
  "license": "MIT",
4141
4060
  "optional": true,
4142
4061
  "os": [
@@ -4224,6 +4143,22 @@
4224
4143
  "node": ">=14"
4225
4144
  }
4226
4145
  },
4146
+ "node_modules/@playwright/test": {
4147
+ "version": "1.58.0",
4148
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.0.tgz",
4149
+ "integrity": "sha512-fWza+Lpbj6SkQKCrU6si4iu+fD2dD3gxNHFhUPxsfXBPhnv3rRSQVd0NtBUT9Z/RhF/boCBcuUaMUSTRTopjZg==",
4150
+ "dev": true,
4151
+ "license": "Apache-2.0",
4152
+ "dependencies": {
4153
+ "playwright": "1.58.0"
4154
+ },
4155
+ "bin": {
4156
+ "playwright": "cli.js"
4157
+ },
4158
+ "engines": {
4159
+ "node": ">=18"
4160
+ }
4161
+ },
4227
4162
  "node_modules/@prisma/client": {
4228
4163
  "version": "6.2.1",
4229
4164
  "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.2.1.tgz",
@@ -4246,14 +4181,14 @@
4246
4181
  "version": "6.2.1",
4247
4182
  "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.2.1.tgz",
4248
4183
  "integrity": "sha512-0KItvt39CmQxWkEw6oW+RQMD6RZ43SJWgEUnzxN8VC9ixMysa7MzZCZf22LCK5DSooiLNf8vM3LHZm/I/Ni7bQ==",
4249
- "devOptional": true,
4184
+ "dev": true,
4250
4185
  "license": "Apache-2.0"
4251
4186
  },
4252
4187
  "node_modules/@prisma/engines": {
4253
4188
  "version": "6.2.1",
4254
4189
  "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.2.1.tgz",
4255
4190
  "integrity": "sha512-lTBNLJBCxVT9iP5I7Mn6GlwqAxTpS5qMERrhebkUhtXpGVkBNd/jHnNJBZQW4kGDCKaQg/r2vlJYkzOHnAb7ZQ==",
4256
- "devOptional": true,
4191
+ "dev": true,
4257
4192
  "hasInstallScript": true,
4258
4193
  "license": "Apache-2.0",
4259
4194
  "dependencies": {
@@ -4267,14 +4202,14 @@
4267
4202
  "version": "6.2.0-14.4123509d24aa4dede1e864b46351bf2790323b69",
4268
4203
  "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.2.0-14.4123509d24aa4dede1e864b46351bf2790323b69.tgz",
4269
4204
  "integrity": "sha512-7tw1qs/9GWSX6qbZs4He09TOTg1ff3gYsB3ubaVNN0Pp1zLm9NC5C5MZShtkz7TyQjx7blhpknB7HwEhlG+PrQ==",
4270
- "devOptional": true,
4205
+ "dev": true,
4271
4206
  "license": "Apache-2.0"
4272
4207
  },
4273
4208
  "node_modules/@prisma/fetch-engine": {
4274
4209
  "version": "6.2.1",
4275
4210
  "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.2.1.tgz",
4276
4211
  "integrity": "sha512-OO7O9d6Mrx2F9i+Gu1LW+DGXXyUFkP7OE5aj9iBfA/2jjDXEJjqa9X0ZmM9NZNo8Uo7ql6zKm6yjDcbAcRrw1A==",
4277
- "devOptional": true,
4212
+ "dev": true,
4278
4213
  "license": "Apache-2.0",
4279
4214
  "dependencies": {
4280
4215
  "@prisma/debug": "6.2.1",
@@ -4286,7 +4221,7 @@
4286
4221
  "version": "6.2.1",
4287
4222
  "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.2.1.tgz",
4288
4223
  "integrity": "sha512-zp53yvroPl5m5/gXYLz7tGCNG33bhG+JYCm74ohxOq1pPnrL47VQYFfF3RbTZ7TzGWCrR3EtoiYMywUBw7UK6Q==",
4289
- "devOptional": true,
4224
+ "dev": true,
4290
4225
  "license": "Apache-2.0",
4291
4226
  "dependencies": {
4292
4227
  "@prisma/debug": "6.2.1"
@@ -6313,7 +6248,7 @@
6313
6248
  "version": "19.2.7",
6314
6249
  "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz",
6315
6250
  "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==",
6316
- "devOptional": true,
6251
+ "dev": true,
6317
6252
  "license": "MIT",
6318
6253
  "dependencies": {
6319
6254
  "csstype": "^3.2.2"
@@ -6323,7 +6258,7 @@
6323
6258
  "version": "19.2.3",
6324
6259
  "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
6325
6260
  "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
6326
- "devOptional": true,
6261
+ "dev": true,
6327
6262
  "license": "MIT",
6328
6263
  "peerDependencies": {
6329
6264
  "@types/react": "^19.2.0"
@@ -6710,16 +6645,6 @@
6710
6645
  "url": "https://opencollective.com/vitest"
6711
6646
  }
6712
6647
  },
6713
- "node_modules/@vitest/expect/node_modules/chai": {
6714
- "version": "6.2.2",
6715
- "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz",
6716
- "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==",
6717
- "dev": true,
6718
- "license": "MIT",
6719
- "engines": {
6720
- "node": ">=18"
6721
- }
6722
- },
6723
6648
  "node_modules/@vitest/pretty-format": {
6724
6649
  "version": "4.1.4",
6725
6650
  "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.4.tgz",
@@ -7666,6 +7591,27 @@
7666
7591
  "upper-case-first": "^2.0.2"
7667
7592
  }
7668
7593
  },
7594
+ "node_modules/chai": {
7595
+ "version": "6.2.2",
7596
+ "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz",
7597
+ "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==",
7598
+ "license": "MIT",
7599
+ "engines": {
7600
+ "node": ">=18"
7601
+ }
7602
+ },
7603
+ "node_modules/chai-as-promised": {
7604
+ "version": "8.0.2",
7605
+ "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-8.0.2.tgz",
7606
+ "integrity": "sha512-1GadL+sEJVLzDjcawPM4kjfnL+p/9vrxiEUonowKOAzvVg0PixJUdtuDzdkDeQhK3zfOE76GqGkZIQ7/Adcrqw==",
7607
+ "license": "MIT",
7608
+ "dependencies": {
7609
+ "check-error": "^2.1.1"
7610
+ },
7611
+ "peerDependencies": {
7612
+ "chai": ">= 2.1.2 < 7"
7613
+ }
7614
+ },
7669
7615
  "node_modules/chalk": {
7670
7616
  "version": "4.1.2",
7671
7617
  "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -7683,6 +7629,15 @@
7683
7629
  "url": "https://github.com/chalk/chalk?sponsor=1"
7684
7630
  }
7685
7631
  },
7632
+ "node_modules/check-error": {
7633
+ "version": "2.1.3",
7634
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz",
7635
+ "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==",
7636
+ "license": "MIT",
7637
+ "engines": {
7638
+ "node": ">= 16"
7639
+ }
7640
+ },
7686
7641
  "node_modules/chokidar": {
7687
7642
  "version": "3.6.0",
7688
7643
  "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
@@ -9867,6 +9822,7 @@
9867
9822
  "version": "2.3.3",
9868
9823
  "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
9869
9824
  "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
9825
+ "dev": true,
9870
9826
  "hasInstallScript": true,
9871
9827
  "license": "MIT",
9872
9828
  "optional": true,
@@ -13139,7 +13095,7 @@
13139
13095
  "version": "6.2.1",
13140
13096
  "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.2.1.tgz",
13141
13097
  "integrity": "sha512-hhyM0H13pQleQ+br4CkzGizS5I0oInoeTw3JfLw1BRZduBSQxPILlJLwi+46wZzj9Je7ndyQEMGw/n5cN2fknA==",
13142
- "devOptional": true,
13098
+ "dev": true,
13143
13099
  "hasInstallScript": true,
13144
13100
  "license": "Apache-2.0",
13145
13101
  "dependencies": {