@jasonshimmy/vite-plugin-cer-app 0.6.0 → 0.8.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 (108) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/IMPLEMENTATION_PLAN.md +2 -2
  3. package/ROADMAP.md +278 -0
  4. package/commits.txt +1 -1
  5. package/dist/cli/commands/preview-isr.d.ts +15 -0
  6. package/dist/cli/commands/preview-isr.d.ts.map +1 -1
  7. package/dist/cli/commands/preview-isr.js +28 -0
  8. package/dist/cli/commands/preview-isr.js.map +1 -1
  9. package/dist/cli/commands/preview.d.ts.map +1 -1
  10. package/dist/cli/commands/preview.js +52 -2
  11. package/dist/cli/commands/preview.js.map +1 -1
  12. package/dist/index.d.ts +1 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/plugin/build-ssg.d.ts.map +1 -1
  15. package/dist/plugin/build-ssg.js +13 -1
  16. package/dist/plugin/build-ssg.js.map +1 -1
  17. package/dist/plugin/dev-server.d.ts +1 -0
  18. package/dist/plugin/dev-server.d.ts.map +1 -1
  19. package/dist/plugin/dev-server.js +33 -0
  20. package/dist/plugin/dev-server.js.map +1 -1
  21. package/dist/plugin/dts-generator.d.ts.map +1 -1
  22. package/dist/plugin/dts-generator.js +4 -2
  23. package/dist/plugin/dts-generator.js.map +1 -1
  24. package/dist/plugin/index.d.ts.map +1 -1
  25. package/dist/plugin/index.js +30 -12
  26. package/dist/plugin/index.js.map +1 -1
  27. package/dist/plugin/transforms/auto-import.d.ts.map +1 -1
  28. package/dist/plugin/transforms/auto-import.js +5 -4
  29. package/dist/plugin/transforms/auto-import.js.map +1 -1
  30. package/dist/plugin/virtual/routes.d.ts.map +1 -1
  31. package/dist/plugin/virtual/routes.js +31 -3
  32. package/dist/plugin/virtual/routes.js.map +1 -1
  33. package/dist/runtime/composables/define-middleware.d.ts +15 -0
  34. package/dist/runtime/composables/define-middleware.d.ts.map +1 -0
  35. package/dist/runtime/composables/define-middleware.js +16 -0
  36. package/dist/runtime/composables/define-middleware.js.map +1 -0
  37. package/dist/runtime/composables/index.d.ts +3 -1
  38. package/dist/runtime/composables/index.d.ts.map +1 -1
  39. package/dist/runtime/composables/index.js +2 -1
  40. package/dist/runtime/composables/index.js.map +1 -1
  41. package/dist/runtime/composables/use-runtime-config.d.ts +32 -14
  42. package/dist/runtime/composables/use-runtime-config.d.ts.map +1 -1
  43. package/dist/runtime/composables/use-runtime-config.js +34 -8
  44. package/dist/runtime/composables/use-runtime-config.js.map +1 -1
  45. package/dist/runtime/entry-server-template.d.ts +1 -1
  46. package/dist/runtime/entry-server-template.d.ts.map +1 -1
  47. package/dist/runtime/entry-server-template.js +28 -7
  48. package/dist/runtime/entry-server-template.js.map +1 -1
  49. package/dist/runtime/isr-handler.d.ts +40 -0
  50. package/dist/runtime/isr-handler.d.ts.map +1 -0
  51. package/dist/runtime/isr-handler.js +152 -0
  52. package/dist/runtime/isr-handler.js.map +1 -0
  53. package/dist/types/config.d.ts +14 -0
  54. package/dist/types/config.d.ts.map +1 -1
  55. package/dist/types/config.js.map +1 -1
  56. package/dist/types/index.d.ts +2 -2
  57. package/dist/types/index.d.ts.map +1 -1
  58. package/dist/types/middleware.d.ts +8 -2
  59. package/dist/types/middleware.d.ts.map +1 -1
  60. package/dist/types/page.d.ts +14 -0
  61. package/dist/types/page.d.ts.map +1 -1
  62. package/docs/cli.md +1 -0
  63. package/docs/composables.md +32 -7
  64. package/docs/configuration.md +53 -3
  65. package/docs/data-loading.md +69 -2
  66. package/docs/middleware.md +53 -25
  67. package/docs/rendering-modes.md +63 -2
  68. package/docs/routing.md +33 -0
  69. package/e2e/cypress/e2e/error-boundary.cy.ts +43 -0
  70. package/e2e/cypress/e2e/isr-nested-runtime.cy.ts +6 -4
  71. package/e2e/cypress/e2e/middleware.cy.ts +45 -0
  72. package/e2e/cypress/e2e/per-route-render.cy.ts +70 -0
  73. package/e2e/kitchen-sink/app/error.ts +7 -2
  74. package/e2e/kitchen-sink/app/middleware/auth.ts +3 -7
  75. package/e2e/kitchen-sink/app/pages/loader-error-test.ts +13 -0
  76. package/e2e/kitchen-sink/app/pages/render-server-test.ts +12 -0
  77. package/e2e/kitchen-sink/app/pages/render-spa-test.ts +12 -0
  78. package/package.json +5 -1
  79. package/src/__tests__/cli/preview-isr.test.ts +74 -0
  80. package/src/__tests__/plugin/build-ssg.test.ts +126 -1
  81. package/src/__tests__/plugin/cer-app-plugin.test.ts +50 -0
  82. package/src/__tests__/plugin/dev-server.test.ts +91 -0
  83. package/src/__tests__/plugin/entry-server-template.test.ts +53 -0
  84. package/src/__tests__/plugin/resolve-config.test.ts +18 -0
  85. package/src/__tests__/plugin/transforms/auto-import.test.ts +16 -0
  86. package/src/__tests__/plugin/virtual/middleware.test.ts +15 -0
  87. package/src/__tests__/plugin/virtual/routes.test.ts +97 -0
  88. package/src/__tests__/runtime/define-middleware.test.ts +43 -0
  89. package/src/__tests__/runtime/isr-handler.test.ts +331 -0
  90. package/src/__tests__/runtime/use-runtime-config.test.ts +62 -1
  91. package/src/cli/commands/preview-isr.ts +33 -0
  92. package/src/cli/commands/preview.ts +58 -1
  93. package/src/index.ts +1 -1
  94. package/src/plugin/build-ssg.ts +11 -1
  95. package/src/plugin/dev-server.ts +34 -1
  96. package/src/plugin/dts-generator.ts +4 -2
  97. package/src/plugin/index.ts +32 -11
  98. package/src/plugin/transforms/auto-import.ts +5 -4
  99. package/src/plugin/virtual/routes.ts +31 -3
  100. package/src/runtime/composables/define-middleware.ts +17 -0
  101. package/src/runtime/composables/index.ts +3 -1
  102. package/src/runtime/composables/use-runtime-config.ts +57 -11
  103. package/src/runtime/entry-server-template.ts +28 -7
  104. package/src/runtime/isr-handler.ts +183 -0
  105. package/src/types/config.ts +15 -0
  106. package/src/types/index.ts +2 -2
  107. package/src/types/middleware.ts +8 -6
  108. package/src/types/page.ts +14 -0
