@tanstack/cta-engine 0.10.0-alpha.21 → 0.10.0-alpha.25

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 (340) hide show
  1. package/dist/add-ons.js +91 -5
  2. package/dist/add.js +125 -0
  3. package/dist/cli.js +132 -0
  4. package/dist/config-file.js +9 -14
  5. package/dist/constants.js +2 -0
  6. package/dist/create-app.js +451 -142
  7. package/dist/custom-add-on.js +254 -0
  8. package/dist/environment.js +32 -64
  9. package/dist/file-helper.js +18 -0
  10. package/dist/index.js +1 -17
  11. package/dist/mcp.js +229 -0
  12. package/dist/options.js +333 -9
  13. package/dist/package-manager.js +6 -51
  14. package/dist/templates.js +6 -0
  15. package/dist/toolchain.js +6 -0
  16. package/dist/types/add-ons.d.ts +8 -3
  17. package/dist/types/add.d.ts +3 -0
  18. package/dist/types/cli.d.ts +7 -0
  19. package/dist/types/config-file.d.ts +4 -6
  20. package/dist/types/constants.d.ts +3 -0
  21. package/dist/types/create-app.d.ts +7 -1
  22. package/dist/types/custom-add-on.d.ts +3 -0
  23. package/dist/types/environment.d.ts +1 -2
  24. package/dist/types/file-helper.d.ts +2 -0
  25. package/dist/types/index.d.ts +1 -20
  26. package/dist/types/mcp.d.ts +7 -0
  27. package/dist/types/options.d.ts +6 -2
  28. package/dist/types/package-manager.d.ts +1 -18
  29. package/dist/types/templates.d.ts +1 -0
  30. package/dist/types/toolchain.d.ts +3 -0
  31. package/dist/types/types.d.ts +85 -788
  32. package/dist/types/utils.d.ts +0 -5
  33. package/dist/types.js +1 -65
  34. package/dist/utils.js +0 -9
  35. package/package.json +12 -9
  36. package/src/add-ons.ts +123 -7
  37. package/src/add.ts +186 -0
  38. package/src/cli.ts +210 -0
  39. package/src/config-file.ts +17 -26
  40. package/src/constants.ts +5 -0
  41. package/src/create-app.ts +730 -180
  42. package/src/custom-add-on.ts +325 -0
  43. package/src/environment.ts +33 -77
  44. package/src/file-helper.ts +20 -0
  45. package/src/index.ts +1 -77
  46. package/src/mcp.ts +302 -0
  47. package/src/options.ts +409 -8
  48. package/src/package-manager.ts +9 -80
  49. package/src/templates.ts +7 -0
  50. package/src/toolchain.ts +7 -0
  51. package/src/types.ts +87 -175
  52. package/src/utils.ts +0 -17
  53. package/templates/react/add-on/clerk/README.md +3 -0
  54. package/templates/react/add-on/clerk/assets/_dot_env.local.append +2 -0
  55. package/templates/react/add-on/clerk/assets/src/integrations/clerk/header-user.tsx +19 -0
  56. package/templates/react/add-on/clerk/assets/src/integrations/clerk/provider.tsx +18 -0
  57. package/templates/react/add-on/clerk/assets/src/routes/demo.clerk.tsx +20 -0
  58. package/templates/react/add-on/clerk/info.json +13 -0
  59. package/templates/react/add-on/clerk/package.json +5 -0
  60. package/templates/react/add-on/convex/README.md +4 -0
  61. package/templates/react/add-on/convex/assets/_dot_cursorrules.append +93 -0
  62. package/templates/react/add-on/convex/assets/_dot_env.local.append +3 -0
  63. package/templates/react/add-on/convex/assets/convex/products.ts +8 -0
  64. package/templates/react/add-on/convex/assets/convex/schema.ts +10 -0
  65. package/templates/react/add-on/convex/assets/src/integrations/convex/provider.tsx +20 -0
  66. package/templates/react/add-on/convex/assets/src/routes/demo.convex.tsx +33 -0
  67. package/templates/react/add-on/convex/info.json +13 -0
  68. package/templates/react/add-on/convex/package.json +6 -0
  69. package/templates/react/add-on/form/assets/src/components/demo.FormComponents.tsx.ejs +300 -0
  70. package/templates/react/add-on/form/assets/src/hooks/demo.form-context.ts +4 -0
  71. package/templates/react/add-on/form/assets/src/hooks/demo.form.ts +22 -0
  72. package/templates/react/add-on/form/assets/src/routes/demo.form.address.tsx.ejs +213 -0
  73. package/templates/react/add-on/form/assets/src/routes/demo.form.simple.tsx.ejs +77 -0
  74. package/templates/react/add-on/form/info.json +26 -0
  75. package/templates/react/add-on/form/package.json +6 -0
  76. package/templates/react/add-on/module-federation/assets/module-federation.config.js.ejs +31 -0
  77. package/templates/react/add-on/module-federation/assets/src/demo-mf-component.tsx +3 -0
  78. package/templates/react/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +11 -0
  79. package/templates/react/add-on/module-federation/info.json +7 -0
  80. package/templates/react/add-on/module-federation/package.json +5 -0
  81. package/templates/react/add-on/netlify/README.md +11 -0
  82. package/templates/react/add-on/netlify/info.json +7 -0
  83. package/templates/react/add-on/sentry/assets/_dot_cursorrules.append +22 -0
  84. package/templates/react/add-on/sentry/assets/_dot_env.local.append +11 -0
  85. package/templates/react/add-on/sentry/assets/src/app/global-middleware.ts +11 -0
  86. package/templates/react/add-on/sentry/assets/src/routes/demo.sentry.testing.tsx +489 -0
  87. package/templates/react/add-on/sentry/info.json +14 -0
  88. package/templates/react/add-on/sentry/package.json +5 -0
  89. package/templates/react/add-on/shadcn/README.md +7 -0
  90. package/templates/react/add-on/shadcn/assets/_dot_cursorrules.append +7 -0
  91. package/templates/react/add-on/shadcn/assets/components.json +21 -0
  92. package/templates/react/add-on/shadcn/assets/src/lib/utils.ts +6 -0
  93. package/templates/react/add-on/shadcn/assets/src/styles.css +138 -0
  94. package/templates/react/add-on/shadcn/info.json +7 -0
  95. package/templates/react/add-on/shadcn/package.json +9 -0
  96. package/templates/react/add-on/start/assets/_dot_gitignore.append +2 -0
  97. package/templates/react/add-on/start/assets/app.config.ts.ejs +32 -0
  98. package/templates/react/add-on/start/assets/src/api.ts +6 -0
  99. package/templates/react/add-on/start/assets/src/client.tsx.ejs +33 -0
  100. package/templates/react/add-on/start/assets/src/router.tsx.ejs +48 -0
  101. package/templates/react/add-on/start/assets/src/routes/api.demo-names.ts +11 -0
  102. package/templates/react/add-on/start/assets/src/routes/demo.start.api-request.tsx.ejs +33 -0
  103. package/templates/react/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +50 -0
  104. package/templates/react/add-on/start/assets/src/ssr.tsx.ejs +30 -0
  105. package/templates/react/add-on/start/info.json +18 -0
  106. package/templates/react/add-on/start/package.json +13 -0
  107. package/templates/react/add-on/store/assets/src/lib/demo-store.ts +13 -0
  108. package/templates/react/add-on/store/assets/src/routes/demo.store.tsx.ejs +75 -0
  109. package/templates/react/add-on/store/info.json +13 -0
  110. package/templates/react/add-on/store/package.json +6 -0
  111. package/templates/react/add-on/t3env/README.md +16 -0
  112. package/templates/react/add-on/t3env/assets/src/env.ts +39 -0
  113. package/templates/react/add-on/t3env/info.json +10 -0
  114. package/templates/react/add-on/t3env/package.json +6 -0
  115. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/init.ts +9 -0
  116. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/react.ts +4 -0
  117. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/router.ts +18 -0
  118. package/templates/react/add-on/tRPC/assets/src/routes/api.trpc.$.tsx +16 -0
  119. package/templates/react/add-on/tRPC/info.json +9 -0
  120. package/templates/react/add-on/tRPC/package.json +9 -0
  121. package/templates/react/add-on/table/assets/src/data/demo-table-data.ts +50 -0
  122. package/templates/react/add-on/table/assets/src/routes/demo.table.tsx.ejs +373 -0
  123. package/templates/react/add-on/table/info.json +13 -0
  124. package/templates/react/add-on/table/package.json +7 -0
  125. package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/layout.tsx +5 -0
  126. package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/root-provider.tsx.ejs +70 -0
  127. package/templates/react/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx.ejs +53 -0
  128. package/templates/react/add-on/tanstack-query/info.json +13 -0
  129. package/templates/react/add-on/tanstack-query/package.json +6 -0
  130. package/templates/react/base/README.md.ejs +558 -0
  131. package/templates/react/base/_dot_gitignore +5 -0
  132. package/templates/react/base/_dot_vscode/settings.biome.json +35 -0
  133. package/templates/react/base/_dot_vscode/settings.json +11 -0
  134. package/templates/react/base/index.html.ejs +20 -0
  135. package/templates/react/base/package.biome.json +10 -0
  136. package/templates/react/base/package.eslintprettier.json +11 -0
  137. package/templates/react/base/package.json +30 -0
  138. package/templates/react/base/package.ts.json +7 -0
  139. package/templates/react/base/package.tw.json +6 -0
  140. package/templates/react/base/public/favicon.ico +0 -0
  141. package/templates/react/base/public/logo192.png +0 -0
  142. package/templates/react/base/public/logo512.png +0 -0
  143. package/templates/react/base/public/manifest.json +25 -0
  144. package/templates/react/base/public/robots.txt +3 -0
  145. package/templates/react/base/src/App.css +38 -0
  146. package/templates/react/base/src/App.test.tsx.ejs +10 -0
  147. package/templates/react/base/src/App.tsx.ejs +74 -0
  148. package/templates/react/base/src/components/Header.tsx.ejs +27 -0
  149. package/templates/react/base/src/logo.svg +44 -0
  150. package/templates/react/base/src/reportWebVitals.ts.ejs +28 -0
  151. package/templates/react/base/src/styles.css.ejs +15 -0
  152. package/templates/react/base/toolchain/.prettierignore +3 -0
  153. package/templates/react/base/toolchain/biome.json +31 -0
  154. package/templates/react/base/toolchain/eslint.config.js +5 -0
  155. package/templates/react/base/toolchain/prettier.config.js +10 -0
  156. package/templates/react/base/tsconfig.json.ejs +29 -0
  157. package/templates/react/base/vite.config.js.ejs +23 -0
  158. package/templates/react/code-router/src/main.tsx.ejs +92 -0
  159. package/templates/react/example/tanchat/README.md +37 -0
  160. package/templates/react/example/tanchat/assets/_dot_env.local.append +2 -0
  161. package/templates/react/example/tanchat/assets/public/example-guitar-flowers.jpg +0 -0
  162. package/templates/react/example/tanchat/assets/public/example-guitar-motherboard.jpg +0 -0
  163. package/templates/react/example/tanchat/assets/public/example-guitar-racing.jpg +0 -0
  164. package/templates/react/example/tanchat/assets/public/example-guitar-steamer-trunk.jpg +0 -0
  165. package/templates/react/example/tanchat/assets/public/example-guitar-superhero.jpg +0 -0
  166. package/templates/react/example/tanchat/assets/public/example-guitar-traveling.jpg +0 -0
  167. package/templates/react/example/tanchat/assets/public/example-guitar-video-games.jpg +0 -0
  168. package/templates/react/example/tanchat/assets/src/components/example-AIAssistant.tsx +173 -0
  169. package/templates/react/example/tanchat/assets/src/components/example-GuitarRecommendation.tsx +47 -0
  170. package/templates/react/example/tanchat/assets/src/data/example-guitars.ts +83 -0
  171. package/templates/react/example/tanchat/assets/src/demo.index.css +220 -0
  172. package/templates/react/example/tanchat/assets/src/integrations/tanchat/header-user.tsx +5 -0
  173. package/templates/react/example/tanchat/assets/src/routes/api.messages.ts +24 -0
  174. package/templates/react/example/tanchat/assets/src/routes/api.sse.ts +23 -0
  175. package/templates/react/example/tanchat/assets/src/routes/example.chat.tsx +159 -0
  176. package/templates/react/example/tanchat/assets/src/routes/example.guitars/$guitarId.tsx +50 -0
  177. package/templates/react/example/tanchat/assets/src/routes/example.guitars/index.tsx +54 -0
  178. package/templates/react/example/tanchat/assets/src/store/example-assistant.ts +3 -0
  179. package/templates/react/example/tanchat/assets/src/utils/demo.ai.ts +62 -0
  180. package/templates/react/example/tanchat/assets/src/utils/demo.sse.ts +31 -0
  181. package/templates/react/example/tanchat/assets/src/utils/demo.tools.ts +47 -0
  182. package/templates/react/example/tanchat/info.json +19 -0
  183. package/templates/react/example/tanchat/package.json +16 -0
  184. package/templates/react/file-router/package.fr.json +5 -0
  185. package/templates/react/file-router/src/main.tsx.ejs +55 -0
  186. package/templates/react/file-router/src/routes/__root.tsx.ejs +82 -0
  187. package/templates/solid/add-on/form/assets/src/routes/demo.form.tsx.ejs +352 -0
  188. package/templates/solid/add-on/form/info.json +13 -0
  189. package/templates/solid/add-on/form/package.json +5 -0
  190. package/templates/solid/add-on/module-federation/assets/module-federation.config.js.ejs +27 -0
  191. package/templates/solid/add-on/module-federation/assets/src/demo-mf-component.tsx +3 -0
  192. package/templates/solid/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +9 -0
  193. package/templates/solid/add-on/module-federation/info.json +7 -0
  194. package/templates/solid/add-on/module-federation/package.json +5 -0
  195. package/templates/solid/add-on/sentry/assets/_dot_cursorrules.append +22 -0
  196. package/templates/solid/add-on/sentry/assets/_dot_env.local.append +2 -0
  197. package/templates/solid/add-on/sentry/assets/src/routes/demo.sentry.bad-event-handler.tsx +20 -0
  198. package/templates/solid/add-on/sentry/info.json +13 -0
  199. package/templates/solid/add-on/sentry/package.json +5 -0
  200. package/templates/solid/add-on/solid-ui/README.md +9 -0
  201. package/templates/solid/add-on/solid-ui/assets/src/lib/utils.ts +6 -0
  202. package/templates/solid/add-on/solid-ui/assets/src/styles.css +138 -0
  203. package/templates/solid/add-on/solid-ui/assets/ui.config.json +13 -0
  204. package/templates/solid/add-on/solid-ui/info.json +11 -0
  205. package/templates/solid/add-on/solid-ui/package.json +9 -0
  206. package/templates/solid/add-on/start/assets/app.config.ts +16 -0
  207. package/templates/solid/add-on/start/assets/src/api.ts +6 -0
  208. package/templates/solid/add-on/start/assets/src/client.tsx +7 -0
  209. package/templates/solid/add-on/start/assets/src/router.tsx.ejs +24 -0
  210. package/templates/solid/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +49 -0
  211. package/templates/solid/add-on/start/assets/src/ssr.tsx +12 -0
  212. package/templates/solid/add-on/start/info.json +14 -0
  213. package/templates/solid/add-on/start/package.json +12 -0
  214. package/templates/solid/add-on/store/assets/src/lib/demo-store.ts +13 -0
  215. package/templates/solid/add-on/store/assets/src/routes/demo.store.tsx.ejs +77 -0
  216. package/templates/solid/add-on/store/info.json +13 -0
  217. package/templates/solid/add-on/store/package.json +6 -0
  218. package/templates/solid/add-on/t3env/README.md +16 -0
  219. package/templates/solid/add-on/t3env/assets/src/env.ts +39 -0
  220. package/templates/solid/add-on/t3env/info.json +10 -0
  221. package/templates/solid/add-on/t3env/package.json +6 -0
  222. package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/header-user.tsx +5 -0
  223. package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/provider.tsx +15 -0
  224. package/templates/solid/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx +30 -0
  225. package/templates/solid/add-on/tanstack-query/info.json +13 -0
  226. package/templates/solid/add-on/tanstack-query/package.json +6 -0
  227. package/templates/solid/base/README.md.ejs +215 -0
  228. package/templates/solid/base/_dot_cursorrules.append +35 -0
  229. package/templates/solid/base/_dot_gitignore +5 -0
  230. package/templates/solid/base/_dot_vscode/settings.biome.json +35 -0
  231. package/templates/solid/base/_dot_vscode/settings.json +11 -0
  232. package/templates/solid/base/index.html.ejs +20 -0
  233. package/templates/solid/base/package.biome.json +10 -0
  234. package/templates/solid/base/package.eslintprettier.json +11 -0
  235. package/templates/solid/base/package.json +23 -0
  236. package/templates/solid/base/package.ts.json +5 -0
  237. package/templates/solid/base/package.tw.json +6 -0
  238. package/templates/solid/base/public/favicon.ico +0 -0
  239. package/templates/solid/base/public/logo192.png +0 -0
  240. package/templates/solid/base/public/logo512.png +0 -0
  241. package/templates/solid/base/public/manifest.json +25 -0
  242. package/templates/solid/base/public/robots.txt +3 -0
  243. package/templates/solid/base/src/App.css +0 -0
  244. package/templates/solid/base/src/App.tsx.ejs +47 -0
  245. package/templates/solid/base/src/components/Header.tsx.ejs +26 -0
  246. package/templates/solid/base/src/logo.svg +120 -0
  247. package/templates/solid/base/src/styles.css.ejs +15 -0
  248. package/templates/solid/base/toolchain/.prettierignore +3 -0
  249. package/templates/solid/base/toolchain/biome.json +31 -0
  250. package/templates/solid/base/toolchain/eslint.config.js +5 -0
  251. package/templates/solid/base/toolchain/prettier.config.js +10 -0
  252. package/templates/solid/base/tsconfig.json.ejs +31 -0
  253. package/templates/solid/base/vite.config.js.ejs +22 -0
  254. package/templates/solid/code-router/src/main.tsx.ejs +71 -0
  255. package/templates/solid/example/tanchat/README.md +52 -0
  256. package/templates/solid/example/tanchat/assets/ai-streaming-server/README.md +110 -0
  257. package/templates/solid/example/tanchat/assets/ai-streaming-server/_dot_env.example +1 -0
  258. package/templates/solid/example/tanchat/assets/ai-streaming-server/package.json +26 -0
  259. package/templates/solid/example/tanchat/assets/ai-streaming-server/src/index.ts +102 -0
  260. package/templates/solid/example/tanchat/assets/ai-streaming-server/tsconfig.json +15 -0
  261. package/templates/solid/example/tanchat/assets/src/components/demo.SettingsDialog.tsx +149 -0
  262. package/templates/solid/example/tanchat/assets/src/demo.index.css +227 -0
  263. package/templates/solid/example/tanchat/assets/src/lib/demo-store.ts +13 -0
  264. package/templates/solid/example/tanchat/assets/src/routes/example.chat.tsx +435 -0
  265. package/templates/solid/example/tanchat/assets/src/store/demo.hooks.ts +17 -0
  266. package/templates/solid/example/tanchat/assets/src/store/demo.store.ts +133 -0
  267. package/templates/solid/example/tanchat/info.json +14 -0
  268. package/templates/solid/example/tanchat/package.json +7 -0
  269. package/templates/solid/file-router/package.fr.json +5 -0
  270. package/templates/solid/file-router/src/main.tsx.ejs +47 -0
  271. package/templates/solid/file-router/src/routes/__root.tsx.ejs +41 -0
  272. package/templates/solid/file-router/src/routes/index.tsx +43 -0
  273. package/tests/cra.test.ts +293 -0
  274. package/tests/snapshots/cra/cr-js-npm.json +33 -0
  275. package/tests/snapshots/cra/cr-ts-npm.json +34 -0
  276. package/tests/snapshots/cra/cr-ts-start-npm.json +38 -0
  277. package/tests/snapshots/cra/fr-ts-npm.json +34 -0
  278. package/tests/snapshots/cra/fr-ts-tw-npm.json +33 -0
  279. package/tests/snapshots/cra/solid-cr-js-npm.json +31 -0
  280. package/tests/snapshots/cra/solid-cr-ts-npm.json +32 -0
  281. package/tests/snapshots/cra/solid-cr-ts-start-npm.json +36 -0
  282. package/tests/snapshots/cra/solid-fr-ts-npm.json +33 -0
  283. package/tests/snapshots/cra/solid-fr-ts-tw-npm.json +32 -0
  284. package/tests/test-utilities.ts +87 -0
  285. package/dist/add-to-app.js +0 -169
  286. package/dist/custom-add-ons/add-on.js +0 -175
  287. package/dist/custom-add-ons/shared.js +0 -117
  288. package/dist/custom-add-ons/starter.js +0 -84
  289. package/dist/file-helpers.js +0 -165
  290. package/dist/frameworks.js +0 -92
  291. package/dist/integrations/git.js +0 -4
  292. package/dist/integrations/shadcn.js +0 -33
  293. package/dist/package-json.js +0 -48
  294. package/dist/special-steps/index.js +0 -24
  295. package/dist/special-steps/rimraf-node-modules.js +0 -16
  296. package/dist/template-file.js +0 -112
  297. package/dist/types/add-to-app.d.ts +0 -17
  298. package/dist/types/custom-add-ons/add-on.d.ts +0 -69
  299. package/dist/types/custom-add-ons/shared.d.ts +0 -15
  300. package/dist/types/custom-add-ons/starter.d.ts +0 -7
  301. package/dist/types/file-helpers.d.ts +0 -15
  302. package/dist/types/frameworks.d.ts +0 -7
  303. package/dist/types/integrations/git.d.ts +0 -2
  304. package/dist/types/integrations/shadcn.d.ts +0 -2
  305. package/dist/types/package-json.d.ts +0 -7
  306. package/dist/types/special-steps/index.d.ts +0 -2
  307. package/dist/types/special-steps/rimraf-node-modules.d.ts +0 -2
  308. package/dist/types/template-file.d.ts +0 -2
  309. package/src/add-to-app.ts +0 -274
  310. package/src/custom-add-ons/add-on.ts +0 -261
  311. package/src/custom-add-ons/shared.ts +0 -161
  312. package/src/custom-add-ons/starter.ts +0 -126
  313. package/src/file-helpers.ts +0 -235
  314. package/src/frameworks.ts +0 -134
  315. package/src/integrations/git.ts +0 -7
  316. package/src/integrations/shadcn.ts +0 -54
  317. package/src/package-json.ts +0 -69
  318. package/src/special-steps/index.ts +0 -36
  319. package/src/special-steps/rimraf-node-modules.ts +0 -25
  320. package/src/template-file.ts +0 -150
  321. package/tests/add-ons.test.ts +0 -67
  322. package/tests/add-to-app.test.ts +0 -358
  323. package/tests/config-file.test.ts +0 -68
  324. package/tests/create-app.test.ts +0 -120
  325. package/tests/custom-add-ons/add-on.test.ts +0 -12
  326. package/tests/custom-add-ons/shared.test.ts +0 -257
  327. package/tests/custom-add-ons/starter.test.ts +0 -58
  328. package/tests/environment.test.ts +0 -115
  329. package/tests/file-helper.test.ts +0 -90
  330. package/tests/frameworks.test.ts +0 -95
  331. package/tests/index.test.ts +0 -9
  332. package/tests/integrations/git.test.ts +0 -20
  333. package/tests/integrations/shadcn.test.ts +0 -91
  334. package/tests/options.test.ts +0 -42
  335. package/tests/package-json.test.ts +0 -63
  336. package/tests/package-manager.test.ts +0 -154
  337. package/tests/setupVitest.ts +0 -6
  338. package/tests/template-file.test.ts +0 -178
  339. package/tests/utils.test.ts +0 -23
  340. package/vitest.config.ts +0 -21
