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

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 +5 -91
  2. package/dist/add-to-app.js +169 -0
  3. package/dist/config-file.js +14 -9
  4. package/dist/constants.js +0 -2
  5. package/dist/create-app.js +142 -451
  6. package/dist/custom-add-ons/add-on.js +175 -0
  7. package/dist/custom-add-ons/shared.js +117 -0
  8. package/dist/custom-add-ons/starter.js +84 -0
  9. package/dist/environment.js +64 -32
  10. package/dist/file-helpers.js +165 -0
  11. package/dist/frameworks.js +92 -0
  12. package/dist/index.js +17 -1
  13. package/dist/integrations/git.js +4 -0
  14. package/dist/integrations/shadcn.js +33 -0
  15. package/dist/options.js +9 -333
  16. package/dist/package-json.js +48 -0
  17. package/dist/package-manager.js +51 -6
  18. package/dist/special-steps/index.js +24 -0
  19. package/dist/special-steps/rimraf-node-modules.js +16 -0
  20. package/dist/template-file.js +112 -0
  21. package/dist/types/add-ons.d.ts +3 -8
  22. package/dist/types/add-to-app.d.ts +17 -0
  23. package/dist/types/config-file.d.ts +6 -4
  24. package/dist/types/constants.d.ts +0 -3
  25. package/dist/types/create-app.d.ts +1 -7
  26. package/dist/types/custom-add-ons/add-on.d.ts +69 -0
  27. package/dist/types/custom-add-ons/shared.d.ts +15 -0
  28. package/dist/types/custom-add-ons/starter.d.ts +7 -0
  29. package/dist/types/environment.d.ts +2 -1
  30. package/dist/types/file-helpers.d.ts +15 -0
  31. package/dist/types/frameworks.d.ts +7 -0
  32. package/dist/types/index.d.ts +20 -1
  33. package/dist/types/integrations/git.d.ts +2 -0
  34. package/dist/types/integrations/shadcn.d.ts +2 -0
  35. package/dist/types/options.d.ts +2 -6
  36. package/dist/types/package-json.d.ts +7 -0
  37. package/dist/types/package-manager.d.ts +18 -1
  38. package/dist/types/special-steps/index.d.ts +2 -0
  39. package/dist/types/special-steps/rimraf-node-modules.d.ts +2 -0
  40. package/dist/types/template-file.d.ts +2 -0
  41. package/dist/types/types.d.ts +788 -85
  42. package/dist/types/utils.d.ts +5 -0
  43. package/dist/types.js +65 -1
  44. package/dist/utils.js +9 -0
  45. package/package.json +9 -12
  46. package/src/add-ons.ts +7 -123
  47. package/src/add-to-app.ts +274 -0
  48. package/src/config-file.ts +26 -17
  49. package/src/constants.ts +0 -5
  50. package/src/create-app.ts +180 -730
  51. package/src/custom-add-ons/add-on.ts +261 -0
  52. package/src/custom-add-ons/shared.ts +161 -0
  53. package/src/custom-add-ons/starter.ts +126 -0
  54. package/src/environment.ts +77 -33
  55. package/src/file-helpers.ts +235 -0
  56. package/src/frameworks.ts +134 -0
  57. package/src/index.ts +77 -1
  58. package/src/integrations/git.ts +7 -0
  59. package/src/integrations/shadcn.ts +54 -0
  60. package/src/options.ts +8 -409
  61. package/src/package-json.ts +69 -0
  62. package/src/package-manager.ts +80 -9
  63. package/src/special-steps/index.ts +36 -0
  64. package/src/special-steps/rimraf-node-modules.ts +25 -0
  65. package/src/template-file.ts +150 -0
  66. package/src/types.ts +175 -87
  67. package/src/utils.ts +17 -0
  68. package/tests/add-ons.test.ts +67 -0
  69. package/tests/add-to-app.test.ts +358 -0
  70. package/tests/config-file.test.ts +68 -0
  71. package/tests/create-app.test.ts +120 -0
  72. package/tests/custom-add-ons/add-on.test.ts +12 -0
  73. package/tests/custom-add-ons/shared.test.ts +257 -0
  74. package/tests/custom-add-ons/starter.test.ts +58 -0
  75. package/tests/environment.test.ts +115 -0
  76. package/tests/file-helper.test.ts +90 -0
  77. package/tests/frameworks.test.ts +95 -0
  78. package/tests/index.test.ts +9 -0
  79. package/tests/integrations/git.test.ts +20 -0
  80. package/tests/integrations/shadcn.test.ts +91 -0
  81. package/tests/options.test.ts +42 -0
  82. package/tests/package-json.test.ts +63 -0
  83. package/tests/package-manager.test.ts +154 -0
  84. package/tests/setupVitest.ts +6 -0
  85. package/tests/template-file.test.ts +178 -0
  86. package/tests/utils.test.ts +23 -0
  87. package/vitest.config.ts +21 -0
  88. package/dist/add.js +0 -125
  89. package/dist/cli.js +0 -132
  90. package/dist/custom-add-on.js +0 -254
  91. package/dist/file-helper.js +0 -18
  92. package/dist/mcp.js +0 -229
  93. package/dist/templates.js +0 -6
  94. package/dist/toolchain.js +0 -6
  95. package/dist/types/add.d.ts +0 -3
  96. package/dist/types/cli.d.ts +0 -7
  97. package/dist/types/custom-add-on.d.ts +0 -3
  98. package/dist/types/file-helper.d.ts +0 -2
  99. package/dist/types/mcp.d.ts +0 -7
  100. package/dist/types/templates.d.ts +0 -1
  101. package/dist/types/toolchain.d.ts +0 -3
  102. package/src/add.ts +0 -186
  103. package/src/cli.ts +0 -210
  104. package/src/custom-add-on.ts +0 -325
  105. package/src/file-helper.ts +0 -20
  106. package/src/mcp.ts +0 -302
  107. package/src/templates.ts +0 -7
  108. package/src/toolchain.ts +0 -7
  109. package/templates/react/add-on/clerk/README.md +0 -3
  110. package/templates/react/add-on/clerk/assets/_dot_env.local.append +0 -2
  111. package/templates/react/add-on/clerk/assets/src/integrations/clerk/header-user.tsx +0 -19
  112. package/templates/react/add-on/clerk/assets/src/integrations/clerk/provider.tsx +0 -18
  113. package/templates/react/add-on/clerk/assets/src/routes/demo.clerk.tsx +0 -20
  114. package/templates/react/add-on/clerk/info.json +0 -13
  115. package/templates/react/add-on/clerk/package.json +0 -5
  116. package/templates/react/add-on/convex/README.md +0 -4
  117. package/templates/react/add-on/convex/assets/_dot_cursorrules.append +0 -93
  118. package/templates/react/add-on/convex/assets/_dot_env.local.append +0 -3
  119. package/templates/react/add-on/convex/assets/convex/products.ts +0 -8
  120. package/templates/react/add-on/convex/assets/convex/schema.ts +0 -10
  121. package/templates/react/add-on/convex/assets/src/integrations/convex/provider.tsx +0 -20
  122. package/templates/react/add-on/convex/assets/src/routes/demo.convex.tsx +0 -33
  123. package/templates/react/add-on/convex/info.json +0 -13
  124. package/templates/react/add-on/convex/package.json +0 -6
  125. package/templates/react/add-on/form/assets/src/components/demo.FormComponents.tsx.ejs +0 -300
  126. package/templates/react/add-on/form/assets/src/hooks/demo.form-context.ts +0 -4
  127. package/templates/react/add-on/form/assets/src/hooks/demo.form.ts +0 -22
  128. package/templates/react/add-on/form/assets/src/routes/demo.form.address.tsx.ejs +0 -213
  129. package/templates/react/add-on/form/assets/src/routes/demo.form.simple.tsx.ejs +0 -77
  130. package/templates/react/add-on/form/info.json +0 -26
  131. package/templates/react/add-on/form/package.json +0 -6
  132. package/templates/react/add-on/module-federation/assets/module-federation.config.js.ejs +0 -31
  133. package/templates/react/add-on/module-federation/assets/src/demo-mf-component.tsx +0 -3
  134. package/templates/react/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +0 -11
  135. package/templates/react/add-on/module-federation/info.json +0 -7
  136. package/templates/react/add-on/module-federation/package.json +0 -5
  137. package/templates/react/add-on/netlify/README.md +0 -11
  138. package/templates/react/add-on/netlify/info.json +0 -7
  139. package/templates/react/add-on/sentry/assets/_dot_cursorrules.append +0 -22
  140. package/templates/react/add-on/sentry/assets/_dot_env.local.append +0 -11
  141. package/templates/react/add-on/sentry/assets/src/app/global-middleware.ts +0 -11
  142. package/templates/react/add-on/sentry/assets/src/routes/demo.sentry.testing.tsx +0 -489
  143. package/templates/react/add-on/sentry/info.json +0 -14
  144. package/templates/react/add-on/sentry/package.json +0 -5
  145. package/templates/react/add-on/shadcn/README.md +0 -7
  146. package/templates/react/add-on/shadcn/assets/_dot_cursorrules.append +0 -7
  147. package/templates/react/add-on/shadcn/assets/components.json +0 -21
  148. package/templates/react/add-on/shadcn/assets/src/lib/utils.ts +0 -6
  149. package/templates/react/add-on/shadcn/assets/src/styles.css +0 -138
  150. package/templates/react/add-on/shadcn/info.json +0 -7
  151. package/templates/react/add-on/shadcn/package.json +0 -9
  152. package/templates/react/add-on/start/assets/_dot_gitignore.append +0 -2
  153. package/templates/react/add-on/start/assets/app.config.ts.ejs +0 -32
  154. package/templates/react/add-on/start/assets/src/api.ts +0 -6
  155. package/templates/react/add-on/start/assets/src/client.tsx.ejs +0 -33
  156. package/templates/react/add-on/start/assets/src/router.tsx.ejs +0 -48
  157. package/templates/react/add-on/start/assets/src/routes/api.demo-names.ts +0 -11
  158. package/templates/react/add-on/start/assets/src/routes/demo.start.api-request.tsx.ejs +0 -33
  159. package/templates/react/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +0 -50
  160. package/templates/react/add-on/start/assets/src/ssr.tsx.ejs +0 -30
  161. package/templates/react/add-on/start/info.json +0 -18
  162. package/templates/react/add-on/start/package.json +0 -13
  163. package/templates/react/add-on/store/assets/src/lib/demo-store.ts +0 -13
  164. package/templates/react/add-on/store/assets/src/routes/demo.store.tsx.ejs +0 -75
  165. package/templates/react/add-on/store/info.json +0 -13
  166. package/templates/react/add-on/store/package.json +0 -6
  167. package/templates/react/add-on/t3env/README.md +0 -16
  168. package/templates/react/add-on/t3env/assets/src/env.ts +0 -39
  169. package/templates/react/add-on/t3env/info.json +0 -10
  170. package/templates/react/add-on/t3env/package.json +0 -6
  171. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/init.ts +0 -9
  172. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/react.ts +0 -4
  173. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/router.ts +0 -18
  174. package/templates/react/add-on/tRPC/assets/src/routes/api.trpc.$.tsx +0 -16
  175. package/templates/react/add-on/tRPC/info.json +0 -9
  176. package/templates/react/add-on/tRPC/package.json +0 -9
  177. package/templates/react/add-on/table/assets/src/data/demo-table-data.ts +0 -50
  178. package/templates/react/add-on/table/assets/src/routes/demo.table.tsx.ejs +0 -373
  179. package/templates/react/add-on/table/info.json +0 -13
  180. package/templates/react/add-on/table/package.json +0 -7
  181. package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/layout.tsx +0 -5
  182. package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/root-provider.tsx.ejs +0 -70
  183. package/templates/react/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx.ejs +0 -53
  184. package/templates/react/add-on/tanstack-query/info.json +0 -13
  185. package/templates/react/add-on/tanstack-query/package.json +0 -6
  186. package/templates/react/base/README.md.ejs +0 -558
  187. package/templates/react/base/_dot_gitignore +0 -5
  188. package/templates/react/base/_dot_vscode/settings.biome.json +0 -35
  189. package/templates/react/base/_dot_vscode/settings.json +0 -11
  190. package/templates/react/base/index.html.ejs +0 -20
  191. package/templates/react/base/package.biome.json +0 -10
  192. package/templates/react/base/package.eslintprettier.json +0 -11
  193. package/templates/react/base/package.json +0 -30
  194. package/templates/react/base/package.ts.json +0 -7
  195. package/templates/react/base/package.tw.json +0 -6
  196. package/templates/react/base/public/favicon.ico +0 -0
  197. package/templates/react/base/public/logo192.png +0 -0
  198. package/templates/react/base/public/logo512.png +0 -0
  199. package/templates/react/base/public/manifest.json +0 -25
  200. package/templates/react/base/public/robots.txt +0 -3
  201. package/templates/react/base/src/App.css +0 -38
  202. package/templates/react/base/src/App.test.tsx.ejs +0 -10
  203. package/templates/react/base/src/App.tsx.ejs +0 -74
  204. package/templates/react/base/src/components/Header.tsx.ejs +0 -27
  205. package/templates/react/base/src/logo.svg +0 -44
  206. package/templates/react/base/src/reportWebVitals.ts.ejs +0 -28
  207. package/templates/react/base/src/styles.css.ejs +0 -15
  208. package/templates/react/base/toolchain/.prettierignore +0 -3
  209. package/templates/react/base/toolchain/biome.json +0 -31
  210. package/templates/react/base/toolchain/eslint.config.js +0 -5
  211. package/templates/react/base/toolchain/prettier.config.js +0 -10
  212. package/templates/react/base/tsconfig.json.ejs +0 -29
  213. package/templates/react/base/vite.config.js.ejs +0 -23
  214. package/templates/react/code-router/src/main.tsx.ejs +0 -92
  215. package/templates/react/example/tanchat/README.md +0 -37
  216. package/templates/react/example/tanchat/assets/_dot_env.local.append +0 -2
  217. package/templates/react/example/tanchat/assets/public/example-guitar-flowers.jpg +0 -0
  218. package/templates/react/example/tanchat/assets/public/example-guitar-motherboard.jpg +0 -0
  219. package/templates/react/example/tanchat/assets/public/example-guitar-racing.jpg +0 -0
  220. package/templates/react/example/tanchat/assets/public/example-guitar-steamer-trunk.jpg +0 -0
  221. package/templates/react/example/tanchat/assets/public/example-guitar-superhero.jpg +0 -0
  222. package/templates/react/example/tanchat/assets/public/example-guitar-traveling.jpg +0 -0
  223. package/templates/react/example/tanchat/assets/public/example-guitar-video-games.jpg +0 -0
  224. package/templates/react/example/tanchat/assets/src/components/example-AIAssistant.tsx +0 -173
  225. package/templates/react/example/tanchat/assets/src/components/example-GuitarRecommendation.tsx +0 -47
  226. package/templates/react/example/tanchat/assets/src/data/example-guitars.ts +0 -83
  227. package/templates/react/example/tanchat/assets/src/demo.index.css +0 -220
  228. package/templates/react/example/tanchat/assets/src/integrations/tanchat/header-user.tsx +0 -5
  229. package/templates/react/example/tanchat/assets/src/routes/api.messages.ts +0 -24
  230. package/templates/react/example/tanchat/assets/src/routes/api.sse.ts +0 -23
  231. package/templates/react/example/tanchat/assets/src/routes/example.chat.tsx +0 -159
  232. package/templates/react/example/tanchat/assets/src/routes/example.guitars/$guitarId.tsx +0 -50
  233. package/templates/react/example/tanchat/assets/src/routes/example.guitars/index.tsx +0 -54
  234. package/templates/react/example/tanchat/assets/src/store/example-assistant.ts +0 -3
  235. package/templates/react/example/tanchat/assets/src/utils/demo.ai.ts +0 -62
  236. package/templates/react/example/tanchat/assets/src/utils/demo.sse.ts +0 -31
  237. package/templates/react/example/tanchat/assets/src/utils/demo.tools.ts +0 -47
  238. package/templates/react/example/tanchat/info.json +0 -19
  239. package/templates/react/example/tanchat/package.json +0 -16
  240. package/templates/react/file-router/package.fr.json +0 -5
  241. package/templates/react/file-router/src/main.tsx.ejs +0 -55
  242. package/templates/react/file-router/src/routes/__root.tsx.ejs +0 -82
  243. package/templates/solid/add-on/form/assets/src/routes/demo.form.tsx.ejs +0 -352
  244. package/templates/solid/add-on/form/info.json +0 -13
  245. package/templates/solid/add-on/form/package.json +0 -5
  246. package/templates/solid/add-on/module-federation/assets/module-federation.config.js.ejs +0 -27
  247. package/templates/solid/add-on/module-federation/assets/src/demo-mf-component.tsx +0 -3
  248. package/templates/solid/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +0 -9
  249. package/templates/solid/add-on/module-federation/info.json +0 -7
  250. package/templates/solid/add-on/module-federation/package.json +0 -5
  251. package/templates/solid/add-on/sentry/assets/_dot_cursorrules.append +0 -22
  252. package/templates/solid/add-on/sentry/assets/_dot_env.local.append +0 -2
  253. package/templates/solid/add-on/sentry/assets/src/routes/demo.sentry.bad-event-handler.tsx +0 -20
  254. package/templates/solid/add-on/sentry/info.json +0 -13
  255. package/templates/solid/add-on/sentry/package.json +0 -5
  256. package/templates/solid/add-on/solid-ui/README.md +0 -9
  257. package/templates/solid/add-on/solid-ui/assets/src/lib/utils.ts +0 -6
  258. package/templates/solid/add-on/solid-ui/assets/src/styles.css +0 -138
  259. package/templates/solid/add-on/solid-ui/assets/ui.config.json +0 -13
  260. package/templates/solid/add-on/solid-ui/info.json +0 -11
  261. package/templates/solid/add-on/solid-ui/package.json +0 -9
  262. package/templates/solid/add-on/start/assets/app.config.ts +0 -16
  263. package/templates/solid/add-on/start/assets/src/api.ts +0 -6
  264. package/templates/solid/add-on/start/assets/src/client.tsx +0 -7
  265. package/templates/solid/add-on/start/assets/src/router.tsx.ejs +0 -24
  266. package/templates/solid/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +0 -49
  267. package/templates/solid/add-on/start/assets/src/ssr.tsx +0 -12
  268. package/templates/solid/add-on/start/info.json +0 -14
  269. package/templates/solid/add-on/start/package.json +0 -12
  270. package/templates/solid/add-on/store/assets/src/lib/demo-store.ts +0 -13
  271. package/templates/solid/add-on/store/assets/src/routes/demo.store.tsx.ejs +0 -77
  272. package/templates/solid/add-on/store/info.json +0 -13
  273. package/templates/solid/add-on/store/package.json +0 -6
  274. package/templates/solid/add-on/t3env/README.md +0 -16
  275. package/templates/solid/add-on/t3env/assets/src/env.ts +0 -39
  276. package/templates/solid/add-on/t3env/info.json +0 -10
  277. package/templates/solid/add-on/t3env/package.json +0 -6
  278. package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/header-user.tsx +0 -5
  279. package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/provider.tsx +0 -15
  280. package/templates/solid/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx +0 -30
  281. package/templates/solid/add-on/tanstack-query/info.json +0 -13
  282. package/templates/solid/add-on/tanstack-query/package.json +0 -6
  283. package/templates/solid/base/README.md.ejs +0 -215
  284. package/templates/solid/base/_dot_cursorrules.append +0 -35
  285. package/templates/solid/base/_dot_gitignore +0 -5
  286. package/templates/solid/base/_dot_vscode/settings.biome.json +0 -35
  287. package/templates/solid/base/_dot_vscode/settings.json +0 -11
  288. package/templates/solid/base/index.html.ejs +0 -20
  289. package/templates/solid/base/package.biome.json +0 -10
  290. package/templates/solid/base/package.eslintprettier.json +0 -11
  291. package/templates/solid/base/package.json +0 -23
  292. package/templates/solid/base/package.ts.json +0 -5
  293. package/templates/solid/base/package.tw.json +0 -6
  294. package/templates/solid/base/public/favicon.ico +0 -0
  295. package/templates/solid/base/public/logo192.png +0 -0
  296. package/templates/solid/base/public/logo512.png +0 -0
  297. package/templates/solid/base/public/manifest.json +0 -25
  298. package/templates/solid/base/public/robots.txt +0 -3
  299. package/templates/solid/base/src/App.css +0 -0
  300. package/templates/solid/base/src/App.tsx.ejs +0 -47
  301. package/templates/solid/base/src/components/Header.tsx.ejs +0 -26
  302. package/templates/solid/base/src/logo.svg +0 -120
  303. package/templates/solid/base/src/styles.css.ejs +0 -15
  304. package/templates/solid/base/toolchain/.prettierignore +0 -3
  305. package/templates/solid/base/toolchain/biome.json +0 -31
  306. package/templates/solid/base/toolchain/eslint.config.js +0 -5
  307. package/templates/solid/base/toolchain/prettier.config.js +0 -10
  308. package/templates/solid/base/tsconfig.json.ejs +0 -31
  309. package/templates/solid/base/vite.config.js.ejs +0 -22
  310. package/templates/solid/code-router/src/main.tsx.ejs +0 -71
  311. package/templates/solid/example/tanchat/README.md +0 -52
  312. package/templates/solid/example/tanchat/assets/ai-streaming-server/README.md +0 -110
  313. package/templates/solid/example/tanchat/assets/ai-streaming-server/_dot_env.example +0 -1
  314. package/templates/solid/example/tanchat/assets/ai-streaming-server/package.json +0 -26
  315. package/templates/solid/example/tanchat/assets/ai-streaming-server/src/index.ts +0 -102
  316. package/templates/solid/example/tanchat/assets/ai-streaming-server/tsconfig.json +0 -15
  317. package/templates/solid/example/tanchat/assets/src/components/demo.SettingsDialog.tsx +0 -149
  318. package/templates/solid/example/tanchat/assets/src/demo.index.css +0 -227
  319. package/templates/solid/example/tanchat/assets/src/lib/demo-store.ts +0 -13
  320. package/templates/solid/example/tanchat/assets/src/routes/example.chat.tsx +0 -435
  321. package/templates/solid/example/tanchat/assets/src/store/demo.hooks.ts +0 -17
  322. package/templates/solid/example/tanchat/assets/src/store/demo.store.ts +0 -133
  323. package/templates/solid/example/tanchat/info.json +0 -14
  324. package/templates/solid/example/tanchat/package.json +0 -7
  325. package/templates/solid/file-router/package.fr.json +0 -5
  326. package/templates/solid/file-router/src/main.tsx.ejs +0 -47
  327. package/templates/solid/file-router/src/routes/__root.tsx.ejs +0 -41
  328. package/templates/solid/file-router/src/routes/index.tsx +0 -43
  329. package/tests/cra.test.ts +0 -293
  330. package/tests/snapshots/cra/cr-js-npm.json +0 -33
  331. package/tests/snapshots/cra/cr-ts-npm.json +0 -34
  332. package/tests/snapshots/cra/cr-ts-start-npm.json +0 -38
  333. package/tests/snapshots/cra/fr-ts-npm.json +0 -34
  334. package/tests/snapshots/cra/fr-ts-tw-npm.json +0 -33
  335. package/tests/snapshots/cra/solid-cr-js-npm.json +0 -31
  336. package/tests/snapshots/cra/solid-cr-ts-npm.json +0 -32
  337. package/tests/snapshots/cra/solid-cr-ts-start-npm.json +0 -36
  338. package/tests/snapshots/cra/solid-fr-ts-npm.json +0 -33
  339. package/tests/snapshots/cra/solid-fr-ts-tw-npm.json +0 -32
  340. package/tests/test-utilities.ts +0 -87