package/CHANGELOG.md CHANGED
@@ -1,6 +1,14 @@
1
1
  # Changelog
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
+ ## [v0.8.0] - 2026-03-21
5
+
6
+ - feat: add middleware support and enhance runtime configuration (78ef4d2)
7
+
8
+ ## [v0.7.0] - 2026-03-21
9
+
10
+ - feat: add per-route render strategies and error handling in ISR (d76fb89)
11
+
4
12
  ## [v0.6.0] - 2026-03-21
5
13
 
6
14
  - feat(ssr): switch server entry from renderToStringWithJITCSSDSD to renderToStreamWithJITCSSDSD for true incremental streaming (cca67d8)
@@ -315,7 +315,7 @@ router's route objects.
315
315
 
316
316
  ---
317
317
 
318
- ### 6.3 Per-route render strategy 🔜
318
+ ### 6.3 Per-route render strategy
319
319
 
320
320
  **Problem:** All routes use the same mode (SPA / SSR / SSG). Nuxt's route
321
321
  rules allow mixing: some routes rendered statically, some on the server, some
@@ -424,7 +424,7 @@ Cloudflare Workers / Deno Deploy adapter. Requires replacing Node's
424
424
  | 5.1 | Data loader hydration | 2 | ✅ |
425
425
  | 6.1 | ISR | 2–3 | ✅ |
426
426
  | 6.2 | Nested layouts | 2–3 | ✅ |
427
- | 6.3 | Per-route render strategy | 3 | 🔜 |
427
+ | 6.3 | Per-route render strategy | 3 | |
428
428
  | 6.4 | Link prefetching | 3 | ✅ |
429
429
  | 6.5 | Route transitions | 3 | ✅ |
430
430
  | 6b | runtimeConfig / public env vars | 2 | ✅ |
