@takazudo/zfb-runtime 0.1.0-next.7 → 0.1.0-next.70

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.
@@ -12,21 +12,29 @@
12
12
  // via `init()`. The component calls `init()` as a side effect on first import.
13
13
  // No inline <script> dangerouslySetInnerHTML is emitted.
14
14
  //
15
- // Named-cause deviation no JSX (W1B: "follow existing component-emission pattern"):
16
- // `@takazudo/zfb-runtime` does not depend on Preact and has no JSX compiler
17
- // options configured in its tsconfig. The existing component-emission pattern
18
- // (established by `Island` in @takazudo/zfb, and `ViewTransitions` in this
19
- // package) uses plain VNode-shaped objects with `constructor: undefined` the
20
- // sentinel recognised by both Preact and React renderers. Following that pattern
21
- // avoids adding Preact as a dependency and avoids tsconfig JSX changes.
15
+ // Framework-agnostic element minting (no JSX syntax):
16
+ // `@takazudo/zfb-runtime` does not depend on a framework runtime. Head nodes
17
+ // are minted by calling `jsx` from `react/jsx-runtime` directly — NOT JSX
18
+ // syntax, so this stays a plain `.ts` file with no tsconfig JSX changes. The
19
+ // engine alias-rewrites `react/jsx-runtime` `preact/jsx-runtime` in Preact
20
+ // mode (bundler.rs ~2886) and resolves it natively in React mode, so the same
21
+ // call mints a real element for whichever framework the project configured.
22
+ // The previous approach (a hand-rolled `{ type, props, key, constructor:
23
+ // undefined }` object literal — the Preact diff-path sentinel) only worked for
24
+ // Preact: React's renderer rejects such an object as a child with React error
25
+ // #31 ("Objects are not valid as a React child"), because a real React element
26
+ // carries `$$typeof: Symbol.for("react.element")` a literal cannot fake. Same
27
+ // migration as `Island` in @takazudo/zfb.
22
28
  //
23
- // The component renders three sibling elements to <head>:
29
+ // The component renders three base sibling elements to <head> (plus optional
30
+ // metas emitted conditionally — see `prefetchDisabled` and `preserveHtmlAttrs`):
24
31
  // 1. A <style> tag with the `.zfb-route-announcer` ARIA helper class.
25
32
  // 2. <meta name="zfb-view-transitions-enabled" content="true" />
26
33
  // 3. <meta name="zfb-view-transitions-fallback" content={fallback} />
27
34
  //
28
35
  // The route-announcer <div> is injected into <body> by `announce()` in
29
36
  // `client-router/router.ts` on every navigation.
37
+ import { jsx } from "react/jsx-runtime";
30
38
  import { init } from "./client-router/router.js";
31
39
  import { init as prefetchInit } from "./client-router/prefetch.js";
32
40
  // Side-effect: wire click + submit intercepts on first import of this component.
