@tanstack/create 0.49.2 → 0.59.4

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 (294) hide show
  1. package/CHANGELOG.md +603 -0
  2. package/dist/add-ons.js +42 -2
  3. package/dist/add-to-app.js +36 -7
  4. package/dist/custom-add-ons/add-on.js +2 -26
  5. package/dist/custom-add-ons/starter.js +1 -2
  6. package/dist/file-helpers.js +11 -10
  7. package/dist/frameworks/react/add-ons/ai/assets/src/data/demo-guitars.ts +93 -0
  8. package/dist/frameworks/react/add-ons/ai/assets/src/hooks/demo-useAudioRecorder.ts +85 -0
  9. package/dist/frameworks/react/add-ons/ai/assets/src/hooks/demo-useTTS.ts +78 -0
  10. package/dist/frameworks/react/add-ons/ai/assets/src/lib/demo-ai-hook.ts +22 -0
  11. package/dist/frameworks/react/add-ons/ai/assets/src/lib/demo-guitar-tools.ts +40 -0
  12. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.chat.ts +99 -0
  13. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.image.ts +72 -0
  14. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.structured.ts +136 -0
  15. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.transcription.ts +89 -0
  16. package/dist/frameworks/react/add-ons/ai/assets/src/routes/demo/api.ai.tts.ts +81 -0
  17. package/dist/frameworks/react/add-ons/ai/info.json +1 -1
  18. package/dist/frameworks/react/add-ons/apollo-client/info.json +1 -1
  19. package/dist/frameworks/react/add-ons/better-auth/assets/src/lib/auth-client.ts +3 -0
  20. package/dist/frameworks/react/add-ons/better-auth/assets/src/lib/auth.ts +9 -0
  21. package/dist/frameworks/react/add-ons/better-auth/assets/src/routes/api/auth/$.ts +11 -0
  22. package/dist/frameworks/react/add-ons/better-auth/info.json +0 -2
  23. package/dist/frameworks/react/add-ons/clerk/info.json +0 -1
  24. package/dist/frameworks/react/add-ons/convex/assets/convex/schema.ts +14 -0
  25. package/dist/frameworks/react/add-ons/convex/assets/convex/todos.ts +43 -0
  26. package/dist/frameworks/react/add-ons/db/assets/src/db-collections/index.ts +20 -0
  27. package/dist/frameworks/react/add-ons/db/assets/src/hooks/demo.useChat.ts +62 -0
  28. package/dist/frameworks/react/add-ons/db/assets/src/routes/demo/db-chat-api.ts +83 -0
  29. package/dist/frameworks/react/add-ons/db/info.json +1 -1
  30. package/dist/frameworks/react/add-ons/drizzle/info.json +1 -1
  31. package/dist/frameworks/react/add-ons/drizzle/package.json.ejs +4 -0
  32. package/dist/frameworks/react/add-ons/form/assets/src/hooks/demo.form-context.ts +4 -0
  33. package/dist/frameworks/react/add-ons/form/assets/src/hooks/demo.form.ts +22 -0
  34. package/dist/frameworks/react/add-ons/mcp/assets/src/mcp-todos.ts +51 -0
  35. package/dist/frameworks/react/add-ons/mcp/assets/src/routes/demo/api.mcp-todos.ts +37 -0
  36. package/dist/frameworks/react/add-ons/mcp/assets/src/routes/mcp.ts +53 -0
  37. package/dist/frameworks/react/add-ons/mcp/assets/src/utils/mcp-handler.ts +61 -0
  38. package/dist/frameworks/react/add-ons/mcp/info.json +1 -2
  39. package/dist/frameworks/react/add-ons/neon/assets/neon-vite-plugin.ts +10 -0
  40. package/dist/frameworks/react/add-ons/neon/assets/src/db.ts +13 -0
  41. package/dist/frameworks/react/add-ons/neon/info.json +1 -2
  42. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/client.ts +29 -0
  43. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/router/index.ts +6 -0
  44. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/router/todos.ts +20 -0
  45. package/dist/frameworks/react/add-ons/oRPC/assets/src/orpc/schema.ts +6 -0
  46. package/dist/frameworks/react/add-ons/oRPC/assets/src/polyfill.ts +21 -0
  47. package/dist/frameworks/react/add-ons/oRPC/assets/src/routes/api.$.ts +77 -0
  48. package/dist/frameworks/react/add-ons/oRPC/assets/src/routes/api.rpc.$.ts +29 -0
  49. package/dist/frameworks/react/add-ons/oRPC/info.json +1 -1
  50. package/dist/frameworks/react/add-ons/paraglide/info.json +1 -1
  51. package/dist/frameworks/react/add-ons/prisma/info.json +1 -1
  52. package/dist/frameworks/react/add-ons/prisma/package.json.ejs +4 -0
  53. package/dist/frameworks/react/add-ons/sentry/info.json +1 -2
  54. package/dist/frameworks/react/add-ons/shadcn/assets/src/lib/utils.ts +6 -0
  55. package/dist/frameworks/react/add-ons/store/assets/src/lib/demo-store.ts +13 -0
  56. package/dist/frameworks/react/add-ons/storybook/assets/_dot_storybook/main.ts +17 -0
  57. package/dist/frameworks/react/add-ons/storybook/assets/_dot_storybook/preview.ts +15 -0
  58. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/button.stories.ts +67 -0
  59. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/index.ts +14 -0
  60. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/input.stories.ts +43 -0
  61. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/radio-group.stories.ts +53 -0
  62. package/dist/frameworks/react/add-ons/storybook/assets/src/components/storybook/slider.stories.ts +55 -0
  63. package/dist/frameworks/react/add-ons/strapi/assets/src/lib/strapiClient.ts +7 -0
  64. package/dist/frameworks/react/add-ons/t3env/assets/src/env.ts +39 -0
  65. package/dist/frameworks/react/add-ons/tRPC/assets/src/integrations/trpc/init.ts +9 -0
  66. package/dist/frameworks/react/add-ons/tRPC/assets/src/integrations/trpc/react.ts +4 -0
  67. package/dist/frameworks/react/add-ons/tRPC/assets/src/integrations/trpc/router.ts +27 -0
  68. package/dist/frameworks/react/add-ons/tRPC/info.json +1 -1
  69. package/dist/frameworks/react/add-ons/table/assets/src/data/demo-table-data.ts +50 -0
  70. package/dist/frameworks/react/add-ons/tanstack-query/assets/src/integrations/tanstack-query/root-provider.tsx.ejs +1 -29
  71. package/dist/frameworks/react/add-ons/workos/info.json +0 -1
  72. package/dist/frameworks/react/examples/events/assets/content-collections.ts +56 -0
  73. package/dist/frameworks/react/examples/events/assets/src/lib/conference-ai-hook.ts +26 -0
  74. package/dist/frameworks/react/examples/events/assets/src/lib/conference-tools.ts +210 -0
  75. package/dist/frameworks/react/examples/events/assets/src/lib/utils.ts +6 -0
  76. package/dist/frameworks/react/examples/events/assets/src/routes/api.remy-chat.ts +121 -0
  77. package/dist/frameworks/react/examples/resume/assets/content-collections.ts +36 -0
  78. package/dist/frameworks/react/examples/resume/assets/src/lib/resume-ai-hook.ts +21 -0
  79. package/dist/frameworks/react/examples/resume/assets/src/lib/resume-tools.ts +165 -0
  80. package/dist/frameworks/react/examples/resume/assets/src/lib/utils.ts +6 -0
  81. package/dist/frameworks/react/examples/resume/assets/src/routes/api.resume-chat.ts +110 -0
  82. package/dist/frameworks/react/hosts/cloudflare/info.json +0 -1
  83. package/dist/frameworks/react/hosts/netlify/info.json +0 -1
  84. package/dist/frameworks/react/hosts/nitro/info.json +0 -1
  85. package/dist/frameworks/react/hosts/railway/info.json +0 -1
  86. package/dist/frameworks/react/index.js +1 -6
  87. package/dist/frameworks/react/project/base/README.md.ejs +86 -436
  88. package/dist/frameworks/react/project/base/_dot_gitignore +4 -0
  89. package/dist/frameworks/react/project/base/package.json +8 -5
  90. package/dist/frameworks/react/project/base/src/components/Header.tsx.ejs +2 -32
  91. package/dist/frameworks/react/project/base/src/routes/__root.tsx.ejs +4 -44
  92. package/dist/frameworks/react/project/base/src/routes/index.tsx.ejs +99 -61
  93. package/dist/frameworks/react/project/base/src/styles.css.ejs +3 -3
  94. package/dist/frameworks/react/project/base/tsconfig.json.ejs +1 -1
  95. package/dist/frameworks/react/project/base/vite.config.ts.ejs +33 -27
  96. package/dist/frameworks/react/project/packages.json +2 -2
  97. package/dist/frameworks/solid/add-ons/better-auth/assets/src/lib/auth-client.ts +3 -0
  98. package/dist/frameworks/solid/add-ons/better-auth/assets/src/lib/auth.ts +9 -0
  99. package/dist/frameworks/solid/add-ons/better-auth/assets/src/routes/api/auth/$.ts +11 -0
  100. package/dist/frameworks/solid/add-ons/better-auth/info.json +1 -1
  101. package/dist/frameworks/solid/add-ons/convex/assets/convex/schema.ts +14 -0
  102. package/dist/frameworks/solid/add-ons/convex/assets/convex/todos.ts +43 -0
  103. package/dist/frameworks/solid/add-ons/solid-ui/assets/src/lib/utils.ts +6 -0
  104. package/dist/frameworks/solid/add-ons/store/assets/src/lib/demo-store.ts +13 -0
  105. package/dist/frameworks/solid/add-ons/strapi/assets/src/lib/strapiClient.ts +7 -0
  106. package/dist/frameworks/solid/add-ons/t3env/assets/src/env.ts +39 -0
  107. package/dist/frameworks/solid/examples/tanchat/assets/ai-streaming-server/src/index.ts +102 -0
  108. package/dist/frameworks/solid/examples/tanchat/assets/src/lib/demo-store.ts +13 -0
  109. package/dist/frameworks/solid/examples/tanchat/assets/src/store/demo.hooks.ts +17 -0
  110. package/dist/frameworks/solid/examples/tanchat/assets/src/store/demo.store.ts +133 -0
  111. package/dist/frameworks/solid/hosts/cloudflare/info.json +0 -1
  112. package/dist/frameworks/solid/hosts/netlify/info.json +0 -1
  113. package/dist/frameworks/solid/hosts/nitro/info.json +0 -1
  114. package/dist/frameworks/solid/hosts/railway/info.json +0 -1
  115. package/dist/frameworks/solid/index.js +1 -6
  116. package/dist/frameworks/solid/project/base/README.md.ejs +43 -117
  117. package/dist/frameworks/solid/project/base/_dot_gitignore +4 -0
  118. package/dist/frameworks/solid/project/base/package.json +8 -3
  119. package/dist/frameworks/solid/project/base/src/components/Header.tsx.ejs +2 -25
  120. package/dist/frameworks/solid/project/base/src/routes/__root.tsx.ejs +3 -30
  121. package/dist/frameworks/solid/project/base/src/routes/index.tsx.ejs +97 -35
  122. package/dist/frameworks/solid/project/base/tsconfig.json.ejs +1 -1
  123. package/dist/frameworks/solid/project/base/vite.config.ts.ejs +15 -20
  124. package/dist/frameworks/solid/project/packages.json +2 -2
  125. package/dist/frameworks.js +0 -1
  126. package/dist/package-json.js +6 -10
  127. package/dist/template-file.js +21 -7
  128. package/dist/types/custom-add-ons/add-on.d.ts +1 -1
  129. package/dist/types/file-helpers.d.ts +0 -1
  130. package/dist/types/types.d.ts +12 -12
  131. package/dist/types.js +1 -2
  132. package/package.json +2 -2
  133. package/src/add-ons.ts +54 -2
  134. package/src/add-to-app.ts +42 -7
  135. package/src/custom-add-ons/add-on.ts +2 -33
  136. package/src/custom-add-ons/starter.ts +1 -2
  137. package/src/file-helpers.ts +11 -10
  138. package/src/frameworks/react/add-ons/ai/info.json +1 -1
  139. package/src/frameworks/react/add-ons/apollo-client/info.json +1 -1
  140. package/src/frameworks/react/add-ons/better-auth/info.json +0 -2
  141. package/src/frameworks/react/add-ons/clerk/info.json +0 -1
  142. package/src/frameworks/react/add-ons/db/info.json +1 -1
  143. package/src/frameworks/react/add-ons/drizzle/info.json +1 -1
  144. package/src/frameworks/react/add-ons/drizzle/package.json.ejs +4 -0
  145. package/src/frameworks/react/add-ons/mcp/info.json +1 -2
  146. package/src/frameworks/react/add-ons/neon/assets/neon-vite-plugin.ts +1 -1
  147. package/src/frameworks/react/add-ons/neon/info.json +1 -2
  148. package/src/frameworks/react/add-ons/oRPC/info.json +1 -1
  149. package/src/frameworks/react/add-ons/paraglide/info.json +1 -1
  150. package/src/frameworks/react/add-ons/prisma/info.json +1 -1
  151. package/src/frameworks/react/add-ons/prisma/package.json.ejs +4 -0
  152. package/src/frameworks/react/add-ons/sentry/info.json +1 -2
  153. package/src/frameworks/react/add-ons/tRPC/info.json +1 -1
  154. package/src/frameworks/react/add-ons/tanstack-query/assets/src/integrations/tanstack-query/root-provider.tsx.ejs +1 -29
  155. package/src/frameworks/react/add-ons/workos/info.json +0 -1
  156. package/src/frameworks/react/hosts/cloudflare/info.json +0 -1
  157. package/src/frameworks/react/hosts/netlify/info.json +0 -1
  158. package/src/frameworks/react/hosts/nitro/info.json +0 -1
  159. package/src/frameworks/react/hosts/railway/info.json +0 -1
  160. package/src/frameworks/react/index.ts +1 -6
  161. package/src/frameworks/react/project/base/README.md.ejs +86 -436
  162. package/src/frameworks/react/project/base/_dot_gitignore +4 -0
  163. package/src/frameworks/react/project/base/package.json +8 -5
  164. package/src/frameworks/react/project/base/src/components/Header.tsx.ejs +2 -32
  165. package/src/frameworks/react/project/base/src/routes/__root.tsx.ejs +4 -44
  166. package/src/frameworks/react/project/base/src/routes/index.tsx.ejs +99 -61
  167. package/src/frameworks/react/project/base/src/styles.css.ejs +3 -3
  168. package/src/frameworks/react/project/base/tsconfig.json.ejs +1 -1
  169. package/src/frameworks/react/project/base/vite.config.ts.ejs +33 -27
  170. package/src/frameworks/react/project/packages.json +2 -2
  171. package/src/frameworks/solid/add-ons/better-auth/info.json +1 -1
  172. package/src/frameworks/solid/hosts/cloudflare/info.json +0 -1
  173. package/src/frameworks/solid/hosts/netlify/info.json +0 -1
  174. package/src/frameworks/solid/hosts/nitro/info.json +0 -1
  175. package/src/frameworks/solid/hosts/railway/info.json +0 -1
  176. package/src/frameworks/solid/index.ts +1 -6
  177. package/src/frameworks/solid/project/base/README.md.ejs +43 -117
  178. package/src/frameworks/solid/project/base/_dot_gitignore +4 -0
  179. package/src/frameworks/solid/project/base/package.json +8 -3
  180. package/src/frameworks/solid/project/base/src/components/Header.tsx.ejs +2 -25
  181. package/src/frameworks/solid/project/base/src/routes/__root.tsx.ejs +3 -30
  182. package/src/frameworks/solid/project/base/src/routes/index.tsx.ejs +97 -35
  183. package/src/frameworks/solid/project/base/tsconfig.json.ejs +1 -1
  184. package/src/frameworks/solid/project/base/vite.config.ts.ejs +15 -20
  185. package/src/frameworks/solid/project/packages.json +2 -2
  186. package/src/frameworks.ts +0 -1
  187. package/src/package-json.ts +6 -10
  188. package/src/template-file.ts +27 -8
  189. package/src/types.ts +1 -2
  190. package/tests/add-to-app.test.ts +37 -0
  191. package/tests/copy-assets.test.ts +53 -0
  192. package/tests/file-helper.test.ts +23 -2
  193. package/tests/package-json.test.ts +32 -0
  194. package/tests/template-file.test.ts +28 -0
  195. package/dist/frameworks/react/add-ons/module-federation/assets/module-federation.config.js.ejs +0 -31
  196. package/dist/frameworks/react/add-ons/module-federation/assets/src/demo-mf-component.tsx +0 -3
  197. package/dist/frameworks/react/add-ons/module-federation/assets/src/demo-mf-self-contained.tsx +0 -11
  198. package/dist/frameworks/react/add-ons/module-federation/info.json +0 -11
  199. package/dist/frameworks/react/add-ons/module-federation/package.json +0 -5
  200. package/dist/frameworks/react/add-ons/module-federation/small-logo.svg +0 -87
  201. package/dist/frameworks/react/add-ons/start/assets/_dot_gitignore.append +0 -3
  202. package/dist/frameworks/react/add-ons/start/assets/src/router.tsx.ejs +0 -77
  203. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/api.tq-todos.ts.ejs +0 -35
  204. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.api-request.tsx.ejs +0 -68
  205. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.css.ejs +0 -43
  206. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.server-funcs.tsx.ejs +0 -183
  207. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.data-only.tsx.ejs +0 -55
  208. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.full-ssr.tsx.ejs +0 -55
  209. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.index.tsx.ejs +0 -62
  210. package/dist/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.spa-mode.tsx.ejs +0 -62
  211. package/dist/frameworks/react/add-ons/start/assets/src/routes/index.tsx.ejs +0 -142
  212. package/dist/frameworks/react/add-ons/start/assets/src/server.ts.ejs +0 -9
  213. package/dist/frameworks/react/add-ons/start/assets/vite.config.ts.ejs +0 -40
  214. package/dist/frameworks/react/add-ons/start/info.json +0 -61
  215. package/dist/frameworks/react/add-ons/start/package.json +0 -12
  216. package/dist/frameworks/react/add-ons/start/small-logo.svg +0 -1
  217. package/dist/frameworks/react/project/base/index.html.ejs +0 -20
  218. package/dist/frameworks/react/project/base/src/App.css.ejs +0 -38
  219. package/dist/frameworks/react/project/base/src/App.tsx.ejs +0 -63
  220. package/dist/frameworks/react/project/base/src/components/Header.css.ejs +0 -18
  221. package/dist/frameworks/react/project/base/src/logo.svg +0 -12
  222. package/dist/frameworks/react/project/base/src/main.tsx.ejs +0 -166
  223. package/dist/frameworks/react/project/base/src/reportWebVitals.ts.ejs +0 -28
  224. package/dist/frameworks/solid/add-ons/module-federation/assets/module-federation.config.js.ejs +0 -27
  225. package/dist/frameworks/solid/add-ons/module-federation/assets/src/demo-mf-component.tsx +0 -3
  226. package/dist/frameworks/solid/add-ons/module-federation/assets/src/demo-mf-self-contained.tsx +0 -9
  227. package/dist/frameworks/solid/add-ons/module-federation/info.json +0 -10
  228. package/dist/frameworks/solid/add-ons/module-federation/package.json +0 -5
  229. package/dist/frameworks/solid/add-ons/module-federation/small-logo.svg +0 -87
  230. package/dist/frameworks/solid/add-ons/start/assets/public/tanstack-circle-logo.png +0 -0
  231. package/dist/frameworks/solid/add-ons/start/assets/public/tanstack-word-logo-white.svg +0 -1
  232. package/dist/frameworks/solid/add-ons/start/assets/src/router.tsx.ejs +0 -30
  233. package/dist/frameworks/solid/add-ons/start/assets/src/routes/demo.start.server-funcs.tsx +0 -49
  234. package/dist/frameworks/solid/add-ons/start/assets/src/routes/index.tsx.ejs +0 -138
  235. package/dist/frameworks/solid/add-ons/start/assets/vite.config.ts.ejs +0 -22
  236. package/dist/frameworks/solid/add-ons/start/info.json +0 -18
  237. package/dist/frameworks/solid/add-ons/start/package.json +0 -15
  238. package/dist/frameworks/solid/add-ons/start/small-logo.svg +0 -1
  239. package/dist/frameworks/solid/project/base/index.html.ejs +0 -20
  240. package/dist/frameworks/solid/project/base/src/App.css.ejs +0 -38
  241. package/dist/frameworks/solid/project/base/src/App.tsx.ejs +0 -34
  242. package/dist/frameworks/solid/project/base/src/logo.svg +0 -120
  243. package/dist/frameworks/solid/project/base/src/main.tsx.ejs +0 -126
  244. package/src/frameworks/react/add-ons/module-federation/assets/module-federation.config.js.ejs +0 -31
  245. package/src/frameworks/react/add-ons/module-federation/assets/src/demo-mf-component.tsx +0 -3
  246. package/src/frameworks/react/add-ons/module-federation/assets/src/demo-mf-self-contained.tsx +0 -11
  247. package/src/frameworks/react/add-ons/module-federation/info.json +0 -11
  248. package/src/frameworks/react/add-ons/module-federation/package.json +0 -5
  249. package/src/frameworks/react/add-ons/module-federation/small-logo.svg +0 -87
  250. package/src/frameworks/react/add-ons/start/assets/_dot_gitignore.append +0 -3
  251. package/src/frameworks/react/add-ons/start/assets/src/data/demo.punk-songs.ts +0 -13
  252. package/src/frameworks/react/add-ons/start/assets/src/router.tsx.ejs +0 -77
  253. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/api.names.ts +0 -10
  254. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/api.tq-todos.ts.ejs +0 -35
  255. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.api-request.tsx.ejs +0 -68
  256. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.css.ejs +0 -43
  257. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.server-funcs.tsx.ejs +0 -183
  258. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.data-only.tsx.ejs +0 -55
  259. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.full-ssr.tsx.ejs +0 -55
  260. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.index.tsx.ejs +0 -62
  261. package/src/frameworks/react/add-ons/start/assets/src/routes/demo/start.ssr.spa-mode.tsx.ejs +0 -62
  262. package/src/frameworks/react/add-ons/start/assets/src/routes/index.tsx.ejs +0 -142
  263. package/src/frameworks/react/add-ons/start/assets/src/server.ts.ejs +0 -9
  264. package/src/frameworks/react/add-ons/start/assets/vite.config.ts.ejs +0 -40
  265. package/src/frameworks/react/add-ons/start/info.json +0 -61
  266. package/src/frameworks/react/add-ons/start/package.json +0 -12
  267. package/src/frameworks/react/add-ons/start/small-logo.svg +0 -1
  268. package/src/frameworks/react/project/base/index.html.ejs +0 -20
  269. package/src/frameworks/react/project/base/src/App.css.ejs +0 -38
  270. package/src/frameworks/react/project/base/src/App.tsx.ejs +0 -63
  271. package/src/frameworks/react/project/base/src/components/Header.css.ejs +0 -18
  272. package/src/frameworks/react/project/base/src/logo.svg +0 -12
  273. package/src/frameworks/react/project/base/src/main.tsx.ejs +0 -166
  274. package/src/frameworks/react/project/base/src/reportWebVitals.ts.ejs +0 -28
  275. package/src/frameworks/solid/add-ons/module-federation/assets/module-federation.config.js.ejs +0 -27
  276. package/src/frameworks/solid/add-ons/module-federation/assets/src/demo-mf-component.tsx +0 -3
  277. package/src/frameworks/solid/add-ons/module-federation/assets/src/demo-mf-self-contained.tsx +0 -9
  278. package/src/frameworks/solid/add-ons/module-federation/info.json +0 -10
  279. package/src/frameworks/solid/add-ons/module-federation/package.json +0 -5
  280. package/src/frameworks/solid/add-ons/module-federation/small-logo.svg +0 -87
  281. package/src/frameworks/solid/add-ons/start/assets/public/tanstack-circle-logo.png +0 -0
  282. package/src/frameworks/solid/add-ons/start/assets/public/tanstack-word-logo-white.svg +0 -1
  283. package/src/frameworks/solid/add-ons/start/assets/src/router.tsx.ejs +0 -30
  284. package/src/frameworks/solid/add-ons/start/assets/src/routes/demo.start.server-funcs.tsx +0 -49
  285. package/src/frameworks/solid/add-ons/start/assets/src/routes/index.tsx.ejs +0 -138
  286. package/src/frameworks/solid/add-ons/start/assets/vite.config.ts.ejs +0 -22
  287. package/src/frameworks/solid/add-ons/start/info.json +0 -18
  288. package/src/frameworks/solid/add-ons/start/package.json +0 -15
  289. package/src/frameworks/solid/add-ons/start/small-logo.svg +0 -1
  290. package/src/frameworks/solid/project/base/index.html.ejs +0 -20
  291. package/src/frameworks/solid/project/base/src/App.css.ejs +0 -38
  292. package/src/frameworks/solid/project/base/src/App.tsx.ejs +0 -34
  293. package/src/frameworks/solid/project/base/src/logo.svg +0 -120
  294. package/src/frameworks/solid/project/base/src/main.tsx.ejs +0 -126
