@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
@@ -1,159 +0,0 @@
1
- import { createFileRoute } from '@tanstack/react-router'
2
- import { useEffect, useRef } from 'react'
3
- import { Send } from 'lucide-react'
4
- import ReactMarkdown from 'react-markdown'
5
- import rehypeRaw from 'rehype-raw'
6
- import rehypeSanitize from 'rehype-sanitize'
7
- import rehypeHighlight from 'rehype-highlight'
8
- import remarkGfm from 'remark-gfm'
9
- import { useChat } from '@ai-sdk/react'
10
-
11
- import { genAIResponse } from '../utils/demo.ai'
12
-
13
- import type { UIMessage } from 'ai'
14
-
15
- import '../demo.index.css'
16
-
17
- function InitalLayout({ children }: { children: React.ReactNode }) {
18
- return (
19
- <div className="flex-1 flex items-center justify-center px-4">
20
- <div className="text-center max-w-3xl mx-auto w-full">
21
- <h1 className="text-6xl font-bold mb-4 bg-gradient-to-r from-orange-500 to-red-600 text-transparent bg-clip-text uppercase">
22
- <span className="text-white">TanStack</span> Chat
23
- </h1>
24
- <p className="text-gray-400 mb-6 w-2/3 mx-auto text-lg">
25
- You can ask me about anything, I might or might not have a good
26
- answer, but you can still ask.
27
- </p>
28
- {children}
29
- </div>
30
- </div>
31
- )
32
- }
33
-
34
- function ChattingLayout({ children }: { children: React.ReactNode }) {
35
- return (
36
- <div className="absolute bottom-0 right-0 left-64 bg-gray-900/80 backdrop-blur-sm border-t border-orange-500/10">
37
- <div className="max-w-3xl mx-auto w-full px-4 py-3">{children}</div>
38
- </div>
39
- )
40
- }
41
-
42
- function Messages({ messages }: { messages: Array<UIMessage> }) {
43
- const messagesContainerRef = useRef<HTMLDivElement>(null)
44
-
45
- useEffect(() => {
46
- if (messagesContainerRef.current) {
47
- messagesContainerRef.current.scrollTop =
48
- messagesContainerRef.current.scrollHeight
49
- }
50
- }, [messages])
51
-
52
- if (!messages.length) {
53
- return null
54
- }
55
-
56
- return (
57
- <div ref={messagesContainerRef} className="flex-1 overflow-y-auto pb-24">
58
- <div className="max-w-3xl mx-auto w-full px-4">
59
- {messages.map(({ id, role, content }) => (
60
- <div
61
- key={id}
62
- className={`py-6 ${
63
- role === 'assistant'
64
- ? 'bg-gradient-to-r from-orange-500/5 to-red-600/5'
65
- : 'bg-transparent'
66
- }`}
67
- >
68
- <div className="flex items-start gap-4 max-w-3xl mx-auto w-full">
69
- {role === 'assistant' ? (
70
- <div className="w-8 h-8 rounded-lg bg-gradient-to-r from-orange-500 to-red-600 mt-2 flex items-center justify-center text-sm font-medium text-white flex-shrink-0">
71
- AI
72
- </div>
73
- ) : (
74
- <div className="w-8 h-8 rounded-lg bg-gray-700 flex items-center justify-center text-sm font-medium text-white flex-shrink-0">
75
- Y
76
- </div>
77
- )}
78
- <div className="flex-1 min-w-0">
79
- <ReactMarkdown
80
- className="prose dark:prose-invert max-w-none"
81
- rehypePlugins={[
82
- rehypeRaw,
83
- rehypeSanitize,
84
- rehypeHighlight,
85
- remarkGfm,
86
- ]}
87
- >
88
- {content}
89
- </ReactMarkdown>
90
- </div>
91
- </div>
92
- </div>
93
- ))}
94
- </div>
95
- </div>
96
- )
97
- }
98
-
99
- function ChatPage() {
100
- const { messages, input, handleInputChange, handleSubmit } = useChat({
101
- initialMessages: [],
102
- fetch: (_url, options) => {
103
- const { messages } = JSON.parse(options!.body! as string)
104
- return genAIResponse({
105
- data: {
106
- messages,
107
- },
108
- })
109
- },
110
- })
111
-
112
- const Layout = messages.length ? ChattingLayout : InitalLayout
113
-
114
- return (
115
- <div className="relative flex h-[calc(100vh-32px)] bg-gray-900">
116
- <div className="flex-1 flex flex-col">
117
- <Messages messages={messages} />
118
-
119
- <Layout>
120
- <form onSubmit={handleSubmit}>
121
- <div className="relative max-w-xl mx-auto">
122
- <textarea
123
- value={input}
124
- onChange={handleInputChange}
125
- placeholder="Type something clever (or don't, we won't judge)..."
126
- className="w-full rounded-lg border border-orange-500/20 bg-gray-800/50 pl-4 pr-12 py-3 text-sm text-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-orange-500/50 focus:border-transparent resize-none overflow-hidden shadow-lg"
127
- rows={1}
128
- style={{ minHeight: '44px', maxHeight: '200px' }}
129
- onInput={(e) => {
130
- const target = e.target as HTMLTextAreaElement
131
- target.style.height = 'auto'
132
- target.style.height =
133
- Math.min(target.scrollHeight, 200) + 'px'
134
- }}
135
- onKeyDown={(e) => {
136
- if (e.key === 'Enter' && !e.shiftKey) {
137
- e.preventDefault()
138
- handleSubmit(e)
139
- }
140
- }}
141
- />
142
- <button
143
- type="submit"
144
- disabled={!input.trim()}
145
- className="absolute right-2 top-1/2 -translate-y-1/2 p-2 text-orange-500 hover:text-orange-400 disabled:text-gray-500 transition-colors focus:outline-none"
146
- >
147
- <Send className="w-4 h-4" />
148
- </button>
149
- </div>
150
- </form>
151
- </Layout>
152
- </div>
153
- </div>
154
- )
155
- }
156
-
157
- export const Route = createFileRoute('/example/chat')({
158
- component: ChatPage,
159
- })
@@ -1,50 +0,0 @@
1
- import { Link, createFileRoute } from '@tanstack/react-router'
2
- import guitars from '../../data/example-guitars'
3
-
4
- export const Route = createFileRoute('/example/guitars/$guitarId')({
5
- component: RouteComponent,
6
- loader: async ({ params }) => {
7
- const guitar = guitars.find((guitar) => guitar.id === +params.guitarId)
8
- if (!guitar) {
9
- throw new Error('Guitar not found')
10
- }
11
- return guitar
12
- },
13
- })
14
-
15
- function RouteComponent() {
16
- const guitar = Route.useLoaderData()
17
-
18
- return (
19
- <div className="relative min-h-[100vh] flex items-center bg-black text-white p-5">
20
- <div className="relative z-10 w-[60%] bg-gray-900/60 backdrop-blur-md rounded-2xl p-8 border border-gray-800/50 shadow-xl">
21
- <Link
22
- to="/example/guitars"
23
- className="inline-block mb-4 text-emerald-400 hover:text-emerald-300"
24
- >
25
- &larr; Back to all guitars
26
- </Link>
27
- <h1 className="text-3xl font-bold mb-4">{guitar.name}</h1>
28
- <p className="text-gray-300 mb-6">{guitar.description}</p>
29
- <div className="flex items-center justify-between">
30
- <div className="text-2xl font-bold text-emerald-400">
31
- ${guitar.price}
32
- </div>
33
- <button className="bg-emerald-600 hover:bg-emerald-500 text-white px-6 py-2 rounded-lg transition-colors">
34
- Add to Cart
35
- </button>
36
- </div>
37
- </div>
38
-
39
- <div className="absolute top-0 right-0 w-[55%] h-full z-0">
40
- <div className="w-full h-full overflow-hidden rounded-2xl border-4 border-gray-800 shadow-2xl">
41
- <img
42
- src={guitar.image}
43
- alt={guitar.name}
44
- className="w-full h-full object-cover guitar-image"
45
- />
46
- </div>
47
- </div>
48
- </div>
49
- )
50
- }
@@ -1,54 +0,0 @@
1
- import { Link, createFileRoute } from '@tanstack/react-router'
2
- import guitars from '../../data/example-guitars'
3
-
4
- export const Route = createFileRoute('/example/guitars/')({
5
- component: GuitarsIndex,
6
- })
7
-
8
- function GuitarsIndex() {
9
- return (
10
- <div className="bg-black text-white p-5">
11
- <h1 className="text-3xl font-bold mb-8 text-center">Featured Guitars</h1>
12
- <div className="flex flex-wrap gap-12 justify-center">
13
- {guitars.map((guitar) => (
14
- <div
15
- key={guitar.id}
16
- className="w-full md:w-[calc(50%-1.5rem)] xl:w-[calc(33.333%-2rem)] relative mb-24"
17
- >
18
- <Link
19
- to="/example/guitars/$guitarId"
20
- params={{
21
- guitarId: guitar.id.toString(),
22
- }}
23
- >
24
- <div className="relative z-0 w-full aspect-square mb-8">
25
- <div className="w-full h-full overflow-hidden rounded-2xl border-4 border-gray-800 shadow-2xl">
26
- <img
27
- src={guitar.image}
28
- alt={guitar.name}
29
- className="w-full h-full object-cover guitar-image group-hover:scale-105 transition-transform duration-500"
30
- />
31
- <div className="absolute inset-0 bg-gradient-to-t from-black/40 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300"></div>
32
- </div>
33
-
34
- <div className="absolute bottom-4 left-1/2 transform -translate-x-1/2 bg-emerald-500/80 text-white px-4 py-2 rounded-full text-sm font-medium opacity-0 group-hover:opacity-100 transition-opacity duration-300 backdrop-blur-sm">
35
- View Details
36
- </div>
37
- </div>
38
-
39
- <div className="absolute bottom-0 right-0 z-10 w-[80%] bg-gray-900/60 backdrop-blur-md rounded-2xl p-5 border border-gray-800/50 shadow-xl transform translate-y-[40%]">
40
- <h2 className="text-xl font-bold mb-2">{guitar.name}</h2>
41
- <p className="text-gray-300 mb-3 line-clamp-2">
42
- {guitar.shortDescription}
43
- </p>
44
- <div className="text-xl font-bold text-emerald-400">
45
- ${guitar.price}
46
- </div>
47
- </div>
48
- </Link>
49
- </div>
50
- ))}
51
- </div>
52
- </div>
53
- )
54
- }
@@ -1,3 +0,0 @@
1
- import { Store } from '@tanstack/store'
2
-
3
- export const showAIAssistant = new Store(false)
@@ -1,62 +0,0 @@
1
- import { createServerFn } from '@tanstack/react-start'
2
- import { anthropic } from '@ai-sdk/anthropic'
3
- import { streamText } from 'ai'
4
-
5
- import getTools from './demo.tools'
6
-
7
- export interface Message {
8
- id: string
9
- role: 'user' | 'assistant'
10
- content: string
11
- }
12
-
13
- const SYSTEM_PROMPT = `You are a helpful assistant for a store that sells guitars.
14
-
15
- You can use the following tools to help the user:
16
-
17
- - getGuitars: Get all guitars from the database
18
- - recommendGuitar: Recommend a guitar to the user
19
- `
20
-
21
- export const genAIResponse = createServerFn({ method: 'POST', response: 'raw' })
22
- .validator(
23
- (d: {
24
- messages: Array<Message>
25
- systemPrompt?: { value: string; enabled: boolean }
26
- }) => d,
27
- )
28
- .handler(async ({ data }) => {
29
- const messages = data.messages
30
- .filter(
31
- (msg) =>
32
- msg.content.trim() !== '' &&
33
- !msg.content.startsWith('Sorry, I encountered an error'),
34
- )
35
- .map((msg) => ({
36
- role: msg.role,
37
- content: msg.content.trim(),
38
- }))
39
-
40
- const tools = await getTools()
41
-
42
- try {
43
- const result = streamText({
44
- model: anthropic('claude-3-5-sonnet-latest'),
45
- messages,
46
- system: SYSTEM_PROMPT,
47
- maxSteps: 10,
48
- tools,
49
- })
50
-
51
- return result.toDataStreamResponse()
52
- } catch (error) {
53
- console.error('Error in genAIResponse:', error)
54
- if (error instanceof Error && error.message.includes('rate limit')) {
55
- return { error: 'Rate limit exceeded. Please try again in a moment.' }
56
- }
57
- return {
58
- error:
59
- error instanceof Error ? error.message : 'Failed to get AI response',
60
- }
61
- }
62
- })
@@ -1,31 +0,0 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
3
- import { getWebRequest } from "vinxi/http";
4
-
5
- import guitars from "@/data/example-guitars";
6
-
7
- export const server = new McpServer({
8
- name: "guitar-server",
9
- version: "1.0.0",
10
- });
11
- export const transports: { [sessionId: string]: SSEServerTransport } = {};
12
-
13
- server.tool("getGuitars", {}, async ({}) => {
14
- const port = new URL(getWebRequest().url).port;
15
- return {
16
- content: [
17
- {
18
- type: "text",
19
- text: JSON.stringify(
20
- guitars.map((guitar) => ({
21
- id: guitar.id,
22
- name: guitar.name,
23
- description: guitar.description,
24
- price: guitar.price,
25
- image: `http://localhost:${port}${guitar.image}`,
26
- }))
27
- ),
28
- },
29
- ],
30
- };
31
- });
@@ -1,47 +0,0 @@
1
- import { experimental_createMCPClient, tool } from 'ai'
2
- //import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
3
- import { z } from 'zod'
4
- import guitars from '../data/example-guitars'
5
-
6
- // Example of using an SSE MCP server
7
- // const mcpClient = await experimental_createMCPClient({
8
- // transport: {
9
- // type: "sse",
10
- // url: "http://localhost:8081/sse",
11
- // },
12
- // name: "Demo Service",
13
- // });
14
-
15
- // Example of using an STDIO MCP server
16
- // const mcpClient = await experimental_createMCPClient({
17
- // transport: new StdioClientTransport({
18
- // command: "node",
19
- // args: [
20
- // "stdio-server.js",
21
- // ],
22
- // }),
23
- // });
24
-
25
- const getGuitars = tool({
26
- description: 'Get all products from the database',
27
- parameters: z.object({}),
28
- execute: async () => {
29
- return Promise.resolve(guitars)
30
- },
31
- })
32
-
33
- const recommendGuitar = tool({
34
- description: 'Use this tool to recommend a guitar to the user',
35
- parameters: z.object({
36
- id: z.string().describe('The id of the guitar to recommend'),
37
- }),
38
- })
39
-
40
- export default async function getTools() {
41
- // const mcpTools = await mcpCient.tools()
42
- return {
43
- // ...mcpTools,
44
- getGuitars,
45
- recommendGuitar,
46
- }
47
- }
@@ -1,19 +0,0 @@
1
- {
2
- "name": "TanStack Chat",
3
- "description": "A chat example that uses TanStack Start and TanStack Store. Features chat with Anthropic Sonnet, chat history and custom prompts.",
4
- "phase": "example",
5
- "templates": ["file-router"],
6
- "link": "",
7
- "routes": [
8
- {
9
- "url": "/example/chat",
10
- "name": "Chat"
11
- },
12
- {
13
- "url": "/example/guitars",
14
- "name": "Guitar Demo"
15
- }
16
- ],
17
- "dependsOn": ["start", "store"],
18
- "variables": []
19
- }
@@ -1,16 +0,0 @@
1
- {
2
- "dependencies": {
3
- "@ai-sdk/anthropic": "^1.1.17",
4
- "@ai-sdk/react": "^1.1.23",
5
- "@modelcontextprotocol/sdk": "^1.8.0",
6
- "ai": "^4.1.65",
7
- "highlight.js": "^11.11.1",
8
- "react-markdown": "^9.0.1",
9
- "rehype-highlight": "^7.0.0",
10
- "rehype-raw": "^7.0.0",
11
- "rehype-sanitize": "^6.0.0",
12
- "remark-gfm": "^4.0.1",
13
- "lucide-react": "^0.475.0",
14
- "zod": "^3.24.2"
15
- }
16
- }
@@ -1,5 +0,0 @@
1
- {
2
- "dependencies": {
3
- "@tanstack/router-plugin": "^1.114.3"
4
- }
5
- }
@@ -1,55 +0,0 @@
1
- import { StrictMode } from "react";
2
- import ReactDOM from "react-dom/client";
3
- import { RouterProvider, createRouter } from "@tanstack/react-router";
4
- <% for(const integration of integrations.filter(i => i.type === 'root-provider')) { %>
5
- import * as <%= integration.name %> from "./<%= integration.path %>";
6
- <% } %>
7
-
8
- // Import the generated route tree
9
- import { routeTree } from "./routeTree.gen";
10
-
11
- import "./styles.css";
12
- import reportWebVitals from "./reportWebVitals.<%= js %>";
13
-
14
- // Create a new router instance
15
- const router = createRouter({
16
- routeTree,
17
- context: {
18
- <% for(const integration of integrations.filter(i => i.type === 'root-provider')) { %>
19
- ...<%= integration.name %>.getContext(),
20
- <% } %>
21
- },
22
- defaultPreload: "intent",
23
- scrollRestoration: true,
24
- defaultStructuralSharing: true,
25
- defaultPreloadStaleTime: 0,
26
- });
27
-
28
- // Register the router instance for type safety
29
- declare module "@tanstack/react-router" {
30
- interface Register {
31
- router: typeof router;
32
- }
33
- }
34
-
35
- // Render the app
36
- const rootElement = document.getElementById("app");
37
- if (rootElement && !rootElement.innerHTML) {
38
- const root = ReactDOM.createRoot(rootElement);
39
- root.render(
40
- <StrictMode>
41
- <% for(const integration of integrations.filter(i => i.type === 'root-provider')) { %>
42
- <<%= integration.name %>.Provider>
43
- <% } %>
44
- <RouterProvider router={router} />
45
- <% for(const integration of integrations.filter(i => i.type === 'root-provider').reverse()) { %>
46
- </<%= integration.name %>.Provider>
47
- <% } %>
48
- </StrictMode>
49
- );
50
- }
51
-
52
- // If you want to start measuring performance in your app, pass a function
53
- // to log results (for example: reportWebVitals(console.log))
54
- // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
55
- reportWebVitals();
@@ -1,82 +0,0 @@
1
- import { Outlet<% if (addOnEnabled.start) { %>
2
- , HeadContent, Scripts<% } %>, <% if (addOnEnabled["tanstack-query"]) { %>createRootRouteWithContext<% } else { %>createRootRoute<% } %> } from '@tanstack/react-router'
3
- import { TanStackRouterDevtools } from '@tanstack/react-router-devtools'
4
- <% if (addOns.length) { %>
5
- import Header from '../components/Header'
6
- <% } %><% for(const integration of integrations.filter(i => i.type === 'layout' || i.type === 'provider')) { %>
7
- import <%= integration.name %> from "../<%= integration.path %>";
8
- <% } %>
9
- <% if (addOnEnabled.start) { %>
10
- import appCss from '../styles.css?url'
11
- <% } %><% if (addOnEnabled["tanstack-query"]) { %>
12
- import type { QueryClient } from '@tanstack/react-query'
13
- <% if (addOnEnabled.tRPC) { %>
14
- import type { TRPCRouter } from '@/integrations/trpc/router'
15
- import type { TRPCOptionsProxy } from '@trpc/tanstack-react-query'
16
- <% } %>
17
-
18
- interface MyRouterContext {
19
- queryClient: QueryClient
20
- <% if (addOnEnabled.tRPC) { %>
21
- trpc: TRPCOptionsProxy<TRPCRouter>
22
- <% } %>
23
- }<% } %>
24
-
25
- export const Route = <% if (addOnEnabled["tanstack-query"]) { %>createRootRouteWithContext<MyRouterContext>()<% } else { %>createRootRoute<% } %>({
26
- <% if (addOnEnabled.start) { %>
27
- head: () => ({
28
- meta: [
29
- {
30
- charSet: 'utf-8',
31
- },
32
- {
33
- name: 'viewport',
34
- content: 'width=device-width, initial-scale=1',
35
- },
36
- {
37
- title: 'TanStack Start Starter',
38
- },
39
- ],
40
- links: [
41
- {
42
- rel: 'stylesheet',
43
- href: appCss,
44
- },
45
- ],
46
- }),
47
- <% } %>
48
- component: () => (
49
- <% if (addOnEnabled.start) { %><RootDocument><% } else { %><><% } %>
50
- <% for(const integration of integrations.filter(i => i.type === 'provider')) { %>
51
- <<%= integration.name %>>
52
- <% } %>
53
- <% if (addOns.length) { %>
54
- <Header />
55
- <% } %>
56
- <Outlet />
57
- <TanStackRouterDevtools />
58
- <% for(const integration of integrations.filter(i => i.type === 'layout')) { %>
59
- <<%= integration.name %> />
60
- <% } %>
61
- <% for(const integration of integrations.filter(i => i.type === 'provider').reverse()) { %>
62
- </<%= integration.name %>>
63
- <% } %>
64
- <% if (addOnEnabled.start) { %></RootDocument><% } else { %></><% } %>
65
- ),
66
- })
67
-
68
- <% if (addOnEnabled.start) { %>
69
- function RootDocument({ children }: { children: React.ReactNode }) {
70
- return (
71
- <html lang="en">
72
- <head>
73
- <HeadContent />
74
- </head>
75
- <body>
76
- {children}
77
- <Scripts />
78
- </body>
79
- </html>
80
- )
81
- }
82
- <% } %>