create-rudder-app 1.1.2 → 1.2.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 (110) hide show
  1. package/dist/cli-flags.d.ts +0 -9
  2. package/dist/cli-flags.d.ts.map +1 -1
  3. package/dist/cli-flags.js +0 -8
  4. package/dist/cli-flags.js.map +1 -1
  5. package/dist/index.js +2 -2
  6. package/dist/index.js.map +1 -1
  7. package/dist/templates/app/service-provider.d.ts.map +1 -1
  8. package/dist/templates/app/service-provider.js +0 -15
  9. package/dist/templates/app/service-provider.js.map +1 -1
  10. package/dist/templates/components/site-header.d.ts.map +1 -1
  11. package/dist/templates/components/site-header.js +2 -8
  12. package/dist/templates/components/site-header.js.map +1 -1
  13. package/dist/templates/package-json.d.ts.map +1 -1
  14. package/dist/templates/package-json.js +4 -5
  15. package/dist/templates/package-json.js.map +1 -1
  16. package/dist/templates/pages/index.d.ts +13 -0
  17. package/dist/templates/pages/index.d.ts.map +1 -1
  18. package/dist/templates/pages/index.js +43 -0
  19. package/dist/templates/pages/index.js.map +1 -1
  20. package/dist/templates/routes/api.d.ts.map +1 -1
  21. package/dist/templates/routes/api.js +0 -99
  22. package/dist/templates/routes/api.js.map +1 -1
  23. package/dist/templates/routes/web.d.ts.map +1 -1
  24. package/dist/templates/routes/web.js +10 -83
  25. package/dist/templates/routes/web.js.map +1 -1
  26. package/dist/templates/routes-manifest.d.ts +2 -2
  27. package/dist/templates/routes-manifest.d.ts.map +1 -1
  28. package/dist/templates/routes-manifest.js +19 -22
  29. package/dist/templates/routes-manifest.js.map +1 -1
  30. package/dist/templates/views/welcome.d.ts +13 -0
  31. package/dist/templates/views/welcome.d.ts.map +1 -1
  32. package/dist/templates/views/welcome.js +53 -0
  33. package/dist/templates/views/welcome.js.map +1 -1
  34. package/dist/templates.d.ts +0 -9
  35. package/dist/templates.d.ts.map +1 -1
  36. package/dist/templates.js +38 -120
  37. package/dist/templates.js.map +1 -1
  38. package/package.json +1 -5
  39. package/dist/templates/demos/avatar.d.ts +0 -3
  40. package/dist/templates/demos/avatar.d.ts.map +0 -1
  41. package/dist/templates/demos/avatar.js +0 -174
  42. package/dist/templates/demos/avatar.js.map +0 -1
  43. package/dist/templates/demos/cache.d.ts +0 -3
  44. package/dist/templates/demos/cache.d.ts.map +0 -1
  45. package/dist/templates/demos/cache.js +0 -91
  46. package/dist/templates/demos/cache.js.map +0 -1
  47. package/dist/templates/demos/contact.d.ts +0 -3
  48. package/dist/templates/demos/contact.d.ts.map +0 -1
  49. package/dist/templates/demos/contact.js +0 -99
  50. package/dist/templates/demos/contact.js.map +0 -1
  51. package/dist/templates/demos/fibonacci.d.ts +0 -7
  52. package/dist/templates/demos/fibonacci.d.ts.map +0 -1
  53. package/dist/templates/demos/fibonacci.js +0 -164
  54. package/dist/templates/demos/fibonacci.js.map +0 -1
  55. package/dist/templates/demos/http.d.ts +0 -3
  56. package/dist/templates/demos/http.d.ts.map +0 -1
  57. package/dist/templates/demos/http.js +0 -109
  58. package/dist/templates/demos/http.js.map +0 -1
  59. package/dist/templates/demos/index-view.d.ts +0 -3
  60. package/dist/templates/demos/index-view.d.ts.map +0 -1
  61. package/dist/templates/demos/index-view.js +0 -47
  62. package/dist/templates/demos/index-view.js.map +0 -1
  63. package/dist/templates/demos/localization.d.ts +0 -4
  64. package/dist/templates/demos/localization.d.ts.map +0 -1
  65. package/dist/templates/demos/localization.js +0 -122
  66. package/dist/templates/demos/localization.js.map +0 -1
  67. package/dist/templates/demos/mail.d.ts +0 -4
  68. package/dist/templates/demos/mail.d.ts.map +0 -1
  69. package/dist/templates/demos/mail.js +0 -119
  70. package/dist/templates/demos/mail.js.map +0 -1
  71. package/dist/templates/demos/notifications.d.ts +0 -4
  72. package/dist/templates/demos/notifications.d.ts.map +0 -1
  73. package/dist/templates/demos/notifications.js +0 -125
  74. package/dist/templates/demos/notifications.js.map +0 -1
  75. package/dist/templates/demos/pennant.d.ts +0 -8
  76. package/dist/templates/demos/pennant.d.ts.map +0 -1
  77. package/dist/templates/demos/pennant.js +0 -135
  78. package/dist/templates/demos/pennant.js.map +0 -1
  79. package/dist/templates/demos/polymorphic.d.ts +0 -19
  80. package/dist/templates/demos/polymorphic.d.ts.map +0 -1
  81. package/dist/templates/demos/polymorphic.js +0 -663
  82. package/dist/templates/demos/polymorphic.js.map +0 -1
  83. package/dist/templates/demos/queue.d.ts +0 -4
  84. package/dist/templates/demos/queue.d.ts.map +0 -1
  85. package/dist/templates/demos/queue.js +0 -99
  86. package/dist/templates/demos/queue.js.map +0 -1
  87. package/dist/templates/demos/registry.d.ts +0 -26
  88. package/dist/templates/demos/registry.d.ts.map +0 -1
  89. package/dist/templates/demos/registry.js +0 -140
  90. package/dist/templates/demos/registry.js.map +0 -1
  91. package/dist/templates/demos/rudder-socket.d.ts +0 -2
  92. package/dist/templates/demos/rudder-socket.d.ts.map +0 -1
  93. package/dist/templates/demos/rudder-socket.js +0 -95
  94. package/dist/templates/demos/rudder-socket.js.map +0 -1
  95. package/dist/templates/demos/sync.d.ts +0 -2
  96. package/dist/templates/demos/sync.d.ts.map +0 -1
  97. package/dist/templates/demos/sync.js +0 -90
  98. package/dist/templates/demos/sync.js.map +0 -1
  99. package/dist/templates/demos/system-info.d.ts +0 -3
  100. package/dist/templates/demos/system-info.d.ts.map +0 -1
  101. package/dist/templates/demos/system-info.js +0 -134
  102. package/dist/templates/demos/system-info.js.map +0 -1
  103. package/dist/templates/demos/todos.d.ts +0 -6
  104. package/dist/templates/demos/todos.d.ts.map +0 -1
  105. package/dist/templates/demos/todos.js +0 -238
  106. package/dist/templates/demos/todos.js.map +0 -1
  107. package/dist/templates/demos/ws.d.ts +0 -2
  108. package/dist/templates/demos/ws.d.ts.map +0 -1
  109. package/dist/templates/demos/ws.js +0 -99
  110. package/dist/templates/demos/ws.js.map +0 -1