@@ -1,8 +1,7 @@
1
1
  <% if (addOns.length === 0 && integrations.length === 0 && routes.length === 0) { ignoreFile() } %>import { Link } from '@tanstack/react-router'
2
2
  <% for(const integration of integrations.filter(i => i.type === 'header-user')) { %>
3
3
  import <%= integration.jsName %> from "<%= relativePath(integration.path) %>";
4
- <% } %><% if (!tailwind) { %>
5
- import './Header.css'<% } %><% if (tailwind) {
4
+ <% } %><%
6
5
  const icons = new Set([
7
6
  "Menu",
8
7
  "X",
@@ -26,10 +25,9 @@ import { useState } from 'react';
26
25
  import {
27
26
  <%= Array.from(icons).sort().join(", ") %>
28
27
  } from "lucide-react";
29
- <% } %>
30
28
 
31
29
  export default function Header() {
32
- <% if (tailwind) {
30
+ <%
33
31
  const menusWithChildren = addOns.filter(a => a.routes?.some(r => r.children));
34
32
  const userHeaders = integrations.filter(i => i.type === 'header-user');
35
33
  %>
@@ -155,32 +153,4 @@ const userHeaders = integrations.filter(i => i.type === 'header-user');
155
153
  </aside>
156
154
  </>
157
155
  );
158
- <% } else { %>
159
- return (
160
- <% if (tailwind) { %>
161
- <header className="p-2 flex gap-2 bg-white text-black justify-between">
162
- <nav className="flex flex-row">
163
- <div className="px-2 font-bold">
164
- <% } else { %>
165
- <header className="header">
166
- <nav className="nav">
167
- <div className="nav-item">
168
- <% } %>
169
- <Link to="/">Home</Link>
170
- </div>
171
- <% for(const addOn of addOns) {
172
- for(const route of (addOn?.routes||[])?.filter(r => r.url && r.name)) { %>
173
- <div className="px-2 font-bold"><Link to="<%= route.url %>"><%= route.name %></Link></div>
174
- <% } } %>
175
- </nav>
176
- <% if (integrations.filter(i => i.type === 'header-user').length > 0) { %>
177
- <div>
178
- <% for(const integration of integrations.filter(i => i.type === 'header-user')) { %>
179
- <<%= integration.jsName %> />
180
- <% } %>
181
- </div>
182
- <% } %>
183
- </header>
184
- )
185
- <% } %>
186
156
  }
