@nifrajs/web 3.3.0 → 3.5.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 (77) hide show
  1. package/dist/build-plan.d.ts +17 -0
  2. package/dist/build-plan.d.ts.map +1 -1
  3. package/dist/build-plan.js +7 -1
  4. package/dist/build-plan.js.map +1 -1
  5. package/dist/build-vite.d.ts +14 -0
  6. package/dist/build-vite.d.ts.map +1 -1
  7. package/dist/build-vite.js +29 -4
  8. package/dist/build-vite.js.map +1 -1
  9. package/dist/build.d.ts +15 -0
  10. package/dist/build.d.ts.map +1 -1
  11. package/dist/build.js +57 -15
  12. package/dist/build.js.map +1 -1
  13. package/dist/client.d.ts +18 -0
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +115 -0
  16. package/dist/client.js.map +1 -1
  17. package/dist/css-contract.d.ts +21 -0
  18. package/dist/css-contract.d.ts.map +1 -0
  19. package/dist/css-contract.js +28 -0
  20. package/dist/css-contract.js.map +1 -0
  21. package/dist/index.d.ts +3 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +2 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/internal/codegen.d.ts +3 -0
  26. package/dist/internal/codegen.d.ts.map +1 -1
  27. package/dist/internal/codegen.js +11 -6
  28. package/dist/internal/codegen.js.map +1 -1
  29. package/dist/internal/page-execution.d.ts +57 -0
  30. package/dist/internal/page-execution.d.ts.map +1 -0
  31. package/dist/internal/page-execution.js +555 -0
  32. package/dist/internal/page-execution.js.map +1 -0
  33. package/dist/internal/render-document.d.ts +12 -2
  34. package/dist/internal/render-document.d.ts.map +1 -1
  35. package/dist/internal/render-document.js +28 -5
  36. package/dist/internal/render-document.js.map +1 -1
  37. package/dist/internal/request-url.d.ts +3 -0
  38. package/dist/internal/request-url.d.ts.map +1 -0
  39. package/dist/internal/request-url.js +14 -0
  40. package/dist/internal/request-url.js.map +1 -0
  41. package/dist/internal/web-app.d.ts +20 -1
  42. package/dist/internal/web-app.d.ts.map +1 -1
  43. package/dist/internal/web-app.js +37 -734
  44. package/dist/internal/web-app.js.map +1 -1
  45. package/dist/isr.d.ts.map +1 -1
  46. package/dist/isr.js +39 -4
  47. package/dist/isr.js.map +1 -1
  48. package/dist/llms-txt.d.ts +3 -0
  49. package/dist/llms-txt.d.ts.map +1 -1
  50. package/dist/llms-txt.js +6 -3
  51. package/dist/llms-txt.js.map +1 -1
  52. package/dist/manifest.d.ts +1 -1
  53. package/dist/manifest.d.ts.map +1 -1
  54. package/dist/public-dir.d.ts.map +1 -1
  55. package/dist/public-dir.js +69 -44
  56. package/dist/public-dir.js.map +1 -1
  57. package/dist/trusted-html.d.ts +34 -0
  58. package/dist/trusted-html.d.ts.map +1 -0
  59. package/dist/trusted-html.js +35 -0
  60. package/dist/trusted-html.js.map +1 -0
  61. package/package.json +3 -3
  62. package/src/build-plan.ts +23 -1
  63. package/src/build-vite.ts +47 -4
  64. package/src/build.ts +69 -6
  65. package/src/client.ts +140 -0
  66. package/src/css-contract.ts +44 -0
  67. package/src/index.ts +15 -0
  68. package/src/internal/codegen.ts +20 -6
  69. package/src/internal/page-execution.ts +761 -0
  70. package/src/internal/render-document.ts +39 -6
  71. package/src/internal/request-url.ts +14 -0
  72. package/src/internal/web-app.ts +68 -835
  73. package/src/isr.ts +42 -3
  74. package/src/llms-txt.ts +16 -4
  75. package/src/manifest.ts +1 -1
  76. package/src/public-dir.ts +70 -45
  77. package/src/trusted-html.ts +44 -0
