create-rudder-app 0.3.1 → 0.5.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 (283) hide show
  1. package/dist/index.js +98 -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 +48 -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/crypt.d.ts +2 -0
  48. package/dist/templates/configs/crypt.d.ts.map +1 -0
  49. package/dist/templates/configs/crypt.js +16 -0
  50. package/dist/templates/configs/crypt.js.map +1 -0
  51. package/dist/templates/configs/database.d.ts +3 -0
  52. package/dist/templates/configs/database.d.ts.map +1 -0
  53. package/dist/templates/configs/database.js +28 -0
  54. package/dist/templates/configs/database.js.map +1 -0
  55. package/dist/templates/configs/hash.d.ts +2 -0
  56. package/dist/templates/configs/hash.d.ts.map +1 -0
  57. package/dist/templates/configs/hash.js +12 -0
  58. package/dist/templates/configs/hash.js.map +1 -0
  59. package/dist/templates/configs/horizon.d.ts +2 -0
  60. package/dist/templates/configs/horizon.d.ts.map +1 -0
  61. package/dist/templates/configs/horizon.js +30 -0
  62. package/dist/templates/configs/horizon.js.map +1 -0
  63. package/dist/templates/configs/index.d.ts +3 -0
  64. package/dist/templates/configs/index.d.ts.map +1 -0
  65. package/dist/templates/configs/index.js +92 -0
  66. package/dist/templates/configs/index.js.map +1 -0
  67. package/dist/templates/configs/localization.d.ts +2 -0
  68. package/dist/templates/configs/localization.d.ts.map +1 -0
  69. package/dist/templates/configs/localization.js +13 -0
  70. package/dist/templates/configs/localization.js.map +1 -0
  71. package/dist/templates/configs/log.d.ts +2 -0
  72. package/dist/templates/configs/log.d.ts.map +1 -0
  73. package/dist/templates/configs/log.js +40 -0
  74. package/dist/templates/configs/log.js.map +1 -0
  75. package/dist/templates/configs/mail.d.ts +2 -0
  76. package/dist/templates/configs/mail.d.ts.map +1 -0
  77. package/dist/templates/configs/mail.js +33 -0
  78. package/dist/templates/configs/mail.js.map +1 -0
  79. package/dist/templates/configs/passport.d.ts +2 -0
  80. package/dist/templates/configs/passport.d.ts.map +1 -0
  81. package/dist/templates/configs/passport.js +22 -0
  82. package/dist/templates/configs/passport.js.map +1 -0
  83. package/dist/templates/configs/pennant.d.ts +2 -0
  84. package/dist/templates/configs/pennant.d.ts.map +1 -0
  85. package/dist/templates/configs/pennant.js +16 -0
  86. package/dist/templates/configs/pennant.js.map +1 -0
  87. package/dist/templates/configs/pulse.d.ts +2 -0
  88. package/dist/templates/configs/pulse.d.ts.map +1 -0
  89. package/dist/templates/configs/pulse.js +21 -0
  90. package/dist/templates/configs/pulse.js.map +1 -0
  91. package/dist/templates/configs/queue.d.ts +2 -0
  92. package/dist/templates/configs/queue.d.ts.map +1 -0
  93. package/dist/templates/configs/queue.js +28 -0
  94. package/dist/templates/configs/queue.js.map +1 -0
  95. package/dist/templates/configs/sanctum.d.ts +2 -0
  96. package/dist/templates/configs/sanctum.d.ts.map +1 -0
  97. package/dist/templates/configs/sanctum.js +19 -0
  98. package/dist/templates/configs/sanctum.js.map +1 -0
  99. package/dist/templates/configs/server.d.ts +2 -0
  100. package/dist/templates/configs/server.d.ts.map +1 -0
  101. package/dist/templates/configs/server.js +15 -0
  102. package/dist/templates/configs/server.js.map +1 -0
  103. package/dist/templates/configs/session.d.ts +2 -0
  104. package/dist/templates/configs/session.d.ts.map +1 -0
  105. package/dist/templates/configs/session.js +26 -0
  106. package/dist/templates/configs/session.js.map +1 -0
  107. package/dist/templates/configs/socialite.d.ts +2 -0
  108. package/dist/templates/configs/socialite.d.ts.map +1 -0
  109. package/dist/templates/configs/socialite.js +27 -0
  110. package/dist/templates/configs/socialite.js.map +1 -0
  111. package/dist/templates/configs/storage.d.ts +2 -0
  112. package/dist/templates/configs/storage.d.ts.map +1 -0
  113. package/dist/templates/configs/storage.js +35 -0
  114. package/dist/templates/configs/storage.js.map +1 -0
  115. package/dist/templates/configs/sync.d.ts +3 -0
  116. package/dist/templates/configs/sync.d.ts.map +1 -0
  117. package/dist/templates/configs/sync.js +17 -0
  118. package/dist/templates/configs/sync.js.map +1 -0
  119. package/dist/templates/configs/telescope.d.ts +2 -0
  120. package/dist/templates/configs/telescope.d.ts.map +1 -0
  121. package/dist/templates/configs/telescope.js +25 -0
  122. package/dist/templates/configs/telescope.js.map +1 -0
  123. package/dist/templates/css/index.d.ts +3 -0
  124. package/dist/templates/css/index.d.ts.map +1 -0
  125. package/dist/templates/css/index.js +140 -0
  126. package/dist/templates/css/index.js.map +1 -0
  127. package/dist/templates/css/plain.d.ts +2 -0
  128. package/dist/templates/css/plain.d.ts.map +1 -0
  129. package/dist/templates/css/plain.js +373 -0
  130. package/dist/templates/css/plain.js.map +1 -0
  131. package/dist/templates/css/tailwind.d.ts +2 -0
  132. package/dist/templates/css/tailwind.d.ts.map +1 -0
  133. package/dist/templates/css/tailwind.js +176 -0
  134. package/dist/templates/css/tailwind.js.map +1 -0
  135. package/dist/templates/demos/avatar.d.ts +3 -0
  136. package/dist/templates/demos/avatar.d.ts.map +1 -0
  137. package/dist/templates/demos/avatar.js +182 -0
  138. package/dist/templates/demos/avatar.js.map +1 -0
  139. package/dist/templates/demos/cache.d.ts +3 -0
  140. package/dist/templates/demos/cache.d.ts.map +1 -0
  141. package/dist/templates/demos/cache.js +99 -0
  142. package/dist/templates/demos/cache.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/fibonacci.d.ts +7 -0
  148. package/dist/templates/demos/fibonacci.d.ts.map +1 -0
  149. package/dist/templates/demos/fibonacci.js +172 -0
  150. package/dist/templates/demos/fibonacci.js.map +1 -0
  151. package/dist/templates/demos/http.d.ts +3 -0
  152. package/dist/templates/demos/http.d.ts.map +1 -0
  153. package/dist/templates/demos/http.js +117 -0
  154. package/dist/templates/demos/http.js.map +1 -0
  155. package/dist/templates/demos/index-view.d.ts +3 -0
  156. package/dist/templates/demos/index-view.d.ts.map +1 -0
  157. package/dist/templates/demos/index-view.js +144 -0
  158. package/dist/templates/demos/index-view.js.map +1 -0
  159. package/dist/templates/demos/localization.d.ts +4 -0
  160. package/dist/templates/demos/localization.d.ts.map +1 -0
  161. package/dist/templates/demos/localization.js +130 -0
  162. package/dist/templates/demos/localization.js.map +1 -0
  163. package/dist/templates/demos/mail.d.ts +4 -0
  164. package/dist/templates/demos/mail.d.ts.map +1 -0
  165. package/dist/templates/demos/mail.js +127 -0
  166. package/dist/templates/demos/mail.js.map +1 -0
  167. package/dist/templates/demos/notifications.d.ts +4 -0
  168. package/dist/templates/demos/notifications.d.ts.map +1 -0
  169. package/dist/templates/demos/notifications.js +133 -0
  170. package/dist/templates/demos/notifications.js.map +1 -0
  171. package/dist/templates/demos/pennant.d.ts +8 -0
  172. package/dist/templates/demos/pennant.d.ts.map +1 -0
  173. package/dist/templates/demos/pennant.js +138 -0
  174. package/dist/templates/demos/pennant.js.map +1 -0
  175. package/dist/templates/demos/queue.d.ts +4 -0
  176. package/dist/templates/demos/queue.d.ts.map +1 -0
  177. package/dist/templates/demos/queue.js +107 -0
  178. package/dist/templates/demos/queue.js.map +1 -0
  179. package/dist/templates/demos/registry.d.ts +13 -0
  180. package/dist/templates/demos/registry.d.ts.map +1 -0
  181. package/dist/templates/demos/registry.js +26 -0
  182. package/dist/templates/demos/registry.js.map +1 -0
  183. package/dist/templates/demos/rudder-socket.d.ts +2 -0
  184. package/dist/templates/demos/rudder-socket.d.ts.map +1 -0
  185. package/dist/templates/demos/rudder-socket.js +95 -0
  186. package/dist/templates/demos/rudder-socket.js.map +1 -0
  187. package/dist/templates/demos/sync.d.ts +2 -0
  188. package/dist/templates/demos/sync.d.ts.map +1 -0
  189. package/dist/templates/demos/sync.js +97 -0
  190. package/dist/templates/demos/sync.js.map +1 -0
  191. package/dist/templates/demos/system-info.d.ts +3 -0
  192. package/dist/templates/demos/system-info.d.ts.map +1 -0
  193. package/dist/templates/demos/system-info.js +142 -0
  194. package/dist/templates/demos/system-info.js.map +1 -0
  195. package/dist/templates/demos/todos.d.ts +6 -0
  196. package/dist/templates/demos/todos.d.ts.map +1 -0
  197. package/dist/templates/demos/todos.js +246 -0
  198. package/dist/templates/demos/todos.js.map +1 -0
  199. package/dist/templates/demos/ws.d.ts +2 -0
  200. package/dist/templates/demos/ws.d.ts.map +1 -0
  201. package/dist/templates/demos/ws.js +106 -0
  202. package/dist/templates/demos/ws.js.map +1 -0
  203. package/dist/templates/env.d.ts +7 -0
  204. package/dist/templates/env.d.ts.map +1 -0
  205. package/dist/templates/env.js +113 -0
  206. package/dist/templates/env.js.map +1 -0
  207. package/dist/templates/package-json.d.ts +3 -0
  208. package/dist/templates/package-json.d.ts.map +1 -0
  209. package/dist/templates/package-json.js +193 -0
  210. package/dist/templates/package-json.js.map +1 -0
  211. package/dist/templates/package-managers.d.ts +14 -0
  212. package/dist/templates/package-managers.d.ts.map +1 -0
  213. package/dist/templates/package-managers.js +49 -0
  214. package/dist/templates/package-managers.js.map +1 -0
  215. package/dist/templates/pages/ai-chat.d.ts +7 -0
  216. package/dist/templates/pages/ai-chat.d.ts.map +1 -0
  217. package/dist/templates/pages/ai-chat.js +285 -0
  218. package/dist/templates/pages/ai-chat.js.map +1 -0
  219. package/dist/templates/pages/demo.d.ts +4 -0
  220. package/dist/templates/pages/demo.d.ts.map +1 -0
  221. package/dist/templates/pages/demo.js +71 -0
  222. package/dist/templates/pages/demo.js.map +1 -0
  223. package/dist/templates/pages/error.d.ts +7 -0
  224. package/dist/templates/pages/error.d.ts.map +1 -0
  225. package/dist/templates/pages/error.js +148 -0
  226. package/dist/templates/pages/error.js.map +1 -0
  227. package/dist/templates/pages/index.d.ts +9 -0
  228. package/dist/templates/pages/index.d.ts.map +1 -0
  229. package/dist/templates/pages/index.js +311 -0
  230. package/dist/templates/pages/index.js.map +1 -0
  231. package/dist/templates/prisma/auth.d.ts +2 -0
  232. package/dist/templates/prisma/auth.d.ts.map +1 -0
  233. package/dist/templates/prisma/auth.js +22 -0
  234. package/dist/templates/prisma/auth.js.map +1 -0
  235. package/dist/templates/prisma/base.d.ts +3 -0
  236. package/dist/templates/prisma/base.d.ts.map +1 -0
  237. package/dist/templates/prisma/base.js +14 -0
  238. package/dist/templates/prisma/base.js.map +1 -0
  239. package/dist/templates/prisma/config.d.ts +3 -0
  240. package/dist/templates/prisma/config.d.ts.map +1 -0
  241. package/dist/templates/prisma/config.js +15 -0
  242. package/dist/templates/prisma/config.js.map +1 -0
  243. package/dist/templates/prisma/notification.d.ts +2 -0
  244. package/dist/templates/prisma/notification.d.ts.map +1 -0
  245. package/dist/templates/prisma/notification.js +16 -0
  246. package/dist/templates/prisma/notification.js.map +1 -0
  247. package/dist/templates/prisma/passport.d.ts +2 -0
  248. package/dist/templates/prisma/passport.d.ts.map +1 -0
  249. package/dist/templates/prisma/passport.js +69 -0
  250. package/dist/templates/prisma/passport.js.map +1 -0
  251. package/dist/templates/routes/api.d.ts +3 -0
  252. package/dist/templates/routes/api.d.ts.map +1 -0
  253. package/dist/templates/routes/api.js +166 -0
  254. package/dist/templates/routes/api.js.map +1 -0
  255. package/dist/templates/routes/console.d.ts +2 -0
  256. package/dist/templates/routes/console.d.ts.map +1 -0
  257. package/dist/templates/routes/console.js +22 -0
  258. package/dist/templates/routes/console.js.map +1 -0
  259. package/dist/templates/routes/web.d.ts +4 -0
  260. package/dist/templates/routes/web.d.ts.map +1 -0
  261. package/dist/templates/routes/web.js +155 -0
  262. package/dist/templates/routes/web.js.map +1 -0
  263. package/dist/templates/server.d.ts +2 -0
  264. package/dist/templates/server.d.ts.map +1 -0
  265. package/dist/templates/server.js +10 -0
  266. package/dist/templates/server.js.map +1 -0
  267. package/dist/templates/tsconfig.d.ts +3 -0
  268. package/dist/templates/tsconfig.d.ts.map +1 -0
  269. package/dist/templates/tsconfig.js +33 -0
  270. package/dist/templates/tsconfig.js.map +1 -0
  271. package/dist/templates/views/welcome.d.ts +6 -0
  272. package/dist/templates/views/welcome.d.ts.map +1 -0
  273. package/dist/templates/views/welcome.js +396 -0
  274. package/dist/templates/views/welcome.js.map +1 -0
  275. package/dist/templates/vite.d.ts +3 -0
  276. package/dist/templates/vite.d.ts.map +1 -0
  277. package/dist/templates/vite.js +61 -0
  278. package/dist/templates/vite.js.map +1 -0
  279. package/dist/templates.d.ts +27 -17
  280. package/dist/templates.d.ts.map +1 -1
  281. package/dist/templates.js +158 -3778
  282. package/dist/templates.js.map +1 -1
  283. package/package.json +2 -2
