@reckona/mreact-router 0.0.210 → 0.0.212

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 (41) hide show
  1. package/dist/adapters/cloudflare.d.ts.map +1 -1
  2. package/dist/adapters/cloudflare.js +17 -5
  3. package/dist/adapters/cloudflare.js.map +1 -1
  4. package/dist/build.d.ts.map +1 -1
  5. package/dist/build.js +43 -3
  6. package/dist/build.js.map +1 -1
  7. package/dist/built-runtime.d.ts +1 -0
  8. package/dist/built-runtime.d.ts.map +1 -1
  9. package/dist/built-runtime.js +4 -0
  10. package/dist/built-runtime.js.map +1 -1
  11. package/dist/client-manifest-assets.d.ts +2 -0
  12. package/dist/client-manifest-assets.d.ts.map +1 -1
  13. package/dist/client-manifest-assets.js +2 -1
  14. package/dist/client-manifest-assets.js.map +1 -1
  15. package/dist/client.d.ts +1 -0
  16. package/dist/client.d.ts.map +1 -1
  17. package/dist/client.js +365 -85
  18. package/dist/client.js.map +1 -1
  19. package/dist/link.d.ts.map +1 -1
  20. package/dist/link.js +12 -1
  21. package/dist/link.js.map +1 -1
  22. package/dist/module-preload-graph.d.ts +5 -0
  23. package/dist/module-preload-graph.d.ts.map +1 -0
  24. package/dist/module-preload-graph.js +48 -0
  25. package/dist/module-preload-graph.js.map +1 -0
  26. package/dist/render.d.ts +1 -0
  27. package/dist/render.d.ts.map +1 -1
  28. package/dist/render.js +47 -10
  29. package/dist/render.js.map +1 -1
  30. package/dist/serve.js +1 -0
  31. package/dist/serve.js.map +1 -1
  32. package/package.json +11 -11
  33. package/src/adapters/cloudflare.ts +22 -5
  34. package/src/build.ts +50 -3
  35. package/src/built-runtime.ts +18 -6
  36. package/src/client-manifest-assets.ts +3 -1
  37. package/src/client.ts +365 -84
  38. package/src/link.ts +15 -1
  39. package/src/module-preload-graph.ts +70 -0
  40. package/src/render.ts +74 -10
  41. package/src/serve.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../src/link.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../src/link.ts"],"names":[],"mappings":"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"}
package/dist/link.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { escapeHtmlAttribute, escapeHtmlText } from "@reckona/mreact-shared/html-escape";
2
+ import { bindProp } from "@reckona/mreact-reactive-dom";
2
3
  import { safeUrlAttributeValue } from "@reckona/mreact-shared/url-safety";
3
4
  const TRUSTED_LINK_HTML = Symbol.for("modular.react.router.trusted_link_html");
4
5
  const VALID_LINK_ATTRIBUTE_NAME = /^[A-Za-z_][\w.\-:]*$/;
@@ -60,10 +61,20 @@ function renderLink(props) {
60
61
  ...linkProps({ href, prefetch, reload, scroll, transition }),
61
62
  };
62
63
  if (typeof document !== "undefined" && typeof document.createElement === "function") {
63
- return createAnchorElement(propsWithLinkAttrs);
64
+ const anchor = createAnchorElement(propsWithLinkAttrs);
65
+ // Destructuring above reads a compiler-emitted reactive `href` getter once.
66
+ // Re-read it through a prop binding so the same anchor follows later updates
67
+ // instead of freezing the URL captured during the first render.
68
+ if (hasReactiveLinkHref(props)) {
69
+ bindProp(anchor, "href", () => props.href);
70
+ }
71
+ return anchor;
64
72
  }
65
73
  return renderAnchorString(propsWithLinkAttrs);
66
74
  }