@@ -39,14 +47,23 @@ if (typeof document !== "undefined") {
39
47
  // lifetime even if <ClientRouter prefetchAll /> is mounted multiple times (#276).
40
48
  let prefetchBootstrapped = false;
41
49
  /**
42
- * Construct a VNode-shaped object. Sets `constructor: undefined` so that both
43
- * Preact's and React's renderers treat it as a structural VNode rather than
44
- * foreign data. (Mirrors the `makeVNode` pattern in `@takazudo/zfb`'s Island.)
50
+ * Mint a head element through the per-project JSX runtime.
51
+ *
52
+ * Calls `jsx` from `react/jsx-runtime` (alias-rewritten to
53
+ * `preact/jsx-runtime` in Preact mode by the engine, native in React mode)
54
+ * so the returned value is a real element for whichever framework the
55
+ * project configured — NOT a hand-rolled `{ type, props, key }` literal,
56
+ * which only Preact accepts and which makes React throw error #31. A stable
57
+ * `key` is passed because `ClientRouter()` returns these nodes in a plain
58
+ * array (React warns about keyless list children otherwise). Mirrors the
59
+ * `Island` migration in `@takazudo/zfb`.
45
60
  */
46
- function makeVNode(type, props) {
47
- const v = { type, props, key: null };
48
- v.constructor = undefined;
49
- return v;
61
+ function makeVNode(type, props, key) {
62
+ // `jsx`'s `type` param is typed `ElementType` (string-literal intrinsic
63
+ // tags or component types), which rejects an arbitrary runtime `string`.
64
+ // The tag is dynamic here, so cast to the factory's own first-param type —
65
+ // robust whether the engine aliases `jsx` to react or preact at build time.
66
+ return jsx(type, props, key);
50
67
  }
51
68
  // CSS for the route-announcer element. Ported verbatim from Astro's
52
69
  // `<style is:global>` block in ClientRouter.astro (lines 11–23), renaming
@@ -81,7 +98,7 @@ const announcerCss = `
81
98
  * <ClientRouter fallback="animate" />
82
99
  * ```
83
100
  */
84
- export function ClientRouter({ fallback = "animate", prefetchAll: prefetchAllProp = false, } = {}) {
101
+ export function ClientRouter({ fallback = "animate", prefetchAll: prefetchAllProp = false, preserveHtmlAttrs = [], } = {}) {
85
102
  // Bootstrap prefetch exactly once on the client when prefetchAll is true.
86
103
  // The initialized flag inside prefetchInit() provides a second safety layer
87
104
  // in case of concurrent hydration or manual callers (#276).
@@ -91,11 +108,11 @@ export function ClientRouter({ fallback = "animate", prefetchAll: prefetchAllPro
91
108
  }
92
109
  const nodes = [
93
110
  // Global styles for the ARIA route-announcer div injected into <body>.
94
- makeVNode("style", { dangerouslySetInnerHTML: { __html: announcerCss } }),
111
+ makeVNode("style", { dangerouslySetInnerHTML: { __html: announcerCss } }, "zfb-vt-style"),
95
112
  // Opt-in meta tag: router checks for this to decide whether to intercept navigations.
96
- makeVNode("meta", { name: "zfb-view-transitions-enabled", content: "true" }),
113
+ makeVNode("meta", { name: "zfb-view-transitions-enabled", content: "true" }, "zfb-vt-enabled"),
97
114
  // Fallback strategy meta tag: read by getFallback() in router.ts.
98
- makeVNode("meta", { name: "zfb-view-transitions-fallback", content: fallback }),
115
+ makeVNode("meta", { name: "zfb-view-transitions-fallback", content: fallback }, "zfb-vt-fallback"),
99
116
  ];
100
117
  // Prefetch-disabled meta tag (#277): emitted when the bundler set
101
118
  // `globalThis.__zfb.prefetchDisabled = true` (from `zfb.config.ts`
@@ -110,7 +127,16 @@ export function ClientRouter({ fallback = "animate", prefetchAll: prefetchAllPro
110
127
  // Pin the contract verbatim — the attribute names and content value are
111
128
  // shared with the sibling prefetch-core sub-issue (#276).
112
129
  if (globalThis.__zfb?.prefetchDisabled === true) {
113
- nodes.push(makeVNode("meta", { name: "zfb-prefetch-disabled", content: "true" }));
130
+ nodes.push(makeVNode("meta", { name: "zfb-prefetch-disabled", content: "true" }, "zfb-prefetch-disabled"));
131
+ }
132
+ // Consumer-extensible <html> attribute preserve-list (#1103). swapRootAttributes
133
+ // reads this meta and re-applies the listed attributes' runtime values after each
134
+ // swap, so persisted-island state on <html> (data-theme, data-sidebar-hidden, …)
135
+ // survives navigation. Emitted only when non-empty, so non-opt-in output stays
136
+ // byte-identical. Same conditional-emission shape as the prefetch-disabled meta.
137
+ const preserveList = preserveHtmlAttrs.filter(Boolean);
138
+ if (preserveList.length > 0) {
139
+ nodes.push(makeVNode("meta", { name: "zfb-preserve-html-attrs", content: preserveList.join(" ") }, "zfb-preserve-html-attrs"));
114
140
  }
115
141
  return nodes;
116
142
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client-router.js","sourceRoot":"","sources":["../src/client-router.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,EAAE;AACF,wDAAwD;AACxD,uDAAuD;AACvD,yEAAyE;AACzE,EAAE;AACF,2DAA2D;AAC3D,2EAA2E;AAC3E,6EAA6E;AAC7E,2EAA2E;AAC3E,+EAA+E;AAC/E,iFAAiF;AACjF,2DAA2D;AAC3D,EAAE;AACF,sFAAsF;AACtF,8EAA8E;AAC9E,gFAAgF;AAChF,6EAA6E;AAC7E,iFAAiF;AACjF,mFAAmF;AACnF,0EAA0E;AAC1E,EAAE;AACF,0DAA0D;AAC1D,wEAAwE;AACxE,mEAAmE;AACnE,wEAAwE;AACxE,EAAE;AACF,uEAAuE;AACvE,iDAAiD;AAEjD,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEnE,iFAAiF;AACjF,gFAAgF;AAChF,oEAAoE;AACpE,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;IACpC,IAAI,EAAE,CAAC;AACT,CAAC;AAED,8EAA8E;AAC9E,kFAAkF;AAClF,IAAI,oBAAoB,GAAG,KAAK,CAAC;AAuBjC;;;;GAIG;AACH,SAAS,SAAS,CAAC,IAAY,EAAE,KAA8B;IAC7D,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAKjC,CAAC;IACF,CAAC,CAAC,WAAW,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAwB,CAAC;AAClC,CAAC;AAED,oEAAoE;AACpE,0EAA0E;AAC1E,gEAAgE;AAChE,uEAAuE;AACvE,+EAA+E;AAC/E,MAAM,YAAY,GAAG;;;;;;;;;;;;CAYpB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,QAAQ,GAAG,SAAS,EACpB,WAAW,EAAE,eAAe,GAAG,KAAK,MACf,EAAE;IACvB,0EAA0E;IAC1E,4EAA4E;IAC5E,4DAA4D;IAC5D,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,eAAe,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAChF,oBAAoB,GAAG,IAAI,CAAC;QAC5B,YAAY,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,KAAK,GAA0B;QACnC,uEAAuE;QACvE,SAAS,CAAC,OAAO,EAAE,EAAE,uBAAuB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC;QACzE,sFAAsF;QACtF,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC5E,kEAAkE;QAClE,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,+BAA+B,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;KAChF,CAAC;IAEF,kEAAkE;IAClE,mEAAmE;IACnE,0EAA0E;IAC1E,iFAAiF;IACjF,gDAAgD;IAChD,EAAE;IACF,yEAAyE;IACzE,+EAA+E;IAC/E,iBAAiB;IACjB,EAAE;IACF,wEAAwE;IACxE,0DAA0D;IAC1D,IAAK,UAAyD,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAChG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"client-router.js","sourceRoot":"","sources":["../src/client-router.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,EAAE;AACF,wDAAwD;AACxD,uDAAuD;AACvD,yEAAyE;AACzE,EAAE;AACF,2DAA2D;AAC3D,2EAA2E;AAC3E,6EAA6E;AAC7E,2EAA2E;AAC3E,+EAA+E;AAC/E,iFAAiF;AACjF,2DAA2D;AAC3D,EAAE;AACF,sDAAsD;AACtD,+EAA+E;AAC/E,4EAA4E;AAC5E,+EAA+E;AAC/E,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,2EAA2E;AAC3E,iFAAiF;AACjF,gFAAgF;AAChF,iFAAiF;AACjF,gFAAgF;AAChF,4CAA4C;AAC5C,EAAE;AACF,6EAA6E;AAC7E,iFAAiF;AACjF,wEAAwE;AACxE,mEAAmE;AACnE,wEAAwE;AACxE,EAAE;AACF,uEAAuE;AACvE,iDAAiD;AAEjD,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAExC,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AACjD,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEnE,iFAAiF;AACjF,gFAAgF;AAChF,oEAAoE;AACpE,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;IACpC,IAAI,EAAE,CAAC;AACT,CAAC;AAED,8EAA8E;AAC9E,kFAAkF;AAClF,IAAI,oBAAoB,GAAG,KAAK,CAAC;AA2CjC;;;;;;;;;;;GAWG;AACH,SAAS,SAAS,CAAC,IAAY,EAAE,KAA8B,EAAE,GAAW;IAC1E,wEAAwE;IACxE,yEAAyE;IACzE,2EAA2E;IAC3E,4EAA4E;IAC5E,OAAO,GAAG,CAAC,IAAiC,EAAE,KAAK,EAAE,GAAG,CAAmC,CAAC;AAC9F,CAAC;AAED,oEAAoE;AACpE,0EAA0E;AAC1E,gEAAgE;AAChE,uEAAuE;AACvE,+EAA+E;AAC/E,MAAM,YAAY,GAAG;;;;;;;;;;;;CAYpB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,QAAQ,GAAG,SAAS,EACpB,WAAW,EAAE,eAAe,GAAG,KAAK,EACpC,iBAAiB,GAAG,EAAE,MACD,EAAE;IACvB,0EAA0E;IAC1E,4EAA4E;IAC5E,4DAA4D;IAC5D,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,eAAe,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAChF,oBAAoB,GAAG,IAAI,CAAC;QAC5B,YAAY,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,KAAK,GAA0B;QACnC,uEAAuE;QACvE,SAAS,CAAC,OAAO,EAAE,EAAE,uBAAuB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,CAAC;QACzF,sFAAsF;QACtF,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,gBAAgB,CAAC;QAC9F,kEAAkE;QAClE,SAAS,CACP,MAAM,EACN,EAAE,IAAI,EAAE,+BAA+B,EAAE,OAAO,EAAE,QAAQ,EAAE,EAC5D,iBAAiB,CAClB;KACF,CAAC;IAEF,kEAAkE;IAClE,mEAAmE;IACnE,0EAA0E;IAC1E,iFAAiF;IACjF,gDAAgD;IAChD,EAAE;IACF,yEAAyE;IACzE,+EAA+E;IAC/E,iBAAiB;IACjB,EAAE;IACF,wEAAwE;IACxE,0DAA0D;IAC1D,IAAK,UAAyD,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAChG,KAAK,CAAC,IAAI,CACR,SAAS,CACP,MAAM,EACN,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,EAAE,EAClD,uBAAuB,CACxB,CACF,CAAC;IACJ,CAAC;IAED,iFAAiF;IACjF,kFAAkF;IAClF,iFAAiF;IACjF,+EAA+E;IAC/E,iFAAiF;IACjF,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,SAAS,CACP,MAAM,EACN,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EACpE,yBAAyB,CAC1B,CACF,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
package/dist/router.d.ts CHANGED
@@ -30,6 +30,12 @@ export interface PageHeading {
30
30
  * for this route template. May be async. Returns an array of
31
31
  * `{ params, props? }` objects identical in shape to the Astro/zfb
32
32
  * `paths()` contract.
33
+ * **Evaluated once per router instance** — the result is memoised and
34
+ * shared across the `/__paths__` handler and all per-page render
35
+ * requests. This matches the build-time-enumerator contract: every
36
+ * entry rendered within a single build sees the same paths() snapshot.
37
+ * Dev mode is safe because each file-save triggers a fresh bundle,
38
+ * which creates a new router instance with a clean memo.
33
39
  * - `getStaticProps`: optional async function for static routes that need
34
40
  * to fetch data at build/render time. Called once per request (before
35
41
  * `default`). Must return `{ props: Record<string, unknown> }`. The
@@ -69,6 +75,17 @@ export interface CreatePageRouterOptions {
69
75
  readonly contentSnapshot: ContentSnapshot;
70
76
  /** Framework adapter pinning the SSR call. */
71
77
  readonly framework: FrameworkAdapter;
78
+ /**
79
+ * When `true`, the 500 body for render errors includes the full JS stack
80
+ * trace. When `false`, only the message + route are included. When
81
+ * omitted, the runtime checks `globalThis.__zfb.ssrDebug` at request time:
82
+ * that flag is set by the embedded V8 build/dev host (`globals_shim.js`)
83
+ * and is absent on the production Cloudflare Workers runtime.
84
+ *
85
+ * Default is effectively OFF for production (no flag ⇒ message + route only).
86
+ * Useful for explicit injection in unit tests without global mutation.
87
+ */
88
+ readonly includeErrorStack?: boolean;
72
89
  }
73
90
  /**
74
91
  * Fetch-handler shape returned by [`createPageRouter`]. Shaped as a plain
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAMrD;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;IAC9D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CAC7E;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5C;AAED,gDAAgD;AAChD,MAAM,WAAW,uBAAuB;IACtC,kFAAkF;IAClF,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;CACtC;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAejE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,UAAU,CA0P1E"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAMrD;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;IAC9D,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CAC7E;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5C;AAED,gDAAgD;AAChD,MAAM,WAAW,uBAAuB;IACtC,kFAAkF;IAClF,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC;;;;;;;;;OASG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACtC;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAwEjE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,UAAU,CAuT1E"}
package/dist/router.js CHANGED
@@ -48,6 +48,55 @@ import { setContentSnapshot } from "@takazudo/zfb/content";
48
48
  * verbatim because the embedded V8 host does NOT auto-set a charset.
49
49
  */
50
50
  const DEFAULT_CONTENT_TYPE = "text/html; charset=utf-8";
51
+ /**
52
+ * Issue #530: prepend `<!doctype html>\n` to SSR-rendered HTML bodies that
53
+ * lack a doctype declaration, mirroring the guard in
54
+ * `crates/zfb-build/src/renderer.rs::render_one_inner` (issue #524).
55
+ *
56
+ * Gate conditions (all must hold to prepend):
57
+ * 1. `contentType` media-type (before `;`) is `text/html` (case-insensitive).
58
+ * 2. The body, after stripping an optional UTF-8 BOM (U+FEFF) and leading
59
+ * ASCII whitespace, starts with `<html` (case-insensitive) — i.e. it is
60
+ * an `<html>`-rooted document, not XML / JSON / a fragment.
61
+ * 3. The body (same stripped prefix) does NOT already begin with `<!doctype`
62
+ * (case-insensitive).
63
+ *
64
+ * Deliberately NOT shared with the Rust side — duplication of a 5-line guard
65
+ * is the right call rather than introducing a new cross-language boundary.
66
+ */
67
+ function ensureHtml5Doctype(body, contentType) {
68
+ const mediaType = contentType.split(";")[0]?.trim().toLowerCase();
69
+ if (mediaType !== "text/html")
70
+ return body;
71
+ // Strip optional BOM and leading whitespace to inspect the root element.
72
+ const stripped = body.replace(/^/, "").trimStart();
73
+ if (!stripped.toLowerCase().startsWith("<!doctype")) {
74
+ if (stripped.toLowerCase().startsWith("<html")) {
75
+ return `<!doctype html>\n${body}`;
76
+ }
77
+ }
78
+ return body;
79
+ }
80
+ /**
81
+ * Evaluate `pathsFn` once per `routeKey`, sharing the result across all
82
+ * concurrent and subsequent callers via a Promise stored in `memo`.
83
+ *
84
+ * Rejections are evicted from the memo so that a transient paths() failure
85
+ * does not permanently poison the cache — the next request retries.
86
+ */
87
+ async function getOrEvalPaths(memo, routeKey, pathsFn) {
88
+ const existing = memo.get(routeKey);
89
+ if (existing !== undefined) {
90
+ return existing;
91
+ }
92
+ const promise = Promise.resolve(pathsFn()).then((v) => v, (err) => {
93
+ // Evict on rejection so the next request retries.
94
+ memo.delete(routeKey);
95
+ return Promise.reject(err);
96
+ });
97
+ memo.set(routeKey, promise);
98
+ return promise;
99
+ }
51
100
  /**
52
101
  * Build a page router for the SSG-first architecture (ADR-005).
53
102
  *
@@ -75,6 +124,21 @@ export function createPageRouter(opts) {
75
124
  for (const page of opts.pages) {
76
125
  pagesByRoute.set(page.route, page);
77
126
  }
127
+ // Per-router-instance memo for paths() results.
128
+ //
129
+ // Keyed on page.route (e.g. "/blog/:slug"). Stores the in-flight or
130
+ // settled Promise so that concurrent requests share one evaluation.
131
+ // Rejections are NOT cached: if paths() throws the Promise is removed
132
+ // from the map so the next request retries rather than re-propagating
133
+ // the same error indefinitely.
134
+ //
135
+ // Production SSR isolates evaluate paths() once per isolate, which
136
+ // matches the documented build-time-enumerator contract. Dev mode is
137
+ // safe because each re-bundle creates a fresh router instance
138
+ // (dev.rs reload_renderer), so stale paths() results never persist
139
+ // across a file-save cycle. Watch-time invalidation is explicitly
140
+ // out of scope per issue #507.
141
+ const pathsMemo = new Map();
78
142
  // Sanity check: a user-authored route that happens to start with
79
143
  // `/__paths__` (or a top-level catchall like `/:slug{.+}`) would
80
144
  // shadow the synthetic endpoint registered below if Hono dispatched
@@ -124,7 +188,7 @@ export function createPageRouter(opts) {
124
188
  }
125
189
  let result;
126
190
  try {
127
- result = await mod.paths();
191
+ result = await getOrEvalPaths(pathsMemo, routeKey, mod.paths);
128
192
  }
129
193
  catch (err) {
130
194
  const msg = err instanceof Error ? err.message : String(err);
@@ -164,14 +228,28 @@ export function createPageRouter(opts) {
164
228
  // an empty object — the component signature has no required props.
165
229
  // For dynamic routes whose URL params do not match any paths()
166
230
  // entry, we return a 404 rather than rendering with empty props.
167
- const rawUrlParams = c.req.param();
168
- const urlParams = (rawUrlParams ?? {});
169
- const hasDynamicParams = Object.keys(urlParams).length > 0;
231
+ //
232
+ // Whether the route is dynamic is derived from the ROUTE PATTERN,
233
+ // not from the captured params: for an optional catchall
234
+ // (`/docs/:slug{.+}?`), Hono matches the bare `/docs` with NO
235
+ // params captured at all, so `Object.keys(c.req.param())` would
236
+ // be empty and the old gate skipped paths() entirely — rendering
237
+ // with `{}` instead of the entry whose `slug` is `[]`.
238
+ const declaredParams = routeParamSpecs(page.route);
239
+ const rawUrlParams = c.req.param() ?? {};
240
+ const urlParams = {};
241
+ for (const [k, v] of Object.entries(rawUrlParams)) {
242
+ // Unmatched optional params may surface as undefined — drop them
243
+ // so "param absent" is represented uniformly.
244
+ if (typeof v === "string")
245
+ urlParams[k] = v;
246
+ }
247
+ const isDynamicRoute = declaredParams.length > 0;
170
248
  let componentInput = {};
171
- if (hasDynamicParams && typeof mod.paths === "function") {
249
+ if (isDynamicRoute && typeof mod.paths === "function") {
172
250
  let pathsResult;
173
251
  try {
174
- pathsResult = await mod.paths();
252
+ pathsResult = await getOrEvalPaths(pathsMemo, page.route, mod.paths);
175
253
  }
176
254
  catch (err) {
177
255
  const msg = err instanceof Error ? err.message : String(err);
@@ -197,15 +275,27 @@ export function createPageRouter(opts) {
197
275
  // /docs/[...slug]), Hono returns a slash-joined string (e.g.
198
276
  // "guides/install"), so we compare against the paths() entry's
199
277
  // params.slug joined with "/".
278
+ //
279
+ // Matching iterates the params DECLARED by the route pattern so
280
+ // the zero-segment optional-catchall case is covered: when Hono
281
+ // matched `/docs` for `/docs/:slug{.+}?` no `slug` param exists
282
+ // in the URL, and the matching entry is the one whose param is
283
+ // the explicit empty array (`{ slug: [] }`).
200
284
  const match = pathsResult.find((entry) => {
201
- return Object.entries(urlParams).every(([k, v]) => {
202
- const paramVal = entry.params[k];
285
+ return declaredParams.every(({ name, optionalCatchall }) => {
286
+ const urlVal = urlParams[name];
287
+ const paramVal = entry.params[name];
288
+ if (urlVal === undefined) {
289
+ // Param absent from the URL: only valid for an optional
290
+ // catchall, and only against the explicit `[]` entry.
291
+ return optionalCatchall && Array.isArray(paramVal) && paramVal.length === 0;
292
+ }
203
293
  if (Array.isArray(paramVal)) {
204
294
  // catchall: paths() emits slug as string[] but Hono
205
295
  // provides it as a "/"-joined string
206
- return paramVal.join("/") === v;
296
+ return paramVal.join("/") === urlVal;
207
297
  }
208
- return String(paramVal) === v;
298
+ return String(paramVal) === urlVal;
209
299
  });
210
300
  });
211
301
  if (!match) {
@@ -224,7 +314,7 @@ export function createPageRouter(opts) {
224
314
  ...(match.props ?? {}),
225
315
  };
226
316
  }
227
- else if (!hasDynamicParams && typeof mod.getStaticProps === "function") {
317
+ else if (!isDynamicRoute && typeof mod.getStaticProps === "function") {
228
318
  // Static route with `getStaticProps`: call it to fetch build-time
229
319
  // data and pass the returned props to the default component. This
230
320
  // supports the `export async function getStaticProps()` pattern
@@ -250,24 +340,44 @@ export function createPageRouter(opts) {
250
340
  // `await` so async page modules (e.g. API routes typed as
251
341
  // `(): Promise<Response>`) resolve before we inspect the value.
252
342
  // For sync pages that return a VNode/string the await is a no-op.
253
- const result = await mod.default(componentInput);
254
- // API route short-circuit: a page module that returns a Response
255
- // directly (e.g. `pages/api/*.tsx` handlers that use Web Fetch
256
- // primitives instead of returning JSX) is responsible for its own
257
- // status, headers, and body return it as-is rather than running
258
- // it through the framework SSR path.
259
- if (result instanceof Response) {
260
- return result;
343
+ //
344
+ // Wrapped in a try/catch so that any error thrown by the component
345
+ // or by renderToString surfaces as a descriptive 500 rather than
346
+ // escaping to Hono's generic error handler (which discards the real
347
+ // message). Mirrors the getStaticProps catch above.
348
+ try {
349
+ const result = await mod.default(componentInput);
350
+ // API route short-circuit: a page module that returns a Response
351
+ // directly (e.g. `pages/api/*.tsx` handlers that use Web Fetch
352
+ // primitives instead of returning JSX) is responsible for its own
353
+ // status, headers, and body — return it as-is rather than running
354
+ // it through the framework SSR path. A `return` from inside a
355
+ // `try` does not trigger the `catch`, so this passes through
356
+ // correctly without special-casing.
357
+ if (result instanceof Response) {
358
+ return result;
359
+ }
360
+ // Non-HTML routes (e.g. `sitemap.xml.tsx`, `feed.xml.tsx`) commonly
361
+ // return their body as a pre-serialised `string` instead of a
362
+ // VNode. Routing those through `framework.renderToString` would
363
+ // HTML-escape the angle brackets and ampersands, producing
364
+ // garbage XML. Pass strings through verbatim; only wrap actual
365
+ // VNodes.
366
+ const html = typeof result === "string" ? result : opts.framework.renderToString(result);
367
+ const contentType = mod.contentType ?? DEFAULT_CONTENT_TYPE;
368
+ return c.body(ensureHtml5Doctype(html, contentType), 200, { "Content-Type": contentType });
369
+ }
370
+ catch (err) {
371
+ const msg = err instanceof Error ? err.message : String(err);
372
+ // __zfb.ssrDebug is set only by the embedded V8 build/dev host
373
+ // (globals_shim.js), never by the production Workers runtime.
374
+ const includeStack = opts.includeErrorStack ??
375
+ globalThis.__zfb?.ssrDebug === true;
376
+ const stack = includeStack && err instanceof Error && err.stack ? `\n${err.stack}` : "";
377
+ return c.body(`[zfb-runtime] render threw for "${page.route}": ${msg}${stack}`, 500, {
378
+ "Content-Type": "text/plain; charset=utf-8",
379
+ });
261
380
  }
262
- // Non-HTML routes (e.g. `sitemap.xml.tsx`, `feed.xml.tsx`) commonly
263
- // return their body as a pre-serialised `string` instead of a
264
- // VNode. Routing those through `framework.renderToString` would
265
- // HTML-escape the angle brackets and ampersands, producing
266
- // garbage XML. Pass strings through verbatim; only wrap actual
267
- // VNodes.
268
- const html = typeof result === "string" ? result : opts.framework.renderToString(result);
269
- const contentType = mod.contentType ?? DEFAULT_CONTENT_TYPE;
270
- return c.body(html, 200, { "Content-Type": contentType });
271
381
  });
272
382
  }
273
383
  // Hono's `app.fetch` returns `Response | Promise<Response>`. The
@@ -288,14 +398,39 @@ function isPathsEntry(x) {
288
398
  const params = x.params;
289
399
  return typeof params === "object" && params !== null;
290
400
  }
401
+ /**
402
+ * Parse the params declared by a Hono route pattern (the `route` string
403
+ * the build pipeline registers, e.g. `/blog/:slug`, `/docs/:slug{.+}`,
404
+ * `/docs/:slug{.+}?`). Static routes return an empty list.
405
+ *
406
+ * Only the pattern shapes emitted by `bracket_to_hono` (zfb-build) are
407
+ * recognised — `:name`, `:name{.+}`, `:name{.+}?` — which is the entire
408
+ * grammar the file router produces.
409
+ */
410
+ function routeParamSpecs(route) {
411
+ const specs = [];
412
+ for (const seg of route.split("/")) {
413
+ if (!seg.startsWith(":"))
414
+ continue;
415
+ const optionalCatchall = seg.endsWith("?");
416
+ const body = optionalCatchall ? seg.slice(1, -1) : seg.slice(1);
417
+ const braceIdx = body.indexOf("{");
418
+ const name = braceIdx === -1 ? body : body.slice(0, braceIdx);
419
+ if (name.length > 0) {
420
+ specs.push({ name, optionalCatchall });
421
+ }
422
+ }
423
+ return specs;
424
+ }
291
425
  /**
292
426
  * Heuristic check for user-authored routes that may shadow the
293
427
  * synthetic `/__paths__/<encoded-route-key>` endpoint.
294
428
  *
295
429
  * Returns true when the route literal contains `/__paths__` (an
296
430
  * obvious collision) or when its first segment is a Hono catchall
297
- * (`:name{.+}`) or a file-system catchall (`[...name]`) at the root —
298
- * those would match `/__paths__/...` once Hono dispatches to them.
431
+ * (`:name{.+}`, optionally `:name{.+}?`) or a file-system catchall
432
+ * (`[...name]` / `[[...name]]`) at the root those would match
433
+ * `/__paths__/...` once Hono dispatches to them.
299
434
  */
300
435
  function routeShadowsPathsEndpoint(route) {
301
436
  if (route.includes("/__paths__")) {
@@ -305,14 +440,17 @@ function routeShadowsPathsEndpoint(route) {
305
440
  // anything deeper cannot match `/__paths__` because the literal
306
441
  // first segment differs.
307
442
  const firstSeg = route.replace(/^\/+/, "").split("/")[0] ?? "";
308
- // Hono regex-quantifier catchall: `:name{.+}`.
309
- if (/^:[A-Za-z_][\w]*\{\.[+*]\}$/.test(firstSeg)) {
443
+ // Hono regex-quantifier catchall: `:name{.+}` / optional `:name{.+}?`.
444
+ if (/^:[A-Za-z_][\w]*\{\.[+*]\}\??$/.test(firstSeg)) {
310
445
  return true;
311
446
  }
312
- // File-system catchall (pre-bracket-to-hono): `[...name]`.
447
+ // File-system catchall (pre-bracket-to-hono): `[...name]` / `[[...name]]`.
313
448
  if (/^\[\.\.\.[A-Za-z_][\w]*\]$/.test(firstSeg)) {
314
449
  return true;
315
450
  }
451
+ if (/^\[\[\.\.\.[A-Za-z_][\w]*\]\]$/.test(firstSeg)) {
452
+ return true;
453
+ }
316
454
  return false;
317
455
  }
318
456
  //# sourceMappingURL=router.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@takazudo/zfb-runtime",
3
- "version": "0.1.0-next.7",
3
+ "version": "0.1.0-next.70",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "JavaScript runtime for zfb static sites — Hono-backed page router, content snapshots, and client-side hydration.",
@@ -57,17 +57,25 @@
57
57
  "pnpm": ">=10.0.0"
58
58
  },
59
59
  "dependencies": {
60
- "hono": "^4.7.0"
60
+ "hono": "^4.12.25"
61
61
  },
62
62
  "peerDependencies": {
63
- "@takazudo/zfb": "0.1.0-next.7"
63
+ "react": "^19.2.3",
64
+ "@takazudo/zfb": "0.1.0-next.70"
65
+ },
66
+ "peerDependenciesMeta": {
67
+ "react": {
68
+ "optional": true
69
+ }
64
70
  },
65
71
  "devDependencies": {
66
72
  "@types/node": "^22.0.0",
73
+ "@types/react": "^19.0.0",
67
74
  "happy-dom": "^15.7.4",
75
+ "react": "^19.2.3",
68
76
  "typescript": "^5.9.0",
69
77
  "vitest": "^2.1.9",
70
- "@takazudo/zfb": "0.1.0-next.7"
78
+ "@takazudo/zfb": "0.1.0-next.70"
71
79
  },
72
80
  "scripts": {
73
81
  "build": "tsc",
@@ -1,9 +0,0 @@
1
- interface Options {
2
- escapeEverything: boolean;
3
- isIdentifier: boolean;
4
- quotes: "single" | "double";
5
- wrap: boolean;
6
- }
7
- export default function cssesc(string: string, options?: Partial<Options>): string;
8
- export {};
9
- //# sourceMappingURL=cssesc.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cssesc.d.ts","sourceRoot":"","sources":["../../src/client-router/cssesc.ts"],"names":[],"mappings":"AAYA,UAAU,OAAO;IACf,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;CACf;AASD,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,CAAC,OAAO,CAAM,UA4E5E"}