@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
|
@@ -0,0 +1,951 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dispatch — in-process request -> Response for unit/integration tests,
|
|
3
|
+
* WITHOUT the Flight RSC runtime.
|
|
4
|
+
*
|
|
5
|
+
* dispatch runs the router's real matching and middleware execution so that
|
|
6
|
+
* redirects, 404s, response routes (path.json / path.text / path.html / ...),
|
|
7
|
+
* and middleware short-circuits behave exactly as in production. It deliberately
|
|
8
|
+
* does NOT render React Server Components: there is no Flight stream, no SSR,
|
|
9
|
+
* and no DOM. Hit an RSC (component) route and dispatch throws a clear error
|
|
10
|
+
* directing you to renderToFlightString/renderServerTree/renderHandler or an e2e test.
|
|
11
|
+
*
|
|
12
|
+
* What dispatch DOES support:
|
|
13
|
+
* - Trailing-slash and other findMatch() redirects -> 308 with Location
|
|
14
|
+
* - Unmatched paths -> 404 Response
|
|
15
|
+
* Both the 308 and the 404 are produced INSIDE the global middleware chain
|
|
16
|
+
* (mirroring production, where coreHandler runs wrapped by executeMiddleware),
|
|
17
|
+
* so a global auth middleware can 401/redirect them and middleware-set
|
|
18
|
+
* cookies/headers merge onto the 308/404 the way createResponseWithMergedHeaders
|
|
19
|
+
* merges them in production.
|
|
20
|
+
* - Response routes (non-RSC) -> serialized Response
|
|
21
|
+
* - json: JSON.stringify(result) (bare value) with application/json
|
|
22
|
+
* - text/html/xml/md: String(result) with the mapped MIME type
|
|
23
|
+
* - handler returning or throwing a Response: re-wrapped like
|
|
24
|
+
* handleResponseRoute (stub headers/cookies merged, Set-Cookie preserved,
|
|
25
|
+
* WebSocket upgrade passed through without reconstruction)
|
|
26
|
+
* - handler throwing a non-Response error: typed 500 / RouterError
|
|
27
|
+
* status, matching handleResponseRoute (RFC 9457 problem+json body with
|
|
28
|
+
* application/problem+json for json routes, text/plain message otherwise)
|
|
29
|
+
* - content-negotiated route: Vary: Accept appended
|
|
30
|
+
* - cached response route (cache({...})): getResponse/putResponse
|
|
31
|
+
* hit/SWR/tag write, resolved from the matched entry tree exactly as
|
|
32
|
+
* handleResponseRoute does. The write is scheduled via ctx.waitUntil
|
|
33
|
+
* (a microtask without an executionContext), so a HIT-asserting test must
|
|
34
|
+
* flush microtasks between the seeding dispatch and the asserting one.
|
|
35
|
+
* - Global middleware (router.use(...)) AND route-level middleware, with full
|
|
36
|
+
* next()/short-circuit/throw-Response/header+cookie-merge fidelity.
|
|
37
|
+
* - Partial (client-navigation) requests to a RESPONSE route (?_rsc_partial):
|
|
38
|
+
* global middleware runs first (so an auth gate can still 401/redirect),
|
|
39
|
+
* then — if it passes through — an X-RSC-Reload is returned. Route-level
|
|
40
|
+
* middleware is skipped on a partial, exactly as production skips it.
|
|
41
|
+
* - A middleware redirect (3xx + Location) on a partial/action request
|
|
42
|
+
* (?_rsc_partial / ?_rsc_action): converted to a 204 + X-RSC-Redirect via the
|
|
43
|
+
* real interceptRedirectForPartial, so fetch() does not auto-follow the 3xx —
|
|
44
|
+
* identical to production's no-location-state path.
|
|
45
|
+
* - The open-redirect guard (rsc/redirect-guard.ts) on full (browser-followed)
|
|
46
|
+
* redirects: a cross-origin Location is rewritten to the basename root unless
|
|
47
|
+
* redirect(url, { external: true }) opted out, mirroring production's single
|
|
48
|
+
* handler chokepoint. Soft partial/action redirects are 204 and pass through.
|
|
49
|
+
* - createRouter({ onError }) for CACHE / background-error degradation. dispatch
|
|
50
|
+
* wires the request context's _reportBackgroundError to the router's onError the
|
|
51
|
+
* same way the production RSC handler does, so a cache-read/cache-write/
|
|
52
|
+
* stale-revalidation failure on a cached response route (a throwing route
|
|
53
|
+
* cache({ key })/cache({ tags }), or a custom store whose keyGenerator/
|
|
54
|
+
* getResponse/putResponse throws) fires onError with phase "cache" and
|
|
55
|
+
* metadata.category, while the request still degrades-to-miss exactly as before.
|
|
56
|
+
* (A thrown non-Response route HANDLER error is the one onError path NOT covered —
|
|
57
|
+
* see "DOES NOT support" below.)
|
|
58
|
+
* - createRouter({ telemetry }) match-transaction lifecycle: request.start opens
|
|
59
|
+
* the transaction before the global middleware chain, request.end closes it
|
|
60
|
+
* after finalizeResponse (segmentCount 0 / cacheHit false — dispatch renders no
|
|
61
|
+
* RSC segments and holds no match-cache state), and a thrown non-Response error
|
|
62
|
+
* emits request.error with phase "routing". All three carry the same requestId
|
|
63
|
+
* (getRequestId). Emission is gated entirely on a configured sink; with none,
|
|
64
|
+
* dispatch does zero new work and stays byte-identical for existing callers.
|
|
65
|
+
* Lets a consumer unit-test their sink wiring in-process instead of only at e2e.
|
|
66
|
+
* - Response-route `renderStartMs` timeouts and `onTimeout`: dispatch races the
|
|
67
|
+
* same terminal response work, reports the timeout through onError/telemetry,
|
|
68
|
+
* and invokes the configured callback. `context.render` is absent because this
|
|
69
|
+
* primitive deliberately does not run the Flight/HTML render driver.
|
|
70
|
+
*
|
|
71
|
+
* What dispatch DOES NOT support (and why):
|
|
72
|
+
* - RSC component routes — rendering requires the Flight serializer + React
|
|
73
|
+
* server runtime, which is the boundary this primitive is defined to avoid.
|
|
74
|
+
* This includes partial requests that resolve to a component route.
|
|
75
|
+
* - Server actions (?_rsc_action) — RSC protocol concerns handled by
|
|
76
|
+
* router.fetch().
|
|
77
|
+
* - createRouter({ onError }) on a thrown non-Response route HANDLER error: the
|
|
78
|
+
* error is serialized into the same typed 500 / RouterError Response as
|
|
79
|
+
* production, but onError is NOT invoked for that path here. Cover handler-error
|
|
80
|
+
* onError side effects with an e2e test. (This is the unchanged boundary; cache
|
|
81
|
+
* and other background errors DO route through onError — see below.)
|
|
82
|
+
* - Location-state-carrying redirects on a partial/action request: production
|
|
83
|
+
* embeds a Flight payload (createRedirectFlightResponse) so the client can
|
|
84
|
+
* restore location state across the redirect. dispatch is RSC-free, so it
|
|
85
|
+
* cannot emit that Flight stream. It falls back to the no-state behavior — a
|
|
86
|
+
* 204 + X-RSC-Redirect via createSimpleRedirectResponse — dropping the
|
|
87
|
+
* embedded location state. The 204 status, the X-RSC-Redirect header, and the
|
|
88
|
+
* merged cookies/headers all match production; only the Flight-embedded
|
|
89
|
+
* location-state entries are absent. Cover location-state restoration across a
|
|
90
|
+
* partial redirect with an e2e test.
|
|
91
|
+
* - Telemetry cache.decision / loader.* / handler.error events: these fire from
|
|
92
|
+
* the real match()/matchPartial() + RSC render + loader pipeline (match-
|
|
93
|
+
* handlers.ts, loader-resolution.ts, segment-resolution), none of which
|
|
94
|
+
* dispatch runs. Synthesizing them here would be faking (the events would not
|
|
95
|
+
* reflect a real cache lookup or loader run), so dispatch emits only the
|
|
96
|
+
* request.start/end/error lifecycle above; cover cache/loader telemetry with an
|
|
97
|
+
* e2e test driving a real RSC request.
|
|
98
|
+
*
|
|
99
|
+
* dispatch reuses router.previewMatch(), which itself runs content negotiation
|
|
100
|
+
* and resolves route middleware from the matched entry tree, so dispatch's
|
|
101
|
+
* route-middleware collection is exactly the router's, not a re-implementation.
|
|
102
|
+
*/
|
|
103
|
+
|
|
104
|
+
import {
|
|
105
|
+
createRequestContext,
|
|
106
|
+
runWithRequestContext,
|
|
107
|
+
setRequestContextParams,
|
|
108
|
+
} from "../server/request-context.js";
|
|
109
|
+
import { executeMiddleware, matchMiddleware } from "../router/middleware.js";
|
|
110
|
+
import type {
|
|
111
|
+
MiddlewareEntry,
|
|
112
|
+
MiddlewareFn,
|
|
113
|
+
} from "../router/middleware-types.js";
|
|
114
|
+
import {
|
|
115
|
+
createReverseFunction,
|
|
116
|
+
stripInternalParams,
|
|
117
|
+
} from "../router/handler-context.js";
|
|
118
|
+
import { NOCACHE_SYMBOL } from "../cache/taint.js";
|
|
119
|
+
import {
|
|
120
|
+
compileSearchParamsFilter,
|
|
121
|
+
type CacheSearchParams,
|
|
122
|
+
type SearchParamsFilter,
|
|
123
|
+
} from "../cache/search-params-filter.js";
|
|
124
|
+
import type { SegmentCacheStore } from "../cache/types.js";
|
|
125
|
+
import type { CacheProfile } from "../cache/profile-registry.js";
|
|
126
|
+
// cache-scope is loaded LAZILY inside the response-route cache path (below):
|
|
127
|
+
// its module graph pulls @vitejs/plugin-rsc/rsc (via segment-codec), which the
|
|
128
|
+
// non-Vite unit-test runner cannot resolve. A static import here would drag that
|
|
129
|
+
// onto the whole testing barrel's eager graph and break every consumer suite
|
|
130
|
+
// that imports `@rangojs/router/testing` without mocking plugin-rsc.
|
|
131
|
+
import type { EntryData } from "../server/context.js";
|
|
132
|
+
import { setRouterManifest } from "../route-map-builder.js";
|
|
133
|
+
import { RESPONSE_TYPE_MIME } from "../router/content-negotiation.js";
|
|
134
|
+
import { RouterError } from "../errors.js";
|
|
135
|
+
import { createProblemDetails } from "../rsc/response-error.js";
|
|
136
|
+
import {
|
|
137
|
+
createResponseWithMergedHeaders,
|
|
138
|
+
createSimpleRedirectResponse,
|
|
139
|
+
finalizeResponse,
|
|
140
|
+
interceptRedirectForPartial,
|
|
141
|
+
rewrapResponseRouteResponse,
|
|
142
|
+
} from "../rsc/helpers.js";
|
|
143
|
+
import { guardOutgoingRedirect } from "../rsc/redirect-guard.js";
|
|
144
|
+
import { stringifyJsonRouteResult } from "../rsc/json-route-result.js";
|
|
145
|
+
import { isWebSocketUpgradeResponse } from "../response-utils.js";
|
|
146
|
+
import { invokeOnError } from "../router/error-handling.js";
|
|
147
|
+
import type { OnErrorCallback } from "../types/error-types.js";
|
|
148
|
+
import type { Rango } from "../router/router-interfaces.js";
|
|
149
|
+
import { getRequestId, resolveSink, safeEmit } from "../router/telemetry.js";
|
|
150
|
+
import type { TelemetrySink } from "../router/telemetry.js";
|
|
151
|
+
import {
|
|
152
|
+
RouterTimeoutError,
|
|
153
|
+
createDefaultTimeoutResponse,
|
|
154
|
+
isTimeoutEnabled,
|
|
155
|
+
withTimeout,
|
|
156
|
+
} from "../router/timeout.js";
|
|
157
|
+
import type { OnTimeoutCallback, ResolvedTimeouts } from "../router/timeout.js";
|
|
158
|
+
import { applyStreamIdleTimeout } from "../rsc/stream-idle.js";
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* The internal subset of the router surface dispatch depends on. The public
|
|
162
|
+
* `Rango` router carries these members at runtime (they are declared on the
|
|
163
|
+
* internal interface), so dispatch accepts a public `Rango` and reads them
|
|
164
|
+
* through this shape — the consumer never needs a cast.
|
|
165
|
+
*/
|
|
166
|
+
interface DispatchableRouter<TEnv> {
|
|
167
|
+
id?: string;
|
|
168
|
+
routerId?: string;
|
|
169
|
+
routeMap: Record<string, unknown>;
|
|
170
|
+
middleware: MiddlewareEntry<TEnv>[];
|
|
171
|
+
onError?: OnErrorCallback<TEnv>;
|
|
172
|
+
/**
|
|
173
|
+
* Optional telemetry sink from createRouter({ telemetry }) (RangoInternal
|
|
174
|
+
* field). dispatch emits the match-transaction lifecycle events onto it so a
|
|
175
|
+
* consumer can unit-test their sink wiring in-process; undefined keeps dispatch
|
|
176
|
+
* byte-identical for every existing caller.
|
|
177
|
+
*/
|
|
178
|
+
telemetry?: TelemetrySink;
|
|
179
|
+
timeouts?: ResolvedTimeouts;
|
|
180
|
+
onTimeout?: OnTimeoutCallback<TEnv>;
|
|
181
|
+
findMatch(pathname: string): Promise<{
|
|
182
|
+
redirectTo?: string;
|
|
183
|
+
routeKey?: string;
|
|
184
|
+
params?: Record<string, string>;
|
|
185
|
+
} | null>;
|
|
186
|
+
previewMatch(
|
|
187
|
+
request: Request,
|
|
188
|
+
input?: { env?: TEnv },
|
|
189
|
+
): Promise<{
|
|
190
|
+
routeMiddleware?: Array<{
|
|
191
|
+
handler: MiddlewareFn<TEnv>;
|
|
192
|
+
params: Record<string, string>;
|
|
193
|
+
}>;
|
|
194
|
+
responseType?: string;
|
|
195
|
+
handler?: Function;
|
|
196
|
+
params?: Record<string, string>;
|
|
197
|
+
routeKey?: string;
|
|
198
|
+
negotiated?: boolean;
|
|
199
|
+
manifestEntry?: EntryData;
|
|
200
|
+
} | null>;
|
|
201
|
+
basename?: string;
|
|
202
|
+
cache?:
|
|
203
|
+
| {
|
|
204
|
+
enabled?: boolean;
|
|
205
|
+
store?: SegmentCacheStore;
|
|
206
|
+
searchParams?: CacheSearchParams;
|
|
207
|
+
}
|
|
208
|
+
| ((
|
|
209
|
+
env: TEnv,
|
|
210
|
+
executionContext: unknown,
|
|
211
|
+
) => {
|
|
212
|
+
enabled?: boolean;
|
|
213
|
+
store?: SegmentCacheStore;
|
|
214
|
+
searchParams?: CacheSearchParams;
|
|
215
|
+
});
|
|
216
|
+
cacheProfiles?: Record<string, CacheProfile>;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Options for dispatch.
|
|
221
|
+
*/
|
|
222
|
+
export interface DispatchOptions<TEnv = any> {
|
|
223
|
+
/** The request to dispatch: a `Request`, or a URL string (absolute or path). */
|
|
224
|
+
request: Request | string;
|
|
225
|
+
/** Environment bindings forwarded to matching and middleware. */
|
|
226
|
+
env?: TEnv;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
const DEFAULT_ORIGIN = "http://localhost/";
|
|
230
|
+
|
|
231
|
+
function toRequest(request: Request | string): Request {
|
|
232
|
+
if (request instanceof Request) return request;
|
|
233
|
+
return new Request(new URL(request, DEFAULT_ORIGIN));
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Serialize a NON-Response response-route handler result, mirroring the
|
|
238
|
+
* router's handleResponseRoute() contract:
|
|
239
|
+
* - "json" serializes the value (bare) with application/json, rejecting a nested
|
|
240
|
+
* unresolved Promise via the shared stringifyJsonRouteResult guard,
|
|
241
|
+
* - text/html/xml/md stringify with the mapped MIME type.
|
|
242
|
+
*
|
|
243
|
+
* A handler-returned Response is NOT routed here — callHandler re-wraps it via
|
|
244
|
+
* rewrapHandlerResponse (mirroring handleResponseRoute's rewrapResponse) so the
|
|
245
|
+
* WebSocket-upgrade bypass and Set-Cookie-preserving header merge match
|
|
246
|
+
* production.
|
|
247
|
+
*/
|
|
248
|
+
function serializeResponseRouteResult(
|
|
249
|
+
result: unknown,
|
|
250
|
+
responseType: string,
|
|
251
|
+
): Response {
|
|
252
|
+
if (responseType === "json") {
|
|
253
|
+
// Serialize through the SAME guard production uses: a nested unresolved
|
|
254
|
+
// Promise (forgotten await) throws RESPONSE_NOT_SERIALIZABLE here, caught by
|
|
255
|
+
// callHandler's catch and mapped to the identical typed 500 production
|
|
256
|
+
// returns -- so a dispatch json test fails exactly where production would,
|
|
257
|
+
// instead of silently emitting {} and passing.
|
|
258
|
+
return new Response(stringifyJsonRouteResult(result), {
|
|
259
|
+
status: 200,
|
|
260
|
+
headers: { "content-type": "application/json;charset=utf-8" },
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
if (Object.hasOwn(RESPONSE_TYPE_MIME, responseType)) {
|
|
265
|
+
return new Response(String(result), {
|
|
266
|
+
status: 200,
|
|
267
|
+
headers: {
|
|
268
|
+
"content-type": `${RESPONSE_TYPE_MIME[responseType]};charset=utf-8`,
|
|
269
|
+
},
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
throw new Error(
|
|
274
|
+
`dispatch(): response route handler for "${responseType}" must return a ` +
|
|
275
|
+
`Response object, got ${typeof result}. Binary/streaming response types ` +
|
|
276
|
+
`(image, stream, any) must return a Response explicitly.`,
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Serialize a thrown handler error into the same typed Response the router's
|
|
282
|
+
* handleResponseRoute() catch block produces:
|
|
283
|
+
* - "json" routes return an RFC 9457 problem+json body (application/problem+json),
|
|
284
|
+
* - all other types return a text/plain body (the RouterError message verbatim,
|
|
285
|
+
* the Error message in dev, else "Internal Server Error").
|
|
286
|
+
*
|
|
287
|
+
* `status` is the effective HTTP status resolved by the caller (RouterError.status
|
|
288
|
+
* or 500, overridden by ctx.setStatus()); it governs both the HTTP status and the
|
|
289
|
+
* problem body's `status`/`title` members. Reuses the production
|
|
290
|
+
* createProblemDetails so the error body is byte-identical rather than re-derived.
|
|
291
|
+
*/
|
|
292
|
+
function serializeResponseRouteError(
|
|
293
|
+
error: unknown,
|
|
294
|
+
responseType: string,
|
|
295
|
+
status: number,
|
|
296
|
+
): Response {
|
|
297
|
+
const isDev = process.env.NODE_ENV !== "production";
|
|
298
|
+
|
|
299
|
+
if (responseType === "json") {
|
|
300
|
+
return new Response(
|
|
301
|
+
JSON.stringify(createProblemDetails(error, status, isDev)),
|
|
302
|
+
{
|
|
303
|
+
status,
|
|
304
|
+
headers: { "content-type": "application/problem+json;charset=utf-8" },
|
|
305
|
+
},
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
const message =
|
|
310
|
+
error instanceof RouterError
|
|
311
|
+
? error.message
|
|
312
|
+
: isDev && error instanceof Error
|
|
313
|
+
? error.message
|
|
314
|
+
: "Internal Server Error";
|
|
315
|
+
return new Response(message, {
|
|
316
|
+
status,
|
|
317
|
+
headers: { "content-type": "text/plain;charset=utf-8" },
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Run a request through the router in-process and return the Response.
|
|
323
|
+
*
|
|
324
|
+
* @example
|
|
325
|
+
* ```ts
|
|
326
|
+
* const router = createRouter<Env>({}).routes(urls(({ path }) => [
|
|
327
|
+
* path.json("/api/health", () => ({ ok: true }), { name: "health" }),
|
|
328
|
+
* ]));
|
|
329
|
+
*
|
|
330
|
+
* const res = await dispatch(router, { request: "/api/health" });
|
|
331
|
+
* expect(res.status).toBe(200);
|
|
332
|
+
* expect(await res.json()).toEqual({ ok: true });
|
|
333
|
+
* ```
|
|
334
|
+
*/
|
|
335
|
+
export async function dispatch<TEnv = any>(
|
|
336
|
+
publicRouter: Rango<TEnv, any>,
|
|
337
|
+
opts: DispatchOptions<TEnv>,
|
|
338
|
+
): Promise<Response> {
|
|
339
|
+
// The public Rango type intentionally hides the matching internals; read them
|
|
340
|
+
// through the dispatchable shape (present at runtime). Consumers pass their
|
|
341
|
+
// real router with no cast.
|
|
342
|
+
const router = publicRouter as unknown as DispatchableRouter<TEnv>;
|
|
343
|
+
const req = toRequest(opts.request);
|
|
344
|
+
const url = new URL(req.url);
|
|
345
|
+
const env = (opts.env ?? {}) as TEnv;
|
|
346
|
+
|
|
347
|
+
// Seed the per-router manifest so reverse() resolves during handler execution.
|
|
348
|
+
const routerId = router.id ?? router.routerId;
|
|
349
|
+
if (routerId) {
|
|
350
|
+
setRouterManifest(routerId, router.routeMap as Record<string, string>);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// findMatch carries trailing-slash/redirect targets and null on no match.
|
|
354
|
+
// previewMatch swallows redirects, so detect them here first.
|
|
355
|
+
const match = await router.findMatch(url.pathname);
|
|
356
|
+
const redirectTo = match?.redirectTo;
|
|
357
|
+
const isUnmatched = !match;
|
|
358
|
+
|
|
359
|
+
// previewMatch resolves responseType, the response-route handler, and the
|
|
360
|
+
// route middleware from the matched entry tree (with content negotiation).
|
|
361
|
+
// Skip it for a redirect/unmatched path — there is no response route to
|
|
362
|
+
// resolve, and previewMatch would return null / a redirect marker anyway.
|
|
363
|
+
const preview =
|
|
364
|
+
redirectTo || isUnmatched ? null : await router.previewMatch(req, { env });
|
|
365
|
+
|
|
366
|
+
// A bare match with no responseType is an RSC route. The RSC-route throw is a
|
|
367
|
+
// hard boundary of this primitive (no Flight runtime), distinct from the
|
|
368
|
+
// 308/404 outcomes below, so it stays a pre-middleware guard.
|
|
369
|
+
const responseType = preview?.responseType;
|
|
370
|
+
const handler = preview?.handler;
|
|
371
|
+
const params = preview?.params ?? match?.params ?? {};
|
|
372
|
+
const routeKey = preview?.routeKey ?? match?.routeKey;
|
|
373
|
+
|
|
374
|
+
if (
|
|
375
|
+
!redirectTo &&
|
|
376
|
+
!isUnmatched &&
|
|
377
|
+
(!responseType || typeof handler !== "function")
|
|
378
|
+
) {
|
|
379
|
+
throw new Error(
|
|
380
|
+
`dispatch() does not render RSC routes — the route matched at ` +
|
|
381
|
+
`"${url.pathname}" is a React Server Component route, not a response ` +
|
|
382
|
+
`route. Use renderHandler/renderServerTree/renderToFlightString or an ` +
|
|
383
|
+
`e2e test to exercise component rendering.`,
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
const variables: Record<string, unknown> = {};
|
|
388
|
+
|
|
389
|
+
// Resolve the router's cache store the way the production handler does, so a
|
|
390
|
+
// "use cache" inside a response-route handler reaches the request-scope
|
|
391
|
+
// (NOCACHE) detection below instead of bypassing on a missing store.
|
|
392
|
+
let cacheStore: SegmentCacheStore | undefined;
|
|
393
|
+
let searchParamsFilter: SearchParamsFilter | undefined;
|
|
394
|
+
const cacheOption = router.cache;
|
|
395
|
+
if (cacheOption && !url.searchParams.has("__no_cache")) {
|
|
396
|
+
const cacheConfig =
|
|
397
|
+
typeof cacheOption === "function"
|
|
398
|
+
? cacheOption(env, undefined)
|
|
399
|
+
: cacheOption;
|
|
400
|
+
if (cacheConfig.enabled !== false) {
|
|
401
|
+
cacheStore = cacheConfig.store;
|
|
402
|
+
searchParamsFilter = compileSearchParamsFilter(cacheConfig.searchParams);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
const requestContext = createRequestContext<TEnv>({
|
|
407
|
+
env,
|
|
408
|
+
request: req,
|
|
409
|
+
url,
|
|
410
|
+
variables,
|
|
411
|
+
cacheStore,
|
|
412
|
+
searchParamsFilter,
|
|
413
|
+
cacheProfiles: router.cacheProfiles,
|
|
414
|
+
});
|
|
415
|
+
// Wire background error reporting so cache degradation (reportCacheError ->
|
|
416
|
+
// _reportBackgroundError) reaches the router's onError, mirroring the production
|
|
417
|
+
// RSC handler (rsc/handler.ts). Without this, dispatch could not observe onError.
|
|
418
|
+
requestContext._reportBackgroundError = (error, category) => {
|
|
419
|
+
if (error != null && typeof error === "object") {
|
|
420
|
+
if (requestContext._reportedErrors.has(error)) return;
|
|
421
|
+
requestContext._reportedErrors.add(error);
|
|
422
|
+
}
|
|
423
|
+
invokeOnError(
|
|
424
|
+
router.onError,
|
|
425
|
+
error,
|
|
426
|
+
"cache",
|
|
427
|
+
{ request: req, url, metadata: { category } },
|
|
428
|
+
"RSC",
|
|
429
|
+
);
|
|
430
|
+
};
|
|
431
|
+
// Match production: the RSC handler stores the router's basename on the
|
|
432
|
+
// request context (handler.ts), and redirect() prefixes root-relative URLs
|
|
433
|
+
// with it. Mirror it so basename-redirect tests behave as they do in a real
|
|
434
|
+
// mounted app instead of always seeing no prefix.
|
|
435
|
+
requestContext._basename = router.basename;
|
|
436
|
+
requestContext._routerId = routerId;
|
|
437
|
+
|
|
438
|
+
// Match production's response-route reverse EXACTLY: the real handler builds
|
|
439
|
+
// it from the route map alone (response-route-handler.ts), with NO matched
|
|
440
|
+
// routeKey or params. Passing routeKey/params here would auto-fill params from
|
|
441
|
+
// the matched route, so ctx.reverse("name") could pass in a test while the
|
|
442
|
+
// real handler throws for the missing param.
|
|
443
|
+
const reverse = createReverseFunction(
|
|
444
|
+
router.routeMap as Record<string, string>,
|
|
445
|
+
) as (
|
|
446
|
+
name: string,
|
|
447
|
+
p?: Record<string, string>,
|
|
448
|
+
search?: Record<string, unknown>,
|
|
449
|
+
) => string;
|
|
450
|
+
|
|
451
|
+
const isPartial = url.searchParams.has("_rsc_partial");
|
|
452
|
+
const isAction = url.searchParams.has("_rsc_action");
|
|
453
|
+
|
|
454
|
+
// Telemetry: mirror the router's match-transaction lifecycle onto the
|
|
455
|
+
// configured sink so a consumer can unit-test createRouter({ telemetry })
|
|
456
|
+
// wiring in-process (the dogfood gap the RSC-free dispatch left — see
|
|
457
|
+
// tests/cloudflare-basic/test/cache-status.test.ts). Every emit is gated on
|
|
458
|
+
// `sink` truthiness: with no sink configured dispatch does zero new work and
|
|
459
|
+
// stays byte-identical for existing callers. Only request.start/end/error are
|
|
460
|
+
// reachable here — cache.decision and loader.* originate in the real match()/
|
|
461
|
+
// matchPartial() + RSC render pipeline dispatch deliberately does not run
|
|
462
|
+
// (module header), so fabricating them would violate the no-fake rule.
|
|
463
|
+
const sink = router.telemetry;
|
|
464
|
+
const telemetryRequestId = sink ? getRequestId(req) : undefined;
|
|
465
|
+
const telemetryStart = sink ? performance.now() : 0;
|
|
466
|
+
|
|
467
|
+
return runWithRequestContext(requestContext, async () => {
|
|
468
|
+
// Set params before middleware/handler run, so global middleware sees
|
|
469
|
+
// ctx.params (production sets them during matching, before middleware).
|
|
470
|
+
// On a redirect/unmatched path there are no route params.
|
|
471
|
+
if (routeKey !== undefined) {
|
|
472
|
+
setRequestContextParams(params, routeKey);
|
|
473
|
+
} else {
|
|
474
|
+
requestContext.params = params;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
// The response-route handler (with its own route middleware) lives inside
|
|
478
|
+
// coreHandler below, mirroring production where handleResponseRoute is
|
|
479
|
+
// nested inside coreHandler. Built lazily so a redirect/404 path never
|
|
480
|
+
// touches it.
|
|
481
|
+
const callResponseRoute = async (): Promise<Response> => {
|
|
482
|
+
// Match production: a partial (client-navigation) request to a response
|
|
483
|
+
// route is short-circuited to X-RSC-Reload (handleResponseRoute), BEFORE
|
|
484
|
+
// route-level middleware runs. Route-level middleware is skipped on a
|
|
485
|
+
// partial, exactly as production skips it.
|
|
486
|
+
const partialFinalHandler = async (): Promise<Response> =>
|
|
487
|
+
createResponseWithMergedHeaders(null, {
|
|
488
|
+
status: 200,
|
|
489
|
+
headers: {
|
|
490
|
+
"X-RSC-Reload": stripInternalParams(url).toString(),
|
|
491
|
+
"content-type": "text/x-component;charset=utf-8",
|
|
492
|
+
},
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
const cleanUrl = new URL(req.url);
|
|
496
|
+
for (const key of [...cleanUrl.searchParams.keys()]) {
|
|
497
|
+
if (key.startsWith("_rsc")) cleanUrl.searchParams.delete(key);
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
// Lightweight response-handler context mirroring handleResponseRoute.
|
|
501
|
+
const responseHandlerCtx = {
|
|
502
|
+
request: req,
|
|
503
|
+
params,
|
|
504
|
+
env,
|
|
505
|
+
searchParams: cleanUrl.searchParams,
|
|
506
|
+
url: cleanUrl,
|
|
507
|
+
originalUrl: requestContext.originalUrl,
|
|
508
|
+
pathname: url.pathname,
|
|
509
|
+
reverse,
|
|
510
|
+
get: requestContext.get,
|
|
511
|
+
header: (name: string, value: string) =>
|
|
512
|
+
requestContext.header(name, value),
|
|
513
|
+
waitUntil: requestContext.waitUntil.bind(requestContext),
|
|
514
|
+
executionContext: requestContext.executionContext,
|
|
515
|
+
_responseType: responseType,
|
|
516
|
+
};
|
|
517
|
+
// Brand as request-scoped so a "use cache" inside a response-route handler
|
|
518
|
+
// is detected as a request-scope violation here exactly as in production
|
|
519
|
+
// (response-route-handler.ts brands the same shape).
|
|
520
|
+
(responseHandlerCtx as Record<symbol, unknown>)[NOCACHE_SYMBOL] = true;
|
|
521
|
+
|
|
522
|
+
const callHandler = async (): Promise<Response> => {
|
|
523
|
+
let merged: Response;
|
|
524
|
+
try {
|
|
525
|
+
let result: unknown;
|
|
526
|
+
try {
|
|
527
|
+
result = await (handler as Function)(responseHandlerCtx);
|
|
528
|
+
} catch (error) {
|
|
529
|
+
if (!(error instanceof Response)) throw error;
|
|
530
|
+
result = error;
|
|
531
|
+
}
|
|
532
|
+
if (result instanceof Response) {
|
|
533
|
+
merged = rewrapResponseRouteResponse(result);
|
|
534
|
+
} else {
|
|
535
|
+
// Route the serialized (json/text/...) body through the SAME
|
|
536
|
+
// production finalizer the RSC handler uses, so ctx.onResponse()
|
|
537
|
+
// callbacks fire and stub headers/cookies + the ctx.setStatus
|
|
538
|
+
// override merge identically to production. Runs inside
|
|
539
|
+
// runWithRequestContext, so _getRequestContext() resolves here.
|
|
540
|
+
const serialized = serializeResponseRouteResult(
|
|
541
|
+
result,
|
|
542
|
+
responseType as string,
|
|
543
|
+
);
|
|
544
|
+
merged = createResponseWithMergedHeaders(serialized.body, {
|
|
545
|
+
status: serialized.status,
|
|
546
|
+
headers: serialized.headers,
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
} catch (error) {
|
|
550
|
+
// Mirror handleResponseRoute's catch: a genuine handler error becomes
|
|
551
|
+
// the router's typed 500 / RouterError-status Response (NOT a rejected
|
|
552
|
+
// promise). Middleware short-circuit via thrown Response is handled by
|
|
553
|
+
// executeMiddleware and never reaches here.
|
|
554
|
+
const derivedStatus =
|
|
555
|
+
error instanceof RouterError ? error.status : 500;
|
|
556
|
+
// Resolve the effective status the way createResponseWithMergedHeaders
|
|
557
|
+
// (below) will (ctx.res.status override) BEFORE building the problem
|
|
558
|
+
// body, so the body's status/title match the actual HTTP status when a
|
|
559
|
+
// handler called ctx.setStatus() before throwing — exactly as
|
|
560
|
+
// handleResponseRoute resolves it.
|
|
561
|
+
const status =
|
|
562
|
+
requestContext.res.status !== 200
|
|
563
|
+
? requestContext.res.status
|
|
564
|
+
: derivedStatus;
|
|
565
|
+
const serialized = serializeResponseRouteError(
|
|
566
|
+
error,
|
|
567
|
+
responseType as string,
|
|
568
|
+
status,
|
|
569
|
+
);
|
|
570
|
+
merged = createResponseWithMergedHeaders(serialized.body, {
|
|
571
|
+
status: serialized.status,
|
|
572
|
+
headers: serialized.headers,
|
|
573
|
+
});
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
// Append Vary: Accept on content-negotiated responses, matching
|
|
577
|
+
// handleResponseRoute's callHandlerWithVary. Skipped on WebSocket
|
|
578
|
+
// upgrade responses (immutable headers, Vary meaningless for a 101).
|
|
579
|
+
if (preview?.negotiated && !isWebSocketUpgradeResponse(merged)) {
|
|
580
|
+
merged.headers.append("Vary", "Accept");
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
return merged;
|
|
584
|
+
};
|
|
585
|
+
|
|
586
|
+
// On a partial request the reload IS the terminal handler and route
|
|
587
|
+
// middleware is skipped; otherwise the response-route handler is wrapped
|
|
588
|
+
// by route-level middleware (production order: route middleware runs
|
|
589
|
+
// inside handleResponseRoute, after the global chain).
|
|
590
|
+
if (isPartial) {
|
|
591
|
+
return partialFinalHandler();
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
// executeHandler = callHandler wrapped by route-level middleware, exactly
|
|
595
|
+
// the unit the production response cache wraps (response-route-handler.ts).
|
|
596
|
+
const executeHandler = (): Promise<Response> => {
|
|
597
|
+
const routeMiddlewareEntries = (preview?.routeMiddleware ?? []).map(
|
|
598
|
+
(mw) => ({
|
|
599
|
+
entry: {
|
|
600
|
+
pattern: null,
|
|
601
|
+
regex: null,
|
|
602
|
+
paramNames: [],
|
|
603
|
+
handler: mw.handler,
|
|
604
|
+
} as MiddlewareEntry<TEnv>,
|
|
605
|
+
params: mw.params,
|
|
606
|
+
}),
|
|
607
|
+
);
|
|
608
|
+
if (routeMiddlewareEntries.length === 0) {
|
|
609
|
+
return callHandler();
|
|
610
|
+
}
|
|
611
|
+
return executeMiddleware<TEnv>(
|
|
612
|
+
routeMiddlewareEntries,
|
|
613
|
+
req,
|
|
614
|
+
env,
|
|
615
|
+
variables,
|
|
616
|
+
callHandler,
|
|
617
|
+
reverse,
|
|
618
|
+
);
|
|
619
|
+
};
|
|
620
|
+
|
|
621
|
+
// Response-route cache path: resolved through the SAME shared serve leaf
|
|
622
|
+
// (rsc/response-cache-serve.ts) production uses, so a cached
|
|
623
|
+
// path.json/path.text route hits/SWRs/writes tags through dispatch exactly
|
|
624
|
+
// as in production — and the two can never drift. Resolved from the matched
|
|
625
|
+
// entry tree (preview.manifestEntry), which previewMatch surfaces for
|
|
626
|
+
// response routes.
|
|
627
|
+
const manifestEntry = preview?.manifestEntry;
|
|
628
|
+
if (manifestEntry) {
|
|
629
|
+
// Lazy so the testing barrel's eager graph stays plugin-rsc-free (see the
|
|
630
|
+
// import note above): the leaf takes createCacheScope/resolveCacheTags as
|
|
631
|
+
// INJECTED deps so it never imports plugin-rsc; we hand it the lazily
|
|
632
|
+
// imported pair here, only once a response route actually matched.
|
|
633
|
+
const cacheScopeMod = await import("../cache/cache-scope.js");
|
|
634
|
+
const { serveResponseRouteWithCache } =
|
|
635
|
+
await import("../rsc/response-cache-serve.js");
|
|
636
|
+
// requestContext is RequestContext<TEnv>; the leaf is typed against the
|
|
637
|
+
// default-env RequestContext (it reads only env-agnostic config).
|
|
638
|
+
// Assignable in the router's own tsc but not when a consumer pins a
|
|
639
|
+
// concrete Env — cast to the leaf's param type.
|
|
640
|
+
const cached = await serveResponseRouteWithCache({
|
|
641
|
+
reqCtx: requestContext as Parameters<
|
|
642
|
+
typeof serveResponseRouteWithCache
|
|
643
|
+
>[0]["reqCtx"],
|
|
644
|
+
manifestEntry,
|
|
645
|
+
responseType: responseType as string,
|
|
646
|
+
url,
|
|
647
|
+
executeHandler,
|
|
648
|
+
deps: {
|
|
649
|
+
createCacheScope: cacheScopeMod.createCacheScope,
|
|
650
|
+
resolveCacheTags: cacheScopeMod.resolveCacheTags,
|
|
651
|
+
},
|
|
652
|
+
});
|
|
653
|
+
if (cached !== undefined) return cached;
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
return executeHandler().then(finalizeResponse);
|
|
657
|
+
};
|
|
658
|
+
|
|
659
|
+
// The renderStartMs deadline wraps ONLY the response-route unit, mirroring
|
|
660
|
+
// handler.ts:845 where withTimeout(handleResponseRoute(...)) runs INSIDE
|
|
661
|
+
// coreRequestHandler — after the global middleware chain has already
|
|
662
|
+
// entered. Wrapping the outer chain (as an earlier version did) counted
|
|
663
|
+
// global middleware time toward the deadline, so a slow global auth
|
|
664
|
+
// middleware could 504 a request production serves. On timeout the 504/
|
|
665
|
+
// onTimeout Response is RETURNED from coreHandler so it flows back out
|
|
666
|
+
// through the global chain and finalizeResponse, identical to production
|
|
667
|
+
// (handler.ts:857 returns handleTimeoutResponse into the same next() path).
|
|
668
|
+
const runResponseRoute = async (): Promise<Response> => {
|
|
669
|
+
const responseWork = callResponseRoute();
|
|
670
|
+
const renderOutcome = await withTimeout(
|
|
671
|
+
responseWork,
|
|
672
|
+
router.timeouts?.renderStartMs,
|
|
673
|
+
"render-start",
|
|
674
|
+
);
|
|
675
|
+
if (!renderOutcome.timedOut) return renderOutcome.result;
|
|
676
|
+
|
|
677
|
+
// The race's losing side keeps executing after the timeout wins; its
|
|
678
|
+
// eventual Response is dropped. Swallow any rejection (no
|
|
679
|
+
// unhandled-rejection surfacing) and cancel the orphaned body stream so,
|
|
680
|
+
// under vitest, the abandoned handler cannot leak into the next test.
|
|
681
|
+
// Production abandons it too (handler.ts:845); this is a runner-scoped
|
|
682
|
+
// cleanup, not an observable-behavior change.
|
|
683
|
+
void responseWork
|
|
684
|
+
.then(
|
|
685
|
+
(orphan) => orphan.body?.cancel(),
|
|
686
|
+
() => {},
|
|
687
|
+
)
|
|
688
|
+
.catch(() => {});
|
|
689
|
+
|
|
690
|
+
const durationMs = renderOutcome.durationMs;
|
|
691
|
+
const timeoutError = new RouterTimeoutError("render-start", durationMs);
|
|
692
|
+
// Field-for-field parity with handleTimeoutResponse's callOnError
|
|
693
|
+
// (handler.ts:254): env is passed through (was previously dropped). render
|
|
694
|
+
// is always absent — dispatch runs no Flight/HTML driver, so there is no
|
|
695
|
+
// foreground cursor to snapshot.
|
|
696
|
+
invokeOnError(
|
|
697
|
+
router.onError,
|
|
698
|
+
timeoutError,
|
|
699
|
+
"handler",
|
|
700
|
+
{
|
|
701
|
+
request: req,
|
|
702
|
+
url,
|
|
703
|
+
env,
|
|
704
|
+
routeKey,
|
|
705
|
+
handledByBoundary: false,
|
|
706
|
+
metadata: { timeout: true, phase: "render-start", durationMs },
|
|
707
|
+
},
|
|
708
|
+
"RSC",
|
|
709
|
+
);
|
|
710
|
+
if (sink) {
|
|
711
|
+
safeEmit(resolveSink(sink), {
|
|
712
|
+
type: "request.timeout",
|
|
713
|
+
timestamp: performance.now(),
|
|
714
|
+
requestId: telemetryRequestId,
|
|
715
|
+
phase: "render-start",
|
|
716
|
+
pathname: url.pathname,
|
|
717
|
+
routeKey,
|
|
718
|
+
durationMs,
|
|
719
|
+
customHandler: router.onTimeout !== undefined,
|
|
720
|
+
});
|
|
721
|
+
}
|
|
722
|
+
if (router.onTimeout) {
|
|
723
|
+
try {
|
|
724
|
+
return await router.onTimeout({
|
|
725
|
+
phase: "render-start",
|
|
726
|
+
request: req,
|
|
727
|
+
url,
|
|
728
|
+
env,
|
|
729
|
+
routeKey,
|
|
730
|
+
durationMs,
|
|
731
|
+
});
|
|
732
|
+
} catch (error) {
|
|
733
|
+
if (process.env.NODE_ENV !== "production") {
|
|
734
|
+
console.error("[dispatch] onTimeout callback error:", error);
|
|
735
|
+
}
|
|
736
|
+
return createDefaultTimeoutResponse("render-start");
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
return createDefaultTimeoutResponse("render-start");
|
|
740
|
+
};
|
|
741
|
+
|
|
742
|
+
// coreHandler is the single terminal the global middleware chain wraps,
|
|
743
|
+
// mirroring production's coreHandler (handler.ts): a trailing-slash/redirect
|
|
744
|
+
// 308, an unmatched-path 404, or the response route. Both the 308 and the
|
|
745
|
+
// 404 are produced via createResponseWithMergedHeaders so middleware-set
|
|
746
|
+
// cookies/headers merge onto them, identical to production's
|
|
747
|
+
// rsc-rendering.ts redirect path — and because they sit inside the chain, a
|
|
748
|
+
// global middleware that short-circuits (e.g. an auth 401) runs first and
|
|
749
|
+
// wins, never reaching the 308/404. The renderStartMs deadline lives inside
|
|
750
|
+
// runResponseRoute (below the chain), never covering the 308/404 paths —
|
|
751
|
+
// production only wraps the response-route plan (handler.ts:834-856).
|
|
752
|
+
const coreHandler = async (): Promise<Response> => {
|
|
753
|
+
if (redirectTo) {
|
|
754
|
+
return createResponseWithMergedHeaders(null, {
|
|
755
|
+
status: 308,
|
|
756
|
+
headers: { Location: redirectTo + url.search },
|
|
757
|
+
});
|
|
758
|
+
}
|
|
759
|
+
if (isUnmatched) {
|
|
760
|
+
return createResponseWithMergedHeaders("Not Found", {
|
|
761
|
+
status: 404,
|
|
762
|
+
headers: { "content-type": "text/plain;charset=utf-8" },
|
|
763
|
+
});
|
|
764
|
+
}
|
|
765
|
+
return runResponseRoute();
|
|
766
|
+
};
|
|
767
|
+
|
|
768
|
+
// request.start opens the match transaction, mirroring match-handlers.ts.
|
|
769
|
+
// transaction is always "match" (dispatch has no matchPartial split);
|
|
770
|
+
// isPartial carries the ?_rsc_partial signal the same way production does.
|
|
771
|
+
if (sink) {
|
|
772
|
+
safeEmit(resolveSink(sink), {
|
|
773
|
+
type: "request.start",
|
|
774
|
+
timestamp: telemetryStart,
|
|
775
|
+
requestId: telemetryRequestId,
|
|
776
|
+
method: req.method,
|
|
777
|
+
pathname: url.pathname,
|
|
778
|
+
transaction: "match",
|
|
779
|
+
isPartial,
|
|
780
|
+
});
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
try {
|
|
784
|
+
// Global (pattern-matched) middleware wraps coreHandler, exactly as
|
|
785
|
+
// production wraps coreHandler with executeMiddleware (handler.ts:568).
|
|
786
|
+
// The renderStartMs deadline is deliberately NOT applied here — it wraps
|
|
787
|
+
// only the response-route unit inside coreHandler (see runResponseRoute),
|
|
788
|
+
// mirroring handler.ts:845 so global middleware time is never counted
|
|
789
|
+
// toward the deadline.
|
|
790
|
+
const globalMatches = matchMiddleware(url.pathname, router.middleware);
|
|
791
|
+
const mwResponse =
|
|
792
|
+
globalMatches.length === 0
|
|
793
|
+
? await coreHandler()
|
|
794
|
+
: await executeMiddleware<TEnv>(
|
|
795
|
+
globalMatches,
|
|
796
|
+
req,
|
|
797
|
+
env,
|
|
798
|
+
variables,
|
|
799
|
+
coreHandler,
|
|
800
|
+
reverse,
|
|
801
|
+
);
|
|
802
|
+
|
|
803
|
+
// Match production's global-chain exit (handler.ts): on a partial/action
|
|
804
|
+
// request a middleware 3xx redirect is converted to a Flight-safe response
|
|
805
|
+
// so fetch() does not auto-follow it; every path then drains onResponse
|
|
806
|
+
// callbacks via finalizeResponse. dispatch is RSC-free, so the
|
|
807
|
+
// createRedirectFlightResponse stand-in falls back to the no-state
|
|
808
|
+
// 204 + X-RSC-Redirect (see the location-state divergence in the header).
|
|
809
|
+
let finalResponse: Response;
|
|
810
|
+
if (isPartial || isAction) {
|
|
811
|
+
const softOpts = {
|
|
812
|
+
requestOrigin: url.origin,
|
|
813
|
+
basename: router.basename,
|
|
814
|
+
};
|
|
815
|
+
// Pass `external` through: interceptRedirectForPartial forwards the
|
|
816
|
+
// out-of-band brand as the third callback arg (helpers.ts). Dropping it
|
|
817
|
+
// would neutralize redirect(url, { external: true }) to "/" in dispatch
|
|
818
|
+
// while production preserves it via createRedirectFlightResponse.
|
|
819
|
+
const intercepted = interceptRedirectForPartial(
|
|
820
|
+
mwResponse,
|
|
821
|
+
(redirectUrl, _locationState, external) =>
|
|
822
|
+
createSimpleRedirectResponse(redirectUrl, {
|
|
823
|
+
...softOpts,
|
|
824
|
+
external,
|
|
825
|
+
}),
|
|
826
|
+
softOpts,
|
|
827
|
+
);
|
|
828
|
+
finalResponse = finalizeResponse(intercepted ?? mwResponse);
|
|
829
|
+
} else {
|
|
830
|
+
finalResponse = finalizeResponse(mwResponse);
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
// request.end closes the transaction. dispatch produces no RSC segments and
|
|
834
|
+
// holds no match-cache state, so segmentCount/cacheHit are 0/false — the
|
|
835
|
+
// same shape production emits for its own redirect (segment-less) result.
|
|
836
|
+
if (sink) {
|
|
837
|
+
safeEmit(resolveSink(sink), {
|
|
838
|
+
type: "request.end",
|
|
839
|
+
timestamp: performance.now(),
|
|
840
|
+
requestId: telemetryRequestId,
|
|
841
|
+
method: req.method,
|
|
842
|
+
pathname: url.pathname,
|
|
843
|
+
transaction: "match",
|
|
844
|
+
durationMs: performance.now() - telemetryStart,
|
|
845
|
+
segmentCount: 0,
|
|
846
|
+
cacheHit: false,
|
|
847
|
+
// dispatch's final response IS built before request.end (unlike
|
|
848
|
+
// match()/matchPartial(), whose Response is built after), so stamp its
|
|
849
|
+
// status — the same field a thrown-Response short-circuit carries.
|
|
850
|
+
status: finalResponse.status,
|
|
851
|
+
});
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
// Mirror production's single open-redirect chokepoint (handler.ts): every
|
|
855
|
+
// browser-followed (3xx + Location) redirect is same-origin guarded before
|
|
856
|
+
// it leaves -- a cross-origin Location is rewritten to the basename root
|
|
857
|
+
// unless redirect(url, { external: true }) opted out. Soft partial/action
|
|
858
|
+
// redirects are already resolved at createSimpleRedirectResponse time.
|
|
859
|
+
const guardedResponse = guardOutgoingRedirect(
|
|
860
|
+
finalResponse,
|
|
861
|
+
url.origin,
|
|
862
|
+
router.basename,
|
|
863
|
+
);
|
|
864
|
+
|
|
865
|
+
// Mirror production's stream-idle watchdog (handler.ts response tail),
|
|
866
|
+
// same gating and reporting — dispatch is the userland dogfood surface
|
|
867
|
+
// for timeouts.streamIdleMs, so the primitive carries the real wiring,
|
|
868
|
+
// not a stub. Websocket check FIRST (an upgrade response's body getter
|
|
869
|
+
// must never be poked); onTimeout does not apply mid-stream.
|
|
870
|
+
const streamIdleMs = router.timeouts?.streamIdleMs;
|
|
871
|
+
if (
|
|
872
|
+
isTimeoutEnabled(streamIdleMs) &&
|
|
873
|
+
!isWebSocketUpgradeResponse(guardedResponse) &&
|
|
874
|
+
guardedResponse.body
|
|
875
|
+
) {
|
|
876
|
+
return applyStreamIdleTimeout(
|
|
877
|
+
guardedResponse,
|
|
878
|
+
streamIdleMs!,
|
|
879
|
+
(trip) => {
|
|
880
|
+
invokeOnError(
|
|
881
|
+
router.onError,
|
|
882
|
+
trip.error,
|
|
883
|
+
"handler",
|
|
884
|
+
{
|
|
885
|
+
request: req,
|
|
886
|
+
url,
|
|
887
|
+
env,
|
|
888
|
+
handledByBoundary: false,
|
|
889
|
+
metadata: {
|
|
890
|
+
timeout: true,
|
|
891
|
+
phase: "stream-idle",
|
|
892
|
+
durationMs: trip.totalMs,
|
|
893
|
+
},
|
|
894
|
+
},
|
|
895
|
+
"RSC",
|
|
896
|
+
);
|
|
897
|
+
if (sink) {
|
|
898
|
+
safeEmit(resolveSink(sink), {
|
|
899
|
+
type: "request.timeout",
|
|
900
|
+
timestamp: performance.now(),
|
|
901
|
+
requestId: telemetryRequestId,
|
|
902
|
+
phase: "stream-idle",
|
|
903
|
+
pathname: url.pathname,
|
|
904
|
+
durationMs: trip.totalMs,
|
|
905
|
+
customHandler: false,
|
|
906
|
+
});
|
|
907
|
+
}
|
|
908
|
+
},
|
|
909
|
+
);
|
|
910
|
+
}
|
|
911
|
+
return guardedResponse;
|
|
912
|
+
} catch (error) {
|
|
913
|
+
if (sink) {
|
|
914
|
+
if (error instanceof Response) {
|
|
915
|
+
// executeMiddleware absorbs a middleware-thrown Response and returns it
|
|
916
|
+
// (middleware.ts:566), so a thrown Response never actually reaches this
|
|
917
|
+
// level in dispatch. Defensive: if one ever does it is a completed
|
|
918
|
+
// request from the consumer's seat (a short-circuit redirect), so mirror
|
|
919
|
+
// plan 002 / match-handlers.ts and emit request.end, not request.error.
|
|
920
|
+
safeEmit(resolveSink(sink), {
|
|
921
|
+
type: "request.end",
|
|
922
|
+
timestamp: performance.now(),
|
|
923
|
+
requestId: telemetryRequestId,
|
|
924
|
+
method: req.method,
|
|
925
|
+
pathname: url.pathname,
|
|
926
|
+
transaction: "match",
|
|
927
|
+
durationMs: performance.now() - telemetryStart,
|
|
928
|
+
segmentCount: 0,
|
|
929
|
+
cacheHit: false,
|
|
930
|
+
// Carry the short-circuit Response's status (parity with
|
|
931
|
+
// match-handlers.ts's thrown-Response request.end).
|
|
932
|
+
status: error.status,
|
|
933
|
+
});
|
|
934
|
+
} else {
|
|
935
|
+
safeEmit(resolveSink(sink), {
|
|
936
|
+
type: "request.error",
|
|
937
|
+
timestamp: performance.now(),
|
|
938
|
+
requestId: telemetryRequestId,
|
|
939
|
+
method: req.method,
|
|
940
|
+
pathname: url.pathname,
|
|
941
|
+
transaction: "match",
|
|
942
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
943
|
+
phase: "routing",
|
|
944
|
+
durationMs: performance.now() - telemetryStart,
|
|
945
|
+
});
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
throw error;
|
|
949
|
+
}
|
|
950
|
+
});
|
|
951
|
+
}
|