@timber-js/app 0.2.0-alpha.183 → 0.2.0-alpha.185

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 (74) hide show
  1. package/dist/_chunks/{build-output-helper-BC-Zg0_w.js → build-output-helper-DOGYFb_X.js} +11 -3
  2. package/dist/_chunks/build-output-helper-DOGYFb_X.js.map +1 -0
  3. package/dist/_chunks/{cli-schema-sync-D3naS3eH.js → cli-schema-sync-BTWEKJXo.js} +1 -21
  4. package/dist/_chunks/cli-schema-sync-BTWEKJXo.js.map +1 -0
  5. package/dist/_chunks/{cloudflare-nlD9KhDj.js → cloudflare-CnT5Lr7U.js} +2 -2
  6. package/dist/_chunks/{cloudflare-nlD9KhDj.js.map → cloudflare-CnT5Lr7U.js.map} +1 -1
  7. package/dist/_chunks/logger-AWfuX-KJ.js.map +1 -1
  8. package/dist/_chunks/plugin-context---kTF5v8.js.map +1 -1
  9. package/dist/_chunks/segment-classify-Byy425ng.js.map +1 -1
  10. package/dist/_chunks/{walkers-BtTlKviE.js → walkers-_6zKFlch.js} +2 -2
  11. package/dist/_chunks/{walkers-BtTlKviE.js.map → walkers-_6zKFlch.js.map} +1 -1
  12. package/dist/adapters/build-output-helper.d.ts.map +1 -1
  13. package/dist/adapters/cloudflare-dev.js +1 -1
  14. package/dist/adapters/cloudflare-kv-cache.js +1 -1
  15. package/dist/adapters/cloudflare.js +1 -1
  16. package/dist/adapters/nitro.js +1 -1
  17. package/dist/adapters/shared.d.ts.map +1 -1
  18. package/dist/cli.js +1 -1
  19. package/dist/client/internal.js +70 -22
  20. package/dist/client/internal.js.map +1 -1
  21. package/dist/client/router.d.ts.map +1 -1
  22. package/dist/client/rsc-fetch.d.ts +17 -0
  23. package/dist/client/rsc-fetch.d.ts.map +1 -1
  24. package/dist/index.js +128 -9
  25. package/dist/index.js.map +1 -1
  26. package/dist/plugin-context.d.ts +7 -0
  27. package/dist/plugin-context.d.ts.map +1 -1
  28. package/dist/plugins/static-build.d.ts +42 -0
  29. package/dist/plugins/static-build.d.ts.map +1 -1
  30. package/dist/routing/index.js +2 -2
  31. package/dist/routing/manifest-codegen.d.ts.map +1 -1
  32. package/dist/routing/scanner.d.ts.map +1 -1
  33. package/dist/routing/types.d.ts +1 -3
  34. package/dist/routing/types.d.ts.map +1 -1
  35. package/dist/server/deny-boundary.d.ts +4 -7
  36. package/dist/server/deny-boundary.d.ts.map +1 -1
  37. package/dist/server/internal.js +135 -161
  38. package/dist/server/internal.js.map +1 -1
  39. package/dist/server/prebuilt-builder.d.ts.map +1 -1
  40. package/dist/server/primitives.d.ts +0 -12
  41. package/dist/server/primitives.d.ts.map +1 -1
  42. package/dist/server/sitemap-generator.d.ts.map +1 -1
  43. package/dist/server/static-generator.d.ts.map +1 -1
  44. package/dist/server/status-code-resolver.d.ts +3 -10
  45. package/dist/server/status-code-resolver.d.ts.map +1 -1
  46. package/dist/shims/navigation-client.d.ts +8 -19
  47. package/dist/shims/navigation-client.d.ts.map +1 -1
  48. package/dist/shims/navigation.d.ts +0 -1
  49. package/dist/shims/navigation.d.ts.map +1 -1
  50. package/docs/learn/11-error-handling.mdx +2 -3
  51. package/package.json +1 -1
  52. package/src/adapters/build-output-helper.ts +6 -1
  53. package/src/adapters/shared.ts +5 -2
  54. package/src/client/router.ts +24 -7
  55. package/src/client/rsc-fetch.ts +85 -39
  56. package/src/plugin-context.ts +7 -0
  57. package/src/plugins/routing.ts +1 -1
  58. package/src/plugins/static-build.ts +161 -6
  59. package/src/routing/manifest-codegen.ts +1 -6
  60. package/src/routing/scanner.ts +0 -24
  61. package/src/routing/types.ts +1 -3
  62. package/src/server/deny-boundary.ts +5 -31
  63. package/src/server/deny-renderer.ts +2 -2
  64. package/src/server/pipeline-outcome.ts +1 -1
  65. package/src/server/prebuilt-builder.ts +1 -7
  66. package/src/server/primitives.ts +0 -18
  67. package/src/server/rsc-entry/render-route.ts +3 -3
  68. package/src/server/sitemap-generator.ts +1 -7
  69. package/src/server/static-generator.ts +2 -18
  70. package/src/server/status-code-resolver.ts +4 -47
  71. package/src/shims/navigation-client.ts +8 -26
  72. package/src/shims/navigation.ts +0 -4
  73. package/dist/_chunks/build-output-helper-BC-Zg0_w.js.map +0 -1
  74. package/dist/_chunks/cli-schema-sync-D3naS3eH.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/client/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/client/router.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,22 @@ export declare function setClientDeploymentId(id: string | null): void;