@@ -1,6 +1,6 @@
1
1
  <% let hasContext = addOnEnabled["apollo-client"] || addOnEnabled["tanstack-query"]; %>
2
- <% if (!fileRouter) { ignoreFile() } %>import { <% if (addOnEnabled.start) { %>
3
- HeadContent<% } else { %>Outlet<% } %><% if (addOnEnabled.start) { %>, Scripts<% } %>, <% if (hasContext) { %>createRootRouteWithContext<% } else { %>createRootRoute<% } %><% if (addOnEnabled.paraglide) { %>, redirect<% } %> } from '@tanstack/react-router'
2
+ import {
3
+ HeadContent, Scripts, <% if (hasContext) { %>createRootRouteWithContext<% } else { %>createRootRoute<% } %> } from '@tanstack/react-router'
4
4
  import { TanStackRouterDevtoolsPanel } from '@tanstack/react-router-devtools';
5
5
  import { TanStackDevtools } from '@tanstack/react-devtools'
6
6
  <% if (addOns.length) { %>
@@ -8,11 +8,9 @@ import Header from '../components/Header'
8
8
  <% } %><% for(const integration of integrations.filter(i => i.type === 'layout' || i.type === 'provider' || i.type === 'devtools')) { %>
9
9
  import <%= integration.jsName %> from '<%= relativePath(integration.path, true) %>'
10
10
  <% } %><% if (addOnEnabled.paraglide) { %>
11
- import { getLocale, shouldRedirect } from '@/paraglide/runtime'
11
+ import { getLocale } from '@/paraglide/runtime'
12
12
  <% } %>
