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.
- package/dist/index.js +100 -20
- package/dist/index.js.map +1 -1
- package/dist/templates/app/auth-controller.d.ts +2 -0
- package/dist/templates/app/auth-controller.d.ts.map +1 -0
- package/dist/templates/app/auth-controller.js +51 -0
- package/dist/templates/app/auth-controller.js.map +1 -0
- package/dist/templates/app/mcp-echo-server.d.ts +2 -0
- package/dist/templates/app/mcp-echo-server.d.ts.map +1 -0
- package/dist/templates/app/mcp-echo-server.js +13 -0
- package/dist/templates/app/mcp-echo-server.js.map +1 -0
- package/dist/templates/app/mcp-echo-tool.d.ts +2 -0
- package/dist/templates/app/mcp-echo-tool.d.ts.map +1 -0
- package/dist/templates/app/mcp-echo-tool.js +20 -0
- package/dist/templates/app/mcp-echo-tool.js.map +1 -0
- package/dist/templates/app/service-provider.d.ts +3 -0
- package/dist/templates/app/service-provider.d.ts.map +1 -0
- package/dist/templates/app/service-provider.js +27 -0
- package/dist/templates/app/service-provider.js.map +1 -0
- package/dist/templates/app/user-model.d.ts +2 -0
- package/dist/templates/app/user-model.d.ts.map +1 -0
- package/dist/templates/app/user-model.js +19 -0
- package/dist/templates/app/user-model.js.map +1 -0
- package/dist/templates/bootstrap/app.d.ts +3 -0
- package/dist/templates/bootstrap/app.d.ts.map +1 -0
- package/dist/templates/bootstrap/app.js +41 -0
- package/dist/templates/bootstrap/app.js.map +1 -0
- package/dist/templates/bootstrap/providers.d.ts +3 -0
- package/dist/templates/bootstrap/providers.d.ts.map +1 -0
- package/dist/templates/bootstrap/providers.js +27 -0
- package/dist/templates/bootstrap/providers.js.map +1 -0
- package/dist/templates/configs/ai.d.ts +2 -0
- package/dist/templates/configs/ai.d.ts.map +1 -0
- package/dist/templates/configs/ai.js +32 -0
- package/dist/templates/configs/ai.js.map +1 -0
- package/dist/templates/configs/app.d.ts +2 -0
- package/dist/templates/configs/app.d.ts.map +1 -0
- package/dist/templates/configs/app.js +12 -0
- package/dist/templates/configs/app.js.map +1 -0
- package/dist/templates/configs/auth.d.ts +3 -0
- package/dist/templates/configs/auth.d.ts.map +1 -0
- package/dist/templates/configs/auth.js +16 -0
- package/dist/templates/configs/auth.js.map +1 -0
- package/dist/templates/configs/cache.d.ts +2 -0
- package/dist/templates/configs/cache.d.ts.map +1 -0
- package/dist/templates/configs/cache.js +28 -0
- package/dist/templates/configs/cache.js.map +1 -0
- package/dist/templates/configs/cashier.d.ts +2 -0
- package/dist/templates/configs/cashier.d.ts.map +1 -0
- package/dist/templates/configs/cashier.js +22 -0
- package/dist/templates/configs/cashier.js.map +1 -0
- package/dist/templates/configs/crypt.d.ts +2 -0
- package/dist/templates/configs/crypt.d.ts.map +1 -0
- package/dist/templates/configs/crypt.js +16 -0
- package/dist/templates/configs/crypt.js.map +1 -0
- package/dist/templates/configs/database.d.ts +3 -0
- package/dist/templates/configs/database.d.ts.map +1 -0
- package/dist/templates/configs/database.js +28 -0
- package/dist/templates/configs/database.js.map +1 -0
- package/dist/templates/configs/hash.d.ts +2 -0
- package/dist/templates/configs/hash.d.ts.map +1 -0
- package/dist/templates/configs/hash.js +12 -0
- package/dist/templates/configs/hash.js.map +1 -0
- package/dist/templates/configs/horizon.d.ts +2 -0
- package/dist/templates/configs/horizon.d.ts.map +1 -0
- package/dist/templates/configs/horizon.js +30 -0
- package/dist/templates/configs/horizon.js.map +1 -0
- package/dist/templates/configs/index.d.ts +3 -0
- package/dist/templates/configs/index.d.ts.map +1 -0
- package/dist/templates/configs/index.js +96 -0
- package/dist/templates/configs/index.js.map +1 -0
- package/dist/templates/configs/localization.d.ts +2 -0
- package/dist/templates/configs/localization.d.ts.map +1 -0
- package/dist/templates/configs/localization.js +13 -0
- package/dist/templates/configs/localization.js.map +1 -0
- package/dist/templates/configs/log.d.ts +2 -0
- package/dist/templates/configs/log.d.ts.map +1 -0
- package/dist/templates/configs/log.js +40 -0
- package/dist/templates/configs/log.js.map +1 -0
- package/dist/templates/configs/mail.d.ts +2 -0
- package/dist/templates/configs/mail.d.ts.map +1 -0
- package/dist/templates/configs/mail.js +33 -0
- package/dist/templates/configs/mail.js.map +1 -0
- package/dist/templates/configs/passport.d.ts +2 -0
- package/dist/templates/configs/passport.d.ts.map +1 -0
- package/dist/templates/configs/passport.js +22 -0
- package/dist/templates/configs/passport.js.map +1 -0
- package/dist/templates/configs/pennant.d.ts +2 -0
- package/dist/templates/configs/pennant.d.ts.map +1 -0
- package/dist/templates/configs/pennant.js +16 -0
- package/dist/templates/configs/pennant.js.map +1 -0
- package/dist/templates/configs/pulse.d.ts +2 -0
- package/dist/templates/configs/pulse.d.ts.map +1 -0
- package/dist/templates/configs/pulse.js +21 -0
- package/dist/templates/configs/pulse.js.map +1 -0
- package/dist/templates/configs/queue.d.ts +2 -0
- package/dist/templates/configs/queue.d.ts.map +1 -0
- package/dist/templates/configs/queue.js +28 -0
- package/dist/templates/configs/queue.js.map +1 -0
- package/dist/templates/configs/sanctum.d.ts +2 -0
- package/dist/templates/configs/sanctum.d.ts.map +1 -0
- package/dist/templates/configs/sanctum.js +19 -0
- package/dist/templates/configs/sanctum.js.map +1 -0
- package/dist/templates/configs/server.d.ts +2 -0
- package/dist/templates/configs/server.d.ts.map +1 -0
- package/dist/templates/configs/server.js +15 -0
- package/dist/templates/configs/server.js.map +1 -0
- package/dist/templates/configs/session.d.ts +2 -0
- package/dist/templates/configs/session.d.ts.map +1 -0
- package/dist/templates/configs/session.js +26 -0
- package/dist/templates/configs/session.js.map +1 -0
- package/dist/templates/configs/socialite.d.ts +2 -0
- package/dist/templates/configs/socialite.d.ts.map +1 -0
- package/dist/templates/configs/socialite.js +27 -0
- package/dist/templates/configs/socialite.js.map +1 -0
- package/dist/templates/configs/storage.d.ts +2 -0
- package/dist/templates/configs/storage.d.ts.map +1 -0
- package/dist/templates/configs/storage.js +35 -0
- package/dist/templates/configs/storage.js.map +1 -0
- package/dist/templates/configs/sync.d.ts +3 -0
- package/dist/templates/configs/sync.d.ts.map +1 -0
- package/dist/templates/configs/sync.js +17 -0
- package/dist/templates/configs/sync.js.map +1 -0
- package/dist/templates/configs/telescope.d.ts +2 -0
- package/dist/templates/configs/telescope.d.ts.map +1 -0
- package/dist/templates/configs/telescope.js +25 -0
- package/dist/templates/configs/telescope.js.map +1 -0
- package/dist/templates/css/index.d.ts +3 -0
- package/dist/templates/css/index.d.ts.map +1 -0
- package/dist/templates/css/index.js +140 -0
- package/dist/templates/css/index.js.map +1 -0
- package/dist/templates/css/plain.d.ts +2 -0
- package/dist/templates/css/plain.d.ts.map +1 -0
- package/dist/templates/css/plain.js +373 -0
- package/dist/templates/css/plain.js.map +1 -0
- package/dist/templates/css/tailwind.d.ts +2 -0
- package/dist/templates/css/tailwind.d.ts.map +1 -0
- package/dist/templates/css/tailwind.js +176 -0
- package/dist/templates/css/tailwind.js.map +1 -0
- package/dist/templates/demos/bk-socket.d.ts +2 -0
- package/dist/templates/demos/bk-socket.d.ts.map +1 -0
- package/dist/templates/demos/bk-socket.js +95 -0
- package/dist/templates/demos/bk-socket.js.map +1 -0
- package/dist/templates/demos/contact.d.ts +3 -0
- package/dist/templates/demos/contact.d.ts.map +1 -0
- package/dist/templates/demos/contact.js +106 -0
- package/dist/templates/demos/contact.js.map +1 -0
- package/dist/templates/demos/index-view.d.ts +3 -0
- package/dist/templates/demos/index-view.d.ts.map +1 -0
- package/dist/templates/demos/index-view.js +67 -0
- package/dist/templates/demos/index-view.js.map +1 -0
- package/dist/templates/demos/live.d.ts +2 -0
- package/dist/templates/demos/live.d.ts.map +1 -0
- package/dist/templates/demos/live.js +97 -0
- package/dist/templates/demos/live.js.map +1 -0
- package/dist/templates/demos/registry.d.ts +13 -0
- package/dist/templates/demos/registry.d.ts.map +1 -0
- package/dist/templates/demos/registry.js +15 -0
- package/dist/templates/demos/registry.js.map +1 -0
- package/dist/templates/demos/ws.d.ts +2 -0
- package/dist/templates/demos/ws.d.ts.map +1 -0
- package/dist/templates/demos/ws.js +106 -0
- package/dist/templates/demos/ws.js.map +1 -0
- package/dist/templates/env.d.ts +7 -0
- package/dist/templates/env.d.ts.map +1 -0
- package/dist/templates/env.js +127 -0
- package/dist/templates/env.js.map +1 -0
- package/dist/templates/package-json.d.ts +3 -0
- package/dist/templates/package-json.d.ts.map +1 -0
- package/dist/templates/package-json.js +195 -0
- package/dist/templates/package-json.js.map +1 -0
- package/dist/templates/package-managers.d.ts +14 -0
- package/dist/templates/package-managers.d.ts.map +1 -0
- package/dist/templates/package-managers.js +49 -0
- package/dist/templates/package-managers.js.map +1 -0
- package/dist/templates/pages/ai-chat.d.ts +7 -0
- package/dist/templates/pages/ai-chat.d.ts.map +1 -0
- package/dist/templates/pages/ai-chat.js +285 -0
- package/dist/templates/pages/ai-chat.js.map +1 -0
- package/dist/templates/pages/demo.d.ts +4 -0
- package/dist/templates/pages/demo.d.ts.map +1 -0
- package/dist/templates/pages/demo.js +71 -0
- package/dist/templates/pages/demo.js.map +1 -0
- package/dist/templates/pages/error.d.ts +7 -0
- package/dist/templates/pages/error.d.ts.map +1 -0
- package/dist/templates/pages/error.js +148 -0
- package/dist/templates/pages/error.js.map +1 -0
- package/dist/templates/pages/index.d.ts +9 -0
- package/dist/templates/pages/index.d.ts.map +1 -0
- package/dist/templates/pages/index.js +311 -0
- package/dist/templates/pages/index.js.map +1 -0
- package/dist/templates/prisma/auth.d.ts +2 -0
- package/dist/templates/prisma/auth.d.ts.map +1 -0
- package/dist/templates/prisma/auth.js +22 -0
- package/dist/templates/prisma/auth.js.map +1 -0
- package/dist/templates/prisma/base.d.ts +3 -0
- package/dist/templates/prisma/base.d.ts.map +1 -0
- package/dist/templates/prisma/base.js +14 -0
- package/dist/templates/prisma/base.js.map +1 -0
- package/dist/templates/prisma/config.d.ts +3 -0
- package/dist/templates/prisma/config.d.ts.map +1 -0
- package/dist/templates/prisma/config.js +15 -0
- package/dist/templates/prisma/config.js.map +1 -0
- package/dist/templates/prisma/notification.d.ts +2 -0
- package/dist/templates/prisma/notification.d.ts.map +1 -0
- package/dist/templates/prisma/notification.js +16 -0
- package/dist/templates/prisma/notification.js.map +1 -0
- package/dist/templates/prisma/passport.d.ts +2 -0
- package/dist/templates/prisma/passport.d.ts.map +1 -0
- package/dist/templates/prisma/passport.js +69 -0
- package/dist/templates/prisma/passport.js.map +1 -0
- package/dist/templates/routes/api.d.ts +3 -0
- package/dist/templates/routes/api.d.ts.map +1 -0
- package/dist/templates/routes/api.js +118 -0
- package/dist/templates/routes/api.js.map +1 -0
- package/dist/templates/routes/console.d.ts +2 -0
- package/dist/templates/routes/console.d.ts.map +1 -0
- package/dist/templates/routes/console.js +22 -0
- package/dist/templates/routes/console.js.map +1 -0
- package/dist/templates/routes/web.d.ts +4 -0
- package/dist/templates/routes/web.d.ts.map +1 -0
- package/dist/templates/routes/web.js +108 -0
- package/dist/templates/routes/web.js.map +1 -0
- package/dist/templates/server.d.ts +2 -0
- package/dist/templates/server.d.ts.map +1 -0
- package/dist/templates/server.js +10 -0
- package/dist/templates/server.js.map +1 -0
- package/dist/templates/tsconfig.d.ts +3 -0
- package/dist/templates/tsconfig.d.ts.map +1 -0
- package/dist/templates/tsconfig.js +33 -0
- package/dist/templates/tsconfig.js.map +1 -0
- package/dist/templates/views/welcome.d.ts +6 -0
- package/dist/templates/views/welcome.d.ts.map +1 -0
- package/dist/templates/views/welcome.js +396 -0
- package/dist/templates/views/welcome.js.map +1 -0
- package/dist/templates/vite.d.ts +3 -0
- package/dist/templates/vite.d.ts.map +1 -0
- package/dist/templates/vite.js +61 -0
- package/dist/templates/vite.js.map +1 -0
- package/dist/templates.d.ts +28 -17
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +99 -3779
- package/dist/templates.js.map +1 -1
- 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 @@
|
|
|
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"}
|