37
37
  export declare function getClientDeploymentId(): string | null;
38
38
  export declare function setStaticMode(enabled: boolean): void;
39
39
  export declare function isStaticMode(): boolean;
40
+ /**
41
+ * RSC manifest entry: hashed URL with optional inlined route params.
42
+ * Params are embedded at build time (TIM-1255) so no sidecar fetch needed.
43
+ */
44
+ interface RscManifestEntry {
45
+ url: string;
46
+ params?: Record<string, string | string[]>;
47
+ }
48
+ type RscManifest = Record<string, RscManifestEntry>;
49
+ /** @internal Exported for testing. */
50
+ export declare function setRscManifest(manifest: RscManifest | null): void;
51
+ /**
52
+ * Compute the unhashed _rsc/*.rsc URL for a route path.
53
+ * @internal Exported for testing.
54
+ */
55
+ export declare function toUnhashedRscUrl(url: string): string;
40
56
  /** Header name used by the server to signal a version skew reload. */
41
57
  export declare const RELOAD_HEADER = "X-Timber-Reload";
42
58
  /** Header name for the client's deployment ID. */
@@ -126,4 +142,5 @@ export declare class NonRscResponse extends Error {
126
142
  export declare function fetchRscPayload(url: string, deps: RouterDeps, stateTree?: {
127
143
  segments: string[];
128
144
  }, currentUrl?: string, signal?: AbortSignal): Promise<FetchResult>;
145
+ export {};
129
146
  //# sourceMappingURL=rsc-fetch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rsc-fetch.d.ts","sourceRoot":"","sources":["../../src/client/rsc-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3C,qEAAqE;AACrE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;OAMG;IACH,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpC,uFAAuF;IACvF,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAClC,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IACjD,+EAA+E;IAC/E,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAClC;AAID,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAyCnD,8DAA8D;AAC9D,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE7D;AAED,oCAAoC;AACpC,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,CAErD;AAYD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEpD;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAoCD,sEAAsE;AACtE,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAE/C,kDAAkD;AAClD,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAE7D;AAID,wBAAgB,eAAe,CAC7B,SAAS,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,EAC7C,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAsBxB;AAeD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,EAAE,GAAG,IAAI,CAS3E;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,GAAG,IAAI,CAU1E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,IAAI,CAS1F;AAID;;;GAGG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,YAAY,GAAG,EAAE,MAAM,EAGtB;CACF;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,cAEC;CACF;AAED;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,YAAY,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAItC;CACF;AAED;;;;;;;;;GASG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,YAAY,GAAG,EAAE,MAAM,EAGtB;CACF;AAoDD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,UAAU,EAChB,SAAS,CAAC,EAAE;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,EAClC,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC,CA8LtB"}
1
+ {"version":3,"file":"rsc-fetch.d.ts","sourceRoot":"","sources":["../../src/client/rsc-fetch.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { a as __esmMin, o as __exportAll, s as __toCommonJS } from "./_chunks/dist-BA3u1z3W.js";
2
2
  import { c as isDynamicMetadataExtension, l as isMetadataRouteServePath, r as canonicalize } from "./_chunks/canonicalize-DQHyFClh.js";
3
3
  import { h as swallow } from "./_chunks/logger-AWfuX-KJ.js";
4
- import { i as scanRoutes } from "./_chunks/cli-schema-sync-D3naS3eH.js";
5
- import { a as generateRouteMap, c as fileHasDirective, d as getPrerenderExport, i as validateSchemaAgainstRoutes, l as fileHasExport, n as collectInterceptionRewrites, o as fileHasAnyExport, s as fileHasDefaultExport, t as collectLeafRoutes, u as fileHasStarExport } from "./_chunks/walkers-BtTlKviE.js";
4
+ import { i as scanRoutes } from "./_chunks/cli-schema-sync-BTWEKJXo.js";
5
+ import { a as generateRouteMap, c as fileHasDirective, d as getPrerenderExport, i as validateSchemaAgainstRoutes, l as fileHasExport, n as collectInterceptionRewrites, o as fileHasAnyExport, s as fileHasDefaultExport, t as collectLeafRoutes, u as fileHasStarExport } from "./_chunks/walkers-_6zKFlch.js";
6
6
  import { a as resolveAppDir, c as createNoopTimer, n as loadTimberConfigFile, o as resolveBuildDir, r as mergeFileConfig, s as resolveClientJavascript, t as createPluginContext } from "./_chunks/plugin-context---kTF5v8.js";
7
7
  import { t as fnv1aHash } from "./_chunks/fast-hash-D6hIVt1Y.js";
8
8
  import { t as formatSize } from "./_chunks/format-CfwjgPz9.js";
@@ -20,7 +20,7 @@ import { fileURLToPath, pathToFileURL } from "node:url";
20
20
  import { styleText } from "node:util";
21
21
  import { constants, createGzip, gzipSync } from "node:zlib";
22
22
  import { createHash, randomUUID } from "node:crypto";
23
- import { copyFile, mkdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
23
+ import { copyFile, mkdir, readFile, readdir, rename, rm, stat, writeFile } from "node:fs/promises";
24
24
  //#region src/plugins/content.ts
25
25
  var CONFIG_FILE_NAMES$1 = [
26
26
  "content-collections.ts",
@@ -2401,7 +2401,6 @@ var SINGLE_FILE_KEYS = [
2401
2401
  var RECORD_FILE_KEYS = [
2402
2402
  "statusFiles",
2403
2403
  "jsonStatusFiles",
2404
- "legacyStatusFiles",
2405
2404
  "metadataRoutes"
2406
2405
  ];
2407
2406
  var SCHEMA_EXTENSIONS = [
@@ -2829,7 +2828,7 @@ var SEGMENT_PREFIX = "\0$segment:";
2829
2828
  /**
2830
2829
  * File convention names we track for changes that require manifest regeneration.
2831
2830
  */
2832
- var ROUTE_FILE_PATTERNS = /\/(page|layout|middleware|access|route|error|global-error|default|denied|params|schema|\d{3}|[45]xx|not-found|forbidden|unauthorized|sitemap|robots|manifest|favicon|icon|opengraph-image|apple-icon)\./;
2831
+ var ROUTE_FILE_PATTERNS = /\/(page|layout|middleware|access|route|error|global-error|default|denied|params|schema|\d{3}|[45]xx|sitemap|robots|manifest|favicon|icon|opengraph-image|apple-icon)\./;
2833
2832
  /**
2834
2833
  * Create the timber-routing Vite plugin.
2835
2834
  *
@@ -3491,7 +3490,7 @@ function filterBySubsets(faces, subsets) {
3491
3490
  * Generate a content hash for font data.
3492
3491
  * Returns the first 8 hex chars of the SHA-256 hash.
3493
3492
  */
3494
- function contentHash(data) {
3493
+ function contentHash$1(data) {
3495
3494
  return createHash("sha256").update(data).digest("hex").slice(0, 8);
3496
3495
  }
3497
3496
  /**
@@ -3502,7 +3501,7 @@ function contentHash(data) {
3502
3501
  */
3503
3502
  function hashedFontFilename(face, data) {
3504
3503
  const slug = face.family.toLowerCase().replace(/\s+/g, "-");
3505
- const hash = contentHash(data);
3504
+ const hash = contentHash$1(data);
3506
3505
  return `${slug}-${face.subset}-${face.weight}-${face.style}-${hash}.woff2`;
3507
3506
  }
3508
3507
  /**
@@ -4733,7 +4732,7 @@ var FontPipeline = class {
4733
4732
  const absolutePath = normalize(resolve(src.path));
4734
4733
  if (!existsSync(absolutePath)) continue;
4735
4734
  const data = readFileSync(absolutePath);
4736
- src.hashedBasename = hashedFontBasename(src.path, contentHash(data));
4735
+ src.hashedBasename = hashedFontBasename(src.path, contentHash$1(data));
4737
4736
  }
4738
4737
  this._entries.set(entry.id, entry);
4739
4738
  }
@@ -6578,6 +6577,30 @@ async function stripJsFromRscAssetsManifests(buildDir) {
6578
6577
  }
6579
6578
  }
6580
6579
  //#endregion
6580
+ //#region src/server/flight-scripts.ts
6581
+ /**
6582
+ * Shared Flight data script generation.
6583
+ *
6584
+ * Both html-injectors.ts (Web Streams / dev) and node-stream-transforms.ts
6585
+ * (Node streams / production) use this module to generate inline `<script>`
6586
+ * tags for RSC Flight data injection.
6587
+ *
6588
+ * The init script goes in `<head>` as part of the HTML shell (guaranteed
6589
+ * to execute before any streaming chunk scripts). Push scripts are emitted
6590
+ * as RSC chunks arrive during streaming.
6591
+ *
6592
+ * See design/02-rendering-pipeline.md, LOCAL-415
6593
+ */
6594
+ /**
6595
+ * Escape a JSON string for safe embedding inside an HTML `<script>` tag.
6596
+ *
6597
+ * Prevents XSS via `<\/script>` injection and handles Unicode line/paragraph
6598
+ * separators that are valid JSON but invalid in JS string literals (pre-ES2019).
6599
+ */
6600
+ function htmlEscapeJsonString(str) {
6601
+ return str.replace(/</g, "\\u003c").replace(/>/g, "\\u003e").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
6602
+ }
6603
+ //#endregion
6581
6604
  //#region src/plugins/static-build.ts
6582
6605
  /**
6583
6606
  * Patterns that indicate dynamic per-request API usage.
@@ -6684,10 +6707,15 @@ async function runStaticGeneration(ctx) {
6684
6707
  const generate = mod.__timber_generateStaticSite;
6685
6708
  if (typeof generate !== "function") throw new Error("[timber] Static generation: built RSC entry does not export __timber_generateStaticSite — rebuild from a clean build directory");
6686
6709
  const staticDir = join(ctx.buildDir, "static-pages");
6710
+ await rm(join(staticDir, "_rsc"), {
6711
+ recursive: true,
6712
+ force: true
6713
+ }).catch(() => {});
6687
6714
  await mkdir(staticDir, { recursive: true });
6688
6715
  const sitemapConfig = ctx.config.sitemap;
6689
6716
  const autoSitemapEnabled = Boolean(sitemapConfig?.enabled && sitemapConfig?.baseUrl);
6690
6717
  const contentTypes = {};
6718
+ const routeParams = {};
6691
6719
  const summary = await generate({
6692
6720
  autoSitemapEnabled,
6693
6721
  renderTimeoutMs: ctx.config.renderTimeoutMs,
@@ -6698,7 +6726,12 @@ async function runStaticGeneration(ctx) {
6698
6726
  if (rel.startsWith("..") || resolve(staticDir, rel) !== fullPath) throw new Error(`[timber] Static generation: output path "${relPath}" escapes the static output directory — check generateStaticSegmentParams for path traversal characters in ${entry.urlPath}`);
6699
6727
  await mkdir(dirname(fullPath), { recursive: true });
6700
6728
  await writeFileAtomic$1(fullPath, entry.body);
6701
- if (entry.kind === "rsc" && entry.headers["x-timber-params"]) await writeFileAtomic$1(fullPath.replace(/\.rsc$/, ".params.json"), entry.headers["x-timber-params"]);
6729
+ if (entry.kind === "rsc" && entry.headers["x-timber-params"]) {
6730
+ const rscUrlKey = entry.urlPath === "/" ? "/_rsc/index.rsc" : `/_rsc${entry.urlPath}.rsc`;
6731
+ try {
6732
+ routeParams[rscUrlKey] = JSON.parse(entry.headers["x-timber-params"]);
6733
+ } catch {}
6734
+ }
6702
6735
  if (entry.kind === "api" && !extname(relPath) && entry.contentType) contentTypes[entry.urlPath] = entry.contentType;
6703
6736
  }
6704
6737
  });
@@ -6709,6 +6742,14 @@ async function runStaticGeneration(ctx) {
6709
6742
  throw new Error(`[timber] Static generation failed:\n${details}`);
6710
6743
  }
6711
6744
  if (Object.keys(contentTypes).length > 0) ctx.staticContentTypes = contentTypes;
6745
+ if (!ctx.clientJavascript.disabled) {
6746
+ const rscManifest = await hashRscPayloads(staticDir, routeParams);
6747
+ if (Object.keys(rscManifest).length > 0) {
6748
+ await injectRscManifestIntoHtml(staticDir, rscManifest);
6749
+ ctx.rscManifest = rscManifest;
6750
+ console.log(`[timber] Static generation: hashed ${Object.keys(rscManifest).length} RSC flight payloads`);
6751
+ }
6752
+ }
6712
6753
  if (summary.redirects.length > 0) {
6713
6754
  const generated = generateRedirectsFile(summary.redirects);
6714
6755
  const redirectsPath = join(staticDir, "_redirects");
@@ -6724,6 +6765,84 @@ async function runStaticGeneration(ctx) {
6724
6765
  return summary;
6725
6766
  }
6726
6767
  /**
6768
+ * Compute a short content hash for immutable caching.
6769
+ * Uses 8 chars of base64url-encoded SHA-256, matching Vite's asset hash style.
6770
+ */
6771
+ function contentHash(data) {
6772
+ return createHash("sha256").update(data).digest("base64url").slice(0, 8);
6773
+ }
6774
+ /**
6775
+ * Walk a directory recursively and return all file paths.
6776
+ */
6777
+ async function walkDir(dir) {
6778
+ const results = [];
6779
+ let entries;
6780
+ try {
6781
+ entries = await readdir(dir, { withFileTypes: true });
6782
+ } catch {
6783
+ return results;
6784
+ }
6785
+ for (const entry of entries) {
6786
+ const full = join(dir, entry.name);
6787
+ if (entry.isDirectory()) results.push(...await walkDir(full));
6788
+ else results.push(full);
6789
+ }
6790
+ return results;
6791
+ }
6792
+ /**
6793
+ * Hash all RSC flight payloads in `_rsc/`, rename them with content
6794
+ * hashes, and build a manifest with optional inlined route params.
6795
+ *
6796
+ * Before: `_rsc/index.rsc`, `_rsc/about.rsc`
6797
+ * After: `_rsc/index-B7YxEKdN.rsc`, `_rsc/about-C8ZzFLfO.rsc`
6798
+ *
6799
+ * The manifest maps the original `_rsc/` URL to an entry object:
6800
+ * `{"/_rsc/index.rsc":{"url":"/_rsc/index-B7YxEKdN.rsc"}, ...}`
6801
+ *
6802
+ * Route params (from `routeParams`) are inlined into the manifest
6803
+ * entry, eliminating the need for .params.json sidecar files. TIM-1255.
6804
+ *
6805
+ * Injected into HTML as:
6806
+ * `<script>window.__TIMBER_RSC_MANIFEST__={...}<\/script>`
6807
+ *
6808
+ * @internal Exported for testing.
6809
+ */
6810
+ async function hashRscPayloads(staticDir, routeParams) {
6811
+ const files = await walkDir(join(staticDir, "_rsc"));
6812
+ const manifest = {};
6813
+ for (const filePath of files) {
6814
+ if (!filePath.endsWith(".rsc")) continue;
6815
+ const hash = contentHash(await readFile(filePath));
6816
+ const rel = relative(staticDir, filePath).replace(/\\/g, "/");
6817
+ const hashedPath = `${filePath.slice(0, -4)}-${hash}.rsc`;
6818
+ await rename(filePath, hashedPath);
6819
+ const hashedRel = relative(staticDir, hashedPath).replace(/\\/g, "/");
6820
+ const key = `/${rel}`;
6821
+ const entry = { url: `/${hashedRel}` };
6822
+ if (routeParams?.[key]) entry.params = routeParams[key];
6823
+ manifest[key] = entry;
6824
+ }
6825
+ return manifest;
6826
+ }
6827
+ /**
6828
+ * Inject the RSC manifest into all HTML files as a `<script>` tag
6829
+ * before `</head>`. This lets the client resolve hashed RSC URLs
6830
+ * without an extra network request.
6831
+ *
6832
+ * @internal Exported for testing.
6833
+ */
6834
+ async function injectRscManifestIntoHtml(staticDir, manifest) {
6835
+ const htmlFiles = (await walkDir(staticDir)).filter((f) => f.endsWith(".html"));
6836
+ const scriptTag = `<script>window.__TIMBER_RSC_MANIFEST__=${htmlEscapeJsonString(JSON.stringify(manifest))}<\/script>`;
6837
+ for (const htmlFile of htmlFiles) {
6838
+ let html = await readFile(htmlFile, "utf-8");
6839
+ const headClose = html.indexOf("</head>");
6840
+ if (headClose !== -1) html = html.slice(0, headClose) + scriptTag + html.slice(headClose);
6841
+ else html = scriptTag + html;
6842
+ await writeFile(htmlFile, html);
6843
+ }
6844
+ }
6845
+ /**
6727
6846
  * Read a user-authored `_redirects` file from the project's `public/`
6728
6847
  * directory. Returns `null` if no file exists.
6729
6848
  *