@jasonshimmy/vite-plugin-cer-app 0.20.1 → 0.20.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/README.md +1 -0
- package/commits.txt +2 -1
- package/dist/plugin/dev-server.d.ts.map +1 -1
- package/dist/plugin/dev-server.js +5 -2
- package/dist/plugin/dev-server.js.map +1 -1
- package/dist/types/page.d.ts +2 -1
- package/dist/types/page.d.ts.map +1 -1
- package/docs/data-loading.md +47 -20
- package/e2e/cypress/e2e/error-boundary.cy.ts +20 -0
- package/e2e/kitchen-sink/app/pages/loader-response-error-test.ts +13 -0
- package/package.json +2 -2
- package/src/__tests__/plugin/dev-server.test.ts +96 -2
- package/src/__tests__/plugin/entry-server-template.test.ts +7 -0
- package/src/plugin/dev-server.ts +5 -2
- package/src/types/page.ts +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
|
+
## [v0.20.2] - 2026-04-11
|
|
5
|
+
|
|
6
|
+
- fix: correct loader error handling and improve data fetching in SSR/SSG modes (d225a99)
|
|
7
|
+
- docs: add Content Layer section to README for Markdown/JSON support (376a990)
|
|
8
|
+
|
|
4
9
|
## [v0.20.1] - 2026-04-11
|
|
5
10
|
|
|
6
11
|
- fix(content): add fallback title and description extraction from Markdown body (9bab321)
|
package/README.md
CHANGED
|
@@ -220,6 +220,7 @@ component('page-about', () => {
|
|
|
220
220
|
| [Layouts](docs/layouts.md) | Layout system and `<slot>` composition |
|
|
221
221
|
| [Components](docs/components.md) | Auto-registered custom elements |
|
|
222
222
|
| [Composables](docs/composables.md) | Auto-imported composables |
|
|
223
|
+
| [Content Layer](docs/content.md) | File-based Markdown/JSON content with `queryContent()` and `useContentSearch()` |
|
|
223
224
|
| [Plugins](docs/plugins.md) | App plugin system and DI |
|
|
224
225
|
| [Middleware](docs/middleware.md) | Route guards and server middleware |
|
|
225
226
|
| [Server API Routes](docs/server-api.md) | HTTP handlers in `server/api/` |
|
package/commits.txt
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
- fix
|
|
1
|
+
- fix: correct loader error handling and improve data fetching in SSR/SSG modes (d225a99)
|
|
2
|
+
- docs: add Content Layer section to README for Markdown/JSON support (376a990)
|
|
@@ -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;AAKzC,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,OAAO,oBAAoB,EAAE,oBAAoB,CAAA;KAAE,CAAA;IAC9G,IAAI,EAAE,OAAO,oBAAoB,EAAE,UAAU,GAAG,IAAI,CAAA;IACpD,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,GAAG,uBAAuB,GAAG,WAAW,CAAA;KAAE,GAAG,IAAI,CAAA;CACtH;AA0GD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,iBAAiB,GACxB,IAAI,
|
|
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;AAKzC,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,OAAO,oBAAoB,EAAE,oBAAoB,CAAA;KAAE,CAAA;IAC9G,IAAI,EAAE,OAAO,oBAAoB,EAAE,UAAU,GAAG,IAAI,CAAA;IACpD,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,GAAG,uBAAuB,GAAG,WAAW,CAAA;KAAE,GAAG,IAAI,CAAA;CACtH;AA0GD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,iBAAiB,GACxB,IAAI,CA8KN"}
|
|
@@ -186,8 +186,11 @@ export function configureCerDevServer(server, config) {
|
|
|
186
186
|
catch {
|
|
187
187
|
// virtual:cer-server-api not yet ready or empty — continue
|
|
188
188
|
}
|
|
189
|
-
// 3. SSR mode: intercept HTML requests
|
|
190
|
-
|
|
189
|
+
// 3. SSR/SSG mode: intercept HTML requests and server-render them.
|
|
190
|
+
// Both 'ssr' and 'ssg' modes run loaders on the server so usePageData()
|
|
191
|
+
// returns real data during dev — matching production behaviour.
|
|
192
|
+
// 'spa' mode never runs server loaders, so it falls through to the client bundle.
|
|
193
|
+
if (config.mode === 'ssr' || config.mode === 'ssg') {
|
|
191
194
|
const acceptsHtml = (req.headers['accept'] ?? '').includes('text/html') ||
|
|
192
195
|
url === '/' ||
|
|
193
196
|
(!url.includes('.') && !url.startsWith('/api/'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-server.js","sourceRoot":"","sources":["../../src/plugin/dev-server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dev-server.js","sourceRoot":"","sources":["../../src/plugin/dev-server.ts"],"names":[],"mappings":"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"}
|
package/dist/types/page.d.ts
CHANGED
|
@@ -83,7 +83,8 @@ export interface PageMeta {
|
|
|
83
83
|
export interface PageLoaderContext<P extends Record<string, string> = Record<string, string>> {
|
|
84
84
|
params: P;
|
|
85
85
|
query: Record<string, string>;
|
|
86
|
-
|
|
86
|
+
/** Present during SSR/SSG server render. Absent (`undefined`) during client-side navigation. */
|
|
87
|
+
req?: IncomingMessage;
|
|
87
88
|
}
|
|
88
89
|
/**
|
|
89
90
|
* Server-side data loader for a page. Export as `export const loader` (or `export async function loader`)
|
package/dist/types/page.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/types/page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAEhD;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;AAElE,qHAAqH;AACrH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,6GAA6G;AAC7G,MAAM,WAAW,aAAa;IAC5B;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,GAAG,eAAe,EAAE,CAAA;IAC5D;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,wGAAwG;IACxG,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wFAAwF;IACxF,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,GAAG,CAAC,EAAE,aAAa,CAAA;IACnB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC7B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAA;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAC1F,MAAM,EAAE,CAAC,CAAA;IACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,GAAG,EAAE,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/types/page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAEhD;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;AAElE,qHAAqH;AACrH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,6GAA6G;AAC7G,MAAM,WAAW,aAAa;IAC5B;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,eAAe,EAAE,CAAC,GAAG,eAAe,EAAE,CAAA;IAC5D;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,wGAAwG;IACxG,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wFAAwF;IACxF,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,GAAG,CAAC,EAAE,aAAa,CAAA;IACnB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IAC7B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAA;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAC1F,MAAM,EAAE,CAAC,CAAA;IACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,gGAAgG;IAChG,GAAG,CAAC,EAAE,eAAe,CAAA;CACtB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,UAAU,CACpB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzD,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACzB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA"}
|
package/docs/data-loading.md
CHANGED
|
@@ -11,12 +11,12 @@ Each page can export a `loader` function that runs on the server before the page
|
|
|
11
11
|
import type { PageLoader } from '@jasonshimmy/vite-plugin-cer-app/types'
|
|
12
12
|
|
|
13
13
|
component('page-blog-slug', () => {
|
|
14
|
-
const
|
|
14
|
+
const data = usePageData<{ title: string; body: string }>()
|
|
15
15
|
|
|
16
16
|
return html`
|
|
17
17
|
<article>
|
|
18
|
-
<h1>${
|
|
19
|
-
<div>${
|
|
18
|
+
<h1>${data?.title ?? ''}</h1>
|
|
19
|
+
<div>${data?.body ?? ''}</div>
|
|
20
20
|
</article>
|
|
21
21
|
`
|
|
22
22
|
})
|
|
@@ -27,7 +27,7 @@ export const loader: PageLoader = async ({ params }) => {
|
|
|
27
27
|
}
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
The object returned by `loader` is
|
|
30
|
+
The object returned by `loader` is made available via `usePageData()` in the page component. Primitive values (strings, numbers, booleans) are also forwarded as HTML element attributes so `useProps()` can read them.
|
|
31
31
|
|
|
32
32
|
---
|
|
33
33
|
|
|
@@ -36,13 +36,13 @@ The object returned by `loader` is serialized and passed as props to the page co
|
|
|
36
36
|
```ts
|
|
37
37
|
type PageLoader<
|
|
38
38
|
Params extends Record<string, string> = Record<string, string>,
|
|
39
|
-
Data
|
|
40
|
-
> = (ctx: PageLoaderContext<Params>) => Promise<Data>
|
|
39
|
+
Data = Record<string, unknown>,
|
|
40
|
+
> = (ctx: PageLoaderContext<Params>) => Promise<Data> | Data
|
|
41
41
|
|
|
42
42
|
interface PageLoaderContext<P extends Record<string, string>> {
|
|
43
43
|
params: P // URL path parameters
|
|
44
44
|
query: Record<string, string> // Parsed query string
|
|
45
|
-
req
|
|
45
|
+
req?: IncomingMessage // Raw Node.js request (present during SSR/SSG server render; absent during client-side navigation)
|
|
46
46
|
}
|
|
47
47
|
```
|
|
48
48
|
|
|
@@ -66,7 +66,7 @@ interface PageLoaderContext<P extends Record<string, string>> {
|
|
|
66
66
|
|
|
67
67
|
1. Browser receives the full HTML — content is immediately visible via Declarative Shadow DOM before any JS runs
|
|
68
68
|
2. Client JS boots; `usePageData()` reads `window.__CER_DATA__` and returns the hydrated values
|
|
69
|
-
3. After the initial `router.replace()` in `.cer/app.ts` completes, `.cer/app.ts`
|
|
69
|
+
3. After the initial `router.replace()` in `.cer/app.ts` completes, `.cer/app.ts` clears the loader data from `globalThis` so subsequent client-side navigations trigger a fresh fetch instead of reusing stale server data
|
|
70
70
|
4. Components that received SSR data skip their `useOnConnected` fetch — no duplicate request
|
|
71
71
|
|
|
72
72
|
---
|
|
@@ -106,18 +106,22 @@ export const loader = async ({ params }: { params: { id: string } }) => {
|
|
|
106
106
|
|
|
107
107
|
## Accessing loader data in components
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
Use `usePageData()` to read loader data — it receives everything the loader returned (primitives and complex objects alike) and works in all modes: SSR, SSG, and client-side navigation.
|
|
110
110
|
|
|
111
111
|
```ts
|
|
112
112
|
component('page-user', () => {
|
|
113
|
-
|
|
114
|
-
const
|
|
115
|
-
|
|
113
|
+
const ssrData = usePageData<{ user: { id: string; name: string; email: string } }>()
|
|
114
|
+
const user = ref(ssrData?.user ?? { id: '', name: '', email: '' })
|
|
115
|
+
|
|
116
|
+
useOnConnected(async () => {
|
|
117
|
+
if (ssrData) return // already hydrated
|
|
118
|
+
const { data } = await useFetch(`/api/users/${user.value.id}`)
|
|
119
|
+
if (data) user.value = data
|
|
116
120
|
})
|
|
117
121
|
|
|
118
122
|
return html`
|
|
119
|
-
<h1>Hello, ${
|
|
120
|
-
<p>${
|
|
123
|
+
<h1>Hello, ${user.value.name}</h1>
|
|
124
|
+
<p>${user.value.email}</p>
|
|
121
125
|
`
|
|
122
126
|
})
|
|
123
127
|
|
|
@@ -127,6 +131,27 @@ export const loader: PageLoader<{ id: string }> = async ({ params }) => {
|
|
|
127
131
|
}
|
|
128
132
|
```
|
|
129
133
|
|
|
134
|
+
`useProps()` is an alternative for **primitive values only** (strings, numbers, booleans). It reads element HTML attributes rather than the loader payload directly, which means it also picks up attributes passed by parent components in the component tree — but it cannot receive arrays or objects.
|
|
135
|
+
|
|
136
|
+
```ts
|
|
137
|
+
component('page-profile', () => {
|
|
138
|
+
// Works for primitives only — use usePageData() if you need objects or arrays
|
|
139
|
+
const props = useProps<{ username: string; bio: string }>({ username: '', bio: '' })
|
|
140
|
+
|
|
141
|
+
return html`
|
|
142
|
+
<h1>${props.username}</h1>
|
|
143
|
+
<p>${props.bio}</p>
|
|
144
|
+
`
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
export const loader = async ({ params }: { params: { id: string } }) => {
|
|
148
|
+
const { data: user } = await useFetch(`/api/users/${params.id}`)
|
|
149
|
+
return { username: user?.name, bio: user?.bio } // primitives only
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
> **Rule of thumb:** reach for `usePageData()` first. Only prefer `useProps()` when you specifically need the element attribute binding model — for example, when the same component is also used as a child that receives attributes from a parent.
|
|
154
|
+
|
|
130
155
|
---
|
|
131
156
|
|
|
132
157
|
## SSG and loaders
|
|
@@ -153,6 +178,14 @@ export const loader: PageLoader<{ slug: string }> = async ({ params }) => {
|
|
|
153
178
|
|
|
154
179
|
---
|
|
155
180
|
|
|
181
|
+
## Dev server behavior
|
|
182
|
+
|
|
183
|
+
In `mode: 'ssr'` and `mode: 'ssg'`, the dev server runs the server entry module and calls your `loader` on every HTML request — matching production behaviour. Both `usePageData()` and `useProps()` receive real loader data during development.
|
|
184
|
+
|
|
185
|
+
In `mode: 'spa'`, no loaders run in the dev server. `usePageData()` always returns `null` and `useProps()` returns its defaults. Use `useOnConnected` to fetch data client-side in SPA mode.
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
156
189
|
## Error handling in loaders
|
|
157
190
|
|
|
158
191
|
When a `loader` throws, the SSR error boundary intercepts it:
|
|
@@ -173,12 +206,6 @@ export const loader: PageLoader<{ id: string }> = async ({ params }) => {
|
|
|
173
206
|
}
|
|
174
207
|
```
|
|
175
208
|
|
|
176
|
-
You can also throw a standard `Response` — the framework reads its `.status` property:
|
|
177
|
-
|
|
178
|
-
```ts
|
|
179
|
-
throw new Response('Not Found', { status: 404 })
|
|
180
|
-
```
|
|
181
|
-
|
|
182
209
|
Unhandled errors without a `status` property default to HTTP 500.
|
|
183
210
|
|
|
184
211
|
---
|
|
@@ -65,4 +65,24 @@ if (mode === 'ssr') {
|
|
|
65
65
|
cy.get('[data-cy=error-retry]').should('exist')
|
|
66
66
|
})
|
|
67
67
|
})
|
|
68
|
+
|
|
69
|
+
describe('SSR error boundary — loader throws a Response object', () => {
|
|
70
|
+
it('reads the numeric .status from the thrown Response (405)', () => {
|
|
71
|
+
cy.request({ url: '/loader-response-error-test', failOnStatusCode: false }).then((response) => {
|
|
72
|
+
expect(response.status).to.eq(405)
|
|
73
|
+
})
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
it('renders page-error element in the server response for a thrown Response', () => {
|
|
77
|
+
cy.request({ url: '/loader-response-error-test', failOnStatusCode: false }).then((response) => {
|
|
78
|
+
expect(response.body).to.include('page-error')
|
|
79
|
+
})
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
it('does not render the normal page heading when a Response is thrown', () => {
|
|
83
|
+
cy.request({ url: '/loader-response-error-test', failOnStatusCode: false }).then((response) => {
|
|
84
|
+
expect(response.body).not.to.include('loader-response-error-heading')
|
|
85
|
+
})
|
|
86
|
+
})
|
|
87
|
+
})
|
|
68
88
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
component('page-loader-response-error-test', () => {
|
|
2
|
+
return html`
|
|
3
|
+
<div>
|
|
4
|
+
<h1 data-cy="loader-response-error-heading">Response Error Test</h1>
|
|
5
|
+
</div>
|
|
6
|
+
`
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
export async function loader() {
|
|
10
|
+
// Verify that throwing a Response-like object (which has a numeric .status property)
|
|
11
|
+
// causes the framework to use that status code for the HTTP response.
|
|
12
|
+
throw new Response('Method Not Allowed', { status: 405 })
|
|
13
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jasonshimmy/vite-plugin-cer-app",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.2",
|
|
4
4
|
"description": "Nuxt-style meta-framework for @jasonshimmy/custom-elements-runtime",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"eslint": "^10.2.0",
|
|
103
103
|
"happy-dom": "^20.8.9",
|
|
104
104
|
"jiti": "^2.6.1",
|
|
105
|
-
"start-server-and-test": "^3.0.
|
|
105
|
+
"start-server-and-test": "^3.0.2",
|
|
106
106
|
"typescript": "^5.9.3",
|
|
107
107
|
"typescript-eslint": "^8.58.1",
|
|
108
108
|
"vite": "^8.0.8",
|
|
@@ -450,6 +450,43 @@ describe('configureCerDevServer — SSR mode', () => {
|
|
|
450
450
|
expect(ssrHandler).toHaveBeenCalled()
|
|
451
451
|
})
|
|
452
452
|
|
|
453
|
+
it('invokes SSR handler for HTML requests in ssg mode', async () => {
|
|
454
|
+
const ssrHandler = vi.fn(async (req: any, res: any) => res.end('<html>SSG-DEV</html>'))
|
|
455
|
+
const { server, getMiddleware } = makeServer()
|
|
456
|
+
server.ssrLoadModule.mockImplementation(async (path: string) => {
|
|
457
|
+
if (path.includes('server-middleware')) return { serverMiddleware: [] }
|
|
458
|
+
if (path.includes('server-api')) return { apiRoutes: [] }
|
|
459
|
+
return { handler: ssrHandler }
|
|
460
|
+
})
|
|
461
|
+
configureCerDevServer(server as any, makeConfig({ mode: 'ssg' }))
|
|
462
|
+
const res = createRes()
|
|
463
|
+
await getMiddleware()(
|
|
464
|
+
createReq({ url: '/', headers: { accept: 'text/html' } }),
|
|
465
|
+
res,
|
|
466
|
+
vi.fn(),
|
|
467
|
+
)
|
|
468
|
+
expect(ssrHandler).toHaveBeenCalled()
|
|
469
|
+
})
|
|
470
|
+
|
|
471
|
+
it('does not invoke SSR handler in spa mode', async () => {
|
|
472
|
+
const ssrHandler = vi.fn()
|
|
473
|
+
const { server, getMiddleware } = makeServer()
|
|
474
|
+
server.ssrLoadModule.mockImplementation(async (path: string) => {
|
|
475
|
+
if (path.includes('server-middleware')) return { serverMiddleware: [] }
|
|
476
|
+
if (path.includes('server-api')) return { apiRoutes: [] }
|
|
477
|
+
return { handler: ssrHandler }
|
|
478
|
+
})
|
|
479
|
+
configureCerDevServer(server as any, makeConfig({ mode: 'spa' }))
|
|
480
|
+
const next = vi.fn()
|
|
481
|
+
await getMiddleware()(
|
|
482
|
+
createReq({ url: '/', headers: { accept: 'text/html' } }),
|
|
483
|
+
createRes(),
|
|
484
|
+
next,
|
|
485
|
+
)
|
|
486
|
+
expect(ssrHandler).not.toHaveBeenCalled()
|
|
487
|
+
expect(next).toHaveBeenCalled()
|
|
488
|
+
})
|
|
489
|
+
|
|
453
490
|
it('does not invoke SSR handler for non-HTML requests (e.g. assets)', async () => {
|
|
454
491
|
const ssrHandler = vi.fn()
|
|
455
492
|
const { server, getMiddleware } = makeServer()
|
|
@@ -469,6 +506,25 @@ describe('configureCerDevServer — SSR mode', () => {
|
|
|
469
506
|
expect(next).toHaveBeenCalled()
|
|
470
507
|
})
|
|
471
508
|
|
|
509
|
+
it('does not invoke SSR handler for non-HTML requests in ssg mode', async () => {
|
|
510
|
+
const ssrHandler = vi.fn()
|
|
511
|
+
const { server, getMiddleware } = makeServer()
|
|
512
|
+
server.ssrLoadModule.mockImplementation(async (path: string) => {
|
|
513
|
+
if (path.includes('server-middleware')) return { serverMiddleware: [] }
|
|
514
|
+
if (path.includes('server-api')) return { apiRoutes: [] }
|
|
515
|
+
return { handler: ssrHandler }
|
|
516
|
+
})
|
|
517
|
+
configureCerDevServer(server as any, makeConfig({ mode: 'ssg' }))
|
|
518
|
+
const next = vi.fn()
|
|
519
|
+
await getMiddleware()(
|
|
520
|
+
createReq({ url: '/assets/main.js', headers: { accept: 'application/javascript' } }),
|
|
521
|
+
createRes(),
|
|
522
|
+
next,
|
|
523
|
+
)
|
|
524
|
+
expect(ssrHandler).not.toHaveBeenCalled()
|
|
525
|
+
expect(next).toHaveBeenCalled()
|
|
526
|
+
})
|
|
527
|
+
|
|
472
528
|
it('returns 500 and error text when SSR handler throws', async () => {
|
|
473
529
|
const { server, getMiddleware } = makeServer()
|
|
474
530
|
server.ssrLoadModule.mockImplementation(async (path: string) => {
|
|
@@ -531,13 +587,14 @@ describe('configureCerDevServer — SSR mode', () => {
|
|
|
531
587
|
})
|
|
532
588
|
})
|
|
533
589
|
|
|
534
|
-
// ─── Per-route render mode (SSR mode)
|
|
590
|
+
// ─── Per-route render mode (SSR/SSG mode) ────────────────────────────────────
|
|
535
591
|
|
|
536
592
|
describe("configureCerDevServer — per-route render mode in SSR", () => {
|
|
537
593
|
/** Build a server where virtual:cer-routes returns the given routes array. */
|
|
538
594
|
function makeServerWithRoutes(
|
|
539
595
|
pageRoutes: Array<{ path: string; meta?: Record<string, unknown> }>,
|
|
540
596
|
ssrHandler = vi.fn(async (_req: any, res: any) => res.end('<html>SSR</html>')),
|
|
597
|
+
mode: 'ssr' | 'ssg' = 'ssr',
|
|
541
598
|
) {
|
|
542
599
|
const { server, getMiddleware } = makeServer()
|
|
543
600
|
server.ssrLoadModule.mockImplementation(async (path: string) => {
|
|
@@ -546,7 +603,7 @@ describe("configureCerDevServer — per-route render mode in SSR", () => {
|
|
|
546
603
|
if (path.includes('cer-routes')) return { default: pageRoutes }
|
|
547
604
|
return { handler: ssrHandler }
|
|
548
605
|
})
|
|
549
|
-
configureCerDevServer(server as any, makeConfig({ mode
|
|
606
|
+
configureCerDevServer(server as any, makeConfig({ mode }))
|
|
550
607
|
return { middleware: getMiddleware(), ssrHandler }
|
|
551
608
|
}
|
|
552
609
|
|
|
@@ -564,6 +621,22 @@ describe("configureCerDevServer — per-route render mode in SSR", () => {
|
|
|
564
621
|
expect(ssrHandler).not.toHaveBeenCalled()
|
|
565
622
|
})
|
|
566
623
|
|
|
624
|
+
it("calls next() instead of SSR for a route with render: 'spa' in ssg mode", async () => {
|
|
625
|
+
const { middleware, ssrHandler } = makeServerWithRoutes(
|
|
626
|
+
[{ path: '/spa-page', meta: { render: 'spa' } }],
|
|
627
|
+
vi.fn(async (_req: any, res: any) => res.end('<html>SSG</html>')),
|
|
628
|
+
'ssg',
|
|
629
|
+
)
|
|
630
|
+
const next = vi.fn()
|
|
631
|
+
await middleware(
|
|
632
|
+
createReq({ url: '/spa-page', headers: { accept: 'text/html' } }),
|
|
633
|
+
createRes(),
|
|
634
|
+
next,
|
|
635
|
+
)
|
|
636
|
+
expect(next).toHaveBeenCalled()
|
|
637
|
+
expect(ssrHandler).not.toHaveBeenCalled()
|
|
638
|
+
})
|
|
639
|
+
|
|
567
640
|
it("proceeds to SSR for a route with render: 'server'", async () => {
|
|
568
641
|
const { middleware, ssrHandler } = makeServerWithRoutes([
|
|
569
642
|
{ path: '/server-page', meta: { render: 'server' } },
|
|
@@ -620,6 +693,27 @@ describe("configureCerDevServer — per-route render mode in SSR", () => {
|
|
|
620
693
|
)
|
|
621
694
|
expect(routesCalls).toHaveLength(0)
|
|
622
695
|
})
|
|
696
|
+
|
|
697
|
+
it("loads routes module in ssg mode to check per-route render mode", async () => {
|
|
698
|
+
const ssrHandler = vi.fn(async (_req: any, res: any) => res.end('<html>SSG</html>'))
|
|
699
|
+
const { server, getMiddleware } = makeServer()
|
|
700
|
+
server.ssrLoadModule.mockImplementation(async (path: string) => {
|
|
701
|
+
if (path.includes('server-middleware')) return { serverMiddleware: [] }
|
|
702
|
+
if (path.includes('server-api') || path.includes('cer-server-api')) return { apiRoutes: [] }
|
|
703
|
+
if (path.includes('cer-routes')) return { default: [] }
|
|
704
|
+
return { handler: ssrHandler }
|
|
705
|
+
})
|
|
706
|
+
configureCerDevServer(server as any, makeConfig({ mode: 'ssg' }))
|
|
707
|
+
await getMiddleware()(
|
|
708
|
+
createReq({ url: '/about', headers: { accept: 'text/html' } }),
|
|
709
|
+
createRes(),
|
|
710
|
+
vi.fn(),
|
|
711
|
+
)
|
|
712
|
+
const routesCalls = (server.ssrLoadModule as any).mock.calls.filter(
|
|
713
|
+
([p]: [string]) => p.includes('cer-routes'),
|
|
714
|
+
)
|
|
715
|
+
expect(routesCalls.length).toBeGreaterThan(0)
|
|
716
|
+
})
|
|
623
717
|
})
|
|
624
718
|
|
|
625
719
|
// ─── parseBody edge cases ─────────────────────────────────────────────────────
|
|
@@ -173,6 +173,13 @@ describe('entry-server-template (ENTRY_SERVER_TEMPLATE content)', () => {
|
|
|
173
173
|
expect(src).toContain('err.status')
|
|
174
174
|
})
|
|
175
175
|
|
|
176
|
+
it('guards err.status with typeof === "number" so Response-like thrown values work', () => {
|
|
177
|
+
// `new Response("...", { status: 404 })` has a numeric `.status` property.
|
|
178
|
+
// The typeof guard ensures that non-numeric status values (e.g. a string "404")
|
|
179
|
+
// do not pass through — only genuine numbers are accepted.
|
|
180
|
+
expect(src).toContain("typeof err.status === 'number'")
|
|
181
|
+
})
|
|
182
|
+
|
|
176
183
|
it('defaults to status 500 when thrown error has no .status', () => {
|
|
177
184
|
expect(src).toContain(': 500')
|
|
178
185
|
})
|
package/src/plugin/dev-server.ts
CHANGED
|
@@ -238,8 +238,11 @@ export function configureCerDevServer(
|
|
|
238
238
|
// virtual:cer-server-api not yet ready or empty — continue
|
|
239
239
|
}
|
|
240
240
|
|
|
241
|
-
// 3. SSR mode: intercept HTML requests
|
|
242
|
-
|
|
241
|
+
// 3. SSR/SSG mode: intercept HTML requests and server-render them.
|
|
242
|
+
// Both 'ssr' and 'ssg' modes run loaders on the server so usePageData()
|
|
243
|
+
// returns real data during dev — matching production behaviour.
|
|
244
|
+
// 'spa' mode never runs server loaders, so it falls through to the client bundle.
|
|
245
|
+
if (config.mode === 'ssr' || config.mode === 'ssg') {
|
|
243
246
|
const acceptsHtml =
|
|
244
247
|
(req.headers['accept'] ?? '').includes('text/html') ||
|
|
245
248
|
url === '/' ||
|
package/src/types/page.ts
CHANGED
|
@@ -88,7 +88,8 @@ export interface PageMeta {
|
|
|
88
88
|
export interface PageLoaderContext<P extends Record<string, string> = Record<string, string>> {
|
|
89
89
|
params: P
|
|
90
90
|
query: Record<string, string>
|
|
91
|
-
|
|
91
|
+
/** Present during SSR/SSG server render. Absent (`undefined`) during client-side navigation. */
|
|
92
|
+
req?: IncomingMessage
|
|
92
93
|
}
|
|
93
94
|
|
|
94
95
|
/**
|