package/ROADMAP.md ADDED
@@ -0,0 +1,278 @@
1
+ # @jasonshimmy/vite-plugin-cer-app — Production Roadmap
2
+
3
+ This document captures the next steps needed to make the framework production-grade.
4
+ All items in [IMPLEMENTATION_PLAN.md](./IMPLEMENTATION_PLAN.md) (Phases 1–6b) are complete.
5
+
6
+ ---
7
+
8
+ ## Status Key
9
+
10
+ | Symbol | Meaning |
11
+ |--------|---------|
12
+ | ✅ | Done |
13
+ | 🔨 | In progress |
14
+ | 📋 | Planned (next sprint) |
15
+ | 🔜 | Future sprint |
16
+ | ❌ | Deferred / out of scope |
17
+
18
+ ---
19
+
20
+ ## Phase 8 — Security & Production Hardening
21
+
22
+ ### 8.1 Fix path traversal in preview server ✅
23
+
24
+ **Problem:** `serveStaticFile` in `src/cli/commands/preview.ts` computes
25
+ `join(distDir, urlPath)` without bounding the result. A raw HTTP client can
26
+ send `GET /../../../../etc/nginx/nginx.conf` and `pathe.join` resolves the
27
+ `..` segments outside `distDir`, potentially exposing arbitrary files.
28
+
29
+ **Fix:** After joining, assert the resolved path starts with `resolve(distDir)`
30
+ before opening the file.
31
+
32
+ **Files:** `src/cli/commands/preview.ts`
33
+
34
+ ---
35
+
36
+ ### 8.2 `runtimeConfig.private` — server-only secrets ✅
37
+
38
+ **Problem:** Currently only `runtimeConfig.public` exists. Any value placed
39
+ in `runtimeConfig` is serialized into the client bundle at build time. There
40
+ is no typed, server-only slot for secrets like database URLs or API keys.
41
+
42
+ **Design:**
43
+
44
+ - Add `runtimeConfig.private` to `CerAppConfig`. Values are declared with
45
+ defaults (empty strings) in `cer.config.ts` for typing purposes.
46
+ - At build time, the server bundle (`virtual:cer-app-config` in SSR mode)
47
+ exports `_runtimePrivateDefaults` — the declared keys with their defaults.
48
+ The client bundle never sees these.
49
+ - At **server startup**, `entry-server-template.ts` reads `process.env[key]`
50
+ for each private key, overriding the default. Secrets never appear in
51
+ bundled artifacts.
52
+ - `useRuntimeConfig()` returns `{ public, private }` on the server and
53
+ `{ public }` on the client.
54
+
55
+ ```ts
56
+ // cer.config.ts
57
+ export default defineConfig({
58
+ runtimeConfig: {
59
+ public: { apiBase: process.env.VITE_API_BASE ?? '/api' },
60
+ private: { dbUrl: '', secretKey: '' },
61
+ },
62
+ })
63
+
64
+ // app/pages/dashboard.ts — loader (server-only)
65
+ export const loader = async () => {
66
+ const { private: priv } = useRuntimeConfig()
67
+ const rows = await db.query(priv.dbUrl)
68
+ return { rows }
69
+ }
70
+ ```
71
+
72
+ **Files:**
73
+ - `src/types/config.ts` — add `RuntimePrivateConfig`, update `RuntimeConfig`
74
+ - `src/plugin/index.ts` — `resolveConfig` + `generateAppConfigModule` (SSR-aware), `load` hook passes `ssr` flag
75
+ - `src/runtime/composables/use-runtime-config.ts` — support `private`
76
+ - `src/runtime/entry-server-template.ts` — resolve env vars at startup
77
+ - `src/plugin/dts-generator.ts` — update `virtual:cer-app-config` declaration
78
+
79
+ ---
80
+
81
+ ### 8.3 Preview server hardening 📋
82
+
83
+ **Problem:** The preview server (`cer-app preview`) is used in CI and staging
84
+ but lacks basic production safeguards.
85
+
86
+ **Missing:**
87
+ - Security headers (`X-Content-Type-Options: nosniff`, `X-Frame-Options: DENY`,
88
+ `Referrer-Policy: strict-origin-when-cross-origin`)
89
+ - Request timeouts (slow clients hold connections open indefinitely)
90
+ - Request body size limits
91
+ - Graceful shutdown (drain in-flight requests before `process.exit`)
92
+ - `Cache-Control` with long TTLs for content-hashed assets (currently `no-cache`
93
+ for everything)
94
+
95
+ **Files:** `src/cli/commands/preview.ts`
96
+
97
+ ---
98
+
99
+ ## Phase 9 — Auth Primitives
100
+
101
+ ### 9.1 Client-side route middleware (navigation guards) ✅
102
+
103
+ **Problem:** There is no way to intercept client-side navigations to redirect
104
+ unauthenticated users, check permissions, or run analytics before a page renders.
105
+
106
+ **Design:**
107
+
108
+ The `@jasonshimmy/custom-elements-runtime` router ships with per-route
109
+ navigation guards built in:
110
+
111
+ ```ts
112
+ // Router guard API (from custom-elements-runtime)
113
+ interface Route {
114
+ beforeEnter?: (to: RouteState, from: RouteState) => GuardResult
115
+ onEnter?: (to: RouteState, from: RouteState) => GuardResult
116
+ afterEnter?: (to: RouteState, from: RouteState) => void | Promise<void>
117
+ }
118
+
119
+ type GuardResult = boolean | string | Promise<boolean | string>
120
+ // true → allow navigation
121
+ // false → block navigation
122
+ // string → redirect to that path
123
+ ```
124
+
125
+ Guards receive:
126
+ ```ts
127
+ interface RouteState {
128
+ path: string
129
+ params: Record<string, string>
130
+ query: Record<string, string>
131
+ fragment?: string
132
+ }
133
+ ```
134
+
135
+ The framework wires these guards automatically via `meta.middleware`:
136
+
137
+ *Convention:* Files in `app/middleware/` export a default `MiddlewareFn`.
138
+ A page opts in by listing middleware names in `meta.middleware`.
139
+
140
+ ```ts
141
+ // app/middleware/auth.ts
142
+ export default defineMiddleware(async (to, from) => {
143
+ const isLoggedIn = checkSession()
144
+ if (!isLoggedIn) return '/login' // redirect
145
+ return true // allow
146
+ })
147
+
148
+ // app/pages/dashboard.ts
149
+ export const meta = { middleware: ['auth'] }
150
+ ```
151
+
152
+ *Virtual module:* `virtual:cer-middleware` exports an eager map:
153
+ ```ts
154
+ import auth from '/app/middleware/auth.ts'
155
+ export const middleware = { auth }
156
+ ```
157
+
158
+ *Route generation:* `virtual:cer-routes` generates a `beforeEnter` guard
159
+ for any route that has `meta.middleware`. The guard dynamically imports
160
+ `virtual:cer-middleware`, runs each named function in order, and propagates
161
+ the first non-`true` result (redirect string or `false`) to the router.
162
+
163
+ **Guard execution order:**
164
+ 1. `beforeEnter` fires — early redirect/block opportunity
165
+ 2. `onEnter` fires — final gate before route state commits
166
+ 3. Route state updates in the router store
167
+ 4. `afterEnter` fires — fire-and-forget (analytics, logging)
168
+
169
+ **Redirect loop detection:** The router stops after 10 consecutive redirects
170
+ to prevent infinite loops.
171
+
172
+ *Composable:*
173
+ ```ts
174
+ // defineMiddleware gives TypeScript types without a runtime cost
175
+ export function defineMiddleware(fn: MiddlewareFn): MiddlewareFn { return fn }
176
+ ```
177
+
178
+ **Files:**
179
+ - `src/plugin/virtual/routes.ts` — generate `beforeEnter` using return-value API
180
+ - `src/plugin/virtual/middleware.ts` — already generates the middleware map ✅
181
+ - `src/runtime/composables/define-middleware.ts` — new composable
182
+ - `src/runtime/composables/index.ts` — re-export
183
+ - `src/types/middleware.ts` — update `RouteMiddleware` to return-value API
184
+ - `src/plugin/dts-generator.ts` — add `defineMiddleware` global
185
+
186
+ ---
187
+
188
+ ### 9.2 `useCookie()` composable 📋
189
+
190
+ **Problem:** Session-based auth requires manual `document.cookie` parsing on
191
+ the client and `req.headers.cookie` parsing in loaders. No isomorphic helper
192
+ exists.
193
+
194
+ **Design:** `useCookie(name, options?)` — reads from `req.headers.cookie`
195
+ during SSR (via `AsyncLocalStorage` request context) and from
196
+ `document.cookie` on the client. Writing sets `Set-Cookie` on the server
197
+ response during SSR and `document.cookie` on the client.
198
+
199
+ **Complexity:** Medium. Requires threading the `res` object into the
200
+ `AsyncLocalStorage` data store so `useCookie` can write headers server-side.
201
+
202
+ ---
203
+
204
+ ## Phase 10 — Platform Adapters
205
+
206
+ ### 10.1 Cloudflare Workers adapter 🔜
207
+
208
+ **Problem:** The server bundle uses Node.js streams (`AsyncLocalStorage`,
209
+ `createReadStream`, `IncomingMessage`). Cloudflare Workers run a Web
210
+ platform environment without these.
211
+
212
+ **Design:**
213
+ - Replace `renderToStreamWithJITCSSDSD` with a Web Streams equivalent in
214
+ `entry-server-template.ts` when the `cloudflare` adapter is selected.
215
+ - Swap `AsyncLocalStorage` with `AsyncContext` (TC39 proposal, available in
216
+ Workers) or a request-scoped `Map`.
217
+ - The adapter wraps the handler as a `fetch(Request): Response` function.
218
+ - Build output: a single `worker.js` compatible with `wrangler deploy`.
219
+
220
+ **Complexity:** High. Requires a new server entry template and build pipeline
221
+ changes.
222
+
223
+ ---
224
+
225
+ ### 10.2 Vercel adapter 🔜
226
+
227
+ **Problem:** Vercel expects functions in `.vercel/output/functions/` with a
228
+ specific manifest format.
229
+
230
+ **Design:** A post-build adapter that moves `dist/server/server.js` into the
231
+ Vercel output directory and writes the required `config.json` manifests.
232
+ Static assets are moved to `.vercel/output/static/`.
233
+
234
+ **Complexity:** Medium. Mostly file system manipulation.
235
+
236
+ ---
237
+
238
+ ### 10.3 Netlify adapter 🔜
239
+
240
+ Similar to Vercel but targets Netlify Functions / Edge Functions format.
241
+
242
+ ---
243
+
244
+ ## Phase 11 — DX & Ecosystem
245
+
246
+ ### 11.1 DevTools overlay ❌
247
+
248
+ Browser overlay showing current route, active layout chain, middleware chain,
249
+ ISR cache state, and virtual module contents.
250
+
251
+ ### 11.2 i18n 🔜
252
+
253
+ Convention: `app/i18n/en.json` + `app/i18n/fr.json`. Auto-injected
254
+ `useI18n()` composable that reads the active locale from a cookie/query param.
255
+ `cer-app i18n extract` CLI command for string extraction.
256
+
257
+ ### 11.3 `useSeoMeta()` 📋
258
+
259
+ Thin wrapper around `useHead()` covering OpenGraph, Twitter cards, and
260
+ canonical URL. No new infrastructure needed — all forwarded to `<head>`.
261
+
262
+ ---
263
+
264
+ ## Summary Table
265
+
266
+ | # | Item | Priority | Status |
267
+ |---|------|----------|--------|
268
+ | 8.1 | Path traversal fix in preview server | 🔴 Critical | ✅ |
269
+ | 8.2 | `runtimeConfig.private` (server-only secrets) | 🔴 Critical | ✅ |
270
+ | 8.3 | Preview server hardening (headers, timeouts, graceful shutdown) | 🟡 High | 📋 |
271
+ | 9.1 | Client-side route middleware (navigation guards) | 🟡 High | ✅ |
272
+ | 9.2 | `useCookie()` composable | 🟡 High | 📋 |
273
+ | 10.1 | Cloudflare Workers adapter | 🟢 Medium | 🔜 |
274
+ | 10.2 | Vercel adapter | 🟢 Medium | 🔜 |
275
+ | 10.3 | Netlify adapter | 🟢 Medium | 🔜 |
276
+ | 11.1 | DevTools overlay | 🟢 Medium | ❌ |
277
+ | 11.2 | i18n | 🟢 Medium | 🔜 |
278
+ | 11.3 | `useSeoMeta()` | 🟢 Medium | 📋 |
package/commits.txt CHANGED
@@ -1 +1 @@
1
- - feat(ssr): switch server entry from renderToStringWithJITCSSDSD to renderToStreamWithJITCSSDSD for true incremental streaming (cca67d8)
1
+ - feat: add middleware support and enhance runtime configuration (78ef4d2)
@@ -16,6 +16,12 @@ export interface IsrCacheEntry {
16
16
  }
