@rangojs/router 0.0.0-experimental.35 → 0.0.0-experimental.358c376d
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 +11 -3
- package/README.md +320 -735
- package/dist/bin/rango.js +983 -241
- 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 +62 -0
- package/dist/types/client-urls/types.d.ts +144 -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 +404 -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 +520 -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 +717 -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 +234 -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 +203 -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 +10725 -3898
- package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/package.json +129 -46
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +117 -8
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +255 -25
- package/skills/caching/SKILL.md +414 -17
- package/skills/catalog.json +289 -0
- package/skills/client-urls/SKILL.md +307 -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 +858 -0
- package/skills/composability/SKILL.md +124 -4
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +5 -11
- package/skills/defer-hydration/SKILL.md +235 -0
- package/skills/deployment-caching/SKILL.md +176 -0
- package/skills/document-cache/SKILL.md +116 -58
- package/skills/fonts/SKILL.md +1 -1
- package/skills/handler-use/SKILL.md +364 -0
- package/skills/hooks/SKILL.md +73 -691
- package/skills/hooks/data.md +282 -0
- package/skills/hooks/handle-and-actions.md +110 -0
- package/skills/hooks/navigation.md +110 -0
- package/skills/hooks/outlets.md +62 -0
- package/skills/hooks/state.md +228 -0
- package/skills/hooks/urls.md +135 -0
- package/skills/host-router/SKILL.md +129 -27
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +94 -18
- package/skills/layout/SKILL.md +62 -19
- package/skills/links/SKILL.md +285 -17
- package/skills/loader/SKILL.md +415 -55
- package/skills/middleware/SKILL.md +92 -16
- package/skills/migrate-nextjs/SKILL.md +852 -0
- package/skills/migrate-nextjs/backend-host-swap.md +120 -0
- package/skills/migrate-react-router/SKILL.md +189 -0
- package/skills/migrate-react-router/component-migration.md +201 -0
- package/skills/migrate-react-router/data-and-actions.md +236 -0
- package/skills/migrate-react-router/route-mapping.md +284 -0
- package/skills/mime-routes/SKILL.md +55 -18
- package/skills/observability/SKILL.md +231 -0
- package/skills/parallel/SKILL.md +245 -10
- package/skills/ppr/SKILL.md +914 -0
- package/skills/prerender/SKILL.md +243 -135
- package/skills/rango/SKILL.md +325 -24
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +180 -52
- package/skills/route/SKILL.md +181 -9
- package/skills/router-setup/SKILL.md +154 -11
- package/skills/scripts/SKILL.md +189 -0
- package/skills/server-actions/SKILL.md +776 -0
- package/skills/shell-manifest/SKILL.md +194 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/tailwind/SKILL.md +28 -4
- package/skills/testing/SKILL.md +131 -0
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +172 -0
- package/skills/testing/client-components.md +131 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +153 -0
- package/skills/testing/loader.md +130 -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 +9 -6
- package/skills/typesafety/SKILL.md +45 -616
- package/skills/typesafety/env-and-bindings.md +254 -0
- package/skills/typesafety/generated-files-and-cli.md +342 -0
- package/skills/typesafety/params-and-search.md +153 -0
- package/skills/typesafety/route-types.md +213 -0
- package/skills/use-cache/SKILL.md +121 -15
- package/skills/vercel/SKILL.md +149 -0
- package/skills/view-transitions/SKILL.md +341 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +1 -66
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +39 -0
- package/src/browser/app-version.ts +14 -0
- package/src/browser/connection-warmup.ts +134 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/dev-discovery.ts +66 -0
- package/src/browser/event-controller.ts +405 -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 +209 -40
- package/src/browser/navigation-client.ts +284 -73
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +208 -329
- package/src/browser/navigation-transaction.ts +18 -66
- package/src/browser/network-error-handler.ts +34 -7
- package/src/browser/notify-listeners.ts +22 -0
- package/src/browser/partial-update.ts +278 -126
- package/src/browser/prefetch/cache.ts +362 -51
- package/src/browser/prefetch/default-strategy.ts +74 -0
- package/src/browser/prefetch/fetch.ts +453 -40
- package/src/browser/prefetch/invalidation.ts +30 -0
- package/src/browser/prefetch/loader.ts +111 -0
- package/src/browser/prefetch/observer.ts +50 -22
- package/src/browser/prefetch/policy.ts +6 -0
- package/src/browser/prefetch/queue.ts +144 -23
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/prefetch/runtime.ts +6 -0
- package/src/browser/rango-state.ts +178 -75
- package/src/browser/react/Link.tsx +187 -75
- package/src/browser/react/NavigationProvider.tsx +249 -123
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/context.ts +11 -2
- package/src/browser/react/filter-segment-order.ts +66 -7
- package/src/browser/react/index.ts +0 -48
- package/src/browser/react/location-state-shared.ts +178 -8
- package/src/browser/react/location-state.ts +39 -14
- package/src/browser/react/use-action.ts +6 -15
- package/src/browser/react/use-handle.ts +23 -69
- package/src/browser/react/use-href.tsx +8 -1
- package/src/browser/react/use-link-status.ts +33 -8
- package/src/browser/react/use-navigation.ts +32 -7
- package/src/browser/react/use-params.ts +20 -10
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +47 -12
- package/src/browser/react/use-search-params.ts +0 -5
- package/src/browser/react/use-segments.ts +11 -21
- package/src/browser/response-adapter.ts +99 -8
- package/src/browser/rsc-router.tsx +375 -84
- package/src/browser/scroll-restoration.ts +61 -47
- package/src/browser/segment-reconciler.ts +44 -7
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +270 -71
- package/src/browser/types.ts +166 -37
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +217 -188
- package/src/build/generate-route-types.ts +6 -1
- package/src/build/index.ts +11 -3
- package/src/build/merge-full-manifests.ts +161 -0
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +43 -254
- package/src/build/route-types/ast-route-extraction.ts +15 -8
- package/src/build/route-types/codegen.ts +16 -5
- package/src/build/route-types/include-resolution.ts +521 -65
- package/src/build/route-types/param-extraction.ts +6 -3
- package/src/build/route-types/per-module-writer.ts +33 -12
- package/src/build/route-types/router-processing.ts +411 -154
- package/src/build/route-types/scan-filter.ts +9 -2
- package/src/build/route-types/source-scan.ts +216 -0
- package/src/build/runtime-discovery.ts +32 -29
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-exec-scope.ts +47 -0
- package/src/cache/cache-key-utils.ts +73 -15
- package/src/cache/cache-policy.ts +108 -34
- package/src/cache/cache-runtime.ts +566 -117
- package/src/cache/cache-scope.ts +431 -112
- 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 +3250 -173
- 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 +16 -17
- package/src/cache/document-cache.ts +202 -61
- package/src/cache/handle-snapshot.ts +92 -1
- package/src/cache/index.ts +33 -20
- package/src/cache/memory-segment-store.ts +286 -37
- package/src/cache/profile-registry.ts +46 -31
- package/src/cache/read-through-swr.ts +66 -16
- package/src/cache/search-params-filter.ts +118 -0
- package/src/cache/segment-codec.ts +80 -25
- package/src/cache/shell-snapshot.ts +516 -0
- package/src/cache/tag-invalidation.ts +230 -0
- package/src/cache/taint.ts +83 -9
- package/src/cache/types.ts +323 -100
- package/src/cache/vercel/index.ts +11 -0
- package/src/cache/vercel/vercel-cache-store.ts +1264 -0
- package/src/client-urls/client-root.tsx +161 -0
- package/src/client-urls/client-urls.ts +698 -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 +579 -0
- package/src/client-urls/types.ts +195 -0
- package/src/client.rsc.tsx +48 -21
- package/src/client.tsx +158 -294
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +112 -0
- package/src/component-utils.ts +19 -0
- package/src/components/DefaultDocument.tsx +8 -2
- package/src/context-var.ts +84 -2
- package/src/debug.ts +2 -2
- package/src/decode-loader-results.ts +160 -0
- package/src/defer.ts +185 -0
- package/src/deps/ssr.ts +4 -2
- package/src/dev-discovery-protocol.ts +11 -0
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +44 -4
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +104 -34
- package/src/handles/MetaTags.tsx +24 -53
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +35 -8
- package/src/handles/deferred-resolution.ts +134 -0
- package/src/handles/is-thenable.ts +16 -0
- package/src/handles/meta.ts +14 -40
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +9 -60
- package/src/host/errors.ts +13 -22
- package/src/host/index.ts +9 -2
- package/src/host/pattern-matcher.ts +23 -52
- package/src/host/router.ts +107 -99
- package/src/host/testing.ts +40 -27
- package/src/host/types.ts +37 -4
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +137 -22
- package/src/index.rsc.ts +111 -13
- package/src/index.ts +151 -19
- package/src/internal-debug.ts +11 -10
- package/src/loader-redirect.tsx +47 -0
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +20 -13
- package/src/loader.ts +12 -11
- package/src/missing-id-error.ts +68 -0
- package/src/outlet-context.ts +13 -1
- package/src/outlet-provider.tsx +16 -6
- package/src/prerender/build-shell-capture.ts +453 -0
- package/src/prerender/param-hash.ts +16 -16
- package/src/prerender/shell-manifest-key.ts +20 -0
- package/src/prerender/store.ts +52 -42
- package/src/prerender.ts +215 -86
- package/src/redirect-origin.ts +143 -0
- package/src/regex-escape.ts +8 -0
- package/src/render-error-thrower.tsx +20 -0
- package/src/response-utils.ts +62 -0
- package/src/reverse.ts +65 -15
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +112 -78
- package/src/route-definition/dsl-helpers.ts +519 -307
- package/src/route-definition/helper-factories.ts +28 -140
- package/src/route-definition/helpers-types.ts +169 -78
- package/src/route-definition/index.ts +4 -2
- package/src/route-definition/redirect.ts +53 -12
- package/src/route-definition/resolve-handler-use.ts +160 -0
- package/src/route-definition/use-item-types.ts +29 -0
- package/src/route-map-builder.ts +102 -68
- package/src/route-types.ts +37 -46
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +211 -22
- package/src/router/error-handling.ts +110 -29
- package/src/router/find-match.ts +130 -29
- package/src/router/handler-context.ts +105 -45
- package/src/router/instrument.ts +401 -0
- package/src/router/intercept-resolution.ts +108 -24
- package/src/router/lazy-includes.ts +90 -63
- package/src/router/loader-resolution.ts +529 -57
- package/src/router/logging.ts +5 -8
- package/src/router/manifest.ts +105 -56
- package/src/router/match-api.ts +190 -219
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +268 -171
- package/src/router/match-middleware/background-revalidation.ts +66 -22
- package/src/router/match-middleware/cache-lookup.ts +368 -277
- package/src/router/match-middleware/cache-store.ts +175 -50
- package/src/router/match-middleware/intercept-resolution.ts +8 -28
- package/src/router/match-middleware/segment-resolution.ts +52 -18
- package/src/router/match-pipelines.ts +1 -42
- package/src/router/match-result.ts +135 -44
- package/src/router/metrics.ts +22 -36
- package/src/router/middleware-types.ts +26 -138
- package/src/router/middleware.ts +305 -177
- package/src/router/navigation-snapshot.ts +173 -0
- package/src/router/params-util.ts +23 -0
- package/src/router/parse-pattern.ts +115 -0
- package/src/router/pattern-matching.ts +181 -150
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prefetch-default.ts +59 -0
- package/src/router/prefetch-limits.ts +37 -0
- package/src/router/prerender-match.ts +250 -60
- package/src/router/preview-match.ts +35 -103
- package/src/router/request-classification.ts +291 -0
- package/src/router/revalidation.ts +146 -83
- package/src/router/route-snapshot.ts +256 -0
- package/src/router/route-trie-builder.ts +334 -0
- package/src/router/router-context.ts +11 -29
- package/src/router/router-interfaces.ts +199 -37
- package/src/router/router-options.ts +271 -21
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +367 -78
- package/src/router/segment-resolution/helpers.ts +116 -33
- package/src/router/segment-resolution/loader-cache.ts +188 -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 +520 -385
- 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 +8 -5
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/substitute-pattern-params.ts +75 -0
- package/src/router/telemetry-otel.ts +171 -200
- package/src/router/telemetry.ts +106 -20
- package/src/router/timeout.ts +53 -22
- package/src/router/tracing.ts +235 -0
- package/src/router/transition-when.ts +76 -0
- package/src/router/trie-matching.ts +171 -59
- package/src/router/types.ts +10 -63
- package/src/router/url-params.ts +57 -0
- package/src/router.ts +301 -78
- package/src/rsc/capture-queue.ts +218 -0
- package/src/rsc/full-payload.ts +77 -0
- package/src/rsc/handler-context.ts +4 -2
- package/src/rsc/handler.ts +901 -519
- package/src/rsc/helpers.ts +245 -47
- package/src/rsc/index.ts +2 -5
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +129 -33
- package/src/rsc/manifest-init.ts +55 -52
- package/src/rsc/nonce.ts +10 -1
- package/src/rsc/origin-guard.ts +39 -25
- package/src/rsc/progressive-enhancement.ts +381 -74
- package/src/rsc/redirect-guard.ts +102 -0
- package/src/rsc/render-pipeline.ts +611 -0
- package/src/rsc/response-cache-serve.ts +259 -0
- package/src/rsc/response-error.ts +79 -12
- package/src/rsc/response-route-handler.ts +80 -206
- package/src/rsc/routine-plan.ts +359 -0
- package/src/rsc/rsc-rendering.ts +1625 -156
- package/src/rsc/runtime-warnings.ts +23 -10
- package/src/rsc/server-action.ts +424 -133
- package/src/rsc/shell-build-manifest.ts +336 -0
- package/src/rsc/shell-capture-constants.ts +45 -0
- package/src/rsc/shell-capture.ts +2063 -0
- package/src/rsc/shell-serve.ts +337 -0
- package/src/rsc/ssr-setup.ts +113 -18
- package/src/rsc/stream-idle.ts +137 -0
- package/src/rsc/transition-gate.ts +86 -0
- package/src/rsc/types.ts +100 -6
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +35 -30
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-fragments.ts +165 -0
- package/src/segment-loader-promise.ts +167 -0
- package/src/segment-system.tsx +507 -133
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +581 -61
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +162 -15
- package/src/server/handle-store.ts +209 -70
- package/src/server/loader-registry.ts +38 -46
- package/src/server/request-context.ts +961 -186
- package/src/server.ts +7 -2
- package/src/ssr/index.tsx +631 -179
- package/src/ssr/inject-rsc-eager.ts +167 -0
- package/src/ssr/preinit-client-references.ts +106 -0
- package/src/ssr/ssr-root.tsx +262 -0
- package/src/static-handler.ts +45 -20
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +46 -0
- package/src/testing/dispatch.ts +951 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +147 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +319 -0
- package/src/testing/e2e/parity.ts +400 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +257 -0
- package/src/testing/generated-routes.ts +199 -0
- package/src/testing/index.ts +121 -0
- package/src/testing/internal/context.ts +380 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +371 -0
- package/src/testing/render-route.tsx +667 -0
- package/src/testing/run-loader.ts +423 -0
- package/src/testing/run-middleware.ts +219 -0
- package/src/testing/run-transition-when.ts +197 -0
- package/src/testing/shell-status.ts +206 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +305 -0
- package/src/theme/ThemeProvider.tsx +56 -84
- package/src/theme/ThemeScript.tsx +7 -9
- package/src/theme/constants.ts +52 -13
- package/src/theme/index.ts +0 -7
- package/src/theme/theme-context.ts +1 -5
- package/src/theme/theme-script.ts +22 -21
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +15 -35
- package/src/types/cache-types.ts +17 -8
- package/src/types/error-types.ts +30 -90
- package/src/types/global-namespace.ts +54 -41
- package/src/types/handler-context.ts +244 -81
- package/src/types/index.ts +4 -10
- package/src/types/loader-types.ts +99 -15
- package/src/types/request-scope.ts +112 -0
- package/src/types/route-config.ts +20 -52
- package/src/types/route-entry.ts +22 -7
- package/src/types/segments.ts +149 -14
- package/src/urls/include-helper.ts +59 -75
- package/src/urls/include-provider.ts +71 -0
- package/src/urls/index.ts +2 -11
- package/src/urls/path-helper-types.ts +118 -26
- package/src/urls/path-helper.ts +70 -115
- package/src/urls/pattern-types.ts +113 -19
- package/src/urls/response-types.ts +25 -22
- package/src/urls/type-extraction.ts +98 -154
- package/src/urls/urls-function.ts +1 -19
- package/src/use-loader.tsx +404 -86
- package/src/vercel/index.ts +11 -0
- package/src/vercel/tracing.ts +89 -0
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +46 -45
- package/src/vite/discovery/client-urls-projection.ts +322 -0
- package/src/vite/discovery/dev-prerender-cache.ts +117 -0
- package/src/vite/discovery/discover-routers.ts +178 -147
- package/src/vite/discovery/discovery-errors.ts +255 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +243 -134
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/shell-prerender-phase.ts +397 -0
- package/src/vite/discovery/state.ts +116 -11
- package/src/vite/discovery/virtual-module-codegen.ts +226 -87
- package/src/vite/encryption-key.ts +29 -0
- package/src/vite/index.ts +16 -0
- package/src/vite/inject-client-debug.ts +88 -0
- package/src/vite/plugin-types.ts +267 -62
- package/src/vite/plugins/cjs-to-esm.ts +16 -19
- package/src/vite/plugins/client-ref-dedup.ts +16 -11
- package/src/vite/plugins/client-ref-hashing.ts +28 -15
- package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
- package/src/vite/plugins/expose-action-id.ts +51 -100
- package/src/vite/plugins/expose-id-utils.ts +96 -51
- package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
- package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
- package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
- package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
- package/src/vite/plugins/expose-internal-ids.ts +599 -317
- package/src/vite/plugins/performance-tracks.ts +89 -0
- package/src/vite/plugins/refresh-cmd.ts +89 -27
- package/src/vite/plugins/server-ref-hashing.ts +74 -0
- package/src/vite/plugins/server-reference-pattern.ts +10 -0
- package/src/vite/plugins/use-cache-transform.ts +73 -83
- package/src/vite/plugins/vercel-output.ts +384 -0
- package/src/vite/plugins/version-injector.ts +39 -29
- package/src/vite/plugins/version-plugin.ts +54 -37
- package/src/vite/plugins/virtual-entries.ts +193 -30
- package/src/vite/rango.ts +403 -304
- package/src/vite/router-discovery.ts +1802 -187
- package/src/vite/utils/ast-handler-extract.ts +26 -35
- package/src/vite/utils/banner.ts +4 -4
- package/src/vite/utils/bundle-analysis.ts +10 -15
- package/src/vite/utils/client-chunks.ts +184 -0
- package/src/vite/utils/directive-prologue.ts +40 -0
- package/src/vite/utils/forward-user-plugins.ts +171 -0
- package/src/vite/utils/manifest-utils.ts +1 -59
- package/src/vite/utils/package-resolution.ts +21 -52
- package/src/vite/utils/prerender-utils.ts +123 -44
- package/src/vite/utils/shared-utils.ts +158 -44
- package/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
|
@@ -10,7 +10,11 @@ import type {
|
|
|
10
10
|
HandleData,
|
|
11
11
|
StreamingToken,
|
|
12
12
|
} from "./types.js";
|
|
13
|
-
import {
|
|
13
|
+
import {
|
|
14
|
+
filterSegmentOrder,
|
|
15
|
+
filterRouteSegmentIds,
|
|
16
|
+
} from "./react/filter-segment-order.js";
|
|
17
|
+
import { notifyListeners } from "./notify-listeners.js";
|
|
14
18
|
|
|
15
19
|
// Polyfill Symbol.dispose for Safari and older browsers
|
|
16
20
|
if (typeof Symbol.dispose === "undefined") {
|
|
@@ -79,6 +83,8 @@ export interface DerivedNavigationState {
|
|
|
79
83
|
state: "idle" | "loading";
|
|
80
84
|
/** Whether any operation is streaming */
|
|
81
85
|
isStreaming: boolean;
|
|
86
|
+
/** Whether a navigation is active (fetching or streaming, before commit) */
|
|
87
|
+
isNavigating: boolean;
|
|
82
88
|
/** Current committed location */
|
|
83
89
|
location: NavigationLocation;
|
|
84
90
|
/** URL being navigated to (null if idle) */
|
|
@@ -111,11 +117,24 @@ export type ActionStateListener = (state: TrackedActionState) => void;
|
|
|
111
117
|
export type HandleListener = () => void;
|
|
112
118
|
|
|
113
119
|
/**
|
|
114
|
-
* Internal handle state stored in controller
|
|
120
|
+
* Internal handle state stored in controller.
|
|
121
|
+
*
|
|
122
|
+
* Two segment lists are exposed because they serve different consumers:
|
|
123
|
+
*
|
|
124
|
+
* - `segmentOrder` drives handle collection (collectHandleData). Includes
|
|
125
|
+
* parallel slot ids and reorders them after their parent so later-wins
|
|
126
|
+
* collect functions (e.g. Meta) get the right precedence.
|
|
127
|
+
* - `routeSegmentIds` is the layouts-and-routes-only list documented by
|
|
128
|
+
* `useSegments().segmentIds`. Parallels and loader sub-ids are stripped;
|
|
129
|
+
* raw matched order is preserved.
|
|
130
|
+
*
|
|
131
|
+
* Both are derived from the same `matched` input on each setHandleData call
|
|
132
|
+
* so they stay in sync.
|
|
115
133
|
*/
|
|
116
134
|
export interface HandleState {
|
|
117
135
|
data: HandleData;
|
|
118
136
|
segmentOrder: string[];
|
|
137
|
+
routeSegmentIds: string[];
|
|
119
138
|
}
|
|
120
139
|
|
|
121
140
|
/**
|
|
@@ -150,6 +169,22 @@ export interface ActionHandle extends Disposable {
|
|
|
150
169
|
startStreaming(): StreamingToken;
|
|
151
170
|
/** Record segments that were revalidated */
|
|
152
171
|
recordRevalidatedSegments(segmentIds: string[]): void;
|
|
172
|
+
/**
|
|
173
|
+
* Claim the subset of a location-state payload this action may write. A key
|
|
174
|
+
* is claimed only if no later-initiated action in the SAME cohort has already
|
|
175
|
+
* claimed it, so same-key concurrent writes resolve to the last-initiated
|
|
176
|
+
* action while distinct keys from every action survive. Recording the claim
|
|
177
|
+
* stops a later-settling earlier action from overwriting it. Arbitration is
|
|
178
|
+
* scoped to the action's cohort (its originating history entry, captured at
|
|
179
|
+
* startAction), so an action on one entry cannot suppress an action on
|
|
180
|
+
* another that happens to write the same slot.
|
|
181
|
+
*
|
|
182
|
+
* Contract: this guarantees the FINAL value is the last-initiated action's,
|
|
183
|
+
* not that the loser is never momentarily visible. When an earlier-initiated
|
|
184
|
+
* action settles first, its value is merged and observable until the
|
|
185
|
+
* later-initiated winner's response lands and overwrites it.
|
|
186
|
+
*/
|
|
187
|
+
claimLocationState(state: Record<string, unknown>): Record<string, unknown>;
|
|
153
188
|
/** Complete the action with result */
|
|
154
189
|
complete(result?: unknown): void;
|
|
155
190
|
/** Fail the action with error */
|
|
@@ -176,7 +211,12 @@ export interface EventController {
|
|
|
176
211
|
abortNavigation(): void;
|
|
177
212
|
|
|
178
213
|
// Action operations
|
|
179
|
-
startAction(
|
|
214
|
+
startAction(
|
|
215
|
+
actionId: string,
|
|
216
|
+
args: unknown[],
|
|
217
|
+
/** Originating history entry key; scopes location-state arbitration. */
|
|
218
|
+
cohort?: string,
|
|
219
|
+
): ActionHandle;
|
|
180
220
|
abortAllActions(): void;
|
|
181
221
|
|
|
182
222
|
// State access
|
|
@@ -194,14 +234,36 @@ export interface EventController {
|
|
|
194
234
|
listener: ActionStateListener,
|
|
195
235
|
): () => void;
|
|
196
236
|
subscribeToHandles(listener: HandleListener): () => void;
|
|
237
|
+
/**
|
|
238
|
+
* Deliver queued location, params, navigation, and handle notifications now.
|
|
239
|
+
* NavigationProvider calls this inside the payload update so React assigns
|
|
240
|
+
* every route-state hook update to the same normal or transition lane.
|
|
241
|
+
*/
|
|
242
|
+
flushRouteState(): void;
|
|
197
243
|
|
|
198
244
|
// Handle operations
|
|
199
245
|
setHandleData(
|
|
200
246
|
data: HandleData,
|
|
201
247
|
matched?: string[],
|
|
202
248
|
isPartial?: boolean,
|
|
249
|
+
/**
|
|
250
|
+
* Segment ids that were re-resolved on the server this request (the
|
|
251
|
+
* partial response's `diff`). On a partial update, any existing bucket
|
|
252
|
+
* keyed under one of these ids that has no incoming entry is treated as
|
|
253
|
+
* stale and cleared. Without this, a parallel slot that revalidates but
|
|
254
|
+
* pushes nothing leaves its previous bucket in place forever.
|
|
255
|
+
*/
|
|
256
|
+
resolvedIds?: string[],
|
|
203
257
|
): void;
|
|
204
258
|
getHandleState(): HandleState;
|
|
259
|
+
/**
|
|
260
|
+
* Update ONLY `routeSegmentIds` (what `useSegments` reads) from `matched`,
|
|
261
|
+
* leaving `data` and `segmentOrder` (what `useHandle` collects over) untouched.
|
|
262
|
+
* Used while a deferred handle is resolving: the route has changed (so
|
|
263
|
+
* `useSegments` must reflect the new segment ids) but `useHandle` still holds
|
|
264
|
+
* its previous value until the deferred snapshot is applied.
|
|
265
|
+
*/
|
|
266
|
+
setRouteSegmentIds(matched: string[]): void;
|
|
205
267
|
|
|
206
268
|
// Params operations
|
|
207
269
|
setParams(params: Record<string, string>): void;
|
|
@@ -214,9 +276,70 @@ export interface EventController {
|
|
|
214
276
|
hadAnyConcurrentActions(): boolean;
|
|
215
277
|
}
|
|
216
278
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
279
|
+
type LocationChangeController = Pick<EventController, "getState" | "subscribe">;
|
|
280
|
+
|
|
281
|
+
interface LocationChangeSubscription {
|
|
282
|
+
registrations: Map<
|
|
283
|
+
symbol,
|
|
284
|
+
{ href: string; listener: (href: string) => void }
|
|
285
|
+
>;
|
|
286
|
+
notificationVersion: number;
|
|
287
|
+
unsubscribe: () => void;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
const locationChangeSubscriptions = new WeakMap<
|
|
291
|
+
LocationChangeController,
|
|
292
|
+
LocationChangeSubscription
|
|
293
|
+
>();
|
|
294
|
+
|
|
295
|
+
/** Share one controller subscription across all location-change consumers. */
|
|
296
|
+
export function subscribeToLocationChange(
|
|
297
|
+
eventController: LocationChangeController,
|
|
298
|
+
listener: (href: string) => void,
|
|
299
|
+
): () => void {
|
|
300
|
+
let subscription = locationChangeSubscriptions.get(eventController);
|
|
301
|
+
if (!subscription) {
|
|
302
|
+
subscription = {
|
|
303
|
+
registrations: new Map(),
|
|
304
|
+
notificationVersion: 0,
|
|
305
|
+
unsubscribe: () => {},
|
|
306
|
+
};
|
|
307
|
+
locationChangeSubscriptions.set(eventController, subscription);
|
|
308
|
+
const currentSubscription = subscription;
|
|
309
|
+
subscription.unsubscribe = eventController.subscribe(() => {
|
|
310
|
+
const notificationVersion = ++currentSubscription.notificationVersion;
|
|
311
|
+
const nextHref = eventController.getState().location.href;
|
|
312
|
+
notifyListeners(
|
|
313
|
+
[...currentSubscription.registrations],
|
|
314
|
+
([, registration]) => {
|
|
315
|
+
if (registration.href === nextHref) return;
|
|
316
|
+
registration.href = nextHref;
|
|
317
|
+
registration.listener(nextHref);
|
|
318
|
+
},
|
|
319
|
+
([token, registration]) =>
|
|
320
|
+
currentSubscription.registrations.get(token) === registration,
|
|
321
|
+
() => notificationVersion === currentSubscription.notificationVersion,
|
|
322
|
+
);
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
const token = Symbol();
|
|
327
|
+
subscription.registrations.set(token, {
|
|
328
|
+
href: eventController.getState().location.href,
|
|
329
|
+
listener,
|
|
330
|
+
});
|
|
331
|
+
let active = true;
|
|
332
|
+
return () => {
|
|
333
|
+
if (!active) return;
|
|
334
|
+
active = false;
|
|
335
|
+
subscription!.registrations.delete(token);
|
|
336
|
+
if (subscription!.registrations.size > 0) return;
|
|
337
|
+
if (locationChangeSubscriptions.get(eventController) === subscription) {
|
|
338
|
+
locationChangeSubscriptions.delete(eventController);
|
|
339
|
+
}
|
|
340
|
+
subscription!.unsubscribe();
|
|
341
|
+
};
|
|
342
|
+
}
|
|
220
343
|
|
|
221
344
|
const DEFAULT_ACTION_STATE: TrackedActionState = {
|
|
222
345
|
state: "idle",
|
|
@@ -226,6 +349,13 @@ const DEFAULT_ACTION_STATE: TrackedActionState = {
|
|
|
226
349
|
result: null,
|
|
227
350
|
};
|
|
228
351
|
|
|
352
|
+
// Shared empty inflight-actions list. getState() hands back this exact reference
|
|
353
|
+
// whenever no action is inflight (the overwhelmingly common case), so the derived
|
|
354
|
+
// snapshot's `inflightActions` is referentially stable across notifies instead of
|
|
355
|
+
// a fresh [] each call. Read-only by contract (consumers only read length/spread),
|
|
356
|
+
// same as the shared DEFAULT_ACTION_STATE.
|
|
357
|
+
const EMPTY_INFLIGHT_ACTIONS: InflightAction[] = [];
|
|
358
|
+
|
|
229
359
|
/**
|
|
230
360
|
* Check if a subscription ID matches an action's full ID.
|
|
231
361
|
*
|
|
@@ -238,20 +368,40 @@ function matchesActionId(
|
|
|
238
368
|
entryActionId: string,
|
|
239
369
|
): boolean {
|
|
240
370
|
if (subscriptionId.includes("#")) {
|
|
241
|
-
// Full ID: exact match
|
|
242
371
|
return subscriptionId === entryActionId;
|
|
243
372
|
}
|
|
244
|
-
// Action name only: suffix match (matches "anything#actionName")
|
|
245
373
|
return entryActionId.endsWith(`#${subscriptionId}`);
|
|
246
374
|
}
|
|
247
375
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
376
|
+
interface DebouncedNotifier {
|
|
377
|
+
schedule(): void;
|
|
378
|
+
flush(): void;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
// Batch rapid notifications into one task to prevent render storms. The
|
|
382
|
+
// explicit flush lets a React update owner preserve its scheduling lane.
|
|
383
|
+
function makeDebouncedNotifier(listeners: Set<() => void>): DebouncedNotifier {
|
|
384
|
+
let timeout: ReturnType<typeof setTimeout> | null = null;
|
|
385
|
+
const flush = () => {
|
|
386
|
+
if (timeout === null) return;
|
|
387
|
+
clearTimeout(timeout);
|
|
388
|
+
timeout = null;
|
|
389
|
+
notifyListeners(
|
|
390
|
+
[...listeners],
|
|
391
|
+
(listener) => listener(),
|
|
392
|
+
(listener) => listeners.has(listener),
|
|
393
|
+
);
|
|
394
|
+
};
|
|
395
|
+
|
|
396
|
+
return {
|
|
397
|
+
schedule() {
|
|
398
|
+
if (timeout !== null) clearTimeout(timeout);
|
|
399
|
+
timeout = setTimeout(flush, 0);
|
|
400
|
+
},
|
|
401
|
+
flush,
|
|
402
|
+
};
|
|
403
|
+
}
|
|
251
404
|
|
|
252
|
-
/**
|
|
253
|
-
* Configuration for creating an event controller
|
|
254
|
-
*/
|
|
255
405
|
export interface EventControllerConfig {
|
|
256
406
|
initialLocation?: NavigationLocation;
|
|
257
407
|
}
|
|
@@ -269,63 +419,103 @@ export interface EventControllerConfig {
|
|
|
269
419
|
export function createEventController(
|
|
270
420
|
config?: EventControllerConfig,
|
|
271
421
|
): EventController {
|
|
272
|
-
// ========================================================================
|
|
273
|
-
// Source of Truth
|
|
274
|
-
// ========================================================================
|
|
275
|
-
|
|
276
|
-
// Current navigation in progress (null = idle)
|
|
277
422
|
let currentNavigation: NavigationEntry | null = null;
|
|
278
423
|
|
|
279
|
-
// All in-flight actions (keyed by unique instance ID)
|
|
280
424
|
const inflightActions = new Map<string, ActionEntry>();
|
|
281
425
|
|
|
282
|
-
// Committed location (updated when navigation completes)
|
|
283
426
|
let location: NavigationLocation =
|
|
284
427
|
config?.initialLocation ??
|
|
285
428
|
(typeof window !== "undefined"
|
|
286
429
|
? new URL(window.location.href)
|
|
287
430
|
: new URL("/", "http://localhost"));
|
|
288
431
|
|
|
289
|
-
// Track if any concurrent actions occurred (for consolidation)
|
|
290
432
|
let hadAnyConcurrentActions = false;
|
|
291
433
|
|
|
292
|
-
// Track segments revalidated by concurrent actions
|
|
293
434
|
const concurrentRevalidatedSegments = new Set<string>();
|
|
294
435
|
|
|
295
|
-
//
|
|
436
|
+
// Monotonic dispatch counter: every startAction() takes the next value
|
|
437
|
+
// (private), so a larger sequence means the action was initiated later.
|
|
438
|
+
let actionDispatchSeq = 0;
|
|
439
|
+
|
|
440
|
+
// Concurrent location-state arbitration, scoped PER COHORT (history entry).
|
|
441
|
+
// Each cohort owns a slotKey->winningDispatchSeq map plus a refcount of its
|
|
442
|
+
// inflight actions; claimLocationState() consults its own cohort's map so
|
|
443
|
+
// same-key writes within one entry resolve to the last-initiated action
|
|
444
|
+
// regardless of settle order, while actions on different entries never
|
|
445
|
+
// compete. A cohort's map is freed once its LAST action's cleanup runs — the
|
|
446
|
+
// same brief post-settle grace (doSettle's 100ms timer) as other action
|
|
447
|
+
// teardown, not when every action everywhere settles — so a long-running
|
|
448
|
+
// action in one cohort can never retain arbitration keys from other cohorts
|
|
449
|
+
// that have since drained. It is never cleared in clearConsolidation, which
|
|
450
|
+
// fires
|
|
451
|
+
// per-action on divert/error and would let a later-settling earlier action
|
|
452
|
+
// wrongly reclaim a key a sibling already won.
|
|
453
|
+
const cohortArbitration = new Map<
|
|
454
|
+
string,
|
|
455
|
+
{ keySeq: Map<string, number>; inflight: number }
|
|
456
|
+
>();
|
|
457
|
+
|
|
296
458
|
let activeStreamCount = 0;
|
|
297
459
|
|
|
298
|
-
// Handle data from RSC payload
|
|
299
460
|
let handleData: HandleData = {};
|
|
300
461
|
let handleSegmentOrder: string[] = [];
|
|
462
|
+
let routeSegmentIds: string[] = [];
|
|
301
463
|
|
|
302
|
-
// Merged route params from current match
|
|
303
464
|
let routeParams: Record<string, string> = {};
|
|
304
465
|
|
|
305
|
-
// ========================================================================
|
|
306
|
-
// Listeners
|
|
307
|
-
// ========================================================================
|
|
308
|
-
|
|
309
466
|
const stateListeners = new Set<StateListener>();
|
|
310
467
|
const actionListeners = new Map<string, Set<ActionStateListener>>();
|
|
311
468
|
const handleListeners = new Set<HandleListener>();
|
|
312
469
|
|
|
313
|
-
|
|
314
|
-
let notifyTimeout: ReturnType<typeof setTimeout> | null = null;
|
|
470
|
+
const notifyStateListeners = makeDebouncedNotifier(stateListeners);
|
|
315
471
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
472
|
+
// Memoized derived snapshot. Every state mutation already funnels through
|
|
473
|
+
// notify(), so invalidating here (synchronously, before the debounced fire)
|
|
474
|
+
// means a getState() call between two mutations reuses the same object — an
|
|
475
|
+
// unchanged state returns the SAME reference — while any real change recomputes
|
|
476
|
+
// on the next read. Kept null when dirty.
|
|
477
|
+
let cachedDerivedState: DerivedNavigationState | null = null;
|
|
478
|
+
|
|
479
|
+
function notify(): void {
|
|
480
|
+
cachedDerivedState = null;
|
|
481
|
+
notifyStateListeners.schedule();
|
|
324
482
|
}
|
|
325
483
|
|
|
326
|
-
// Debounce per-action notifications
|
|
327
484
|
const actionNotifyTimeouts = new Map<string, ReturnType<typeof setTimeout>>();
|
|
328
485
|
|
|
486
|
+
function notifyActionListenerSets(
|
|
487
|
+
subscriptions: Iterable<[string, Set<ActionStateListener>]>,
|
|
488
|
+
): void {
|
|
489
|
+
const subscriptionSnapshots = [...subscriptions].map(
|
|
490
|
+
([subscriptionId, listeners]) => ({
|
|
491
|
+
listenerSnapshot: [...listeners],
|
|
492
|
+
listeners,
|
|
493
|
+
subscriptionId,
|
|
494
|
+
}),
|
|
495
|
+
);
|
|
496
|
+
function* notifications(): Generator<{
|
|
497
|
+
listener: ActionStateListener;
|
|
498
|
+
listeners: Set<ActionStateListener>;
|
|
499
|
+
state: TrackedActionState;
|
|
500
|
+
}> {
|
|
501
|
+
for (const {
|
|
502
|
+
listenerSnapshot,
|
|
503
|
+
listeners,
|
|
504
|
+
subscriptionId,
|
|
505
|
+
} of subscriptionSnapshots) {
|
|
506
|
+
const state = getActionState(subscriptionId);
|
|
507
|
+
for (const listener of listenerSnapshot) {
|
|
508
|
+
yield { listener, listeners, state };
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
notifyListeners(
|
|
513
|
+
notifications(),
|
|
514
|
+
({ listener, state }) => listener(state),
|
|
515
|
+
({ listener, listeners }) => listeners.has(listener),
|
|
516
|
+
);
|
|
517
|
+
}
|
|
518
|
+
|
|
329
519
|
function notifyAction(actionId: string) {
|
|
330
520
|
const existing = actionNotifyTimeouts.get(actionId);
|
|
331
521
|
if (existing !== undefined) {
|
|
@@ -335,60 +525,53 @@ export function createEventController(
|
|
|
335
525
|
actionId,
|
|
336
526
|
setTimeout(() => {
|
|
337
527
|
actionNotifyTimeouts.delete(actionId);
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
listeners.forEach((listener) => listener(state));
|
|
344
|
-
}
|
|
345
|
-
}
|
|
528
|
+
notifyActionListenerSets(
|
|
529
|
+
[...actionListeners].filter(([subscriptionId]) =>
|
|
530
|
+
matchesActionId(subscriptionId, actionId),
|
|
531
|
+
),
|
|
532
|
+
);
|
|
346
533
|
}, 0),
|
|
347
534
|
);
|
|
348
535
|
}
|
|
349
536
|
|
|
350
|
-
|
|
351
|
-
let handleNotifyTimeout: ReturnType<typeof setTimeout> | null = null;
|
|
537
|
+
const notifyHandles = makeDebouncedNotifier(handleListeners);
|
|
352
538
|
|
|
353
|
-
function
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
}
|
|
357
|
-
handleNotifyTimeout = setTimeout(() => {
|
|
358
|
-
handleNotifyTimeout = null;
|
|
359
|
-
handleListeners.forEach((listener) => listener());
|
|
360
|
-
}, 0);
|
|
539
|
+
function flushRouteState(): void {
|
|
540
|
+
notifyStateListeners.flush();
|
|
541
|
+
notifyHandles.flush();
|
|
361
542
|
}
|
|
362
543
|
|
|
363
|
-
// ========================================================================
|
|
364
|
-
// Derived State
|
|
365
|
-
// ========================================================================
|
|
366
|
-
|
|
367
544
|
function getState(): DerivedNavigationState {
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
545
|
+
if (cachedDerivedState) return cachedDerivedState;
|
|
546
|
+
|
|
547
|
+
// Skip the spread/filter/map entirely when idle — the common case — and hand
|
|
548
|
+
// back the shared frozen empty list for referential stability.
|
|
549
|
+
const inflightActionsList: InflightAction[] =
|
|
550
|
+
inflightActions.size === 0
|
|
551
|
+
? EMPTY_INFLIGHT_ACTIONS
|
|
552
|
+
: [...inflightActions.values()]
|
|
553
|
+
.filter((a) => a.phase !== "settling")
|
|
554
|
+
.map((a) => ({
|
|
555
|
+
id: a.id,
|
|
556
|
+
actionId: a.actionId,
|
|
557
|
+
payload: a.payload,
|
|
558
|
+
startedAt: a.startedAt,
|
|
559
|
+
}));
|
|
560
|
+
|
|
380
561
|
const hasActiveActions = inflightActionsList.length > 0;
|
|
381
562
|
const isVisibleNavigation =
|
|
382
563
|
currentNavigation !== null &&
|
|
383
564
|
!currentNavigation.options?.skipLoadingState;
|
|
384
565
|
const state = isVisibleNavigation || hasActiveActions ? "loading" : "idle";
|
|
385
566
|
|
|
386
|
-
// Streaming: true if any active streams (navigation or action) or loading
|
|
387
567
|
const isStreaming = activeStreamCount > 0 || state === "loading";
|
|
388
568
|
|
|
389
|
-
|
|
569
|
+
cachedDerivedState = {
|
|
390
570
|
state,
|
|
391
571
|
isStreaming,
|
|
572
|
+
// True when a navigation is active (fetching or streaming, before
|
|
573
|
+
// commit). Broader than pendingUrl which clears during streaming.
|
|
574
|
+
isNavigating: currentNavigation !== null,
|
|
392
575
|
location,
|
|
393
576
|
// pendingUrl only during fetching phase - once streaming starts (URL changed), not pending.
|
|
394
577
|
// Background revalidations (skipLoadingState) don't expose a pending URL.
|
|
@@ -399,31 +582,28 @@ export function createEventController(
|
|
|
399
582
|
: null,
|
|
400
583
|
inflightActions: inflightActionsList,
|
|
401
584
|
};
|
|
585
|
+
return cachedDerivedState;
|
|
402
586
|
}
|
|
403
587
|
|
|
404
588
|
function getActionState(actionId: string): TrackedActionState {
|
|
405
|
-
//
|
|
406
|
-
//
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
)
|
|
411
|
-
.
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
)
|
|
418
|
-
.sort((a, b) => b.startedAt - a.startedAt)[0];
|
|
419
|
-
|
|
420
|
-
const entry = activeEntry || settlingEntry;
|
|
589
|
+
// Nothing inflight — skip building/scanning the list and return the shared
|
|
590
|
+
// idle snapshot (the same reference use-action falls back to).
|
|
591
|
+
if (inflightActions.size === 0) return DEFAULT_ACTION_STATE;
|
|
592
|
+
|
|
593
|
+
const entry = [...inflightActions.values()]
|
|
594
|
+
.filter((a) => matchesActionId(actionId, a.actionId))
|
|
595
|
+
.reduce<ActionEntry | undefined>((best, a) => {
|
|
596
|
+
if (!best) return a;
|
|
597
|
+
const aActive = a.phase !== "settling";
|
|
598
|
+
const bActive = best.phase !== "settling";
|
|
599
|
+
if (aActive !== bActive) return aActive ? a : best;
|
|
600
|
+
return a.startedAt > best.startedAt ? a : best;
|
|
601
|
+
}, undefined);
|
|
421
602
|
|
|
422
603
|
if (!entry) {
|
|
423
604
|
return { ...DEFAULT_ACTION_STATE };
|
|
424
605
|
}
|
|
425
606
|
|
|
426
|
-
// Derive state from phase
|
|
427
607
|
let state: ActionLifecycleState;
|
|
428
608
|
switch (entry.phase) {
|
|
429
609
|
case "fetching":
|
|
@@ -538,12 +718,45 @@ export function createEventController(
|
|
|
538
718
|
// Action Operations
|
|
539
719
|
// ========================================================================
|
|
540
720
|
|
|
541
|
-
function startAction(
|
|
721
|
+
function startAction(
|
|
722
|
+
actionId: string,
|
|
723
|
+
args: unknown[],
|
|
724
|
+
cohort?: string,
|
|
725
|
+
): ActionHandle {
|
|
542
726
|
const id = `${actionId}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
|
|
727
|
+
// Private to this handle: never exposed on the returned ActionHandle.
|
|
728
|
+
const dispatchSeq = actionDispatchSeq++;
|
|
543
729
|
const abort = new AbortController();
|
|
544
730
|
|
|
545
|
-
//
|
|
546
|
-
|
|
731
|
+
// Register this action under its cohort (originating history entry). The
|
|
732
|
+
// cohort's arbitration is created on first use and freed when its last
|
|
733
|
+
// action settles (see doSettle). Keyless entries share the "" cohort.
|
|
734
|
+
const cohortId = cohort ?? "";
|
|
735
|
+
let arb = cohortArbitration.get(cohortId);
|
|
736
|
+
if (!arb) {
|
|
737
|
+
arb = { keySeq: new Map<string, number>(), inflight: 0 };
|
|
738
|
+
cohortArbitration.set(cohortId, arb);
|
|
739
|
+
}
|
|
740
|
+
// const so the captured reference stays non-undefined inside doSettle.
|
|
741
|
+
const arbitration = arb;
|
|
742
|
+
arbitration.inflight++;
|
|
743
|
+
|
|
744
|
+
// Track if this action started while another was genuinely in-flight.
|
|
745
|
+
// Completed entries don't count: complete()/fail() ran, so the prior
|
|
746
|
+
// action's response was fully processed and applied — a request dispatched
|
|
747
|
+
// after that point is strictly ordered behind the prior action's server
|
|
748
|
+
// execution, and there is no skipped render or order uncertainty for
|
|
749
|
+
// consolidation to repair. Completed entries still linger in the map for
|
|
750
|
+
// the 100ms doSettle window (useAction reads) and, on a slow connection,
|
|
751
|
+
// while the Flight stream drains its EOF after complete(). Counting them
|
|
752
|
+
// latched hadAnyConcurrentActions for back-to-back sequential actions,
|
|
753
|
+
// which made the LAST action classify as consolidation-needed; the
|
|
754
|
+
// consolidation refetch omits every concurrently-revalidated segment id
|
|
755
|
+
// from _rsc_segments, so the server re-ran gated loaders as "new-segment"
|
|
756
|
+
// — bypassing revalidate(({ isAction }) => ...) on a plain GET (#675).
|
|
757
|
+
const hadConcurrent = [...inflightActions.values()].some(
|
|
758
|
+
(a) => !a.completed,
|
|
759
|
+
);
|
|
547
760
|
if (hadConcurrent) {
|
|
548
761
|
hadAnyConcurrentActions = true;
|
|
549
762
|
}
|
|
@@ -565,11 +778,28 @@ export function createEventController(
|
|
|
565
778
|
let settled = false;
|
|
566
779
|
let streamingEnded = false;
|
|
567
780
|
let actionCompleted = false;
|
|
781
|
+
let cohortReleased = false;
|
|
568
782
|
let pendingResult:
|
|
569
783
|
| { type: "success"; value?: unknown }
|
|
570
784
|
| { type: "error"; value: unknown }
|
|
571
785
|
| null = null;
|
|
572
786
|
|
|
787
|
+
// Release this action's hold on its cohort arbitration exactly once: drop
|
|
788
|
+
// the refcount and, only if the map still points at THIS arbitration object,
|
|
789
|
+
// delete it. A newer generation may have replaced it (e.g. abortAllActions
|
|
790
|
+
// cleared the map and a fresh action recreated the same cohort id), so a
|
|
791
|
+
// stale settlement must never delete the newer one by id.
|
|
792
|
+
function releaseCohort() {
|
|
793
|
+
if (cohortReleased) return;
|
|
794
|
+
cohortReleased = true;
|
|
795
|
+
if (
|
|
796
|
+
--arbitration.inflight <= 0 &&
|
|
797
|
+
cohortArbitration.get(cohortId) === arbitration
|
|
798
|
+
) {
|
|
799
|
+
cohortArbitration.delete(cohortId);
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
|
|
573
803
|
function doSettle() {
|
|
574
804
|
if (settled) return;
|
|
575
805
|
settled = true;
|
|
@@ -577,6 +807,9 @@ export function createEventController(
|
|
|
577
807
|
// Cleanup after brief delay (allow useAction to read result)
|
|
578
808
|
setTimeout(() => {
|
|
579
809
|
inflightActions.delete(id);
|
|
810
|
+
// Free this cohort's arbitration once its last action has settled, so
|
|
811
|
+
// a long-running action elsewhere cannot pin keys from a drained entry.
|
|
812
|
+
releaseCohort();
|
|
580
813
|
// Check for consolidation
|
|
581
814
|
if (inflightActions.size === 0) {
|
|
582
815
|
// All actions done - reset tracking
|
|
@@ -605,6 +838,19 @@ export function createEventController(
|
|
|
605
838
|
doSettle();
|
|
606
839
|
}
|
|
607
840
|
|
|
841
|
+
// streamingEnded is forced here for the "streaming never started" case so
|
|
842
|
+
// tryFinalize can run; otherwise the streaming token's end() finalizes.
|
|
843
|
+
function settleWith(result: NonNullable<typeof pendingResult>) {
|
|
844
|
+
if (!inflightActions.has(id) || settled) return;
|
|
845
|
+
actionCompleted = true;
|
|
846
|
+
entry.completed = true;
|
|
847
|
+
pendingResult = result;
|
|
848
|
+
if (entry.phase === "fetching" || streamingEnded) {
|
|
849
|
+
streamingEnded = true;
|
|
850
|
+
tryFinalize();
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
|
|
608
854
|
return {
|
|
609
855
|
id,
|
|
610
856
|
abort,
|
|
@@ -640,36 +886,32 @@ export function createEventController(
|
|
|
640
886
|
segmentIds.forEach((id) => concurrentRevalidatedSegments.add(id));
|
|
641
887
|
},
|
|
642
888
|
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
889
|
+
claimLocationState(state: Record<string, unknown>) {
|
|
890
|
+
const winning: Record<string, unknown> = {};
|
|
891
|
+
// Arbitrate against this action's OWN captured arbitration object, not a
|
|
892
|
+
// live map lookup: a concurrent map clear/replace (abortAllActions, a
|
|
893
|
+
// stale settlement) must not make this action silently stop recording
|
|
894
|
+
// and accept every key.
|
|
895
|
+
const keySeq = arbitration.keySeq;
|
|
896
|
+
for (const key of Object.keys(state)) {
|
|
897
|
+
const prevSeq = keySeq.get(key);
|
|
898
|
+
// Strictly-greater: a later-initiated action wins a key over an
|
|
899
|
+
// earlier one in the same cohort regardless of arrival order. Equal
|
|
900
|
+
// cannot happen (dispatchSeq is unique per action).
|
|
901
|
+
if (prevSeq === undefined || dispatchSeq > prevSeq) {
|
|
902
|
+
keySeq.set(key, dispatchSeq);
|
|
903
|
+
winning[key] = state[key];
|
|
904
|
+
}
|
|
655
905
|
}
|
|
656
|
-
|
|
906
|
+
return winning;
|
|
657
907
|
},
|
|
658
908
|
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
actionCompleted = true;
|
|
663
|
-
entry.completed = true;
|
|
664
|
-
pendingResult = { type: "error", value: error };
|
|
909
|
+
complete(result?: unknown) {
|
|
910
|
+
settleWith({ type: "success", value: result });
|
|
911
|
+
},
|
|
665
912
|
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
if (entry.phase === "fetching" || streamingEnded) {
|
|
669
|
-
streamingEnded = true; // Mark as ended if never started
|
|
670
|
-
tryFinalize();
|
|
671
|
-
}
|
|
672
|
-
// If streaming is in progress, tryFinalize() will be called when streaming ends
|
|
913
|
+
fail(error: unknown) {
|
|
914
|
+
settleWith({ type: "error", value: error });
|
|
673
915
|
},
|
|
674
916
|
|
|
675
917
|
getRevalidatedSegments(): Set<string> {
|
|
@@ -685,6 +927,10 @@ export function createEventController(
|
|
|
685
927
|
[Symbol.dispose]() {
|
|
686
928
|
// If aborted, another navigation/error took over - don't touch state
|
|
687
929
|
if (abort.signal.aborted) {
|
|
930
|
+
// Aborted actions skip doSettle, so release the cohort hold here to
|
|
931
|
+
// keep the per-cohort refcount balanced (no leak when an action is
|
|
932
|
+
// aborted individually rather than via abortAllActions).
|
|
933
|
+
releaseCohort();
|
|
688
934
|
inflightActions.delete(id);
|
|
689
935
|
notify();
|
|
690
936
|
notifyAction(actionId);
|
|
@@ -719,16 +965,14 @@ export function createEventController(
|
|
|
719
965
|
}
|
|
720
966
|
hadAnyConcurrentActions = false;
|
|
721
967
|
concurrentRevalidatedSegments.clear();
|
|
968
|
+
cohortArbitration.clear();
|
|
722
969
|
notify();
|
|
723
970
|
// Notify all action listeners directly by subscription ID.
|
|
724
971
|
// actionListeners keys are subscription IDs (possibly short names like
|
|
725
972
|
// "addToCart"), not full entry actionIds. Passing them to notifyAction
|
|
726
973
|
// would fail the suffix matcher — instead, notify each subscriber with
|
|
727
974
|
// its own state.
|
|
728
|
-
|
|
729
|
-
const state = getActionState(subscriptionId);
|
|
730
|
-
listeners.forEach((listener) => listener(state));
|
|
731
|
-
}
|
|
975
|
+
notifyActionListenerSets(actionListeners);
|
|
732
976
|
}
|
|
733
977
|
|
|
734
978
|
// ========================================================================
|
|
@@ -739,8 +983,13 @@ export function createEventController(
|
|
|
739
983
|
data: HandleData,
|
|
740
984
|
matched?: string[],
|
|
741
985
|
isPartial?: boolean,
|
|
986
|
+
resolvedIds?: string[],
|
|
742
987
|
): void {
|
|
743
|
-
const
|
|
988
|
+
const rawMatched = matched ?? [];
|
|
989
|
+
const newSegmentOrder = filterSegmentOrder(rawMatched);
|
|
990
|
+
// Separate list for useSegments(): "layouts and routes only" — strip
|
|
991
|
+
// parallels (".@") and loader sub-ids (D digit) without reordering.
|
|
992
|
+
const newRouteSegmentIds = filterRouteSegmentIds(rawMatched);
|
|
744
993
|
|
|
745
994
|
if (isPartial && newSegmentOrder.length > 0) {
|
|
746
995
|
// Partial update: merge new data with existing
|
|
@@ -752,10 +1001,19 @@ export function createEventController(
|
|
|
752
1001
|
handleData[handleName][segmentId] = data[handleName][segmentId];
|
|
753
1002
|
}
|
|
754
1003
|
}
|
|
755
|
-
|
|
1004
|
+
const resolvedIdSet =
|
|
1005
|
+
resolvedIds && resolvedIds.length > 0 ? new Set(resolvedIds) : null;
|
|
1006
|
+
// Cleanup pass:
|
|
1007
|
+
// a) segment dropped from the match list — delete its bucket.
|
|
1008
|
+
// b) segment was re-resolved this request but pushed nothing for
|
|
1009
|
+
// this handle — its previous bucket is stale.
|
|
1010
|
+
// (a) is the existing behavior; (b) requires resolvedIds.
|
|
756
1011
|
for (const handleName of Object.keys(handleData)) {
|
|
757
1012
|
for (const segmentId of Object.keys(handleData[handleName])) {
|
|
758
|
-
|
|
1013
|
+
const droppedFromMatch = !newSegmentOrder.includes(segmentId);
|
|
1014
|
+
const reresolvedWithoutPush =
|
|
1015
|
+
resolvedIdSet?.has(segmentId) && !data[handleName]?.[segmentId];
|
|
1016
|
+
if (droppedFromMatch || reresolvedWithoutPush) {
|
|
759
1017
|
delete handleData[handleName][segmentId];
|
|
760
1018
|
}
|
|
761
1019
|
}
|
|
@@ -765,17 +1023,31 @@ export function createEventController(
|
|
|
765
1023
|
handleData = data;
|
|
766
1024
|
}
|
|
767
1025
|
handleSegmentOrder = newSegmentOrder;
|
|
1026
|
+
routeSegmentIds = newRouteSegmentIds;
|
|
768
1027
|
|
|
769
|
-
notifyHandles();
|
|
1028
|
+
notifyHandles.schedule();
|
|
770
1029
|
}
|
|
771
1030
|
|
|
772
1031
|
function getHandleState(): HandleState {
|
|
773
1032
|
return {
|
|
774
1033
|
data: handleData,
|
|
775
1034
|
segmentOrder: handleSegmentOrder,
|
|
1035
|
+
routeSegmentIds,
|
|
776
1036
|
};
|
|
777
1037
|
}
|
|
778
1038
|
|
|
1039
|
+
function setRouteSegmentIds(matched: string[]): void {
|
|
1040
|
+
const next = filterRouteSegmentIds(matched);
|
|
1041
|
+
if (
|
|
1042
|
+
next.length === routeSegmentIds.length &&
|
|
1043
|
+
next.every((id, i) => id === routeSegmentIds[i])
|
|
1044
|
+
) {
|
|
1045
|
+
return;
|
|
1046
|
+
}
|
|
1047
|
+
routeSegmentIds = next;
|
|
1048
|
+
notifyHandles.schedule();
|
|
1049
|
+
}
|
|
1050
|
+
|
|
779
1051
|
// ========================================================================
|
|
780
1052
|
// Subscriptions
|
|
781
1053
|
// ========================================================================
|
|
@@ -844,6 +1116,7 @@ export function createEventController(
|
|
|
844
1116
|
// Handles
|
|
845
1117
|
setHandleData,
|
|
846
1118
|
getHandleState,
|
|
1119
|
+
setRouteSegmentIds,
|
|
847
1120
|
|
|
848
1121
|
// Params
|
|
849
1122
|
setParams,
|
|
@@ -853,6 +1126,7 @@ export function createEventController(
|
|
|
853
1126
|
subscribe,
|
|
854
1127
|
subscribeToAction,
|
|
855
1128
|
subscribeToHandles,
|
|
1129
|
+
flushRouteState,
|
|
856
1130
|
|
|
857
1131
|
// Direct access
|
|
858
1132
|
getCurrentNavigation: () => currentNavigation,
|
|
@@ -860,40 +1134,3 @@ export function createEventController(
|
|
|
860
1134
|
hadAnyConcurrentActions: () => hadAnyConcurrentActions,
|
|
861
1135
|
};
|
|
862
1136
|
}
|
|
863
|
-
|
|
864
|
-
// ============================================================================
|
|
865
|
-
// Singleton
|
|
866
|
-
// ============================================================================
|
|
867
|
-
|
|
868
|
-
let controllerInstance: EventController | null = null;
|
|
869
|
-
|
|
870
|
-
/**
|
|
871
|
-
* Initialize the global event controller
|
|
872
|
-
*/
|
|
873
|
-
export function initEventController(
|
|
874
|
-
config?: EventControllerConfig,
|
|
875
|
-
): EventController {
|
|
876
|
-
if (!controllerInstance) {
|
|
877
|
-
controllerInstance = createEventController(config);
|
|
878
|
-
}
|
|
879
|
-
return controllerInstance;
|
|
880
|
-
}
|
|
881
|
-
|
|
882
|
-
/**
|
|
883
|
-
* Get the global event controller
|
|
884
|
-
*/
|
|
885
|
-
export function getEventController(): EventController {
|
|
886
|
-
if (!controllerInstance) {
|
|
887
|
-
throw new Error(
|
|
888
|
-
"Event controller not initialized. Call initEventController first.",
|
|
889
|
-
);
|
|
890
|
-
}
|
|
891
|
-
return controllerInstance;
|
|
892
|
-
}
|
|
893
|
-
|
|
894
|
-
/**
|
|
895
|
-
* Reset the controller instance (for testing)
|
|
896
|
-
*/
|
|
897
|
-
export function resetEventController(): void {
|
|
898
|
-
controllerInstance = null;
|
|
899
|
-
}
|