@jasonshimmy/vite-plugin-cer-app 0.7.0 → 0.9.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 (98) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/ROADMAP.md +278 -0
  3. package/commits.txt +1 -1
  4. package/dist/cli/commands/preview-isr.d.ts +6 -0
  5. package/dist/cli/commands/preview-isr.d.ts.map +1 -1
  6. package/dist/cli/commands/preview-isr.js +12 -0
  7. package/dist/cli/commands/preview-isr.js.map +1 -1
  8. package/dist/cli/commands/preview.d.ts.map +1 -1
  9. package/dist/cli/commands/preview.js +66 -6
  10. package/dist/cli/commands/preview.js.map +1 -1
  11. package/dist/index.d.ts +3 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/plugin/dev-server.d.ts +1 -0
  14. package/dist/plugin/dev-server.d.ts.map +1 -1
  15. package/dist/plugin/dts-generator.d.ts.map +1 -1
  16. package/dist/plugin/dts-generator.js +4 -2
  17. package/dist/plugin/dts-generator.js.map +1 -1
  18. package/dist/plugin/index.d.ts.map +1 -1
  19. package/dist/plugin/index.js +30 -12
  20. package/dist/plugin/index.js.map +1 -1
  21. package/dist/plugin/transforms/auto-import.d.ts.map +1 -1
  22. package/dist/plugin/transforms/auto-import.js +5 -4
  23. package/dist/plugin/transforms/auto-import.js.map +1 -1
  24. package/dist/plugin/virtual/routes.d.ts.map +1 -1
  25. package/dist/plugin/virtual/routes.js +7 -1
  26. package/dist/plugin/virtual/routes.js.map +1 -1
  27. package/dist/runtime/composables/define-middleware.d.ts +15 -0
  28. package/dist/runtime/composables/define-middleware.d.ts.map +1 -0
  29. package/dist/runtime/composables/define-middleware.js +16 -0
  30. package/dist/runtime/composables/define-middleware.js.map +1 -0
  31. package/dist/runtime/composables/index.d.ts +7 -1
  32. package/dist/runtime/composables/index.d.ts.map +1 -1
  33. package/dist/runtime/composables/index.js +4 -1
  34. package/dist/runtime/composables/index.js.map +1 -1
  35. package/dist/runtime/composables/use-cookie.d.ts +38 -0
  36. package/dist/runtime/composables/use-cookie.d.ts.map +1 -0
  37. package/dist/runtime/composables/use-cookie.js +104 -0
  38. package/dist/runtime/composables/use-cookie.js.map +1 -0
  39. package/dist/runtime/composables/use-runtime-config.d.ts +32 -14
  40. package/dist/runtime/composables/use-runtime-config.d.ts.map +1 -1
  41. package/dist/runtime/composables/use-runtime-config.js +42 -8
  42. package/dist/runtime/composables/use-runtime-config.js.map +1 -1
  43. package/dist/runtime/composables/use-seo-meta.d.ts +42 -0
  44. package/dist/runtime/composables/use-seo-meta.d.ts.map +1 -0
  45. package/dist/runtime/composables/use-seo-meta.js +58 -0
  46. package/dist/runtime/composables/use-seo-meta.js.map +1 -0
  47. package/dist/runtime/entry-server-template.d.ts +1 -1
  48. package/dist/runtime/entry-server-template.d.ts.map +1 -1
  49. package/dist/runtime/entry-server-template.js +15 -3
  50. package/dist/runtime/entry-server-template.js.map +1 -1
  51. package/dist/types/config.d.ts +14 -0
  52. package/dist/types/config.d.ts.map +1 -1
  53. package/dist/types/config.js.map +1 -1
  54. package/dist/types/index.d.ts +2 -2
  55. package/dist/types/index.d.ts.map +1 -1
  56. package/dist/types/middleware.d.ts +8 -2
  57. package/dist/types/middleware.d.ts.map +1 -1
  58. package/docs/cli.md +5 -0
  59. package/docs/composables.md +165 -7
  60. package/docs/configuration.md +53 -3
  61. package/docs/middleware.md +53 -25
  62. package/e2e/cypress/e2e/cookie.cy.ts +68 -0
  63. package/e2e/cypress/e2e/middleware.cy.ts +45 -0
  64. package/e2e/cypress/e2e/preview-hardening.cy.ts +79 -0
  65. package/e2e/cypress/e2e/seo-meta.cy.ts +108 -0
  66. package/e2e/kitchen-sink/app/middleware/auth.ts +3 -7
  67. package/e2e/kitchen-sink/app/pages/cookie-test.ts +22 -0
  68. package/e2e/kitchen-sink/app/pages/seo-test.ts +23 -0
  69. package/package.json +1 -1
  70. package/src/__tests__/cli/preview-hardening.test.ts +175 -0
  71. package/src/__tests__/cli/preview-isr.test.ts +30 -0
  72. package/src/__tests__/plugin/cer-app-plugin.test.ts +50 -0
  73. package/src/__tests__/plugin/entry-server-template.test.ts +21 -0
  74. package/src/__tests__/plugin/resolve-config.test.ts +18 -0
  75. package/src/__tests__/plugin/transforms/auto-import.test.ts +39 -0
  76. package/src/__tests__/plugin/virtual/middleware.test.ts +15 -0
  77. package/src/__tests__/plugin/virtual/routes.test.ts +32 -0
  78. package/src/__tests__/runtime/define-middleware.test.ts +43 -0
  79. package/src/__tests__/runtime/use-cookie.test.ts +218 -0
  80. package/src/__tests__/runtime/use-runtime-config.test.ts +86 -2
  81. package/src/__tests__/runtime/use-seo-meta.test.ts +109 -0
  82. package/src/cli/commands/preview-isr.ts +14 -0
  83. package/src/cli/commands/preview.ts +78 -6
  84. package/src/index.ts +3 -1
  85. package/src/plugin/dev-server.ts +1 -1
  86. package/src/plugin/dts-generator.ts +4 -2
  87. package/src/plugin/index.ts +32 -11
  88. package/src/plugin/transforms/auto-import.ts +5 -4
  89. package/src/plugin/virtual/routes.ts +7 -1
  90. package/src/runtime/composables/define-middleware.ts +17 -0
  91. package/src/runtime/composables/index.ts +7 -1
  92. package/src/runtime/composables/use-cookie.ts +128 -0
  93. package/src/runtime/composables/use-runtime-config.ts +67 -11
  94. package/src/runtime/composables/use-seo-meta.ts +75 -0
  95. package/src/runtime/entry-server-template.ts +15 -3
  96. package/src/types/config.ts +15 -0
  97. package/src/types/index.ts +2 -2
  98. package/src/types/middleware.ts +8 -6
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.9.0] - 2026-03-21
5
+
6
+ - feat: add useCookie and useSeoMeta composables with tests (6536902)
7
+
8
+ ## [v0.8.0] - 2026-03-21
9
+
10
+ - feat: add middleware support and enhance runtime configuration (78ef4d2)
11
+
4
12
  ## [v0.7.0] - 2026-03-21