17
17
  export type IsrCacheStatus = 'HIT' | 'STALE' | 'MISS';
18
18
  export type SsrHandlerFn = (req: IncomingMessage, res: ServerResponse) => void | Promise<void>;
19
+ /**
20
+ * Returns `true` when `urlPath` joined onto `rootDir` resolves to a path that
21
+ * is strictly inside (or equal to) `rootDir`. A traversal attempt such as
22
+ * `../../../../etc/passwd` would resolve outside `rootDir` and return `false`.
23
+ */
24
+ export declare function isPathBounded(rootDir: string, urlPath: string): boolean;
19
25
  /**
20
26
  * Tests whether a route path pattern matches a URL path string.
21
27
  * Normalises trailing slashes and supports `:param` and `:param*` (catch-all)
@@ -27,6 +33,15 @@ export type SsrHandlerFn = (req: IncomingMessage, res: ServerResponse) => void |
27
33
  * matchRoutePattern('/about', '/contact') // false
28
34
  */
29
35
  export declare function matchRoutePattern(pattern: string, urlPath: string): boolean;
36
+ /**
37
+ * Returns the per-route `render` strategy ('static' | 'server' | 'spa') for
38
+ * the route that best matches `urlPath`, or `null` when no route matches or
39
+ * none declares a render mode.
40
+ */
41
+ export declare function findRenderMode(routes: Array<{
42
+ path: string;
43
+ meta?: Record<string, unknown>;
44
+ }>, urlPath: string): 'static' | 'server' | 'spa' | null;
30
45
  /**
31
46
  * Looks up the `meta.ssg.revalidate` TTL (in seconds) for the route that best
32
47
  * matches `urlPath`. Returns `null` when no route matches or none defines
@@ -1 +1 @@
1
- {"version":3,"file":"preview-isr.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/preview-isr.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAIhE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,+EAA+E;IAC/E,YAAY,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAA;AAErD,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAI9F;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAW3E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,EAC/D,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CAQf;AAID;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAsC/B;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,cAAc,GAC1B,IAAI,CAON"}
1
+ {"version":3,"file":"preview-isr.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/preview-isr.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAIhE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,+EAA+E;IAC/E,YAAY,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAA;AAErD,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAI9F;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAIvE;AAID;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAW3E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,EAC/D,OAAO,EAAE,MAAM,GACd,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,CASpC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,EAC/D,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CAQf;AAID;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAsC/B;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,cAAc,EACnB,WAAW,EAAE,cAAc,GAC1B,IAAI,CAON"}
@@ -4,7 +4,19 @@
4
4
  * Extracted into their own module so they can be unit-tested independently
5
5
  * from the HTTP server wiring in preview.ts.
6
6
  */
