@cmj/juice 0.0.8 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/templates.js
CHANGED
package/dist/runtime/render.d.ts
CHANGED
|
@@ -5,8 +5,10 @@ import type { FlightManifest, RouterOptions, _RouteMatch } from './types.js';
|
|
|
5
5
|
* 1. Dynamically imports the matched route's server component module.
|
|
6
6
|
* 2. Creates a React element with extracted `params` and `searchParams`.
|
|
7
7
|
* 3. Streams it via `renderToReadableStream`.
|
|
8
|
-
* 4. **Critical:**
|
|
9
|
-
*
|
|
8
|
+
* 4. **Critical:** Awaits `stream.allReady` so that thrown `Response`
|
|
9
|
+
* objects from async components inside `<Suspense>` are caught
|
|
10
|
+
* before HTTP headers are committed. If any component throws a
|
|
11
|
+
* `Response`, it is returned directly with the correct status code.
|
|
10
12
|
*
|
|
11
13
|
* @param req - The incoming `Request`.
|
|
12
14
|
* @param match - The matched route entry and extracted URL params.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/runtime/render.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,cAAc,EAEd,aAAa,EACb,WAAW,EACZ,MAAM,YAAY,CAAC;AA2BpB
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/runtime/render.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,cAAc,EAEd,aAAa,EACb,WAAW,EACZ,MAAM,YAAY,CAAC;AA2BpB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,GAAG,aAAa,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACnJ,OAAO,CAAC,QAAQ,CAAC,CAkInB"}
|
package/dist/runtime/render.js
CHANGED
|
@@ -31,8 +31,10 @@ function _getClientBootstrap(manifest, assetPrefix = '/') {
|
|
|
31
31
|
* 1. Dynamically imports the matched route's server component module.
|
|
32
32
|
* 2. Creates a React element with extracted `params` and `searchParams`.
|
|
33
33
|
* 3. Streams it via `renderToReadableStream`.
|
|
34
|
-
* 4. **Critical:**
|
|
35
|
-
*
|
|
34
|
+
* 4. **Critical:** Awaits `stream.allReady` so that thrown `Response`
|
|
35
|
+
* objects from async components inside `<Suspense>` are caught
|
|
36
|
+
* before HTTP headers are committed. If any component throws a
|
|
37
|
+
* `Response`, it is returned directly with the correct status code.
|
|
36
38
|
*
|
|
37
39
|
* @param req - The incoming `Request`.
|
|
38
40
|
* @param match - The matched route entry and extracted URL params.
|
|
@@ -101,8 +103,18 @@ export async function _renderPipeline(req, match, manifest, options) {
|
|
|
101
103
|
console.error('[juice/runtime]', error);
|
|
102
104
|
},
|
|
103
105
|
});
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
+
// Wait for ALL Suspense boundaries to resolve before committing
|
|
107
|
+
// to a status code. This ensures thrown Responses from async
|
|
108
|
+
// components inside <Suspense> are caught before headers are sent.
|
|
109
|
+
//
|
|
110
|
+
// Trade-off: TTFB increases (no progressive streaming of Suspense
|
|
111
|
+
// fallbacks), but correctness is guaranteed — the advertised
|
|
112
|
+
// `throw new Response()` pattern works everywhere, including
|
|
113
|
+
// inside Suspense boundaries.
|
|
114
|
+
await stream.allReady;
|
|
115
|
+
// Now check: did any component throw a Response during rendering?
|
|
116
|
+
// This catches both sync throws (during shell render) and async
|
|
117
|
+
// throws (inside Suspense boundaries).
|
|
106
118
|
if (thrownResponse) {
|
|
107
119
|
abortController.abort();
|
|
108
120
|
return thrownResponse;
|
|
@@ -111,7 +123,6 @@ export async function _renderPipeline(req, match, manifest, options) {
|
|
|
111
123
|
status: 200,
|
|
112
124
|
headers: {
|
|
113
125
|
'Content-Type': 'text/html; charset=utf-8',
|
|
114
|
-
'Transfer-Encoding': 'chunked',
|
|
115
126
|
},
|
|
116
127
|
});
|
|
117
128
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/runtime/render.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,6DAA6D;AAC7D,+DAA+D;AAC/D,uEAAuE;AAEvE,OAAO,EAAE,aAAa,EAAsB,MAAM,OAAO,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAQ1D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAEhG;;;;;;GAMG;AACH,SAAS,mBAAmB,CAC1B,QAAwB,EACxB,cAAsB,GAAG;IAEzB,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC;IAC3E,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACxD,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC/B,wDAAwD;YACxD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/runtime/render.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cmj/juice",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Zero-bloat React 19 RSC framework — streaming SSR, server actions, zero config.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -92,4 +92,4 @@
|
|
|
92
92
|
"vite": "^6.0.0",
|
|
93
93
|
"vitest": "^3.0.0"
|
|
94
94
|
}
|
|
95
|
-
}
|
|
95
|
+
}
|