create-appraisejs 0.1.10-alpha.9 → 0.2.0-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 (334) hide show
  1. package/README.md +52 -52
  2. package/dist/cli.e2e.test.d.ts +2 -0
  3. package/dist/cli.e2e.test.d.ts.map +1 -0
  4. package/dist/cli.e2e.test.js +73 -0
  5. package/dist/cli.e2e.test.js.map +1 -0
  6. package/dist/config.test.d.ts +2 -0
  7. package/dist/config.test.d.ts.map +1 -0
  8. package/dist/config.test.js +65 -0
  9. package/dist/config.test.js.map +1 -0
  10. package/dist/copy-template.test.d.ts +2 -0
  11. package/dist/copy-template.test.d.ts.map +1 -0
  12. package/dist/copy-template.test.js +71 -0
  13. package/dist/copy-template.test.js.map +1 -0
  14. package/dist/download-repo.test.d.ts +2 -0
  15. package/dist/download-repo.test.d.ts.map +1 -0
  16. package/dist/download-repo.test.js +14 -0
  17. package/dist/download-repo.test.js.map +1 -0
  18. package/dist/install.test.d.ts +2 -0
  19. package/dist/install.test.d.ts.map +1 -0
  20. package/dist/install.test.js +119 -0
  21. package/dist/install.test.js.map +1 -0
  22. package/dist/prepare-template-utils.d.ts.map +1 -1
  23. package/dist/prepare-template-utils.js +5 -0
  24. package/dist/prepare-template-utils.js.map +1 -1
  25. package/dist/prompts.test.d.ts +2 -0
  26. package/dist/prompts.test.d.ts.map +1 -0
  27. package/dist/prompts.test.js +58 -0
  28. package/dist/prompts.test.js.map +1 -0
  29. package/dist/scaffold-gitignore.d.ts +1 -0
  30. package/dist/scaffold-gitignore.d.ts.map +1 -1
  31. package/dist/scaffold-gitignore.js +3 -0
  32. package/dist/scaffold-gitignore.js.map +1 -1
  33. package/package.json +3 -2
  34. package/templates/default/.appraise-template-meta.json +2 -2
  35. package/templates/default/.env.example +2 -2
  36. package/templates/default/README.md +53 -53
  37. package/templates/default/automation/mapping/locator-map.json +1 -18
  38. package/templates/default/automation/steps/actions/click.step.ts +58 -58
  39. package/templates/default/automation/steps/actions/hover.step.ts +27 -27
  40. package/templates/default/automation/steps/actions/input.step.ts +84 -84
  41. package/templates/default/automation/steps/actions/navigation.step.ts +70 -70
  42. package/templates/default/automation/steps/actions/random_data.step.ts +142 -142
  43. package/templates/default/automation/steps/actions/store.step.ts +86 -86
  44. package/templates/default/automation/steps/actions/wait.step.ts +90 -90
  45. package/templates/default/automation/steps/validations/active_state_assertion.step.ts +30 -30
  46. package/templates/default/automation/steps/validations/navigation_assertion.step.ts +22 -22
  47. package/templates/default/automation/steps/validations/text_assertion.step.ts +107 -107
  48. package/templates/default/automation/steps/validations/visibility_assertion.step.ts +26 -26
  49. package/templates/default/components.json +24 -24
  50. package/templates/default/cucumber.mjs +16 -16
  51. package/templates/default/eslint.config.mjs +16 -16
  52. package/templates/default/next-env.d.ts +6 -6
  53. package/templates/default/next.config.ts +11 -11
  54. package/templates/default/package-lock.json +51 -48
  55. package/templates/default/packages/cucumber-runtime/package.json +13 -13
  56. package/templates/default/packages/cucumber-runtime/src/cache.util.ts +93 -93
  57. package/templates/default/packages/cucumber-runtime/src/cli.ts +68 -68
  58. package/templates/default/packages/cucumber-runtime/src/environment.util.ts +21 -21
  59. package/templates/default/packages/cucumber-runtime/src/executor.ts +32 -32
  60. package/templates/default/packages/cucumber-runtime/src/index.ts +17 -17
  61. package/templates/default/packages/cucumber-runtime/src/locator.util.ts +234 -234
  62. package/templates/default/packages/cucumber-runtime/src/parameter-types.ts +7 -7
  63. package/templates/default/packages/cucumber-runtime/src/random-data.util.ts +35 -35
  64. package/templates/default/packages/cucumber-runtime/src/types.ts +13 -13
  65. package/templates/default/packages/cucumber-runtime/src/world.ts +44 -44
  66. package/templates/default/packages/cucumber-runtime/tsconfig.json +11 -11
  67. package/templates/default/packages/locator-picker-companion/dist/session-file.d.ts +1 -0
  68. package/templates/default/packages/locator-picker-companion/dist/session-file.js +10 -10
  69. package/templates/default/packages/locator-picker-companion/src/session-file.ts +26 -11
  70. package/templates/default/postcss.config.mjs +8 -8
  71. package/templates/default/prisma/dev.db +0 -0
  72. package/templates/default/prisma/migrations/20251104113456_add_type_for_template_step_groups/migration.sql +16 -16
  73. package/templates/default/prisma/migrations/20251104170946_add_tags_to_test_suite_and_test_case/migration.sql +27 -27
  74. package/templates/default/prisma/migrations/20251112190024_add_cascade_delete_to_test_run_test_case/migration.sql +17 -17
  75. package/templates/default/prisma/migrations/20251113181100_add_test_run_log/migration.sql +12 -12
  76. package/templates/default/prisma/migrations/20251119191838_add_tag_type/migration.sql +28 -28
  77. package/templates/default/prisma/migrations/20251121164059_add_conflict_resolution/migration.sql +12 -12
  78. package/templates/default/prisma/migrations/20251223183400_add_report_model_to_db_schema/migration.sql +10 -10
  79. package/templates/default/prisma/migrations/20251223183637_add_report_test_case_entity_for_storing_test_results_for_individual_test_cases/migration.sql +10 -10
  80. package/templates/default/prisma/migrations/20251224083549_add_comprehensive_report_storage/migration.sql +108 -108
  81. package/templates/default/prisma/migrations/20251229194422_migrate_duration_to_string/migration.sql +55 -55
  82. package/templates/default/prisma/migrations/20251230124637_add_unique_constraint_to_test_run_name/migration.sql +27 -27
  83. package/templates/default/prisma/migrations/20260115094436_add_dashboard_metrics/migration.sql +59 -59
  84. package/templates/default/prisma/migrations/20260127172022_add_cascade_delete_to_step_parameters/migration.sql +34 -34
  85. package/templates/default/prisma/migrations/20260313093000_add_report_step_screenshot_path/migration.sql +1 -1
  86. package/templates/default/scripts/protect-seeded-files.ts +38 -38
  87. package/templates/default/scripts/regenerate-features.ts +94 -94
  88. package/templates/default/scripts/setup-env.ts +19 -19
  89. package/templates/default/scripts/sync-appraise-base-template.ts +7 -0
  90. package/templates/default/scripts/sync-environments.ts +40 -21
  91. package/templates/default/scripts/sync-locator-groups.ts +410 -410
  92. package/templates/default/scripts/sync-locators.ts +398 -398
  93. package/templates/default/scripts/sync-modules.ts +341 -341
  94. package/templates/default/scripts/sync-template-step-groups.ts +0 -3
  95. package/templates/default/scripts/sync-template-steps.ts +37 -11
  96. package/templates/default/scripts/sync-test-cases.ts +65 -11
  97. package/templates/default/scripts/sync-test-suites.ts +7 -5
  98. package/templates/default/src/actions/conflict/conflict.action.ts +33 -33
  99. package/templates/default/src/actions/dashboard/dashboard-actions.ts +240 -240
  100. package/templates/default/src/actions/environments/environment-actions.ts +188 -188
  101. package/templates/default/src/actions/locator/locator-actions.ts +490 -490
  102. package/templates/default/src/actions/locator-groups/locator-group-actions.ts +6 -3
  103. package/templates/default/src/actions/locator-picker/locator-picker-actions.ts +48 -11
  104. package/templates/default/src/actions/modules/module-actions.ts +135 -135
  105. package/templates/default/src/actions/review/review-actions.ts +147 -147
  106. package/templates/default/src/actions/settings/sync-actions.ts +5 -0
  107. package/templates/default/src/actions/tags/tag-actions.ts +107 -107
  108. package/templates/default/src/actions/template-step/template-step-actions.ts +38 -4
  109. package/templates/default/src/actions/template-step-group/template-step-group-actions.ts +10 -3
  110. package/templates/default/src/actions/template-test-case/template-test-case-actions.ts +238 -238
  111. package/templates/default/src/actions/test-case/test-case-actions.ts +356 -356
  112. package/templates/default/src/actions/user/user-actions.ts +13 -13
  113. package/templates/default/src/app/(base)/environments/create/page.tsx +28 -28
  114. package/templates/default/src/app/(base)/environments/environment-form.tsx +219 -219
  115. package/templates/default/src/app/(base)/environments/environment-table-columns.tsx +96 -96
  116. package/templates/default/src/app/(base)/environments/environment-table.tsx +24 -24
  117. package/templates/default/src/app/(base)/environments/modify/[id]/page.tsx +46 -46
  118. package/templates/default/src/app/(base)/environments/page.tsx +59 -59
  119. package/templates/default/src/app/(base)/layout.tsx +10 -10
  120. package/templates/default/src/app/(base)/locator-groups/create/page.tsx +44 -44
  121. package/templates/default/src/app/(base)/locator-groups/locator-group-form.tsx +215 -215
  122. package/templates/default/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -77
  123. package/templates/default/src/app/(base)/locator-groups/locator-group-table.tsx +28 -28
  124. package/templates/default/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -46
  125. package/templates/default/src/app/(base)/locators/create/create-locator-workspace.tsx +83 -60
  126. package/templates/default/src/app/(base)/locators/locator-form.tsx +163 -163
  127. package/templates/default/src/app/(base)/locators/locator-table-columns.tsx +73 -73
  128. package/templates/default/src/app/(base)/locators/locator-table.tsx +28 -28
  129. package/templates/default/src/app/(base)/locators/modify/[id]/page.tsx +56 -27
  130. package/templates/default/src/app/(base)/locators/sync-locators-button.tsx +66 -66
  131. package/templates/default/src/app/(base)/modules/create/page.tsx +34 -34
  132. package/templates/default/src/app/(base)/modules/modify/[id]/page.tsx +46 -46
  133. package/templates/default/src/app/(base)/modules/module-form.tsx +126 -126
  134. package/templates/default/src/app/(base)/modules/module-table-columns.tsx +85 -85
  135. package/templates/default/src/app/(base)/modules/module-table.tsx +24 -24
  136. package/templates/default/src/app/(base)/modules/page.tsx +59 -59
  137. package/templates/default/src/app/(base)/reports/duration-chart.tsx +33 -33
  138. package/templates/default/src/app/(base)/reports/feature-chart.tsx +78 -78
  139. package/templates/default/src/app/(base)/reports/overview-chart.tsx +49 -49
  140. package/templates/default/src/app/(base)/reports/page.tsx +98 -98
  141. package/templates/default/src/app/(base)/reports/report-metric-card.tsx +78 -78
  142. package/templates/default/src/app/(base)/reports/report-table-columns.tsx +189 -189
  143. package/templates/default/src/app/(base)/reports/report-table.tsx +72 -72
  144. package/templates/default/src/app/(base)/reports/test-cases/page.tsx +40 -40
  145. package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +115 -115
  146. package/templates/default/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -27
  147. package/templates/default/src/app/(base)/reports/test-suites/page.tsx +42 -42
  148. package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +79 -79
  149. package/templates/default/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +27 -27
  150. package/templates/default/src/app/(base)/reports/view-logs-button.tsx +58 -58
  151. package/templates/default/src/app/(base)/reviews/create/page.tsx +26 -26
  152. package/templates/default/src/app/(base)/reviews/created-reviews-table.tsx +15 -15
  153. package/templates/default/src/app/(base)/reviews/modify/[id]/page.tsx +26 -26
  154. package/templates/default/src/app/(base)/reviews/page.tsx +26 -26
  155. package/templates/default/src/app/(base)/reviews/review/[id]/page.tsx +26 -26
  156. package/templates/default/src/app/(base)/reviews/review-form.tsx +11 -11
  157. package/templates/default/src/app/(base)/reviews/review-table-by-creator-columns.tsx +9 -9
  158. package/templates/default/src/app/(base)/reviews/review-table-by-reviewer-columns.tsx +9 -9
  159. package/templates/default/src/app/(base)/reviews/reviewer-reviews-table.tsx +15 -15
  160. package/templates/default/src/app/(base)/settings/settings-sync-panel.tsx +12 -5
  161. package/templates/default/src/app/(base)/tags/create/page.tsx +39 -39
  162. package/templates/default/src/app/(base)/tags/modify/[id]/page.tsx +50 -50
  163. package/templates/default/src/app/(base)/tags/page.tsx +58 -58
  164. package/templates/default/src/app/(base)/tags/tag-form.tsx +147 -147
  165. package/templates/default/src/app/(base)/tags/tag-table-columns.tsx +63 -63
  166. package/templates/default/src/app/(base)/tags/tag-table.tsx +29 -29
  167. package/templates/default/src/app/(base)/template-step-groups/create/page.tsx +28 -28
  168. package/templates/default/src/app/(base)/template-step-groups/modify/[id]/page.tsx +45 -45
  169. package/templates/default/src/app/(base)/template-step-groups/page.tsx +60 -60
  170. package/templates/default/src/app/(base)/template-step-groups/template-step-group-form.tsx +167 -167
  171. package/templates/default/src/app/(base)/template-step-groups/template-step-group-table-columns.tsx +89 -89
  172. package/templates/default/src/app/(base)/template-step-groups/template-step-group-table.tsx +32 -32
  173. package/templates/default/src/app/(base)/template-steps/create/page.tsx +37 -37
  174. package/templates/default/src/app/(base)/template-steps/modify/[id]/page.tsx +49 -49
  175. package/templates/default/src/app/(base)/template-steps/page.tsx +58 -58
  176. package/templates/default/src/app/(base)/template-steps/paramChip.tsx +213 -213
  177. package/templates/default/src/app/(base)/template-steps/template-step-form.tsx +384 -384
  178. package/templates/default/src/app/(base)/template-steps/template-step-table-columns.tsx +158 -158
  179. package/templates/default/src/app/(base)/template-steps/template-step-table.tsx +24 -24
  180. package/templates/default/src/app/(base)/template-test-cases/create/page.tsx +56 -56
  181. package/templates/default/src/app/(base)/template-test-cases/modify/[id]/page.tsx +89 -89
  182. package/templates/default/src/app/(base)/template-test-cases/page.tsx +58 -58
  183. package/templates/default/src/app/(base)/template-test-cases/template-test-case-flow.tsx +84 -84
  184. package/templates/default/src/app/(base)/template-test-cases/template-test-case-form.tsx +262 -262
  185. package/templates/default/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -76
  186. package/templates/default/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -32
  187. package/templates/default/src/app/(base)/test-cases/create/page.tsx +76 -76
  188. package/templates/default/src/app/(base)/test-cases/create-from-template/generate/[id]/page.tsx +96 -96
  189. package/templates/default/src/app/(base)/test-cases/create-from-template/page.tsx +38 -38
  190. package/templates/default/src/app/(base)/test-cases/create-from-template/template-selection-form.tsx +73 -73
  191. package/templates/default/src/app/(base)/test-cases/modify/[id]/page.tsx +106 -106
  192. package/templates/default/src/app/(base)/test-cases/test-case-flow.tsx +82 -82
  193. package/templates/default/src/app/(base)/test-cases/test-case-form.tsx +395 -395
  194. package/templates/default/src/app/(base)/test-runs/page.tsx +60 -60
  195. package/templates/default/src/app/(base)/test-runs/test-run-table-columns.tsx +229 -229
  196. package/templates/default/src/app/(base)/test-runs/test-run-table.tsx +127 -127
  197. package/templates/default/src/app/(base)/test-suites/test-suite-table.tsx +29 -29
  198. package/templates/default/src/app/(dashboard-components)/app-drawer.tsx +187 -187
  199. package/templates/default/src/app/(dashboard-components)/data-card-grid.tsx +12 -12
  200. package/templates/default/src/app/(dashboard-components)/data-card.tsx +26 -26
  201. package/templates/default/src/app/(dashboard-components)/execution-health-panel.tsx +56 -56
  202. package/templates/default/src/app/(dashboard-components)/ongoing-test-runs-card.tsx +87 -87
  203. package/templates/default/src/app/(dashboard-components)/quick-actions-drawer.tsx +44 -44
  204. package/templates/default/src/app/api/reports/steps/[stepId]/screenshot/route.ts +52 -52
  205. package/templates/default/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.ts +146 -146
  206. package/templates/default/src/app/globals.css +147 -147
  207. package/templates/default/src/app/page.tsx +2 -0
  208. package/templates/default/src/assets/icons/empty-tube.tsx +23 -23
  209. package/templates/default/src/assets/icons/tube-plus.tsx +29 -29
  210. package/templates/default/src/components/base-node.tsx +21 -21
  211. package/templates/default/src/components/chart/pie-chart.tsx +73 -73
  212. package/templates/default/src/components/data-extraction/locator-inspector.tsx +460 -460
  213. package/templates/default/src/components/data-state/empty-state.tsx +40 -40
  214. package/templates/default/src/components/data-visualization/info-card.tsx +70 -70
  215. package/templates/default/src/components/data-visualization/info-grid.tsx +22 -22
  216. package/templates/default/src/components/diagram/button-edge.tsx +54 -54
  217. package/templates/default/src/components/diagram/dynamic-parameters.tsx +474 -474
  218. package/templates/default/src/components/diagram/edit-header-option.tsx +36 -36
  219. package/templates/default/src/components/diagram/flow-diagram.tsx +470 -470
  220. package/templates/default/src/components/diagram/node-form.tsx +262 -262
  221. package/templates/default/src/components/diagram/options-header-node.tsx +57 -57
  222. package/templates/default/src/components/diagram/template-step-combobox.tsx +155 -155
  223. package/templates/default/src/components/form/error-message.tsx +7 -7
  224. package/templates/default/src/components/kokonutui/smooth-tab.tsx +453 -453
  225. package/templates/default/src/components/loading-skeleton/data-table/data-table-skeleton.tsx +30 -30
  226. package/templates/default/src/components/loading-skeleton/form/button-skeleton.tsx +8 -8
  227. package/templates/default/src/components/loading-skeleton/form/icon-button-skeleton.tsx +8 -8
  228. package/templates/default/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -8
  229. package/templates/default/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -14
  230. package/templates/default/src/components/logo.tsx +15 -15
  231. package/templates/default/src/components/navigation/command-badge.tsx +34 -34
  232. package/templates/default/src/components/navigation/command-chain-input.tsx +51 -51
  233. package/templates/default/src/components/navigation/entity-search-command.tsx +116 -116
  234. package/templates/default/src/components/navigation/nav-card.tsx +31 -31
  235. package/templates/default/src/components/navigation/nav-link.tsx +60 -60
  236. package/templates/default/src/components/navigation/nav-menu-card-deck.tsx +112 -112
  237. package/templates/default/src/components/node-header.tsx +159 -159
  238. package/templates/default/src/components/reports/test-case-logs-modal.tsx +310 -310
  239. package/templates/default/src/components/table/table-actions.tsx +172 -172
  240. package/templates/default/src/components/test-run/download-logs-button.tsx +92 -92
  241. package/templates/default/src/components/test-run/test-run-header.tsx +149 -149
  242. package/templates/default/src/components/test-run/view-report-button.tsx +102 -102
  243. package/templates/default/src/components/theme/mode-toggle.tsx +54 -54
  244. package/templates/default/src/components/theme/theme-provider.tsx +8 -8
  245. package/templates/default/src/components/typography/page-header-subtitle.tsx +7 -7
  246. package/templates/default/src/components/typography/page-header.tsx +7 -7
  247. package/templates/default/src/components/ui/alert-dialog.tsx +106 -106
  248. package/templates/default/src/components/ui/alert.tsx +43 -43
  249. package/templates/default/src/components/ui/avatar.tsx +40 -40
  250. package/templates/default/src/components/ui/badge.tsx +29 -29
  251. package/templates/default/src/components/ui/button.tsx +47 -47
  252. package/templates/default/src/components/ui/calendar.tsx +158 -158
  253. package/templates/default/src/components/ui/card.tsx +43 -43
  254. package/templates/default/src/components/ui/checkbox.tsx +28 -28
  255. package/templates/default/src/components/ui/command.tsx +135 -135
  256. package/templates/default/src/components/ui/data-table-column-header.tsx +61 -61
  257. package/templates/default/src/components/ui/data-table-pagination.tsx +87 -87
  258. package/templates/default/src/components/ui/data-table-view-options.tsx +50 -50
  259. package/templates/default/src/components/ui/data-table.tsx +261 -261
  260. package/templates/default/src/components/ui/dialog.tsx +97 -97
  261. package/templates/default/src/components/ui/dropdown-menu.tsx +182 -182
  262. package/templates/default/src/components/ui/input.tsx +22 -22
  263. package/templates/default/src/components/ui/kbd.tsx +28 -28
  264. package/templates/default/src/components/ui/label.tsx +19 -19
  265. package/templates/default/src/components/ui/loading.tsx +12 -12
  266. package/templates/default/src/components/ui/multi-select-with-preview.tsx +116 -116
  267. package/templates/default/src/components/ui/multi-select.tsx +142 -142
  268. package/templates/default/src/components/ui/navigation-menu.tsx +120 -120
  269. package/templates/default/src/components/ui/popover.tsx +33 -33
  270. package/templates/default/src/components/ui/progress.tsx +25 -25
  271. package/templates/default/src/components/ui/radio-group.tsx +44 -44
  272. package/templates/default/src/components/ui/scroll-area.tsx +40 -40
  273. package/templates/default/src/components/ui/select.tsx +151 -151
  274. package/templates/default/src/components/ui/separator.tsx +22 -22
  275. package/templates/default/src/components/ui/skeleton.tsx +7 -7
  276. package/templates/default/src/components/ui/table.tsx +76 -76
  277. package/templates/default/src/components/ui/tabs.tsx +55 -55
  278. package/templates/default/src/components/ui/textarea.tsx +21 -21
  279. package/templates/default/src/components/ui/toast.tsx +113 -113
  280. package/templates/default/src/components/ui/toaster.tsx +26 -26
  281. package/templates/default/src/components/user-prompt/delete-prompt.tsx +87 -87
  282. package/templates/default/src/config/db-config.ts +10 -10
  283. package/templates/default/src/constants/form-opts/diagram/node-form.ts +30 -30
  284. package/templates/default/src/constants/form-opts/environment-form-opts.ts +24 -24
  285. package/templates/default/src/constants/form-opts/locator-form-opts.ts +20 -20
  286. package/templates/default/src/constants/form-opts/locator-group-form-opts.ts +28 -28
  287. package/templates/default/src/constants/form-opts/module-form-opts.ts +21 -21
  288. package/templates/default/src/constants/form-opts/review-form-opts.ts +23 -23
  289. package/templates/default/src/constants/form-opts/tag-form-opts.ts +42 -42
  290. package/templates/default/src/constants/form-opts/template-selection-form-opts.ts +16 -16
  291. package/templates/default/src/constants/form-opts/template-step-group-form-opts.ts +24 -24
  292. package/templates/default/src/constants/form-opts/template-test-case-form-opts.ts +39 -39
  293. package/templates/default/src/constants/form-opts/template-test-step-form-opts.ts +36 -36
  294. package/templates/default/src/constants/form-opts/test-case-form-opts.ts +43 -43
  295. package/templates/default/src/constants/form-opts/test-suite-form-opts.ts +24 -24
  296. package/templates/default/src/hooks/use-toast.ts +187 -187
  297. package/templates/default/src/lib/automation/paths.ts +4 -3
  298. package/templates/default/src/lib/automation/projection-service.ts +2 -1
  299. package/templates/default/src/lib/bidirectional-sync.ts +432 -432
  300. package/templates/default/src/lib/environment-file-utils.ts +184 -184
  301. package/templates/default/src/lib/feature-file-generator.ts +5 -66
  302. package/templates/default/src/lib/gherkin-parser.ts +259 -259
  303. package/templates/default/src/lib/locator-group-file-utils.ts +307 -307
  304. package/templates/default/src/lib/locator-picker/session-manager.ts +4 -1
  305. package/templates/default/src/lib/module-hierarchy-builder.ts +205 -205
  306. package/templates/default/src/lib/path-helpers/module-path.ts +71 -71
  307. package/templates/default/src/lib/sync/projected-feature-utils.ts +113 -0
  308. package/templates/default/src/lib/sync/sync-pending-counts.test.ts +239 -0
  309. package/templates/default/src/lib/sync/sync-pending-counts.ts +153 -138
  310. package/templates/default/src/lib/template-sync-utils.d.ts +6 -6
  311. package/templates/default/src/lib/template-sync-utils.js +46 -46
  312. package/templates/default/src/lib/template-sync-utils.ts +63 -63
  313. package/templates/default/src/lib/test-case-utils.ts +6 -6
  314. package/templates/default/src/lib/test-run/log-formatter.ts +83 -83
  315. package/templates/default/src/lib/test-run/report-parser.ts +352 -352
  316. package/templates/default/src/lib/test-run/test-run-executor.ts +13 -13
  317. package/templates/default/src/lib/test-run/winston-logger.ts +64 -64
  318. package/templates/default/src/lib/transformers/gherkin-converter.ts +42 -42
  319. package/templates/default/src/lib/transformers/key-to-icon-transformer.tsx +95 -95
  320. package/templates/default/src/lib/transformers/template-test-case-converter.ts +160 -160
  321. package/templates/default/src/lib/utils/node-param-validation.ts +81 -81
  322. package/templates/default/src/lib/utils/template-step-file-generator.ts +104 -104
  323. package/templates/default/src/lib/utils/template-step-file-manager-intelligent.ts +0 -8
  324. package/templates/default/src/lib/utils/template-step-file-manager.ts +166 -166
  325. package/templates/default/src/lib/utils.ts +31 -31
  326. package/templates/default/src/types/diagram/diagram.ts +34 -34
  327. package/templates/default/src/types/diagram/template-step.ts +11 -11
  328. package/templates/default/src/types/executor/browser.type.ts +1 -1
  329. package/templates/default/src/types/form/actionHandler.ts +6 -6
  330. package/templates/default/src/types/locator/locator.type.ts +11 -11
  331. package/templates/default/src/types/locator-picker.ts +1 -0
  332. package/templates/default/src/types/step/step.type.ts +1 -1
  333. package/templates/default/src/types/table/data-table.ts +6 -6
  334. package/templates/default/tailwind.config.ts +62 -62