5
13
 
6
14
  - feat: add per-route render strategies and error handling in ISR (d76fb89)
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: add per-route render strategies and error handling in ISR (d76fb89)
1
+ - feat: add useCookie and useSeoMeta composables with tests (6536902)
@@ -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)
@@ -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,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"}
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.
@@ -1 +1 @@
1
- {"version":3,"file":"preview-isr.js","sourceRoot":"","sources":["../../../src/cli/commands/preview-isr.ts"],"names":[],"mappings":"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"}
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;AA8FnC,wBAAgB,cAAc,IAAI,OAAO,CAmQxC"}
1
+ {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAkJnC,wBAAgB,cAAc,IAAI,OAAO,CAuRxC"}
@@ -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, findRenderMode, 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.
@@ -49,12 +49,36 @@ function getMimeType(filePath) {
49
49
  const ext = extname(filePath).toLowerCase();
50
50
  return MIME_TYPES[ext] ?? 'application/octet-stream';
51
51
  }
52
+ /**
53
+ * Returns the appropriate Cache-Control header value for a file.
54
+ * Vite content-hashes assets placed in the /assets/ directory, so they
55
+ * can be cached indefinitely. Everything else (HTML, etc.) must not be cached.
56
+ */
57
+ function getCacheControl(filePath) {
58
+ if (filePath.includes('/assets/'))
59
+ return 'public, max-age=31536000, immutable';
60
+ return 'no-cache';
61
+ }
62
+ /**
63
+ * Sets standard security headers on every response.
64
+ */
65
+ function setSecurityHeaders(res) {
66
+ res.setHeader('X-Content-Type-Options', 'nosniff');
67
+ res.setHeader('X-Frame-Options', 'DENY');
68
+ res.setHeader('Referrer-Policy', 'strict-origin-when-cross-origin');
69
+ }
52
70
  /**
53
71
  * Serves a static file from the dist directory.
54
72
  * Returns true if the file was served, false otherwise.
55
73
  */
56
74
  function serveStaticFile(req, res, distDir) {
57
75
  const urlPath = (req.url ?? '/').split('?')[0];
76
+ // Guard against path traversal: resolved path must stay within distDir.
77
+ if (!isPathBounded(distDir, urlPath)) {
78
+ res.statusCode = 400;
79
+ res.end('Bad Request');
80
+ return true;
81
+ }
58
82
  // Try exact file path
59
83
  let filePath = join(distDir, urlPath);
60
84
  if (!existsSync(filePath) || statSync(filePath).isDirectory()) {
@@ -72,10 +96,33 @@ function serveStaticFile(req, res, distDir) {
72
96
  }
73
97
  }
74
98
  res.setHeader('Content-Type', getMimeType(filePath));
75
- res.setHeader('Cache-Control', 'no-cache');
99
+ res.setHeader('Cache-Control', getCacheControl(filePath));
100
+ setSecurityHeaders(res);
76
101
  createReadStream(filePath).pipe(res);
77
102
  return true;
78
103
  }
104
+ /**
105
+ * Registers SIGTERM/SIGINT handlers that gracefully drain the server before exiting.
106
+ * Waits up to 10 seconds for in-flight requests to complete, then force-exits.
107
+ */
108
+ function registerGracefulShutdown(server) {
109
+ function shutdown(signal) {
110
+ console.log(`[cer-app] Received ${signal}, shutting down gracefully...`);
111
+ server.close(() => {
112
+ console.log('[cer-app] Server closed.');
113
+ process.exit(0);
114
+ });
115
+ // Force exit if connections haven't drained within 10 seconds.
116
+ const t = setTimeout(() => {
117
+ console.error('[cer-app] Forced shutdown after 10 s — connections did not drain.');
118
+ process.exit(1);
119
+ }, 10_000);
120
+ // Allow the Node.js event loop to exit before the timeout fires if all other work is done.
121
+ t.unref();
122
+ }
123
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
124
+ process.on('SIGINT', () => shutdown('SIGINT'));
125
+ }
79
126
  export function previewCommand() {
80
127
  return new Command('preview')
81
128
  .description('Preview the production build')
@@ -120,6 +167,10 @@ export function previewCommand() {
120
167
  // ISR cache: path → cached render entry.
121
168
  const isrCache = new Map();
122
169
  const server = createHttpServer(async (req, res) => {
170
+ setSecurityHeaders(res);
171
+ // Default: HTML and API responses must not be cached. Asset paths below
172
+ // override this with getCacheControl() for content-hashed files.
173
+ res.setHeader('Cache-Control', 'no-cache');
123
174
  const url = req.url ?? '/';
124
175
  const urlPath = url.split('?')[0];
125
176
  const method = req.method ?? 'GET';
@@ -272,9 +323,14 @@ export function previewCommand() {
272
323
  res.end('Internal Server Error');
273
324
  }
274
325
  });
326
+ // Protect against slow-send attacks: abort requests that stall during
327
+ // header delivery or that take too long to complete.
328
+ server.headersTimeout = 10_000; // 10 s to receive all request headers
329
+ server.requestTimeout = 30_000; // 30 s for the full request/response cycle
275
330
  server.listen(port, options.host, () => {
276
331
  console.log(`[cer-app] SSR preview running at http://${options.host}:${port}`);
277
332
  });
333
+ registerGracefulShutdown(server);
278
334
  }
279
335
  else {
280
336
  // Static file server (SPA / SSG)
@@ -284,6 +340,8 @@ export function previewCommand() {
284
340
  process.exit(1);
285
341
  }
286
342
  const server = createHttpServer((req, res) => {
343
+ setSecurityHeaders(res);
344
+ res.setHeader('Cache-Control', 'no-cache');
287
345
  const urlPath = (req.url ?? '/').split('?')[0];
288
346
  // SSG builds put assets in dist/client/ while HTML lives in dist/.
289
347
  // For requests with a non-HTML file extension, check dist/client/ first
@@ -292,9 +350,10 @@ export function previewCommand() {
292
350
  const ext = extname(urlPath).toLowerCase();
293
351
  if (ext && ext !== '.html' && existsSync(clientDist)) {
294
352
  const assetPath = join(clientDist, urlPath);
295
- if (existsSync(assetPath) && !statSync(assetPath).isDirectory()) {
353
+ if (isPathBounded(clientDist, urlPath) &&
354
+ existsSync(assetPath) && !statSync(assetPath).isDirectory()) {
296
355
  res.setHeader('Content-Type', getMimeType(assetPath));
297
- res.setHeader('Cache-Control', 'no-cache');
356
+ res.setHeader('Cache-Control', getCacheControl(assetPath));
298
357
  createReadStream(assetPath).pipe(res);
299
358
  return;
300
359
  }
@@ -305,12 +364,13 @@ export function previewCommand() {
305
364
  res.end('Not Found');
306
365
  }
307
366
  });
367
+ server.headersTimeout = 10_000;
368
+ server.requestTimeout = 30_000;
308
369
  server.listen(port, options.host, () => {
309
370
  console.log(`[cer-app] Static preview running at http://${options.host}:${port}`);
310
371
  });
372
+ registerGracefulShutdown(server);
311
373
  }
312
- process.on('SIGTERM', () => process.exit(0));
313
- process.on('SIGINT', () => process.exit(0));
314
374
  });
315
375
  }
316
376
  //# sourceMappingURL=preview.js.map
@@ -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,8 @@ 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
+ export type { SeoMetaInput } from './runtime/composables/use-seo-meta.js';
9
+ export type { CookieOptions, CookieRef } from './runtime/composables/use-cookie.js';
8
10
  export type { ResolvedCerConfig } from './plugin/dev-server.js';
9
11
  //# 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;AACxF,YAAY,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAA;AACzE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAGnF,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA"}
@@ -33,6 +33,7 @@ export interface ResolvedCerConfig {
33
33
  };
34
34
  runtimeConfig: {
35
35
  public: Record<string, unknown>;
36
+ private: Record<string, string>;
36
37
  };
37
38
  }
38
39
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../../src/plugin/dev-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AAIzC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAA;IAC1E,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;KAAE,CAAA;IAC9D,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAA;IACtD,WAAW,EAAE;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAA;IACjG,aAAa,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;CACnD;AA0GD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,iBAAiB,GACxB,IAAI,CAkKN"}
1
+ {"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../../src/plugin/dev-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AAIzC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAA;IAC1E,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;KAAE,CAAA;IAC9D,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAA;IACtD,WAAW,EAAE;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAA;IACjG,aAAa,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;CACpF;AA0GD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,iBAAiB,GACxB,IAAI,CAkKN"}
@@ -1 +1 @@
1
- {"version":3,"file":"dts-generator.d.ts","sourceRoot":"","sources":["../../src/plugin/dts-generator.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAgCrE;AAqCD;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAiBhG;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CA8CjB;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CAwDjB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC,CAWf"}
1
+ {"version":3,"file":"dts-generator.d.ts","sourceRoot":"","sources":["../../src/plugin/dts-generator.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAgCrE;AAqCD;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAiBhG;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CA8CjB;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CA0DjB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -69,7 +69,7 @@ const RUNTIME_GLOBALS = [
69
69
  'useTeleport',
70
70
  ];
71
71
  const DIRECTIVE_GLOBALS = ['when', 'each', 'match', 'anchorBlock'];
72
- const FRAMEWORK_GLOBALS = ['useHead', 'usePageData', 'useInject', 'useRuntimeConfig'];
72
+ const FRAMEWORK_GLOBALS = ['useHead', 'usePageData', 'useInject', 'useRuntimeConfig', 'defineMiddleware', 'useSeoMeta', 'useCookie'];
73
73
  /**
74
74
  * Scans a composables directory and returns a map of export name → file path.
75
75
  * Uses a simple regex to find exported identifiers.
@@ -182,9 +182,11 @@ export async function generateVirtualModuleDts(root, composablesDir, composableE
182
182
  lines.push(`}`);
183
183
  lines.push('');
184
184
  lines.push(`declare module 'virtual:cer-app-config' {`);
185
- lines.push(` import type { RuntimePublicConfig } from '@jasonshimmy/vite-plugin-cer-app/types'`);
185
+ lines.push(` import type { RuntimePublicConfig, RuntimePrivateConfig } from '@jasonshimmy/vite-plugin-cer-app/types'`);
186
186
  lines.push(` export const appConfig: { mode: string; router: Record<string, unknown>; ssg: Record<string, unknown> }`);
187
187
  lines.push(` export const runtimeConfig: { public: RuntimePublicConfig }`);
188
+ lines.push(` /** Server-only — present only in the SSR bundle. Always \`undefined\` in the client bundle. */`);
189
+ lines.push(` export const _runtimePrivateDefaults: RuntimePrivateConfig | undefined`);
188
190
  lines.push(` export default appConfig`);
189
191
  lines.push(`}`);
190
192
  lines.push('');