@rangojs/router 0.0.0-experimental.f2d1a2f1 → 0.0.0-experimental.f4a8e8de
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +8 -4
- package/README.md +318 -821
- package/dist/bin/rango.js +925 -271
- package/dist/testing/vitest.js +82 -0
- package/dist/types/__internal.d.ts +127 -0
- package/dist/types/bin/rango.d.ts +1 -0
- package/dist/types/browser/action-coordinator.d.ts +57 -0
- package/dist/types/browser/action-fence.d.ts +33 -0
- package/dist/types/browser/app-shell.d.ts +34 -0
- package/dist/types/browser/app-version.d.ts +6 -0
- package/dist/types/browser/connection-warmup.d.ts +31 -0
- package/dist/types/browser/cookie-name.d.ts +66 -0
- package/dist/types/browser/dev-discovery.d.ts +11 -0
- package/dist/types/browser/event-controller.d.ts +231 -0
- package/dist/types/browser/history-state.d.ts +26 -0
- package/dist/types/browser/index.d.ts +1 -0
- package/dist/types/browser/intercept-utils.d.ts +30 -0
- package/dist/types/browser/invalidate-client-cache.d.ts +17 -0
- package/dist/types/browser/link-interceptor.d.ts +53 -0
- package/dist/types/browser/logging.d.ts +33 -0
- package/dist/types/browser/merge-segment-loaders.d.ts +38 -0
- package/dist/types/browser/navigation-bridge.d.ts +39 -0
- package/dist/types/browser/navigation-client.d.ts +17 -0
- package/dist/types/browser/navigation-store-handle.d.ts +25 -0
- package/dist/types/browser/navigation-store.d.ts +85 -0
- package/dist/types/browser/navigation-transaction.d.ts +75 -0
- package/dist/types/browser/network-error-handler.d.ts +35 -0
- package/dist/types/browser/notify-listeners.d.ts +2 -0
- package/dist/types/browser/partial-update.d.ts +61 -0
- package/dist/types/browser/prefetch/cache.d.ts +224 -0
- package/dist/types/browser/prefetch/default-strategy.d.ts +31 -0
- package/dist/types/browser/prefetch/fetch.d.ts +52 -0
- package/dist/types/browser/prefetch/invalidation.d.ts +6 -0
- package/dist/types/browser/prefetch/loader.d.ts +12 -0
- package/dist/types/browser/prefetch/observer.d.ts +24 -0
- package/dist/types/browser/prefetch/policy.d.ts +13 -0
- package/dist/types/browser/prefetch/queue.d.ts +48 -0
- package/dist/types/browser/prefetch/resource-ready.d.ts +28 -0
- package/dist/types/browser/prefetch/runtime.d.ts +2 -0
- package/dist/types/browser/rango-state.d.ts +56 -0
- package/dist/types/browser/react/Link.d.ts +132 -0
- package/dist/types/browser/react/NavigationProvider.d.ts +88 -0
- package/dist/types/browser/react/ScrollRestoration.d.ts +78 -0
- package/dist/types/browser/react/context.d.ts +57 -0
- package/dist/types/browser/react/filter-segment-order.d.ts +35 -0
- package/dist/types/browser/react/index.d.ts +1 -0
- package/dist/types/browser/react/location-state-shared.d.ts +162 -0
- package/dist/types/browser/react/location-state.d.ts +29 -0
- package/dist/types/browser/react/mount-context.d.ts +23 -0
- package/dist/types/browser/react/nonce-context.d.ts +14 -0
- package/dist/types/browser/react/shallow-equal.d.ts +5 -0
- package/dist/types/browser/react/use-action.d.ts +61 -0
- package/dist/types/browser/react/use-handle.d.ts +21 -0
- package/dist/types/browser/react/use-href.d.ts +32 -0
- package/dist/types/browser/react/use-link-status.d.ts +36 -0
- package/dist/types/browser/react/use-mount.d.ts +24 -0
- package/dist/types/browser/react/use-navigation.d.ts +15 -0
- package/dist/types/browser/react/use-params.d.ts +21 -0
- package/dist/types/browser/react/use-pathname.d.ts +13 -0
- package/dist/types/browser/react/use-reverse.d.ts +40 -0
- package/dist/types/browser/react/use-router.d.ts +23 -0
- package/dist/types/browser/react/use-search-params.d.ts +19 -0
- package/dist/types/browser/react/use-segments.d.ts +29 -0
- package/dist/types/browser/response-adapter.d.ts +58 -0
- package/dist/types/browser/rsc-router.d.ts +146 -0
- package/dist/types/browser/scroll-restoration.d.ts +103 -0
- package/dist/types/browser/segment-reconciler.d.ts +74 -0
- package/dist/types/browser/segment-structure-assert.d.ts +16 -0
- package/dist/types/browser/server-action-bridge.d.ts +29 -0
- package/dist/types/browser/types.d.ts +546 -0
- package/dist/types/browser/validate-redirect-origin.d.ts +28 -0
- package/dist/types/build/collect-fallback-refs.d.ts +5 -0
- package/dist/types/build/generate-manifest.d.ts +106 -0
- package/dist/types/build/generate-route-types.d.ts +8 -0
- package/dist/types/build/index.d.ts +21 -0
- package/dist/types/build/merge-full-manifests.d.ts +3 -0
- package/dist/types/build/prefix-tree-utils.d.ts +56 -0
- package/dist/types/build/route-trie.d.ts +20 -0
- package/dist/types/build/route-types/ast-helpers.d.ts +3 -0
- package/dist/types/build/route-types/ast-route-extraction.d.ts +13 -0
- package/dist/types/build/route-types/codegen.d.ts +16 -0
- package/dist/types/build/route-types/include-resolution.d.ts +74 -0
- package/dist/types/build/route-types/param-extraction.d.ts +13 -0
- package/dist/types/build/route-types/per-module-writer.d.ts +20 -0
- package/dist/types/build/route-types/router-processing.d.ts +81 -0
- package/dist/types/build/route-types/scan-filter.d.ts +17 -0
- package/dist/types/build/route-types/source-scan.d.ts +13 -0
- package/dist/types/build/runtime-discovery.d.ts +24 -0
- package/dist/types/cache/background-task.d.ts +21 -0
- package/dist/types/cache/cache-error.d.ts +71 -0
- package/dist/types/cache/cache-exec-scope.d.ts +31 -0
- package/dist/types/cache/cache-key-utils.d.ts +43 -0
- package/dist/types/cache/cache-policy.d.ts +59 -0
- package/dist/types/cache/cache-runtime.d.ts +51 -0
- package/dist/types/cache/cache-scope.d.ts +215 -0
- package/dist/types/cache/cache-tag.d.ts +79 -0
- package/dist/types/cache/cf/cf-base64.d.ts +4 -0
- package/dist/types/cache/cf/cf-cache-constants.d.ts +112 -0
- package/dist/types/cache/cf/cf-cache-store.d.ts +616 -0
- package/dist/types/cache/cf/cf-cache-types.d.ts +365 -0
- package/dist/types/cache/cf/cf-kv-utils.d.ts +43 -0
- package/dist/types/cache/cf/cf-tag-marker-memo.d.ts +15 -0
- package/dist/types/cache/cf/cf-zone-purge.d.ts +31 -0
- package/dist/types/cache/cf/index.d.ts +4 -0
- package/dist/types/cache/document-cache.d.ts +71 -0
- package/dist/types/cache/handle-capture.d.ts +23 -0
- package/dist/types/cache/handle-snapshot.d.ts +39 -0
- package/dist/types/cache/index.d.ts +9 -0
- package/dist/types/cache/memory-segment-store.d.ts +163 -0
- package/dist/types/cache/profile-registry.d.ts +40 -0
- package/dist/types/cache/read-through-swr.d.ts +61 -0
- package/dist/types/cache/search-params-filter.d.ts +64 -0
- package/dist/types/cache/segment-codec.d.ts +78 -0
- package/dist/types/cache/shell-snapshot.d.ts +186 -0
- package/dist/types/cache/tag-invalidation.d.ts +74 -0
- package/dist/types/cache/taint.d.ts +77 -0
- package/dist/types/cache/types.d.ts +503 -0
- package/dist/types/cache/vercel/index.d.ts +1 -0
- package/dist/types/cache/vercel/vercel-cache-store.d.ts +268 -0
- package/dist/types/client-urls/client-root.d.ts +38 -0
- package/dist/types/client-urls/client-urls.d.ts +5 -0
- package/dist/types/client-urls/navigation.d.ts +38 -0
- package/dist/types/client-urls/revalidation-protocol.d.ts +25 -0
- package/dist/types/client-urls/server-projection.d.ts +57 -0
- package/dist/types/client-urls/types.d.ts +132 -0
- package/dist/types/client.d.ts +191 -0
- package/dist/types/client.rsc.d.ts +41 -0
- package/dist/types/cloudflare/index.d.ts +7 -0
- package/dist/types/cloudflare/tracing.d.ts +57 -0
- package/dist/types/component-utils.d.ts +46 -0
- package/dist/types/components/DefaultDocument.d.ts +13 -0
- package/dist/types/context-var.d.ts +84 -0
- package/dist/types/debug.d.ts +57 -0
- package/dist/types/decode-loader-results.d.ts +42 -0
- package/dist/types/default-error-boundary.d.ts +10 -0
- package/dist/types/defer.d.ts +89 -0
- package/dist/types/deps/browser.d.ts +1 -0
- package/dist/types/deps/html-stream-client.d.ts +1 -0
- package/dist/types/deps/html-stream-server.d.ts +1 -0
- package/dist/types/deps/rsc.d.ts +1 -0
- package/dist/types/deps/ssr.d.ts +1 -0
- package/dist/types/dev-discovery-protocol.d.ts +5 -0
- package/dist/types/encode-kv.d.ts +35 -0
- package/dist/types/errors.d.ts +227 -0
- package/dist/types/escape-script.d.ts +44 -0
- package/dist/types/handle.d.ts +93 -0
- package/dist/types/handles/MetaTags.d.ts +17 -0
- package/dist/types/handles/Scripts.d.ts +38 -0
- package/dist/types/handles/breadcrumbs.d.ts +43 -0
- package/dist/types/handles/deferred-resolution.d.ts +53 -0
- package/dist/types/handles/is-thenable.d.ts +10 -0
- package/dist/types/handles/meta.d.ts +43 -0
- package/dist/types/handles/script.d.ts +139 -0
- package/dist/types/host/cookie-handler.d.ts +8 -0
- package/dist/types/host/errors.d.ts +40 -0
- package/dist/types/host/index.d.ts +33 -0
- package/dist/types/host/pattern-matcher.d.ts +30 -0
- package/dist/types/host/router.d.ts +12 -0
- package/dist/types/host/testing.d.ts +41 -0
- package/dist/types/host/types.d.ts +148 -0
- package/dist/types/host/utils.d.ts +20 -0
- package/dist/types/href-client.d.ts +214 -0
- package/dist/types/index.d.ts +113 -0
- package/dist/types/index.rsc.d.ts +52 -0
- package/dist/types/internal-debug.d.ts +1 -0
- package/dist/types/loader-redirect.d.ts +18 -0
- package/dist/types/loader-store.d.ts +193 -0
- package/dist/types/loader.d.ts +18 -0
- package/dist/types/loader.rsc.d.ts +18 -0
- package/dist/types/missing-id-error.d.ts +1 -0
- package/dist/types/outlet-context.d.ts +24 -0
- package/dist/types/outlet-provider.d.ts +14 -0
- package/dist/types/prerender/build-shell-capture.d.ts +104 -0
- package/dist/types/prerender/param-hash.d.ts +6 -0
- package/dist/types/prerender/shell-manifest-key.d.ts +18 -0
- package/dist/types/prerender/store.d.ts +63 -0
- package/dist/types/prerender.d.ts +292 -0
- package/dist/types/redirect-origin.d.ts +67 -0
- package/dist/types/regex-escape.d.ts +6 -0
- package/dist/types/render-error-thrower.d.ts +13 -0
- package/dist/types/response-utils.d.ts +35 -0
- package/dist/types/reverse.d.ts +206 -0
- package/dist/types/root-error-boundary.d.ts +32 -0
- package/dist/types/route-content-wrapper.d.ts +81 -0
- package/dist/types/route-definition/dsl-helpers.d.ts +130 -0
- package/dist/types/route-definition/helper-factories.d.ts +22 -0
- package/dist/types/route-definition/helpers-types.d.ts +393 -0
- package/dist/types/route-definition/index.d.ts +7 -0
- package/dist/types/route-definition/redirect.d.ts +48 -0
- package/dist/types/route-definition/resolve-handler-use.d.ts +19 -0
- package/dist/types/route-definition/use-item-types.d.ts +1 -0
- package/dist/types/route-definition.d.ts +1 -0
- package/dist/types/route-map-builder.d.ts +102 -0
- package/dist/types/route-name.d.ts +27 -0
- package/dist/types/route-types.d.ts +172 -0
- package/dist/types/router/basename.d.ts +10 -0
- package/dist/types/router/content-negotiation.d.ts +91 -0
- package/dist/types/router/debug-manifest.d.ts +7 -0
- package/dist/types/router/error-handling.d.ts +110 -0
- package/dist/types/router/find-match.d.ts +19 -0
- package/dist/types/router/handler-context.d.ts +41 -0
- package/dist/types/router/instrument.d.ts +191 -0
- package/dist/types/router/intercept-resolution.d.ts +91 -0
- package/dist/types/router/lazy-includes.d.ts +26 -0
- package/dist/types/router/loader-resolution.d.ts +85 -0
- package/dist/types/router/logging.d.ts +41 -0
- package/dist/types/router/manifest.d.ts +8 -0
- package/dist/types/router/match-api.d.ts +19 -0
- package/dist/types/router/match-context.d.ts +184 -0
- package/dist/types/router/match-handlers.d.ts +48 -0
- package/dist/types/router/match-middleware/background-revalidation.d.ts +113 -0
- package/dist/types/router/match-middleware/cache-lookup.d.ts +126 -0
- package/dist/types/router/match-middleware/cache-store.d.ts +112 -0
- package/dist/types/router/match-middleware/index.d.ts +80 -0
- package/dist/types/router/match-middleware/intercept-resolution.d.ts +116 -0
- package/dist/types/router/match-middleware/segment-resolution.d.ts +94 -0
- package/dist/types/router/match-pipelines.d.ts +103 -0
- package/dist/types/router/match-result.d.ts +114 -0
- package/dist/types/router/metrics.d.ts +6 -0
- package/dist/types/router/middleware-types.d.ts +74 -0
- package/dist/types/router/middleware.d.ts +116 -0
- package/dist/types/router/navigation-snapshot.d.ts +51 -0
- package/dist/types/router/params-util.d.ts +8 -0
- package/dist/types/router/parse-pattern.d.ts +38 -0
- package/dist/types/router/pattern-matching.d.ts +169 -0
- package/dist/types/router/prefetch-cache-ttl.d.ts +27 -0
- package/dist/types/router/prefetch-default.d.ts +28 -0
- package/dist/types/router/prefetch-limits.d.ts +20 -0
- package/dist/types/router/prerender-match.d.ts +53 -0
- package/dist/types/router/preview-match.d.ts +22 -0
- package/dist/types/router/request-classification.d.ts +104 -0
- package/dist/types/router/revalidation.d.ts +64 -0
- package/dist/types/router/route-snapshot.d.ts +112 -0
- package/dist/types/router/route-trie-builder.d.ts +77 -0
- package/dist/types/router/router-context.d.ts +137 -0
- package/dist/types/router/router-interfaces.d.ts +461 -0
- package/dist/types/router/router-options.d.ts +792 -0
- package/dist/types/router/router-registry.d.ts +15 -0
- package/dist/types/router/segment-resolution/fresh.d.ts +55 -0
- package/dist/types/router/segment-resolution/helpers.d.ts +93 -0
- package/dist/types/router/segment-resolution/loader-cache.d.ts +33 -0
- package/dist/types/router/segment-resolution/loader-mask.d.ts +44 -0
- package/dist/types/router/segment-resolution/loader-snapshot.d.ts +90 -0
- package/dist/types/router/segment-resolution/mask-nested.d.ts +53 -0
- package/dist/types/router/segment-resolution/revalidation.d.ts +85 -0
- package/dist/types/router/segment-resolution/static-store.d.ts +17 -0
- package/dist/types/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
- package/dist/types/router/segment-resolution/view-transition-default.d.ts +27 -0
- package/dist/types/router/segment-resolution.d.ts +3 -0
- package/dist/types/router/segment-wrappers.d.ts +53 -0
- package/dist/types/router/state-cookie-name.d.ts +1 -0
- package/dist/types/router/substitute-pattern-params.d.ts +23 -0
- package/dist/types/router/telemetry-otel.d.ts +113 -0
- package/dist/types/router/telemetry.d.ts +216 -0
- package/dist/types/router/timeout.d.ts +107 -0
- package/dist/types/router/tracing.d.ts +139 -0
- package/dist/types/router/transition-when.d.ts +13 -0
- package/dist/types/router/trie-matching.d.ts +32 -0
- package/dist/types/router/types.d.ts +98 -0
- package/dist/types/router/url-params.d.ts +26 -0
- package/dist/types/router.d.ts +7 -0
- package/dist/types/rsc/capture-queue.d.ts +49 -0
- package/dist/types/rsc/full-payload.d.ts +22 -0
- package/dist/types/rsc/handler-context.d.ts +32 -0
- package/dist/types/rsc/handler.d.ts +9 -0
- package/dist/types/rsc/helpers.d.ts +127 -0
- package/dist/types/rsc/index.d.ts +17 -0
- package/dist/types/rsc/json-route-result.d.ts +20 -0
- package/dist/types/rsc/loader-fetch.d.ts +14 -0
- package/dist/types/rsc/manifest-init.d.ts +18 -0
- package/dist/types/rsc/nonce.d.ts +28 -0
- package/dist/types/rsc/origin-guard.d.ts +50 -0
- package/dist/types/rsc/progressive-enhancement.d.ts +19 -0
- package/dist/types/rsc/redirect-guard.d.ts +37 -0
- package/dist/types/rsc/render-pipeline.d.ts +148 -0
- package/dist/types/rsc/response-cache-serve.d.ts +46 -0
- package/dist/types/rsc/response-error.d.ts +19 -0
- package/dist/types/rsc/response-route-handler.d.ts +29 -0
- package/dist/types/rsc/routine-plan.d.ts +124 -0
- package/dist/types/rsc/rsc-rendering.d.ts +18 -0
- package/dist/types/rsc/runtime-warnings.d.ts +22 -0
- package/dist/types/rsc/server-action.d.ts +68 -0
- package/dist/types/rsc/shell-build-manifest.d.ts +90 -0
- package/dist/types/rsc/shell-capture-constants.d.ts +44 -0
- package/dist/types/rsc/shell-capture.d.ts +406 -0
- package/dist/types/rsc/shell-serve.d.ts +189 -0
- package/dist/types/rsc/ssr-setup.d.ts +73 -0
- package/dist/types/rsc/stream-idle.d.ts +60 -0
- package/dist/types/rsc/transition-gate.d.ts +23 -0
- package/dist/types/rsc/types.d.ts +328 -0
- package/dist/types/runtime-env.d.ts +1 -0
- package/dist/types/search-params.d.ts +125 -0
- package/dist/types/segment-content-promise.d.ts +13 -0
- package/dist/types/segment-fragments.d.ts +79 -0
- package/dist/types/segment-loader-promise.d.ts +22 -0
- package/dist/types/segment-system.d.ts +86 -0
- package/dist/types/serialize.d.ts +164 -0
- package/dist/types/server/context.d.ts +510 -0
- package/dist/types/server/cookie-parse.d.ts +10 -0
- package/dist/types/server/cookie-store.d.ts +107 -0
- package/dist/types/server/fetchable-loader-store.d.ts +20 -0
- package/dist/types/server/handle-store.d.ts +131 -0
- package/dist/types/server/loader-registry.d.ts +32 -0
- package/dist/types/server/request-context.d.ts +707 -0
- package/dist/types/server/root-layout.d.ts +3 -0
- package/dist/types/server.d.ts +16 -0
- package/dist/types/ssr/index.d.ts +233 -0
- package/dist/types/ssr/inject-rsc-eager.d.ts +3 -0
- package/dist/types/ssr/preinit-client-references.d.ts +71 -0
- package/dist/types/ssr/ssr-root.d.ts +69 -0
- package/dist/types/static-handler.d.ts +71 -0
- package/dist/types/testing/cache-status.d.ts +63 -0
- package/dist/types/testing/collect-handle.d.ts +20 -0
- package/dist/types/testing/dispatch.d.ts +127 -0
- package/dist/types/testing/dom.entry.d.ts +15 -0
- package/dist/types/testing/e2e/fixture.d.ts +37 -0
- package/dist/types/testing/e2e/index.d.ts +31 -0
- package/dist/types/testing/e2e/matchers.d.ts +17 -0
- package/dist/types/testing/e2e/page-helpers.d.ts +86 -0
- package/dist/types/testing/e2e/parity.d.ts +111 -0
- package/dist/types/testing/e2e/server.d.ts +35 -0
- package/dist/types/testing/flight-matchers.d.ts +55 -0
- package/dist/types/testing/flight-normalize.d.ts +1 -0
- package/dist/types/testing/flight-tree.d.ts +192 -0
- package/dist/types/testing/flight.d.ts +115 -0
- package/dist/types/testing/flight.entry.d.ts +27 -0
- package/dist/types/testing/generated-routes.d.ts +66 -0
- package/dist/types/testing/index.d.ts +54 -0
- package/dist/types/testing/internal/context.d.ts +225 -0
- package/dist/types/testing/internal/flight-client-globals.d.ts +1 -0
- package/dist/types/testing/internal/seed-vars.d.ts +30 -0
- package/dist/types/testing/render-handler.d.ts +160 -0
- package/dist/types/testing/render-route.d.ts +265 -0
- package/dist/types/testing/run-loader.d.ts +195 -0
- package/dist/types/testing/run-middleware.d.ts +132 -0
- package/dist/types/testing/run-transition-when.d.ts +78 -0
- package/dist/types/testing/shell-status.d.ts +81 -0
- package/dist/types/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
- package/dist/types/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
- package/dist/types/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
- package/dist/types/testing/vitest-stubs/version.d.ts +1 -0
- package/dist/types/testing/vitest.d.ts +205 -0
- package/dist/types/theme/ThemeProvider.d.ts +13 -0
- package/dist/types/theme/ThemeScript.d.ts +45 -0
- package/dist/types/theme/constants.d.ts +39 -0
- package/dist/types/theme/index.d.ts +29 -0
- package/dist/types/theme/theme-context.d.ts +21 -0
- package/dist/types/theme/theme-script.d.ts +26 -0
- package/dist/types/theme/types.d.ts +162 -0
- package/dist/types/theme/use-theme.d.ts +8 -0
- package/dist/types/types/boundaries.d.ts +110 -0
- package/dist/types/types/cache-types.d.ts +191 -0
- package/dist/types/types/error-types.d.ts +114 -0
- package/dist/types/types/global-namespace.d.ts +90 -0
- package/dist/types/types/handler-context.d.ts +658 -0
- package/dist/types/types/index.d.ts +11 -0
- package/dist/types/types/loader-types.d.ts +208 -0
- package/dist/types/types/request-scope.d.ts +93 -0
- package/dist/types/types/route-config.d.ts +105 -0
- package/dist/types/types/route-entry.d.ts +98 -0
- package/dist/types/types/segments.d.ts +246 -0
- package/dist/types/types.d.ts +1 -0
- package/dist/types/urls/include-helper.d.ts +17 -0
- package/dist/types/urls/include-provider.d.ts +27 -0
- package/dist/types/urls/index.d.ts +6 -0
- package/dist/types/urls/path-helper-types.d.ts +198 -0
- package/dist/types/urls/path-helper.d.ts +12 -0
- package/dist/types/urls/pattern-types.d.ts +166 -0
- package/dist/types/urls/response-types.d.ts +67 -0
- package/dist/types/urls/type-extraction.d.ts +157 -0
- package/dist/types/urls/urls-function.d.ts +24 -0
- package/dist/types/urls.d.ts +1 -0
- package/dist/types/use-loader.d.ts +150 -0
- package/dist/types/vercel/index.d.ts +10 -0
- package/dist/types/vercel/tracing.d.ts +71 -0
- package/dist/types/vite/debug.d.ts +80 -0
- package/dist/types/vite/discovery/bundle-postprocess.d.ts +12 -0
- package/dist/types/vite/discovery/client-urls-projection.d.ts +53 -0
- package/dist/types/vite/discovery/dev-prerender-cache.d.ts +65 -0
- package/dist/types/vite/discovery/discover-routers.d.ts +17 -0
- package/dist/types/vite/discovery/discovery-errors.d.ts +113 -0
- package/dist/types/vite/discovery/gate-state.d.ts +79 -0
- package/dist/types/vite/discovery/prerender-collection.d.ts +24 -0
- package/dist/types/vite/discovery/route-types-writer.d.ts +32 -0
- package/dist/types/vite/discovery/self-gen-tracking.d.ts +22 -0
- package/dist/types/vite/discovery/shell-prerender-phase.d.ts +40 -0
- package/dist/types/vite/discovery/state.d.ts +170 -0
- package/dist/types/vite/discovery/virtual-module-codegen.d.ts +15 -0
- package/dist/types/vite/encryption-key.d.ts +2 -0
- package/dist/types/vite/index.d.ts +11 -0
- package/dist/types/vite/inject-client-debug.d.ts +56 -0
- package/dist/types/vite/plugin-types.d.ts +298 -0
- package/dist/types/vite/plugins/cjs-to-esm.d.ts +6 -0
- package/dist/types/vite/plugins/client-ref-dedup.d.ts +40 -0
- package/dist/types/vite/plugins/client-ref-hashing.d.ts +35 -0
- package/dist/types/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
- package/dist/types/vite/plugins/expose-action-id.d.ts +18 -0
- package/dist/types/vite/plugins/expose-id-utils.d.ts +37 -0
- package/dist/types/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
- package/dist/types/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
- package/dist/types/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
- package/dist/types/vite/plugins/expose-ids/router-transform.d.ts +13 -0
- package/dist/types/vite/plugins/expose-ids/types.d.ts +29 -0
- package/dist/types/vite/plugins/expose-internal-ids.d.ts +16 -0
- package/dist/types/vite/plugins/performance-tracks.d.ts +25 -0
- package/dist/types/vite/plugins/refresh-cmd.d.ts +20 -0
- package/dist/types/vite/plugins/server-ref-hashing.d.ts +24 -0
- package/dist/types/vite/plugins/server-reference-pattern.d.ts +1 -0
- package/dist/types/vite/plugins/use-cache-transform.d.ts +20 -0
- package/dist/types/vite/plugins/vercel-output.d.ts +85 -0
- package/dist/types/vite/plugins/version-injector.d.ts +21 -0
- package/dist/types/vite/plugins/version-plugin.d.ts +19 -0
- package/dist/types/vite/plugins/virtual-entries.d.ts +36 -0
- package/dist/types/vite/plugins/virtual-stub-plugin.d.ts +7 -0
- package/dist/types/vite/rango.d.ts +29 -0
- package/dist/types/vite/router-discovery.d.ts +23 -0
- package/dist/types/vite/utils/ast-handler-extract.d.ts +64 -0
- package/dist/types/vite/utils/banner.d.ts +2 -0
- package/dist/types/vite/utils/bundle-analysis.d.ts +28 -0
- package/dist/types/vite/utils/client-chunks.d.ts +55 -0
- package/dist/types/vite/utils/directive-prologue.d.ts +16 -0
- package/dist/types/vite/utils/forward-user-plugins.d.ts +37 -0
- package/dist/types/vite/utils/manifest-utils.d.ts +7 -0
- package/dist/types/vite/utils/package-resolution.d.ts +6 -0
- package/dist/types/vite/utils/prerender-utils.d.ts +32 -0
- package/dist/types/vite/utils/shared-utils.d.ts +67 -0
- package/dist/types.backup/__internal.d.ts +127 -0
- package/dist/types.backup/bin/rango.d.ts +1 -0
- package/dist/types.backup/browser/action-coordinator.d.ts +57 -0
- package/dist/types.backup/browser/action-fence.d.ts +33 -0
- package/dist/types.backup/browser/app-shell.d.ts +34 -0
- package/dist/types.backup/browser/app-version.d.ts +6 -0
- package/dist/types.backup/browser/connection-warmup.d.ts +31 -0
- package/dist/types.backup/browser/cookie-name.d.ts +66 -0
- package/dist/types.backup/browser/event-controller.d.ts +221 -0
- package/dist/types.backup/browser/history-state.d.ts +26 -0
- package/dist/types.backup/browser/index.d.ts +1 -0
- package/dist/types.backup/browser/intercept-utils.d.ts +30 -0
- package/dist/types.backup/browser/invalidate-client-cache.d.ts +17 -0
- package/dist/types.backup/browser/link-interceptor.d.ts +43 -0
- package/dist/types.backup/browser/logging.d.ts +33 -0
- package/dist/types.backup/browser/merge-segment-loaders.d.ts +38 -0
- package/dist/types.backup/browser/navigation-bridge.d.ts +27 -0
- package/dist/types.backup/browser/navigation-client.d.ts +17 -0
- package/dist/types.backup/browser/navigation-store-handle.d.ts +25 -0
- package/dist/types.backup/browser/navigation-store.d.ts +95 -0
- package/dist/types.backup/browser/navigation-transaction.d.ts +75 -0
- package/dist/types.backup/browser/network-error-handler.d.ts +35 -0
- package/dist/types.backup/browser/partial-update.d.ts +61 -0
- package/dist/types.backup/browser/prefetch/cache.d.ts +183 -0
- package/dist/types.backup/browser/prefetch/fetch.d.ts +52 -0
- package/dist/types.backup/browser/prefetch/observer.d.ts +27 -0
- package/dist/types.backup/browser/prefetch/policy.d.ts +13 -0
- package/dist/types.backup/browser/prefetch/queue.d.ts +48 -0
- package/dist/types.backup/browser/prefetch/resource-ready.d.ts +28 -0
- package/dist/types.backup/browser/rango-state.d.ts +52 -0
- package/dist/types.backup/browser/react/Link.d.ts +140 -0
- package/dist/types.backup/browser/react/NavigationProvider.d.ts +88 -0
- package/dist/types.backup/browser/react/ScrollRestoration.d.ts +78 -0
- package/dist/types.backup/browser/react/context.d.ts +54 -0
- package/dist/types.backup/browser/react/filter-segment-order.d.ts +35 -0
- package/dist/types.backup/browser/react/index.d.ts +1 -0
- package/dist/types.backup/browser/react/location-state-shared.d.ts +162 -0
- package/dist/types.backup/browser/react/location-state.d.ts +29 -0
- package/dist/types.backup/browser/react/mount-context.d.ts +23 -0
- package/dist/types.backup/browser/react/nonce-context.d.ts +14 -0
- package/dist/types.backup/browser/react/shallow-equal.d.ts +5 -0
- package/dist/types.backup/browser/react/use-action.d.ts +61 -0
- package/dist/types.backup/browser/react/use-handle.d.ts +21 -0
- package/dist/types.backup/browser/react/use-href.d.ts +32 -0
- package/dist/types.backup/browser/react/use-link-status.d.ts +36 -0
- package/dist/types.backup/browser/react/use-mount.d.ts +24 -0
- package/dist/types.backup/browser/react/use-navigation.d.ts +15 -0
- package/dist/types.backup/browser/react/use-params.d.ts +21 -0
- package/dist/types.backup/browser/react/use-pathname.d.ts +13 -0
- package/dist/types.backup/browser/react/use-reverse.d.ts +40 -0
- package/dist/types.backup/browser/react/use-router.d.ts +23 -0
- package/dist/types.backup/browser/react/use-search-params.d.ts +19 -0
- package/dist/types.backup/browser/react/use-segments.d.ts +29 -0
- package/dist/types.backup/browser/response-adapter.d.ts +58 -0
- package/dist/types.backup/browser/rsc-router.d.ts +141 -0
- package/dist/types.backup/browser/scroll-restoration.d.ts +103 -0
- package/dist/types.backup/browser/segment-reconciler.d.ts +74 -0
- package/dist/types.backup/browser/segment-structure-assert.d.ts +16 -0
- package/dist/types.backup/browser/server-action-bridge.d.ts +29 -0
- package/dist/types.backup/browser/types.d.ts +530 -0
- package/dist/types.backup/browser/validate-redirect-origin.d.ts +28 -0
- package/dist/types.backup/build/collect-fallback-refs.d.ts +5 -0
- package/dist/types.backup/build/generate-manifest.d.ts +100 -0
- package/dist/types.backup/build/generate-route-types.d.ts +8 -0
- package/dist/types.backup/build/index.d.ts +21 -0
- package/dist/types.backup/build/prefix-tree-utils.d.ts +56 -0
- package/dist/types.backup/build/route-trie.d.ts +89 -0
- package/dist/types.backup/build/route-types/ast-helpers.d.ts +3 -0
- package/dist/types.backup/build/route-types/ast-route-extraction.d.ts +13 -0
- package/dist/types.backup/build/route-types/codegen.d.ts +16 -0
- package/dist/types.backup/build/route-types/include-resolution.d.ts +74 -0
- package/dist/types.backup/build/route-types/param-extraction.d.ts +13 -0
- package/dist/types.backup/build/route-types/per-module-writer.d.ts +18 -0
- package/dist/types.backup/build/route-types/router-processing.d.ts +82 -0
- package/dist/types.backup/build/route-types/scan-filter.d.ts +17 -0
- package/dist/types.backup/build/route-types/source-scan.d.ts +13 -0
- package/dist/types.backup/build/runtime-discovery.d.ts +24 -0
- package/dist/types.backup/cache/background-task.d.ts +21 -0
- package/dist/types.backup/cache/cache-error.d.ts +71 -0
- package/dist/types.backup/cache/cache-key-utils.d.ts +35 -0
- package/dist/types.backup/cache/cache-policy.d.ts +59 -0
- package/dist/types.backup/cache/cache-runtime.d.ts +51 -0
- package/dist/types.backup/cache/cache-scope.d.ts +134 -0
- package/dist/types.backup/cache/cache-tag.d.ts +79 -0
- package/dist/types.backup/cache/cf/cf-base64.d.ts +4 -0
- package/dist/types.backup/cache/cf/cf-cache-constants.d.ts +105 -0
- package/dist/types.backup/cache/cf/cf-cache-store.d.ts +481 -0
- package/dist/types.backup/cache/cf/cf-cache-types.d.ts +300 -0
- package/dist/types.backup/cache/cf/cf-kv-utils.d.ts +22 -0
- package/dist/types.backup/cache/cf/cf-tag-marker-memo.d.ts +15 -0
- package/dist/types.backup/cache/cf/index.d.ts +3 -0
- package/dist/types.backup/cache/document-cache.d.ts +69 -0
- package/dist/types.backup/cache/handle-capture.d.ts +23 -0
- package/dist/types.backup/cache/handle-snapshot.d.ts +39 -0
- package/dist/types.backup/cache/index.d.ts +7 -0
- package/dist/types.backup/cache/memory-segment-store.d.ts +163 -0
- package/dist/types.backup/cache/profile-registry.d.ts +40 -0
- package/dist/types.backup/cache/read-through-swr.d.ts +60 -0
- package/dist/types.backup/cache/segment-codec.d.ts +78 -0
- package/dist/types.backup/cache/shell-snapshot.d.ts +162 -0
- package/dist/types.backup/cache/tag-invalidation.d.ts +74 -0
- package/dist/types.backup/cache/taint.d.ts +71 -0
- package/dist/types.backup/cache/types.d.ts +407 -0
- package/dist/types.backup/cache/vercel/index.d.ts +1 -0
- package/dist/types.backup/cache/vercel/vercel-cache-store.d.ts +267 -0
- package/dist/types.backup/client.d.ts +184 -0
- package/dist/types.backup/client.rsc.d.ts +39 -0
- package/dist/types.backup/cloudflare/index.d.ts +7 -0
- package/dist/types.backup/cloudflare/tracing.d.ts +53 -0
- package/dist/types.backup/component-utils.d.ts +46 -0
- package/dist/types.backup/components/DefaultDocument.d.ts +13 -0
- package/dist/types.backup/context-var.d.ts +84 -0
- package/dist/types.backup/debug.d.ts +57 -0
- package/dist/types.backup/decode-loader-results.d.ts +5 -0
- package/dist/types.backup/default-error-boundary.d.ts +10 -0
- package/dist/types.backup/defer.d.ts +89 -0
- package/dist/types.backup/deps/browser.d.ts +1 -0
- package/dist/types.backup/deps/html-stream-client.d.ts +1 -0
- package/dist/types.backup/deps/html-stream-server.d.ts +1 -0
- package/dist/types.backup/deps/rsc.d.ts +1 -0
- package/dist/types.backup/deps/ssr.d.ts +1 -0
- package/dist/types.backup/encode-kv.d.ts +35 -0
- package/dist/types.backup/errors.d.ts +226 -0
- package/dist/types.backup/escape-script.d.ts +44 -0
- package/dist/types.backup/handle.d.ts +93 -0
- package/dist/types.backup/handles/MetaTags.d.ts +17 -0
- package/dist/types.backup/handles/Scripts.d.ts +38 -0
- package/dist/types.backup/handles/breadcrumbs.d.ts +43 -0
- package/dist/types.backup/handles/deferred-resolution.d.ts +53 -0
- package/dist/types.backup/handles/is-thenable.d.ts +12 -0
- package/dist/types.backup/handles/meta.d.ts +43 -0
- package/dist/types.backup/handles/script.d.ts +139 -0
- package/dist/types.backup/host/cookie-handler.d.ts +8 -0
- package/dist/types.backup/host/errors.d.ts +40 -0
- package/dist/types.backup/host/index.d.ts +33 -0
- package/dist/types.backup/host/pattern-matcher.d.ts +30 -0
- package/dist/types.backup/host/router.d.ts +12 -0
- package/dist/types.backup/host/testing.d.ts +41 -0
- package/dist/types.backup/host/types.d.ts +148 -0
- package/dist/types.backup/host/utils.d.ts +20 -0
- package/dist/types.backup/href-client.d.ts +214 -0
- package/dist/types.backup/index.d.ts +112 -0
- package/dist/types.backup/index.rsc.d.ts +51 -0
- package/dist/types.backup/internal-debug.d.ts +1 -0
- package/dist/types.backup/loader-store.d.ts +193 -0
- package/dist/types.backup/loader.d.ts +18 -0
- package/dist/types.backup/loader.rsc.d.ts +18 -0
- package/dist/types.backup/missing-id-error.d.ts +1 -0
- package/dist/types.backup/outlet-context.d.ts +12 -0
- package/dist/types.backup/outlet-provider.d.ts +12 -0
- package/dist/types.backup/prerender/build-shell-capture.d.ts +104 -0
- package/dist/types.backup/prerender/param-hash.d.ts +6 -0
- package/dist/types.backup/prerender/shell-manifest-key.d.ts +18 -0
- package/dist/types.backup/prerender/store.d.ts +62 -0
- package/dist/types.backup/prerender.d.ts +292 -0
- package/dist/types.backup/redirect-origin.d.ts +55 -0
- package/dist/types.backup/regex-escape.d.ts +6 -0
- package/dist/types.backup/render-error-thrower.d.ts +13 -0
- package/dist/types.backup/response-utils.d.ts +35 -0
- package/dist/types.backup/reverse.d.ts +206 -0
- package/dist/types.backup/root-error-boundary.d.ts +32 -0
- package/dist/types.backup/route-content-wrapper.d.ts +40 -0
- package/dist/types.backup/route-definition/dsl-helpers.d.ts +130 -0
- package/dist/types.backup/route-definition/helper-factories.d.ts +22 -0
- package/dist/types.backup/route-definition/helpers-types.d.ts +392 -0
- package/dist/types.backup/route-definition/index.d.ts +7 -0
- package/dist/types.backup/route-definition/redirect.d.ts +48 -0
- package/dist/types.backup/route-definition/resolve-handler-use.d.ts +19 -0
- package/dist/types.backup/route-definition/use-item-types.d.ts +1 -0
- package/dist/types.backup/route-definition.d.ts +1 -0
- package/dist/types.backup/route-map-builder.d.ts +127 -0
- package/dist/types.backup/route-name.d.ts +27 -0
- package/dist/types.backup/route-types.d.ts +172 -0
- package/dist/types.backup/router/basename.d.ts +10 -0
- package/dist/types.backup/router/content-negotiation.d.ts +91 -0
- package/dist/types.backup/router/debug-manifest.d.ts +7 -0
- package/dist/types.backup/router/error-handling.d.ts +76 -0
- package/dist/types.backup/router/find-match.d.ts +19 -0
- package/dist/types.backup/router/handler-context.d.ts +41 -0
- package/dist/types.backup/router/instrument.d.ts +161 -0
- package/dist/types.backup/router/intercept-resolution.d.ts +79 -0
- package/dist/types.backup/router/lazy-includes.d.ts +26 -0
- package/dist/types.backup/router/loader-resolution.d.ts +63 -0
- package/dist/types.backup/router/logging.d.ts +41 -0
- package/dist/types.backup/router/manifest.d.ts +8 -0
- package/dist/types.backup/router/match-api.d.ts +19 -0
- package/dist/types.backup/router/match-context.d.ts +184 -0
- package/dist/types.backup/router/match-handlers.d.ts +49 -0
- package/dist/types.backup/router/match-middleware/background-revalidation.d.ts +113 -0
- package/dist/types.backup/router/match-middleware/cache-lookup.d.ts +113 -0
- package/dist/types.backup/router/match-middleware/cache-store.d.ts +112 -0
- package/dist/types.backup/router/match-middleware/index.d.ts +80 -0
- package/dist/types.backup/router/match-middleware/intercept-resolution.d.ts +116 -0
- package/dist/types.backup/router/match-middleware/segment-resolution.d.ts +94 -0
- package/dist/types.backup/router/match-pipelines.d.ts +103 -0
- package/dist/types.backup/router/match-result.d.ts +114 -0
- package/dist/types.backup/router/metrics.d.ts +6 -0
- package/dist/types.backup/router/middleware-types.d.ts +74 -0
- package/dist/types.backup/router/middleware.d.ts +116 -0
- package/dist/types.backup/router/navigation-snapshot.d.ts +22 -0
- package/dist/types.backup/router/params-util.d.ts +8 -0
- package/dist/types.backup/router/parse-pattern.d.ts +38 -0
- package/dist/types.backup/router/pattern-matching.d.ts +169 -0
- package/dist/types.backup/router/prefetch-cache-ttl.d.ts +27 -0
- package/dist/types.backup/router/prefetch-limits.d.ts +20 -0
- package/dist/types.backup/router/prerender-match.d.ts +50 -0
- package/dist/types.backup/router/preview-match.d.ts +22 -0
- package/dist/types.backup/router/request-classification.d.ts +104 -0
- package/dist/types.backup/router/revalidation.d.ts +57 -0
- package/dist/types.backup/router/route-snapshot.d.ts +112 -0
- package/dist/types.backup/router/router-context.d.ts +137 -0
- package/dist/types.backup/router/router-interfaces.d.ts +432 -0
- package/dist/types.backup/router/router-options.d.ts +738 -0
- package/dist/types.backup/router/router-registry.d.ts +15 -0
- package/dist/types.backup/router/segment-resolution/fresh.d.ts +55 -0
- package/dist/types.backup/router/segment-resolution/helpers.d.ts +93 -0
- package/dist/types.backup/router/segment-resolution/loader-cache.d.ts +33 -0
- package/dist/types.backup/router/segment-resolution/loader-mask.d.ts +44 -0
- package/dist/types.backup/router/segment-resolution/loader-snapshot.d.ts +90 -0
- package/dist/types.backup/router/segment-resolution/mask-nested.d.ts +53 -0
- package/dist/types.backup/router/segment-resolution/revalidation.d.ts +85 -0
- package/dist/types.backup/router/segment-resolution/static-store.d.ts +17 -0
- package/dist/types.backup/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
- package/dist/types.backup/router/segment-resolution/view-transition-default.d.ts +28 -0
- package/dist/types.backup/router/segment-resolution.d.ts +3 -0
- package/dist/types.backup/router/segment-wrappers.d.ts +53 -0
- package/dist/types.backup/router/state-cookie-name.d.ts +1 -0
- package/dist/types.backup/router/substitute-pattern-params.d.ts +23 -0
- package/dist/types.backup/router/telemetry-otel.d.ts +113 -0
- package/dist/types.backup/router/telemetry.d.ts +215 -0
- package/dist/types.backup/router/timeout.d.ts +68 -0
- package/dist/types.backup/router/tracing.d.ts +125 -0
- package/dist/types.backup/router/trie-matching.d.ts +32 -0
- package/dist/types.backup/router/types.d.ts +98 -0
- package/dist/types.backup/router/url-params.d.ts +26 -0
- package/dist/types.backup/router.d.ts +7 -0
- package/dist/types.backup/rsc/capture-queue.d.ts +6 -0
- package/dist/types.backup/rsc/full-payload.d.ts +22 -0
- package/dist/types.backup/rsc/handler-context.d.ts +31 -0
- package/dist/types.backup/rsc/handler.d.ts +9 -0
- package/dist/types.backup/rsc/helpers.d.ts +213 -0
- package/dist/types.backup/rsc/index.d.ts +17 -0
- package/dist/types.backup/rsc/json-route-result.d.ts +20 -0
- package/dist/types.backup/rsc/loader-fetch.d.ts +14 -0
- package/dist/types.backup/rsc/manifest-init.d.ts +18 -0
- package/dist/types.backup/rsc/nonce.d.ts +28 -0
- package/dist/types.backup/rsc/origin-guard.d.ts +50 -0
- package/dist/types.backup/rsc/progressive-enhancement.d.ts +19 -0
- package/dist/types.backup/rsc/redirect-guard.d.ts +35 -0
- package/dist/types.backup/rsc/response-cache-serve.d.ts +46 -0
- package/dist/types.backup/rsc/response-error.d.ts +19 -0
- package/dist/types.backup/rsc/response-route-handler.d.ts +29 -0
- package/dist/types.backup/rsc/rsc-rendering.d.ts +23 -0
- package/dist/types.backup/rsc/runtime-warnings.d.ts +22 -0
- package/dist/types.backup/rsc/server-action.d.ts +68 -0
- package/dist/types.backup/rsc/shell-build-manifest.d.ts +84 -0
- package/dist/types.backup/rsc/shell-capture-constants.d.ts +27 -0
- package/dist/types.backup/rsc/shell-capture.d.ts +374 -0
- package/dist/types.backup/rsc/shell-serve.d.ts +136 -0
- package/dist/types.backup/rsc/ssr-setup.d.ts +48 -0
- package/dist/types.backup/rsc/transition-gate.d.ts +27 -0
- package/dist/types.backup/rsc/types.d.ts +290 -0
- package/dist/types.backup/runtime-env.d.ts +1 -0
- package/dist/types.backup/search-params.d.ts +125 -0
- package/dist/types.backup/segment-content-promise.d.ts +13 -0
- package/dist/types.backup/segment-fragments.d.ts +56 -0
- package/dist/types.backup/segment-loader-promise.d.ts +22 -0
- package/dist/types.backup/segment-system.d.ts +84 -0
- package/dist/types.backup/serialize.d.ts +164 -0
- package/dist/types.backup/server/context.d.ts +494 -0
- package/dist/types.backup/server/cookie-parse.d.ts +10 -0
- package/dist/types.backup/server/cookie-store.d.ts +107 -0
- package/dist/types.backup/server/fetchable-loader-store.d.ts +20 -0
- package/dist/types.backup/server/handle-store.d.ts +100 -0
- package/dist/types.backup/server/loader-registry.d.ts +32 -0
- package/dist/types.backup/server/request-context.d.ts +596 -0
- package/dist/types.backup/server/root-layout.d.ts +3 -0
- package/dist/types.backup/server.d.ts +15 -0
- package/dist/types.backup/ssr/index.d.ts +233 -0
- package/dist/types.backup/ssr/inject-rsc-eager.d.ts +3 -0
- package/dist/types.backup/ssr/preinit-client-references.d.ts +71 -0
- package/dist/types.backup/ssr/ssr-root.d.ts +69 -0
- package/dist/types.backup/static-handler.d.ts +57 -0
- package/dist/types.backup/testing/cache-status.d.ts +63 -0
- package/dist/types.backup/testing/collect-handle.d.ts +20 -0
- package/dist/types.backup/testing/dispatch.d.ts +123 -0
- package/dist/types.backup/testing/dom.entry.d.ts +15 -0
- package/dist/types.backup/testing/e2e/fixture.d.ts +37 -0
- package/dist/types.backup/testing/e2e/index.d.ts +30 -0
- package/dist/types.backup/testing/e2e/matchers.d.ts +17 -0
- package/dist/types.backup/testing/e2e/page-helpers.d.ts +62 -0
- package/dist/types.backup/testing/e2e/parity.d.ts +111 -0
- package/dist/types.backup/testing/e2e/server.d.ts +35 -0
- package/dist/types.backup/testing/flight-matchers.d.ts +55 -0
- package/dist/types.backup/testing/flight-normalize.d.ts +1 -0
- package/dist/types.backup/testing/flight-tree.d.ts +192 -0
- package/dist/types.backup/testing/flight.d.ts +115 -0
- package/dist/types.backup/testing/flight.entry.d.ts +27 -0
- package/dist/types.backup/testing/generated-routes.d.ts +66 -0
- package/dist/types.backup/testing/index.d.ts +52 -0
- package/dist/types.backup/testing/internal/context.d.ts +225 -0
- package/dist/types.backup/testing/internal/flight-client-globals.d.ts +1 -0
- package/dist/types.backup/testing/internal/seed-vars.d.ts +30 -0
- package/dist/types.backup/testing/render-handler.d.ts +160 -0
- package/dist/types.backup/testing/render-route.d.ts +246 -0
- package/dist/types.backup/testing/run-loader.d.ts +186 -0
- package/dist/types.backup/testing/run-middleware.d.ts +132 -0
- package/dist/types.backup/testing/run-transition-when.d.ts +77 -0
- package/dist/types.backup/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
- package/dist/types.backup/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
- package/dist/types.backup/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
- package/dist/types.backup/testing/vitest-stubs/version.d.ts +1 -0
- package/dist/types.backup/testing/vitest.d.ts +205 -0
- package/dist/types.backup/theme/ThemeProvider.d.ts +13 -0
- package/dist/types.backup/theme/ThemeScript.d.ts +45 -0
- package/dist/types.backup/theme/constants.d.ts +39 -0
- package/dist/types.backup/theme/index.d.ts +29 -0
- package/dist/types.backup/theme/theme-context.d.ts +21 -0
- package/dist/types.backup/theme/theme-script.d.ts +26 -0
- package/dist/types.backup/theme/types.d.ts +162 -0
- package/dist/types.backup/theme/use-theme.d.ts +8 -0
- package/dist/types.backup/types/boundaries.d.ts +93 -0
- package/dist/types.backup/types/cache-types.d.ts +191 -0
- package/dist/types.backup/types/error-types.d.ts +114 -0
- package/dist/types.backup/types/global-namespace.d.ts +90 -0
- package/dist/types.backup/types/handler-context.d.ts +658 -0
- package/dist/types.backup/types/index.d.ts +11 -0
- package/dist/types.backup/types/loader-types.d.ts +182 -0
- package/dist/types.backup/types/request-scope.d.ts +93 -0
- package/dist/types.backup/types/route-config.d.ts +105 -0
- package/dist/types.backup/types/route-entry.d.ts +95 -0
- package/dist/types.backup/types/segments.d.ts +234 -0
- package/dist/types.backup/types.d.ts +1 -0
- package/dist/types.backup/urls/include-helper.d.ts +17 -0
- package/dist/types.backup/urls/include-provider.d.ts +27 -0
- package/dist/types.backup/urls/index.d.ts +6 -0
- package/dist/types.backup/urls/path-helper-types.d.ts +197 -0
- package/dist/types.backup/urls/path-helper.d.ts +12 -0
- package/dist/types.backup/urls/pattern-types.d.ts +166 -0
- package/dist/types.backup/urls/response-types.d.ts +67 -0
- package/dist/types.backup/urls/type-extraction.d.ts +157 -0
- package/dist/types.backup/urls/urls-function.d.ts +24 -0
- package/dist/types.backup/urls.d.ts +1 -0
- package/dist/types.backup/use-loader.d.ts +150 -0
- package/dist/types.backup/vercel/index.d.ts +10 -0
- package/dist/types.backup/vercel/tracing.d.ts +70 -0
- package/dist/types.backup/vite/debug.d.ts +80 -0
- package/dist/types.backup/vite/discovery/bundle-postprocess.d.ts +12 -0
- package/dist/types.backup/vite/discovery/dev-prerender-cache.d.ts +65 -0
- package/dist/types.backup/vite/discovery/discover-routers.d.ts +17 -0
- package/dist/types.backup/vite/discovery/discovery-errors.d.ts +113 -0
- package/dist/types.backup/vite/discovery/gate-state.d.ts +79 -0
- package/dist/types.backup/vite/discovery/prerender-collection.d.ts +24 -0
- package/dist/types.backup/vite/discovery/route-types-writer.d.ts +32 -0
- package/dist/types.backup/vite/discovery/self-gen-tracking.d.ts +22 -0
- package/dist/types.backup/vite/discovery/shell-prerender-phase.d.ts +40 -0
- package/dist/types.backup/vite/discovery/state.d.ts +162 -0
- package/dist/types.backup/vite/discovery/virtual-module-codegen.d.ts +15 -0
- package/dist/types.backup/vite/index.d.ts +11 -0
- package/dist/types.backup/vite/inject-client-debug.d.ts +56 -0
- package/dist/types.backup/vite/plugin-types.d.ts +298 -0
- package/dist/types.backup/vite/plugins/cjs-to-esm.d.ts +6 -0
- package/dist/types.backup/vite/plugins/client-ref-dedup.d.ts +40 -0
- package/dist/types.backup/vite/plugins/client-ref-hashing.d.ts +35 -0
- package/dist/types.backup/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
- package/dist/types.backup/vite/plugins/expose-action-id.d.ts +18 -0
- package/dist/types.backup/vite/plugins/expose-id-utils.d.ts +37 -0
- package/dist/types.backup/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
- package/dist/types.backup/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
- package/dist/types.backup/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
- package/dist/types.backup/vite/plugins/expose-ids/router-transform.d.ts +13 -0
- package/dist/types.backup/vite/plugins/expose-ids/types.d.ts +29 -0
- package/dist/types.backup/vite/plugins/expose-internal-ids.d.ts +6 -0
- package/dist/types.backup/vite/plugins/performance-tracks.d.ts +25 -0
- package/dist/types.backup/vite/plugins/refresh-cmd.d.ts +20 -0
- package/dist/types.backup/vite/plugins/use-cache-transform.d.ts +20 -0
- package/dist/types.backup/vite/plugins/vercel-output.d.ts +85 -0
- package/dist/types.backup/vite/plugins/version-injector.d.ts +21 -0
- package/dist/types.backup/vite/plugins/version-plugin.d.ts +19 -0
- package/dist/types.backup/vite/plugins/virtual-entries.d.ts +36 -0
- package/dist/types.backup/vite/plugins/virtual-stub-plugin.d.ts +7 -0
- package/dist/types.backup/vite/rango.d.ts +29 -0
- package/dist/types.backup/vite/router-discovery.d.ts +23 -0
- package/dist/types.backup/vite/utils/ast-handler-extract.d.ts +64 -0
- package/dist/types.backup/vite/utils/banner.d.ts +2 -0
- package/dist/types.backup/vite/utils/bundle-analysis.d.ts +28 -0
- package/dist/types.backup/vite/utils/client-chunks.d.ts +55 -0
- package/dist/types.backup/vite/utils/directive-prologue.d.ts +16 -0
- package/dist/types.backup/vite/utils/forward-user-plugins.d.ts +37 -0
- package/dist/types.backup/vite/utils/manifest-utils.d.ts +7 -0
- package/dist/types.backup/vite/utils/package-resolution.d.ts +6 -0
- package/dist/types.backup/vite/utils/prerender-utils.d.ts +32 -0
- package/dist/types.backup/vite/utils/shared-utils.d.ts +55 -0
- package/dist/vite/index.js +9695 -3592
- package/package.json +119 -39
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +82 -5
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +232 -34
- package/skills/caching/SKILL.md +375 -19
- package/skills/catalog.json +283 -0
- package/skills/cloudflare/SKILL.md +151 -0
- package/skills/cloudflare/agents/openai.yaml +4 -0
- package/skills/cloudflare/references/d1-and-local-dev.md +131 -0
- package/skills/cloudflare/references/streaming-and-deploy.md +107 -0
- package/skills/cloudflare/references/webhooks-and-crypto.md +147 -0
- package/skills/comparison/SKILL.md +50 -0
- package/skills/comparison/agents/openai.yaml +4 -0
- package/skills/comparison/references/framework-comparison.md +844 -0
- package/skills/composability/SKILL.md +124 -4
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +5 -11
- package/skills/defer-hydration/SKILL.md +235 -0
- package/skills/deployment-caching/SKILL.md +176 -0
- package/skills/document-cache/SKILL.md +116 -58
- package/skills/fonts/SKILL.md +1 -1
- package/skills/handler-use/SKILL.md +12 -10
- package/skills/hooks/SKILL.md +73 -699
- package/skills/hooks/data.md +273 -0
- package/skills/hooks/handle-and-actions.md +103 -0
- package/skills/hooks/navigation.md +110 -0
- package/skills/hooks/outlets.md +62 -0
- package/skills/hooks/state.md +228 -0
- package/skills/hooks/urls.md +135 -0
- package/skills/host-router/SKILL.md +129 -27
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +75 -19
- package/skills/layout/SKILL.md +40 -19
- package/skills/links/SKILL.md +211 -17
- package/skills/loader/SKILL.md +230 -25
- package/skills/middleware/SKILL.md +58 -13
- package/skills/migrate-nextjs/SKILL.md +267 -33
- package/skills/migrate-nextjs/backend-host-swap.md +120 -0
- package/skills/migrate-react-router/SKILL.md +59 -671
- package/skills/migrate-react-router/component-migration.md +196 -0
- package/skills/migrate-react-router/data-and-actions.md +225 -0
- package/skills/migrate-react-router/route-mapping.md +271 -0
- package/skills/mime-routes/SKILL.md +55 -18
- package/skills/observability/SKILL.md +231 -0
- package/skills/parallel/SKILL.md +50 -10
- package/skills/ppr/SKILL.md +904 -0
- package/skills/prerender/SKILL.md +130 -68
- package/skills/rango/SKILL.md +321 -26
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +172 -52
- package/skills/route/SKILL.md +123 -9
- package/skills/router-setup/SKILL.md +53 -9
- package/skills/scripts/SKILL.md +179 -0
- package/skills/server-actions/SKILL.md +776 -0
- package/skills/shell-manifest/SKILL.md +185 -0
- package/skills/streams-and-websockets/SKILL.md +1 -1
- package/skills/tailwind/SKILL.md +28 -4
- package/skills/testing/SKILL.md +131 -0
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +172 -0
- package/skills/testing/client-components.md +131 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +131 -0
- package/skills/testing/loader.md +128 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +122 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +85 -0
- package/skills/testing/server-actions.md +107 -0
- package/skills/testing/server-tree.md +128 -0
- package/skills/testing/setup.md +123 -0
- package/skills/theme/SKILL.md +1 -1
- package/skills/typesafety/SKILL.md +45 -628
- package/skills/typesafety/env-and-bindings.md +254 -0
- package/skills/typesafety/generated-files-and-cli.md +342 -0
- package/skills/typesafety/params-and-search.md +153 -0
- package/skills/typesafety/route-types.md +213 -0
- package/skills/use-cache/SKILL.md +121 -15
- package/skills/vercel/SKILL.md +149 -0
- package/skills/view-transitions/SKILL.md +341 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +0 -65
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +14 -27
- package/src/browser/connection-warmup.ts +134 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/dev-discovery.ts +66 -0
- package/src/browser/event-controller.ts +400 -168
- package/src/browser/history-state.ts +21 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/invalidate-client-cache.ts +52 -0
- package/src/browser/link-interceptor.ts +469 -20
- package/src/browser/logging.ts +28 -0
- package/src/browser/merge-segment-loaders.ts +6 -4
- package/src/browser/navigation-bridge.ts +164 -69
- package/src/browser/navigation-client.ts +199 -96
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +165 -345
- package/src/browser/navigation-transaction.ts +9 -59
- package/src/browser/network-error-handler.ts +34 -7
- package/src/browser/notify-listeners.ts +22 -0
- package/src/browser/partial-update.ts +219 -163
- package/src/browser/prefetch/cache.ts +240 -97
- package/src/browser/prefetch/default-strategy.ts +74 -0
- package/src/browser/prefetch/fetch.ts +317 -51
- package/src/browser/prefetch/invalidation.ts +30 -0
- package/src/browser/prefetch/loader.ts +111 -0
- package/src/browser/prefetch/observer.ts +50 -22
- package/src/browser/prefetch/queue.ts +25 -7
- package/src/browser/prefetch/runtime.ts +6 -0
- package/src/browser/rango-state.ts +177 -114
- package/src/browser/react/Link.tsx +115 -75
- package/src/browser/react/NavigationProvider.tsx +194 -143
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/context.ts +4 -0
- package/src/browser/react/filter-segment-order.ts +66 -7
- package/src/browser/react/index.ts +0 -48
- package/src/browser/react/location-state-shared.ts +178 -8
- package/src/browser/react/location-state.ts +39 -14
- package/src/browser/react/use-action.ts +6 -15
- package/src/browser/react/use-handle.ts +17 -14
- package/src/browser/react/use-href.tsx +8 -1
- package/src/browser/react/use-link-status.ts +33 -8
- package/src/browser/react/use-navigation.ts +10 -5
- package/src/browser/react/use-params.ts +11 -11
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +21 -6
- package/src/browser/react/use-search-params.ts +0 -5
- package/src/browser/react/use-segments.ts +11 -21
- package/src/browser/response-adapter.ts +99 -8
- package/src/browser/rsc-router.tsx +230 -42
- package/src/browser/scroll-restoration.ts +37 -22
- package/src/browser/segment-reconciler.ts +31 -21
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +262 -65
- package/src/browser/types.ts +132 -47
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +213 -184
- package/src/build/generate-route-types.ts +3 -1
- package/src/build/index.ts +11 -3
- package/src/build/merge-full-manifests.ts +161 -0
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +43 -280
- package/src/build/route-types/ast-route-extraction.ts +15 -8
- package/src/build/route-types/codegen.ts +16 -5
- package/src/build/route-types/include-resolution.ts +513 -64
- package/src/build/route-types/param-extraction.ts +6 -3
- package/src/build/route-types/per-module-writer.ts +33 -12
- package/src/build/route-types/router-processing.ts +312 -204
- package/src/build/route-types/scan-filter.ts +1 -1
- package/src/build/route-types/source-scan.ts +216 -0
- package/src/build/runtime-discovery.ts +32 -29
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-exec-scope.ts +47 -0
- package/src/cache/cache-key-utils.ts +73 -15
- package/src/cache/cache-policy.ts +108 -34
- package/src/cache/cache-runtime.ts +566 -121
- package/src/cache/cache-scope.ts +383 -105
- package/src/cache/cache-tag.ts +149 -0
- package/src/cache/cf/cf-base64.ts +33 -0
- package/src/cache/cf/cf-cache-constants.ts +134 -0
- package/src/cache/cf/cf-cache-store.ts +3028 -391
- package/src/cache/cf/cf-cache-types.ts +417 -0
- package/src/cache/cf/cf-kv-utils.ts +84 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +108 -0
- package/src/cache/cf/cf-zone-purge.ts +101 -0
- package/src/cache/cf/index.ts +11 -16
- package/src/cache/document-cache.ts +184 -53
- package/src/cache/handle-snapshot.ts +92 -1
- package/src/cache/index.ts +32 -20
- package/src/cache/memory-segment-store.ts +286 -37
- package/src/cache/profile-registry.ts +46 -31
- package/src/cache/read-through-swr.ts +66 -16
- package/src/cache/search-params-filter.ts +118 -0
- package/src/cache/segment-codec.ts +80 -25
- package/src/cache/shell-snapshot.ts +516 -0
- package/src/cache/tag-invalidation.ts +230 -0
- package/src/cache/taint.ts +28 -9
- package/src/cache/types.ts +323 -100
- package/src/cache/vercel/index.ts +11 -0
- package/src/cache/vercel/vercel-cache-store.ts +1264 -0
- package/src/client-urls/client-root.tsx +161 -0
- package/src/client-urls/client-urls.ts +665 -0
- package/src/client-urls/navigation.ts +237 -0
- package/src/client-urls/revalidation-protocol.ts +56 -0
- package/src/client-urls/server-projection.ts +563 -0
- package/src/client-urls/types.ts +178 -0
- package/src/client.rsc.tsx +48 -21
- package/src/client.tsx +77 -67
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +112 -0
- package/src/component-utils.ts +19 -0
- package/src/components/DefaultDocument.tsx +8 -2
- package/src/context-var.ts +18 -6
- package/src/decode-loader-results.ts +160 -0
- package/src/defer.ts +185 -0
- package/src/deps/ssr.ts +4 -2
- package/src/dev-discovery-protocol.ts +11 -0
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +44 -4
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +67 -37
- package/src/handles/MetaTags.tsx +24 -53
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +35 -8
- package/src/handles/deferred-resolution.ts +134 -0
- package/src/handles/is-thenable.ts +16 -0
- package/src/handles/meta.ts +14 -40
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +9 -60
- package/src/host/errors.ts +13 -22
- package/src/host/index.ts +9 -2
- package/src/host/pattern-matcher.ts +23 -52
- package/src/host/router.ts +107 -99
- package/src/host/testing.ts +40 -27
- package/src/host/types.ts +37 -4
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +137 -22
- package/src/index.rsc.ts +105 -12
- package/src/index.ts +102 -14
- package/src/internal-debug.ts +11 -10
- package/src/loader-redirect.tsx +47 -0
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +20 -13
- package/src/loader.ts +12 -11
- package/src/missing-id-error.ts +68 -0
- package/src/outlet-context.ts +12 -0
- package/src/outlet-provider.tsx +16 -6
- package/src/prerender/build-shell-capture.ts +453 -0
- package/src/prerender/param-hash.ts +16 -16
- package/src/prerender/shell-manifest-key.ts +20 -0
- package/src/prerender/store.ts +47 -38
- package/src/prerender.ts +81 -13
- package/src/redirect-origin.ts +143 -0
- package/src/regex-escape.ts +8 -0
- package/src/render-error-thrower.tsx +20 -0
- package/src/response-utils.ts +34 -0
- package/src/reverse.ts +65 -40
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +112 -78
- package/src/route-definition/dsl-helpers.ts +300 -313
- package/src/route-definition/helper-factories.ts +28 -140
- package/src/route-definition/helpers-types.ts +92 -62
- package/src/route-definition/index.ts +1 -2
- package/src/route-definition/redirect.ts +44 -11
- package/src/route-definition/resolve-handler-use.ts +6 -1
- package/src/route-definition/use-item-types.ts +29 -0
- package/src/route-map-builder.ts +102 -74
- package/src/route-types.ts +19 -46
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +120 -30
- package/src/router/error-handling.ts +110 -29
- package/src/router/find-match.ts +129 -30
- package/src/router/handler-context.ts +41 -57
- package/src/router/instrument.ts +401 -0
- package/src/router/intercept-resolution.ts +98 -21
- package/src/router/lazy-includes.ts +82 -58
- package/src/router/loader-resolution.ts +401 -85
- package/src/router/logging.ts +0 -6
- package/src/router/manifest.ts +74 -40
- package/src/router/match-api.ts +91 -55
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +268 -171
- package/src/router/match-middleware/background-revalidation.ts +40 -24
- package/src/router/match-middleware/cache-lookup.ts +316 -302
- package/src/router/match-middleware/cache-store.ts +134 -52
- package/src/router/match-middleware/intercept-resolution.ts +0 -22
- package/src/router/match-middleware/segment-resolution.ts +0 -22
- package/src/router/match-pipelines.ts +1 -42
- package/src/router/match-result.ts +76 -79
- package/src/router/metrics.ts +17 -36
- package/src/router/middleware-types.ts +20 -110
- package/src/router/middleware.ts +275 -173
- package/src/router/navigation-snapshot.ts +51 -60
- package/src/router/params-util.ts +23 -0
- package/src/router/parse-pattern.ts +115 -0
- package/src/router/pattern-matching.ts +134 -154
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prefetch-default.ts +59 -0
- package/src/router/prefetch-limits.ts +37 -0
- package/src/router/prerender-match.ts +159 -69
- package/src/router/preview-match.ts +6 -2
- package/src/router/request-classification.ts +50 -69
- package/src/router/revalidation.ts +146 -83
- package/src/router/route-snapshot.ts +14 -3
- package/src/router/route-trie-builder.ts +334 -0
- package/src/router/router-context.ts +6 -29
- package/src/router/router-interfaces.ts +168 -38
- package/src/router/router-options.ts +235 -11
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +163 -88
- package/src/router/segment-resolution/helpers.ts +96 -18
- package/src/router/segment-resolution/loader-cache.ts +187 -39
- package/src/router/segment-resolution/loader-mask.ts +60 -0
- package/src/router/segment-resolution/loader-snapshot.ts +259 -0
- package/src/router/segment-resolution/mask-nested.ts +99 -0
- package/src/router/segment-resolution/revalidation.ts +316 -321
- package/src/router/segment-resolution/static-store.ts +55 -15
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution/view-transition-default.ts +60 -0
- package/src/router/segment-resolution.ts +5 -1
- package/src/router/segment-wrappers.ts +6 -5
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/substitute-pattern-params.ts +75 -0
- package/src/router/telemetry-otel.ts +171 -200
- package/src/router/telemetry.ts +106 -20
- package/src/router/timeout.ts +53 -22
- package/src/router/tracing.ts +235 -0
- package/src/router/transition-when.ts +76 -0
- package/src/router/trie-matching.ts +170 -64
- package/src/router/types.ts +9 -63
- package/src/router/url-params.ts +13 -5
- package/src/router.ts +248 -77
- package/src/rsc/capture-queue.ts +218 -0
- package/src/rsc/full-payload.ts +77 -0
- package/src/rsc/handler-context.ts +4 -2
- package/src/rsc/handler.ts +562 -284
- package/src/rsc/helpers.ts +179 -9
- package/src/rsc/index.ts +2 -5
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +116 -40
- package/src/rsc/manifest-init.ts +55 -56
- package/src/rsc/nonce.ts +10 -1
- package/src/rsc/origin-guard.ts +39 -25
- package/src/rsc/progressive-enhancement.ts +377 -84
- package/src/rsc/redirect-guard.ts +102 -0
- package/src/rsc/render-pipeline.ts +611 -0
- package/src/rsc/response-cache-serve.ts +259 -0
- package/src/rsc/response-error.ts +79 -12
- package/src/rsc/response-route-handler.ts +73 -212
- package/src/rsc/routine-plan.ts +359 -0
- package/src/rsc/rsc-rendering.ts +1624 -171
- package/src/rsc/runtime-warnings.ts +23 -10
- package/src/rsc/server-action.ts +420 -139
- package/src/rsc/shell-build-manifest.ts +336 -0
- package/src/rsc/shell-capture-constants.ts +45 -0
- package/src/rsc/shell-capture.ts +2063 -0
- package/src/rsc/shell-serve.ts +337 -0
- package/src/rsc/ssr-setup.ts +111 -16
- package/src/rsc/stream-idle.ts +137 -0
- package/src/rsc/transition-gate.ts +86 -0
- package/src/rsc/types.ts +91 -5
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +35 -30
- package/src/segment-fragments.ts +165 -0
- package/src/segment-loader-promise.ts +49 -4
- package/src/segment-system.tsx +441 -153
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +416 -55
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +162 -15
- package/src/server/handle-store.ts +190 -70
- package/src/server/loader-registry.ts +33 -42
- package/src/server/request-context.ts +805 -177
- package/src/server.ts +7 -2
- package/src/ssr/index.tsx +631 -183
- package/src/ssr/inject-rsc-eager.ts +167 -0
- package/src/ssr/preinit-client-references.ts +106 -0
- package/src/ssr/ssr-root.tsx +262 -0
- package/src/static-handler.ts +28 -15
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +46 -0
- package/src/testing/dispatch.ts +951 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +147 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +319 -0
- package/src/testing/e2e/parity.ts +400 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +257 -0
- package/src/testing/generated-routes.ts +199 -0
- package/src/testing/index.ts +121 -0
- package/src/testing/internal/context.ts +380 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +371 -0
- package/src/testing/render-route.tsx +667 -0
- package/src/testing/run-loader.ts +423 -0
- package/src/testing/run-middleware.ts +219 -0
- package/src/testing/run-transition-when.ts +197 -0
- package/src/testing/shell-status.ts +206 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +305 -0
- package/src/theme/ThemeProvider.tsx +56 -84
- package/src/theme/ThemeScript.tsx +7 -9
- package/src/theme/constants.ts +52 -13
- package/src/theme/index.ts +0 -7
- package/src/theme/theme-context.ts +1 -5
- package/src/theme/theme-script.ts +22 -21
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +15 -35
- package/src/types/cache-types.ts +13 -4
- package/src/types/error-types.ts +30 -90
- package/src/types/global-namespace.ts +54 -41
- package/src/types/handler-context.ts +121 -30
- package/src/types/index.ts +3 -10
- package/src/types/loader-types.ts +38 -7
- package/src/types/request-scope.ts +8 -22
- package/src/types/route-config.ts +20 -52
- package/src/types/route-entry.ts +3 -6
- package/src/types/segments.ts +147 -14
- package/src/urls/include-helper.ts +38 -64
- package/src/urls/include-provider.ts +71 -0
- package/src/urls/index.ts +2 -11
- package/src/urls/path-helper-types.ts +76 -24
- package/src/urls/path-helper.ts +30 -110
- package/src/urls/pattern-types.ts +101 -19
- package/src/urls/response-types.ts +20 -19
- package/src/urls/type-extraction.ts +98 -154
- package/src/urls/urls-function.ts +1 -19
- package/src/use-loader.tsx +355 -109
- package/src/vercel/index.ts +11 -0
- package/src/vercel/tracing.ts +89 -0
- package/src/vite/debug.ts +102 -3
- package/src/vite/discovery/bundle-postprocess.ts +18 -14
- package/src/vite/discovery/client-urls-projection.ts +322 -0
- package/src/vite/discovery/dev-prerender-cache.ts +117 -0
- package/src/vite/discovery/discover-routers.ts +178 -151
- package/src/vite/discovery/discovery-errors.ts +255 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +125 -70
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/shell-prerender-phase.ts +397 -0
- package/src/vite/discovery/state.ts +104 -6
- package/src/vite/discovery/virtual-module-codegen.ts +226 -87
- package/src/vite/encryption-key.ts +29 -0
- package/src/vite/index.ts +12 -0
- package/src/vite/inject-client-debug.ts +88 -0
- package/src/vite/plugin-types.ts +243 -10
- package/src/vite/plugins/cjs-to-esm.ts +16 -19
- package/src/vite/plugins/client-ref-dedup.ts +16 -11
- package/src/vite/plugins/client-ref-hashing.ts +28 -15
- package/src/vite/plugins/cloudflare-protocol-stub.ts +1 -21
- package/src/vite/plugins/expose-action-id.ts +50 -97
- package/src/vite/plugins/expose-id-utils.ts +88 -55
- package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
- package/src/vite/plugins/expose-ids/handler-transform.ts +11 -90
- package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
- package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
- package/src/vite/plugins/expose-internal-ids.ts +551 -486
- package/src/vite/plugins/performance-tracks.ts +25 -22
- package/src/vite/plugins/refresh-cmd.ts +1 -1
- package/src/vite/plugins/server-ref-hashing.ts +74 -0
- package/src/vite/plugins/server-reference-pattern.ts +10 -0
- package/src/vite/plugins/use-cache-transform.ts +73 -83
- package/src/vite/plugins/vercel-output.ts +384 -0
- package/src/vite/plugins/version-injector.ts +39 -29
- package/src/vite/plugins/version-plugin.ts +45 -40
- package/src/vite/plugins/virtual-entries.ts +193 -30
- package/src/vite/rango.ts +240 -128
- package/src/vite/router-discovery.ts +1518 -174
- package/src/vite/utils/ast-handler-extract.ts +26 -35
- package/src/vite/utils/bundle-analysis.ts +10 -15
- package/src/vite/utils/client-chunks.ts +184 -0
- package/src/vite/utils/directive-prologue.ts +40 -0
- package/src/vite/utils/forward-user-plugins.ts +171 -0
- package/src/vite/utils/manifest-utils.ts +1 -59
- package/src/vite/utils/package-resolution.ts +2 -73
- package/src/vite/utils/prerender-utils.ts +96 -49
- package/src/vite/utils/shared-utils.ts +156 -43
- package/src/browser/action-response-classifier.ts +0 -99
- package/src/browser/react/use-client-cache.ts +0 -58
- package/src/browser/shallow.ts +0 -40
- package/src/handles/index.ts +0 -7
- package/src/network-error-thrower.tsx +0 -23
- package/src/router/middleware-cookies.ts +0 -55
package/src/ssr/index.tsx
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { NavigationStoreContext } from "../browser/react/context.js";
|
|
7
|
-
import type { NavigationStoreContextValue } from "../browser/react/context.js";
|
|
8
|
-
import type { HandleData } from "../browser/types.js";
|
|
2
|
+
import { createSsrRootComponent } from "./ssr-root.js";
|
|
3
|
+
import { injectRSCPayloadEager } from "./inject-rsc-eager.js";
|
|
4
|
+
import { runWithPreinitNonce } from "./preinit-client-references.js";
|
|
5
|
+
import { SHELL_CAPTURE_MAX_WAIT_MS } from "../rsc/shell-capture-constants.js";
|
|
9
6
|
import type { ErrorPhase } from "../types.js";
|
|
10
|
-
import type {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
EventController,
|
|
14
|
-
DerivedNavigationState,
|
|
15
|
-
} from "../browser/event-controller.js";
|
|
7
|
+
import type { HeadScriptsOption } from "../vite/plugin-types.js";
|
|
8
|
+
|
|
9
|
+
export { installClientReferencePreinit } from "./preinit-client-references.js";
|
|
16
10
|
|
|
17
11
|
/**
|
|
18
12
|
* Options for injectRSCPayload
|
|
@@ -29,6 +23,7 @@ export interface InjectRSCPayloadOptions {
|
|
|
29
23
|
*/
|
|
30
24
|
interface RenderToReadableStreamOptions {
|
|
31
25
|
bootstrapScriptContent?: string;
|
|
26
|
+
bootstrapModules?: string[];
|
|
32
27
|
nonce?: string;
|
|
33
28
|
formState?: unknown;
|
|
34
29
|
}
|
|
@@ -40,6 +35,52 @@ interface ReactDOMReadableStream extends ReadableStream<Uint8Array> {
|
|
|
40
35
|
allReady: Promise<void>;
|
|
41
36
|
}
|
|
42
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Options for prerender from react-dom/static.edge
|
|
40
|
+
*/
|
|
41
|
+
interface PrerenderOptions {
|
|
42
|
+
signal?: AbortSignal;
|
|
43
|
+
bootstrapScriptContent?: string;
|
|
44
|
+
bootstrapModules?: string[];
|
|
45
|
+
onError?: (error: unknown) => void;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Result of prerender from react-dom/static.edge. `postponed` is React's
|
|
50
|
+
* opaque resume state — non-null when the render was aborted with pending
|
|
51
|
+
* holes, null when the shell completed with nothing left to stream.
|
|
52
|
+
*/
|
|
53
|
+
interface PrerenderResult {
|
|
54
|
+
prelude: ReadableStream<Uint8Array>;
|
|
55
|
+
postponed: unknown;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* prerender from react-dom/static.edge
|
|
60
|
+
*/
|
|
61
|
+
type PrerenderFn = (
|
|
62
|
+
element: React.ReactNode,
|
|
63
|
+
options?: PrerenderOptions,
|
|
64
|
+
) => Promise<PrerenderResult>;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Options for resume from react-dom/server.edge
|
|
68
|
+
*/
|
|
69
|
+
interface ResumeOptions {
|
|
70
|
+
onError?: (error: unknown) => void;
|
|
71
|
+
nonce?: string;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* resume from react-dom/server.edge — continues a prerendered render, emitting
|
|
76
|
+
* only the postponed holes.
|
|
77
|
+
*/
|
|
78
|
+
type ResumeFn = (
|
|
79
|
+
element: React.ReactNode,
|
|
80
|
+
postponedState: unknown,
|
|
81
|
+
options?: ResumeOptions,
|
|
82
|
+
) => Promise<ReactDOMReadableStream>;
|
|
83
|
+
|
|
43
84
|
/**
|
|
44
85
|
* Options for the renderHTML function
|
|
45
86
|
*/
|
|
@@ -71,7 +112,7 @@ export interface SSRRenderOptions {
|
|
|
71
112
|
*/
|
|
72
113
|
export interface SSRDependencies<TEnv = unknown> {
|
|
73
114
|
/**
|
|
74
|
-
* createFromReadableStream from @
|
|
115
|
+
* createFromReadableStream from @rangojs/router/internal/deps/ssr
|
|
75
116
|
*/
|
|
76
117
|
createFromReadableStream: <T>(
|
|
77
118
|
stream: ReadableStream<Uint8Array>,
|
|
@@ -86,7 +127,7 @@ export interface SSRDependencies<TEnv = unknown> {
|
|
|
86
127
|
) => Promise<ReactDOMReadableStream>;
|
|
87
128
|
|
|
88
129
|
/**
|
|
89
|
-
* injectRSCPayload from
|
|
130
|
+
* injectRSCPayload from @rangojs/router/internal/deps/html-stream-server
|
|
90
131
|
*/
|
|
91
132
|
injectRSCPayload: (
|
|
92
133
|
rscStream: ReadableStream<Uint8Array>,
|
|
@@ -99,6 +140,29 @@ export interface SSRDependencies<TEnv = unknown> {
|
|
|
99
140
|
*/
|
|
100
141
|
loadBootstrapScriptContent: () => Promise<string>;
|
|
101
142
|
|
|
143
|
+
/**
|
|
144
|
+
* Document script strategy; the generated virtual SSR entry threads the
|
|
145
|
+
* `rango({ headScripts })` plugin option here (canonical docs on
|
|
146
|
+
* `RangoBaseOptions.headScripts` in vite/plugin-types.ts). The
|
|
147
|
+
* bootstrapModules conversion runs ONLY on an explicit `"preinit"`:
|
|
148
|
+
* undefined keeps the inline bootstrap verbatim, so a custom SSR entry that
|
|
149
|
+
* never installed the preinit hook cannot drift into the half-converted
|
|
150
|
+
* state on upgrade (the generated entry always passes an explicit value).
|
|
151
|
+
*/
|
|
152
|
+
headScripts?: HeadScriptsOption;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* prerender from react-dom/static.edge. Optional; required only by
|
|
156
|
+
* {@link createShellCaptureHandler} for PPR shell capture.
|
|
157
|
+
*/
|
|
158
|
+
prerender?: PrerenderFn;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* resume from react-dom/server.edge. Optional; required only by
|
|
162
|
+
* {@link createShellResumeHandler} for resuming a postponed shell.
|
|
163
|
+
*/
|
|
164
|
+
resume?: ResumeFn;
|
|
165
|
+
|
|
102
166
|
/**
|
|
103
167
|
* Optional callback invoked when an error occurs during SSR rendering.
|
|
104
168
|
*
|
|
@@ -119,94 +183,232 @@ export interface SSRDependencies<TEnv = unknown> {
|
|
|
119
183
|
}
|
|
120
184
|
|
|
121
185
|
/**
|
|
122
|
-
*
|
|
186
|
+
* Fixed number of macrotask hops between `quiesce` resolving and the abort. These
|
|
187
|
+
* give React's fizz worker turns to flush the settled shell into the prelude and
|
|
188
|
+
* mark still-pending boundaries as POSTPONED (rather than errored) before
|
|
189
|
+
* controller.abort() lands. Not a wall-clock wait.
|
|
190
|
+
*
|
|
191
|
+
* Why 16 and not the original 2: under the REPLAY-ONLY capture model
|
|
192
|
+
* (docs/design/ppr-shell-resume.md), the capture Flight render serializes ring-3
|
|
193
|
+
* cached segments that are ALREADY serialized, so it emits the whole shell payload
|
|
194
|
+
* in the first tick and the gate declares quiesce almost immediately (~a few ms).
|
|
195
|
+
* On the old fresh-execution path the Flight dribbled out as handlers ran, so
|
|
196
|
+
* Flight-quiet effectively meant "the shell has rendered" and 2 hops sufficed.
|
|
197
|
+
*
|
|
198
|
+
* Hops alone are NOT render-readiness: fizz cannot emit even <html> until the
|
|
199
|
+
* payload root settles, which waits on every referenced client-module LOAD —
|
|
200
|
+
* real module-runner I/O in dev (100ms+ cold), which no fixed count of near-
|
|
201
|
+
* zero-cost task hops can buy. captureShellHTML therefore awaits the payload-
|
|
202
|
+
* settled signal (SsrRootOptions.onPayloadSettled, deadline-bounded) between
|
|
203
|
+
* quiesce and these hops; the hops then only flush the settled tree and mark
|
|
204
|
+
* pending boundaries POSTPONED. Still task-based (masked loaders never emit,
|
|
205
|
+
* so more hops never lets a hole settle). Bounded by maxWaitMs end to end.
|
|
123
206
|
*/
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
207
|
+
const POST_QUIESCE_TASK_HOPS = 16;
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Route an SSR error through the deps.onError notification callback with the
|
|
211
|
+
* "rendering" phase. Swallows callback failures so a broken reporter never
|
|
212
|
+
* masks the original error. Shared by renderHTML, capture, and resume so the
|
|
213
|
+
* onError contract is identical across all three handlers.
|
|
214
|
+
*/
|
|
215
|
+
function reportRenderError(
|
|
216
|
+
onError: SSRDependencies["onError"],
|
|
217
|
+
error: unknown,
|
|
218
|
+
): void {
|
|
219
|
+
if (onError) {
|
|
220
|
+
const errorObj = error instanceof Error ? error : new Error(String(error));
|
|
221
|
+
try {
|
|
222
|
+
onError(errorObj, { phase: "rendering" });
|
|
223
|
+
} catch (callbackError) {
|
|
224
|
+
console.error("[SSRHandler.onError] Callback error:", callbackError);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
137
227
|
}
|
|
138
228
|
|
|
139
229
|
/**
|
|
140
|
-
*
|
|
141
|
-
*
|
|
230
|
+
* Yield one macrotask. Used by capture to let React's fizz worker flush the
|
|
231
|
+
* shell and mark still-pending boundaries as postponed before the abort.
|
|
142
232
|
*/
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
233
|
+
function macrotask(): Promise<void> {
|
|
234
|
+
return new Promise((resolve) => setTimeout(resolve, 0));
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* A timeout promise paired with a cancel() so the pending timer is cleared once
|
|
239
|
+
* the race is decided — otherwise the maxWait timer keeps the event loop alive
|
|
240
|
+
* for the full duration even after `quiesce` won.
|
|
241
|
+
*/
|
|
242
|
+
function createCancelableTimeout(ms: number): {
|
|
243
|
+
promise: Promise<void>;
|
|
244
|
+
cancel: () => void;
|
|
245
|
+
} {
|
|
246
|
+
let id: ReturnType<typeof setTimeout> | undefined;
|
|
247
|
+
const promise = new Promise<void>((resolve) => {
|
|
248
|
+
id = setTimeout(resolve, ms);
|
|
249
|
+
});
|
|
250
|
+
return { promise, cancel: () => clearTimeout(id) };
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* True when a debugger is attached outside a production build: a breakpoint
|
|
255
|
+
* pauses script execution but not wall-clock, so the capture deadline would
|
|
256
|
+
* expire mid-inspection and push the key into refusal/backoff while debugging.
|
|
257
|
+
* Next.js precedent (packages/next/src/export/worker.ts): its static-page
|
|
258
|
+
* timeout race is disabled when NODE_OPTIONS contains --inspect. The gate is
|
|
259
|
+
* the bare `process.env.NODE_ENV !== "production"` token — the build define
|
|
260
|
+
* folds exactly that token to a literal (same dev signal as shell-capture.ts's
|
|
261
|
+
* isDevMode), and it covers dev servers that never set NODE_ENV, the common
|
|
262
|
+
* debug case. A production worker launched with --inspect in NODE_OPTIONS
|
|
263
|
+
* keeps the capture's safety bound unconditionally. Every probe is guarded:
|
|
264
|
+
* `process` reads are optional-chained and the node:inspector import is
|
|
265
|
+
* try/caught, so non-Node runtimes (workerd) resolve to false instead of
|
|
266
|
+
* breaking.
|
|
267
|
+
*/
|
|
268
|
+
export async function isDebuggerAttached(): Promise<boolean> {
|
|
269
|
+
if (process.env.NODE_ENV === "production") return false;
|
|
270
|
+
try {
|
|
271
|
+
// Substring match also catches --inspect-brk / --inspect=PORT.
|
|
272
|
+
if (globalThis.process?.env?.NODE_OPTIONS?.includes("--inspect")) {
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
if (globalThis.process?.execArgv?.some((a) => a.startsWith("--inspect"))) {
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
278
|
+
const inspector = await import("node:inspector");
|
|
279
|
+
return inspector.url() !== undefined;
|
|
280
|
+
} catch {
|
|
281
|
+
return false;
|
|
149
282
|
}
|
|
150
|
-
return lastData;
|
|
151
283
|
}
|
|
152
284
|
|
|
153
285
|
/**
|
|
154
|
-
*
|
|
155
|
-
*
|
|
286
|
+
* Drain a ReadableStream fully into a single Uint8Array. Capture buffers the
|
|
287
|
+
* whole prelude so it can be stored and later prepended byte-for-byte.
|
|
156
288
|
*/
|
|
157
|
-
function
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
289
|
+
async function readStreamToUint8Array(
|
|
290
|
+
stream: ReadableStream<Uint8Array>,
|
|
291
|
+
): Promise<Uint8Array> {
|
|
292
|
+
const reader = stream.getReader();
|
|
293
|
+
const chunks: Uint8Array[] = [];
|
|
294
|
+
let total = 0;
|
|
295
|
+
try {
|
|
296
|
+
while (true) {
|
|
297
|
+
const { done, value } = await reader.read();
|
|
298
|
+
if (done) break;
|
|
299
|
+
chunks.push(value);
|
|
300
|
+
total += value.length;
|
|
301
|
+
}
|
|
302
|
+
} catch (error) {
|
|
303
|
+
// Mid-read abort path (documented): the prelude stream errors with our
|
|
304
|
+
// abort reason while we are still reading it. Cancel the source before
|
|
305
|
+
// rethrowing so it is not left uncancelled; releaseLock always runs in
|
|
306
|
+
// finally. Mirrors src/rsc/rsc-rendering.ts's serve-side reader cleanup.
|
|
307
|
+
reader.cancel(error).catch(() => {});
|
|
308
|
+
throw error;
|
|
309
|
+
} finally {
|
|
310
|
+
reader.releaseLock();
|
|
311
|
+
}
|
|
312
|
+
const out = new Uint8Array(total);
|
|
313
|
+
let offset = 0;
|
|
314
|
+
for (const chunk of chunks) {
|
|
315
|
+
out.set(chunk, offset);
|
|
316
|
+
offset += chunk.length;
|
|
317
|
+
}
|
|
318
|
+
return out;
|
|
319
|
+
}
|
|
177
320
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
params = nextParams;
|
|
195
|
-
},
|
|
196
|
-
getParams: () => params,
|
|
197
|
-
setLocation: () => {},
|
|
198
|
-
startNavigation: () => {
|
|
199
|
-
throw new Error("Navigation not supported during SSR");
|
|
200
|
-
},
|
|
201
|
-
abortNavigation: () => {},
|
|
202
|
-
startAction: () => {
|
|
203
|
-
throw new Error("Actions not supported during SSR");
|
|
321
|
+
/**
|
|
322
|
+
* A minimal HTML stream for the resume DATA variant: one empty chunk, then
|
|
323
|
+
* close.
|
|
324
|
+
*
|
|
325
|
+
* injectRSCPayload only resolves its internal flight-data promise (and thus
|
|
326
|
+
* only writes the Flight payload <script> pushes) from inside transform()'s
|
|
327
|
+
* scheduled callback. A stream that closes without ever emitting a chunk never
|
|
328
|
+
* runs transform, so its flush() awaits a promise that is never resolved and
|
|
329
|
+
* the output deadlocks. Emitting a single empty chunk runs transform once,
|
|
330
|
+
* which is enough for the payload to be written and the trailer appended.
|
|
331
|
+
*/
|
|
332
|
+
function createDataVariantHtmlStream(): ReadableStream<Uint8Array> {
|
|
333
|
+
return new ReadableStream({
|
|
334
|
+
start(controller) {
|
|
335
|
+
controller.enqueue(new Uint8Array(0));
|
|
336
|
+
controller.close();
|
|
204
337
|
},
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Options for the captureShellHTML function returned by
|
|
343
|
+
* {@link createShellCaptureHandler}.
|
|
344
|
+
*/
|
|
345
|
+
interface ShellCaptureOptions {
|
|
346
|
+
/** Caller-provided promise that resolves once the cached content settled. */
|
|
347
|
+
quiesce: Promise<void>;
|
|
348
|
+
/** Upper bound on how long to wait for `quiesce`. Default SHELL_CAPTURE_MAX_WAIT_MS. */
|
|
349
|
+
maxWaitMs?: number;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Result of a successful shell capture. `prelude` is the raw prelude bytes;
|
|
354
|
+
* `postponed` is React's resume state serialized to JSON, or null when the
|
|
355
|
+
* shell completed with no holes (the DATA variant).
|
|
356
|
+
*/
|
|
357
|
+
interface ShellCaptureResult {
|
|
358
|
+
prelude: Uint8Array;
|
|
359
|
+
postponed: string | null;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Options for the resumeShellHTML function returned by
|
|
364
|
+
* {@link createShellResumeHandler}.
|
|
365
|
+
*/
|
|
366
|
+
interface ShellResumeOptions {
|
|
367
|
+
/** JSON from capture; null selects the DATA variant (no fizz). */
|
|
368
|
+
postponed: string | null;
|
|
369
|
+
/** Nonce for CSP. */
|
|
370
|
+
nonce?: string;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* The exact shape plugin-rsc's loadBootstrapScriptContent returns in both dev
|
|
375
|
+
* and build: a single dynamic import of the browser entry, nothing else.
|
|
376
|
+
* Escapes/other statements never appear in that generated content; anything
|
|
377
|
+
* that doesn't match falls back to inline bootstrapScriptContent unchanged.
|
|
378
|
+
*/
|
|
379
|
+
const BOOTSTRAP_IMPORT_ONLY_RE =
|
|
380
|
+
/^\s*import\(\s*(["'])([^"'\\]+)\1\s*\)\s*;?\s*$/;
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Prefer bootstrapModules over the inline import() bootstrap. When the content
|
|
384
|
+
* is exactly `import("<entry-url>")`, hand Fizz the URL instead: React then
|
|
385
|
+
* emits a `<link rel="modulepreload" fetchpriority="low">` hint in the head
|
|
386
|
+
* plus the executing `<script type="module" src async>` at end of shell — the
|
|
387
|
+
* entry fetch starts with the first flushed bytes instead of when the parser
|
|
388
|
+
* reaches an opaque inline script that only reveals the URL once executed.
|
|
389
|
+
* Fizz stamps the request nonce on both tags (the inline form needed that
|
|
390
|
+
* too), and under PPR both land in the stored prelude; on resume React has
|
|
391
|
+
* already cleared the bootstrap fields from the postponed state, so nothing
|
|
392
|
+
* re-emits.
|
|
393
|
+
*/
|
|
394
|
+
function resolveBootstrapOptions(
|
|
395
|
+
content: string,
|
|
396
|
+
headScripts: SSRDependencies["headScripts"],
|
|
397
|
+
): Pick<
|
|
398
|
+
RenderToReadableStreamOptions,
|
|
399
|
+
"bootstrapScriptContent" | "bootstrapModules"
|
|
400
|
+
> {
|
|
401
|
+
// Explicit opt-in only: undefined (a custom SSR entry that predates the
|
|
402
|
+
// option, which also never installed the preinit hook) keeps the inline
|
|
403
|
+
// bootstrap byte-for-byte — converting by default would break CSPs that
|
|
404
|
+
// allowlist the known inline import() via a script hash.
|
|
405
|
+
if (headScripts !== "preinit") {
|
|
406
|
+
return { bootstrapScriptContent: content };
|
|
407
|
+
}
|
|
408
|
+
const match = BOOTSTRAP_IMPORT_ONLY_RE.exec(content);
|
|
409
|
+
return match
|
|
410
|
+
? { bootstrapModules: [match[2]!] }
|
|
411
|
+
: { bootstrapScriptContent: content };
|
|
210
412
|
}
|
|
211
413
|
|
|
212
414
|
/**
|
|
@@ -214,10 +416,10 @@ function createSsrEventController(opts: {
|
|
|
214
416
|
*
|
|
215
417
|
* @example
|
|
216
418
|
* ```tsx
|
|
217
|
-
* import { createSSRHandler } from "
|
|
218
|
-
* import { createFromReadableStream } from "@
|
|
419
|
+
* import { createSSRHandler } from "@rangojs/router/ssr";
|
|
420
|
+
* import { createFromReadableStream } from "@rangojs/router/internal/deps/ssr";
|
|
219
421
|
* import { renderToReadableStream } from "react-dom/server.edge";
|
|
220
|
-
* import { injectRSCPayload } from "
|
|
422
|
+
* import { injectRSCPayload } from "@rangojs/router/internal/deps/html-stream-server";
|
|
221
423
|
*
|
|
222
424
|
* export const renderHTML = createSSRHandler({
|
|
223
425
|
* createFromReadableStream,
|
|
@@ -255,93 +457,27 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
|
|
|
255
457
|
// - rscStream2: For browser hydration (inject as __FLIGHT_DATA__)
|
|
256
458
|
const [rscStream1, rscStream2] = rscStream.tee();
|
|
257
459
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
payload ??= createFromReadableStream<RscPayload>(rscStream1);
|
|
264
|
-
const resolved = React.use(payload);
|
|
265
|
-
|
|
266
|
-
const themeConfig = resolved.metadata?.themeConfig ?? null;
|
|
267
|
-
const pathname = resolved.metadata?.pathname ?? "/";
|
|
268
|
-
|
|
269
|
-
// Await handles before creating SSR event controller so hooks can
|
|
270
|
-
// read request-local handle data via NavigationStoreContext.
|
|
271
|
-
// The handles property is an async generator that yields on each push
|
|
272
|
-
// Memoize the promise since async generators can only be iterated once
|
|
273
|
-
let handleData: HandleData = {};
|
|
274
|
-
if (resolved.metadata?.handles) {
|
|
275
|
-
handlesPromise ??= consumeAsyncGenerator(resolved.metadata.handles);
|
|
276
|
-
handleData = React.use(handlesPromise);
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
// Create SSR context with request-local pathname/params/handles.
|
|
280
|
-
ssrContextValue ??= {
|
|
281
|
-
store: null as any,
|
|
282
|
-
eventController: createSsrEventController({
|
|
283
|
-
pathname,
|
|
284
|
-
params: resolved.metadata?.params,
|
|
285
|
-
handleData,
|
|
286
|
-
matched: resolved.metadata?.matched,
|
|
287
|
-
}),
|
|
288
|
-
navigate: async () => {},
|
|
289
|
-
refresh: async () => {},
|
|
290
|
-
version: resolved.metadata?.version,
|
|
291
|
-
basename: resolved.metadata?.basename,
|
|
292
|
-
};
|
|
293
|
-
|
|
294
|
-
// Build content tree from segments.
|
|
295
|
-
// Order must match NavigationProvider: NavigationStoreContext > ThemeProvider > content
|
|
296
|
-
const reconstructedRoot = renderSegments(
|
|
297
|
-
resolved.metadata?.segments ?? [],
|
|
298
|
-
{
|
|
299
|
-
rootLayout: resolved.metadata?.rootLayout,
|
|
300
|
-
},
|
|
301
|
-
);
|
|
302
|
-
let content: React.ReactNode =
|
|
303
|
-
reconstructedRoot instanceof Promise
|
|
304
|
-
? React.use(reconstructedRoot)
|
|
305
|
-
: reconstructedRoot;
|
|
306
|
-
|
|
307
|
-
// Wrap content with ThemeProvider if theme is enabled
|
|
308
|
-
if (themeConfig) {
|
|
309
|
-
content = (
|
|
310
|
-
<ThemeProvider
|
|
311
|
-
config={themeConfig}
|
|
312
|
-
initialTheme={resolved.metadata?.initialTheme}
|
|
313
|
-
>
|
|
314
|
-
{content}
|
|
315
|
-
</ThemeProvider>
|
|
316
|
-
);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
// Wrap with NonceContext so client components (e.g. MetaTags) can
|
|
320
|
-
// apply CSP nonces to inline scripts during SSR. Always present to
|
|
321
|
-
// match the browser-side NavigationProvider tree shape for hydration.
|
|
322
|
-
content = (
|
|
323
|
-
<NonceContext.Provider value={nonce}>{content}</NonceContext.Provider>
|
|
324
|
-
);
|
|
325
|
-
|
|
326
|
-
// Wrap with NavigationStoreContext for useNavigation hook
|
|
327
|
-
return (
|
|
328
|
-
<NavigationStoreContext.Provider value={ssrContextValue!}>
|
|
329
|
-
{content}
|
|
330
|
-
</NavigationStoreContext.Provider>
|
|
331
|
-
);
|
|
332
|
-
}
|
|
460
|
+
const SsrRoot = createSsrRootComponent({
|
|
461
|
+
createFromReadableStream,
|
|
462
|
+
rscStream: rscStream1,
|
|
463
|
+
nonce,
|
|
464
|
+
});
|
|
333
465
|
|
|
334
466
|
// Get bootstrap script content
|
|
335
467
|
const bootstrapScriptContent = await loadBootstrapScriptContent();
|
|
336
468
|
|
|
337
469
|
// Render React tree to HTML stream
|
|
338
470
|
// Pass formState for useActionState progressive enhancement if provided
|
|
339
|
-
// Pass nonce for CSP if provided
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
471
|
+
// Pass nonce for CSP if provided. runWithPreinitNonce makes the same
|
|
472
|
+
// nonce visible to the client-reference preinit hook (ALS — the hook is
|
|
473
|
+
// isolate-global, the nonce per request).
|
|
474
|
+
const htmlStream = await runWithPreinitNonce(nonce, () =>
|
|
475
|
+
renderToReadableStream(<SsrRoot />, {
|
|
476
|
+
...resolveBootstrapOptions(bootstrapScriptContent, deps.headScripts),
|
|
477
|
+
formState,
|
|
478
|
+
nonce,
|
|
479
|
+
}),
|
|
480
|
+
);
|
|
345
481
|
|
|
346
482
|
// Wait for all Suspense boundaries to resolve when streamMode is "allReady".
|
|
347
483
|
// This buffers the entire HTML before flushing — used for bots that
|
|
@@ -353,16 +489,328 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
|
|
|
353
489
|
// Inject RSC payload into HTML as <script nonce="...">__FLIGHT_DATA__</script>
|
|
354
490
|
return htmlStream.pipeThrough(injectRSCPayload(rscStream2, { nonce }));
|
|
355
491
|
} catch (error) {
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
492
|
+
reportRenderError(onError, error);
|
|
493
|
+
throw error;
|
|
494
|
+
}
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
/**
|
|
499
|
+
* Create the PPR shell capture handler.
|
|
500
|
+
*
|
|
501
|
+
* captureShellHTML prerenders the shell over the (cached, loader-masked) Flight
|
|
502
|
+
* stream, aborts once the shell settles, and returns the prelude bytes plus the
|
|
503
|
+
* postponed resume state for storage. The stored pair is later served by
|
|
504
|
+
* {@link createShellResumeHandler}. See docs/design/ppr-shell-resume.md.
|
|
505
|
+
*
|
|
506
|
+
* Throws at creation if `deps.prerender` is missing — capture cannot run
|
|
507
|
+
* without react-dom/static.edge's prerender.
|
|
508
|
+
*/
|
|
509
|
+
export function createShellCaptureHandler<TEnv = unknown>(
|
|
510
|
+
deps: SSRDependencies<TEnv>,
|
|
511
|
+
) {
|
|
512
|
+
const { createFromReadableStream, loadBootstrapScriptContent, prerender } =
|
|
513
|
+
deps;
|
|
514
|
+
const onError = deps.onError;
|
|
515
|
+
|
|
516
|
+
if (!prerender) {
|
|
517
|
+
throw new Error(
|
|
518
|
+
"[createShellCaptureHandler] Missing `prerender` dependency (react-dom/static.edge). " +
|
|
519
|
+
"PPR shell capture requires the prerender export; wire it in the SSR virtual entry.",
|
|
520
|
+
);
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/**
|
|
524
|
+
* Prerender the shell and return the stored artifacts, or null when the
|
|
525
|
+
* shell degraded (root postpone / hung handles) and must not be cached.
|
|
526
|
+
*
|
|
527
|
+
* @param rscStream - Flight stream to render the shell over. Not teed and not
|
|
528
|
+
* piped through injectRSCPayload: the hydration payload is produced fresh
|
|
529
|
+
* per request by the resume/serve pass.
|
|
530
|
+
* @param opts - quiesce signal and maxWait guard.
|
|
531
|
+
*/
|
|
532
|
+
return async function captureShellHTML(
|
|
533
|
+
rscStream: ReadableStream<Uint8Array>,
|
|
534
|
+
opts: ShellCaptureOptions,
|
|
535
|
+
): Promise<ShellCaptureResult | null> {
|
|
536
|
+
const maxWaitMs = opts.maxWaitMs ?? SHELL_CAPTURE_MAX_WAIT_MS;
|
|
537
|
+
|
|
538
|
+
// Arm the maxWaitMs deadline BEFORE the first await so it bounds the ENTIRE
|
|
539
|
+
// capture, the bootstrap-script load included. loadBootstrapScriptContent()
|
|
540
|
+
// used to run before the timer, so a hung/slow bootstrap load hung
|
|
541
|
+
// captureShellHTML with no upper bound and held the background capture task
|
|
542
|
+
// open. One deadline, shared by the bootstrap race below and the quiesce
|
|
543
|
+
// race, keeps the whole path "bounded by maxWaitMs like every quiesce input".
|
|
544
|
+
// Debugger attached (non-production, see isDebuggerAttached): a paused process
|
|
545
|
+
// must not burn the budget, so the deadline becomes a never-resolving
|
|
546
|
+
// promise (the Next.js approach) — no timer, so it cannot hold the event
|
|
547
|
+
// loop open either.
|
|
548
|
+
const deadline = (await isDebuggerAttached())
|
|
549
|
+
? { promise: new Promise<void>(() => {}), cancel: () => {} }
|
|
550
|
+
: createCancelableTimeout(maxWaitMs);
|
|
551
|
+
try {
|
|
552
|
+
// No nonce (nonce'd requests never reach capture); no formState.
|
|
553
|
+
// payloadSettled: fires when the Flight payload root settles — i.e.
|
|
554
|
+
// every client-module load the payload references completed and fizz
|
|
555
|
+
// can actually emit the tree. The abort below gates on it (bounded by
|
|
556
|
+
// the same deadline): Flight byte-quiet alone is NOT render-readiness.
|
|
557
|
+
let settlePayload!: () => void;
|
|
558
|
+
const payloadSettled = new Promise<void>((resolve) => {
|
|
559
|
+
settlePayload = resolve;
|
|
560
|
+
});
|
|
561
|
+
const SsrRoot = createSsrRootComponent({
|
|
562
|
+
createFromReadableStream,
|
|
563
|
+
rscStream,
|
|
564
|
+
onPayloadSettled: settlePayload,
|
|
565
|
+
});
|
|
566
|
+
|
|
567
|
+
// Bootstrap load raced against the deadline. A load that never resolves
|
|
568
|
+
// within maxWaitMs is the same bounded no-shell degrade as a shell that
|
|
569
|
+
// never goes quiet: return null, do not hang. A load that REJECTS is a
|
|
570
|
+
// genuine error and still propagates (it is not the deadline). `null` is
|
|
571
|
+
// the deadline sentinel — disjoint from the load's `Promise<string>`, so
|
|
572
|
+
// the race narrows to `string | null` with no wrapper. The no-op catch
|
|
573
|
+
// keeps a late rejection off the unhandledRejection path when the deadline
|
|
574
|
+
// already won; a rejection that lands first still propagates out.
|
|
575
|
+
const load = loadBootstrapScriptContent();
|
|
576
|
+
load.catch(() => {});
|
|
577
|
+
const bootstrapScriptContent = await Promise.race([
|
|
578
|
+
load,
|
|
579
|
+
deadline.promise.then(() => null),
|
|
580
|
+
]);
|
|
581
|
+
if (bootstrapScriptContent === null) {
|
|
582
|
+
return null;
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
// Start prerender first, then run the abort schedule concurrently. When
|
|
586
|
+
// holes are pending, prerender's promise settles only after abort(); when
|
|
587
|
+
// the shell completes with no holes it settles on its own and the later
|
|
588
|
+
// abort() is a harmless no-op (the DATA variant).
|
|
589
|
+
const controller = new AbortController();
|
|
590
|
+
// Private reason object: the deliberate abort is identified by object
|
|
591
|
+
// IDENTITY in both the onError below and the post-await catch. React
|
|
592
|
+
// propagates this EXACT object to onError for every still-pending boundary
|
|
593
|
+
// (verified identity-preserving), and rejects/errors the prelude with it.
|
|
594
|
+
const abortReason = { rangoShellCaptureAbort: true };
|
|
595
|
+
const prerenderPromise = prerender(<SsrRoot />, {
|
|
596
|
+
signal: controller.signal,
|
|
597
|
+
...resolveBootstrapOptions(bootstrapScriptContent, deps.headScripts),
|
|
598
|
+
// Abort is how capture WORKS: once the shell is quiet we abort() to
|
|
599
|
+
// freeze the prelude and let the still-pending holes postpone. React
|
|
600
|
+
// reports the abort reason for each pending boundary through onError.
|
|
601
|
+
// Without an onError here React falls back to console.error, so every
|
|
602
|
+
// capture that still has a live hole at abort time (the normal case)
|
|
603
|
+
// dumps a stack once per pending boundary. That is EXPECTED degradation,
|
|
604
|
+
// so swallow OUR abort — matched by IDENTITY (error === abortReason).
|
|
605
|
+
// Discriminate by identity, NOT error.name: capture aborts before
|
|
606
|
+
// awaiting, so signal.aborted is unconditionally true and a name check
|
|
607
|
+
// swallowed genuine AbortError-named throws (a component's own
|
|
608
|
+
// fetch/AbortController cancellation) as if they were our abort. Genuine
|
|
609
|
+
// render errors are NOT our sentinel and still surface through
|
|
610
|
+
// deps.onError, the same channel renderHTML uses. See
|
|
611
|
+
// docs/design/ppr-shell-resume.md.
|
|
612
|
+
onError: (error: unknown) => {
|
|
613
|
+
if (error === abortReason) {
|
|
614
|
+
return;
|
|
615
|
+
}
|
|
616
|
+
reportRenderError(onError, error);
|
|
617
|
+
},
|
|
618
|
+
});
|
|
619
|
+
// Pre-attach a no-op catch: the real await sits AFTER quiesce + the
|
|
620
|
+
// post-quiesce hops, so an early prerender rejection (e.g. a bake-lane
|
|
621
|
+
// loader tripping the identity guard within milliseconds) would otherwise
|
|
622
|
+
// spend several turns handler-less and crash the worker as an unhandled
|
|
623
|
+
// rejection. The actual rejection handling still happens at the await
|
|
624
|
+
// below; this parallel handler only keeps the gap crash-free.
|
|
625
|
+
prerenderPromise.catch(() => {});
|
|
626
|
+
|
|
627
|
+
// Wait for the caller's quiesce signal, bounded by the SAME deadline. By
|
|
628
|
+
// the time it resolves the Flight input is byte-quiet and FROZEN by the
|
|
629
|
+
// capture gate (shell-capture.ts gateFlightForCapture), so there is no
|
|
630
|
+
// wall-clock debounce here — maxWaitMs is only the pathological guard for a
|
|
631
|
+
// shell that never goes quiet (a root postpone / hung handle).
|
|
632
|
+
await Promise.race([opts.quiesce, deadline.promise]);
|
|
633
|
+
// Then wait for fizz RENDER-READINESS, bounded by the same deadline:
|
|
634
|
+
// the payload root settles only after every client-module load the
|
|
635
|
+
// payload references completed (real module-runner I/O in dev; 100ms+
|
|
636
|
+
// on a cold graph). Flight byte-quiet does NOT imply this — a fully
|
|
637
|
+
// REPLAYED (prerendered) route's Flight stream finishes in ~1-3ms and
|
|
638
|
+
// an abort taken on quiet-plus-task-hops alone landed BEFORE fizz could
|
|
639
|
+
// emit <html>, freezing a zero-byte prelude: the eternal-MISS shape
|
|
640
|
+
// this route class showed on every cold graph (dev cold boots, GH
|
|
641
|
+
// runners) while ordinary routes — whose live handler execution keeps
|
|
642
|
+
// Flight noisy long enough — never hit it. Masked-loader holes do not
|
|
643
|
+
// block payload settlement (they postpone below the root), so this
|
|
644
|
+
// await costs a genuinely hole-y shell nothing; a payload that NEVER
|
|
645
|
+
// settles (hung handles) degrades at the deadline exactly as before.
|
|
646
|
+
// A prerender that SETTLES first (early success or a hard rejection)
|
|
647
|
+
// ends the wait immediately — fizz is already done either way.
|
|
648
|
+
const prerenderSettled = prerenderPromise.then(
|
|
649
|
+
() => {},
|
|
650
|
+
() => {},
|
|
651
|
+
);
|
|
652
|
+
await Promise.race([payloadSettled, prerenderSettled, deadline.promise]);
|
|
653
|
+
// Fixed task hops before the abort: give React's fizz worker turns to flush
|
|
654
|
+
// the now-complete shell and mark the still-pending boundaries as POSTPONED
|
|
655
|
+
// rather than errored. Deterministic (the byte set is already frozen and
|
|
656
|
+
// the payload is settled), so a fixed count of turns suffices — no
|
|
657
|
+
// wall-clock. Ready-but-queued fizz render work (however large — a multi-MB
|
|
658
|
+
// outlined boundary) can never lose this race: tracked-postpones pings run
|
|
659
|
+
// on scheduleMicrotask, so every runnable task drains before the FIRST
|
|
660
|
+
// setTimeout hop fires; only tasks parked on genuinely pending promises
|
|
661
|
+
// (masked loaders, real per-request I/O) remain, and those are exactly the
|
|
662
|
+
// holes that must postpone (issue #702).
|
|
663
|
+
for (let i = 0; i < POST_QUIESCE_TASK_HOPS; i++) {
|
|
664
|
+
await macrotask();
|
|
665
|
+
}
|
|
666
|
+
controller.abort(abortReason);
|
|
667
|
+
|
|
668
|
+
// A hard prerender rejection (fatal shell error) propagates. Expected
|
|
669
|
+
// degradation surfaces three ways and all return null: a trivial prelude
|
|
670
|
+
// (sanity gate below), the prerender REJECTING with our abort reason, or
|
|
671
|
+
// the prelude STREAM erroring with our abort reason mid-read — both abort
|
|
672
|
+
// shapes happen when our own abort lands before the shell completed (seen
|
|
673
|
+
// on dev cold paths, where module transform / first-render latency
|
|
674
|
+
// outlasts flight quiesce; a later request re-captures against warm
|
|
675
|
+
// modules and succeeds).
|
|
676
|
+
let prelude: Uint8Array;
|
|
677
|
+
let postponed: unknown;
|
|
678
|
+
try {
|
|
679
|
+
const result = await prerenderPromise;
|
|
680
|
+
prelude = await readStreamToUint8Array(result.prelude);
|
|
681
|
+
postponed = result.postponed;
|
|
682
|
+
} catch (error) {
|
|
683
|
+
// Identity match: swallow ONLY our own deliberate abort
|
|
684
|
+
// (error === abortReason). Not error.name — capture aborts before this
|
|
685
|
+
// await, so signal.aborted is always true, and a name check let a
|
|
686
|
+
// genuine AbortError-named throw masquerade as our abort and degrade
|
|
687
|
+
// into a retryable no-shell, hiding real failures from reportCacheError.
|
|
688
|
+
if (error === abortReason) {
|
|
689
|
+
return null;
|
|
364
690
|
}
|
|
691
|
+
throw error;
|
|
365
692
|
}
|
|
693
|
+
|
|
694
|
+
// Sanity gate: a prelude with no `<body` is the no-shell failure mode.
|
|
695
|
+
// Return null and store nothing; the request falls back to axis 1 and a
|
|
696
|
+
// later request re-captures. The dominant real-world cause is a loader
|
|
697
|
+
// route WITHOUT a route-level loading() boundary: renderSegments' loading-
|
|
698
|
+
// less branch awaits loader data at TREE-BUILD, so the masked loader pins
|
|
699
|
+
// the whole tree above <body> (root postpone). Root-postponing layouts and
|
|
700
|
+
// hung handles degrade the same way. shell-capture.ts logs a once-per-key
|
|
701
|
+
// warning so the eternal-MISS shape is diagnosable.
|
|
702
|
+
if (!new TextDecoder().decode(prelude).includes("<body")) {
|
|
703
|
+
return null;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
return {
|
|
707
|
+
prelude,
|
|
708
|
+
postponed: postponed == null ? null : JSON.stringify(postponed),
|
|
709
|
+
};
|
|
710
|
+
} finally {
|
|
711
|
+
deadline.cancel();
|
|
712
|
+
}
|
|
713
|
+
};
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
/**
|
|
717
|
+
* Create the PPR shell resume handler.
|
|
718
|
+
*
|
|
719
|
+
* resumeShellHTML produces the per-request live portion of the document: for a
|
|
720
|
+
* postponed shell it resumes fizz over a fresh SsrRoot to emit only the holes;
|
|
721
|
+
* for the DATA variant it emits only the fresh Flight payload scripts. The
|
|
722
|
+
* caller (shell-cache middleware) prepends the stored prelude bytes to form the
|
|
723
|
+
* composite response. See docs/design/ppr-shell-resume.md.
|
|
724
|
+
*/
|
|
725
|
+
export function createShellResumeHandler<TEnv = unknown>(
|
|
726
|
+
deps: SSRDependencies<TEnv>,
|
|
727
|
+
) {
|
|
728
|
+
const { createFromReadableStream, resume, onError } = deps;
|
|
729
|
+
|
|
730
|
+
/**
|
|
731
|
+
* @param rscStream - Fresh full Flight stream for this request.
|
|
732
|
+
* @param opts - postponed state (null = DATA variant) and optional nonce.
|
|
733
|
+
*/
|
|
734
|
+
return async function resumeShellHTML(
|
|
735
|
+
rscStream: ReadableStream<Uint8Array>,
|
|
736
|
+
opts: ShellResumeOptions,
|
|
737
|
+
): Promise<ReadableStream<Uint8Array>> {
|
|
738
|
+
const { postponed, nonce } = opts;
|
|
739
|
+
|
|
740
|
+
try {
|
|
741
|
+
if (postponed === null) {
|
|
742
|
+
// DATA variant: the stored prelude is the complete shell. No fizz runs;
|
|
743
|
+
// the eager injector pumps the fresh Flight payload scripts without
|
|
744
|
+
// needing an HTML chunk to trigger it (the stock injector deadlocked on
|
|
745
|
+
// a chunkless stream — see createDataVariantHtmlStream, kept for the
|
|
746
|
+
// batching invariant's sake).
|
|
747
|
+
return createDataVariantHtmlStream().pipeThrough(
|
|
748
|
+
injectRSCPayloadEager(rscStream, { nonce }),
|
|
749
|
+
);
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
if (!resume) {
|
|
753
|
+
throw new Error(
|
|
754
|
+
"[createShellResumeHandler] Missing `resume` dependency (react-dom/server.edge). " +
|
|
755
|
+
"Resuming a postponed shell requires the resume export; wire it in the SSR virtual entry.",
|
|
756
|
+
);
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
// Tee: one branch deserializes into the SsrRoot VDOM that resume() replays
|
|
760
|
+
// (a fresh instance is fine — replay matches structure, not identity), the
|
|
761
|
+
// other feeds the fresh hydration payload to injectRSCPayload.
|
|
762
|
+
const [rscStream1, rscStream2] = rscStream.tee();
|
|
763
|
+
|
|
764
|
+
const SsrRoot = createSsrRootComponent({
|
|
765
|
+
createFromReadableStream,
|
|
766
|
+
rscStream: rscStream1,
|
|
767
|
+
nonce,
|
|
768
|
+
});
|
|
769
|
+
|
|
770
|
+
// EAGER injection (resume-only): the stored prelude — a complete document
|
|
771
|
+
// through </body></html> — is already on the wire ahead of this stream,
|
|
772
|
+
// so a Flight <script> is valid as the first tail byte. The stock
|
|
773
|
+
// injector waits for the first fizz chunk, which only appears when the
|
|
774
|
+
// first hole's loaders resolve — parking the whole hydration payload
|
|
775
|
+
// (root row included) behind the slowest live loader. See
|
|
776
|
+
// inject-rsc-eager.ts for the measured failure mode.
|
|
777
|
+
//
|
|
778
|
+
// EAGER HANDOVER: return the injector's readable BEFORE awaiting
|
|
779
|
+
// resume(). react-dom's resume() promise resolves only when the resumed
|
|
780
|
+
// shell (everything above the postponed holes) completes — which waits
|
|
781
|
+
// on the live loaders — so `await resume(...).pipeThrough(...)` parked
|
|
782
|
+
// the already-flowing Flight bytes a second time, behind the handshake
|
|
783
|
+
// instead of the stream (measured: injector output at +9ms, first tail
|
|
784
|
+
// byte on the wire at +735ms). Piping fizz in when it materializes lets
|
|
785
|
+
// serveShellHit start draining Flight immediately; pipeTo closes the
|
|
786
|
+
// writable on completion, which runs the injector's flush (trailer). A
|
|
787
|
+
// resume() rejection aborts the writable so the response errors instead
|
|
788
|
+
// of hanging.
|
|
789
|
+
const injector = injectRSCPayloadEager(rscStream2, { nonce });
|
|
790
|
+
void (async () => {
|
|
791
|
+
try {
|
|
792
|
+
// Nonce wrap mirrors renderHTML: client references first discovered
|
|
793
|
+
// during resume (holes the shell never rendered) preinit into the
|
|
794
|
+
// resumed stream and need the per-request nonce.
|
|
795
|
+
const resumed = await runWithPreinitNonce(nonce, () =>
|
|
796
|
+
resume(<SsrRoot />, JSON.parse(postponed), {
|
|
797
|
+
onError: (error) => reportRenderError(onError, error),
|
|
798
|
+
nonce,
|
|
799
|
+
}),
|
|
800
|
+
);
|
|
801
|
+
await resumed.pipeTo(injector.writable);
|
|
802
|
+
} catch (error) {
|
|
803
|
+
reportRenderError(onError, error);
|
|
804
|
+
try {
|
|
805
|
+
await injector.writable.abort(error);
|
|
806
|
+
} catch {
|
|
807
|
+
// Writable already errored/closed; the readable side has the error.
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
})();
|
|
811
|
+
return injector.readable;
|
|
812
|
+
} catch (error) {
|
|
813
|
+
reportRenderError(onError, error);
|
|
366
814
|
throw error;
|
|
367
815
|
}
|
|
368
816
|
};
|