@@ -0,0 +1,555 @@
1
+ import { boundaryDescriptors, resolveStaticBoundaries, startDynamicBoundaries, } from "../boundary.js";
2
+ import { DEFAULT_CSS_LOADING, normalizeCssLoading } from "../css-contract.js";
3
+ import { defer, ndjsonStream, prepareDeferred } from "../deferred.js";
4
+ import { isDraftEnabled } from "../draft.js";
5
+ import { createMatcher, DATA_HEADER, NAV_FROM_HEADER, RETAIN_HEADER, REVALIDATE_HEADER, STATUS_HEADER, } from "../router.js";
6
+ import { searchOf, searchOfChain } from "../search.js";
7
+ import { mergeHeads, resolveMeta } from "./head-merge.js";
8
+ import { actionResponse, EMPTY_RETAIN, isControlFlow, isStatusSignal, layoutErrorId, renderPageResult, STATUS_SIGNAL, STATUS_TEXT, scopeParams, tagLayoutError, withDuplicateInstanceHint, } from "./render-document.js";
9
+ import { urlPartsFor } from "./request-url.js";
10
+ /**
11
+ * Own the page request program behind one private seam.
12
+ *
13
+ * `createWebApp` remains responsible for app construction, mount ordering, and route registration.
14
+ * This module owns the page-specific contract: context, layout execution, control-flow precedence,
15
+ * data/document assembly, and error/status rendering. GET and POST retain their distinct ordering
16
+ * (ordinary layout data may run after an action; a gate must run before it) while sharing the same
17
+ * outcome and render decisions.
18
+ */
19
+ export function createPageRequestExecutor(options) {
20
+ const { adapter, manifest, clientEntry, api } = options;
21
+ const cssLoading = normalizeCssLoading(options.cssLoading ?? DEFAULT_CSS_LOADING);
22
+ const titleOption = options.title === undefined ? {} : { title: options.title };
23
+ const prerenderedSet = new Set(options.prerenderedPaths ?? []);
24
+ const matchManifestRoute = createMatcher(manifest.routes.map((route) => ({ routeId: route.id, pattern: route.pattern })));
25
+ const routeById = new Map(manifest.routes.map((route) => [route.id, route]));
26
+ const draftFlag = (req) => options.draftSecret === undefined
27
+ ? Promise.resolve(false)
28
+ : isDraftEnabled(req, options.draftSecret);
29
+ const preloadOf = (id) => {
30
+ const chunks = options.routePreload?.[id];
31
+ return chunks ? { preload: chunks } : {};
32
+ };
33
+ const resolveNonce = (request, env) => options.nonce === undefined ? undefined : options.nonce({ request, env });
34
+ const stylesOf = (id) => {
35
+ const perRoute = options.routeStyles?.[id];
36
+ const styles = perRoute ?? options.styles;
37
+ if (styles === undefined || styles.length === 0)
38
+ return {};
39
+ return {
40
+ styles,
41
+ ...(cssLoading === "deferred" ? { cssLoading } : {}),
42
+ };
43
+ };
44
+ // Load a route's layout modules once for the current execution. The render path needs each whole
45
+ // module for its component + meta, while the data path also needs loader/gate/boundary declarations.
46
+ const loadLayoutModules = async (route) => {
47
+ const modules = await Promise.all(route.layoutIds.map((id) => manifest.layouts[id].load()));
48
+ for (let i = 0; i < modules.length; i++) {
49
+ if (modules[i].action === undefined)
50
+ continue;
51
+ const id = route.layoutIds[i];
52
+ throw new Error(`[nifra/web] "${manifest.layouts[id].file}" exports an \`action\`, but layouts do not run one - only route files do. Move the mutation into the route that submits to it.`);
53
+ }
54
+ return modules;
55
+ };
56
+ /** Run layout loaders, awaiting gates before starting the page loader and retaining only safe data. */
57
+ const runLayoutChain = async (route, ctx, retain = new Set()) => {
58
+ const modules = await loadLayoutModules(route);
59
+ if (!modules.some((m) => m.loader !== undefined)) {
60
+ return { modules, layoutData: undefined, retained: [], pending: Promise.resolve() };
61
+ }
62
+ const results = new Array(modules.length).fill(null);
63
+ const retained = [];
64
+ const pending = [];
65
+ for (let i = 0; i < modules.length; i++) {
66
+ const loader = modules[i]?.loader;
67
+ if (loader === undefined)
68
+ continue;
69
+ if (retain.has(i) && modules[i]?.gate !== true) {
70
+ retained.push(i);
71
+ continue;
72
+ }
73
+ const scoped = {
74
+ ...ctx,
75
+ params: scopeParams(ctx.params, route.layoutParams?.[i]),
76
+ };
77
+ if (modules[i]?.gate === true) {
78
+ try {
79
+ results[i] = await loader(scoped);
80
+ }
81
+ catch (err) {
82
+ throw tagLayoutError(err, route.layoutIds[i]);
83
+ }
84
+ continue;
85
+ }
86
+ const layoutId = route.layoutIds[i];
87
+ const index = i;
88
+ pending.push((async () => {
89
+ try {
90
+ results[index] = await loader(scoped);
91
+ }
92
+ catch (err) {
93
+ throw tagLayoutError(err, layoutId);
94
+ }
95
+ })());
96
+ }
97
+ return { modules, layoutData: results, retained, pending: Promise.all(pending) };
98
+ };
99
+ /** Run only authorization gates before an action; ordinary layout data runs after a native action. */
100
+ const runLayoutGates = async (route, ctx) => {
101
+ const modules = await loadLayoutModules(route);
102
+ for (let i = 0; i < modules.length; i++) {
103
+ const mod = modules[i];
104
+ if (mod?.gate !== true || mod.loader === undefined)
105
+ continue;
106
+ try {
107
+ await mod.loader({
108
+ ...ctx,
109
+ params: scopeParams(ctx.params, route.layoutParams?.[i]),
110
+ });
111
+ }
112
+ catch (err) {
113
+ throw tagLayoutError(err, route.layoutIds[i]);
114
+ }
115
+ }
116
+ return modules;
117
+ };
118
+ const retainedIndices = (header) => {
119
+ if (header === null || header === "")
120
+ return EMPTY_RETAIN;
121
+ const out = new Set();
122
+ for (const part of header.split(",")) {
123
+ if (!/^\d+$/.test(part))
124
+ continue;
125
+ out.add(Number(part));
126
+ }
127
+ return out;
128
+ };
129
+ const validatedRetainedIndices = (req, route, params) => {
130
+ if (req.headers.get(DATA_HEADER) === null)
131
+ return EMPTY_RETAIN;
132
+ const requested = retainedIndices(req.headers.get(RETAIN_HEADER));
133
+ const from = req.headers.get(NAV_FROM_HEADER);
134
+ if (requested.size === 0 || from === null)
135
+ return EMPTY_RETAIN;
136
+ let fromPath;
137
+ try {
138
+ const current = new URL(req.url);
139
+ const source = new URL(from, current);
140
+ if (source.origin !== current.origin)
141
+ return EMPTY_RETAIN;
142
+ fromPath = source.pathname + source.search;
143
+ }
144
+ catch {
145
+ return EMPTY_RETAIN;
146
+ }
147
+ const previousMatch = matchManifestRoute(fromPath);
148
+ if (previousMatch === null)
149
+ return EMPTY_RETAIN;
150
+ const previous = routeById.get(previousMatch.routeId);
151
+ if (previous === undefined)
152
+ return EMPTY_RETAIN;
153
+ const valid = new Set();
154
+ for (const index of requested) {
155
+ if (route.layoutIds[index] !== previous.layoutIds[index])
156
+ continue;
157
+ const owned = route.layoutParams?.[index] ?? [];
158
+ const previouslyOwned = previous.layoutParams?.[index] ?? [];
159
+ if (owned.length !== previouslyOwned.length ||
160
+ owned.some((name, i) => name !== previouslyOwned[i]) ||
161
+ owned.some((name) => params[name] !== previousMatch.params[name])) {
162
+ continue;
163
+ }
164
+ valid.add(index);
165
+ }
166
+ return valid;
167
+ };
168
+ const loaderSearch = (searchSchema, request) => searchOf(searchSchema, urlPartsFor(request).search);
169
+ const searchChainOf = (layoutMods, mod, request) => searchOfChain([...layoutMods.map((m) => m.searchSchema), mod.searchSchema], urlPartsFor(request).search);
170
+ const resolveChainAndHead = (layoutModules, page, metaArgs) => {
171
+ const chain = [...layoutModules.map((m) => m.default), page.default];
172
+ const heads = [
173
+ ...layoutModules.map((m) => resolveMeta(m.meta, metaArgs)),
174
+ resolveMeta(page.meta, metaArgs),
175
+ ];
176
+ return { chain, head: mergeHeads(heads) };
177
+ };
178
+ const dirOfId = (id, suffix) => id === suffix ? "" : id.slice(0, id.length - suffix.length - 1);
179
+ const boundaryFor = (route, err) => {
180
+ const ids = route.errorIds ?? [];
181
+ const failing = layoutErrorId(err);
182
+ if (failing === undefined)
183
+ return ids.at(-1);
184
+ const layoutDir = dirOfId(failing, "_layout");
185
+ for (let i = ids.length - 1; i >= 0; i--) {
186
+ const errDir = dirOfId(ids[i], "_error");
187
+ if (errDir === "" || errDir === layoutDir || layoutDir.startsWith(`${errDir}/`))
188
+ return ids[i];
189
+ }
190
+ return undefined;
191
+ };
192
+ const originOf = (req) => {
193
+ try {
194
+ return new URL(req.url).origin;
195
+ }
196
+ catch {
197
+ return "";
198
+ }
199
+ };
200
+ const pathOf = (req) => {
201
+ try {
202
+ const parts = urlPartsFor(req);
203
+ return parts.pathname + parts.search;
204
+ }
205
+ catch {
206
+ return "/";
207
+ }
208
+ };
209
+ const renderError = async (route, errorId, err, nonce) => {
210
+ const errDir = dirOfId(errorId, "_error");
211
+ const keptLayoutIds = route.layoutIds.filter((id) => {
212
+ const ld = dirOfId(id, "_layout");
213
+ return ld === "" || ld === errDir || errDir.startsWith(`${ld}/`);
214
+ });
215
+ const layouts = await Promise.all(keptLayoutIds.map((id) => manifest.layouts[id].load().then((m) => m.default)));
216
+ const { default: errComp } = await (manifest.errors?.[errorId]).load();
217
+ const e = err instanceof Error ? err : new Error(String(err));
218
+ return renderPageResult({
219
+ adapter,
220
+ chain: [...layouts, errComp],
221
+ data: { name: e.name, message: e.message },
222
+ clientEntry,
223
+ routeId: errorId,
224
+ status: 500,
225
+ hydrate: false,
226
+ ...(nonce === undefined ? {} : { nonce }),
227
+ ...titleOption,
228
+ });
229
+ };
230
+ const renderTerminalStatus = async (status, path, extraHeaders, nonce) => {
231
+ const page = manifest.statusPages?.[String(status)] ?? manifest.notFound;
232
+ if (page === undefined) {
233
+ const headers = new Headers(extraHeaders);
234
+ headers.set("content-type", "text/plain; charset=utf-8");
235
+ return new Response(STATUS_TEXT[status] ?? "Error", { status, headers });
236
+ }
237
+ const routeId = manifest.statusPages?.[String(status)] !== undefined ? `_${status}` : "_404";
238
+ const loaded = (await page.load());
239
+ return renderPageResult({
240
+ adapter,
241
+ chain: [loaded.default],
242
+ data: null,
243
+ clientEntry,
244
+ routeId,
245
+ ...(path !== undefined
246
+ ? {
247
+ search: searchOf(loaded.searchSchema, path.includes("?") ? path.slice(path.indexOf("?")) : ""),
248
+ }
249
+ : {}),
250
+ ...(path !== undefined ? { path } : {}),
251
+ status,
252
+ ...(extraHeaders !== undefined ? { headers: extraHeaders } : {}),
253
+ ...(nonce === undefined ? {} : { nonce }),
254
+ ...preloadOf(routeId),
255
+ ...stylesOf(routeId),
256
+ prerenderedPaths: options.prerenderedPaths ?? [],
257
+ ...titleOption,
258
+ });
259
+ };
260
+ const renderStatusSignal = async (req, env, signal) => {
261
+ const { status, headers } = signal[STATUS_SIGNAL];
262
+ if (req.headers.get(DATA_HEADER) !== null) {
263
+ const responseHeaders = new Headers(headers);
264
+ responseHeaders.set(STATUS_HEADER, String(status));
265
+ return new Response(null, { status, headers: responseHeaders });
266
+ }
267
+ return renderTerminalStatus(status, pathOf(req), headers, await resolveNonce(req, env));
268
+ };
269
+ const reportLoaderError = (route, req, params, err) => {
270
+ if (options.onLoaderError === undefined)
271
+ return;
272
+ try {
273
+ options.onLoaderError(err, { request: req, params, route: route.pattern });
274
+ }
275
+ catch {
276
+ // A faulty reporter must never break error rendering.
277
+ }
278
+ };
279
+ const handleDataOrDocument = async (req, env, route, params, mod, data, layoutData, layoutModules, layoutRetained, boundaryStates, assemblyCache) => {
280
+ if (isStatusSignal(data))
281
+ return renderStatusSignal(req, env, data);
282
+ if (isControlFlow(data))
283
+ return data;
284
+ if (req.headers.get(DATA_HEADER) !== null) {
285
+ const pageSplit = prepareDeferred(data);
286
+ const layoutSplits = [];
287
+ let offset = pageSplit.deferred.length;
288
+ for (const entry of layoutData ?? []) {
289
+ const split = prepareDeferred(entry, offset);
290
+ layoutSplits.push(split);
291
+ offset += split.deferred.length;
292
+ }
293
+ const deferred = [...pageSplit.deferred, ...layoutSplits.flatMap((split) => split.deferred)];
294
+ const boundarySplit = boundaryStates === undefined ? undefined : prepareDeferred(boundaryStates, deferred.length);
295
+ const allDeferred = [
296
+ ...deferred,
297
+ ...(boundarySplit === undefined ? [] : boundarySplit.deferred),
298
+ ];
299
+ const payload = layoutData === undefined && boundarySplit === undefined
300
+ ? pageSplit.forClient
301
+ : {
302
+ v: 1,
303
+ data: pageSplit.forClient,
304
+ layoutData: layoutSplits.map((split) => split.forClient),
305
+ retained: layoutRetained,
306
+ ...(boundarySplit === undefined ? {} : { boundaries: boundarySplit.forClient }),
307
+ };
308
+ if (allDeferred.length === 0)
309
+ return Response.json(payload ?? null);
310
+ return new Response(ndjsonStream(payload, allDeferred), {
311
+ headers: { "content-type": "application/x-ndjson; charset=utf-8" },
312
+ });
313
+ }
314
+ const { chain, head } = resolveChainAndHead(layoutModules, mod, {
315
+ data,
316
+ params,
317
+ origin: originOf(req),
318
+ });
319
+ const nonce = options.nonce === undefined ? undefined : await resolveNonce(req, env);
320
+ try {
321
+ return await renderPageResult({
322
+ adapter,
323
+ chain,
324
+ data,
325
+ head,
326
+ clientEntry,
327
+ routeId: route.id,
328
+ params,
329
+ path: pathOf(req),
330
+ search: searchChainOf(layoutModules, mod, req),
331
+ hydrate: mod.hydrate !== false,
332
+ ...(layoutData !== undefined ? { layoutData } : {}),
333
+ ...(boundaryStates !== undefined ? { boundaries: boundaryStates } : {}),
334
+ ...preloadOf(route.id),
335
+ ...stylesOf(route.id),
336
+ prerenderedPaths: options.prerenderedPaths ?? [],
337
+ ...(mod.revalidate !== undefined ? { revalidate: mod.revalidate } : {}),
338
+ ...(mod.revalidateTags !== undefined ? { revalidateTags: mod.revalidateTags } : {}),
339
+ ...(mod.islandScripts !== undefined ? { islandScripts: mod.islandScripts } : {}),
340
+ ...(nonce === undefined ? {} : { nonce }),
341
+ ...titleOption,
342
+ ...(assemblyCache === undefined ? {} : { assemblyCache }),
343
+ });
344
+ }
345
+ catch (err) {
346
+ if (isStatusSignal(err))
347
+ return renderStatusSignal(req, env, err);
348
+ if (isControlFlow(err))
349
+ throw err;
350
+ reportLoaderError(route, req, { ...params }, err);
351
+ const errorId = boundaryFor(route, err);
352
+ if (errorId === undefined)
353
+ throw err;
354
+ return renderError(route, errorId, withDuplicateInstanceHint(err), nonce);
355
+ }
356
+ };
357
+ const renderNotFound = async (request, env, path) => {
358
+ const page = manifest.statusPages?.["404"] ?? manifest.notFound;
359
+ if (page === undefined)
360
+ return renderTerminalStatus(404, path);
361
+ return renderTerminalStatus(404, path, undefined, options.nonce === undefined ? undefined : await resolveNonce(request, env));
362
+ };
363
+ return {
364
+ get: (route) => {
365
+ const is404Fallback = options.staticFallbacks?.[route.pattern] === "404";
366
+ let assemblySlot;
367
+ let assemblySlotMod;
368
+ let assemblySlotLayouts;
369
+ const assemblyCacheFor = (mod, layouts) => {
370
+ if (typeof mod.meta === "function")
371
+ return undefined;
372
+ for (const layout of layouts)
373
+ if (typeof layout.meta === "function")
374
+ return undefined;
375
+ const layoutsUnchanged = assemblySlotLayouts !== undefined &&
376
+ assemblySlotLayouts.length === layouts.length &&
377
+ assemblySlotLayouts.every((layout, index) => layout === layouts[index]);
378
+ if (assemblySlotMod !== mod || !layoutsUnchanged) {
379
+ assemblySlot = {};
380
+ assemblySlotMod = mod;
381
+ assemblySlotLayouts = layouts;
382
+ }
383
+ return assemblySlot;
384
+ };
385
+ return async (c) => {
386
+ if (is404Fallback && !prerenderedSet.has(urlPartsFor(c.req).pathname)) {
387
+ return renderNotFound(c.req, c.env, pathOf(c.req));
388
+ }
389
+ const mod = await route.load();
390
+ const draft = await draftFlag(c.req);
391
+ let data;
392
+ let layoutData;
393
+ let boundaryStates;
394
+ let layoutModules;
395
+ let layoutRetained = [];
396
+ try {
397
+ const ctx = {
398
+ params: c.params,
399
+ request: c.req,
400
+ req: c.req,
401
+ api,
402
+ env: c.env,
403
+ draft,
404
+ search: loaderSearch(mod.searchSchema, c.req),
405
+ };
406
+ const run = await runLayoutChain(route, ctx, validatedRetainedIndices(c.req, route, c.params));
407
+ layoutModules = run.modules;
408
+ layoutRetained = run.retained;
409
+ const boundaryDefinitions = [
410
+ ...run.modules.flatMap((layout) => layout.boundaries ?? []),
411
+ ...(mod.boundaries ?? []),
412
+ ];
413
+ if (boundaryDefinitions.length > 0)
414
+ boundaryDescriptors(boundaryDefinitions);
415
+ const effectiveSearch = searchChainOf(run.modules, mod, c.req);
416
+ const boundaryBatch = boundaryDefinitions.length === 0
417
+ ? undefined
418
+ : startDynamicBoundaries(boundaryDefinitions, {
419
+ request: c.req,
420
+ params: c.params,
421
+ api,
422
+ env: c.env,
423
+ draft,
424
+ search: effectiveSearch,
425
+ signal: c.req.signal,
426
+ });
427
+ const staticBoundaryPromise = boundaryDefinitions.length === 0
428
+ ? Promise.resolve(undefined)
429
+ : resolveStaticBoundaries(boundaryDefinitions, { phase: "build", origin: originOf(c.req) }, options.staticBoundaryCache);
430
+ const [pageData, , staticBoundaries] = await Promise.all([
431
+ mod.loader ? mod.loader({ ...ctx, search: effectiveSearch }) : null,
432
+ run.pending,
433
+ staticBoundaryPromise,
434
+ ]);
435
+ data = pageData;
436
+ layoutData = run.layoutData;
437
+ if (boundaryBatch !== undefined) {
438
+ const streamed = { ...boundaryBatch.initial, ...(staticBoundaries ?? {}) };
439
+ for (const entry of boundaryBatch.pending) {
440
+ const initial = streamed[entry.name];
441
+ if (initial !== undefined)
442
+ streamed[entry.name] = { ...initial, data: defer(entry.promise) };
443
+ }
444
+ boundaryStates = streamed;
445
+ }
446
+ else if (staticBoundaries !== undefined) {
447
+ boundaryStates = staticBoundaries;
448
+ }
449
+ }
450
+ catch (err) {
451
+ if (isStatusSignal(err))
452
+ return renderStatusSignal(c.req, c.env, err);
453
+ if (isControlFlow(err))
454
+ throw err;
455
+ reportLoaderError(route, c.req, c.params, err);
456
+ const errorId = boundaryFor(route, err);
457
+ if (errorId === undefined)
458
+ throw err;
459
+ if (c.req.headers.get(DATA_HEADER) !== null) {
460
+ return new Response("Internal Server Error", {
461
+ status: 500,
462
+ headers: { "content-type": "text/plain; charset=utf-8" },
463
+ });
464
+ }
465
+ return renderError(route, errorId, withDuplicateInstanceHint(err), options.nonce === undefined ? undefined : await resolveNonce(c.req, c.env));
466
+ }
467
+ return handleDataOrDocument(c.req, c.env, route, c.params, mod, data, layoutData, layoutModules ?? (await loadLayoutModules(route)), layoutRetained, boundaryStates, layoutModules === undefined ? undefined : assemblyCacheFor(mod, layoutModules));
468
+ };
469
+ },
470
+ post: (route) => async (c) => {
471
+ const mod = await route.load();
472
+ const draft = await draftFlag(c.req);
473
+ if (mod.action === undefined) {
474
+ return new Response("Method Not Allowed", {
475
+ status: 405,
476
+ headers: { allow: "GET", "content-type": "text/plain; charset=utf-8" },
477
+ });
478
+ }
479
+ const actionContext = {
480
+ params: c.params,
481
+ request: c.req,
482
+ req: c.req,
483
+ api,
484
+ env: c.env,
485
+ draft,
486
+ search: loaderSearch(mod.searchSchema, c.req),
487
+ };
488
+ const isDataRequest = c.req.headers.get(DATA_HEADER) !== null;
489
+ let layoutModules;
490
+ let result;
491
+ try {
492
+ layoutModules = await runLayoutGates(route, actionContext);
493
+ result = await mod.action(actionContext);
494
+ }
495
+ catch (err) {
496
+ if (isControlFlow(err))
497
+ return actionResponse(err, isDataRequest);
498
+ throw err;
499
+ }
500
+ const isRevalidate = result !== null && typeof result === "object" && "__nifraRevalidate" in result;
501
+ const actionResult = isRevalidate ? result.data : result;
502
+ const revalidateHeader = isRevalidate
503
+ ? { [REVALIDATE_HEADER]: result.__nifraRevalidate.join(",") }
504
+ : {};
505
+ if (isControlFlow(actionResult))
506
+ return actionResponse(actionResult, isDataRequest);
507
+ if (isDataRequest) {
508
+ const { forClient, deferred } = prepareDeferred(actionResult);
509
+ if (deferred.length === 0)
510
+ return Response.json(actionResult ?? null, { headers: revalidateHeader });
511
+ return new Response(ndjsonStream(forClient, deferred), {
512
+ headers: { "content-type": "application/x-ndjson; charset=utf-8", ...revalidateHeader },
513
+ });
514
+ }
515
+ const search = searchChainOf(layoutModules, mod, c.req);
516
+ const data = mod.loader
517
+ ? await mod.loader({
518
+ params: c.params,
519
+ request: c.req,
520
+ req: c.req,
521
+ api,
522
+ env: c.env,
523
+ draft,
524
+ search,
525
+ })
526
+ : null;
527
+ const { chain, head } = resolveChainAndHead(layoutModules, mod, {
528
+ data,
529
+ params: c.params,
530
+ origin: originOf(c.req),
531
+ });
532
+ const nonce = options.nonce === undefined ? undefined : await resolveNonce(c.req, c.env);
533
+ return renderPageResult({
534
+ adapter,
535
+ chain,
536
+ data,
537
+ actionData: actionResult,
538
+ head,
539
+ clientEntry,
540
+ routeId: route.id,
541
+ params: c.params,
542
+ path: pathOf(c.req),
543
+ search,
544
+ hydrate: mod.hydrate !== false,
545
+ ...preloadOf(route.id),
546
+ ...stylesOf(route.id),
547
+ prerenderedPaths: options.prerenderedPaths ?? [],
548
+ ...(nonce === undefined ? {} : { nonce }),
549
+ ...titleOption,
550
+ });
551
+ },
552
+ notFound: renderNotFound,
553
+ };
554
+ }
555
+ //# sourceMappingURL=page-execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-execution.js","sourceRoot":"","sources":["../../src/internal/page-execution.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { type ResponseResult } from "@nifrajs/core/server";
2
2
  import type { BoundaryRegistration, BoundaryStates } from "../boundary.js";
