@rangojs/router 0.0.0-experimental.tapabs2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/rango.js +8 -40
- 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/event-controller.d.ts +221 -0
- package/dist/types/browser/history-state.d.ts +26 -0
- package/dist/types/browser/index.d.ts +1 -0
- package/dist/types/browser/intercept-utils.d.ts +30 -0
- package/dist/types/browser/invalidate-client-cache.d.ts +17 -0
- package/dist/types/browser/link-interceptor.d.ts +43 -0
- package/dist/types/browser/logging.d.ts +33 -0
- package/dist/types/browser/merge-segment-loaders.d.ts +38 -0
- package/dist/types/browser/navigation-bridge.d.ts +27 -0
- package/dist/types/browser/navigation-client.d.ts +17 -0
- package/dist/types/browser/navigation-store-handle.d.ts +25 -0
- package/dist/types/browser/navigation-store.d.ts +95 -0
- package/dist/types/browser/navigation-transaction.d.ts +75 -0
- package/dist/types/browser/network-error-handler.d.ts +35 -0
- package/dist/types/browser/partial-update.d.ts +61 -0
- package/dist/types/browser/prefetch/cache.d.ts +183 -0
- package/dist/types/browser/prefetch/fetch.d.ts +52 -0
- package/dist/types/browser/prefetch/observer.d.ts +27 -0
- package/dist/types/browser/prefetch/policy.d.ts +13 -0
- package/dist/types/browser/prefetch/queue.d.ts +48 -0
- package/dist/types/browser/prefetch/resource-ready.d.ts +28 -0
- package/dist/types/browser/rango-state.d.ts +52 -0
- package/dist/types/browser/react/Link.d.ts +140 -0
- package/dist/types/browser/react/NavigationProvider.d.ts +88 -0
- package/dist/types/browser/react/ScrollRestoration.d.ts +78 -0
- package/dist/types/browser/react/context.d.ts +54 -0
- package/dist/types/browser/react/filter-segment-order.d.ts +35 -0
- package/dist/types/browser/react/index.d.ts +1 -0
- package/dist/types/browser/react/location-state-shared.d.ts +162 -0
- package/dist/types/browser/react/location-state.d.ts +29 -0
- package/dist/types/browser/react/mount-context.d.ts +23 -0
- package/dist/types/browser/react/nonce-context.d.ts +14 -0
- package/dist/types/browser/react/shallow-equal.d.ts +5 -0
- package/dist/types/browser/react/use-action.d.ts +61 -0
- package/dist/types/browser/react/use-handle.d.ts +21 -0
- package/dist/types/browser/react/use-href.d.ts +32 -0
- package/dist/types/browser/react/use-link-status.d.ts +36 -0
- package/dist/types/browser/react/use-mount.d.ts +24 -0
- package/dist/types/browser/react/use-navigation.d.ts +15 -0
- package/dist/types/browser/react/use-params.d.ts +21 -0
- package/dist/types/browser/react/use-pathname.d.ts +13 -0
- package/dist/types/browser/react/use-reverse.d.ts +40 -0
- package/dist/types/browser/react/use-router.d.ts +23 -0
- package/dist/types/browser/react/use-search-params.d.ts +19 -0
- package/dist/types/browser/react/use-segments.d.ts +29 -0
- package/dist/types/browser/response-adapter.d.ts +58 -0
- package/dist/types/browser/rsc-router.d.ts +141 -0
- package/dist/types/browser/scroll-restoration.d.ts +103 -0
- package/dist/types/browser/segment-reconciler.d.ts +74 -0
- package/dist/types/browser/segment-structure-assert.d.ts +16 -0
- package/dist/types/browser/server-action-bridge.d.ts +29 -0
- package/dist/types/browser/types.d.ts +530 -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 +100 -0
- package/dist/types/build/generate-route-types.d.ts +8 -0
- package/dist/types/build/index.d.ts +21 -0
- package/dist/types/build/prefix-tree-utils.d.ts +56 -0
- package/dist/types/build/route-trie.d.ts +89 -0
- package/dist/types/build/route-types/ast-helpers.d.ts +3 -0
- package/dist/types/build/route-types/ast-route-extraction.d.ts +13 -0
- package/dist/types/build/route-types/codegen.d.ts +16 -0
- package/dist/types/build/route-types/include-resolution.d.ts +74 -0
- package/dist/types/build/route-types/param-extraction.d.ts +13 -0
- package/dist/types/build/route-types/per-module-writer.d.ts +18 -0
- package/dist/types/build/route-types/router-processing.d.ts +82 -0
- package/dist/types/build/route-types/scan-filter.d.ts +17 -0
- package/dist/types/build/route-types/source-scan.d.ts +13 -0
- package/dist/types/build/runtime-discovery.d.ts +24 -0
- package/dist/types/cache/background-task.d.ts +21 -0
- package/dist/types/cache/cache-error.d.ts +71 -0
- package/dist/types/cache/cache-key-utils.d.ts +35 -0
- package/dist/types/cache/cache-policy.d.ts +59 -0
- package/dist/types/cache/cache-runtime.d.ts +51 -0
- package/dist/types/cache/cache-scope.d.ts +134 -0
- package/dist/types/cache/cache-tag.d.ts +79 -0
- package/dist/types/cache/cf/cf-base64.d.ts +4 -0
- package/dist/types/cache/cf/cf-cache-constants.d.ts +105 -0
- package/dist/types/cache/cf/cf-cache-store.d.ts +588 -0
- package/dist/types/cache/cf/cf-cache-types.d.ts +363 -0
- package/dist/types/cache/cf/cf-kv-utils.d.ts +22 -0
- package/dist/types/cache/cf/cf-tag-marker-memo.d.ts +15 -0
- package/dist/types/cache/cf/cf-zone-purge.d.ts +31 -0
- package/dist/types/cache/cf/index.d.ts +4 -0
- package/dist/types/cache/document-cache.d.ts +69 -0
- package/dist/types/cache/handle-capture.d.ts +23 -0
- package/dist/types/cache/handle-snapshot.d.ts +39 -0
- package/dist/types/cache/index.d.ts +7 -0
- package/dist/types/cache/memory-segment-store.d.ts +163 -0
- package/dist/types/cache/profile-registry.d.ts +40 -0
- package/dist/types/cache/read-through-swr.d.ts +60 -0
- package/dist/types/cache/segment-codec.d.ts +78 -0
- package/dist/types/cache/shell-snapshot.d.ts +173 -0
- package/dist/types/cache/tag-invalidation.d.ts +74 -0
- package/dist/types/cache/taint.d.ts +71 -0
- package/dist/types/cache/types.d.ts +418 -0
- package/dist/types/cache/vercel/index.d.ts +1 -0
- package/dist/types/cache/vercel/vercel-cache-store.d.ts +267 -0
- package/dist/types/client.d.ts +184 -0
- package/dist/types/client.rsc.d.ts +39 -0
- package/dist/types/cloudflare/index.d.ts +7 -0
- package/dist/types/cloudflare/tracing.d.ts +53 -0
- package/dist/types/component-utils.d.ts +46 -0
- package/dist/types/components/DefaultDocument.d.ts +13 -0
- package/dist/types/context-var.d.ts +84 -0
- package/dist/types/debug.d.ts +57 -0
- package/dist/types/decode-loader-results.d.ts +5 -0
- package/dist/types/default-error-boundary.d.ts +10 -0
- package/dist/types/defer.d.ts +89 -0
- package/dist/types/deps/browser.d.ts +1 -0
- package/dist/types/deps/html-stream-client.d.ts +1 -0
- package/dist/types/deps/html-stream-server.d.ts +1 -0
- package/dist/types/deps/rsc.d.ts +1 -0
- package/dist/types/deps/ssr.d.ts +1 -0
- package/dist/types/encode-kv.d.ts +35 -0
- package/dist/types/errors.d.ts +226 -0
- package/dist/types/escape-script.d.ts +44 -0
- package/dist/types/handle.d.ts +93 -0
- package/dist/types/handles/MetaTags.d.ts +17 -0
- package/dist/types/handles/Scripts.d.ts +38 -0
- package/dist/types/handles/breadcrumbs.d.ts +43 -0
- package/dist/types/handles/deferred-resolution.d.ts +53 -0
- package/dist/types/handles/is-thenable.d.ts +12 -0
- package/dist/types/handles/meta.d.ts +43 -0
- package/dist/types/handles/script.d.ts +139 -0
- package/dist/types/host/cookie-handler.d.ts +8 -0
- package/dist/types/host/errors.d.ts +40 -0
- package/dist/types/host/index.d.ts +33 -0
- package/dist/types/host/pattern-matcher.d.ts +30 -0
- package/dist/types/host/router.d.ts +12 -0
- package/dist/types/host/testing.d.ts +41 -0
- package/dist/types/host/types.d.ts +148 -0
- package/dist/types/host/utils.d.ts +20 -0
- package/dist/types/href-client.d.ts +214 -0
- package/dist/types/index.d.ts +112 -0
- package/dist/types/index.rsc.d.ts +51 -0
- package/dist/types/internal-debug.d.ts +1 -0
- package/dist/types/loader-store.d.ts +193 -0
- package/dist/types/loader.d.ts +18 -0
- package/dist/types/loader.rsc.d.ts +18 -0
- package/dist/types/missing-id-error.d.ts +1 -0
- package/dist/types/outlet-context.d.ts +12 -0
- package/dist/types/outlet-provider.d.ts +12 -0
- package/dist/types/prerender/build-shell-capture.d.ts +104 -0
- package/dist/types/prerender/param-hash.d.ts +6 -0
- package/dist/types/prerender/shell-manifest-key.d.ts +18 -0
- package/dist/types/prerender/store.d.ts +62 -0
- package/dist/types/prerender.d.ts +292 -0
- package/dist/types/redirect-origin.d.ts +67 -0
- package/dist/types/regex-escape.d.ts +6 -0
- package/dist/types/render-error-thrower.d.ts +13 -0
- package/dist/types/response-utils.d.ts +35 -0
- package/dist/types/reverse.d.ts +206 -0
- package/dist/types/root-error-boundary.d.ts +32 -0
- package/dist/types/route-content-wrapper.d.ts +40 -0
- package/dist/types/route-definition/dsl-helpers.d.ts +130 -0
- package/dist/types/route-definition/helper-factories.d.ts +22 -0
- package/dist/types/route-definition/helpers-types.d.ts +392 -0
- package/dist/types/route-definition/index.d.ts +7 -0
- package/dist/types/route-definition/redirect.d.ts +48 -0
- package/dist/types/route-definition/resolve-handler-use.d.ts +19 -0
- package/dist/types/route-definition/use-item-types.d.ts +1 -0
- package/dist/types/route-definition.d.ts +1 -0
- package/dist/types/route-map-builder.d.ts +127 -0
- package/dist/types/route-name.d.ts +27 -0
- package/dist/types/route-types.d.ts +172 -0
- package/dist/types/router/basename.d.ts +10 -0
- package/dist/types/router/content-negotiation.d.ts +91 -0
- package/dist/types/router/debug-manifest.d.ts +7 -0
- package/dist/types/router/error-handling.d.ts +76 -0
- package/dist/types/router/find-match.d.ts +19 -0
- package/dist/types/router/handler-context.d.ts +41 -0
- package/dist/types/router/instrument.d.ts +161 -0
- package/dist/types/router/intercept-resolution.d.ts +79 -0
- package/dist/types/router/lazy-includes.d.ts +26 -0
- package/dist/types/router/loader-resolution.d.ts +63 -0
- package/dist/types/router/logging.d.ts +41 -0
- package/dist/types/router/manifest.d.ts +8 -0
- package/dist/types/router/match-api.d.ts +19 -0
- package/dist/types/router/match-context.d.ts +184 -0
- package/dist/types/router/match-handlers.d.ts +49 -0
- package/dist/types/router/match-middleware/background-revalidation.d.ts +113 -0
- package/dist/types/router/match-middleware/cache-lookup.d.ts +113 -0
- package/dist/types/router/match-middleware/cache-store.d.ts +112 -0
- package/dist/types/router/match-middleware/index.d.ts +80 -0
- package/dist/types/router/match-middleware/intercept-resolution.d.ts +116 -0
- package/dist/types/router/match-middleware/segment-resolution.d.ts +94 -0
- package/dist/types/router/match-pipelines.d.ts +103 -0
- package/dist/types/router/match-result.d.ts +114 -0
- package/dist/types/router/metrics.d.ts +6 -0
- package/dist/types/router/middleware-types.d.ts +74 -0
- package/dist/types/router/middleware.d.ts +116 -0
- package/dist/types/router/navigation-snapshot.d.ts +22 -0
- package/dist/types/router/params-util.d.ts +8 -0
- package/dist/types/router/parse-pattern.d.ts +38 -0
- package/dist/types/router/pattern-matching.d.ts +169 -0
- package/dist/types/router/prefetch-cache-ttl.d.ts +27 -0
- package/dist/types/router/prefetch-limits.d.ts +20 -0
- package/dist/types/router/prerender-match.d.ts +50 -0
- package/dist/types/router/preview-match.d.ts +22 -0
- package/dist/types/router/request-classification.d.ts +104 -0
- package/dist/types/router/revalidation.d.ts +57 -0
- package/dist/types/router/route-snapshot.d.ts +112 -0
- package/dist/types/router/router-context.d.ts +137 -0
- package/dist/types/router/router-interfaces.d.ts +432 -0
- package/dist/types/router/router-options.d.ts +738 -0
- package/dist/types/router/router-registry.d.ts +15 -0
- package/dist/types/router/segment-resolution/fresh.d.ts +55 -0
- package/dist/types/router/segment-resolution/helpers.d.ts +93 -0
- package/dist/types/router/segment-resolution/loader-cache.d.ts +33 -0
- package/dist/types/router/segment-resolution/loader-mask.d.ts +44 -0
- package/dist/types/router/segment-resolution/loader-snapshot.d.ts +90 -0
- package/dist/types/router/segment-resolution/mask-nested.d.ts +53 -0
- package/dist/types/router/segment-resolution/revalidation.d.ts +85 -0
- package/dist/types/router/segment-resolution/static-store.d.ts +17 -0
- package/dist/types/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
- package/dist/types/router/segment-resolution/view-transition-default.d.ts +28 -0
- package/dist/types/router/segment-resolution.d.ts +3 -0
- package/dist/types/router/segment-wrappers.d.ts +53 -0
- package/dist/types/router/state-cookie-name.d.ts +1 -0
- package/dist/types/router/substitute-pattern-params.d.ts +23 -0
- package/dist/types/router/telemetry-otel.d.ts +113 -0
- package/dist/types/router/telemetry.d.ts +216 -0
- package/dist/types/router/timeout.d.ts +96 -0
- package/dist/types/router/tracing.d.ts +125 -0
- package/dist/types/router/trie-matching.d.ts +32 -0
- package/dist/types/router/types.d.ts +98 -0
- package/dist/types/router/url-params.d.ts +26 -0
- package/dist/types/router.d.ts +7 -0
- package/dist/types/rsc/capture-queue.d.ts +6 -0
- package/dist/types/rsc/full-payload.d.ts +22 -0
- package/dist/types/rsc/handler-context.d.ts +31 -0
- package/dist/types/rsc/handler.d.ts +9 -0
- package/dist/types/rsc/helpers.d.ts +124 -0
- package/dist/types/rsc/index.d.ts +17 -0
- package/dist/types/rsc/json-route-result.d.ts +20 -0
- package/dist/types/rsc/loader-fetch.d.ts +14 -0
- package/dist/types/rsc/manifest-init.d.ts +18 -0
- package/dist/types/rsc/nonce.d.ts +28 -0
- package/dist/types/rsc/origin-guard.d.ts +50 -0
- package/dist/types/rsc/progressive-enhancement.d.ts +19 -0
- package/dist/types/rsc/redirect-guard.d.ts +37 -0
- package/dist/types/rsc/render-pipeline.d.ts +138 -0
- package/dist/types/rsc/response-cache-serve.d.ts +46 -0
- package/dist/types/rsc/response-error.d.ts +19 -0
- package/dist/types/rsc/response-route-handler.d.ts +29 -0
- package/dist/types/rsc/rsc-rendering.d.ts +23 -0
- package/dist/types/rsc/runtime-warnings.d.ts +22 -0
- package/dist/types/rsc/server-action.d.ts +68 -0
- package/dist/types/rsc/shell-build-manifest.d.ts +84 -0
- package/dist/types/rsc/shell-capture-constants.d.ts +27 -0
- package/dist/types/rsc/shell-capture.d.ts +374 -0
- package/dist/types/rsc/shell-serve.d.ts +174 -0
- package/dist/types/rsc/ssr-setup.d.ts +73 -0
- package/dist/types/rsc/transition-gate.d.ts +27 -0
- package/dist/types/rsc/types.d.ts +290 -0
- package/dist/types/runtime-env.d.ts +1 -0
- package/dist/types/search-params.d.ts +125 -0
- package/dist/types/segment-content-promise.d.ts +13 -0
- package/dist/types/segment-fragments.d.ts +56 -0
- package/dist/types/segment-loader-promise.d.ts +22 -0
- package/dist/types/segment-system.d.ts +84 -0
- package/dist/types/serialize.d.ts +164 -0
- package/dist/types/server/context.d.ts +494 -0
- package/dist/types/server/cookie-parse.d.ts +10 -0
- package/dist/types/server/cookie-store.d.ts +107 -0
- package/dist/types/server/fetchable-loader-store.d.ts +20 -0
- package/dist/types/server/handle-store.d.ts +100 -0
- package/dist/types/server/loader-registry.d.ts +32 -0
- package/dist/types/server/request-context.d.ts +618 -0
- package/dist/types/server/root-layout.d.ts +3 -0
- package/dist/types/server.d.ts +15 -0
- package/dist/types/ssr/index.d.ts +233 -0
- package/dist/types/ssr/inject-rsc-eager.d.ts +3 -0
- package/dist/types/ssr/preinit-client-references.d.ts +71 -0
- package/dist/types/ssr/ssr-root.d.ts +69 -0
- package/dist/types/static-handler.d.ts +57 -0
- package/dist/types/testing/cache-status.d.ts +63 -0
- package/dist/types/testing/collect-handle.d.ts +20 -0
- package/dist/types/testing/dispatch.d.ts +127 -0
- package/dist/types/testing/dom.entry.d.ts +15 -0
- package/dist/types/testing/e2e/fixture.d.ts +37 -0
- package/dist/types/testing/e2e/index.d.ts +31 -0
- package/dist/types/testing/e2e/matchers.d.ts +17 -0
- package/dist/types/testing/e2e/page-helpers.d.ts +62 -0
- package/dist/types/testing/e2e/parity.d.ts +111 -0
- package/dist/types/testing/e2e/server.d.ts +35 -0
- package/dist/types/testing/flight-matchers.d.ts +55 -0
- package/dist/types/testing/flight-normalize.d.ts +1 -0
- package/dist/types/testing/flight-tree.d.ts +192 -0
- package/dist/types/testing/flight.d.ts +115 -0
- package/dist/types/testing/flight.entry.d.ts +27 -0
- package/dist/types/testing/generated-routes.d.ts +66 -0
- package/dist/types/testing/index.d.ts +54 -0
- package/dist/types/testing/internal/context.d.ts +225 -0
- package/dist/types/testing/internal/flight-client-globals.d.ts +1 -0
- package/dist/types/testing/internal/seed-vars.d.ts +30 -0
- package/dist/types/testing/render-handler.d.ts +160 -0
- package/dist/types/testing/render-route.d.ts +246 -0
- package/dist/types/testing/run-loader.d.ts +186 -0
- package/dist/types/testing/run-middleware.d.ts +132 -0
- package/dist/types/testing/run-transition-when.d.ts +77 -0
- package/dist/types/testing/shell-status.d.ts +58 -0
- package/dist/types/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
- package/dist/types/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
- package/dist/types/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
- package/dist/types/testing/vitest-stubs/version.d.ts +1 -0
- package/dist/types/testing/vitest.d.ts +205 -0
- package/dist/types/theme/ThemeProvider.d.ts +13 -0
- package/dist/types/theme/ThemeScript.d.ts +45 -0
- package/dist/types/theme/constants.d.ts +39 -0
- package/dist/types/theme/index.d.ts +29 -0
- package/dist/types/theme/theme-context.d.ts +21 -0
- package/dist/types/theme/theme-script.d.ts +26 -0
- package/dist/types/theme/types.d.ts +162 -0
- package/dist/types/theme/use-theme.d.ts +8 -0
- package/dist/types/types/boundaries.d.ts +93 -0
- package/dist/types/types/cache-types.d.ts +191 -0
- package/dist/types/types/error-types.d.ts +114 -0
- package/dist/types/types/global-namespace.d.ts +90 -0
- package/dist/types/types/handler-context.d.ts +658 -0
- package/dist/types/types/index.d.ts +11 -0
- package/dist/types/types/loader-types.d.ts +182 -0
- package/dist/types/types/request-scope.d.ts +93 -0
- package/dist/types/types/route-config.d.ts +105 -0
- package/dist/types/types/route-entry.d.ts +95 -0
- package/dist/types/types/segments.d.ts +234 -0
- package/dist/types/types.d.ts +1 -0
- package/dist/types/urls/include-helper.d.ts +17 -0
- package/dist/types/urls/include-provider.d.ts +27 -0
- package/dist/types/urls/index.d.ts +6 -0
- package/dist/types/urls/path-helper-types.d.ts +197 -0
- package/dist/types/urls/path-helper.d.ts +12 -0
- package/dist/types/urls/pattern-types.d.ts +166 -0
- package/dist/types/urls/response-types.d.ts +67 -0
- package/dist/types/urls/type-extraction.d.ts +157 -0
- package/dist/types/urls/urls-function.d.ts +24 -0
- package/dist/types/urls.d.ts +1 -0
- package/dist/types/use-loader.d.ts +150 -0
- package/dist/types/vercel/index.d.ts +10 -0
- package/dist/types/vercel/tracing.d.ts +70 -0
- package/dist/types/vite/debug.d.ts +80 -0
- package/dist/types/vite/discovery/bundle-postprocess.d.ts +12 -0
- package/dist/types/vite/discovery/dev-prerender-cache.d.ts +65 -0
- package/dist/types/vite/discovery/discover-routers.d.ts +17 -0
- package/dist/types/vite/discovery/discovery-errors.d.ts +113 -0
- package/dist/types/vite/discovery/gate-state.d.ts +79 -0
- package/dist/types/vite/discovery/prerender-collection.d.ts +24 -0
- package/dist/types/vite/discovery/route-types-writer.d.ts +32 -0
- package/dist/types/vite/discovery/self-gen-tracking.d.ts +22 -0
- package/dist/types/vite/discovery/shell-prerender-phase.d.ts +40 -0
- package/dist/types/vite/discovery/state.d.ts +162 -0
- package/dist/types/vite/discovery/virtual-module-codegen.d.ts +15 -0
- package/dist/types/vite/index.d.ts +11 -0
- package/dist/types/vite/inject-client-debug.d.ts +56 -0
- package/dist/types/vite/plugin-types.d.ts +298 -0
- package/dist/types/vite/plugins/cjs-to-esm.d.ts +6 -0
- package/dist/types/vite/plugins/client-ref-dedup.d.ts +40 -0
- package/dist/types/vite/plugins/client-ref-hashing.d.ts +35 -0
- package/dist/types/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
- package/dist/types/vite/plugins/expose-action-id.d.ts +18 -0
- package/dist/types/vite/plugins/expose-id-utils.d.ts +37 -0
- package/dist/types/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
- package/dist/types/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
- package/dist/types/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
- package/dist/types/vite/plugins/expose-ids/router-transform.d.ts +13 -0
- package/dist/types/vite/plugins/expose-ids/types.d.ts +29 -0
- package/dist/types/vite/plugins/expose-internal-ids.d.ts +6 -0
- package/dist/types/vite/plugins/performance-tracks.d.ts +25 -0
- package/dist/types/vite/plugins/refresh-cmd.d.ts +20 -0
- package/dist/types/vite/plugins/use-cache-transform.d.ts +20 -0
- package/dist/types/vite/plugins/vercel-output.d.ts +85 -0
- package/dist/types/vite/plugins/version-injector.d.ts +21 -0
- package/dist/types/vite/plugins/version-plugin.d.ts +19 -0
- package/dist/types/vite/plugins/virtual-entries.d.ts +36 -0
- package/dist/types/vite/plugins/virtual-stub-plugin.d.ts +7 -0
- package/dist/types/vite/rango.d.ts +29 -0
- package/dist/types/vite/router-discovery.d.ts +23 -0
- package/dist/types/vite/utils/ast-handler-extract.d.ts +64 -0
- package/dist/types/vite/utils/banner.d.ts +2 -0
- package/dist/types/vite/utils/bundle-analysis.d.ts +28 -0
- package/dist/types/vite/utils/client-chunks.d.ts +55 -0
- package/dist/types/vite/utils/directive-prologue.d.ts +16 -0
- package/dist/types/vite/utils/forward-user-plugins.d.ts +37 -0
- package/dist/types/vite/utils/manifest-utils.d.ts +7 -0
- package/dist/types/vite/utils/package-resolution.d.ts +6 -0
- package/dist/types/vite/utils/prerender-utils.d.ts +32 -0
- package/dist/types/vite/utils/shared-utils.d.ts +55 -0
- package/dist/vite/index.js +1051 -361
- package/package.json +39 -33
- package/skills/catalog.json +6 -0
- package/skills/cloudflare/SKILL.md +149 -0
- package/skills/cloudflare/agents/openai.yaml +4 -0
- package/skills/cloudflare/references/d1-and-local-dev.md +131 -0
- package/skills/cloudflare/references/streaming-and-deploy.md +107 -0
- package/skills/cloudflare/references/webhooks-and-crypto.md +147 -0
- package/skills/composability/SKILL.md +14 -0
- package/skills/debug-manifest/SKILL.md +2 -10
- package/skills/links/SKILL.md +12 -0
- package/skills/middleware/SKILL.md +33 -0
- package/skills/migrate-nextjs/SKILL.md +65 -16
- package/skills/migrate-nextjs/backend-host-swap.md +120 -0
- package/skills/migrate-react-router/SKILL.md +6 -6
- package/skills/mime-routes/SKILL.md +25 -17
- package/skills/ppr/SKILL.md +100 -15
- package/skills/prerender/SKILL.md +44 -1
- package/skills/rango/SKILL.md +10 -10
- package/skills/response-routes/SKILL.md +41 -4
- package/skills/route/SKILL.md +6 -0
- package/skills/testing/SKILL.md +1 -0
- package/skills/testing/cache-prerender.md +43 -2
- package/skills/testing/response-routes.md +2 -2
- package/src/browser/event-controller.ts +16 -2
- package/src/browser/rsc-router.tsx +11 -0
- package/src/build/generate-manifest.ts +5 -36
- package/src/build/route-trie.ts +5 -50
- package/src/cache/cache-key-utils.ts +0 -1
- package/src/cache/cache-scope.ts +41 -3
- package/src/cache/cf/cf-cache-store.ts +465 -56
- package/src/cache/cf/cf-cache-types.ts +66 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +5 -2
- package/src/cache/cf/cf-zone-purge.ts +101 -0
- package/src/cache/cf/index.ts +5 -0
- package/src/cache/handle-snapshot.ts +22 -1
- package/src/cache/index.ts +2 -0
- package/src/cache/memory-segment-store.ts +32 -0
- package/src/cache/segment-codec.ts +47 -0
- package/src/cache/shell-snapshot.ts +79 -14
- package/src/cache/types.ts +38 -0
- package/src/cache/vercel/vercel-cache-store.ts +71 -2
- package/src/deps/ssr.ts +4 -1
- package/src/index.rsc.ts +7 -0
- package/src/index.ts +1 -0
- package/src/prerender/build-shell-capture.ts +447 -0
- package/src/prerender/shell-manifest-key.ts +20 -0
- package/src/prerender/store.ts +10 -1
- package/src/prerender.ts +3 -3
- package/src/redirect-origin.ts +37 -8
- package/src/route-map-builder.ts +8 -8
- package/src/router/content-negotiation.ts +47 -5
- package/src/router/handler-context.ts +18 -10
- package/src/router/intercept-resolution.ts +30 -1
- package/src/router/loader-resolution.ts +16 -0
- package/src/router/match-api.ts +9 -2
- package/src/router/match-handlers.ts +13 -0
- package/src/router/match-middleware/cache-lookup.ts +12 -1
- package/src/router/metrics.ts +17 -2
- package/src/router/middleware-types.ts +17 -0
- package/src/router/middleware.ts +4 -0
- package/src/router/prerender-match.ts +28 -0
- package/src/router/router-interfaces.ts +7 -6
- package/src/router/router-options.ts +13 -8
- package/src/router/segment-resolution/fresh.ts +21 -2
- package/src/router/segment-resolution/helpers.ts +1 -1
- package/src/router/segment-resolution/loader-cache.ts +38 -7
- package/src/router/segment-resolution/mask-nested.ts +19 -3
- package/src/router/segment-resolution/revalidation.ts +9 -0
- package/src/router/telemetry-otel.ts +11 -0
- package/src/router/telemetry.ts +1 -0
- package/src/router/timeout.ts +41 -1
- package/src/router.ts +5 -4
- package/src/rsc/capture-queue.ts +67 -0
- package/src/rsc/handler.ts +151 -77
- package/src/rsc/helpers.ts +67 -4
- package/src/rsc/progressive-enhancement.ts +66 -54
- package/src/rsc/redirect-guard.ts +3 -1
- package/src/rsc/render-pipeline.ts +559 -0
- package/src/rsc/response-cache-serve.ts +39 -18
- package/src/rsc/response-route-handler.ts +9 -45
- package/src/rsc/rsc-rendering.ts +303 -103
- package/src/rsc/server-action.ts +50 -42
- package/src/rsc/shell-build-manifest.ts +316 -0
- package/src/rsc/shell-capture-constants.ts +27 -0
- package/src/rsc/shell-capture.ts +595 -69
- package/src/rsc/shell-serve.ts +133 -3
- package/src/rsc/ssr-setup.ts +102 -23
- package/src/segment-fragments.ts +124 -0
- package/src/server/context.ts +184 -8
- package/src/server/request-context.ts +297 -45
- package/src/ssr/index.tsx +167 -32
- package/src/ssr/preinit-client-references.ts +106 -0
- package/src/ssr/ssr-root.tsx +35 -2
- package/src/testing/dispatch.ts +132 -67
- package/src/testing/e2e/index.ts +8 -0
- package/src/testing/index.ts +9 -1
- package/src/testing/internal/context.ts +9 -0
- package/src/testing/render-handler.ts +15 -1
- package/src/testing/run-middleware.ts +14 -0
- package/src/testing/shell-status.ts +100 -0
- package/src/types/handler-context.ts +13 -2
- package/src/urls/path-helper-types.ts +1 -1
- package/src/urls/pattern-types.ts +29 -0
- package/src/vite/discovery/discover-routers.ts +71 -52
- package/src/vite/discovery/prerender-collection.ts +16 -0
- package/src/vite/discovery/shell-prerender-phase.ts +397 -0
- package/src/vite/discovery/state.ts +44 -0
- package/src/vite/discovery/virtual-module-codegen.ts +126 -20
- package/src/vite/index.ts +1 -0
- package/src/vite/plugin-types.ts +33 -0
- package/src/vite/plugins/version-plugin.ts +8 -0
- package/src/vite/plugins/virtual-entries.ts +37 -4
- package/src/vite/rango.ts +42 -2
- package/src/vite/router-discovery.ts +432 -21
- package/src/vite/utils/package-resolution.ts +1 -0
- package/src/vite/utils/prerender-utils.ts +25 -6
- package/src/vite/utils/shared-utils.ts +4 -2
- package/dist/__internal.d.ts +0 -83
- package/dist/__internal.d.ts.map +0 -1
- package/dist/__internal.js +0 -19
- package/dist/__internal.js.map +0 -1
- package/dist/__mocks__/version.d.ts +0 -7
- package/dist/__mocks__/version.d.ts.map +0 -1
- package/dist/__mocks__/version.js +0 -7
- package/dist/__mocks__/version.js.map +0 -1
- package/dist/__tests__/client-href.test.d.ts +0 -2
- package/dist/__tests__/client-href.test.d.ts.map +0 -1
- package/dist/__tests__/client-href.test.js +0 -74
- package/dist/__tests__/client-href.test.js.map +0 -1
- package/dist/__tests__/component-utils.test.d.ts +0 -2
- package/dist/__tests__/component-utils.test.d.ts.map +0 -1
- package/dist/__tests__/component-utils.test.js +0 -51
- package/dist/__tests__/component-utils.test.js.map +0 -1
- package/dist/__tests__/event-controller.test.d.ts +0 -2
- package/dist/__tests__/event-controller.test.d.ts.map +0 -1
- package/dist/__tests__/event-controller.test.js +0 -538
- package/dist/__tests__/event-controller.test.js.map +0 -1
- package/dist/__tests__/helpers/route-tree.d.ts +0 -118
- package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
- package/dist/__tests__/helpers/route-tree.js +0 -374
- package/dist/__tests__/helpers/route-tree.js.map +0 -1
- package/dist/__tests__/match-result.test.d.ts +0 -2
- package/dist/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/__tests__/match-result.test.js +0 -154
- package/dist/__tests__/match-result.test.js.map +0 -1
- package/dist/__tests__/navigation-store.test.d.ts +0 -2
- package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
- package/dist/__tests__/navigation-store.test.js +0 -440
- package/dist/__tests__/navigation-store.test.js.map +0 -1
- package/dist/__tests__/partial-update.test.d.ts +0 -2
- package/dist/__tests__/partial-update.test.d.ts.map +0 -1
- package/dist/__tests__/partial-update.test.js +0 -1009
- package/dist/__tests__/partial-update.test.js.map +0 -1
- package/dist/__tests__/reverse-types.test.d.ts +0 -8
- package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
- package/dist/__tests__/reverse-types.test.js +0 -656
- package/dist/__tests__/reverse-types.test.js.map +0 -1
- package/dist/__tests__/route-definition.test.d.ts +0 -2
- package/dist/__tests__/route-definition.test.d.ts.map +0 -1
- package/dist/__tests__/route-definition.test.js +0 -55
- package/dist/__tests__/route-definition.test.js.map +0 -1
- package/dist/__tests__/router-helpers.test.d.ts +0 -2
- package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
- package/dist/__tests__/router-helpers.test.js +0 -377
- package/dist/__tests__/router-helpers.test.js.map +0 -1
- package/dist/__tests__/router-integration-2.test.d.ts +0 -2
- package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration-2.test.js +0 -426
- package/dist/__tests__/router-integration-2.test.js.map +0 -1
- package/dist/__tests__/router-integration.test.d.ts +0 -2
- package/dist/__tests__/router-integration.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration.test.js +0 -1051
- package/dist/__tests__/router-integration.test.js.map +0 -1
- package/dist/__tests__/search-params.test.d.ts +0 -5
- package/dist/__tests__/search-params.test.d.ts.map +0 -1
- package/dist/__tests__/search-params.test.js +0 -306
- package/dist/__tests__/search-params.test.js.map +0 -1
- package/dist/__tests__/segment-system.test.d.ts +0 -2
- package/dist/__tests__/segment-system.test.d.ts.map +0 -1
- package/dist/__tests__/segment-system.test.js +0 -627
- package/dist/__tests__/segment-system.test.js.map +0 -1
- package/dist/__tests__/static-handler-types.test.d.ts +0 -8
- package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
- package/dist/__tests__/static-handler-types.test.js +0 -63
- package/dist/__tests__/static-handler-types.test.js.map +0 -1
- package/dist/__tests__/urls.test.d.ts +0 -2
- package/dist/__tests__/urls.test.d.ts.map +0 -1
- package/dist/__tests__/urls.test.js +0 -421
- package/dist/__tests__/urls.test.js.map +0 -1
- package/dist/__tests__/use-mount.test.d.ts +0 -2
- package/dist/__tests__/use-mount.test.d.ts.map +0 -1
- package/dist/__tests__/use-mount.test.js +0 -35
- package/dist/__tests__/use-mount.test.js.map +0 -1
- package/dist/bin/rango.d.ts +0 -2
- package/dist/bin/rango.d.ts.map +0 -1
- package/dist/bin/rango.js.map +0 -1
- package/dist/browser/event-controller.d.ts +0 -191
- package/dist/browser/event-controller.d.ts.map +0 -1
- package/dist/browser/event-controller.js +0 -559
- package/dist/browser/event-controller.js.map +0 -1
- package/dist/browser/index.d.ts +0 -2
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -14
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/link-interceptor.d.ts +0 -38
- package/dist/browser/link-interceptor.d.ts.map +0 -1
- package/dist/browser/link-interceptor.js +0 -99
- package/dist/browser/link-interceptor.js.map +0 -1
- package/dist/browser/logging.d.ts +0 -10
- package/dist/browser/logging.d.ts.map +0 -1
- package/dist/browser/logging.js +0 -29
- package/dist/browser/logging.js.map +0 -1
- package/dist/browser/lru-cache.d.ts +0 -17
- package/dist/browser/lru-cache.d.ts.map +0 -1
- package/dist/browser/lru-cache.js +0 -50
- package/dist/browser/lru-cache.js.map +0 -1
- package/dist/browser/merge-segment-loaders.d.ts +0 -39
- package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
- package/dist/browser/merge-segment-loaders.js +0 -102
- package/dist/browser/merge-segment-loaders.js.map +0 -1
- package/dist/browser/navigation-bridge.d.ts +0 -102
- package/dist/browser/navigation-bridge.d.ts.map +0 -1
- package/dist/browser/navigation-bridge.js +0 -708
- package/dist/browser/navigation-bridge.js.map +0 -1
- package/dist/browser/navigation-client.d.ts +0 -25
- package/dist/browser/navigation-client.d.ts.map +0 -1
- package/dist/browser/navigation-client.js +0 -157
- package/dist/browser/navigation-client.js.map +0 -1
- package/dist/browser/navigation-store.d.ts +0 -101
- package/dist/browser/navigation-store.d.ts.map +0 -1
- package/dist/browser/navigation-store.js +0 -625
- package/dist/browser/navigation-store.js.map +0 -1
- package/dist/browser/partial-update.d.ts +0 -75
- package/dist/browser/partial-update.d.ts.map +0 -1
- package/dist/browser/partial-update.js +0 -426
- package/dist/browser/partial-update.js.map +0 -1
- package/dist/browser/react/Link.d.ts +0 -86
- package/dist/browser/react/Link.d.ts.map +0 -1
- package/dist/browser/react/Link.js +0 -128
- package/dist/browser/react/Link.js.map +0 -1
- package/dist/browser/react/NavigationProvider.d.ts +0 -63
- package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
- package/dist/browser/react/NavigationProvider.js +0 -216
- package/dist/browser/react/NavigationProvider.js.map +0 -1
- package/dist/browser/react/ScrollRestoration.d.ts +0 -75
- package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
- package/dist/browser/react/ScrollRestoration.js +0 -57
- package/dist/browser/react/ScrollRestoration.js.map +0 -1
- package/dist/browser/react/context.d.ts +0 -46
- package/dist/browser/react/context.d.ts.map +0 -1
- package/dist/browser/react/context.js +0 -10
- package/dist/browser/react/context.js.map +0 -1
- package/dist/browser/react/index.d.ts +0 -11
- package/dist/browser/react/index.d.ts.map +0 -1
- package/dist/browser/react/index.js +0 -22
- package/dist/browser/react/index.js.map +0 -1
- package/dist/browser/react/location-state-shared.d.ts +0 -63
- package/dist/browser/react/location-state-shared.d.ts.map +0 -1
- package/dist/browser/react/location-state-shared.js +0 -81
- package/dist/browser/react/location-state-shared.js.map +0 -1
- package/dist/browser/react/location-state.d.ts +0 -23
- package/dist/browser/react/location-state.d.ts.map +0 -1
- package/dist/browser/react/location-state.js +0 -29
- package/dist/browser/react/location-state.js.map +0 -1
- package/dist/browser/react/mount-context.d.ts +0 -24
- package/dist/browser/react/mount-context.d.ts.map +0 -1
- package/dist/browser/react/mount-context.js +0 -24
- package/dist/browser/react/mount-context.js.map +0 -1
- package/dist/browser/react/use-action.d.ts +0 -64
- package/dist/browser/react/use-action.d.ts.map +0 -1
- package/dist/browser/react/use-action.js +0 -134
- package/dist/browser/react/use-action.js.map +0 -1
- package/dist/browser/react/use-client-cache.d.ts +0 -41
- package/dist/browser/react/use-client-cache.d.ts.map +0 -1
- package/dist/browser/react/use-client-cache.js +0 -39
- package/dist/browser/react/use-client-cache.js.map +0 -1
- package/dist/browser/react/use-handle.d.ts +0 -31
- package/dist/browser/react/use-handle.d.ts.map +0 -1
- package/dist/browser/react/use-handle.js +0 -144
- package/dist/browser/react/use-handle.js.map +0 -1
- package/dist/browser/react/use-href.d.ts +0 -33
- package/dist/browser/react/use-href.d.ts.map +0 -1
- package/dist/browser/react/use-href.js +0 -39
- package/dist/browser/react/use-href.js.map +0 -1
- package/dist/browser/react/use-link-status.d.ts +0 -37
- package/dist/browser/react/use-link-status.d.ts.map +0 -1
- package/dist/browser/react/use-link-status.js +0 -99
- package/dist/browser/react/use-link-status.js.map +0 -1
- package/dist/browser/react/use-mount.d.ts +0 -25
- package/dist/browser/react/use-mount.d.ts.map +0 -1
- package/dist/browser/react/use-mount.js +0 -30
- package/dist/browser/react/use-mount.js.map +0 -1
- package/dist/browser/react/use-navigation.d.ts +0 -27
- package/dist/browser/react/use-navigation.d.ts.map +0 -1
- package/dist/browser/react/use-navigation.js +0 -87
- package/dist/browser/react/use-navigation.js.map +0 -1
- package/dist/browser/react/use-segments.d.ts +0 -38
- package/dist/browser/react/use-segments.d.ts.map +0 -1
- package/dist/browser/react/use-segments.js +0 -130
- package/dist/browser/react/use-segments.js.map +0 -1
- package/dist/browser/request-controller.d.ts +0 -26
- package/dist/browser/request-controller.d.ts.map +0 -1
- package/dist/browser/request-controller.js +0 -147
- package/dist/browser/request-controller.js.map +0 -1
- package/dist/browser/rsc-router.d.ts +0 -129
- package/dist/browser/rsc-router.d.ts.map +0 -1
- package/dist/browser/rsc-router.js +0 -195
- package/dist/browser/rsc-router.js.map +0 -1
- package/dist/browser/scroll-restoration.d.ts +0 -93
- package/dist/browser/scroll-restoration.d.ts.map +0 -1
- package/dist/browser/scroll-restoration.js +0 -321
- package/dist/browser/scroll-restoration.js.map +0 -1
- package/dist/browser/segment-structure-assert.d.ts +0 -17
- package/dist/browser/segment-structure-assert.d.ts.map +0 -1
- package/dist/browser/segment-structure-assert.js +0 -59
- package/dist/browser/segment-structure-assert.js.map +0 -1
- package/dist/browser/server-action-bridge.d.ts +0 -26
- package/dist/browser/server-action-bridge.d.ts.map +0 -1
- package/dist/browser/server-action-bridge.js +0 -668
- package/dist/browser/server-action-bridge.js.map +0 -1
- package/dist/browser/shallow.d.ts +0 -12
- package/dist/browser/shallow.d.ts.map +0 -1
- package/dist/browser/shallow.js +0 -34
- package/dist/browser/shallow.js.map +0 -1
- package/dist/browser/types.d.ts +0 -369
- package/dist/browser/types.d.ts.map +0 -1
- package/dist/browser/types.js +0 -2
- package/dist/browser/types.js.map +0 -1
- package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
- package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-cli.test.js +0 -237
- package/dist/build/__tests__/generate-cli.test.js.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.js +0 -119
- package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.js +0 -620
- package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.js +0 -308
- package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
- package/dist/build/generate-manifest.d.ts +0 -81
- package/dist/build/generate-manifest.d.ts.map +0 -1
- package/dist/build/generate-manifest.js +0 -276
- package/dist/build/generate-manifest.js.map +0 -1
- package/dist/build/generate-route-types.d.ts +0 -115
- package/dist/build/generate-route-types.d.ts.map +0 -1
- package/dist/build/generate-route-types.js +0 -740
- package/dist/build/generate-route-types.js.map +0 -1
- package/dist/build/index.d.ts +0 -21
- package/dist/build/index.d.ts.map +0 -1
- package/dist/build/index.js +0 -21
- package/dist/build/index.js.map +0 -1
- package/dist/build/route-trie.d.ts +0 -71
- package/dist/build/route-trie.d.ts.map +0 -1
- package/dist/build/route-trie.js +0 -175
- package/dist/build/route-trie.js.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.js +0 -208
- package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
- package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
- package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
- package/dist/cache/__tests__/document-cache.test.js +0 -345
- package/dist/cache/__tests__/document-cache.test.js.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
- package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
- package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-store.test.js +0 -367
- package/dist/cache/__tests__/memory-store.test.js.map +0 -1
- package/dist/cache/cache-scope.d.ts +0 -102
- package/dist/cache/cache-scope.d.ts.map +0 -1
- package/dist/cache/cache-scope.js +0 -440
- package/dist/cache/cache-scope.js.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
- package/dist/cache/cf/cf-cache-store.d.ts +0 -165
- package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
- package/dist/cache/cf/cf-cache-store.js +0 -242
- package/dist/cache/cf/cf-cache-store.js.map +0 -1
- package/dist/cache/cf/index.d.ts +0 -14
- package/dist/cache/cf/index.d.ts.map +0 -1
- package/dist/cache/cf/index.js +0 -17
- package/dist/cache/cf/index.js.map +0 -1
- package/dist/cache/document-cache.d.ts +0 -64
- package/dist/cache/document-cache.d.ts.map +0 -1
- package/dist/cache/document-cache.js +0 -228
- package/dist/cache/document-cache.js.map +0 -1
- package/dist/cache/index.d.ts +0 -19
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/index.js +0 -21
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/memory-segment-store.d.ts +0 -110
- package/dist/cache/memory-segment-store.d.ts.map +0 -1
- package/dist/cache/memory-segment-store.js +0 -117
- package/dist/cache/memory-segment-store.js.map +0 -1
- package/dist/cache/memory-store.d.ts +0 -41
- package/dist/cache/memory-store.d.ts.map +0 -1
- package/dist/cache/memory-store.js +0 -191
- package/dist/cache/memory-store.js.map +0 -1
- package/dist/cache/types.d.ts +0 -317
- package/dist/cache/types.d.ts.map +0 -1
- package/dist/cache/types.js +0 -12
- package/dist/cache/types.js.map +0 -1
- package/dist/client.d.ts +0 -248
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -367
- package/dist/client.js.map +0 -1
- package/dist/client.rsc.d.ts +0 -26
- package/dist/client.rsc.d.ts.map +0 -1
- package/dist/client.rsc.js +0 -46
- package/dist/client.rsc.js.map +0 -1
- package/dist/component-utils.d.ts +0 -36
- package/dist/component-utils.d.ts.map +0 -1
- package/dist/component-utils.js +0 -61
- package/dist/component-utils.js.map +0 -1
- package/dist/components/DefaultDocument.d.ts +0 -13
- package/dist/components/DefaultDocument.d.ts.map +0 -1
- package/dist/components/DefaultDocument.js +0 -15
- package/dist/components/DefaultDocument.js.map +0 -1
- package/dist/debug.d.ts +0 -58
- package/dist/debug.d.ts.map +0 -1
- package/dist/debug.js +0 -157
- package/dist/debug.js.map +0 -1
- package/dist/default-error-boundary.d.ts +0 -11
- package/dist/default-error-boundary.d.ts.map +0 -1
- package/dist/default-error-boundary.js +0 -45
- package/dist/default-error-boundary.js.map +0 -1
- package/dist/deps/browser.d.ts +0 -2
- package/dist/deps/browser.d.ts.map +0 -1
- package/dist/deps/browser.js +0 -3
- package/dist/deps/browser.js.map +0 -1
- package/dist/deps/html-stream-client.d.ts +0 -2
- package/dist/deps/html-stream-client.d.ts.map +0 -1
- package/dist/deps/html-stream-client.js +0 -3
- package/dist/deps/html-stream-client.js.map +0 -1
- package/dist/deps/html-stream-server.d.ts +0 -2
- package/dist/deps/html-stream-server.d.ts.map +0 -1
- package/dist/deps/html-stream-server.js +0 -3
- package/dist/deps/html-stream-server.js.map +0 -1
- package/dist/deps/rsc.d.ts +0 -2
- package/dist/deps/rsc.d.ts.map +0 -1
- package/dist/deps/rsc.js +0 -4
- package/dist/deps/rsc.js.map +0 -1
- package/dist/deps/ssr.d.ts +0 -2
- package/dist/deps/ssr.d.ts.map +0 -1
- package/dist/deps/ssr.js +0 -3
- package/dist/deps/ssr.js.map +0 -1
- package/dist/errors.d.ts +0 -174
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -241
- package/dist/errors.js.map +0 -1
- package/dist/handle.d.ts +0 -78
- package/dist/handle.d.ts.map +0 -1
- package/dist/handle.js +0 -82
- package/dist/handle.js.map +0 -1
- package/dist/handles/MetaTags.d.ts +0 -14
- package/dist/handles/MetaTags.d.ts.map +0 -1
- package/dist/handles/MetaTags.js +0 -136
- package/dist/handles/MetaTags.js.map +0 -1
- package/dist/handles/index.d.ts +0 -6
- package/dist/handles/index.d.ts.map +0 -1
- package/dist/handles/index.js +0 -6
- package/dist/handles/index.js.map +0 -1
- package/dist/handles/meta.d.ts +0 -39
- package/dist/handles/meta.d.ts.map +0 -1
- package/dist/handles/meta.js +0 -202
- package/dist/handles/meta.js.map +0 -1
- package/dist/host/__tests__/errors.test.d.ts +0 -2
- package/dist/host/__tests__/errors.test.d.ts.map +0 -1
- package/dist/host/__tests__/errors.test.js +0 -76
- package/dist/host/__tests__/errors.test.js.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.js +0 -251
- package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
- package/dist/host/__tests__/router.test.d.ts +0 -2
- package/dist/host/__tests__/router.test.d.ts.map +0 -1
- package/dist/host/__tests__/router.test.js +0 -241
- package/dist/host/__tests__/router.test.js.map +0 -1
- package/dist/host/__tests__/testing.test.d.ts +0 -2
- package/dist/host/__tests__/testing.test.d.ts.map +0 -1
- package/dist/host/__tests__/testing.test.js +0 -64
- package/dist/host/__tests__/testing.test.js.map +0 -1
- package/dist/host/__tests__/utils.test.d.ts +0 -2
- package/dist/host/__tests__/utils.test.d.ts.map +0 -1
- package/dist/host/__tests__/utils.test.js +0 -29
- package/dist/host/__tests__/utils.test.js.map +0 -1
- package/dist/host/cookie-handler.d.ts +0 -34
- package/dist/host/cookie-handler.d.ts.map +0 -1
- package/dist/host/cookie-handler.js +0 -124
- package/dist/host/cookie-handler.js.map +0 -1
- package/dist/host/errors.d.ts +0 -56
- package/dist/host/errors.d.ts.map +0 -1
- package/dist/host/errors.js +0 -79
- package/dist/host/errors.js.map +0 -1
- package/dist/host/index.d.ts +0 -29
- package/dist/host/index.d.ts.map +0 -1
- package/dist/host/index.js +0 -32
- package/dist/host/index.js.map +0 -1
- package/dist/host/pattern-matcher.d.ts +0 -36
- package/dist/host/pattern-matcher.d.ts.map +0 -1
- package/dist/host/pattern-matcher.js +0 -172
- package/dist/host/pattern-matcher.js.map +0 -1
- package/dist/host/router.d.ts +0 -26
- package/dist/host/router.d.ts.map +0 -1
- package/dist/host/router.js +0 -218
- package/dist/host/router.js.map +0 -1
- package/dist/host/testing.d.ts +0 -36
- package/dist/host/testing.d.ts.map +0 -1
- package/dist/host/testing.js +0 -55
- package/dist/host/testing.js.map +0 -1
- package/dist/host/types.d.ts +0 -115
- package/dist/host/types.d.ts.map +0 -1
- package/dist/host/types.js +0 -7
- package/dist/host/types.js.map +0 -1
- package/dist/host/utils.d.ts +0 -21
- package/dist/host/utils.d.ts.map +0 -1
- package/dist/host/utils.js +0 -23
- package/dist/host/utils.js.map +0 -1
- package/dist/href-client.d.ts +0 -131
- package/dist/href-client.d.ts.map +0 -1
- package/dist/href-client.js +0 -64
- package/dist/href-client.js.map +0 -1
- package/dist/href-context.d.ts +0 -29
- package/dist/href-context.d.ts.map +0 -1
- package/dist/href-context.js +0 -21
- package/dist/href-context.js.map +0 -1
- package/dist/index.d.ts +0 -73
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -91
- package/dist/index.js.map +0 -1
- package/dist/index.rsc.d.ts +0 -32
- package/dist/index.rsc.d.ts.map +0 -1
- package/dist/index.rsc.js +0 -40
- package/dist/index.rsc.js.map +0 -1
- package/dist/internal-debug.d.ts +0 -2
- package/dist/internal-debug.d.ts.map +0 -1
- package/dist/internal-debug.js +0 -5
- package/dist/internal-debug.js.map +0 -1
- package/dist/loader.d.ts +0 -14
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -20
- package/dist/loader.js.map +0 -1
- package/dist/loader.rsc.d.ts +0 -19
- package/dist/loader.rsc.d.ts.map +0 -1
- package/dist/loader.rsc.js +0 -99
- package/dist/loader.rsc.js.map +0 -1
- package/dist/network-error-thrower.d.ts +0 -17
- package/dist/network-error-thrower.d.ts.map +0 -1
- package/dist/network-error-thrower.js +0 -14
- package/dist/network-error-thrower.js.map +0 -1
- package/dist/outlet-context.d.ts +0 -13
- package/dist/outlet-context.d.ts.map +0 -1
- package/dist/outlet-context.js +0 -3
- package/dist/outlet-context.js.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.js +0 -148
- package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
- package/dist/prerender/param-hash.d.ts +0 -16
- package/dist/prerender/param-hash.d.ts.map +0 -1
- package/dist/prerender/param-hash.js +0 -36
- package/dist/prerender/param-hash.js.map +0 -1
- package/dist/prerender/store.d.ts +0 -38
- package/dist/prerender/store.d.ts.map +0 -1
- package/dist/prerender/store.js +0 -61
- package/dist/prerender/store.js.map +0 -1
- package/dist/prerender.d.ts +0 -66
- package/dist/prerender.d.ts.map +0 -1
- package/dist/prerender.js +0 -57
- package/dist/prerender.js.map +0 -1
- package/dist/reverse.d.ts +0 -196
- package/dist/reverse.d.ts.map +0 -1
- package/dist/reverse.js +0 -78
- package/dist/reverse.js.map +0 -1
- package/dist/root-error-boundary.d.ts +0 -33
- package/dist/root-error-boundary.d.ts.map +0 -1
- package/dist/root-error-boundary.js +0 -165
- package/dist/root-error-boundary.js.map +0 -1
- package/dist/route-content-wrapper.d.ts +0 -46
- package/dist/route-content-wrapper.d.ts.map +0 -1
- package/dist/route-content-wrapper.js +0 -77
- package/dist/route-content-wrapper.js.map +0 -1
- package/dist/route-definition.d.ts +0 -421
- package/dist/route-definition.d.ts.map +0 -1
- package/dist/route-definition.js +0 -868
- package/dist/route-definition.js.map +0 -1
- package/dist/route-map-builder.d.ts +0 -155
- package/dist/route-map-builder.d.ts.map +0 -1
- package/dist/route-map-builder.js +0 -237
- package/dist/route-map-builder.js.map +0 -1
- package/dist/route-types.d.ts +0 -165
- package/dist/route-types.d.ts.map +0 -1
- package/dist/route-types.js +0 -7
- package/dist/route-types.js.map +0 -1
- package/dist/router/__tests__/handler-context.test.d.ts +0 -2
- package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/handler-context.test.js +0 -65
- package/dist/router/__tests__/handler-context.test.js.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
- package/dist/router/__tests__/match-context.test.d.ts +0 -2
- package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-context.test.js +0 -92
- package/dist/router/__tests__/match-context.test.js.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.js +0 -417
- package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
- package/dist/router/__tests__/match-result.test.d.ts +0 -2
- package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-result.test.js +0 -457
- package/dist/router/__tests__/match-result.test.js.map +0 -1
- package/dist/router/__tests__/on-error.test.d.ts +0 -2
- package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
- package/dist/router/__tests__/on-error.test.js +0 -678
- package/dist/router/__tests__/on-error.test.js.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.js +0 -629
- package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
- package/dist/router/error-handling.d.ts +0 -77
- package/dist/router/error-handling.d.ts.map +0 -1
- package/dist/router/error-handling.js +0 -202
- package/dist/router/error-handling.js.map +0 -1
- package/dist/router/handler-context.d.ts +0 -20
- package/dist/router/handler-context.d.ts.map +0 -1
- package/dist/router/handler-context.js +0 -198
- package/dist/router/handler-context.js.map +0 -1
- package/dist/router/intercept-resolution.d.ts +0 -66
- package/dist/router/intercept-resolution.d.ts.map +0 -1
- package/dist/router/intercept-resolution.js +0 -246
- package/dist/router/intercept-resolution.js.map +0 -1
- package/dist/router/loader-resolution.d.ts +0 -64
- package/dist/router/loader-resolution.d.ts.map +0 -1
- package/dist/router/loader-resolution.js +0 -284
- package/dist/router/loader-resolution.js.map +0 -1
- package/dist/router/logging.d.ts +0 -15
- package/dist/router/logging.d.ts.map +0 -1
- package/dist/router/logging.js +0 -99
- package/dist/router/logging.js.map +0 -1
- package/dist/router/manifest.d.ts +0 -22
- package/dist/router/manifest.d.ts.map +0 -1
- package/dist/router/manifest.js +0 -181
- package/dist/router/manifest.js.map +0 -1
- package/dist/router/match-api.d.ts +0 -35
- package/dist/router/match-api.d.ts.map +0 -1
- package/dist/router/match-api.js +0 -406
- package/dist/router/match-api.js.map +0 -1
- package/dist/router/match-context.d.ts +0 -206
- package/dist/router/match-context.d.ts.map +0 -1
- package/dist/router/match-context.js +0 -17
- package/dist/router/match-context.js.map +0 -1
- package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
- package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
- package/dist/router/match-middleware/background-revalidation.js +0 -75
- package/dist/router/match-middleware/background-revalidation.js.map +0 -1
- package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
- package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-lookup.js +0 -257
- package/dist/router/match-middleware/cache-lookup.js.map +0 -1
- package/dist/router/match-middleware/cache-store.d.ts +0 -113
- package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-store.js +0 -108
- package/dist/router/match-middleware/cache-store.js.map +0 -1
- package/dist/router/match-middleware/index.d.ts +0 -81
- package/dist/router/match-middleware/index.d.ts.map +0 -1
- package/dist/router/match-middleware/index.js +0 -80
- package/dist/router/match-middleware/index.js.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.js +0 -134
- package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
- package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
- package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/segment-resolution.js +0 -53
- package/dist/router/match-middleware/segment-resolution.js.map +0 -1
- package/dist/router/match-pipelines.d.ts +0 -147
- package/dist/router/match-pipelines.d.ts.map +0 -1
- package/dist/router/match-pipelines.js +0 -82
- package/dist/router/match-pipelines.js.map +0 -1
- package/dist/router/match-result.d.ts +0 -126
- package/dist/router/match-result.d.ts.map +0 -1
- package/dist/router/match-result.js +0 -93
- package/dist/router/match-result.js.map +0 -1
- package/dist/router/metrics.d.ts +0 -20
- package/dist/router/metrics.d.ts.map +0 -1
- package/dist/router/metrics.js +0 -47
- package/dist/router/metrics.js.map +0 -1
- package/dist/router/middleware.d.ts +0 -249
- package/dist/router/middleware.d.ts.map +0 -1
- package/dist/router/middleware.js +0 -434
- package/dist/router/middleware.js.map +0 -1
- package/dist/router/middleware.test.d.ts +0 -2
- package/dist/router/middleware.test.d.ts.map +0 -1
- package/dist/router/middleware.test.js +0 -816
- package/dist/router/middleware.test.js.map +0 -1
- package/dist/router/pattern-matching.d.ts +0 -149
- package/dist/router/pattern-matching.d.ts.map +0 -1
- package/dist/router/pattern-matching.js +0 -349
- package/dist/router/pattern-matching.js.map +0 -1
- package/dist/router/revalidation.d.ts +0 -44
- package/dist/router/revalidation.d.ts.map +0 -1
- package/dist/router/revalidation.js +0 -147
- package/dist/router/revalidation.js.map +0 -1
- package/dist/router/router-context.d.ts +0 -135
- package/dist/router/router-context.d.ts.map +0 -1
- package/dist/router/router-context.js +0 -36
- package/dist/router/router-context.js.map +0 -1
- package/dist/router/segment-resolution.d.ts +0 -127
- package/dist/router/segment-resolution.d.ts.map +0 -1
- package/dist/router/segment-resolution.js +0 -919
- package/dist/router/segment-resolution.js.map +0 -1
- package/dist/router/trie-matching.d.ts +0 -40
- package/dist/router/trie-matching.d.ts.map +0 -1
- package/dist/router/trie-matching.js +0 -127
- package/dist/router/trie-matching.js.map +0 -1
- package/dist/router/types.d.ts +0 -136
- package/dist/router/types.d.ts.map +0 -1
- package/dist/router/types.js +0 -7
- package/dist/router/types.js.map +0 -1
- package/dist/router.d.ts +0 -753
- package/dist/router.d.ts.map +0 -1
- package/dist/router.gen.d.ts +0 -6
- package/dist/router.gen.d.ts.map +0 -1
- package/dist/router.gen.js +0 -6
- package/dist/router.gen.js.map +0 -1
- package/dist/router.js +0 -1304
- package/dist/router.js.map +0 -1
- package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
- package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
- package/dist/rsc/__tests__/helpers.test.js +0 -140
- package/dist/rsc/__tests__/helpers.test.js.map +0 -1
- package/dist/rsc/handler.d.ts +0 -45
- package/dist/rsc/handler.d.ts.map +0 -1
- package/dist/rsc/handler.js +0 -1172
- package/dist/rsc/handler.js.map +0 -1
- package/dist/rsc/helpers.d.ts +0 -16
- package/dist/rsc/helpers.d.ts.map +0 -1
- package/dist/rsc/helpers.js +0 -55
- package/dist/rsc/helpers.js.map +0 -1
- package/dist/rsc/index.d.ts +0 -22
- package/dist/rsc/index.d.ts.map +0 -1
- package/dist/rsc/index.js +0 -23
- package/dist/rsc/index.js.map +0 -1
- package/dist/rsc/nonce.d.ts +0 -9
- package/dist/rsc/nonce.d.ts.map +0 -1
- package/dist/rsc/nonce.js +0 -18
- package/dist/rsc/nonce.js.map +0 -1
- package/dist/rsc/types.d.ts +0 -206
- package/dist/rsc/types.d.ts.map +0 -1
- package/dist/rsc/types.js +0 -8
- package/dist/rsc/types.js.map +0 -1
- package/dist/search-params.d.ts +0 -103
- package/dist/search-params.d.ts.map +0 -1
- package/dist/search-params.js +0 -74
- package/dist/search-params.js.map +0 -1
- package/dist/segment-system.d.ts +0 -75
- package/dist/segment-system.d.ts.map +0 -1
- package/dist/segment-system.js +0 -336
- package/dist/segment-system.js.map +0 -1
- package/dist/server/context.d.ts +0 -245
- package/dist/server/context.d.ts.map +0 -1
- package/dist/server/context.js +0 -197
- package/dist/server/context.js.map +0 -1
- package/dist/server/fetchable-loader-store.d.ts +0 -18
- package/dist/server/fetchable-loader-store.d.ts.map +0 -1
- package/dist/server/fetchable-loader-store.js +0 -18
- package/dist/server/fetchable-loader-store.js.map +0 -1
- package/dist/server/handle-store.d.ts +0 -85
- package/dist/server/handle-store.d.ts.map +0 -1
- package/dist/server/handle-store.js +0 -142
- package/dist/server/handle-store.js.map +0 -1
- package/dist/server/loader-registry.d.ts +0 -55
- package/dist/server/loader-registry.d.ts.map +0 -1
- package/dist/server/loader-registry.js +0 -132
- package/dist/server/loader-registry.js.map +0 -1
- package/dist/server/request-context.d.ts +0 -226
- package/dist/server/request-context.d.ts.map +0 -1
- package/dist/server/request-context.js +0 -290
- package/dist/server/request-context.js.map +0 -1
- package/dist/server/root-layout.d.ts +0 -4
- package/dist/server/root-layout.d.ts.map +0 -1
- package/dist/server/root-layout.js +0 -5
- package/dist/server/root-layout.js.map +0 -1
- package/dist/server.d.ts +0 -15
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -20
- package/dist/server.js.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
- package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
- package/dist/ssr/index.d.ts +0 -98
- package/dist/ssr/index.d.ts.map +0 -1
- package/dist/ssr/index.js +0 -158
- package/dist/ssr/index.js.map +0 -1
- package/dist/static-handler.d.ts +0 -50
- package/dist/static-handler.d.ts.map +0 -1
- package/dist/static-handler.gen.d.ts +0 -5
- package/dist/static-handler.gen.d.ts.map +0 -1
- package/dist/static-handler.gen.js +0 -5
- package/dist/static-handler.gen.js.map +0 -1
- package/dist/static-handler.js +0 -29
- package/dist/static-handler.js.map +0 -1
- package/dist/theme/ThemeProvider.d.ts +0 -20
- package/dist/theme/ThemeProvider.d.ts.map +0 -1
- package/dist/theme/ThemeProvider.js +0 -240
- package/dist/theme/ThemeProvider.js.map +0 -1
- package/dist/theme/ThemeScript.d.ts +0 -48
- package/dist/theme/ThemeScript.d.ts.map +0 -1
- package/dist/theme/ThemeScript.js +0 -13
- package/dist/theme/ThemeScript.js.map +0 -1
- package/dist/theme/__tests__/theme.test.d.ts +0 -2
- package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
- package/dist/theme/__tests__/theme.test.js +0 -103
- package/dist/theme/__tests__/theme.test.js.map +0 -1
- package/dist/theme/constants.d.ts +0 -29
- package/dist/theme/constants.d.ts.map +0 -1
- package/dist/theme/constants.js +0 -48
- package/dist/theme/constants.js.map +0 -1
- package/dist/theme/index.d.ts +0 -31
- package/dist/theme/index.d.ts.map +0 -1
- package/dist/theme/index.js +0 -36
- package/dist/theme/index.js.map +0 -1
- package/dist/theme/theme-context.d.ts +0 -40
- package/dist/theme/theme-context.d.ts.map +0 -1
- package/dist/theme/theme-context.js +0 -60
- package/dist/theme/theme-context.js.map +0 -1
- package/dist/theme/theme-script.d.ts +0 -27
- package/dist/theme/theme-script.d.ts.map +0 -1
- package/dist/theme/theme-script.js +0 -147
- package/dist/theme/theme-script.js.map +0 -1
- package/dist/theme/types.d.ts +0 -163
- package/dist/theme/types.d.ts.map +0 -1
- package/dist/theme/types.js +0 -11
- package/dist/theme/types.js.map +0 -1
- package/dist/theme/use-theme.d.ts +0 -12
- package/dist/theme/use-theme.d.ts.map +0 -1
- package/dist/theme/use-theme.js +0 -40
- package/dist/theme/use-theme.js.map +0 -1
- package/dist/types.d.ts +0 -1479
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -10
- package/dist/types.js.map +0 -1
- package/dist/urls.d.ts +0 -441
- package/dist/urls.d.ts.map +0 -1
- package/dist/urls.gen.d.ts +0 -8
- package/dist/urls.gen.d.ts.map +0 -1
- package/dist/urls.gen.js +0 -8
- package/dist/urls.gen.js.map +0 -1
- package/dist/urls.js +0 -443
- package/dist/urls.js.map +0 -1
- package/dist/use-loader.d.ts +0 -127
- package/dist/use-loader.d.ts.map +0 -1
- package/dist/use-loader.js +0 -237
- package/dist/use-loader.js.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
- package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.js +0 -39
- package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
- package/dist/vite/ast-handler-extract.d.ts +0 -49
- package/dist/vite/ast-handler-extract.d.ts.map +0 -1
- package/dist/vite/ast-handler-extract.js +0 -249
- package/dist/vite/ast-handler-extract.js.map +0 -1
- package/dist/vite/expose-action-id.d.ts +0 -19
- package/dist/vite/expose-action-id.d.ts.map +0 -1
- package/dist/vite/expose-action-id.js +0 -250
- package/dist/vite/expose-action-id.js.map +0 -1
- package/dist/vite/expose-id-utils.d.ts +0 -69
- package/dist/vite/expose-id-utils.d.ts.map +0 -1
- package/dist/vite/expose-id-utils.js +0 -289
- package/dist/vite/expose-id-utils.js.map +0 -1
- package/dist/vite/expose-internal-ids.d.ts +0 -22
- package/dist/vite/expose-internal-ids.d.ts.map +0 -1
- package/dist/vite/expose-internal-ids.js +0 -886
- package/dist/vite/expose-internal-ids.js.map +0 -1
- package/dist/vite/index.d.ts +0 -149
- package/dist/vite/index.d.ts.map +0 -1
- package/dist/vite/index.js.bak +0 -5448
- package/dist/vite/index.js.map +0 -1
- package/dist/vite/index.named-routes.gen.ts +0 -103
- package/dist/vite/package-resolution.d.ts +0 -43
- package/dist/vite/package-resolution.d.ts.map +0 -1
- package/dist/vite/package-resolution.js +0 -112
- package/dist/vite/package-resolution.js.map +0 -1
- package/dist/vite/virtual-entries.d.ts +0 -25
- package/dist/vite/virtual-entries.d.ts.map +0 -1
- package/dist/vite/virtual-entries.js +0 -110
- package/dist/vite/virtual-entries.js.map +0 -1
- package/skills/migrate-react-router/cloudflare-workers.md +0 -129
package/src/rsc/shell-capture.ts
CHANGED
|
@@ -20,15 +20,23 @@ import React from "react";
|
|
|
20
20
|
import { bufferToBase64 } from "../cache/cf/cf-base64.js";
|
|
21
21
|
import { reportCacheError } from "../cache/cache-error.js";
|
|
22
22
|
import { runBackground } from "../cache/background-task.js";
|
|
23
|
+
import { enqueueSerializedCapture } from "./capture-queue.js";
|
|
24
|
+
import { SHELL_CAPTURE_MAX_WAIT_MS } from "./shell-capture-constants.js";
|
|
25
|
+
import { INTERNAL_RANGO_DEBUG } from "../internal-debug.js";
|
|
23
26
|
import { observePhase, PHASES } from "../router/instrument.js";
|
|
24
27
|
import {
|
|
25
28
|
runWithRequestContext,
|
|
26
29
|
setRequestContextParams,
|
|
30
|
+
wireRenderBarrier,
|
|
27
31
|
UNTRACKED_BACKGROUND_TASK,
|
|
28
32
|
type RequestContext,
|
|
29
33
|
} from "../server/request-context.js";
|
|
30
34
|
import { createHandleStore, type HandleStore } from "../server/handle-store.js";
|
|
31
|
-
import {
|
|
35
|
+
import {
|
|
36
|
+
maskNestedContainerThenables,
|
|
37
|
+
type MaskReport,
|
|
38
|
+
} from "../router/segment-resolution/mask-nested.js";
|
|
39
|
+
import { isInsideLoaderScope } from "../server/context.js";
|
|
32
40
|
import { isThenable } from "../handles/is-thenable.js";
|
|
33
41
|
import type {
|
|
34
42
|
ShellCacheEntry,
|
|
@@ -41,12 +49,14 @@ import {
|
|
|
41
49
|
} from "../router/segment-resolution/loader-snapshot.js";
|
|
42
50
|
import {
|
|
43
51
|
RecordingShellStore,
|
|
52
|
+
SnapshotOnlySegmentStore,
|
|
44
53
|
getRecordingStore,
|
|
45
54
|
} from "../cache/shell-snapshot.js";
|
|
46
55
|
import type { HandlerContext } from "./handler-context.js";
|
|
47
|
-
import type {
|
|
56
|
+
import type { SSRModule } from "./types.js";
|
|
48
57
|
import { buildFullPayload } from "./full-payload.js";
|
|
49
58
|
import { resolveDeferredHandleValues } from "../handles/deferred-resolution.js";
|
|
59
|
+
import { renderRscFlightStage } from "./render-pipeline.js";
|
|
50
60
|
|
|
51
61
|
/**
|
|
52
62
|
* Task-quantized quiesce: the number of consecutive macrotask hops with zero new
|
|
@@ -71,8 +81,13 @@ import { resolveDeferredHandleValues } from "../handles/deferred-resolution.js";
|
|
|
71
81
|
*/
|
|
72
82
|
const FLIGHT_QUIET_HOPS = 2;
|
|
73
83
|
|
|
74
|
-
/**
|
|
75
|
-
|
|
84
|
+
/**
|
|
85
|
+
* Default capture budget. Canonical value, raise rationale, and ceiling math
|
|
86
|
+
* live on the leaf module (shell-capture-constants.ts, importable from the ssr
|
|
87
|
+
* graph too). Re-exported here so shell-build-manifest.ts's envelope math
|
|
88
|
+
* keeps its existing import site and cannot drift from the capture.
|
|
89
|
+
*/
|
|
90
|
+
export { SHELL_CAPTURE_MAX_WAIT_MS };
|
|
76
91
|
|
|
77
92
|
/**
|
|
78
93
|
* Upper bound on waiting for the capture's DEFERRED cache writes to settle before
|
|
@@ -362,6 +377,254 @@ function warnUntaggedShellBakeOnce(key: string): void {
|
|
|
362
377
|
);
|
|
363
378
|
}
|
|
364
379
|
|
|
380
|
+
/**
|
|
381
|
+
* Default cap (serialized UTF-8 bytes) on the capture data snapshot riding
|
|
382
|
+
* inside a shell entry, when the route's `ppr` option does not set
|
|
383
|
+
* `maxSnapshotBytes`. 8 MiB: the snapshot shares the stored envelope with the
|
|
384
|
+
* base64 prelude and the postponed blob, and the tightest store value limit is
|
|
385
|
+
* Cloudflare KV's 25 MiB — 8 MiB of snapshot leaves the envelope well under it
|
|
386
|
+
* while still fitting any sane pinned-ring payload. Applied ONLY in
|
|
387
|
+
* captureAndStoreShell (the single defaulting site — resolvePprConfig passes
|
|
388
|
+
* the option through undefaulted), so every producer and direct caller gets
|
|
389
|
+
* the same policy. Over the cap the snapshot is skipped (shell still stored;
|
|
390
|
+
* pinned reads drift — see PartialPrerenderProps.maxSnapshotBytes).
|
|
391
|
+
*/
|
|
392
|
+
export const DEFAULT_PPR_MAX_SNAPSHOT_BYTES: number = 8 * 1024 * 1024;
|
|
393
|
+
|
|
394
|
+
/** Cached encoder for the snapshot byte measurement (one per module, not per capture). */
|
|
395
|
+
const SNAPSHOT_BYTE_ENCODER = new TextEncoder();
|
|
396
|
+
|
|
397
|
+
/** Keys already warned about an over-cap snapshot (once per key per isolate). */
|
|
398
|
+
const warnedOverCapSnapshots = new Set<string>();
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* Warn once per key that the capture data snapshot exceeded the route's
|
|
402
|
+
* `maxSnapshotBytes` cap and was skipped. The shell entry is still stored and
|
|
403
|
+
* served — only the pinned-read replay is lost, so shell-baked cached content
|
|
404
|
+
* can drift from the frozen prelude between capture and HIT and hydration
|
|
405
|
+
* repairs it client-side (the pre-snapshot behavior). Once per key: the same
|
|
406
|
+
* page recaptures on every TTL roll and would otherwise re-warn forever.
|
|
407
|
+
*/
|
|
408
|
+
function warnSnapshotOverCapOnce(
|
|
409
|
+
key: string,
|
|
410
|
+
snapshotBytes: number,
|
|
411
|
+
capBytes: number,
|
|
412
|
+
): void {
|
|
413
|
+
if (warnedOverCapSnapshots.has(key)) return;
|
|
414
|
+
warnedOverCapSnapshots.add(key);
|
|
415
|
+
console.warn(
|
|
416
|
+
`[rango] Shell capture for "${key}" recorded a ${snapshotBytes}-byte data ` +
|
|
417
|
+
`snapshot, over the ${capBytes}-byte cap — the snapshot was skipped and ` +
|
|
418
|
+
"the shell was stored without it. The page keeps serving, but cached " +
|
|
419
|
+
"content baked into the shell is no longer pinned: if it drifts before " +
|
|
420
|
+
"the shell's TTL, hydration repairs the mismatch client-side. Raise the " +
|
|
421
|
+
"cap via the route's ppr option ({ maxSnapshotBytes }) if the entry " +
|
|
422
|
+
"still fits your store's value limit (Cloudflare KV: 25 MiB per value), " +
|
|
423
|
+
"or shrink the cache()'d data the shell bakes.",
|
|
424
|
+
);
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* One structured event from the background capture pipeline, mirroring the
|
|
429
|
+
* CFCacheReadDebugEvent pattern (cache/cf/cf-cache-types.ts): typed fields an
|
|
430
|
+
* operator can assert against, emitted per attempt and per skip, so the
|
|
431
|
+
* stored / no-shell / refused / backed-off lifecycle is observable outside
|
|
432
|
+
* dev console warnings. Configured via `createRouter({ debugShellCapture })`.
|
|
433
|
+
*/
|
|
434
|
+
export interface ShellCaptureDebugEvent {
|
|
435
|
+
/** Shell cache key the event is about. */
|
|
436
|
+
key: string;
|
|
437
|
+
/**
|
|
438
|
+
* What happened:
|
|
439
|
+
* - stored / redirect / no-shell / refused: one capture ATTEMPT's outcome
|
|
440
|
+
* (see CaptureAttemptOutcome for the semantics of each)
|
|
441
|
+
* - error: the capture task failed with a genuine error (also routed through
|
|
442
|
+
* reportCacheError; the key is backed off)
|
|
443
|
+
* - skip-in-flight: scheduleShellCapture found a capture already running for
|
|
444
|
+
* the key (stampede guard) and scheduled nothing
|
|
445
|
+
* - skip-backoff: the key is inside its refused-capture backoff window and
|
|
446
|
+
* the capture was not attempted
|
|
447
|
+
* - backoff: the key entered (or escalated) backoff after a terminal
|
|
448
|
+
* no-shell — carries the new backoff state
|
|
449
|
+
*/
|
|
450
|
+
outcome:
|
|
451
|
+
| "stored"
|
|
452
|
+
| "redirect"
|
|
453
|
+
| "no-shell"
|
|
454
|
+
| "refused"
|
|
455
|
+
| "error"
|
|
456
|
+
| "skip-in-flight"
|
|
457
|
+
| "skip-backoff"
|
|
458
|
+
| "backoff";
|
|
459
|
+
/** Attempt number (1 = first, 2 = in-place retry). Absent on skips. */
|
|
460
|
+
attempt?: number;
|
|
461
|
+
/** Wall-clock ms of the whole attempt (barrier + render + drain + put). */
|
|
462
|
+
attemptMs?: number;
|
|
463
|
+
/**
|
|
464
|
+
* Wall-clock ms the pre-render WRITE BARRIER waited on the foreground
|
|
465
|
+
* request's deferred cache writes (bounded by SHELL_CAPTURE_WRITE_BARRIER_MS).
|
|
466
|
+
*/
|
|
467
|
+
barrierWaitMs?: number;
|
|
468
|
+
/**
|
|
469
|
+
* Wall-clock ms spent awaiting the capture's own deferred cache writes
|
|
470
|
+
* before the snapshot drain (bounded by SHELL_SNAPSHOT_WRITE_SETTLE_MS).
|
|
471
|
+
*/
|
|
472
|
+
writeSettleMs?: number;
|
|
473
|
+
/** Stored prelude size in bytes (pre-base64). */
|
|
474
|
+
preludeBytes?: number;
|
|
475
|
+
/** Serialized snapshot size in UTF-8 bytes. Absent when nothing was recorded. */
|
|
476
|
+
snapshotBytes?: number;
|
|
477
|
+
/** True when the snapshot exceeded maxSnapshotBytes and was dropped. */
|
|
478
|
+
snapshotSkipped?: boolean;
|
|
479
|
+
/** Consecutive failure count in the key's backoff entry, when one exists. */
|
|
480
|
+
backoffFailures?: number;
|
|
481
|
+
/** Ms remaining in the key's backoff window, when one exists. */
|
|
482
|
+
backoffRemainingMs?: number;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* Debug sink for the capture pipeline, mirroring {@link CFCacheDebug}: `true`
|
|
487
|
+
* logs each event to console (visible via `wrangler tail`), a function
|
|
488
|
+
* receives the events for programmatic capture. Off by default.
|
|
489
|
+
*/
|
|
490
|
+
export type ShellCaptureDebug =
|
|
491
|
+
| boolean
|
|
492
|
+
| ((event: ShellCaptureDebugEvent) => void);
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Compact single-line form of an event's fields, shared by the console sink
|
|
496
|
+
* and the dev Server-Timing mirror's `desc` (rsc-rendering). Plain
|
|
497
|
+
* alphanumerics/`=`/`-`/`()` only, so it needs no quoted-string escaping.
|
|
498
|
+
*/
|
|
499
|
+
export function describeShellCaptureEvent(
|
|
500
|
+
event: ShellCaptureDebugEvent,
|
|
501
|
+
): string {
|
|
502
|
+
const parts: string[] = [event.outcome];
|
|
503
|
+
if (event.attempt !== undefined) parts.push(`attempt=${event.attempt}`);
|
|
504
|
+
if (event.attemptMs !== undefined) parts.push(`${event.attemptMs}ms`);
|
|
505
|
+
if (event.barrierWaitMs !== undefined) {
|
|
506
|
+
parts.push(`barrier=${event.barrierWaitMs}ms`);
|
|
507
|
+
}
|
|
508
|
+
if (event.writeSettleMs !== undefined) {
|
|
509
|
+
parts.push(`write-settle=${event.writeSettleMs}ms`);
|
|
510
|
+
}
|
|
511
|
+
if (event.preludeBytes !== undefined) {
|
|
512
|
+
parts.push(`prelude=${event.preludeBytes}b`);
|
|
513
|
+
}
|
|
514
|
+
if (event.snapshotBytes !== undefined) {
|
|
515
|
+
parts.push(
|
|
516
|
+
`snapshot=${event.snapshotBytes}b${event.snapshotSkipped ? " (over cap, skipped)" : ""}`,
|
|
517
|
+
);
|
|
518
|
+
}
|
|
519
|
+
if (event.backoffFailures !== undefined) {
|
|
520
|
+
parts.push(`backoff-failures=${event.backoffFailures}`);
|
|
521
|
+
}
|
|
522
|
+
if (event.backoffRemainingMs !== undefined) {
|
|
523
|
+
parts.push(`backoff-remaining=${event.backoffRemainingMs}ms`);
|
|
524
|
+
}
|
|
525
|
+
return parts.join(" ");
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
/** The `debugShellCapture: true` console sink: one compact line per event. */
|
|
529
|
+
function consoleCaptureDebugSink(event: ShellCaptureDebugEvent): void {
|
|
530
|
+
console.log(
|
|
531
|
+
`[ShellCache][debug] ${event.key} ${describeShellCaptureEvent(event)}`,
|
|
532
|
+
);
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
/**
|
|
536
|
+
* Resolve the `debugShellCapture` router option to a callable sink, or
|
|
537
|
+
* undefined when off. The INTERNAL_RANGO_DEBUG env-flag fallback lives HERE
|
|
538
|
+
* (not at a call site) so every producer that resolves a sink inherits it;
|
|
539
|
+
* an explicit `false` wins over the env flag.
|
|
540
|
+
*/
|
|
541
|
+
export function resolveShellCaptureDebugSink(
|
|
542
|
+
option: ShellCaptureDebug | undefined,
|
|
543
|
+
): ((event: ShellCaptureDebugEvent) => void) | undefined {
|
|
544
|
+
if (option === false) return undefined;
|
|
545
|
+
if (option === true) return consoleCaptureDebugSink;
|
|
546
|
+
if (typeof option === "function") return option;
|
|
547
|
+
return INTERNAL_RANGO_DEBUG ? consoleCaptureDebugSink : undefined;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
/**
|
|
551
|
+
* Attempt-terminal outcomes recorded for the dev Server-Timing mirror. Skip
|
|
552
|
+
* events are excluded so a later request's skip cannot overwrite the
|
|
553
|
+
* interesting terminal event before a metrics-enabled request reads it.
|
|
554
|
+
*/
|
|
555
|
+
const TIMING_RECORDED_OUTCOMES = new Set<ShellCaptureDebugEvent["outcome"]>([
|
|
556
|
+
"stored",
|
|
557
|
+
"redirect",
|
|
558
|
+
"no-shell",
|
|
559
|
+
"refused",
|
|
560
|
+
"error",
|
|
561
|
+
]);
|
|
562
|
+
|
|
563
|
+
/**
|
|
564
|
+
* Dev-only last-terminal-event-per-key buffer backing the Server-Timing
|
|
565
|
+
* mirror: the capture runs AFTER its triggering response is committed, so its
|
|
566
|
+
* outcome can only ride a LATER response's header. rsc-rendering consumes this
|
|
567
|
+
* on the next ppr GET for the key when the metrics store is active
|
|
568
|
+
* (debugPerformance) and appends a `ppr:capture` Server-Timing entry. Dev-only
|
|
569
|
+
* (isDevMode) so production isolates never grow the map; FIFO-capped because
|
|
570
|
+
* with debugPerformance OFF nothing ever drains it, and a long dev session
|
|
571
|
+
* sweeping many URLs would otherwise accumulate one entry per shell key
|
|
572
|
+
* forever.
|
|
573
|
+
*/
|
|
574
|
+
const lastCaptureEventsForTiming = new Map<string, ShellCaptureDebugEvent>();
|
|
575
|
+
const MAX_TIMING_EVENT_KEYS = 100;
|
|
576
|
+
|
|
577
|
+
/**
|
|
578
|
+
* Consume (read-and-clear) the buffered terminal capture event for `key`, so
|
|
579
|
+
* one capture reports into exactly one later response's Server-Timing.
|
|
580
|
+
*/
|
|
581
|
+
export function takeCaptureDebugEventForTiming(
|
|
582
|
+
key: string,
|
|
583
|
+
): ShellCaptureDebugEvent | undefined {
|
|
584
|
+
const event = lastCaptureEventsForTiming.get(key);
|
|
585
|
+
if (event) lastCaptureEventsForTiming.delete(key);
|
|
586
|
+
return event;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
/**
|
|
590
|
+
* Publish one capture debug event: buffer terminal outcomes for the dev
|
|
591
|
+
* Server-Timing mirror, then hand the event to the configured sink. A
|
|
592
|
+
* throwing sink is swallowed — diagnostics must never fail a capture.
|
|
593
|
+
*/
|
|
594
|
+
function publishCaptureDebugEvent(
|
|
595
|
+
descriptor: Pick<ShellCaptureDescriptor, "debugSink">,
|
|
596
|
+
event: ShellCaptureDebugEvent,
|
|
597
|
+
): void {
|
|
598
|
+
if (isDevMode() && TIMING_RECORDED_OUTCOMES.has(event.outcome)) {
|
|
599
|
+
// Refresh insertion order for the FIFO cap, then evict the oldest key.
|
|
600
|
+
lastCaptureEventsForTiming.delete(event.key);
|
|
601
|
+
if (lastCaptureEventsForTiming.size >= MAX_TIMING_EVENT_KEYS) {
|
|
602
|
+
const oldest = lastCaptureEventsForTiming.keys().next().value;
|
|
603
|
+
if (oldest !== undefined) lastCaptureEventsForTiming.delete(oldest);
|
|
604
|
+
}
|
|
605
|
+
lastCaptureEventsForTiming.set(event.key, event);
|
|
606
|
+
}
|
|
607
|
+
const sink = descriptor.debugSink;
|
|
608
|
+
if (!sink) return;
|
|
609
|
+
try {
|
|
610
|
+
sink(event);
|
|
611
|
+
} catch {
|
|
612
|
+
// Diagnostics only: a throwing consumer sink must never fail the capture.
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
/** Current backoff state fields for `key` (empty when no backoff entry). */
|
|
617
|
+
function backoffFields(
|
|
618
|
+
key: string,
|
|
619
|
+
): Pick<ShellCaptureDebugEvent, "backoffFailures" | "backoffRemainingMs"> {
|
|
620
|
+
const entry = refusedCaptures.get(key);
|
|
621
|
+
if (!entry) return {};
|
|
622
|
+
return {
|
|
623
|
+
backoffFailures: entry.failures,
|
|
624
|
+
backoffRemainingMs: Math.max(0, entry.until - Date.now()),
|
|
625
|
+
};
|
|
626
|
+
}
|
|
627
|
+
|
|
365
628
|
export interface FlightCaptureGate {
|
|
366
629
|
/** Identity passthrough of the source stream; feed this to captureShellHTML. */
|
|
367
630
|
stream: ReadableStream<Uint8Array>;
|
|
@@ -541,9 +804,32 @@ export interface ShellCaptureDescriptor {
|
|
|
541
804
|
ttl?: number;
|
|
542
805
|
swr?: number;
|
|
543
806
|
tags?: string[];
|
|
807
|
+
/**
|
|
808
|
+
* Per-route capture settle budget in ms (`ppr.captureTimeout`, resolved by
|
|
809
|
+
* resolvePprConfig). Feeds captureShellHTML's maxWaitMs — the ONE deadline
|
|
810
|
+
* bounding the whole capture, so it covers BOTH the fizz prerender AND the
|
|
811
|
+
* deferred-material settle window (the handlesBaked/loader-container
|
|
812
|
+
* holdUntil that keeps the gate from freezing while top-level pushes are
|
|
813
|
+
* pending). Undefined = SHELL_CAPTURE_MAX_WAIT_MS (15_000).
|
|
814
|
+
*/
|
|
815
|
+
captureTimeout?: number;
|
|
544
816
|
store?: SegmentCacheStore<any>;
|
|
545
817
|
/** Gates the concise per-attempt capture breadcrumbs (INTERNAL_RANGO_DEBUG). */
|
|
546
818
|
debug?: boolean;
|
|
819
|
+
/**
|
|
820
|
+
* Cap (serialized UTF-8 bytes) on the entry's capture data snapshot; over it
|
|
821
|
+
* the snapshot is skipped and the shell stored without it (reported once per
|
|
822
|
+
* key). Absent = DEFAULT_PPR_MAX_SNAPSHOT_BYTES, applied in
|
|
823
|
+
* captureAndStoreShell — the single defaulting site.
|
|
824
|
+
*/
|
|
825
|
+
maxSnapshotBytes?: number;
|
|
826
|
+
/**
|
|
827
|
+
* Structured capture-pipeline debug sink, resolved from
|
|
828
|
+
* `createRouter({ debugShellCapture })` (or INTERNAL_RANGO_DEBUG) via
|
|
829
|
+
* {@link resolveShellCaptureDebugSink}. Receives one
|
|
830
|
+
* {@link ShellCaptureDebugEvent} per attempt/skip.
|
|
831
|
+
*/
|
|
832
|
+
debugSink?: (event: ShellCaptureDebugEvent) => void;
|
|
547
833
|
}
|
|
548
834
|
|
|
549
835
|
/**
|
|
@@ -567,10 +853,20 @@ export function scheduleShellCapture(
|
|
|
567
853
|
descriptor: ShellCaptureDescriptor,
|
|
568
854
|
): void {
|
|
569
855
|
const key = descriptor.key;
|
|
570
|
-
if (inFlightCaptures.has(key))
|
|
856
|
+
if (inFlightCaptures.has(key)) {
|
|
857
|
+
publishCaptureDebugEvent(descriptor, { key, outcome: "skip-in-flight" });
|
|
858
|
+
return;
|
|
859
|
+
}
|
|
571
860
|
// Refused/failed within the window → skip the doomed re-render (one probe per
|
|
572
861
|
// key per window per isolate). Expired entries self-evict inside the check.
|
|
573
|
-
if (isCaptureBackedOff(key))
|
|
862
|
+
if (isCaptureBackedOff(key)) {
|
|
863
|
+
publishCaptureDebugEvent(descriptor, {
|
|
864
|
+
key,
|
|
865
|
+
outcome: "skip-backoff",
|
|
866
|
+
...backoffFields(key),
|
|
867
|
+
});
|
|
868
|
+
return;
|
|
869
|
+
}
|
|
574
870
|
inFlightCaptures.add(key);
|
|
575
871
|
const captureTask = async () => {
|
|
576
872
|
try {
|
|
@@ -588,25 +884,43 @@ export function scheduleShellCapture(
|
|
|
588
884
|
// off so the next requests don't re-probe it. A `redirect` has no shell but
|
|
589
885
|
// is not a doomed render — leave the backoff untouched.
|
|
590
886
|
if (outcome === "stored") clearCaptureBackoff(key);
|
|
591
|
-
else if (outcome === "no-shell")
|
|
887
|
+
else if (outcome === "no-shell") {
|
|
888
|
+
markCaptureBackoff(key);
|
|
889
|
+
publishCaptureDebugEvent(descriptor, {
|
|
890
|
+
key,
|
|
891
|
+
outcome: "backoff",
|
|
892
|
+
...backoffFields(key),
|
|
893
|
+
});
|
|
894
|
+
}
|
|
592
895
|
} catch (error) {
|
|
593
896
|
// Detached background task — pass reqCtx so onError still fires when the ALS
|
|
594
897
|
// context is gone. A genuine failure recurs, so back it off too (re-probe
|
|
595
898
|
// once per window, not every request) and report it once.
|
|
596
899
|
markCaptureBackoff(key);
|
|
900
|
+
publishCaptureDebugEvent(descriptor, {
|
|
901
|
+
key,
|
|
902
|
+
outcome: "error",
|
|
903
|
+
...backoffFields(key),
|
|
904
|
+
});
|
|
597
905
|
reportCacheError(error, "cache-write", "[ShellCache] capture", reqCtx);
|
|
598
906
|
} finally {
|
|
599
907
|
inFlightCaptures.delete(key);
|
|
600
908
|
}
|
|
601
909
|
};
|
|
910
|
+
// Serialize capture EXECUTION per isolate (capture-queue.ts): concurrent
|
|
911
|
+
// captures starve each other's task-quantized quiet windows — one grinding
|
|
912
|
+
// capture makes the sibling freeze a trivial prelude and store nothing
|
|
913
|
+
// (rotating eternal-MISS victims on GH runners). The stampede guard above
|
|
914
|
+
// stays per-key (dedupe while queued); the queue is cross-key.
|
|
915
|
+
const serializedTask = () => enqueueSerializedCapture(captureTask);
|
|
602
916
|
// The capture's own task must NOT enter reqCtx._pendingBackgroundTasks: the
|
|
603
917
|
// capture drains that list before rendering (the write-barrier ordering edge),
|
|
604
918
|
// and awaiting its own still-running promise would burn the whole barrier
|
|
605
919
|
// deadline on every capture.
|
|
606
|
-
(
|
|
920
|
+
(serializedTask as { [UNTRACKED_BACKGROUND_TASK]?: boolean })[
|
|
607
921
|
UNTRACKED_BACKGROUND_TASK
|
|
608
922
|
] = true;
|
|
609
|
-
runBackground(reqCtx,
|
|
923
|
+
runBackground(reqCtx, serializedTask);
|
|
610
924
|
}
|
|
611
925
|
|
|
612
926
|
/**
|
|
@@ -620,6 +934,21 @@ export function scheduleShellCapture(
|
|
|
620
934
|
*/
|
|
621
935
|
type CaptureAttemptOutcome = "stored" | "redirect" | "no-shell" | "refused";
|
|
622
936
|
|
|
937
|
+
/**
|
|
938
|
+
* Per-attempt observability fields, filled along the capture path (barrier in
|
|
939
|
+
* attemptCapture, the rest in captureAndStoreShell) and folded into the
|
|
940
|
+
* attempt's {@link ShellCaptureDebugEvent} by runShellCapture. A plain mutable
|
|
941
|
+
* bag, not a return value: captureAndStoreShell's outcome type stays a string
|
|
942
|
+
* union its existing callers (producer B, tests) consume unchanged.
|
|
943
|
+
*/
|
|
944
|
+
interface CaptureAttemptStats {
|
|
945
|
+
barrierWaitMs?: number;
|
|
946
|
+
writeSettleMs?: number;
|
|
947
|
+
preludeBytes?: number;
|
|
948
|
+
snapshotBytes?: number;
|
|
949
|
+
snapshotSkipped?: boolean;
|
|
950
|
+
}
|
|
951
|
+
|
|
623
952
|
/**
|
|
624
953
|
* Run the shell capture with a single in-place retry, then store the result.
|
|
625
954
|
*
|
|
@@ -652,15 +981,37 @@ async function runShellCapture(
|
|
|
652
981
|
? (message: string) => console.log(message)
|
|
653
982
|
: () => {};
|
|
654
983
|
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
984
|
+
// One attempt + its structured debug event: the stats object rides through
|
|
985
|
+
// attemptCapture/captureAndStoreShell collecting the observability fields
|
|
986
|
+
// (barrier wait, write-settle wait, prelude/snapshot bytes), and the event
|
|
987
|
+
// folds them with the outcome. A genuine render error skips the attempt
|
|
988
|
+
// event — scheduleShellCapture's catch publishes the terminal `error` event.
|
|
989
|
+
const timedAttempt = async (
|
|
990
|
+
attempt: number,
|
|
991
|
+
): Promise<CaptureAttemptOutcome> => {
|
|
992
|
+
const stats: CaptureAttemptStats = {};
|
|
993
|
+
const start = performance.now();
|
|
994
|
+
const outcome = await attemptCapture(
|
|
995
|
+
ctx,
|
|
996
|
+
request,
|
|
997
|
+
env,
|
|
998
|
+
url,
|
|
999
|
+
reqCtx,
|
|
1000
|
+
ssrModule,
|
|
1001
|
+
descriptor,
|
|
1002
|
+
stats,
|
|
1003
|
+
);
|
|
1004
|
+
publishCaptureDebugEvent(descriptor, {
|
|
1005
|
+
key: descriptor.key,
|
|
1006
|
+
outcome,
|
|
1007
|
+
attempt,
|
|
1008
|
+
attemptMs: Math.round(performance.now() - start),
|
|
1009
|
+
...stats,
|
|
1010
|
+
});
|
|
1011
|
+
return outcome;
|
|
1012
|
+
};
|
|
1013
|
+
|
|
1014
|
+
const first = await timedAttempt(1);
|
|
664
1015
|
// "refused" is deterministic (identity guard / rejected bake-lane loader —
|
|
665
1016
|
// its own warning already fired): no retry, and the caller backs the key off
|
|
666
1017
|
// exactly like a structural no-shell.
|
|
@@ -677,15 +1028,7 @@ async function runShellCapture(
|
|
|
677
1028
|
`[ShellCache] capture attempt 1/2 for ${descriptor.key} aborted before shell completed (cold modules?) — retrying`,
|
|
678
1029
|
);
|
|
679
1030
|
await delay(retryDelayMs);
|
|
680
|
-
const second = await
|
|
681
|
-
ctx,
|
|
682
|
-
request,
|
|
683
|
-
env,
|
|
684
|
-
url,
|
|
685
|
-
reqCtx,
|
|
686
|
-
ssrModule,
|
|
687
|
-
descriptor,
|
|
688
|
-
);
|
|
1031
|
+
const second = await timedAttempt(2);
|
|
689
1032
|
if (second === "refused") return "no-shell";
|
|
690
1033
|
if (second !== "no-shell") return second;
|
|
691
1034
|
|
|
@@ -701,6 +1044,18 @@ async function runShellCapture(
|
|
|
701
1044
|
return "no-shell";
|
|
702
1045
|
}
|
|
703
1046
|
|
|
1047
|
+
/** Fold the capture's handle-liveness record into the entry flag (true | undefined). */
|
|
1048
|
+
function handlerLayerIsLive(
|
|
1049
|
+
liveness: RequestContext["_shellCaptureHandleLiveness"],
|
|
1050
|
+
): true | undefined {
|
|
1051
|
+
if (!liveness) return undefined;
|
|
1052
|
+
return liveness.holes ||
|
|
1053
|
+
liveness.pendingPushes > 0 ||
|
|
1054
|
+
liveness.handlerInvokedLoader
|
|
1055
|
+
? true
|
|
1056
|
+
: undefined;
|
|
1057
|
+
}
|
|
1058
|
+
|
|
704
1059
|
/**
|
|
705
1060
|
* One capture attempt in a DERIVED request context.
|
|
706
1061
|
*
|
|
@@ -720,6 +1075,9 @@ async function runShellCapture(
|
|
|
720
1075
|
* - _shellCaptureRun: true — the switch loaders/cookies/headers guards read.
|
|
721
1076
|
* - _metricsStore: undefined so the capture never appends to the foreground's
|
|
722
1077
|
* (already-finalized) metrics.
|
|
1078
|
+
* - _renderBarrier family: an own barrier wired to the fresh handle store
|
|
1079
|
+
* (wireRenderBarrier), plus _treeHasStreaming/deadlock-guard resets — the
|
|
1080
|
+
* capture's rendered() lifecycle is its own, not the foreground's.
|
|
723
1081
|
*
|
|
724
1082
|
* The capture is MIXED-CHAIN: its match() behaves like a normal render with
|
|
725
1083
|
* respect to the segment cache — cache()'d segments replay from ring 3, UNCACHED
|
|
@@ -739,6 +1097,7 @@ async function attemptCapture(
|
|
|
739
1097
|
reqCtx: RequestContext<any>,
|
|
740
1098
|
ssrModule: SSRModule,
|
|
741
1099
|
descriptor: ShellCaptureDescriptor,
|
|
1100
|
+
stats: CaptureAttemptStats,
|
|
742
1101
|
): Promise<CaptureAttemptOutcome> {
|
|
743
1102
|
// WRITE BARRIER (ordering edge, not a narrower race): settle the foreground's
|
|
744
1103
|
// already-scheduled background tasks — its deferred ring-3/ring-1 cache writes —
|
|
@@ -749,8 +1108,85 @@ async function attemptCapture(
|
|
|
749
1108
|
// skipped, cache-store middleware's write path gated off by state.cacheHit), so
|
|
750
1109
|
// prelude, snapshot, and ring-3 agree on the foreground's generation. Runs per
|
|
751
1110
|
// attempt (the retry re-checks; already-settled promises are free).
|
|
1111
|
+
const barrierStart = performance.now();
|
|
752
1112
|
await settleTrackedBackgroundTasks(reqCtx, SHELL_CAPTURE_WRITE_BARRIER_MS);
|
|
1113
|
+
stats.barrierWaitMs = Math.round(performance.now() - barrierStart);
|
|
1114
|
+
|
|
1115
|
+
const { derivedCtx, freshHandleStore } = deriveShellCaptureContext(
|
|
1116
|
+
reqCtx,
|
|
1117
|
+
descriptor,
|
|
1118
|
+
);
|
|
1119
|
+
|
|
1120
|
+
return runWithRequestContext(derivedCtx, async () => {
|
|
1121
|
+
const match = await ctx.router.match(request, { env });
|
|
1122
|
+
// A route that redirects has no shell to capture — bail (no store write, no
|
|
1123
|
+
// retry: a redirect is deterministic).
|
|
1124
|
+
if (match.redirect) return "redirect";
|
|
1125
|
+
|
|
1126
|
+
setRequestContextParams(match.params, match.routeName);
|
|
1127
|
+
|
|
1128
|
+
const payload = buildFullPayload(
|
|
1129
|
+
match,
|
|
1130
|
+
ctx,
|
|
1131
|
+
url,
|
|
1132
|
+
derivedCtx,
|
|
1133
|
+
freshHandleStore,
|
|
1134
|
+
);
|
|
1135
|
+
const flightStage = renderRscFlightStage({
|
|
1136
|
+
ctx,
|
|
1137
|
+
request,
|
|
1138
|
+
env,
|
|
1139
|
+
url,
|
|
1140
|
+
payload,
|
|
1141
|
+
tracking: {
|
|
1142
|
+
mode: "full",
|
|
1143
|
+
routeKey: derivedCtx._routeName,
|
|
1144
|
+
},
|
|
1145
|
+
});
|
|
1146
|
+
|
|
1147
|
+
// Pass the descriptor with its STATIC ppr.tags unchanged. The shell's own
|
|
1148
|
+
// render-recorded tags are snapshotted at the putShell WRITE BARRIER inside
|
|
1149
|
+
// captureAndStoreShell, not here: a tag recorded AFTER an await in async shell
|
|
1150
|
+
// content (and tags propagated by async cache()/"use cache" reads) lands after
|
|
1151
|
+
// this synchronous construction point, so snapshotting here dropped it — the
|
|
1152
|
+
// shell-tag snapshot must sit behind the quiesce gate (issue #676).
|
|
1153
|
+
return captureAndStoreShell(
|
|
1154
|
+
ssrModule,
|
|
1155
|
+
flightStage.stream,
|
|
1156
|
+
freshHandleStore,
|
|
1157
|
+
derivedCtx,
|
|
1158
|
+
descriptor,
|
|
1159
|
+
stats,
|
|
1160
|
+
);
|
|
1161
|
+
});
|
|
1162
|
+
}
|
|
1163
|
+
|
|
1164
|
+
/**
|
|
1165
|
+
* The derived capture context and its fresh (mask-funneled) handle store,
|
|
1166
|
+
* shared by BOTH shell producers: the runtime background capture
|
|
1167
|
+
* (attemptCapture, producer A) and the build-time prerender shell capture
|
|
1168
|
+
* (prerender/build-shell-capture.ts, producer B — issue #699). One
|
|
1169
|
+
* implementation so the capture semantics — the nested-thenable mask funnel,
|
|
1170
|
+
* handler-liveness bookkeeping, snapshot recording, the implicit doc-cache
|
|
1171
|
+
* scope — cannot drift between producers.
|
|
1172
|
+
*/
|
|
1173
|
+
export interface CaptureContextDerivation {
|
|
1174
|
+
derivedCtx: RequestContext;
|
|
1175
|
+
freshHandleStore: HandleStore;
|
|
1176
|
+
}
|
|
753
1177
|
|
|
1178
|
+
/**
|
|
1179
|
+
* Derive the capture request context from a base context. Producer A passes
|
|
1180
|
+
* the foreground request's post-middleware context (the derived context
|
|
1181
|
+
* inherits its variables/env/cookie machinery through the prototype);
|
|
1182
|
+
* producer B passes a synthetic build-request context created by
|
|
1183
|
+
* createRequestContext over the build env, with a fresh MemorySegmentCacheStore
|
|
1184
|
+
* as `_cacheStore` so the recording/snapshot machinery arms identically.
|
|
1185
|
+
*/
|
|
1186
|
+
export function deriveShellCaptureContext(
|
|
1187
|
+
reqCtx: RequestContext<any>,
|
|
1188
|
+
descriptor: Pick<ShellCaptureDescriptor, "ttl" | "swr">,
|
|
1189
|
+
): CaptureContextDerivation {
|
|
754
1190
|
const freshHandleStore = createHandleStore();
|
|
755
1191
|
freshHandleStore.onError = reqCtx._handleStore.onError;
|
|
756
1192
|
// Shape = liveness for handles, exactly as for bake-lane loader containers
|
|
@@ -764,21 +1200,83 @@ async function attemptCapture(
|
|
|
764
1200
|
// the store exists only for this capture attempt, so every push wrapper
|
|
765
1201
|
// (setupLoaderAccess, createUseFunction, prerender) inherits the policy and
|
|
766
1202
|
// the foreground store is untouched.
|
|
1203
|
+
// Shell fast path bookkeeping on the same funnel:
|
|
1204
|
+
// - handleLiveness: a nested thenable in a push made OUTSIDE a DSL loader
|
|
1205
|
+
// scope (attribution read synchronously at push time — handler bodies,
|
|
1206
|
+
// handler-invoked ctx.use(loader) callbacks, defers) declares
|
|
1207
|
+
// handler-layer per-request data. Its mask is a hole only a handler
|
|
1208
|
+
// re-run can fill, so the entry must not serve handler-free
|
|
1209
|
+
// (ShellCacheEntry.handlerLiveHoles). Still-pending top-level handler
|
|
1210
|
+
// pushes at the putShell barrier count too — their liveness is unknowable.
|
|
1211
|
+
// - loaderScopedPushValues: DSL-loader pushes re-run fresh on every HIT, so
|
|
1212
|
+
// their captured values must NOT enter a segment record's handle snapshot
|
|
1213
|
+
// (replay would duplicate the fresh push, and their masked nested
|
|
1214
|
+
// promises would stall the Flight handle encode to its timeout). The set
|
|
1215
|
+
// rides the derived context (_shellCaptureLoaderHandleValues) and is
|
|
1216
|
+
// applied ONLY at the captureHandles cache-write call site — every other
|
|
1217
|
+
// getDataForSegment consumer (the render-barrier snapshot, prerender)
|
|
1218
|
+
// sees every push.
|
|
1219
|
+
const handleLiveness = {
|
|
1220
|
+
holes: false,
|
|
1221
|
+
pendingPushes: 0,
|
|
1222
|
+
handlerInvokedLoader: false,
|
|
1223
|
+
};
|
|
1224
|
+
const loaderScopedPushValues = new WeakSet<object>();
|
|
767
1225
|
const rawCapturePush = freshHandleStore.push.bind(freshHandleStore);
|
|
768
1226
|
freshHandleStore.push = (
|
|
769
1227
|
handleName: string,
|
|
770
1228
|
segmentId: string,
|
|
771
1229
|
value: unknown,
|
|
772
1230
|
) => {
|
|
773
|
-
const
|
|
774
|
-
|
|
775
|
-
|
|
1231
|
+
const pushedInLoaderScope = isInsideLoaderScope();
|
|
1232
|
+
// Single walk: the mask reports whether it masked any nested thenable
|
|
1233
|
+
// (the liveness declaration) while building the capture copy.
|
|
1234
|
+
const maskWithLiveness = (v: unknown): unknown => {
|
|
1235
|
+
const report: MaskReport = { thenable: false };
|
|
1236
|
+
const masked = maskNestedContainerThenables(v, undefined, report);
|
|
1237
|
+
if (!pushedInLoaderScope && report.thenable) {
|
|
1238
|
+
handleLiveness.holes = true;
|
|
1239
|
+
}
|
|
1240
|
+
return masked;
|
|
1241
|
+
};
|
|
1242
|
+
let masked: unknown;
|
|
1243
|
+
if (isThenable(value)) {
|
|
1244
|
+
if (!pushedInLoaderScope) {
|
|
1245
|
+
handleLiveness.pendingPushes++;
|
|
1246
|
+
const settle = () => handleLiveness.pendingPushes--;
|
|
1247
|
+
value.then(settle, settle);
|
|
1248
|
+
}
|
|
1249
|
+
masked = value.then(maskWithLiveness);
|
|
1250
|
+
} else {
|
|
1251
|
+
masked = maskWithLiveness(value);
|
|
1252
|
+
}
|
|
1253
|
+
if (pushedInLoaderScope && typeof masked === "object" && masked !== null) {
|
|
1254
|
+
loaderScopedPushValues.add(masked);
|
|
1255
|
+
}
|
|
776
1256
|
rawCapturePush(handleName, segmentId, masked);
|
|
777
1257
|
};
|
|
778
1258
|
|
|
779
1259
|
const derivedCtx: RequestContext = Object.create(reqCtx);
|
|
780
1260
|
derivedCtx._handleStore = freshHandleStore;
|
|
1261
|
+
// Own render barrier, closure-bound to the derived ctx and the fresh store
|
|
1262
|
+
// (issue #684, plan 009). Without this every _renderBarrier* read fell
|
|
1263
|
+
// through the prototype to the foreground's ALREADY-RESOLVED barrier: a
|
|
1264
|
+
// bake-lane loader's `await ctx.rendered()` resolved instantly and
|
|
1265
|
+
// ctx.use(handle) read the FOREGROUND handle snapshot — foreground
|
|
1266
|
+
// per-request handle data could bake into the shared shell. wireRenderBarrier
|
|
1267
|
+
// also resets _treeHasStreaming (recomputed for the capture's tree) and the
|
|
1268
|
+
// deadlock-guard fields as own properties.
|
|
1269
|
+
wireRenderBarrier(derivedCtx, freshHandleStore);
|
|
1270
|
+
derivedCtx._shellCaptureLoaderHandleValues = loaderScopedPushValues;
|
|
781
1271
|
derivedCtx._requestTags = new Set<string>();
|
|
1272
|
+
// Own explicit-store registry: cache-store resolutions during the capture
|
|
1273
|
+
// (the implicit scope's SnapshotOnlySegmentStore, any per-capture explicit
|
|
1274
|
+
// store instance) must NOT register into the handler-lifetime
|
|
1275
|
+
// _explicitTaggedStores set — a capture-ephemeral store pinned there would
|
|
1276
|
+
// trip the partial-tag-store warning on every later updateTag() and retain
|
|
1277
|
+
// the whole capture snapshot in memory. Capture registrations die with this
|
|
1278
|
+
// context; module-singleton stores stay registered by normal renders.
|
|
1279
|
+
derivedCtx._explicitTaggedStores = new Set();
|
|
782
1280
|
derivedCtx._transitionWhen = [];
|
|
783
1281
|
derivedCtx._shellCaptureRun = true;
|
|
784
1282
|
derivedCtx._metricsStore = undefined;
|
|
@@ -812,6 +1310,7 @@ async function attemptCapture(
|
|
|
812
1310
|
// forwarding to the parent so the write persists and the worker stays alive),
|
|
813
1311
|
// then captureAndStoreShell awaits them before draining. Reads that HIT are
|
|
814
1312
|
// recorded synchronously during the render and need none of this.
|
|
1313
|
+
derivedCtx._shellCaptureHandleLiveness = handleLiveness;
|
|
815
1314
|
if (reqCtx._cacheStore) {
|
|
816
1315
|
const recordingStore = new RecordingShellStore(reqCtx._cacheStore);
|
|
817
1316
|
derivedCtx._cacheStore = recordingStore;
|
|
@@ -820,43 +1319,20 @@ async function attemptCapture(
|
|
|
820
1319
|
recordingStore.trackWrite(p);
|
|
821
1320
|
reqCtx.waitUntil(() => p);
|
|
822
1321
|
};
|
|
1322
|
+
// Shell fast path (capture side): the implicit doc-cache scope makes the
|
|
1323
|
+
// capture's match write ALL matched non-loader segments as one doc-keyed
|
|
1324
|
+
// segment record — into the snapshot only (SnapshotOnlySegmentStore), so
|
|
1325
|
+
// the record dies with the shell entry and the next capture's lookup
|
|
1326
|
+
// still misses (handlers re-run on recapture). Routes deriving their own
|
|
1327
|
+
// cache scope are untouched (resolveShellImplicitCacheScope).
|
|
1328
|
+
derivedCtx._shellImplicitCache = {
|
|
1329
|
+
ttl: descriptor.ttl,
|
|
1330
|
+
swr: descriptor.swr,
|
|
1331
|
+
store: new SnapshotOnlySegmentStore(recordingStore),
|
|
1332
|
+
};
|
|
823
1333
|
}
|
|
824
1334
|
|
|
825
|
-
return
|
|
826
|
-
const match = await ctx.router.match(request, { env });
|
|
827
|
-
// A route that redirects has no shell to capture — bail (no store write, no
|
|
828
|
-
// retry: a redirect is deterministic).
|
|
829
|
-
if (match.redirect) return "redirect";
|
|
830
|
-
|
|
831
|
-
setRequestContextParams(match.params, match.routeName);
|
|
832
|
-
|
|
833
|
-
const payload = buildFullPayload(
|
|
834
|
-
match,
|
|
835
|
-
ctx,
|
|
836
|
-
url,
|
|
837
|
-
derivedCtx,
|
|
838
|
-
freshHandleStore,
|
|
839
|
-
);
|
|
840
|
-
const rscStream = ctx.renderToReadableStream<RscPayload>(payload, {
|
|
841
|
-
onError: (error: unknown) => {
|
|
842
|
-
ctx.callOnError(error, "rendering", { request, url, env });
|
|
843
|
-
},
|
|
844
|
-
});
|
|
845
|
-
|
|
846
|
-
// Pass the descriptor with its STATIC ppr.tags unchanged. The shell's own
|
|
847
|
-
// render-recorded tags are snapshotted at the putShell WRITE BARRIER inside
|
|
848
|
-
// captureAndStoreShell, not here: a tag recorded AFTER an await in async shell
|
|
849
|
-
// content (and tags propagated by async cache()/"use cache" reads) lands after
|
|
850
|
-
// this synchronous construction point, so snapshotting here dropped it — the
|
|
851
|
-
// shell-tag snapshot must sit behind the quiesce gate (issue #676).
|
|
852
|
-
return captureAndStoreShell(
|
|
853
|
-
ssrModule,
|
|
854
|
-
rscStream,
|
|
855
|
-
freshHandleStore,
|
|
856
|
-
derivedCtx,
|
|
857
|
-
descriptor,
|
|
858
|
-
);
|
|
859
|
-
});
|
|
1335
|
+
return { derivedCtx, freshHandleStore };
|
|
860
1336
|
}
|
|
861
1337
|
|
|
862
1338
|
/**
|
|
@@ -878,6 +1354,7 @@ async function captureAndStoreShell(
|
|
|
878
1354
|
handleStore: HandleStore,
|
|
879
1355
|
reqCtx: RequestContext<any>,
|
|
880
1356
|
capture: ShellCaptureDescriptor,
|
|
1357
|
+
stats?: CaptureAttemptStats,
|
|
881
1358
|
): Promise<Exclude<CaptureAttemptOutcome, "redirect">> {
|
|
882
1359
|
const captureShellHTML = ssrModule.captureShellHTML!;
|
|
883
1360
|
|
|
@@ -966,10 +1443,12 @@ async function captureAndStoreShell(
|
|
|
966
1443
|
// captureShellHTML CONSUMES the (gated) stream — it is not also SSR'd.
|
|
967
1444
|
let result: Awaited<ReturnType<typeof captureShellHTML>>;
|
|
968
1445
|
try {
|
|
1446
|
+
// One deadline for the whole capture — semantics spec'd on the option
|
|
1447
|
+
// (PartialPrerenderProps.captureTimeout, urls/pattern-types.ts).
|
|
969
1448
|
result = await observePhase(PHASES.ssr, () =>
|
|
970
1449
|
captureShellHTML(gate.stream, {
|
|
971
1450
|
quiesce,
|
|
972
|
-
maxWaitMs: SHELL_CAPTURE_MAX_WAIT_MS,
|
|
1451
|
+
maxWaitMs: capture.captureTimeout ?? SHELL_CAPTURE_MAX_WAIT_MS,
|
|
973
1452
|
}),
|
|
974
1453
|
);
|
|
975
1454
|
} catch (error) {
|
|
@@ -1005,6 +1484,7 @@ async function captureAndStoreShell(
|
|
|
1005
1484
|
if (result === null) {
|
|
1006
1485
|
return "no-shell";
|
|
1007
1486
|
}
|
|
1487
|
+
if (stats) stats.preludeBytes = result.prelude.length;
|
|
1008
1488
|
|
|
1009
1489
|
// Store per the flag's key/ttl/swr/tags, into the flag's store: the middleware
|
|
1010
1490
|
// threads the SAME store it resolved for its getShell read (options.store ??
|
|
@@ -1044,7 +1524,11 @@ async function captureAndStoreShell(
|
|
|
1044
1524
|
const recording = getRecordingStore(reqCtx._cacheStore);
|
|
1045
1525
|
let snapshot: ShellSnapshotRecord[] | undefined;
|
|
1046
1526
|
if (recording) {
|
|
1527
|
+
const settleStart = performance.now();
|
|
1047
1528
|
await recording.settleWrites(SHELL_SNAPSHOT_WRITE_SETTLE_MS);
|
|
1529
|
+
if (stats) {
|
|
1530
|
+
stats.writeSettleMs = Math.round(performance.now() - settleStart);
|
|
1531
|
+
}
|
|
1048
1532
|
snapshot = recording.drainSnapshot();
|
|
1049
1533
|
}
|
|
1050
1534
|
|
|
@@ -1093,7 +1577,11 @@ async function captureAndStoreShell(
|
|
|
1093
1577
|
(snapshot ??= []).push({
|
|
1094
1578
|
family: "loader",
|
|
1095
1579
|
key: segmentKey,
|
|
1096
|
-
|
|
1580
|
+
// The hole bit rides with the record so the HIT overlay knows
|
|
1581
|
+
// without rescanning whether the pin can resolve immediately
|
|
1582
|
+
// (holes: 0) or must wait for the fresh run's live promises
|
|
1583
|
+
// (holes: 1). See ShellSnapshotLoaderValue.
|
|
1584
|
+
value: { value: serialized, holes: elided.hasHole ? 1 : 0 },
|
|
1097
1585
|
});
|
|
1098
1586
|
}
|
|
1099
1587
|
} catch {
|
|
@@ -1103,6 +1591,29 @@ async function captureAndStoreShell(
|
|
|
1103
1591
|
}
|
|
1104
1592
|
}
|
|
1105
1593
|
|
|
1594
|
+
// Snapshot size guard (issue #651): the snapshot duplicates every pinned
|
|
1595
|
+
// cache value inside the shell entry, so a page over a large cache()
|
|
1596
|
+
// segment can push the stored envelope toward store value limits (KV caps
|
|
1597
|
+
// a value at 25 MiB) with no signal — the kv.put rejects deep inside
|
|
1598
|
+
// waitUntil. Measure the serialized snapshot (UTF-8 bytes of the JSON that
|
|
1599
|
+
// rides in the envelope) AFTER the loader family is appended, and over the
|
|
1600
|
+
// cap store the shell WITHOUT it: pinned reads then fall back to the live
|
|
1601
|
+
// store on a HIT (documented drift — hydration repairs a mismatch
|
|
1602
|
+
// client-side, the pre-snapshot behavior), which beats losing the whole
|
|
1603
|
+
// entry to a store-side write rejection. Reported once per key.
|
|
1604
|
+
if (snapshot && snapshot.length > 0) {
|
|
1605
|
+
const snapshotBytes = SNAPSHOT_BYTE_ENCODER.encode(
|
|
1606
|
+
JSON.stringify(snapshot),
|
|
1607
|
+
).length;
|
|
1608
|
+
if (stats) stats.snapshotBytes = snapshotBytes;
|
|
1609
|
+
const cap = capture.maxSnapshotBytes ?? DEFAULT_PPR_MAX_SNAPSHOT_BYTES;
|
|
1610
|
+
if (snapshotBytes > cap) {
|
|
1611
|
+
warnSnapshotOverCapOnce(capture.key, snapshotBytes, cap);
|
|
1612
|
+
snapshot = undefined;
|
|
1613
|
+
if (stats) stats.snapshotSkipped = true;
|
|
1614
|
+
}
|
|
1615
|
+
}
|
|
1616
|
+
|
|
1106
1617
|
// Shell tags snapshot at the WRITE BARRIER, not at stream construction: by
|
|
1107
1618
|
// here the capture has quiesced and the deferred cache writes were awaited, so
|
|
1108
1619
|
// tags recorded AFTER an await in async shell content (and by async
|
|
@@ -1142,6 +1653,14 @@ async function captureAndStoreShell(
|
|
|
1142
1653
|
// ShellCacheEntry.initialTheme.
|
|
1143
1654
|
initialTheme: reqCtx.theme,
|
|
1144
1655
|
snapshot,
|
|
1656
|
+
// Handler-layer liveness folded at the barrier: nested thenables in
|
|
1657
|
+
// handler-scoped pushes, handler pushes still pending (liveness
|
|
1658
|
+
// unknowable), or a handler-invoked loader execution — any of them
|
|
1659
|
+
// refuses the FAST PATH, not the capture. See
|
|
1660
|
+
// _shellCaptureHandleLiveness.
|
|
1661
|
+
handlerLiveHoles: handlerLayerIsLive(
|
|
1662
|
+
reqCtx._shellCaptureHandleLiveness,
|
|
1663
|
+
),
|
|
1145
1664
|
createdAt: Date.now(),
|
|
1146
1665
|
};
|
|
1147
1666
|
await store.putShell(
|
|
@@ -1172,8 +1691,15 @@ async function captureAndStoreShell(
|
|
|
1172
1691
|
}
|
|
1173
1692
|
}
|
|
1174
1693
|
|
|
1175
|
-
// Exported for unit tests that drive the capture core directly
|
|
1176
|
-
|
|
1694
|
+
// Exported for unit tests that drive the capture core directly, and — with the
|
|
1695
|
+
// cold-graph retry pieces — for producer B (prerender/build-shell-capture.ts),
|
|
1696
|
+
// which mirrors the runtime capture's retry-in-place with the same delay.
|
|
1697
|
+
export {
|
|
1698
|
+
runShellCapture,
|
|
1699
|
+
captureAndStoreShell,
|
|
1700
|
+
delay,
|
|
1701
|
+
SHELL_CAPTURE_RETRY_DELAY_MS,
|
|
1702
|
+
};
|
|
1177
1703
|
|
|
1178
1704
|
// Exported for unit tests that pin the refused-capture backoff policy directly
|
|
1179
1705
|
// (dev cap vs production exponential growth, stored-clears, cold-start re-probe).
|