@rangojs/router 0.1.1 → 0.4.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/README.md +2 -1
- package/dist/types/browser/prefetch/default-strategy.d.ts +22 -0
- package/dist/types/browser/prefetch/runtime.d.ts +0 -1
- package/dist/types/browser/react/Link.d.ts +8 -11
- package/dist/types/browser/types.d.ts +5 -0
- package/dist/types/cache/document-cache.d.ts +3 -1
- package/dist/types/cache/types.d.ts +10 -3
- package/dist/types/route-definition/helpers-types.d.ts +6 -6
- package/dist/types/router/match-handlers.d.ts +2 -3
- package/dist/types/router/prefetch-default.d.ts +28 -0
- package/dist/types/router/router-interfaces.d.ts +7 -0
- package/dist/types/router/router-options.d.ts +30 -0
- package/dist/types/router/segment-resolution/view-transition-default.d.ts +3 -4
- package/dist/types/router/transition-when.d.ts +13 -0
- package/dist/types/rsc/capture-queue.d.ts +6 -0
- package/dist/types/rsc/shell-capture.d.ts +15 -7
- package/dist/types/rsc/shell-serve.d.ts +6 -3
- package/dist/types/rsc/transition-gate.d.ts +10 -14
- package/dist/types/rsc/types.d.ts +2 -0
- package/dist/types/server/request-context.d.ts +5 -1
- package/dist/types/testing/e2e/index.d.ts +3 -3
- package/dist/types/testing/e2e/page-helpers.d.ts +24 -0
- package/dist/types/testing/index.d.ts +2 -2
- package/dist/types/testing/run-transition-when.d.ts +6 -5
- package/dist/types/testing/shell-status.d.ts +23 -3
- package/dist/types/types/segments.d.ts +27 -22
- package/dist/types/urls/path-helper-types.d.ts +4 -3
- package/dist/types.backup/__internal.d.ts +127 -0
- package/dist/types.backup/bin/rango.d.ts +1 -0
- package/dist/types.backup/browser/action-coordinator.d.ts +57 -0
- package/dist/types.backup/browser/action-fence.d.ts +33 -0
- package/dist/types.backup/browser/app-shell.d.ts +34 -0
- package/dist/types.backup/browser/app-version.d.ts +6 -0
- package/dist/types.backup/browser/connection-warmup.d.ts +31 -0
- package/dist/types.backup/browser/cookie-name.d.ts +66 -0
- package/dist/types.backup/browser/event-controller.d.ts +221 -0
- package/dist/types.backup/browser/history-state.d.ts +26 -0
- package/dist/types.backup/browser/index.d.ts +1 -0
- package/dist/types.backup/browser/intercept-utils.d.ts +30 -0
- package/dist/types.backup/browser/invalidate-client-cache.d.ts +17 -0
- package/dist/types.backup/browser/link-interceptor.d.ts +43 -0
- package/dist/types.backup/browser/logging.d.ts +33 -0
- package/dist/types.backup/browser/merge-segment-loaders.d.ts +38 -0
- package/dist/types.backup/browser/navigation-bridge.d.ts +27 -0
- package/dist/types.backup/browser/navigation-client.d.ts +17 -0
- package/dist/types.backup/browser/navigation-store-handle.d.ts +25 -0
- package/dist/types.backup/browser/navigation-store.d.ts +95 -0
- package/dist/types.backup/browser/navigation-transaction.d.ts +75 -0
- package/dist/types.backup/browser/network-error-handler.d.ts +35 -0
- package/dist/types.backup/browser/partial-update.d.ts +61 -0
- package/dist/types.backup/browser/prefetch/cache.d.ts +183 -0
- package/dist/types.backup/browser/prefetch/fetch.d.ts +52 -0
- package/dist/types.backup/browser/prefetch/observer.d.ts +27 -0
- package/dist/types.backup/browser/prefetch/policy.d.ts +13 -0
- package/dist/types.backup/browser/prefetch/queue.d.ts +48 -0
- package/dist/types.backup/browser/prefetch/resource-ready.d.ts +28 -0
- package/dist/types.backup/browser/rango-state.d.ts +52 -0
- package/dist/types.backup/browser/react/Link.d.ts +140 -0
- package/dist/types.backup/browser/react/NavigationProvider.d.ts +88 -0
- package/dist/types.backup/browser/react/ScrollRestoration.d.ts +78 -0
- package/dist/types.backup/browser/react/context.d.ts +54 -0
- package/dist/types.backup/browser/react/filter-segment-order.d.ts +35 -0
- package/dist/types.backup/browser/react/index.d.ts +1 -0
- package/dist/types.backup/browser/react/location-state-shared.d.ts +162 -0
- package/dist/types.backup/browser/react/location-state.d.ts +29 -0
- package/dist/types.backup/browser/react/mount-context.d.ts +23 -0
- package/dist/types.backup/browser/react/nonce-context.d.ts +14 -0
- package/dist/types.backup/browser/react/shallow-equal.d.ts +5 -0
- package/dist/types.backup/browser/react/use-action.d.ts +61 -0
- package/dist/types.backup/browser/react/use-handle.d.ts +21 -0
- package/dist/types.backup/browser/react/use-href.d.ts +32 -0
- package/dist/types.backup/browser/react/use-link-status.d.ts +36 -0
- package/dist/types.backup/browser/react/use-mount.d.ts +24 -0
- package/dist/types.backup/browser/react/use-navigation.d.ts +15 -0
- package/dist/types.backup/browser/react/use-params.d.ts +21 -0
- package/dist/types.backup/browser/react/use-pathname.d.ts +13 -0
- package/dist/types.backup/browser/react/use-reverse.d.ts +40 -0
- package/dist/types.backup/browser/react/use-router.d.ts +23 -0
- package/dist/types.backup/browser/react/use-search-params.d.ts +19 -0
- package/dist/types.backup/browser/react/use-segments.d.ts +29 -0
- package/dist/types.backup/browser/response-adapter.d.ts +58 -0
- package/dist/types.backup/browser/rsc-router.d.ts +141 -0
- package/dist/types.backup/browser/scroll-restoration.d.ts +103 -0
- package/dist/types.backup/browser/segment-reconciler.d.ts +74 -0
- package/dist/types.backup/browser/segment-structure-assert.d.ts +16 -0
- package/dist/types.backup/browser/server-action-bridge.d.ts +29 -0
- package/dist/types.backup/browser/types.d.ts +530 -0
- package/dist/types.backup/browser/validate-redirect-origin.d.ts +28 -0
- package/dist/types.backup/build/collect-fallback-refs.d.ts +5 -0
- package/dist/types.backup/build/generate-manifest.d.ts +100 -0
- package/dist/types.backup/build/generate-route-types.d.ts +8 -0
- package/dist/types.backup/build/index.d.ts +21 -0
- package/dist/types.backup/build/prefix-tree-utils.d.ts +56 -0
- package/dist/types.backup/build/route-trie.d.ts +89 -0
- package/dist/types.backup/build/route-types/ast-helpers.d.ts +3 -0
- package/dist/types.backup/build/route-types/ast-route-extraction.d.ts +13 -0
- package/dist/types.backup/build/route-types/codegen.d.ts +16 -0
- package/dist/types.backup/build/route-types/include-resolution.d.ts +74 -0
- package/dist/types.backup/build/route-types/param-extraction.d.ts +13 -0
- package/dist/types.backup/build/route-types/per-module-writer.d.ts +18 -0
- package/dist/types.backup/build/route-types/router-processing.d.ts +82 -0
- package/dist/types.backup/build/route-types/scan-filter.d.ts +17 -0
- package/dist/types.backup/build/route-types/source-scan.d.ts +13 -0
- package/dist/types.backup/build/runtime-discovery.d.ts +24 -0
- package/dist/types.backup/cache/background-task.d.ts +21 -0
- package/dist/types.backup/cache/cache-error.d.ts +71 -0
- package/dist/types.backup/cache/cache-key-utils.d.ts +35 -0
- package/dist/types.backup/cache/cache-policy.d.ts +59 -0
- package/dist/types.backup/cache/cache-runtime.d.ts +51 -0
- package/dist/types.backup/cache/cache-scope.d.ts +134 -0
- package/dist/types.backup/cache/cache-tag.d.ts +79 -0
- package/dist/types.backup/cache/cf/cf-base64.d.ts +4 -0
- package/dist/types.backup/cache/cf/cf-cache-constants.d.ts +105 -0
- package/dist/types.backup/cache/cf/cf-cache-store.d.ts +481 -0
- package/dist/types.backup/cache/cf/cf-cache-types.d.ts +300 -0
- package/dist/types.backup/cache/cf/cf-kv-utils.d.ts +22 -0
- package/dist/types.backup/cache/cf/cf-tag-marker-memo.d.ts +15 -0
- package/dist/types.backup/cache/cf/index.d.ts +3 -0
- package/dist/types.backup/cache/document-cache.d.ts +69 -0
- package/dist/types.backup/cache/handle-capture.d.ts +23 -0
- package/dist/types.backup/cache/handle-snapshot.d.ts +39 -0
- package/dist/types.backup/cache/index.d.ts +7 -0
- package/dist/types.backup/cache/memory-segment-store.d.ts +163 -0
- package/dist/types.backup/cache/profile-registry.d.ts +40 -0
- package/dist/types.backup/cache/read-through-swr.d.ts +60 -0
- package/dist/types.backup/cache/segment-codec.d.ts +78 -0
- package/dist/types.backup/cache/shell-snapshot.d.ts +162 -0
- package/dist/types.backup/cache/tag-invalidation.d.ts +74 -0
- package/dist/types.backup/cache/taint.d.ts +71 -0
- package/dist/types.backup/cache/types.d.ts +407 -0
- package/dist/types.backup/cache/vercel/index.d.ts +1 -0
- package/dist/types.backup/cache/vercel/vercel-cache-store.d.ts +267 -0
- package/dist/types.backup/client.d.ts +184 -0
- package/dist/types.backup/client.rsc.d.ts +39 -0
- package/dist/types.backup/cloudflare/index.d.ts +7 -0
- package/dist/types.backup/cloudflare/tracing.d.ts +53 -0
- package/dist/types.backup/component-utils.d.ts +46 -0
- package/dist/types.backup/components/DefaultDocument.d.ts +13 -0
- package/dist/types.backup/context-var.d.ts +84 -0
- package/dist/types.backup/debug.d.ts +57 -0
- package/dist/types.backup/decode-loader-results.d.ts +5 -0
- package/dist/types.backup/default-error-boundary.d.ts +10 -0
- package/dist/types.backup/defer.d.ts +89 -0
- package/dist/types.backup/deps/browser.d.ts +1 -0
- package/dist/types.backup/deps/html-stream-client.d.ts +1 -0
- package/dist/types.backup/deps/html-stream-server.d.ts +1 -0
- package/dist/types.backup/deps/rsc.d.ts +1 -0
- package/dist/types.backup/deps/ssr.d.ts +1 -0
- package/dist/types.backup/encode-kv.d.ts +35 -0
- package/dist/types.backup/errors.d.ts +226 -0
- package/dist/types.backup/escape-script.d.ts +44 -0
- package/dist/types.backup/handle.d.ts +93 -0
- package/dist/types.backup/handles/MetaTags.d.ts +17 -0
- package/dist/types.backup/handles/Scripts.d.ts +38 -0
- package/dist/types.backup/handles/breadcrumbs.d.ts +43 -0
- package/dist/types.backup/handles/deferred-resolution.d.ts +53 -0
- package/dist/types.backup/handles/is-thenable.d.ts +12 -0
- package/dist/types.backup/handles/meta.d.ts +43 -0
- package/dist/types.backup/handles/script.d.ts +139 -0
- package/dist/types.backup/host/cookie-handler.d.ts +8 -0
- package/dist/types.backup/host/errors.d.ts +40 -0
- package/dist/types.backup/host/index.d.ts +33 -0
- package/dist/types.backup/host/pattern-matcher.d.ts +30 -0
- package/dist/types.backup/host/router.d.ts +12 -0
- package/dist/types.backup/host/testing.d.ts +41 -0
- package/dist/types.backup/host/types.d.ts +148 -0
- package/dist/types.backup/host/utils.d.ts +20 -0
- package/dist/types.backup/href-client.d.ts +214 -0
- package/dist/types.backup/index.d.ts +112 -0
- package/dist/types.backup/index.rsc.d.ts +51 -0
- package/dist/types.backup/internal-debug.d.ts +1 -0
- package/dist/types.backup/loader-store.d.ts +193 -0
- package/dist/types.backup/loader.d.ts +18 -0
- package/dist/types.backup/loader.rsc.d.ts +18 -0
- package/dist/types.backup/missing-id-error.d.ts +1 -0
- package/dist/types.backup/outlet-context.d.ts +12 -0
- package/dist/types.backup/outlet-provider.d.ts +12 -0
- package/dist/types.backup/prerender/build-shell-capture.d.ts +104 -0
- package/dist/types.backup/prerender/param-hash.d.ts +6 -0
- package/dist/types.backup/prerender/shell-manifest-key.d.ts +18 -0
- package/dist/types.backup/prerender/store.d.ts +62 -0
- package/dist/types.backup/prerender.d.ts +292 -0
- package/dist/types.backup/redirect-origin.d.ts +55 -0
- package/dist/types.backup/regex-escape.d.ts +6 -0
- package/dist/types.backup/render-error-thrower.d.ts +13 -0
- package/dist/types.backup/response-utils.d.ts +35 -0
- package/dist/types.backup/reverse.d.ts +206 -0
- package/dist/types.backup/root-error-boundary.d.ts +32 -0
- package/dist/types.backup/route-content-wrapper.d.ts +40 -0
- package/dist/types.backup/route-definition/dsl-helpers.d.ts +130 -0
- package/dist/types.backup/route-definition/helper-factories.d.ts +22 -0
- package/dist/types.backup/route-definition/helpers-types.d.ts +392 -0
- package/dist/types.backup/route-definition/index.d.ts +7 -0
- package/dist/types.backup/route-definition/redirect.d.ts +48 -0
- package/dist/types.backup/route-definition/resolve-handler-use.d.ts +19 -0
- package/dist/types.backup/route-definition/use-item-types.d.ts +1 -0
- package/dist/types.backup/route-definition.d.ts +1 -0
- package/dist/types.backup/route-map-builder.d.ts +127 -0
- package/dist/types.backup/route-name.d.ts +27 -0
- package/dist/types.backup/route-types.d.ts +172 -0
- package/dist/types.backup/router/basename.d.ts +10 -0
- package/dist/types.backup/router/content-negotiation.d.ts +91 -0
- package/dist/types.backup/router/debug-manifest.d.ts +7 -0
- package/dist/types.backup/router/error-handling.d.ts +76 -0
- package/dist/types.backup/router/find-match.d.ts +19 -0
- package/dist/types.backup/router/handler-context.d.ts +41 -0
- package/dist/types.backup/router/instrument.d.ts +161 -0
- package/dist/types.backup/router/intercept-resolution.d.ts +79 -0
- package/dist/types.backup/router/lazy-includes.d.ts +26 -0
- package/dist/types.backup/router/loader-resolution.d.ts +63 -0
- package/dist/types.backup/router/logging.d.ts +41 -0
- package/dist/types.backup/router/manifest.d.ts +8 -0
- package/dist/types.backup/router/match-api.d.ts +19 -0
- package/dist/types.backup/router/match-context.d.ts +184 -0
- package/dist/types.backup/router/match-handlers.d.ts +49 -0
- package/dist/types.backup/router/match-middleware/background-revalidation.d.ts +113 -0
- package/dist/types.backup/router/match-middleware/cache-lookup.d.ts +113 -0
- package/dist/types.backup/router/match-middleware/cache-store.d.ts +112 -0
- package/dist/types.backup/router/match-middleware/index.d.ts +80 -0
- package/dist/types.backup/router/match-middleware/intercept-resolution.d.ts +116 -0
- package/dist/types.backup/router/match-middleware/segment-resolution.d.ts +94 -0
- package/dist/types.backup/router/match-pipelines.d.ts +103 -0
- package/dist/types.backup/router/match-result.d.ts +114 -0
- package/dist/types.backup/router/metrics.d.ts +6 -0
- package/dist/types.backup/router/middleware-types.d.ts +74 -0
- package/dist/types.backup/router/middleware.d.ts +116 -0
- package/dist/types.backup/router/navigation-snapshot.d.ts +22 -0
- package/dist/types.backup/router/params-util.d.ts +8 -0
- package/dist/types.backup/router/parse-pattern.d.ts +38 -0
- package/dist/types.backup/router/pattern-matching.d.ts +169 -0
- package/dist/types.backup/router/prefetch-cache-ttl.d.ts +27 -0
- package/dist/types.backup/router/prefetch-limits.d.ts +20 -0
- package/dist/types.backup/router/prerender-match.d.ts +50 -0
- package/dist/types.backup/router/preview-match.d.ts +22 -0
- package/dist/types.backup/router/request-classification.d.ts +104 -0
- package/dist/types.backup/router/revalidation.d.ts +57 -0
- package/dist/types.backup/router/route-snapshot.d.ts +112 -0
- package/dist/types.backup/router/router-context.d.ts +137 -0
- package/dist/types.backup/router/router-interfaces.d.ts +432 -0
- package/dist/types.backup/router/router-options.d.ts +738 -0
- package/dist/types.backup/router/router-registry.d.ts +15 -0
- package/dist/types.backup/router/segment-resolution/fresh.d.ts +55 -0
- package/dist/types.backup/router/segment-resolution/helpers.d.ts +93 -0
- package/dist/types.backup/router/segment-resolution/loader-cache.d.ts +33 -0
- package/dist/types.backup/router/segment-resolution/loader-mask.d.ts +44 -0
- package/dist/types.backup/router/segment-resolution/loader-snapshot.d.ts +90 -0
- package/dist/types.backup/router/segment-resolution/mask-nested.d.ts +53 -0
- package/dist/types.backup/router/segment-resolution/revalidation.d.ts +85 -0
- package/dist/types.backup/router/segment-resolution/static-store.d.ts +17 -0
- package/dist/types.backup/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
- package/dist/types.backup/router/segment-resolution/view-transition-default.d.ts +28 -0
- package/dist/types.backup/router/segment-resolution.d.ts +3 -0
- package/dist/types.backup/router/segment-wrappers.d.ts +53 -0
- package/dist/types.backup/router/state-cookie-name.d.ts +1 -0
- package/dist/types.backup/router/substitute-pattern-params.d.ts +23 -0
- package/dist/types.backup/router/telemetry-otel.d.ts +113 -0
- package/dist/types.backup/router/telemetry.d.ts +215 -0
- package/dist/types.backup/router/timeout.d.ts +68 -0
- package/dist/types.backup/router/tracing.d.ts +125 -0
- package/dist/types.backup/router/trie-matching.d.ts +32 -0
- package/dist/types.backup/router/types.d.ts +98 -0
- package/dist/types.backup/router/url-params.d.ts +26 -0
- package/dist/types.backup/router.d.ts +7 -0
- package/dist/types.backup/rsc/capture-queue.d.ts +6 -0
- package/dist/types.backup/rsc/full-payload.d.ts +22 -0
- package/dist/types.backup/rsc/handler-context.d.ts +31 -0
- package/dist/types.backup/rsc/handler.d.ts +9 -0
- package/dist/types.backup/rsc/helpers.d.ts +213 -0
- package/dist/types.backup/rsc/index.d.ts +17 -0
- package/dist/types.backup/rsc/json-route-result.d.ts +20 -0
- package/dist/types.backup/rsc/loader-fetch.d.ts +14 -0
- package/dist/types.backup/rsc/manifest-init.d.ts +18 -0
- package/dist/types.backup/rsc/nonce.d.ts +28 -0
- package/dist/types.backup/rsc/origin-guard.d.ts +50 -0
- package/dist/types.backup/rsc/progressive-enhancement.d.ts +19 -0
- package/dist/types.backup/rsc/redirect-guard.d.ts +35 -0
- package/dist/types.backup/rsc/response-cache-serve.d.ts +46 -0
- package/dist/types.backup/rsc/response-error.d.ts +19 -0
- package/dist/types.backup/rsc/response-route-handler.d.ts +29 -0
- package/dist/types.backup/rsc/rsc-rendering.d.ts +23 -0
- package/dist/types.backup/rsc/runtime-warnings.d.ts +22 -0
- package/dist/types.backup/rsc/server-action.d.ts +68 -0
- package/dist/types.backup/rsc/shell-build-manifest.d.ts +84 -0
- package/dist/types.backup/rsc/shell-capture-constants.d.ts +27 -0
- package/dist/types.backup/rsc/shell-capture.d.ts +374 -0
- package/dist/types.backup/rsc/shell-serve.d.ts +136 -0
- package/dist/types.backup/rsc/ssr-setup.d.ts +48 -0
- package/dist/types.backup/rsc/transition-gate.d.ts +27 -0
- package/dist/types.backup/rsc/types.d.ts +290 -0
- package/dist/types.backup/runtime-env.d.ts +1 -0
- package/dist/types.backup/search-params.d.ts +125 -0
- package/dist/types.backup/segment-content-promise.d.ts +13 -0
- package/dist/types.backup/segment-fragments.d.ts +56 -0
- package/dist/types.backup/segment-loader-promise.d.ts +22 -0
- package/dist/types.backup/segment-system.d.ts +84 -0
- package/dist/types.backup/serialize.d.ts +164 -0
- package/dist/types.backup/server/context.d.ts +494 -0
- package/dist/types.backup/server/cookie-parse.d.ts +10 -0
- package/dist/types.backup/server/cookie-store.d.ts +107 -0
- package/dist/types.backup/server/fetchable-loader-store.d.ts +20 -0
- package/dist/types.backup/server/handle-store.d.ts +100 -0
- package/dist/types.backup/server/loader-registry.d.ts +32 -0
- package/dist/types.backup/server/request-context.d.ts +596 -0
- package/dist/types.backup/server/root-layout.d.ts +3 -0
- package/dist/types.backup/server.d.ts +15 -0
- package/dist/types.backup/ssr/index.d.ts +233 -0
- package/dist/types.backup/ssr/inject-rsc-eager.d.ts +3 -0
- package/dist/types.backup/ssr/preinit-client-references.d.ts +71 -0
- package/dist/types.backup/ssr/ssr-root.d.ts +69 -0
- package/dist/types.backup/static-handler.d.ts +57 -0
- package/dist/types.backup/testing/cache-status.d.ts +63 -0
- package/dist/types.backup/testing/collect-handle.d.ts +20 -0
- package/dist/types.backup/testing/dispatch.d.ts +123 -0
- package/dist/types.backup/testing/dom.entry.d.ts +15 -0
- package/dist/types.backup/testing/e2e/fixture.d.ts +37 -0
- package/dist/types.backup/testing/e2e/index.d.ts +30 -0
- package/dist/types.backup/testing/e2e/matchers.d.ts +17 -0
- package/dist/types.backup/testing/e2e/page-helpers.d.ts +62 -0
- package/dist/types.backup/testing/e2e/parity.d.ts +111 -0
- package/dist/types.backup/testing/e2e/server.d.ts +35 -0
- package/dist/types.backup/testing/flight-matchers.d.ts +55 -0
- package/dist/types.backup/testing/flight-normalize.d.ts +1 -0
- package/dist/types.backup/testing/flight-tree.d.ts +192 -0
- package/dist/types.backup/testing/flight.d.ts +115 -0
- package/dist/types.backup/testing/flight.entry.d.ts +27 -0
- package/dist/types.backup/testing/generated-routes.d.ts +66 -0
- package/dist/types.backup/testing/index.d.ts +52 -0
- package/dist/types.backup/testing/internal/context.d.ts +225 -0
- package/dist/types.backup/testing/internal/flight-client-globals.d.ts +1 -0
- package/dist/types.backup/testing/internal/seed-vars.d.ts +30 -0
- package/dist/types.backup/testing/render-handler.d.ts +160 -0
- package/dist/types.backup/testing/render-route.d.ts +246 -0
- package/dist/types.backup/testing/run-loader.d.ts +186 -0
- package/dist/types.backup/testing/run-middleware.d.ts +132 -0
- package/dist/types.backup/testing/run-transition-when.d.ts +77 -0
- package/dist/types.backup/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
- package/dist/types.backup/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
- package/dist/types.backup/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
- package/dist/types.backup/testing/vitest-stubs/version.d.ts +1 -0
- package/dist/types.backup/testing/vitest.d.ts +205 -0
- package/dist/types.backup/theme/ThemeProvider.d.ts +13 -0
- package/dist/types.backup/theme/ThemeScript.d.ts +45 -0
- package/dist/types.backup/theme/constants.d.ts +39 -0
- package/dist/types.backup/theme/index.d.ts +29 -0
- package/dist/types.backup/theme/theme-context.d.ts +21 -0
- package/dist/types.backup/theme/theme-script.d.ts +26 -0
- package/dist/types.backup/theme/types.d.ts +162 -0
- package/dist/types.backup/theme/use-theme.d.ts +8 -0
- package/dist/types.backup/types/boundaries.d.ts +93 -0
- package/dist/types.backup/types/cache-types.d.ts +191 -0
- package/dist/types.backup/types/error-types.d.ts +114 -0
- package/dist/types.backup/types/global-namespace.d.ts +90 -0
- package/dist/types.backup/types/handler-context.d.ts +658 -0
- package/dist/types.backup/types/index.d.ts +11 -0
- package/dist/types.backup/types/loader-types.d.ts +182 -0
- package/dist/types.backup/types/request-scope.d.ts +93 -0
- package/dist/types.backup/types/route-config.d.ts +105 -0
- package/dist/types.backup/types/route-entry.d.ts +95 -0
- package/dist/types.backup/types/segments.d.ts +234 -0
- package/dist/types.backup/types.d.ts +1 -0
- package/dist/types.backup/urls/include-helper.d.ts +17 -0
- package/dist/types.backup/urls/include-provider.d.ts +27 -0
- package/dist/types.backup/urls/index.d.ts +6 -0
- package/dist/types.backup/urls/path-helper-types.d.ts +197 -0
- package/dist/types.backup/urls/path-helper.d.ts +12 -0
- package/dist/types.backup/urls/pattern-types.d.ts +166 -0
- package/dist/types.backup/urls/response-types.d.ts +67 -0
- package/dist/types.backup/urls/type-extraction.d.ts +157 -0
- package/dist/types.backup/urls/urls-function.d.ts +24 -0
- package/dist/types.backup/urls.d.ts +1 -0
- package/dist/types.backup/use-loader.d.ts +150 -0
- package/dist/types.backup/vercel/index.d.ts +10 -0
- package/dist/types.backup/vercel/tracing.d.ts +70 -0
- package/dist/types.backup/vite/debug.d.ts +80 -0
- package/dist/types.backup/vite/discovery/bundle-postprocess.d.ts +12 -0
- package/dist/types.backup/vite/discovery/dev-prerender-cache.d.ts +65 -0
- package/dist/types.backup/vite/discovery/discover-routers.d.ts +17 -0
- package/dist/types.backup/vite/discovery/discovery-errors.d.ts +113 -0
- package/dist/types.backup/vite/discovery/gate-state.d.ts +79 -0
- package/dist/types.backup/vite/discovery/prerender-collection.d.ts +24 -0
- package/dist/types.backup/vite/discovery/route-types-writer.d.ts +32 -0
- package/dist/types.backup/vite/discovery/self-gen-tracking.d.ts +22 -0
- package/dist/types.backup/vite/discovery/shell-prerender-phase.d.ts +40 -0
- package/dist/types.backup/vite/discovery/state.d.ts +162 -0
- package/dist/types.backup/vite/discovery/virtual-module-codegen.d.ts +15 -0
- package/dist/types.backup/vite/index.d.ts +11 -0
- package/dist/types.backup/vite/inject-client-debug.d.ts +56 -0
- package/dist/types.backup/vite/plugin-types.d.ts +298 -0
- package/dist/types.backup/vite/plugins/cjs-to-esm.d.ts +6 -0
- package/dist/types.backup/vite/plugins/client-ref-dedup.d.ts +40 -0
- package/dist/types.backup/vite/plugins/client-ref-hashing.d.ts +35 -0
- package/dist/types.backup/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
- package/dist/types.backup/vite/plugins/expose-action-id.d.ts +18 -0
- package/dist/types.backup/vite/plugins/expose-id-utils.d.ts +37 -0
- package/dist/types.backup/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
- package/dist/types.backup/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
- package/dist/types.backup/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
- package/dist/types.backup/vite/plugins/expose-ids/router-transform.d.ts +13 -0
- package/dist/types.backup/vite/plugins/expose-ids/types.d.ts +29 -0
- package/dist/types.backup/vite/plugins/expose-internal-ids.d.ts +6 -0
- package/dist/types.backup/vite/plugins/performance-tracks.d.ts +25 -0
- package/dist/types.backup/vite/plugins/refresh-cmd.d.ts +20 -0
- package/dist/types.backup/vite/plugins/use-cache-transform.d.ts +20 -0
- package/dist/types.backup/vite/plugins/vercel-output.d.ts +85 -0
- package/dist/types.backup/vite/plugins/version-injector.d.ts +21 -0
- package/dist/types.backup/vite/plugins/version-plugin.d.ts +19 -0
- package/dist/types.backup/vite/plugins/virtual-entries.d.ts +36 -0
- package/dist/types.backup/vite/plugins/virtual-stub-plugin.d.ts +7 -0
- package/dist/types.backup/vite/rango.d.ts +29 -0
- package/dist/types.backup/vite/router-discovery.d.ts +23 -0
- package/dist/types.backup/vite/utils/ast-handler-extract.d.ts +64 -0
- package/dist/types.backup/vite/utils/banner.d.ts +2 -0
- package/dist/types.backup/vite/utils/bundle-analysis.d.ts +28 -0
- package/dist/types.backup/vite/utils/client-chunks.d.ts +55 -0
- package/dist/types.backup/vite/utils/directive-prologue.d.ts +16 -0
- package/dist/types.backup/vite/utils/forward-user-plugins.d.ts +37 -0
- package/dist/types.backup/vite/utils/manifest-utils.d.ts +7 -0
- package/dist/types.backup/vite/utils/package-resolution.d.ts +6 -0
- package/dist/types.backup/vite/utils/prerender-utils.d.ts +32 -0
- package/dist/types.backup/vite/utils/shared-utils.d.ts +55 -0
- package/dist/vite/index.js +5 -2
- package/package.json +20 -21
- package/skills/cache-guide/SKILL.md +6 -3
- package/skills/catalog.json +7 -1
- package/skills/comparison/references/framework-comparison.md +2 -1
- package/skills/deployment-caching/SKILL.md +176 -0
- package/skills/document-cache/SKILL.md +30 -3
- package/skills/ppr/SKILL.md +81 -34
- package/skills/prerender/SKILL.md +15 -8
- package/skills/rango/SKILL.md +20 -17
- package/skills/router-setup/SKILL.md +4 -0
- package/skills/testing/SKILL.md +1 -1
- package/skills/testing/cache-prerender.md +5 -1
- package/skills/vercel/SKILL.md +22 -1
- package/skills/view-transitions/SKILL.md +12 -8
- package/src/browser/prefetch/default-strategy.ts +34 -0
- package/src/browser/prefetch/loader.ts +6 -12
- package/src/browser/prefetch/runtime.ts +0 -1
- package/src/browser/react/Link.tsx +22 -21
- package/src/browser/rsc-router.tsx +8 -0
- package/src/browser/types.ts +5 -0
- package/src/cache/cache-scope.ts +6 -1
- package/src/cache/cf/cf-cache-store.ts +4 -0
- package/src/cache/document-cache.ts +4 -2
- package/src/cache/types.ts +10 -3
- package/src/cache/vercel/vercel-cache-store.ts +6 -1
- package/src/route-definition/helpers-types.ts +6 -6
- package/src/router/match-handlers.ts +44 -6
- package/src/router/match-middleware/cache-lookup.ts +10 -3
- package/src/router/prefetch-default.ts +59 -0
- package/src/router/router-interfaces.ts +8 -0
- package/src/router/router-options.ts +31 -0
- package/src/router/segment-resolution/view-transition-default.ts +9 -5
- package/src/router/transition-when.ts +76 -0
- package/src/router.ts +7 -0
- package/src/rsc/capture-queue.ts +24 -1
- package/src/rsc/full-payload.ts +1 -0
- package/src/rsc/handler.ts +1 -0
- package/src/rsc/progressive-enhancement.ts +9 -14
- package/src/rsc/rsc-rendering.ts +261 -48
- package/src/rsc/shell-capture.ts +94 -50
- package/src/rsc/shell-serve.ts +9 -4
- package/src/rsc/transition-gate.ts +37 -40
- package/src/rsc/types.ts +2 -0
- package/src/server/request-context.ts +6 -0
- package/src/testing/e2e/index.ts +11 -0
- package/src/testing/e2e/page-helpers.ts +47 -0
- package/src/testing/e2e/parity.ts +13 -0
- package/src/testing/index.ts +9 -1
- package/src/testing/run-transition-when.ts +42 -9
- package/src/testing/shell-status.ts +92 -3
- package/src/types/segments.ts +27 -22
- package/src/urls/path-helper-types.ts +4 -3
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
2
|
import { INTERNAL_RANGO_DEBUG } from "../internal-debug.js";
|
|
3
3
|
import { sanitizeError } from "../errors";
|
|
4
|
-
import type { ErrorInfo, ErrorPhase, MatchResult } from "../types";
|
|
5
4
|
import type {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
ErrorBoundaryHandler,
|
|
6
|
+
ErrorInfo,
|
|
7
|
+
ErrorPhase,
|
|
8
|
+
MatchResult,
|
|
9
|
+
NotFoundBoundaryHandler,
|
|
10
|
+
} from "../types";
|
|
11
|
+
import {
|
|
12
|
+
isPprEntry,
|
|
13
|
+
type EntryData,
|
|
14
|
+
type InterceptEntry,
|
|
15
|
+
type InterceptSelectorContext,
|
|
16
|
+
} from "../server/context.js";
|
|
10
17
|
import type { MatchApiDeps } from "./types.js";
|
|
11
18
|
import type { RouterContext } from "./router-context.js";
|
|
12
19
|
import { runWithRouterContext } from "./router-context.js";
|
|
@@ -30,7 +37,6 @@ import {
|
|
|
30
37
|
startRevalidationTrace,
|
|
31
38
|
flushRevalidationTrace,
|
|
32
39
|
} from "./logging.js";
|
|
33
|
-
import type { ErrorBoundaryHandler, NotFoundBoundaryHandler } from "../types";
|
|
34
40
|
import type { MiddlewareFn } from "./middleware.js";
|
|
35
41
|
import {
|
|
36
42
|
type TelemetrySink,
|
|
@@ -41,6 +47,7 @@ import {
|
|
|
41
47
|
buildCacheSignalSegments,
|
|
42
48
|
} from "./telemetry.js";
|
|
43
49
|
import { _getRequestContext } from "../server/request-context.js";
|
|
50
|
+
import { evaluatePprTransitionWhen } from "./transition-when.js";
|
|
44
51
|
|
|
45
52
|
/**
|
|
46
53
|
* Per-call telemetry lifecycle emitter for match()/matchPartial(). Each method
|
|
@@ -227,6 +234,35 @@ export function createMatchHandlers<TEnv = any>(
|
|
|
227
234
|
if (reqCtx) reqCtx._cacheSignal = segments;
|
|
228
235
|
};
|
|
229
236
|
|
|
237
|
+
const evaluatePprTransitionWhenForMatch = (
|
|
238
|
+
ctx: MatchContext<TEnv>,
|
|
239
|
+
isPartial: boolean,
|
|
240
|
+
): void => {
|
|
241
|
+
const reqCtx = _getRequestContext();
|
|
242
|
+
if (!reqCtx) return;
|
|
243
|
+
reqCtx._pprTransitionDecisions = undefined;
|
|
244
|
+
if (!isPprEntry(ctx.manifestEntry)) return;
|
|
245
|
+
|
|
246
|
+
evaluatePprTransitionWhen(
|
|
247
|
+
ctx.entries,
|
|
248
|
+
reqCtx,
|
|
249
|
+
{
|
|
250
|
+
params: ctx.matched.params,
|
|
251
|
+
routeName: ctx.interceptSelectorContext.toRouteName,
|
|
252
|
+
},
|
|
253
|
+
(error, segmentId) =>
|
|
254
|
+
callOnError(error, "rendering", {
|
|
255
|
+
request: ctx.request,
|
|
256
|
+
url: ctx.url,
|
|
257
|
+
env: ctx.env,
|
|
258
|
+
params: ctx.matched.params,
|
|
259
|
+
segmentId,
|
|
260
|
+
isPartial,
|
|
261
|
+
handledByBoundary: false,
|
|
262
|
+
}),
|
|
263
|
+
);
|
|
264
|
+
};
|
|
265
|
+
|
|
230
266
|
async function createMatchContextForFull(
|
|
231
267
|
request: Request,
|
|
232
268
|
env: TEnv,
|
|
@@ -313,6 +349,7 @@ export function createMatchHandlers<TEnv = any>(
|
|
|
313
349
|
}
|
|
314
350
|
|
|
315
351
|
const ctx = result as MatchContext<TEnv>;
|
|
352
|
+
evaluatePprTransitionWhenForMatch(ctx, false);
|
|
316
353
|
|
|
317
354
|
try {
|
|
318
355
|
const state = createPipelineState();
|
|
@@ -424,6 +461,7 @@ export function createMatchHandlers<TEnv = any>(
|
|
|
424
461
|
emitter.end(0, false);
|
|
425
462
|
return null;
|
|
426
463
|
}
|
|
464
|
+
evaluatePprTransitionWhenForMatch(ctx, true);
|
|
427
465
|
|
|
428
466
|
if (isRouterDebugEnabled()) {
|
|
429
467
|
startRevalidationTrace({
|
|
@@ -460,6 +460,8 @@ export function withCacheLookup<TEnv>(
|
|
|
460
460
|
state.shouldRevalidate = cacheResult.shouldRevalidate;
|
|
461
461
|
state.cachedSegments = cacheResult.segments;
|
|
462
462
|
state.cachedMatchedIds = cacheResult.segments.map((s) => s.id);
|
|
463
|
+
const pprTransitionDecisions =
|
|
464
|
+
_getRequestContext()?._pprTransitionDecisions;
|
|
463
465
|
|
|
464
466
|
const canCheckSegmentRevalidation =
|
|
465
467
|
!ctx.isFullMatch &&
|
|
@@ -533,8 +535,13 @@ export function withCacheLookup<TEnv>(
|
|
|
533
535
|
reason: "cached-no-rules",
|
|
534
536
|
});
|
|
535
537
|
}
|
|
536
|
-
|
|
537
|
-
segment.
|
|
538
|
+
// A PPR transition decision must reach the client even when this cached
|
|
539
|
+
// segment otherwise needs no update. Keep its replayed component so the
|
|
540
|
+
// partial result retains the segment for gateTransitions().
|
|
541
|
+
if (!pprTransitionDecisions?.has(segment.id)) {
|
|
542
|
+
segment.component = null;
|
|
543
|
+
segment.loading = undefined;
|
|
544
|
+
}
|
|
538
545
|
yield segment;
|
|
539
546
|
continue;
|
|
540
547
|
}
|
|
@@ -566,7 +573,7 @@ export function withCacheLookup<TEnv>(
|
|
|
566
573
|
shouldRevalidate,
|
|
567
574
|
});
|
|
568
575
|
|
|
569
|
-
if (!shouldRevalidate) {
|
|
576
|
+
if (!shouldRevalidate && !pprTransitionDecisions?.has(segment.id)) {
|
|
570
577
|
segment.component = null;
|
|
571
578
|
segment.loading = undefined;
|
|
572
579
|
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the router-wide default Link prefetch strategy once, at router init.
|
|
3
|
+
* The resolved value ships to the client in payload metadata; the browser
|
|
4
|
+
* entry applies it via `setDefaultPrefetchStrategy` (browser/prefetch/
|
|
5
|
+
* default-strategy.ts) and every `<Link>` without an explicit `prefetch` prop
|
|
6
|
+
* falls back to it.
|
|
7
|
+
*
|
|
8
|
+
* The type lives HERE (not in browser/react/Link.tsx) because both seats need
|
|
9
|
+
* it: this server-side resolver and the client Link/default-strategy modules.
|
|
10
|
+
* Link.tsx re-exports it so the public `PrefetchStrategy` export path is
|
|
11
|
+
* unchanged.
|
|
12
|
+
*
|
|
13
|
+
* Policy note: automatic prefetch stays quiet in development, matching the
|
|
14
|
+
* production-only default used by Next.js. Explicit router and per-Link
|
|
15
|
+
* strategies still work in every mode. Invalid untyped inputs fall back to the
|
|
16
|
+
* current environment's default.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Prefetch strategy for the Link component
|
|
21
|
+
* - "hover": Prefetch on mouse enter (direct, no queue)
|
|
22
|
+
* - "viewport": Prefetch when link enters viewport (queued, waits for idle)
|
|
23
|
+
* - "render": Prefetch on component mount regardless of visibility (queued, waits for idle)
|
|
24
|
+
* - "adaptive": Hover on pointer devices, viewport on touch devices
|
|
25
|
+
* - "none": No prefetching
|
|
26
|
+
*/
|
|
27
|
+
export type PrefetchStrategy =
|
|
28
|
+
| "hover"
|
|
29
|
+
| "viewport"
|
|
30
|
+
| "render"
|
|
31
|
+
| "adaptive"
|
|
32
|
+
| "none";
|
|
33
|
+
|
|
34
|
+
function defaultPrefetchForEnvironment(
|
|
35
|
+
nodeEnv: string | undefined,
|
|
36
|
+
): PrefetchStrategy {
|
|
37
|
+
return nodeEnv === "production" ? "viewport" : "none";
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export const DEFAULT_PREFETCH_STRATEGY: PrefetchStrategy =
|
|
41
|
+
defaultPrefetchForEnvironment(process.env.NODE_ENV);
|
|
42
|
+
|
|
43
|
+
const VALID_STRATEGIES: ReadonlySet<string> = new Set([
|
|
44
|
+
"hover",
|
|
45
|
+
"viewport",
|
|
46
|
+
"render",
|
|
47
|
+
"adaptive",
|
|
48
|
+
"none",
|
|
49
|
+
] satisfies PrefetchStrategy[]);
|
|
50
|
+
|
|
51
|
+
export function resolveDefaultPrefetch(
|
|
52
|
+
raw: PrefetchStrategy | undefined,
|
|
53
|
+
nodeEnv: string | undefined = process.env.NODE_ENV,
|
|
54
|
+
): PrefetchStrategy {
|
|
55
|
+
if (typeof raw === "string" && VALID_STRATEGIES.has(raw)) {
|
|
56
|
+
return raw;
|
|
57
|
+
}
|
|
58
|
+
return defaultPrefetchForEnvironment(nodeEnv);
|
|
59
|
+
}
|
|
@@ -318,6 +318,14 @@ export interface RangoInternal<
|
|
|
318
318
|
*/
|
|
319
319
|
readonly prefetchConcurrency: number;
|
|
320
320
|
|
|
321
|
+
/**
|
|
322
|
+
* Router-wide default Link prefetch strategy for Links without an explicit
|
|
323
|
+
* `prefetch` prop. Shipped to the client in payload metadata. Derived from
|
|
324
|
+
* the `defaultPrefetch` option (default "none" in development and
|
|
325
|
+
* "viewport" in production).
|
|
326
|
+
*/
|
|
327
|
+
readonly defaultPrefetch: import("./prefetch-default.js").PrefetchStrategy;
|
|
328
|
+
|
|
321
329
|
/**
|
|
322
330
|
* Resolved rango state cookie name (`{prefix}_{routerId}`), composed once at
|
|
323
331
|
* router init and shipped to the client in payload metadata. The server-side
|
|
@@ -11,6 +11,7 @@ import type { ExecutionContext } from "../server/request-context.js";
|
|
|
11
11
|
import type { UrlPatterns } from "../urls.js";
|
|
12
12
|
import type { UrlBuilder } from "../urls/pattern-types.js";
|
|
13
13
|
import type { NamedRouteEntry } from "./content-negotiation.js";
|
|
14
|
+
import type { PrefetchStrategy } from "./prefetch-default.js";
|
|
14
15
|
import type { TelemetrySink } from "./telemetry.js";
|
|
15
16
|
import type { RouterTracingConfig } from "./tracing.js";
|
|
16
17
|
import type { RouterTimeouts, OnTimeoutCallback } from "./timeout.js";
|
|
@@ -532,6 +533,36 @@ export interface RangoOptions<TEnv = any> {
|
|
|
532
533
|
*/
|
|
533
534
|
prefetchConcurrency?: number;
|
|
534
535
|
|
|
536
|
+
/**
|
|
537
|
+
* Default prefetch strategy for every `<Link>` that does not set its own
|
|
538
|
+
* `prefetch` prop. A per-Link `prefetch` prop always wins, in both
|
|
539
|
+
* directions (a Link can opt out of an aggressive default with
|
|
540
|
+
* `prefetch="none"`, or opt in under `defaultPrefetch: "none"`).
|
|
541
|
+
*
|
|
542
|
+
* - `"viewport"` (production default): prefetch when the link enters the viewport —
|
|
543
|
+
* idle-gated and queued (see `prefetchConcurrency`), so prefetches never
|
|
544
|
+
* compete with hydration or an active navigation.
|
|
545
|
+
* - `"hover"`: prefetch on mouse enter only. Much lighter on the server —
|
|
546
|
+
* only links the pointer approaches are fetched — at the cost of the
|
|
547
|
+
* ~100-300ms head start viewport prefetch gives.
|
|
548
|
+
* - `"adaptive"`: `"hover"` on pointer devices, `"viewport"` on touch
|
|
549
|
+
* devices (no hover to wait for).
|
|
550
|
+
* - `"render"`: prefetch on mount regardless of visibility.
|
|
551
|
+
* - `"none"`: manual mode — nothing prefetches unless a Link opts in.
|
|
552
|
+
*
|
|
553
|
+
* Automatic prefetch defaults to `"none"` in development and `"viewport"`
|
|
554
|
+
* in production. With the production default, every visible Link triggers an
|
|
555
|
+
* RSC render (loaders included) on the server. Routes served from cache/PPR
|
|
556
|
+
* absorb this cheaply; per-user dynamic routes pay full price per viewport
|
|
557
|
+
* entry. Set `"hover"`, `"adaptive"`, or `"none"` when that cost matters.
|
|
558
|
+
*
|
|
559
|
+
* To disable the prefetch subsystem entirely (including per-Link opt-ins
|
|
560
|
+
* and `useRouter().prefetch()`), set `prefetchCacheTTL: false` instead.
|
|
561
|
+
*
|
|
562
|
+
* @default "none" in development; "viewport" in production
|
|
563
|
+
*/
|
|
564
|
+
defaultPrefetch?: PrefetchStrategy;
|
|
565
|
+
|
|
535
566
|
/**
|
|
536
567
|
* Prefix for the rango state cookie name. The resolved name is
|
|
537
568
|
* `{prefix}_{routerId}`; the prefix is sanitized to cookie-name-safe
|
|
@@ -23,10 +23,9 @@ import { getRequestContext } from "../../server/request-context.js";
|
|
|
23
23
|
* gate, which also avoids needless object allocation and payload growth.
|
|
24
24
|
*
|
|
25
25
|
* `when`: a server-only predicate. It is STRIPPED from the returned config (a
|
|
26
|
-
* function cannot cross Flight or the segment cache)
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* false. Used by both the fresh and revalidation resolution paths.
|
|
26
|
+
* function cannot cross Flight or the segment cache). PPR routes evaluate it
|
|
27
|
+
* from the manifest before the pipeline; other routes record it here for the
|
|
28
|
+
* existing post-handler gate. Used by both fresh and revalidation resolution.
|
|
30
29
|
*/
|
|
31
30
|
export function applyViewTransitionDefault(
|
|
32
31
|
transition: EntryData["transition"],
|
|
@@ -39,7 +38,12 @@ export function applyViewTransitionDefault(
|
|
|
39
38
|
if (segmentId !== undefined) {
|
|
40
39
|
try {
|
|
41
40
|
const ctx = getRequestContext();
|
|
42
|
-
(ctx.
|
|
41
|
+
if (!ctx._pprTransitionDecisions?.has(segmentId)) {
|
|
42
|
+
(ctx._transitionWhen ??= []).push({
|
|
43
|
+
id: segmentId,
|
|
44
|
+
when: result.when,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
43
47
|
} catch {
|
|
44
48
|
// No active request context (e.g. a unit test calling this util
|
|
45
49
|
// directly). Skip collection; the strip below still applies so the
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { getParallelSlotEntries, type EntryData } from "../server/context.js";
|
|
2
|
+
import type { RequestContext } from "../server/request-context.js";
|
|
3
|
+
import type { TransitionWhenContext } from "../types/segments.js";
|
|
4
|
+
|
|
5
|
+
export type TransitionWhenErrorReporter = (
|
|
6
|
+
error: unknown,
|
|
7
|
+
segmentId: string,
|
|
8
|
+
) => void;
|
|
9
|
+
|
|
10
|
+
export function createTransitionWhenContext<TEnv>(
|
|
11
|
+
ctx: RequestContext<TEnv>,
|
|
12
|
+
target?: {
|
|
13
|
+
params: Record<string, string>;
|
|
14
|
+
routeName?: string;
|
|
15
|
+
},
|
|
16
|
+
): TransitionWhenContext<Record<string, string>, TEnv> {
|
|
17
|
+
return {
|
|
18
|
+
currentUrl: ctx._gateCurrentUrl,
|
|
19
|
+
currentParams: ctx._gateCurrentParams,
|
|
20
|
+
fromRouteName: ctx._prevRouteKey as TransitionWhenContext["fromRouteName"],
|
|
21
|
+
nextUrl: ctx.url,
|
|
22
|
+
nextParams: target?.params ?? ctx.params,
|
|
23
|
+
toRouteName: (target?.routeName ??
|
|
24
|
+
ctx.routeName) as TransitionWhenContext["toRouteName"],
|
|
25
|
+
actionId: ctx._gateActionId,
|
|
26
|
+
actionUrl: ctx._gateActionUrl,
|
|
27
|
+
actionResult: ctx._gateActionResult,
|
|
28
|
+
formData: ctx._gateFormData,
|
|
29
|
+
method: ctx.request.method,
|
|
30
|
+
get: ctx.get,
|
|
31
|
+
env: ctx.env,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Evaluate server-only transition gates before handlers on a PPR route. */
|
|
36
|
+
export function evaluatePprTransitionWhen<TEnv>(
|
|
37
|
+
entries: EntryData[],
|
|
38
|
+
ctx: RequestContext<TEnv>,
|
|
39
|
+
target: {
|
|
40
|
+
params: Record<string, string>;
|
|
41
|
+
routeName?: string;
|
|
42
|
+
},
|
|
43
|
+
reportError: TransitionWhenErrorReporter,
|
|
44
|
+
): void {
|
|
45
|
+
const decisions = new Map<string, boolean>();
|
|
46
|
+
const whenContext = createTransitionWhenContext(ctx, target);
|
|
47
|
+
const visited = new Set<EntryData>();
|
|
48
|
+
|
|
49
|
+
const evaluate = (entry: EntryData, segmentId: string): void => {
|
|
50
|
+
const when = entry.transition?.when;
|
|
51
|
+
if (!when) return;
|
|
52
|
+
try {
|
|
53
|
+
decisions.set(segmentId, when(whenContext) !== false);
|
|
54
|
+
} catch (error) {
|
|
55
|
+
decisions.set(segmentId, false);
|
|
56
|
+
reportError(error, segmentId);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const visitEntryAndOrphanLayouts = (entry: EntryData): void => {
|
|
61
|
+
if (visited.has(entry)) return;
|
|
62
|
+
visited.add(entry);
|
|
63
|
+
evaluate(entry, entry.shortCode);
|
|
64
|
+
|
|
65
|
+
for (const orphan of entry.layout) visitEntryAndOrphanLayouts(orphan);
|
|
66
|
+
// Rendered parallel slots are leaves identified by their owning segment.
|
|
67
|
+
for (const { slot, entry: parallelEntry } of getParallelSlotEntries(
|
|
68
|
+
entry.parallel,
|
|
69
|
+
)) {
|
|
70
|
+
evaluate(parallelEntry, `${entry.shortCode}.${slot}`);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
for (const entry of entries) visitEntryAndOrphanLayouts(entry);
|
|
75
|
+
ctx._pprTransitionDecisions = decisions.size > 0 ? decisions : undefined;
|
|
76
|
+
}
|
package/src/router.ts
CHANGED
|
@@ -115,6 +115,7 @@ import {
|
|
|
115
115
|
} from "./router/prerender-match.js";
|
|
116
116
|
import { resolveStateCookieName } from "./router/state-cookie-name.js";
|
|
117
117
|
import { resolvePrefetchCacheTTL } from "./router/prefetch-cache-ttl.js";
|
|
118
|
+
import { resolveDefaultPrefetch } from "./router/prefetch-default.js";
|
|
118
119
|
import {
|
|
119
120
|
resolvePrefetchCacheSize,
|
|
120
121
|
resolvePrefetchConcurrency,
|
|
@@ -160,6 +161,7 @@ export function createRouter<TEnv = any>(
|
|
|
160
161
|
prefetchCacheTTL: prefetchCacheTTLOption,
|
|
161
162
|
prefetchCacheSize: prefetchCacheSizeOption,
|
|
162
163
|
prefetchConcurrency: prefetchConcurrencyOption,
|
|
164
|
+
defaultPrefetch: defaultPrefetchOption,
|
|
163
165
|
stateCookiePrefix: stateCookiePrefixOption,
|
|
164
166
|
warmup: warmupOption,
|
|
165
167
|
telemetry: telemetrySink,
|
|
@@ -268,6 +270,10 @@ export function createRouter<TEnv = any>(
|
|
|
268
270
|
prefetchConcurrencyOption,
|
|
269
271
|
);
|
|
270
272
|
|
|
273
|
+
// Resolve the router-wide default Link prefetch strategy ("none" in dev,
|
|
274
|
+
// "viewport" in production). Links without an explicit prop fall back to it.
|
|
275
|
+
const defaultPrefetch = resolveDefaultPrefetch(defaultPrefetchOption);
|
|
276
|
+
|
|
271
277
|
// Resolve warmup enabled flag (default: true)
|
|
272
278
|
const warmupEnabled = warmupOption !== false;
|
|
273
279
|
|
|
@@ -1009,6 +1015,7 @@ export function createRouter<TEnv = any>(
|
|
|
1009
1015
|
prefetchCacheTTL,
|
|
1010
1016
|
prefetchCacheSize,
|
|
1011
1017
|
prefetchConcurrency,
|
|
1018
|
+
defaultPrefetch,
|
|
1012
1019
|
|
|
1013
1020
|
// Expose the resolved rango state cookie name for the server-side writer
|
|
1014
1021
|
// (invalidateClientCache) and for shipping to the client in metadata.
|
package/src/rsc/capture-queue.ts
CHANGED
|
@@ -23,6 +23,18 @@
|
|
|
23
23
|
* swallow, so one rejected capture can never wedge every later one.
|
|
24
24
|
*/
|
|
25
25
|
let captureQueue: Promise<void> = Promise.resolve();
|
|
26
|
+
let admittedCaptures = 0;
|
|
27
|
+
|
|
28
|
+
/** Bound queued/running capture closures retained by one isolate. */
|
|
29
|
+
export const MAX_ADMITTED_CAPTURES: number = 32;
|
|
30
|
+
|
|
31
|
+
/** The caller may drop this best-effort capture and retry on a later request. */
|
|
32
|
+
export class CaptureQueueFullError extends Error {
|
|
33
|
+
constructor() {
|
|
34
|
+
super(`shell capture queue is full (${MAX_ADMITTED_CAPTURES})`);
|
|
35
|
+
this.name = "CaptureQueueFullError";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
26
38
|
|
|
27
39
|
/**
|
|
28
40
|
* Upper bound on how long one queue link may hold the queue. A capture task
|
|
@@ -43,6 +55,10 @@ const QUEUE_LINK_CAP_MS = 60_000;
|
|
|
43
55
|
export function enqueueSerializedCapture(
|
|
44
56
|
task: () => Promise<void>,
|
|
45
57
|
): Promise<void> {
|
|
58
|
+
if (admittedCaptures >= MAX_ADMITTED_CAPTURES) {
|
|
59
|
+
return Promise.reject(new CaptureQueueFullError());
|
|
60
|
+
}
|
|
61
|
+
admittedCaptures++;
|
|
46
62
|
const prior = captureQueue;
|
|
47
63
|
let releaseQueue!: () => void;
|
|
48
64
|
captureQueue = new Promise<void>((resolve) => {
|
|
@@ -51,9 +67,16 @@ export function enqueueSerializedCapture(
|
|
|
51
67
|
return (async () => {
|
|
52
68
|
await prior.catch(() => {});
|
|
53
69
|
let capTimer: ReturnType<typeof setTimeout> | undefined;
|
|
70
|
+
const taskPromise = Promise.resolve()
|
|
71
|
+
.then(task)
|
|
72
|
+
.finally(() => {
|
|
73
|
+
// A timed-out link releases serialization, but its detached task still
|
|
74
|
+
// counts against admission until it actually settles.
|
|
75
|
+
admittedCaptures--;
|
|
76
|
+
});
|
|
54
77
|
try {
|
|
55
78
|
await Promise.race([
|
|
56
|
-
|
|
79
|
+
taskPromise,
|
|
57
80
|
new Promise<void>((resolve) => {
|
|
58
81
|
capTimer = setTimeout(resolve, QUEUE_LINK_CAP_MS);
|
|
59
82
|
(capTimer as { unref?: () => void }).unref?.();
|
package/src/rsc/full-payload.ts
CHANGED
|
@@ -53,6 +53,7 @@ export function buildFullPayload(
|
|
|
53
53
|
prefetchCacheTTL: ctx.router.prefetchCacheTTL,
|
|
54
54
|
prefetchCacheSize: ctx.router.prefetchCacheSize,
|
|
55
55
|
prefetchConcurrency: ctx.router.prefetchConcurrency,
|
|
56
|
+
defaultPrefetch: ctx.router.defaultPrefetch,
|
|
56
57
|
stateCookieName: ctx.router.resolvedStateCookieName,
|
|
57
58
|
themeConfig: ctx.router.themeConfig,
|
|
58
59
|
// Carry warmupEnabled on the initial full-render payload so the client
|
package/src/rsc/handler.ts
CHANGED
|
@@ -1219,6 +1219,7 @@ export function createRSCHandler<
|
|
|
1219
1219
|
prefetchCacheTTL: router.prefetchCacheTTL,
|
|
1220
1220
|
prefetchCacheSize: router.prefetchCacheSize,
|
|
1221
1221
|
prefetchConcurrency: router.prefetchConcurrency,
|
|
1222
|
+
defaultPrefetch: router.defaultPrefetch,
|
|
1222
1223
|
stateCookieName: router.resolvedStateCookieName,
|
|
1223
1224
|
themeConfig: router.themeConfig,
|
|
1224
1225
|
warmupEnabled: router.warmupEnabled,
|
|
@@ -277,10 +277,15 @@ export async function handleProgressiveEnhancement<TEnv>(
|
|
|
277
277
|
// JS/PE parity: this is an action's revalidation render, so mark it BEFORE
|
|
278
278
|
// matching — a stale `foregroundOnAction` cache entry must re-execute in the
|
|
279
279
|
// foreground during the re-render, exactly as the JS path's
|
|
280
|
-
// revalidateAfterAction does.
|
|
281
|
-
//
|
|
282
|
-
//
|
|
283
|
-
getRequestContext()
|
|
280
|
+
// revalidateAfterAction does. PPR transition({ when }) runs during match,
|
|
281
|
+
// while foregroundOnAction reads _inActionRevalidation there too, so all
|
|
282
|
+
// action metadata must be available before matching.
|
|
283
|
+
const peReqCtx = getRequestContext();
|
|
284
|
+
peReqCtx._inActionRevalidation = true;
|
|
285
|
+
peReqCtx._gateActionId = directActionId ?? undefined;
|
|
286
|
+
peReqCtx._gateActionUrl = new URL(url);
|
|
287
|
+
peReqCtx._gateActionResult = actionResult;
|
|
288
|
+
peReqCtx._gateFormData = formData;
|
|
284
289
|
|
|
285
290
|
const match = await ctx.router.match(renderRequest, { env });
|
|
286
291
|
|
|
@@ -291,16 +296,6 @@ export async function handleProgressiveEnhancement<TEnv>(
|
|
|
291
296
|
});
|
|
292
297
|
}
|
|
293
298
|
|
|
294
|
-
// Expose the no-JS action to the transition({ when }) gate. currentUrl/Params
|
|
295
|
-
// are absent on this full-render path (no navigation snapshot); useActionState
|
|
296
|
-
// ids are block-scoped, so only a direct action id is available here.
|
|
297
|
-
// actionUrl is the page the action was submitted from (this request's url).
|
|
298
|
-
const peReqCtx = getRequestContext();
|
|
299
|
-
peReqCtx._gateActionId = directActionId ?? undefined;
|
|
300
|
-
peReqCtx._gateActionUrl = new URL(url);
|
|
301
|
-
peReqCtx._gateActionResult = actionResult;
|
|
302
|
-
peReqCtx._gateFormData = formData;
|
|
303
|
-
|
|
304
299
|
const payload: RscPayload = {
|
|
305
300
|
metadata: {
|
|
306
301
|
pathname: url.pathname,
|