package/dist/options.js CHANGED
@@ -1,9 +1,333 @@
1
- export const createSerializedOptions = (options) => {
2
- const serializedOptions = {
3
- ...options,
4
- chosenAddOns: options.chosenAddOns.map((addOn) => addOn.id),
5
- framework: options.framework.id,
6
- starter: options.starter?.id,
7
- };
8
- return serializedOptions;
9
- };
1
+ import { cancel, confirm, isCancel, multiselect, select, text, } from '@clack/prompts';
2
+ import { DEFAULT_PACKAGE_MANAGER, SUPPORTED_PACKAGE_MANAGERS, getPackageManager, } from './package-manager.js';
3
+ import { DEFAULT_TOOLCHAIN, SUPPORTED_TOOLCHAINS } from './toolchain.js';
4
+ import { CODE_ROUTER, DEFAULT_FRAMEWORK, FILE_ROUTER } from './constants.js';
5
+ import { finalizeAddOns, getAllAddOns, loadRemoteAddOn } from './add-ons.js';
6
+ // If all CLI options are provided, use them directly
7
+ export async function normalizeOptions(cliOptions, forcedMode, forcedAddOns) {
8
+ // in some cases, if you use windows/powershell, the argument for addons
9
+ // if sepparated by comma is not really passed as an array, but as a string
10
+ // with spaces, We need to normalize this edge case.
11
+ if (Array.isArray(cliOptions.addOns) && cliOptions.addOns.length === 1) {
12
+ const parseSeparatedArgs = cliOptions.addOns[0].split(' ');
13
+ if (parseSeparatedArgs.length > 1) {
14
+ cliOptions.addOns = parseSeparatedArgs;
15
+ }
16
+ }
17
+ if (cliOptions.projectName) {
18
+ let typescript = cliOptions.template === 'typescript' ||
19
+ cliOptions.template === 'file-router' ||
20
+ cliOptions.framework === 'solid';
21
+ let tailwind = !!cliOptions.tailwind;
22
+ if (cliOptions.framework === 'solid') {
23
+ tailwind = true;
24
+ }
25
+ let mode = cliOptions.template === 'file-router' ? FILE_ROUTER : CODE_ROUTER;
26
+ const overlay = cliOptions.overlay
27
+ ? (await loadRemoteAddOn(cliOptions.overlay))
28
+ : undefined;
29
+ if (overlay) {
30
+ tailwind = overlay.tailwind;
31
+ typescript = overlay.typescript;
32
+ cliOptions.framework = overlay.framework;
33
+ mode = overlay.mode;
34
+ }
35
+ let addOns = false;
36
+ let chosenAddOns = [];
37
+ if (Array.isArray(cliOptions.addOns) ||
38
+ overlay?.dependsOn ||
39
+ forcedAddOns) {
40
+ addOns = true;
41
+ let finalAddOns = Array.from(new Set([...(overlay?.dependsOn || []), ...(forcedAddOns || [])]));
42
+ if (cliOptions.addOns && Array.isArray(cliOptions.addOns)) {
43
+ finalAddOns = Array.from(new Set([
44
+ ...(forcedAddOns || []),
45
+ ...finalAddOns,
46
+ ...cliOptions.addOns,
47
+ ]));
48
+ }
49
+ chosenAddOns = await finalizeAddOns(cliOptions.framework || DEFAULT_FRAMEWORK, forcedMode || cliOptions.template === 'file-router'
50
+ ? FILE_ROUTER
51
+ : CODE_ROUTER, finalAddOns);
52
+ tailwind = true;
53
+ typescript = true;
54
+ }
55
+ return {
56
+ framework: cliOptions.framework || 'react',
57
+ projectName: cliOptions.projectName,
58
+ typescript,
59
+ tailwind,
60
+ packageManager: cliOptions.packageManager ||
61
+ getPackageManager() ||
62
+ DEFAULT_PACKAGE_MANAGER,
63
+ toolchain: cliOptions.toolchain || DEFAULT_TOOLCHAIN,
64
+ mode,
65
+ git: !!cliOptions.git,
66
+ addOns,
67
+ chosenAddOns,
68
+ variableValues: {},
69
+ overlay,
70
+ };
71
+ }
72
+ }
73
+ async function collectVariables(variables) {
74
+ const responses = {};
75
+ for (const variable of variables) {
76
+ if (variable.type === 'string') {
77
+ const response = await text({
78
+ message: variable.description,
79
+ initialValue: variable.default,
80
+ });
81
+ if (isCancel(response)) {
82
+ cancel('Operation cancelled.');
83
+ process.exit(0);
84
+ }
85
+ responses[variable.name] = response;
86
+ }
87
+ else if (variable.type === 'number') {
88
+ const response = await text({
89
+ message: variable.description,
90
+ initialValue: variable.default.toString(),
91
+ });
92
+ if (isCancel(response)) {
93
+ cancel('Operation cancelled.');
94
+ process.exit(0);
95
+ }
96
+ responses[variable.name] = Number(response);
97
+ }
98
+ else {
99
+ const response = await confirm({
100
+ message: variable.description,
101
+ initialValue: variable.default === true,
102
+ });
103
+ if (isCancel(response)) {
104
+ cancel('Operation cancelled.');
105
+ process.exit(0);
106
+ }
107
+ responses[variable.name] = response;
108
+ }
109
+ }
110
+ return responses;
111
+ }
112
+ export async function promptForOptions(cliOptions, { forcedAddOns = [], forcedMode, }) {
113
+ const options = {};
114
+ options.framework = cliOptions.framework || DEFAULT_FRAMEWORK;
115
+ if (options.framework === 'solid') {
116
+ options.typescript = true;
117
+ options.tailwind = true;
118
+ }
119
+ if (cliOptions.addOns) {
120
+ options.typescript = true;
121
+ }
122
+ if (!cliOptions.projectName) {
123
+ const value = await text({
124
+ message: 'What would you like to name your project?',
125
+ defaultValue: 'my-app',
126
+ validate(value) {
127
+ if (!value) {
128
+ return 'Please enter a name';
129
+ }
130
+ },
131
+ });
132
+ if (isCancel(value)) {
133
+ cancel('Operation cancelled.');
134
+ process.exit(0);
135
+ }
136
+ options.projectName = value;
137
+ }
138
+ else {
139
+ options.projectName = cliOptions.projectName;
140
+ }
141
+ // Router type selection
142
+ if (!cliOptions.template && !forcedMode) {
143
+ const routerType = await select({
144
+ message: 'Select the router type:',
145
+ options: [
146
+ {
147
+ value: FILE_ROUTER,
148
+ label: 'File Router - File-based routing structure',
149
+ },
150
+ {
151
+ value: CODE_ROUTER,
152
+ label: 'Code Router - Traditional code-based routing',
153
+ },
154
+ ],
155
+ initialValue: FILE_ROUTER,
156
+ });
157
+ if (isCancel(routerType)) {
158
+ cancel('Operation cancelled.');
159
+ process.exit(0);
160
+ }
161
+ options.mode = routerType;
162
+ }
163
+ else if (forcedMode) {
164
+ options.mode = forcedMode === 'file-router' ? FILE_ROUTER : CODE_ROUTER;
165
+ options.typescript = options.mode === FILE_ROUTER;
166
+ }
167
+ else {
168
+ options.mode =
169
+ cliOptions.template === 'file-router' ? FILE_ROUTER : CODE_ROUTER;
170
+ if (options.mode === FILE_ROUTER) {
171
+ options.typescript = true;
172
+ }
173
+ }
174
+ // TypeScript selection (if using Code Router)
175
+ if (!options.typescript) {
176
+ if (options.mode === CODE_ROUTER) {
177
+ const typescriptEnable = await confirm({
178
+ message: 'Would you like to use TypeScript?',
179
+ initialValue: true,
180
+ });
181
+ if (isCancel(typescriptEnable)) {
182
+ cancel('Operation cancelled.');
183
+ process.exit(0);
184
+ }
185
+ options.typescript = typescriptEnable;
186
+ }
187
+ else {
188
+ options.typescript = true;
189
+ }
190
+ }
191
+ // Tailwind selection
192
+ if (!cliOptions.tailwind && options.framework === 'react') {
193
+ const tailwind = await confirm({
194
+ message: 'Would you like to use Tailwind CSS?',
195
+ initialValue: true,
196
+ });
197
+ if (isCancel(tailwind)) {
198
+ cancel('Operation cancelled.');
199
+ process.exit(0);
200
+ }
201
+ options.tailwind = tailwind;
202
+ }
203
+ else {
204
+ options.tailwind = options.framework === 'solid' || !!cliOptions.tailwind;
205
+ }
206
+ // Package manager selection
207
+ if (cliOptions.packageManager === undefined) {
208
+ const detectedPackageManager = getPackageManager();
209
+ if (!detectedPackageManager) {
210
+ const pm = await select({
211
+ message: 'Select package manager:',
212
+ options: SUPPORTED_PACKAGE_MANAGERS.map((pm) => ({
213
+ value: pm,
214
+ label: pm,
215
+ })),
216
+ initialValue: DEFAULT_PACKAGE_MANAGER,
217
+ });
218
+ if (isCancel(pm)) {
219
+ cancel('Operation cancelled.');
220
+ process.exit(0);
221
+ }
222
+ options.packageManager = pm;
223
+ }
224
+ else {
225
+ options.packageManager = detectedPackageManager;
226
+ }
227
+ }
228
+ else {
229
+ options.packageManager = cliOptions.packageManager;
230
+ }
231
+ // Toolchain selection
232
+ if (cliOptions.toolchain === undefined) {
233
+ const tc = await select({
234
+ message: 'Select toolchain',
235
+ options: SUPPORTED_TOOLCHAINS.map((tc) => ({
236
+ value: tc,
237
+ label: tc,
238
+ })),
239
+ initialValue: DEFAULT_TOOLCHAIN,
240
+ });
241
+ if (isCancel(tc)) {
242
+ cancel('Operation cancelled.');
243
+ process.exit(0);
244
+ }
245
+ options.toolchain = tc;
246
+ }
247
+ else {
248
+ options.toolchain = cliOptions.toolchain;
249
+ }
250
+ options.chosenAddOns = [];
251
+ if (Array.isArray(cliOptions.addOns)) {
252
+ options.chosenAddOns = await finalizeAddOns(options.framework, options.mode, Array.from(new Set([...cliOptions.addOns, ...forcedAddOns])));
253
+ options.tailwind = true;
254
+ }
255
+ else if (cliOptions.addOns) {
256
+ // Select any add-ons
257
+ const allAddOns = await getAllAddOns(options.framework, options.mode);
258
+ const addOns = allAddOns.filter((addOn) => addOn.type === 'add-on');
259
+ let selectedAddOns = [];
260
+ if (options.typescript && addOns.length > 0) {
261
+ const value = await multiselect({
262
+ message: 'What add-ons would you like for your project:',
263
+ options: addOns
264
+ .filter((addOn) => !forcedAddOns.includes(addOn.id))
265
+ .map((addOn) => ({
266
+ value: addOn.id,
267
+ label: addOn.name,
268
+ hint: addOn.description,
269
+ })),
270
+ required: false,
271
+ });
272
+ if (isCancel(value)) {
273
+ cancel('Operation cancelled.');
274
+ process.exit(0);
275
+ }
276
+ selectedAddOns = value;
277
+ }
278
+ // Select any examples
279
+ let selectedExamples = [];
280
+ const examples = allAddOns.filter((addOn) => addOn.type === 'example');
281
+ if (options.typescript && examples.length > 0) {
282
+ const value = await multiselect({
283
+ message: 'Would you like any examples?',
284
+ options: examples
285
+ .filter((addOn) => !forcedAddOns.includes(addOn.id))
286
+ .map((addOn) => ({
287
+ value: addOn.id,
288
+ label: addOn.name,
289
+ hint: addOn.description,
290
+ })),
291
+ required: false,
292
+ });
293
+ if (isCancel(value)) {
294
+ cancel('Operation cancelled.');
295
+ process.exit(0);
296
+ }
297
+ selectedExamples = value;
298
+ }
299
+ if (selectedAddOns.length > 0 ||
300
+ selectedExamples.length > 0 ||
301
+ forcedAddOns.length > 0) {
302
+ options.chosenAddOns = await finalizeAddOns(options.framework, options.mode, Array.from(new Set([...selectedAddOns, ...selectedExamples, ...forcedAddOns])));
303
+ options.tailwind = true;
304
+ }
305
+ }
306
+ else if (forcedAddOns.length > 0) {
307
+ options.chosenAddOns = await finalizeAddOns(options.framework, options.mode, forcedAddOns);
308
+ }
309
+ // Collect variables
310
+ const variables = [];
311
+ for (const addOn of options.chosenAddOns) {
312
+ for (const variable of addOn.variables ?? []) {
313
+ variables.push(variable);
314
+ }
315
+ }
316
+ options.variableValues = await collectVariables(variables);
317
+ // Git selection
318
+ if (cliOptions.git === undefined) {
319
+ const git = await confirm({
320
+ message: 'Would you like to initialize a new git repository?',
321
+ initialValue: true,
322
+ });
323
+ if (isCancel(git)) {
324
+ cancel('Operation cancelled.');
325
+ process.exit(0);
326
+ }
327
+ options.git = git;
328
+ }
329
+ else {
330
+ options.git = !!cliOptions.git;
331
+ }
332
+ return options;
333
+ }
@@ -14,62 +14,17 @@ export function getPackageManager() {
14
14
  const packageManager = SUPPORTED_PACKAGE_MANAGERS.find((manager) => userAgent.startsWith(manager));
15
15
  return packageManager;
16
16
  }