7
+ import { resolve, join } from 'pathe';
7
8
  import { Readable } from 'node:stream';
9
+ // ─── Path traversal guard ─────────────────────────────────────────────────────
10
+ /**
11
+ * Returns `true` when `urlPath` joined onto `rootDir` resolves to a path that
12
+ * is strictly inside (or equal to) `rootDir`. A traversal attempt such as
13
+ * `../../../../etc/passwd` would resolve outside `rootDir` and return `false`.
14
+ */
15
+ export function isPathBounded(rootDir, urlPath) {
16
+ const safeRoot = resolve(rootDir);
17
+ const resolved = resolve(join(rootDir, urlPath));
18
+ return resolved === safeRoot || resolved.startsWith(safeRoot + '/');
19
+ }
8
20
  // ─── Route pattern matching ───────────────────────────────────────────────────
9
21
  /**
10
22
  * Tests whether a route path pattern matches a URL path string.
@@ -28,6 +40,22 @@ export function matchRoutePattern(pattern, urlPath) {
28
40
  '$';
29
41
  return new RegExp(regexStr).test(norm(urlPath));
30
42
  }
43
+ /**
44
+ * Returns the per-route `render` strategy ('static' | 'server' | 'spa') for
45
+ * the route that best matches `urlPath`, or `null` when no route matches or
46
+ * none declares a render mode.
47
+ */
48
+ export function findRenderMode(routes, urlPath) {
49
+ for (const route of routes) {
50
+ if (matchRoutePattern(route.path, urlPath)) {
51
+ const render = route.meta?.render;
52
+ if (render === 'static' || render === 'server' || render === 'spa')
53
+ return render;
54
+ return null;
55
+ }
56
+ }
57
+ return null;
58
+ }
31
59
  /**
32
60
  * Looks up the `meta.ssg.revalidate` TTL (in seconds) for the route that best
33
61
  * matches `urlPath`. Returns `null` when no route matches or none defines
@@ -1 +1 @@
1
- {"version":3,"file":"preview-isr.js","sourceRoot":"","sources":["../../../src/cli/commands/preview-isr.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAmBtC,iFAAiF;AAEjF;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,OAAe;IAChE,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAA;IAChE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAA;IAChD,MAAM,QAAQ,GACZ,GAAG;QACH,IAAI,CAAC,OAAO,CAAC;aACV,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,gDAAgD;aACtF,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;aAC1B,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;QAC9B,GAAG,CAAA;IACL,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,MAA+D,EAC/D,OAAe;IAEf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,GAA0C,CAAA;YAClE,IAAI,OAAO,GAAG,EAAE,UAAU,KAAK,QAAQ;gBAAE,OAAO,GAAG,CAAC,UAAU,CAAA;QAChE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,iFAAiF;AAEjF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAe,EACf,OAAqB,EACrB,UAAkB;IAElB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,EAAE,IAAI,KAAI,CAAC,EAAE,CAAC,EAAE;QACrD,GAAG,EAAE,OAAO;QACZ,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,IAAI;KACb,CAA+B,CAAA;IAEhC,OAAO,IAAI,OAAO,CAAuB,CAAC,OAAO,EAAE,EAAE;QACnD,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,MAAM,OAAO,GAA2B,EAAE,CAAA;QAC1C,IAAI,cAAc,GAAG,GAAG,CAAA;QAExB,MAAM,OAAO,GAAG;YACd,IAAI,UAAU,KAAK,OAAO,cAAc,CAAA,CAAC,CAAC;YAC1C,IAAI,UAAU,CAAC,CAAS,IAAI,cAAc,GAAG,CAAC,CAAA,CAAC,CAAC;YAChD,WAAW,EAAE,KAAK;YAClB,SAAS,CAAC,IAAY,EAAE,KAAwB;gBAC9C,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACrF,OAAO,IAAI,CAAA;YACb,CAAC;YACD,SAAS,CAAC,IAAY,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA,CAAC,CAAC;YAC9D,KAAK,CAAC,KAAsB;gBAC1B,IAAI,KAAK,IAAI,IAAI;oBAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAC3F,OAAO,IAAI,CAAA;YACb,CAAC;YACD,GAAG,CAAC,KAAuB;gBACzB,IAAI,KAAK,IAAI,IAAI;oBAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAC3F,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;gBACpD,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC5G,OAAO,IAAI,CAAA;YACb,CAAC;SAC2B,CAAA;QAE9B,wEAAwE;QACxE,uCAAuC;QACvC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAChF,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAoB,EACpB,GAAmB,EACnB,WAA2B;IAE3B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC5B,CAAC;IACD,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IACrC,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;IACjC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AACrB,CAAC"}
1
+ {"version":3,"file":"preview-isr.js","sourceRoot":"","sources":["../../../src/cli/commands/preview-isr.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA6FnC,wBAAgB,cAAc,IAAI,OAAO,CAsNxC"}
1
+ {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAsGnC,wBAAgB,cAAc,IAAI,OAAO,CAsQxC"}
@@ -3,7 +3,7 @@ import { createServer as createHttpServer } from 'node:http';
3
3
  import { createReadStream, existsSync, statSync } from 'node:fs';
4
4
  import { resolve, join, extname } from 'pathe';
5
5
  import { pathToFileURL } from 'node:url';
6
- import { findRevalidate, renderForIsr, serveFromIsrCache, } from './preview-isr.js';
6
+ import { isPathBounded, findRevalidate, findRenderMode, renderForIsr, serveFromIsrCache, } from './preview-isr.js';
7
7
  // ─── API route matching ───────────────────────────────────────────────────────
8
8
  /**
9
9
  * Matches an API route pattern (e.g. '/api/items/:id') against a URL path.
@@ -55,6 +55,12 @@ function getMimeType(filePath) {
55
55
  */