@@ -0,0 +1,48 @@
1
+ import { FILE_ROUTER } from './constants.js';
2
+ import { sortObject } from './utils.js';
3
+ export function mergePackageJSON(packageJSON, overlayPackageJSON) {
4
+ return {
5
+ ...packageJSON,
6
+ dependencies: {
7
+ ...packageJSON.dependencies,
8
+ ...(overlayPackageJSON?.dependencies || {}),
9
+ },
10
+ devDependencies: {
11
+ ...packageJSON.devDependencies,
12
+ ...(overlayPackageJSON?.devDependencies || {}),
13
+ },
14
+ scripts: {
15
+ ...packageJSON.scripts,
16
+ ...(overlayPackageJSON?.scripts || {}),
17
+ },
18
+ };
19
+ }
20
+ export function createPackageJSON(options) {
21
+ let packageJSON = {
22
+ ...JSON.parse(JSON.stringify(options.framework.basePackageJSON)),
23
+ name: options.projectName,
24
+ };
25
+ const additions = [
26
+ options.typescript
27
+ ? options.framework.optionalPackages.typescript
28
+ : undefined,
29
+ options.tailwind
30
+ ? options.framework.optionalPackages.tailwindcss
31
+ : undefined,
32
+ options.mode === FILE_ROUTER
33
+ ? options.framework.optionalPackages['file-router']
34
+ : undefined,
35
+ ];
36
+ for (const addition of additions.filter(Boolean)) {
37
+ packageJSON = mergePackageJSON(packageJSON, addition);
38
+ }
39
+ for (const addOn of options.chosenAddOns.map((addOn) => addOn.packageAdditions)) {
40
+ packageJSON = mergePackageJSON(packageJSON, addOn);
41
+ }
42
+ if (options.starter) {
43
+ packageJSON = mergePackageJSON(packageJSON, options.starter.packageAdditions);
44
+ }
45
+ packageJSON.dependencies = sortObject((packageJSON.dependencies ?? {}));
46
+ packageJSON.devDependencies = sortObject((packageJSON.devDependencies ?? {}));
47
+ return packageJSON;
48
+ }
@@ -14,17 +14,62 @@ export function getPackageManager() {
14
14
  const packageManager = SUPPORTED_PACKAGE_MANAGERS.find((manager) => userAgent.startsWith(manager));
15
15
  return packageManager;
16
16
  }