package/dist/templates.js CHANGED
@@ -41,30 +41,12 @@ import { terminalDashboardView } from './templates/app/terminal-dashboard.js';
41
41
  import { routesApi } from './templates/routes/api.js';
42
42
  import { routesWeb, welcomeExt } from './templates/routes/web.js';
43
43
  import { routesConsole } from './templates/routes/console.js';
44
- import { pagesRootConfig, pagesIndexConfig, pagesIndexData, pagesIndexPage } from './templates/pages/index.js';
44
+ import { pagesRootConfig, pagesRootRenderHtml, pagesIndexConfig, pagesIndexData, pagesIndexPage } from './templates/pages/index.js';
45
45
  import { welcomeView } from './templates/views/welcome.js';
46
46
  import { siteHeaderComponent, siteHeaderExt } from './templates/components/site-header.js';
47
47
  import { pagesErrorConfig, pagesErrorPage } from './templates/pages/error.js';
48
48
  import { aiChatPageConfig, aiChatPage } from './templates/pages/ai-chat.js';
49
49
  import { demoPageConfig, demoPage } from './templates/pages/demo.js';
50
- import { demosIndexView } from './templates/demos/index-view.js';
51
- import { demosContactView } from './templates/demos/contact.js';
52
- import { demosTodosView, todoModelPrisma, todoSchema, todoService, todoServiceProvider } from './templates/demos/todos.js';
53
- import { commentModelTs, demosPolymorphicView, polymorphicPrismaBlock, postModelTs, tagModelTs, videoModelTs } from './templates/demos/polymorphic.js';
54
- import { demosFibonacciView } from './templates/demos/fibonacci.js';
55
- import { demosSystemInfoView } from './templates/demos/system-info.js';
56
- import { demosAvatarView } from './templates/demos/avatar.js';
57
- import { demosPennantView, demosPennantBetaView } from './templates/demos/pennant.js';
58
- import { demosCacheView } from './templates/demos/cache.js';
59
- import { demosQueueView, exampleJob } from './templates/demos/queue.js';
60
- import { demosMailView, demoMailable } from './templates/demos/mail.js';
61
- import { demosNotificationsView, demoNotification } from './templates/demos/notifications.js';
62
- import { demosLocalizationView, langMessages } from './templates/demos/localization.js';
63
- import { demosHttpView } from './templates/demos/http.js';
64
- import { demosWsView } from './templates/demos/ws.js';
65
- import { demosSyncView } from './templates/demos/sync.js';
66
- import { rudderSocketSource } from './templates/demos/rudder-socket.js';
67
- import { availableDemos } from './templates/demos/registry.js';
68
50
  import { packageJson } from './templates/package-json.js';
