@rangojs/router 0.0.0-experimental.f3c21dba → 0.0.0-experimental.f4a8e8de
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +8 -4
- package/README.md +320 -735
- package/dist/bin/rango.js +977 -240
- package/dist/testing/vitest.js +82 -0
- package/dist/types/__internal.d.ts +127 -0
- package/dist/types/bin/rango.d.ts +1 -0
- package/dist/types/browser/action-coordinator.d.ts +57 -0
- package/dist/types/browser/action-fence.d.ts +33 -0
- package/dist/types/browser/app-shell.d.ts +34 -0
- package/dist/types/browser/app-version.d.ts +6 -0
- package/dist/types/browser/connection-warmup.d.ts +31 -0
- package/dist/types/browser/cookie-name.d.ts +66 -0
- package/dist/types/browser/dev-discovery.d.ts +11 -0
- package/dist/types/browser/event-controller.d.ts +231 -0
- package/dist/types/browser/history-state.d.ts +26 -0
- package/dist/types/browser/index.d.ts +1 -0
- package/dist/types/browser/intercept-utils.d.ts +30 -0
- package/dist/types/browser/invalidate-client-cache.d.ts +17 -0
- package/dist/types/browser/link-interceptor.d.ts +53 -0
- package/dist/types/browser/logging.d.ts +33 -0
- package/dist/types/browser/merge-segment-loaders.d.ts +38 -0
- package/dist/types/browser/navigation-bridge.d.ts +39 -0
- package/dist/types/browser/navigation-client.d.ts +17 -0
- package/dist/types/browser/navigation-store-handle.d.ts +25 -0
- package/dist/types/browser/navigation-store.d.ts +85 -0
- package/dist/types/browser/navigation-transaction.d.ts +75 -0
- package/dist/types/browser/network-error-handler.d.ts +35 -0
- package/dist/types/browser/notify-listeners.d.ts +2 -0
- package/dist/types/browser/partial-update.d.ts +61 -0
- package/dist/types/browser/prefetch/cache.d.ts +224 -0
- package/dist/types/browser/prefetch/default-strategy.d.ts +31 -0
- package/dist/types/browser/prefetch/fetch.d.ts +52 -0
- package/dist/types/browser/prefetch/invalidation.d.ts +6 -0
- package/dist/types/browser/prefetch/loader.d.ts +12 -0
- package/dist/types/browser/prefetch/observer.d.ts +24 -0
- package/dist/types/browser/prefetch/policy.d.ts +13 -0
- package/dist/types/browser/prefetch/queue.d.ts +48 -0
- package/dist/types/browser/prefetch/resource-ready.d.ts +28 -0
- package/dist/types/browser/prefetch/runtime.d.ts +2 -0
- package/dist/types/browser/rango-state.d.ts +56 -0
- package/dist/types/browser/react/Link.d.ts +132 -0
- package/dist/types/browser/react/NavigationProvider.d.ts +88 -0
- package/dist/types/browser/react/ScrollRestoration.d.ts +78 -0
- package/dist/types/browser/react/context.d.ts +57 -0
- package/dist/types/browser/react/filter-segment-order.d.ts +35 -0
- package/dist/types/browser/react/index.d.ts +1 -0
- package/dist/types/browser/react/location-state-shared.d.ts +162 -0
- package/dist/types/browser/react/location-state.d.ts +29 -0
- package/dist/types/browser/react/mount-context.d.ts +23 -0
- package/dist/types/browser/react/nonce-context.d.ts +14 -0
- package/dist/types/browser/react/shallow-equal.d.ts +5 -0
- package/dist/types/browser/react/use-action.d.ts +61 -0
- package/dist/types/browser/react/use-handle.d.ts +21 -0
- package/dist/types/browser/react/use-href.d.ts +32 -0
- package/dist/types/browser/react/use-link-status.d.ts +36 -0
- package/dist/types/browser/react/use-mount.d.ts +24 -0
- package/dist/types/browser/react/use-navigation.d.ts +15 -0
- package/dist/types/browser/react/use-params.d.ts +21 -0
- package/dist/types/browser/react/use-pathname.d.ts +13 -0
- package/dist/types/browser/react/use-reverse.d.ts +40 -0
- package/dist/types/browser/react/use-router.d.ts +23 -0
- package/dist/types/browser/react/use-search-params.d.ts +19 -0
- package/dist/types/browser/react/use-segments.d.ts +29 -0
- package/dist/types/browser/response-adapter.d.ts +58 -0
- package/dist/types/browser/rsc-router.d.ts +146 -0
- package/dist/types/browser/scroll-restoration.d.ts +103 -0
- package/dist/types/browser/segment-reconciler.d.ts +74 -0
- package/dist/types/browser/segment-structure-assert.d.ts +16 -0
- package/dist/types/browser/server-action-bridge.d.ts +29 -0
- package/dist/types/browser/types.d.ts +546 -0
- package/dist/types/browser/validate-redirect-origin.d.ts +28 -0
- package/dist/types/build/collect-fallback-refs.d.ts +5 -0
- package/dist/types/build/generate-manifest.d.ts +106 -0
- package/dist/types/build/generate-route-types.d.ts +8 -0
- package/dist/types/build/index.d.ts +21 -0
- package/dist/types/build/merge-full-manifests.d.ts +3 -0
- package/dist/types/build/prefix-tree-utils.d.ts +56 -0
- package/dist/types/build/route-trie.d.ts +20 -0
- package/dist/types/build/route-types/ast-helpers.d.ts +3 -0
- package/dist/types/build/route-types/ast-route-extraction.d.ts +13 -0
- package/dist/types/build/route-types/codegen.d.ts +16 -0
- package/dist/types/build/route-types/include-resolution.d.ts +74 -0
- package/dist/types/build/route-types/param-extraction.d.ts +13 -0
- package/dist/types/build/route-types/per-module-writer.d.ts +20 -0
- package/dist/types/build/route-types/router-processing.d.ts +81 -0
- package/dist/types/build/route-types/scan-filter.d.ts +17 -0
- package/dist/types/build/route-types/source-scan.d.ts +13 -0
- package/dist/types/build/runtime-discovery.d.ts +24 -0
- package/dist/types/cache/background-task.d.ts +21 -0
- package/dist/types/cache/cache-error.d.ts +71 -0
- package/dist/types/cache/cache-exec-scope.d.ts +31 -0
- package/dist/types/cache/cache-key-utils.d.ts +43 -0
- package/dist/types/cache/cache-policy.d.ts +59 -0
- package/dist/types/cache/cache-runtime.d.ts +51 -0
- package/dist/types/cache/cache-scope.d.ts +215 -0
- package/dist/types/cache/cache-tag.d.ts +79 -0
- package/dist/types/cache/cf/cf-base64.d.ts +4 -0
- package/dist/types/cache/cf/cf-cache-constants.d.ts +112 -0
- package/dist/types/cache/cf/cf-cache-store.d.ts +616 -0
- package/dist/types/cache/cf/cf-cache-types.d.ts +365 -0
- package/dist/types/cache/cf/cf-kv-utils.d.ts +43 -0
- package/dist/types/cache/cf/cf-tag-marker-memo.d.ts +15 -0
- package/dist/types/cache/cf/cf-zone-purge.d.ts +31 -0
- package/dist/types/cache/cf/index.d.ts +4 -0
- package/dist/types/cache/document-cache.d.ts +71 -0
- package/dist/types/cache/handle-capture.d.ts +23 -0
- package/dist/types/cache/handle-snapshot.d.ts +39 -0
- package/dist/types/cache/index.d.ts +9 -0
- package/dist/types/cache/memory-segment-store.d.ts +163 -0
- package/dist/types/cache/profile-registry.d.ts +40 -0
- package/dist/types/cache/read-through-swr.d.ts +61 -0
- package/dist/types/cache/search-params-filter.d.ts +64 -0
- package/dist/types/cache/segment-codec.d.ts +78 -0
- package/dist/types/cache/shell-snapshot.d.ts +186 -0
- package/dist/types/cache/tag-invalidation.d.ts +74 -0
- package/dist/types/cache/taint.d.ts +77 -0
- package/dist/types/cache/types.d.ts +503 -0
- package/dist/types/cache/vercel/index.d.ts +1 -0
- package/dist/types/cache/vercel/vercel-cache-store.d.ts +268 -0
- package/dist/types/client-urls/client-root.d.ts +38 -0
- package/dist/types/client-urls/client-urls.d.ts +5 -0
- package/dist/types/client-urls/navigation.d.ts +38 -0
- package/dist/types/client-urls/revalidation-protocol.d.ts +25 -0
- package/dist/types/client-urls/server-projection.d.ts +57 -0
- package/dist/types/client-urls/types.d.ts +132 -0
- package/dist/types/client.d.ts +191 -0
- package/dist/types/client.rsc.d.ts +41 -0
- package/dist/types/cloudflare/index.d.ts +7 -0
- package/dist/types/cloudflare/tracing.d.ts +57 -0
- package/dist/types/component-utils.d.ts +46 -0
- package/dist/types/components/DefaultDocument.d.ts +13 -0
- package/dist/types/context-var.d.ts +84 -0
- package/dist/types/debug.d.ts +57 -0
- package/dist/types/decode-loader-results.d.ts +42 -0
- package/dist/types/default-error-boundary.d.ts +10 -0
- package/dist/types/defer.d.ts +89 -0
- package/dist/types/deps/browser.d.ts +1 -0
- package/dist/types/deps/html-stream-client.d.ts +1 -0
- package/dist/types/deps/html-stream-server.d.ts +1 -0
- package/dist/types/deps/rsc.d.ts +1 -0
- package/dist/types/deps/ssr.d.ts +1 -0
- package/dist/types/dev-discovery-protocol.d.ts +5 -0
- package/dist/types/encode-kv.d.ts +35 -0
- package/dist/types/errors.d.ts +227 -0
- package/dist/types/escape-script.d.ts +44 -0
- package/dist/types/handle.d.ts +93 -0
- package/dist/types/handles/MetaTags.d.ts +17 -0
- package/dist/types/handles/Scripts.d.ts +38 -0
- package/dist/types/handles/breadcrumbs.d.ts +43 -0
- package/dist/types/handles/deferred-resolution.d.ts +53 -0
- package/dist/types/handles/is-thenable.d.ts +10 -0
- package/dist/types/handles/meta.d.ts +43 -0
- package/dist/types/handles/script.d.ts +139 -0
- package/dist/types/host/cookie-handler.d.ts +8 -0
- package/dist/types/host/errors.d.ts +40 -0
- package/dist/types/host/index.d.ts +33 -0
- package/dist/types/host/pattern-matcher.d.ts +30 -0
- package/dist/types/host/router.d.ts +12 -0
- package/dist/types/host/testing.d.ts +41 -0
- package/dist/types/host/types.d.ts +148 -0
- package/dist/types/host/utils.d.ts +20 -0
- package/dist/types/href-client.d.ts +214 -0
- package/dist/types/index.d.ts +113 -0
- package/dist/types/index.rsc.d.ts +52 -0
- package/dist/types/internal-debug.d.ts +1 -0
- package/dist/types/loader-redirect.d.ts +18 -0
- package/dist/types/loader-store.d.ts +193 -0
- package/dist/types/loader.d.ts +18 -0
- package/dist/types/loader.rsc.d.ts +18 -0
- package/dist/types/missing-id-error.d.ts +1 -0
- package/dist/types/outlet-context.d.ts +24 -0
- package/dist/types/outlet-provider.d.ts +14 -0
- package/dist/types/prerender/build-shell-capture.d.ts +104 -0
- package/dist/types/prerender/param-hash.d.ts +6 -0
- package/dist/types/prerender/shell-manifest-key.d.ts +18 -0
- package/dist/types/prerender/store.d.ts +63 -0
- package/dist/types/prerender.d.ts +292 -0
- package/dist/types/redirect-origin.d.ts +67 -0
- package/dist/types/regex-escape.d.ts +6 -0
- package/dist/types/render-error-thrower.d.ts +13 -0
- package/dist/types/response-utils.d.ts +35 -0
- package/dist/types/reverse.d.ts +206 -0
- package/dist/types/root-error-boundary.d.ts +32 -0
- package/dist/types/route-content-wrapper.d.ts +81 -0
- package/dist/types/route-definition/dsl-helpers.d.ts +130 -0
- package/dist/types/route-definition/helper-factories.d.ts +22 -0
- package/dist/types/route-definition/helpers-types.d.ts +393 -0
- package/dist/types/route-definition/index.d.ts +7 -0
- package/dist/types/route-definition/redirect.d.ts +48 -0
- package/dist/types/route-definition/resolve-handler-use.d.ts +19 -0
- package/dist/types/route-definition/use-item-types.d.ts +1 -0
- package/dist/types/route-definition.d.ts +1 -0
- package/dist/types/route-map-builder.d.ts +102 -0
- package/dist/types/route-name.d.ts +27 -0
- package/dist/types/route-types.d.ts +172 -0
- package/dist/types/router/basename.d.ts +10 -0
- package/dist/types/router/content-negotiation.d.ts +91 -0
- package/dist/types/router/debug-manifest.d.ts +7 -0
- package/dist/types/router/error-handling.d.ts +110 -0
- package/dist/types/router/find-match.d.ts +19 -0
- package/dist/types/router/handler-context.d.ts +41 -0
- package/dist/types/router/instrument.d.ts +191 -0
- package/dist/types/router/intercept-resolution.d.ts +91 -0
- package/dist/types/router/lazy-includes.d.ts +26 -0
- package/dist/types/router/loader-resolution.d.ts +85 -0
- package/dist/types/router/logging.d.ts +41 -0
- package/dist/types/router/manifest.d.ts +8 -0
- package/dist/types/router/match-api.d.ts +19 -0
- package/dist/types/router/match-context.d.ts +184 -0
- package/dist/types/router/match-handlers.d.ts +48 -0
- package/dist/types/router/match-middleware/background-revalidation.d.ts +113 -0
- package/dist/types/router/match-middleware/cache-lookup.d.ts +126 -0
- package/dist/types/router/match-middleware/cache-store.d.ts +112 -0
- package/dist/types/router/match-middleware/index.d.ts +80 -0
- package/dist/types/router/match-middleware/intercept-resolution.d.ts +116 -0
- package/dist/types/router/match-middleware/segment-resolution.d.ts +94 -0
- package/dist/types/router/match-pipelines.d.ts +103 -0
- package/dist/types/router/match-result.d.ts +114 -0
- package/dist/types/router/metrics.d.ts +6 -0
- package/dist/types/router/middleware-types.d.ts +74 -0
- package/dist/types/router/middleware.d.ts +116 -0
- package/dist/types/router/navigation-snapshot.d.ts +51 -0
- package/dist/types/router/params-util.d.ts +8 -0
- package/dist/types/router/parse-pattern.d.ts +38 -0
- package/dist/types/router/pattern-matching.d.ts +169 -0
- package/dist/types/router/prefetch-cache-ttl.d.ts +27 -0
- package/dist/types/router/prefetch-default.d.ts +28 -0
- package/dist/types/router/prefetch-limits.d.ts +20 -0
- package/dist/types/router/prerender-match.d.ts +53 -0
- package/dist/types/router/preview-match.d.ts +22 -0
- package/dist/types/router/request-classification.d.ts +104 -0
- package/dist/types/router/revalidation.d.ts +64 -0
- package/dist/types/router/route-snapshot.d.ts +112 -0
- package/dist/types/router/route-trie-builder.d.ts +77 -0
- package/dist/types/router/router-context.d.ts +137 -0
- package/dist/types/router/router-interfaces.d.ts +461 -0
- package/dist/types/router/router-options.d.ts +792 -0
- package/dist/types/router/router-registry.d.ts +15 -0
- package/dist/types/router/segment-resolution/fresh.d.ts +55 -0
- package/dist/types/router/segment-resolution/helpers.d.ts +93 -0
- package/dist/types/router/segment-resolution/loader-cache.d.ts +33 -0
- package/dist/types/router/segment-resolution/loader-mask.d.ts +44 -0
- package/dist/types/router/segment-resolution/loader-snapshot.d.ts +90 -0
- package/dist/types/router/segment-resolution/mask-nested.d.ts +53 -0
- package/dist/types/router/segment-resolution/revalidation.d.ts +85 -0
- package/dist/types/router/segment-resolution/static-store.d.ts +17 -0
- package/dist/types/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
- package/dist/types/router/segment-resolution/view-transition-default.d.ts +27 -0
- package/dist/types/router/segment-resolution.d.ts +3 -0
- package/dist/types/router/segment-wrappers.d.ts +53 -0
- package/dist/types/router/state-cookie-name.d.ts +1 -0
- package/dist/types/router/substitute-pattern-params.d.ts +23 -0
- package/dist/types/router/telemetry-otel.d.ts +113 -0
- package/dist/types/router/telemetry.d.ts +216 -0
- package/dist/types/router/timeout.d.ts +107 -0
- package/dist/types/router/tracing.d.ts +139 -0
- package/dist/types/router/transition-when.d.ts +13 -0
- package/dist/types/router/trie-matching.d.ts +32 -0
- package/dist/types/router/types.d.ts +98 -0
- package/dist/types/router/url-params.d.ts +26 -0
- package/dist/types/router.d.ts +7 -0
- package/dist/types/rsc/capture-queue.d.ts +49 -0
- package/dist/types/rsc/full-payload.d.ts +22 -0
- package/dist/types/rsc/handler-context.d.ts +32 -0
- package/dist/types/rsc/handler.d.ts +9 -0
- package/dist/types/rsc/helpers.d.ts +127 -0
- package/dist/types/rsc/index.d.ts +17 -0
- package/dist/types/rsc/json-route-result.d.ts +20 -0
- package/dist/types/rsc/loader-fetch.d.ts +14 -0
- package/dist/types/rsc/manifest-init.d.ts +18 -0
- package/dist/types/rsc/nonce.d.ts +28 -0
- package/dist/types/rsc/origin-guard.d.ts +50 -0
- package/dist/types/rsc/progressive-enhancement.d.ts +19 -0
- package/dist/types/rsc/redirect-guard.d.ts +37 -0
- package/dist/types/rsc/render-pipeline.d.ts +148 -0
- package/dist/types/rsc/response-cache-serve.d.ts +46 -0
- package/dist/types/rsc/response-error.d.ts +19 -0
- package/dist/types/rsc/response-route-handler.d.ts +29 -0
- package/dist/types/rsc/routine-plan.d.ts +124 -0
- package/dist/types/rsc/rsc-rendering.d.ts +18 -0
- package/dist/types/rsc/runtime-warnings.d.ts +22 -0
- package/dist/types/rsc/server-action.d.ts +68 -0
- package/dist/types/rsc/shell-build-manifest.d.ts +90 -0
- package/dist/types/rsc/shell-capture-constants.d.ts +44 -0
- package/dist/types/rsc/shell-capture.d.ts +406 -0
- package/dist/types/rsc/shell-serve.d.ts +189 -0
- package/dist/types/rsc/ssr-setup.d.ts +73 -0
- package/dist/types/rsc/stream-idle.d.ts +60 -0
- package/dist/types/rsc/transition-gate.d.ts +23 -0
- package/dist/types/rsc/types.d.ts +328 -0
- package/dist/types/runtime-env.d.ts +1 -0
- package/dist/types/search-params.d.ts +125 -0
- package/dist/types/segment-content-promise.d.ts +13 -0
- package/dist/types/segment-fragments.d.ts +79 -0
- package/dist/types/segment-loader-promise.d.ts +22 -0
- package/dist/types/segment-system.d.ts +86 -0
- package/dist/types/serialize.d.ts +164 -0
- package/dist/types/server/context.d.ts +510 -0
- package/dist/types/server/cookie-parse.d.ts +10 -0
- package/dist/types/server/cookie-store.d.ts +107 -0
- package/dist/types/server/fetchable-loader-store.d.ts +20 -0
- package/dist/types/server/handle-store.d.ts +131 -0
- package/dist/types/server/loader-registry.d.ts +32 -0
- package/dist/types/server/request-context.d.ts +707 -0
- package/dist/types/server/root-layout.d.ts +3 -0
- package/dist/types/server.d.ts +16 -0
- package/dist/types/ssr/index.d.ts +233 -0
- package/dist/types/ssr/inject-rsc-eager.d.ts +3 -0
- package/dist/types/ssr/preinit-client-references.d.ts +71 -0
- package/dist/types/ssr/ssr-root.d.ts +69 -0
- package/dist/types/static-handler.d.ts +71 -0
- package/dist/types/testing/cache-status.d.ts +63 -0
- package/dist/types/testing/collect-handle.d.ts +20 -0
- package/dist/types/testing/dispatch.d.ts +127 -0
- package/dist/types/testing/dom.entry.d.ts +15 -0
- package/dist/types/testing/e2e/fixture.d.ts +37 -0
- package/dist/types/testing/e2e/index.d.ts +31 -0
- package/dist/types/testing/e2e/matchers.d.ts +17 -0
- package/dist/types/testing/e2e/page-helpers.d.ts +86 -0
- package/dist/types/testing/e2e/parity.d.ts +111 -0
- package/dist/types/testing/e2e/server.d.ts +35 -0
- package/dist/types/testing/flight-matchers.d.ts +55 -0
- package/dist/types/testing/flight-normalize.d.ts +1 -0
- package/dist/types/testing/flight-tree.d.ts +192 -0
- package/dist/types/testing/flight.d.ts +115 -0
- package/dist/types/testing/flight.entry.d.ts +27 -0
- package/dist/types/testing/generated-routes.d.ts +66 -0
- package/dist/types/testing/index.d.ts +54 -0
- package/dist/types/testing/internal/context.d.ts +225 -0
- package/dist/types/testing/internal/flight-client-globals.d.ts +1 -0
- package/dist/types/testing/internal/seed-vars.d.ts +30 -0
- package/dist/types/testing/render-handler.d.ts +160 -0
- package/dist/types/testing/render-route.d.ts +265 -0
- package/dist/types/testing/run-loader.d.ts +195 -0
- package/dist/types/testing/run-middleware.d.ts +132 -0
- package/dist/types/testing/run-transition-when.d.ts +78 -0
- package/dist/types/testing/shell-status.d.ts +81 -0
- package/dist/types/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
- package/dist/types/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
- package/dist/types/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
- package/dist/types/testing/vitest-stubs/version.d.ts +1 -0
- package/dist/types/testing/vitest.d.ts +205 -0
- package/dist/types/theme/ThemeProvider.d.ts +13 -0
- package/dist/types/theme/ThemeScript.d.ts +45 -0
- package/dist/types/theme/constants.d.ts +39 -0
- package/dist/types/theme/index.d.ts +29 -0
- package/dist/types/theme/theme-context.d.ts +21 -0
- package/dist/types/theme/theme-script.d.ts +26 -0
- package/dist/types/theme/types.d.ts +162 -0
- package/dist/types/theme/use-theme.d.ts +8 -0
- package/dist/types/types/boundaries.d.ts +110 -0
- package/dist/types/types/cache-types.d.ts +191 -0
- package/dist/types/types/error-types.d.ts +114 -0
- package/dist/types/types/global-namespace.d.ts +90 -0
- package/dist/types/types/handler-context.d.ts +658 -0
- package/dist/types/types/index.d.ts +11 -0
- package/dist/types/types/loader-types.d.ts +208 -0
- package/dist/types/types/request-scope.d.ts +93 -0
- package/dist/types/types/route-config.d.ts +105 -0
- package/dist/types/types/route-entry.d.ts +98 -0
- package/dist/types/types/segments.d.ts +246 -0
- package/dist/types/types.d.ts +1 -0
- package/dist/types/urls/include-helper.d.ts +17 -0
- package/dist/types/urls/include-provider.d.ts +27 -0
- package/dist/types/urls/index.d.ts +6 -0
- package/dist/types/urls/path-helper-types.d.ts +198 -0
- package/dist/types/urls/path-helper.d.ts +12 -0
- package/dist/types/urls/pattern-types.d.ts +166 -0
- package/dist/types/urls/response-types.d.ts +67 -0
- package/dist/types/urls/type-extraction.d.ts +157 -0
- package/dist/types/urls/urls-function.d.ts +24 -0
- package/dist/types/urls.d.ts +1 -0
- package/dist/types/use-loader.d.ts +150 -0
- package/dist/types/vercel/index.d.ts +10 -0
- package/dist/types/vercel/tracing.d.ts +71 -0
- package/dist/types/vite/debug.d.ts +80 -0
- package/dist/types/vite/discovery/bundle-postprocess.d.ts +12 -0
- package/dist/types/vite/discovery/client-urls-projection.d.ts +53 -0
- package/dist/types/vite/discovery/dev-prerender-cache.d.ts +65 -0
- package/dist/types/vite/discovery/discover-routers.d.ts +17 -0
- package/dist/types/vite/discovery/discovery-errors.d.ts +113 -0
- package/dist/types/vite/discovery/gate-state.d.ts +79 -0
- package/dist/types/vite/discovery/prerender-collection.d.ts +24 -0
- package/dist/types/vite/discovery/route-types-writer.d.ts +32 -0
- package/dist/types/vite/discovery/self-gen-tracking.d.ts +22 -0
- package/dist/types/vite/discovery/shell-prerender-phase.d.ts +40 -0
- package/dist/types/vite/discovery/state.d.ts +170 -0
- package/dist/types/vite/discovery/virtual-module-codegen.d.ts +15 -0
- package/dist/types/vite/encryption-key.d.ts +2 -0
- package/dist/types/vite/index.d.ts +11 -0
- package/dist/types/vite/inject-client-debug.d.ts +56 -0
- package/dist/types/vite/plugin-types.d.ts +298 -0
- package/dist/types/vite/plugins/cjs-to-esm.d.ts +6 -0
- package/dist/types/vite/plugins/client-ref-dedup.d.ts +40 -0
- package/dist/types/vite/plugins/client-ref-hashing.d.ts +35 -0
- package/dist/types/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
- package/dist/types/vite/plugins/expose-action-id.d.ts +18 -0
- package/dist/types/vite/plugins/expose-id-utils.d.ts +37 -0
- package/dist/types/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
- package/dist/types/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
- package/dist/types/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
- package/dist/types/vite/plugins/expose-ids/router-transform.d.ts +13 -0
- package/dist/types/vite/plugins/expose-ids/types.d.ts +29 -0
- package/dist/types/vite/plugins/expose-internal-ids.d.ts +16 -0
- package/dist/types/vite/plugins/performance-tracks.d.ts +25 -0
- package/dist/types/vite/plugins/refresh-cmd.d.ts +20 -0
- package/dist/types/vite/plugins/server-ref-hashing.d.ts +24 -0
- package/dist/types/vite/plugins/server-reference-pattern.d.ts +1 -0
- package/dist/types/vite/plugins/use-cache-transform.d.ts +20 -0
- package/dist/types/vite/plugins/vercel-output.d.ts +85 -0
- package/dist/types/vite/plugins/version-injector.d.ts +21 -0
- package/dist/types/vite/plugins/version-plugin.d.ts +19 -0
- package/dist/types/vite/plugins/virtual-entries.d.ts +36 -0
- package/dist/types/vite/plugins/virtual-stub-plugin.d.ts +7 -0
- package/dist/types/vite/rango.d.ts +29 -0
- package/dist/types/vite/router-discovery.d.ts +23 -0
- package/dist/types/vite/utils/ast-handler-extract.d.ts +64 -0
- package/dist/types/vite/utils/banner.d.ts +2 -0
- package/dist/types/vite/utils/bundle-analysis.d.ts +28 -0
- package/dist/types/vite/utils/client-chunks.d.ts +55 -0
- package/dist/types/vite/utils/directive-prologue.d.ts +16 -0
- package/dist/types/vite/utils/forward-user-plugins.d.ts +37 -0
- package/dist/types/vite/utils/manifest-utils.d.ts +7 -0
- package/dist/types/vite/utils/package-resolution.d.ts +6 -0
- package/dist/types/vite/utils/prerender-utils.d.ts +32 -0
- package/dist/types/vite/utils/shared-utils.d.ts +67 -0
- package/dist/types.backup/__internal.d.ts +127 -0
- package/dist/types.backup/bin/rango.d.ts +1 -0
- package/dist/types.backup/browser/action-coordinator.d.ts +57 -0
- package/dist/types.backup/browser/action-fence.d.ts +33 -0
- package/dist/types.backup/browser/app-shell.d.ts +34 -0
- package/dist/types.backup/browser/app-version.d.ts +6 -0
- package/dist/types.backup/browser/connection-warmup.d.ts +31 -0
- package/dist/types.backup/browser/cookie-name.d.ts +66 -0
- package/dist/types.backup/browser/event-controller.d.ts +221 -0
- package/dist/types.backup/browser/history-state.d.ts +26 -0
- package/dist/types.backup/browser/index.d.ts +1 -0
- package/dist/types.backup/browser/intercept-utils.d.ts +30 -0
- package/dist/types.backup/browser/invalidate-client-cache.d.ts +17 -0
- package/dist/types.backup/browser/link-interceptor.d.ts +43 -0
- package/dist/types.backup/browser/logging.d.ts +33 -0
- package/dist/types.backup/browser/merge-segment-loaders.d.ts +38 -0
- package/dist/types.backup/browser/navigation-bridge.d.ts +27 -0
- package/dist/types.backup/browser/navigation-client.d.ts +17 -0
- package/dist/types.backup/browser/navigation-store-handle.d.ts +25 -0
- package/dist/types.backup/browser/navigation-store.d.ts +95 -0
- package/dist/types.backup/browser/navigation-transaction.d.ts +75 -0
- package/dist/types.backup/browser/network-error-handler.d.ts +35 -0
- package/dist/types.backup/browser/partial-update.d.ts +61 -0
- package/dist/types.backup/browser/prefetch/cache.d.ts +183 -0
- package/dist/types.backup/browser/prefetch/fetch.d.ts +52 -0
- package/dist/types.backup/browser/prefetch/observer.d.ts +27 -0
- package/dist/types.backup/browser/prefetch/policy.d.ts +13 -0
- package/dist/types.backup/browser/prefetch/queue.d.ts +48 -0
- package/dist/types.backup/browser/prefetch/resource-ready.d.ts +28 -0
- package/dist/types.backup/browser/rango-state.d.ts +52 -0
- package/dist/types.backup/browser/react/Link.d.ts +140 -0
- package/dist/types.backup/browser/react/NavigationProvider.d.ts +88 -0
- package/dist/types.backup/browser/react/ScrollRestoration.d.ts +78 -0
- package/dist/types.backup/browser/react/context.d.ts +54 -0
- package/dist/types.backup/browser/react/filter-segment-order.d.ts +35 -0
- package/dist/types.backup/browser/react/index.d.ts +1 -0
- package/dist/types.backup/browser/react/location-state-shared.d.ts +162 -0
- package/dist/types.backup/browser/react/location-state.d.ts +29 -0
- package/dist/types.backup/browser/react/mount-context.d.ts +23 -0
- package/dist/types.backup/browser/react/nonce-context.d.ts +14 -0
- package/dist/types.backup/browser/react/shallow-equal.d.ts +5 -0
- package/dist/types.backup/browser/react/use-action.d.ts +61 -0
- package/dist/types.backup/browser/react/use-handle.d.ts +21 -0
- package/dist/types.backup/browser/react/use-href.d.ts +32 -0
- package/dist/types.backup/browser/react/use-link-status.d.ts +36 -0
- package/dist/types.backup/browser/react/use-mount.d.ts +24 -0
- package/dist/types.backup/browser/react/use-navigation.d.ts +15 -0
- package/dist/types.backup/browser/react/use-params.d.ts +21 -0
- package/dist/types.backup/browser/react/use-pathname.d.ts +13 -0
- package/dist/types.backup/browser/react/use-reverse.d.ts +40 -0
- package/dist/types.backup/browser/react/use-router.d.ts +23 -0
- package/dist/types.backup/browser/react/use-search-params.d.ts +19 -0
- package/dist/types.backup/browser/react/use-segments.d.ts +29 -0
- package/dist/types.backup/browser/response-adapter.d.ts +58 -0
- package/dist/types.backup/browser/rsc-router.d.ts +141 -0
- package/dist/types.backup/browser/scroll-restoration.d.ts +103 -0
- package/dist/types.backup/browser/segment-reconciler.d.ts +74 -0
- package/dist/types.backup/browser/segment-structure-assert.d.ts +16 -0
- package/dist/types.backup/browser/server-action-bridge.d.ts +29 -0
- package/dist/types.backup/browser/types.d.ts +530 -0
- package/dist/types.backup/browser/validate-redirect-origin.d.ts +28 -0
- package/dist/types.backup/build/collect-fallback-refs.d.ts +5 -0
- package/dist/types.backup/build/generate-manifest.d.ts +100 -0
- package/dist/types.backup/build/generate-route-types.d.ts +8 -0
- package/dist/types.backup/build/index.d.ts +21 -0
- package/dist/types.backup/build/prefix-tree-utils.d.ts +56 -0
- package/dist/types.backup/build/route-trie.d.ts +89 -0
- package/dist/types.backup/build/route-types/ast-helpers.d.ts +3 -0
- package/dist/types.backup/build/route-types/ast-route-extraction.d.ts +13 -0
- package/dist/types.backup/build/route-types/codegen.d.ts +16 -0
- package/dist/types.backup/build/route-types/include-resolution.d.ts +74 -0
- package/dist/types.backup/build/route-types/param-extraction.d.ts +13 -0
- package/dist/types.backup/build/route-types/per-module-writer.d.ts +18 -0
- package/dist/types.backup/build/route-types/router-processing.d.ts +82 -0
- package/dist/types.backup/build/route-types/scan-filter.d.ts +17 -0
- package/dist/types.backup/build/route-types/source-scan.d.ts +13 -0
- package/dist/types.backup/build/runtime-discovery.d.ts +24 -0
- package/dist/types.backup/cache/background-task.d.ts +21 -0
- package/dist/types.backup/cache/cache-error.d.ts +71 -0
- package/dist/types.backup/cache/cache-key-utils.d.ts +35 -0
- package/dist/types.backup/cache/cache-policy.d.ts +59 -0
- package/dist/types.backup/cache/cache-runtime.d.ts +51 -0
- package/dist/types.backup/cache/cache-scope.d.ts +134 -0
- package/dist/types.backup/cache/cache-tag.d.ts +79 -0
- package/dist/types.backup/cache/cf/cf-base64.d.ts +4 -0
- package/dist/types.backup/cache/cf/cf-cache-constants.d.ts +105 -0
- package/dist/types.backup/cache/cf/cf-cache-store.d.ts +481 -0
- package/dist/types.backup/cache/cf/cf-cache-types.d.ts +300 -0
- package/dist/types.backup/cache/cf/cf-kv-utils.d.ts +22 -0
- package/dist/types.backup/cache/cf/cf-tag-marker-memo.d.ts +15 -0
- package/dist/types.backup/cache/cf/index.d.ts +3 -0
- package/dist/types.backup/cache/document-cache.d.ts +69 -0
- package/dist/types.backup/cache/handle-capture.d.ts +23 -0
- package/dist/types.backup/cache/handle-snapshot.d.ts +39 -0
- package/dist/types.backup/cache/index.d.ts +7 -0
- package/dist/types.backup/cache/memory-segment-store.d.ts +163 -0
- package/dist/types.backup/cache/profile-registry.d.ts +40 -0
- package/dist/types.backup/cache/read-through-swr.d.ts +60 -0
- package/dist/types.backup/cache/segment-codec.d.ts +78 -0
- package/dist/types.backup/cache/shell-snapshot.d.ts +162 -0
- package/dist/types.backup/cache/tag-invalidation.d.ts +74 -0
- package/dist/types.backup/cache/taint.d.ts +71 -0
- package/dist/types.backup/cache/types.d.ts +407 -0
- package/dist/types.backup/cache/vercel/index.d.ts +1 -0
- package/dist/types.backup/cache/vercel/vercel-cache-store.d.ts +267 -0
- package/dist/types.backup/client.d.ts +184 -0
- package/dist/types.backup/client.rsc.d.ts +39 -0
- package/dist/types.backup/cloudflare/index.d.ts +7 -0
- package/dist/types.backup/cloudflare/tracing.d.ts +53 -0
- package/dist/types.backup/component-utils.d.ts +46 -0
- package/dist/types.backup/components/DefaultDocument.d.ts +13 -0
- package/dist/types.backup/context-var.d.ts +84 -0
- package/dist/types.backup/debug.d.ts +57 -0
- package/dist/types.backup/decode-loader-results.d.ts +5 -0
- package/dist/types.backup/default-error-boundary.d.ts +10 -0
- package/dist/types.backup/defer.d.ts +89 -0
- package/dist/types.backup/deps/browser.d.ts +1 -0
- package/dist/types.backup/deps/html-stream-client.d.ts +1 -0
- package/dist/types.backup/deps/html-stream-server.d.ts +1 -0
- package/dist/types.backup/deps/rsc.d.ts +1 -0
- package/dist/types.backup/deps/ssr.d.ts +1 -0
- package/dist/types.backup/encode-kv.d.ts +35 -0
- package/dist/types.backup/errors.d.ts +226 -0
- package/dist/types.backup/escape-script.d.ts +44 -0
- package/dist/types.backup/handle.d.ts +93 -0
- package/dist/types.backup/handles/MetaTags.d.ts +17 -0
- package/dist/types.backup/handles/Scripts.d.ts +38 -0
- package/dist/types.backup/handles/breadcrumbs.d.ts +43 -0
- package/dist/types.backup/handles/deferred-resolution.d.ts +53 -0
- package/dist/types.backup/handles/is-thenable.d.ts +12 -0
- package/dist/types.backup/handles/meta.d.ts +43 -0
- package/dist/types.backup/handles/script.d.ts +139 -0
- package/dist/types.backup/host/cookie-handler.d.ts +8 -0
- package/dist/types.backup/host/errors.d.ts +40 -0
- package/dist/types.backup/host/index.d.ts +33 -0
- package/dist/types.backup/host/pattern-matcher.d.ts +30 -0
- package/dist/types.backup/host/router.d.ts +12 -0
- package/dist/types.backup/host/testing.d.ts +41 -0
- package/dist/types.backup/host/types.d.ts +148 -0
- package/dist/types.backup/host/utils.d.ts +20 -0
- package/dist/types.backup/href-client.d.ts +214 -0
- package/dist/types.backup/index.d.ts +112 -0
- package/dist/types.backup/index.rsc.d.ts +51 -0
- package/dist/types.backup/internal-debug.d.ts +1 -0
- package/dist/types.backup/loader-store.d.ts +193 -0
- package/dist/types.backup/loader.d.ts +18 -0
- package/dist/types.backup/loader.rsc.d.ts +18 -0
- package/dist/types.backup/missing-id-error.d.ts +1 -0
- package/dist/types.backup/outlet-context.d.ts +12 -0
- package/dist/types.backup/outlet-provider.d.ts +12 -0
- package/dist/types.backup/prerender/build-shell-capture.d.ts +104 -0
- package/dist/types.backup/prerender/param-hash.d.ts +6 -0
- package/dist/types.backup/prerender/shell-manifest-key.d.ts +18 -0
- package/dist/types.backup/prerender/store.d.ts +62 -0
- package/dist/types.backup/prerender.d.ts +292 -0
- package/dist/types.backup/redirect-origin.d.ts +55 -0
- package/dist/types.backup/regex-escape.d.ts +6 -0
- package/dist/types.backup/render-error-thrower.d.ts +13 -0
- package/dist/types.backup/response-utils.d.ts +35 -0
- package/dist/types.backup/reverse.d.ts +206 -0
- package/dist/types.backup/root-error-boundary.d.ts +32 -0
- package/dist/types.backup/route-content-wrapper.d.ts +40 -0
- package/dist/types.backup/route-definition/dsl-helpers.d.ts +130 -0
- package/dist/types.backup/route-definition/helper-factories.d.ts +22 -0
- package/dist/types.backup/route-definition/helpers-types.d.ts +392 -0
- package/dist/types.backup/route-definition/index.d.ts +7 -0
- package/dist/types.backup/route-definition/redirect.d.ts +48 -0
- package/dist/types.backup/route-definition/resolve-handler-use.d.ts +19 -0
- package/dist/types.backup/route-definition/use-item-types.d.ts +1 -0
- package/dist/types.backup/route-definition.d.ts +1 -0
- package/dist/types.backup/route-map-builder.d.ts +127 -0
- package/dist/types.backup/route-name.d.ts +27 -0
- package/dist/types.backup/route-types.d.ts +172 -0
- package/dist/types.backup/router/basename.d.ts +10 -0
- package/dist/types.backup/router/content-negotiation.d.ts +91 -0
- package/dist/types.backup/router/debug-manifest.d.ts +7 -0
- package/dist/types.backup/router/error-handling.d.ts +76 -0
- package/dist/types.backup/router/find-match.d.ts +19 -0
- package/dist/types.backup/router/handler-context.d.ts +41 -0
- package/dist/types.backup/router/instrument.d.ts +161 -0
- package/dist/types.backup/router/intercept-resolution.d.ts +79 -0
- package/dist/types.backup/router/lazy-includes.d.ts +26 -0
- package/dist/types.backup/router/loader-resolution.d.ts +63 -0
- package/dist/types.backup/router/logging.d.ts +41 -0
- package/dist/types.backup/router/manifest.d.ts +8 -0
- package/dist/types.backup/router/match-api.d.ts +19 -0
- package/dist/types.backup/router/match-context.d.ts +184 -0
- package/dist/types.backup/router/match-handlers.d.ts +49 -0
- package/dist/types.backup/router/match-middleware/background-revalidation.d.ts +113 -0
- package/dist/types.backup/router/match-middleware/cache-lookup.d.ts +113 -0
- package/dist/types.backup/router/match-middleware/cache-store.d.ts +112 -0
- package/dist/types.backup/router/match-middleware/index.d.ts +80 -0
- package/dist/types.backup/router/match-middleware/intercept-resolution.d.ts +116 -0
- package/dist/types.backup/router/match-middleware/segment-resolution.d.ts +94 -0
- package/dist/types.backup/router/match-pipelines.d.ts +103 -0
- package/dist/types.backup/router/match-result.d.ts +114 -0
- package/dist/types.backup/router/metrics.d.ts +6 -0
- package/dist/types.backup/router/middleware-types.d.ts +74 -0
- package/dist/types.backup/router/middleware.d.ts +116 -0
- package/dist/types.backup/router/navigation-snapshot.d.ts +22 -0
- package/dist/types.backup/router/params-util.d.ts +8 -0
- package/dist/types.backup/router/parse-pattern.d.ts +38 -0
- package/dist/types.backup/router/pattern-matching.d.ts +169 -0
- package/dist/types.backup/router/prefetch-cache-ttl.d.ts +27 -0
- package/dist/types.backup/router/prefetch-limits.d.ts +20 -0
- package/dist/types.backup/router/prerender-match.d.ts +50 -0
- package/dist/types.backup/router/preview-match.d.ts +22 -0
- package/dist/types.backup/router/request-classification.d.ts +104 -0
- package/dist/types.backup/router/revalidation.d.ts +57 -0
- package/dist/types.backup/router/route-snapshot.d.ts +112 -0
- package/dist/types.backup/router/router-context.d.ts +137 -0
- package/dist/types.backup/router/router-interfaces.d.ts +432 -0
- package/dist/types.backup/router/router-options.d.ts +738 -0
- package/dist/types.backup/router/router-registry.d.ts +15 -0
- package/dist/types.backup/router/segment-resolution/fresh.d.ts +55 -0
- package/dist/types.backup/router/segment-resolution/helpers.d.ts +93 -0
- package/dist/types.backup/router/segment-resolution/loader-cache.d.ts +33 -0
- package/dist/types.backup/router/segment-resolution/loader-mask.d.ts +44 -0
- package/dist/types.backup/router/segment-resolution/loader-snapshot.d.ts +90 -0
- package/dist/types.backup/router/segment-resolution/mask-nested.d.ts +53 -0
- package/dist/types.backup/router/segment-resolution/revalidation.d.ts +85 -0
- package/dist/types.backup/router/segment-resolution/static-store.d.ts +17 -0
- package/dist/types.backup/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
- package/dist/types.backup/router/segment-resolution/view-transition-default.d.ts +28 -0
- package/dist/types.backup/router/segment-resolution.d.ts +3 -0
- package/dist/types.backup/router/segment-wrappers.d.ts +53 -0
- package/dist/types.backup/router/state-cookie-name.d.ts +1 -0
- package/dist/types.backup/router/substitute-pattern-params.d.ts +23 -0
- package/dist/types.backup/router/telemetry-otel.d.ts +113 -0
- package/dist/types.backup/router/telemetry.d.ts +215 -0
- package/dist/types.backup/router/timeout.d.ts +68 -0
- package/dist/types.backup/router/tracing.d.ts +125 -0
- package/dist/types.backup/router/trie-matching.d.ts +32 -0
- package/dist/types.backup/router/types.d.ts +98 -0
- package/dist/types.backup/router/url-params.d.ts +26 -0
- package/dist/types.backup/router.d.ts +7 -0
- package/dist/types.backup/rsc/capture-queue.d.ts +6 -0
- package/dist/types.backup/rsc/full-payload.d.ts +22 -0
- package/dist/types.backup/rsc/handler-context.d.ts +31 -0
- package/dist/types.backup/rsc/handler.d.ts +9 -0
- package/dist/types.backup/rsc/helpers.d.ts +213 -0
- package/dist/types.backup/rsc/index.d.ts +17 -0
- package/dist/types.backup/rsc/json-route-result.d.ts +20 -0
- package/dist/types.backup/rsc/loader-fetch.d.ts +14 -0
- package/dist/types.backup/rsc/manifest-init.d.ts +18 -0
- package/dist/types.backup/rsc/nonce.d.ts +28 -0
- package/dist/types.backup/rsc/origin-guard.d.ts +50 -0
- package/dist/types.backup/rsc/progressive-enhancement.d.ts +19 -0
- package/dist/types.backup/rsc/redirect-guard.d.ts +35 -0
- package/dist/types.backup/rsc/response-cache-serve.d.ts +46 -0
- package/dist/types.backup/rsc/response-error.d.ts +19 -0
- package/dist/types.backup/rsc/response-route-handler.d.ts +29 -0
- package/dist/types.backup/rsc/rsc-rendering.d.ts +23 -0
- package/dist/types.backup/rsc/runtime-warnings.d.ts +22 -0
- package/dist/types.backup/rsc/server-action.d.ts +68 -0
- package/dist/types.backup/rsc/shell-build-manifest.d.ts +84 -0
- package/dist/types.backup/rsc/shell-capture-constants.d.ts +27 -0
- package/dist/types.backup/rsc/shell-capture.d.ts +374 -0
- package/dist/types.backup/rsc/shell-serve.d.ts +136 -0
- package/dist/types.backup/rsc/ssr-setup.d.ts +48 -0
- package/dist/types.backup/rsc/transition-gate.d.ts +27 -0
- package/dist/types.backup/rsc/types.d.ts +290 -0
- package/dist/types.backup/runtime-env.d.ts +1 -0
- package/dist/types.backup/search-params.d.ts +125 -0
- package/dist/types.backup/segment-content-promise.d.ts +13 -0
- package/dist/types.backup/segment-fragments.d.ts +56 -0
- package/dist/types.backup/segment-loader-promise.d.ts +22 -0
- package/dist/types.backup/segment-system.d.ts +84 -0
- package/dist/types.backup/serialize.d.ts +164 -0
- package/dist/types.backup/server/context.d.ts +494 -0
- package/dist/types.backup/server/cookie-parse.d.ts +10 -0
- package/dist/types.backup/server/cookie-store.d.ts +107 -0
- package/dist/types.backup/server/fetchable-loader-store.d.ts +20 -0
- package/dist/types.backup/server/handle-store.d.ts +100 -0
- package/dist/types.backup/server/loader-registry.d.ts +32 -0
- package/dist/types.backup/server/request-context.d.ts +596 -0
- package/dist/types.backup/server/root-layout.d.ts +3 -0
- package/dist/types.backup/server.d.ts +15 -0
- package/dist/types.backup/ssr/index.d.ts +233 -0
- package/dist/types.backup/ssr/inject-rsc-eager.d.ts +3 -0
- package/dist/types.backup/ssr/preinit-client-references.d.ts +71 -0
- package/dist/types.backup/ssr/ssr-root.d.ts +69 -0
- package/dist/types.backup/static-handler.d.ts +57 -0
- package/dist/types.backup/testing/cache-status.d.ts +63 -0
- package/dist/types.backup/testing/collect-handle.d.ts +20 -0
- package/dist/types.backup/testing/dispatch.d.ts +123 -0
- package/dist/types.backup/testing/dom.entry.d.ts +15 -0
- package/dist/types.backup/testing/e2e/fixture.d.ts +37 -0
- package/dist/types.backup/testing/e2e/index.d.ts +30 -0
- package/dist/types.backup/testing/e2e/matchers.d.ts +17 -0
- package/dist/types.backup/testing/e2e/page-helpers.d.ts +62 -0
- package/dist/types.backup/testing/e2e/parity.d.ts +111 -0
- package/dist/types.backup/testing/e2e/server.d.ts +35 -0
- package/dist/types.backup/testing/flight-matchers.d.ts +55 -0
- package/dist/types.backup/testing/flight-normalize.d.ts +1 -0
- package/dist/types.backup/testing/flight-tree.d.ts +192 -0
- package/dist/types.backup/testing/flight.d.ts +115 -0
- package/dist/types.backup/testing/flight.entry.d.ts +27 -0
- package/dist/types.backup/testing/generated-routes.d.ts +66 -0
- package/dist/types.backup/testing/index.d.ts +52 -0
- package/dist/types.backup/testing/internal/context.d.ts +225 -0
- package/dist/types.backup/testing/internal/flight-client-globals.d.ts +1 -0
- package/dist/types.backup/testing/internal/seed-vars.d.ts +30 -0
- package/dist/types.backup/testing/render-handler.d.ts +160 -0
- package/dist/types.backup/testing/render-route.d.ts +246 -0
- package/dist/types.backup/testing/run-loader.d.ts +186 -0
- package/dist/types.backup/testing/run-middleware.d.ts +132 -0
- package/dist/types.backup/testing/run-transition-when.d.ts +77 -0
- package/dist/types.backup/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
- package/dist/types.backup/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
- package/dist/types.backup/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
- package/dist/types.backup/testing/vitest-stubs/version.d.ts +1 -0
- package/dist/types.backup/testing/vitest.d.ts +205 -0
- package/dist/types.backup/theme/ThemeProvider.d.ts +13 -0
- package/dist/types.backup/theme/ThemeScript.d.ts +45 -0
- package/dist/types.backup/theme/constants.d.ts +39 -0
- package/dist/types.backup/theme/index.d.ts +29 -0
- package/dist/types.backup/theme/theme-context.d.ts +21 -0
- package/dist/types.backup/theme/theme-script.d.ts +26 -0
- package/dist/types.backup/theme/types.d.ts +162 -0
- package/dist/types.backup/theme/use-theme.d.ts +8 -0
- package/dist/types.backup/types/boundaries.d.ts +93 -0
- package/dist/types.backup/types/cache-types.d.ts +191 -0
- package/dist/types.backup/types/error-types.d.ts +114 -0
- package/dist/types.backup/types/global-namespace.d.ts +90 -0
- package/dist/types.backup/types/handler-context.d.ts +658 -0
- package/dist/types.backup/types/index.d.ts +11 -0
- package/dist/types.backup/types/loader-types.d.ts +182 -0
- package/dist/types.backup/types/request-scope.d.ts +93 -0
- package/dist/types.backup/types/route-config.d.ts +105 -0
- package/dist/types.backup/types/route-entry.d.ts +95 -0
- package/dist/types.backup/types/segments.d.ts +234 -0
- package/dist/types.backup/types.d.ts +1 -0
- package/dist/types.backup/urls/include-helper.d.ts +17 -0
- package/dist/types.backup/urls/include-provider.d.ts +27 -0
- package/dist/types.backup/urls/index.d.ts +6 -0
- package/dist/types.backup/urls/path-helper-types.d.ts +197 -0
- package/dist/types.backup/urls/path-helper.d.ts +12 -0
- package/dist/types.backup/urls/pattern-types.d.ts +166 -0
- package/dist/types.backup/urls/response-types.d.ts +67 -0
- package/dist/types.backup/urls/type-extraction.d.ts +157 -0
- package/dist/types.backup/urls/urls-function.d.ts +24 -0
- package/dist/types.backup/urls.d.ts +1 -0
- package/dist/types.backup/use-loader.d.ts +150 -0
- package/dist/types.backup/vercel/index.d.ts +10 -0
- package/dist/types.backup/vercel/tracing.d.ts +70 -0
- package/dist/types.backup/vite/debug.d.ts +80 -0
- package/dist/types.backup/vite/discovery/bundle-postprocess.d.ts +12 -0
- package/dist/types.backup/vite/discovery/dev-prerender-cache.d.ts +65 -0
- package/dist/types.backup/vite/discovery/discover-routers.d.ts +17 -0
- package/dist/types.backup/vite/discovery/discovery-errors.d.ts +113 -0
- package/dist/types.backup/vite/discovery/gate-state.d.ts +79 -0
- package/dist/types.backup/vite/discovery/prerender-collection.d.ts +24 -0
- package/dist/types.backup/vite/discovery/route-types-writer.d.ts +32 -0
- package/dist/types.backup/vite/discovery/self-gen-tracking.d.ts +22 -0
- package/dist/types.backup/vite/discovery/shell-prerender-phase.d.ts +40 -0
- package/dist/types.backup/vite/discovery/state.d.ts +162 -0
- package/dist/types.backup/vite/discovery/virtual-module-codegen.d.ts +15 -0
- package/dist/types.backup/vite/index.d.ts +11 -0
- package/dist/types.backup/vite/inject-client-debug.d.ts +56 -0
- package/dist/types.backup/vite/plugin-types.d.ts +298 -0
- package/dist/types.backup/vite/plugins/cjs-to-esm.d.ts +6 -0
- package/dist/types.backup/vite/plugins/client-ref-dedup.d.ts +40 -0
- package/dist/types.backup/vite/plugins/client-ref-hashing.d.ts +35 -0
- package/dist/types.backup/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
- package/dist/types.backup/vite/plugins/expose-action-id.d.ts +18 -0
- package/dist/types.backup/vite/plugins/expose-id-utils.d.ts +37 -0
- package/dist/types.backup/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
- package/dist/types.backup/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
- package/dist/types.backup/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
- package/dist/types.backup/vite/plugins/expose-ids/router-transform.d.ts +13 -0
- package/dist/types.backup/vite/plugins/expose-ids/types.d.ts +29 -0
- package/dist/types.backup/vite/plugins/expose-internal-ids.d.ts +6 -0
- package/dist/types.backup/vite/plugins/performance-tracks.d.ts +25 -0
- package/dist/types.backup/vite/plugins/refresh-cmd.d.ts +20 -0
- package/dist/types.backup/vite/plugins/use-cache-transform.d.ts +20 -0
- package/dist/types.backup/vite/plugins/vercel-output.d.ts +85 -0
- package/dist/types.backup/vite/plugins/version-injector.d.ts +21 -0
- package/dist/types.backup/vite/plugins/version-plugin.d.ts +19 -0
- package/dist/types.backup/vite/plugins/virtual-entries.d.ts +36 -0
- package/dist/types.backup/vite/plugins/virtual-stub-plugin.d.ts +7 -0
- package/dist/types.backup/vite/rango.d.ts +29 -0
- package/dist/types.backup/vite/router-discovery.d.ts +23 -0
- package/dist/types.backup/vite/utils/ast-handler-extract.d.ts +64 -0
- package/dist/types.backup/vite/utils/banner.d.ts +2 -0
- package/dist/types.backup/vite/utils/bundle-analysis.d.ts +28 -0
- package/dist/types.backup/vite/utils/client-chunks.d.ts +55 -0
- package/dist/types.backup/vite/utils/directive-prologue.d.ts +16 -0
- package/dist/types.backup/vite/utils/forward-user-plugins.d.ts +37 -0
- package/dist/types.backup/vite/utils/manifest-utils.d.ts +7 -0
- package/dist/types.backup/vite/utils/package-resolution.d.ts +6 -0
- package/dist/types.backup/vite/utils/prerender-utils.d.ts +32 -0
- package/dist/types.backup/vite/utils/shared-utils.d.ts +55 -0
- package/dist/vite/index.js +10628 -3742
- package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/package.json +120 -38
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +85 -6
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +255 -25
- package/skills/caching/SKILL.md +377 -13
- package/skills/catalog.json +283 -0
- package/skills/cloudflare/SKILL.md +151 -0
- package/skills/cloudflare/agents/openai.yaml +4 -0
- package/skills/cloudflare/references/d1-and-local-dev.md +131 -0
- package/skills/cloudflare/references/streaming-and-deploy.md +107 -0
- package/skills/cloudflare/references/webhooks-and-crypto.md +147 -0
- package/skills/comparison/SKILL.md +50 -0
- package/skills/comparison/agents/openai.yaml +4 -0
- package/skills/comparison/references/framework-comparison.md +844 -0
- package/skills/composability/SKILL.md +124 -4
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +5 -11
- package/skills/defer-hydration/SKILL.md +235 -0
- package/skills/deployment-caching/SKILL.md +176 -0
- package/skills/document-cache/SKILL.md +116 -58
- package/skills/fonts/SKILL.md +1 -1
- package/skills/handler-use/SKILL.md +364 -0
- package/skills/hooks/SKILL.md +73 -691
- package/skills/hooks/data.md +273 -0
- package/skills/hooks/handle-and-actions.md +103 -0
- package/skills/hooks/navigation.md +110 -0
- package/skills/hooks/outlets.md +62 -0
- package/skills/hooks/state.md +228 -0
- package/skills/hooks/urls.md +135 -0
- package/skills/host-router/SKILL.md +129 -27
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +94 -18
- package/skills/layout/SKILL.md +62 -19
- package/skills/links/SKILL.md +285 -17
- package/skills/loader/SKILL.md +302 -54
- package/skills/middleware/SKILL.md +92 -16
- package/skills/migrate-nextjs/SKILL.md +794 -0
- package/skills/migrate-nextjs/backend-host-swap.md +120 -0
- package/skills/migrate-react-router/SKILL.md +153 -0
- package/skills/migrate-react-router/component-migration.md +196 -0
- package/skills/migrate-react-router/data-and-actions.md +225 -0
- package/skills/migrate-react-router/route-mapping.md +271 -0
- package/skills/mime-routes/SKILL.md +55 -18
- package/skills/observability/SKILL.md +231 -0
- package/skills/parallel/SKILL.md +176 -10
- package/skills/ppr/SKILL.md +904 -0
- package/skills/prerender/SKILL.md +236 -132
- package/skills/rango/SKILL.md +321 -24
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +180 -52
- package/skills/route/SKILL.md +178 -9
- package/skills/router-setup/SKILL.md +140 -11
- package/skills/scripts/SKILL.md +179 -0
- package/skills/server-actions/SKILL.md +776 -0
- package/skills/shell-manifest/SKILL.md +185 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/tailwind/SKILL.md +28 -4
- package/skills/testing/SKILL.md +131 -0
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +172 -0
- package/skills/testing/client-components.md +131 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +131 -0
- package/skills/testing/loader.md +128 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +122 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +85 -0
- package/skills/testing/server-actions.md +107 -0
- package/skills/testing/server-tree.md +128 -0
- package/skills/testing/setup.md +123 -0
- package/skills/theme/SKILL.md +1 -1
- package/skills/typesafety/SKILL.md +45 -616
- package/skills/typesafety/env-and-bindings.md +254 -0
- package/skills/typesafety/generated-files-and-cli.md +342 -0
- package/skills/typesafety/params-and-search.md +153 -0
- package/skills/typesafety/route-types.md +213 -0
- package/skills/use-cache/SKILL.md +121 -15
- package/skills/vercel/SKILL.md +149 -0
- package/skills/view-transitions/SKILL.md +341 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +1 -66
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +39 -0
- package/src/browser/app-version.ts +14 -0
- package/src/browser/connection-warmup.ts +134 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/dev-discovery.ts +66 -0
- package/src/browser/event-controller.ts +400 -168
- package/src/browser/history-state.ts +21 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/invalidate-client-cache.ts +52 -0
- package/src/browser/link-interceptor.ts +469 -20
- package/src/browser/logging.ts +28 -0
- package/src/browser/merge-segment-loaders.ts +6 -4
- package/src/browser/navigation-bridge.ts +207 -31
- package/src/browser/navigation-client.ts +275 -97
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +208 -329
- package/src/browser/navigation-transaction.ts +9 -59
- package/src/browser/network-error-handler.ts +34 -7
- package/src/browser/notify-listeners.ts +22 -0
- package/src/browser/partial-update.ts +241 -121
- package/src/browser/prefetch/cache.ts +329 -78
- package/src/browser/prefetch/default-strategy.ts +74 -0
- package/src/browser/prefetch/fetch.ts +444 -40
- package/src/browser/prefetch/invalidation.ts +30 -0
- package/src/browser/prefetch/loader.ts +111 -0
- package/src/browser/prefetch/observer.ts +50 -22
- package/src/browser/prefetch/queue.ts +113 -32
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/prefetch/runtime.ts +6 -0
- package/src/browser/rango-state.ts +178 -75
- package/src/browser/react/Link.tsx +179 -75
- package/src/browser/react/NavigationProvider.tsx +222 -123
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/context.ts +11 -2
- package/src/browser/react/filter-segment-order.ts +66 -7
- package/src/browser/react/index.ts +0 -48
- package/src/browser/react/location-state-shared.ts +178 -8
- package/src/browser/react/location-state.ts +39 -14
- package/src/browser/react/use-action.ts +6 -15
- package/src/browser/react/use-handle.ts +23 -69
- package/src/browser/react/use-href.tsx +8 -1
- package/src/browser/react/use-link-status.ts +33 -8
- package/src/browser/react/use-navigation.ts +32 -7
- package/src/browser/react/use-params.ts +20 -10
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +47 -12
- package/src/browser/react/use-search-params.ts +0 -5
- package/src/browser/react/use-segments.ts +11 -21
- package/src/browser/response-adapter.ts +99 -8
- package/src/browser/rsc-router.tsx +271 -32
- package/src/browser/scroll-restoration.ts +44 -27
- package/src/browser/segment-reconciler.ts +44 -12
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +270 -71
- package/src/browser/types.ts +157 -37
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +217 -188
- package/src/build/generate-route-types.ts +6 -1
- package/src/build/index.ts +11 -3
- package/src/build/merge-full-manifests.ts +161 -0
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +43 -254
- package/src/build/route-types/ast-route-extraction.ts +15 -8
- package/src/build/route-types/codegen.ts +16 -5
- package/src/build/route-types/include-resolution.ts +521 -65
- package/src/build/route-types/param-extraction.ts +6 -3
- package/src/build/route-types/per-module-writer.ts +33 -12
- package/src/build/route-types/router-processing.ts +408 -161
- package/src/build/route-types/scan-filter.ts +9 -2
- package/src/build/route-types/source-scan.ts +216 -0
- package/src/build/runtime-discovery.ts +32 -29
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-exec-scope.ts +47 -0
- package/src/cache/cache-key-utils.ts +73 -15
- package/src/cache/cache-policy.ts +108 -34
- package/src/cache/cache-runtime.ts +566 -117
- package/src/cache/cache-scope.ts +429 -110
- package/src/cache/cache-tag.ts +149 -0
- package/src/cache/cf/cf-base64.ts +33 -0
- package/src/cache/cf/cf-cache-constants.ts +134 -0
- package/src/cache/cf/cf-cache-store.ts +3027 -392
- package/src/cache/cf/cf-cache-types.ts +417 -0
- package/src/cache/cf/cf-kv-utils.ts +84 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +108 -0
- package/src/cache/cf/cf-zone-purge.ts +101 -0
- package/src/cache/cf/index.ts +11 -16
- package/src/cache/document-cache.ts +184 -53
- package/src/cache/handle-snapshot.ts +92 -1
- package/src/cache/index.ts +32 -20
- package/src/cache/memory-segment-store.ts +286 -37
- package/src/cache/profile-registry.ts +46 -31
- package/src/cache/read-through-swr.ts +66 -16
- package/src/cache/search-params-filter.ts +118 -0
- package/src/cache/segment-codec.ts +80 -25
- package/src/cache/shell-snapshot.ts +516 -0
- package/src/cache/tag-invalidation.ts +230 -0
- package/src/cache/taint.ts +83 -9
- package/src/cache/types.ts +323 -100
- package/src/cache/vercel/index.ts +11 -0
- package/src/cache/vercel/vercel-cache-store.ts +1264 -0
- package/src/client-urls/client-root.tsx +161 -0
- package/src/client-urls/client-urls.ts +665 -0
- package/src/client-urls/navigation.ts +237 -0
- package/src/client-urls/revalidation-protocol.ts +56 -0
- package/src/client-urls/server-projection.ts +563 -0
- package/src/client-urls/types.ts +178 -0
- package/src/client.rsc.tsx +48 -21
- package/src/client.tsx +158 -294
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +112 -0
- package/src/component-utils.ts +19 -0
- package/src/components/DefaultDocument.tsx +8 -2
- package/src/context-var.ts +84 -2
- package/src/decode-loader-results.ts +160 -0
- package/src/defer.ts +185 -0
- package/src/deps/ssr.ts +4 -2
- package/src/dev-discovery-protocol.ts +11 -0
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +44 -4
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +104 -34
- package/src/handles/MetaTags.tsx +24 -53
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +35 -8
- package/src/handles/deferred-resolution.ts +134 -0
- package/src/handles/is-thenable.ts +16 -0
- package/src/handles/meta.ts +14 -40
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +9 -60
- package/src/host/errors.ts +13 -22
- package/src/host/index.ts +9 -2
- package/src/host/pattern-matcher.ts +23 -52
- package/src/host/router.ts +107 -99
- package/src/host/testing.ts +40 -27
- package/src/host/types.ts +37 -4
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +137 -22
- package/src/index.rsc.ts +111 -13
- package/src/index.ts +150 -19
- package/src/internal-debug.ts +11 -10
- package/src/loader-redirect.tsx +47 -0
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +20 -13
- package/src/loader.ts +12 -11
- package/src/missing-id-error.ts +68 -0
- package/src/outlet-context.ts +13 -1
- package/src/outlet-provider.tsx +16 -6
- package/src/prerender/build-shell-capture.ts +453 -0
- package/src/prerender/param-hash.ts +16 -16
- package/src/prerender/shell-manifest-key.ts +20 -0
- package/src/prerender/store.ts +52 -42
- package/src/prerender.ts +215 -86
- package/src/redirect-origin.ts +143 -0
- package/src/regex-escape.ts +8 -0
- package/src/render-error-thrower.tsx +20 -0
- package/src/response-utils.ts +62 -0
- package/src/reverse.ts +65 -15
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +112 -78
- package/src/route-definition/dsl-helpers.ts +468 -306
- package/src/route-definition/helper-factories.ts +28 -140
- package/src/route-definition/helpers-types.ts +156 -78
- package/src/route-definition/index.ts +4 -2
- package/src/route-definition/redirect.ts +51 -10
- package/src/route-definition/resolve-handler-use.ts +160 -0
- package/src/route-definition/use-item-types.ts +29 -0
- package/src/route-map-builder.ts +102 -74
- package/src/route-types.ts +37 -46
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +211 -22
- package/src/router/error-handling.ts +110 -29
- package/src/router/find-match.ts +129 -30
- package/src/router/handler-context.ts +105 -45
- package/src/router/instrument.ts +401 -0
- package/src/router/intercept-resolution.ts +106 -24
- package/src/router/lazy-includes.ts +86 -62
- package/src/router/loader-resolution.ts +511 -57
- package/src/router/logging.ts +0 -6
- package/src/router/manifest.ts +96 -53
- package/src/router/match-api.ts +190 -219
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +268 -171
- package/src/router/match-middleware/background-revalidation.ts +48 -21
- package/src/router/match-middleware/cache-lookup.ts +332 -291
- package/src/router/match-middleware/cache-store.ts +144 -45
- package/src/router/match-middleware/intercept-resolution.ts +0 -22
- package/src/router/match-middleware/segment-resolution.ts +45 -14
- package/src/router/match-pipelines.ts +1 -42
- package/src/router/match-result.ts +124 -43
- package/src/router/metrics.ts +17 -36
- package/src/router/middleware-types.ts +26 -138
- package/src/router/middleware.ts +304 -177
- package/src/router/navigation-snapshot.ts +173 -0
- package/src/router/params-util.ts +23 -0
- package/src/router/parse-pattern.ts +115 -0
- package/src/router/pattern-matching.ts +181 -150
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prefetch-default.ts +59 -0
- package/src/router/prefetch-limits.ts +37 -0
- package/src/router/prerender-match.ts +250 -60
- package/src/router/preview-match.ts +35 -103
- package/src/router/request-classification.ts +291 -0
- package/src/router/revalidation.ts +146 -83
- package/src/router/route-snapshot.ts +256 -0
- package/src/router/route-trie-builder.ts +334 -0
- package/src/router/router-context.ts +6 -28
- package/src/router/router-interfaces.ts +199 -37
- package/src/router/router-options.ts +271 -21
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +235 -89
- package/src/router/segment-resolution/helpers.ts +116 -33
- package/src/router/segment-resolution/loader-cache.ts +187 -39
- package/src/router/segment-resolution/loader-mask.ts +60 -0
- package/src/router/segment-resolution/loader-snapshot.ts +259 -0
- package/src/router/segment-resolution/mask-nested.ts +99 -0
- package/src/router/segment-resolution/revalidation.ts +401 -321
- package/src/router/segment-resolution/static-store.ts +55 -15
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution/view-transition-default.ts +60 -0
- package/src/router/segment-resolution.ts +5 -1
- package/src/router/segment-wrappers.ts +6 -5
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/substitute-pattern-params.ts +75 -0
- package/src/router/telemetry-otel.ts +171 -200
- package/src/router/telemetry.ts +106 -20
- package/src/router/timeout.ts +53 -22
- package/src/router/tracing.ts +235 -0
- package/src/router/transition-when.ts +76 -0
- package/src/router/trie-matching.ts +171 -59
- package/src/router/types.ts +10 -63
- package/src/router/url-params.ts +57 -0
- package/src/router.ts +296 -77
- package/src/rsc/capture-queue.ts +218 -0
- package/src/rsc/full-payload.ts +77 -0
- package/src/rsc/handler-context.ts +4 -2
- package/src/rsc/handler.ts +901 -519
- package/src/rsc/helpers.ts +245 -47
- package/src/rsc/index.ts +2 -5
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +129 -33
- package/src/rsc/manifest-init.ts +55 -52
- package/src/rsc/nonce.ts +10 -1
- package/src/rsc/origin-guard.ts +39 -25
- package/src/rsc/progressive-enhancement.ts +381 -74
- package/src/rsc/redirect-guard.ts +102 -0
- package/src/rsc/render-pipeline.ts +611 -0
- package/src/rsc/response-cache-serve.ts +259 -0
- package/src/rsc/response-error.ts +79 -12
- package/src/rsc/response-route-handler.ts +80 -206
- package/src/rsc/routine-plan.ts +359 -0
- package/src/rsc/rsc-rendering.ts +1625 -156
- package/src/rsc/runtime-warnings.ts +23 -10
- package/src/rsc/server-action.ts +424 -133
- package/src/rsc/shell-build-manifest.ts +336 -0
- package/src/rsc/shell-capture-constants.ts +45 -0
- package/src/rsc/shell-capture.ts +2063 -0
- package/src/rsc/shell-serve.ts +337 -0
- package/src/rsc/ssr-setup.ts +113 -18
- package/src/rsc/stream-idle.ts +137 -0
- package/src/rsc/transition-gate.ts +86 -0
- package/src/rsc/types.ts +100 -6
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +35 -30
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-fragments.ts +165 -0
- package/src/segment-loader-promise.ts +167 -0
- package/src/segment-system.tsx +446 -208
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +484 -51
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +162 -15
- package/src/server/handle-store.ts +209 -70
- package/src/server/loader-registry.ts +38 -46
- package/src/server/request-context.ts +940 -184
- package/src/server.ts +7 -2
- package/src/ssr/index.tsx +631 -180
- package/src/ssr/inject-rsc-eager.ts +167 -0
- package/src/ssr/preinit-client-references.ts +106 -0
- package/src/ssr/ssr-root.tsx +262 -0
- package/src/static-handler.ts +45 -20
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +46 -0
- package/src/testing/dispatch.ts +951 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +147 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +319 -0
- package/src/testing/e2e/parity.ts +400 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +257 -0
- package/src/testing/generated-routes.ts +199 -0
- package/src/testing/index.ts +121 -0
- package/src/testing/internal/context.ts +380 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +371 -0
- package/src/testing/render-route.tsx +667 -0
- package/src/testing/run-loader.ts +423 -0
- package/src/testing/run-middleware.ts +219 -0
- package/src/testing/run-transition-when.ts +197 -0
- package/src/testing/shell-status.ts +206 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +305 -0
- package/src/theme/ThemeProvider.tsx +56 -84
- package/src/theme/ThemeScript.tsx +7 -9
- package/src/theme/constants.ts +52 -13
- package/src/theme/index.ts +0 -7
- package/src/theme/theme-context.ts +1 -5
- package/src/theme/theme-script.ts +22 -21
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +15 -35
- package/src/types/cache-types.ts +17 -8
- package/src/types/error-types.ts +30 -90
- package/src/types/global-namespace.ts +54 -41
- package/src/types/handler-context.ts +155 -78
- package/src/types/index.ts +3 -10
- package/src/types/loader-types.ts +72 -15
- package/src/types/request-scope.ts +112 -0
- package/src/types/route-config.ts +20 -52
- package/src/types/route-entry.ts +15 -7
- package/src/types/segments.ts +148 -15
- package/src/urls/include-helper.ts +59 -75
- package/src/urls/include-provider.ts +71 -0
- package/src/urls/index.ts +2 -11
- package/src/urls/path-helper-types.ts +110 -25
- package/src/urls/path-helper.ts +70 -115
- package/src/urls/pattern-types.ts +113 -19
- package/src/urls/response-types.ts +25 -22
- package/src/urls/type-extraction.ts +98 -154
- package/src/urls/urls-function.ts +1 -19
- package/src/use-loader.tsx +404 -86
- package/src/vercel/index.ts +11 -0
- package/src/vercel/tracing.ts +89 -0
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +46 -45
- package/src/vite/discovery/client-urls-projection.ts +322 -0
- package/src/vite/discovery/dev-prerender-cache.ts +117 -0
- package/src/vite/discovery/discover-routers.ts +178 -147
- package/src/vite/discovery/discovery-errors.ts +255 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +243 -134
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/shell-prerender-phase.ts +397 -0
- package/src/vite/discovery/state.ts +116 -9
- package/src/vite/discovery/virtual-module-codegen.ts +226 -87
- package/src/vite/encryption-key.ts +29 -0
- package/src/vite/index.ts +16 -0
- package/src/vite/inject-client-debug.ts +88 -0
- package/src/vite/plugin-types.ts +294 -6
- package/src/vite/plugins/cjs-to-esm.ts +16 -19
- package/src/vite/plugins/client-ref-dedup.ts +16 -11
- package/src/vite/plugins/client-ref-hashing.ts +28 -15
- package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
- package/src/vite/plugins/expose-action-id.ts +50 -97
- package/src/vite/plugins/expose-id-utils.ts +96 -51
- package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
- package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
- package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
- package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
- package/src/vite/plugins/expose-internal-ids.ts +599 -317
- package/src/vite/plugins/performance-tracks.ts +89 -0
- package/src/vite/plugins/refresh-cmd.ts +89 -27
- package/src/vite/plugins/server-ref-hashing.ts +74 -0
- package/src/vite/plugins/server-reference-pattern.ts +10 -0
- package/src/vite/plugins/use-cache-transform.ts +73 -83
- package/src/vite/plugins/vercel-output.ts +384 -0
- package/src/vite/plugins/version-injector.ts +39 -29
- package/src/vite/plugins/version-plugin.ts +45 -40
- package/src/vite/plugins/virtual-entries.ts +193 -30
- package/src/vite/rango.ts +298 -134
- package/src/vite/router-discovery.ts +1803 -180
- package/src/vite/utils/ast-handler-extract.ts +26 -35
- package/src/vite/utils/banner.ts +1 -1
- package/src/vite/utils/bundle-analysis.ts +10 -15
- package/src/vite/utils/client-chunks.ts +184 -0
- package/src/vite/utils/directive-prologue.ts +40 -0
- package/src/vite/utils/forward-user-plugins.ts +171 -0
- package/src/vite/utils/manifest-utils.ts +1 -59
- package/src/vite/utils/package-resolution.ts +21 -52
- package/src/vite/utils/prerender-utils.ts +123 -44
- package/src/vite/utils/shared-utils.ts +158 -44
- 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.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/src/browser/action-response-classifier.ts +0 -99
- package/src/browser/react/use-client-cache.ts +0 -58
- package/src/browser/shallow.ts +0 -40
- package/src/handles/index.ts +0 -7
- package/src/network-error-thrower.tsx +0 -23
- package/src/router/middleware-cookies.ts +0 -55
|
@@ -0,0 +1,904 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ppr
|
|
3
|
+
description: PPR shell caching — opt a page route in with the `ppr` path option; the router serves the cached HTML shell instantly and resumes the live holes. Use when a page should render instantly from a cached shell while specific parts stay live, or asking about partial prerendering in Rango.
|
|
4
|
+
argument-hint: "[setup]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# PPR Shell Caching
|
|
8
|
+
|
|
9
|
+
Caches the rendered HTML **shell** of a page route (React `prerender` prelude
|
|
10
|
+
bytes plus `postponed` state) and, on a later request, flushes those bytes after
|
|
11
|
+
route classification and the complete middleware chain, but before downstream
|
|
12
|
+
tail rendering. It then resumes fizz for just the live holes. The browser sees
|
|
13
|
+
one ordinary streamed document; loaders stay fresh on every request. This is
|
|
14
|
+
the second render axis — the default axis-1 path is untouched, and every
|
|
15
|
+
ineligible request falls open to it.
|
|
16
|
+
|
|
17
|
+
Compare `/document-cache`, which freezes the WHOLE response including loader
|
|
18
|
+
output. Shell caching is for pages that mix a stable shell with live data: the
|
|
19
|
+
shell is shared per host+URL, the holes are per request.
|
|
20
|
+
|
|
21
|
+
This is in-function PPR on every deployment. The worker/function serves the
|
|
22
|
+
prelude; it is not a CDN static file. See `/deployment-caching` before combining
|
|
23
|
+
PPR with HTTP shared-cache headers.
|
|
24
|
+
|
|
25
|
+
## Not this skill if…
|
|
26
|
+
|
|
27
|
+
- You want the WHOLE response frozen, loader output included — see
|
|
28
|
+
`/document-cache`.
|
|
29
|
+
- You want build-time Flight segment payloads from `Static()`/`Prerender()` —
|
|
30
|
+
see `/prerender`. A `Prerender` page may also declare `ppr`; then producer B
|
|
31
|
+
can bake the HTML shell at build time while loaders stay live.
|
|
32
|
+
- You are unsure which cache layer you need — start at `/cache-guide`.
|
|
33
|
+
|
|
34
|
+
## Setup: one path option, no PPR middleware to mount
|
|
35
|
+
|
|
36
|
+
PPR is a DOCUMENT-level property declared on the page route via the `ppr` path
|
|
37
|
+
option. Serving is **integral to the router** — there is nothing to mount. The
|
|
38
|
+
only prerequisite is an app-level `createRouter({ cache })` store that
|
|
39
|
+
implements the shell family (`getShell`/`putShell`): `MemorySegmentCacheStore`
|
|
40
|
+
(dev/tests), `CFCacheStore` (Cache API L1 + KV L2), or `VercelCacheStore`
|
|
41
|
+
(runtime cache). A ppr route on a store without the family stays on axis 1 with
|
|
42
|
+
a once-per-key warning.
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
import { createRouter, urls } from "@rangojs/router";
|
|
46
|
+
import { CFCacheStore } from "@rangojs/router/cache";
|
|
47
|
+
|
|
48
|
+
export const urlpatterns = urls(({ path, layout, loader, loading }) => [
|
|
49
|
+
layout(ProductShell, () => [
|
|
50
|
+
path(
|
|
51
|
+
"/products/:id",
|
|
52
|
+
PricePage,
|
|
53
|
+
// `ppr` is the whole opt-in AND the policy. `ppr: true` uses the default
|
|
54
|
+
// ttl (300s); an object sets ttl/swr/tags (PartialPrerenderProps).
|
|
55
|
+
{ name: "product", ppr: { ttl: 600, swr: 120 } },
|
|
56
|
+
() => [
|
|
57
|
+
loader(LivePriceLoader),
|
|
58
|
+
loading(<PriceSkeleton />), // structural hole: the loader subtree stays live
|
|
59
|
+
],
|
|
60
|
+
),
|
|
61
|
+
]),
|
|
62
|
+
]);
|
|
63
|
+
|
|
64
|
+
const router = createRouter<AppBindings>({
|
|
65
|
+
document: Document,
|
|
66
|
+
urls: urlpatterns,
|
|
67
|
+
cache: (env, ctx) => ({
|
|
68
|
+
store: new CFCacheStore({ kv: env.CACHE_KV, ctx: ctx! }),
|
|
69
|
+
}),
|
|
70
|
+
});
|
|
71
|
+
export default router;
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
That is ONE of two hole mechanisms — the loader one. Do not conclude PPR
|
|
75
|
+
requires a loader:
|
|
76
|
+
|
|
77
|
+
### The same opt-in with NO loader and NO loading() — promise holes
|
|
78
|
+
|
|
79
|
+
A route (or its layouts) whose live regions are pending promises under
|
|
80
|
+
`<Suspense>` PPRs with no `loader()` and no `loading()` anywhere. Hand the
|
|
81
|
+
un-awaited promise over as a prop; the consumer suspends under its OWN
|
|
82
|
+
boundary; the boundary postpones at capture and becomes the hole:
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
// Handler: kick off the fetch, do NOT await it.
|
|
86
|
+
function ProductPage(ctx: HandlerContext) {
|
|
87
|
+
const reviews = fetchReviews(ctx.params.id); // Promise<Review[]> — pending
|
|
88
|
+
return (
|
|
89
|
+
<main>
|
|
90
|
+
<h1>Product {ctx.params.id}</h1> {/* shell — baked into the prelude */}
|
|
91
|
+
<ReviewsSection promise={reviews} /> {/* hole — resumes per request */}
|
|
92
|
+
</main>
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
// ReviewsSection.tsx — the consumer owns its Suspense boundary.
|
|
99
|
+
"use client";
|
|
100
|
+
|
|
101
|
+
import { Suspense, use } from "react";
|
|
102
|
+
|
|
103
|
+
function Inner({ promise }: { promise: Promise<Review[]> }) {
|
|
104
|
+
return <ReviewList reviews={use(promise)} />;
|
|
105
|
+
}
|
|
106
|
+
export function ReviewsSection({ promise }: { promise: Promise<Review[]> }) {
|
|
107
|
+
return (
|
|
108
|
+
<Suspense fallback={<ReviewsSkeleton />}>
|
|
109
|
+
<Inner promise={promise} />
|
|
110
|
+
</Suspense>
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
path("/products/:id", ProductPage, { name: "product", ppr: true });
|
|
117
|
+
// No use() list at all: no loader, no loading, still a shell + live hole.
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
At capture the pending fetch cannot win the task-quantized quiet window, so
|
|
121
|
+
the boundary postpones — fallback in the frozen prelude, value resumed fresh
|
|
122
|
+
on every HIT. This is the PHYSICS class from the hole doctrine below, and it
|
|
123
|
+
is exactly how an existing Suspense-shaped tree (e.g. migrated from Next.js
|
|
124
|
+
PPR) works with zero restructuring. The e2e proof is
|
|
125
|
+
`e2e/test-app/src/components/ShellPhysicsValue.tsx` — a promise hole living in
|
|
126
|
+
a LAYOUT with no loader registration at all.
|
|
127
|
+
|
|
128
|
+
A route WITHOUT the `ppr` option is pure axis 1: no store read, no capture, no
|
|
129
|
+
logs, zero cost. `ppr` is per page route — declaring it on a layout is not
|
|
130
|
+
supported (subtree inheritance is a possible follow-up).
|
|
131
|
+
|
|
132
|
+
## Where PPR sits: the cache onion
|
|
133
|
+
|
|
134
|
+
Rango's caches layer like an onion — each ring stores a progressively more
|
|
135
|
+
"cooked" representation of the same page. From innermost (raw values) to
|
|
136
|
+
outermost (final bytes):
|
|
137
|
+
|
|
138
|
+
| Ring | Primitive | What is stored | What stays live on a hit |
|
|
139
|
+
| ----------------------- | ---------------------------------------- | -------------------------------------------------- | -------------------------------------- |
|
|
140
|
+
| 1. Function values | `"use cache"` | a function's return value | everything around the call |
|
|
141
|
+
| 2. Loader values | `loader(Fn, () => [cache({...})])` | one loader's result (opt-in; loaders default live) | all other loaders, handlers, rendering |
|
|
142
|
+
| 3. Segments (Flight) | `cache()` route / build-time `prerender` | serialized rendered segments + replayed handles | loaders, HTML render |
|
|
143
|
+
| 4. **HTML shell (PPR)** | `ppr` path option | rendered prelude bytes + React postponed state | the holes, hydration payload |
|
|
144
|
+
| 5. Whole response | `/document-cache` | final response bytes, headers included | nothing — all-or-nothing |
|
|
145
|
+
|
|
146
|
+
PPR is ORTHOGONAL to `cache()` (ring 3): a ppr route may be uncached (its
|
|
147
|
+
handlers run fresh on every serve and during capture), fully `cache()`d (its
|
|
148
|
+
segments replay), or mixed. One useful cache() property to know: the segment
|
|
149
|
+
codec **deep-settles promises at the ring-3 write**, so nothing inside a
|
|
150
|
+
`cache()` boundary can stay live — that is a cache() fact, not a ppr one.
|
|
151
|
+
|
|
152
|
+
Invalidation crosses rings: `updateTag()`/`revalidateTag()` reach segment,
|
|
153
|
+
shell, loader, and item entries in the same store, and shell entries
|
|
154
|
+
additionally self-invalidate on `React.version` change.
|
|
155
|
+
|
|
156
|
+
## The serve pipeline: commit after ALL middleware
|
|
157
|
+
|
|
158
|
+
On a document GET to a ppr route the router runs:
|
|
159
|
+
|
|
160
|
+
1. **match** — route identified, `ppr` config read from the matched route;
|
|
161
|
+
2. **the WHOLE middleware chain** — the global `router.use()` chain AND route
|
|
162
|
+
DSL `middleware()`; both are guards, and the COMMIT POINT is after all of
|
|
163
|
+
them: any rejection/redirect/401 wins before a single shell byte, on MISS
|
|
164
|
+
and on a warmed HIT alike;
|
|
165
|
+
3. **shell lookup** — `getShell(key)` on the app store (key =
|
|
166
|
+
host+pathname+sorted search);
|
|
167
|
+
4. **HIT** — the composed response is committed immediately: the stored prelude
|
|
168
|
+
bytes flush first, while segment resolution, the fresh Flight render (the
|
|
169
|
+
full hydration payload — there is no Flight-side resume), and the fizz
|
|
170
|
+
`resume` of just the holes run BEHIND them inside the response stream;
|
|
171
|
+
5. **MISS** — plain axis-1 serve, tagged `x-rango-shell: MISS`, plus a
|
|
172
|
+
background capture (stampede-guarded, retry-in-place, exponential backoff).
|
|
173
|
+
|
|
174
|
+
`x-rango-shell: HIT | MISS` is the observability header. Because the commit
|
|
175
|
+
point is after the chain, an unauthorized request NEVER sees shell bytes — put
|
|
176
|
+
auth middleware anywhere (global or route DSL) and it guards PPR for free.
|
|
177
|
+
|
|
178
|
+
### Soft navigation caches and reuses the handler layer
|
|
179
|
+
|
|
180
|
+
Ordinary partial RSC navigations to a `ppr` URL use the same handler-layer cache
|
|
181
|
+
contract even when no document request has captured an HTML shell yet. When a
|
|
182
|
+
shell snapshot exists, the server replays its canonical document segment record.
|
|
183
|
+
On a cold partial request, normal matching renders the response and schedules a
|
|
184
|
+
background navigation-only shell capture; later navigations and prefetches
|
|
185
|
+
replay its eligible snapshot. In both cases `matchPartial()`:
|
|
186
|
+
|
|
187
|
+
- preserves client-owned shared layouts by segment id;
|
|
188
|
+
- returns only new or revalidating destination segments;
|
|
189
|
+
- runs DSL loaders fresh with their normal `loading()` streaming behavior;
|
|
190
|
+
- keeps the existing prefetch key, source scope, and in-flight lock unchanged.
|
|
191
|
+
|
|
192
|
+
This is deliberately invisible to the browser: the response is the same
|
|
193
|
+
`RscPayload` shape as any other partial navigation. Captured item/response values
|
|
194
|
+
and loader-container pins are NOT replayed on this path, so loader reads stay
|
|
195
|
+
live.
|
|
196
|
+
|
|
197
|
+
A route's own `cache()` scope — including one inherited from an ancestor, the
|
|
198
|
+
common app-wide storefront shape — COMPOSES with replay instead of disabling
|
|
199
|
+
it. The explicit tier stays authoritative: its lookup runs first with its
|
|
200
|
+
normal store, key, TTL, SWR, tags, and condition, and when it supplies the
|
|
201
|
+
match the response reports `BYPASS; reason=explicit-cache-hit` (never a false
|
|
202
|
+
replay `HIT`). Only when the explicit tier misses does the shell snapshot's
|
|
203
|
+
canonical doc segment record supply the match and report `HIT`. To make that
|
|
204
|
+
possible, a capture of such a route records the doc segment record into the
|
|
205
|
+
shell snapshot IN ADDITION to the scope's normal store write; the record rides
|
|
206
|
+
only inside the shell entry, never the real store. Two opt-outs stay absolute:
|
|
207
|
+
`cache(false)` and a `condition()` returning false mean "do not serve this
|
|
208
|
+
request's segments from any cache" — no doc record is captured for them and
|
|
209
|
+
the seeded fallback never rescues a refused read. `cache(false)` is static, so
|
|
210
|
+
replay reports `BYPASS; reason=cache-disabled` before performing a single
|
|
211
|
+
shell read; a `condition()` refusal is request-time state, decided at the
|
|
212
|
+
lookup itself and reported as the same `cache-disabled` post-match (the gate
|
|
213
|
+
must not pre-decide a predicate that could flap between the two evaluations).
|
|
214
|
+
An errored explicit read — a throwing `key()`, or a built-in store's swallowed
|
|
215
|
+
backend failure (`CACHE_READ_ERROR`) — also never falls back: it renders
|
|
216
|
+
uncached, exactly as without ppr.
|
|
217
|
+
|
|
218
|
+
`transition({ when })` is evaluated from the
|
|
219
|
+
matched manifest before route handlers on every PPR match, so it can vary by
|
|
220
|
+
URL/params/action or middleware context without disabling replay; handler-set
|
|
221
|
+
context is unavailable by design. Intercepts, handler-live holes, an active
|
|
222
|
+
nonce, and an absent/corrupt segment snapshot fall open to the ordinary partial
|
|
223
|
+
path when encountered by the shell capture. A transition already replayed from
|
|
224
|
+
an explicit cache tier remains frozen by that tier's normal semantics.
|
|
225
|
+
|
|
226
|
+
Two more decisions are made before any shell-store read, so probes and
|
|
227
|
+
prerendered routes never spend passive `getShell` I/O:
|
|
228
|
+
|
|
229
|
+
- A partial request carrying neither `X-RSC-Router-Client-Path` nor `Referer`
|
|
230
|
+
(a curl probe, a synthetic monitor) can never produce a partial match; it
|
|
231
|
+
reports `BYPASS; reason=no-navigation-context`. Alert on replay hit-rate
|
|
232
|
+
with this in mind — such probes are not cache misses.
|
|
233
|
+
- A `Prerender()` route's partial is served from the build-time prerender
|
|
234
|
+
store inside matching (a better-than-HIT outcome); it reports
|
|
235
|
+
`BYPASS; reason=prerender-store`. Its captures never record a doc segment
|
|
236
|
+
record (the prerender store short-circuits the cache write), so replay
|
|
237
|
+
seeding would be impossible anyway.
|
|
238
|
+
|
|
239
|
+
Fresh and stale-within-SWR runtime shells replay. The stale read is passive: it
|
|
240
|
+
uses `getShell(key, { claimRevalidation: false })`, does not claim SWR ownership,
|
|
241
|
+
and cannot recapture HTML. A later document request owns the background
|
|
242
|
+
recapture; hard-expired entries schedule a navigation-only capture. Production
|
|
243
|
+
may also use a fresh local build manifest. Development does not probe
|
|
244
|
+
`/__rsc_shell`; it schedules the same local background capture instead. Custom `SegmentCacheStore`
|
|
245
|
+
implementations must set `supportsPassiveShellReads: true` and honor the
|
|
246
|
+
non-claiming read option.
|
|
247
|
+
|
|
248
|
+
The first cold partial request reports `BYPASS; reason=no-entry` because no
|
|
249
|
+
artifact could supply that response; its successful render schedules
|
|
250
|
+
`scheduleShellCapture` with a navigation-only marker. The next request reports
|
|
251
|
+
`HIT` when the capture produced an eligible snapshot. Navigation snapshots use
|
|
252
|
+
a separate shell key, so they cannot overwrite or be served as a document shell.
|
|
253
|
+
The capture runs with the stripped target document URL and loads SSR support in
|
|
254
|
+
the bounded background queue, outside the triggering partial response's latency.
|
|
255
|
+
An `allReady` decision still declines capture.
|
|
256
|
+
|
|
257
|
+
Partial responses expose the actual decision as `x-rango-ppr-replay`:
|
|
258
|
+
`HIT; freshness=fresh|stale` or `BYPASS; reason=<bounded-token>`. With
|
|
259
|
+
performance metrics enabled, the same decision appears as
|
|
260
|
+
`ppr-navigation-replay` in `Server-Timing`. `HIT` means matching consumed the
|
|
261
|
+
seeded segment record, not merely that a snapshot existed. Fragment-capable
|
|
262
|
+
clients decode its stored ReactNode fields after the response arrives; if that
|
|
263
|
+
decode fails, the client retries once through the server decode-and-evict path
|
|
264
|
+
and disables further passthrough for that browser document. The retry replaces
|
|
265
|
+
the fragment-capable response-cache slot, and a corrupt seeded snapshot is
|
|
266
|
+
recaptured at the key that supplied it. An explicit `cache()` scope that supplies
|
|
267
|
+
the match cannot produce a
|
|
268
|
+
false HIT — it reports `explicit-cache-hit`. There is still no Flight resume
|
|
269
|
+
API; this is segment replay followed by normal Flight streaming, not reuse of
|
|
270
|
+
the HTML `prelude`/`postponed` bytes. Replayed segments do ride the partial
|
|
271
|
+
payload as verbatim `__rangoFragment` envelopes (#700 fragment splice — the
|
|
272
|
+
stored per-segment Flight strings are string-copied instead of
|
|
273
|
+
deserialize→re-serialize per request); the client expands them at its
|
|
274
|
+
navigation/prefetch decode chokepoints before anything renders, so they are
|
|
275
|
+
consumer-invisible.
|
|
276
|
+
|
|
277
|
+
The bounded bypass tokens, grouped by when they are decided:
|
|
278
|
+
|
|
279
|
+
| Token | Decided | Meaning |
|
|
280
|
+
| --------------------------------------------------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
281
|
+
| `method`, `dynamic`, `nonce`, `store-unavailable`, `passive-read-unsupported` | pre-read | request/route/store ineligible for replay |
|
|
282
|
+
| `no-navigation-context` | pre-read | no `X-RSC-Router-Client-Path`/`Referer`; a partial match is impossible |
|
|
283
|
+
| `prerender-store` | pre-read or match | `Prerender()` route served by its baked artifact (pre-read probe of the normal variant; reclassified post-match when the store actually served, either variant) |
|
|
284
|
+
| `intercept` | match | the navigation resolved to an intercept — replay is never armed for intercepts (they keep their normal cache path); no heal capture |
|
|
285
|
+
| `cache-disabled` | pre-read or match | `cache(false)` (pre-read, static) or `condition()` false (decided at the lookup); consumer opt-out is absolute |
|
|
286
|
+
| `read-error`, `no-entry`, `invalid-version`, `corrupt-entry`, `stale-build-entry` | shell read | no usable shell entry (`no-entry`/`invalid-version`/`corrupt-entry`/`stale-build-entry` schedule the navigation-only heal capture) |
|
|
287
|
+
| `handler-live-holes`, `transition-when`, `no-segment-snapshot` | eligibility | entry exists but its snapshot cannot replay (no canonical doc record, or handler/transition liveness); on a route with an enabled `cache()` scope, `no-segment-snapshot` heals when the lookup did not refuse (a `condition()` false-at-capture entry becomes replayable) |
|
|
288
|
+
| `explicit-cache-hit` | match | the route's own `cache()` tier supplied the match |
|
|
289
|
+
| `snapshot-miss` | match | an eligible snapshot was seeded but matching did not consume it |
|
|
290
|
+
|
|
291
|
+
### Capture-generation invalidation
|
|
292
|
+
|
|
293
|
+
If handler or bake-lane code calls `updateTag()` on one of the shell's own tags
|
|
294
|
+
while capture is running, that generation is rejected. Built-in stores report it;
|
|
295
|
+
Rango warns with the shell key and backs capture off instead of rendering the
|
|
296
|
+
same doomed generation on every request. Move a deterministic self-invalidation
|
|
297
|
+
out of render code if you want the shell to persist.
|
|
298
|
+
|
|
299
|
+
### Opting out per request with `ctx.dynamic()`
|
|
300
|
+
|
|
301
|
+
Middleware and handlers can call `ctx.dynamic()` to force this request back to
|
|
302
|
+
axis 1. In middleware it runs before the PPR commit point, so the router skips
|
|
303
|
+
shell lookup, HIT serving, and MISS capture for that request. In handlers it is
|
|
304
|
+
too late to prevent a MISS render from already happening, but it still prevents
|
|
305
|
+
the follow-up shell capture.
|
|
306
|
+
|
|
307
|
+
During `Prerender` + `ppr` build-shell capture, middleware is replayed with
|
|
308
|
+
`ctx.build === true`, `ctx.waitUntil()` inert, and the same `ctx.dynamic()`
|
|
309
|
+
opt-out. Use that for routes where the shell depends on runtime-only auth,
|
|
310
|
+
cookies, or side-effectful SDK calls. A skipped build shell can still be owned
|
|
311
|
+
later by runtime capture when runtime middleware does not call `ctx.dynamic()`.
|
|
312
|
+
|
|
313
|
+
`ctx.dynamic()` also **re-permits handler header/cookie writes** (issue #735).
|
|
314
|
+
The header doctrine below forbids handler writes on a ppr route because they
|
|
315
|
+
ride MISSes and vanish on HITs — but a `dynamic()` render never HITs, so its
|
|
316
|
+
write is deterministic. Calling `ctx.dynamic()` clears the header latch for the
|
|
317
|
+
rest of the render, so the SAME handler can write its control-flow header
|
|
318
|
+
directly (no middleware relay). Ordering is a contract: call `dynamic()` BEFORE
|
|
319
|
+
the write — a write before it still throws.
|
|
320
|
+
|
|
321
|
+
```ts
|
|
322
|
+
function catalogPage(ctx) {
|
|
323
|
+
ctx.dynamic(); // declare live -> refuses capture AND clears the header latch
|
|
324
|
+
ctx.headers.set("x-rango-sfra-proxy", "catalog");
|
|
325
|
+
return <Catalog />;
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
## Verifying it works
|
|
330
|
+
|
|
331
|
+
The header exists on DOCUMENT responses only. A bare `curl` gets the HTML
|
|
332
|
+
document (Flight is explicit-opt-in via `Accept: text/x-component`), so it
|
|
333
|
+
sees the header directly; only an explicit Flight request shape lacks it:
|
|
334
|
+
|
|
335
|
+
```
|
|
336
|
+
curl -s -D - -o /dev/null https://app.example.com/products/1 | grep -i x-rango-shell
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
- Runtime-captured route: first document GET is `MISS`, plus a background
|
|
340
|
+
capture; a later request becomes a `HIT`.
|
|
341
|
+
- `Prerender + ppr` route: the shell is produced during `vite build`, so the
|
|
342
|
+
first production document request can already be a `HIT`. In dev, producer B
|
|
343
|
+
runs on demand and can return a `HIT`; if capture outlasts the bounded
|
|
344
|
+
foreground wait, the request falls open to `MISS` and runtime capture.
|
|
345
|
+
- Production (workerd/node): the SECOND request is a `HIT`.
|
|
346
|
+
- Dev: expect a few extra MISSes — cold module transforms abort the capture
|
|
347
|
+
window (per-attempt breadcrumbs: start the server with
|
|
348
|
+
`INTERNAL_RANGO_DEBUG=1`). This self-heals; only a route that NEVER flips
|
|
349
|
+
has a real hole/eligibility problem (the once-per-key warning tells the two
|
|
350
|
+
apart).
|
|
351
|
+
- A HIT is one ordinary document: the frozen prelude first (view-source shows
|
|
352
|
+
your baked shell, with hole fallbacks in place), then
|
|
353
|
+
`<div hidden id="S:0">…` segments as the holes resume, per request.
|
|
354
|
+
- A ppr-declared route that CANNOT be honored (missing shell store family,
|
|
355
|
+
per-request nonce) serves plain axis 1 with NO header and warns once per
|
|
356
|
+
key — no header + a declared `ppr` means look for that warning.
|
|
357
|
+
- On Cloudflare, `CFCacheStore` reads PPR shells from the per-colo Cache API,
|
|
358
|
+
falls through to KV on a miss, and promotes the KV hit back into that colo.
|
|
359
|
+
WITHOUT a KV namespace its shell family remains inert: every ppr route stays
|
|
360
|
+
`MISS` forever. The store warns once per isolate — bind KV
|
|
361
|
+
(`new CFCacheStore({ ctx, kv: env.CACHE_KV })`) or use another store. An
|
|
362
|
+
inert store also stops captures at the gate: the store declares
|
|
363
|
+
`shellFamilyInert` and the scheduler skips the background render entirely
|
|
364
|
+
(`skip-inert-store` on the debug event) instead of burning a full capture per
|
|
365
|
+
MISS whose write could only no-op.
|
|
366
|
+
- Structured capture diagnostics: `createRouter({ debugShellCapture: true })`
|
|
367
|
+
logs one line per capture attempt/skip (outcome, durations, prelude and
|
|
368
|
+
snapshot bytes, backoff state); pass a function to receive each
|
|
369
|
+
`ShellCaptureDebugEvent` instead. `skip-capacity` means the isolate already
|
|
370
|
+
has 32 queued/running captures; the dropped best-effort capture can retry on a
|
|
371
|
+
later request. `skip-queue-timeout` means this capture waited 15s behind the
|
|
372
|
+
active or same-priority work and was dropped before rendering; document-shell
|
|
373
|
+
captures outrank queued navigation-only snapshots, but never interrupt the
|
|
374
|
+
active capture — the skip event and the `rango.background` span carry
|
|
375
|
+
`queuePriority`/`queueAhead` (class and backlog at enqueue) so a parked
|
|
376
|
+
capture diagnoses itself. A stored attempt reports `bakeWaitMs`: how long the
|
|
377
|
+
slowest bake source (a top-level pushed handle promise or a bake-lane loader
|
|
378
|
+
container) held the capture gate — in dev, past 2s, the source is also named
|
|
379
|
+
once per key in a console warning with the remedies (nest the promise /
|
|
380
|
+
`cache()` the work / add `loading()`). In dev, with `debugPerformance` on,
|
|
381
|
+
the last capture outcome for a key also rides the next document GET's
|
|
382
|
+
`Server-Timing` as `ppr-capture;desc="…"`.
|
|
383
|
+
- For deployed Cloudflare tier diagnostics, build with
|
|
384
|
+
`INTERNAL_RANGO_DEBUG=1` and run `wrangler tail`. `[CFCacheStore][shell]`
|
|
385
|
+
JSON events distinguish L1 hit/miss, KV fallback/promotion, tier writes, and
|
|
386
|
+
marker rejection, with `cf-ray`/colo and read timings. The flag is baked at
|
|
387
|
+
build time; setting only a Worker runtime variable is too late.
|
|
388
|
+
|
|
389
|
+
### Unit / integration testing (public primitives)
|
|
390
|
+
|
|
391
|
+
Import from `@rangojs/router/testing` (Vitest) or `@rangojs/router/testing/e2e`
|
|
392
|
+
(Playwright):
|
|
393
|
+
|
|
394
|
+
| Helper | Use for |
|
|
395
|
+
| ------------------------------------------------- | ------------------------------------------------------------ |
|
|
396
|
+
| `assertShellStatus(res, "HIT" \| "MISS")` | Document Response from a real RSC serve / e2e `page.request` |
|
|
397
|
+
| `assertPprReplayStatus(res, expected)` | Partial response fresh/stale replay or bounded bypass |
|
|
398
|
+
| `parsePprReplayStatus(res)` | Read structured replay/bypass status or null |
|
|
399
|
+
| `shellCacheKey(url)` | Production store key for `store.getShell` / custom stores |
|
|
400
|
+
| `MemorySegmentCacheStore` + `getShell`/`putShell` | Custom store contract / tag eviction (no faked HIT) |
|
|
401
|
+
|
|
402
|
+
```ts
|
|
403
|
+
import { MemorySegmentCacheStore } from "@rangojs/router/cache";
|
|
404
|
+
import { assertShellStatus, shellCacheKey } from "@rangojs/router/testing";
|
|
405
|
+
|
|
406
|
+
// Unit: store + key (after a real putShell / capture flush in e2e)
|
|
407
|
+
const store = new MemorySegmentCacheStore();
|
|
408
|
+
const key = shellCacheKey("http://localhost/products/1");
|
|
409
|
+
// ... after production putShell ...
|
|
410
|
+
expect(await store.getShell(key)).not.toBeNull();
|
|
411
|
+
|
|
412
|
+
// E2E: header on a real document GET
|
|
413
|
+
assertShellStatus({ headers: new Headers(res.headers()) }, "HIT");
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
**Out of unit scope** (stay e2e): live MISS → background capture → HIT,
|
|
417
|
+
browser resume of holes, build-time producer B. `dispatch` never runs PPR.
|
|
418
|
+
`renderHandler` only exposes `ctx.dynamic()` / `build` for the opt-out path.
|
|
419
|
+
Do not invent a HIT Response in unit tests. Full recipe: `/testing` skill →
|
|
420
|
+
`cache-prerender.md` (PPR shell section).
|
|
421
|
+
|
|
422
|
+
## The hole doctrine (encode this in your head)
|
|
423
|
+
|
|
424
|
+
Holes are **render-defined**, decided by the shape of the tree, on three rules:
|
|
425
|
+
|
|
426
|
+
| Class | What makes the hole | At capture | At serve |
|
|
427
|
+
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | ---------------------------------- |
|
|
428
|
+
| **STRUCTURAL** | the ENTIRE segment subtree under a `loading()` registration — the loader LIVE lane | loaders masked; the LoaderBoundary postpones; the fallback bakes in as route structure | loaders run fresh; resume fills it |
|
|
429
|
+
| **PHYSICS** | any promise NESTED in handed-over data still pending at capture, under the consumer's own `<Suspense>` — handler props, handle containers (`push({ x: promise })`), loader-carried | real I/O cannot win the task-quantized quiet window; the boundary postpones | the promise settles and streams in |
|
|
430
|
+
| **SHELL** | awaited handler data, TOP-LEVEL `push(promise)` (awaited before SSR), resolved promises, replayed `cache()` segments, BAKE-lane loader containers | baked into the prelude | served from the frozen prelude |
|
|
431
|
+
|
|
432
|
+
ONE rule for promises, every lane — handlers, handles, AND loaders: **a promise
|
|
433
|
+
nested inside your data is never baked; the container settles.** A loader
|
|
434
|
+
without `loading()` is the BAKE lane (see below): its settled container is
|
|
435
|
+
shell material, exactly like awaited handler data and top-level handle pushes.
|
|
436
|
+
|
|
437
|
+
**`loading()` is NOT the gate for holes — it is the LANE SELECTOR for loader
|
|
438
|
+
data.** A pending promise under any plain `<Suspense>` postpones and is a hole
|
|
439
|
+
at whatever level it suspends — the PHYSICS row needs no `loading()` anywhere
|
|
440
|
+
(the e2e fixture's physics and nested-handle holes sit in a layout with none).
|
|
441
|
+
A route without a loader PPRs on pure promise/Suspense holes. For loaders,
|
|
442
|
+
`loading()` picks the lane: present = the GUARANTEED live lane (masked at
|
|
443
|
+
capture, fresh every serve, immune to fast resolution); absent = the bake lane
|
|
444
|
+
(the container is shell material, nested promises stay live).
|
|
445
|
+
|
|
446
|
+
The three promise positions, side by side:
|
|
447
|
+
|
|
448
|
+
```typescript
|
|
449
|
+
async function Handler(ctx: HandlerContext) {
|
|
450
|
+
const push = ctx.use(MyHandle);
|
|
451
|
+
|
|
452
|
+
push(fetchBadge()); // TOP-LEVEL push: awaited pre-SSR → BAKED
|
|
453
|
+
push({ label: "x", stat: fetchStat() }); // NESTED in container → container baked,
|
|
454
|
+
// stat streams → HOLE (consumer Suspends it)
|
|
455
|
+
|
|
456
|
+
const data = await fetchHeader(ctx); // awaited by the handler → BAKED
|
|
457
|
+
|
|
458
|
+
return (
|
|
459
|
+
<section>
|
|
460
|
+
<Header data={data} /> {/* shell */}
|
|
461
|
+
<StatsPanel promise={fetchStats(ctx)} /> {/* un-awaited prop + own
|
|
462
|
+
<Suspense> + use() → HOLE */}
|
|
463
|
+
</section>
|
|
464
|
+
);
|
|
465
|
+
}
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
### Choosing the hole mechanism
|
|
469
|
+
|
|
470
|
+
| Your live region is… | Use | Why |
|
|
471
|
+
| ----------------------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
|
|
472
|
+
| loader data, must be fresh EVERY serve | `loader()` + `loading()` (the live lane) | the guaranteed structural hole — masked at capture, fresh every serve, immune to fast resolution |
|
|
473
|
+
| loader data, shell container + live parts | bake-lane loader (no `loading()`): `{ static, dynamic: promise }` | container bakes (snapshot-pinned per shell); nested promises hole at the consumer's `<Suspense>` |
|
|
474
|
+
| handler-fetched real I/O (db, fetch) | un-awaited promise prop + consumer `<Suspense>` + `use()` | no loader needed; real latency postpones by physics |
|
|
475
|
+
| per-segment metadata consumed elsewhere | handle container with a NESTED promise + consumer `<Suspense>` | container is shell, nested value streams — "nesting = liveness" |
|
|
476
|
+
| already-resolved / instant / synchronous values | `loader(() => Promise.resolve(x))` + `loading()` | a raw promise that settles inside the quiet window BAKES; only the live lane guarantees live |
|
|
477
|
+
| none of the above | nothing | it bakes — that is what the shell is for |
|
|
478
|
+
|
|
479
|
+
The physics caveat in one line: HANDLER-created promise props are holes only
|
|
480
|
+
because the I/O is genuinely pending at capture — if the value can resolve
|
|
481
|
+
near-instantly (memory read, warmed cache), it may bake into the shell; when
|
|
482
|
+
liveness must be guaranteed rather than probable, use a loader. BAKE-LANE
|
|
483
|
+
NESTED promises are exempt from that race: the capture MASKS every thenable
|
|
484
|
+
nested in a bake-lane container regardless of settle timing
|
|
485
|
+
(`maskNestedContainerThenables`, loader-cache.ts), so the consuming boundary
|
|
486
|
+
always postpones as a hole and every HIT streams the FRESH value — the
|
|
487
|
+
promise SHAPE is the liveness declaration, not a bet on latency. (Before the
|
|
488
|
+
mask, a nested promise that settled inside the window pinned its capture-time
|
|
489
|
+
value into the shared shell; found live as a storefront basket — with the
|
|
490
|
+
capturing session's identifiers — served to anonymous visitors.)
|
|
491
|
+
|
|
492
|
+
### Handles: "nesting = liveness"
|
|
493
|
+
|
|
494
|
+
- `ctx.use(H)(promise)` — a TOP-LEVEL pushed promise is awaited server-side
|
|
495
|
+
before SSR (`resolvedHandleStream`) and BAKED into the shell. The capture
|
|
496
|
+
gate is held open for the same await, so real latency here is safe (bounded
|
|
497
|
+
by the capture's 5s guard).
|
|
498
|
+
- `ctx.use(H)({ x: promise })` — the container passes through verbatim
|
|
499
|
+
(resolution is shallow); the nested promise streams to the consumer, who must
|
|
500
|
+
`<Suspense>` it. Under capture that boundary postpones — a hole — REGARDLESS
|
|
501
|
+
of settle timing: the capture masks nested thenables in pushed handle
|
|
502
|
+
containers (the capture store's push wrap, shell-capture.ts), so even an
|
|
503
|
+
already-resolved nested promise holes instead of baking its value into the
|
|
504
|
+
shared shell. Same shape-is-the-declaration rule as bake-lane loaders.
|
|
505
|
+
|
|
506
|
+
### Want a hole for already-resolved data?
|
|
507
|
+
|
|
508
|
+
Put it in a loader: `loader(() => Promise.resolve(x))` + `loading()`. Loaders
|
|
509
|
+
are always the live lane — masked at capture, fresh on every serve — no matter
|
|
510
|
+
how fast the value settles.
|
|
511
|
+
|
|
512
|
+
### The bake lane: loaders without loading() on THEIR entry
|
|
513
|
+
|
|
514
|
+
A loader on an entry with no renderable `loading()` EXECUTES during capture
|
|
515
|
+
(the capture gate holds open for its real latency, bounded by the 5s guard).
|
|
516
|
+
Its settled container bakes into the prelude; every promise nested in it is
|
|
517
|
+
masked at capture (regardless of how fast it settles) and postpones at the
|
|
518
|
+
consumer's own `<Suspense>` — a hole. On every HIT the
|
|
519
|
+
capture snapshot's loader family overlays the recorded container onto the
|
|
520
|
+
fresh run, so the payload matches the frozen prelude byte-for-byte while the
|
|
521
|
+
nested promises run fresh. The return shape is the declaration:
|
|
522
|
+
|
|
523
|
+
```typescript
|
|
524
|
+
export const StorefrontContextLoader = createLoader(async (ctx) => {
|
|
525
|
+
const config = await loadSiteConfig(ctx.params.locale); // bakes (pinned per shell)
|
|
526
|
+
return {
|
|
527
|
+
config, // shell material
|
|
528
|
+
basket: fetchBasket(ctx), // hole — consumer <Suspense>s it, fresh per request
|
|
529
|
+
};
|
|
530
|
+
});
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
The lane is decided PER TREE NODE, at the entry that REGISTERS the loaders —
|
|
534
|
+
`loading()` on a CHILD route does not change a parent layout's lane, and
|
|
535
|
+
`loading()` IS valid on layout and parallel entries, not just routes.
|
|
536
|
+
|
|
537
|
+
Four hard edges (each e2e/unit-pinned):
|
|
538
|
+
|
|
539
|
+
- **Header writes throw (issue #713).** ppr is a document-scoped `cache()`:
|
|
540
|
+
in any cached scenario ONLY MIDDLEWARE writes response headers. A handler
|
|
541
|
+
or loader on a ppr route calling `ctx.headers.set()`, `cookies().set()`,
|
|
542
|
+
`ctx.header()`, `ctx.setTheme()`, or `setStatus()` throws on EVERY render —
|
|
543
|
+
dev and prod,
|
|
544
|
+
first render, same guard family as the `cache()` boundary guard. Handlers
|
|
545
|
+
are replayed on HITs (the write would silently differ between MISS and
|
|
546
|
+
HIT); loaders are live but settle AFTER the response headers flushed with
|
|
547
|
+
the shell (dead letters). Move the write into route middleware — it runs
|
|
548
|
+
on every request, including HITs, and its headers/cookies merge into every
|
|
549
|
+
response. The one exception: a handler that calls `ctx.dynamic()` FIRST
|
|
550
|
+
re-permits its own header/cookie write (#735) — a dynamic() render never
|
|
551
|
+
HITs, so the write is deterministic (see "Opting out per request").
|
|
552
|
+
- **Identity refuses.** `cookies()`/`headers()` inside a bake-lane loader
|
|
553
|
+
throws during capture and the capture REFUSES (deterministic, once-per-key
|
|
554
|
+
warned) — identity can never bake into the shared shell. Give that loader's
|
|
555
|
+
entry `loading()` (the live lane is exempt) or move the identity-dependent
|
|
556
|
+
part into a nested promise. The guard's scope is EXACTLY those two calls:
|
|
557
|
+
per-user state read from a middleware-provided object (`ctx.get("session")`)
|
|
558
|
+
does NOT refuse — it bakes silently as the capturing user's data (see
|
|
559
|
+
Pitfalls: the session-object bake trap).
|
|
560
|
+
- **A rejecting bake-lane loader refuses.** Error UI never bakes.
|
|
561
|
+
- **Baked containers show CAPTURE-time data** for the shell's lifetime on
|
|
562
|
+
document GETs. Soft navigations may replay the captured handler segments, but
|
|
563
|
+
DSL loaders and their item/response reads remain fresh. That IS the bake
|
|
564
|
+
lane's meaning; if a value must be fresh on every serve, it belongs on the
|
|
565
|
+
live lane (`loading()`) or in a nested promise.
|
|
566
|
+
|
|
567
|
+
### The layout-with-loaders playbook (the storefront case)
|
|
568
|
+
|
|
569
|
+
The most common real-app shape: an app-wide layout registers per-user loaders
|
|
570
|
+
(session context, basket, wishlist) and the page under it declares `ppr`.
|
|
571
|
+
Those loaders are on the BAKE lane (no `loading()` on the layout), so the page
|
|
572
|
+
captures and HITs — the question is which parts of their data should bake vs
|
|
573
|
+
stay live. Your levers, in order of preference:
|
|
574
|
+
|
|
575
|
+
1. **Shape the return value.** Shared/config data returns as plain values
|
|
576
|
+
(bakes, pinned per shell); per-request data returns as NESTED promises
|
|
577
|
+
consumed under the widget's own `<Suspense>` (live holes). No `loading()`,
|
|
578
|
+
no restructuring. One wall: a bake-lane loader that reads
|
|
579
|
+
`cookies()`/`headers()` refuses the capture — identity belongs in a nested
|
|
580
|
+
promise or on the live lane.
|
|
581
|
+
2. **Do NOT put `loading()` on the layout itself** — that flips the WHOLE
|
|
582
|
+
layout to the live lane and the LoaderBoundary fallback wraps the layout's
|
|
583
|
+
ENTIRE subtree: chrome (header, nav, footer) falls out of the shell into
|
|
584
|
+
the skeleton. Technically PPR, practically pointless.
|
|
585
|
+
3. **Guaranteed-fresh widgets: a parallel slot with its OWN `loading()`.**
|
|
586
|
+
Parallel-owned loaders get their own per-slot boundary (`fresh.ts` tags
|
|
587
|
+
them with the slot's loading; `segment-system.tsx` builds a per-slot
|
|
588
|
+
LoaderBoundary), so the chrome bakes into the shell and each widget is an
|
|
589
|
+
independent, widget-sized hole:
|
|
590
|
+
|
|
591
|
+
```typescript
|
|
592
|
+
layout(StoreChrome, () => [
|
|
593
|
+
// chrome renders NO loader data itself — it bakes into the shell
|
|
594
|
+
parallel({ "@basket": BasketBadge }, () => [
|
|
595
|
+
loader(BasketLoader),
|
|
596
|
+
loading(<BadgeSkeleton />), // hole the size of a badge, not a page
|
|
597
|
+
]),
|
|
598
|
+
// Descriptor form when the slot handler needs ctx (annotate it —
|
|
599
|
+
// StaticHandlerDefinition in the union blocks inference there):
|
|
600
|
+
parallel({
|
|
601
|
+
"@wishlist": {
|
|
602
|
+
handler: (ctx: HandlerContext) => (
|
|
603
|
+
<WishlistBadge listUrl={ctx.reverse("wishlist")} />
|
|
604
|
+
),
|
|
605
|
+
use: () => [loader(WishlistLoader), loading(<BadgeSkeleton />)],
|
|
606
|
+
},
|
|
607
|
+
}),
|
|
608
|
+
path("/", HomePage, { name: "home", ppr: true }),
|
|
609
|
+
]),
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
Slot-owned loaders are masked at capture and GUARANTEED fresh per serve —
|
|
613
|
+
use this where the bake lane's physics (a fast resolve bakes) or pinning
|
|
614
|
+
(capture-time data for the shell's lifetime) is not acceptable, at the cost
|
|
615
|
+
of a widget-sized fallback in the shell. The slot handler must hand the
|
|
616
|
+
loader to a CLIENT component (`useLoader` in a `"use client"` component)
|
|
617
|
+
for the freshness guarantee to reach the rendered value: server-side
|
|
618
|
+
`await ctx.use(...)` in the handler is the BAKED lane (the consumption-lane
|
|
619
|
+
rule, `/rango` → Invariants) — it executes at capture with identity reads
|
|
620
|
+
permitted, but the value it renders is a capture-time copy wherever it is
|
|
621
|
+
not shielded by the slot's masked LoaderBoundary.
|
|
622
|
+
|
|
623
|
+
4. **Shared layout data can also leave the loader lane entirely**: an
|
|
624
|
+
un-awaited handler promise under the consumer's `<Suspense>` (a physics
|
|
625
|
+
hole) or `cache()`/`"use cache"` to bake it with tag-invalidation.
|
|
626
|
+
|
|
627
|
+
The identity rule, stated once: per-user data on a PPR page lives in a NESTED
|
|
628
|
+
promise (a hole, fresh per request) or behind `loading()` with CLIENT-side
|
|
629
|
+
consumption (the live lane). Reading `cookies()`/`headers()` where the value
|
|
630
|
+
would bake as SEGMENT material — handler/render code or a bake-lane loader
|
|
631
|
+
container — refuses the capture by construction. The one exemption is
|
|
632
|
+
handler-INVOKED loader bodies (`await ctx.use(loader)`): they execute at
|
|
633
|
+
capture with identity reads permitted, and the value bakes as a shared
|
|
634
|
+
capture-time copy — mirroring `cache()` semantics (the consumption-lane
|
|
635
|
+
rule; semantic-matrix row PPR3).
|
|
636
|
+
|
|
637
|
+
### Designing routes for cheap captures (the cost model)
|
|
638
|
+
|
|
639
|
+
The hole doctrine has a cost corollary that bites silently: **everything that
|
|
640
|
+
bakes is awaited at capture, and that wait recurs on EVERY capture of the
|
|
641
|
+
route**. A top-level pushed handle promise that takes 5s and a Meta promise
|
|
642
|
+
chained 2s further make every capture occupy the per-isolate serialized queue
|
|
643
|
+
for ~7s — while the served response still reads 13ms TTFB, because captures are
|
|
644
|
+
detached. You will not see this cost in any request timing; you see it as slow
|
|
645
|
+
MISS→HIT flips, `skip-queue-timeout` under prefetch pressure, and (in dev, past
|
|
646
|
+
2s) the bake-cost warning naming the source.
|
|
647
|
+
|
|
648
|
+
Three levers, in preference order:
|
|
649
|
+
|
|
650
|
+
1. **Nest it** (`{ data: promise }` instead of the promise): the value becomes
|
|
651
|
+
a hole — per-request, streamed under the consumer's `<Suspense>`, zero
|
|
652
|
+
capture cost. Choose this whenever the value may be dynamic anyway.
|
|
653
|
+
2. **`cache()` the work inside it**: the value stays baked (shell material,
|
|
654
|
+
tag-invalidatable), but the capture replays the cached value instead of
|
|
655
|
+
re-executing the expensive body (mixed-chain). Choose this for shared,
|
|
656
|
+
expensive-to-compute shell content.
|
|
657
|
+
3. **`loading()` on the entry** (loaders only): moves the loader to the live
|
|
658
|
+
lane — masked at capture, fresh per serve — at the cost of a fallback in
|
|
659
|
+
the shell.
|
|
660
|
+
|
|
661
|
+
Head material (Meta) generally cannot be a hole — the head is shell — so its
|
|
662
|
+
promises bake by design; make them cheap with lever 2. `bakeWaitMs` on the
|
|
663
|
+
capture debug event tells you what each capture actually paid.
|
|
664
|
+
|
|
665
|
+
## Execution matrix
|
|
666
|
+
|
|
667
|
+
| Phase | MISS (foreground) | Background capture | HIT (foreground) |
|
|
668
|
+
| ---------------- | ---------------------- | ------------------------------------------------------------------ | ----------------------------------------------------------- |
|
|
669
|
+
| Middleware chain | runs (full) | **NOT re-run** — inherits the request's post-middleware context | runs (full) — commit point is after it |
|
|
670
|
+
| `router.match` | runs | re-runs under a derived context | runs (behind the flushed prelude) |
|
|
671
|
+
| Handlers | run | run on UNCACHED segments; `cache()`d segments replay (mixed-chain) | run (same mixed-chain rules as any render) |
|
|
672
|
+
| Loaders | run **fresh** | LIVE lane (`loading()`): MASKED; BAKE lane: execute + snapshot-pin | run **fresh** (bake containers overlaid from the snapshot) |
|
|
673
|
+
| Flight render | full | full | full (hydration needs the whole payload — no Flight resume) |
|
|
674
|
+
| HTML production | full fizz | `prerender` + abort → prelude + postponed | `resume` only the holes — O(paths to holes) |
|
|
675
|
+
| Shell store | schedules a bg capture | `putShell(key, …)` | `getShell(key)`; a stale/SWR hit also schedules a recapture |
|
|
676
|
+
| Prelude bytes | — | — | flushed FIRST, before segment resolution starts |
|
|
677
|
+
|
|
678
|
+
Middleware is not re-run during capture because it already ran for the
|
|
679
|
+
triggering request — the capture's derived context inherits the
|
|
680
|
+
post-middleware state (`ctx` variables included, which is what makes
|
|
681
|
+
middleware-derived shell content photograph correctly). Guarding is
|
|
682
|
+
serve-time: the commit point runs the full chain on EVERY serve.
|
|
683
|
+
|
|
684
|
+
Because handlers on uncached segments EXECUTE during capture — and BAKE-lane
|
|
685
|
+
loaders now do too — the `cookies()`/`headers()` capture guard is load-bearing:
|
|
686
|
+
those reads THROW during a capture render (`assertNotInsideShellCapture`), so
|
|
687
|
+
identity can never leak into a shared shell through them. Live-lane loaders
|
|
688
|
+
(behind `loading()`) are exempt: masked at capture, they never run there.
|
|
689
|
+
|
|
690
|
+
## allReady: the SEO/bot story
|
|
691
|
+
|
|
692
|
+
`ssr: { resolveStreaming: ... }` returning `"allReady"` (e.g. for bot user
|
|
693
|
+
agents) bypasses PPR entirely — the request gets one complete, fully-buffered
|
|
694
|
+
axis-1 document. Crawlers that dislike streamed shells get a finished page;
|
|
695
|
+
regular users get the streamed shell. No configuration interaction: allReady
|
|
696
|
+
wins.
|
|
697
|
+
|
|
698
|
+
## Security
|
|
699
|
+
|
|
700
|
+
Shell caching shares one shell per host+URL across all users:
|
|
701
|
+
|
|
702
|
+
**(a) Access control is sound by construction.** The commit point is after ALL
|
|
703
|
+
middleware on every serve. A 401/redirect short-circuit returns before any
|
|
704
|
+
shell byte.
|
|
705
|
+
|
|
706
|
+
**(b) Identity can't leak via cookies/headers.** `cookies()` and `headers()`
|
|
707
|
+
THROW during the background capture render — in handlers AND in bake-lane
|
|
708
|
+
loaders (whose containers would bake). A shell that reads them is
|
|
709
|
+
PPR-ineligible by construction; the live lane (`loading()`) stays exempt.
|
|
710
|
+
|
|
711
|
+
**(c) Residual hazard — middleware-derived per-user state.** A `ctx` variable
|
|
712
|
+
set by an upstream auth middleware and rendered by shell material is
|
|
713
|
+
photographed into the SHARED shell (the capture inherits post-middleware
|
|
714
|
+
state). That is scope fidelity working as designed — for shared values. The
|
|
715
|
+
same hazard reaches BAKE-LANE LOADERS: a loader reading a middleware-provided
|
|
716
|
+
session object (`ctx.get("session")`) never calls `cookies()` itself, so the
|
|
717
|
+
guard cannot see it — whatever it returns as settled container data is
|
|
718
|
+
photographed as the CAPTURING user's state. If the
|
|
719
|
+
value is per-user: shell-cache only public/shared pages, keep per-user content
|
|
720
|
+
in nested pending promises or live-lane (`loading()`) loaders — NOT in a
|
|
721
|
+
bake-lane container — or key per variant at the CDN tier.
|
|
722
|
+
|
|
723
|
+
## What always stays on axis 1
|
|
724
|
+
|
|
725
|
+
Non-GET, non-partial RSC/action/loader fetches, partial requests without an
|
|
726
|
+
eligible captured segment snapshot, per-request CSP nonce, `streamMode:
|
|
727
|
+
"allReady"`, redirects, 404s, error renders, routes without `ppr`, and any store
|
|
728
|
+
without the shell family. A stored shell is invalidated when
|
|
729
|
+
`React.version` changes (postponed state is build-coupled), so deploys
|
|
730
|
+
self-heal via recapture.
|
|
731
|
+
|
|
732
|
+
The per-request CSP nonce guarantee covers BOTH ways a nonce arrives — the
|
|
733
|
+
`createRouter({ nonce })` provider AND a direct `ctx.set(nonce, value)` token
|
|
734
|
+
write in middleware (the `nonce` token from `@rangojs/router`). Either way the
|
|
735
|
+
nonce ends up rendered into the document (`useNonce()` puts the provider nonce
|
|
736
|
+
on every nonced script/style/meta; a token nonce is rendered by whatever app
|
|
737
|
+
code reads `ctx.get(nonce)`), so a shell shared per host+URL cannot bake it
|
|
738
|
+
without freezing one request's nonce for every visitor (the browser's CSP
|
|
739
|
+
would then reject the frozen nonce for all but the capture request). The serve
|
|
740
|
+
gate reads the token off the post-middleware request variables at the commit
|
|
741
|
+
point (which runs after the whole middleware chain), so a middleware-set nonce
|
|
742
|
+
blocks capture the same as a provider one. Because the route DECLARED `ppr`
|
|
743
|
+
but cannot be honored, it logs a once-per-key worker warning (same
|
|
744
|
+
declared-intent-cannot-be-honored doctrine as the missing-store warning) and
|
|
745
|
+
serves pure axis 1 with no `x-rango-shell` header. An undeclared route stays
|
|
746
|
+
silent.
|
|
747
|
+
|
|
748
|
+
### The proper way to supply a nonce
|
|
749
|
+
|
|
750
|
+
`createRouter({ nonce })` is the canonical path — supply the nonce THERE, not
|
|
751
|
+
via a token write. The provider value is threaded into the router's own SSR
|
|
752
|
+
machinery: `NonceContext`/`useNonce()`, automatic nonce attributes on
|
|
753
|
+
`<Scripts />` and `<MetaTags />` output, and the inlined Flight payload
|
|
754
|
+
scripts. It ALSO sets the `nonce` token, so `ctx.get(nonce)` works in
|
|
755
|
+
middleware and handlers for the CSP response header. A direct
|
|
756
|
+
`ctx.set(nonce, value)` write in middleware is app-managed only: the router
|
|
757
|
+
resolves its SSR nonce BEFORE middleware runs, so a token-set value is
|
|
758
|
+
readable via `ctx.get(nonce)` and gates PPR (this section), but the router
|
|
759
|
+
will NOT apply it to its own scripts — `useNonce()` stays undefined and the
|
|
760
|
+
Flight payload scripts carry no nonce, which a nonce-only `script-src` policy
|
|
761
|
+
would then block. If you need a per-request nonce, use the provider; reserve
|
|
762
|
+
the token for READING the value.
|
|
763
|
+
|
|
764
|
+
## Options: PartialPrerenderProps
|
|
765
|
+
|
|
766
|
+
```typescript
|
|
767
|
+
path("/products/:id", Page, { name: "product", ppr: true }, use);
|
|
768
|
+
path(
|
|
769
|
+
"/products/:id",
|
|
770
|
+
Page,
|
|
771
|
+
{ name: "product", ppr: { ttl: 600, swr: 120, tags: ["catalog"] } },
|
|
772
|
+
use,
|
|
773
|
+
);
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
| Field | Default | Notes |
|
|
777
|
+
| ------------------ | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
778
|
+
| `ttl` | `300` | shell freshness window in seconds (`ppr: true` uses the default) |
|
|
779
|
+
| `swr` | — | stale window: serve the stale shell + background recapture |
|
|
780
|
+
| `tags` | — | operational tags UNIONED with the tags the capture render auto-collects — see "Invalidation" below |
|
|
781
|
+
| `maxSnapshotBytes` | 8 MiB | cap on the entry's capture data snapshot; over it the snapshot is skipped (shell still stored, warned once per key) so the entry stays under store limits |
|
|
782
|
+
| `captureTimeout` | 15000ms | capture settle budget; a timed-out capture is refused rather than storing a partial shell |
|
|
783
|
+
|
|
784
|
+
The shell store is always the app-level `createRouter({ cache })` store; the
|
|
785
|
+
default key is `${host}${pathname}${sortedSearch}:shell` (host-scoped so
|
|
786
|
+
multi-tenant shells never collide).
|
|
787
|
+
|
|
788
|
+
These options control the in-function shell entry only. They do not emit HTTP
|
|
789
|
+
`Cache-Control`. Adding `s-maxage` separately allows a platform CDN to cache the
|
|
790
|
+
completed response, including the live-hole output, and CDN hits bypass Rango
|
|
791
|
+
middleware entirely. Only do that for a fully public response whose complete
|
|
792
|
+
output is shared; see `/deployment-caching`.
|
|
793
|
+
|
|
794
|
+
## Invalidation: tags vs revalidate()
|
|
795
|
+
|
|
796
|
+
`updateTag()`/`revalidateTag()` is the ONLY lever that changes the frozen shell
|
|
797
|
+
HTML; `revalidate()` is a DATA lever that never touches it.
|
|
798
|
+
|
|
799
|
+
A captured shell auto-carries the UNION of the non-loader tags recorded during
|
|
800
|
+
the capture render — every `cacheTag(...)` that ran as shell material, whether
|
|
801
|
+
from a `"use cache"` function, a `cache()` segment, or a render-callable
|
|
802
|
+
`cacheTag()` in a plain server component (no `"use cache"`/`cache()` in its
|
|
803
|
+
tree). Loader tags never attach (the holes are already live). `ppr.tags` adds
|
|
804
|
+
operational tags the render cannot know (a tenant id, a deploy marker).
|
|
805
|
+
|
|
806
|
+
| Lever | Reaches the frozen shell? | Reaches the holes? |
|
|
807
|
+
| --------------------------------------------- | ------------------------------------------------------------- | --------------------------------------------------- |
|
|
808
|
+
| `updateTag` / `revalidateTag` on a SHELL tag | YES — drops the shell → MISS → recapture | n/a (holes are already live) |
|
|
809
|
+
| `updateTag` / `revalidateTag` on a LOADER tag | no — loader tags never attach to a shell | drops that loader's cached value (if it `cache()`s) |
|
|
810
|
+
| `revalidate()` (named revalidation contract) | **no** — re-runs segments/loaders for the PAYLOAD, never HTML | yes — the hole re-renders with fresh data |
|
|
811
|
+
|
|
812
|
+
A server action's automatic invalidation refreshes the CLIENT only — it re-runs
|
|
813
|
+
the holes and streams a fresh payload, but does NOT evict the server shell.
|
|
814
|
+
Shell-baked data stays stale until the shell's TTL unless you tag-invalidate it
|
|
815
|
+
(`updateTag` on a shell tag). Data baked into the shell WITHOUT a tag cannot be
|
|
816
|
+
evicted by tag at all — move always-fresh data under a `loading()` hole.
|
|
817
|
+
|
|
818
|
+
## Pitfalls
|
|
819
|
+
|
|
820
|
+
- **A bake-lane loader that reads `cookies()`/`headers()`**: the capture is
|
|
821
|
+
REFUSED (deterministic, once-per-key warned) — the route stays on axis 1.
|
|
822
|
+
Move identity into a nested promise or behind `loading()`.
|
|
823
|
+
- **A bake-lane container that must be fresh per document GET**: it is
|
|
824
|
+
snapshot-pinned for the shell's lifetime by design. Use the live lane
|
|
825
|
+
(`loading()`) or a nested promise instead.
|
|
826
|
+
- **A bake-lane loader slower than `ppr.captureTimeout` (15s by default)**: the
|
|
827
|
+
capture is refused rather than storing a partial shell. Increase the route's
|
|
828
|
+
budget only when the deployment can keep the background/build work alive.
|
|
829
|
+
- **Per-user value in shell material**: baked into the shared shell —
|
|
830
|
+
deterministically, not by race (handler promises deep-settle at the ring-3
|
|
831
|
+
write on cached chains; awaited/resolved values bake everywhere). Put
|
|
832
|
+
per-user data in a nested pending promise or a live-lane (`loading()`)
|
|
833
|
+
loader — a BAKE-lane loader container bakes just like handler material.
|
|
834
|
+
- **The session-object bake trap (the guard cannot save you here)**: the
|
|
835
|
+
capture guard sees `cookies()`/`headers()` calls ONLY. A bake-lane loader
|
|
836
|
+
reading a middleware-provided session object (`ctx.get("session")`) refuses
|
|
837
|
+
nothing. Per-user data survives ONLY behind a nested promise — the shape is
|
|
838
|
+
the declaration, and it holds for BOTH branches regardless of settle timing
|
|
839
|
+
(nested thenables are masked at capture):
|
|
840
|
+
|
|
841
|
+
```typescript
|
|
842
|
+
const CartLoader = createLoader(async (ctx) => {
|
|
843
|
+
const basketId = ctx.get("session")!.get("basketId");
|
|
844
|
+
if (!basketId) return { cart: Promise.resolve(null) }; // nested thenable → masked → hole, fresh per HIT
|
|
845
|
+
return { cart: fetchBasket(basketId) }; // nested thenable → masked → hole, fresh per HIT
|
|
846
|
+
});
|
|
847
|
+
```
|
|
848
|
+
|
|
849
|
+
The remaining trap is returning per-user data as PLAIN container material:
|
|
850
|
+
`return { user: session.user }` bakes it into the shared shell like any
|
|
851
|
+
other settled value — deterministically, not by race. Wrap it in a promise
|
|
852
|
+
(even an already-resolved one) or put the loader on the live lane.
|
|
853
|
+
|
|
854
|
+
- **Theme on a HIT is capture-then-corrected**: the resume tree replays the
|
|
855
|
+
CAPTURE's `initialTheme` (resume requires it to match the frozen prelude);
|
|
856
|
+
the visitor's cookie theme is applied pre-paint by the FOUC script and
|
|
857
|
+
re-synced post-mount by ThemeProvider. Nothing to configure — but a themed
|
|
858
|
+
component in the shell may briefly render the captured theme's markup before
|
|
859
|
+
the post-mount re-sync.
|
|
860
|
+
- **Shell shows CAPTURE-time data for the shell's lifetime**: a `cache()`/`"use
|
|
861
|
+
cache"` value baked into the shell is PINNED at capture (the capture data
|
|
862
|
+
snapshot) and replayed on every HIT, so the shell stays byte-identical to the
|
|
863
|
+
frozen prelude even after that cache entry expires, gets recomputed, or is
|
|
864
|
+
tag-invalidated. This is deliberate — parity beats freshness inside the shell.
|
|
865
|
+
If a shell region needs to be fresh, put it under a hole — `loading()` for
|
|
866
|
+
loader data, or an un-awaited promise under the consumer's `<Suspense>`
|
|
867
|
+
(holes are never pinned) — or make the SHELL itself invalidatable by tagging
|
|
868
|
+
it: call `cacheTag(...)` from the shell-material render code (the render-time
|
|
869
|
+
lever), or add the tag to `ppr.tags` (operational tags the render cannot know —
|
|
870
|
+
a tenant id, a deploy marker). Ring-1/ring-3 tag invalidation does NOT drop the
|
|
871
|
+
shell. Tags are optional: if TTL/SWR is the complete freshness policy, leave
|
|
872
|
+
the shell untagged. Rango does not warn for that choice; with
|
|
873
|
+
`debugShellCapture` enabled, a stored event reports `untaggedBake: true` when
|
|
874
|
+
bake-lane loader material uses TTL/SWR-only invalidation.
|
|
875
|
+
- **Uncached nondeterminism in the shell is a hydration hazard**: a raw
|
|
876
|
+
`Date.now()` / `Math.random()` / uncached `fetch` rendered directly in shell
|
|
877
|
+
material (outside any cache ring) drifts between capture and hit and the
|
|
878
|
+
snapshot CANNOT pin it — it was never a cache read. It will mismatch the frozen
|
|
879
|
+
prelude and detonate hydration. Wrap it in `cache()`/`"use cache"` (then it is
|
|
880
|
+
pinned) or move it under a hole (`loading()`, or a pending-promise
|
|
881
|
+
`<Suspense>` region).
|
|
882
|
+
- **Stacking with `/document-cache` or HTTP CDN caching**: both cache the
|
|
883
|
+
completed composite, including live-hole output, so PPR becomes redundant on
|
|
884
|
+
a hit. A platform CDN also bypasses every Rango middleware. Restrict this to
|
|
885
|
+
fully public, shared responses; see `/deployment-caching`.
|
|
886
|
+
- **Dev + HMR**: works, but edits produce stale shells until TTL/recapture.
|
|
887
|
+
- **Dev cold-start cadence**: expect `MISS -> (in-place retry) -> HIT`. A
|
|
888
|
+
refused capture is negatively cached with an exponential window (1s doubling
|
|
889
|
+
to a 60s cap), so declaring `ppr` on an ineligible route never re-renders it
|
|
890
|
+
on every request.
|
|
891
|
+
- **HIT status is committed at the flush**: a failing hole cannot become a
|
|
892
|
+
500/redirect after the first shell byte — error UI renders inline via
|
|
893
|
+
Suspense/error boundaries (the same property any streamed SSR page has after
|
|
894
|
+
its shell flushes).
|
|
895
|
+
|
|
896
|
+
## Related
|
|
897
|
+
|
|
898
|
+
- `/defer-hydration` — keep the full body HTML in the shell while moving a
|
|
899
|
+
heavy subtree's hydration off the initial main-thread task (gated boundary,
|
|
900
|
+
content-as-fallback)
|
|
901
|
+
- `/document-cache` — whole-response edge caching (no live holes)
|
|
902
|
+
- `/caching` and `/cache-guide` — segment/function caching (axis 1 data)
|
|
903
|
+
- `/shell-manifest` — replayed handles as cache metadata read by live loaders
|
|
904
|
+
- Design doc: `docs/design/ppr-shell-resume.md` in the package
|