13
- <% if (addOnEnabled.start) { %>
14
13
  import appCss from '../styles.css?url'
15
- <% } %>
16
14
  <% if (addOnEnabled["apollo-client"]) { %>
17
15
  import type { ApolloClientIntegration } from "@apollo/client-integration-tanstack-start";
18
16
  <% } %>
@@ -41,20 +39,9 @@ export const Route = <% if (hasContext) { %>createRootRouteWithContext<MyRouterC
41
39
  if (typeof document !== 'undefined') {
42
40
  document.documentElement.setAttribute('lang', getLocale())
43
41
  }
44
-
45
- <% if (!addOnEnabled.start) { %>// Client-side fallback redirect for SPA/file-router builds. Start apps should
46
- // prefer server-side paraglideMiddleware (see start template server.ts).
47
- if (typeof window !== 'undefined') {
48
- const decision = await shouldRedirect({ url: window.location.href })
49
-
50
- if (decision.redirectUrl) {
51
- throw redirect({ href: decision.redirectUrl.href })
52
- }
53
- }<% } %>
54
42
  },
55
43
  <% } %>
56
- <% if (addOnEnabled.start) { %>
57
- head: () => ({
44
+ head: () => ({
58
45
  meta: [
59
46
  {
60
47
  charSet: 'utf-8',
@@ -74,35 +61,9 @@ export const Route = <% if (hasContext) { %>createRootRouteWithContext<MyRouterC
74
61
  },
75
62
  ],
76
63
  }),
77
- <% } %>
78
- <% if (addOnEnabled.start) { %>
79
64
  shellComponent: RootDocument
80
- <% } else { %>
81
- component: () => (
82
- <>
83
- <% for(const integration of integrations.filter(i => i.type === 'provider')) { %><<%= integration.jsName %>>
84
- <% } %><% if (addOns.length) { %><Header />
85
- <% } %><Outlet />
86
- <TanStackDevtools
87
- config={{
88
- position: 'bottom-right',
89
- }}
90
- plugins={[
91
- {
92
- name: 'Tanstack Router',
93
- render: <TanStackRouterDevtoolsPanel />,
94
- },
95
- <% for(const integration of integrations.filter(i => i.type === 'devtools')) { %><%= integration.jsName %>,<% } %>
96
- ]}
97
- />
98
- <% for(const integration of integrations.filter(i => i.type === 'layout')) { %><<%= integration.jsName %> />
99
- <% } %><% for(const integration of integrations.filter(i => i.type === 'provider').reverse()) { %></<%= integration.jsName %>>
100
- <% } %>
101
- </>)
102
- <% } %>
103
65
  })
104
66
 
105
- <% if (addOnEnabled.start) { %>
106
67
  function RootDocument({ children }: { children: React.ReactNode }) {
107
68
  return (
108
69
  <% if (addOnEnabled.paraglide) { %><html lang={getLocale()}><% } else { %><html lang="en"><% } %>
@@ -132,4 +93,3 @@ function RootDocument({ children }: { children: React.ReactNode }) {
132
93
  </html>
133
94
  )
134
95
  }
135
- <% } %>
@@ -1,67 +1,105 @@
1
- <% if (codeRouter || addOnEnabled.start) { ignoreFile() } %>
2
1
  import { createFileRoute } from "@tanstack/react-router";
3
- import logo from "../logo.svg";<% if (!tailwind) { %>
4
- import "../App.css";
5
- <% } %>
2
+ import {
3
+ Zap, Server, Route as RouteIcon, Shield, Waves, Sparkles,
4
+ } from "lucide-react";
6
5
 
7
- export const Route = createFileRoute("/")({
8
- component: App,
9
- });
6
+ export const Route = createFileRoute("/")({ component: App });
10
7
 
11
8
  function App() {
12
- return (<% if (tailwind) { %>
13
- <div className="text-center">
14
- <header className="min-h-screen flex flex-col items-center justify-center bg-[#282c34] text-white text-[calc(10px+2vmin)]">
15
- <img
16
- src={logo}
17
- className="h-[40vmin] pointer-events-none animate-[spin_20s_linear_infinite]"
18
- alt="logo"
19
- />
20
- <p>
21
- Edit <code>src/routes/index.tsx</code> and save to reload.
22
- </p>
23
- <a
24
- className="text-[#61dafb] hover:underline"
25
- href="https://reactjs.org"
26
- target="_blank"
27
- rel="noopener noreferrer"
28
- >
29
- Learn React
30
- </a>
31
- <a
32
- className="text-[#61dafb] hover:underline"
33
- href="https://tanstack.com"
34
- target="_blank"
35
- rel="noopener noreferrer"
36
- >
37
- Learn TanStack
38
- </a>
39
- </header>
40
- </div>
41
- <% } else { %>
42
- <div className="App">
43
- <header className="App-header">
44
- <img src={logo} className="App-logo" alt="logo" />
45
- <p>
46
- Edit <code>src/routes/index.tsx</code> and save to reload.
47
- </p>
48
- <a
49
- className="App-link"
50
- href="https://reactjs.org"
51
- target="_blank"
52
- rel="noopener noreferrer"
53
- >
54
- Learn React
55
- </a>
56
- <a
57
- className="App-link"
58
- href="https://tanstack.com"
59
- target="_blank"
60
- rel="noopener noreferrer"
61
- >
62
- Learn TanStack
63
- </a>
64
- </header>
9
+ const features = [
10
+ {
11
+ icon: <Zap className="w-12 h-12 text-cyan-400" />,
12
+ title: "Powerful Server Functions",
13
+ description: "Write server-side code that seamlessly integrates with your client components. Type-safe, secure, and simple.",
14
+ },
15
+ {
16
+ icon: <Server className="w-12 h-12 text-cyan-400" />,
17
+ title: "Flexible Server Side Rendering",
18
+ description: "Full-document SSR, streaming, and progressive enhancement out of the box. Control exactly what renders where.",
19
+ },
20
+ {
21
+ icon: <RouteIcon className="w-12 h-12 text-cyan-400" />,
22
+ title: "API Routes",
23
+ description: "Build type-safe API endpoints alongside your application. No separate backend needed.",
24
+ },
25
+ {
26
+ icon: <Shield className="w-12 h-12 text-cyan-400" />,
27
+ title: "Strongly Typed Everything",
28
+ description: "End-to-end type safety from server to client. Catch errors before they reach production.",
29
+ },
30
+ {
31
+ icon: <Waves className="w-12 h-12 text-cyan-400" />,
32
+ title: "Full Streaming Support",
33
+ description: "Stream data from server to client progressively. Perfect for AI applications and real-time updates.",
34
+ },
35
+ {
36
+ icon: <Sparkles className="w-12 h-12 text-cyan-400" />,
37
+ title: "Next Generation Ready",
38
+ description: "Built from the ground up for modern web applications. Deploy anywhere JavaScript runs.",
39
+ },
40
+ ];
41
+
42
+ return (
43
+ <div className="min-h-screen bg-gradient-to-b from-slate-900 via-slate-800 to-slate-900">
44
+ <section className="relative py-20 px-6 text-center overflow-hidden">
45
+ <div className="absolute inset-0 bg-gradient-to-r from-cyan-500/10 via-blue-500/10 to-purple-500/10"></div>
46
+ <div className="relative max-w-5xl mx-auto">
47
+ <div className="flex items-center justify-center gap-6 mb-6">
48
+ <img
49
+ src="/tanstack-circle-logo.png"
50
+ alt="TanStack Logo"
51
+ className="w-24 h-24 md:w-32 md:h-32"
52
+ />
53
+ <h1 className="text-6xl md:text-7xl font-black text-white [letter-spacing:-0.08em]">
54
+ <span className="text-gray-300">TANSTACK</span>{" "}
55
+ <span className="bg-gradient-to-r from-cyan-400 to-blue-400 bg-clip-text text-transparent">
56
+ START
57
+ </span>
58
+ </h1>
59
+ </div>
60
+ <p className="text-2xl md:text-3xl text-gray-300 mb-4 font-light">
61
+ The framework for next generation AI applications
62
+ </p>
63
+ <p className="text-lg text-gray-400 max-w-3xl mx-auto mb-8">
64
+ Full-stack framework powered by TanStack Router for React and Solid.
65
+ Build modern applications with server functions, streaming, and type
66
+ safety.
67
+ </p>
68
+ <div className="flex flex-col items-center gap-4">
69
+ <a
70
+ href="https://tanstack.com/start"
71
+ target="_blank"
72
+ rel="noopener noreferrer"
73
+ className="px-8 py-3 bg-cyan-500 hover:bg-cyan-600 text-white font-semibold rounded-lg transition-colors shadow-lg shadow-cyan-500/50"
74
+ >
75
+ Documentation
76
+ </a>
77
+ <p className="text-gray-400 text-sm mt-2">
78
+ Begin your TanStack Start journey by editing{" "}
79
+ <code className="px-2 py-1 bg-slate-700 rounded text-cyan-400">
80
+ /src/routes/index.tsx
81
+ </code>
82
+ </p>
83
+ </div>
84
+ </div>
85
+ </section>
86
+
87
+ <section className="py-16 px-6 max-w-7xl mx-auto">
88
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
89
+ {features.map((feature, index) => (
90
+ <div
91
+ key={index}
92
+ className="bg-slate-800/50 backdrop-blur-sm border border-slate-700 rounded-xl p-6 hover:border-cyan-500/50 transition-all duration-300 hover:shadow-lg hover:shadow-cyan-500/10"
93
+ >
94
+ <div className="mb-4">{feature.icon}</div>
95
+ <h3 className="text-xl font-semibold text-white mb-3">
96
+ {feature.title}
97
+ </h3>
98
+ <p className="text-gray-400 leading-relaxed">{feature.description}</p>
99
+ </div>
100
+ ))}
101
+ </div>
102
+ </section>
65
103
  </div>
66
- <% } %> );
104
+ );
67
105
  }
@@ -1,7 +1,7 @@
1
- <% if (tailwind) { %>@import "tailwindcss";
2
- <% } %>
1
+ @import "tailwindcss";
2
+
3
3
  body {
4
- <% if (tailwind) { %>@apply m-0;<% } else { %>margin: 0;<% } %>
4
+ @apply m-0;
5
5
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
6
6
  "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
7
7
  sans-serif;
@@ -1,4 +1,4 @@
1
- <% if (!typescript) { ignoreFile() } %>{
1
+ {
2
2
  <% if (addOnEnabled.eslint) { %>"include": ["**/*.ts", "**/*.tsx", "eslint.config.js", "prettier.config.js", "vite.config.js"],
3
3
  <% } else { %>"include": ["**/*.ts", "**/*.tsx"],<% } %>
4
4
  "compilerOptions": {
@@ -1,33 +1,39 @@
1
- <% if (addOnEnabled.start) { ignoreFile() } %>import { defineConfig } from "vite";
2
- import { devtools } from '@tanstack/devtools-vite'<% if (addOnEnabled.paraglide) { %>
3
- import { paraglideVitePlugin } from "@inlang/paraglide-js"<% } %>
4
- import viteReact from "@vitejs/plugin-react";
5
- <% if (tailwind) { %>
6
- import tailwindcss from "@tailwindcss/vite";
7
- <% } %><%if (fileRouter) { %>
8
- import { tanstackRouter } from "@tanstack/router-plugin/vite";<% } %><% if (addOnEnabled['module-federation']) { %>
9
- import { federation } from "@module-federation/vite";<% } %>
10
- import { fileURLToPath, URL } from 'node:url';<% if (addOnEnabled['module-federation']) { %>
11
- import federationConfig from "./module-federation.config.js";<% } %><% for(const integration of integrations.filter(i => i.type === 'vite-plugin')) { %><%- integrationImportContent(integration) %>
1
+ import { defineConfig } from 'vite'
2
+ import { devtools } from '@tanstack/devtools-vite'
3
+ <% if (addOnEnabled.paraglide) { -%>
4
+ import { paraglideVitePlugin } from "@inlang/paraglide-js"
5
+ <% } -%>
6
+ import { tanstackStart } from '@tanstack/react-start/plugin/vite';
7
+ import viteReact from '@vitejs/plugin-react'
8
+ import viteTsConfigPaths from 'vite-tsconfig-paths'
9
+ import { fileURLToPath, URL } from 'url'
10
+ import tailwindcss from "@tailwindcss/vite"
11
+ <% for(const integration of integrations.filter(i => i.type === 'vite-plugin')) { %><%- integrationImportContent(integration) %>
12
12
  <% } %>
13
13
 
14
- // https://vitejs.dev/config/
15
- export default defineConfig({
16
- plugins: [devtools(), <% if (addOnEnabled.paraglide) { %>paraglideVitePlugin({
17
- project: './project.inlang',
18
- outdir: './src/paraglide',
19
- strategy: ['url'],
20
- }), <% } %><% for(const integration of integrations.filter(i => i.type === 'vite-plugin')) { %><%- integrationImportCode(integration) %>,<% } %> <% if(fileRouter) { %>tanstackRouter({
21
- target: "react",
22
- autoCodeSplitting: true,
23
- }), <% } %>viteReact(<% if (addOnEnabled.compiler) { %>{
24
- babel: {
25
- plugins: ["babel-plugin-react-compiler"],
26
- },
27
- }<% } %>)<% if (tailwind) { %>, tailwindcss()<% } %><% if (addOnEnabled['module-federation']) { %>, federation(federationConfig)<% } %>],
14
+ const config = defineConfig({
28
15
  resolve: {
29
16
  alias: {
30
17
  '@': fileURLToPath(new URL('./src', import.meta.url)),
31
18
  },
32
- }
33
- });
19
+ },
20
+ plugins: [devtools(), <% if (addOnEnabled.paraglide) { %>paraglideVitePlugin({
21
+ project: './project.inlang',
22
+ outdir: './src/paraglide',
23
+ strategy: ['url'],
24
+ }), <% } %><% for(const integration of integrations.filter(i => i.type === 'vite-plugin')) { %><%- integrationImportCode(integration) %>,<% } %>
25
+ // this is the plugin that enables path aliases
26
+ viteTsConfigPaths({
27
+ projects: ['./tsconfig.json'],
28
+ }),
29
+ tailwindcss(),
30
+ tanstackStart(),
31
+ viteReact(<% if (addOnEnabled.compiler) { %>{
32
+ babel: {
33
+ plugins: ["babel-plugin-react-compiler"],
34
+ },
35
+ }<% } %>),
36
+ ],
37
+ })
38
+
39
+ export default config
@@ -9,8 +9,8 @@
9
9
  },
10
10
  "tailwindcss": {
11
11
  "dependencies": {
12
- "@tailwindcss/vite": "^4.0.6",
13
- "tailwindcss": "^4.0.6",
12
+ "@tailwindcss/vite": "^4.1.18",
13
+ "tailwindcss": "^4.1.18",
14
14
  "lucide-react": "^0.545.0"
15
15
  }
16
16
  },
@@ -0,0 +1,3 @@
1
+ import { createAuthClient } from 'better-auth/solid'
2
+
3
+ export const authClient = createAuthClient()
@@ -0,0 +1,9 @@
1
+ import { betterAuth } from 'better-auth'
2
+ import { tanstackStartCookies } from 'better-auth/tanstack-start'
3
+
4
+ export const auth = betterAuth({
5
+ emailAndPassword: {
6
+ enabled: true,
7
+ },
8
+ plugins: [tanstackStartCookies()],
9
+ })
@@ -0,0 +1,11 @@
1
+ import { createFileRoute } from '@tanstack/solid-router'
2
+ import { auth } from '../../../lib/auth'
3
+
4
+ export const Route = createFileRoute('/api/auth/$')({
5
+ server: {
6
+ handlers: {
7
+ GET: ({ request }) => auth.handler(request),
8
+ POST: ({ request }) => auth.handler(request),
9
+ },
10
+ },
11
+ })
@@ -8,7 +8,7 @@
8
8
  "color": "#000000",
9
9
  "link": "https://www.better-auth.com/",
10
10
  "modes": ["file-router"],
11
- "dependsOn": ["start"],
11
+
12
12
  "routes": [
13
13
  {
14
14
  "url": "/demo/better-auth",
@@ -0,0 +1,14 @@
1
+ import { defineSchema, defineTable } from 'convex/server'
2
+ import { v } from 'convex/values'
3
+
4
+ export default defineSchema({
5
+ products: defineTable({
6
+ title: v.string(),
7
+ imageId: v.string(),
8
+ price: v.number(),
9
+ }),
10
+ todos: defineTable({
11
+ text: v.string(),
12
+ completed: v.boolean(),
13
+ }),
14
+ })
@@ -0,0 +1,43 @@
1
+ import { mutation, query } from './_generated/server'
2
+ import { v } from 'convex/values'
3
+
4
+ export const list = query({
5
+ args: {},
6
+ handler: async (ctx) => {
7
+ return await ctx.db
8
+ .query('todos')
9
+ .withIndex('by_creation_time')
10
+ .order('desc')
11
+ .collect()
12
+ },
13
+ })
14
+
15
+ export const add = mutation({
16
+ args: { text: v.string() },
17
+ handler: async (ctx, args) => {
18
+ return await ctx.db.insert('todos', {
19
+ text: args.text,
20
+ completed: false,
21
+ })
22
+ },
23
+ })
24
+
25
+ export const toggle = mutation({
26
+ args: { id: v.id('todos') },
27
+ handler: async (ctx, args) => {
28
+ const todo = await ctx.db.get(args.id)
29
+ if (!todo) {
30
+ throw new Error('Todo not found')
31
+ }
32
+ return await ctx.db.patch(args.id, {
33
+ completed: !todo.completed,
34
+ })
35
+ },
36
+ })
37
+
38
+ export const remove = mutation({
39
+ args: { id: v.id('todos') },
40
+ handler: async (ctx, args) => {
41
+ return await ctx.db.delete(args.id)
42
+ },
43
+ })
@@ -0,0 +1,6 @@
1
+ import { type ClassValue, clsx } from "clsx"
2
+ import { twMerge } from "tailwind-merge"
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs))
6
+ }
@@ -0,0 +1,13 @@
1
+ import { Derived, Store } from '@tanstack/store'
2
+
3
+ export const store = new Store({
4
+ firstName: 'Jane',
5
+ lastName: 'Smith',
6
+ })
7
+
8
+ export const fullName = new Derived({
9
+ fn: () => `${store.state.firstName} ${store.state.lastName}`,
10
+ deps: [store],
11
+ })
12
+
13
+ fullName.mount()
@@ -0,0 +1,7 @@
1
+ import { strapi } from "@strapi/client";
2
+
3
+ export const strapiClient = strapi({
4
+ baseURL: import.meta.env.VITE_STRAPI_URL,
5
+ });
6
+
7
+ export const articles = strapiClient.collection("articles");
@@ -0,0 +1,39 @@
1
+ import { createEnv } from "@t3-oss/env-core";
2
+ import { z } from "zod";
3
+
4
+ export const env = createEnv({
5
+ server: {
6
+ SERVER_URL: z.url().optional(),
7
+ },
8
+
9
+ /**
10
+ * The prefix that client-side variables must have. This is enforced both at
11
+ * a type-level and at runtime.
12
+ */
13
+ clientPrefix: "VITE_",
14
+
15
+ client: {
16
+ VITE_APP_TITLE: z.string().min(1).optional(),
17
+ },
18
+
19
+ /**
20
+ * What object holds the environment variables at runtime. This is usually
21
+ * `process.env` or `import.meta.env`.
22
+ */
23
+ runtimeEnv: import.meta.env,
24
+
25
+ /**
26
+ * By default, this library will feed the environment variables directly to
27
+ * the Zod validator.
28
+ *
29
+ * This means that if you have an empty string for a value that is supposed
30
+ * to be a number (e.g. `PORT=` in a ".env" file), Zod will incorrectly flag
31
+ * it as a type mismatch violation. Additionally, if you have an empty string
32
+ * for a value that is supposed to be a string with a default value (e.g.
33
+ * `DOMAIN=` in an ".env" file), the default value will never be applied.
34
+ *
35
+ * In order to solve these issues, we recommend that all new projects
36
+ * explicitly specify this option as true.
37
+ */
38
+ emptyStringAsUndefined: true,
39
+ });