create-rudder-app 0.3.0 → 0.4.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 (243) hide show
  1. package/dist/index.js +100 -20
  2. package/dist/index.js.map +1 -1
  3. package/dist/templates/app/auth-controller.d.ts +2 -0
  4. package/dist/templates/app/auth-controller.d.ts.map +1 -0
  5. package/dist/templates/app/auth-controller.js +51 -0
  6. package/dist/templates/app/auth-controller.js.map +1 -0
  7. package/dist/templates/app/mcp-echo-server.d.ts +2 -0
  8. package/dist/templates/app/mcp-echo-server.d.ts.map +1 -0
  9. package/dist/templates/app/mcp-echo-server.js +13 -0
  10. package/dist/templates/app/mcp-echo-server.js.map +1 -0
  11. package/dist/templates/app/mcp-echo-tool.d.ts +2 -0
  12. package/dist/templates/app/mcp-echo-tool.d.ts.map +1 -0
  13. package/dist/templates/app/mcp-echo-tool.js +20 -0
  14. package/dist/templates/app/mcp-echo-tool.js.map +1 -0
  15. package/dist/templates/app/service-provider.d.ts +3 -0
  16. package/dist/templates/app/service-provider.d.ts.map +1 -0
  17. package/dist/templates/app/service-provider.js +27 -0
  18. package/dist/templates/app/service-provider.js.map +1 -0
  19. package/dist/templates/app/user-model.d.ts +2 -0
  20. package/dist/templates/app/user-model.d.ts.map +1 -0
  21. package/dist/templates/app/user-model.js +19 -0
  22. package/dist/templates/app/user-model.js.map +1 -0
  23. package/dist/templates/bootstrap/app.d.ts +3 -0
  24. package/dist/templates/bootstrap/app.d.ts.map +1 -0
  25. package/dist/templates/bootstrap/app.js +41 -0
  26. package/dist/templates/bootstrap/app.js.map +1 -0
  27. package/dist/templates/bootstrap/providers.d.ts +3 -0
  28. package/dist/templates/bootstrap/providers.d.ts.map +1 -0
  29. package/dist/templates/bootstrap/providers.js +27 -0
  30. package/dist/templates/bootstrap/providers.js.map +1 -0
  31. package/dist/templates/configs/ai.d.ts +2 -0
  32. package/dist/templates/configs/ai.d.ts.map +1 -0
  33. package/dist/templates/configs/ai.js +32 -0
  34. package/dist/templates/configs/ai.js.map +1 -0
  35. package/dist/templates/configs/app.d.ts +2 -0
  36. package/dist/templates/configs/app.d.ts.map +1 -0
  37. package/dist/templates/configs/app.js +12 -0
  38. package/dist/templates/configs/app.js.map +1 -0
  39. package/dist/templates/configs/auth.d.ts +3 -0
  40. package/dist/templates/configs/auth.d.ts.map +1 -0
  41. package/dist/templates/configs/auth.js +16 -0
  42. package/dist/templates/configs/auth.js.map +1 -0
  43. package/dist/templates/configs/cache.d.ts +2 -0
  44. package/dist/templates/configs/cache.d.ts.map +1 -0
  45. package/dist/templates/configs/cache.js +28 -0
  46. package/dist/templates/configs/cache.js.map +1 -0
  47. package/dist/templates/configs/cashier.d.ts +2 -0
  48. package/dist/templates/configs/cashier.d.ts.map +1 -0
  49. package/dist/templates/configs/cashier.js +22 -0
  50. package/dist/templates/configs/cashier.js.map +1 -0
  51. package/dist/templates/configs/crypt.d.ts +2 -0
  52. package/dist/templates/configs/crypt.d.ts.map +1 -0
  53. package/dist/templates/configs/crypt.js +16 -0
  54. package/dist/templates/configs/crypt.js.map +1 -0
  55. package/dist/templates/configs/database.d.ts +3 -0
  56. package/dist/templates/configs/database.d.ts.map +1 -0
  57. package/dist/templates/configs/database.js +28 -0
  58. package/dist/templates/configs/database.js.map +1 -0
  59. package/dist/templates/configs/hash.d.ts +2 -0
  60. package/dist/templates/configs/hash.d.ts.map +1 -0
  61. package/dist/templates/configs/hash.js +12 -0
  62. package/dist/templates/configs/hash.js.map +1 -0
  63. package/dist/templates/configs/horizon.d.ts +2 -0
  64. package/dist/templates/configs/horizon.d.ts.map +1 -0
  65. package/dist/templates/configs/horizon.js +30 -0
  66. package/dist/templates/configs/horizon.js.map +1 -0
  67. package/dist/templates/configs/index.d.ts +3 -0
  68. package/dist/templates/configs/index.d.ts.map +1 -0
  69. package/dist/templates/configs/index.js +96 -0
  70. package/dist/templates/configs/index.js.map +1 -0
  71. package/dist/templates/configs/localization.d.ts +2 -0
  72. package/dist/templates/configs/localization.d.ts.map +1 -0
  73. package/dist/templates/configs/localization.js +13 -0
  74. package/dist/templates/configs/localization.js.map +1 -0
  75. package/dist/templates/configs/log.d.ts +2 -0
  76. package/dist/templates/configs/log.d.ts.map +1 -0
  77. package/dist/templates/configs/log.js +40 -0
  78. package/dist/templates/configs/log.js.map +1 -0
  79. package/dist/templates/configs/mail.d.ts +2 -0
  80. package/dist/templates/configs/mail.d.ts.map +1 -0
  81. package/dist/templates/configs/mail.js +33 -0
  82. package/dist/templates/configs/mail.js.map +1 -0
  83. package/dist/templates/configs/passport.d.ts +2 -0
  84. package/dist/templates/configs/passport.d.ts.map +1 -0
  85. package/dist/templates/configs/passport.js +22 -0
  86. package/dist/templates/configs/passport.js.map +1 -0
  87. package/dist/templates/configs/pennant.d.ts +2 -0
  88. package/dist/templates/configs/pennant.d.ts.map +1 -0
  89. package/dist/templates/configs/pennant.js +16 -0
  90. package/dist/templates/configs/pennant.js.map +1 -0
  91. package/dist/templates/configs/pulse.d.ts +2 -0
  92. package/dist/templates/configs/pulse.d.ts.map +1 -0
  93. package/dist/templates/configs/pulse.js +21 -0
  94. package/dist/templates/configs/pulse.js.map +1 -0
  95. package/dist/templates/configs/queue.d.ts +2 -0
  96. package/dist/templates/configs/queue.d.ts.map +1 -0
  97. package/dist/templates/configs/queue.js +28 -0
  98. package/dist/templates/configs/queue.js.map +1 -0
  99. package/dist/templates/configs/sanctum.d.ts +2 -0
  100. package/dist/templates/configs/sanctum.d.ts.map +1 -0
  101. package/dist/templates/configs/sanctum.js +19 -0
  102. package/dist/templates/configs/sanctum.js.map +1 -0
  103. package/dist/templates/configs/server.d.ts +2 -0
  104. package/dist/templates/configs/server.d.ts.map +1 -0
  105. package/dist/templates/configs/server.js +15 -0
  106. package/dist/templates/configs/server.js.map +1 -0
  107. package/dist/templates/configs/session.d.ts +2 -0
  108. package/dist/templates/configs/session.d.ts.map +1 -0
  109. package/dist/templates/configs/session.js +26 -0
  110. package/dist/templates/configs/session.js.map +1 -0
  111. package/dist/templates/configs/socialite.d.ts +2 -0
  112. package/dist/templates/configs/socialite.d.ts.map +1 -0
  113. package/dist/templates/configs/socialite.js +27 -0
  114. package/dist/templates/configs/socialite.js.map +1 -0
  115. package/dist/templates/configs/storage.d.ts +2 -0
  116. package/dist/templates/configs/storage.d.ts.map +1 -0
  117. package/dist/templates/configs/storage.js +35 -0
  118. package/dist/templates/configs/storage.js.map +1 -0
  119. package/dist/templates/configs/sync.d.ts +3 -0
  120. package/dist/templates/configs/sync.d.ts.map +1 -0
  121. package/dist/templates/configs/sync.js +17 -0
  122. package/dist/templates/configs/sync.js.map +1 -0
  123. package/dist/templates/configs/telescope.d.ts +2 -0
  124. package/dist/templates/configs/telescope.d.ts.map +1 -0
  125. package/dist/templates/configs/telescope.js +25 -0
  126. package/dist/templates/configs/telescope.js.map +1 -0
  127. package/dist/templates/css/index.d.ts +3 -0
  128. package/dist/templates/css/index.d.ts.map +1 -0
  129. package/dist/templates/css/index.js +140 -0
  130. package/dist/templates/css/index.js.map +1 -0
  131. package/dist/templates/css/plain.d.ts +2 -0
  132. package/dist/templates/css/plain.d.ts.map +1 -0
  133. package/dist/templates/css/plain.js +373 -0
  134. package/dist/templates/css/plain.js.map +1 -0
  135. package/dist/templates/css/tailwind.d.ts +2 -0
  136. package/dist/templates/css/tailwind.d.ts.map +1 -0
  137. package/dist/templates/css/tailwind.js +176 -0
  138. package/dist/templates/css/tailwind.js.map +1 -0
  139. package/dist/templates/demos/bk-socket.d.ts +2 -0
  140. package/dist/templates/demos/bk-socket.d.ts.map +1 -0
  141. package/dist/templates/demos/bk-socket.js +95 -0
  142. package/dist/templates/demos/bk-socket.js.map +1 -0
  143. package/dist/templates/demos/contact.d.ts +3 -0
  144. package/dist/templates/demos/contact.d.ts.map +1 -0
  145. package/dist/templates/demos/contact.js +106 -0
  146. package/dist/templates/demos/contact.js.map +1 -0
  147. package/dist/templates/demos/index-view.d.ts +3 -0
  148. package/dist/templates/demos/index-view.d.ts.map +1 -0
  149. package/dist/templates/demos/index-view.js +67 -0
  150. package/dist/templates/demos/index-view.js.map +1 -0
  151. package/dist/templates/demos/live.d.ts +2 -0
  152. package/dist/templates/demos/live.d.ts.map +1 -0
  153. package/dist/templates/demos/live.js +97 -0
  154. package/dist/templates/demos/live.js.map +1 -0
  155. package/dist/templates/demos/registry.d.ts +13 -0
  156. package/dist/templates/demos/registry.d.ts.map +1 -0
  157. package/dist/templates/demos/registry.js +15 -0
  158. package/dist/templates/demos/registry.js.map +1 -0
  159. package/dist/templates/demos/ws.d.ts +2 -0
  160. package/dist/templates/demos/ws.d.ts.map +1 -0
  161. package/dist/templates/demos/ws.js +106 -0
  162. package/dist/templates/demos/ws.js.map +1 -0
  163. package/dist/templates/env.d.ts +7 -0
  164. package/dist/templates/env.d.ts.map +1 -0
  165. package/dist/templates/env.js +127 -0
  166. package/dist/templates/env.js.map +1 -0
  167. package/dist/templates/package-json.d.ts +3 -0
  168. package/dist/templates/package-json.d.ts.map +1 -0
  169. package/dist/templates/package-json.js +195 -0
  170. package/dist/templates/package-json.js.map +1 -0
  171. package/dist/templates/package-managers.d.ts +14 -0
  172. package/dist/templates/package-managers.d.ts.map +1 -0
  173. package/dist/templates/package-managers.js +49 -0
  174. package/dist/templates/package-managers.js.map +1 -0
  175. package/dist/templates/pages/ai-chat.d.ts +7 -0
  176. package/dist/templates/pages/ai-chat.d.ts.map +1 -0
  177. package/dist/templates/pages/ai-chat.js +285 -0
  178. package/dist/templates/pages/ai-chat.js.map +1 -0
  179. package/dist/templates/pages/demo.d.ts +4 -0
  180. package/dist/templates/pages/demo.d.ts.map +1 -0
  181. package/dist/templates/pages/demo.js +71 -0
  182. package/dist/templates/pages/demo.js.map +1 -0
  183. package/dist/templates/pages/error.d.ts +7 -0
  184. package/dist/templates/pages/error.d.ts.map +1 -0
  185. package/dist/templates/pages/error.js +148 -0
  186. package/dist/templates/pages/error.js.map +1 -0
  187. package/dist/templates/pages/index.d.ts +9 -0
  188. package/dist/templates/pages/index.d.ts.map +1 -0
  189. package/dist/templates/pages/index.js +311 -0
  190. package/dist/templates/pages/index.js.map +1 -0
  191. package/dist/templates/prisma/auth.d.ts +2 -0
  192. package/dist/templates/prisma/auth.d.ts.map +1 -0
  193. package/dist/templates/prisma/auth.js +22 -0
  194. package/dist/templates/prisma/auth.js.map +1 -0
  195. package/dist/templates/prisma/base.d.ts +3 -0
  196. package/dist/templates/prisma/base.d.ts.map +1 -0
  197. package/dist/templates/prisma/base.js +14 -0
  198. package/dist/templates/prisma/base.js.map +1 -0
  199. package/dist/templates/prisma/config.d.ts +3 -0
  200. package/dist/templates/prisma/config.d.ts.map +1 -0
  201. package/dist/templates/prisma/config.js +15 -0
  202. package/dist/templates/prisma/config.js.map +1 -0
  203. package/dist/templates/prisma/notification.d.ts +2 -0
  204. package/dist/templates/prisma/notification.d.ts.map +1 -0
  205. package/dist/templates/prisma/notification.js +16 -0
  206. package/dist/templates/prisma/notification.js.map +1 -0
  207. package/dist/templates/prisma/passport.d.ts +2 -0
  208. package/dist/templates/prisma/passport.d.ts.map +1 -0
  209. package/dist/templates/prisma/passport.js +69 -0
  210. package/dist/templates/prisma/passport.js.map +1 -0
  211. package/dist/templates/routes/api.d.ts +3 -0
  212. package/dist/templates/routes/api.d.ts.map +1 -0
  213. package/dist/templates/routes/api.js +118 -0
  214. package/dist/templates/routes/api.js.map +1 -0
  215. package/dist/templates/routes/console.d.ts +2 -0
  216. package/dist/templates/routes/console.d.ts.map +1 -0
  217. package/dist/templates/routes/console.js +22 -0
  218. package/dist/templates/routes/console.js.map +1 -0
  219. package/dist/templates/routes/web.d.ts +4 -0
  220. package/dist/templates/routes/web.d.ts.map +1 -0
  221. package/dist/templates/routes/web.js +108 -0
  222. package/dist/templates/routes/web.js.map +1 -0
  223. package/dist/templates/server.d.ts +2 -0
  224. package/dist/templates/server.d.ts.map +1 -0
  225. package/dist/templates/server.js +10 -0
  226. package/dist/templates/server.js.map +1 -0
  227. package/dist/templates/tsconfig.d.ts +3 -0
  228. package/dist/templates/tsconfig.d.ts.map +1 -0
  229. package/dist/templates/tsconfig.js +33 -0
  230. package/dist/templates/tsconfig.js.map +1 -0
  231. package/dist/templates/views/welcome.d.ts +6 -0
  232. package/dist/templates/views/welcome.d.ts.map +1 -0
  233. package/dist/templates/views/welcome.js +396 -0
  234. package/dist/templates/views/welcome.js.map +1 -0
  235. package/dist/templates/vite.d.ts +3 -0
  236. package/dist/templates/vite.d.ts.map +1 -0
  237. package/dist/templates/vite.js +61 -0
  238. package/dist/templates/vite.js.map +1 -0
  239. package/dist/templates.d.ts +28 -17
  240. package/dist/templates.d.ts.map +1 -1
  241. package/dist/templates.js +99 -3779
  242. package/dist/templates.js.map +1 -1
  243. package/package.json +3 -3
