@rangojs/router 0.0.0-experimental.f2d1a2f1 → 0.0.0-experimental.f4a8e8de
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +8 -4
- package/README.md +318 -821
- package/dist/bin/rango.js +925 -271
- package/dist/testing/vitest.js +82 -0
- package/dist/types/__internal.d.ts +127 -0
- package/dist/types/bin/rango.d.ts +1 -0
- package/dist/types/browser/action-coordinator.d.ts +57 -0
- package/dist/types/browser/action-fence.d.ts +33 -0
- package/dist/types/browser/app-shell.d.ts +34 -0
- package/dist/types/browser/app-version.d.ts +6 -0
- package/dist/types/browser/connection-warmup.d.ts +31 -0
- package/dist/types/browser/cookie-name.d.ts +66 -0
- package/dist/types/browser/dev-discovery.d.ts +11 -0
- package/dist/types/browser/event-controller.d.ts +231 -0
- package/dist/types/browser/history-state.d.ts +26 -0
- package/dist/types/browser/index.d.ts +1 -0
- package/dist/types/browser/intercept-utils.d.ts +30 -0
- package/dist/types/browser/invalidate-client-cache.d.ts +17 -0
- package/dist/types/browser/link-interceptor.d.ts +53 -0
- package/dist/types/browser/logging.d.ts +33 -0
- package/dist/types/browser/merge-segment-loaders.d.ts +38 -0
- package/dist/types/browser/navigation-bridge.d.ts +39 -0
- package/dist/types/browser/navigation-client.d.ts +17 -0
- package/dist/types/browser/navigation-store-handle.d.ts +25 -0
- package/dist/types/browser/navigation-store.d.ts +85 -0
- package/dist/types/browser/navigation-transaction.d.ts +75 -0
- package/dist/types/browser/network-error-handler.d.ts +35 -0
- package/dist/types/browser/notify-listeners.d.ts +2 -0
- package/dist/types/browser/partial-update.d.ts +61 -0
- package/dist/types/browser/prefetch/cache.d.ts +224 -0
- package/dist/types/browser/prefetch/default-strategy.d.ts +31 -0
- package/dist/types/browser/prefetch/fetch.d.ts +52 -0
- package/dist/types/browser/prefetch/invalidation.d.ts +6 -0
- package/dist/types/browser/prefetch/loader.d.ts +12 -0
- package/dist/types/browser/prefetch/observer.d.ts +24 -0
- package/dist/types/browser/prefetch/policy.d.ts +13 -0
- package/dist/types/browser/prefetch/queue.d.ts +48 -0
- package/dist/types/browser/prefetch/resource-ready.d.ts +28 -0
- package/dist/types/browser/prefetch/runtime.d.ts +2 -0
- package/dist/types/browser/rango-state.d.ts +56 -0
- package/dist/types/browser/react/Link.d.ts +132 -0
- package/dist/types/browser/react/NavigationProvider.d.ts +88 -0
- package/dist/types/browser/react/ScrollRestoration.d.ts +78 -0
- package/dist/types/browser/react/context.d.ts +57 -0
- package/dist/types/browser/react/filter-segment-order.d.ts +35 -0
- package/dist/types/browser/react/index.d.ts +1 -0
- package/dist/types/browser/react/location-state-shared.d.ts +162 -0
- package/dist/types/browser/react/location-state.d.ts +29 -0
- package/dist/types/browser/react/mount-context.d.ts +23 -0
- package/dist/types/browser/react/nonce-context.d.ts +14 -0
- package/dist/types/browser/react/shallow-equal.d.ts +5 -0
- package/dist/types/browser/react/use-action.d.ts +61 -0
- package/dist/types/browser/react/use-handle.d.ts +21 -0
- package/dist/types/browser/react/use-href.d.ts +32 -0
- package/dist/types/browser/react/use-link-status.d.ts +36 -0
- package/dist/types/browser/react/use-mount.d.ts +24 -0
- package/dist/types/browser/react/use-navigation.d.ts +15 -0
- package/dist/types/browser/react/use-params.d.ts +21 -0
- package/dist/types/browser/react/use-pathname.d.ts +13 -0
- package/dist/types/browser/react/use-reverse.d.ts +40 -0
- package/dist/types/browser/react/use-router.d.ts +23 -0
- package/dist/types/browser/react/use-search-params.d.ts +19 -0
- package/dist/types/browser/react/use-segments.d.ts +29 -0
- package/dist/types/browser/response-adapter.d.ts +58 -0
- package/dist/types/browser/rsc-router.d.ts +146 -0
- package/dist/types/browser/scroll-restoration.d.ts +103 -0
- package/dist/types/browser/segment-reconciler.d.ts +74 -0
- package/dist/types/browser/segment-structure-assert.d.ts +16 -0
- package/dist/types/browser/server-action-bridge.d.ts +29 -0
- package/dist/types/browser/types.d.ts +546 -0
- package/dist/types/browser/validate-redirect-origin.d.ts +28 -0
- package/dist/types/build/collect-fallback-refs.d.ts +5 -0
- package/dist/types/build/generate-manifest.d.ts +106 -0
- package/dist/types/build/generate-route-types.d.ts +8 -0
- package/dist/types/build/index.d.ts +21 -0
- package/dist/types/build/merge-full-manifests.d.ts +3 -0
- package/dist/types/build/prefix-tree-utils.d.ts +56 -0
- package/dist/types/build/route-trie.d.ts +20 -0
- package/dist/types/build/route-types/ast-helpers.d.ts +3 -0
- package/dist/types/build/route-types/ast-route-extraction.d.ts +13 -0
- package/dist/types/build/route-types/codegen.d.ts +16 -0
- package/dist/types/build/route-types/include-resolution.d.ts +74 -0
- package/dist/types/build/route-types/param-extraction.d.ts +13 -0
- package/dist/types/build/route-types/per-module-writer.d.ts +20 -0
- package/dist/types/build/route-types/router-processing.d.ts +81 -0
- package/dist/types/build/route-types/scan-filter.d.ts +17 -0
- package/dist/types/build/route-types/source-scan.d.ts +13 -0
- package/dist/types/build/runtime-discovery.d.ts +24 -0
- package/dist/types/cache/background-task.d.ts +21 -0
- package/dist/types/cache/cache-error.d.ts +71 -0
- package/dist/types/cache/cache-exec-scope.d.ts +31 -0
- package/dist/types/cache/cache-key-utils.d.ts +43 -0
- package/dist/types/cache/cache-policy.d.ts +59 -0
- package/dist/types/cache/cache-runtime.d.ts +51 -0
- package/dist/types/cache/cache-scope.d.ts +215 -0
- package/dist/types/cache/cache-tag.d.ts +79 -0
- package/dist/types/cache/cf/cf-base64.d.ts +4 -0
- package/dist/types/cache/cf/cf-cache-constants.d.ts +112 -0
- package/dist/types/cache/cf/cf-cache-store.d.ts +616 -0
- package/dist/types/cache/cf/cf-cache-types.d.ts +365 -0
- package/dist/types/cache/cf/cf-kv-utils.d.ts +43 -0
- package/dist/types/cache/cf/cf-tag-marker-memo.d.ts +15 -0
- package/dist/types/cache/cf/cf-zone-purge.d.ts +31 -0
- package/dist/types/cache/cf/index.d.ts +4 -0
- package/dist/types/cache/document-cache.d.ts +71 -0
- package/dist/types/cache/handle-capture.d.ts +23 -0
- package/dist/types/cache/handle-snapshot.d.ts +39 -0
- package/dist/types/cache/index.d.ts +9 -0
- package/dist/types/cache/memory-segment-store.d.ts +163 -0
- package/dist/types/cache/profile-registry.d.ts +40 -0
- package/dist/types/cache/read-through-swr.d.ts +61 -0
- package/dist/types/cache/search-params-filter.d.ts +64 -0
- package/dist/types/cache/segment-codec.d.ts +78 -0
- package/dist/types/cache/shell-snapshot.d.ts +186 -0
- package/dist/types/cache/tag-invalidation.d.ts +74 -0
- package/dist/types/cache/taint.d.ts +77 -0
- package/dist/types/cache/types.d.ts +503 -0
- package/dist/types/cache/vercel/index.d.ts +1 -0
- package/dist/types/cache/vercel/vercel-cache-store.d.ts +268 -0
- package/dist/types/client-urls/client-root.d.ts +38 -0
- package/dist/types/client-urls/client-urls.d.ts +5 -0
- package/dist/types/client-urls/navigation.d.ts +38 -0
- package/dist/types/client-urls/revalidation-protocol.d.ts +25 -0
- package/dist/types/client-urls/server-projection.d.ts +57 -0
- package/dist/types/client-urls/types.d.ts +132 -0
- package/dist/types/client.d.ts +191 -0
- package/dist/types/client.rsc.d.ts +41 -0
- package/dist/types/cloudflare/index.d.ts +7 -0
- package/dist/types/cloudflare/tracing.d.ts +57 -0
- package/dist/types/component-utils.d.ts +46 -0
- package/dist/types/components/DefaultDocument.d.ts +13 -0
- package/dist/types/context-var.d.ts +84 -0
- package/dist/types/debug.d.ts +57 -0
- package/dist/types/decode-loader-results.d.ts +42 -0
- package/dist/types/default-error-boundary.d.ts +10 -0
- package/dist/types/defer.d.ts +89 -0
- package/dist/types/deps/browser.d.ts +1 -0
- package/dist/types/deps/html-stream-client.d.ts +1 -0
- package/dist/types/deps/html-stream-server.d.ts +1 -0
- package/dist/types/deps/rsc.d.ts +1 -0
- package/dist/types/deps/ssr.d.ts +1 -0
- package/dist/types/dev-discovery-protocol.d.ts +5 -0
- package/dist/types/encode-kv.d.ts +35 -0
- package/dist/types/errors.d.ts +227 -0
- package/dist/types/escape-script.d.ts +44 -0
- package/dist/types/handle.d.ts +93 -0
- package/dist/types/handles/MetaTags.d.ts +17 -0
- package/dist/types/handles/Scripts.d.ts +38 -0
- package/dist/types/handles/breadcrumbs.d.ts +43 -0
- package/dist/types/handles/deferred-resolution.d.ts +53 -0
- package/dist/types/handles/is-thenable.d.ts +10 -0
- package/dist/types/handles/meta.d.ts +43 -0
- package/dist/types/handles/script.d.ts +139 -0
- package/dist/types/host/cookie-handler.d.ts +8 -0
- package/dist/types/host/errors.d.ts +40 -0
- package/dist/types/host/index.d.ts +33 -0
- package/dist/types/host/pattern-matcher.d.ts +30 -0
- package/dist/types/host/router.d.ts +12 -0
- package/dist/types/host/testing.d.ts +41 -0
- package/dist/types/host/types.d.ts +148 -0
- package/dist/types/host/utils.d.ts +20 -0
- package/dist/types/href-client.d.ts +214 -0
- package/dist/types/index.d.ts +113 -0
- package/dist/types/index.rsc.d.ts +52 -0
- package/dist/types/internal-debug.d.ts +1 -0
- package/dist/types/loader-redirect.d.ts +18 -0
- package/dist/types/loader-store.d.ts +193 -0
- package/dist/types/loader.d.ts +18 -0
- package/dist/types/loader.rsc.d.ts +18 -0
- package/dist/types/missing-id-error.d.ts +1 -0
- package/dist/types/outlet-context.d.ts +24 -0
- package/dist/types/outlet-provider.d.ts +14 -0
- package/dist/types/prerender/build-shell-capture.d.ts +104 -0
- package/dist/types/prerender/param-hash.d.ts +6 -0
- package/dist/types/prerender/shell-manifest-key.d.ts +18 -0
- package/dist/types/prerender/store.d.ts +63 -0
- package/dist/types/prerender.d.ts +292 -0
- package/dist/types/redirect-origin.d.ts +67 -0
- package/dist/types/regex-escape.d.ts +6 -0
- package/dist/types/render-error-thrower.d.ts +13 -0
- package/dist/types/response-utils.d.ts +35 -0
- package/dist/types/reverse.d.ts +206 -0
- package/dist/types/root-error-boundary.d.ts +32 -0
- package/dist/types/route-content-wrapper.d.ts +81 -0
- package/dist/types/route-definition/dsl-helpers.d.ts +130 -0
- package/dist/types/route-definition/helper-factories.d.ts +22 -0
- package/dist/types/route-definition/helpers-types.d.ts +393 -0
- package/dist/types/route-definition/index.d.ts +7 -0
- package/dist/types/route-definition/redirect.d.ts +48 -0
- package/dist/types/route-definition/resolve-handler-use.d.ts +19 -0
- package/dist/types/route-definition/use-item-types.d.ts +1 -0
- package/dist/types/route-definition.d.ts +1 -0
- package/dist/types/route-map-builder.d.ts +102 -0
- package/dist/types/route-name.d.ts +27 -0
- package/dist/types/route-types.d.ts +172 -0
- package/dist/types/router/basename.d.ts +10 -0
- package/dist/types/router/content-negotiation.d.ts +91 -0
- package/dist/types/router/debug-manifest.d.ts +7 -0
- package/dist/types/router/error-handling.d.ts +110 -0
- package/dist/types/router/find-match.d.ts +19 -0
- package/dist/types/router/handler-context.d.ts +41 -0
- package/dist/types/router/instrument.d.ts +191 -0
- package/dist/types/router/intercept-resolution.d.ts +91 -0
- package/dist/types/router/lazy-includes.d.ts +26 -0
- package/dist/types/router/loader-resolution.d.ts +85 -0
- package/dist/types/router/logging.d.ts +41 -0
- package/dist/types/router/manifest.d.ts +8 -0
- package/dist/types/router/match-api.d.ts +19 -0
- package/dist/types/router/match-context.d.ts +184 -0
- package/dist/types/router/match-handlers.d.ts +48 -0
- package/dist/types/router/match-middleware/background-revalidation.d.ts +113 -0
- package/dist/types/router/match-middleware/cache-lookup.d.ts +126 -0
- package/dist/types/router/match-middleware/cache-store.d.ts +112 -0
- package/dist/types/router/match-middleware/index.d.ts +80 -0
- package/dist/types/router/match-middleware/intercept-resolution.d.ts +116 -0
- package/dist/types/router/match-middleware/segment-resolution.d.ts +94 -0
- package/dist/types/router/match-pipelines.d.ts +103 -0
- package/dist/types/router/match-result.d.ts +114 -0
- package/dist/types/router/metrics.d.ts +6 -0
- package/dist/types/router/middleware-types.d.ts +74 -0
- package/dist/types/router/middleware.d.ts +116 -0
- package/dist/types/router/navigation-snapshot.d.ts +51 -0
- package/dist/types/router/params-util.d.ts +8 -0
- package/dist/types/router/parse-pattern.d.ts +38 -0
- package/dist/types/router/pattern-matching.d.ts +169 -0
- package/dist/types/router/prefetch-cache-ttl.d.ts +27 -0
- package/dist/types/router/prefetch-default.d.ts +28 -0
- package/dist/types/router/prefetch-limits.d.ts +20 -0
- package/dist/types/router/prerender-match.d.ts +53 -0
- package/dist/types/router/preview-match.d.ts +22 -0
- package/dist/types/router/request-classification.d.ts +104 -0
- package/dist/types/router/revalidation.d.ts +64 -0
- package/dist/types/router/route-snapshot.d.ts +112 -0
- package/dist/types/router/route-trie-builder.d.ts +77 -0
- package/dist/types/router/router-context.d.ts +137 -0
- package/dist/types/router/router-interfaces.d.ts +461 -0
- package/dist/types/router/router-options.d.ts +792 -0
- package/dist/types/router/router-registry.d.ts +15 -0
- package/dist/types/router/segment-resolution/fresh.d.ts +55 -0
- package/dist/types/router/segment-resolution/helpers.d.ts +93 -0
- package/dist/types/router/segment-resolution/loader-cache.d.ts +33 -0
- package/dist/types/router/segment-resolution/loader-mask.d.ts +44 -0
- package/dist/types/router/segment-resolution/loader-snapshot.d.ts +90 -0
- package/dist/types/router/segment-resolution/mask-nested.d.ts +53 -0
- package/dist/types/router/segment-resolution/revalidation.d.ts +85 -0
- package/dist/types/router/segment-resolution/static-store.d.ts +17 -0
- package/dist/types/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
- package/dist/types/router/segment-resolution/view-transition-default.d.ts +27 -0
- package/dist/types/router/segment-resolution.d.ts +3 -0
- package/dist/types/router/segment-wrappers.d.ts +53 -0
- package/dist/types/router/state-cookie-name.d.ts +1 -0
- package/dist/types/router/substitute-pattern-params.d.ts +23 -0
- package/dist/types/router/telemetry-otel.d.ts +113 -0
- package/dist/types/router/telemetry.d.ts +216 -0
- package/dist/types/router/timeout.d.ts +107 -0
- package/dist/types/router/tracing.d.ts +139 -0
- package/dist/types/router/transition-when.d.ts +13 -0
- package/dist/types/router/trie-matching.d.ts +32 -0
- package/dist/types/router/types.d.ts +98 -0
- package/dist/types/router/url-params.d.ts +26 -0
- package/dist/types/router.d.ts +7 -0
- package/dist/types/rsc/capture-queue.d.ts +49 -0
- package/dist/types/rsc/full-payload.d.ts +22 -0
- package/dist/types/rsc/handler-context.d.ts +32 -0
- package/dist/types/rsc/handler.d.ts +9 -0
- package/dist/types/rsc/helpers.d.ts +127 -0
- package/dist/types/rsc/index.d.ts +17 -0
- package/dist/types/rsc/json-route-result.d.ts +20 -0
- package/dist/types/rsc/loader-fetch.d.ts +14 -0
- package/dist/types/rsc/manifest-init.d.ts +18 -0
- package/dist/types/rsc/nonce.d.ts +28 -0
- package/dist/types/rsc/origin-guard.d.ts +50 -0
- package/dist/types/rsc/progressive-enhancement.d.ts +19 -0
- package/dist/types/rsc/redirect-guard.d.ts +37 -0
- package/dist/types/rsc/render-pipeline.d.ts +148 -0
- package/dist/types/rsc/response-cache-serve.d.ts +46 -0
- package/dist/types/rsc/response-error.d.ts +19 -0
- package/dist/types/rsc/response-route-handler.d.ts +29 -0
- package/dist/types/rsc/routine-plan.d.ts +124 -0
- package/dist/types/rsc/rsc-rendering.d.ts +18 -0
- package/dist/types/rsc/runtime-warnings.d.ts +22 -0
- package/dist/types/rsc/server-action.d.ts +68 -0
- package/dist/types/rsc/shell-build-manifest.d.ts +90 -0
- package/dist/types/rsc/shell-capture-constants.d.ts +44 -0
- package/dist/types/rsc/shell-capture.d.ts +406 -0
- package/dist/types/rsc/shell-serve.d.ts +189 -0
- package/dist/types/rsc/ssr-setup.d.ts +73 -0
- package/dist/types/rsc/stream-idle.d.ts +60 -0
- package/dist/types/rsc/transition-gate.d.ts +23 -0
- package/dist/types/rsc/types.d.ts +328 -0
- package/dist/types/runtime-env.d.ts +1 -0
- package/dist/types/search-params.d.ts +125 -0
- package/dist/types/segment-content-promise.d.ts +13 -0
- package/dist/types/segment-fragments.d.ts +79 -0
- package/dist/types/segment-loader-promise.d.ts +22 -0
- package/dist/types/segment-system.d.ts +86 -0
- package/dist/types/serialize.d.ts +164 -0
- package/dist/types/server/context.d.ts +510 -0
- package/dist/types/server/cookie-parse.d.ts +10 -0
- package/dist/types/server/cookie-store.d.ts +107 -0
- package/dist/types/server/fetchable-loader-store.d.ts +20 -0
- package/dist/types/server/handle-store.d.ts +131 -0
- package/dist/types/server/loader-registry.d.ts +32 -0
- package/dist/types/server/request-context.d.ts +707 -0
- package/dist/types/server/root-layout.d.ts +3 -0
- package/dist/types/server.d.ts +16 -0
- package/dist/types/ssr/index.d.ts +233 -0
- package/dist/types/ssr/inject-rsc-eager.d.ts +3 -0
- package/dist/types/ssr/preinit-client-references.d.ts +71 -0
- package/dist/types/ssr/ssr-root.d.ts +69 -0
- package/dist/types/static-handler.d.ts +71 -0
- package/dist/types/testing/cache-status.d.ts +63 -0
- package/dist/types/testing/collect-handle.d.ts +20 -0
- package/dist/types/testing/dispatch.d.ts +127 -0
- package/dist/types/testing/dom.entry.d.ts +15 -0
- package/dist/types/testing/e2e/fixture.d.ts +37 -0
- package/dist/types/testing/e2e/index.d.ts +31 -0
- package/dist/types/testing/e2e/matchers.d.ts +17 -0
- package/dist/types/testing/e2e/page-helpers.d.ts +86 -0
- package/dist/types/testing/e2e/parity.d.ts +111 -0
- package/dist/types/testing/e2e/server.d.ts +35 -0
- package/dist/types/testing/flight-matchers.d.ts +55 -0
- package/dist/types/testing/flight-normalize.d.ts +1 -0
- package/dist/types/testing/flight-tree.d.ts +192 -0
- package/dist/types/testing/flight.d.ts +115 -0
- package/dist/types/testing/flight.entry.d.ts +27 -0
- package/dist/types/testing/generated-routes.d.ts +66 -0
- package/dist/types/testing/index.d.ts +54 -0
- package/dist/types/testing/internal/context.d.ts +225 -0
- package/dist/types/testing/internal/flight-client-globals.d.ts +1 -0
- package/dist/types/testing/internal/seed-vars.d.ts +30 -0
- package/dist/types/testing/render-handler.d.ts +160 -0
- package/dist/types/testing/render-route.d.ts +265 -0
- package/dist/types/testing/run-loader.d.ts +195 -0
- package/dist/types/testing/run-middleware.d.ts +132 -0
- package/dist/types/testing/run-transition-when.d.ts +78 -0
- package/dist/types/testing/shell-status.d.ts +81 -0
- package/dist/types/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
- package/dist/types/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
- package/dist/types/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
- package/dist/types/testing/vitest-stubs/version.d.ts +1 -0
- package/dist/types/testing/vitest.d.ts +205 -0
- package/dist/types/theme/ThemeProvider.d.ts +13 -0
- package/dist/types/theme/ThemeScript.d.ts +45 -0
- package/dist/types/theme/constants.d.ts +39 -0
- package/dist/types/theme/index.d.ts +29 -0
- package/dist/types/theme/theme-context.d.ts +21 -0
- package/dist/types/theme/theme-script.d.ts +26 -0
- package/dist/types/theme/types.d.ts +162 -0
- package/dist/types/theme/use-theme.d.ts +8 -0
- package/dist/types/types/boundaries.d.ts +110 -0
- package/dist/types/types/cache-types.d.ts +191 -0
- package/dist/types/types/error-types.d.ts +114 -0
- package/dist/types/types/global-namespace.d.ts +90 -0
- package/dist/types/types/handler-context.d.ts +658 -0
- package/dist/types/types/index.d.ts +11 -0
- package/dist/types/types/loader-types.d.ts +208 -0
- package/dist/types/types/request-scope.d.ts +93 -0
- package/dist/types/types/route-config.d.ts +105 -0
- package/dist/types/types/route-entry.d.ts +98 -0
- package/dist/types/types/segments.d.ts +246 -0
- package/dist/types/types.d.ts +1 -0
- package/dist/types/urls/include-helper.d.ts +17 -0
- package/dist/types/urls/include-provider.d.ts +27 -0
- package/dist/types/urls/index.d.ts +6 -0
- package/dist/types/urls/path-helper-types.d.ts +198 -0
- package/dist/types/urls/path-helper.d.ts +12 -0
- package/dist/types/urls/pattern-types.d.ts +166 -0
- package/dist/types/urls/response-types.d.ts +67 -0
- package/dist/types/urls/type-extraction.d.ts +157 -0
- package/dist/types/urls/urls-function.d.ts +24 -0
- package/dist/types/urls.d.ts +1 -0
- package/dist/types/use-loader.d.ts +150 -0
- package/dist/types/vercel/index.d.ts +10 -0
- package/dist/types/vercel/tracing.d.ts +71 -0
- package/dist/types/vite/debug.d.ts +80 -0
- package/dist/types/vite/discovery/bundle-postprocess.d.ts +12 -0
- package/dist/types/vite/discovery/client-urls-projection.d.ts +53 -0
- package/dist/types/vite/discovery/dev-prerender-cache.d.ts +65 -0
- package/dist/types/vite/discovery/discover-routers.d.ts +17 -0
- package/dist/types/vite/discovery/discovery-errors.d.ts +113 -0
- package/dist/types/vite/discovery/gate-state.d.ts +79 -0
- package/dist/types/vite/discovery/prerender-collection.d.ts +24 -0
- package/dist/types/vite/discovery/route-types-writer.d.ts +32 -0
- package/dist/types/vite/discovery/self-gen-tracking.d.ts +22 -0
- package/dist/types/vite/discovery/shell-prerender-phase.d.ts +40 -0
- package/dist/types/vite/discovery/state.d.ts +170 -0
- package/dist/types/vite/discovery/virtual-module-codegen.d.ts +15 -0
- package/dist/types/vite/encryption-key.d.ts +2 -0
- package/dist/types/vite/index.d.ts +11 -0
- package/dist/types/vite/inject-client-debug.d.ts +56 -0
- package/dist/types/vite/plugin-types.d.ts +298 -0
- package/dist/types/vite/plugins/cjs-to-esm.d.ts +6 -0
- package/dist/types/vite/plugins/client-ref-dedup.d.ts +40 -0
- package/dist/types/vite/plugins/client-ref-hashing.d.ts +35 -0
- package/dist/types/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
- package/dist/types/vite/plugins/expose-action-id.d.ts +18 -0
- package/dist/types/vite/plugins/expose-id-utils.d.ts +37 -0
- package/dist/types/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
- package/dist/types/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
- package/dist/types/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
- package/dist/types/vite/plugins/expose-ids/router-transform.d.ts +13 -0
- package/dist/types/vite/plugins/expose-ids/types.d.ts +29 -0
- package/dist/types/vite/plugins/expose-internal-ids.d.ts +16 -0
- package/dist/types/vite/plugins/performance-tracks.d.ts +25 -0
- package/dist/types/vite/plugins/refresh-cmd.d.ts +20 -0
- package/dist/types/vite/plugins/server-ref-hashing.d.ts +24 -0
- package/dist/types/vite/plugins/server-reference-pattern.d.ts +1 -0
- package/dist/types/vite/plugins/use-cache-transform.d.ts +20 -0
- package/dist/types/vite/plugins/vercel-output.d.ts +85 -0
- package/dist/types/vite/plugins/version-injector.d.ts +21 -0
- package/dist/types/vite/plugins/version-plugin.d.ts +19 -0
- package/dist/types/vite/plugins/virtual-entries.d.ts +36 -0
- package/dist/types/vite/plugins/virtual-stub-plugin.d.ts +7 -0
- package/dist/types/vite/rango.d.ts +29 -0
- package/dist/types/vite/router-discovery.d.ts +23 -0
- package/dist/types/vite/utils/ast-handler-extract.d.ts +64 -0
- package/dist/types/vite/utils/banner.d.ts +2 -0
- package/dist/types/vite/utils/bundle-analysis.d.ts +28 -0
- package/dist/types/vite/utils/client-chunks.d.ts +55 -0
- package/dist/types/vite/utils/directive-prologue.d.ts +16 -0
- package/dist/types/vite/utils/forward-user-plugins.d.ts +37 -0
- package/dist/types/vite/utils/manifest-utils.d.ts +7 -0
- package/dist/types/vite/utils/package-resolution.d.ts +6 -0
- package/dist/types/vite/utils/prerender-utils.d.ts +32 -0
- package/dist/types/vite/utils/shared-utils.d.ts +67 -0
- package/dist/types.backup/__internal.d.ts +127 -0
- package/dist/types.backup/bin/rango.d.ts +1 -0
- package/dist/types.backup/browser/action-coordinator.d.ts +57 -0
- package/dist/types.backup/browser/action-fence.d.ts +33 -0
- package/dist/types.backup/browser/app-shell.d.ts +34 -0
- package/dist/types.backup/browser/app-version.d.ts +6 -0
- package/dist/types.backup/browser/connection-warmup.d.ts +31 -0
- package/dist/types.backup/browser/cookie-name.d.ts +66 -0
- package/dist/types.backup/browser/event-controller.d.ts +221 -0
- package/dist/types.backup/browser/history-state.d.ts +26 -0
- package/dist/types.backup/browser/index.d.ts +1 -0
- package/dist/types.backup/browser/intercept-utils.d.ts +30 -0
- package/dist/types.backup/browser/invalidate-client-cache.d.ts +17 -0
- package/dist/types.backup/browser/link-interceptor.d.ts +43 -0
- package/dist/types.backup/browser/logging.d.ts +33 -0
- package/dist/types.backup/browser/merge-segment-loaders.d.ts +38 -0
- package/dist/types.backup/browser/navigation-bridge.d.ts +27 -0
- package/dist/types.backup/browser/navigation-client.d.ts +17 -0
- package/dist/types.backup/browser/navigation-store-handle.d.ts +25 -0
- package/dist/types.backup/browser/navigation-store.d.ts +95 -0
- package/dist/types.backup/browser/navigation-transaction.d.ts +75 -0
- package/dist/types.backup/browser/network-error-handler.d.ts +35 -0
- package/dist/types.backup/browser/partial-update.d.ts +61 -0
- package/dist/types.backup/browser/prefetch/cache.d.ts +183 -0
- package/dist/types.backup/browser/prefetch/fetch.d.ts +52 -0
- package/dist/types.backup/browser/prefetch/observer.d.ts +27 -0
- package/dist/types.backup/browser/prefetch/policy.d.ts +13 -0
- package/dist/types.backup/browser/prefetch/queue.d.ts +48 -0
- package/dist/types.backup/browser/prefetch/resource-ready.d.ts +28 -0
- package/dist/types.backup/browser/rango-state.d.ts +52 -0
- package/dist/types.backup/browser/react/Link.d.ts +140 -0
- package/dist/types.backup/browser/react/NavigationProvider.d.ts +88 -0
- package/dist/types.backup/browser/react/ScrollRestoration.d.ts +78 -0
- package/dist/types.backup/browser/react/context.d.ts +54 -0
- package/dist/types.backup/browser/react/filter-segment-order.d.ts +35 -0
- package/dist/types.backup/browser/react/index.d.ts +1 -0
- package/dist/types.backup/browser/react/location-state-shared.d.ts +162 -0
- package/dist/types.backup/browser/react/location-state.d.ts +29 -0
- package/dist/types.backup/browser/react/mount-context.d.ts +23 -0
- package/dist/types.backup/browser/react/nonce-context.d.ts +14 -0
- package/dist/types.backup/browser/react/shallow-equal.d.ts +5 -0
- package/dist/types.backup/browser/react/use-action.d.ts +61 -0
- package/dist/types.backup/browser/react/use-handle.d.ts +21 -0
- package/dist/types.backup/browser/react/use-href.d.ts +32 -0
- package/dist/types.backup/browser/react/use-link-status.d.ts +36 -0
- package/dist/types.backup/browser/react/use-mount.d.ts +24 -0
- package/dist/types.backup/browser/react/use-navigation.d.ts +15 -0
- package/dist/types.backup/browser/react/use-params.d.ts +21 -0
- package/dist/types.backup/browser/react/use-pathname.d.ts +13 -0
- package/dist/types.backup/browser/react/use-reverse.d.ts +40 -0
- package/dist/types.backup/browser/react/use-router.d.ts +23 -0
- package/dist/types.backup/browser/react/use-search-params.d.ts +19 -0
- package/dist/types.backup/browser/react/use-segments.d.ts +29 -0
- package/dist/types.backup/browser/response-adapter.d.ts +58 -0
- package/dist/types.backup/browser/rsc-router.d.ts +141 -0
- package/dist/types.backup/browser/scroll-restoration.d.ts +103 -0
- package/dist/types.backup/browser/segment-reconciler.d.ts +74 -0
- package/dist/types.backup/browser/segment-structure-assert.d.ts +16 -0
- package/dist/types.backup/browser/server-action-bridge.d.ts +29 -0
- package/dist/types.backup/browser/types.d.ts +530 -0
- package/dist/types.backup/browser/validate-redirect-origin.d.ts +28 -0
- package/dist/types.backup/build/collect-fallback-refs.d.ts +5 -0
- package/dist/types.backup/build/generate-manifest.d.ts +100 -0
- package/dist/types.backup/build/generate-route-types.d.ts +8 -0
- package/dist/types.backup/build/index.d.ts +21 -0
- package/dist/types.backup/build/prefix-tree-utils.d.ts +56 -0
- package/dist/types.backup/build/route-trie.d.ts +89 -0
- package/dist/types.backup/build/route-types/ast-helpers.d.ts +3 -0
- package/dist/types.backup/build/route-types/ast-route-extraction.d.ts +13 -0
- package/dist/types.backup/build/route-types/codegen.d.ts +16 -0
- package/dist/types.backup/build/route-types/include-resolution.d.ts +74 -0
- package/dist/types.backup/build/route-types/param-extraction.d.ts +13 -0
- package/dist/types.backup/build/route-types/per-module-writer.d.ts +18 -0
- package/dist/types.backup/build/route-types/router-processing.d.ts +82 -0
- package/dist/types.backup/build/route-types/scan-filter.d.ts +17 -0
- package/dist/types.backup/build/route-types/source-scan.d.ts +13 -0
- package/dist/types.backup/build/runtime-discovery.d.ts +24 -0
- package/dist/types.backup/cache/background-task.d.ts +21 -0
- package/dist/types.backup/cache/cache-error.d.ts +71 -0
- package/dist/types.backup/cache/cache-key-utils.d.ts +35 -0
- package/dist/types.backup/cache/cache-policy.d.ts +59 -0
- package/dist/types.backup/cache/cache-runtime.d.ts +51 -0
- package/dist/types.backup/cache/cache-scope.d.ts +134 -0
- package/dist/types.backup/cache/cache-tag.d.ts +79 -0
- package/dist/types.backup/cache/cf/cf-base64.d.ts +4 -0
- package/dist/types.backup/cache/cf/cf-cache-constants.d.ts +105 -0
- package/dist/types.backup/cache/cf/cf-cache-store.d.ts +481 -0
- package/dist/types.backup/cache/cf/cf-cache-types.d.ts +300 -0
- package/dist/types.backup/cache/cf/cf-kv-utils.d.ts +22 -0
- package/dist/types.backup/cache/cf/cf-tag-marker-memo.d.ts +15 -0
- package/dist/types.backup/cache/cf/index.d.ts +3 -0
- package/dist/types.backup/cache/document-cache.d.ts +69 -0
- package/dist/types.backup/cache/handle-capture.d.ts +23 -0
- package/dist/types.backup/cache/handle-snapshot.d.ts +39 -0
- package/dist/types.backup/cache/index.d.ts +7 -0
- package/dist/types.backup/cache/memory-segment-store.d.ts +163 -0
- package/dist/types.backup/cache/profile-registry.d.ts +40 -0
- package/dist/types.backup/cache/read-through-swr.d.ts +60 -0
- package/dist/types.backup/cache/segment-codec.d.ts +78 -0
- package/dist/types.backup/cache/shell-snapshot.d.ts +162 -0
- package/dist/types.backup/cache/tag-invalidation.d.ts +74 -0
- package/dist/types.backup/cache/taint.d.ts +71 -0
- package/dist/types.backup/cache/types.d.ts +407 -0
- package/dist/types.backup/cache/vercel/index.d.ts +1 -0
- package/dist/types.backup/cache/vercel/vercel-cache-store.d.ts +267 -0
- package/dist/types.backup/client.d.ts +184 -0
- package/dist/types.backup/client.rsc.d.ts +39 -0
- package/dist/types.backup/cloudflare/index.d.ts +7 -0
- package/dist/types.backup/cloudflare/tracing.d.ts +53 -0
- package/dist/types.backup/component-utils.d.ts +46 -0
- package/dist/types.backup/components/DefaultDocument.d.ts +13 -0
- package/dist/types.backup/context-var.d.ts +84 -0
- package/dist/types.backup/debug.d.ts +57 -0
- package/dist/types.backup/decode-loader-results.d.ts +5 -0
- package/dist/types.backup/default-error-boundary.d.ts +10 -0
- package/dist/types.backup/defer.d.ts +89 -0
- package/dist/types.backup/deps/browser.d.ts +1 -0
- package/dist/types.backup/deps/html-stream-client.d.ts +1 -0
- package/dist/types.backup/deps/html-stream-server.d.ts +1 -0
- package/dist/types.backup/deps/rsc.d.ts +1 -0
- package/dist/types.backup/deps/ssr.d.ts +1 -0
- package/dist/types.backup/encode-kv.d.ts +35 -0
- package/dist/types.backup/errors.d.ts +226 -0
- package/dist/types.backup/escape-script.d.ts +44 -0
- package/dist/types.backup/handle.d.ts +93 -0
- package/dist/types.backup/handles/MetaTags.d.ts +17 -0
- package/dist/types.backup/handles/Scripts.d.ts +38 -0
- package/dist/types.backup/handles/breadcrumbs.d.ts +43 -0
- package/dist/types.backup/handles/deferred-resolution.d.ts +53 -0
- package/dist/types.backup/handles/is-thenable.d.ts +12 -0
- package/dist/types.backup/handles/meta.d.ts +43 -0
- package/dist/types.backup/handles/script.d.ts +139 -0
- package/dist/types.backup/host/cookie-handler.d.ts +8 -0
- package/dist/types.backup/host/errors.d.ts +40 -0
- package/dist/types.backup/host/index.d.ts +33 -0
- package/dist/types.backup/host/pattern-matcher.d.ts +30 -0
- package/dist/types.backup/host/router.d.ts +12 -0
- package/dist/types.backup/host/testing.d.ts +41 -0
- package/dist/types.backup/host/types.d.ts +148 -0
- package/dist/types.backup/host/utils.d.ts +20 -0
- package/dist/types.backup/href-client.d.ts +214 -0
- package/dist/types.backup/index.d.ts +112 -0
- package/dist/types.backup/index.rsc.d.ts +51 -0
- package/dist/types.backup/internal-debug.d.ts +1 -0
- package/dist/types.backup/loader-store.d.ts +193 -0
- package/dist/types.backup/loader.d.ts +18 -0
- package/dist/types.backup/loader.rsc.d.ts +18 -0
- package/dist/types.backup/missing-id-error.d.ts +1 -0
- package/dist/types.backup/outlet-context.d.ts +12 -0
- package/dist/types.backup/outlet-provider.d.ts +12 -0
- package/dist/types.backup/prerender/build-shell-capture.d.ts +104 -0
- package/dist/types.backup/prerender/param-hash.d.ts +6 -0
- package/dist/types.backup/prerender/shell-manifest-key.d.ts +18 -0
- package/dist/types.backup/prerender/store.d.ts +62 -0
- package/dist/types.backup/prerender.d.ts +292 -0
- package/dist/types.backup/redirect-origin.d.ts +55 -0
- package/dist/types.backup/regex-escape.d.ts +6 -0
- package/dist/types.backup/render-error-thrower.d.ts +13 -0
- package/dist/types.backup/response-utils.d.ts +35 -0
- package/dist/types.backup/reverse.d.ts +206 -0
- package/dist/types.backup/root-error-boundary.d.ts +32 -0
- package/dist/types.backup/route-content-wrapper.d.ts +40 -0
- package/dist/types.backup/route-definition/dsl-helpers.d.ts +130 -0
- package/dist/types.backup/route-definition/helper-factories.d.ts +22 -0
- package/dist/types.backup/route-definition/helpers-types.d.ts +392 -0
- package/dist/types.backup/route-definition/index.d.ts +7 -0
- package/dist/types.backup/route-definition/redirect.d.ts +48 -0
- package/dist/types.backup/route-definition/resolve-handler-use.d.ts +19 -0
- package/dist/types.backup/route-definition/use-item-types.d.ts +1 -0
- package/dist/types.backup/route-definition.d.ts +1 -0
- package/dist/types.backup/route-map-builder.d.ts +127 -0
- package/dist/types.backup/route-name.d.ts +27 -0
- package/dist/types.backup/route-types.d.ts +172 -0
- package/dist/types.backup/router/basename.d.ts +10 -0
- package/dist/types.backup/router/content-negotiation.d.ts +91 -0
- package/dist/types.backup/router/debug-manifest.d.ts +7 -0
- package/dist/types.backup/router/error-handling.d.ts +76 -0
- package/dist/types.backup/router/find-match.d.ts +19 -0
- package/dist/types.backup/router/handler-context.d.ts +41 -0
- package/dist/types.backup/router/instrument.d.ts +161 -0
- package/dist/types.backup/router/intercept-resolution.d.ts +79 -0
- package/dist/types.backup/router/lazy-includes.d.ts +26 -0
- package/dist/types.backup/router/loader-resolution.d.ts +63 -0
- package/dist/types.backup/router/logging.d.ts +41 -0
- package/dist/types.backup/router/manifest.d.ts +8 -0
- package/dist/types.backup/router/match-api.d.ts +19 -0
- package/dist/types.backup/router/match-context.d.ts +184 -0
- package/dist/types.backup/router/match-handlers.d.ts +49 -0
- package/dist/types.backup/router/match-middleware/background-revalidation.d.ts +113 -0
- package/dist/types.backup/router/match-middleware/cache-lookup.d.ts +113 -0
- package/dist/types.backup/router/match-middleware/cache-store.d.ts +112 -0
- package/dist/types.backup/router/match-middleware/index.d.ts +80 -0
- package/dist/types.backup/router/match-middleware/intercept-resolution.d.ts +116 -0
- package/dist/types.backup/router/match-middleware/segment-resolution.d.ts +94 -0
- package/dist/types.backup/router/match-pipelines.d.ts +103 -0
- package/dist/types.backup/router/match-result.d.ts +114 -0
- package/dist/types.backup/router/metrics.d.ts +6 -0
- package/dist/types.backup/router/middleware-types.d.ts +74 -0
- package/dist/types.backup/router/middleware.d.ts +116 -0
- package/dist/types.backup/router/navigation-snapshot.d.ts +22 -0
- package/dist/types.backup/router/params-util.d.ts +8 -0
- package/dist/types.backup/router/parse-pattern.d.ts +38 -0
- package/dist/types.backup/router/pattern-matching.d.ts +169 -0
- package/dist/types.backup/router/prefetch-cache-ttl.d.ts +27 -0
- package/dist/types.backup/router/prefetch-limits.d.ts +20 -0
- package/dist/types.backup/router/prerender-match.d.ts +50 -0
- package/dist/types.backup/router/preview-match.d.ts +22 -0
- package/dist/types.backup/router/request-classification.d.ts +104 -0
- package/dist/types.backup/router/revalidation.d.ts +57 -0
- package/dist/types.backup/router/route-snapshot.d.ts +112 -0
- package/dist/types.backup/router/router-context.d.ts +137 -0
- package/dist/types.backup/router/router-interfaces.d.ts +432 -0
- package/dist/types.backup/router/router-options.d.ts +738 -0
- package/dist/types.backup/router/router-registry.d.ts +15 -0
- package/dist/types.backup/router/segment-resolution/fresh.d.ts +55 -0
- package/dist/types.backup/router/segment-resolution/helpers.d.ts +93 -0
- package/dist/types.backup/router/segment-resolution/loader-cache.d.ts +33 -0
- package/dist/types.backup/router/segment-resolution/loader-mask.d.ts +44 -0
- package/dist/types.backup/router/segment-resolution/loader-snapshot.d.ts +90 -0
- package/dist/types.backup/router/segment-resolution/mask-nested.d.ts +53 -0
- package/dist/types.backup/router/segment-resolution/revalidation.d.ts +85 -0
- package/dist/types.backup/router/segment-resolution/static-store.d.ts +17 -0
- package/dist/types.backup/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
- package/dist/types.backup/router/segment-resolution/view-transition-default.d.ts +28 -0
- package/dist/types.backup/router/segment-resolution.d.ts +3 -0
- package/dist/types.backup/router/segment-wrappers.d.ts +53 -0
- package/dist/types.backup/router/state-cookie-name.d.ts +1 -0
- package/dist/types.backup/router/substitute-pattern-params.d.ts +23 -0
- package/dist/types.backup/router/telemetry-otel.d.ts +113 -0
- package/dist/types.backup/router/telemetry.d.ts +215 -0
- package/dist/types.backup/router/timeout.d.ts +68 -0
- package/dist/types.backup/router/tracing.d.ts +125 -0
- package/dist/types.backup/router/trie-matching.d.ts +32 -0
- package/dist/types.backup/router/types.d.ts +98 -0
- package/dist/types.backup/router/url-params.d.ts +26 -0
- package/dist/types.backup/router.d.ts +7 -0
- package/dist/types.backup/rsc/capture-queue.d.ts +6 -0
- package/dist/types.backup/rsc/full-payload.d.ts +22 -0
- package/dist/types.backup/rsc/handler-context.d.ts +31 -0
- package/dist/types.backup/rsc/handler.d.ts +9 -0
- package/dist/types.backup/rsc/helpers.d.ts +213 -0
- package/dist/types.backup/rsc/index.d.ts +17 -0
- package/dist/types.backup/rsc/json-route-result.d.ts +20 -0
- package/dist/types.backup/rsc/loader-fetch.d.ts +14 -0
- package/dist/types.backup/rsc/manifest-init.d.ts +18 -0
- package/dist/types.backup/rsc/nonce.d.ts +28 -0
- package/dist/types.backup/rsc/origin-guard.d.ts +50 -0
- package/dist/types.backup/rsc/progressive-enhancement.d.ts +19 -0
- package/dist/types.backup/rsc/redirect-guard.d.ts +35 -0
- package/dist/types.backup/rsc/response-cache-serve.d.ts +46 -0
- package/dist/types.backup/rsc/response-error.d.ts +19 -0
- package/dist/types.backup/rsc/response-route-handler.d.ts +29 -0
- package/dist/types.backup/rsc/rsc-rendering.d.ts +23 -0
- package/dist/types.backup/rsc/runtime-warnings.d.ts +22 -0
- package/dist/types.backup/rsc/server-action.d.ts +68 -0
- package/dist/types.backup/rsc/shell-build-manifest.d.ts +84 -0
- package/dist/types.backup/rsc/shell-capture-constants.d.ts +27 -0
- package/dist/types.backup/rsc/shell-capture.d.ts +374 -0
- package/dist/types.backup/rsc/shell-serve.d.ts +136 -0
- package/dist/types.backup/rsc/ssr-setup.d.ts +48 -0
- package/dist/types.backup/rsc/transition-gate.d.ts +27 -0
- package/dist/types.backup/rsc/types.d.ts +290 -0
- package/dist/types.backup/runtime-env.d.ts +1 -0
- package/dist/types.backup/search-params.d.ts +125 -0
- package/dist/types.backup/segment-content-promise.d.ts +13 -0
- package/dist/types.backup/segment-fragments.d.ts +56 -0
- package/dist/types.backup/segment-loader-promise.d.ts +22 -0
- package/dist/types.backup/segment-system.d.ts +84 -0
- package/dist/types.backup/serialize.d.ts +164 -0
- package/dist/types.backup/server/context.d.ts +494 -0
- package/dist/types.backup/server/cookie-parse.d.ts +10 -0
- package/dist/types.backup/server/cookie-store.d.ts +107 -0
- package/dist/types.backup/server/fetchable-loader-store.d.ts +20 -0
- package/dist/types.backup/server/handle-store.d.ts +100 -0
- package/dist/types.backup/server/loader-registry.d.ts +32 -0
- package/dist/types.backup/server/request-context.d.ts +596 -0
- package/dist/types.backup/server/root-layout.d.ts +3 -0
- package/dist/types.backup/server.d.ts +15 -0
- package/dist/types.backup/ssr/index.d.ts +233 -0
- package/dist/types.backup/ssr/inject-rsc-eager.d.ts +3 -0
- package/dist/types.backup/ssr/preinit-client-references.d.ts +71 -0
- package/dist/types.backup/ssr/ssr-root.d.ts +69 -0
- package/dist/types.backup/static-handler.d.ts +57 -0
- package/dist/types.backup/testing/cache-status.d.ts +63 -0
- package/dist/types.backup/testing/collect-handle.d.ts +20 -0
- package/dist/types.backup/testing/dispatch.d.ts +123 -0
- package/dist/types.backup/testing/dom.entry.d.ts +15 -0
- package/dist/types.backup/testing/e2e/fixture.d.ts +37 -0
- package/dist/types.backup/testing/e2e/index.d.ts +30 -0
- package/dist/types.backup/testing/e2e/matchers.d.ts +17 -0
- package/dist/types.backup/testing/e2e/page-helpers.d.ts +62 -0
- package/dist/types.backup/testing/e2e/parity.d.ts +111 -0
- package/dist/types.backup/testing/e2e/server.d.ts +35 -0
- package/dist/types.backup/testing/flight-matchers.d.ts +55 -0
- package/dist/types.backup/testing/flight-normalize.d.ts +1 -0
- package/dist/types.backup/testing/flight-tree.d.ts +192 -0
- package/dist/types.backup/testing/flight.d.ts +115 -0
- package/dist/types.backup/testing/flight.entry.d.ts +27 -0
- package/dist/types.backup/testing/generated-routes.d.ts +66 -0
- package/dist/types.backup/testing/index.d.ts +52 -0
- package/dist/types.backup/testing/internal/context.d.ts +225 -0
- package/dist/types.backup/testing/internal/flight-client-globals.d.ts +1 -0
- package/dist/types.backup/testing/internal/seed-vars.d.ts +30 -0
- package/dist/types.backup/testing/render-handler.d.ts +160 -0
- package/dist/types.backup/testing/render-route.d.ts +246 -0
- package/dist/types.backup/testing/run-loader.d.ts +186 -0
- package/dist/types.backup/testing/run-middleware.d.ts +132 -0
- package/dist/types.backup/testing/run-transition-when.d.ts +77 -0
- package/dist/types.backup/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
- package/dist/types.backup/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
- package/dist/types.backup/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
- package/dist/types.backup/testing/vitest-stubs/version.d.ts +1 -0
- package/dist/types.backup/testing/vitest.d.ts +205 -0
- package/dist/types.backup/theme/ThemeProvider.d.ts +13 -0
- package/dist/types.backup/theme/ThemeScript.d.ts +45 -0
- package/dist/types.backup/theme/constants.d.ts +39 -0
- package/dist/types.backup/theme/index.d.ts +29 -0
- package/dist/types.backup/theme/theme-context.d.ts +21 -0
- package/dist/types.backup/theme/theme-script.d.ts +26 -0
- package/dist/types.backup/theme/types.d.ts +162 -0
- package/dist/types.backup/theme/use-theme.d.ts +8 -0
- package/dist/types.backup/types/boundaries.d.ts +93 -0
- package/dist/types.backup/types/cache-types.d.ts +191 -0
- package/dist/types.backup/types/error-types.d.ts +114 -0
- package/dist/types.backup/types/global-namespace.d.ts +90 -0
- package/dist/types.backup/types/handler-context.d.ts +658 -0
- package/dist/types.backup/types/index.d.ts +11 -0
- package/dist/types.backup/types/loader-types.d.ts +182 -0
- package/dist/types.backup/types/request-scope.d.ts +93 -0
- package/dist/types.backup/types/route-config.d.ts +105 -0
- package/dist/types.backup/types/route-entry.d.ts +95 -0
- package/dist/types.backup/types/segments.d.ts +234 -0
- package/dist/types.backup/types.d.ts +1 -0
- package/dist/types.backup/urls/include-helper.d.ts +17 -0
- package/dist/types.backup/urls/include-provider.d.ts +27 -0
- package/dist/types.backup/urls/index.d.ts +6 -0
- package/dist/types.backup/urls/path-helper-types.d.ts +197 -0
- package/dist/types.backup/urls/path-helper.d.ts +12 -0
- package/dist/types.backup/urls/pattern-types.d.ts +166 -0
- package/dist/types.backup/urls/response-types.d.ts +67 -0
- package/dist/types.backup/urls/type-extraction.d.ts +157 -0
- package/dist/types.backup/urls/urls-function.d.ts +24 -0
- package/dist/types.backup/urls.d.ts +1 -0
- package/dist/types.backup/use-loader.d.ts +150 -0
- package/dist/types.backup/vercel/index.d.ts +10 -0
- package/dist/types.backup/vercel/tracing.d.ts +70 -0
- package/dist/types.backup/vite/debug.d.ts +80 -0
- package/dist/types.backup/vite/discovery/bundle-postprocess.d.ts +12 -0
- package/dist/types.backup/vite/discovery/dev-prerender-cache.d.ts +65 -0
- package/dist/types.backup/vite/discovery/discover-routers.d.ts +17 -0
- package/dist/types.backup/vite/discovery/discovery-errors.d.ts +113 -0
- package/dist/types.backup/vite/discovery/gate-state.d.ts +79 -0
- package/dist/types.backup/vite/discovery/prerender-collection.d.ts +24 -0
- package/dist/types.backup/vite/discovery/route-types-writer.d.ts +32 -0
- package/dist/types.backup/vite/discovery/self-gen-tracking.d.ts +22 -0
- package/dist/types.backup/vite/discovery/shell-prerender-phase.d.ts +40 -0
- package/dist/types.backup/vite/discovery/state.d.ts +162 -0
- package/dist/types.backup/vite/discovery/virtual-module-codegen.d.ts +15 -0
- package/dist/types.backup/vite/index.d.ts +11 -0
- package/dist/types.backup/vite/inject-client-debug.d.ts +56 -0
- package/dist/types.backup/vite/plugin-types.d.ts +298 -0
- package/dist/types.backup/vite/plugins/cjs-to-esm.d.ts +6 -0
- package/dist/types.backup/vite/plugins/client-ref-dedup.d.ts +40 -0
- package/dist/types.backup/vite/plugins/client-ref-hashing.d.ts +35 -0
- package/dist/types.backup/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
- package/dist/types.backup/vite/plugins/expose-action-id.d.ts +18 -0
- package/dist/types.backup/vite/plugins/expose-id-utils.d.ts +37 -0
- package/dist/types.backup/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
- package/dist/types.backup/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
- package/dist/types.backup/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
- package/dist/types.backup/vite/plugins/expose-ids/router-transform.d.ts +13 -0
- package/dist/types.backup/vite/plugins/expose-ids/types.d.ts +29 -0
- package/dist/types.backup/vite/plugins/expose-internal-ids.d.ts +6 -0
- package/dist/types.backup/vite/plugins/performance-tracks.d.ts +25 -0
- package/dist/types.backup/vite/plugins/refresh-cmd.d.ts +20 -0
- package/dist/types.backup/vite/plugins/use-cache-transform.d.ts +20 -0
- package/dist/types.backup/vite/plugins/vercel-output.d.ts +85 -0
- package/dist/types.backup/vite/plugins/version-injector.d.ts +21 -0
- package/dist/types.backup/vite/plugins/version-plugin.d.ts +19 -0
- package/dist/types.backup/vite/plugins/virtual-entries.d.ts +36 -0
- package/dist/types.backup/vite/plugins/virtual-stub-plugin.d.ts +7 -0
- package/dist/types.backup/vite/rango.d.ts +29 -0
- package/dist/types.backup/vite/router-discovery.d.ts +23 -0
- package/dist/types.backup/vite/utils/ast-handler-extract.d.ts +64 -0
- package/dist/types.backup/vite/utils/banner.d.ts +2 -0
- package/dist/types.backup/vite/utils/bundle-analysis.d.ts +28 -0
- package/dist/types.backup/vite/utils/client-chunks.d.ts +55 -0
- package/dist/types.backup/vite/utils/directive-prologue.d.ts +16 -0
- package/dist/types.backup/vite/utils/forward-user-plugins.d.ts +37 -0
- package/dist/types.backup/vite/utils/manifest-utils.d.ts +7 -0
- package/dist/types.backup/vite/utils/package-resolution.d.ts +6 -0
- package/dist/types.backup/vite/utils/prerender-utils.d.ts +32 -0
- package/dist/types.backup/vite/utils/shared-utils.d.ts +55 -0
- package/dist/vite/index.js +9695 -3592
- package/package.json +119 -39
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +82 -5
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +232 -34
- package/skills/caching/SKILL.md +375 -19
- package/skills/catalog.json +283 -0
- package/skills/cloudflare/SKILL.md +151 -0
- package/skills/cloudflare/agents/openai.yaml +4 -0
- package/skills/cloudflare/references/d1-and-local-dev.md +131 -0
- package/skills/cloudflare/references/streaming-and-deploy.md +107 -0
- package/skills/cloudflare/references/webhooks-and-crypto.md +147 -0
- package/skills/comparison/SKILL.md +50 -0
- package/skills/comparison/agents/openai.yaml +4 -0
- package/skills/comparison/references/framework-comparison.md +844 -0
- package/skills/composability/SKILL.md +124 -4
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +5 -11
- package/skills/defer-hydration/SKILL.md +235 -0
- package/skills/deployment-caching/SKILL.md +176 -0
- package/skills/document-cache/SKILL.md +116 -58
- package/skills/fonts/SKILL.md +1 -1
- package/skills/handler-use/SKILL.md +12 -10
- package/skills/hooks/SKILL.md +73 -699
- package/skills/hooks/data.md +273 -0
- package/skills/hooks/handle-and-actions.md +103 -0
- package/skills/hooks/navigation.md +110 -0
- package/skills/hooks/outlets.md +62 -0
- package/skills/hooks/state.md +228 -0
- package/skills/hooks/urls.md +135 -0
- package/skills/host-router/SKILL.md +129 -27
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +75 -19
- package/skills/layout/SKILL.md +40 -19
- package/skills/links/SKILL.md +211 -17
- package/skills/loader/SKILL.md +230 -25
- package/skills/middleware/SKILL.md +58 -13
- package/skills/migrate-nextjs/SKILL.md +267 -33
- package/skills/migrate-nextjs/backend-host-swap.md +120 -0
- package/skills/migrate-react-router/SKILL.md +59 -671
- package/skills/migrate-react-router/component-migration.md +196 -0
- package/skills/migrate-react-router/data-and-actions.md +225 -0
- package/skills/migrate-react-router/route-mapping.md +271 -0
- package/skills/mime-routes/SKILL.md +55 -18
- package/skills/observability/SKILL.md +231 -0
- package/skills/parallel/SKILL.md +50 -10
- package/skills/ppr/SKILL.md +904 -0
- package/skills/prerender/SKILL.md +130 -68
- package/skills/rango/SKILL.md +321 -26
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +172 -52
- package/skills/route/SKILL.md +123 -9
- package/skills/router-setup/SKILL.md +53 -9
- package/skills/scripts/SKILL.md +179 -0
- package/skills/server-actions/SKILL.md +776 -0
- package/skills/shell-manifest/SKILL.md +185 -0
- package/skills/streams-and-websockets/SKILL.md +1 -1
- package/skills/tailwind/SKILL.md +28 -4
- package/skills/testing/SKILL.md +131 -0
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +172 -0
- package/skills/testing/client-components.md +131 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +131 -0
- package/skills/testing/loader.md +128 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +122 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +85 -0
- package/skills/testing/server-actions.md +107 -0
- package/skills/testing/server-tree.md +128 -0
- package/skills/testing/setup.md +123 -0
- package/skills/theme/SKILL.md +1 -1
- package/skills/typesafety/SKILL.md +45 -628
- package/skills/typesafety/env-and-bindings.md +254 -0
- package/skills/typesafety/generated-files-and-cli.md +342 -0
- package/skills/typesafety/params-and-search.md +153 -0
- package/skills/typesafety/route-types.md +213 -0
- package/skills/use-cache/SKILL.md +121 -15
- package/skills/vercel/SKILL.md +149 -0
- package/skills/view-transitions/SKILL.md +341 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +0 -65
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +14 -27
- package/src/browser/connection-warmup.ts +134 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/dev-discovery.ts +66 -0
- package/src/browser/event-controller.ts +400 -168
- package/src/browser/history-state.ts +21 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/invalidate-client-cache.ts +52 -0
- package/src/browser/link-interceptor.ts +469 -20
- package/src/browser/logging.ts +28 -0
- package/src/browser/merge-segment-loaders.ts +6 -4
- package/src/browser/navigation-bridge.ts +164 -69
- package/src/browser/navigation-client.ts +199 -96
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +165 -345
- package/src/browser/navigation-transaction.ts +9 -59
- package/src/browser/network-error-handler.ts +34 -7
- package/src/browser/notify-listeners.ts +22 -0
- package/src/browser/partial-update.ts +219 -163
- package/src/browser/prefetch/cache.ts +240 -97
- package/src/browser/prefetch/default-strategy.ts +74 -0
- package/src/browser/prefetch/fetch.ts +317 -51
- package/src/browser/prefetch/invalidation.ts +30 -0
- package/src/browser/prefetch/loader.ts +111 -0
- package/src/browser/prefetch/observer.ts +50 -22
- package/src/browser/prefetch/queue.ts +25 -7
- package/src/browser/prefetch/runtime.ts +6 -0
- package/src/browser/rango-state.ts +177 -114
- package/src/browser/react/Link.tsx +115 -75
- package/src/browser/react/NavigationProvider.tsx +194 -143
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/context.ts +4 -0
- package/src/browser/react/filter-segment-order.ts +66 -7
- package/src/browser/react/index.ts +0 -48
- package/src/browser/react/location-state-shared.ts +178 -8
- package/src/browser/react/location-state.ts +39 -14
- package/src/browser/react/use-action.ts +6 -15
- package/src/browser/react/use-handle.ts +17 -14
- package/src/browser/react/use-href.tsx +8 -1
- package/src/browser/react/use-link-status.ts +33 -8
- package/src/browser/react/use-navigation.ts +10 -5
- package/src/browser/react/use-params.ts +11 -11
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +21 -6
- package/src/browser/react/use-search-params.ts +0 -5
- package/src/browser/react/use-segments.ts +11 -21
- package/src/browser/response-adapter.ts +99 -8
- package/src/browser/rsc-router.tsx +230 -42
- package/src/browser/scroll-restoration.ts +37 -22
- package/src/browser/segment-reconciler.ts +31 -21
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +262 -65
- package/src/browser/types.ts +132 -47
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +213 -184
- package/src/build/generate-route-types.ts +3 -1
- package/src/build/index.ts +11 -3
- package/src/build/merge-full-manifests.ts +161 -0
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +43 -280
- package/src/build/route-types/ast-route-extraction.ts +15 -8
- package/src/build/route-types/codegen.ts +16 -5
- package/src/build/route-types/include-resolution.ts +513 -64
- package/src/build/route-types/param-extraction.ts +6 -3
- package/src/build/route-types/per-module-writer.ts +33 -12
- package/src/build/route-types/router-processing.ts +312 -204
- package/src/build/route-types/scan-filter.ts +1 -1
- package/src/build/route-types/source-scan.ts +216 -0
- package/src/build/runtime-discovery.ts +32 -29
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-exec-scope.ts +47 -0
- package/src/cache/cache-key-utils.ts +73 -15
- package/src/cache/cache-policy.ts +108 -34
- package/src/cache/cache-runtime.ts +566 -121
- package/src/cache/cache-scope.ts +383 -105
- package/src/cache/cache-tag.ts +149 -0
- package/src/cache/cf/cf-base64.ts +33 -0
- package/src/cache/cf/cf-cache-constants.ts +134 -0
- package/src/cache/cf/cf-cache-store.ts +3028 -391
- package/src/cache/cf/cf-cache-types.ts +417 -0
- package/src/cache/cf/cf-kv-utils.ts +84 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +108 -0
- package/src/cache/cf/cf-zone-purge.ts +101 -0
- package/src/cache/cf/index.ts +11 -16
- package/src/cache/document-cache.ts +184 -53
- package/src/cache/handle-snapshot.ts +92 -1
- package/src/cache/index.ts +32 -20
- package/src/cache/memory-segment-store.ts +286 -37
- package/src/cache/profile-registry.ts +46 -31
- package/src/cache/read-through-swr.ts +66 -16
- package/src/cache/search-params-filter.ts +118 -0
- package/src/cache/segment-codec.ts +80 -25
- package/src/cache/shell-snapshot.ts +516 -0
- package/src/cache/tag-invalidation.ts +230 -0
- package/src/cache/taint.ts +28 -9
- package/src/cache/types.ts +323 -100
- package/src/cache/vercel/index.ts +11 -0
- package/src/cache/vercel/vercel-cache-store.ts +1264 -0
- package/src/client-urls/client-root.tsx +161 -0
- package/src/client-urls/client-urls.ts +665 -0
- package/src/client-urls/navigation.ts +237 -0
- package/src/client-urls/revalidation-protocol.ts +56 -0
- package/src/client-urls/server-projection.ts +563 -0
- package/src/client-urls/types.ts +178 -0
- package/src/client.rsc.tsx +48 -21
- package/src/client.tsx +77 -67
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +112 -0
- package/src/component-utils.ts +19 -0
- package/src/components/DefaultDocument.tsx +8 -2
- package/src/context-var.ts +18 -6
- package/src/decode-loader-results.ts +160 -0
- package/src/defer.ts +185 -0
- package/src/deps/ssr.ts +4 -2
- package/src/dev-discovery-protocol.ts +11 -0
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +44 -4
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +67 -37
- package/src/handles/MetaTags.tsx +24 -53
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +35 -8
- package/src/handles/deferred-resolution.ts +134 -0
- package/src/handles/is-thenable.ts +16 -0
- package/src/handles/meta.ts +14 -40
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +9 -60
- package/src/host/errors.ts +13 -22
- package/src/host/index.ts +9 -2
- package/src/host/pattern-matcher.ts +23 -52
- package/src/host/router.ts +107 -99
- package/src/host/testing.ts +40 -27
- package/src/host/types.ts +37 -4
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +137 -22
- package/src/index.rsc.ts +105 -12
- package/src/index.ts +102 -14
- package/src/internal-debug.ts +11 -10
- package/src/loader-redirect.tsx +47 -0
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +20 -13
- package/src/loader.ts +12 -11
- package/src/missing-id-error.ts +68 -0
- package/src/outlet-context.ts +12 -0
- package/src/outlet-provider.tsx +16 -6
- package/src/prerender/build-shell-capture.ts +453 -0
- package/src/prerender/param-hash.ts +16 -16
- package/src/prerender/shell-manifest-key.ts +20 -0
- package/src/prerender/store.ts +47 -38
- package/src/prerender.ts +81 -13
- package/src/redirect-origin.ts +143 -0
- package/src/regex-escape.ts +8 -0
- package/src/render-error-thrower.tsx +20 -0
- package/src/response-utils.ts +34 -0
- package/src/reverse.ts +65 -40
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +112 -78
- package/src/route-definition/dsl-helpers.ts +300 -313
- package/src/route-definition/helper-factories.ts +28 -140
- package/src/route-definition/helpers-types.ts +92 -62
- package/src/route-definition/index.ts +1 -2
- package/src/route-definition/redirect.ts +44 -11
- package/src/route-definition/resolve-handler-use.ts +6 -1
- package/src/route-definition/use-item-types.ts +29 -0
- package/src/route-map-builder.ts +102 -74
- package/src/route-types.ts +19 -46
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +120 -30
- package/src/router/error-handling.ts +110 -29
- package/src/router/find-match.ts +129 -30
- package/src/router/handler-context.ts +41 -57
- package/src/router/instrument.ts +401 -0
- package/src/router/intercept-resolution.ts +98 -21
- package/src/router/lazy-includes.ts +82 -58
- package/src/router/loader-resolution.ts +401 -85
- package/src/router/logging.ts +0 -6
- package/src/router/manifest.ts +74 -40
- package/src/router/match-api.ts +91 -55
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +268 -171
- package/src/router/match-middleware/background-revalidation.ts +40 -24
- package/src/router/match-middleware/cache-lookup.ts +316 -302
- package/src/router/match-middleware/cache-store.ts +134 -52
- package/src/router/match-middleware/intercept-resolution.ts +0 -22
- package/src/router/match-middleware/segment-resolution.ts +0 -22
- package/src/router/match-pipelines.ts +1 -42
- package/src/router/match-result.ts +76 -79
- package/src/router/metrics.ts +17 -36
- package/src/router/middleware-types.ts +20 -110
- package/src/router/middleware.ts +275 -173
- package/src/router/navigation-snapshot.ts +51 -60
- package/src/router/params-util.ts +23 -0
- package/src/router/parse-pattern.ts +115 -0
- package/src/router/pattern-matching.ts +134 -154
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prefetch-default.ts +59 -0
- package/src/router/prefetch-limits.ts +37 -0
- package/src/router/prerender-match.ts +159 -69
- package/src/router/preview-match.ts +6 -2
- package/src/router/request-classification.ts +50 -69
- package/src/router/revalidation.ts +146 -83
- package/src/router/route-snapshot.ts +14 -3
- package/src/router/route-trie-builder.ts +334 -0
- package/src/router/router-context.ts +6 -29
- package/src/router/router-interfaces.ts +168 -38
- package/src/router/router-options.ts +235 -11
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +163 -88
- package/src/router/segment-resolution/helpers.ts +96 -18
- package/src/router/segment-resolution/loader-cache.ts +187 -39
- package/src/router/segment-resolution/loader-mask.ts +60 -0
- package/src/router/segment-resolution/loader-snapshot.ts +259 -0
- package/src/router/segment-resolution/mask-nested.ts +99 -0
- package/src/router/segment-resolution/revalidation.ts +316 -321
- package/src/router/segment-resolution/static-store.ts +55 -15
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution/view-transition-default.ts +60 -0
- package/src/router/segment-resolution.ts +5 -1
- package/src/router/segment-wrappers.ts +6 -5
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/substitute-pattern-params.ts +75 -0
- package/src/router/telemetry-otel.ts +171 -200
- package/src/router/telemetry.ts +106 -20
- package/src/router/timeout.ts +53 -22
- package/src/router/tracing.ts +235 -0
- package/src/router/transition-when.ts +76 -0
- package/src/router/trie-matching.ts +170 -64
- package/src/router/types.ts +9 -63
- package/src/router/url-params.ts +13 -5
- package/src/router.ts +248 -77
- package/src/rsc/capture-queue.ts +218 -0
- package/src/rsc/full-payload.ts +77 -0
- package/src/rsc/handler-context.ts +4 -2
- package/src/rsc/handler.ts +562 -284
- package/src/rsc/helpers.ts +179 -9
- package/src/rsc/index.ts +2 -5
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +116 -40
- package/src/rsc/manifest-init.ts +55 -56
- package/src/rsc/nonce.ts +10 -1
- package/src/rsc/origin-guard.ts +39 -25
- package/src/rsc/progressive-enhancement.ts +377 -84
- package/src/rsc/redirect-guard.ts +102 -0
- package/src/rsc/render-pipeline.ts +611 -0
- package/src/rsc/response-cache-serve.ts +259 -0
- package/src/rsc/response-error.ts +79 -12
- package/src/rsc/response-route-handler.ts +73 -212
- package/src/rsc/routine-plan.ts +359 -0
- package/src/rsc/rsc-rendering.ts +1624 -171
- package/src/rsc/runtime-warnings.ts +23 -10
- package/src/rsc/server-action.ts +420 -139
- package/src/rsc/shell-build-manifest.ts +336 -0
- package/src/rsc/shell-capture-constants.ts +45 -0
- package/src/rsc/shell-capture.ts +2063 -0
- package/src/rsc/shell-serve.ts +337 -0
- package/src/rsc/ssr-setup.ts +111 -16
- package/src/rsc/stream-idle.ts +137 -0
- package/src/rsc/transition-gate.ts +86 -0
- package/src/rsc/types.ts +91 -5
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +35 -30
- package/src/segment-fragments.ts +165 -0
- package/src/segment-loader-promise.ts +49 -4
- package/src/segment-system.tsx +441 -153
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +416 -55
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +162 -15
- package/src/server/handle-store.ts +190 -70
- package/src/server/loader-registry.ts +33 -42
- package/src/server/request-context.ts +805 -177
- package/src/server.ts +7 -2
- package/src/ssr/index.tsx +631 -183
- package/src/ssr/inject-rsc-eager.ts +167 -0
- package/src/ssr/preinit-client-references.ts +106 -0
- package/src/ssr/ssr-root.tsx +262 -0
- package/src/static-handler.ts +28 -15
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +46 -0
- package/src/testing/dispatch.ts +951 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +147 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +319 -0
- package/src/testing/e2e/parity.ts +400 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +257 -0
- package/src/testing/generated-routes.ts +199 -0
- package/src/testing/index.ts +121 -0
- package/src/testing/internal/context.ts +380 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +371 -0
- package/src/testing/render-route.tsx +667 -0
- package/src/testing/run-loader.ts +423 -0
- package/src/testing/run-middleware.ts +219 -0
- package/src/testing/run-transition-when.ts +197 -0
- package/src/testing/shell-status.ts +206 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +305 -0
- package/src/theme/ThemeProvider.tsx +56 -84
- package/src/theme/ThemeScript.tsx +7 -9
- package/src/theme/constants.ts +52 -13
- package/src/theme/index.ts +0 -7
- package/src/theme/theme-context.ts +1 -5
- package/src/theme/theme-script.ts +22 -21
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +15 -35
- package/src/types/cache-types.ts +13 -4
- package/src/types/error-types.ts +30 -90
- package/src/types/global-namespace.ts +54 -41
- package/src/types/handler-context.ts +121 -30
- package/src/types/index.ts +3 -10
- package/src/types/loader-types.ts +38 -7
- package/src/types/request-scope.ts +8 -22
- package/src/types/route-config.ts +20 -52
- package/src/types/route-entry.ts +3 -6
- package/src/types/segments.ts +147 -14
- package/src/urls/include-helper.ts +38 -64
- package/src/urls/include-provider.ts +71 -0
- package/src/urls/index.ts +2 -11
- package/src/urls/path-helper-types.ts +76 -24
- package/src/urls/path-helper.ts +30 -110
- package/src/urls/pattern-types.ts +101 -19
- package/src/urls/response-types.ts +20 -19
- package/src/urls/type-extraction.ts +98 -154
- package/src/urls/urls-function.ts +1 -19
- package/src/use-loader.tsx +355 -109
- package/src/vercel/index.ts +11 -0
- package/src/vercel/tracing.ts +89 -0
- package/src/vite/debug.ts +102 -3
- package/src/vite/discovery/bundle-postprocess.ts +18 -14
- package/src/vite/discovery/client-urls-projection.ts +322 -0
- package/src/vite/discovery/dev-prerender-cache.ts +117 -0
- package/src/vite/discovery/discover-routers.ts +178 -151
- package/src/vite/discovery/discovery-errors.ts +255 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +125 -70
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/shell-prerender-phase.ts +397 -0
- package/src/vite/discovery/state.ts +104 -6
- package/src/vite/discovery/virtual-module-codegen.ts +226 -87
- package/src/vite/encryption-key.ts +29 -0
- package/src/vite/index.ts +12 -0
- package/src/vite/inject-client-debug.ts +88 -0
- package/src/vite/plugin-types.ts +243 -10
- package/src/vite/plugins/cjs-to-esm.ts +16 -19
- package/src/vite/plugins/client-ref-dedup.ts +16 -11
- package/src/vite/plugins/client-ref-hashing.ts +28 -15
- package/src/vite/plugins/cloudflare-protocol-stub.ts +1 -21
- package/src/vite/plugins/expose-action-id.ts +50 -97
- package/src/vite/plugins/expose-id-utils.ts +88 -55
- package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
- package/src/vite/plugins/expose-ids/handler-transform.ts +11 -90
- package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
- package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
- package/src/vite/plugins/expose-internal-ids.ts +551 -486
- package/src/vite/plugins/performance-tracks.ts +25 -22
- package/src/vite/plugins/refresh-cmd.ts +1 -1
- package/src/vite/plugins/server-ref-hashing.ts +74 -0
- package/src/vite/plugins/server-reference-pattern.ts +10 -0
- package/src/vite/plugins/use-cache-transform.ts +73 -83
- package/src/vite/plugins/vercel-output.ts +384 -0
- package/src/vite/plugins/version-injector.ts +39 -29
- package/src/vite/plugins/version-plugin.ts +45 -40
- package/src/vite/plugins/virtual-entries.ts +193 -30
- package/src/vite/rango.ts +240 -128
- package/src/vite/router-discovery.ts +1518 -174
- package/src/vite/utils/ast-handler-extract.ts +26 -35
- package/src/vite/utils/bundle-analysis.ts +10 -15
- package/src/vite/utils/client-chunks.ts +184 -0
- package/src/vite/utils/directive-prologue.ts +40 -0
- package/src/vite/utils/forward-user-plugins.ts +171 -0
- package/src/vite/utils/manifest-utils.ts +1 -59
- package/src/vite/utils/package-resolution.ts +2 -73
- package/src/vite/utils/prerender-utils.ts +96 -49
- package/src/vite/utils/shared-utils.ts +156 -43
- package/src/browser/action-response-classifier.ts +0 -99
- package/src/browser/react/use-client-cache.ts +0 -58
- package/src/browser/shallow.ts +0 -40
- package/src/handles/index.ts +0 -7
- package/src/network-error-thrower.tsx +0 -23
- package/src/router/middleware-cookies.ts +0 -55
package/src/segment-system.tsx
CHANGED
|
@@ -1,26 +1,68 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { createElement, type ReactNode, type ComponentType } from "react";
|
|
3
|
-
import { OutletProvider } from "./
|
|
3
|
+
import { OutletProvider } from "./outlet-provider.js";
|
|
4
4
|
import { MountContextProvider } from "./browser/react/mount-context.js";
|
|
5
5
|
import type { ResolvedSegment, RootLayoutProps } from "./types.js";
|
|
6
|
-
import {
|
|
6
|
+
import { decodeLoaderResults } from "./decode-loader-results.js";
|
|
7
7
|
import { invariant } from "./errors.js";
|
|
8
8
|
import {
|
|
9
9
|
RouteContentWrapper,
|
|
10
10
|
LoaderBoundary,
|
|
11
|
+
StreamedLoaderErrorBoundary,
|
|
11
12
|
} from "./route-content-wrapper.js";
|
|
12
13
|
import { RootErrorBoundary } from "./root-error-boundary.js";
|
|
14
|
+
import { INTERNAL_RANGO_DEBUG } from "./internal-debug.js";
|
|
13
15
|
import { getMemoizedContentPromise } from "./segment-content-promise.js";
|
|
14
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
buildLoaderPromise,
|
|
18
|
+
getMemoizedLoaderPromise,
|
|
19
|
+
} from "./segment-loader-promise.js";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Debug log for the segment tree build, gated on the baked flag. Runs on BOTH
|
|
23
|
+
* sides now, environment-tagged: `[Browser][segments]` lines up with the
|
|
24
|
+
* `[Browser][boot]` sequence around hydrateRoot; `[Server][segments]` exposes
|
|
25
|
+
* the SSR/RSC tree-build stalls (blocking loader awaits during fizz are what
|
|
26
|
+
* dominate MISS TTFB) that used to be invisible because the logs were
|
|
27
|
+
* window-gated. Server lines have no request correlation — segment-system is
|
|
28
|
+
* shared client code and cannot import request-context (node:async_hooks
|
|
29
|
+
* would enter the browser bundle) — so on a busy server, correlate by
|
|
30
|
+
* timestamp + segment ids.
|
|
31
|
+
*/
|
|
32
|
+
function segDebugLog(msg: string, details?: Record<string, unknown>): void {
|
|
33
|
+
if (!INTERNAL_RANGO_DEBUG) return;
|
|
34
|
+
const env = typeof window === "object" ? "[Browser]" : "[Server]";
|
|
35
|
+
const prefix = `${env}[segments] ${msg} @ ${Math.round(performance.now())}ms`;
|
|
36
|
+
if (details) {
|
|
37
|
+
console.log(prefix, details);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
console.log(prefix);
|
|
41
|
+
}
|
|
15
42
|
|
|
16
43
|
// ViewTransition is only available in React experimental.
|
|
17
44
|
// Access via namespace import to avoid compile-time errors on stable React.
|
|
18
45
|
const ReactViewTransition: any =
|
|
19
46
|
"ViewTransition" in React ? (React as any).ViewTransition : null;
|
|
20
47
|
|
|
21
|
-
|
|
48
|
+
// A loading skeleton is renderable only when it is a real ReactNode value.
|
|
49
|
+
// `false` is treated as "not renderable" here. This is the three-term gate;
|
|
50
|
+
// the distinct two-term gate at the LoaderBoundary site deliberately treats
|
|
51
|
+
// `false` as "create a boundary without a RouteContentWrapper"
|
|
52
|
+
// (tree-structure.md), so it must NOT use this helper.
|
|
53
|
+
function isRenderableLoading(loading: ReactNode): boolean {
|
|
54
|
+
return loading !== undefined && loading !== null && loading !== false;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Exported for unit testing the no-parallel fast path (D6); internal otherwise.
|
|
58
|
+
export function restoreParallelLoaderMarkers(
|
|
22
59
|
segments: ResolvedSegment[],
|
|
23
60
|
): ResolvedSegment[] {
|
|
61
|
+
// Parallel-loading markers only exist when a parallel segment is present, so
|
|
62
|
+
// a list with no parallel slot has nothing to restore. Skip the Map alloc and
|
|
63
|
+
// full scan in that (common) case — this runs on every render.
|
|
64
|
+
if (!segments.some((s) => s.type === "parallel")) return segments;
|
|
65
|
+
|
|
24
66
|
const parallelLoadingByNamespace = new Map<string, ReactNode>();
|
|
25
67
|
let nextSegments: ResolvedSegment[] | null = null;
|
|
26
68
|
|
|
@@ -28,12 +70,7 @@ function restoreParallelLoaderMarkers(
|
|
|
28
70
|
const segment = segments[i];
|
|
29
71
|
|
|
30
72
|
if (segment.type === "parallel") {
|
|
31
|
-
if (
|
|
32
|
-
segment.namespace &&
|
|
33
|
-
segment.loading !== undefined &&
|
|
34
|
-
segment.loading !== null &&
|
|
35
|
-
segment.loading !== false
|
|
36
|
-
) {
|
|
73
|
+
if (segment.namespace && isRenderableLoading(segment.loading)) {
|
|
37
74
|
parallelLoadingByNamespace.set(segment.namespace, segment.loading);
|
|
38
75
|
}
|
|
39
76
|
continue;
|
|
@@ -59,42 +96,6 @@ function restoreParallelLoaderMarkers(
|
|
|
59
96
|
return nextSegments ?? segments;
|
|
60
97
|
}
|
|
61
98
|
|
|
62
|
-
/**
|
|
63
|
-
* Resolve loader data from raw results, unwrapping LoaderDataResult wrappers
|
|
64
|
-
*/
|
|
65
|
-
function resolveLoaderData(
|
|
66
|
-
resolvedData: any[],
|
|
67
|
-
loaderIds: string[],
|
|
68
|
-
): { loaderData: Record<string, any>; errorFallback: ReactNode } {
|
|
69
|
-
const loaderData: Record<string, any> = {};
|
|
70
|
-
let errorFallback: ReactNode = null;
|
|
71
|
-
|
|
72
|
-
for (let i = 0; i < loaderIds.length; i++) {
|
|
73
|
-
const id = loaderIds[i];
|
|
74
|
-
const result = resolvedData[i];
|
|
75
|
-
|
|
76
|
-
if (!isLoaderDataResult(result)) {
|
|
77
|
-
// Legacy format - direct data
|
|
78
|
-
loaderData[id] = result;
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
if (result.ok) {
|
|
83
|
-
loaderData[id] = result.data;
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Error case
|
|
88
|
-
if (result.fallback) {
|
|
89
|
-
errorFallback = result.fallback;
|
|
90
|
-
} else {
|
|
91
|
-
throw new Error(result.error.message);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return { loaderData, errorFallback };
|
|
96
|
-
}
|
|
97
|
-
|
|
98
99
|
/**
|
|
99
100
|
* Options for renderSegments
|
|
100
101
|
*/
|
|
@@ -113,6 +114,9 @@ export interface RenderSegmentsOptions {
|
|
|
113
114
|
*/
|
|
114
115
|
forceAwait?: boolean;
|
|
115
116
|
|
|
117
|
+
/** Seeded descendant client-route pending state for testing. */
|
|
118
|
+
outletPending?: boolean;
|
|
119
|
+
|
|
116
120
|
/**
|
|
117
121
|
* Intercept segments to inject into the tree.
|
|
118
122
|
* These are parallel segments from intercept routes that need to be
|
|
@@ -131,11 +135,61 @@ export interface RenderSegmentsOptions {
|
|
|
131
135
|
rootLayout?: ComponentType<RootLayoutProps>;
|
|
132
136
|
}
|
|
133
137
|
|
|
138
|
+
function createViewTransitionBoundary(
|
|
139
|
+
transition: NonNullable<ResolvedSegment["transition"]>,
|
|
140
|
+
children: ReactNode,
|
|
141
|
+
): ReactNode {
|
|
142
|
+
// `viewTransition` is a router-specific flag (boundary opt-out), not a React
|
|
143
|
+
// <ViewTransition> prop — strip it so it never reaches React.
|
|
144
|
+
const { viewTransition: _viewTransition, ...vtProps } = transition;
|
|
145
|
+
return createElement(ReactViewTransition, {
|
|
146
|
+
...vtProps,
|
|
147
|
+
children,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function wrapDefaultOutletContent(
|
|
152
|
+
content: ReactNode,
|
|
153
|
+
transition: NonNullable<ResolvedSegment["transition"]>,
|
|
154
|
+
): ReactNode {
|
|
155
|
+
if (!React.isValidElement(content)) {
|
|
156
|
+
return createViewTransitionBoundary(transition, content);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const props = content.props as any;
|
|
160
|
+
|
|
161
|
+
if (content.type === MountContextProvider) {
|
|
162
|
+
return React.cloneElement(content, {
|
|
163
|
+
children: wrapDefaultOutletContent(props.children, transition),
|
|
164
|
+
} as any);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (content.type === OutletProvider && props.segment?.type === "layout") {
|
|
168
|
+
return React.cloneElement(content, {
|
|
169
|
+
content: wrapDefaultOutletContent(props.content, transition),
|
|
170
|
+
} as any);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (content.type === LoaderBoundary && props.segment?.type === "layout") {
|
|
174
|
+
return React.cloneElement(content, {
|
|
175
|
+
outletContent: wrapDefaultOutletContent(props.outletContent, transition),
|
|
176
|
+
} as any);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return createViewTransitionBoundary(transition, content);
|
|
180
|
+
}
|
|
181
|
+
|
|
134
182
|
/**
|
|
135
183
|
* Render segments into a React tree with proper layout nesting
|
|
136
184
|
*
|
|
137
|
-
* Layouts nest using OutletProvider
|
|
138
|
-
* render as
|
|
185
|
+
* Layouts nest using OutletProvider; a layout receives the inner content via
|
|
186
|
+
* its `<Outlet />`. Parallel segments do NOT render as inline Fragment siblings
|
|
187
|
+
* — they flow through OutletContext.parallel and are resolved where a layout
|
|
188
|
+
* places `<ParallelOutlet name="@sidebar" />` (or `<Outlet name="@sidebar" />`).
|
|
189
|
+
*
|
|
190
|
+
* The result is always wrapped in RootErrorBoundary so unhandled errors never
|
|
191
|
+
* blank the screen. When `options.rootLayout` is provided it wraps the error
|
|
192
|
+
* boundary at the OUTERMOST level (so the app shell survives errors).
|
|
139
193
|
*
|
|
140
194
|
* Error segments are treated like route segments - they render their fallback
|
|
141
195
|
* component in place of the failed segment. When an error occurs in a handler,
|
|
@@ -147,27 +201,30 @@ export interface RenderSegmentsOptions {
|
|
|
147
201
|
* notFoundBoundary's fallback component.
|
|
148
202
|
*
|
|
149
203
|
* @param segments - Array of resolved segments to render
|
|
150
|
-
* @returns ReactNode
|
|
204
|
+
* @returns Promise resolving to the ReactNode tree (the function is async)
|
|
151
205
|
*
|
|
152
206
|
* @example
|
|
153
207
|
* ```typescript
|
|
154
208
|
* const segments = [
|
|
155
|
-
* { id: 'L0.0', type: 'layout', component: <
|
|
156
|
-
* { id: '
|
|
157
|
-
* { id: '
|
|
158
|
-
* { id: 'P3.0', type: 'parallel', component: <Sidebar />, slot: '@sidebar' }
|
|
209
|
+
* { id: 'L0.0', type: 'layout', component: <BlogLayout /> },
|
|
210
|
+
* { id: 'L0R1', type: 'route', component: <BlogPost /> },
|
|
211
|
+
* { id: 'L0R1.@sidebar', type: 'parallel', component: <Sidebar />, slot: '@sidebar' }
|
|
159
212
|
* ];
|
|
160
213
|
*
|
|
161
|
-
*
|
|
162
|
-
* //
|
|
163
|
-
*
|
|
164
|
-
* //
|
|
165
|
-
* //
|
|
166
|
-
* //
|
|
167
|
-
* //
|
|
214
|
+
* // BlogLayout renders <Outlet /> for the route and
|
|
215
|
+
* // <ParallelOutlet name="@sidebar" /> for the parallel slot.
|
|
216
|
+
* const tree = await renderSegments(segments, { rootLayout: RootLayout });
|
|
217
|
+
* // Results in (outermost first):
|
|
218
|
+
* // <RootLayout>
|
|
219
|
+
* // <RootErrorBoundary>
|
|
220
|
+
* // <OutletProvider segment={BlogLayout} parallel={[Sidebar]}>
|
|
221
|
+
* // <BlogPost />
|
|
222
|
+
* // </OutletProvider>
|
|
223
|
+
* // </RootErrorBoundary>
|
|
224
|
+
* // </RootLayout>
|
|
168
225
|
*
|
|
169
226
|
* // For server actions, pass isAction to await components:
|
|
170
|
-
* const tree = renderSegments(segments, { isAction: true });
|
|
227
|
+
* const tree = await renderSegments(segments, { isAction: true });
|
|
171
228
|
* ```
|
|
172
229
|
*/
|
|
173
230
|
export async function renderSegments(
|
|
@@ -178,9 +235,21 @@ export async function renderSegments(
|
|
|
178
235
|
isAction,
|
|
179
236
|
interceptSegments,
|
|
180
237
|
forceAwait,
|
|
238
|
+
outletPending = false,
|
|
181
239
|
rootLayout: RootLayout,
|
|
182
240
|
} = options || {};
|
|
183
241
|
|
|
242
|
+
const segDebug = INTERNAL_RANGO_DEBUG;
|
|
243
|
+
const segDebugStart = segDebug ? performance.now() : 0;
|
|
244
|
+
if (segDebug) {
|
|
245
|
+
segDebugLog("renderSegments start", {
|
|
246
|
+
segments: segments.map((s) => `${s.id}:${s.type}`),
|
|
247
|
+
isAction: !!isAction,
|
|
248
|
+
forceAwait: !!forceAwait,
|
|
249
|
+
intercepts: interceptSegments?.length ?? 0,
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
|
|
184
253
|
const temporalLazyRefs: Promise<any>[] = [];
|
|
185
254
|
const normalizedSegments = restoreParallelLoaderMarkers(segments);
|
|
186
255
|
const normalizedInterceptSegments = interceptSegments
|
|
@@ -211,6 +280,25 @@ export async function renderSegments(
|
|
|
211
280
|
}
|
|
212
281
|
// Separate segments by type, passing intercept segments for explicit injection
|
|
213
282
|
const tree = segmentTreeWalk(normalizedSegments, normalizedInterceptSegments);
|
|
283
|
+
|
|
284
|
+
// A route is "in a transition scope" when its own segment OR any layout in
|
|
285
|
+
// its matched chain declares transition(). Both transition() forms land here:
|
|
286
|
+
// the per-route item form sets transition on the route entry, and the block
|
|
287
|
+
// wrapper form sets it on a transparent ancestor layout (dsl-helpers.ts). When
|
|
288
|
+
// in scope, the route and its route-owned layouts use param-agnostic keys so a
|
|
289
|
+
// same-route navigation reconciles (holds content) instead of remounting. The
|
|
290
|
+
// value is a static property of the route's position in the tree, so it is the
|
|
291
|
+
// same on every render of that route (SSR, navigation, action) — the keys
|
|
292
|
+
// never drift. Cross-route navigation still remounts: different routes have
|
|
293
|
+
// different segment ids regardless of transition scope.
|
|
294
|
+
const inTransitionScope = normalizedSegments.some(
|
|
295
|
+
(s) =>
|
|
296
|
+
s.transition != null &&
|
|
297
|
+
(s.type === "layout" ||
|
|
298
|
+
s.type === "route" ||
|
|
299
|
+
s.type === "error" ||
|
|
300
|
+
s.type === "notFound"),
|
|
301
|
+
);
|
|
214
302
|
// Render content segments as siblings
|
|
215
303
|
let content: ReactNode = null;
|
|
216
304
|
for (const node of tree) {
|
|
@@ -222,18 +310,33 @@ export async function renderSegments(
|
|
|
222
310
|
`Expected layout, route, error, or notFound segment, got ${node.segment.type}`,
|
|
223
311
|
);
|
|
224
312
|
const { component, id, params, loading } = node.segment;
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
// -
|
|
228
|
-
//
|
|
229
|
-
//
|
|
230
|
-
//
|
|
231
|
-
//
|
|
313
|
+
const segNodeStart = segDebug ? performance.now() : 0;
|
|
314
|
+
|
|
315
|
+
// Param-agnostic keys are opt-in via the transition() DSL (see
|
|
316
|
+
// inTransitionScope above). A route (and its route-owned layouts) inside a
|
|
317
|
+
// transition scope drops the param from its key, so navigating between two
|
|
318
|
+
// param values of the SAME route (e.g. /product/1 -> /product/2) reconciles
|
|
319
|
+
// the route subtree instead of remounting it. Combined with the
|
|
320
|
+
// startTransition wrap that shouldStartViewTransition already applies to
|
|
321
|
+
// transition routes (browser/partial-update.ts), the previous content stays
|
|
322
|
+
// on screen while the new loaders resolve (stale-while-revalidate) instead
|
|
323
|
+
// of flashing the loading skeleton. This works on stable React; experimental
|
|
324
|
+
// React adds the animated <ViewTransition> cross-fade on top.
|
|
325
|
+
//
|
|
326
|
+
// Outside a transition scope the key stays param-bearing and the route
|
|
327
|
+
// remounts on param change (the default: a fresh skeleton and fresh
|
|
328
|
+
// component state).
|
|
329
|
+
//
|
|
330
|
+
// error/notFound always keep param-bearing keys: createErrorSegment reuses
|
|
331
|
+
// the boundary layout's shortCode as the error segment id (router/
|
|
332
|
+
// error-handling.ts), so a param-agnostic error key could collide with that
|
|
333
|
+
// layout's key within the same render.
|
|
232
334
|
const includeParams =
|
|
233
|
-
node.segment.type === "route" ||
|
|
234
335
|
node.segment.type === "error" ||
|
|
235
336
|
node.segment.type === "notFound" ||
|
|
236
|
-
(node.segment.type === "
|
|
337
|
+
((node.segment.type === "route" ||
|
|
338
|
+
(node.segment.type === "layout" && node.segment.belongsToRoute)) &&
|
|
339
|
+
!inTransitionScope);
|
|
237
340
|
|
|
238
341
|
const paramStr =
|
|
239
342
|
includeParams && params && Object.keys(params).length > 0
|
|
@@ -242,62 +345,164 @@ export async function renderSegments(
|
|
|
242
345
|
.map(([k, v]) => `${k}=${v}`)
|
|
243
346
|
.join(",")
|
|
244
347
|
: "";
|
|
245
|
-
const key =
|
|
348
|
+
const key = paramStr ? `${id}-${paramStr}` : id;
|
|
246
349
|
|
|
247
|
-
// Get loader entries for this node
|
|
248
350
|
const loaderEntries = node.loaders.filter(
|
|
249
351
|
(loader) => loader.loaderId && loader.loaderData !== undefined,
|
|
250
352
|
);
|
|
251
353
|
|
|
252
|
-
// Determine the component content (with or without Suspense wrapper)
|
|
253
|
-
// Wrap when loading skeleton defined OR component is Promise (needs Suspense)
|
|
254
|
-
// During actions, await component Promise to prevent Suspense from triggering
|
|
255
|
-
// This keeps existing content visible instead of showing loading skeleton
|
|
256
354
|
let resolvedComponent = component;
|
|
257
355
|
if (isAction && component instanceof Promise) {
|
|
356
|
+
const componentAwaitStart = segDebug ? performance.now() : 0;
|
|
258
357
|
resolvedComponent = await component;
|
|
358
|
+
if (segDebug) {
|
|
359
|
+
segDebugLog(`segment ${id}: component awaited (action)`, {
|
|
360
|
+
ms: Math.round(performance.now() - componentAwaitStart),
|
|
361
|
+
});
|
|
362
|
+
}
|
|
259
363
|
}
|
|
260
364
|
|
|
261
|
-
let nodeContent: ReactNode =
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
365
|
+
let nodeContent: ReactNode = null;
|
|
366
|
+
if (isRenderableLoading(loading)) {
|
|
367
|
+
// forceAwait (popstate, stale-revalidation, fully-prefetched nav) renders a
|
|
368
|
+
// loading() route with the route content ALREADY resolved, so its
|
|
369
|
+
// RouteContentWrapper Suspender does not suspend for a microtask and flash
|
|
370
|
+
// the loading() fallback on a NORMAL (non-transition) commit. The router
|
|
371
|
+
// data is known-ready on these paths, so awaiting the content here is free.
|
|
372
|
+
// The wrapper tree is unchanged (RouteContentWrapper is still created with
|
|
373
|
+
// the same key/fallback) — only the `content` prop is a resolved node
|
|
374
|
+
// instead of a pending promise, which Suspender renders synchronously. This
|
|
375
|
+
// mirrors the forceAwait loaderData unwrap above; a CLIENT component that
|
|
376
|
+
// suspends on mount inside the content still reveals a fallback (it is not
|
|
377
|
+
// pre-resolved).
|
|
378
|
+
const contentPromise = getMemoizedContentPromise(resolvedComponent);
|
|
379
|
+
let loadingContent: Promise<ReactNode> | ReactNode = contentPromise;
|
|
380
|
+
if (forceAwait) {
|
|
381
|
+
const contentAwaitStart = segDebug ? performance.now() : 0;
|
|
382
|
+
loadingContent = await contentPromise;
|
|
383
|
+
if (segDebug) {
|
|
384
|
+
segDebugLog(`segment ${id}: content awaited (forceAwait)`, {
|
|
385
|
+
ms: Math.round(performance.now() - contentAwaitStart),
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
nodeContent = createElement(RouteContentWrapper, {
|
|
390
|
+
key: `suspense-loading-${id}`,
|
|
391
|
+
content: loadingContent,
|
|
392
|
+
fallback: loading,
|
|
393
|
+
segmentId: id,
|
|
394
|
+
});
|
|
395
|
+
} else {
|
|
396
|
+
// [VT-DIAG] Gated behind INTERNAL_RANGO_DEBUG. A segment in the no-loading()
|
|
397
|
+
// branch whose component decodes as a Promise/lazy gets registered into
|
|
398
|
+
// temporalLazyRefs and awaited before commit (see below) — which on builds
|
|
399
|
+
// where the segment component arrives deferred defeats client-nav streaming.
|
|
400
|
+
if (INTERNAL_RANGO_DEBUG && typeof window === "object") {
|
|
401
|
+
const c = resolvedComponent as unknown;
|
|
402
|
+
console.log("[VT-DIAG] renderSegments no-loading-branch segment", {
|
|
403
|
+
id,
|
|
404
|
+
type: node.segment.type,
|
|
405
|
+
componentIsPromise: c instanceof Promise,
|
|
406
|
+
componentIsLazy:
|
|
407
|
+
c != null && typeof c === "object" && "_payload" in c,
|
|
408
|
+
componentTypeof: typeof c,
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
nodeContent = registerLazyRef(resolvedComponent);
|
|
412
|
+
}
|
|
270
413
|
|
|
271
414
|
// Wrap with <ViewTransition> if transition config exists (React experimental only).
|
|
272
415
|
// An empty config ({}) creates a bare <ViewTransition> boundary that participates
|
|
273
416
|
// in transitions without adding custom animation classes. Named element-level
|
|
274
417
|
// <ViewTransition> components inside (with name/share props) morph independently
|
|
275
418
|
// from the parent's default cross-fade.
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
//
|
|
284
|
-
|
|
419
|
+
//
|
|
420
|
+
// For layouts, wrap the outlet content (what `<Outlet />` renders) rather
|
|
421
|
+
// than the layout component itself. Parallel slots like `<ParallelOutlet
|
|
422
|
+
// name="@modal" />` read from a separate context channel and end up as
|
|
423
|
+
// siblings of the VT in the rendered tree, so modal mounts don't trigger a
|
|
424
|
+
// subtree update on the layout-level VT — which would otherwise make
|
|
425
|
+
// React's commit walker fire `document.startViewTransition` and apply
|
|
426
|
+
// view-transition-names to the underlying main subtree (cover/title/etc.).
|
|
427
|
+
//
|
|
428
|
+
// `transition.viewTransition === false` opts out of the router-owned
|
|
429
|
+
// boundary only. Driving (the startTransition wrap in browser/partial-update.ts
|
|
430
|
+
// and the param-agnostic key/hold below) keys off transition *presence*, not
|
|
431
|
+
// this flag, so a boundary-less transition still holds content and lets
|
|
432
|
+
// consumer-placed <ViewTransition> elements animate. The global
|
|
433
|
+
// createRouter({ viewTransition }) default is resolved into this field
|
|
434
|
+
// during segment resolution (only `false` is stamped; unset/"auto" is left
|
|
435
|
+
// as-is and means "wrap"), so this gate needs no router-option threading.
|
|
436
|
+
let outletContent: ReactNode =
|
|
285
437
|
node.segment.type === "layout" ? content : null;
|
|
286
438
|
|
|
439
|
+
const transition = node.segment.transition;
|
|
440
|
+
|
|
441
|
+
if (
|
|
442
|
+
ReactViewTransition &&
|
|
443
|
+
transition &&
|
|
444
|
+
transition.viewTransition !== false
|
|
445
|
+
) {
|
|
446
|
+
if (node.segment.type === "layout") {
|
|
447
|
+
outletContent = wrapDefaultOutletContent(outletContent, transition);
|
|
448
|
+
} else {
|
|
449
|
+
nodeContent = createViewTransitionBoundary(transition, nodeContent);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
287
453
|
// Prepare loader data if there are loaders
|
|
288
454
|
const loaderIds = loaderEntries.map((loader) => loader.loaderId!);
|
|
289
|
-
const loaderDataPromise = getMemoizedLoaderPromise(loaderEntries);
|
|
290
455
|
|
|
291
|
-
//
|
|
292
|
-
//
|
|
293
|
-
//
|
|
294
|
-
//
|
|
456
|
+
// Loader-bearing segments get the router-owned error boundary around
|
|
457
|
+
// their children so a read-site loader error renders its errorBoundary()
|
|
458
|
+
// fallback (LOADER_ERROR_FALLBACK marker on the thrown error) instead of
|
|
459
|
+
// escaping to app boundaries. Wrapped UNCONDITIONALLY on loader presence
|
|
460
|
+
// — streams and forceAwait lanes must produce the same tree shape or
|
|
461
|
+
// lane changes remount the subtree (docs/tree-structure.md).
|
|
462
|
+
if (loaderEntries.length > 0) {
|
|
463
|
+
nodeContent = createElement(StreamedLoaderErrorBoundary, {
|
|
464
|
+
children: nodeContent,
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
|
|
295
468
|
if (loading !== undefined && loading !== null) {
|
|
469
|
+
const loaderDataPromise = getMemoizedLoaderPromise(loaderEntries);
|
|
470
|
+
let boundaryLoaderData: Promise<any[]> | any[] = loaderDataPromise;
|
|
471
|
+
// SPIKE (streaming useLoader): per-loader streams for the boundary's
|
|
472
|
+
// readers. MUST come from the individual loader refs — splitting the
|
|
473
|
+
// aggregate client-side is wrong (Promise.all resolves at the slowest
|
|
474
|
+
// loader, erasing per-loader timing; measured 400ms data held to a
|
|
475
|
+
// 2000ms sibling). Zero-loader boundaries pass NO streams so the
|
|
476
|
+
// resolver keeps the fresh-promise resolve-above suspension — that
|
|
477
|
+
// microtask suspension is what makes SSR emit the loading() fallback
|
|
478
|
+
// for content-suspending routes (segment-loader-promise.ts).
|
|
479
|
+
let boundaryLoaderStreams: Record<string, unknown> | undefined;
|
|
480
|
+
if (forceAwait || isAction) {
|
|
481
|
+
const awaitStart = segDebug ? performance.now() : 0;
|
|
482
|
+
boundaryLoaderData = await loaderDataPromise;
|
|
483
|
+
if (segDebug) {
|
|
484
|
+
segDebugLog(`segment ${id}: loaders awaited (forceAwait/action)`, {
|
|
485
|
+
loaderIds,
|
|
486
|
+
ms: Math.round(performance.now() - awaitStart),
|
|
487
|
+
});
|
|
488
|
+
}
|
|
489
|
+
} else if (loaderEntries.length > 0) {
|
|
490
|
+
boundaryLoaderStreams = {};
|
|
491
|
+
for (const l of loaderEntries) {
|
|
492
|
+
boundaryLoaderStreams[l.loaderId!] = l.loaderData;
|
|
493
|
+
}
|
|
494
|
+
if (segDebug) {
|
|
495
|
+
segDebugLog(
|
|
496
|
+
`segment ${id}: per-loader streams via LoaderBoundary (read-site suspense)`,
|
|
497
|
+
{ loaderIds },
|
|
498
|
+
);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
296
501
|
content = createElement(LoaderBoundary, {
|
|
297
502
|
key: `loader-boundary-${key}`,
|
|
298
|
-
loaderDataPromise:
|
|
299
|
-
forceAwait || isAction ? await loaderDataPromise : loaderDataPromise,
|
|
503
|
+
loaderDataPromise: boundaryLoaderData,
|
|
300
504
|
loaderIds,
|
|
505
|
+
loaderStreams: boundaryLoaderStreams,
|
|
301
506
|
fallback: loading,
|
|
302
507
|
outletKey: key,
|
|
303
508
|
outletContent,
|
|
@@ -306,43 +511,67 @@ export async function renderSegments(
|
|
|
306
511
|
children: nodeContent,
|
|
307
512
|
});
|
|
308
513
|
} else if (loaderEntries.length === 0) {
|
|
309
|
-
// No loaders, no loading - simple OutletProvider
|
|
310
514
|
content = createElement(OutletProvider, {
|
|
311
515
|
key,
|
|
312
516
|
content: outletContent,
|
|
313
517
|
segment: node.segment,
|
|
314
518
|
parallel: node.parallel,
|
|
519
|
+
pending: outletPending,
|
|
315
520
|
children: nodeContent,
|
|
316
521
|
});
|
|
317
522
|
} else {
|
|
318
|
-
// Has loaders but no loading skeleton.
|
|
319
|
-
// Split: parallel-owned loaders stream (their parallel has loading()),
|
|
320
|
-
// layout-owned loaders are awaited (they gate the layout content).
|
|
321
523
|
const layoutLoaders = loaderEntries.filter((l) => !l.parallelLoading);
|
|
322
524
|
const parallelOwnedLoaders = loaderEntries.filter(
|
|
323
525
|
(l) => !!l.parallelLoading,
|
|
324
526
|
);
|
|
325
527
|
|
|
326
|
-
// Await only layout-owned loaders
|
|
327
528
|
const layoutLoaderIds = layoutLoaders.map((l) => l.loaderId!);
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
529
|
+
// SPIKE (streaming useLoader): a segment without loading() used to BLOCK
|
|
530
|
+
// the tree build here (await buildLoaderPromise) so its data was always
|
|
531
|
+
// resolved before render. Streaming lanes now skip the await and pass
|
|
532
|
+
// per-loader UNDECODED results (possibly pending promises) through
|
|
533
|
+
// OutletProvider.loaderStreams — useLoader suspends at the read site to
|
|
534
|
+
// the nearest CONSUMER Suspense boundary. forceAwait (popstate, stale
|
|
535
|
+
// revalidation, fully-prefetched) and action lanes keep the blocking
|
|
536
|
+
// await so those commits stay whole with no fallback flash.
|
|
537
|
+
let loaderData: Record<string, any> = {};
|
|
538
|
+
let errorFallback: ReactNode = null;
|
|
539
|
+
let loaderStreams: Record<string, unknown> | undefined;
|
|
540
|
+
if (forceAwait || isAction) {
|
|
541
|
+
const layoutAwaitStart = segDebug ? performance.now() : 0;
|
|
542
|
+
const resolvedData = await buildLoaderPromise(layoutLoaders);
|
|
543
|
+
if (segDebug) {
|
|
544
|
+
segDebugLog(`segment ${id}: layout loaders awaited (blocking)`, {
|
|
545
|
+
loaderIds: layoutLoaderIds,
|
|
546
|
+
ms: Math.round(performance.now() - layoutAwaitStart),
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
const decodeStart = segDebug ? performance.now() : 0;
|
|
550
|
+
({ loaderData, errorFallback } = decodeLoaderResults(
|
|
551
|
+
resolvedData,
|
|
552
|
+
layoutLoaderIds,
|
|
553
|
+
));
|
|
554
|
+
if (segDebug) {
|
|
555
|
+
const decodeMs = Math.round(performance.now() - decodeStart);
|
|
556
|
+
if (decodeMs > 0) {
|
|
557
|
+
segDebugLog(`segment ${id}: loader results decoded`, {
|
|
558
|
+
ms: decodeMs,
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
} else if (layoutLoaders.length > 0) {
|
|
563
|
+
loaderStreams = {};
|
|
564
|
+
for (const l of layoutLoaders) {
|
|
565
|
+
loaderStreams[l.loaderId!] = l.loaderData;
|
|
566
|
+
}
|
|
567
|
+
if (segDebug) {
|
|
568
|
+
segDebugLog(
|
|
569
|
+
`segment ${id}: layout loaders streaming to read sites (no loading())`,
|
|
570
|
+
{ loaderIds: layoutLoaderIds },
|
|
571
|
+
);
|
|
572
|
+
}
|
|
573
|
+
}
|
|
343
574
|
|
|
344
|
-
// Parallel-owned loaders: attach to their owning parallel segment
|
|
345
|
-
// as loaderDataPromise so ParallelOutlet wraps in LoaderBoundary
|
|
346
575
|
if (parallelOwnedLoaders.length > 0) {
|
|
347
576
|
const loadersByParallelNamespace = new Map<string, ResolvedSegment[]>();
|
|
348
577
|
|
|
@@ -370,10 +599,27 @@ export async function renderSegments(
|
|
|
370
599
|
|
|
371
600
|
p.loaderIds = ownedLoaders.map((l) => l.loaderId!);
|
|
372
601
|
const aggregated = getMemoizedLoaderPromise(ownedLoaders);
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
602
|
+
if ((forceAwait || isAction) && aggregated instanceof Promise) {
|
|
603
|
+
const parallelAwaitStart = segDebug ? performance.now() : 0;
|
|
604
|
+
p.loaderDataPromise = await aggregated;
|
|
605
|
+
if (segDebug) {
|
|
606
|
+
segDebugLog(
|
|
607
|
+
`segment ${id}: parallel ${p.id} loaders awaited (forceAwait/action)`,
|
|
608
|
+
{
|
|
609
|
+
loaderIds: p.loaderIds,
|
|
610
|
+
ms: Math.round(performance.now() - parallelAwaitStart),
|
|
611
|
+
},
|
|
612
|
+
);
|
|
613
|
+
}
|
|
614
|
+
} else {
|
|
615
|
+
p.loaderDataPromise = aggregated;
|
|
616
|
+
if (segDebug) {
|
|
617
|
+
segDebugLog(
|
|
618
|
+
`segment ${id}: parallel ${p.id} loaders streaming (suspense)`,
|
|
619
|
+
{ loaderIds: p.loaderIds },
|
|
620
|
+
);
|
|
621
|
+
}
|
|
622
|
+
}
|
|
377
623
|
}
|
|
378
624
|
}
|
|
379
625
|
|
|
@@ -383,6 +629,8 @@ export async function renderSegments(
|
|
|
383
629
|
segment: node.segment,
|
|
384
630
|
parallel: node.parallel,
|
|
385
631
|
loaderData: Object.keys(loaderData).length > 0 ? loaderData : undefined,
|
|
632
|
+
loaderStreams,
|
|
633
|
+
pending: outletPending,
|
|
386
634
|
children: errorFallback ?? nodeContent,
|
|
387
635
|
});
|
|
388
636
|
}
|
|
@@ -397,28 +645,56 @@ export async function renderSegments(
|
|
|
397
645
|
children: content,
|
|
398
646
|
});
|
|
399
647
|
}
|
|
648
|
+
|
|
649
|
+
if (segDebug) {
|
|
650
|
+
segDebugLog(`segment ${id} built`, {
|
|
651
|
+
type: node.segment.type,
|
|
652
|
+
ms: Math.round(performance.now() - segNodeStart),
|
|
653
|
+
loaders: node.loaders.map((l) => l.loaderId).filter(Boolean),
|
|
654
|
+
hasLoading: loading !== undefined && loading !== null,
|
|
655
|
+
parallel: node.parallel.map((p) => p.id),
|
|
656
|
+
});
|
|
657
|
+
}
|
|
400
658
|
}
|
|
401
659
|
|
|
402
|
-
// Always wrap with root error boundary to prevent white screens
|
|
403
|
-
// This catches any unhandled errors that bubble up from the segment tree
|
|
404
660
|
const errorBoundaryWrapped = createElement(RootErrorBoundary, {
|
|
405
661
|
children: content,
|
|
406
662
|
});
|
|
407
663
|
if (typeof window === "object") {
|
|
664
|
+
// [VT-DIAG] Gated behind INTERNAL_RANGO_DEBUG. If this await dominates the
|
|
665
|
+
// navigation time, a deferred/lazy segment component is being fully resolved
|
|
666
|
+
// before commit, which defeats client-nav streaming. The await itself is
|
|
667
|
+
// functional (it preloads lazy chunk refs); only the timing log is gated.
|
|
668
|
+
const vtDebug = INTERNAL_RANGO_DEBUG && temporalLazyRefs.length > 0;
|
|
669
|
+
const vtDebugStart = vtDebug ? performance.now() : 0;
|
|
670
|
+
if (vtDebug) {
|
|
671
|
+
console.log("[VT-DIAG] renderSegments awaiting temporalLazyRefs", {
|
|
672
|
+
count: temporalLazyRefs.length,
|
|
673
|
+
});
|
|
674
|
+
}
|
|
408
675
|
await Promise.allSettled(temporalLazyRefs);
|
|
676
|
+
if (vtDebug) {
|
|
677
|
+
console.log("[VT-DIAG] renderSegments temporalLazyRefs settled", {
|
|
678
|
+
count: temporalLazyRefs.length,
|
|
679
|
+
ms: Math.round(performance.now() - vtDebugStart),
|
|
680
|
+
});
|
|
681
|
+
}
|
|
409
682
|
}
|
|
410
683
|
|
|
411
|
-
// Build the final result, optionally wrapped with root layout
|
|
412
684
|
let result: ReactNode = errorBoundaryWrapped;
|
|
413
685
|
|
|
414
|
-
// If rootLayout is provided, wrap the error boundary with it
|
|
415
|
-
// This ensures the app shell stays mounted even during errors (prevents FOUC)
|
|
416
686
|
if (RootLayout) {
|
|
417
687
|
result = createElement(RootLayout, {
|
|
418
688
|
children: errorBoundaryWrapped,
|
|
419
689
|
});
|
|
420
690
|
}
|
|
421
691
|
|
|
692
|
+
if (segDebug) {
|
|
693
|
+
segDebugLog("renderSegments complete", {
|
|
694
|
+
ms: Math.round(performance.now() - segDebugStart),
|
|
695
|
+
});
|
|
696
|
+
}
|
|
697
|
+
|
|
422
698
|
return result;
|
|
423
699
|
}
|
|
424
700
|
|
|
@@ -450,6 +726,31 @@ export async function renderSegments(
|
|
|
450
726
|
* @param segments - Main segments from the route tree
|
|
451
727
|
* @param interceptSegments - Optional intercept segments to inject
|
|
452
728
|
*/
|
|
729
|
+
// Loader segment ids have the grammar `${parentId}D${index}.${loaderId}`.
|
|
730
|
+
// parentId is the parent shortCode (M/L/P/R/C + digits, never "D") for normal
|
|
731
|
+
// loaders, or `${shortCode}.${slotName}` for intercept-slot loaders, where the
|
|
732
|
+
// slot name is user-controlled (`@${string}`) and may contain an uppercase "D"
|
|
733
|
+
// (e.g. "@Detail"). Strip from the first `D<index>.` separator so the slot name
|
|
734
|
+
// is preserved; splitting on a bare "D" mis-cut "@Detail" to "@" and silently
|
|
735
|
+
// dropped the loader's data. The first-`D<index>.` strip is only correct because
|
|
736
|
+
// slot names cannot contain "." -- assertValidSlotName (route-definition/
|
|
737
|
+
// dsl-helpers.ts) rejects a "." at definition time, so a name like "@D3.foo"
|
|
738
|
+
// (which WOULD mis-cut here) can never reach this function.
|
|
739
|
+
function loaderParentId(loaderSegmentId: string): string {
|
|
740
|
+
return loaderSegmentId.replace(/D\d+\..*$/, "");
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
// Append a value to the array stored under `key`, creating the array on first
|
|
744
|
+
// use. Single Map lookup (vs the has/get!().push double-lookup idiom).
|
|
745
|
+
function pushToGroup<K, V>(map: Map<K, V[]>, key: K, value: V): void {
|
|
746
|
+
const arr = map.get(key);
|
|
747
|
+
if (arr) {
|
|
748
|
+
arr.push(value);
|
|
749
|
+
} else {
|
|
750
|
+
map.set(key, [value]);
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
|
|
453
754
|
function* segmentTreeWalk(
|
|
454
755
|
segments: ResolvedSegment[],
|
|
455
756
|
interceptSegments?: ResolvedSegment[],
|
|
@@ -470,19 +771,12 @@ function* segmentTreeWalk(
|
|
|
470
771
|
// Extract parent ID from parallel ID
|
|
471
772
|
// Example: "L0R1L0.@sidebar" → "L0R1L0"
|
|
472
773
|
const parentId = segment.id.split(".")[0];
|
|
473
|
-
|
|
474
|
-
parallelsByParent.set(parentId, []);
|
|
475
|
-
}
|
|
476
|
-
parallelsByParent.get(parentId)!.push(segment);
|
|
774
|
+
pushToGroup(parallelsByParent, parentId, segment);
|
|
477
775
|
} else if (segment.type === "loader") {
|
|
478
776
|
// Extract parent ID from loader ID
|
|
479
|
-
// Example: "L0D0.cart" → "L0"
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
if (!loadersByParent.has(parentId)) {
|
|
483
|
-
loadersByParent.set(parentId, []);
|
|
484
|
-
}
|
|
485
|
-
loadersByParent.get(parentId)!.push(segment);
|
|
777
|
+
// Example: "L0D0.cart" → "L0"; "L0.@DetailD0.x" → "L0.@Detail"
|
|
778
|
+
const parentId = loaderParentId(segment.id);
|
|
779
|
+
pushToGroup(loadersByParent, parentId, segment);
|
|
486
780
|
} else {
|
|
487
781
|
// Layout, route, error, and notFound segments are all rendered in the tree
|
|
488
782
|
// Error/notFound segments replace the failed segment with fallback UI
|
|
@@ -497,17 +791,11 @@ function* segmentTreeWalk(
|
|
|
497
791
|
if (intercept.type === "parallel" && intercept.slot) {
|
|
498
792
|
// Extract parent ID from intercept ID (e.g., "M4L0L0L2.@modal" → "M4L0L0L2")
|
|
499
793
|
const parentId = intercept.id.split(".")[0];
|
|
500
|
-
|
|
501
|
-
parallelsByParent.set(parentId, []);
|
|
502
|
-
}
|
|
503
|
-
parallelsByParent.get(parentId)!.push(intercept);
|
|
794
|
+
pushToGroup(parallelsByParent, parentId, intercept);
|
|
504
795
|
} else if (intercept.type === "loader") {
|
|
505
|
-
// Intercept loaders - extract parent from loader ID
|
|
506
|
-
const parentId = intercept.id
|
|
507
|
-
|
|
508
|
-
loadersByParent.set(parentId, []);
|
|
509
|
-
}
|
|
510
|
-
loadersByParent.get(parentId)!.push(intercept);
|
|
796
|
+
// Intercept loaders - extract parent from loader ID (slot name preserved)
|
|
797
|
+
const parentId = loaderParentId(intercept.id);
|
|
798
|
+
pushToGroup(loadersByParent, parentId, intercept);
|
|
511
799
|
}
|
|
512
800
|
}
|
|
513
801
|
}
|