@@ -0,0 +1,311 @@
1
+ export function pagesRootConfig(ctx) {
2
+ if (ctx.frameworks.length === 1) {
3
+ const rendererImport = ctx.primary === 'vue'
4
+ ? `import vikeVue from 'vike-vue/config'`
5
+ : ctx.primary === 'solid'
6
+ ? `import vikeSolid from 'vike-solid/config'`
7
+ : `import vikeReact from 'vike-react/config'`;
8
+ const rendererVar = ctx.primary === 'vue' ? 'vikeVue' : ctx.primary === 'solid' ? 'vikeSolid' : 'vikeReact';
9
+ return `import type { Config } from 'vike/types'
10
+ ${rendererImport}
11
+
12
+ export default {
13
+ extends: [${rendererVar}],
14
+ } satisfies Config
15
+ `;
16
+ }
17
+ // Multi-framework: no renderer in root config — each page picks its own
18
+ return `import type { Config } from 'vike/types'
19
+
20
+ export default {} satisfies Config
21
+ `;
22
+ }
23
+ export function pagesIndexConfig(ctx) {
24
+ switch (ctx.primary) {
25
+ case 'vue':
26
+ return `import type { Config } from 'vike/types'
27
+ import vikeVue from 'vike-vue/config'
28
+
29
+ export default {
30
+ extends: vikeVue,
31
+ } satisfies Config
32
+ `;
33
+ case 'solid':
34
+ return `import type { Config } from 'vike/types'
35
+ import vikeSolid from 'vike-solid/config'
36
+
37
+ export default {
38
+ extends: vikeSolid,
39
+ } satisfies Config
40
+ `;
41
+ default: // react
42
+ return `import type { Config } from 'vike/types'
43
+ import vikeReact from 'vike-react/config'
44
+
45
+ export default {
46
+ extends: vikeReact,
47
+ } satisfies Config
48
+ `;
49
+ }
50
+ }
51
+ export function pagesIndexData(ctx) {
52
+ if (!ctx.packages.auth) {
53
+ return `export type Data = {
54
+ message: string
55
+ }
56
+
57
+ export async function data(): Promise<Data> {
58
+ return { message: 'Welcome to RudderJS' }
59
+ }
60
+ `;
61
+ }
62
+ return `import { app } from '@rudderjs/core'
63
+ import { AuthManager, Auth, runWithAuth } from '@rudderjs/auth'
64
+
65
+ export type Data = {
66
+ user: { id: string; name: string; email: string } | null
67
+ }
68
+
69
+ export async function data(): Promise<Data> {
70
+ const manager = app().make<AuthManager>('auth.manager')
71
+ let user: Data['user'] = null
72
+ await runWithAuth(manager, async () => {
73
+ const authUser = await Auth.user()
74
+ if (authUser) {
75
+ const record = authUser as unknown as Record<string, unknown>
76
+ user = {
77
+ id: String(authUser.getAuthIdentifier()),
78
+ name: String(record['name'] ?? ''),
79
+ email: String(record['email'] ?? ''),
80
+ }
81
+ }
82
+ })
83
+ return { user }
84
+ }
85
+ `;
86
+ }
87
+ export function pagesIndexPage(ctx) {
88
+ switch (ctx.primary) {
89
+ case 'vue': return pagesIndexPageVue(ctx);
90
+ case 'solid': return pagesIndexPageSolid(ctx);
91
+ default: return pagesIndexPageReact(ctx);
92
+ }
93
+ }
94
+ export function pagesIndexPageReact(ctx) {
95
+ const cssImport = `import '@/index.css'\n`;
96
+ const extraLinks = [];
97
+ if (ctx.packages.ai)
98
+ extraLinks.push(' <a href="/ai-chat" className="auth-link">AI Chat</a>');
99
+ const extraLinksStr = extraLinks.length > 0 ? '\n' + extraLinks.join('\n') : '';
100
+ if (!ctx.packages.auth) {
101
+ return `${cssImport}import { useData } from 'vike-react/useData'
102
+ import type { Data } from './+data.js'
103
+
104
+ export default function Page() {
105
+ const data = useData<Data>()
106
+
107
+ return (
108
+ <div className="error-wrap">
109
+ <h1 className="heading-lg">${ctx.name}</h1>
110
+ <p className="muted">Built with RudderJS — Laravel-inspired Node.js framework.</p>
111
+
112
+ <div className="footer-links muted">
113
+ <a href="/api/health" className="auth-link">API Health</a>${extraLinksStr}
114
+ </div>
115
+ </div>
116
+ )
117
+ }
118
+ `;
119
+ }
120
+ return `${cssImport}import { useState } from 'react'
121
+ import { useData } from 'vike-react/useData'
122
+ import type { Data } from './+data.js'
123
+
124
+ export default function Page() {
125
+ const data = useData<Data>()
126
+ const [user, setUser] = useState(data.user)
127
+
128
+ async function signOut() {
129
+ await fetch('/api/auth/sign-out', {
130
+ method: 'POST',
131
+ headers: { 'Content-Type': 'application/json' },
132
+ body: '{}',
133
+ })
134
+ window.location.href = '/'
135
+ }
136
+
137
+ return (
138
+ <div className="error-wrap">
139
+ <h1 className="heading-lg">${ctx.name}</h1>
140
+ <p className="muted">Built with RudderJS — Laravel-inspired Node.js framework.</p>
141
+
142
+ {user ? (
143
+ <>
144
+ <p className="nav-badge">
145
+ Signed in as <strong>{user.name}</strong>
146
+ </p>
147
+ <div className="footer-links">
148
+ <button onClick={signOut} className="nav-button">Sign out</button>
149
+ </div>
150
+ </>
151
+ ) : (
152
+ <div className="footer-links">
153
+ <a href="/register" className="nav-button">Register</a>
154
+ <a href="/login" className="nav-button">Login</a>
155
+ </div>
156
+ )}
157
+
158
+ <div className="footer-links muted">
159
+ <a href="/api/health" className="auth-link">API Health</a>
160
+ <a href="/api/me" className="auth-link">Session Info</a>${extraLinksStr}
161
+ </div>
162
+ </div>
163
+ )
164
+ }
165
+ `;
166
+ }
167
+ export function pagesIndexPageVue(ctx) {
168
+ const cssImport = `import '@/index.css'\n`;
169
+ const extraLinks = [];
170
+ if (ctx.packages.ai)
171
+ extraLinks.push(' <a href="/ai-chat" class="auth-link">AI Chat</a>');
172
+ const extraStr = extraLinks.length > 0 ? '\n' + extraLinks.join('\n') : '';
173
+ if (!ctx.packages.auth) {
174
+ return `<script setup lang="ts">
175
+ ${cssImport}import { useData } from 'vike-vue/useData'
176
+ import type { Data } from './+data.js'
177
+
178
+ const data = useData<Data>()
179
+ </script>
180
+
181
+ <template>
182
+ <div class="error-wrap">
183
+ <h1 class="heading-lg">${ctx.name}</h1>
184
+ <p class="muted">Built with RudderJS — Laravel-inspired Node.js framework.</p>
185
+
186
+ <div class="footer-links muted">
187
+ <a href="/api/health" class="auth-link">API Health</a>${extraStr}
188
+ </div>
189
+ </div>
190
+ </template>
191
+ `;
192
+ }
193
+ return `<script setup lang="ts">
194
+ ${cssImport}import { ref } from 'vue'
195
+ import { useData } from 'vike-vue/useData'
196
+ import type { Data } from './+data.js'
197
+
198
+ const data = useData<Data>()
199
+ const user = ref(data.user)
200
+
201
+ async function signOut() {
202
+ await fetch('/api/auth/sign-out', {
203
+ method: 'POST',
204
+ headers: { 'Content-Type': 'application/json' },
205
+ body: '{}',
206
+ })
207
+ window.location.href = '/'
208
+ }
209
+ </script>
210
+
211
+ <template>
212
+ <div class="error-wrap">
213
+ <h1 class="heading-lg">${ctx.name}</h1>
214
+ <p class="muted">Built with RudderJS — Laravel-inspired Node.js framework.</p>
215
+
216
+ <template v-if="user">
217
+ <p class="nav-badge">
218
+ Signed in as <strong>{{ user.name }}</strong>
219
+ </p>
220
+ <div class="footer-links">
221
+ <button @click="signOut" class="nav-button">Sign out</button>
222
+ </div>
223
+ </template>
224
+ <div v-else class="footer-links">
225
+ <a href="/register" class="nav-button">Register</a>
226
+ <a href="/login" class="nav-button">Login</a>
227
+ </div>
228
+
229
+ <div class="footer-links muted">
230
+ <a href="/api/health" class="auth-link">API Health</a>
231
+ <a href="/api/me" class="auth-link">Session Info</a>${extraStr}
232
+ </div>
233
+ </div>
234
+ </template>
235
+ `;
236
+ }
237
+ export function pagesIndexPageSolid(ctx) {
238
+ const cssImport = `import '@/index.css'\n`;
239
+ const extraLinks = [];
240
+ if (ctx.packages.ai)
241
+ extraLinks.push(' <a href="/ai-chat" class="auth-link">AI Chat</a>');
242
+ const extraStr = extraLinks.length > 0 ? '\n' + extraLinks.join('\n') : '';
243
+ if (!ctx.packages.auth) {
244
+ return `${cssImport}import { useData } from 'vike-solid/useData'
245
+ import type { Data } from './+data.js'
246
+
247
+ export default function Page() {
248
+ const data = useData<Data>()
249
+
250
+ return (
251
+ <div class="error-wrap">
252
+ <h1 class="heading-lg">${ctx.name}</h1>
253
+ <p class="muted">Built with RudderJS — Laravel-inspired Node.js framework.</p>
254
+
255
+ <div class="footer-links muted">
256
+ <a href="/api/health" class="auth-link">API Health</a>${extraStr}
257
+ </div>
258
+ </div>
259
+ )
260
+ }
261
+ `;
262
+ }
263
+ return `${cssImport}import { createSignal, Show } from 'solid-js'
264
+ import { useData } from 'vike-solid/useData'
265
+ import type { Data } from './+data.js'
266
+
267
+ export default function Page() {
268
+ const data = useData<Data>()
269
+ const [user, setUser] = createSignal(data.user)
270
+
271
+ async function signOut() {
272
+ await fetch('/api/auth/sign-out', {
273
+ method: 'POST',
274
+ headers: { 'Content-Type': 'application/json' },
275
+ body: '{}',
276
+ })
277
+ window.location.href = '/'
278
+ }
279
+
280
+ return (
281
+ <div class="error-wrap">
282
+ <h1 class="heading-lg">${ctx.name}</h1>
283
+ <p class="muted">Built with RudderJS — Laravel-inspired Node.js framework.</p>
284
+
285
+ <Show
286
+ when={user()}
287
+ fallback={
288
+ <div class="footer-links">
289
+ <a href="/register" class="nav-button">Register</a>
290
+ <a href="/login" class="nav-button">Login</a>
291
+ </div>
292
+ }
293
+ >
294
+ <p class="nav-badge">
295
+ Signed in as <strong>{user()!.name}</strong>
296
+ </p>
297
+ <div class="footer-links">
298
+ <button onClick={signOut} class="nav-button">Sign out</button>
299
+ </div>
300
+ </Show>
301
+
302
+ <div class="footer-links muted">
303
+ <a href="/api/health" class="auth-link">API Health</a>
304
+ <a href="/api/me" class="auth-link">Session Info</a>${extraStr}
305
+ </div>
306
+ </div>
307
+ )
308
+ }
309
+ `;
310
+ }
311
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/pages/index.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAAC,GAAoB;IAClD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,KAAK,KAAK;YAC1C,CAAC,CAAC,uCAAuC;YACzC,CAAC,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO;gBACvB,CAAC,CAAC,2CAA2C;gBAC7C,CAAC,CAAC,2CAA2C,CAAA;QACjD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAA;QAC3G,OAAO;EACT,cAAc;;;cAGF,WAAW;;CAExB,CAAA;IACC,CAAC;IAED,wEAAwE;IACxE,OAAO;;;CAGR,CAAA;AACD,CAAC;AAED,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,SAAS,QAAQ;YACf,OAAO;;;;;;CAMZ,CAAA;IACC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAoB;IACjD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACvB,OAAO;;;;;;;CAOV,CAAA;IACC,CAAC;IAED,OAAO;;;;;;;;;;;;;;;;;;;;;;;CAuBR,CAAA;AACD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAoB;IACjD,QAAQ,GAAG,CAAC,OAAO,EAAE,CAAC;QACpB,KAAK,KAAK,CAAC,CAAG,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;QAC3C,KAAK,OAAO,CAAC,CAAC,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAA;QAC7C,OAAO,CAAC,CAAM,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAA;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAoB;IACtD,MAAM,SAAS,GAAG,wBAAwB,CAAA;IAC1C,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE;QAAE,UAAU,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAA;IACpG,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAE/E,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACvB,OAAO,GAAG,SAAS;;;;;;;;mCAQY,GAAG,CAAC,IAAI;;;;oEAIyB,aAAa;;;;;CAKhF,CAAA;IACC,CAAC;IAED,OAAO,GAAG,SAAS;;;;;;;;;;;;;;;;;;;mCAmBc,GAAG,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;kEAqBuB,aAAa;;;;;CAK9E,CAAA;AACD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAoB;IACpD,MAAM,SAAS,GAAG,wBAAwB,CAAA;IAC1C,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE;QAAE,UAAU,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;IAC9F,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAE1E,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACvB,OAAO;EACT,SAAS;;;;;;;;6BAQkB,GAAG,CAAC,IAAI;;;;8DAIyB,QAAQ;;;;CAIrE,CAAA;IACC,CAAC;IAED,OAAO;EACP,SAAS;;;;;;;;;;;;;;;;;;;6BAmBkB,GAAG,CAAC,IAAI;;;;;;;;;;;;;;;;;;4DAkBuB,QAAQ;;;;CAInE,CAAA;AACD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAoB;IACtD,MAAM,SAAS,GAAG,wBAAwB,CAAA;IAC1C,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE;QAAE,UAAU,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;IAChG,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAE1E,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACvB,OAAO,GAAG,SAAS;;;;;;;;+BAQQ,GAAG,CAAC,IAAI;;;;gEAIyB,QAAQ;;;;;CAKvE,CAAA;IACC,CAAC;IAED,OAAO,GAAG,SAAS;;;;;;;;;;;;;;;;;;;+BAmBU,GAAG,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;8DAsBuB,QAAQ;;;;;CAKrE,CAAA;AACD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function prismaAuth(): string;
2
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/templates/prisma/auth.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,IAAI,MAAM,CAoBnC"}
@@ -0,0 +1,22 @@
1
+ export function prismaAuth() {
2
+ return `model User {
3
+ id String @id @default(cuid())
4
+ name String
5
+ email String @unique
6
+ password String?
7
+ emailVerified Boolean @default(false)
8
+ image String?
9
+ role String @default("user")
10
+ rememberToken String?
11
+ createdAt DateTime @default(now())
12
+ updatedAt DateTime @updatedAt
13
+ }
14
+
15
+ model PasswordResetToken {
16
+ email String @id
17
+ token String
18
+ createdAt DateTime @default(now())
19
+ }
20
+ `;
21
+ }
22
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/templates/prisma/auth.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU;IACxB,OAAO;;;;;;;;;;;;;;;;;;CAkBR,CAAA;AACD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TemplateContext } from '../../templates.js';
2
+ export declare function prismaBase(ctx: TemplateContext): string;
3
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/templates/prisma/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEzD,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAavD"}
@@ -0,0 +1,14 @@
1
+ export function prismaBase(ctx) {
2
+ const provider = ctx.db === 'sqlite' ? 'sqlite'
3
+ : ctx.db === 'postgresql' ? 'postgresql'
4
+ : 'mysql';
5
+ return `generator client {
6
+ provider = "prisma-client-js"
7
+ }
8
+
9
+ datasource db {
10
+ provider = "${provider}"
11
+ }
12
+ `;
13
+ }
14
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/templates/prisma/base.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,GAAoB;IAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ;QAC7C,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY;YACxC,CAAC,CAAC,OAAO,CAAA;IAEX,OAAO;;;;;gBAKO,QAAQ;;CAEvB,CAAA;AACD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TemplateContext } from '../../templates.js';
2
+ export declare function prismaConfig(ctx: TemplateContext): string;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/templates/prisma/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEzD,wBAAgB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAczD"}
@@ -0,0 +1,15 @@
1
+ export function prismaConfig(ctx) {
2
+ const dbUrl = ctx.db === 'sqlite'
3
+ ? "process.env['DATABASE_URL'] ?? 'file:./dev.db'"
4
+ : "process.env['DATABASE_URL']!";
5
+ return `import { defineConfig } from 'prisma/config'
6
+
7
+ export default defineConfig({
8
+ schema: 'prisma/schema',
9
+ datasource: {
10
+ url: ${dbUrl},
11
+ },
12
+ })
13
+ `;
14
+ }
15
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/templates/prisma/config.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,GAAoB;IAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,KAAK,QAAQ;QAC/B,CAAC,CAAC,gDAAgD;QAClD,CAAC,CAAC,8BAA8B,CAAA;IAElC,OAAO;;;;;WAKE,KAAK;;;CAGf,CAAA;AACD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function prismaNotification(): string;
2
+ //# sourceMappingURL=notification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../../src/templates/prisma/notification.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,IAAI,MAAM,CAc3C"}
@@ -0,0 +1,16 @@
1
+ export function prismaNotification() {
2
+ return `model Notification {
3
+ id String @id @default(cuid())
4
+ notifiable_id String
5
+ notifiable_type String
6
+ type String
7
+ data String
8
+ read_at String?
9
+ created_at String
10
+ updated_at String
11
+
12
+ @@index([notifiable_type, notifiable_id])
13
+ }
14
+ `;
15
+ }
16
+ //# sourceMappingURL=notification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification.js","sourceRoot":"","sources":["../../../src/templates/prisma/notification.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB;IAChC,OAAO;;;;;;;;;;;;CAYR,CAAA;AACD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function prismaPassport(): string;
2
+ //# sourceMappingURL=passport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passport.d.ts","sourceRoot":"","sources":["../../../src/templates/prisma/passport.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,IAAI,MAAM,CAmEvC"}
@@ -0,0 +1,69 @@
1
+ export function prismaPassport() {
2
+ return `model OAuthClient {
3
+ id String @id @default(cuid())
4
+ name String
5
+ secret String?
6
+ redirectUris String @default("[]")
7
+ grantTypes String @default("[\\"authorization_code\\"]")
8
+ scopes String @default("[]")
9
+ confidential Boolean @default(true)
10
+ revoked Boolean @default(false)
11
+ createdAt DateTime @default(now())
12
+ updatedAt DateTime @updatedAt
13
+
14
+ @@map("oauth_clients")
15
+ }
16
+
17
+ model OAuthAccessToken {
18
+ id String @id @default(cuid())
19
+ userId String?
20
+ clientId String
21
+ name String?
22
+ scopes String @default("[]")
23
+ revoked Boolean @default(false)
24
+ expiresAt DateTime
25
+ createdAt DateTime @default(now())
26
+
27
+ @@index([userId])
28
+ @@map("oauth_access_tokens")
29
+ }
30
+
31
+ model OAuthRefreshToken {
32
+ id String @id @default(cuid())
33
+ accessTokenId String @unique
34
+ revoked Boolean @default(false)
35
+ expiresAt DateTime
36
+
37
+ @@map("oauth_refresh_tokens")
38
+ }
39
+
40
+ model OAuthAuthCode {
41
+ id String @id @default(cuid())
42
+ userId String
43
+ clientId String
44
+ scopes String @default("[]")
45
+ revoked Boolean @default(false)
46
+ expiresAt DateTime
47
+ codeChallenge String?
48
+ codeChallengeMethod String?
49
+
50
+ @@map("oauth_auth_codes")
51
+ }
52
+
53
+ model OAuthDeviceCode {
54
+ id String @id @default(cuid())
55
+ clientId String
56
+ userCode String @unique
57
+ deviceCode String @unique
58
+ scopes String @default("[]")
59
+ userId String?
60
+ approved Boolean?
61
+ expiresAt DateTime
62
+ lastPolledAt DateTime?
63
+ createdAt DateTime @default(now())
64
+
65
+ @@map("oauth_device_codes")
66
+ }
67
+ `;
68
+ }
69
+ //# sourceMappingURL=passport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passport.js","sourceRoot":"","sources":["../../../src/templates/prisma/passport.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiER,CAAA;AACD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type TemplateContext } from '../../templates.js';
2
+ export declare function routesApi(ctx: TemplateContext): string;
3
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/templates/routes/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6C,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAWpG,wBAAgB,SAAS,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAuKtD"}