@rangojs/router 0.0.0-experimental.tapabs3 → 0.1.1
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/dist/bin/rango.js +19 -41
- 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 +221 -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 +43 -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 +27 -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/partial-update.d.ts +61 -0
- package/dist/types/browser/prefetch/cache.d.ts +183 -0
- package/dist/types/browser/prefetch/fetch.d.ts +52 -0
- package/dist/types/browser/prefetch/loader.d.ts +10 -0
- package/dist/types/browser/prefetch/observer.d.ts +27 -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 +3 -0
- package/dist/types/browser/rango-state.d.ts +52 -0
- package/dist/types/browser/react/Link.d.ts +140 -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 +54 -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 +141 -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 +518 -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/prefix-tree-utils.d.ts +56 -0
- package/dist/types/build/route-trie.d.ts +89 -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 +18 -0
- package/dist/types/build/route-types/router-processing.d.ts +82 -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-key-utils.d.ts +35 -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 +136 -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 +105 -0
- package/dist/types/cache/cf/cf-cache-store.d.ts +589 -0
- package/dist/types/cache/cf/cf-cache-types.d.ts +363 -0
- package/dist/types/cache/cf/cf-kv-utils.d.ts +22 -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 +69 -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 +7 -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 +60 -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 +71 -0
- package/dist/types/cache/types.d.ts +435 -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.d.ts +184 -0
- package/dist/types/client.rsc.d.ts +39 -0
- package/dist/types/cloudflare/index.d.ts +7 -0
- package/dist/types/cloudflare/tracing.d.ts +53 -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 +5 -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 +226 -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 +12 -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 +112 -0
- package/dist/types/index.rsc.d.ts +51 -0
- package/dist/types/internal-debug.d.ts +1 -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 +12 -0
- package/dist/types/outlet-provider.d.ts +12 -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 +40 -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 +392 -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 +76 -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 +161 -0
- package/dist/types/router/intercept-resolution.d.ts +79 -0
- package/dist/types/router/lazy-includes.d.ts +26 -0
- package/dist/types/router/loader-resolution.d.ts +63 -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 +49 -0
- package/dist/types/router/match-middleware/background-revalidation.d.ts +113 -0
- package/dist/types/router/match-middleware/cache-lookup.d.ts +113 -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 +22 -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-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 +57 -0
- package/dist/types/router/route-snapshot.d.ts +112 -0
- package/dist/types/router/router-context.d.ts +137 -0
- package/dist/types/router/router-interfaces.d.ts +434 -0
- package/dist/types/router/router-options.d.ts +738 -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 +28 -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 +96 -0
- package/dist/types/router/tracing.d.ts +125 -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 +6 -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 +124 -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 +139 -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/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 +84 -0
- package/dist/types/rsc/shell-capture-constants.d.ts +27 -0
- package/dist/types/rsc/shell-capture.d.ts +370 -0
- package/dist/types/rsc/shell-serve.d.ts +174 -0
- package/dist/types/rsc/ssr-setup.d.ts +73 -0
- package/dist/types/rsc/transition-gate.d.ts +27 -0
- package/dist/types/rsc/types.d.ts +292 -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 +56 -0
- package/dist/types/segment-loader-promise.d.ts +22 -0
- package/dist/types/segment-system.d.ts +84 -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 +100 -0
- package/dist/types/server/loader-registry.d.ts +32 -0
- package/dist/types/server/request-context.d.ts +628 -0
- package/dist/types/server/root-layout.d.ts +3 -0
- package/dist/types/server.d.ts +15 -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 +57 -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 +62 -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 +246 -0
- package/dist/types/testing/run-loader.d.ts +186 -0
- package/dist/types/testing/run-middleware.d.ts +132 -0
- package/dist/types/testing/run-transition-when.d.ts +77 -0
- package/dist/types/testing/shell-status.d.ts +58 -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 +93 -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 +182 -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 +234 -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 +197 -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 +70 -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/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 +163 -0
- package/dist/types/vite/discovery/virtual-module-codegen.d.ts +15 -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 +6 -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/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 +55 -0
- package/dist/vite/index.js +1208 -431
- package/package.json +45 -34
- package/skills/caching/SKILL.md +1 -1
- package/skills/catalog.json +6 -0
- package/skills/cloudflare/SKILL.md +149 -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/composability/SKILL.md +14 -0
- package/skills/debug-manifest/SKILL.md +2 -10
- package/skills/links/SKILL.md +12 -0
- package/skills/middleware/SKILL.md +33 -0
- package/skills/migrate-nextjs/SKILL.md +65 -16
- package/skills/migrate-nextjs/backend-host-swap.md +120 -0
- package/skills/migrate-react-router/SKILL.md +6 -6
- package/skills/mime-routes/SKILL.md +25 -17
- package/skills/ppr/SKILL.md +148 -19
- package/skills/prerender/SKILL.md +44 -1
- package/skills/rango/SKILL.md +10 -10
- package/skills/response-routes/SKILL.md +41 -4
- package/skills/route/SKILL.md +6 -0
- package/skills/testing/SKILL.md +1 -0
- package/skills/testing/cache-prerender.md +43 -2
- package/skills/testing/response-routes.md +2 -2
- package/src/browser/dev-discovery.ts +66 -0
- package/src/browser/event-controller.ts +16 -2
- package/src/browser/navigation-client.ts +6 -0
- package/src/browser/navigation-store.ts +4 -271
- package/src/browser/partial-update.ts +7 -14
- package/src/browser/prefetch/cache.ts +1 -1
- package/src/browser/prefetch/loader.ts +110 -0
- package/src/browser/prefetch/runtime.ts +7 -0
- package/src/browser/react/Link.tsx +7 -10
- package/src/browser/react/NavigationProvider.tsx +1 -1
- package/src/browser/react/use-router.ts +1 -1
- package/src/browser/rsc-router.tsx +15 -2
- package/src/browser/types.ts +4 -27
- package/src/build/generate-manifest.ts +16 -36
- package/src/build/route-trie.ts +5 -50
- package/src/cache/cache-key-utils.ts +0 -1
- package/src/cache/cache-scope.ts +54 -5
- package/src/cache/cf/cf-cache-store.ts +522 -89
- package/src/cache/cf/cf-cache-types.ts +66 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +5 -2
- package/src/cache/cf/cf-zone-purge.ts +101 -0
- package/src/cache/cf/index.ts +5 -0
- package/src/cache/handle-snapshot.ts +22 -1
- package/src/cache/index.ts +2 -0
- package/src/cache/memory-segment-store.ts +44 -1
- package/src/cache/segment-codec.ts +47 -0
- package/src/cache/shell-snapshot.ts +124 -29
- package/src/cache/types.ts +57 -2
- package/src/cache/vercel/vercel-cache-store.ts +113 -14
- package/src/deps/ssr.ts +4 -1
- package/src/dev-discovery-protocol.ts +11 -0
- package/src/index.rsc.ts +7 -0
- package/src/index.ts +1 -0
- package/src/prerender/build-shell-capture.ts +453 -0
- package/src/prerender/shell-manifest-key.ts +20 -0
- package/src/prerender/store.ts +15 -1
- package/src/prerender.ts +3 -3
- package/src/redirect-origin.ts +37 -8
- package/src/route-definition/dsl-helpers.ts +7 -2
- package/src/route-map-builder.ts +61 -54
- package/src/router/content-negotiation.ts +47 -5
- package/src/router/handler-context.ts +31 -15
- package/src/router/intercept-resolution.ts +30 -1
- package/src/router/lazy-includes.ts +1 -0
- package/src/router/loader-resolution.ts +16 -0
- package/src/router/match-api.ts +14 -3
- package/src/router/match-middleware/cache-lookup.ts +12 -1
- package/src/router/metrics.ts +17 -2
- package/src/router/middleware-types.ts +17 -0
- package/src/router/middleware.ts +4 -0
- package/src/router/prerender-match.ts +47 -2
- package/src/router/router-interfaces.ts +11 -6
- package/src/router/router-options.ts +13 -8
- package/src/router/segment-resolution/fresh.ts +21 -2
- package/src/router/segment-resolution/helpers.ts +1 -1
- package/src/router/segment-resolution/loader-cache.ts +38 -7
- package/src/router/segment-resolution/mask-nested.ts +19 -3
- package/src/router/segment-resolution/revalidation.ts +9 -0
- package/src/router/segment-resolution/static-store.ts +36 -10
- package/src/router/telemetry-otel.ts +11 -0
- package/src/router/telemetry.ts +1 -0
- package/src/router/timeout.ts +41 -1
- package/src/router.ts +39 -7
- package/src/rsc/capture-queue.ts +67 -0
- package/src/rsc/handler-context.ts +1 -0
- package/src/rsc/handler.ts +153 -77
- package/src/rsc/helpers.ts +67 -4
- package/src/rsc/loader-fetch.ts +2 -2
- package/src/rsc/manifest-init.ts +4 -11
- package/src/rsc/progressive-enhancement.ts +66 -54
- package/src/rsc/redirect-guard.ts +3 -1
- package/src/rsc/render-pipeline.ts +567 -0
- package/src/rsc/response-cache-serve.ts +39 -18
- package/src/rsc/response-route-handler.ts +9 -45
- package/src/rsc/rsc-rendering.ts +455 -194
- package/src/rsc/server-action.ts +50 -42
- package/src/rsc/shell-build-manifest.ts +316 -0
- package/src/rsc/shell-capture-constants.ts +27 -0
- package/src/rsc/shell-capture.ts +622 -73
- package/src/rsc/shell-serve.ts +133 -3
- package/src/rsc/ssr-setup.ts +102 -23
- package/src/rsc/types.ts +2 -0
- package/src/segment-fragments.ts +124 -0
- package/src/server/context.ts +212 -8
- package/src/server/request-context.ts +322 -48
- package/src/server.ts +0 -2
- package/src/ssr/index.tsx +167 -32
- package/src/ssr/preinit-client-references.ts +106 -0
- package/src/ssr/ssr-root.tsx +35 -2
- package/src/testing/dispatch.ts +133 -67
- package/src/testing/e2e/index.ts +8 -0
- package/src/testing/index.ts +9 -1
- package/src/testing/internal/context.ts +9 -0
- package/src/testing/render-handler.ts +15 -1
- package/src/testing/run-middleware.ts +14 -0
- package/src/testing/shell-status.ts +100 -0
- package/src/types/handler-context.ts +13 -2
- package/src/types/route-entry.ts +3 -0
- package/src/urls/include-helper.ts +1 -0
- package/src/urls/path-helper-types.ts +1 -1
- package/src/urls/path-helper.ts +8 -4
- package/src/urls/pattern-types.ts +29 -0
- package/src/vite/discovery/bundle-postprocess.ts +10 -7
- package/src/vite/discovery/discover-routers.ts +39 -79
- package/src/vite/discovery/prerender-collection.ts +29 -2
- package/src/vite/discovery/shell-prerender-phase.ts +397 -0
- package/src/vite/discovery/state.ts +48 -4
- package/src/vite/discovery/virtual-module-codegen.ts +201 -62
- package/src/vite/index.ts +1 -0
- package/src/vite/plugin-types.ts +33 -0
- package/src/vite/plugins/version-injector.ts +0 -1
- package/src/vite/plugins/version-plugin.ts +8 -0
- package/src/vite/plugins/virtual-entries.ts +48 -5
- package/src/vite/rango.ts +42 -2
- package/src/vite/router-discovery.ts +564 -43
- package/src/vite/utils/manifest-utils.ts +1 -4
- package/src/vite/utils/package-resolution.ts +1 -0
- package/src/vite/utils/prerender-utils.ts +25 -6
- package/src/vite/utils/shared-utils.ts +11 -2
- package/dist/__internal.d.ts +0 -83
- package/dist/__internal.d.ts.map +0 -1
- package/dist/__internal.js +0 -19
- package/dist/__internal.js.map +0 -1
- package/dist/__mocks__/version.d.ts +0 -7
- package/dist/__mocks__/version.d.ts.map +0 -1
- package/dist/__mocks__/version.js +0 -7
- package/dist/__mocks__/version.js.map +0 -1
- package/dist/__tests__/client-href.test.d.ts +0 -2
- package/dist/__tests__/client-href.test.d.ts.map +0 -1
- package/dist/__tests__/client-href.test.js +0 -74
- package/dist/__tests__/client-href.test.js.map +0 -1
- package/dist/__tests__/component-utils.test.d.ts +0 -2
- package/dist/__tests__/component-utils.test.d.ts.map +0 -1
- package/dist/__tests__/component-utils.test.js +0 -51
- package/dist/__tests__/component-utils.test.js.map +0 -1
- package/dist/__tests__/event-controller.test.d.ts +0 -2
- package/dist/__tests__/event-controller.test.d.ts.map +0 -1
- package/dist/__tests__/event-controller.test.js +0 -538
- package/dist/__tests__/event-controller.test.js.map +0 -1
- package/dist/__tests__/helpers/route-tree.d.ts +0 -118
- package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
- package/dist/__tests__/helpers/route-tree.js +0 -374
- package/dist/__tests__/helpers/route-tree.js.map +0 -1
- package/dist/__tests__/match-result.test.d.ts +0 -2
- package/dist/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/__tests__/match-result.test.js +0 -154
- package/dist/__tests__/match-result.test.js.map +0 -1
- package/dist/__tests__/navigation-store.test.d.ts +0 -2
- package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
- package/dist/__tests__/navigation-store.test.js +0 -440
- package/dist/__tests__/navigation-store.test.js.map +0 -1
- package/dist/__tests__/partial-update.test.d.ts +0 -2
- package/dist/__tests__/partial-update.test.d.ts.map +0 -1
- package/dist/__tests__/partial-update.test.js +0 -1009
- package/dist/__tests__/partial-update.test.js.map +0 -1
- package/dist/__tests__/reverse-types.test.d.ts +0 -8
- package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
- package/dist/__tests__/reverse-types.test.js +0 -656
- package/dist/__tests__/reverse-types.test.js.map +0 -1
- package/dist/__tests__/route-definition.test.d.ts +0 -2
- package/dist/__tests__/route-definition.test.d.ts.map +0 -1
- package/dist/__tests__/route-definition.test.js +0 -55
- package/dist/__tests__/route-definition.test.js.map +0 -1
- package/dist/__tests__/router-helpers.test.d.ts +0 -2
- package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
- package/dist/__tests__/router-helpers.test.js +0 -377
- package/dist/__tests__/router-helpers.test.js.map +0 -1
- package/dist/__tests__/router-integration-2.test.d.ts +0 -2
- package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration-2.test.js +0 -426
- package/dist/__tests__/router-integration-2.test.js.map +0 -1
- package/dist/__tests__/router-integration.test.d.ts +0 -2
- package/dist/__tests__/router-integration.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration.test.js +0 -1051
- package/dist/__tests__/router-integration.test.js.map +0 -1
- package/dist/__tests__/search-params.test.d.ts +0 -5
- package/dist/__tests__/search-params.test.d.ts.map +0 -1
- package/dist/__tests__/search-params.test.js +0 -306
- package/dist/__tests__/search-params.test.js.map +0 -1
- package/dist/__tests__/segment-system.test.d.ts +0 -2
- package/dist/__tests__/segment-system.test.d.ts.map +0 -1
- package/dist/__tests__/segment-system.test.js +0 -627
- package/dist/__tests__/segment-system.test.js.map +0 -1
- package/dist/__tests__/static-handler-types.test.d.ts +0 -8
- package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
- package/dist/__tests__/static-handler-types.test.js +0 -63
- package/dist/__tests__/static-handler-types.test.js.map +0 -1
- package/dist/__tests__/urls.test.d.ts +0 -2
- package/dist/__tests__/urls.test.d.ts.map +0 -1
- package/dist/__tests__/urls.test.js +0 -421
- package/dist/__tests__/urls.test.js.map +0 -1
- package/dist/__tests__/use-mount.test.d.ts +0 -2
- package/dist/__tests__/use-mount.test.d.ts.map +0 -1
- package/dist/__tests__/use-mount.test.js +0 -35
- package/dist/__tests__/use-mount.test.js.map +0 -1
- package/dist/bin/rango.d.ts +0 -2
- package/dist/bin/rango.d.ts.map +0 -1
- package/dist/bin/rango.js.map +0 -1
- package/dist/browser/event-controller.d.ts +0 -191
- package/dist/browser/event-controller.d.ts.map +0 -1
- package/dist/browser/event-controller.js +0 -559
- package/dist/browser/event-controller.js.map +0 -1
- package/dist/browser/index.d.ts +0 -2
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -14
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/link-interceptor.d.ts +0 -38
- package/dist/browser/link-interceptor.d.ts.map +0 -1
- package/dist/browser/link-interceptor.js +0 -99
- package/dist/browser/link-interceptor.js.map +0 -1
- package/dist/browser/logging.d.ts +0 -10
- package/dist/browser/logging.d.ts.map +0 -1
- package/dist/browser/logging.js +0 -29
- package/dist/browser/logging.js.map +0 -1
- package/dist/browser/lru-cache.d.ts +0 -17
- package/dist/browser/lru-cache.d.ts.map +0 -1
- package/dist/browser/lru-cache.js +0 -50
- package/dist/browser/lru-cache.js.map +0 -1
- package/dist/browser/merge-segment-loaders.d.ts +0 -39
- package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
- package/dist/browser/merge-segment-loaders.js +0 -102
- package/dist/browser/merge-segment-loaders.js.map +0 -1
- package/dist/browser/navigation-bridge.d.ts +0 -102
- package/dist/browser/navigation-bridge.d.ts.map +0 -1
- package/dist/browser/navigation-bridge.js +0 -708
- package/dist/browser/navigation-bridge.js.map +0 -1
- package/dist/browser/navigation-client.d.ts +0 -25
- package/dist/browser/navigation-client.d.ts.map +0 -1
- package/dist/browser/navigation-client.js +0 -157
- package/dist/browser/navigation-client.js.map +0 -1
- package/dist/browser/navigation-store.d.ts +0 -101
- package/dist/browser/navigation-store.d.ts.map +0 -1
- package/dist/browser/navigation-store.js +0 -625
- package/dist/browser/navigation-store.js.map +0 -1
- package/dist/browser/partial-update.d.ts +0 -75
- package/dist/browser/partial-update.d.ts.map +0 -1
- package/dist/browser/partial-update.js +0 -426
- package/dist/browser/partial-update.js.map +0 -1
- package/dist/browser/react/Link.d.ts +0 -86
- package/dist/browser/react/Link.d.ts.map +0 -1
- package/dist/browser/react/Link.js +0 -128
- package/dist/browser/react/Link.js.map +0 -1
- package/dist/browser/react/NavigationProvider.d.ts +0 -63
- package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
- package/dist/browser/react/NavigationProvider.js +0 -216
- package/dist/browser/react/NavigationProvider.js.map +0 -1
- package/dist/browser/react/ScrollRestoration.d.ts +0 -75
- package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
- package/dist/browser/react/ScrollRestoration.js +0 -57
- package/dist/browser/react/ScrollRestoration.js.map +0 -1
- package/dist/browser/react/context.d.ts +0 -46
- package/dist/browser/react/context.d.ts.map +0 -1
- package/dist/browser/react/context.js +0 -10
- package/dist/browser/react/context.js.map +0 -1
- package/dist/browser/react/index.d.ts +0 -11
- package/dist/browser/react/index.d.ts.map +0 -1
- package/dist/browser/react/index.js +0 -22
- package/dist/browser/react/index.js.map +0 -1
- package/dist/browser/react/location-state-shared.d.ts +0 -63
- package/dist/browser/react/location-state-shared.d.ts.map +0 -1
- package/dist/browser/react/location-state-shared.js +0 -81
- package/dist/browser/react/location-state-shared.js.map +0 -1
- package/dist/browser/react/location-state.d.ts +0 -23
- package/dist/browser/react/location-state.d.ts.map +0 -1
- package/dist/browser/react/location-state.js +0 -29
- package/dist/browser/react/location-state.js.map +0 -1
- package/dist/browser/react/mount-context.d.ts +0 -24
- package/dist/browser/react/mount-context.d.ts.map +0 -1
- package/dist/browser/react/mount-context.js +0 -24
- package/dist/browser/react/mount-context.js.map +0 -1
- package/dist/browser/react/use-action.d.ts +0 -64
- package/dist/browser/react/use-action.d.ts.map +0 -1
- package/dist/browser/react/use-action.js +0 -134
- package/dist/browser/react/use-action.js.map +0 -1
- package/dist/browser/react/use-client-cache.d.ts +0 -41
- package/dist/browser/react/use-client-cache.d.ts.map +0 -1
- package/dist/browser/react/use-client-cache.js +0 -39
- package/dist/browser/react/use-client-cache.js.map +0 -1
- package/dist/browser/react/use-handle.d.ts +0 -31
- package/dist/browser/react/use-handle.d.ts.map +0 -1
- package/dist/browser/react/use-handle.js +0 -144
- package/dist/browser/react/use-handle.js.map +0 -1
- package/dist/browser/react/use-href.d.ts +0 -33
- package/dist/browser/react/use-href.d.ts.map +0 -1
- package/dist/browser/react/use-href.js +0 -39
- package/dist/browser/react/use-href.js.map +0 -1
- package/dist/browser/react/use-link-status.d.ts +0 -37
- package/dist/browser/react/use-link-status.d.ts.map +0 -1
- package/dist/browser/react/use-link-status.js +0 -99
- package/dist/browser/react/use-link-status.js.map +0 -1
- package/dist/browser/react/use-mount.d.ts +0 -25
- package/dist/browser/react/use-mount.d.ts.map +0 -1
- package/dist/browser/react/use-mount.js +0 -30
- package/dist/browser/react/use-mount.js.map +0 -1
- package/dist/browser/react/use-navigation.d.ts +0 -27
- package/dist/browser/react/use-navigation.d.ts.map +0 -1
- package/dist/browser/react/use-navigation.js +0 -87
- package/dist/browser/react/use-navigation.js.map +0 -1
- package/dist/browser/react/use-segments.d.ts +0 -38
- package/dist/browser/react/use-segments.d.ts.map +0 -1
- package/dist/browser/react/use-segments.js +0 -130
- package/dist/browser/react/use-segments.js.map +0 -1
- package/dist/browser/request-controller.d.ts +0 -26
- package/dist/browser/request-controller.d.ts.map +0 -1
- package/dist/browser/request-controller.js +0 -147
- package/dist/browser/request-controller.js.map +0 -1
- package/dist/browser/rsc-router.d.ts +0 -129
- package/dist/browser/rsc-router.d.ts.map +0 -1
- package/dist/browser/rsc-router.js +0 -195
- package/dist/browser/rsc-router.js.map +0 -1
- package/dist/browser/scroll-restoration.d.ts +0 -93
- package/dist/browser/scroll-restoration.d.ts.map +0 -1
- package/dist/browser/scroll-restoration.js +0 -321
- package/dist/browser/scroll-restoration.js.map +0 -1
- package/dist/browser/segment-structure-assert.d.ts +0 -17
- package/dist/browser/segment-structure-assert.d.ts.map +0 -1
- package/dist/browser/segment-structure-assert.js +0 -59
- package/dist/browser/segment-structure-assert.js.map +0 -1
- package/dist/browser/server-action-bridge.d.ts +0 -26
- package/dist/browser/server-action-bridge.d.ts.map +0 -1
- package/dist/browser/server-action-bridge.js +0 -668
- package/dist/browser/server-action-bridge.js.map +0 -1
- package/dist/browser/shallow.d.ts +0 -12
- package/dist/browser/shallow.d.ts.map +0 -1
- package/dist/browser/shallow.js +0 -34
- package/dist/browser/shallow.js.map +0 -1
- package/dist/browser/types.d.ts +0 -369
- package/dist/browser/types.d.ts.map +0 -1
- package/dist/browser/types.js +0 -2
- package/dist/browser/types.js.map +0 -1
- package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
- package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-cli.test.js +0 -237
- package/dist/build/__tests__/generate-cli.test.js.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.js +0 -119
- package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.js +0 -620
- package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.js +0 -308
- package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
- package/dist/build/generate-manifest.d.ts +0 -81
- package/dist/build/generate-manifest.d.ts.map +0 -1
- package/dist/build/generate-manifest.js +0 -276
- package/dist/build/generate-manifest.js.map +0 -1
- package/dist/build/generate-route-types.d.ts +0 -115
- package/dist/build/generate-route-types.d.ts.map +0 -1
- package/dist/build/generate-route-types.js +0 -740
- package/dist/build/generate-route-types.js.map +0 -1
- package/dist/build/index.d.ts +0 -21
- package/dist/build/index.d.ts.map +0 -1
- package/dist/build/index.js +0 -21
- package/dist/build/index.js.map +0 -1
- package/dist/build/route-trie.d.ts +0 -71
- package/dist/build/route-trie.d.ts.map +0 -1
- package/dist/build/route-trie.js +0 -175
- package/dist/build/route-trie.js.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.js +0 -208
- package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
- package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
- package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
- package/dist/cache/__tests__/document-cache.test.js +0 -345
- package/dist/cache/__tests__/document-cache.test.js.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
- package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
- package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-store.test.js +0 -367
- package/dist/cache/__tests__/memory-store.test.js.map +0 -1
- package/dist/cache/cache-scope.d.ts +0 -102
- package/dist/cache/cache-scope.d.ts.map +0 -1
- package/dist/cache/cache-scope.js +0 -440
- package/dist/cache/cache-scope.js.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
- package/dist/cache/cf/cf-cache-store.d.ts +0 -165
- package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
- package/dist/cache/cf/cf-cache-store.js +0 -242
- package/dist/cache/cf/cf-cache-store.js.map +0 -1
- package/dist/cache/cf/index.d.ts +0 -14
- package/dist/cache/cf/index.d.ts.map +0 -1
- package/dist/cache/cf/index.js +0 -17
- package/dist/cache/cf/index.js.map +0 -1
- package/dist/cache/document-cache.d.ts +0 -64
- package/dist/cache/document-cache.d.ts.map +0 -1
- package/dist/cache/document-cache.js +0 -228
- package/dist/cache/document-cache.js.map +0 -1
- package/dist/cache/index.d.ts +0 -19
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/index.js +0 -21
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/memory-segment-store.d.ts +0 -110
- package/dist/cache/memory-segment-store.d.ts.map +0 -1
- package/dist/cache/memory-segment-store.js +0 -117
- package/dist/cache/memory-segment-store.js.map +0 -1
- package/dist/cache/memory-store.d.ts +0 -41
- package/dist/cache/memory-store.d.ts.map +0 -1
- package/dist/cache/memory-store.js +0 -191
- package/dist/cache/memory-store.js.map +0 -1
- package/dist/cache/types.d.ts +0 -317
- package/dist/cache/types.d.ts.map +0 -1
- package/dist/cache/types.js +0 -12
- package/dist/cache/types.js.map +0 -1
- package/dist/client.d.ts +0 -248
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -367
- package/dist/client.js.map +0 -1
- package/dist/client.rsc.d.ts +0 -26
- package/dist/client.rsc.d.ts.map +0 -1
- package/dist/client.rsc.js +0 -46
- package/dist/client.rsc.js.map +0 -1
- package/dist/component-utils.d.ts +0 -36
- package/dist/component-utils.d.ts.map +0 -1
- package/dist/component-utils.js +0 -61
- package/dist/component-utils.js.map +0 -1
- package/dist/components/DefaultDocument.d.ts +0 -13
- package/dist/components/DefaultDocument.d.ts.map +0 -1
- package/dist/components/DefaultDocument.js +0 -15
- package/dist/components/DefaultDocument.js.map +0 -1
- package/dist/debug.d.ts +0 -58
- package/dist/debug.d.ts.map +0 -1
- package/dist/debug.js +0 -157
- package/dist/debug.js.map +0 -1
- package/dist/default-error-boundary.d.ts +0 -11
- package/dist/default-error-boundary.d.ts.map +0 -1
- package/dist/default-error-boundary.js +0 -45
- package/dist/default-error-boundary.js.map +0 -1
- package/dist/deps/browser.d.ts +0 -2
- package/dist/deps/browser.d.ts.map +0 -1
- package/dist/deps/browser.js +0 -3
- package/dist/deps/browser.js.map +0 -1
- package/dist/deps/html-stream-client.d.ts +0 -2
- package/dist/deps/html-stream-client.d.ts.map +0 -1
- package/dist/deps/html-stream-client.js +0 -3
- package/dist/deps/html-stream-client.js.map +0 -1
- package/dist/deps/html-stream-server.d.ts +0 -2
- package/dist/deps/html-stream-server.d.ts.map +0 -1
- package/dist/deps/html-stream-server.js +0 -3
- package/dist/deps/html-stream-server.js.map +0 -1
- package/dist/deps/rsc.d.ts +0 -2
- package/dist/deps/rsc.d.ts.map +0 -1
- package/dist/deps/rsc.js +0 -4
- package/dist/deps/rsc.js.map +0 -1
- package/dist/deps/ssr.d.ts +0 -2
- package/dist/deps/ssr.d.ts.map +0 -1
- package/dist/deps/ssr.js +0 -3
- package/dist/deps/ssr.js.map +0 -1
- package/dist/errors.d.ts +0 -174
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -241
- package/dist/errors.js.map +0 -1
- package/dist/handle.d.ts +0 -78
- package/dist/handle.d.ts.map +0 -1
- package/dist/handle.js +0 -82
- package/dist/handle.js.map +0 -1
- package/dist/handles/MetaTags.d.ts +0 -14
- package/dist/handles/MetaTags.d.ts.map +0 -1
- package/dist/handles/MetaTags.js +0 -136
- package/dist/handles/MetaTags.js.map +0 -1
- package/dist/handles/index.d.ts +0 -6
- package/dist/handles/index.d.ts.map +0 -1
- package/dist/handles/index.js +0 -6
- package/dist/handles/index.js.map +0 -1
- package/dist/handles/meta.d.ts +0 -39
- package/dist/handles/meta.d.ts.map +0 -1
- package/dist/handles/meta.js +0 -202
- package/dist/handles/meta.js.map +0 -1
- package/dist/host/__tests__/errors.test.d.ts +0 -2
- package/dist/host/__tests__/errors.test.d.ts.map +0 -1
- package/dist/host/__tests__/errors.test.js +0 -76
- package/dist/host/__tests__/errors.test.js.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.js +0 -251
- package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
- package/dist/host/__tests__/router.test.d.ts +0 -2
- package/dist/host/__tests__/router.test.d.ts.map +0 -1
- package/dist/host/__tests__/router.test.js +0 -241
- package/dist/host/__tests__/router.test.js.map +0 -1
- package/dist/host/__tests__/testing.test.d.ts +0 -2
- package/dist/host/__tests__/testing.test.d.ts.map +0 -1
- package/dist/host/__tests__/testing.test.js +0 -64
- package/dist/host/__tests__/testing.test.js.map +0 -1
- package/dist/host/__tests__/utils.test.d.ts +0 -2
- package/dist/host/__tests__/utils.test.d.ts.map +0 -1
- package/dist/host/__tests__/utils.test.js +0 -29
- package/dist/host/__tests__/utils.test.js.map +0 -1
- package/dist/host/cookie-handler.d.ts +0 -34
- package/dist/host/cookie-handler.d.ts.map +0 -1
- package/dist/host/cookie-handler.js +0 -124
- package/dist/host/cookie-handler.js.map +0 -1
- package/dist/host/errors.d.ts +0 -56
- package/dist/host/errors.d.ts.map +0 -1
- package/dist/host/errors.js +0 -79
- package/dist/host/errors.js.map +0 -1
- package/dist/host/index.d.ts +0 -29
- package/dist/host/index.d.ts.map +0 -1
- package/dist/host/index.js +0 -32
- package/dist/host/index.js.map +0 -1
- package/dist/host/pattern-matcher.d.ts +0 -36
- package/dist/host/pattern-matcher.d.ts.map +0 -1
- package/dist/host/pattern-matcher.js +0 -172
- package/dist/host/pattern-matcher.js.map +0 -1
- package/dist/host/router.d.ts +0 -26
- package/dist/host/router.d.ts.map +0 -1
- package/dist/host/router.js +0 -218
- package/dist/host/router.js.map +0 -1
- package/dist/host/testing.d.ts +0 -36
- package/dist/host/testing.d.ts.map +0 -1
- package/dist/host/testing.js +0 -55
- package/dist/host/testing.js.map +0 -1
- package/dist/host/types.d.ts +0 -115
- package/dist/host/types.d.ts.map +0 -1
- package/dist/host/types.js +0 -7
- package/dist/host/types.js.map +0 -1
- package/dist/host/utils.d.ts +0 -21
- package/dist/host/utils.d.ts.map +0 -1
- package/dist/host/utils.js +0 -23
- package/dist/host/utils.js.map +0 -1
- package/dist/href-client.d.ts +0 -131
- package/dist/href-client.d.ts.map +0 -1
- package/dist/href-client.js +0 -64
- package/dist/href-client.js.map +0 -1
- package/dist/href-context.d.ts +0 -29
- package/dist/href-context.d.ts.map +0 -1
- package/dist/href-context.js +0 -21
- package/dist/href-context.js.map +0 -1
- package/dist/index.d.ts +0 -73
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -91
- package/dist/index.js.map +0 -1
- package/dist/index.rsc.d.ts +0 -32
- package/dist/index.rsc.d.ts.map +0 -1
- package/dist/index.rsc.js +0 -40
- package/dist/index.rsc.js.map +0 -1
- package/dist/internal-debug.d.ts +0 -2
- package/dist/internal-debug.d.ts.map +0 -1
- package/dist/internal-debug.js +0 -5
- package/dist/internal-debug.js.map +0 -1
- package/dist/loader.d.ts +0 -14
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -20
- package/dist/loader.js.map +0 -1
- package/dist/loader.rsc.d.ts +0 -19
- package/dist/loader.rsc.d.ts.map +0 -1
- package/dist/loader.rsc.js +0 -99
- package/dist/loader.rsc.js.map +0 -1
- package/dist/network-error-thrower.d.ts +0 -17
- package/dist/network-error-thrower.d.ts.map +0 -1
- package/dist/network-error-thrower.js +0 -14
- package/dist/network-error-thrower.js.map +0 -1
- package/dist/outlet-context.d.ts +0 -13
- package/dist/outlet-context.d.ts.map +0 -1
- package/dist/outlet-context.js +0 -3
- package/dist/outlet-context.js.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.js +0 -148
- package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
- package/dist/prerender/param-hash.d.ts +0 -16
- package/dist/prerender/param-hash.d.ts.map +0 -1
- package/dist/prerender/param-hash.js +0 -36
- package/dist/prerender/param-hash.js.map +0 -1
- package/dist/prerender/store.d.ts +0 -38
- package/dist/prerender/store.d.ts.map +0 -1
- package/dist/prerender/store.js +0 -61
- package/dist/prerender/store.js.map +0 -1
- package/dist/prerender.d.ts +0 -66
- package/dist/prerender.d.ts.map +0 -1
- package/dist/prerender.js +0 -57
- package/dist/prerender.js.map +0 -1
- package/dist/reverse.d.ts +0 -196
- package/dist/reverse.d.ts.map +0 -1
- package/dist/reverse.js +0 -78
- package/dist/reverse.js.map +0 -1
- package/dist/root-error-boundary.d.ts +0 -33
- package/dist/root-error-boundary.d.ts.map +0 -1
- package/dist/root-error-boundary.js +0 -165
- package/dist/root-error-boundary.js.map +0 -1
- package/dist/route-content-wrapper.d.ts +0 -46
- package/dist/route-content-wrapper.d.ts.map +0 -1
- package/dist/route-content-wrapper.js +0 -77
- package/dist/route-content-wrapper.js.map +0 -1
- package/dist/route-definition.d.ts +0 -421
- package/dist/route-definition.d.ts.map +0 -1
- package/dist/route-definition.js +0 -868
- package/dist/route-definition.js.map +0 -1
- package/dist/route-map-builder.d.ts +0 -155
- package/dist/route-map-builder.d.ts.map +0 -1
- package/dist/route-map-builder.js +0 -237
- package/dist/route-map-builder.js.map +0 -1
- package/dist/route-types.d.ts +0 -165
- package/dist/route-types.d.ts.map +0 -1
- package/dist/route-types.js +0 -7
- package/dist/route-types.js.map +0 -1
- package/dist/router/__tests__/handler-context.test.d.ts +0 -2
- package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/handler-context.test.js +0 -65
- package/dist/router/__tests__/handler-context.test.js.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
- package/dist/router/__tests__/match-context.test.d.ts +0 -2
- package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-context.test.js +0 -92
- package/dist/router/__tests__/match-context.test.js.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.js +0 -417
- package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
- package/dist/router/__tests__/match-result.test.d.ts +0 -2
- package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-result.test.js +0 -457
- package/dist/router/__tests__/match-result.test.js.map +0 -1
- package/dist/router/__tests__/on-error.test.d.ts +0 -2
- package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
- package/dist/router/__tests__/on-error.test.js +0 -678
- package/dist/router/__tests__/on-error.test.js.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.js +0 -629
- package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
- package/dist/router/error-handling.d.ts +0 -77
- package/dist/router/error-handling.d.ts.map +0 -1
- package/dist/router/error-handling.js +0 -202
- package/dist/router/error-handling.js.map +0 -1
- package/dist/router/handler-context.d.ts +0 -20
- package/dist/router/handler-context.d.ts.map +0 -1
- package/dist/router/handler-context.js +0 -198
- package/dist/router/handler-context.js.map +0 -1
- package/dist/router/intercept-resolution.d.ts +0 -66
- package/dist/router/intercept-resolution.d.ts.map +0 -1
- package/dist/router/intercept-resolution.js +0 -246
- package/dist/router/intercept-resolution.js.map +0 -1
- package/dist/router/loader-resolution.d.ts +0 -64
- package/dist/router/loader-resolution.d.ts.map +0 -1
- package/dist/router/loader-resolution.js +0 -284
- package/dist/router/loader-resolution.js.map +0 -1
- package/dist/router/logging.d.ts +0 -15
- package/dist/router/logging.d.ts.map +0 -1
- package/dist/router/logging.js +0 -99
- package/dist/router/logging.js.map +0 -1
- package/dist/router/manifest.d.ts +0 -22
- package/dist/router/manifest.d.ts.map +0 -1
- package/dist/router/manifest.js +0 -181
- package/dist/router/manifest.js.map +0 -1
- package/dist/router/match-api.d.ts +0 -35
- package/dist/router/match-api.d.ts.map +0 -1
- package/dist/router/match-api.js +0 -406
- package/dist/router/match-api.js.map +0 -1
- package/dist/router/match-context.d.ts +0 -206
- package/dist/router/match-context.d.ts.map +0 -1
- package/dist/router/match-context.js +0 -17
- package/dist/router/match-context.js.map +0 -1
- package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
- package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
- package/dist/router/match-middleware/background-revalidation.js +0 -75
- package/dist/router/match-middleware/background-revalidation.js.map +0 -1
- package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
- package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-lookup.js +0 -257
- package/dist/router/match-middleware/cache-lookup.js.map +0 -1
- package/dist/router/match-middleware/cache-store.d.ts +0 -113
- package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-store.js +0 -108
- package/dist/router/match-middleware/cache-store.js.map +0 -1
- package/dist/router/match-middleware/index.d.ts +0 -81
- package/dist/router/match-middleware/index.d.ts.map +0 -1
- package/dist/router/match-middleware/index.js +0 -80
- package/dist/router/match-middleware/index.js.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.js +0 -134
- package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
- package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
- package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/segment-resolution.js +0 -53
- package/dist/router/match-middleware/segment-resolution.js.map +0 -1
- package/dist/router/match-pipelines.d.ts +0 -147
- package/dist/router/match-pipelines.d.ts.map +0 -1
- package/dist/router/match-pipelines.js +0 -82
- package/dist/router/match-pipelines.js.map +0 -1
- package/dist/router/match-result.d.ts +0 -126
- package/dist/router/match-result.d.ts.map +0 -1
- package/dist/router/match-result.js +0 -93
- package/dist/router/match-result.js.map +0 -1
- package/dist/router/metrics.d.ts +0 -20
- package/dist/router/metrics.d.ts.map +0 -1
- package/dist/router/metrics.js +0 -47
- package/dist/router/metrics.js.map +0 -1
- package/dist/router/middleware.d.ts +0 -249
- package/dist/router/middleware.d.ts.map +0 -1
- package/dist/router/middleware.js +0 -434
- package/dist/router/middleware.js.map +0 -1
- package/dist/router/middleware.test.d.ts +0 -2
- package/dist/router/middleware.test.d.ts.map +0 -1
- package/dist/router/middleware.test.js +0 -816
- package/dist/router/middleware.test.js.map +0 -1
- package/dist/router/pattern-matching.d.ts +0 -149
- package/dist/router/pattern-matching.d.ts.map +0 -1
- package/dist/router/pattern-matching.js +0 -349
- package/dist/router/pattern-matching.js.map +0 -1
- package/dist/router/revalidation.d.ts +0 -44
- package/dist/router/revalidation.d.ts.map +0 -1
- package/dist/router/revalidation.js +0 -147
- package/dist/router/revalidation.js.map +0 -1
- package/dist/router/router-context.d.ts +0 -135
- package/dist/router/router-context.d.ts.map +0 -1
- package/dist/router/router-context.js +0 -36
- package/dist/router/router-context.js.map +0 -1
- package/dist/router/segment-resolution.d.ts +0 -127
- package/dist/router/segment-resolution.d.ts.map +0 -1
- package/dist/router/segment-resolution.js +0 -919
- package/dist/router/segment-resolution.js.map +0 -1
- package/dist/router/trie-matching.d.ts +0 -40
- package/dist/router/trie-matching.d.ts.map +0 -1
- package/dist/router/trie-matching.js +0 -127
- package/dist/router/trie-matching.js.map +0 -1
- package/dist/router/types.d.ts +0 -136
- package/dist/router/types.d.ts.map +0 -1
- package/dist/router/types.js +0 -7
- package/dist/router/types.js.map +0 -1
- package/dist/router.d.ts +0 -753
- package/dist/router.d.ts.map +0 -1
- package/dist/router.gen.d.ts +0 -6
- package/dist/router.gen.d.ts.map +0 -1
- package/dist/router.gen.js +0 -6
- package/dist/router.gen.js.map +0 -1
- package/dist/router.js +0 -1304
- package/dist/router.js.map +0 -1
- package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
- package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
- package/dist/rsc/__tests__/helpers.test.js +0 -140
- package/dist/rsc/__tests__/helpers.test.js.map +0 -1
- package/dist/rsc/handler.d.ts +0 -45
- package/dist/rsc/handler.d.ts.map +0 -1
- package/dist/rsc/handler.js +0 -1172
- package/dist/rsc/handler.js.map +0 -1
- package/dist/rsc/helpers.d.ts +0 -16
- package/dist/rsc/helpers.d.ts.map +0 -1
- package/dist/rsc/helpers.js +0 -55
- package/dist/rsc/helpers.js.map +0 -1
- package/dist/rsc/index.d.ts +0 -22
- package/dist/rsc/index.d.ts.map +0 -1
- package/dist/rsc/index.js +0 -23
- package/dist/rsc/index.js.map +0 -1
- package/dist/rsc/nonce.d.ts +0 -9
- package/dist/rsc/nonce.d.ts.map +0 -1
- package/dist/rsc/nonce.js +0 -18
- package/dist/rsc/nonce.js.map +0 -1
- package/dist/rsc/types.d.ts +0 -206
- package/dist/rsc/types.d.ts.map +0 -1
- package/dist/rsc/types.js +0 -8
- package/dist/rsc/types.js.map +0 -1
- package/dist/search-params.d.ts +0 -103
- package/dist/search-params.d.ts.map +0 -1
- package/dist/search-params.js +0 -74
- package/dist/search-params.js.map +0 -1
- package/dist/segment-system.d.ts +0 -75
- package/dist/segment-system.d.ts.map +0 -1
- package/dist/segment-system.js +0 -336
- package/dist/segment-system.js.map +0 -1
- package/dist/server/context.d.ts +0 -245
- package/dist/server/context.d.ts.map +0 -1
- package/dist/server/context.js +0 -197
- package/dist/server/context.js.map +0 -1
- package/dist/server/fetchable-loader-store.d.ts +0 -18
- package/dist/server/fetchable-loader-store.d.ts.map +0 -1
- package/dist/server/fetchable-loader-store.js +0 -18
- package/dist/server/fetchable-loader-store.js.map +0 -1
- package/dist/server/handle-store.d.ts +0 -85
- package/dist/server/handle-store.d.ts.map +0 -1
- package/dist/server/handle-store.js +0 -142
- package/dist/server/handle-store.js.map +0 -1
- package/dist/server/loader-registry.d.ts +0 -55
- package/dist/server/loader-registry.d.ts.map +0 -1
- package/dist/server/loader-registry.js +0 -132
- package/dist/server/loader-registry.js.map +0 -1
- package/dist/server/request-context.d.ts +0 -226
- package/dist/server/request-context.d.ts.map +0 -1
- package/dist/server/request-context.js +0 -290
- package/dist/server/request-context.js.map +0 -1
- package/dist/server/root-layout.d.ts +0 -4
- package/dist/server/root-layout.d.ts.map +0 -1
- package/dist/server/root-layout.js +0 -5
- package/dist/server/root-layout.js.map +0 -1
- package/dist/server.d.ts +0 -15
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -20
- package/dist/server.js.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
- package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
- package/dist/ssr/index.d.ts +0 -98
- package/dist/ssr/index.d.ts.map +0 -1
- package/dist/ssr/index.js +0 -158
- package/dist/ssr/index.js.map +0 -1
- package/dist/static-handler.d.ts +0 -50
- package/dist/static-handler.d.ts.map +0 -1
- package/dist/static-handler.gen.d.ts +0 -5
- package/dist/static-handler.gen.d.ts.map +0 -1
- package/dist/static-handler.gen.js +0 -5
- package/dist/static-handler.gen.js.map +0 -1
- package/dist/static-handler.js +0 -29
- package/dist/static-handler.js.map +0 -1
- package/dist/theme/ThemeProvider.d.ts +0 -20
- package/dist/theme/ThemeProvider.d.ts.map +0 -1
- package/dist/theme/ThemeProvider.js +0 -240
- package/dist/theme/ThemeProvider.js.map +0 -1
- package/dist/theme/ThemeScript.d.ts +0 -48
- package/dist/theme/ThemeScript.d.ts.map +0 -1
- package/dist/theme/ThemeScript.js +0 -13
- package/dist/theme/ThemeScript.js.map +0 -1
- package/dist/theme/__tests__/theme.test.d.ts +0 -2
- package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
- package/dist/theme/__tests__/theme.test.js +0 -103
- package/dist/theme/__tests__/theme.test.js.map +0 -1
- package/dist/theme/constants.d.ts +0 -29
- package/dist/theme/constants.d.ts.map +0 -1
- package/dist/theme/constants.js +0 -48
- package/dist/theme/constants.js.map +0 -1
- package/dist/theme/index.d.ts +0 -31
- package/dist/theme/index.d.ts.map +0 -1
- package/dist/theme/index.js +0 -36
- package/dist/theme/index.js.map +0 -1
- package/dist/theme/theme-context.d.ts +0 -40
- package/dist/theme/theme-context.d.ts.map +0 -1
- package/dist/theme/theme-context.js +0 -60
- package/dist/theme/theme-context.js.map +0 -1
- package/dist/theme/theme-script.d.ts +0 -27
- package/dist/theme/theme-script.d.ts.map +0 -1
- package/dist/theme/theme-script.js +0 -147
- package/dist/theme/theme-script.js.map +0 -1
- package/dist/theme/types.d.ts +0 -163
- package/dist/theme/types.d.ts.map +0 -1
- package/dist/theme/types.js +0 -11
- package/dist/theme/types.js.map +0 -1
- package/dist/theme/use-theme.d.ts +0 -12
- package/dist/theme/use-theme.d.ts.map +0 -1
- package/dist/theme/use-theme.js +0 -40
- package/dist/theme/use-theme.js.map +0 -1
- package/dist/types.d.ts +0 -1479
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -10
- package/dist/types.js.map +0 -1
- package/dist/urls.d.ts +0 -441
- package/dist/urls.d.ts.map +0 -1
- package/dist/urls.gen.d.ts +0 -8
- package/dist/urls.gen.d.ts.map +0 -1
- package/dist/urls.gen.js +0 -8
- package/dist/urls.gen.js.map +0 -1
- package/dist/urls.js +0 -443
- package/dist/urls.js.map +0 -1
- package/dist/use-loader.d.ts +0 -127
- package/dist/use-loader.d.ts.map +0 -1
- package/dist/use-loader.js +0 -237
- package/dist/use-loader.js.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
- package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.js +0 -39
- package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
- package/dist/vite/ast-handler-extract.d.ts +0 -49
- package/dist/vite/ast-handler-extract.d.ts.map +0 -1
- package/dist/vite/ast-handler-extract.js +0 -249
- package/dist/vite/ast-handler-extract.js.map +0 -1
- package/dist/vite/expose-action-id.d.ts +0 -19
- package/dist/vite/expose-action-id.d.ts.map +0 -1
- package/dist/vite/expose-action-id.js +0 -250
- package/dist/vite/expose-action-id.js.map +0 -1
- package/dist/vite/expose-id-utils.d.ts +0 -69
- package/dist/vite/expose-id-utils.d.ts.map +0 -1
- package/dist/vite/expose-id-utils.js +0 -289
- package/dist/vite/expose-id-utils.js.map +0 -1
- package/dist/vite/expose-internal-ids.d.ts +0 -22
- package/dist/vite/expose-internal-ids.d.ts.map +0 -1
- package/dist/vite/expose-internal-ids.js +0 -886
- package/dist/vite/expose-internal-ids.js.map +0 -1
- package/dist/vite/index.d.ts +0 -149
- package/dist/vite/index.d.ts.map +0 -1
- package/dist/vite/index.js.bak +0 -5448
- package/dist/vite/index.js.map +0 -1
- package/dist/vite/index.named-routes.gen.ts +0 -103
- package/dist/vite/package-resolution.d.ts +0 -43
- package/dist/vite/package-resolution.d.ts.map +0 -1
- package/dist/vite/package-resolution.js +0 -112
- package/dist/vite/package-resolution.js.map +0 -1
- package/dist/vite/virtual-entries.d.ts +0 -25
- package/dist/vite/virtual-entries.d.ts.map +0 -1
- package/dist/vite/virtual-entries.js +0 -110
- package/dist/vite/virtual-entries.js.map +0 -1
- package/skills/migrate-react-router/cloudflare-workers.md +0 -129
package/src/rsc/rsc-rendering.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
getRequestContext,
|
|
11
11
|
setRequestContextParams,
|
|
12
12
|
runWithRequestContext,
|
|
13
|
+
wireRenderBarrier,
|
|
13
14
|
} from "../server/request-context.js";
|
|
14
15
|
import {
|
|
15
16
|
SeededShellStore,
|
|
@@ -17,7 +18,8 @@ import {
|
|
|
17
18
|
} from "../cache/shell-snapshot.js";
|
|
18
19
|
import { appendMetric } from "../router/metrics.js";
|
|
19
20
|
import { observePhase, PHASES } from "../router/instrument.js";
|
|
20
|
-
import {
|
|
21
|
+
import type { TraceSpan } from "../router/tracing.js";
|
|
22
|
+
import { getSSRSetup, createSsrHtmlStage, isRscRequest } from "./ssr-setup.js";
|
|
21
23
|
import type { RscPayload } from "./types.js";
|
|
22
24
|
import type { SSRModule } from "./types.js";
|
|
23
25
|
import type { RequestContext } from "../server/request-context.js";
|
|
@@ -26,11 +28,15 @@ import {
|
|
|
26
28
|
createSimpleRedirectResponse,
|
|
27
29
|
attachLocationStateIfPresent,
|
|
28
30
|
} from "./helpers.js";
|
|
31
|
+
import { renderRscFlightStage, renderRscResponse } from "./render-pipeline.js";
|
|
29
32
|
import type { HandlerContext } from "./handler-context.js";
|
|
30
33
|
import { gateTransitions } from "./transition-gate.js";
|
|
31
34
|
import { buildFullPayload } from "./full-payload.js";
|
|
32
35
|
import {
|
|
33
36
|
scheduleShellCapture,
|
|
37
|
+
resolveShellCaptureDebugSink,
|
|
38
|
+
takeCaptureDebugEventForTiming,
|
|
39
|
+
describeShellCaptureEvent,
|
|
34
40
|
type ShellCaptureDescriptor,
|
|
35
41
|
} from "./shell-capture.js";
|
|
36
42
|
import {
|
|
@@ -43,7 +49,16 @@ import {
|
|
|
43
49
|
hasShellFamily,
|
|
44
50
|
warnShellStoreMissingOnce,
|
|
45
51
|
warnPprNonceActiveOnce,
|
|
52
|
+
describeShellTailTiming,
|
|
53
|
+
publishShellTailTiming,
|
|
54
|
+
takeShellTailTimingForServerTiming,
|
|
55
|
+
type ResolvedPprConfig,
|
|
56
|
+
type ShellTailTiming,
|
|
46
57
|
} from "./shell-serve.js";
|
|
58
|
+
import {
|
|
59
|
+
lookupBuildShell,
|
|
60
|
+
type DevShellLookup,
|
|
61
|
+
} from "./shell-build-manifest.js";
|
|
47
62
|
import { contextGet } from "../context-var.js";
|
|
48
63
|
import {
|
|
49
64
|
resolveSameOriginRedirect,
|
|
@@ -52,7 +67,52 @@ import {
|
|
|
52
67
|
import { nonce as nonceToken } from "./nonce.js";
|
|
53
68
|
import { reportCacheError } from "../cache/cache-error.js";
|
|
54
69
|
import { INTERNAL_RANGO_DEBUG } from "../internal-debug.js";
|
|
55
|
-
import type { ShellCacheEntry } from "../cache/types.js";
|
|
70
|
+
import type { ShellCacheEntry, ShellSnapshotRecord } from "../cache/types.js";
|
|
71
|
+
|
|
72
|
+
function resolveDevShellLookup(
|
|
73
|
+
reqCtx: RequestContext<any>,
|
|
74
|
+
pprConfig: ResolvedPprConfig,
|
|
75
|
+
): DevShellLookup | undefined {
|
|
76
|
+
if (process.env.NODE_ENV === "production") return undefined;
|
|
77
|
+
return {
|
|
78
|
+
isPrerenderRoute: reqCtx._classifiedRoute?.matched?.pr === true,
|
|
79
|
+
routeName: reqCtx._classifiedRoute?.routeKey,
|
|
80
|
+
ttl: pprConfig.ttl,
|
|
81
|
+
swr: pprConfig.swr,
|
|
82
|
+
tags: pprConfig.tags,
|
|
83
|
+
maxSnapshotBytes: pprConfig.maxSnapshotBytes,
|
|
84
|
+
captureTimeout: pprConfig.captureTimeout,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function replayableShellSnapshot(
|
|
89
|
+
entry: ShellCacheEntry | undefined,
|
|
90
|
+
buildVersion: string,
|
|
91
|
+
): ShellSnapshotRecord[] | undefined {
|
|
92
|
+
if (
|
|
93
|
+
!entry ||
|
|
94
|
+
!isValidShellHit(entry, buildVersion) ||
|
|
95
|
+
entry.handlerLiveHoles ||
|
|
96
|
+
entry.transitionWhen
|
|
97
|
+
) {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
const snapshot = entry.snapshot;
|
|
101
|
+
const hasSegments = snapshot?.some((record) => {
|
|
102
|
+
if (
|
|
103
|
+
!record ||
|
|
104
|
+
typeof record !== "object" ||
|
|
105
|
+
record.family !== "segment" ||
|
|
106
|
+
typeof record.value !== "object" ||
|
|
107
|
+
record.value === null
|
|
108
|
+
) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
const segments = (record.value as { segments?: unknown }).segments;
|
|
112
|
+
return Array.isArray(segments) && segments.length > 0;
|
|
113
|
+
});
|
|
114
|
+
return hasSegments ? snapshot : undefined;
|
|
115
|
+
}
|
|
56
116
|
|
|
57
117
|
export function handleRscRendering<TEnv>(
|
|
58
118
|
ctx: HandlerContext<TEnv>,
|
|
@@ -68,7 +128,7 @@ export function handleRscRendering<TEnv>(
|
|
|
68
128
|
// same boundary (match -> serialize -> SSR), so the two surfaces agree.
|
|
69
129
|
// Loaders kicked off during matching nest under the span; the SSR HTML pass
|
|
70
130
|
// below opens "rango.ssr" the same way.
|
|
71
|
-
return observePhase(PHASES.render, () =>
|
|
131
|
+
return observePhase(PHASES.render, (span) =>
|
|
72
132
|
handleRscRenderingInner(
|
|
73
133
|
ctx,
|
|
74
134
|
request,
|
|
@@ -77,6 +137,7 @@ export function handleRscRendering<TEnv>(
|
|
|
77
137
|
isPartial,
|
|
78
138
|
handleStore,
|
|
79
139
|
nonce,
|
|
140
|
+
span,
|
|
80
141
|
),
|
|
81
142
|
);
|
|
82
143
|
}
|
|
@@ -89,6 +150,7 @@ async function handleRscRenderingInner<TEnv>(
|
|
|
89
150
|
isPartial: boolean,
|
|
90
151
|
handleStore: ReturnType<typeof getRequestContext>["_handleStore"],
|
|
91
152
|
nonce: string | undefined,
|
|
153
|
+
renderSpan: TraceSpan,
|
|
92
154
|
): Promise<Response> {
|
|
93
155
|
const reqCtx = getRequestContext();
|
|
94
156
|
|
|
@@ -97,21 +159,10 @@ async function handleRscRenderingInner<TEnv>(
|
|
|
97
159
|
|
|
98
160
|
// --- Axis 2: integrated PPR shell serve (docs/design/ppr-shell-resume.md) ---
|
|
99
161
|
//
|
|
100
|
-
// COMMIT POINT
|
|
101
|
-
//
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
// not a single shell byte can precede a guard decision, on MISS or HIT.
|
|
105
|
-
//
|
|
106
|
-
// PPR is opt-in per PAGE ROUTE via the `ppr` path option (read off the classified
|
|
107
|
-
// route snapshot — the same matched entry match() will resolve). No `ppr` option
|
|
108
|
-
// means pure axis 1: no store read, no capture, no logs, zero cost.
|
|
109
|
-
//
|
|
110
|
-
// On a valid HIT the composed response is committed HERE — the stored prelude
|
|
111
|
-
// bytes flush immediately while match()/segment resolution/Flight render/resume
|
|
112
|
-
// run behind them inside the response stream (ring-3 reads and render setup hide
|
|
113
|
-
// behind wire bytes). On a MISS the request continues as plain axis 1 and a
|
|
114
|
-
// background capture is scheduled after the response is built.
|
|
162
|
+
// COMMIT POINT: this render pass runs strictly AFTER the whole middleware
|
|
163
|
+
// chain (executeRender wraps it), so no shell byte can precede a guard
|
|
164
|
+
// decision — that ordering is what makes a shared shell safe. Routes
|
|
165
|
+
// without the `ppr` option stay pure axis 1 at zero cost.
|
|
115
166
|
let pprMiss: {
|
|
116
167
|
descriptor: ShellCaptureDescriptor;
|
|
117
168
|
ssrModule: SSRModule;
|
|
@@ -120,25 +171,53 @@ async function handleRscRenderingInner<TEnv>(
|
|
|
120
171
|
!isPartial &&
|
|
121
172
|
request.method === "GET" &&
|
|
122
173
|
!url.searchParams.has("__prerender_collect") &&
|
|
123
|
-
!isRscRequest(request, url, false)
|
|
174
|
+
!isRscRequest(request, url, false) &&
|
|
175
|
+
!reqCtx._dynamic
|
|
124
176
|
) {
|
|
125
177
|
const pprConfig = resolvePprConfig(reqCtx._classifiedRoute?.manifestEntry);
|
|
126
178
|
if (pprConfig) {
|
|
127
|
-
// A per-request CSP nonce pins the route to axis 1:
|
|
128
|
-
//
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
// createRouter({ nonce }) provider (threaded here as `nonce`), and a direct
|
|
133
|
-
// token write in middleware (ctx.set(nonce, value)). The token is only
|
|
134
|
-
// visible in the post-middleware request variables — and this commit point
|
|
135
|
-
// runs AFTER the whole middleware chain (see the block header), so it is
|
|
136
|
-
// present here. Reading it closes the gap the provider-only check left open
|
|
137
|
-
// (issue #656). The threaded-param check stays first: the provider path is
|
|
138
|
-
// resolved before any variable read and short-circuits cheaply.
|
|
179
|
+
// A per-request CSP nonce pins the route to axis 1: a shared shell would
|
|
180
|
+
// freeze the capture request's nonce and CSP would reject it for every
|
|
181
|
+
// other visitor. BOTH nonce sources must gate — the createRouter({ nonce })
|
|
182
|
+
// provider (`nonce` param) and a middleware ctx.set(nonce, …) token write;
|
|
183
|
+
// the provider-only check missed the latter (issue #656).
|
|
139
184
|
const activeNonce = nonce ?? contextGet(reqCtx._variables, nonceToken);
|
|
140
185
|
const store = reqCtx._cacheStore;
|
|
141
186
|
const key = buildShellKey(url);
|
|
187
|
+
// Dev Server-Timing mirror (issue #651): a capture completes AFTER its
|
|
188
|
+
// triggering response committed, so its outcome can only ride a LATER
|
|
189
|
+
// response's header. Read-and-clear keeps one capture = one report;
|
|
190
|
+
// dev-only (see takeCaptureDebugEventForTiming).
|
|
191
|
+
if (process.env.NODE_ENV !== "production" && reqCtx._metricsStore) {
|
|
192
|
+
const lastCapture = takeCaptureDebugEventForTiming(key);
|
|
193
|
+
if (lastCapture) {
|
|
194
|
+
appendMetric(
|
|
195
|
+
reqCtx._metricsStore,
|
|
196
|
+
"ppr:capture",
|
|
197
|
+
performance.now(),
|
|
198
|
+
lastCapture.attemptMs ?? 0,
|
|
199
|
+
undefined,
|
|
200
|
+
// attemptMs already rides as this entry's dur — drop it from desc.
|
|
201
|
+
describeShellCaptureEvent({ ...lastCapture, attemptMs: undefined }),
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
// Same mirror for the previous HIT's tail: its per-stage numbers
|
|
205
|
+
// (seed/match/handover/first-html/complete) finished after that
|
|
206
|
+
// response's headers were committed, so they ride THIS request's
|
|
207
|
+
// Server-Timing as `ppr:tail;dur=<complete ms>`.
|
|
208
|
+
const lastTail = takeShellTailTimingForServerTiming(key);
|
|
209
|
+
if (lastTail) {
|
|
210
|
+
appendMetric(
|
|
211
|
+
reqCtx._metricsStore,
|
|
212
|
+
"ppr:tail",
|
|
213
|
+
performance.now(),
|
|
214
|
+
lastTail.completeMs ?? 0,
|
|
215
|
+
undefined,
|
|
216
|
+
// completeMs already rides as this entry's dur — drop it from desc.
|
|
217
|
+
describeShellTailTiming({ ...lastTail, completeMs: undefined }),
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
142
221
|
if (activeNonce !== undefined) {
|
|
143
222
|
// Declared intent that cannot be honored deserves a diagnostic (unlike an
|
|
144
223
|
// undeclared route, which is silent): a ppr route gated off by an active
|
|
@@ -169,16 +248,67 @@ async function handleRscRenderingInner<TEnv>(
|
|
|
169
248
|
ttl: pprConfig.ttl,
|
|
170
249
|
swr: pprConfig.swr,
|
|
171
250
|
tags: pprConfig.tags,
|
|
251
|
+
captureTimeout: pprConfig.captureTimeout,
|
|
172
252
|
store,
|
|
173
253
|
debug: INTERNAL_RANGO_DEBUG,
|
|
254
|
+
maxSnapshotBytes: pprConfig.maxSnapshotBytes,
|
|
255
|
+
// The resolver owns the whole policy: option wins, the
|
|
256
|
+
// INTERNAL_RANGO_DEBUG env flag lights the events up when no
|
|
257
|
+
// option is set, an explicit `false` stays off.
|
|
258
|
+
debugSink: resolveShellCaptureDebugSink(
|
|
259
|
+
ctx.router.debugShellCapture,
|
|
260
|
+
),
|
|
261
|
+
};
|
|
262
|
+
// One serve funnel for BOTH entry sources (runtime store hit below,
|
|
263
|
+
// build-manifest hit further down): schedule the background
|
|
264
|
+
// recapture when asked, then commit the composed response.
|
|
265
|
+
const serveHit = (
|
|
266
|
+
entry: ShellCacheEntry,
|
|
267
|
+
revalidate: boolean | undefined,
|
|
268
|
+
): Response => {
|
|
269
|
+
if (revalidate) {
|
|
270
|
+
scheduleShellCapture(
|
|
271
|
+
ctx,
|
|
272
|
+
request,
|
|
273
|
+
env,
|
|
274
|
+
url,
|
|
275
|
+
reqCtx,
|
|
276
|
+
ssrModule,
|
|
277
|
+
descriptor,
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
return serveShellHit(
|
|
281
|
+
ctx,
|
|
282
|
+
request,
|
|
283
|
+
env,
|
|
284
|
+
url,
|
|
285
|
+
reqCtx,
|
|
286
|
+
handleStore,
|
|
287
|
+
ssrModule,
|
|
288
|
+
entry,
|
|
289
|
+
descriptor,
|
|
290
|
+
);
|
|
174
291
|
};
|
|
175
292
|
let cached: Awaited<ReturnType<typeof store.getShell>> = null;
|
|
293
|
+
const shellReadStart = reqCtx._metricsStore ? performance.now() : 0;
|
|
176
294
|
try {
|
|
177
295
|
cached = await store.getShell(key);
|
|
178
296
|
} catch (error) {
|
|
179
297
|
// A failing store read degrades to axis 1 (MISS), never a 500.
|
|
180
298
|
reportCacheError(error, "cache-read", "[ShellServe] getShell");
|
|
181
299
|
}
|
|
300
|
+
if (reqCtx._metricsStore) {
|
|
301
|
+
// Raw store outcome (pre-validity-gates), so a version-mismatch
|
|
302
|
+
// lifecycle miss is still distinguishable from a store miss.
|
|
303
|
+
appendMetric(
|
|
304
|
+
reqCtx._metricsStore,
|
|
305
|
+
"ppr:shell-read",
|
|
306
|
+
shellReadStart,
|
|
307
|
+
performance.now() - shellReadStart,
|
|
308
|
+
undefined,
|
|
309
|
+
cached ? "hit" : "miss",
|
|
310
|
+
);
|
|
311
|
+
}
|
|
182
312
|
if (cached && isValidShellHit(cached.entry, ctx.version)) {
|
|
183
313
|
if (!hasIntactShellPayload(cached.entry)) {
|
|
184
314
|
// Corrupt stored payload (undecodable prelude / unparseable
|
|
@@ -196,30 +326,29 @@ async function handleRscRenderingInner<TEnv>(
|
|
|
196
326
|
} else {
|
|
197
327
|
// Stale (SWR) hit: serve the stale shell now, recapture in the
|
|
198
328
|
// background (stampede-guarded + backoff inside scheduleShellCapture).
|
|
199
|
-
|
|
200
|
-
scheduleShellCapture(
|
|
201
|
-
ctx,
|
|
202
|
-
request,
|
|
203
|
-
env,
|
|
204
|
-
url,
|
|
205
|
-
reqCtx,
|
|
206
|
-
ssrModule,
|
|
207
|
-
descriptor,
|
|
208
|
-
);
|
|
209
|
-
}
|
|
210
|
-
return serveShellHit(
|
|
211
|
-
ctx,
|
|
212
|
-
request,
|
|
213
|
-
env,
|
|
214
|
-
url,
|
|
215
|
-
reqCtx,
|
|
216
|
-
handleStore,
|
|
217
|
-
ssrModule,
|
|
218
|
-
cached.entry,
|
|
219
|
-
descriptor,
|
|
220
|
-
);
|
|
329
|
+
return serveHit(cached.entry, cached.shouldRevalidate);
|
|
221
330
|
}
|
|
222
331
|
}
|
|
332
|
+
// Build-time shell read-through (producer B, #699): on a runtime
|
|
333
|
+
// store MISS a Prerender+ppr route serves its `vite build`-baked
|
|
334
|
+
// shell through the SAME serveShellHit. lookupBuildShell owns every
|
|
335
|
+
// gate and fails to null (ordinary MISS path takes over); past
|
|
336
|
+
// ppr.ttl the baked entry still serves while SWR recaptures — the
|
|
337
|
+
// upgrade path from build entry to runtime entry.
|
|
338
|
+
const buildHit = await lookupBuildShell(
|
|
339
|
+
url,
|
|
340
|
+
ctx.version,
|
|
341
|
+
store,
|
|
342
|
+
// Dev: no build manifest exists; producer B runs on demand via
|
|
343
|
+
// the dev server's /__rsc_shell endpoint for PRERENDERED routes
|
|
344
|
+
// only (production's exact candidate set). Folded away in
|
|
345
|
+
// production builds (NODE_ENV is a compile-time constant).
|
|
346
|
+
resolveDevShellLookup(reqCtx, pprConfig),
|
|
347
|
+
);
|
|
348
|
+
if (buildHit) {
|
|
349
|
+
// Past ppr.ttl: still serve the baked entry, recapture upgrades it.
|
|
350
|
+
return serveHit(buildHit.entry, buildHit.stale);
|
|
351
|
+
}
|
|
223
352
|
// MISS (no entry, invalid reactVersion, or store read failure): axis 1
|
|
224
353
|
// + a background capture scheduled once the response is known servable.
|
|
225
354
|
pprMiss = { descriptor, ssrModule };
|
|
@@ -230,7 +359,14 @@ async function handleRscRenderingInner<TEnv>(
|
|
|
230
359
|
|
|
231
360
|
if (isPartial) {
|
|
232
361
|
// Partial render (navigation)
|
|
233
|
-
const result = await
|
|
362
|
+
const result = await matchPartialWithPprReplay(
|
|
363
|
+
ctx,
|
|
364
|
+
request,
|
|
365
|
+
env,
|
|
366
|
+
url,
|
|
367
|
+
reqCtx,
|
|
368
|
+
nonce,
|
|
369
|
+
);
|
|
234
370
|
|
|
235
371
|
if (!result) {
|
|
236
372
|
// Fall back to full render
|
|
@@ -240,8 +376,12 @@ async function handleRscRenderingInner<TEnv>(
|
|
|
240
376
|
if (match.redirect) {
|
|
241
377
|
// Partial request: use X-RSC-Redirect header so the client can
|
|
242
378
|
// perform SPA navigation. A raw 308 would be auto-followed by
|
|
243
|
-
// fetch, hitting the target without _rsc_partial.
|
|
244
|
-
|
|
379
|
+
// fetch, hitting the target without _rsc_partial. Resolve the
|
|
380
|
+
// target server-side (same open-redirect policy as 3xx).
|
|
381
|
+
return createSimpleRedirectResponse(match.redirect, {
|
|
382
|
+
requestOrigin: url.origin,
|
|
383
|
+
basename: ctx.router.basename,
|
|
384
|
+
});
|
|
245
385
|
}
|
|
246
386
|
|
|
247
387
|
payload = buildFullPayload(match, ctx, url, reqCtx, handleStore);
|
|
@@ -335,86 +475,70 @@ async function handleRscRenderingInner<TEnv>(
|
|
|
335
475
|
|
|
336
476
|
const metricsStore = reqCtx._metricsStore;
|
|
337
477
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
"X-RSC-Router-Id": ctx.router.id,
|
|
364
|
-
};
|
|
365
|
-
// Tell the client's prefetch cache to scope this response to its source
|
|
366
|
-
// URL (instead of the default source-agnostic wildcard). Intercept
|
|
367
|
-
// responses depend on the source page matching an intercept rule, so
|
|
368
|
-
// they must not be reused for navigations from other sources.
|
|
369
|
-
if (hasInterceptSlots) {
|
|
370
|
-
rscHeaders["x-rsc-prefetch-scope"] = "source";
|
|
371
|
-
}
|
|
372
|
-
// Enable browser HTTP caching for prefetch responses only.
|
|
373
|
-
// Requires X-Rango-Prefetch header (sent by Link prefetch fetch),
|
|
374
|
-
// non-intercept context (intercept responses depend on source page),
|
|
375
|
-
// and a configured cache-control value (false disables caching).
|
|
376
|
-
const isPrefetch = request.headers.has("X-Rango-Prefetch");
|
|
377
|
-
if (isPrefetch && isPartial && !hasInterceptSlots) {
|
|
378
|
-
const cc = ctx.router.prefetchCacheControl;
|
|
379
|
-
if (cc) {
|
|
380
|
-
rscHeaders["cache-control"] = cc;
|
|
381
|
-
}
|
|
478
|
+
const rscHeaders: Record<string, string> = {
|
|
479
|
+
"content-type": "text/x-component;charset=utf-8",
|
|
480
|
+
vary: "accept, X-Rango-State, X-RSC-Router-Client-Path",
|
|
481
|
+
// Router identity, so the client can verify pre-decode (before importing
|
|
482
|
+
// chunks) that this content payload belongs to its app and refuse a
|
|
483
|
+
// foreign one (cache/proxy/bug). Control-only reload/redirect responses
|
|
484
|
+
// are deliberately NOT stamped. See browser/response-adapter.ts.
|
|
485
|
+
"X-RSC-Router-Id": ctx.router.id,
|
|
486
|
+
};
|
|
487
|
+
// Tell the client's prefetch cache to scope this response to its source
|
|
488
|
+
// URL (instead of the default source-agnostic wildcard). Intercept
|
|
489
|
+
// responses depend on the source page matching an intercept rule, so
|
|
490
|
+
// they must not be reused for navigations from other sources.
|
|
491
|
+
if (hasInterceptSlots) {
|
|
492
|
+
rscHeaders["x-rsc-prefetch-scope"] = "source";
|
|
493
|
+
}
|
|
494
|
+
// Enable browser HTTP caching for prefetch responses only.
|
|
495
|
+
// Requires X-Rango-Prefetch header (sent by Link prefetch fetch),
|
|
496
|
+
// non-intercept context (intercept responses depend on source page),
|
|
497
|
+
// and a configured cache-control value (false disables caching).
|
|
498
|
+
const isPrefetch = request.headers.has("X-Rango-Prefetch");
|
|
499
|
+
if (isPrefetch && isPartial && !hasInterceptSlots) {
|
|
500
|
+
const cc = ctx.router.prefetchCacheControl;
|
|
501
|
+
if (cc) {
|
|
502
|
+
rscHeaders["cache-control"] = cc;
|
|
382
503
|
}
|
|
383
|
-
return createResponseWithMergedHeaders(rscStream, {
|
|
384
|
-
headers: rscHeaders,
|
|
385
|
-
});
|
|
386
504
|
}
|
|
387
505
|
|
|
388
|
-
|
|
389
|
-
const
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
}
|
|
506
|
+
const isFlightResponse = isRscRequest(request, url, isPartial);
|
|
507
|
+
const stageTracking = {
|
|
508
|
+
mode: isPartial ? ("partial" as const) : ("full" as const),
|
|
509
|
+
routeKey: reqCtx._routeName,
|
|
510
|
+
span: renderSpan,
|
|
511
|
+
};
|
|
512
|
+
const response = await renderRscResponse(
|
|
513
|
+
{
|
|
514
|
+
ctx,
|
|
515
|
+
request,
|
|
516
|
+
env,
|
|
517
|
+
url,
|
|
518
|
+
payload,
|
|
519
|
+
init: { headers: rscHeaders },
|
|
520
|
+
tracking: stageTracking,
|
|
521
|
+
},
|
|
522
|
+
isFlightResponse
|
|
523
|
+
? undefined
|
|
524
|
+
: {
|
|
525
|
+
html: createSsrHtmlStage({
|
|
526
|
+
ctx,
|
|
527
|
+
request,
|
|
528
|
+
env,
|
|
529
|
+
url,
|
|
530
|
+
metricsStore,
|
|
531
|
+
render: { nonce },
|
|
532
|
+
init: { headers: { "content-type": "text/html;charset=utf-8" } },
|
|
533
|
+
}),
|
|
534
|
+
},
|
|
404
535
|
);
|
|
405
|
-
const response = createResponseWithMergedHeaders(htmlStream, {
|
|
406
|
-
headers: { "content-type": "text/html;charset=utf-8" },
|
|
407
|
-
});
|
|
408
536
|
|
|
409
537
|
// --- Axis 2: PPR shell CAPTURE on MISS (background task; see design doc) ---
|
|
410
|
-
//
|
|
411
|
-
//
|
|
412
|
-
//
|
|
413
|
-
|
|
414
|
-
// page via router.match() under a derived context (fresh handle store,
|
|
415
|
-
// _shellCaptureRun: true) — middleware never re-runs; it already ran for this
|
|
416
|
-
// request and guarding is serve-time.
|
|
417
|
-
if (pprMiss) {
|
|
538
|
+
// Capture only a 200 HTML document (a 404/error render is not a cacheable
|
|
539
|
+
// shell). Capture does not flow through the HTTP pipeline — middleware never
|
|
540
|
+
// re-runs (it already ran for this request; guarding is serve-time).
|
|
541
|
+
if (pprMiss && !reqCtx._dynamic) {
|
|
418
542
|
if (
|
|
419
543
|
response.status === 200 &&
|
|
420
544
|
(response.headers.get("content-type") ?? "").includes("text/html")
|
|
@@ -436,16 +560,83 @@ async function handleRscRenderingInner<TEnv>(
|
|
|
436
560
|
}
|
|
437
561
|
|
|
438
562
|
/**
|
|
439
|
-
*
|
|
440
|
-
*
|
|
441
|
-
*
|
|
442
|
-
*
|
|
443
|
-
*
|
|
444
|
-
*
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
563
|
+
* Reuse a PPR capture's canonical segment record for a partial navigation.
|
|
564
|
+
* The ordinary matchPartial pipeline remains authoritative: it projects the
|
|
565
|
+
* cached target tree against the client's segment ids, evaluates revalidation,
|
|
566
|
+
* and resolves every loader fresh. Only segment-family records are seeded;
|
|
567
|
+
* captured item/response/loader values belong to document parity and must not
|
|
568
|
+
* pin navigation data.
|
|
569
|
+
*/
|
|
570
|
+
async function matchPartialWithPprReplay<TEnv>(
|
|
571
|
+
ctx: HandlerContext<TEnv>,
|
|
572
|
+
request: Request,
|
|
573
|
+
env: TEnv,
|
|
574
|
+
url: URL,
|
|
575
|
+
reqCtx: RequestContext<any>,
|
|
576
|
+
nonce: string | undefined,
|
|
577
|
+
) {
|
|
578
|
+
const runMatch = () => ctx.router.matchPartial(request, { env });
|
|
579
|
+
const pprConfig = resolvePprConfig(reqCtx._classifiedRoute?.manifestEntry);
|
|
580
|
+
const activeNonce = nonce ?? contextGet(reqCtx._variables, nonceToken);
|
|
581
|
+
const store = reqCtx._cacheStore;
|
|
582
|
+
|
|
583
|
+
if (
|
|
584
|
+
request.method !== "GET" ||
|
|
585
|
+
!pprConfig ||
|
|
586
|
+
reqCtx._dynamic ||
|
|
587
|
+
activeNonce !== undefined ||
|
|
588
|
+
!hasShellFamily(store) ||
|
|
589
|
+
store.supportsPassiveShellReads !== true
|
|
590
|
+
) {
|
|
591
|
+
return runMatch();
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
const key = buildShellKey(url);
|
|
595
|
+
let cached: Awaited<ReturnType<typeof store.getShell>> = null;
|
|
596
|
+
try {
|
|
597
|
+
cached = await store.getShell(key, { claimRevalidation: false });
|
|
598
|
+
} catch (error) {
|
|
599
|
+
reportCacheError(error, "cache-read", "[NavigationPPR] getShell");
|
|
600
|
+
return runMatch();
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
let snapshot = cached?.shouldRevalidate
|
|
604
|
+
? undefined
|
|
605
|
+
: replayableShellSnapshot(cached?.entry, ctx.version);
|
|
606
|
+
|
|
607
|
+
if (!snapshot) {
|
|
608
|
+
// Production build manifests are local module data. In dev, resolving a
|
|
609
|
+
// missing build shell would foreground-fetch /__rsc_shell and block an
|
|
610
|
+
// otherwise ordinary navigation on capture, so replay remains runtime-only.
|
|
611
|
+
const buildHit = await lookupBuildShell(url, ctx.version, store);
|
|
612
|
+
if (!buildHit?.stale) {
|
|
613
|
+
snapshot = replayableShellSnapshot(buildHit?.entry, ctx.version);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
if (!snapshot) return runMatch();
|
|
618
|
+
|
|
619
|
+
const previousImplicitCache = reqCtx._shellImplicitCache;
|
|
620
|
+
reqCtx._shellImplicitCache = {
|
|
621
|
+
ttl: pprConfig.ttl,
|
|
622
|
+
swr: pprConfig.swr,
|
|
623
|
+
store: new SeededShellStore(store, snapshot, { segmentsOnly: true }),
|
|
624
|
+
keyPrefix: "doc",
|
|
625
|
+
};
|
|
626
|
+
|
|
627
|
+
try {
|
|
628
|
+
return await runMatch();
|
|
629
|
+
} finally {
|
|
630
|
+
reqCtx._shellImplicitCache = previousImplicitCache;
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
/**
|
|
635
|
+
* Neutralize the shell-HIT degradation redirect target. The inline
|
|
636
|
+
* `location.replace` in a committed 200 body bypasses the 3xx chokepoint
|
|
637
|
+
* (guardOutgoingRedirect only sees 3xx + Location), so this reuses the same
|
|
638
|
+
* same-origin resolver directly: unsafe targets neutralize to the
|
|
639
|
+
* redirect-guard.ts landing instead of navigating the user off-host.
|
|
449
640
|
*/
|
|
450
641
|
export function resolveShellHitRedirectTarget(
|
|
451
642
|
rawTarget: string,
|
|
@@ -459,23 +650,13 @@ export function resolveShellHitRedirectTarget(
|
|
|
459
650
|
}
|
|
460
651
|
|
|
461
652
|
/**
|
|
462
|
-
* Serve a validated shell HIT: commit the
|
|
463
|
-
*
|
|
464
|
-
*
|
|
465
|
-
*
|
|
466
|
-
*
|
|
467
|
-
*
|
|
468
|
-
*
|
|
469
|
-
* Status and headers are committed at the flush: middleware already ran (their
|
|
470
|
-
* ctx.res headers merge in via createResponseWithMergedHeaders), and route
|
|
471
|
-
* middleware code after its next() can still adjust headers on the returned
|
|
472
|
-
* Response object. A failing hole cannot become a 500/redirect after this point —
|
|
473
|
-
* error UI renders inline via Suspense/error boundaries, the documented PPR
|
|
474
|
-
* constraint.
|
|
475
|
-
*
|
|
476
|
-
* The tail promise is kicked off SYNCHRONOUSLY so match/Flight/resume run inside
|
|
477
|
-
* the current ALS request-context frame (the stream may be pulled by the server
|
|
478
|
-
* adapter outside it).
|
|
653
|
+
* Serve a validated shell HIT: commit the stored prelude bytes NOW and run the
|
|
654
|
+
* live tail behind them inside the response stream. Plain byte concatenation is
|
|
655
|
+
* correct — React foster-parents content streamed after the prelude's closing
|
|
656
|
+
* `</body></html>`. After the flush a failing hole cannot become a 500/redirect
|
|
657
|
+
* (error UI renders inline — the documented PPR constraint). The tail promise
|
|
658
|
+
* is kicked off SYNCHRONOUSLY so it runs inside the current ALS request-context
|
|
659
|
+
* frame; the adapter may pull the stream outside it.
|
|
479
660
|
*/
|
|
480
661
|
function serveShellHit(
|
|
481
662
|
ctx: HandlerContext<any>,
|
|
@@ -489,12 +670,36 @@ function serveShellHit(
|
|
|
489
670
|
descriptor: ShellCaptureDescriptor,
|
|
490
671
|
): Response {
|
|
491
672
|
const preludeBytes = base64ToBytes(entry.prelude);
|
|
673
|
+
// Per-stage tail timing for the dev `ppr:tail` Server-Timing mirror. Dev
|
|
674
|
+
// only (NODE_ENV folds the branch away in production builds); offsets are
|
|
675
|
+
// relative to this commit point.
|
|
676
|
+
const tailTiming: ShellTailTiming | null =
|
|
677
|
+
process.env.NODE_ENV !== "production"
|
|
678
|
+
? {
|
|
679
|
+
key: descriptor.key,
|
|
680
|
+
outcome: "complete",
|
|
681
|
+
preludeBytes: preludeBytes.length,
|
|
682
|
+
}
|
|
683
|
+
: null;
|
|
684
|
+
const tailT0 = tailTiming ? performance.now() : 0;
|
|
685
|
+
|
|
686
|
+
const createTailContext = (): RequestContext<any> => {
|
|
687
|
+
const tailCtx: RequestContext<any> = Object.create(reqCtx);
|
|
688
|
+
// Matching writes render state onto the derived context. Its barrier must
|
|
689
|
+
// close over that same context or a streaming tail inherits the base
|
|
690
|
+
// context's premature non-streaming handle snapshot.
|
|
691
|
+
wireRenderBarrier(tailCtx, handleStore);
|
|
692
|
+
return tailCtx;
|
|
693
|
+
};
|
|
492
694
|
|
|
493
695
|
const renderTail = async (
|
|
494
696
|
activeCtx: RequestContext<any>,
|
|
495
697
|
): Promise<ReadableStream<Uint8Array> | { redirect: string }> => {
|
|
496
698
|
const matchStart = INTERNAL_RANGO_DEBUG ? performance.now() : 0;
|
|
497
699
|
const match = await ctx.router.match(request, { env });
|
|
700
|
+
if (tailTiming) {
|
|
701
|
+
tailTiming.matchMs = Math.round(performance.now() - tailT0);
|
|
702
|
+
}
|
|
498
703
|
if (INTERNAL_RANGO_DEBUG) {
|
|
499
704
|
console.log(
|
|
500
705
|
`[Server][ppr] shell HIT: tail match done +${Math.round(performance.now() - matchStart)}ms (abs ${Math.round(performance.now())}, started ${Math.round(matchStart)})`,
|
|
@@ -503,14 +708,10 @@ function serveShellHit(
|
|
|
503
708
|
if (match.redirect) return { redirect: match.redirect };
|
|
504
709
|
setRequestContextParams(match.params, match.routeName);
|
|
505
710
|
const payload = buildFullPayload(match, ctx, url, activeCtx, handleStore);
|
|
506
|
-
// Theme fidelity for resume:
|
|
507
|
-
//
|
|
508
|
-
//
|
|
509
|
-
//
|
|
510
|
-
// tree AND client hydration both read it) so the trees agree by
|
|
511
|
-
// construction. The visitor still sees THEIR theme: the FOUC script in the
|
|
512
|
-
// prelude applies it pre-paint from the cookie, and ThemeProvider re-syncs
|
|
513
|
-
// its state from the cookie post-mount.
|
|
711
|
+
// Theme fidelity for resume: replay the CAPTURE's initialTheme into the
|
|
712
|
+
// payload so the resume/hydration trees match the frozen prelude by
|
|
713
|
+
// construction. The visitor still sees THEIR theme — the prelude's FOUC
|
|
714
|
+
// script applies the cookie pre-paint and ThemeProvider re-syncs post-mount.
|
|
514
715
|
if (payload.metadata) {
|
|
515
716
|
payload.metadata.initialTheme = entry.initialTheme as
|
|
516
717
|
| import("../theme/types.js").Theme
|
|
@@ -518,11 +719,18 @@ function serveShellHit(
|
|
|
518
719
|
}
|
|
519
720
|
// Full Flight render per request: hydration needs the whole payload (there
|
|
520
721
|
// is no Flight-side resume — a React limitation, not ours).
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
722
|
+
const flightStage = renderRscFlightStage({
|
|
723
|
+
ctx,
|
|
724
|
+
request,
|
|
725
|
+
env,
|
|
726
|
+
url,
|
|
727
|
+
payload,
|
|
728
|
+
tracking: {
|
|
729
|
+
mode: "full",
|
|
730
|
+
routeKey: activeCtx._routeName,
|
|
524
731
|
},
|
|
525
732
|
});
|
|
733
|
+
let rscStream = flightStage.stream;
|
|
526
734
|
// Timing tap: when does the Flight render produce its FIRST byte? Compared
|
|
527
735
|
// with the eager-inject/first-tail logs this proves whether hydration-start
|
|
528
736
|
// latency is genuine server work (loaders) or stream plumbing holding
|
|
@@ -555,18 +763,13 @@ function serveShellHit(
|
|
|
555
763
|
const tailPromise: Promise<
|
|
556
764
|
ReadableStream<Uint8Array> | { redirect: string }
|
|
557
765
|
> = (async () => {
|
|
558
|
-
//
|
|
559
|
-
//
|
|
560
|
-
//
|
|
561
|
-
// overlay
|
|
562
|
-
//
|
|
563
|
-
// even after the underlying cache entries drifted (expired/recomputed/
|
|
564
|
-
// tag-invalidated). Everything not pinned (the holes — masked loaders were
|
|
565
|
-
// never recorded) falls through to the real store and stays LIVE. The
|
|
566
|
-
// overlay lives on a DERIVED context (own _cacheStore), so the shared reqCtx
|
|
567
|
-
// is untouched; an entry without a snapshot keeps the pre-snapshot behavior.
|
|
766
|
+
// Snapshot seeding (docs/design/ppr-shell-resume.md): the tail render must
|
|
767
|
+
// match the frozen prelude, so pinned cache reads replay their capture-time
|
|
768
|
+
// values via a SeededShellStore overlay while unpinned reads (the holes)
|
|
769
|
+
// stay live. The overlay lives on a DERIVED context so the shared reqCtx is
|
|
770
|
+
// untouched.
|
|
568
771
|
if (entry.snapshot && entry.snapshot.length > 0) {
|
|
569
|
-
const seededCtx
|
|
772
|
+
const seededCtx = createTailContext();
|
|
570
773
|
if (reqCtx._cacheStore) {
|
|
571
774
|
seededCtx._cacheStore = new SeededShellStore(
|
|
572
775
|
reqCtx._cacheStore,
|
|
@@ -579,15 +782,50 @@ function serveShellHit(
|
|
|
579
782
|
// hole-marker paths keep the fresh run's live nested promises.
|
|
580
783
|
const seedStart = INTERNAL_RANGO_DEBUG ? performance.now() : 0;
|
|
581
784
|
const loaderSeed = await buildShellLoaderSeed(entry.snapshot);
|
|
785
|
+
if (tailTiming) {
|
|
786
|
+
tailTiming.seedMs = Math.round(performance.now() - tailT0);
|
|
787
|
+
}
|
|
582
788
|
if (INTERNAL_RANGO_DEBUG) {
|
|
583
789
|
console.log(
|
|
584
790
|
`[Server][ppr] shell HIT: loader seed built +${Math.round(performance.now() - seedStart)}ms (abs ${Math.round(performance.now())})`,
|
|
585
791
|
);
|
|
586
792
|
}
|
|
587
793
|
if (loaderSeed) seededCtx._shellLoaderSeed = loaderSeed;
|
|
794
|
+
// Shell fast path (serve side): if the capture recorded the implicit doc
|
|
795
|
+
// segment record and the handler layer declared no liveness, the tail's
|
|
796
|
+
// cache lookup HITs the seeded doc entry — the handler layer is REPLAYED,
|
|
797
|
+
// not re-executed (loaders still run fresh). Anything else degrades to
|
|
798
|
+
// the full tail automatically.
|
|
799
|
+
if (!entry.handlerLiveHoles && !entry.transitionWhen) {
|
|
800
|
+
seededCtx._shellImplicitCache = {
|
|
801
|
+
ttl: descriptor.ttl,
|
|
802
|
+
swr: descriptor.swr,
|
|
803
|
+
keyPrefix: "doc",
|
|
804
|
+
};
|
|
805
|
+
if (INTERNAL_RANGO_DEBUG) {
|
|
806
|
+
console.log(
|
|
807
|
+
`[Server][ppr] shell HIT: fast path armed (implicit doc cache) (abs ${Math.round(performance.now())})`,
|
|
808
|
+
);
|
|
809
|
+
}
|
|
810
|
+
} else if (INTERNAL_RANGO_DEBUG) {
|
|
811
|
+
console.log(
|
|
812
|
+
`[Server][ppr] shell HIT: fast path declined — request-dependent handler/transition state; tail re-runs handlers (abs ${Math.round(performance.now())})`,
|
|
813
|
+
);
|
|
814
|
+
}
|
|
815
|
+
// Fragment splice (issue #700): store hits in THIS tail emit their stored
|
|
816
|
+
// segment fragments verbatim (expanded by segment-fragments.ts). The flag
|
|
817
|
+
// lives on the derived context so it can never leak into a capture render,
|
|
818
|
+
// which serializes segments and must see real elements.
|
|
819
|
+
seededCtx._shellFragmentPayload = true;
|
|
588
820
|
return runWithRequestContext(seededCtx, () => renderTail(seededCtx));
|
|
589
821
|
}
|
|
590
|
-
|
|
822
|
+
// No snapshot (e.g. a producer B entry): still a shell-HIT tail, so arm the
|
|
823
|
+
// fragment splice on a derived context — never the shared reqCtx, from which
|
|
824
|
+
// scheduleShellCapture derives the capture context (the flag must not be
|
|
825
|
+
// inherited there).
|
|
826
|
+
const fragmentCtx = createTailContext();
|
|
827
|
+
fragmentCtx._shellFragmentPayload = true;
|
|
828
|
+
return runWithRequestContext(fragmentCtx, () => renderTail(fragmentCtx));
|
|
591
829
|
})();
|
|
592
830
|
// The stream below is the only consumer; pre-attach a no-op catch so a tail
|
|
593
831
|
// failure before the stream is pulled never surfaces as an unhandled rejection.
|
|
@@ -604,6 +842,9 @@ function serveShellHit(
|
|
|
604
842
|
}
|
|
605
843
|
try {
|
|
606
844
|
const tail = await tailPromise;
|
|
845
|
+
if (tailTiming) {
|
|
846
|
+
tailTiming.handoverMs = Math.round(performance.now() - tailT0);
|
|
847
|
+
}
|
|
607
848
|
if (INTERNAL_RANGO_DEBUG) {
|
|
608
849
|
console.log(
|
|
609
850
|
`[Server][ppr] shell HIT: tail stream handed over +${Math.round(performance.now() - serveStart)}ms (abs ${Math.round(performance.now())})`,
|
|
@@ -617,18 +858,31 @@ function serveShellHit(
|
|
|
617
858
|
for (;;) {
|
|
618
859
|
const { done, value } = await reader.read();
|
|
619
860
|
if (done) break;
|
|
620
|
-
if (
|
|
861
|
+
if (firstTailChunk) {
|
|
621
862
|
firstTailChunk = false;
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
863
|
+
if (tailTiming) {
|
|
864
|
+
tailTiming.firstHtmlMs = Math.round(
|
|
865
|
+
performance.now() - tailT0,
|
|
866
|
+
);
|
|
867
|
+
}
|
|
868
|
+
if (INTERNAL_RANGO_DEBUG) {
|
|
869
|
+
console.log(
|
|
870
|
+
`[Server][ppr] shell HIT: first tail chunk on the wire +${Math.round(performance.now() - serveStart)}ms (abs ${Math.round(performance.now())})`,
|
|
871
|
+
);
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
if (tailTiming || INTERNAL_RANGO_DEBUG) {
|
|
875
|
+
tailBytes += value.length;
|
|
625
876
|
}
|
|
626
|
-
if (INTERNAL_RANGO_DEBUG) tailBytes += value.length;
|
|
627
877
|
controller.enqueue(value);
|
|
628
878
|
}
|
|
629
879
|
} finally {
|
|
630
880
|
reader.releaseLock();
|
|
631
881
|
}
|
|
882
|
+
if (tailTiming) {
|
|
883
|
+
tailTiming.completeMs = Math.round(performance.now() - tailT0);
|
|
884
|
+
tailTiming.tailBytes = tailBytes;
|
|
885
|
+
}
|
|
632
886
|
// Bounds the post-header work Server-Timing structurally cannot see:
|
|
633
887
|
// the HIT commits headers at the flush, so ALL live-tail time (match,
|
|
634
888
|
// loaders, Flight, resume) happens inside the response body. This
|
|
@@ -655,18 +909,20 @@ function serveShellHit(
|
|
|
655
909
|
`<script>location.replace(${JSON.stringify(safeTarget)})</script>`,
|
|
656
910
|
),
|
|
657
911
|
);
|
|
912
|
+
if (tailTiming) {
|
|
913
|
+
tailTiming.outcome = "redirect";
|
|
914
|
+
tailTiming.completeMs = Math.round(performance.now() - tailT0);
|
|
915
|
+
}
|
|
658
916
|
}
|
|
917
|
+
if (tailTiming) publishShellTailTiming(tailTiming);
|
|
659
918
|
controller.close();
|
|
660
919
|
} catch (error) {
|
|
661
|
-
// Self-heal on a failed tail: the pre-commit gates
|
|
662
|
-
//
|
|
663
|
-
//
|
|
664
|
-
//
|
|
665
|
-
//
|
|
666
|
-
//
|
|
667
|
-
// produced. A client disconnect mid-stream also lands here and
|
|
668
|
-
// schedules a spurious-but-idempotent recapture — bounded by the
|
|
669
|
-
// stampede guard + backoff inside scheduleShellCapture.
|
|
920
|
+
// Self-heal on a failed tail: errors the pre-commit gates cannot catch
|
|
921
|
+
// (mismatched postponed blob, hard render error above the holes) throw
|
|
922
|
+
// here AFTER the 200 + prelude flushed and would re-fail on every
|
|
923
|
+
// request until the entry ages out — recapture overwrites the entry.
|
|
924
|
+
// Client disconnects land here too; the recapture is idempotent and
|
|
925
|
+
// bounded by scheduleShellCapture's stampede guard + backoff.
|
|
670
926
|
scheduleShellCapture(
|
|
671
927
|
ctx,
|
|
672
928
|
request,
|
|
@@ -676,6 +932,11 @@ function serveShellHit(
|
|
|
676
932
|
ssrModule,
|
|
677
933
|
descriptor,
|
|
678
934
|
);
|
|
935
|
+
if (tailTiming) {
|
|
936
|
+
tailTiming.outcome = "error";
|
|
937
|
+
tailTiming.completeMs = Math.round(performance.now() - tailT0);
|
|
938
|
+
publishShellTailTiming(tailTiming);
|
|
939
|
+
}
|
|
679
940
|
controller.error(error);
|
|
680
941
|
}
|
|
681
942
|
},
|