69
51
  import { tsconfigJson } from './templates/tsconfig.js';
70
52
  import { viteConfig } from './templates/vite.js';
@@ -153,9 +135,27 @@ export function getTemplates(ctx) {
153
135
  if (ctx.packages.terminal) {
154
136
  files['app/Terminal/Dashboard.tsx'] = terminalDashboardView();
155
137
  }
156
- const ext = pageExt(ctx.primary);
138
+ // Page-level scaffolding. Three shapes:
139
+ // - frameworks.length === 0: vanilla welcome via @rudderjs/view's html``.
140
+ // pages/+config.ts hand-rolls onRenderHtml (no vike-* installed).
141
+ // Skip _error/ai-chat/multi-fw demos — they require a real renderer.
142
+ // - frameworks.length === 1: controller view for `/` via @rudderjs/view's
143
+ // scanner. SiteHeader + Welcome + _error + (optional) ai-chat.
144
+ // - frameworks.length > 1: pages/index/+Page.* picks a primary renderer.
145
+ // No `app/Views/` (scanner can't resolve a single framework).
157
146
  files['pages/+config.ts'] = pagesRootConfig(ctx);
158
- if (ctx.frameworks.length === 1) {
147
+ if (ctx.frameworks.length === 0) {
148
+ // Vanilla render hook lives in its own file — Vike rejects `onRenderHtml`
149
+ // declared inline in +config.ts ("runtime in config" error). Vike
150
+ // auto-discovers the adjacent +onRenderHtml.ts file.
151
+ files['pages/+onRenderHtml.ts'] = pagesRootRenderHtml();
152
+ // Welcome.ts is a vanilla view — no vike-* import. Lives in app/Views/
153
+ // so the @rudderjs/vite scanner picks it up and generates the matching
154
+ // `pages/__view/welcome/+Page.ts` stub. Apps can swap to a real
155
+ // frontend by installing vike-react and renaming the file to .tsx.
156
+ files['app/Views/Welcome.ts'] = welcomeView(ctx);
157
+ }
158
+ else if (ctx.frameworks.length === 1) {
159
159
  // Single-framework projects use a controller view for `/` — rendered
160
160
  // through @rudderjs/view and wired in routes/web.ts. The file lives in
161
161
  // app/Views/ and is owned by the user from day one.
@@ -169,116 +169,34 @@ export function getTemplates(ctx) {
169
169
  // +config.ts that picks the primary renderer. The view scanner can't
170
170
  // resolve a single framework when multiple vike-* are installed, so
171
171
  // @rudderjs/view isn't usable in that setup yet.
172
+ const ext = pageExt(ctx.primary);
172
173
  files['pages/index/+config.ts'] = pagesIndexConfig(ctx);
173
174
  files['pages/index/+data.ts'] = pagesIndexData(ctx);
174
175
  files[`pages/index/+Page${ext}`] = pagesIndexPage(ctx);
175
176
  }
176
- files['pages/_error/+config.ts'] = pagesErrorConfig(ctx);
177
- files[`pages/_error/+Page${ext}`] = pagesErrorPage(ctx);
178
- if (ctx.packages.ai) {
179
- files['pages/ai-chat/+config.ts'] = aiChatPageConfig(ctx);
180
- files[`pages/ai-chat/+Page${ext}`] = aiChatPage(ctx);
181
- }
182
- for (const fw of ctx.frameworks.filter(f => f !== ctx.primary)) {
183
- const dext = pageExt(fw);
184
- files[`pages/${fw}-demo/+config.ts`] = demoPageConfig(fw);
185
- files[`pages/${fw}-demo/+Page${dext}`] = demoPage(fw, ctx);
186
- }
187
- // Demos — react primary only; per-demo opt-in via ctx.demos (see registry.ts).
188
- if (shouldScaffoldAnyDemo(ctx)) {
189
- files['app/Views/Demos/Index.tsx'] = demosIndexView(ctx);
190
- if (shouldScaffoldDemo(ctx, 'contact'))
191
- files['app/Views/Demos/Contact.tsx'] = demosContactView(ctx);
192
- if (shouldScaffoldDemo(ctx, 'todos')) {
193
- files['app/Views/Demos/Todos.tsx'] = demosTodosView();
194
- files['app/Modules/Todo/TodoSchema.ts'] = todoSchema();
195
- files['app/Modules/Todo/TodoService.ts'] = todoService();
196
- files['app/Modules/Todo/TodoServiceProvider.ts'] = todoServiceProvider();
197
- }
198
- if (shouldScaffoldDemo(ctx, 'polymorphic')) {
199
- files['app/Views/Demos/Polymorphic.tsx'] = demosPolymorphicView();
200
- files['app/Models/Post.ts'] = postModelTs();
201
- files['app/Models/Video.ts'] = videoModelTs();
202
- files['app/Models/Comment.ts'] = commentModelTs();
203
- files['app/Models/Tag.ts'] = tagModelTs();
204
- }
205
- if (shouldScaffoldDemo(ctx, 'fibonacci'))
206
- files['app/Views/Demos/Fibonacci.tsx'] = demosFibonacciView();
207
- if (shouldScaffoldDemo(ctx, 'system-info'))
208
- files['app/Views/Demos/SystemInfo.tsx'] = demosSystemInfoView();
209
- if (shouldScaffoldDemo(ctx, 'avatar'))
210
- files['app/Views/Demos/Avatar.tsx'] = demosAvatarView();
211
- if (shouldScaffoldDemo(ctx, 'pennant')) {
212
- files['app/Views/Demos/Pennant.tsx'] = demosPennantView();
213
- files['app/Views/Demos/PennantBeta.tsx'] = demosPennantBetaView();
214
- }
215
- if (shouldScaffoldDemo(ctx, 'cache'))
216
- files['app/Views/Demos/Cache.tsx'] = demosCacheView();
217
- if (shouldScaffoldDemo(ctx, 'queue')) {
218
- files['app/Views/Demos/Queue.tsx'] = demosQueueView();
219
- files['app/Jobs/ExampleJob.ts'] = exampleJob();
220
- }
221
- if (shouldScaffoldDemo(ctx, 'mail')) {
222
- files['app/Views/Demos/Mail.tsx'] = demosMailView();
223
- files['app/Mail/DemoMail.ts'] = demoMailable();
224
- }
225
- if (shouldScaffoldDemo(ctx, 'notifications')) {
226
- files['app/Views/Demos/Notifications.tsx'] = demosNotificationsView();
227
- files['app/Notifications/WelcomeNotification.ts'] = demoNotification();
177
+ if (ctx.frameworks.length >= 1) {
178
+ const ext = pageExt(ctx.primary);
179
+ files['pages/_error/+config.ts'] = pagesErrorConfig(ctx);
180
+ files[`pages/_error/+Page${ext}`] = pagesErrorPage(ctx);
181
+ if (ctx.packages.ai) {
182
+ files['pages/ai-chat/+config.ts'] = aiChatPageConfig(ctx);
183
+ files[`pages/ai-chat/+Page${ext}`] = aiChatPage(ctx);
228
184
  }
229
- if (shouldScaffoldDemo(ctx, 'localization')) {
230
- files['app/Views/Demos/Localization.tsx'] = demosLocalizationView();
231
- files['lang/en/messages.json'] = langMessages('en');
232
- files['lang/es/messages.json'] = langMessages('es');
233
- files['lang/ar/messages.json'] = langMessages('ar');
234
- }
235
- if (shouldScaffoldDemo(ctx, 'http'))
236
- files['app/Views/Demos/Http.tsx'] = demosHttpView();
237
- if (shouldScaffoldDemo(ctx, 'ws')) {
238
- files['app/Views/Demos/Ws.tsx'] = demosWsView();
239
- files['src/RudderSocket.ts'] = rudderSocketSource();
240
- }
241
- if (shouldScaffoldDemo(ctx, 'sync')) {
242
- files['app/Views/Demos/Sync.tsx'] = demosSyncView();
185
+ for (const fw of ctx.frameworks.filter(f => f !== ctx.primary)) {
186
+ const dext = pageExt(fw);
187
+ files[`pages/${fw}-demo/+config.ts`] = demoPageConfig(fw);
188
+ files[`pages/${fw}-demo/+Page${dext}`] = demoPage(fw, ctx);
243
189
  }
244
190
  }
245
191
  return files;
246
192
  }
247
- /**
248
- * Demos are React-primary only for v1 — vue/solid variants aren't written yet.
249
- * `name` is a demo ID from `templates/demos/registry.ts` (e.g. 'contact', 'ws', 'sync').
250
- * Returns true when the demo was selected AND its package gates are satisfied.
251
- */
252
- export function shouldScaffoldDemo(ctx, name) {
253
- if (ctx.primary !== 'react')
254
- return false;
255
- if (!ctx.demos.includes(name))
256
- return false;
257
- // Defense-in-depth: even if a stale demo id slipped through (e.g. user kept it
258
- // checked while unticking the underlying package), filter by registry rules.
259
- const allowed = availableDemos(ctx.orm, ctx.packages).map(d => d.value);
260
- return allowed.includes(name);
261
- }
262
- export function shouldScaffoldAnyDemo(ctx) {
263
- if (ctx.primary !== 'react')
264
- return false;
265
- return ctx.demos.some(name => shouldScaffoldDemo(ctx, name));
266
- }
267
193
  /**
268
194
  * Generates the multi-file `prisma/schema/modules.prisma` that holds
269
- * domain modules (added by `pnpm rudder make:module` or by demos that
270
- * ship a Prisma model). The `<rudderjs:modules:*>` markers are how the
271
- * `make:module` runtime command knows where to insert new model blocks.
195
+ * domain modules added via `pnpm rudder make:module`. The
196
+ * `<rudderjs:modules:*>` markers are how that runtime command knows where to
197
+ * insert new model blocks.
272
198
  */
273
- function modulesPrisma(ctx) {
274
- const blocks = [];
275
- if (shouldScaffoldDemo(ctx, 'todos')) {
276
- blocks.push(`// module: Todo (Todos demo)\n${todoModelPrisma()}`);
277
- }
278
- if (shouldScaffoldDemo(ctx, 'polymorphic')) {
279
- blocks.push(polymorphicPrismaBlock());
280
- }
281
- const body = blocks.length > 0 ? '\n' + blocks.join('\n') : '';
282
- return `// <rudderjs:modules:start>${body}\n// <rudderjs:modules:end>\n`;
199
+ function modulesPrisma(_ctx) {
200
+ return `// <rudderjs:modules:start>\n// <rudderjs:modules:end>\n`;
283
201
  }
284
202
  //# sourceMappingURL=templates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-rudder-app",
3
- "version": "1.1.2",
3
+ "version": "1.2.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -22,10 +22,6 @@
22
22
  "exports": {
23
23
  ".": {
24
24
  "import": "./dist/index.js"
25
- },
26
- "./demos-registry": {
27
- "types": "./dist/templates/demos/registry.d.ts",
28
- "import": "./dist/templates/demos/registry.js"
29
25
  }
30
26
  },
31
27
  "dependencies": {
@@ -1,3 +0,0 @@
1
- export declare function demosAvatarView(): string;
2
- export declare function demosAvatarApiBlock(): string;
3
- //# sourceMappingURL=avatar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../../src/templates/demos/avatar.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,IAAI,MAAM,CA4IxC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CA6B5C"}
@@ -1,174 +0,0 @@
1
- // Avatar demo — image upload + resize via @rudderjs/image, persisted to the
2
- // `public` Storage disk so the resized URL is browser-reachable.
3
- export function demosAvatarView() {
4
- return `import { useState, useRef } from 'react'
5
- import '@/index.css'
6
- import { SiteHeader } from 'App/Components/SiteHeader.js'
7
-
8
- interface ProcessedImage {
9
- url: string
10
- format: string
11
- width: number
12
- height: number
13
- size: number
14
- }
15
-
16
- interface UploadResponse {
17
- original: { format: string; width: number; height: number; size: number }
18
- processed: ProcessedImage
19
- }
20
-
21
- export default function AvatarResize() {
22
- const inputRef = useRef<HTMLInputElement>(null)
23
- const [preview, setPreview] = useState<string | null>(null)
24
- const [result, setResult ] = useState<UploadResponse | null>(null)
25
- const [loading, setLoading] = useState(false)
26
- const [error, setError ] = useState<string | null>(null)
27
-
28
- function onPick(e: React.ChangeEvent<HTMLInputElement>) {
29
- const file = e.target.files?.[0]
30
- if (!file) return
31
- setError(null)
32
- setResult(null)
33
- const reader = new FileReader()
34
- reader.onload = () => setPreview(reader.result as string)
35
- reader.readAsDataURL(file)
36
- }
37
-
38
- async function upload() {
39
- if (!preview) return
40
- setLoading(true); setError(null)
41
- try {
42
- const res = await fetch('/api/avatar', {
43
- method: 'POST',
44
- headers: { 'Content-Type': 'application/json' },
45
- body: JSON.stringify({ image: preview }),
46
- })
47
- const data = await res.json() as UploadResponse | { message: string }
48
- if (!res.ok) throw new Error((data as { message: string }).message ?? 'Upload failed')
49
- setResult(data as UploadResponse)
50
- } catch (e) {
51
- setError((e as Error).message)
52
- } finally {
53
- setLoading(false)
54
- }
55
- }
56
-
57
- function reset() {
58
- setPreview(null); setResult(null); setError(null)
59
- if (inputRef.current) inputRef.current.value = ''
60
- }
61
-
62
- return (
63
- <div className="page">
64
- <SiteHeader />
65
-
66
- <section className="hero">
67
- <h1 className="hero-title">Avatar Resize</h1>
68
- <p className="hero-lead">
69
- Upload any image — the server resizes it to 256×256, converts to WebP at quality 85,
70
- and saves to the <code className="inline-code">public</code> storage disk via{' '}
71
- <code className="inline-code">@rudderjs/image</code>.
72
- </p>
73
- </section>
74
-
75
- <section className="feature-section">
76
- <div className="form-card">
77
- <input
78
- ref={inputRef}
79
- type="file"
80
- accept="image/*"
81
- onChange={onPick}
82
- className="form-input"
83
- style={{ marginBottom: '1rem' }}
84
- />
85
-
86
- {preview && !result && (
87
- <>
88
- <div style={{ marginBottom: '1rem' }}>
89
- <p className="form-label">Original</p>
90
- <img src={preview} alt="preview" style={{ maxWidth: '256px', maxHeight: '256px', borderRadius: '0.5rem', border: '1px solid var(--border, #e5e7eb)' }} />
91
- </div>
92
- <div style={{ display: 'flex', gap: '0.5rem' }}>
93
- <button className="form-submit" onClick={upload} disabled={loading} style={{ flex: 1 }}>
94
- {loading ? 'Processing…' : 'Resize & upload'}
95
- </button>
96
- <button onClick={reset} disabled={loading} style={{ padding: '0.5rem 1rem', borderRadius: '0.375rem', border: '1px solid var(--border, #e5e7eb)', background: 'transparent', cursor: 'pointer' }}>
97
- Reset
98
- </button>
99
- </div>
100
- </>
101
- )}
102
-
103
- {error && (
104
- <p className="form-error" style={{ marginTop: '1rem' }}>{error}</p>
105
- )}
106
-
107
- {result && (
108
- <>
109
- <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem', marginTop: '1rem' }}>
110
- <div>
111
- <p className="form-label">Original</p>
112
- {preview && (
113
- <img src={preview} alt="original" style={{ maxWidth: '100%', borderRadius: '0.5rem', border: '1px solid var(--border, #e5e7eb)' }} />
114
- )}
115
- <p className="feature-desc" style={{ fontSize: '0.75rem' }}>
116
- {result.original.format} · {result.original.width}×{result.original.height} ·{' '}
117
- {(result.original.size / 1024).toFixed(1)} KB
118
- </p>
119
- </div>
120
- <div>
121
- <p className="form-label">Resized (WebP, 256×256)</p>
122
- <img src={result.processed.url} alt="resized" style={{ maxWidth: '100%', borderRadius: '0.5rem', border: '1px solid var(--border, #e5e7eb)' }} />
123
- <p className="feature-desc" style={{ fontSize: '0.75rem' }}>
124
- {result.processed.format} · {result.processed.width}×{result.processed.height} ·{' '}
125
- {(result.processed.size / 1024).toFixed(1)} KB ·{' '}
126
- {Math.round((1 - result.processed.size / result.original.size) * 100)}% smaller
127
- </p>
128
- </div>
129
- </div>
130
- <div style={{ marginTop: '1rem' }}>
131
- <button onClick={reset} style={{ padding: '0.5rem 1rem', borderRadius: '0.375rem', border: '1px solid var(--border, #e5e7eb)', background: 'transparent', cursor: 'pointer' }}>
132
- Try another
133
- </button>
134
- </div>
135
- </>
136
- )}
137
- </div>
138
- </section>
139
- </div>
140
- )
141
- }
142
- `;
143
- }
144
- export function demosAvatarApiBlock() {
145
- return `// POST /api/avatar — resize an uploaded image to 256x256 webp via @rudderjs/image,
146
- // then write to the 'public' Storage disk so the URL is browser-reachable.
147
- router.post('/api/avatar', async (req, res) => {
148
- const { image: dataUrl } = (req.body ?? {}) as { image?: string }
149
- if (!dataUrl || !dataUrl.startsWith('data:image/')) {
150
- return res.status(422).json({ message: 'Body must be { image: "data:image/...;base64,..." }' })
151
- }
152
- const base64 = dataUrl.split(',', 2)[1] ?? ''
153
- const input = Buffer.from(base64, 'base64')
154
-
155
- const { image } = await import('@rudderjs/image')
156
- const { Storage } = await import('@rudderjs/storage')
157
-
158
- const original = await image(input).metadata()
159
- const buf = await image(input).resize(256, 256).format('webp').quality(85).toBuffer()
160
- const meta = await image(buf).metadata()
161
-
162
- const filename = \`avatars/\${Date.now()}-\${Math.random().toString(36).slice(2, 8)}.webp\`
163
- await Storage.disk('public').put(filename, buf)
164
-
165
- res.json({
166
- original: { format: original.format, width: original.width, height: original.height, size: input.length },
167
- processed: {
168
- url: Storage.disk('public').url(filename),
169
- format: meta.format, width: meta.width, height: meta.height, size: buf.length,
170
- },
171
- })
172
- })`;
173
- }
174
- //# sourceMappingURL=avatar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../../src/templates/demos/avatar.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,iEAAiE;AAEjE,MAAM,UAAU,eAAe;IAC7B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0IR,CAAA;AACD,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BN,CAAA;AACH,CAAC"}
@@ -1,3 +0,0 @@
1
- export declare function demosCacheView(): string;
2
- export declare function demosCacheApiBlock(): string;
3
- //# sourceMappingURL=cache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/templates/demos/cache.ts"],"names":[],"mappings":"AAGA,wBAAgB,cAAc,IAAI,MAAM,CAsEvC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAgB3C"}
@@ -1,91 +0,0 @@
1
- // Cache counter demo — `Cache.get` + `Cache.set` round-trip with no TTL.
2
- // Cache is a Tier A package, so this demo is always available.
3
- export function demosCacheView() {
4
- return `import { useState } from 'react'
5
- import '@/index.css'
6
- import { SiteHeader } from 'App/Components/SiteHeader.js'
7
-
8
- interface CacheResponse {
9
- views: number
10
- key: string
11
- }
12
-
13
- export default function CacheDemo() {
14
- const [data, setData] = useState<CacheResponse | null>(null)
15
- const [loading, setLoading] = useState(false)
16
-
17
- async function bump() {
18
- setLoading(true)
19
- try {
20
- const res = await fetch('/api/cache/views', { method: 'POST' })
21
- setData(await res.json() as CacheResponse)
22
- } finally {
23
- setLoading(false)
24
- }
25
- }
26
-
27
- async function clear() {
28
- setLoading(true)
29
- try {
30
- await fetch('/api/cache/views', { method: 'DELETE' })
31
- setData({ views: 0, key: 'demos:views' })
32
- } finally {
33
- setLoading(false)
34
- }
35
- }
36
-
37
- return (
38
- <div className="page">
39
- <SiteHeader />
40
-
41
- <section className="hero">
42
- <h1 className="hero-title">Cache counter</h1>
43
- <p className="hero-lead">
44
- Click "Bump" to read the current value via <code className="inline-code">Cache.get</code>,
45
- increment it, and write it back via <code className="inline-code">Cache.set</code>.
46
- Default driver is in-memory; swap it via <code className="inline-code">config/cache.ts</code>.
47
- </p>
48
- </section>
49
-
50
- <section className="feature-section" style={{ maxWidth: '32rem', margin: '0 auto' }}>
51
- <div className="form-card" style={{ textAlign: 'center' }}>
52
- <p className="form-label" style={{ marginBottom: '0.5rem' }}>Views recorded</p>
53
- <p style={{ fontSize: '3rem', fontWeight: 700, margin: '0.5rem 0' }}>
54
- {data?.views ?? '—'}
55
- </p>
56
- <p className="feature-desc" style={{ fontSize: '0.7rem', marginBottom: '1rem' }}>
57
- key: <code>{data?.key ?? 'demos:views'}</code>
58
- </p>
59
- <div style={{ display: 'flex', gap: '0.5rem' }}>
60
- <button className="form-submit" onClick={bump} disabled={loading} style={{ flex: 1 }}>
61
- {loading ? '…' : 'Bump'}
62
- </button>
63
- <button onClick={clear} disabled={loading} style={{ padding: '0.5rem 1rem', borderRadius: '0.375rem', border: '1px solid var(--border, #e5e7eb)', background: 'transparent', cursor: 'pointer' }}>
64
- Clear
65
- </button>
66
- </div>
67
- </div>
68
- </section>
69
- </div>
70
- )
71
- }
72
- `;
73
- }
74
- export function demosCacheApiBlock() {
75
- return `// POST /api/cache/views — read+increment+write (no TTL); DELETE to forget the key.
76
- router.post('/api/cache/views', async (_req, res) => {
77
- const { Cache } = await import('@rudderjs/cache')
78
- const KEY = 'demos:views'
79
- const current = (await Cache.get<number>(KEY)) ?? 0
80
- const next = current + 1
81
- await Cache.set(KEY, next)
82
- res.json({ views: next, key: KEY })
83
- })
84
-
85
- router.delete('/api/cache/views', async (_req, res) => {
86
- const { Cache } = await import('@rudderjs/cache')
87
- await Cache.forget('demos:views')
88
- res.json({ views: 0, key: 'demos:views' })
89
- })`;
90
- }
91
- //# sourceMappingURL=cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/templates/demos/cache.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,+DAA+D;AAE/D,MAAM,UAAU,cAAc;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoER,CAAA;AACD,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;GAcN,CAAA;AACH,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { TemplateContext } from '../../templates.js';
2
- export declare function demosContactView(ctx: TemplateContext): string;
3
- //# sourceMappingURL=contact.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contact.d.ts","sourceRoot":"","sources":["../../../src/templates/demos/contact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEzD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAkG7D"}