3
+ import { type CssLoadingMode } from "../css-contract.js";
3
4
  import type { Loader as LayoutLoader, LinkDescriptor, Meta, MetaDescriptor, MetaInput, RouteModule, ScriptDescriptor, UnsafeScriptDescriptor } from "../manifest.js";
4
5
  import type { RenderAdapter } from "../render-seam.js";
5
6
  type MaybePromise<T> = T | Promise<T>;
@@ -40,6 +41,13 @@ export interface RenderPageOptions {
40
41
  * `BuildManifest.css`) - injected as `<link rel="stylesheet">` in `<head>` so styles arrive with the
41
42
  * first paint (no FOUC). Rendered even on non-hydrated pages. Empty/omitted ⇒ none (unchanged). */
42
43
  readonly styles?: readonly string[];
44
+ /**
45
+ * Activation policy for these framework-owned stylesheet links (default `"blocking"`). In
46
+ * `"deferred"` mode, hydrating pages fetch with `media="print"` and the generated client promotes
47
+ * them to `media="all"` after load/error/timeout. Non-hydrated pages remain blocking so JS-off pages
48
+ * and terminal documents are styled.
49
+ */
50
+ readonly cssLoading?: CssLoadingMode;
43
51
  /** SSG: the prerendered-path set, serialized to `window.__NIFRA_PRERENDERED__` so the client fetches
44
52
  * a static `_data.json` on soft-nav into a prerendered route. Empty/omitted ⇒ not injected. */