56
56
  function serveStaticFile(req, res, distDir) {
57
57
  const urlPath = (req.url ?? '/').split('?')[0];
58
+ // Guard against path traversal: resolved path must stay within distDir.
59
+ if (!isPathBounded(distDir, urlPath)) {
60
+ res.statusCode = 400;
61
+ res.end('Bad Request');
62
+ return true;
63
+ }
58
64
  // Try exact file path
59
65
  let filePath = join(distDir, urlPath);
60
66
  if (!existsSync(filePath) || statSync(filePath).isDirectory()) {
@@ -164,6 +170,49 @@ export function previewCommand() {
164
170
  if (served)
165
171
  return;
166
172
  }
173
+ // Per-route render strategy — checked before ISR.
174
+ const renderMode = findRenderMode(pageRoutes, urlPath);
175
+ // render: 'spa' — skip SSR, serve the client index.html shell.
176
+ if (renderMode === 'spa') {
177
+ const spaIndex = join(distDir, 'client/index.html');
178
+ if (existsSync(spaIndex)) {
179
+ res.setHeader('Content-Type', 'text/html; charset=utf-8');
180
+ res.setHeader('Cache-Control', 'no-cache');
181
+ createReadStream(spaIndex).pipe(res);
182
+ }
183
+ else {
184
+ res.statusCode = 404;
185
+ res.setHeader('Content-Type', 'text/plain');
186
+ res.end('Not Found');
187
+ }
188
+ return;
189
+ }
190
+ // render: 'static' — try pre-rendered HTML from dist/, fall through to SSR.
191
+ if (renderMode === 'static') {
192
+ const staticFile = urlPath === '/'
193
+ ? join(distDir, 'index.html')
194
+ : join(distDir, urlPath.replace(/^\//, ''), 'index.html');
195
+ if (existsSync(staticFile)) {
196
+ res.setHeader('Content-Type', 'text/html; charset=utf-8');
197
+ res.setHeader('Cache-Control', 'no-cache');
198
+ createReadStream(staticFile).pipe(res);
199
+ return;
200
+ }
201
+ // Fall through to SSR if no pre-rendered file exists.
202
+ }
203
+ // render: 'server' — always SSR, bypass ISR cache.
204
+ if (renderMode === 'server') {
205
+ try {
206
+ await handler(req, res);
207
+ }
208
+ catch (err) {
209
+ console.error('[cer-app] SSR handler error:', err);
210
+ res.statusCode = 500;
211
+ res.setHeader('Content-Type', 'text/plain');
212
+ res.end('Internal Server Error');
213
+ }
214
+ return;
215
+ }
167
216
  // ISR: check whether this route has a revalidate TTL.
168
217
  const revalidate = findRevalidate(pageRoutes, urlPath);
169
218
  if (revalidate !== null) {
@@ -249,7 +298,8 @@ export function previewCommand() {
249
298
  const ext = extname(urlPath).toLowerCase();
250
299
  if (ext && ext !== '.html' && existsSync(clientDist)) {
251
300
  const assetPath = join(clientDist, urlPath);
252
- if (existsSync(assetPath) && !statSync(assetPath).isDirectory()) {
301
+ if (isPathBounded(clientDist, urlPath) &&
302
+ existsSync(assetPath) && !statSync(assetPath).isDirectory()) {
253
303
  res.setHeader('Content-Type', getMimeType(assetPath));
254
304
  res.setHeader('Cache-Control', 'no-cache');
255
305
  createReadStream(assetPath).pipe(res);
@@ -1 +1 @@
1
- {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../src/cli/commands/preview.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../src/cli/commands/preview.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,6 +4,6 @@ export type { CerAppConfig, SsgConfig, JitCssConfig, AutoImportsConfig } from '.
4
4
  export type { HydrateStrategy, SsgPathsContext, PageSsgConfig, PageMeta, PageLoaderContext, PageLoader } from './types/page.js';
5
5
  export type { ApiRequest, ApiResponse, ApiHandler, ApiContext } from './types/api.js';
6
6
  export type { AppContext, AppPlugin } from './types/plugin.js';
7
- export type { NextFunction, RouteMiddleware, ServerMiddleware } from './types/middleware.js';
7
+ export type { MiddlewareFn, GuardResult, ServerMiddleware } from './types/middleware.js';
8
8
  export type { ResolvedCerConfig } from './plugin/dev-server.js';
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACjG,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC/H,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACrF,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC9D,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAG5F,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACjG,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC/H,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACrF,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC9D,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAGxF,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"build-ssg.d.ts","sourceRoot":"","sources":["../../src/plugin/build-ssg.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AA8IxD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,iBAAiB,EACzB,cAAc,GAAE,UAAe,GAC9B,OAAO,CAAC,IAAI,CAAC,CAmEf"}
1
+ {"version":3,"file":"build-ssg.d.ts","sourceRoot":"","sources":["../../src/plugin/build-ssg.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAwJxD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,iBAAiB,EACzB,cAAc,GAAE,UAAe,GAC9B,OAAO,CAAC,IAAI,CAAC,CAmEf"}
@@ -1,4 +1,4 @@
1
- import { writeFile, mkdir } from 'node:fs/promises';
1
+ import { writeFile, mkdir, readFile } from 'node:fs/promises';
2
2
  import { existsSync } from 'node:fs';
3
3
  import { join } from 'pathe';
4
4
  import { createServer } from 'vite';
@@ -28,6 +28,16 @@ async function collectSsgPaths(config, viteUserConfig) {
28
28
  const staticFiles = [];
29
29
  const dynamicFiles = [];
30
30
  for (const file of files) {
31
+ // Skip routes that declare render: 'server' or render: 'spa' — they are
32
+ // either always-SSR or client-only and must not be pre-rendered.
33
+ try {
34
+ const src = await readFile(file, 'utf-8');
35
+ const renderMatch = src.match(/render\s*:\s*['"]([^'"]+)['"]/);
36
+ const renderMode = renderMatch ? renderMatch[1] : null;
37
+ if (renderMode === 'server' || renderMode === 'spa')
38
+ continue;
39
+ }
40
+ catch { /* ignore read errors */ }
31
41
  const entry = buildRouteEntry(file, config.pagesDir);
32
42
  if (!entry.isDynamic && !entry.isCatchAll) {
33
43
  staticFiles.push(file);
@@ -53,6 +63,8 @@ async function collectSsgPaths(config, viteUserConfig) {
53
63
  try {
54
64
  const pageMod = await viteServer.ssrLoadModule(file);
55
65
  const pageMeta = pageMod.meta ?? pageMod.pageMeta;
66
+ if (pageMeta?.render === 'server' || pageMeta?.render === 'spa')
67
+ continue;
56
68
  if (pageMeta?.ssg?.paths) {
57
69
  const pathsResult = await pageMeta.ssg.paths();
58
70
  for (const ctx of pathsResult) {
@@ -1 +1 @@
1
- {"version":3,"file":"build-ssg.js","sourceRoot":"","sources":["../../src/plugin/build-ssg.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-ssg.js","sourceRoot":"","sources":["../../src/plugin/build-ssg.ts"],"names":[],"mappings":"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"}