75
+ function hasReactiveLinkHref(props) {
76
+ return Object.getOwnPropertyDescriptor(props, "href")?.get !== undefined;
77
+ }
67
78
  function renderLinkString(props) {
68
79
  const { href, prefetch, reload, scroll, transition, ...rest } = props;
69
80
  const propsWithLinkAttrs = {
package/dist/link.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"link.js","sourceRoot":"","sources":["../src/link.ts"],"names":[],"mappings":"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","sourcesContent":["import { escapeHtmlAttribute, escapeHtmlText } from \"@reckona/mreact-shared/html-escape\";\nimport type { HtmlSink } from \"@reckona/mreact-shared/compiler-contract\";\nimport type { ReactCompatElement, ReactCompatNode } from \"@reckona/mreact-compat\";\nimport { safeUrlAttributeValue } from \"@reckona/mreact-shared/url-safety\";\nimport type { AppRouteLinkHref } from \"./typed-routes.js\";\n/** Re-exports typed route href helper types used by Link. */\nexport type {\n AppRouteLinkHref,\n AppRouteLinkHrefSuffix,\n AppRouteLinkPathname,\n AppRouteLinkSegment,\n AppRouteLinkSegments,\n} from \"./typed-routes.js\";\n\nconst TRUSTED_LINK_HTML = Symbol.for(\"modular.react.router.trusted_link_html\");\nconst VALID_LINK_ATTRIBUTE_NAME = /^[A-Za-z_][\\w.\\-:]*$/;\n\n/**\n * Selects when the app router should prefetch a linked route.\n */\nexport type LinkPrefetch = \"intent\" | \"viewport\" | \"none\" | false;\n/**\n * Controls scroll restoration behavior after client navigation.\n */\nexport type LinkScroll = \"top\" | \"preserve\";\n/**\n * Controls whether client navigation participates in view transitions.\n */\nexport type LinkTransition = \"auto\" | \"none\" | false;\n/**\n * Wraps pre-escaped HTML that can be used as trusted link children.\n */\nexport type TrustedLinkHtml = { readonly [TRUSTED_LINK_HTML]: string };\n/**\n * Represents children accepted by the app-router Link renderer.\n */\nexport type LinkChild = ReactCompatNode | Node | TrustedLinkHtml | readonly LinkChild[];\n/**\n * Allows applications to augment statically registered app route paths through `@reckona/mreact-router/link`.\n */\nexport interface AppRouteDeclarations {}\n/**\n * Extracts registered route paths from `AppRouteDeclarations`.\n */\nexport type RegisteredAppRoutePath = AppRouteDeclarations extends { readonly path: infer Path }\n ? Extract<Path, `/${string}`>\n : never;\n/**\n * Resolves the accepted `href` type for app-router links.\n */\nexport type LinkHref = [RegisteredAppRoutePath] extends [never]\n ? string\n : AppRouteLinkHref<RegisteredAppRoutePath>;\n\n/**\n * Configures client navigation behavior for a router link.\n */\nexport interface LinkOptions<Href extends string = LinkHref> {\n href: Href;\n prefetch?: LinkPrefetch | undefined;\n reload?: boolean | undefined;\n scroll?: LinkScroll | undefined;\n transition?: LinkTransition | undefined;\n}\n\n/**\n * Combines router link options with anchor attributes and children.\n */\nexport interface LinkProps<Href extends string = LinkHref> extends LinkOptions<Href> {\n children?: LinkChild;\n [attribute: string]: unknown;\n}\n\n/** Represents attributes that can be serialized when Link writes to an HtmlSink. */\nexport type LinkSerializableAttribute = boolean | number | string | null | undefined;\n\n/** Represents child values that an HtmlSink Link can serialize without a browser DOM. */\nexport type LinkSinkChild =\n | boolean\n | number\n | string\n | null\n | undefined\n | TrustedLinkHtml\n | readonly LinkSinkChild[];\n\n/** Configures an HtmlSink Link without browser-only event handlers or refs. */\nexport interface LinkSinkProps extends LinkOptions<string> {\n children?: LinkSinkChild;\n class?: string | undefined;\n className?: string | undefined;\n download?: string | boolean | undefined;\n id?: string | undefined;\n name?: string | undefined;\n rel?: string | undefined;\n role?: string | undefined;\n style?: Readonly<Record<string, boolean | number | string | null | undefined>> | undefined;\n tabIndex?: number | undefined;\n target?: string | undefined;\n title?: string | undefined;\n [ariaAttribute: `aria-${string}`]: LinkSerializableAttribute;\n [dataAttribute: `data-${string}`]: LinkSerializableAttribute;\n}\n\n/**\n * Converts router link options into anchor attributes consumed by the client navigation runtime.\n *\n * Use this when rendering a custom anchor component that should still opt into mreact prefetch, scroll, reload, or transition behavior.\n */\nexport function linkProps(options: LinkOptions<string>): Record<string, string> {\n return {\n href: options.href,\n ...(options.prefetch === undefined || options.prefetch === \"intent\"\n ? {}\n : { \"data-mreact-prefetch\": options.prefetch === false ? \"none\" : options.prefetch }),\n ...(options.reload === true ? { \"data-mreact-reload\": \"true\" } : {}),\n ...(options.scroll === undefined || options.scroll === \"top\"\n ? {}\n : { \"data-mreact-scroll\": options.scroll }),\n ...(options.transition === undefined ||\n options.transition === false ||\n options.transition === \"none\"\n ? {}\n : { \"data-mreact-transition\": options.transition }),\n };\n}\n\n/**\n * Produces a compile-time error shape when a typed Link receives an unresolved route pattern.\n */\nexport type ConcreteLinkHrefGuard<Href extends string> = [RegisteredAppRoutePath] extends [never]\n ? unknown\n : Href extends Extract<RegisteredAppRoutePath, `${string}:${string}`>\n ? { readonly __mreactRoutePatternHrefError__: never }\n : unknown;\n\n/**\n * Renders an app-router anchor with typed `href` support and navigation runtime attributes.\n *\n * In JSX it returns an anchor element compatible with the mreact runtime; during server streaming it can also write directly to an `HtmlSink`. Unsafe URL attribute values are dropped during rendering.\n */\nexport function Link<const Href extends LinkHref>(\n props: LinkProps<Href> & ConcreteLinkHrefGuard<Href>,\n): ReactCompatElement;\nexport function Link(sink: HtmlSink, props: LinkSinkProps): void;\nexport function Link(\n sinkOrProps: HtmlSink | LinkProps<string>,\n maybeProps?: LinkProps<string> | LinkSinkProps,\n): ReactCompatElement | string | HTMLAnchorElement | void {\n if (maybeProps !== undefined) {\n reportUnsupportedSinkProps(maybeProps);\n (sinkOrProps as HtmlSink).append(renderLinkString(maybeProps as LinkSinkProps));\n return;\n }\n\n return renderLink(sinkOrProps as LinkProps);\n}\n\nfunction reportUnsupportedSinkProps(props: LinkProps<string> | LinkSinkProps): void {\n const nodeEnv = (\n globalThis as typeof globalThis & {\n process?: { env?: { NODE_ENV?: string | undefined } | undefined } | undefined;\n }\n ).process?.env?.NODE_ENV;\n\n if (nodeEnv === \"production\") {\n return;\n }\n\n const unsupported = Object.entries(props)\n .filter(\n ([name, value]) =>\n name === \"ref\" ||\n typeof value === \"function\" ||\n typeof value === \"symbol\" ||\n isLinkEventAttributeName(name) ||\n (name === \"children\" && !isSerializableSinkChild(value)) ||\n (name !== \"children\" && name !== \"style\" && typeof value === \"object\" && value !== null) ||\n (name !== \"children\" && !isSafeLinkAttributeName(attributeName(name))),\n )\n .map(([name]) => name);\n\n if (unsupported.length > 0) {\n console.warn(\n `[MR_LINK_SINK_UNSUPPORTED_PROP] HtmlSink Link cannot serialize browser-only props: ${unsupported.join(\", \")}. Render Link through JSX for event handlers and refs.`,\n );\n }\n}\n\n(Link as typeof Link & { trustedHtml(html: string): TrustedLinkHtml }).trustedHtml = (\n html: string,\n): TrustedLinkHtml => ({\n [TRUSTED_LINK_HTML]: html,\n});\n\nfunction renderLink(props: LinkProps<string>): string | HTMLAnchorElement {\n const { href, prefetch, reload, scroll, transition, ...rest } = props;\n const propsWithLinkAttrs = {\n ...rest,\n ...linkProps({ href, prefetch, reload, scroll, transition }),\n };\n\n if (typeof document !== \"undefined\" && typeof document.createElement === \"function\") {\n return createAnchorElement(propsWithLinkAttrs);\n }\n\n return renderAnchorString(propsWithLinkAttrs);\n}\n\nfunction renderLinkString(props: LinkSinkProps): string {\n const { href, prefetch, reload, scroll, transition, ...rest } = props;\n const propsWithLinkAttrs = {\n ...rest,\n ...linkProps({ href, prefetch, reload, scroll, transition }),\n };\n\n return `<a${renderAnchorAttributes(propsWithLinkAttrs)}>${renderSinkChildren(props.children)}</a>`;\n}\n\nfunction createAnchorElement(props: Record<string, unknown>): HTMLAnchorElement {\n const anchor = document.createElement(\"a\");\n\n for (const [name, value] of Object.entries(props)) {\n if (name === \"children\") {\n appendLinkChild(anchor, value as LinkChild);\n continue;\n }\n\n if (name === \"ref\") {\n if (typeof value === \"function\") {\n (value as (element: HTMLAnchorElement) => void)(anchor);\n } else if (typeof value === \"object\" && value !== null && \"current\" in value) {\n (value as { current: HTMLAnchorElement | null }).current = anchor;\n }\n continue;\n }\n\n if (/^on[A-Z]/.test(name) && typeof value === \"function\") {\n const capture = name.endsWith(\"Capture\");\n const eventName = name.slice(2, capture ? -\"Capture\".length : undefined).toLowerCase();\n anchor.addEventListener(eventName, value as EventListener, capture);\n continue;\n }\n\n if (isLinkEventAttributeName(name)) {\n reportRejectedBrowserEventProp(name);\n continue;\n }\n\n if (name === \"style\" && typeof value === \"object\" && value !== null) {\n for (const [property, styleValue] of Object.entries(value as Record<string, unknown>)) {\n const cssProperty = linkStylePropertyName(property);\n const cssValue = linkStyleValue(styleValue);\n if (cssProperty !== undefined && cssValue !== undefined) {\n anchor.style.setProperty(cssProperty, cssValue);\n }\n }\n continue;\n }\n\n if (!shouldSetAttribute(name, value)) {\n continue;\n }\n\n const attrName = attributeName(name);\n if (!isSafeLinkAttributeName(attrName)) {\n continue;\n }\n const safeValue = safeUrlAttributeValue(attrName, String(value));\n\n if (safeValue === undefined) {\n continue;\n }\n\n anchor.setAttribute(attrName, value === true ? \"\" : safeValue);\n }\n\n return anchor;\n}\n\nfunction appendLinkChild(parent: Node, child: LinkChild): void {\n if (child === null || child === undefined || typeof child === \"boolean\") {\n return;\n }\n\n if (Array.isArray(child)) {\n for (const item of child) {\n appendLinkChild(parent, item);\n }\n return;\n }\n\n if (child instanceof Node) {\n parent.appendChild(child);\n return;\n }\n\n parent.appendChild(document.createTextNode(String(child)));\n}\n\nfunction renderAnchorString(props: Record<string, unknown>): string {\n return `<a${renderAnchorAttributes(props)}>${renderChildren(props.children as LinkChild)}</a>`;\n}\n\nfunction renderAnchorAttributes(props: Record<string, unknown>): string {\n const attrs: string[] = [];\n\n for (const [name, value] of Object.entries(props)) {\n if (name === \"children\" || isLinkEventAttributeName(name) || !shouldSetAttribute(name, value)) {\n continue;\n }\n\n if (name !== \"style\" && typeof value === \"object\" && value !== null) {\n continue;\n }\n\n const attrName = attributeName(name);\n if (!isSafeLinkAttributeName(attrName)) {\n continue;\n }\n if (name === \"style\" && typeof value === \"object\" && value !== null) {\n const style = Object.entries(value as Record<string, unknown>)\n .flatMap(([property, styleValue]) => {\n const cssProperty = linkStylePropertyName(property);\n const cssValue = linkStyleValue(styleValue);\n return cssProperty === undefined || cssValue === undefined\n ? []\n : [`${cssProperty}:${cssValue}`];\n })\n .join(\";\");\n if (style !== \"\") {\n attrs.push(`${escapeHtmlAttribute(attrName)}=\"${escapeHtmlAttribute(style)}\"`);\n }\n continue;\n }\n const attrValue = String(value);\n const safeValue = safeUrlAttributeValue(attrName, attrValue);\n\n if (safeValue === undefined) {\n continue;\n }\n\n attrs.push(`${escapeHtmlAttribute(attrName)}=\"${escapeHtmlAttribute(safeValue)}\"`);\n }\n\n return attrs.length === 0 ? \"\" : ` ${attrs.join(\" \")}`;\n}\n\nfunction shouldSetAttribute(name: string, value: unknown): boolean {\n return (\n name !== \"key\" &&\n name !== \"ref\" &&\n value !== null &&\n value !== undefined &&\n value !== false &&\n typeof value !== \"function\" &&\n typeof value !== \"symbol\"\n );\n}\n\nfunction attributeName(name: string): string {\n return name === \"className\" ? \"class\" : name;\n}\n\nfunction isSafeLinkAttributeName(name: string): boolean {\n return VALID_LINK_ATTRIBUTE_NAME.test(name);\n}\n\nfunction isLinkEventAttributeName(name: string): boolean {\n return /^on/i.test(name);\n}\n\nfunction reportRejectedBrowserEventProp(name: string): void {\n const nodeEnv = (\n globalThis as typeof globalThis & {\n process?: { env?: { NODE_ENV?: string | undefined } | undefined } | undefined;\n }\n ).process?.env?.NODE_ENV;\n\n if (nodeEnv !== \"production\") {\n console.warn(\n `[MR_LINK_UNSAFE_EVENT_PROP] Link rejected event-like prop ${JSON.stringify(name)}. Pass a supported camel-cased function handler such as onClick instead.`,\n );\n }\n}\n\nfunction linkStylePropertyName(property: string): string | undefined {\n const cssProperty = property.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n return /^(?:--[a-zA-Z0-9_-]+|[a-zA-Z][a-zA-Z0-9-]*)$/.test(cssProperty) ? cssProperty : undefined;\n}\n\nfunction linkStyleValue(value: unknown): string | undefined {\n if (value === null || value === undefined || value === false) {\n return undefined;\n }\n\n const cssValue = String(value);\n return /[;{}]/.test(cssValue) ? undefined : cssValue;\n}\n\nfunction renderChildren(child: LinkChild): string {\n if (child === null || child === undefined || typeof child === \"boolean\") {\n return \"\";\n }\n\n if (Array.isArray(child)) {\n return child.map(renderChildren).join(\"\");\n }\n\n if (isTrustedLinkHtml(child)) {\n return child[TRUSTED_LINK_HTML];\n }\n\n return escapeHtmlText(child);\n}\n\nfunction renderSinkChildren(child: LinkSinkChild): string {\n if (child === null || child === undefined || typeof child === \"boolean\") {\n return \"\";\n }\n\n if (Array.isArray(child)) {\n return child.map(renderSinkChildren).join(\"\");\n }\n\n if (isTrustedLinkHtml(child)) {\n return child[TRUSTED_LINK_HTML];\n }\n\n if (typeof child === \"object\") {\n return \"\";\n }\n\n return escapeHtmlText(String(child));\n}\n\nfunction isSerializableSinkChild(value: unknown): value is LinkSinkChild {\n if (\n value === null ||\n value === undefined ||\n typeof value === \"boolean\" ||\n typeof value === \"number\" ||\n typeof value === \"string\" ||\n isTrustedLinkHtml(value)\n ) {\n return true;\n }\n\n return Array.isArray(value) && value.every(isSerializableSinkChild);\n}\n\nfunction isTrustedLinkHtml(value: unknown): value is TrustedLinkHtml {\n return (\n typeof value === \"object\" &&\n value !== null &&\n TRUSTED_LINK_HTML in value &&\n typeof (value as TrustedLinkHtml)[TRUSTED_LINK_HTML] === \"string\"\n );\n}\n"]}
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../src/link.ts"],"names":[],"mappings":"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","sourcesContent":["import { escapeHtmlAttribute, escapeHtmlText } from \"@reckona/mreact-shared/html-escape\";\nimport type { HtmlSink } from \"@reckona/mreact-shared/compiler-contract\";\nimport type { ReactCompatElement, ReactCompatNode } from \"@reckona/mreact-compat\";\nimport { bindProp } from \"@reckona/mreact-reactive-dom\";\nimport { safeUrlAttributeValue } from \"@reckona/mreact-shared/url-safety\";\nimport type { AppRouteLinkHref } from \"./typed-routes.js\";\n/** Re-exports typed route href helper types used by Link. */\nexport type {\n AppRouteLinkHref,\n AppRouteLinkHrefSuffix,\n AppRouteLinkPathname,\n AppRouteLinkSegment,\n AppRouteLinkSegments,\n} from \"./typed-routes.js\";\n\nconst TRUSTED_LINK_HTML = Symbol.for(\"modular.react.router.trusted_link_html\");\nconst VALID_LINK_ATTRIBUTE_NAME = /^[A-Za-z_][\\w.\\-:]*$/;\n\n/**\n * Selects when the app router should prefetch a linked route.\n */\nexport type LinkPrefetch = \"intent\" | \"viewport\" | \"none\" | false;\n/**\n * Controls scroll restoration behavior after client navigation.\n */\nexport type LinkScroll = \"top\" | \"preserve\";\n/**\n * Controls whether client navigation participates in view transitions.\n */\nexport type LinkTransition = \"auto\" | \"none\" | false;\n/**\n * Wraps pre-escaped HTML that can be used as trusted link children.\n */\nexport type TrustedLinkHtml = { readonly [TRUSTED_LINK_HTML]: string };\n/**\n * Represents children accepted by the app-router Link renderer.\n */\nexport type LinkChild = ReactCompatNode | Node | TrustedLinkHtml | readonly LinkChild[];\n/**\n * Allows applications to augment statically registered app route paths through `@reckona/mreact-router/link`.\n */\nexport interface AppRouteDeclarations {}\n/**\n * Extracts registered route paths from `AppRouteDeclarations`.\n */\nexport type RegisteredAppRoutePath = AppRouteDeclarations extends { readonly path: infer Path }\n ? Extract<Path, `/${string}`>\n : never;\n/**\n * Resolves the accepted `href` type for app-router links.\n */\nexport type LinkHref = [RegisteredAppRoutePath] extends [never]\n ? string\n : AppRouteLinkHref<RegisteredAppRoutePath>;\n\n/**\n * Configures client navigation behavior for a router link.\n */\nexport interface LinkOptions<Href extends string = LinkHref> {\n href: Href;\n prefetch?: LinkPrefetch | undefined;\n reload?: boolean | undefined;\n scroll?: LinkScroll | undefined;\n transition?: LinkTransition | undefined;\n}\n\n/**\n * Combines router link options with anchor attributes and children.\n */\nexport interface LinkProps<Href extends string = LinkHref> extends LinkOptions<Href> {\n children?: LinkChild;\n [attribute: string]: unknown;\n}\n\n/** Represents attributes that can be serialized when Link writes to an HtmlSink. */\nexport type LinkSerializableAttribute = boolean | number | string | null | undefined;\n\n/** Represents child values that an HtmlSink Link can serialize without a browser DOM. */\nexport type LinkSinkChild =\n | boolean\n | number\n | string\n | null\n | undefined\n | TrustedLinkHtml\n | readonly LinkSinkChild[];\n\n/** Configures an HtmlSink Link without browser-only event handlers or refs. */\nexport interface LinkSinkProps extends LinkOptions<string> {\n children?: LinkSinkChild;\n class?: string | undefined;\n className?: string | undefined;\n download?: string | boolean | undefined;\n id?: string | undefined;\n name?: string | undefined;\n rel?: string | undefined;\n role?: string | undefined;\n style?: Readonly<Record<string, boolean | number | string | null | undefined>> | undefined;\n tabIndex?: number | undefined;\n target?: string | undefined;\n title?: string | undefined;\n [ariaAttribute: `aria-${string}`]: LinkSerializableAttribute;\n [dataAttribute: `data-${string}`]: LinkSerializableAttribute;\n}\n\n/**\n * Converts router link options into anchor attributes consumed by the client navigation runtime.\n *\n * Use this when rendering a custom anchor component that should still opt into mreact prefetch, scroll, reload, or transition behavior.\n */\nexport function linkProps(options: LinkOptions<string>): Record<string, string> {\n return {\n href: options.href,\n ...(options.prefetch === undefined || options.prefetch === \"intent\"\n ? {}\n : { \"data-mreact-prefetch\": options.prefetch === false ? \"none\" : options.prefetch }),\n ...(options.reload === true ? { \"data-mreact-reload\": \"true\" } : {}),\n ...(options.scroll === undefined || options.scroll === \"top\"\n ? {}\n : { \"data-mreact-scroll\": options.scroll }),\n ...(options.transition === undefined ||\n options.transition === false ||\n options.transition === \"none\"\n ? {}\n : { \"data-mreact-transition\": options.transition }),\n };\n}\n\n/**\n * Produces a compile-time error shape when a typed Link receives an unresolved route pattern.\n */\nexport type ConcreteLinkHrefGuard<Href extends string> = [RegisteredAppRoutePath] extends [never]\n ? unknown\n : Href extends Extract<RegisteredAppRoutePath, `${string}:${string}`>\n ? { readonly __mreactRoutePatternHrefError__: never }\n : unknown;\n\n/**\n * Renders an app-router anchor with typed `href` support and navigation runtime attributes.\n *\n * In JSX it returns an anchor element compatible with the mreact runtime; during server streaming it can also write directly to an `HtmlSink`. Unsafe URL attribute values are dropped during rendering.\n */\nexport function Link<const Href extends LinkHref>(\n props: LinkProps<Href> & ConcreteLinkHrefGuard<Href>,\n): ReactCompatElement;\nexport function Link(sink: HtmlSink, props: LinkSinkProps): void;\nexport function Link(\n sinkOrProps: HtmlSink | LinkProps<string>,\n maybeProps?: LinkProps<string> | LinkSinkProps,\n): ReactCompatElement | string | HTMLAnchorElement | void {\n if (maybeProps !== undefined) {\n reportUnsupportedSinkProps(maybeProps);\n (sinkOrProps as HtmlSink).append(renderLinkString(maybeProps as LinkSinkProps));\n return;\n }\n\n return renderLink(sinkOrProps as LinkProps);\n}\n\nfunction reportUnsupportedSinkProps(props: LinkProps<string> | LinkSinkProps): void {\n const nodeEnv = (\n globalThis as typeof globalThis & {\n process?: { env?: { NODE_ENV?: string | undefined } | undefined } | undefined;\n }\n ).process?.env?.NODE_ENV;\n\n if (nodeEnv === \"production\") {\n return;\n }\n\n const unsupported = Object.entries(props)\n .filter(\n ([name, value]) =>\n name === \"ref\" ||\n typeof value === \"function\" ||\n typeof value === \"symbol\" ||\n isLinkEventAttributeName(name) ||\n (name === \"children\" && !isSerializableSinkChild(value)) ||\n (name !== \"children\" && name !== \"style\" && typeof value === \"object\" && value !== null) ||\n (name !== \"children\" && !isSafeLinkAttributeName(attributeName(name))),\n )\n .map(([name]) => name);\n\n if (unsupported.length > 0) {\n console.warn(\n `[MR_LINK_SINK_UNSUPPORTED_PROP] HtmlSink Link cannot serialize browser-only props: ${unsupported.join(\", \")}. Render Link through JSX for event handlers and refs.`,\n );\n }\n}\n\n(Link as typeof Link & { trustedHtml(html: string): TrustedLinkHtml }).trustedHtml = (\n html: string,\n): TrustedLinkHtml => ({\n [TRUSTED_LINK_HTML]: html,\n});\n\nfunction renderLink(props: LinkProps<string>): string | HTMLAnchorElement {\n const { href, prefetch, reload, scroll, transition, ...rest } = props;\n const propsWithLinkAttrs = {\n ...rest,\n ...linkProps({ href, prefetch, reload, scroll, transition }),\n };\n\n if (typeof document !== \"undefined\" && typeof document.createElement === \"function\") {\n const anchor = createAnchorElement(propsWithLinkAttrs);\n\n // Destructuring above reads a compiler-emitted reactive `href` getter once.\n // Re-read it through a prop binding so the same anchor follows later updates\n // instead of freezing the URL captured during the first render.\n if (hasReactiveLinkHref(props)) {\n bindProp(anchor, \"href\", () => props.href);\n }\n\n return anchor;\n }\n\n return renderAnchorString(propsWithLinkAttrs);\n}\n\nfunction hasReactiveLinkHref(props: LinkProps<string>): boolean {\n return Object.getOwnPropertyDescriptor(props, \"href\")?.get !== undefined;\n}\n\nfunction renderLinkString(props: LinkSinkProps): string {\n const { href, prefetch, reload, scroll, transition, ...rest } = props;\n const propsWithLinkAttrs = {\n ...rest,\n ...linkProps({ href, prefetch, reload, scroll, transition }),\n };\n\n return `<a${renderAnchorAttributes(propsWithLinkAttrs)}>${renderSinkChildren(props.children)}</a>`;\n}\n\nfunction createAnchorElement(props: Record<string, unknown>): HTMLAnchorElement {\n const anchor = document.createElement(\"a\");\n\n for (const [name, value] of Object.entries(props)) {\n if (name === \"children\") {\n appendLinkChild(anchor, value as LinkChild);\n continue;\n }\n\n if (name === \"ref\") {\n if (typeof value === \"function\") {\n (value as (element: HTMLAnchorElement) => void)(anchor);\n } else if (typeof value === \"object\" && value !== null && \"current\" in value) {\n (value as { current: HTMLAnchorElement | null }).current = anchor;\n }\n continue;\n }\n\n if (/^on[A-Z]/.test(name) && typeof value === \"function\") {\n const capture = name.endsWith(\"Capture\");\n const eventName = name.slice(2, capture ? -\"Capture\".length : undefined).toLowerCase();\n anchor.addEventListener(eventName, value as EventListener, capture);\n continue;\n }\n\n if (isLinkEventAttributeName(name)) {\n reportRejectedBrowserEventProp(name);\n continue;\n }\n\n if (name === \"style\" && typeof value === \"object\" && value !== null) {\n for (const [property, styleValue] of Object.entries(value as Record<string, unknown>)) {\n const cssProperty = linkStylePropertyName(property);\n const cssValue = linkStyleValue(styleValue);\n if (cssProperty !== undefined && cssValue !== undefined) {\n anchor.style.setProperty(cssProperty, cssValue);\n }\n }\n continue;\n }\n\n if (!shouldSetAttribute(name, value)) {\n continue;\n }\n\n const attrName = attributeName(name);\n if (!isSafeLinkAttributeName(attrName)) {\n continue;\n }\n const safeValue = safeUrlAttributeValue(attrName, String(value));\n\n if (safeValue === undefined) {\n continue;\n }\n\n anchor.setAttribute(attrName, value === true ? \"\" : safeValue);\n }\n\n return anchor;\n}\n\nfunction appendLinkChild(parent: Node, child: LinkChild): void {\n if (child === null || child === undefined || typeof child === \"boolean\") {\n return;\n }\n\n if (Array.isArray(child)) {\n for (const item of child) {\n appendLinkChild(parent, item);\n }\n return;\n }\n\n if (child instanceof Node) {\n parent.appendChild(child);\n return;\n }\n\n parent.appendChild(document.createTextNode(String(child)));\n}\n\nfunction renderAnchorString(props: Record<string, unknown>): string {\n return `<a${renderAnchorAttributes(props)}>${renderChildren(props.children as LinkChild)}</a>`;\n}\n\nfunction renderAnchorAttributes(props: Record<string, unknown>): string {\n const attrs: string[] = [];\n\n for (const [name, value] of Object.entries(props)) {\n if (name === \"children\" || isLinkEventAttributeName(name) || !shouldSetAttribute(name, value)) {\n continue;\n }\n\n if (name !== \"style\" && typeof value === \"object\" && value !== null) {\n continue;\n }\n\n const attrName = attributeName(name);\n if (!isSafeLinkAttributeName(attrName)) {\n continue;\n }\n if (name === \"style\" && typeof value === \"object\" && value !== null) {\n const style = Object.entries(value as Record<string, unknown>)\n .flatMap(([property, styleValue]) => {\n const cssProperty = linkStylePropertyName(property);\n const cssValue = linkStyleValue(styleValue);\n return cssProperty === undefined || cssValue === undefined\n ? []\n : [`${cssProperty}:${cssValue}`];\n })\n .join(\";\");\n if (style !== \"\") {\n attrs.push(`${escapeHtmlAttribute(attrName)}=\"${escapeHtmlAttribute(style)}\"`);\n }\n continue;\n }\n const attrValue = String(value);\n const safeValue = safeUrlAttributeValue(attrName, attrValue);\n\n if (safeValue === undefined) {\n continue;\n }\n\n attrs.push(`${escapeHtmlAttribute(attrName)}=\"${escapeHtmlAttribute(safeValue)}\"`);\n }\n\n return attrs.length === 0 ? \"\" : ` ${attrs.join(\" \")}`;\n}\n\nfunction shouldSetAttribute(name: string, value: unknown): boolean {\n return (\n name !== \"key\" &&\n name !== \"ref\" &&\n value !== null &&\n value !== undefined &&\n value !== false &&\n typeof value !== \"function\" &&\n typeof value !== \"symbol\"\n );\n}\n\nfunction attributeName(name: string): string {\n return name === \"className\" ? \"class\" : name;\n}\n\nfunction isSafeLinkAttributeName(name: string): boolean {\n return VALID_LINK_ATTRIBUTE_NAME.test(name);\n}\n\nfunction isLinkEventAttributeName(name: string): boolean {\n return /^on/i.test(name);\n}\n\nfunction reportRejectedBrowserEventProp(name: string): void {\n const nodeEnv = (\n globalThis as typeof globalThis & {\n process?: { env?: { NODE_ENV?: string | undefined } | undefined } | undefined;\n }\n ).process?.env?.NODE_ENV;\n\n if (nodeEnv !== \"production\") {\n console.warn(\n `[MR_LINK_UNSAFE_EVENT_PROP] Link rejected event-like prop ${JSON.stringify(name)}. Pass a supported camel-cased function handler such as onClick instead.`,\n );\n }\n}\n\nfunction linkStylePropertyName(property: string): string | undefined {\n const cssProperty = property.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n return /^(?:--[a-zA-Z0-9_-]+|[a-zA-Z][a-zA-Z0-9-]*)$/.test(cssProperty) ? cssProperty : undefined;\n}\n\nfunction linkStyleValue(value: unknown): string | undefined {\n if (value === null || value === undefined || value === false) {\n return undefined;\n }\n\n const cssValue = String(value);\n return /[;{}]/.test(cssValue) ? undefined : cssValue;\n}\n\nfunction renderChildren(child: LinkChild): string {\n if (child === null || child === undefined || typeof child === \"boolean\") {\n return \"\";\n }\n\n if (Array.isArray(child)) {\n return child.map(renderChildren).join(\"\");\n }\n\n if (isTrustedLinkHtml(child)) {\n return child[TRUSTED_LINK_HTML];\n }\n\n return escapeHtmlText(child);\n}\n\nfunction renderSinkChildren(child: LinkSinkChild): string {\n if (child === null || child === undefined || typeof child === \"boolean\") {\n return \"\";\n }\n\n if (Array.isArray(child)) {\n return child.map(renderSinkChildren).join(\"\");\n }\n\n if (isTrustedLinkHtml(child)) {\n return child[TRUSTED_LINK_HTML];\n }\n\n if (typeof child === \"object\") {\n return \"\";\n }\n\n return escapeHtmlText(String(child));\n}\n\nfunction isSerializableSinkChild(value: unknown): value is LinkSinkChild {\n if (\n value === null ||\n value === undefined ||\n typeof value === \"boolean\" ||\n typeof value === \"number\" ||\n typeof value === \"string\" ||\n isTrustedLinkHtml(value)\n ) {\n return true;\n }\n\n return Array.isArray(value) && value.every(isSerializableSinkChild);\n}\n\nfunction isTrustedLinkHtml(value: unknown): value is TrustedLinkHtml {\n return (\n typeof value === \"object\" &&\n value !== null &&\n TRUSTED_LINK_HTML in value &&\n typeof (value as TrustedLinkHtml)[TRUSTED_LINK_HTML] === \"string\"\n );\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export interface StaticModuleChunk {
2
+ imports?: readonly string[] | undefined;
3
+ }
4
+ export declare function collectStaticModulePreloadDependencies(entryFile: string, chunks: ReadonlyMap<string, StaticModuleChunk>): string[];
5
+ //# sourceMappingURL=module-preload-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-preload-graph.d.ts","sourceRoot":"","sources":["../src/module-preload-graph.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACzC;AAED,wBAAgB,sCAAsC,CACpD,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAC7C,MAAM,EAAE,CAiCV"}
@@ -0,0 +1,48 @@
1
+ export function collectStaticModulePreloadDependencies(entryFile, chunks) {
2
+ if (!chunks.has(entryFile)) {
3
+ throw new Error(`Missing static JavaScript chunk for module preload entry: ${entryFile}`);
4
+ }
5
+ const dependencies = new Set();
6
+ const visited = new Set();
7
+ const pending = [...(chunks.get(entryFile)?.imports ?? [])];
8
+ while (pending.length > 0) {
9
+ const path = pending.pop();
10
+ if (path === undefined ||
11
+ path === entryFile ||
12
+ visited.has(path) ||
13
+ !isLocalJavaScriptChunk(path)) {
14
+ continue;
15
+ }
16
+ visited.add(path);
17
+ const chunk = chunks.get(path);
18
+ if (chunk === undefined) {
19
+ throw new Error(`Missing static JavaScript chunk for module preload: ${path}`);
20
+ }
21
+ dependencies.add(path);
22
+ pending.push(...(chunk.imports ?? []));
23
+ }
24
+ return [...dependencies].sort();
25
+ }
26
+ function isLocalJavaScriptChunk(path) {
27
+ if (path.startsWith("/") || hasUrlScheme(path)) {
28
+ return false;
29
+ }
30
+ return path.endsWith(".js") || path.endsWith(".mjs");
31
+ }
32
+ function hasUrlScheme(value) {
33
+ const colon = value.indexOf(":");
34
+ if (colon <= 0) {
35
+ return false;
36
+ }
37
+ for (let index = 0; index < colon; index += 1) {
38
+ const code = value.charCodeAt(index);
39
+ const letter = (code >= 65 && code <= 90) || (code >= 97 && code <= 122);
40
+ const digit = code >= 48 && code <= 57;
41
+ const allowedSymbol = code === 43 || code === 45 || code === 46;
42
+ if (index === 0 ? !letter : !letter && !digit && !allowedSymbol) {
43
+ return false;
44
+ }
45
+ }
46
+ return true;
47
+ }
48
+ //# sourceMappingURL=module-preload-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-preload-graph.js","sourceRoot":"","sources":["../src/module-preload-graph.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,sCAAsC,CACpD,SAAiB,EACjB,MAA8C;IAE9C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,6DAA6D,SAAS,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IAE5D,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAE3B,IACE,IAAI,KAAK,SAAS;YAClB,IAAI,KAAK,SAAS;YAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACjB,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAC7B,CAAC;YACD,SAAS;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,uDAAuD,IAAI,EAAE,CAAC,CAAC;QACjF,CAAC;QAED,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IAC1C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;QACvC,MAAM,aAAa,GAAG,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,CAAC;QAEhE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["export interface StaticModuleChunk {\n imports?: readonly string[] | undefined;\n}\n\nexport function collectStaticModulePreloadDependencies(\n entryFile: string,\n chunks: ReadonlyMap<string, StaticModuleChunk>,\n): string[] {\n if (!chunks.has(entryFile)) {\n throw new Error(`Missing static JavaScript chunk for module preload entry: ${entryFile}`);\n }\n\n const dependencies = new Set<string>();\n const visited = new Set<string>();\n const pending = [...(chunks.get(entryFile)?.imports ?? [])];\n\n while (pending.length > 0) {\n const path = pending.pop();\n\n if (\n path === undefined ||\n path === entryFile ||\n visited.has(path) ||\n !isLocalJavaScriptChunk(path)\n ) {\n continue;\n }\n\n visited.add(path);\n const chunk = chunks.get(path);\n\n if (chunk === undefined) {\n throw new Error(`Missing static JavaScript chunk for module preload: ${path}`);\n }\n\n dependencies.add(path);\n pending.push(...(chunk.imports ?? []));\n }\n\n return [...dependencies].sort();\n}\n\nfunction isLocalJavaScriptChunk(path: string): boolean {\n if (path.startsWith(\"/\") || hasUrlScheme(path)) {\n return false;\n }\n\n return path.endsWith(\".js\") || path.endsWith(\".mjs\");\n}\n\nfunction hasUrlScheme(value: string): boolean {\n const colon = value.indexOf(\":\");\n\n if (colon <= 0) {\n return false;\n }\n\n for (let index = 0; index < colon; index += 1) {\n const code = value.charCodeAt(index);\n const letter = (code >= 65 && code <= 90) || (code >= 97 && code <= 122);\n const digit = code >= 48 && code <= 57;\n const allowedSymbol = code === 43 || code === 45 || code === 46;\n\n if (index === 0 ? !letter : !letter && !digit && !allowedSymbol) {\n return false;\n }\n }\n\n return true;\n}\n"]}
package/dist/render.d.ts CHANGED
@@ -28,6 +28,7 @@ export interface RenderAppRequestOptions {
28
28
  assetBaseUrl?: string | undefined;
29
29
  clientRouteInferenceCache?: ClientRouteInferenceCache | undefined;
30
30
  clientScripts?: ReadonlyMap<string, string>;
31
+ clientScriptPreloads?: ReadonlyMap<string, readonly string[]>;
31
32
  clientStylesByFile?: ReadonlyMap<string, readonly string[]>;
32
33
  clientStyles?: ReadonlyMap<string, readonly string[]>;
33
34
  define?: UserConfig["define"] | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
package/dist/render.js CHANGED
@@ -457,6 +457,7 @@ async function renderAppRequestInternal(options) {
457
457
  routePath: url.pathname,
458
458
  routeFile: notFoundFile,
459
459
  routeScripts: options.clientScripts,
460
+ routeScriptPreloads: options.clientScriptPreloads,
460
461
  serverModules: options.serverModules,
461
462
  serverModuleCacheVersion: options.serverModuleCacheVersion,
462
463
  serverSourceFiles: options.serverSourceFiles,
@@ -765,8 +766,10 @@ async function renderAppRequestInternal(options) {
765
766
  assetBaseUrl: options.assetBaseUrl,
766
767
  currentStyleSheets: clientStyleSheets,
767
768
  currentScript: clientRoute ? clientScript : undefined,
769
+ currentScriptPreloads: options.clientScriptPreloads?.get(matched.route.path),
768
770
  currentNavigationScript: navigationScript,
769
771
  routeScripts: options.clientScripts,
772
+ routeScriptPreloads: options.clientScriptPreloads,
770
773
  })}${html}`, preparedActions.htmlReplacements), {
771
774
  headers: responseHeadersForMetadata(metadata, options.request, {
772
775
  "x-mreact-stream": "1",
@@ -838,6 +841,7 @@ async function renderAppRequestInternal(options) {
838
841
  trackedRequest,
839
842
  routePath: matched.route.path,
840
843
  routeScripts: options.clientScripts,
844
+ routeScriptPreloads: options.clientScriptPreloads,
841
845
  serverModules: options.serverModules,
842
846
  serverModuleCacheVersion: options.serverModuleCacheVersion,
843
847
  serverSourceFiles: options.serverSourceFiles,
@@ -876,6 +880,7 @@ async function renderAppRequestInternal(options) {
876
880
  requestUrl: url.href,
877
881
  routePath: matched.route.path,
878
882
  routeScripts: options.clientScripts,
883
+ routeScriptPreloads: options.clientScriptPreloads,
879
884
  serverModules: options.serverModules,
880
885
  serverModuleCacheVersion: options.serverModuleCacheVersion,
881
886
  serverSourceFiles: options.serverSourceFiles,
@@ -1012,8 +1017,10 @@ async function renderAppRequestInternal(options) {
1012
1017
  assetBaseUrl: options.assetBaseUrl,
1013
1018
  currentStyleSheets: clientStyleSheets,
1014
1019
  currentScript: clientRoute ? clientScript : undefined,
1020
+ currentScriptPreloads: options.clientScriptPreloads?.get(matched.route.path),
1015
1021
  currentNavigationScript: navigationScript,
1016
1022
  routeScripts: options.clientScripts,
1023
+ routeScriptPreloads: options.clientScriptPreloads,
1017
1024
  })}${html}`, preparedActions.htmlReplacements), {
1018
1025
  headers: responseHeadersForMetadata(metadata, options.request),
1019
1026
  }), preparedActions.csrfToken, preparedActions.csrfTokenIsNew === true);