45
53
  readonly prerenderedPaths?: readonly string[];
@@ -100,7 +108,8 @@ export interface RenderPageOptions {
100
108
  * tail - emitted **regardless of `hydrate`**, so a static (`hydrate: false`) page can still mount
101
109
  * no-framework islands. URLs are attribute-escaped. Empty/omitted ⇒ none (unchanged output). */
102
110
  readonly islandScripts?: readonly string[];
103
- /** CSP nonce applied to every framework-owned executable script in this document. */
111
+ /** CSP nonce applied to every framework-owned executable script in this document. Nonce-bearing
112
+ * documents are marked `private, no-store` so a request-specific nonce is never replayed. */
104
113
  readonly nonce?: string;
105
114
  /**
106
115
  * Advanced: a per-route slot the renderer fills with the request-invariant document pieces (shell
@@ -108,7 +117,8 @@ export interface RenderPageOptions {
108
117
  *
109
118
  * Only pass a cache when every shell-shaping input is IDENTICAL across the requests sharing it:
110
119
  * same `head` content (a static meta chain - never a `meta(data)` function), `title`, `styles`,
111
- * `preload`, `islandScripts`, `clientEntry`, `rootId`, `hydrate`, and `prerenderedPaths`. Per-request
120
+ * `cssLoading`, `preload`, `islandScripts`, `clientEntry`, `rootId`, `hydrate`, and `prerenderedPaths`.
121
+ * Per-request
112
122
  * values (`data`, `params`, `search`, `actionData`, `layoutData`, deferred state) are always assembled
113
123
  * fresh and safe. A per-request `nonce` disables the cache automatically. `createWebApp` wires this
114
124
  * per route, gated on the route + layout metas being static.