@tanstack/cta-engine 0.14.3 → 0.15.0

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 (343) hide show
  1. package/dist/add-ons.js +5 -91
  2. package/dist/add-to-app.js +171 -0
  3. package/dist/config-file.js +34 -11
  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 +116 -0
  8. package/dist/custom-add-ons/starter.js +84 -0
  9. package/dist/environment.js +67 -44
  10. package/dist/file-helpers.js +165 -0
  11. package/dist/frameworks.js +92 -0
  12. package/dist/index.js +18 -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/registry.js +56 -0
  19. package/dist/special-steps/index.js +24 -0
  20. package/dist/special-steps/rimraf-node-modules.js +16 -0
  21. package/dist/template-file.js +112 -0
  22. package/dist/types/add-ons.d.ts +3 -8
  23. package/dist/types/add-to-app.d.ts +17 -0
  24. package/dist/types/config-file.d.ts +7 -4
  25. package/dist/types/constants.d.ts +0 -3
  26. package/dist/types/create-app.d.ts +1 -7
  27. package/dist/types/custom-add-ons/add-on.d.ts +69 -0
  28. package/dist/types/custom-add-ons/shared.d.ts +15 -0
  29. package/dist/types/custom-add-ons/starter.d.ts +7 -0
  30. package/dist/types/environment.d.ts +2 -1
  31. package/dist/types/file-helpers.d.ts +15 -0
  32. package/dist/types/frameworks.d.ts +7 -0
  33. package/dist/types/index.d.ts +21 -1
  34. package/dist/types/integrations/git.d.ts +2 -0
  35. package/dist/types/integrations/shadcn.d.ts +2 -0
  36. package/dist/types/options.d.ts +2 -6
  37. package/dist/types/package-json.d.ts +7 -0
  38. package/dist/types/package-manager.d.ts +18 -1
  39. package/dist/types/registry.d.ts +25 -0
  40. package/dist/types/special-steps/index.d.ts +2 -0
  41. package/dist/types/special-steps/rimraf-node-modules.d.ts +2 -0
  42. package/dist/types/template-file.d.ts +2 -0
  43. package/dist/types/types.d.ts +788 -85
  44. package/dist/types/utils.d.ts +5 -0
  45. package/dist/types.js +65 -1
  46. package/dist/utils.js +9 -0
  47. package/package.json +9 -12
  48. package/src/add-ons.ts +7 -123
  49. package/src/add-to-app.ts +276 -0
  50. package/src/config-file.ts +51 -20
  51. package/src/constants.ts +0 -5
  52. package/src/create-app.ts +180 -730
  53. package/src/custom-add-ons/add-on.ts +261 -0
  54. package/src/custom-add-ons/shared.ts +160 -0
  55. package/src/custom-add-ons/starter.ts +126 -0
  56. package/src/environment.ts +80 -45
  57. package/src/file-helpers.ts +235 -0
  58. package/src/frameworks.ts +134 -0
  59. package/src/index.ts +85 -1
  60. package/src/integrations/git.ts +7 -0
  61. package/src/integrations/shadcn.ts +54 -0
  62. package/src/options.ts +8 -409
  63. package/src/package-json.ts +69 -0
  64. package/src/package-manager.ts +80 -9
  65. package/src/registry.ts +92 -0
  66. package/src/special-steps/index.ts +36 -0
  67. package/src/special-steps/rimraf-node-modules.ts +25 -0
  68. package/src/template-file.ts +150 -0
  69. package/src/types.ts +175 -87
  70. package/src/utils.ts +17 -0
  71. package/tests/add-ons.test.ts +67 -0
  72. package/tests/add-to-app.test.ts +358 -0
  73. package/tests/config-file.test.ts +105 -0
  74. package/tests/create-app.test.ts +120 -0
  75. package/tests/custom-add-ons/add-on.test.ts +12 -0
  76. package/tests/custom-add-ons/shared.test.ts +253 -0
  77. package/tests/custom-add-ons/starter.test.ts +58 -0
  78. package/tests/environment.test.ts +115 -0
  79. package/tests/file-helper.test.ts +90 -0
  80. package/tests/frameworks.test.ts +95 -0
  81. package/tests/index.test.ts +9 -0
  82. package/tests/integrations/git.test.ts +20 -0
  83. package/tests/integrations/shadcn.test.ts +91 -0
  84. package/tests/options.test.ts +42 -0
  85. package/tests/package-json.test.ts +63 -0
  86. package/tests/package-manager.test.ts +154 -0
  87. package/tests/setupVitest.ts +6 -0
  88. package/tests/template-file.test.ts +178 -0
  89. package/tests/utils.test.ts +23 -0
  90. package/vitest.config.ts +21 -0
  91. package/dist/add.js +0 -125
  92. package/dist/cli.js +0 -132
  93. package/dist/custom-add-on.js +0 -254
  94. package/dist/file-helper.js +0 -18
  95. package/dist/mcp.js +0 -229
  96. package/dist/templates.js +0 -6
  97. package/dist/toolchain.js +0 -6
  98. package/dist/types/add.d.ts +0 -3
  99. package/dist/types/cli.d.ts +0 -7
  100. package/dist/types/custom-add-on.d.ts +0 -3
  101. package/dist/types/file-helper.d.ts +0 -2
  102. package/dist/types/mcp.d.ts +0 -7
  103. package/dist/types/templates.d.ts +0 -1
  104. package/dist/types/toolchain.d.ts +0 -3
  105. package/src/add.ts +0 -186
  106. package/src/cli.ts +0 -210
  107. package/src/custom-add-on.ts +0 -325
  108. package/src/file-helper.ts +0 -20
  109. package/src/mcp.ts +0 -302
  110. package/src/templates.ts +0 -7
  111. package/src/toolchain.ts +0 -7
  112. package/templates/react/add-on/clerk/README.md +0 -3
  113. package/templates/react/add-on/clerk/assets/_dot_env.local.append +0 -2
  114. package/templates/react/add-on/clerk/assets/src/integrations/clerk/header-user.tsx +0 -19
  115. package/templates/react/add-on/clerk/assets/src/integrations/clerk/provider.tsx +0 -18
  116. package/templates/react/add-on/clerk/assets/src/routes/demo.clerk.tsx +0 -20
  117. package/templates/react/add-on/clerk/info.json +0 -13
  118. package/templates/react/add-on/clerk/package.json +0 -5
  119. package/templates/react/add-on/convex/README.md +0 -4
  120. package/templates/react/add-on/convex/assets/_dot_cursorrules.append +0 -93
  121. package/templates/react/add-on/convex/assets/_dot_env.local.append +0 -3
  122. package/templates/react/add-on/convex/assets/convex/products.ts +0 -8
  123. package/templates/react/add-on/convex/assets/convex/schema.ts +0 -10
  124. package/templates/react/add-on/convex/assets/src/integrations/convex/provider.tsx +0 -20
  125. package/templates/react/add-on/convex/assets/src/routes/demo.convex.tsx +0 -33
  126. package/templates/react/add-on/convex/info.json +0 -13
  127. package/templates/react/add-on/convex/package.json +0 -6
  128. package/templates/react/add-on/form/assets/src/components/demo.FormComponents.tsx.ejs +0 -300
  129. package/templates/react/add-on/form/assets/src/hooks/demo.form-context.ts +0 -4
  130. package/templates/react/add-on/form/assets/src/hooks/demo.form.ts +0 -22
  131. package/templates/react/add-on/form/assets/src/routes/demo.form.address.tsx.ejs +0 -213
  132. package/templates/react/add-on/form/assets/src/routes/demo.form.simple.tsx.ejs +0 -77
  133. package/templates/react/add-on/form/info.json +0 -26
  134. package/templates/react/add-on/form/package.json +0 -6
  135. package/templates/react/add-on/module-federation/assets/module-federation.config.js.ejs +0 -31
  136. package/templates/react/add-on/module-federation/assets/src/demo-mf-component.tsx +0 -3
  137. package/templates/react/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +0 -11
  138. package/templates/react/add-on/module-federation/info.json +0 -7
  139. package/templates/react/add-on/module-federation/package.json +0 -5
  140. package/templates/react/add-on/netlify/README.md +0 -11
  141. package/templates/react/add-on/netlify/info.json +0 -7
  142. package/templates/react/add-on/sentry/assets/_dot_cursorrules.append +0 -22
  143. package/templates/react/add-on/sentry/assets/_dot_env.local.append +0 -11
  144. package/templates/react/add-on/sentry/assets/src/app/global-middleware.ts +0 -11
  145. package/templates/react/add-on/sentry/assets/src/routes/demo.sentry.testing.tsx +0 -489
  146. package/templates/react/add-on/sentry/info.json +0 -14
  147. package/templates/react/add-on/sentry/package.json +0 -5
  148. package/templates/react/add-on/shadcn/README.md +0 -7
  149. package/templates/react/add-on/shadcn/assets/_dot_cursorrules.append +0 -7
  150. package/templates/react/add-on/shadcn/assets/components.json +0 -21
  151. package/templates/react/add-on/shadcn/assets/src/lib/utils.ts +0 -6
  152. package/templates/react/add-on/shadcn/assets/src/styles.css +0 -138
  153. package/templates/react/add-on/shadcn/info.json +0 -7
  154. package/templates/react/add-on/shadcn/package.json +0 -9
  155. package/templates/react/add-on/start/assets/_dot_gitignore.append +0 -2
  156. package/templates/react/add-on/start/assets/app.config.ts.ejs +0 -32
  157. package/templates/react/add-on/start/assets/src/api.ts +0 -6
  158. package/templates/react/add-on/start/assets/src/client.tsx.ejs +0 -33
  159. package/templates/react/add-on/start/assets/src/router.tsx.ejs +0 -48
  160. package/templates/react/add-on/start/assets/src/routes/api.demo-names.ts +0 -11
  161. package/templates/react/add-on/start/assets/src/routes/demo.start.api-request.tsx.ejs +0 -33
  162. package/templates/react/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +0 -50
  163. package/templates/react/add-on/start/assets/src/ssr.tsx.ejs +0 -30
  164. package/templates/react/add-on/start/info.json +0 -18
  165. package/templates/react/add-on/start/package.json +0 -13
  166. package/templates/react/add-on/store/assets/src/lib/demo-store.ts +0 -13
  167. package/templates/react/add-on/store/assets/src/routes/demo.store.tsx.ejs +0 -75
  168. package/templates/react/add-on/store/info.json +0 -13
  169. package/templates/react/add-on/store/package.json +0 -6
  170. package/templates/react/add-on/t3env/README.md +0 -16
  171. package/templates/react/add-on/t3env/assets/src/env.ts +0 -39
  172. package/templates/react/add-on/t3env/info.json +0 -10
  173. package/templates/react/add-on/t3env/package.json +0 -6
  174. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/init.ts +0 -9
  175. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/react.ts +0 -4
  176. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/router.ts +0 -18
  177. package/templates/react/add-on/tRPC/assets/src/routes/api.trpc.$.tsx +0 -16
  178. package/templates/react/add-on/tRPC/info.json +0 -9
  179. package/templates/react/add-on/tRPC/package.json +0 -9
  180. package/templates/react/add-on/table/assets/src/data/demo-table-data.ts +0 -50
  181. package/templates/react/add-on/table/assets/src/routes/demo.table.tsx.ejs +0 -373
  182. package/templates/react/add-on/table/info.json +0 -13
  183. package/templates/react/add-on/table/package.json +0 -7
  184. package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/layout.tsx +0 -5
  185. package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/root-provider.tsx.ejs +0 -70
  186. package/templates/react/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx.ejs +0 -53
  187. package/templates/react/add-on/tanstack-query/info.json +0 -13
  188. package/templates/react/add-on/tanstack-query/package.json +0 -6
  189. package/templates/react/base/README.md.ejs +0 -558
  190. package/templates/react/base/_dot_gitignore +0 -5
  191. package/templates/react/base/_dot_vscode/settings.biome.json +0 -38
  192. package/templates/react/base/_dot_vscode/settings.json +0 -11
  193. package/templates/react/base/index.html.ejs +0 -20
  194. package/templates/react/base/package.biome.json +0 -10
  195. package/templates/react/base/package.eslintprettier.json +0 -11
  196. package/templates/react/base/package.json +0 -30
  197. package/templates/react/base/package.ts.json +0 -7
  198. package/templates/react/base/package.tw.json +0 -6
  199. package/templates/react/base/public/favicon.ico +0 -0
  200. package/templates/react/base/public/logo192.png +0 -0
  201. package/templates/react/base/public/logo512.png +0 -0
  202. package/templates/react/base/public/manifest.json +0 -25
  203. package/templates/react/base/public/robots.txt +0 -3
  204. package/templates/react/base/src/App.css +0 -38
  205. package/templates/react/base/src/App.test.tsx.ejs +0 -10
  206. package/templates/react/base/src/App.tsx.ejs +0 -74
  207. package/templates/react/base/src/components/Header.tsx.ejs +0 -27
  208. package/templates/react/base/src/logo.svg +0 -44
  209. package/templates/react/base/src/reportWebVitals.ts.ejs +0 -28
  210. package/templates/react/base/src/styles.css.ejs +0 -15
  211. package/templates/react/base/toolchain/.prettierignore +0 -3
  212. package/templates/react/base/toolchain/biome.json +0 -31
  213. package/templates/react/base/toolchain/eslint.config.js +0 -5
  214. package/templates/react/base/toolchain/prettier.config.js +0 -10
  215. package/templates/react/base/tsconfig.json.ejs +0 -29
  216. package/templates/react/base/vite.config.js.ejs +0 -23
  217. package/templates/react/code-router/src/main.tsx.ejs +0 -92
  218. package/templates/react/example/tanchat/README.md +0 -37
  219. package/templates/react/example/tanchat/assets/_dot_env.local.append +0 -2
  220. package/templates/react/example/tanchat/assets/public/example-guitar-flowers.jpg +0 -0
  221. package/templates/react/example/tanchat/assets/public/example-guitar-motherboard.jpg +0 -0
  222. package/templates/react/example/tanchat/assets/public/example-guitar-racing.jpg +0 -0
  223. package/templates/react/example/tanchat/assets/public/example-guitar-steamer-trunk.jpg +0 -0
  224. package/templates/react/example/tanchat/assets/public/example-guitar-superhero.jpg +0 -0
  225. package/templates/react/example/tanchat/assets/public/example-guitar-traveling.jpg +0 -0
  226. package/templates/react/example/tanchat/assets/public/example-guitar-video-games.jpg +0 -0
  227. package/templates/react/example/tanchat/assets/src/components/example-AIAssistant.tsx +0 -173
  228. package/templates/react/example/tanchat/assets/src/components/example-GuitarRecommendation.tsx +0 -47
  229. package/templates/react/example/tanchat/assets/src/data/example-guitars.ts +0 -83
  230. package/templates/react/example/tanchat/assets/src/demo.index.css +0 -220
  231. package/templates/react/example/tanchat/assets/src/integrations/tanchat/header-user.tsx +0 -5
  232. package/templates/react/example/tanchat/assets/src/routes/api.messages.ts +0 -24
  233. package/templates/react/example/tanchat/assets/src/routes/api.sse.ts +0 -23
  234. package/templates/react/example/tanchat/assets/src/routes/example.chat.tsx +0 -159
  235. package/templates/react/example/tanchat/assets/src/routes/example.guitars/$guitarId.tsx +0 -50
  236. package/templates/react/example/tanchat/assets/src/routes/example.guitars/index.tsx +0 -54
  237. package/templates/react/example/tanchat/assets/src/store/example-assistant.ts +0 -3
  238. package/templates/react/example/tanchat/assets/src/utils/demo.ai.ts +0 -62
  239. package/templates/react/example/tanchat/assets/src/utils/demo.sse.ts +0 -31
  240. package/templates/react/example/tanchat/assets/src/utils/demo.tools.ts +0 -47
  241. package/templates/react/example/tanchat/info.json +0 -19
  242. package/templates/react/example/tanchat/package.json +0 -16
  243. package/templates/react/file-router/package.fr.json +0 -5
  244. package/templates/react/file-router/src/main.tsx.ejs +0 -55
  245. package/templates/react/file-router/src/routes/__root.tsx.ejs +0 -82
  246. package/templates/solid/add-on/form/assets/src/routes/demo.form.tsx.ejs +0 -352
  247. package/templates/solid/add-on/form/info.json +0 -13
  248. package/templates/solid/add-on/form/package.json +0 -5
  249. package/templates/solid/add-on/module-federation/assets/module-federation.config.js.ejs +0 -27
  250. package/templates/solid/add-on/module-federation/assets/src/demo-mf-component.tsx +0 -3
  251. package/templates/solid/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +0 -9
  252. package/templates/solid/add-on/module-federation/info.json +0 -7
  253. package/templates/solid/add-on/module-federation/package.json +0 -5
  254. package/templates/solid/add-on/sentry/assets/_dot_cursorrules.append +0 -22
  255. package/templates/solid/add-on/sentry/assets/_dot_env.local.append +0 -2
  256. package/templates/solid/add-on/sentry/assets/src/routes/demo.sentry.bad-event-handler.tsx +0 -20
  257. package/templates/solid/add-on/sentry/info.json +0 -13
  258. package/templates/solid/add-on/sentry/package.json +0 -5
  259. package/templates/solid/add-on/solid-ui/README.md +0 -9
  260. package/templates/solid/add-on/solid-ui/assets/src/lib/utils.ts +0 -6
  261. package/templates/solid/add-on/solid-ui/assets/src/styles.css +0 -138
  262. package/templates/solid/add-on/solid-ui/assets/ui.config.json +0 -13
  263. package/templates/solid/add-on/solid-ui/info.json +0 -11
  264. package/templates/solid/add-on/solid-ui/package.json +0 -9
  265. package/templates/solid/add-on/start/assets/app.config.ts +0 -16
  266. package/templates/solid/add-on/start/assets/src/api.ts +0 -6
  267. package/templates/solid/add-on/start/assets/src/client.tsx +0 -7
  268. package/templates/solid/add-on/start/assets/src/router.tsx.ejs +0 -24
  269. package/templates/solid/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +0 -49
  270. package/templates/solid/add-on/start/assets/src/ssr.tsx +0 -12
  271. package/templates/solid/add-on/start/info.json +0 -14
  272. package/templates/solid/add-on/start/package.json +0 -12
  273. package/templates/solid/add-on/store/assets/src/lib/demo-store.ts +0 -13
  274. package/templates/solid/add-on/store/assets/src/routes/demo.store.tsx.ejs +0 -77
  275. package/templates/solid/add-on/store/info.json +0 -13
  276. package/templates/solid/add-on/store/package.json +0 -6
  277. package/templates/solid/add-on/t3env/README.md +0 -16
  278. package/templates/solid/add-on/t3env/assets/src/env.ts +0 -39
  279. package/templates/solid/add-on/t3env/info.json +0 -10
  280. package/templates/solid/add-on/t3env/package.json +0 -6
  281. package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/header-user.tsx +0 -5
  282. package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/provider.tsx +0 -15
  283. package/templates/solid/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx +0 -30
  284. package/templates/solid/add-on/tanstack-query/info.json +0 -13
  285. package/templates/solid/add-on/tanstack-query/package.json +0 -6
  286. package/templates/solid/base/README.md.ejs +0 -215
  287. package/templates/solid/base/_dot_cursorrules.append +0 -35
  288. package/templates/solid/base/_dot_gitignore +0 -5
  289. package/templates/solid/base/_dot_vscode/settings.biome.json +0 -38
  290. package/templates/solid/base/_dot_vscode/settings.json +0 -11
  291. package/templates/solid/base/index.html.ejs +0 -20
  292. package/templates/solid/base/package.biome.json +0 -10
  293. package/templates/solid/base/package.eslintprettier.json +0 -11
  294. package/templates/solid/base/package.json +0 -23
  295. package/templates/solid/base/package.ts.json +0 -5
  296. package/templates/solid/base/package.tw.json +0 -6
  297. package/templates/solid/base/public/favicon.ico +0 -0
  298. package/templates/solid/base/public/logo192.png +0 -0
  299. package/templates/solid/base/public/logo512.png +0 -0
  300. package/templates/solid/base/public/manifest.json +0 -25
  301. package/templates/solid/base/public/robots.txt +0 -3
  302. package/templates/solid/base/src/App.css +0 -0
  303. package/templates/solid/base/src/App.tsx.ejs +0 -47
  304. package/templates/solid/base/src/components/Header.tsx.ejs +0 -26
  305. package/templates/solid/base/src/logo.svg +0 -120
  306. package/templates/solid/base/src/styles.css.ejs +0 -15
  307. package/templates/solid/base/toolchain/.prettierignore +0 -3
  308. package/templates/solid/base/toolchain/biome.json +0 -31
  309. package/templates/solid/base/toolchain/eslint.config.js +0 -5
  310. package/templates/solid/base/toolchain/prettier.config.js +0 -10
  311. package/templates/solid/base/tsconfig.json.ejs +0 -31
  312. package/templates/solid/base/vite.config.js.ejs +0 -22
  313. package/templates/solid/code-router/src/main.tsx.ejs +0 -71
  314. package/templates/solid/example/tanchat/README.md +0 -52
  315. package/templates/solid/example/tanchat/assets/ai-streaming-server/README.md +0 -110
  316. package/templates/solid/example/tanchat/assets/ai-streaming-server/_dot_env.example +0 -1
  317. package/templates/solid/example/tanchat/assets/ai-streaming-server/package.json +0 -26
  318. package/templates/solid/example/tanchat/assets/ai-streaming-server/src/index.ts +0 -102
  319. package/templates/solid/example/tanchat/assets/ai-streaming-server/tsconfig.json +0 -15
  320. package/templates/solid/example/tanchat/assets/src/components/demo.SettingsDialog.tsx +0 -149
  321. package/templates/solid/example/tanchat/assets/src/demo.index.css +0 -227
  322. package/templates/solid/example/tanchat/assets/src/lib/demo-store.ts +0 -13
  323. package/templates/solid/example/tanchat/assets/src/routes/example.chat.tsx +0 -435
  324. package/templates/solid/example/tanchat/assets/src/store/demo.hooks.ts +0 -17
  325. package/templates/solid/example/tanchat/assets/src/store/demo.store.ts +0 -133
  326. package/templates/solid/example/tanchat/info.json +0 -14
  327. package/templates/solid/example/tanchat/package.json +0 -7
  328. package/templates/solid/file-router/package.fr.json +0 -5
  329. package/templates/solid/file-router/src/main.tsx.ejs +0 -47
  330. package/templates/solid/file-router/src/routes/__root.tsx.ejs +0 -41
  331. package/templates/solid/file-router/src/routes/index.tsx +0 -43
  332. package/tests/cra.test.ts +0 -293
  333. package/tests/snapshots/cra/cr-js-npm.json +0 -33
  334. package/tests/snapshots/cra/cr-ts-npm.json +0 -34
  335. package/tests/snapshots/cra/cr-ts-start-npm.json +0 -38
  336. package/tests/snapshots/cra/fr-ts-npm.json +0 -34
  337. package/tests/snapshots/cra/fr-ts-tw-npm.json +0 -33
  338. package/tests/snapshots/cra/solid-cr-js-npm.json +0 -31
  339. package/tests/snapshots/cra/solid-cr-ts-npm.json +0 -32
  340. package/tests/snapshots/cra/solid-cr-ts-start-npm.json +0 -36
  341. package/tests/snapshots/cra/solid-fr-ts-npm.json +0 -33
  342. package/tests/snapshots/cra/solid-fr-ts-tw-npm.json +0 -32
  343. package/tests/test-utilities.ts +0 -87