@@ -1068,6 +1075,7 @@ async function renderAppRequestInternal(options) {
1068
1075
  routePath: matched.route.path,
1069
1076
  routeFile: notFoundFile,
1070
1077
  routeScripts: options.clientScripts,
1078
+ routeScriptPreloads: options.clientScriptPreloads,
1071
1079
  serverModules: options.serverModules,
1072
1080
  serverModuleCacheVersion: options.serverModuleCacheVersion,
1073
1081
  serverSourceFiles: options.serverSourceFiles,
@@ -1094,6 +1102,7 @@ async function renderAppRequestInternal(options) {
1094
1102
  routePath: matched.route.path,
1095
1103
  routeFile: errorFile,
1096
1104
  routeScripts: options.clientScripts,
1105
+ routeScriptPreloads: options.clientScriptPreloads,
1097
1106
  serverModules: options.serverModules,
1098
1107
  serverModuleCacheVersion: options.serverModuleCacheVersion,
1099
1108
  serverSourceFiles: options.serverSourceFiles,
@@ -1191,17 +1200,28 @@ function applyActionHtmlReplacements(html, replacements) {
1191
1200
  }
1192
1201
  return next;
1193
1202
  }
1194
- function modulePreloadTags(script, assetBaseUrl) {
1195
- return script === undefined
1196
- ? ""
1197
- : `<link rel="modulepreload" href="${escapeHtmlAttribute(assetPath(script, assetBaseUrl ?? "/_mreact/client/"))}">`;
1203
+ function modulePreloadTags(script, dependencies, assetBaseUrl) {
1204
+ if (script === undefined) {
1205
+ return "";
1206
+ }
1207
+ const seen = new Set();
1208
+ return [script, ...(dependencies ?? [])]
1209
+ .filter((file) => {
1210
+ if (seen.has(file)) {
1211
+ return false;
1212
+ }
1213
+ seen.add(file);
1214
+ return true;
1215
+ })
1216
+ .map((file) => `<link rel="modulepreload" href="${escapeHtmlAttribute(assetPath(file, assetBaseUrl ?? "/_mreact/client/"))}">`)
1217
+ .join("");
1198
1218
  }
1199
1219
  function clientNavigationHeadTags(options) {
1200
1220
  return [
1201
1221
  styleSheetTags(options.currentStyleSheets, options.assetBaseUrl),
1202
- modulePreloadTags(options.currentScript, options.assetBaseUrl),
1203
- navigationRuntimeScriptTag(options.currentNavigationScript, options.assetBaseUrl),
1204
- routePrefetchManifestScript(options.routeScripts, options.assetBaseUrl),
1222
+ modulePreloadTags(options.currentScript, options.currentScriptPreloads, options.assetBaseUrl),
1223
+ navigationRuntimeScriptTag(options.currentNavigationScript, options.assetBaseUrl, options.currentScript === undefined),
1224
+ routePrefetchManifestScript(options.routeScripts, options.routeScriptPreloads, options.assetBaseUrl),
1205
1225
  ].join("");
1206
1226
  }
1207
1227
  function styleSheetTags(styleSheets, assetBaseUrl) {
@@ -1231,22 +1251,33 @@ function hasUrlScheme(value) {
1231
1251
  }
1232
1252
  return true;
1233
1253
  }
1234
- function navigationRuntimeScriptTag(script, assetBaseUrl) {
1254
+ function navigationRuntimeScriptTag(script, assetBaseUrl, execute) {
1235
1255
  if (script === undefined) {
1236
1256
  return "";
1237
1257
  }
1238
1258
  const json = JSON.stringify({
1239
1259
  script: assetPath(script, assetBaseUrl ?? "/_mreact/client/"),
1240
1260
  }).replaceAll("<", "\\u003c");
1241
- return `<script type="application/json" id="mreact-navigation-runtime">${json}</script>`;
1261
+ const descriptor = `<script type="application/json" id="mreact-navigation-runtime">${json}</script>`;
1262
+ // Server-only routes have no client entry to load the navigation runtime.
1263
+ return execute
1264
+ ? `${descriptor}<script type="module" src="${escapeHtmlAttribute(assetPath(script, assetBaseUrl ?? "/_mreact/client/"))}"></script>`
1265
+ : descriptor;
1242
1266
  }
1243
- function routePrefetchManifestScript(routeScripts, assetBaseUrl) {
1267
+ function routePrefetchManifestScript(routeScripts, routeScriptPreloads, assetBaseUrl) {
1244
1268
  if (routeScripts === undefined || routeScripts.size === 0) {
1245
1269
  return "";
1246
1270
  }
1247
1271
  const routes = Array.from(routeScripts.entries(), ([path, script]) => ({
1248
1272
  path,
1249
1273
  script: assetPath(script, assetBaseUrl ?? "/_mreact/client/"),
1274
+ ...(routeScriptPreloads?.get(path) === undefined || routeScriptPreloads.get(path)?.length === 0
1275
+ ? {}
1276
+ : {
1277
+ modulePreloads: routeScriptPreloads
1278
+ .get(path)
1279
+ ?.map((file) => assetPath(file, assetBaseUrl ?? "/_mreact/client/")),
1280
+ }),
1250
1281
  }));
1251
1282
  const json = JSON.stringify(routes).replaceAll("<", "\\u003c");
1252
1283
  return `<script type="application/json" id="mreact-route-prefetch-manifest">${json}</script>`;
@@ -1419,7 +1450,9 @@ async function renderSpecialRoute(options) {
1419
1450
  assetBaseUrl: options.assetBaseUrl,
1420
1451
  currentStyleSheets: options.currentStyleSheets,
1421
1452
  currentScript: options.navigation?.clientRoute === true ? options.navigation.script : undefined,
1453
+ currentScriptPreloads: options.routeScriptPreloads?.get(options.navigation?.routePath ?? options.routePath ?? ""),
1422
1454
  routeScripts: options.routeScripts,
1455
+ routeScriptPreloads: options.routeScriptPreloads,
1423
1456
  })}${html}`, {
1424
1457
  headers: { "content-type": "text/html; charset=utf-8" },
1425
1458
  status: options.status,
@@ -2202,7 +2235,9 @@ function runServerStreamModule(code, options) {
2202
2235
  sink.append(clientNavigationHeadTags({
2203
2236
  assetBaseUrl: options.assetBaseUrl,
2204
2237
  currentScript: options.clientRoute ? options.script : undefined,
2238
+ currentScriptPreloads: options.routeScriptPreloads?.get(options.routePath),
2205
2239
  routeScripts: options.routeScripts,
2240
+ routeScriptPreloads: options.routeScriptPreloads,
2206
2241
  }));
2207
2242
  for (const shell of layoutShells) {
2208
2243
  sink.append(shell.prefix);
@@ -2342,7 +2377,9 @@ async function runServerStreamModuleWithLoading(code, options) {
2342
2377
  sink.append(clientNavigationHeadTags({
2343
2378
  assetBaseUrl: options.assetBaseUrl,
2344
2379
  currentScript: options.clientRoute ? options.script : undefined,
2380
+ currentScriptPreloads: options.routeScriptPreloads?.get(options.routePath),
2345
2381
  routeScripts: options.routeScripts,
2382
+ routeScriptPreloads: options.routeScriptPreloads,
2346
2383
  }));
2347
2384
  for (const shell of layoutShells) {
2348
2385
  sink.append(shell.prefix);