17
- export function getPackageManagerScriptCommand(packagerManager, args = []) {
17
+ export function packageManagerExecute(environment, packagerManager, pkg, args, cwd) {
18
18
  switch (packagerManager) {
19
19
  case 'yarn':
20
- return { command: 'yarn', args: ['run', ...args] };
20
+ return environment.execute('yarn', ['dlx', pkg, ...args], cwd);
21
21
  case 'pnpm':
22
- return { command: 'pnpm', args: [...args] };
22
+ return environment.execute('pnpx', [pkg, ...args], cwd);
23
23
  case 'bun':
24
- return { command: 'bunx', args: ['--bun', 'run', ...args] };
24
+ return environment.execute('bunx', ['--bun', pkg, ...args], cwd);
25
25
  case 'deno':
26
- return { command: 'deno', args: ['task', ...args] };
26
+ return environment.execute('deno', ['run', `npm:${pkg}`, ...args], cwd);
27
27
  default:
28
- return { command: 'npm', args: ['run', ...args] };
28
+ return environment.execute('npx', [pkg, ...args], cwd);
29
29
  }
30
30
  }
31
- export function getPackageManagerExecuteCommand(packagerManager, pkg, args = []) {
32
- switch (packagerManager) {
33
- case 'yarn':
34
- return { command: 'yarn', args: ['dlx', pkg, ...args] };
35
- case 'pnpm':
36
- return { command: 'pnpx', args: [pkg, ...args] };
37
- case 'bun':
38
- return { command: 'bunx', args: ['--bun', pkg, ...args] };
39
- case 'deno':
40
- return { command: 'deno', args: ['run', `npm:${pkg}`, ...args] };
41
- default:
42
- return { command: 'npx', args: [pkg, ...args] };
43
- }
44
- }
45
- export function getPackageManagerInstallCommand(packagerManager, pkg, isDev = false) {
46
- if (pkg) {
47
- switch (packagerManager) {
48
- case 'yarn':
49
- case 'pnpm':
50
- return {
51
- command: packagerManager,
52
- args: ['add', pkg, isDev ? '--dev' : ''],
53
- };
54
- default:
55
- return {
56
- command: packagerManager,
57
- args: ['install', pkg, isDev ? '-D' : ''],
58
- };
59
- }
60
- }
61
- else {
62
- return {
63
- command: packagerManager,
64
- args: ['install'],
65
- };
66
- }
67
- }
68
- export function packageManagerInstall(environment, cwd, packagerManager, pkg) {
69
- const { command, args: commandArgs } = getPackageManagerInstallCommand(packagerManager, pkg);
70
- return environment.execute(command, commandArgs, cwd);
71
- }
72
- export function packageManagerExecute(environment, cwd, packagerManager, pkg, args) {
73
- const { command, args: commandArgs } = getPackageManagerExecuteCommand(packagerManager, pkg, args);
74
- return environment.execute(command, commandArgs, cwd);
75
- }
@@ -0,0 +1,6 @@
1
+ import { dirname, join } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ export function getTemplatesRoot() {
4
+ // Get the parent directory because the compiled code is in the dist folder
5
+ return join(dirname(dirname(fileURLToPath(import.meta.url))), 'templates');
6
+ }
@@ -0,0 +1,6 @@
1
+ export const SUPPORTED_TOOLCHAINS = [
2
+ 'none',
3
+ 'biome',
4
+ 'eslint+prettier',
5
+ ];
6
+ export const DEFAULT_TOOLCHAIN = 'none';
@@ -1,3 +1,8 @@
1
- import type { AddOn, Framework, Mode } from './types.js';
2
- export declare function getAllAddOns(framework: Framework, mode: Mode): Array<AddOn>;
3
- export declare function finalizeAddOns(framework: Framework, mode: Mode, chosenAddOnIDs: Array<string>): Promise<Array<AddOn>>;
1
+ import type { AddOn, CliOptions, Framework, TemplateOptions } from './types.js';
2
+ export declare function getAllAddOns(framework: Framework, template: string): Promise<Array<AddOn>>;
3
+ export declare function finalizeAddOns(framework: Framework, template: string, chosenAddOnIDs: Array<string>): Promise<Array<AddOn>>;
4
+ export declare function listAddOns(options: CliOptions, { forcedMode, forcedAddOns, }: {
5
+ forcedMode?: TemplateOptions;
6
+ forcedAddOns?: Array<string>;
7
+ }): Promise<void>;
8
+ export declare function loadRemoteAddOn(url: string): Promise<AddOn>;
@@ -0,0 +1,3 @@
1
+ export declare function add(addOns: Array<string>, { silent, }?: {
2
+ silent?: boolean;
3
+ }): Promise<void>;
@@ -0,0 +1,7 @@
1
+ import type { Mode } from './types.js';
2
+ export declare function cli({ name, appName, forcedMode, forcedAddOns, }: {
3
+ name: string;
4
+ appName: string;
5
+ forcedMode?: Mode;
6
+ forcedAddOns?: Array<string>;
7
+ }): void;
@@ -1,9 +1,7 @@
1
- import type { Environment, Options } from './types.js';
2
- export type PersistedOptions = Omit<Partial<Options>, 'addOns' | 'chosenAddOns' | 'framework' | 'starter' | 'targetDir'> & {
3
- framework: string;
1
+ import type { Environment, Options } from './types';
2
+ export type PersistedOptions = Exclude<Partial<Options>, 'addOns' | 'chosenAddOns'> & {
4
3
  version: number;
5
4
  existingAddOns: Array<string>;
6
- starter?: string;
7
5
  };
8
- export declare function writeConfigFileToEnvironment(environment: Environment, options: Options): Promise<void>;
9
- export declare function readConfigFileFromEnvironment(environment: Environment, targetDir: string): Promise<PersistedOptions | null>;
6
+ export declare function writeConfigFile(environment: Environment, targetDir: string, options: Options): Promise<void>;
7
+ export declare function readConfigFile(targetDir: string): Promise<PersistedOptions | null>;
@@ -1,3 +1,6 @@
1
+ import type { Framework } from './types.js';
1
2
  export declare const CODE_ROUTER = "code-router";
2
3
  export declare const FILE_ROUTER = "file-router";
4
+ export declare const SUPPORTED_FRAMEWORKS: Array<Framework>;
5
+ export declare const DEFAULT_FRAMEWORK: Framework;
3
6
  export declare const CONFIG_FILE = ".cta.json";
@@ -1,2 +1,8 @@
1
1
  import type { Environment, Options } from './types.js';
2
- export declare function createApp(environment: Environment, options: Options): Promise<void>;
2
+ export declare function createApp(options: Options, { silent, environment, cwd, appName, }: {
3
+ silent?: boolean;
4
+ environment: Environment;
5
+ cwd?: string;
6
+ name?: string;
7
+ appName?: string;
8
+ }): Promise<void>;
@@ -0,0 +1,3 @@
1
+ type AddOnMode = 'add-on' | 'overlay';
2
+ export declare function initAddOn(mode: AddOnMode): Promise<void>;
3
+ export {};
@@ -1,10 +1,9 @@
1
1
  import type { Environment } from './types.js';
2
2
  export declare function createDefaultEnvironment(): Environment;
3
- export declare function createMemoryEnvironment(returnPathsRelativeTo?: string): {
3
+ export declare function createMemoryEnvironment(): {
4
4
  environment: Environment;
5
5
  output: {
6
6
  files: Record<string, string>;
7
- deletedFiles: Array<string>;
8
7
  commands: Array<{
9
8
  command: string;
10
9
  args: Array<string>;
@@ -0,0 +1,2 @@
1
+ export declare function readFileHelper(path: string): string;
2
+ export declare function getBinaryFile(content: string): string | null;
@@ -1,20 +1 @@
1
- export { createApp } from './create-app.js';
2
- export { addToApp } from './add-to-app.js';
3
- export { finalizeAddOns, getAllAddOns } from './add-ons.js';
4
- export { loadRemoteAddOn } from './custom-add-ons/add-on.js';
5
- export { loadStarter } from './custom-add-ons/starter.js';
6
- export { createMemoryEnvironment, createDefaultEnvironment, } from './environment.js';
7
- export { CODE_ROUTER, CONFIG_FILE, FILE_ROUTER } from './constants.js';
8
- export { DEFAULT_PACKAGE_MANAGER, SUPPORTED_PACKAGE_MANAGERS, getPackageManager, } from './package-manager.js';
9
- export { registerFramework, getFrameworkById, getFrameworkByName, getFrameworks, } from './frameworks.js';
10
- export { writeConfigFileToEnvironment, readConfigFileFromEnvironment, } from './config-file.js';
11
- export { cleanUpFiles, cleanUpFileArray, readFileHelper, getBinaryFile, recursivelyGatherFiles, relativePath, } from './file-helpers.js';
12
- export { formatCommand } from './utils.js';
13
- export { initStarter, compileStarter } from './custom-add-ons/starter.js';
14
- export { initAddOn, compileAddOn } from './custom-add-ons/add-on.js';
15
- export { createAppOptionsFromPersisted, createSerializedOptionsFromPersisted, } from './custom-add-ons/shared.js';
16
- export { createSerializedOptions } from './options.js';
17
- export { StarterCompiledSchema, StatusEvent, StatusStepType, StopEvent, AddOnCompiledSchema, AddOnInfoSchema, IntegrationSchema, } from './types.js';
18
- export type { AddOn, Environment, FileBundleHandler, Framework, FrameworkDefinition, Mode, Options, SerializedOptions, Starter, StarterCompiled, } from './types.js';
19
- export type { PersistedOptions } from './config-file.js';
20
- export type { PackageManager } from './package-manager.js';
1
+ export { cli } from './cli.js';
@@ -0,0 +1,7 @@
1
+ import type { TemplateOptions } from './types.js';
2
+ export default function runServer(sse: boolean, { forcedAddOns, appName, name, }: {
3
+ forcedMode?: TemplateOptions;
4
+ forcedAddOns?: Array<string>;
5
+ appName?: string;
6
+ name?: string;
7
+ }): Promise<void>;
@@ -1,2 +1,6 @@
1
- import type { Options, SerializedOptions } from './types';
2
- export declare const createSerializedOptions: (options: Options) => SerializedOptions;
1
+ import type { CliOptions, Mode, Options, TemplateOptions } from './types.js';
2
+ export declare function normalizeOptions(cliOptions: CliOptions, forcedMode?: Mode, forcedAddOns?: Array<string>): Promise<Options | undefined>;
3
+ export declare function promptForOptions(cliOptions: CliOptions, { forcedAddOns, forcedMode, }: {
4
+ forcedAddOns?: Array<string>;
5
+ forcedMode?: TemplateOptions;
6
+ }): Promise<Required<Options> | undefined>;
@@ -3,21 +3,4 @@ export declare const SUPPORTED_PACKAGE_MANAGERS: readonly ["npm", "yarn", "pnpm"
3
3
  export type PackageManager = (typeof SUPPORTED_PACKAGE_MANAGERS)[number];
4
4
  export declare const DEFAULT_PACKAGE_MANAGER: PackageManager;
5
5
  export declare function getPackageManager(): PackageManager | undefined;
6
- export declare function getPackageManagerScriptCommand(packagerManager: PackageManager, args?: Array<string>): {
7
- command: string;
8
- args: string[];
9
- };
10
- export declare function getPackageManagerExecuteCommand(packagerManager: PackageManager, pkg: string, args?: Array<string>): {
11
- command: string;
12
- args: string[];
13
- };
14
- export declare function getPackageManagerInstallCommand(packagerManager: PackageManager, pkg?: string, isDev?: boolean): {
15
- command: "npm" | "yarn" | "pnpm" | "bun" | "deno";
16
- args: string[];
17
- };
18
- export declare function packageManagerInstall(environment: Environment, cwd: string, packagerManager: PackageManager, pkg?: string): Promise<{
19
- stdout: string;
20
- }>;
21
- export declare function packageManagerExecute(environment: Environment, cwd: string, packagerManager: PackageManager, pkg: string, args: Array<string>): Promise<{
22
- stdout: string;
23
- }>;
6
+ export declare function packageManagerExecute(environment: Environment, packagerManager: PackageManager, pkg: string, args: Array<string>, cwd: string): Promise<void>;
@@ -0,0 +1 @@
1
+ export declare function getTemplatesRoot(): string;
@@ -0,0 +1,3 @@
1
+ export declare const SUPPORTED_TOOLCHAINS: readonly ["none", "biome", "eslint+prettier"];
2
+ export type ToolChain = (typeof SUPPORTED_TOOLCHAINS)[number];
3
+ export declare const DEFAULT_TOOLCHAIN: ToolChain;