package/dist/mcp.js DELETED
@@ -1,229 +0,0 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
3
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
- import express from 'express';
5
- import { z } from 'zod';
6
- import { createApp } from './create-app.js';
7
- import { finalizeAddOns } from './add-ons.js';
8
- import { createDefaultEnvironment } from './environment.js';
9
- const tanStackReactAddOns = [
10
- {
11
- id: 'clerk',
12
- description: 'Enable authentication with Clerk',
13
- },
14
- {
15
- id: 'convex',
16
- description: 'Enable a database using Convex',
17
- },
18
- {
19
- id: 'form',
20
- description: 'Form handling library',
21
- },
22
- {
23
- id: 'netlify',
24
- description: 'Enable deployments to Netlify',
25
- },
26
- {
27
- id: 'sentry',
28
- description: 'Enable Sentry error tracking',
29
- },
30
- {
31
- id: 'shadcn',
32
- description: 'Enable integration of the Shadcn UI component library',
33
- },
34
- {
35
- id: 'start',
36
- description: 'Set this if you want a TanStack Start application that supports server functions or APIs',
37
- },
38
- {
39
- id: 'tanstack-query',
40
- description: 'Enable TanStack Query for data fetching',
41
- },
42
- {
43
- id: 'store',
44
- description: 'Enable the TanStack Store state management library',
45
- },
46
- {
47
- id: 'tanchat',
48
- description: 'Add an AI chatbot example to the application',
49
- },
50
- ];
51
- const tanStackSolidAddOns = [
52
- {
53
- id: 'solid-ui',
54
- description: 'Enable integration of the Solid UI component library',
55
- },
56
- {
57
- id: 'form',
58
- description: 'Form handling library',
59
- },
60
- {
61
- id: 'sentry',
62
- description: 'Enable Sentry error tracking',
63
- },
64
- {
65
- id: 'store',
66
- description: 'Enable the TanStack Store state management library',
67
- },
68
- {
69
- id: 'start',
70
- description: 'Set this if you want a TanStack Start application that supports server functions or APIs',
71
- },
72
- {
73
- id: 'tanstack-query',
74
- description: 'Enable TanStack Query for data fetching',
75
- },
76
- {
77
- id: 'tanchat',
78
- description: 'Add an AI chatbot example to the application',
79
- },
80
- ];
81
- function createServer({ appName, forcedAddOns = [], name, }) {
82
- const server = new McpServer({
83
- name: `${appName} Application Builder`,
84
- version: '1.0.0',
85
- });
86
- server.tool('listTanStackReactAddOns', {}, () => {
87
- return {
88
- content: [{ type: 'text', text: JSON.stringify(tanStackReactAddOns) }],
89
- };
90
- });
91
- server.tool('createTanStackReactApplication', {
92
- projectName: z
93
- .string()
94
- .describe('The package.json module name of the application (will also be the directory name)'),
95
- cwd: z.string().describe('The directory to create the application in'),
96
- addOns: z
97
- .array(z.enum([
98
- 'clerk',
99
- 'convex',
100
- 'form',
101
- 'netlify',
102
- 'sentry',
103
- 'shadcn',
104
- 'start',
105
- 'store',
106
- 'tanstack-query',
107
- 'tanchat',
108
- ]))
109
- .describe('The IDs of the add-ons to install'),
110
- targetDir: z
111
- .string()
112
- .describe('The directory to create the application in. Use the absolute path of the directory you want the application to be created in'),
113
- }, async ({ projectName, addOns, cwd, targetDir }) => {
114
- try {
115
- process.chdir(cwd);
116
- const chosenAddOns = await finalizeAddOns('react', 'file-router', Array.from(new Set([...addOns, ...forcedAddOns])));
117
- await createApp({
118
- projectName: projectName.replace(/^\//, './'),
119
- framework: 'react',
120
- typescript: true,
121
- tailwind: true,
122
- packageManager: 'pnpm',
123
- toolchain: 'none',
124
- mode: 'file-router',
125
- addOns: true,
126
- chosenAddOns,
127
- git: true,
128
- variableValues: {},
129
- }, {
130
- silent: true,
131
- environment: createDefaultEnvironment(),
132
- name,
133
- cwd: targetDir,
134
- });
135
- return {
136
- content: [{ type: 'text', text: 'Application created successfully' }],
137
- };
138
- }
139
- catch (error) {
140
- return {
141
- content: [
142
- { type: 'text', text: `Error creating application: ${error}` },
143
- ],
144
- };
145
- }
146
- });
147
- server.tool('listTanStackSolidAddOns', {}, () => {
148
- return {
149
- content: [{ type: 'text', text: JSON.stringify(tanStackSolidAddOns) }],
150
- };
151
- });
152
- server.tool('createTanStackSolidApplication', {
153
- projectName: z
154
- .string()
155
- .describe('The package.json module name of the application (will also be the directory name)'),
156
- cwd: z.string().describe('The directory to create the application in'),
157
- addOns: z
158
- .array(z.enum([
159
- 'solid-ui',
160
- 'form',
161
- 'sentry',
162
- 'store',
163
- 'tanstack-query',
164
- 'tanchat',
165
- ]))
166
- .describe('The IDs of the add-ons to install'),
167
- targetDir: z
168
- .string()
169
- .describe('The directory to create the application in. Use the absolute path of the directory you want the application to be created in'),
170
- }, async ({ projectName, addOns, cwd, targetDir }) => {
171
- try {
172
- process.chdir(cwd);
173
- const chosenAddOns = await finalizeAddOns('solid', 'file-router', Array.from(new Set([...addOns, ...forcedAddOns])));
174
- await createApp({
175
- projectName: projectName.replace(/^\//, './'),
176
- framework: 'solid',
177
- typescript: true,
178
- tailwind: true,
179
- packageManager: 'pnpm',
180
- toolchain: 'none',
181
- mode: 'file-router',
182
- addOns: true,
183
- chosenAddOns,
184
- git: true,
185
- variableValues: {},
186
- }, {
187
- silent: true,
188
- environment: createDefaultEnvironment(),
189
- name,
190
- cwd: targetDir,
191
- });
192
- return {
193
- content: [{ type: 'text', text: 'Application created successfully' }],
194
- };
195
- }
196
- catch (error) {
197
- return {
198
- content: [
199
- { type: 'text', text: `Error creating application: ${error}` },
200
- ],
201
- };
202
- }
203
- });
204
- return server;
205
- }
206
- export default async function runServer(sse, { forcedAddOns, appName, name, }) {
207
- let transport = null;
208
- const server = createServer({ appName, forcedAddOns, name });
209
- if (sse) {
210
- const app = express();
211
- app.get('/sse', (req, res) => {
212
- transport = new SSEServerTransport('/messages', res);
213
- server.connect(transport);
214
- });
215
- app.post('/messages', (req, res) => {
216
- if (transport) {
217
- transport.handlePostMessage(req, res);
218
- }
219
- });
220
- const port = process.env.PORT || 8080;
221
- app.listen(port, () => {
222
- console.log(`Server is running on port http://localhost:${port}/sse`);
223
- });
224
- }
225
- else {
226
- const transport = new StdioServerTransport();
227
- await server.connect(transport);
228
- }
229
- }
package/dist/templates.js DELETED
@@ -1,6 +0,0 @@
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
- }
package/dist/toolchain.js DELETED
@@ -1,6 +0,0 @@
1
- export const SUPPORTED_TOOLCHAINS = [
2
- 'none',
3
- 'biome',
4
- 'eslint+prettier',
5
- ];
6
- export const DEFAULT_TOOLCHAIN = 'none';
@@ -1,3 +0,0 @@
1
- export declare function add(addOns: Array<string>, { silent, }?: {
2
- silent?: boolean;
3
- }): Promise<void>;
@@ -1,7 +0,0 @@
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,3 +0,0 @@
1
- type AddOnMode = 'add-on' | 'overlay';
2
- export declare function initAddOn(mode: AddOnMode): Promise<void>;
3
- export {};
@@ -1,2 +0,0 @@
1
- export declare function readFileHelper(path: string): string;
2
- export declare function getBinaryFile(content: string): string | null;
@@ -1,7 +0,0 @@
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 +0,0 @@
1
- export declare function getTemplatesRoot(): string;
@@ -1,3 +0,0 @@
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;
package/src/add.ts DELETED
@@ -1,186 +0,0 @@
1
- import { mkdir, readFile, writeFile } from 'node:fs/promises'
2
- import { existsSync, statSync } from 'node:fs'
3
- import { basename, dirname, resolve } from 'node:path'
4
- import chalk from 'chalk'
5
- import { execa, execaSync } from 'execa'
6
- import {
7
- cancel,
8
- confirm,
9
- intro,
10
- isCancel,
11
- log,
12
- outro,
13
- spinner,
14
- } from '@clack/prompts'
15
-
16
- import { CONFIG_FILE } from './constants.js'
17
- import {
18
- createDefaultEnvironment,
19
- createMemoryEnvironment,
20
- } from './environment.js'
21
- import { createApp } from './create-app.js'
22
- import { finalizeAddOns } from './add-ons.js'
23
- import { sortObject } from './utils.js'
24
- import { readConfigFile, writeConfigFile } from './config-file.js'
25
-
26
- import type { PersistedOptions } from './config-file.js'
27
-
28
- import type { Framework, Options } from './types.js'
29
-
30
- function isDirectory(path: string) {
31
- return statSync(path).isDirectory()
32
- }
33
-
34
- async function hasPendingGitChanges() {
35
- const status = await execaSync('git', ['status', '--porcelain'])
36
- return status.stdout.length > 0
37
- }
38
-
39
- async function createOptions(
40
- json: PersistedOptions,
41
- addOns: Array<string>,
42
- ): Promise<Required<Options>> {
43
- return {
44
- ...json,
45
- tailwind: true,
46
- chosenAddOns: await finalizeAddOns(
47
- json.framework as Framework,
48
- json.mode as string,
49
- [...json.existingAddOns, ...addOns],
50
- ),
51
- } as Required<Options>
52
- }
53
-
54
- async function runCreateApp(options: Required<Options>) {
55
- const { environment, output } = createMemoryEnvironment()
56
- await createApp(options, {
57
- silent: true,
58
- environment,
59
- cwd: process.cwd(),
60
- name: 'create-tsrouter-app',
61
- })
62
- return output
63
- }
64
-
65
- export async function add(
66
- addOns: Array<string>,
67
- {
68
- silent = false,
69
- }: {
70
- silent?: boolean
71
- } = {},
72
- ) {
73
- const persistedOptions = await readConfigFile(process.cwd())
74
- if (!persistedOptions) {
75
- console.error(`${chalk.red('There is no .cta.json file in your project.')}
76
-
77
- This is probably because this was created with an older version of create-tsrouter-app.`)
78
- return
79
- }
80
-
81
- if (!silent) {
82
- intro(`Adding ${addOns.join(', ')} to the project...`)
83
- }
84
-
85
- if (await hasPendingGitChanges()) {
86
- log.error(
87
- `${chalk.red('You have pending git changes.')} Please commit or stash them before adding add-ons.`,
88
- )
89
- return
90
- }
91
-
92
- const newOptions = await createOptions(persistedOptions, addOns)
93
-
94
- const output = await runCreateApp(newOptions)
95
-
96
- const overwrittenFiles: Array<string> = []
97
- const changedFiles: Array<string> = []
98
- const contentMap = new Map<string, string>()
99
- for (const file of Object.keys(output.files)) {
100
- const relativeFile = file.replace(process.cwd(), '')
101
- if (existsSync(file)) {
102
- if (!isDirectory(file)) {
103
- const contents = (await readFile(file)).toString()
104
- if (
105
- ['package.json', CONFIG_FILE].includes(basename(file)) ||
106
- contents !== output.files[file]
107
- ) {
108
- overwrittenFiles.push(relativeFile)
109
- contentMap.set(relativeFile, output.files[file])
110
- }
111
- }
112
- } else {
113
- changedFiles.push(relativeFile)
114
- contentMap.set(relativeFile, output.files[file])
115
- }
116
- }
117
-
118
- if (overwrittenFiles.length > 0 && !silent) {
119
- log.warn(
120
- `${chalk.yellow('The following will be overwritten:')}\n${overwrittenFiles.join('\n')}`,
121
- )
122
- const shouldContinue = await confirm({
123
- message: 'Do you want to continue?',
124
- })
125
- if (isCancel(shouldContinue)) {
126
- cancel('Operation cancelled.')
127
- process.exit(0)
128
- }
129
- }
130
-
131
- for (const file of [...changedFiles, ...overwrittenFiles]) {
132
- const targetFile = `.${file}`
133
- const fName = basename(file)
134
- const contents = contentMap.get(file)!
135
- if (fName === 'package.json') {
136
- const currentJson = JSON.parse(
137
- (await readFile(resolve(fName), 'utf-8')).toString(),
138
- )
139
- const newJson = JSON.parse(contents)
140
-
141
- currentJson.scripts = newJson.scripts
142
- currentJson.dependencies = sortObject({
143
- ...currentJson.dependencies,
144
- ...newJson.dependencies,
145
- })
146
- currentJson.devDependencies = sortObject({
147
- ...currentJson.devDependencies,
148
- ...newJson.devDependencies,
149
- })
150
-
151
- await writeFile(targetFile, JSON.stringify(currentJson, null, 2))
152
- } else if (fName !== CONFIG_FILE) {
153
- await mkdir(resolve(dirname(targetFile)), { recursive: true })
154
- await writeFile(resolve(targetFile), contents)
155
- }
156
- }
157
-
158
- // Handle commands
159
- const originalOutput = await runCreateApp(
160
- await createOptions(persistedOptions, []),
161
- )
162
- const originalCommands = new Set(
163
- originalOutput.commands.map((c) => [c.command, ...c.args].join(' ')),
164
- )
165
- for (const command of output.commands) {
166
- const commandString = [command.command, ...command.args].join(' ')
167
- if (!originalCommands.has(commandString)) {
168
- await execa(command.command, command.args)
169
- }
170
- }
171
- const realEnvironment = createDefaultEnvironment()
172
- writeConfigFile(realEnvironment, process.cwd(), newOptions)
173
-
174
- const s = silent ? null : spinner()
175
- s?.start(`Installing dependencies via ${newOptions.packageManager}...`)
176
- await realEnvironment.execute(
177
- newOptions.packageManager,
178
- ['install'],
179
- resolve(process.cwd()),
180
- )
181
- s?.stop(`Installed dependencies`)
182
-
183
- if (!silent) {
184
- outro('Add-ons added successfully!')
185
- }
186
- }
package/src/cli.ts DELETED
@@ -1,210 +0,0 @@
1
- import { Command, InvalidArgumentError } from 'commander'
2
- import { intro, log } from '@clack/prompts'
3
-
4
- import { createApp } from './create-app.js'
5
- import { normalizeOptions, promptForOptions } from './options.js'
6
- import { SUPPORTED_PACKAGE_MANAGERS } from './package-manager.js'
7
- import { SUPPORTED_TOOLCHAINS } from './toolchain.js'
8
-
9
- import runServer from './mcp.js'
10
- import { listAddOns } from './add-ons.js'
11
- import { DEFAULT_FRAMEWORK, SUPPORTED_FRAMEWORKS } from './constants.js'
12
- // import { initAddOn } from './custom-add-on.js'
13
-
14
- import { createDefaultEnvironment } from './environment.js'
15
- // import { add } from './add.js'
16
-
17
- import type { PackageManager } from './package-manager.js'
18
- import type { ToolChain } from './toolchain.js'
19
- import type {
20
- CliOptions,
21
- Framework,
22
- Mode,
23
- Options,
24
- TemplateOptions,
25
- } from './types.js'
26
-
27
- export function cli({
28
- name,
29
- appName,
30
- forcedMode,
31
- forcedAddOns,
32
- }: {
33
- name: string
34
- appName: string
35
- forcedMode?: Mode
36
- forcedAddOns?: Array<string>
37
- }) {
38
- const program = new Command()
39
-
40
- program.name(name).description(`CLI to create a new ${appName} application`)
41
-
42
- // program
43
- // .command('add')
44
- // .argument('add-on', 'Name of the add-on (or add-ons separated by commas)')
45
- // .action(async (addOn: string) => {
46
- // await add(addOn.split(',').map((addon) => addon.trim()))
47
- // })
48
-
49
- // program
50
- // .command('update-add-on')
51
- // .description('Create or update an add-on from the current project')
52
- // .action(async () => {
53
- // await initAddOn('add-on')
54
- // })
55
-
56
- // program
57
- // .command('update-overlay')
58
- // .description('Create or update a project overlay from the current project')
59
- // .action(async () => {
60
- // await initAddOn('overlay')
61
- // })
62
-
63
- program.argument('[project-name]', 'name of the project')
64
-
65
- if (!forcedMode) {
66
- program.option<'typescript' | 'javascript' | 'file-router'>(
67
- '--template <type>',
68
- 'project template (typescript, javascript, file-router)',
69
- (value) => {
70
- if (
71
- value !== 'typescript' &&
72
- value !== 'javascript' &&
73
- value !== 'file-router'
74
- ) {
75
- throw new InvalidArgumentError(
76
- `Invalid template: ${value}. Only the following are allowed: typescript, javascript, file-router`,
77
- )
78
- }
79
- return value
80
- },
81
- )
82
- }
83
- program
84
- .option<Framework>(
85
- '--framework <type>',
86
- 'project framework (solid, react)',
87
- (value) => {
88
- if (!SUPPORTED_FRAMEWORKS.includes(value as Framework)) {
89
- throw new InvalidArgumentError(
90
- `Invalid framework: ${value}. Only the following are allowed: ${SUPPORTED_FRAMEWORKS.join(
91
- ', ',
92
- )}`,
93
- )
94
- }
95
- return value as Framework
96
- },
97
- DEFAULT_FRAMEWORK,
98
- )
99
- // .option('--overlay [url]', 'add an overlay from a URL', false)
100
- .option<PackageManager>(
101
- `--package-manager <${SUPPORTED_PACKAGE_MANAGERS.join('|')}>`,
102
- `Explicitly tell the CLI to use this package manager`,
103
- (value) => {
104
- if (!SUPPORTED_PACKAGE_MANAGERS.includes(value as PackageManager)) {
105
- throw new InvalidArgumentError(
106
- `Invalid package manager: ${value}. The following are allowed: ${SUPPORTED_PACKAGE_MANAGERS.join(
107
- ', ',
108
- )}`,
109
- )
110
- }
111
- return value as PackageManager
112
- },
113
- )
114
- .option<ToolChain>(
115
- `--toolchain <${SUPPORTED_TOOLCHAINS.join('|')}>`,
116
- `Explicitly tell the CLI to use this toolchain`,
117
- (value) => {
118
- if (!SUPPORTED_TOOLCHAINS.includes(value as ToolChain)) {
119
- throw new InvalidArgumentError(
120
- `Invalid toolchain: ${value}. The following are allowed: ${SUPPORTED_TOOLCHAINS.join(
121
- ', ',
122
- )}`,
123
- )
124
- }
125
- return value as ToolChain
126
- },
127
- )
128
- .option('--interactive', 'interactive mode', false)
129
- .option('--tailwind', 'add Tailwind CSS', false)
130
- .option<Array<string> | boolean>(
131
- '--add-ons [...add-ons]',
132
- 'pick from a list of available add-ons (comma separated list)',
133
- (value: string) => {
134
- let addOns: Array<string> | boolean = !!value
135
- if (typeof value === 'string') {
136
- addOns = value.split(',').map((addon) => addon.trim())
137
- }
138
- return addOns
139
- },
140
- )
141
- .option('--list-add-ons', 'list all available add-ons', false)
142
- .option('--no-git', 'do not create a git repository')
143
- .option(
144
- '--target-dir <path>',
145
- 'the target directory for the application root',
146
- )
147
- .option('--mcp', 'run the MCP server', false)
148
- .option('--mcp-sse', 'run the MCP server in SSE mode', false)
149
-
150
- program.action(async (projectName: string, options: CliOptions) => {
151
- if (options.listAddOns) {
152
- await listAddOns(options, {
153
- forcedMode: forcedMode as TemplateOptions,
154
- forcedAddOns,
155
- })
156
- } else if (options.mcp || options.mcpSse) {
157
- await runServer(!!options.mcpSse, {
158
- forcedMode: forcedMode as TemplateOptions,
159
- forcedAddOns,
160
- appName,
161
- })
162
- } else {
163
- try {
164
- const cliOptions = {
165
- projectName,
166
- ...options,
167
- } as CliOptions
168
-
169
- if (forcedMode) {
170
- cliOptions.template = forcedMode as TemplateOptions
171
- }
172
-
173
- let finalOptions: Options | undefined
174
- if (cliOptions.interactive) {
175
- cliOptions.addOns = true
176
- } else {
177
- finalOptions = await normalizeOptions(
178
- cliOptions,
179
- forcedMode,
180
- forcedAddOns,
181
- )
182
- }
183
-
184
- if (finalOptions) {
185
- intro(`Creating a new ${appName} app in ${projectName}...`)
186
- } else {
187
- intro(`Let's configure your ${appName} application`)
188
- finalOptions = await promptForOptions(cliOptions, {
189
- forcedMode: forcedMode as TemplateOptions,
190
- forcedAddOns,
191
- })
192
- }
193
-
194
- await createApp(finalOptions!, {
195
- environment: createDefaultEnvironment(),
196
- cwd: options.targetDir || undefined,
197
- name,
198
- appName,
199
- })
200
- } catch (error) {
201
- log.error(
202
- error instanceof Error ? error.message : 'An unknown error occurred',
203
- )
204
- process.exit(1)
205
- }
206
- }
207
- })
208
-
209
- program.parse()
210
- }