package/README.md CHANGED
@@ -1,52 +1,52 @@
1
- # create-appraisejs
2
-
3
- Scaffold a new [Appraise](https://github.com/jamil2018/appraisejs-core) app in your directory.
4
-
5
- ## Usage
6
-
7
- ```bash
8
- npx create-appraisejs@latest
9
- ```
10
-
11
- The CLI will prompt you for:
12
-
13
- 1. **Project directory** - Where to create the app (default: `./my-appraisejs-app`). The directory must be empty or not exist.
14
- 2. **Package manager** - `npm`, `pnpm`, `yarn`, or `bun`.
15
- 3. **Run production setup now** - Whether to install dependencies, create `.env`, and build the production app immediately.
16
- 4. **Playwright browsers** - Optional multi-select for `chromium`, `firefox`, and `webkit`.
17
-
18
- ## Default workflow
19
-
20
- 1. Uses the **bundled template** shipped with `create-appraisejs`.
21
- 2. Copies the template into the target directory.
22
- 3. Patches `package.json` scripts to use your selected package manager.
23
- 4. If you choose setup now, runs the project's `setup` script and then installs any selected Playwright browsers.
24
- 5. Prints the project path and production-first next steps (`setup`, optional `install-playwright`, then `start`).
25
-
26
- By default, the CLI does **not** download the repo again. Remote download is only used when you explicitly override the template source via environment variables.
27
-
28
- ## Template source and environment variables
29
-
30
- | Variable | Description | Default |
31
- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
32
- | `CREATE_APPRAISE_REPO_URL` | Git repository base URL (e.g. `https://github.com/jamil2018/appraisejs-core`). Used for both tarball and clone. | `https://github.com/jamil2018/appraisejs-core` |
33
- | `CREATE_APPRAISE_BRANCH` | Branch or ref to use. | `main` |
34
- | `CREATE_APPRAISE_TEMPLATE_SUBPATH` | Path inside the repo to the template directory (relative to repo root). | `templates/default` |
35
- | `CREATE_APPRAISE_USE_BUNDLED` | Set to `1`, `true`, or `yes` to force the bundled template even when remote overrides are present. | bundled template |
36
-
37
- When any remote override is provided, the CLI tries the GitHub tarball URL first (no git required); if that fails, it falls back to `git clone`.
38
-
39
- ## After scaffolding
40
-
41
- From the new project directory:
42
-
43
- - Run `npm run setup` (or your package manager's equivalent) to install dependencies, create `.env`, and build the local production app.
44
- - Optionally install Playwright browsers: `npm run install-playwright -- chromium firefox webkit`.
45
- - Start the production app: `npm run start`.
46
- - Use `npm run dev` only when you specifically want the development server.
47
-
48
- ## Recovery scripts
49
-
50
- - `npm run setup:db` recreates the local SQLite database from migrations and reruns `sync-all`.
51
- - `npm run setup:full` reruns dependency install, DB recovery, and the local production build.
52
- - `npm run appraisejs:sync` reruns the sync pipeline when you edit automation assets manually.
1
+ # create-appraisejs
2
+
3
+ Scaffold a new [Appraise](https://github.com/jamil2018/appraisejs-core) app in your directory.
4
+
5
+ ## Usage
6
+
7
+ ```bash
8
+ npx create-appraisejs@latest
9
+ ```
10
+
11
+ The CLI will prompt you for:
12
+
13
+ 1. **Project directory** - Where to create the app (default: `./my-appraisejs-app`). The directory must be empty or not exist.
14
+ 2. **Package manager** - `npm`, `pnpm`, `yarn`, or `bun`.
15
+ 3. **Run production setup now** - Whether to install dependencies, create `.env`, and build the production app immediately.
16
+ 4. **Playwright browsers** - Optional multi-select for `chromium`, `firefox`, and `webkit`.
17
+
18
+ ## Default workflow
19
+
20
+ 1. Uses the **bundled template** shipped with `create-appraisejs`.
21
+ 2. Copies the template into the target directory.
22
+ 3. Patches `package.json` scripts to use your selected package manager.
23
+ 4. If you choose setup now, runs the project's `setup` script and then installs any selected Playwright browsers.
24
+ 5. Prints the project path and production-first next steps (`setup`, optional `install-playwright`, then `start`).
25
+
26
+ By default, the CLI does **not** download the repo again. Remote download is only used when you explicitly override the template source via environment variables.
27
+
28
+ ## Template source and environment variables
29
+
30
+ | Variable | Description | Default |
31
+ | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
32
+ | `CREATE_APPRAISE_REPO_URL` | Git repository base URL (e.g. `https://github.com/jamil2018/appraisejs-core`). Used for both tarball and clone. | `https://github.com/jamil2018/appraisejs-core` |
33
+ | `CREATE_APPRAISE_BRANCH` | Branch or ref to use. | `main` |
34
+ | `CREATE_APPRAISE_TEMPLATE_SUBPATH` | Path inside the repo to the template directory (relative to repo root). | `templates/default` |
35
+ | `CREATE_APPRAISE_USE_BUNDLED` | Set to `1`, `true`, or `yes` to force the bundled template even when remote overrides are present. | bundled template |
36
+
37
+ When any remote override is provided, the CLI tries the GitHub tarball URL first (no git required); if that fails, it falls back to `git clone`.
38
+
39
+ ## After scaffolding
40
+
41
+ From the new project directory:
42
+
43
+ - Run `npm run setup` (or your package manager's equivalent) to install dependencies, create `.env`, and build the local production app.
44
+ - Optionally install Playwright browsers: `npm run install-playwright -- chromium firefox webkit`.
45
+ - Start the production app: `npm run start`.
46
+ - Use `npm run dev` only when you specifically want the development server.
47
+
48
+ ## Recovery scripts
49
+
50
+ - `npm run setup:db` recreates the local SQLite database from migrations and reruns `sync-all`.
51
+ - `npm run setup:full` reruns dependency install, DB recovery, and the local production build.
52
+ - `npm run appraisejs:sync` reruns the sync pipeline when you edit automation assets manually.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli.e2e.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.e2e.test.d.ts","sourceRoot":"","sources":["../src/cli.e2e.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import path from 'path';
3
+ import fs from 'fs-extra';
4
+ import os from 'os';
5
+ import { getTemplatePath } from './copy-template.js';
6
+ import { patchPackageJsonScripts } from './install.js';
7
+ describe('CLI E2E', () => {
8
+ let tempDir;
9
+ let destDir;
10
+ beforeEach(async () => {
11
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'create-appraisejs-e2e-'));
12
+ destDir = path.join(tempDir, 'my-app');
13
+ });
14
+ afterEach(async () => {
15
+ await fs.remove(tempDir).catch(() => { });
16
+ });
17
+ it('scaffolds app when run with non-interactive input (manual run required for full E2E)', async () => {
18
+ const templatePath = getTemplatePath();
19
+ if (!(await fs.pathExists(templatePath))) {
20
+ console.warn('Skipping E2E: template not found (run npm run build first)');
21
+ return;
22
+ }
23
+ await fs.ensureDir(destDir);
24
+ const pkgJsonPath = path.join(destDir, 'package.json');
25
+ const srcPath = path.join(destDir, 'src');
26
+ const { copyTemplate } = await import('./copy-template.js');
27
+ await copyTemplate(destDir);
28
+ expect(await fs.pathExists(pkgJsonPath)).toBe(true);
29
+ expect(await fs.pathExists(srcPath)).toBe(true);
30
+ const pkg = await fs.readJson(pkgJsonPath);
31
+ expect(pkg.name).toBe('appraisejs');
32
+ expect(pkg.scripts?.dev).toBeDefined();
33
+ });
34
+ it('patchPackageJsonScripts rewrites real template scripts for chosen package manager', async () => {
35
+ const templatePath = getTemplatePath();
36
+ if (!(await fs.pathExists(templatePath))) {
37
+ console.warn('Skipping E2E: template not found (run npm run build first)');
38
+ return;
39
+ }
40
+ const { copyTemplate } = await import('./copy-template.js');
41
+ await copyTemplate(destDir);
42
+ const pkgBefore = await fs.readJson(path.join(destDir, 'package.json'));
43
+ expect(pkgBefore.scripts['install-dependencies']).toBe('npm install --legacy-peer-deps');
44
+ expect(pkgBefore.scripts.setup).toMatch(/npm run /);
45
+ await patchPackageJsonScripts(destDir, 'pnpm');
46
+ const pkgAfter = await fs.readJson(path.join(destDir, 'package.json'));
47
+ expect(pkgAfter.scripts['install-dependencies']).toBe('pnpm install');
48
+ expect(pkgAfter.scripts.setup).toBe('pnpm run install-dependencies && pnpm run setup-env && pnpm run migrate-db && pnpm run install-playwright');
49
+ expect(pkgAfter.scripts['appraisejs:setup']).toBe('pnpm run setup');
50
+ expect(pkgAfter.scripts['appraisejs:sync']).toBe('pnpm run sync-all');
51
+ expect(pkgAfter.scripts['setup-env']).toContain('pnpm exec ');
52
+ expect(pkgAfter.scripts['setup-env']).not.toContain('npx ');
53
+ expect(pkgAfter.scripts['sync-all']).toContain('pnpm exec ');
54
+ expect(pkgAfter.scripts['install-playwright']).toContain('pnpm exec ');
55
+ expect(pkgAfter.scripts['install-playwright']).not.toContain('npx ');
56
+ });
57
+ it('patchPackageJsonScripts rewrites npx-using scripts for bun', async () => {
58
+ const templatePath = getTemplatePath();
59
+ if (!(await fs.pathExists(templatePath))) {
60
+ console.warn('Skipping E2E: template not found (run npm run build first)');
61
+ return;
62
+ }
63
+ const { copyTemplate } = await import('./copy-template.js');
64
+ await copyTemplate(destDir);
65
+ await patchPackageJsonScripts(destDir, 'bun');
66
+ const pkgAfter = await fs.readJson(path.join(destDir, 'package.json'));
67
+ expect(pkgAfter.scripts['setup-env']).toContain('bunx ');
68
+ expect(pkgAfter.scripts['sync-all']).toContain('bunx ');
69
+ expect(pkgAfter.scripts['install-playwright']).toContain('bunx ');
70
+ expect(pkgAfter.scripts['setup-env']).not.toContain('npx ');
71
+ });
72
+ });
73
+ //# sourceMappingURL=cli.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.e2e.test.js","sourceRoot":"","sources":["../src/cli.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,65 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { getConfig } from './config.js';
3
+ describe('getConfig', () => {
4
+ const originalEnv = process.env;
5
+ beforeEach(() => {
6
+ process.env = { ...originalEnv };
7
+ delete process.env.CREATE_APPRAISE_REPO_URL;
8
+ delete process.env.CREATE_APPRAISE_BRANCH;
9
+ delete process.env.CREATE_APPRAISE_TEMPLATE_SUBPATH;
10
+ delete process.env.CREATE_APPRAISE_USE_BUNDLED;
11
+ });
12
+ afterEach(() => {
13
+ process.env = originalEnv;
14
+ });
15
+ it('returns default repo base, branch, template subpath, and useBundled false when no env set', () => {
16
+ const config = getConfig();
17
+ expect(config.repoBase).toContain('github.com');
18
+ expect(config.repoBase).toContain('appraisejs');
19
+ expect(config.branch).toBe('main');
20
+ expect(config.templateSubpath).toBe('templates/default');
21
+ expect(config.useBundled).toBe(false);
22
+ });
23
+ it('uses CREATE_APPRAISE_REPO_URL when set', () => {
24
+ process.env.CREATE_APPRAISE_REPO_URL = 'https://example.com/repo';
25
+ const config = getConfig();
26
+ expect(config.repoBase).toBe('https://example.com/repo');
27
+ });
28
+ it('normalizes repo base: trims, removes trailing slash and .git', () => {
29
+ process.env.CREATE_APPRAISE_REPO_URL = ' https://example.com/repo/.git/ ';
30
+ const config = getConfig();
31
+ expect(config.repoBase).toBe('https://example.com/repo');
32
+ });
33
+ it('uses CREATE_APPRAISE_BRANCH when set', () => {
34
+ process.env.CREATE_APPRAISE_BRANCH = 'dev';
35
+ const config = getConfig();
36
+ expect(config.branch).toBe('dev');
37
+ });
38
+ it('uses CREATE_APPRAISE_TEMPLATE_SUBPATH when set', () => {
39
+ process.env.CREATE_APPRAISE_TEMPLATE_SUBPATH = 'templates/custom';
40
+ const config = getConfig();
41
+ expect(config.templateSubpath).toBe('templates/custom');
42
+ });
43
+ it('sets useBundled true when CREATE_APPRAISE_USE_BUNDLED is 1', () => {
44
+ process.env.CREATE_APPRAISE_USE_BUNDLED = '1';
45
+ const config = getConfig();
46
+ expect(config.useBundled).toBe(true);
47
+ });
48
+ it('sets useBundled true when CREATE_APPRAISE_USE_BUNDLED is true', () => {
49
+ process.env.CREATE_APPRAISE_USE_BUNDLED = 'true';
50
+ const config = getConfig();
51
+ expect(config.useBundled).toBe(true);
52
+ });
53
+ it('sets useBundled true when CREATE_APPRAISE_USE_BUNDLED is yes', () => {
54
+ process.env.CREATE_APPRAISE_USE_BUNDLED = 'yes';
55
+ const config = getConfig();
56
+ expect(config.useBundled).toBe(true);
57
+ });
58
+ it('sets useBundled false when CREATE_APPRAISE_USE_BUNDLED is empty or 0', () => {
59
+ process.env.CREATE_APPRAISE_USE_BUNDLED = '';
60
+ expect(getConfig().useBundled).toBe(false);
61
+ process.env.CREATE_APPRAISE_USE_BUNDLED = '0';
62
+ expect(getConfig().useBundled).toBe(false);
63
+ });
64
+ });
65
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=copy-template.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-template.test.d.ts","sourceRoot":"","sources":["../src/copy-template.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import path from 'path';
3
+ import fs from 'fs-extra';
4
+ import os from 'os';
5
+ import { copyTemplate, getTemplatePath } from './copy-template.js';
6
+ describe('copy-template', () => {
7
+ let tempDir;
8
+ let destDir;
9
+ beforeEach(async () => {
10
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'create-appraisejs-test-'));
11
+ destDir = path.join(tempDir, 'output');
12
+ });
13
+ afterEach(async () => {
14
+ await fs.remove(tempDir).catch(() => { });
15
+ });
16
+ describe('getTemplatePath', () => {
17
+ it('returns a path ending with templates/default', () => {
18
+ const templatePath = getTemplatePath();
19
+ expect(templatePath).toMatch(/[\\/]templates[\\/]default$/);
20
+ });
21
+ });
22
+ describe('copyTemplate', () => {
23
+ it('copies template files and excludes node_modules, .env, and lockfiles', async () => {
24
+ const fixtureDir = path.join(tempDir, 'fixture');
25
+ await fs.ensureDir(path.join(fixtureDir, 'src', 'app'));
26
+ await fs.ensureDir(path.join(fixtureDir, 'node_modules', 'pkg'));
27
+ await fs.writeJson(path.join(fixtureDir, 'package.json'), { name: 'test' });
28
+ await fs.writeFile(path.join(fixtureDir, '.env'), 'SECRET=1');
29
+ await fs.writeFile(path.join(fixtureDir, 'package-lock.json'), '{}');
30
+ await fs.writeFile(path.join(fixtureDir, 'src', 'app', 'page.tsx'), 'export default function Page() {}');
31
+ const { getCollectedFilesForTest } = await import('./copy-template.js');
32
+ const files = getCollectedFilesForTest(fixtureDir);
33
+ expect(files).toContain('package.json');
34
+ expect(files.some((f) => f.includes('node_modules'))).toBe(false);
35
+ expect(files.some((f) => f.includes('.env'))).toBe(false);
36
+ expect(files.some((f) => f.includes('package-lock'))).toBe(false);
37
+ const srcFiles = files.filter((f) => f.includes('src'));
38
+ expect(srcFiles.length).toBeGreaterThan(0);
39
+ await copyTemplate(destDir, undefined, fixtureDir);
40
+ expect(await fs.pathExists(path.join(destDir, 'package.json'))).toBe(true);
41
+ expect(await fs.pathExists(path.join(destDir, 'src'))).toBe(true);
42
+ expect(await fs.pathExists(path.join(destDir, 'src', 'app', 'page.tsx'))).toBe(true);
43
+ const hasNodeModules = await fs.pathExists(path.join(destDir, 'node_modules'));
44
+ const hasEnv = await fs.pathExists(path.join(destDir, '.env'));
45
+ const hasLock = await fs.pathExists(path.join(destDir, 'package-lock.json'));
46
+ expect(hasNodeModules).toBe(false);
47
+ expect(hasEnv).toBe(false);
48
+ expect(hasLock).toBe(false);
49
+ });
50
+ it('copies package-lock.json when packageManager is npm', async () => {
51
+ const fixtureDir = path.join(tempDir, 'fixture');
52
+ await fs.ensureDir(path.join(fixtureDir, 'src'));
53
+ await fs.writeJson(path.join(fixtureDir, 'package.json'), { name: 'test' });
54
+ await fs.writeFile(path.join(fixtureDir, 'package-lock.json'), '{"lockfileVersion": 3}');
55
+ await fs.writeFile(path.join(fixtureDir, 'src', 'index.ts'), '// empty');
56
+ await copyTemplate(destDir, undefined, fixtureDir, 'npm');
57
+ expect(await fs.pathExists(path.join(destDir, 'package-lock.json'))).toBe(true);
58
+ expect(await fs.readFile(path.join(destDir, 'package-lock.json'), 'utf-8')).toBe('{"lockfileVersion": 3}');
59
+ });
60
+ it('does not copy package-lock.json when packageManager is not npm', async () => {
61
+ const fixtureDir = path.join(tempDir, 'fixture');
62
+ await fs.ensureDir(path.join(fixtureDir, 'src'));
63
+ await fs.writeJson(path.join(fixtureDir, 'package.json'), { name: 'test' });
64
+ await fs.writeFile(path.join(fixtureDir, 'package-lock.json'), '{}');
65
+ await fs.writeFile(path.join(fixtureDir, 'src', 'index.ts'), '// empty');
66
+ await copyTemplate(destDir, undefined, fixtureDir, 'yarn');
67
+ expect(await fs.pathExists(path.join(destDir, 'package-lock.json'))).toBe(false);
68
+ });
69
+ });
70
+ });
71
+ //# sourceMappingURL=copy-template.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-template.test.js","sourceRoot":"","sources":["../src/copy-template.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=download-repo.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download-repo.test.d.ts","sourceRoot":"","sources":["../src/download-repo.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { describe, it, expect, vi, afterEach } from 'vitest';
2
+ import { downloadRepo } from './download-repo.js';
3
+ describe('downloadRepo', () => {
4
+ const originalFetch = globalThis.fetch;
5
+ afterEach(() => {
6
+ vi.restoreAllMocks();
7
+ globalThis.fetch = originalFetch;
8
+ });
9
+ it('throws with message including both attempts and CREATE_APPRAISE_USE_BUNDLED when both tarball and clone fail', async () => {
10
+ globalThis.fetch = vi.fn().mockResolvedValue({ ok: false, status: 404, statusText: 'Not Found' });
11
+ await expect(downloadRepo('https://github.com/invalid/repo', 'main', 'templates/default')).rejects.toThrow(/CREATE_APPRAISE_USE_BUNDLED/);
12
+ }, 15000);
13
+ });
14
+ //# sourceMappingURL=download-repo.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download-repo.test.js","sourceRoot":"","sources":["../src/download-repo.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;QACrB,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8GAA8G,EAAE,KAAK,IAAI,EAAE;QAC5H,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;QAElG,MAAM,MAAM,CACV,YAAY,CAAC,iCAAiC,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAC7E,CAAC,OAAO,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACnD,CAAC,EAAE,KAAK,CAAC,CAAC;AACZ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=install.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.test.d.ts","sourceRoot":"","sources":["../src/install.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,119 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import { describe, it, expect } from 'vitest';
5
+ import { getInstallCommand, patchPackageJsonScripts } from './install.js';
6
+ const TEMPLATE_SCRIPTS = {
7
+ 'install-dependencies': 'npm install --legacy-peer-deps',
8
+ setup: 'npm run install-dependencies && npm run setup-env && npm run migrate-db && npm run install-playwright',
9
+ 'appraisejs:setup': 'npm run setup',
10
+ 'appraisejs:sync': 'npm run sync-all',
11
+ 'setup-env': 'npx tsx scripts/setup-env.ts',
12
+ 'migrate-db': 'npx prisma migrate dev',
13
+ 'install-playwright': 'npx playwright install && npx playwright install-deps',
14
+ 'sync-all': 'npx tsx scripts/sync-all.ts',
15
+ };
16
+ async function patchAndRead(dir, pm) {
17
+ await fs.writeJson(path.join(dir, 'package.json'), { name: 'appraisejs', scripts: { ...TEMPLATE_SCRIPTS } });
18
+ await patchPackageJsonScripts(dir, pm);
19
+ return fs.readJson(path.join(dir, 'package.json'));
20
+ }
21
+ describe('patchPackageJsonScripts', () => {
22
+ it('rewrites package.json scripts to use pnpm instead of npm', async () => {
23
+ const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'create-appraisejs-patch-'));
24
+ try {
25
+ const pkg = await patchAndRead(dir, 'pnpm');
26
+ expect(pkg.scripts['install-dependencies']).toBe('pnpm install');
27
+ expect(pkg.scripts.setup).toBe('pnpm run install-dependencies && pnpm run setup-env && pnpm run migrate-db && pnpm run install-playwright');
28
+ expect(pkg.scripts['appraisejs:setup']).toBe('pnpm run setup');
29
+ expect(pkg.scripts['appraisejs:sync']).toBe('pnpm run sync-all');
30
+ expect(pkg.scripts['setup-env']).toBe('pnpm exec tsx scripts/setup-env.ts');
31
+ expect(pkg.scripts['migrate-db']).toBe('pnpm exec prisma migrate dev');
32
+ expect(pkg.scripts['install-playwright']).toBe('pnpm exec playwright install && pnpm exec playwright install-deps');
33
+ expect(pkg.scripts['sync-all']).toBe('pnpm exec tsx scripts/sync-all.ts');
34
+ expect(pkg.scripts['setup-env']).not.toContain('npx ');
35
+ }
36
+ finally {
37
+ await fs.remove(dir).catch(() => { });
38
+ }
39
+ });
40
+ it('rewrites scripts for npm (keeps legacy-peer-deps and npx)', async () => {
41
+ const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'create-appraisejs-patch-npm-'));
42
+ try {
43
+ const pkg = await patchAndRead(dir, 'npm');
44
+ expect(pkg.scripts['install-dependencies']).toBe('npm install --legacy-peer-deps');
45
+ expect(pkg.scripts.setup).toContain('npm run install-dependencies');
46
+ expect(pkg.scripts.setup).not.toContain('pnpm run');
47
+ expect(pkg.scripts['setup-env']).toContain('npx ');
48
+ expect(pkg.scripts['setup-env']).toBe('npx tsx scripts/setup-env.ts');
49
+ expect(pkg.scripts['sync-all']).toBe('npx tsx scripts/sync-all.ts');
50
+ }
51
+ finally {
52
+ await fs.remove(dir).catch(() => { });
53
+ }
54
+ });
55
+ it('rewrites scripts for yarn', async () => {
56
+ const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'create-appraisejs-patch-yarn-'));
57
+ try {
58
+ const pkg = await patchAndRead(dir, 'yarn');
59
+ expect(pkg.scripts['install-dependencies']).toBe('yarn install');
60
+ expect(pkg.scripts.setup).toBe('yarn run install-dependencies && yarn run setup-env && yarn run migrate-db && yarn run install-playwright');
61
+ expect(pkg.scripts['appraisejs:setup']).toBe('yarn run setup');
62
+ expect(pkg.scripts['setup-env']).toBe('yarn run tsx scripts/setup-env.ts');
63
+ expect(pkg.scripts['install-playwright']).toBe('yarn run playwright install && yarn run playwright install-deps');
64
+ expect(pkg.scripts['sync-all']).not.toContain('npx ');
65
+ }
66
+ finally {
67
+ await fs.remove(dir).catch(() => { });
68
+ }
69
+ });
70
+ it('rewrites scripts for bun', async () => {
71
+ const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'create-appraisejs-patch-bun-'));
72
+ try {
73
+ const pkg = await patchAndRead(dir, 'bun');
74
+ expect(pkg.scripts['install-dependencies']).toBe('bun install');
75
+ expect(pkg.scripts.setup).toContain('bun run install-dependencies');
76
+ expect(pkg.scripts['appraisejs:sync']).toBe('bun run sync-all');
77
+ expect(pkg.scripts['setup-env']).toBe('bunx tsx scripts/setup-env.ts');
78
+ expect(pkg.scripts['migrate-db']).toBe('bunx prisma migrate dev');
79
+ expect(pkg.scripts['sync-all']).toContain('bunx ');
80
+ expect(pkg.scripts['sync-all']).not.toContain('npx ');
81
+ }
82
+ finally {
83
+ await fs.remove(dir).catch(() => { });
84
+ }
85
+ });
86
+ it('no-ops when package.json does not exist', async () => {
87
+ const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'create-appraisejs-noop-'));
88
+ try {
89
+ await patchPackageJsonScripts(dir, 'yarn');
90
+ await expect(fs.pathExists(path.join(dir, 'package.json'))).resolves.toBe(false);
91
+ }
92
+ finally {
93
+ await fs.remove(dir).catch(() => { });
94
+ }
95
+ });
96
+ });
97
+ describe('getInstallCommand', () => {
98
+ it('returns npm run setup for npm', () => {
99
+ const result = getInstallCommand('npm');
100
+ expect(result).toEqual({ command: 'npm', args: ['run', 'setup'] });
101
+ expect(`${result.command} ${result.args.join(' ')}`).toBe('npm run setup');
102
+ });
103
+ it('returns pnpm run setup for pnpm', () => {
104
+ const result = getInstallCommand('pnpm');
105
+ expect(result).toEqual({ command: 'pnpm', args: ['run', 'setup'] });
106
+ expect(`${result.command} ${result.args.join(' ')}`).toBe('pnpm run setup');
107
+ });
108
+ it('returns yarn run setup for yarn', () => {
109
+ const result = getInstallCommand('yarn');
110
+ expect(result).toEqual({ command: 'yarn', args: ['run', 'setup'] });
111
+ expect(`${result.command} ${result.args.join(' ')}`).toBe('yarn run setup');
112
+ });
113
+ it('returns bun run setup for bun', () => {
114
+ const result = getInstallCommand('bun');
115
+ expect(result).toEqual({ command: 'bun', args: ['run', 'setup'] });
116
+ expect(`${result.command} ${result.args.join(' ')}`).toBe('bun run setup');
117
+ });
118
+ });
119
+ //# sourceMappingURL=install.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.test.js","sourceRoot":"","sources":["../src/install.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"prepare-template-utils.d.ts","sourceRoot":"","sources":["../src/prepare-template-utils.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,eAAO,MAAM,0BAA0B,+DAAgE,CAAA;AAEvG,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,EAC7C,OAAO,SAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBnB;AAED,wBAAgB,yBAAyB,CACvC,gBAAgB,EAAE,OAAO,EACzB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,GACxC,OAAO,CAET;AAED,wBAAsB,2BAA2B,CAC/C,kBAAkB,EAAE,MAAM,EAC1B,cAAc,GAAE,OAAO,YAA2B,GACjD,OAAO,CAAC,IAAI,CAAC,CAqCf"}
1
+ {"version":3,"file":"prepare-template-utils.d.ts","sourceRoot":"","sources":["../src/prepare-template-utils.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,eAAO,MAAM,0BAA0B,+DAAgE,CAAA;AAEvG,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,EAC7C,OAAO,SAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBnB;AAED,wBAAgB,yBAAyB,CACvC,gBAAgB,EAAE,OAAO,EACzB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,GACxC,OAAO,CAET;AAED,wBAAsB,2BAA2B,CAC/C,kBAAkB,EAAE,MAAM,EAC1B,cAAc,GAAE,OAAO,YAA2B,GACjD,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
@@ -47,6 +47,11 @@ export async function verifyPreparedTemplateState(packageTemplateDir, collectFil
47
47
  if (!existsSync(starterLocatorMapPath)) {
48
48
  throw new Error(`Prepared template is missing locator map ${starterLocatorMapPath}`);
49
49
  }
50
+ const starterLocatorMap = await fs.readFile(starterLocatorMapPath, 'utf8');
51
+ const parsedStarterLocatorMap = JSON.parse(starterLocatorMap);
52
+ if (!Array.isArray(parsedStarterLocatorMap) || parsedStarterLocatorMap.length > 0) {
53
+ throw new Error(`Prepared template should include an empty locator map at ${starterLocatorMapPath}`);
54
+ }
50
55
  if (reportFiles.length > 0) {
51
56
  throw new Error(`Prepared template should not include report artifacts, found ${reportFiles.join(', ')}`);
52
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prepare-template-utils.js","sourceRoot":"","sources":["../src/prepare-template-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prepare-template-utils.js","sourceRoot":"","sources":["../src/prepare-template-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prompts.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.test.d.ts","sourceRoot":"","sources":["../src/prompts.test.ts"],"names":[],"mappings":""}