@@ -0,0 +1,195 @@
1
+ import { shouldScaffoldDemo } from '../templates.js';
2
+ export function packageJson(ctx) {
3
+ const { frameworks, tailwind, shadcn, db } = ctx;
4
+ const hasReact = frameworks.includes('react');
5
+ const hasVue = frameworks.includes('vue');
6
+ const hasSolid = frameworks.includes('solid');
7
+ const dbDeps = {
8
+ sqlite: { 'better-sqlite3': '^12.0.0' },
9
+ postgresql: {},
10
+ mysql: {},
11
+ };
12
+ const dbDevDeps = {
13
+ sqlite: { '@types/better-sqlite3': '^7.6.0' },
14
+ postgresql: {},
15
+ mysql: {},
16
+ };
17
+ const frameworkDeps = {};
18
+ const frameworkDevDeps = {};
19
+ if (hasReact) {
20
+ frameworkDeps['react'] = '^19.0.0';
21
+ frameworkDeps['react-dom'] = '^19.0.0';
22
+ frameworkDeps['vike-react'] = '^0.6.20';
23
+ frameworkDevDeps['@vitejs/plugin-react'] = '^4.3.4';
24
+ frameworkDevDeps['@types/react'] = '^19.0.0';
25
+ frameworkDevDeps['@types/react-dom'] = '^19.0.0';
26
+ }
27
+ if (hasVue) {
28
+ frameworkDeps['vue'] = '^3.5.0';
29
+ frameworkDeps['vike-vue'] = 'latest';
30
+ frameworkDevDeps['@vitejs/plugin-vue'] = '^5.2.0';
31
+ }
32
+ if (hasSolid) {
33
+ frameworkDeps['solid-js'] = '^1.9.0';
34
+ frameworkDeps['vike-solid'] = 'latest';
35
+ }
36
+ const tailwindDeps = tailwind ? {
37
+ 'tailwindcss': '^4.2.1',
38
+ '@tailwindcss/vite': '^4.2.1',
39
+ } : {};
40
+ const tailwindDevDeps = tailwind ? {
41
+ 'tw-animate-css': '^1.4.0',
42
+ } : {};
43
+ const shadcnDeps = shadcn ? {
44
+ 'class-variance-authority': '^0.7.1',
45
+ 'clsx': '^2.1.1',
46
+ 'tailwind-merge': '^3.5.0',
47
+ 'lucide-react': '^0.575.0',
48
+ } : {};
49
+ const shadcnDevDeps = shadcn ? {
50
+ 'shadcn': 'latest',
51
+ } : {};
52
+ // Base framework deps (always included)
53
+ const deps = {
54
+ '@rudderjs/console': 'latest',
55
+ '@rudderjs/vite': 'latest',
56
+ '@rudderjs/contracts': 'latest',
57
+ '@rudderjs/core': 'latest',
58
+ '@rudderjs/log': 'latest',
59
+ '@rudderjs/middleware': 'latest',
60
+ '@rudderjs/router': 'latest',
61
+ '@rudderjs/server-hono': 'latest',
62
+ '@rudderjs/support': 'latest',
63
+ '@rudderjs/view': 'latest',
64
+ '@vikejs/hono': '^0.2.0',
65
+ 'dotenv': '^16.4.0',
66
+ 'reflect-metadata': '^0.2.2',
67
+ 'vike': '^0.4.257',
68
+ 'zod': '^4.0.0',
69
+ ...frameworkDeps,
70
+ ...tailwindDeps,
71
+ ...shadcnDeps,
72
+ ...dbDeps[db],
73
+ };
74
+ // ORM deps
75
+ if (ctx.orm === 'prisma') {
76
+ deps['@rudderjs/orm'] = 'latest';
77
+ deps['@rudderjs/orm-prisma'] = 'latest';
78
+ deps['@prisma/client'] = '^7.0.0';
79
+ }
80
+ else if (ctx.orm === 'drizzle') {
81
+ deps['@rudderjs/orm'] = 'latest';
82
+ deps['@rudderjs/orm-drizzle'] = 'latest';
83
+ }
84
+ // Tier A — always installed silently. Required by default bootstrap (cache for
85
+ // RateLimit middleware) or peer of Auth (session for cookies/CSRF, hash for
86
+ // password hashing — also useful standalone).
87
+ deps['@rudderjs/session'] = 'latest';
88
+ deps['@rudderjs/hash'] = 'latest';
89
+ deps['@rudderjs/cache'] = 'latest';
90
+ // Optional package deps
91
+ if (ctx.packages.auth)
92
+ deps['@rudderjs/auth'] = 'latest';
93
+ if (ctx.packages.sanctum)
94
+ deps['@rudderjs/sanctum'] = 'latest';
95
+ if (ctx.packages.passport)
96
+ deps['@rudderjs/passport'] = 'latest';
97
+ if (ctx.packages.socialite)
98
+ deps['@rudderjs/socialite'] = 'latest';
99
+ if (ctx.packages.queue)
100
+ deps['@rudderjs/queue'] = 'latest';
101
+ if (ctx.packages.storage)
102
+ deps['@rudderjs/storage'] = 'latest';
103
+ if (ctx.packages.scheduler)
104
+ deps['@rudderjs/schedule'] = 'latest';
105
+ if (ctx.packages.image)
106
+ deps['@rudderjs/image'] = 'latest';
107
+ if (ctx.packages.mail)
108
+ deps['@rudderjs/mail'] = 'latest';
109
+ if (ctx.packages.notifications)
110
+ deps['@rudderjs/notification'] = 'latest';
111
+ if (ctx.packages.broadcast)
112
+ deps['@rudderjs/broadcast'] = 'latest';
113
+ if (ctx.packages.sync)
114
+ deps['@rudderjs/sync'] = 'latest';
115
+ if (shouldScaffoldDemo(ctx, 'live'))
116
+ deps['y-websocket'] = '^2.0.0';
117
+ if (ctx.packages.ai)
118
+ deps['@rudderjs/ai'] = 'latest';
119
+ if (ctx.packages.mcp)
120
+ deps['@rudderjs/mcp'] = 'latest';
121
+ if (ctx.packages.localization)
122
+ deps['@rudderjs/localization'] = 'latest';
123
+ if (ctx.packages.cashierPaddle)
124
+ deps['@rudderjs/cashier-paddle'] = 'latest';
125
+ if (ctx.packages.pennant)
126
+ deps['@rudderjs/pennant'] = 'latest';
127
+ if (ctx.packages.telescope)
128
+ deps['@rudderjs/telescope'] = 'latest';
129
+ if (ctx.packages.pulse)
130
+ deps['@rudderjs/pulse'] = 'latest';
131
+ if (ctx.packages.horizon)
132
+ deps['@rudderjs/horizon'] = 'latest';
133
+ if (ctx.packages.crypt)
134
+ deps['@rudderjs/crypt'] = 'latest';
135
+ if (ctx.packages.http)
136
+ deps['@rudderjs/http'] = 'latest';
137
+ if (ctx.packages.process)
138
+ deps['@rudderjs/process'] = 'latest';
139
+ if (ctx.packages.concurrency)
140
+ deps['@rudderjs/concurrency'] = 'latest';
141
+ const devDeps = {
142
+ '@rudderjs/cli': 'latest',
143
+ '@types/node': '^20.0.0',
144
+ 'tsx': '^4.21.0',
145
+ 'typescript': '^5.4.0',
146
+ 'vite': '^7.1.0',
147
+ ...frameworkDevDeps,
148
+ ...tailwindDevDeps,
149
+ ...shadcnDevDeps,
150
+ ...dbDevDeps[db],
151
+ };
152
+ if (ctx.orm === 'prisma')
153
+ devDeps['prisma'] = '^7.0.0';
154
+ if (ctx.packages.boost)
155
+ devDeps['@rudderjs/boost'] = 'latest';
156
+ const builtDeps = ['esbuild'];
157
+ if (ctx.orm === 'prisma') {
158
+ builtDeps.push('@prisma/engines', 'prisma');
159
+ }
160
+ if (db === 'sqlite')
161
+ builtDeps.unshift('better-sqlite3');
162
+ const pmField = {};
163
+ if (ctx.pm === 'pnpm') {
164
+ pmField['pnpm'] = { onlyBuiltDependencies: builtDeps };
165
+ }
166
+ else if (ctx.pm === 'bun') {
167
+ pmField['trustedDependencies'] = builtDeps;
168
+ }
169
+ // npm and yarn allow all lifecycle scripts by default — no extra field needed
170
+ return JSON.stringify({
171
+ name: ctx.name,
172
+ version: '0.0.1',
173
+ private: true,
174
+ type: 'module',
175
+ scripts: {
176
+ dev: 'vike dev',
177
+ 'dev:clean': 'pids=$(lsof -ti :24678 -ti :3000 2>/dev/null); if [ -n "$pids" ]; then kill -9 $pids; fi; vike dev',
178
+ build: 'vike build',
179
+ start: 'node ./dist/server/index.mjs',
180
+ preview: 'node ./dist/server/index.mjs',
181
+ typecheck: 'tsc --noEmit',
182
+ rudder: 'tsx node_modules/@rudderjs/cli/dist/index.js',
183
+ ...(ctx.orm ? {
184
+ migrate: 'tsx node_modules/@rudderjs/cli/dist/index.js migrate',
185
+ 'migrate:fresh': 'tsx node_modules/@rudderjs/cli/dist/index.js migrate:fresh',
186
+ 'migrate:status': 'tsx node_modules/@rudderjs/cli/dist/index.js migrate:status',
187
+ 'db:seed': 'tsx node_modules/@rudderjs/cli/dist/index.js db:seed',
188
+ } : {}),
189
+ },
190
+ ...pmField,
191
+ dependencies: deps,
192
+ devDependencies: devDeps,
193
+ }, null, 2) + '\n';
194
+ }
195
+ //# sourceMappingURL=package-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../src/templates/package-json.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type PackageManager = 'pnpm' | 'npm' | 'yarn' | 'bun';
2
+ /** Detect which package manager invoked the installer.
3
+ * 1. Check npm_config_user_agent (set by pnpm/npm/yarn/bun create commands)
4
+ * 2. Fall back to checking which binaries are available on PATH
5
+ */
6
+ export declare function detectPackageManager(): PackageManager;
7
+ /** `<pm> exec <bin>` equivalent per package manager. */
8
+ export declare function pmExec(pm: PackageManager, bin: string): string;
9
+ /** `<pm> run <script>` equivalent (yarn/bun allow omitting "run"). */
10
+ export declare function pmRun(pm: PackageManager, script: string): string;
11
+ /** `<pm> install` command. */
12
+ export declare function pmInstall(pm: PackageManager): string;
13
+ export declare function pageExt(fw: 'react' | 'vue' | 'solid'): '.tsx' | '.vue';
14
+ //# sourceMappingURL=package-managers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-managers.d.ts","sourceRoot":"","sources":["../../src/templates/package-managers.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAA;AAE5D;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAerD;AAED,wDAAwD;AACxD,wBAAgB,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAK9D;AAED,sEAAsE;AACtE,wBAAgB,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED,8BAA8B;AAC9B,wBAAgB,SAAS,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAEpD;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAEtE"}
@@ -0,0 +1,49 @@
1
+ import { execSync } from 'node:child_process';
2
+ /** Detect which package manager invoked the installer.
3
+ * 1. Check npm_config_user_agent (set by pnpm/npm/yarn/bun create commands)
4
+ * 2. Fall back to checking which binaries are available on PATH
5
+ */
6
+ export function detectPackageManager() {
7
+ const ua = process.env['npm_config_user_agent'] ?? '';
8
+ if (ua.startsWith('bun'))
9
+ return 'bun';
10
+ if (ua.startsWith('yarn'))
11
+ return 'yarn';
12
+ if (ua.startsWith('pnpm'))
13
+ return 'pnpm';
14
+ if (ua.startsWith('npm'))
15
+ return 'npm';
16
+ // Fallback: check which binaries exist on PATH (preference: pnpm > bun > yarn > npm)
17
+ for (const pm of ['pnpm', 'bun', 'yarn']) {
18
+ try {
19
+ execSync(`${pm} --version`, { stdio: 'ignore' });
20
+ return pm;
21
+ }
22
+ catch { /* not found */ }
23
+ }
24
+ return 'npm';
25
+ }
26
+ /** `<pm> exec <bin>` equivalent per package manager. */
27
+ export function pmExec(pm, bin) {
28
+ if (pm === 'bun')
29
+ return `bunx ${bin}`;
30
+ if (pm === 'yarn')
31
+ return `yarn dlx ${bin}`;
32
+ if (pm === 'npm')
33
+ return `npx ${bin}`;
34
+ return `pnpm exec ${bin}`;
35
+ }
36
+ /** `<pm> run <script>` equivalent (yarn/bun allow omitting "run"). */
37
+ export function pmRun(pm, script) {
38
+ if (pm === 'npm')
39
+ return `npm run ${script}`;
40
+ return `${pm} ${script}`;
41
+ }
42
+ /** `<pm> install` command. */
43
+ export function pmInstall(pm) {
44
+ return `${pm} install`;
45
+ }
46
+ export function pageExt(fw) {
47
+ return fw === 'vue' ? '.vue' : '.tsx';
48
+ }
49
+ //# sourceMappingURL=package-managers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-managers.js","sourceRoot":"","sources":["../../src/templates/package-managers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAI7C;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAA;IACrD,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;QAAG,OAAO,KAAK,CAAA;IACvC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IACxC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IACxC,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;QAAG,OAAO,KAAK,CAAA;IAEvC,qFAAqF;IACrF,KAAK,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAU,EAAE,CAAC;QAClD,IAAI,CAAC;YACH,QAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;YAChD,OAAO,EAAE,CAAA;QACX,CAAC;QAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,MAAM,CAAC,EAAkB,EAAE,GAAW;IACpD,IAAI,EAAE,KAAK,KAAK;QAAG,OAAO,QAAQ,GAAG,EAAE,CAAA;IACvC,IAAI,EAAE,KAAK,MAAM;QAAE,OAAO,YAAY,GAAG,EAAE,CAAA;IAC3C,IAAI,EAAE,KAAK,KAAK;QAAG,OAAO,OAAO,GAAG,EAAE,CAAA;IACtC,OAAO,aAAa,GAAG,EAAE,CAAA;AAC3B,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,KAAK,CAAC,EAAkB,EAAE,MAAc;IACtD,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,WAAW,MAAM,EAAE,CAAA;IAC5C,OAAO,GAAG,EAAE,IAAI,MAAM,EAAE,CAAA;AAC1B,CAAC;AAED,8BAA8B;AAC9B,MAAM,UAAU,SAAS,CAAC,EAAkB;IAC1C,OAAO,GAAG,EAAE,UAAU,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAA6B;IACnD,OAAO,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAA;AACvC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { TemplateContext } from '../../templates.js';
2
+ export declare function aiChatPageConfig(ctx: TemplateContext): string;
3
+ export declare function aiChatPage(ctx: TemplateContext): string;
4
+ export declare function aiChatPageReact(ctx: TemplateContext): string;
5
+ export declare function aiChatPageVue(ctx: TemplateContext): string;
6
+ export declare function aiChatPageSolid(ctx: TemplateContext): string;
7
+ //# sourceMappingURL=ai-chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-chat.d.ts","sourceRoot":"","sources":["../../../src/templates/pages/ai-chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEzD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA2B7D;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAMvD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAsF5D;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAsE1D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CA0F5D"}
@@ -0,0 +1,285 @@
1
+ export function aiChatPageConfig(ctx) {
2
+ switch (ctx.primary) {
3
+ case 'vue':
4
+ return `import type { Config } from 'vike/types'
5
+ import vikeVue from 'vike-vue/config'
6
+
7
+ export default {
8
+ extends: vikeVue,
9
+ } satisfies Config
10
+ `;
11
+ case 'solid':
12
+ return `import type { Config } from 'vike/types'
13
+ import vikeSolid from 'vike-solid/config'
14
+
15
+ export default {
16
+ extends: vikeSolid,
17
+ } satisfies Config
18
+ `;
19
+ default:
20
+ return `import type { Config } from 'vike/types'
21
+ import vikeReact from 'vike-react/config'
22
+
23
+ export default {
24
+ extends: vikeReact,
25
+ } satisfies Config
26
+ `;
27
+ }
28
+ }
29
+ export function aiChatPage(ctx) {
30
+ switch (ctx.primary) {
31
+ case 'vue': return aiChatPageVue(ctx);
32
+ case 'solid': return aiChatPageSolid(ctx);
33
+ default: return aiChatPageReact(ctx);
34
+ }
35
+ }
36
+ export function aiChatPageReact(ctx) {
37
+ const cssImport = `import '@/index.css'\n`;
38
+ return `${cssImport}import { useState, useRef, useEffect } from 'react'
39
+
40
+ interface Message {
41
+ role: 'user' | 'assistant'
42
+ content: string
43
+ }
44
+
45
+ export default function Page() {
46
+ const [messages, setMessages] = useState<Message[]>([])
47
+ const [input, setInput] = useState('')
48
+ const [loading, setLoading] = useState(false)
49
+ const scrollRef = useRef<HTMLDivElement>(null)
50
+
51
+ useEffect(() => {
52
+ scrollRef.current?.scrollTo(0, scrollRef.current.scrollHeight)
53
+ }, [messages])
54
+
55
+ async function send(e: React.FormEvent) {
56
+ e.preventDefault()
57
+ if (!input.trim() || loading) return
58
+
59
+ const userMsg: Message = { role: 'user', content: input }
60
+ setMessages(prev => [...prev, userMsg])
61
+ setInput('')
62
+ setLoading(true)
63
+
64
+ try {
65
+ const res = await fetch('/api/ai/chat', {
66
+ method: 'POST',
67
+ headers: { 'Content-Type': 'application/json' },
68
+ body: JSON.stringify({ messages: [...messages, userMsg] }),
69
+ })
70
+ const json = await res.json() as { message: string }
71
+ setMessages(prev => [...prev, { role: 'assistant', content: json.message }])
72
+ } catch {
73
+ setMessages(prev => [...prev, { role: 'assistant', content: 'Something went wrong. Check your AI_PROVIDER and API key in .env.' }])
74
+ } finally {
75
+ setLoading(false)
76
+ }
77
+ }
78
+
79
+ return (
80
+ <div className="chat-wrap">
81
+ <div className="chat-column">
82
+ <div className="chat-header">
83
+ <h1 className="heading-lg">AI Chat</h1>
84
+ <a href="/" className="auth-link muted">← Home</a>
85
+ </div>
86
+
87
+ <div ref={scrollRef} className="chat-log">
88
+ {messages.length === 0 && (
89
+ <p className="empty-state">Send a message to start chatting.</p>
90
+ )}
91
+ {messages.map((msg, i) => (
92
+ <div key={i} className={\`chat-row \${msg.role === 'user' ? 'is-user' : 'is-assistant'}\`}>
93
+ <div className={\`chat-bubble \${msg.role === 'user' ? 'is-user' : 'is-assistant'}\`}>
94
+ {msg.content}
95
+ </div>
96
+ </div>
97
+ ))}
98
+ {loading && (
99
+ <div className="chat-row is-assistant">
100
+ <div className="chat-bubble is-assistant muted">Thinking...</div>
101
+ </div>
102
+ )}
103
+ </div>
104
+
105
+ <form onSubmit={send} className="form-inline chat-input">
106
+ <input
107
+ value={input}
108
+ onChange={e => setInput(e.target.value)}
109
+ placeholder="Type a message..."
110
+ disabled={loading}
111
+ className="form-input"
112
+ />
113
+ <button type="submit" disabled={loading} className="form-submit">
114
+ Send
115
+ </button>
116
+ </form>
117
+ </div>
118
+ </div>
119
+ )
120
+ }
121
+ `;
122
+ }
123
+ export function aiChatPageVue(ctx) {
124
+ const cssImport = `import '@/index.css'\n`;
125
+ return `<script setup lang="ts">
126
+ ${cssImport}import { ref, nextTick } from 'vue'
127
+
128
+ interface Message {
129
+ role: 'user' | 'assistant'
130
+ content: string
131
+ }
132
+
133
+ const messages = ref<Message[]>([])
134
+ const input = ref('')
135
+ const loading = ref(false)
136
+ const scrollEl = ref<HTMLDivElement>()
137
+
138
+ async function send(e: Event) {
139
+ e.preventDefault()
140
+ if (!input.value.trim() || loading.value) return
141
+
142
+ const userMsg: Message = { role: 'user', content: input.value }
143
+ messages.value.push(userMsg)
144
+ input.value = ''
145
+ loading.value = true
146
+
147
+ try {
148
+ const res = await fetch('/api/ai/chat', {
149
+ method: 'POST',
150
+ headers: { 'Content-Type': 'application/json' },
151
+ body: JSON.stringify({ messages: messages.value }),
152
+ })
153
+ const json = await res.json() as { message: string }
154
+ messages.value.push({ role: 'assistant', content: json.message })
155
+ } catch {
156
+ messages.value.push({ role: 'assistant', content: 'Something went wrong. Check your AI_PROVIDER and API key in .env.' })
157
+ } finally {
158
+ loading.value = false
159
+ await nextTick()
160
+ scrollEl.value?.scrollTo(0, scrollEl.value.scrollHeight)
161
+ }
162
+ }
163
+ </script>
164
+
165
+ <template>
166
+ <div class="chat-wrap">
167
+ <div class="chat-column">
168
+ <div class="chat-header">
169
+ <h1 class="heading-lg">AI Chat</h1>
170
+ <a href="/" class="auth-link muted">← Home</a>
171
+ </div>
172
+
173
+ <div ref="scrollEl" class="chat-log">
174
+ <p v-if="messages.length === 0" class="empty-state">Send a message to start chatting.</p>
175
+ <div v-for="(msg, i) in messages" :key="i" :class="['chat-row', msg.role === 'user' ? 'is-user' : 'is-assistant']">
176
+ <div :class="['chat-bubble', msg.role === 'user' ? 'is-user' : 'is-assistant']">
177
+ {{ msg.content }}
178
+ </div>
179
+ </div>
180
+ <div v-if="loading" class="chat-row is-assistant">
181
+ <div class="chat-bubble is-assistant muted">Thinking...</div>
182
+ </div>
183
+ </div>
184
+
185
+ <form @submit="send" class="form-inline chat-input">
186
+ <input v-model="input" placeholder="Type a message..." :disabled="loading" class="form-input" />
187
+ <button type="submit" :disabled="loading" class="form-submit">Send</button>
188
+ </form>
189
+ </div>
190
+ </div>
191
+ </template>
192
+ `;
193
+ }
194
+ export function aiChatPageSolid(ctx) {
195
+ const cssImport = `import '@/index.css'\n`;
196
+ return `${cssImport}import { createSignal, For, Show, onCleanup } from 'solid-js'
197
+
198
+ interface Message {
199
+ role: 'user' | 'assistant'
200
+ content: string
201
+ }
202
+
203
+ export default function Page() {
204
+ const [messages, setMessages] = createSignal<Message[]>([])
205
+ const [input, setInput] = createSignal('')
206
+ const [loading, setLoading] = createSignal(false)
207
+ let scrollEl: HTMLDivElement | undefined
208
+
209
+ function scrollToBottom() {
210
+ setTimeout(() => scrollEl?.scrollTo(0, scrollEl.scrollHeight), 0)
211
+ }
212
+
213
+ async function send(e: Event) {
214
+ e.preventDefault()
215
+ if (!input().trim() || loading()) return
216
+
217
+ const userMsg: Message = { role: 'user', content: input() }
218
+ setMessages(prev => [...prev, userMsg])
219
+ setInput('')
220
+ setLoading(true)
221
+ scrollToBottom()
222
+
223
+ try {
224
+ const res = await fetch('/api/ai/chat', {
225
+ method: 'POST',
226
+ headers: { 'Content-Type': 'application/json' },
227
+ body: JSON.stringify({ messages: [...messages()] }),
228
+ })
229
+ const json = await res.json() as { message: string }
230
+ setMessages(prev => [...prev, { role: 'assistant', content: json.message }])
231
+ } catch {
232
+ setMessages(prev => [...prev, { role: 'assistant', content: 'Something went wrong. Check your AI_PROVIDER and API key in .env.' }])
233
+ } finally {
234
+ setLoading(false)
235
+ scrollToBottom()
236
+ }
237
+ }
238
+
239
+ return (
240
+ <div class="chat-wrap">
241
+ <div class="chat-column">
242
+ <div class="chat-header">
243
+ <h1 class="heading-lg">AI Chat</h1>
244
+ <a href="/" class="auth-link muted">← Home</a>
245
+ </div>
246
+
247
+ <div ref={scrollEl} class="chat-log">
248
+ <Show when={messages().length === 0}>
249
+ <p class="empty-state">Send a message to start chatting.</p>
250
+ </Show>
251
+ <For each={messages()}>
252
+ {(msg) => (
253
+ <div class={\`chat-row \${msg.role === 'user' ? 'is-user' : 'is-assistant'}\`}>
254
+ <div class={\`chat-bubble \${msg.role === 'user' ? 'is-user' : 'is-assistant'}\`}>
255
+ {msg.content}
256
+ </div>
257
+ </div>
258
+ )}
259
+ </For>
260
+ <Show when={loading()}>
261
+ <div class="chat-row is-assistant">
262
+ <div class="chat-bubble is-assistant muted">Thinking...</div>
263
+ </div>
264
+ </Show>
265
+ </div>
266
+
267
+ <form onSubmit={send} class="form-inline chat-input">
268
+ <input
269
+ value={input()}
270
+ onInput={e => setInput(e.currentTarget.value)}
271
+ placeholder="Type a message..."
272
+ disabled={loading()}
273
+ class="form-input"
274
+ />
275
+ <button type="submit" disabled={loading()} class="form-submit">
276
+ Send
277
+ </button>
278
+ </form>
279
+ </div>
280
+ </div>
281
+ )
282
+ }
283
+ `;
284
+ }
285
+ //# sourceMappingURL=ai-chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-chat.js","sourceRoot":"","sources":["../../../src/templates/pages/ai-chat.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,GAAoB;IACnD,QAAQ,GAAG,CAAC,OAAO,EAAE,CAAC;QACpB,KAAK,KAAK;YACR,OAAO;;;;;;CAMZ,CAAA;QACG,KAAK,OAAO;YACV,OAAO;;;;;;CAMZ,CAAA;QACG;YACE,OAAO;;;;;;CAMZ,CAAA;IACC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAoB;IAC7C,QAAQ,GAAG,CAAC,OAAO,EAAE,CAAC;QACpB,KAAK,KAAK,CAAC,CAAG,OAAO,aAAa,CAAC,GAAG,CAAC,CAAA;QACvC,KAAK,OAAO,CAAC,CAAC,OAAO,eAAe,CAAC,GAAG,CAAC,CAAA;QACzC,OAAO,CAAC,CAAM,OAAO,eAAe,CAAC,GAAG,CAAC,CAAA;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,MAAM,SAAS,GAAG,wBAAwB,CAAA;IAC1C,OAAO,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmFpB,CAAA;AACD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAoB;IAChD,MAAM,SAAS,GAAG,wBAAwB,CAAA;IAC1C,OAAO;EACP,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkEV,CAAA;AACD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,MAAM,SAAS,GAAG,wBAAwB,CAAA;IAC1C,OAAO,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuFpB,CAAA;AACD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { TemplateContext } from '../../templates.js';
2
+ export declare function demoPageConfig(fw: 'react' | 'vue' | 'solid'): string;
3
+ export declare function demoPage(fw: 'react' | 'vue' | 'solid', ctx: TemplateContext): string;
4
+ //# sourceMappingURL=demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../../../src/templates/pages/demo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEzD,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CA2BpE;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,EAAE,GAAG,EAAE,eAAe,GAAG,MAAM,CA4CpF"}
@@ -0,0 +1,71 @@
1
+ export function demoPageConfig(fw) {
2
+ switch (fw) {
3
+ case 'vue':
4
+ return `import type { Config } from 'vike/types'
5
+ import vikeVue from 'vike-vue/config'
6
+
7
+ export default {
8
+ extends: vikeVue,
9
+ } satisfies Config
10
+ `;
11
+ case 'solid':
12
+ return `import type { Config } from 'vike/types'
13
+ import vikeSolid from 'vike-solid/config'
14
+
15
+ export default {
16
+ extends: vikeSolid,
17
+ } satisfies Config
18
+ `;
19
+ default: // react
20
+ return `import type { Config } from 'vike/types'
21
+ import vikeReact from 'vike-react/config'
22
+
23
+ export default {
24
+ extends: vikeReact,
25
+ } satisfies Config
26
+ `;
27
+ }
28
+ }
29
+ export function demoPage(fw, ctx) {
30
+ const { primary } = ctx;
31
+ switch (fw) {
32
+ case 'react':
33
+ return `export default function Page() {
34
+ return (
35
+ <div className="error-wrap">
36
+ <h1 className="heading-lg">Hello from React</h1>
37
+ <p className="muted">React demo page — running alongside ${primary}.</p>
38
+ <a href="/" className="auth-link muted">← Back to home</a>
39
+ </div>
40
+ )
41
+ }
42
+ `;
43
+ case 'vue':
44
+ return `<script setup lang="ts">
45
+ import '@/index.css'
46
+ </script>
47
+
48
+ <template>
49
+ <div class="error-wrap">
50
+ <h1 class="heading-lg">Hello from Vue</h1>
51
+ <p class="muted">Vue demo page — running alongside ${primary}.</p>
52
+ <a href="/" class="auth-link muted">← Back to home</a>
53
+ </div>
54
+ </template>
55
+ `;
56
+ case 'solid':
57
+ return `import '@/index.css'
58
+
59
+ export default function Page() {
60
+ return (
61
+ <div class="error-wrap">
62
+ <h1 class="heading-lg">Hello from Solid</h1>
63
+ <p class="muted">Solid demo page — running alongside ${primary}.</p>
64
+ <a href="/" class="auth-link muted">← Back to home</a>
65
+ </div>
66
+ )
67
+ }
68
+ `;
69
+ }
70
+ }
71
+ //# sourceMappingURL=demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.js","sourceRoot":"","sources":["../../../src/templates/pages/demo.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,cAAc,CAAC,EAA6B;IAC1D,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,KAAK;YACR,OAAO;;;;;;CAMZ,CAAA;QACG,KAAK,OAAO;YACV,OAAO;;;;;;CAMZ,CAAA;QACG,SAAS,QAAQ;YACf,OAAO;;;;;;CAMZ,CAAA;IACC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAA6B,EAAE,GAAoB;IAC1E,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAA;IAEvB,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,OAAO;YACV,OAAO;;;;iEAIoD,OAAO;;;;;CAKvE,CAAA;QAEG,KAAK,KAAK;YACR,OAAO;;;;;;;yDAO4C,OAAO;;;;CAI/D,CAAA;QAEG,KAAK,OAAO;YACV,OAAO;;;;;;6DAMgD,OAAO;;;;;CAKnE,CAAA;IACC,CAAC;AACH,CAAC"}