17
- export function packageManagerExecute(environment, packagerManager, pkg, args, cwd) {
17
+ export function getPackageManagerScriptCommand(packagerManager, args = []) {
18
18
  switch (packagerManager) {
19
19
  case 'yarn':
20
- return environment.execute('yarn', ['dlx', pkg, ...args], cwd);
20
+ return { command: 'yarn', args: ['run', ...args] };
21
21
  case 'pnpm':
22
- return environment.execute('pnpx', [pkg, ...args], cwd);
22
+ return { command: 'pnpm', args: [...args] };
23
23
  case 'bun':
24
- return environment.execute('bunx', ['--bun', pkg, ...args], cwd);
24
+ return { command: 'bunx', args: ['--bun', 'run', ...args] };
25
25
  case 'deno':
26
- return environment.execute('deno', ['run', `npm:${pkg}`, ...args], cwd);
26
+ return { command: 'deno', args: ['task', ...args] };
27
27
  default:
28
- return environment.execute('npx', [pkg, ...args], cwd);
28
+ return { command: 'npm', args: ['run', ...args] };
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,24 @@
1
+ import { rimrafNodeModules } from './rimraf-node-modules.js';
2
+ const specialStepsLookup = {
3
+ 'rimraf-node-modules': rimrafNodeModules,
4
+ };
5
+ export async function runSpecialSteps(environment, options, specialSteps) {
6
+ if (specialSteps.length) {
7
+ environment.startStep({
8
+ id: 'special-steps',
9
+ type: 'command',
10
+ message: 'Removing node_modules...',
11
+ });
12
+ for (const step of specialSteps) {
13
+ const stepFunction = specialStepsLookup[step];
14
+ /* eslint-disable @typescript-eslint/no-unnecessary-condition */
15
+ if (stepFunction) {
16
+ await stepFunction(environment, options);
17
+ }
18
+ else {
19
+ environment.error(`Special step ${step} not found`);
20
+ }
21
+ }
22
+ environment.finishStep('special-steps', 'Special steps complete');
23
+ }
24
+ }
@@ -0,0 +1,16 @@
1
+ import { resolve } from 'node:path';
2
+ const lockFiles = ['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml'];
3
+ export async function rimrafNodeModules(environment, options) {
4
+ environment.startStep({
5
+ id: 'special-steps',
6
+ type: 'command',
7
+ message: 'Removing node_modules...',
8
+ });
9
+ await environment.rimraf(resolve(options.targetDir, 'node_modules'));
10
+ for (const lockFile of lockFiles) {
11
+ const lockFilePath = resolve(options.targetDir, lockFile);
12
+ if (environment.exists(lockFilePath)) {
13
+ await environment.deleteFile(lockFilePath);
14
+ }
15
+ }
16
+ }
@@ -0,0 +1,112 @@
1
+ import { resolve } from 'node:path';
2
+ import { render } from 'ejs';
3
+ import { format } from 'prettier';
4
+ import { CODE_ROUTER, FILE_ROUTER } from './constants.js';
5
+ import { formatCommand } from './utils.js';
6
+ import { getPackageManagerInstallCommand, getPackageManagerScriptCommand, } from './package-manager.js';
7
+ import { relativePath } from './file-helpers.js';
8
+ function convertDotFilesAndPaths(path) {
9
+ return path
10
+ .split('/')
11
+ .map((segment) => segment.replace(/^_dot_/, '.'))
12
+ .join('/');
13
+ }
14
+ export function createTemplateFile(environment, options) {
15
+ function getPackageManagerAddScript(packageName, isDev = false) {
16
+ return formatCommand(getPackageManagerInstallCommand(options.packageManager, packageName, isDev));
17
+ }
18
+ function getPackageManagerRunScript(scriptName, args = []) {
19
+ return formatCommand(getPackageManagerScriptCommand(options.packageManager, [
20
+ scriptName,
21
+ ...args,
22
+ ]));
23
+ }
24
+ class IgnoreFileError extends Error {
25
+ constructor() {
26
+ super('ignoreFile');
27
+ this.name = 'IgnoreFileError';
28
+ }
29
+ }
30
+ const integrations = [];
31
+ for (const addOn of options.chosenAddOns) {
32
+ if (addOn.integrations) {
33
+ for (const integration of addOn.integrations) {
34
+ integrations.push(integration);
35
+ }
36
+ }
37
+ }
38
+ const routes = [];
39
+ for (const addOn of options.chosenAddOns) {
40
+ if (addOn.routes) {
41
+ routes.push(...addOn.routes);
42
+ }
43
+ }
44
+ const addOnEnabled = options.chosenAddOns.reduce((acc, addOn) => {
45
+ acc[addOn.id] = true;
46
+ return acc;
47
+ }, {});
48
+ return async function templateFile(file, content) {
49
+ const templateValues = {
50
+ packageManager: options.packageManager,
51
+ projectName: options.projectName,
52
+ typescript: options.typescript,
53
+ tailwind: options.tailwind,
54
+ js: options.typescript ? 'ts' : 'js',
55
+ jsx: options.typescript ? 'tsx' : 'jsx',
56
+ fileRouter: options.mode === FILE_ROUTER,
57
+ codeRouter: options.mode === CODE_ROUTER,
58
+ addOnEnabled,
59
+ addOns: options.chosenAddOns,
60
+ integrations,
61
+ routes,
62
+ getPackageManagerAddScript,
63
+ getPackageManagerRunScript,
64
+ relativePath: (path) => relativePath(file, path),
65
+ ignoreFile: () => {
66
+ throw new IgnoreFileError();
67
+ },
68
+ };
69
+ let ignoreFile = false;
70
+ if (file.endsWith('.ejs')) {
71
+ try {
72
+ content = render(content, templateValues);
73
+ }
74
+ catch (error) {
75
+ if (error instanceof IgnoreFileError) {
76
+ ignoreFile = true;
77
+ }
78
+ else {
79
+ console.error(file, error);
80
+ environment.error(`EJS error in file ${file}`, error?.toString());
81
+ process.exit(1);
82
+ }
83
+ }
84
+ }
85
+ if (ignoreFile) {
86
+ return;
87
+ }
88
+ let target = convertDotFilesAndPaths(file.replace('.ejs', ''));
89
+ let append = false;
90
+ if (target.endsWith('.append')) {
91
+ append = true;
92
+ target = target.replace('.append', '');
93
+ }
94
+ if (target.endsWith('.ts') || target.endsWith('.tsx')) {
95
+ content = await format(content, {
96
+ semi: false,
97
+ singleQuote: true,
98
+ trailingComma: 'all',
99
+ parser: 'typescript',
100
+ });
101
+ }
102
+ if (!options.typescript) {
103
+ target = target.replace(/\.tsx$/, '.jsx').replace(/\.ts$/, '.js');
104
+ }
105
+ if (append) {
106
+ await environment.appendFile(resolve(options.targetDir, target), content);
107
+ }
108
+ else {
109
+ await environment.writeFile(resolve(options.targetDir, target), content);
110
+ }
111
+ };
112
+ }
@@ -1,8 +1,3 @@
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>;
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>>;
@@ -0,0 +1,17 @@
1
+ import type { Environment } from './types.js';
2
+ import type { PersistedOptions } from './config-file.js';
3
+ export declare function hasPendingGitChanges(environment: Environment, cwd: string): Promise<boolean>;
4
+ export declare function getCurrentConfiguration(environment: Environment, cwd: string): Promise<PersistedOptions | undefined>;
5
+ export declare function writeFiles(environment: Environment, cwd: string, output: {
6
+ files: Record<string, string>;
7
+ deletedFiles: Array<string>;
8
+ }, forced: boolean): Promise<void>;
9
+ export declare function runNewCommands(environment: Environment, originalOptions: PersistedOptions, cwd: string, output: {
10
+ commands: Array<{
11
+ command: string;
12
+ args: Array<string>;
13
+ }>;
14
+ }): Promise<void>;
15
+ export declare function addToApp(environment: Environment, addOns: Array<string>, cwd: string, options?: {
16
+ forced?: boolean;
17
+ }): Promise<void>;
@@ -1,7 +1,9 @@
1
- import type { Environment, Options } from './types';
2
- export type PersistedOptions = Exclude<Partial<Options>, 'addOns' | 'chosenAddOns'> & {
1
+ import type { Environment, Options } from './types.js';
2
+ export type PersistedOptions = Omit<Partial<Options>, 'addOns' | 'chosenAddOns' | 'framework' | 'starter' | 'targetDir'> & {
3
+ framework: string;
3
4
  version: number;
4
5
  existingAddOns: Array<string>;
6
+ starter?: string;
5
7
  };
6
- export declare function writeConfigFile(environment: Environment, targetDir: string, options: Options): Promise<void>;
7
- export declare function readConfigFile(targetDir: string): Promise<PersistedOptions | null>;
8
+ export declare function writeConfigFileToEnvironment(environment: Environment, options: Options): Promise<void>;
9
+ export declare function readConfigFileFromEnvironment(environment: Environment, targetDir: string): Promise<PersistedOptions | null>;
@@ -1,6 +1,3 @@
1
- import type { Framework } from './types.js';
2
1
  export declare const CODE_ROUTER = "code-router";
3
2
  export declare const FILE_ROUTER = "file-router";
4
- export declare const SUPPORTED_FRAMEWORKS: Array<Framework>;
5
- export declare const DEFAULT_FRAMEWORK: Framework;
6
3
  export declare const CONFIG_FILE = ".cta.json";
@@ -1,8 +1,2 @@
1
1
  import type { Environment, Options } from './types.js';
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>;
2
+ export declare function createApp(environment: Environment, options: Options): Promise<void>;
@@ -0,0 +1,69 @@
1
+ import type { PersistedOptions } from '../config-file';
2
+ import type { AddOn, AddOnInfo, Environment } from '../types';
3
+ export declare const ADD_ON_IGNORE_FILES: Array<string>;
4
+ export declare function camelCase(str: string): string;
5
+ export declare function templatize(routeCode: string, routeFile: string): {
6
+ url: string;
7
+ code: string;
8
+ name: string;
9
+ jsName: string;
10
+ };
11
+ export declare function validateAddOnSetup(environment: Environment): Promise<void>;
12
+ export declare function readOrGenerateAddOnInfo(options: PersistedOptions): Promise<AddOnInfo>;
13
+ export declare function generateProject(persistedOptions: PersistedOptions): Promise<{
14
+ info: {
15
+ id: string;
16
+ name: string;
17
+ description: string;
18
+ type: "add-on" | "example" | "starter" | "toolchain";
19
+ modes: string[];
20
+ phase: "add-on" | "setup";
21
+ command?: {
22
+ command: string;
23
+ args?: string[] | undefined;
24
+ } | undefined;
25
+ author?: string | undefined;
26
+ version?: string | undefined;
27
+ link?: string | undefined;
28
+ license?: string | undefined;
29
+ warning?: string | undefined;
30
+ routes?: {
31
+ path: string;
32
+ jsName: string;
33
+ name?: string | undefined;
34
+ url?: string | undefined;
35
+ }[] | undefined;
36
+ packageAdditions?: {
37
+ dependencies?: Record<string, string> | undefined;
38
+ devDependencies?: Record<string, string> | undefined;
39
+ scripts?: Record<string, string> | undefined;
40
+ } | undefined;
41
+ shadcnComponents?: string[] | undefined;
42
+ dependsOn?: string[] | undefined;
43
+ smallLogo?: string | undefined;
44
+ logo?: string | undefined;
45
+ addOnSpecialSteps?: string[] | undefined;
46
+ createSpecialSteps?: string[] | undefined;
47
+ integrations?: {
48
+ type: string;
49
+ path: string;
50
+ jsName: string;
51
+ }[] | undefined;
52
+ readme?: string | undefined;
53
+ };
54
+ output: {
55
+ files: Record<string, string>;
56
+ deletedFiles: Array<string>;
57
+ commands: Array<{
58
+ command: string;
59
+ args: Array<string>;
60
+ }>;
61
+ };
62
+ }>;
63
+ export declare function buildAssetsDirectory(output: {
64
+ files: Record<string, string>;
65
+ }, info: AddOnInfo): Promise<void>;
66
+ export declare function updateAddOnInfo(environment: Environment): Promise<void>;
67
+ export declare function compileAddOn(environment: Environment): Promise<void>;
68
+ export declare function initAddOn(environment: Environment): Promise<void>;
69
+ export declare function loadRemoteAddOn(url: string): Promise<AddOn>;
@@ -0,0 +1,15 @@
1
+ import type { Environment, Options, SerializedOptions } from '../types.js';
2
+ import type { PersistedOptions } from '../config-file.js';
3
+ export declare function createPackageAdditions(originalPackageJson: Record<string, any>, currentPackageJson: Record<string, any>): Record<string, any>;
4
+ export declare function createAppOptionsFromPersisted(json: PersistedOptions): Promise<Options>;
5
+ export declare function createSerializedOptionsFromPersisted(json: PersistedOptions): SerializedOptions;
6
+ export declare function runCreateApp(options: Required<Options>): Promise<{
7
+ files: Record<string, string>;
8
+ deletedFiles: Array<string>;
9
+ commands: Array<{
10
+ command: string;
11
+ args: Array<string>;
12
+ }>;
13
+ }>;
14
+ export declare function compareFilesRecursively(path: string, ignore: (filePath: string) => boolean, original: Record<string, string>, changedFiles: Record<string, string>): Promise<void>;
15
+ export declare function readCurrentProjectOptions(environment: Environment): Promise<PersistedOptions>;
@@ -0,0 +1,7 @@
1
+ import type { PersistedOptions } from '../config-file';
2
+ import type { Environment, Starter, StarterInfo } from '../types';
3
+ export declare function readOrGenerateStarterInfo(options: PersistedOptions): Promise<StarterInfo>;
4
+ export declare function updateStarterInfo(environment: Environment): Promise<void>;
5
+ export declare function compileStarter(environment: Environment): Promise<void>;
6
+ export declare function initStarter(environment: Environment): Promise<void>;
7
+ export declare function loadStarter(url: string): Promise<Starter>;
@@ -1,9 +1,10 @@
1
1
  import type { Environment } from './types.js';
2
2
  export declare function createDefaultEnvironment(): Environment;
3
- export declare function createMemoryEnvironment(): {
3
+ export declare function createMemoryEnvironment(returnPathsRelativeTo?: string): {
4
4
  environment: Environment;
5
5
  output: {
6
6
  files: Record<string, string>;
7
+ deletedFiles: Array<string>;
7
8
  commands: Array<{
8
9
  command: string;
9
10
  args: Array<string>;
@@ -0,0 +1,15 @@
1
+ import type { Environment } from './types';
2
+ export declare function readFileHelper(path: string): string;
3
+ export declare function isBinaryFile(path: string): boolean;
4
+ export declare function convertBinaryContentsToBase64(contents: any): string;
5
+ export declare function isBase64(content: string): boolean;
6
+ export declare function getBinaryFile(content: string): string | null;
7
+ export declare function relativePath(from: string, to: string): string;
8
+ export declare function isDirectory(path: string): boolean;
9
+ export declare function findFilesRecursively(path: string, files: Record<string, string>): void;
10
+ export declare function recursivelyGatherFiles(path: string, includeProjectFiles?: boolean): Promise<Record<string, string>>;
11
+ export declare function recursivelyGatherFilesFromEnvironment(environment: Environment, path: string, includeProjectFiles?: boolean): Promise<Record<string, string>>;
12
+ export declare const IGNORE_FILES: string[];
13
+ export declare function createIgnore(path: string, includeProjectFiles?: boolean): (filePath: string) => boolean;
14
+ export declare function cleanUpFiles(files: Record<string, string>, targetDir?: string): Record<string, string>;
15
+ export declare function cleanUpFileArray(files: Array<string>, targetDir?: string): string[];
@@ -0,0 +1,7 @@
1
+ import type { Framework, FrameworkDefinition } from './types.js';
2
+ export declare function __testRegisterFramework(framework: Framework): void;
3
+ export declare function __testClearFrameworks(): void;
4
+ export declare function registerFramework(framework: FrameworkDefinition): void;
5
+ export declare function getFrameworkById(id: string): Framework | undefined;
6
+ export declare function getFrameworkByName(name: string): Framework | undefined;
7
+ export declare function getFrameworks(): Framework[];
@@ -1 +1,20 @@
1
- export { cli } from './cli.js';
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';
@@ -0,0 +1,2 @@
1
+ import type { Environment } from '../types.js';
2
+ export declare function setupGit(environment: Environment, targetDir: string): Promise<void>;
@@ -0,0 +1,2 @@
1
+ import type { Environment, Options } from '../types.js';
2
+ export declare function installShadcnComponents(environment: Environment, targetDir: string, options: Options): Promise<void>;
@@ -1,6 +1,2 @@
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>;
1
+ import type { Options, SerializedOptions } from './types';
2
+ export declare const createSerializedOptions: (options: Options) => SerializedOptions;
@@ -0,0 +1,7 @@
1
+ import type { Options } from './types.js';
2
+ export declare function mergePackageJSON(packageJSON: Record<string, any>, overlayPackageJSON?: Record<string, any>): {
3
+ dependencies: any;
4
+ devDependencies: any;
5
+ scripts: any;
6
+ };
7
+ export declare function createPackageJSON(options: Options): any;
@@ -3,4 +3,21 @@ 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 packageManagerExecute(environment: Environment, packagerManager: PackageManager, pkg: string, args: Array<string>, cwd: string): Promise<void>;
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
+ }>;
@@ -0,0 +1,2 @@
1
+ import type { Environment, Options } from '../types.js';
2
+ export declare function runSpecialSteps(environment: Environment, options: Options, specialSteps: Array<string>): Promise<void>;
@@ -0,0 +1,2 @@
1
+ import type { Environment, Options } from '../types.js';
2
+ export declare function rimrafNodeModules(environment: Environment, options: Options): Promise<void>;
@@ -0,0 +1,2 @@
1
+ import type { Environment, Options } from './types.js';
2
+ export declare function createTemplateFile(environment: Environment, options: Options): (file: string, content: string) => Promise<void>;