@rangojs/router 0.0.0-experimental.f2d1a2f1 → 0.0.0-experimental.f4a8e8de
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +8 -4
- package/README.md +318 -821
- package/dist/bin/rango.js +925 -271
- package/dist/testing/vitest.js +82 -0
- package/dist/types/__internal.d.ts +127 -0
- package/dist/types/bin/rango.d.ts +1 -0
- package/dist/types/browser/action-coordinator.d.ts +57 -0
- package/dist/types/browser/action-fence.d.ts +33 -0
- package/dist/types/browser/app-shell.d.ts +34 -0
- package/dist/types/browser/app-version.d.ts +6 -0
- package/dist/types/browser/connection-warmup.d.ts +31 -0
- package/dist/types/browser/cookie-name.d.ts +66 -0
- package/dist/types/browser/dev-discovery.d.ts +11 -0
- package/dist/types/browser/event-controller.d.ts +231 -0
- package/dist/types/browser/history-state.d.ts +26 -0
- package/dist/types/browser/index.d.ts +1 -0
- package/dist/types/browser/intercept-utils.d.ts +30 -0
- package/dist/types/browser/invalidate-client-cache.d.ts +17 -0
- package/dist/types/browser/link-interceptor.d.ts +53 -0
- package/dist/types/browser/logging.d.ts +33 -0
- package/dist/types/browser/merge-segment-loaders.d.ts +38 -0
- package/dist/types/browser/navigation-bridge.d.ts +39 -0
- package/dist/types/browser/navigation-client.d.ts +17 -0
- package/dist/types/browser/navigation-store-handle.d.ts +25 -0
- package/dist/types/browser/navigation-store.d.ts +85 -0
- package/dist/types/browser/navigation-transaction.d.ts +75 -0
- package/dist/types/browser/network-error-handler.d.ts +35 -0
- package/dist/types/browser/notify-listeners.d.ts +2 -0
- package/dist/types/browser/partial-update.d.ts +61 -0
- package/dist/types/browser/prefetch/cache.d.ts +224 -0
- package/dist/types/browser/prefetch/default-strategy.d.ts +31 -0
- package/dist/types/browser/prefetch/fetch.d.ts +52 -0
- package/dist/types/browser/prefetch/invalidation.d.ts +6 -0
- package/dist/types/browser/prefetch/loader.d.ts +12 -0
- package/dist/types/browser/prefetch/observer.d.ts +24 -0
- package/dist/types/browser/prefetch/policy.d.ts +13 -0
- package/dist/types/browser/prefetch/queue.d.ts +48 -0
- package/dist/types/browser/prefetch/resource-ready.d.ts +28 -0
- package/dist/types/browser/prefetch/runtime.d.ts +2 -0
- package/dist/types/browser/rango-state.d.ts +56 -0
- package/dist/types/browser/react/Link.d.ts +132 -0
- package/dist/types/browser/react/NavigationProvider.d.ts +88 -0
- package/dist/types/browser/react/ScrollRestoration.d.ts +78 -0
- package/dist/types/browser/react/context.d.ts +57 -0
- package/dist/types/browser/react/filter-segment-order.d.ts +35 -0
- package/dist/types/browser/react/index.d.ts +1 -0
- package/dist/types/browser/react/location-state-shared.d.ts +162 -0
- package/dist/types/browser/react/location-state.d.ts +29 -0
- package/dist/types/browser/react/mount-context.d.ts +23 -0
- package/dist/types/browser/react/nonce-context.d.ts +14 -0
- package/dist/types/browser/react/shallow-equal.d.ts +5 -0
- package/dist/types/browser/react/use-action.d.ts +61 -0
- package/dist/types/browser/react/use-handle.d.ts +21 -0
- package/dist/types/browser/react/use-href.d.ts +32 -0
- package/dist/types/browser/react/use-link-status.d.ts +36 -0
- package/dist/types/browser/react/use-mount.d.ts +24 -0
- package/dist/types/browser/react/use-navigation.d.ts +15 -0
- package/dist/types/browser/react/use-params.d.ts +21 -0
- package/dist/types/browser/react/use-pathname.d.ts +13 -0
- package/dist/types/browser/react/use-reverse.d.ts +40 -0
- package/dist/types/browser/react/use-router.d.ts +23 -0
- package/dist/types/browser/react/use-search-params.d.ts +19 -0
- package/dist/types/browser/react/use-segments.d.ts +29 -0
- package/dist/types/browser/response-adapter.d.ts +58 -0
- package/dist/types/browser/rsc-router.d.ts +146 -0
- package/dist/types/browser/scroll-restoration.d.ts +103 -0
- package/dist/types/browser/segment-reconciler.d.ts +74 -0
- package/dist/types/browser/segment-structure-assert.d.ts +16 -0
- package/dist/types/browser/server-action-bridge.d.ts +29 -0
- package/dist/types/browser/types.d.ts +546 -0
- package/dist/types/browser/validate-redirect-origin.d.ts +28 -0
- package/dist/types/build/collect-fallback-refs.d.ts +5 -0
- package/dist/types/build/generate-manifest.d.ts +106 -0
- package/dist/types/build/generate-route-types.d.ts +8 -0
- package/dist/types/build/index.d.ts +21 -0
- package/dist/types/build/merge-full-manifests.d.ts +3 -0
- package/dist/types/build/prefix-tree-utils.d.ts +56 -0
- package/dist/types/build/route-trie.d.ts +20 -0
- package/dist/types/build/route-types/ast-helpers.d.ts +3 -0
- package/dist/types/build/route-types/ast-route-extraction.d.ts +13 -0
- package/dist/types/build/route-types/codegen.d.ts +16 -0
- package/dist/types/build/route-types/include-resolution.d.ts +74 -0
- package/dist/types/build/route-types/param-extraction.d.ts +13 -0
- package/dist/types/build/route-types/per-module-writer.d.ts +20 -0
- package/dist/types/build/route-types/router-processing.d.ts +81 -0
- package/dist/types/build/route-types/scan-filter.d.ts +17 -0
- package/dist/types/build/route-types/source-scan.d.ts +13 -0
- package/dist/types/build/runtime-discovery.d.ts +24 -0
- package/dist/types/cache/background-task.d.ts +21 -0
- package/dist/types/cache/cache-error.d.ts +71 -0
- package/dist/types/cache/cache-exec-scope.d.ts +31 -0
- package/dist/types/cache/cache-key-utils.d.ts +43 -0
- package/dist/types/cache/cache-policy.d.ts +59 -0
- package/dist/types/cache/cache-runtime.d.ts +51 -0
- package/dist/types/cache/cache-scope.d.ts +215 -0
- package/dist/types/cache/cache-tag.d.ts +79 -0
- package/dist/types/cache/cf/cf-base64.d.ts +4 -0
- package/dist/types/cache/cf/cf-cache-constants.d.ts +112 -0
- package/dist/types/cache/cf/cf-cache-store.d.ts +616 -0
- package/dist/types/cache/cf/cf-cache-types.d.ts +365 -0
- package/dist/types/cache/cf/cf-kv-utils.d.ts +43 -0
- package/dist/types/cache/cf/cf-tag-marker-memo.d.ts +15 -0
- package/dist/types/cache/cf/cf-zone-purge.d.ts +31 -0
- package/dist/types/cache/cf/index.d.ts +4 -0
- package/dist/types/cache/document-cache.d.ts +71 -0
- package/dist/types/cache/handle-capture.d.ts +23 -0
- package/dist/types/cache/handle-snapshot.d.ts +39 -0
- package/dist/types/cache/index.d.ts +9 -0
- package/dist/types/cache/memory-segment-store.d.ts +163 -0
- package/dist/types/cache/profile-registry.d.ts +40 -0
- package/dist/types/cache/read-through-swr.d.ts +61 -0
- package/dist/types/cache/search-params-filter.d.ts +64 -0
- package/dist/types/cache/segment-codec.d.ts +78 -0
- package/dist/types/cache/shell-snapshot.d.ts +186 -0
- package/dist/types/cache/tag-invalidation.d.ts +74 -0
- package/dist/types/cache/taint.d.ts +77 -0
- package/dist/types/cache/types.d.ts +503 -0
- package/dist/types/cache/vercel/index.d.ts +1 -0
- package/dist/types/cache/vercel/vercel-cache-store.d.ts +268 -0
- package/dist/types/client-urls/client-root.d.ts +38 -0
- package/dist/types/client-urls/client-urls.d.ts +5 -0
- package/dist/types/client-urls/navigation.d.ts +38 -0
- package/dist/types/client-urls/revalidation-protocol.d.ts +25 -0
- package/dist/types/client-urls/server-projection.d.ts +57 -0
- package/dist/types/client-urls/types.d.ts +132 -0
- package/dist/types/client.d.ts +191 -0
- package/dist/types/client.rsc.d.ts +41 -0
- package/dist/types/cloudflare/index.d.ts +7 -0
- package/dist/types/cloudflare/tracing.d.ts +57 -0
- package/dist/types/component-utils.d.ts +46 -0
- package/dist/types/components/DefaultDocument.d.ts +13 -0
- package/dist/types/context-var.d.ts +84 -0
- package/dist/types/debug.d.ts +57 -0
- package/dist/types/decode-loader-results.d.ts +42 -0
- package/dist/types/default-error-boundary.d.ts +10 -0
- package/dist/types/defer.d.ts +89 -0
- package/dist/types/deps/browser.d.ts +1 -0
- package/dist/types/deps/html-stream-client.d.ts +1 -0
- package/dist/types/deps/html-stream-server.d.ts +1 -0
- package/dist/types/deps/rsc.d.ts +1 -0
- package/dist/types/deps/ssr.d.ts +1 -0
- package/dist/types/dev-discovery-protocol.d.ts +5 -0
- package/dist/types/encode-kv.d.ts +35 -0
- package/dist/types/errors.d.ts +227 -0
- package/dist/types/escape-script.d.ts +44 -0
- package/dist/types/handle.d.ts +93 -0
- package/dist/types/handles/MetaTags.d.ts +17 -0
- package/dist/types/handles/Scripts.d.ts +38 -0
- package/dist/types/handles/breadcrumbs.d.ts +43 -0
- package/dist/types/handles/deferred-resolution.d.ts +53 -0
- package/dist/types/handles/is-thenable.d.ts +10 -0
- package/dist/types/handles/meta.d.ts +43 -0
- package/dist/types/handles/script.d.ts +139 -0
- package/dist/types/host/cookie-handler.d.ts +8 -0
- package/dist/types/host/errors.d.ts +40 -0
- package/dist/types/host/index.d.ts +33 -0
- package/dist/types/host/pattern-matcher.d.ts +30 -0
- package/dist/types/host/router.d.ts +12 -0
- package/dist/types/host/testing.d.ts +41 -0
- package/dist/types/host/types.d.ts +148 -0
- package/dist/types/host/utils.d.ts +20 -0
- package/dist/types/href-client.d.ts +214 -0
- package/dist/types/index.d.ts +113 -0
- package/dist/types/index.rsc.d.ts +52 -0
- package/dist/types/internal-debug.d.ts +1 -0
- package/dist/types/loader-redirect.d.ts +18 -0
- package/dist/types/loader-store.d.ts +193 -0
- package/dist/types/loader.d.ts +18 -0
- package/dist/types/loader.rsc.d.ts +18 -0
- package/dist/types/missing-id-error.d.ts +1 -0
- package/dist/types/outlet-context.d.ts +24 -0
- package/dist/types/outlet-provider.d.ts +14 -0
- package/dist/types/prerender/build-shell-capture.d.ts +104 -0
- package/dist/types/prerender/param-hash.d.ts +6 -0
- package/dist/types/prerender/shell-manifest-key.d.ts +18 -0
- package/dist/types/prerender/store.d.ts +63 -0
- package/dist/types/prerender.d.ts +292 -0
- package/dist/types/redirect-origin.d.ts +67 -0
- package/dist/types/regex-escape.d.ts +6 -0
- package/dist/types/render-error-thrower.d.ts +13 -0
- package/dist/types/response-utils.d.ts +35 -0
- package/dist/types/reverse.d.ts +206 -0
- package/dist/types/root-error-boundary.d.ts +32 -0
- package/dist/types/route-content-wrapper.d.ts +81 -0
- package/dist/types/route-definition/dsl-helpers.d.ts +130 -0
- package/dist/types/route-definition/helper-factories.d.ts +22 -0
- package/dist/types/route-definition/helpers-types.d.ts +393 -0
- package/dist/types/route-definition/index.d.ts +7 -0
- package/dist/types/route-definition/redirect.d.ts +48 -0
- package/dist/types/route-definition/resolve-handler-use.d.ts +19 -0
- package/dist/types/route-definition/use-item-types.d.ts +1 -0
- package/dist/types/route-definition.d.ts +1 -0
- package/dist/types/route-map-builder.d.ts +102 -0
- package/dist/types/route-name.d.ts +27 -0
- package/dist/types/route-types.d.ts +172 -0
- package/dist/types/router/basename.d.ts +10 -0
- package/dist/types/router/content-negotiation.d.ts +91 -0
- package/dist/types/router/debug-manifest.d.ts +7 -0
- package/dist/types/router/error-handling.d.ts +110 -0
- package/dist/types/router/find-match.d.ts +19 -0
- package/dist/types/router/handler-context.d.ts +41 -0
- package/dist/types/router/instrument.d.ts +191 -0
- package/dist/types/router/intercept-resolution.d.ts +91 -0
- package/dist/types/router/lazy-includes.d.ts +26 -0
- package/dist/types/router/loader-resolution.d.ts +85 -0
- package/dist/types/router/logging.d.ts +41 -0
- package/dist/types/router/manifest.d.ts +8 -0
- package/dist/types/router/match-api.d.ts +19 -0
- package/dist/types/router/match-context.d.ts +184 -0
- package/dist/types/router/match-handlers.d.ts +48 -0
- package/dist/types/router/match-middleware/background-revalidation.d.ts +113 -0
- package/dist/types/router/match-middleware/cache-lookup.d.ts +126 -0
- package/dist/types/router/match-middleware/cache-store.d.ts +112 -0
- package/dist/types/router/match-middleware/index.d.ts +80 -0
- package/dist/types/router/match-middleware/intercept-resolution.d.ts +116 -0
- package/dist/types/router/match-middleware/segment-resolution.d.ts +94 -0
- package/dist/types/router/match-pipelines.d.ts +103 -0
- package/dist/types/router/match-result.d.ts +114 -0
- package/dist/types/router/metrics.d.ts +6 -0
- package/dist/types/router/middleware-types.d.ts +74 -0
- package/dist/types/router/middleware.d.ts +116 -0
- package/dist/types/router/navigation-snapshot.d.ts +51 -0
- package/dist/types/router/params-util.d.ts +8 -0
- package/dist/types/router/parse-pattern.d.ts +38 -0
- package/dist/types/router/pattern-matching.d.ts +169 -0
- package/dist/types/router/prefetch-cache-ttl.d.ts +27 -0
- package/dist/types/router/prefetch-default.d.ts +28 -0
- package/dist/types/router/prefetch-limits.d.ts +20 -0
- package/dist/types/router/prerender-match.d.ts +53 -0
- package/dist/types/router/preview-match.d.ts +22 -0
- package/dist/types/router/request-classification.d.ts +104 -0
- package/dist/types/router/revalidation.d.ts +64 -0
- package/dist/types/router/route-snapshot.d.ts +112 -0
- package/dist/types/router/route-trie-builder.d.ts +77 -0
- package/dist/types/router/router-context.d.ts +137 -0
- package/dist/types/router/router-interfaces.d.ts +461 -0
- package/dist/types/router/router-options.d.ts +792 -0
- package/dist/types/router/router-registry.d.ts +15 -0
- package/dist/types/router/segment-resolution/fresh.d.ts +55 -0
- package/dist/types/router/segment-resolution/helpers.d.ts +93 -0
- package/dist/types/router/segment-resolution/loader-cache.d.ts +33 -0
- package/dist/types/router/segment-resolution/loader-mask.d.ts +44 -0
- package/dist/types/router/segment-resolution/loader-snapshot.d.ts +90 -0
- package/dist/types/router/segment-resolution/mask-nested.d.ts +53 -0
- package/dist/types/router/segment-resolution/revalidation.d.ts +85 -0
- package/dist/types/router/segment-resolution/static-store.d.ts +17 -0
- package/dist/types/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
- package/dist/types/router/segment-resolution/view-transition-default.d.ts +27 -0
- package/dist/types/router/segment-resolution.d.ts +3 -0
- package/dist/types/router/segment-wrappers.d.ts +53 -0
- package/dist/types/router/state-cookie-name.d.ts +1 -0
- package/dist/types/router/substitute-pattern-params.d.ts +23 -0
- package/dist/types/router/telemetry-otel.d.ts +113 -0
- package/dist/types/router/telemetry.d.ts +216 -0
- package/dist/types/router/timeout.d.ts +107 -0
- package/dist/types/router/tracing.d.ts +139 -0
- package/dist/types/router/transition-when.d.ts +13 -0
- package/dist/types/router/trie-matching.d.ts +32 -0
- package/dist/types/router/types.d.ts +98 -0
- package/dist/types/router/url-params.d.ts +26 -0
- package/dist/types/router.d.ts +7 -0
- package/dist/types/rsc/capture-queue.d.ts +49 -0
- package/dist/types/rsc/full-payload.d.ts +22 -0
- package/dist/types/rsc/handler-context.d.ts +32 -0
- package/dist/types/rsc/handler.d.ts +9 -0
- package/dist/types/rsc/helpers.d.ts +127 -0
- package/dist/types/rsc/index.d.ts +17 -0
- package/dist/types/rsc/json-route-result.d.ts +20 -0
- package/dist/types/rsc/loader-fetch.d.ts +14 -0
- package/dist/types/rsc/manifest-init.d.ts +18 -0
- package/dist/types/rsc/nonce.d.ts +28 -0
- package/dist/types/rsc/origin-guard.d.ts +50 -0
- package/dist/types/rsc/progressive-enhancement.d.ts +19 -0
- package/dist/types/rsc/redirect-guard.d.ts +37 -0
- package/dist/types/rsc/render-pipeline.d.ts +148 -0
- package/dist/types/rsc/response-cache-serve.d.ts +46 -0
- package/dist/types/rsc/response-error.d.ts +19 -0
- package/dist/types/rsc/response-route-handler.d.ts +29 -0
- package/dist/types/rsc/routine-plan.d.ts +124 -0
- package/dist/types/rsc/rsc-rendering.d.ts +18 -0
- package/dist/types/rsc/runtime-warnings.d.ts +22 -0
- package/dist/types/rsc/server-action.d.ts +68 -0
- package/dist/types/rsc/shell-build-manifest.d.ts +90 -0
- package/dist/types/rsc/shell-capture-constants.d.ts +44 -0
- package/dist/types/rsc/shell-capture.d.ts +406 -0
- package/dist/types/rsc/shell-serve.d.ts +189 -0
- package/dist/types/rsc/ssr-setup.d.ts +73 -0
- package/dist/types/rsc/stream-idle.d.ts +60 -0
- package/dist/types/rsc/transition-gate.d.ts +23 -0
- package/dist/types/rsc/types.d.ts +328 -0
- package/dist/types/runtime-env.d.ts +1 -0
- package/dist/types/search-params.d.ts +125 -0
- package/dist/types/segment-content-promise.d.ts +13 -0
- package/dist/types/segment-fragments.d.ts +79 -0
- package/dist/types/segment-loader-promise.d.ts +22 -0
- package/dist/types/segment-system.d.ts +86 -0
- package/dist/types/serialize.d.ts +164 -0
- package/dist/types/server/context.d.ts +510 -0
- package/dist/types/server/cookie-parse.d.ts +10 -0
- package/dist/types/server/cookie-store.d.ts +107 -0
- package/dist/types/server/fetchable-loader-store.d.ts +20 -0
- package/dist/types/server/handle-store.d.ts +131 -0
- package/dist/types/server/loader-registry.d.ts +32 -0
- package/dist/types/server/request-context.d.ts +707 -0
- package/dist/types/server/root-layout.d.ts +3 -0
- package/dist/types/server.d.ts +16 -0
- package/dist/types/ssr/index.d.ts +233 -0
- package/dist/types/ssr/inject-rsc-eager.d.ts +3 -0
- package/dist/types/ssr/preinit-client-references.d.ts +71 -0
- package/dist/types/ssr/ssr-root.d.ts +69 -0
- package/dist/types/static-handler.d.ts +71 -0
- package/dist/types/testing/cache-status.d.ts +63 -0
- package/dist/types/testing/collect-handle.d.ts +20 -0
- package/dist/types/testing/dispatch.d.ts +127 -0
- package/dist/types/testing/dom.entry.d.ts +15 -0
- package/dist/types/testing/e2e/fixture.d.ts +37 -0
- package/dist/types/testing/e2e/index.d.ts +31 -0
- package/dist/types/testing/e2e/matchers.d.ts +17 -0
- package/dist/types/testing/e2e/page-helpers.d.ts +86 -0
- package/dist/types/testing/e2e/parity.d.ts +111 -0
- package/dist/types/testing/e2e/server.d.ts +35 -0
- package/dist/types/testing/flight-matchers.d.ts +55 -0
- package/dist/types/testing/flight-normalize.d.ts +1 -0
- package/dist/types/testing/flight-tree.d.ts +192 -0
- package/dist/types/testing/flight.d.ts +115 -0
- package/dist/types/testing/flight.entry.d.ts +27 -0
- package/dist/types/testing/generated-routes.d.ts +66 -0
- package/dist/types/testing/index.d.ts +54 -0
- package/dist/types/testing/internal/context.d.ts +225 -0
- package/dist/types/testing/internal/flight-client-globals.d.ts +1 -0
- package/dist/types/testing/internal/seed-vars.d.ts +30 -0
- package/dist/types/testing/render-handler.d.ts +160 -0
- package/dist/types/testing/render-route.d.ts +265 -0
- package/dist/types/testing/run-loader.d.ts +195 -0
- package/dist/types/testing/run-middleware.d.ts +132 -0
- package/dist/types/testing/run-transition-when.d.ts +78 -0
- package/dist/types/testing/shell-status.d.ts +81 -0
- package/dist/types/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
- package/dist/types/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
- package/dist/types/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
- package/dist/types/testing/vitest-stubs/version.d.ts +1 -0
- package/dist/types/testing/vitest.d.ts +205 -0
- package/dist/types/theme/ThemeProvider.d.ts +13 -0
- package/dist/types/theme/ThemeScript.d.ts +45 -0
- package/dist/types/theme/constants.d.ts +39 -0
- package/dist/types/theme/index.d.ts +29 -0
- package/dist/types/theme/theme-context.d.ts +21 -0
- package/dist/types/theme/theme-script.d.ts +26 -0
- package/dist/types/theme/types.d.ts +162 -0
- package/dist/types/theme/use-theme.d.ts +8 -0
- package/dist/types/types/boundaries.d.ts +110 -0
- package/dist/types/types/cache-types.d.ts +191 -0
- package/dist/types/types/error-types.d.ts +114 -0
- package/dist/types/types/global-namespace.d.ts +90 -0
- package/dist/types/types/handler-context.d.ts +658 -0
- package/dist/types/types/index.d.ts +11 -0
- package/dist/types/types/loader-types.d.ts +208 -0
- package/dist/types/types/request-scope.d.ts +93 -0
- package/dist/types/types/route-config.d.ts +105 -0
- package/dist/types/types/route-entry.d.ts +98 -0
- package/dist/types/types/segments.d.ts +246 -0
- package/dist/types/types.d.ts +1 -0
- package/dist/types/urls/include-helper.d.ts +17 -0
- package/dist/types/urls/include-provider.d.ts +27 -0
- package/dist/types/urls/index.d.ts +6 -0
- package/dist/types/urls/path-helper-types.d.ts +198 -0
- package/dist/types/urls/path-helper.d.ts +12 -0
- package/dist/types/urls/pattern-types.d.ts +166 -0
- package/dist/types/urls/response-types.d.ts +67 -0
- package/dist/types/urls/type-extraction.d.ts +157 -0
- package/dist/types/urls/urls-function.d.ts +24 -0
- package/dist/types/urls.d.ts +1 -0
- package/dist/types/use-loader.d.ts +150 -0
- package/dist/types/vercel/index.d.ts +10 -0
- package/dist/types/vercel/tracing.d.ts +71 -0
- package/dist/types/vite/debug.d.ts +80 -0
- package/dist/types/vite/discovery/bundle-postprocess.d.ts +12 -0
- package/dist/types/vite/discovery/client-urls-projection.d.ts +53 -0
- package/dist/types/vite/discovery/dev-prerender-cache.d.ts +65 -0
- package/dist/types/vite/discovery/discover-routers.d.ts +17 -0
- package/dist/types/vite/discovery/discovery-errors.d.ts +113 -0
- package/dist/types/vite/discovery/gate-state.d.ts +79 -0
- package/dist/types/vite/discovery/prerender-collection.d.ts +24 -0
- package/dist/types/vite/discovery/route-types-writer.d.ts +32 -0
- package/dist/types/vite/discovery/self-gen-tracking.d.ts +22 -0
- package/dist/types/vite/discovery/shell-prerender-phase.d.ts +40 -0
- package/dist/types/vite/discovery/state.d.ts +170 -0
- package/dist/types/vite/discovery/virtual-module-codegen.d.ts +15 -0
- package/dist/types/vite/encryption-key.d.ts +2 -0
- package/dist/types/vite/index.d.ts +11 -0
- package/dist/types/vite/inject-client-debug.d.ts +56 -0
- package/dist/types/vite/plugin-types.d.ts +298 -0
- package/dist/types/vite/plugins/cjs-to-esm.d.ts +6 -0
- package/dist/types/vite/plugins/client-ref-dedup.d.ts +40 -0
- package/dist/types/vite/plugins/client-ref-hashing.d.ts +35 -0
- package/dist/types/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
- package/dist/types/vite/plugins/expose-action-id.d.ts +18 -0
- package/dist/types/vite/plugins/expose-id-utils.d.ts +37 -0
- package/dist/types/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
- package/dist/types/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
- package/dist/types/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
- package/dist/types/vite/plugins/expose-ids/router-transform.d.ts +13 -0
- package/dist/types/vite/plugins/expose-ids/types.d.ts +29 -0
- package/dist/types/vite/plugins/expose-internal-ids.d.ts +16 -0
- package/dist/types/vite/plugins/performance-tracks.d.ts +25 -0
- package/dist/types/vite/plugins/refresh-cmd.d.ts +20 -0
- package/dist/types/vite/plugins/server-ref-hashing.d.ts +24 -0
- package/dist/types/vite/plugins/server-reference-pattern.d.ts +1 -0
- package/dist/types/vite/plugins/use-cache-transform.d.ts +20 -0
- package/dist/types/vite/plugins/vercel-output.d.ts +85 -0
- package/dist/types/vite/plugins/version-injector.d.ts +21 -0
- package/dist/types/vite/plugins/version-plugin.d.ts +19 -0
- package/dist/types/vite/plugins/virtual-entries.d.ts +36 -0
- package/dist/types/vite/plugins/virtual-stub-plugin.d.ts +7 -0
- package/dist/types/vite/rango.d.ts +29 -0
- package/dist/types/vite/router-discovery.d.ts +23 -0
- package/dist/types/vite/utils/ast-handler-extract.d.ts +64 -0
- package/dist/types/vite/utils/banner.d.ts +2 -0
- package/dist/types/vite/utils/bundle-analysis.d.ts +28 -0
- package/dist/types/vite/utils/client-chunks.d.ts +55 -0
- package/dist/types/vite/utils/directive-prologue.d.ts +16 -0
- package/dist/types/vite/utils/forward-user-plugins.d.ts +37 -0
- package/dist/types/vite/utils/manifest-utils.d.ts +7 -0
- package/dist/types/vite/utils/package-resolution.d.ts +6 -0
- package/dist/types/vite/utils/prerender-utils.d.ts +32 -0
- package/dist/types/vite/utils/shared-utils.d.ts +67 -0
- package/dist/types.backup/__internal.d.ts +127 -0
- package/dist/types.backup/bin/rango.d.ts +1 -0
- package/dist/types.backup/browser/action-coordinator.d.ts +57 -0
- package/dist/types.backup/browser/action-fence.d.ts +33 -0
- package/dist/types.backup/browser/app-shell.d.ts +34 -0
- package/dist/types.backup/browser/app-version.d.ts +6 -0
- package/dist/types.backup/browser/connection-warmup.d.ts +31 -0
- package/dist/types.backup/browser/cookie-name.d.ts +66 -0
- package/dist/types.backup/browser/event-controller.d.ts +221 -0
- package/dist/types.backup/browser/history-state.d.ts +26 -0
- package/dist/types.backup/browser/index.d.ts +1 -0
- package/dist/types.backup/browser/intercept-utils.d.ts +30 -0
- package/dist/types.backup/browser/invalidate-client-cache.d.ts +17 -0
- package/dist/types.backup/browser/link-interceptor.d.ts +43 -0
- package/dist/types.backup/browser/logging.d.ts +33 -0
- package/dist/types.backup/browser/merge-segment-loaders.d.ts +38 -0
- package/dist/types.backup/browser/navigation-bridge.d.ts +27 -0
- package/dist/types.backup/browser/navigation-client.d.ts +17 -0
- package/dist/types.backup/browser/navigation-store-handle.d.ts +25 -0
- package/dist/types.backup/browser/navigation-store.d.ts +95 -0
- package/dist/types.backup/browser/navigation-transaction.d.ts +75 -0
- package/dist/types.backup/browser/network-error-handler.d.ts +35 -0
- package/dist/types.backup/browser/partial-update.d.ts +61 -0
- package/dist/types.backup/browser/prefetch/cache.d.ts +183 -0
- package/dist/types.backup/browser/prefetch/fetch.d.ts +52 -0
- package/dist/types.backup/browser/prefetch/observer.d.ts +27 -0
- package/dist/types.backup/browser/prefetch/policy.d.ts +13 -0
- package/dist/types.backup/browser/prefetch/queue.d.ts +48 -0
- package/dist/types.backup/browser/prefetch/resource-ready.d.ts +28 -0
- package/dist/types.backup/browser/rango-state.d.ts +52 -0
- package/dist/types.backup/browser/react/Link.d.ts +140 -0
- package/dist/types.backup/browser/react/NavigationProvider.d.ts +88 -0
- package/dist/types.backup/browser/react/ScrollRestoration.d.ts +78 -0
- package/dist/types.backup/browser/react/context.d.ts +54 -0
- package/dist/types.backup/browser/react/filter-segment-order.d.ts +35 -0
- package/dist/types.backup/browser/react/index.d.ts +1 -0
- package/dist/types.backup/browser/react/location-state-shared.d.ts +162 -0
- package/dist/types.backup/browser/react/location-state.d.ts +29 -0
- package/dist/types.backup/browser/react/mount-context.d.ts +23 -0
- package/dist/types.backup/browser/react/nonce-context.d.ts +14 -0
- package/dist/types.backup/browser/react/shallow-equal.d.ts +5 -0
- package/dist/types.backup/browser/react/use-action.d.ts +61 -0
- package/dist/types.backup/browser/react/use-handle.d.ts +21 -0
- package/dist/types.backup/browser/react/use-href.d.ts +32 -0
- package/dist/types.backup/browser/react/use-link-status.d.ts +36 -0
- package/dist/types.backup/browser/react/use-mount.d.ts +24 -0
- package/dist/types.backup/browser/react/use-navigation.d.ts +15 -0
- package/dist/types.backup/browser/react/use-params.d.ts +21 -0
- package/dist/types.backup/browser/react/use-pathname.d.ts +13 -0
- package/dist/types.backup/browser/react/use-reverse.d.ts +40 -0
- package/dist/types.backup/browser/react/use-router.d.ts +23 -0
- package/dist/types.backup/browser/react/use-search-params.d.ts +19 -0
- package/dist/types.backup/browser/react/use-segments.d.ts +29 -0
- package/dist/types.backup/browser/response-adapter.d.ts +58 -0
- package/dist/types.backup/browser/rsc-router.d.ts +141 -0
- package/dist/types.backup/browser/scroll-restoration.d.ts +103 -0
- package/dist/types.backup/browser/segment-reconciler.d.ts +74 -0
- package/dist/types.backup/browser/segment-structure-assert.d.ts +16 -0
- package/dist/types.backup/browser/server-action-bridge.d.ts +29 -0
- package/dist/types.backup/browser/types.d.ts +530 -0
- package/dist/types.backup/browser/validate-redirect-origin.d.ts +28 -0
- package/dist/types.backup/build/collect-fallback-refs.d.ts +5 -0
- package/dist/types.backup/build/generate-manifest.d.ts +100 -0
- package/dist/types.backup/build/generate-route-types.d.ts +8 -0
- package/dist/types.backup/build/index.d.ts +21 -0
- package/dist/types.backup/build/prefix-tree-utils.d.ts +56 -0
- package/dist/types.backup/build/route-trie.d.ts +89 -0
- package/dist/types.backup/build/route-types/ast-helpers.d.ts +3 -0
- package/dist/types.backup/build/route-types/ast-route-extraction.d.ts +13 -0
- package/dist/types.backup/build/route-types/codegen.d.ts +16 -0
- package/dist/types.backup/build/route-types/include-resolution.d.ts +74 -0
- package/dist/types.backup/build/route-types/param-extraction.d.ts +13 -0
- package/dist/types.backup/build/route-types/per-module-writer.d.ts +18 -0
- package/dist/types.backup/build/route-types/router-processing.d.ts +82 -0
- package/dist/types.backup/build/route-types/scan-filter.d.ts +17 -0
- package/dist/types.backup/build/route-types/source-scan.d.ts +13 -0
- package/dist/types.backup/build/runtime-discovery.d.ts +24 -0
- package/dist/types.backup/cache/background-task.d.ts +21 -0
- package/dist/types.backup/cache/cache-error.d.ts +71 -0
- package/dist/types.backup/cache/cache-key-utils.d.ts +35 -0
- package/dist/types.backup/cache/cache-policy.d.ts +59 -0
- package/dist/types.backup/cache/cache-runtime.d.ts +51 -0
- package/dist/types.backup/cache/cache-scope.d.ts +134 -0
- package/dist/types.backup/cache/cache-tag.d.ts +79 -0
- package/dist/types.backup/cache/cf/cf-base64.d.ts +4 -0
- package/dist/types.backup/cache/cf/cf-cache-constants.d.ts +105 -0
- package/dist/types.backup/cache/cf/cf-cache-store.d.ts +481 -0
- package/dist/types.backup/cache/cf/cf-cache-types.d.ts +300 -0
- package/dist/types.backup/cache/cf/cf-kv-utils.d.ts +22 -0
- package/dist/types.backup/cache/cf/cf-tag-marker-memo.d.ts +15 -0
- package/dist/types.backup/cache/cf/index.d.ts +3 -0
- package/dist/types.backup/cache/document-cache.d.ts +69 -0
- package/dist/types.backup/cache/handle-capture.d.ts +23 -0
- package/dist/types.backup/cache/handle-snapshot.d.ts +39 -0
- package/dist/types.backup/cache/index.d.ts +7 -0
- package/dist/types.backup/cache/memory-segment-store.d.ts +163 -0
- package/dist/types.backup/cache/profile-registry.d.ts +40 -0
- package/dist/types.backup/cache/read-through-swr.d.ts +60 -0
- package/dist/types.backup/cache/segment-codec.d.ts +78 -0
- package/dist/types.backup/cache/shell-snapshot.d.ts +162 -0
- package/dist/types.backup/cache/tag-invalidation.d.ts +74 -0
- package/dist/types.backup/cache/taint.d.ts +71 -0
- package/dist/types.backup/cache/types.d.ts +407 -0
- package/dist/types.backup/cache/vercel/index.d.ts +1 -0
- package/dist/types.backup/cache/vercel/vercel-cache-store.d.ts +267 -0
- package/dist/types.backup/client.d.ts +184 -0
- package/dist/types.backup/client.rsc.d.ts +39 -0
- package/dist/types.backup/cloudflare/index.d.ts +7 -0
- package/dist/types.backup/cloudflare/tracing.d.ts +53 -0
- package/dist/types.backup/component-utils.d.ts +46 -0
- package/dist/types.backup/components/DefaultDocument.d.ts +13 -0
- package/dist/types.backup/context-var.d.ts +84 -0
- package/dist/types.backup/debug.d.ts +57 -0
- package/dist/types.backup/decode-loader-results.d.ts +5 -0
- package/dist/types.backup/default-error-boundary.d.ts +10 -0
- package/dist/types.backup/defer.d.ts +89 -0
- package/dist/types.backup/deps/browser.d.ts +1 -0
- package/dist/types.backup/deps/html-stream-client.d.ts +1 -0
- package/dist/types.backup/deps/html-stream-server.d.ts +1 -0
- package/dist/types.backup/deps/rsc.d.ts +1 -0
- package/dist/types.backup/deps/ssr.d.ts +1 -0
- package/dist/types.backup/encode-kv.d.ts +35 -0
- package/dist/types.backup/errors.d.ts +226 -0
- package/dist/types.backup/escape-script.d.ts +44 -0
- package/dist/types.backup/handle.d.ts +93 -0
- package/dist/types.backup/handles/MetaTags.d.ts +17 -0
- package/dist/types.backup/handles/Scripts.d.ts +38 -0
- package/dist/types.backup/handles/breadcrumbs.d.ts +43 -0
- package/dist/types.backup/handles/deferred-resolution.d.ts +53 -0
- package/dist/types.backup/handles/is-thenable.d.ts +12 -0
- package/dist/types.backup/handles/meta.d.ts +43 -0
- package/dist/types.backup/handles/script.d.ts +139 -0
- package/dist/types.backup/host/cookie-handler.d.ts +8 -0
- package/dist/types.backup/host/errors.d.ts +40 -0
- package/dist/types.backup/host/index.d.ts +33 -0
- package/dist/types.backup/host/pattern-matcher.d.ts +30 -0
- package/dist/types.backup/host/router.d.ts +12 -0
- package/dist/types.backup/host/testing.d.ts +41 -0
- package/dist/types.backup/host/types.d.ts +148 -0
- package/dist/types.backup/host/utils.d.ts +20 -0
- package/dist/types.backup/href-client.d.ts +214 -0
- package/dist/types.backup/index.d.ts +112 -0
- package/dist/types.backup/index.rsc.d.ts +51 -0
- package/dist/types.backup/internal-debug.d.ts +1 -0
- package/dist/types.backup/loader-store.d.ts +193 -0
- package/dist/types.backup/loader.d.ts +18 -0
- package/dist/types.backup/loader.rsc.d.ts +18 -0
- package/dist/types.backup/missing-id-error.d.ts +1 -0
- package/dist/types.backup/outlet-context.d.ts +12 -0
- package/dist/types.backup/outlet-provider.d.ts +12 -0
- package/dist/types.backup/prerender/build-shell-capture.d.ts +104 -0
- package/dist/types.backup/prerender/param-hash.d.ts +6 -0
- package/dist/types.backup/prerender/shell-manifest-key.d.ts +18 -0
- package/dist/types.backup/prerender/store.d.ts +62 -0
- package/dist/types.backup/prerender.d.ts +292 -0
- package/dist/types.backup/redirect-origin.d.ts +55 -0
- package/dist/types.backup/regex-escape.d.ts +6 -0
- package/dist/types.backup/render-error-thrower.d.ts +13 -0
- package/dist/types.backup/response-utils.d.ts +35 -0
- package/dist/types.backup/reverse.d.ts +206 -0
- package/dist/types.backup/root-error-boundary.d.ts +32 -0
- package/dist/types.backup/route-content-wrapper.d.ts +40 -0
- package/dist/types.backup/route-definition/dsl-helpers.d.ts +130 -0
- package/dist/types.backup/route-definition/helper-factories.d.ts +22 -0
- package/dist/types.backup/route-definition/helpers-types.d.ts +392 -0
- package/dist/types.backup/route-definition/index.d.ts +7 -0
- package/dist/types.backup/route-definition/redirect.d.ts +48 -0
- package/dist/types.backup/route-definition/resolve-handler-use.d.ts +19 -0
- package/dist/types.backup/route-definition/use-item-types.d.ts +1 -0
- package/dist/types.backup/route-definition.d.ts +1 -0
- package/dist/types.backup/route-map-builder.d.ts +127 -0
- package/dist/types.backup/route-name.d.ts +27 -0
- package/dist/types.backup/route-types.d.ts +172 -0
- package/dist/types.backup/router/basename.d.ts +10 -0
- package/dist/types.backup/router/content-negotiation.d.ts +91 -0
- package/dist/types.backup/router/debug-manifest.d.ts +7 -0
- package/dist/types.backup/router/error-handling.d.ts +76 -0
- package/dist/types.backup/router/find-match.d.ts +19 -0
- package/dist/types.backup/router/handler-context.d.ts +41 -0
- package/dist/types.backup/router/instrument.d.ts +161 -0
- package/dist/types.backup/router/intercept-resolution.d.ts +79 -0
- package/dist/types.backup/router/lazy-includes.d.ts +26 -0
- package/dist/types.backup/router/loader-resolution.d.ts +63 -0
- package/dist/types.backup/router/logging.d.ts +41 -0
- package/dist/types.backup/router/manifest.d.ts +8 -0
- package/dist/types.backup/router/match-api.d.ts +19 -0
- package/dist/types.backup/router/match-context.d.ts +184 -0
- package/dist/types.backup/router/match-handlers.d.ts +49 -0
- package/dist/types.backup/router/match-middleware/background-revalidation.d.ts +113 -0
- package/dist/types.backup/router/match-middleware/cache-lookup.d.ts +113 -0
- package/dist/types.backup/router/match-middleware/cache-store.d.ts +112 -0
- package/dist/types.backup/router/match-middleware/index.d.ts +80 -0
- package/dist/types.backup/router/match-middleware/intercept-resolution.d.ts +116 -0
- package/dist/types.backup/router/match-middleware/segment-resolution.d.ts +94 -0
- package/dist/types.backup/router/match-pipelines.d.ts +103 -0
- package/dist/types.backup/router/match-result.d.ts +114 -0
- package/dist/types.backup/router/metrics.d.ts +6 -0
- package/dist/types.backup/router/middleware-types.d.ts +74 -0
- package/dist/types.backup/router/middleware.d.ts +116 -0
- package/dist/types.backup/router/navigation-snapshot.d.ts +22 -0
- package/dist/types.backup/router/params-util.d.ts +8 -0
- package/dist/types.backup/router/parse-pattern.d.ts +38 -0
- package/dist/types.backup/router/pattern-matching.d.ts +169 -0
- package/dist/types.backup/router/prefetch-cache-ttl.d.ts +27 -0
- package/dist/types.backup/router/prefetch-limits.d.ts +20 -0
- package/dist/types.backup/router/prerender-match.d.ts +50 -0
- package/dist/types.backup/router/preview-match.d.ts +22 -0
- package/dist/types.backup/router/request-classification.d.ts +104 -0
- package/dist/types.backup/router/revalidation.d.ts +57 -0
- package/dist/types.backup/router/route-snapshot.d.ts +112 -0
- package/dist/types.backup/router/router-context.d.ts +137 -0
- package/dist/types.backup/router/router-interfaces.d.ts +432 -0
- package/dist/types.backup/router/router-options.d.ts +738 -0
- package/dist/types.backup/router/router-registry.d.ts +15 -0
- package/dist/types.backup/router/segment-resolution/fresh.d.ts +55 -0
- package/dist/types.backup/router/segment-resolution/helpers.d.ts +93 -0
- package/dist/types.backup/router/segment-resolution/loader-cache.d.ts +33 -0
- package/dist/types.backup/router/segment-resolution/loader-mask.d.ts +44 -0
- package/dist/types.backup/router/segment-resolution/loader-snapshot.d.ts +90 -0
- package/dist/types.backup/router/segment-resolution/mask-nested.d.ts +53 -0
- package/dist/types.backup/router/segment-resolution/revalidation.d.ts +85 -0
- package/dist/types.backup/router/segment-resolution/static-store.d.ts +17 -0
- package/dist/types.backup/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
- package/dist/types.backup/router/segment-resolution/view-transition-default.d.ts +28 -0
- package/dist/types.backup/router/segment-resolution.d.ts +3 -0
- package/dist/types.backup/router/segment-wrappers.d.ts +53 -0
- package/dist/types.backup/router/state-cookie-name.d.ts +1 -0
- package/dist/types.backup/router/substitute-pattern-params.d.ts +23 -0
- package/dist/types.backup/router/telemetry-otel.d.ts +113 -0
- package/dist/types.backup/router/telemetry.d.ts +215 -0
- package/dist/types.backup/router/timeout.d.ts +68 -0
- package/dist/types.backup/router/tracing.d.ts +125 -0
- package/dist/types.backup/router/trie-matching.d.ts +32 -0
- package/dist/types.backup/router/types.d.ts +98 -0
- package/dist/types.backup/router/url-params.d.ts +26 -0
- package/dist/types.backup/router.d.ts +7 -0
- package/dist/types.backup/rsc/capture-queue.d.ts +6 -0
- package/dist/types.backup/rsc/full-payload.d.ts +22 -0
- package/dist/types.backup/rsc/handler-context.d.ts +31 -0
- package/dist/types.backup/rsc/handler.d.ts +9 -0
- package/dist/types.backup/rsc/helpers.d.ts +213 -0
- package/dist/types.backup/rsc/index.d.ts +17 -0
- package/dist/types.backup/rsc/json-route-result.d.ts +20 -0
- package/dist/types.backup/rsc/loader-fetch.d.ts +14 -0
- package/dist/types.backup/rsc/manifest-init.d.ts +18 -0
- package/dist/types.backup/rsc/nonce.d.ts +28 -0
- package/dist/types.backup/rsc/origin-guard.d.ts +50 -0
- package/dist/types.backup/rsc/progressive-enhancement.d.ts +19 -0
- package/dist/types.backup/rsc/redirect-guard.d.ts +35 -0
- package/dist/types.backup/rsc/response-cache-serve.d.ts +46 -0
- package/dist/types.backup/rsc/response-error.d.ts +19 -0
- package/dist/types.backup/rsc/response-route-handler.d.ts +29 -0
- package/dist/types.backup/rsc/rsc-rendering.d.ts +23 -0
- package/dist/types.backup/rsc/runtime-warnings.d.ts +22 -0
- package/dist/types.backup/rsc/server-action.d.ts +68 -0
- package/dist/types.backup/rsc/shell-build-manifest.d.ts +84 -0
- package/dist/types.backup/rsc/shell-capture-constants.d.ts +27 -0
- package/dist/types.backup/rsc/shell-capture.d.ts +374 -0
- package/dist/types.backup/rsc/shell-serve.d.ts +136 -0
- package/dist/types.backup/rsc/ssr-setup.d.ts +48 -0
- package/dist/types.backup/rsc/transition-gate.d.ts +27 -0
- package/dist/types.backup/rsc/types.d.ts +290 -0
- package/dist/types.backup/runtime-env.d.ts +1 -0
- package/dist/types.backup/search-params.d.ts +125 -0
- package/dist/types.backup/segment-content-promise.d.ts +13 -0
- package/dist/types.backup/segment-fragments.d.ts +56 -0
- package/dist/types.backup/segment-loader-promise.d.ts +22 -0
- package/dist/types.backup/segment-system.d.ts +84 -0
- package/dist/types.backup/serialize.d.ts +164 -0
- package/dist/types.backup/server/context.d.ts +494 -0
- package/dist/types.backup/server/cookie-parse.d.ts +10 -0
- package/dist/types.backup/server/cookie-store.d.ts +107 -0
- package/dist/types.backup/server/fetchable-loader-store.d.ts +20 -0
- package/dist/types.backup/server/handle-store.d.ts +100 -0
- package/dist/types.backup/server/loader-registry.d.ts +32 -0
- package/dist/types.backup/server/request-context.d.ts +596 -0
- package/dist/types.backup/server/root-layout.d.ts +3 -0
- package/dist/types.backup/server.d.ts +15 -0
- package/dist/types.backup/ssr/index.d.ts +233 -0
- package/dist/types.backup/ssr/inject-rsc-eager.d.ts +3 -0
- package/dist/types.backup/ssr/preinit-client-references.d.ts +71 -0
- package/dist/types.backup/ssr/ssr-root.d.ts +69 -0
- package/dist/types.backup/static-handler.d.ts +57 -0
- package/dist/types.backup/testing/cache-status.d.ts +63 -0
- package/dist/types.backup/testing/collect-handle.d.ts +20 -0
- package/dist/types.backup/testing/dispatch.d.ts +123 -0
- package/dist/types.backup/testing/dom.entry.d.ts +15 -0
- package/dist/types.backup/testing/e2e/fixture.d.ts +37 -0
- package/dist/types.backup/testing/e2e/index.d.ts +30 -0
- package/dist/types.backup/testing/e2e/matchers.d.ts +17 -0
- package/dist/types.backup/testing/e2e/page-helpers.d.ts +62 -0
- package/dist/types.backup/testing/e2e/parity.d.ts +111 -0
- package/dist/types.backup/testing/e2e/server.d.ts +35 -0
- package/dist/types.backup/testing/flight-matchers.d.ts +55 -0
- package/dist/types.backup/testing/flight-normalize.d.ts +1 -0
- package/dist/types.backup/testing/flight-tree.d.ts +192 -0
- package/dist/types.backup/testing/flight.d.ts +115 -0
- package/dist/types.backup/testing/flight.entry.d.ts +27 -0
- package/dist/types.backup/testing/generated-routes.d.ts +66 -0
- package/dist/types.backup/testing/index.d.ts +52 -0
- package/dist/types.backup/testing/internal/context.d.ts +225 -0
- package/dist/types.backup/testing/internal/flight-client-globals.d.ts +1 -0
- package/dist/types.backup/testing/internal/seed-vars.d.ts +30 -0
- package/dist/types.backup/testing/render-handler.d.ts +160 -0
- package/dist/types.backup/testing/render-route.d.ts +246 -0
- package/dist/types.backup/testing/run-loader.d.ts +186 -0
- package/dist/types.backup/testing/run-middleware.d.ts +132 -0
- package/dist/types.backup/testing/run-transition-when.d.ts +77 -0
- package/dist/types.backup/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
- package/dist/types.backup/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
- package/dist/types.backup/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
- package/dist/types.backup/testing/vitest-stubs/version.d.ts +1 -0
- package/dist/types.backup/testing/vitest.d.ts +205 -0
- package/dist/types.backup/theme/ThemeProvider.d.ts +13 -0
- package/dist/types.backup/theme/ThemeScript.d.ts +45 -0
- package/dist/types.backup/theme/constants.d.ts +39 -0
- package/dist/types.backup/theme/index.d.ts +29 -0
- package/dist/types.backup/theme/theme-context.d.ts +21 -0
- package/dist/types.backup/theme/theme-script.d.ts +26 -0
- package/dist/types.backup/theme/types.d.ts +162 -0
- package/dist/types.backup/theme/use-theme.d.ts +8 -0
- package/dist/types.backup/types/boundaries.d.ts +93 -0
- package/dist/types.backup/types/cache-types.d.ts +191 -0
- package/dist/types.backup/types/error-types.d.ts +114 -0
- package/dist/types.backup/types/global-namespace.d.ts +90 -0
- package/dist/types.backup/types/handler-context.d.ts +658 -0
- package/dist/types.backup/types/index.d.ts +11 -0
- package/dist/types.backup/types/loader-types.d.ts +182 -0
- package/dist/types.backup/types/request-scope.d.ts +93 -0
- package/dist/types.backup/types/route-config.d.ts +105 -0
- package/dist/types.backup/types/route-entry.d.ts +95 -0
- package/dist/types.backup/types/segments.d.ts +234 -0
- package/dist/types.backup/types.d.ts +1 -0
- package/dist/types.backup/urls/include-helper.d.ts +17 -0
- package/dist/types.backup/urls/include-provider.d.ts +27 -0
- package/dist/types.backup/urls/index.d.ts +6 -0
- package/dist/types.backup/urls/path-helper-types.d.ts +197 -0
- package/dist/types.backup/urls/path-helper.d.ts +12 -0
- package/dist/types.backup/urls/pattern-types.d.ts +166 -0
- package/dist/types.backup/urls/response-types.d.ts +67 -0
- package/dist/types.backup/urls/type-extraction.d.ts +157 -0
- package/dist/types.backup/urls/urls-function.d.ts +24 -0
- package/dist/types.backup/urls.d.ts +1 -0
- package/dist/types.backup/use-loader.d.ts +150 -0
- package/dist/types.backup/vercel/index.d.ts +10 -0
- package/dist/types.backup/vercel/tracing.d.ts +70 -0
- package/dist/types.backup/vite/debug.d.ts +80 -0
- package/dist/types.backup/vite/discovery/bundle-postprocess.d.ts +12 -0
- package/dist/types.backup/vite/discovery/dev-prerender-cache.d.ts +65 -0
- package/dist/types.backup/vite/discovery/discover-routers.d.ts +17 -0
- package/dist/types.backup/vite/discovery/discovery-errors.d.ts +113 -0
- package/dist/types.backup/vite/discovery/gate-state.d.ts +79 -0
- package/dist/types.backup/vite/discovery/prerender-collection.d.ts +24 -0
- package/dist/types.backup/vite/discovery/route-types-writer.d.ts +32 -0
- package/dist/types.backup/vite/discovery/self-gen-tracking.d.ts +22 -0
- package/dist/types.backup/vite/discovery/shell-prerender-phase.d.ts +40 -0
- package/dist/types.backup/vite/discovery/state.d.ts +162 -0
- package/dist/types.backup/vite/discovery/virtual-module-codegen.d.ts +15 -0
- package/dist/types.backup/vite/index.d.ts +11 -0
- package/dist/types.backup/vite/inject-client-debug.d.ts +56 -0
- package/dist/types.backup/vite/plugin-types.d.ts +298 -0
- package/dist/types.backup/vite/plugins/cjs-to-esm.d.ts +6 -0
- package/dist/types.backup/vite/plugins/client-ref-dedup.d.ts +40 -0
- package/dist/types.backup/vite/plugins/client-ref-hashing.d.ts +35 -0
- package/dist/types.backup/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
- package/dist/types.backup/vite/plugins/expose-action-id.d.ts +18 -0
- package/dist/types.backup/vite/plugins/expose-id-utils.d.ts +37 -0
- package/dist/types.backup/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
- package/dist/types.backup/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
- package/dist/types.backup/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
- package/dist/types.backup/vite/plugins/expose-ids/router-transform.d.ts +13 -0
- package/dist/types.backup/vite/plugins/expose-ids/types.d.ts +29 -0
- package/dist/types.backup/vite/plugins/expose-internal-ids.d.ts +6 -0
- package/dist/types.backup/vite/plugins/performance-tracks.d.ts +25 -0
- package/dist/types.backup/vite/plugins/refresh-cmd.d.ts +20 -0
- package/dist/types.backup/vite/plugins/use-cache-transform.d.ts +20 -0
- package/dist/types.backup/vite/plugins/vercel-output.d.ts +85 -0
- package/dist/types.backup/vite/plugins/version-injector.d.ts +21 -0
- package/dist/types.backup/vite/plugins/version-plugin.d.ts +19 -0
- package/dist/types.backup/vite/plugins/virtual-entries.d.ts +36 -0
- package/dist/types.backup/vite/plugins/virtual-stub-plugin.d.ts +7 -0
- package/dist/types.backup/vite/rango.d.ts +29 -0
- package/dist/types.backup/vite/router-discovery.d.ts +23 -0
- package/dist/types.backup/vite/utils/ast-handler-extract.d.ts +64 -0
- package/dist/types.backup/vite/utils/banner.d.ts +2 -0
- package/dist/types.backup/vite/utils/bundle-analysis.d.ts +28 -0
- package/dist/types.backup/vite/utils/client-chunks.d.ts +55 -0
- package/dist/types.backup/vite/utils/directive-prologue.d.ts +16 -0
- package/dist/types.backup/vite/utils/forward-user-plugins.d.ts +37 -0
- package/dist/types.backup/vite/utils/manifest-utils.d.ts +7 -0
- package/dist/types.backup/vite/utils/package-resolution.d.ts +6 -0
- package/dist/types.backup/vite/utils/prerender-utils.d.ts +32 -0
- package/dist/types.backup/vite/utils/shared-utils.d.ts +55 -0
- package/dist/vite/index.js +9695 -3592
- package/package.json +119 -39
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +82 -5
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +232 -34
- package/skills/caching/SKILL.md +375 -19
- package/skills/catalog.json +283 -0
- package/skills/cloudflare/SKILL.md +151 -0
- package/skills/cloudflare/agents/openai.yaml +4 -0
- package/skills/cloudflare/references/d1-and-local-dev.md +131 -0
- package/skills/cloudflare/references/streaming-and-deploy.md +107 -0
- package/skills/cloudflare/references/webhooks-and-crypto.md +147 -0
- package/skills/comparison/SKILL.md +50 -0
- package/skills/comparison/agents/openai.yaml +4 -0
- package/skills/comparison/references/framework-comparison.md +844 -0
- package/skills/composability/SKILL.md +124 -4
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +5 -11
- package/skills/defer-hydration/SKILL.md +235 -0
- package/skills/deployment-caching/SKILL.md +176 -0
- package/skills/document-cache/SKILL.md +116 -58
- package/skills/fonts/SKILL.md +1 -1
- package/skills/handler-use/SKILL.md +12 -10
- package/skills/hooks/SKILL.md +73 -699
- package/skills/hooks/data.md +273 -0
- package/skills/hooks/handle-and-actions.md +103 -0
- package/skills/hooks/navigation.md +110 -0
- package/skills/hooks/outlets.md +62 -0
- package/skills/hooks/state.md +228 -0
- package/skills/hooks/urls.md +135 -0
- package/skills/host-router/SKILL.md +129 -27
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +75 -19
- package/skills/layout/SKILL.md +40 -19
- package/skills/links/SKILL.md +211 -17
- package/skills/loader/SKILL.md +230 -25
- package/skills/middleware/SKILL.md +58 -13
- package/skills/migrate-nextjs/SKILL.md +267 -33
- package/skills/migrate-nextjs/backend-host-swap.md +120 -0
- package/skills/migrate-react-router/SKILL.md +59 -671
- package/skills/migrate-react-router/component-migration.md +196 -0
- package/skills/migrate-react-router/data-and-actions.md +225 -0
- package/skills/migrate-react-router/route-mapping.md +271 -0
- package/skills/mime-routes/SKILL.md +55 -18
- package/skills/observability/SKILL.md +231 -0
- package/skills/parallel/SKILL.md +50 -10
- package/skills/ppr/SKILL.md +904 -0
- package/skills/prerender/SKILL.md +130 -68
- package/skills/rango/SKILL.md +321 -26
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +172 -52
- package/skills/route/SKILL.md +123 -9
- package/skills/router-setup/SKILL.md +53 -9
- package/skills/scripts/SKILL.md +179 -0
- package/skills/server-actions/SKILL.md +776 -0
- package/skills/shell-manifest/SKILL.md +185 -0
- package/skills/streams-and-websockets/SKILL.md +1 -1
- package/skills/tailwind/SKILL.md +28 -4
- package/skills/testing/SKILL.md +131 -0
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +172 -0
- package/skills/testing/client-components.md +131 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +131 -0
- package/skills/testing/loader.md +128 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +122 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +85 -0
- package/skills/testing/server-actions.md +107 -0
- package/skills/testing/server-tree.md +128 -0
- package/skills/testing/setup.md +123 -0
- package/skills/theme/SKILL.md +1 -1
- package/skills/typesafety/SKILL.md +45 -628
- package/skills/typesafety/env-and-bindings.md +254 -0
- package/skills/typesafety/generated-files-and-cli.md +342 -0
- package/skills/typesafety/params-and-search.md +153 -0
- package/skills/typesafety/route-types.md +213 -0
- package/skills/use-cache/SKILL.md +121 -15
- package/skills/vercel/SKILL.md +149 -0
- package/skills/view-transitions/SKILL.md +341 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +0 -65
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +14 -27
- package/src/browser/connection-warmup.ts +134 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/dev-discovery.ts +66 -0
- package/src/browser/event-controller.ts +400 -168
- package/src/browser/history-state.ts +21 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/invalidate-client-cache.ts +52 -0
- package/src/browser/link-interceptor.ts +469 -20
- package/src/browser/logging.ts +28 -0
- package/src/browser/merge-segment-loaders.ts +6 -4
- package/src/browser/navigation-bridge.ts +164 -69
- package/src/browser/navigation-client.ts +199 -96
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +165 -345
- package/src/browser/navigation-transaction.ts +9 -59
- package/src/browser/network-error-handler.ts +34 -7
- package/src/browser/notify-listeners.ts +22 -0
- package/src/browser/partial-update.ts +219 -163
- package/src/browser/prefetch/cache.ts +240 -97
- package/src/browser/prefetch/default-strategy.ts +74 -0
- package/src/browser/prefetch/fetch.ts +317 -51
- package/src/browser/prefetch/invalidation.ts +30 -0
- package/src/browser/prefetch/loader.ts +111 -0
- package/src/browser/prefetch/observer.ts +50 -22
- package/src/browser/prefetch/queue.ts +25 -7
- package/src/browser/prefetch/runtime.ts +6 -0
- package/src/browser/rango-state.ts +177 -114
- package/src/browser/react/Link.tsx +115 -75
- package/src/browser/react/NavigationProvider.tsx +194 -143
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/context.ts +4 -0
- package/src/browser/react/filter-segment-order.ts +66 -7
- package/src/browser/react/index.ts +0 -48
- package/src/browser/react/location-state-shared.ts +178 -8
- package/src/browser/react/location-state.ts +39 -14
- package/src/browser/react/use-action.ts +6 -15
- package/src/browser/react/use-handle.ts +17 -14
- package/src/browser/react/use-href.tsx +8 -1
- package/src/browser/react/use-link-status.ts +33 -8
- package/src/browser/react/use-navigation.ts +10 -5
- package/src/browser/react/use-params.ts +11 -11
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +21 -6
- package/src/browser/react/use-search-params.ts +0 -5
- package/src/browser/react/use-segments.ts +11 -21
- package/src/browser/response-adapter.ts +99 -8
- package/src/browser/rsc-router.tsx +230 -42
- package/src/browser/scroll-restoration.ts +37 -22
- package/src/browser/segment-reconciler.ts +31 -21
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +262 -65
- package/src/browser/types.ts +132 -47
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +213 -184
- package/src/build/generate-route-types.ts +3 -1
- package/src/build/index.ts +11 -3
- package/src/build/merge-full-manifests.ts +161 -0
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +43 -280
- package/src/build/route-types/ast-route-extraction.ts +15 -8
- package/src/build/route-types/codegen.ts +16 -5
- package/src/build/route-types/include-resolution.ts +513 -64
- package/src/build/route-types/param-extraction.ts +6 -3
- package/src/build/route-types/per-module-writer.ts +33 -12
- package/src/build/route-types/router-processing.ts +312 -204
- package/src/build/route-types/scan-filter.ts +1 -1
- package/src/build/route-types/source-scan.ts +216 -0
- package/src/build/runtime-discovery.ts +32 -29
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-exec-scope.ts +47 -0
- package/src/cache/cache-key-utils.ts +73 -15
- package/src/cache/cache-policy.ts +108 -34
- package/src/cache/cache-runtime.ts +566 -121
- package/src/cache/cache-scope.ts +383 -105
- package/src/cache/cache-tag.ts +149 -0
- package/src/cache/cf/cf-base64.ts +33 -0
- package/src/cache/cf/cf-cache-constants.ts +134 -0
- package/src/cache/cf/cf-cache-store.ts +3028 -391
- package/src/cache/cf/cf-cache-types.ts +417 -0
- package/src/cache/cf/cf-kv-utils.ts +84 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +108 -0
- package/src/cache/cf/cf-zone-purge.ts +101 -0
- package/src/cache/cf/index.ts +11 -16
- package/src/cache/document-cache.ts +184 -53
- package/src/cache/handle-snapshot.ts +92 -1
- package/src/cache/index.ts +32 -20
- package/src/cache/memory-segment-store.ts +286 -37
- package/src/cache/profile-registry.ts +46 -31
- package/src/cache/read-through-swr.ts +66 -16
- package/src/cache/search-params-filter.ts +118 -0
- package/src/cache/segment-codec.ts +80 -25
- package/src/cache/shell-snapshot.ts +516 -0
- package/src/cache/tag-invalidation.ts +230 -0
- package/src/cache/taint.ts +28 -9
- package/src/cache/types.ts +323 -100
- package/src/cache/vercel/index.ts +11 -0
- package/src/cache/vercel/vercel-cache-store.ts +1264 -0
- package/src/client-urls/client-root.tsx +161 -0
- package/src/client-urls/client-urls.ts +665 -0
- package/src/client-urls/navigation.ts +237 -0
- package/src/client-urls/revalidation-protocol.ts +56 -0
- package/src/client-urls/server-projection.ts +563 -0
- package/src/client-urls/types.ts +178 -0
- package/src/client.rsc.tsx +48 -21
- package/src/client.tsx +77 -67
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +112 -0
- package/src/component-utils.ts +19 -0
- package/src/components/DefaultDocument.tsx +8 -2
- package/src/context-var.ts +18 -6
- package/src/decode-loader-results.ts +160 -0
- package/src/defer.ts +185 -0
- package/src/deps/ssr.ts +4 -2
- package/src/dev-discovery-protocol.ts +11 -0
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +44 -4
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +67 -37
- package/src/handles/MetaTags.tsx +24 -53
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +35 -8
- package/src/handles/deferred-resolution.ts +134 -0
- package/src/handles/is-thenable.ts +16 -0
- package/src/handles/meta.ts +14 -40
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +9 -60
- package/src/host/errors.ts +13 -22
- package/src/host/index.ts +9 -2
- package/src/host/pattern-matcher.ts +23 -52
- package/src/host/router.ts +107 -99
- package/src/host/testing.ts +40 -27
- package/src/host/types.ts +37 -4
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +137 -22
- package/src/index.rsc.ts +105 -12
- package/src/index.ts +102 -14
- package/src/internal-debug.ts +11 -10
- package/src/loader-redirect.tsx +47 -0
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +20 -13
- package/src/loader.ts +12 -11
- package/src/missing-id-error.ts +68 -0
- package/src/outlet-context.ts +12 -0
- package/src/outlet-provider.tsx +16 -6
- package/src/prerender/build-shell-capture.ts +453 -0
- package/src/prerender/param-hash.ts +16 -16
- package/src/prerender/shell-manifest-key.ts +20 -0
- package/src/prerender/store.ts +47 -38
- package/src/prerender.ts +81 -13
- package/src/redirect-origin.ts +143 -0
- package/src/regex-escape.ts +8 -0
- package/src/render-error-thrower.tsx +20 -0
- package/src/response-utils.ts +34 -0
- package/src/reverse.ts +65 -40
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +112 -78
- package/src/route-definition/dsl-helpers.ts +300 -313
- package/src/route-definition/helper-factories.ts +28 -140
- package/src/route-definition/helpers-types.ts +92 -62
- package/src/route-definition/index.ts +1 -2
- package/src/route-definition/redirect.ts +44 -11
- package/src/route-definition/resolve-handler-use.ts +6 -1
- package/src/route-definition/use-item-types.ts +29 -0
- package/src/route-map-builder.ts +102 -74
- package/src/route-types.ts +19 -46
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +120 -30
- package/src/router/error-handling.ts +110 -29
- package/src/router/find-match.ts +129 -30
- package/src/router/handler-context.ts +41 -57
- package/src/router/instrument.ts +401 -0
- package/src/router/intercept-resolution.ts +98 -21
- package/src/router/lazy-includes.ts +82 -58
- package/src/router/loader-resolution.ts +401 -85
- package/src/router/logging.ts +0 -6
- package/src/router/manifest.ts +74 -40
- package/src/router/match-api.ts +91 -55
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +268 -171
- package/src/router/match-middleware/background-revalidation.ts +40 -24
- package/src/router/match-middleware/cache-lookup.ts +316 -302
- package/src/router/match-middleware/cache-store.ts +134 -52
- package/src/router/match-middleware/intercept-resolution.ts +0 -22
- package/src/router/match-middleware/segment-resolution.ts +0 -22
- package/src/router/match-pipelines.ts +1 -42
- package/src/router/match-result.ts +76 -79
- package/src/router/metrics.ts +17 -36
- package/src/router/middleware-types.ts +20 -110
- package/src/router/middleware.ts +275 -173
- package/src/router/navigation-snapshot.ts +51 -60
- package/src/router/params-util.ts +23 -0
- package/src/router/parse-pattern.ts +115 -0
- package/src/router/pattern-matching.ts +134 -154
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prefetch-default.ts +59 -0
- package/src/router/prefetch-limits.ts +37 -0
- package/src/router/prerender-match.ts +159 -69
- package/src/router/preview-match.ts +6 -2
- package/src/router/request-classification.ts +50 -69
- package/src/router/revalidation.ts +146 -83
- package/src/router/route-snapshot.ts +14 -3
- package/src/router/route-trie-builder.ts +334 -0
- package/src/router/router-context.ts +6 -29
- package/src/router/router-interfaces.ts +168 -38
- package/src/router/router-options.ts +235 -11
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +163 -88
- package/src/router/segment-resolution/helpers.ts +96 -18
- package/src/router/segment-resolution/loader-cache.ts +187 -39
- package/src/router/segment-resolution/loader-mask.ts +60 -0
- package/src/router/segment-resolution/loader-snapshot.ts +259 -0
- package/src/router/segment-resolution/mask-nested.ts +99 -0
- package/src/router/segment-resolution/revalidation.ts +316 -321
- package/src/router/segment-resolution/static-store.ts +55 -15
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution/view-transition-default.ts +60 -0
- package/src/router/segment-resolution.ts +5 -1
- package/src/router/segment-wrappers.ts +6 -5
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/substitute-pattern-params.ts +75 -0
- package/src/router/telemetry-otel.ts +171 -200
- package/src/router/telemetry.ts +106 -20
- package/src/router/timeout.ts +53 -22
- package/src/router/tracing.ts +235 -0
- package/src/router/transition-when.ts +76 -0
- package/src/router/trie-matching.ts +170 -64
- package/src/router/types.ts +9 -63
- package/src/router/url-params.ts +13 -5
- package/src/router.ts +248 -77
- package/src/rsc/capture-queue.ts +218 -0
- package/src/rsc/full-payload.ts +77 -0
- package/src/rsc/handler-context.ts +4 -2
- package/src/rsc/handler.ts +562 -284
- package/src/rsc/helpers.ts +179 -9
- package/src/rsc/index.ts +2 -5
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +116 -40
- package/src/rsc/manifest-init.ts +55 -56
- package/src/rsc/nonce.ts +10 -1
- package/src/rsc/origin-guard.ts +39 -25
- package/src/rsc/progressive-enhancement.ts +377 -84
- package/src/rsc/redirect-guard.ts +102 -0
- package/src/rsc/render-pipeline.ts +611 -0
- package/src/rsc/response-cache-serve.ts +259 -0
- package/src/rsc/response-error.ts +79 -12
- package/src/rsc/response-route-handler.ts +73 -212
- package/src/rsc/routine-plan.ts +359 -0
- package/src/rsc/rsc-rendering.ts +1624 -171
- package/src/rsc/runtime-warnings.ts +23 -10
- package/src/rsc/server-action.ts +420 -139
- package/src/rsc/shell-build-manifest.ts +336 -0
- package/src/rsc/shell-capture-constants.ts +45 -0
- package/src/rsc/shell-capture.ts +2063 -0
- package/src/rsc/shell-serve.ts +337 -0
- package/src/rsc/ssr-setup.ts +111 -16
- package/src/rsc/stream-idle.ts +137 -0
- package/src/rsc/transition-gate.ts +86 -0
- package/src/rsc/types.ts +91 -5
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +35 -30
- package/src/segment-fragments.ts +165 -0
- package/src/segment-loader-promise.ts +49 -4
- package/src/segment-system.tsx +441 -153
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +416 -55
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +162 -15
- package/src/server/handle-store.ts +190 -70
- package/src/server/loader-registry.ts +33 -42
- package/src/server/request-context.ts +805 -177
- package/src/server.ts +7 -2
- package/src/ssr/index.tsx +631 -183
- package/src/ssr/inject-rsc-eager.ts +167 -0
- package/src/ssr/preinit-client-references.ts +106 -0
- package/src/ssr/ssr-root.tsx +262 -0
- package/src/static-handler.ts +28 -15
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +46 -0
- package/src/testing/dispatch.ts +951 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +147 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +319 -0
- package/src/testing/e2e/parity.ts +400 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +257 -0
- package/src/testing/generated-routes.ts +199 -0
- package/src/testing/index.ts +121 -0
- package/src/testing/internal/context.ts +380 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +371 -0
- package/src/testing/render-route.tsx +667 -0
- package/src/testing/run-loader.ts +423 -0
- package/src/testing/run-middleware.ts +219 -0
- package/src/testing/run-transition-when.ts +197 -0
- package/src/testing/shell-status.ts +206 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +305 -0
- package/src/theme/ThemeProvider.tsx +56 -84
- package/src/theme/ThemeScript.tsx +7 -9
- package/src/theme/constants.ts +52 -13
- package/src/theme/index.ts +0 -7
- package/src/theme/theme-context.ts +1 -5
- package/src/theme/theme-script.ts +22 -21
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +15 -35
- package/src/types/cache-types.ts +13 -4
- package/src/types/error-types.ts +30 -90
- package/src/types/global-namespace.ts +54 -41
- package/src/types/handler-context.ts +121 -30
- package/src/types/index.ts +3 -10
- package/src/types/loader-types.ts +38 -7
- package/src/types/request-scope.ts +8 -22
- package/src/types/route-config.ts +20 -52
- package/src/types/route-entry.ts +3 -6
- package/src/types/segments.ts +147 -14
- package/src/urls/include-helper.ts +38 -64
- package/src/urls/include-provider.ts +71 -0
- package/src/urls/index.ts +2 -11
- package/src/urls/path-helper-types.ts +76 -24
- package/src/urls/path-helper.ts +30 -110
- package/src/urls/pattern-types.ts +101 -19
- package/src/urls/response-types.ts +20 -19
- package/src/urls/type-extraction.ts +98 -154
- package/src/urls/urls-function.ts +1 -19
- package/src/use-loader.tsx +355 -109
- package/src/vercel/index.ts +11 -0
- package/src/vercel/tracing.ts +89 -0
- package/src/vite/debug.ts +102 -3
- package/src/vite/discovery/bundle-postprocess.ts +18 -14
- package/src/vite/discovery/client-urls-projection.ts +322 -0
- package/src/vite/discovery/dev-prerender-cache.ts +117 -0
- package/src/vite/discovery/discover-routers.ts +178 -151
- package/src/vite/discovery/discovery-errors.ts +255 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +125 -70
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/shell-prerender-phase.ts +397 -0
- package/src/vite/discovery/state.ts +104 -6
- package/src/vite/discovery/virtual-module-codegen.ts +226 -87
- package/src/vite/encryption-key.ts +29 -0
- package/src/vite/index.ts +12 -0
- package/src/vite/inject-client-debug.ts +88 -0
- package/src/vite/plugin-types.ts +243 -10
- package/src/vite/plugins/cjs-to-esm.ts +16 -19
- package/src/vite/plugins/client-ref-dedup.ts +16 -11
- package/src/vite/plugins/client-ref-hashing.ts +28 -15
- package/src/vite/plugins/cloudflare-protocol-stub.ts +1 -21
- package/src/vite/plugins/expose-action-id.ts +50 -97
- package/src/vite/plugins/expose-id-utils.ts +88 -55
- package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
- package/src/vite/plugins/expose-ids/handler-transform.ts +11 -90
- package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
- package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
- package/src/vite/plugins/expose-internal-ids.ts +551 -486
- package/src/vite/plugins/performance-tracks.ts +25 -22
- package/src/vite/plugins/refresh-cmd.ts +1 -1
- package/src/vite/plugins/server-ref-hashing.ts +74 -0
- package/src/vite/plugins/server-reference-pattern.ts +10 -0
- package/src/vite/plugins/use-cache-transform.ts +73 -83
- package/src/vite/plugins/vercel-output.ts +384 -0
- package/src/vite/plugins/version-injector.ts +39 -29
- package/src/vite/plugins/version-plugin.ts +45 -40
- package/src/vite/plugins/virtual-entries.ts +193 -30
- package/src/vite/rango.ts +240 -128
- package/src/vite/router-discovery.ts +1518 -174
- package/src/vite/utils/ast-handler-extract.ts +26 -35
- package/src/vite/utils/bundle-analysis.ts +10 -15
- package/src/vite/utils/client-chunks.ts +184 -0
- package/src/vite/utils/directive-prologue.ts +40 -0
- package/src/vite/utils/forward-user-plugins.ts +171 -0
- package/src/vite/utils/manifest-utils.ts +1 -59
- package/src/vite/utils/package-resolution.ts +2 -73
- package/src/vite/utils/prerender-utils.ts +96 -49
- package/src/vite/utils/shared-utils.ts +156 -43
- package/src/browser/action-response-classifier.ts +0 -99
- package/src/browser/react/use-client-cache.ts +0 -58
- package/src/browser/shallow.ts +0 -40
- package/src/handles/index.ts +0 -7
- package/src/network-error-thrower.tsx +0 -23
- package/src/router/middleware-cookies.ts +0 -55
|
@@ -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") {
|
|
@@ -113,11 +117,24 @@ export type ActionStateListener = (state: TrackedActionState) => void;
|
|
|
113
117
|
export type HandleListener = () => void;
|
|
114
118
|
|
|
115
119
|
/**
|
|
116
|
-
* 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.
|
|
117
133
|
*/
|
|
118
134
|
export interface HandleState {
|
|
119
135
|
data: HandleData;
|
|
120
136
|
segmentOrder: string[];
|
|
137
|
+
routeSegmentIds: string[];
|
|
121
138
|
}
|
|
122
139
|
|
|
123
140
|
/**
|
|
@@ -152,6 +169,22 @@ export interface ActionHandle extends Disposable {
|
|
|
152
169
|
startStreaming(): StreamingToken;
|
|
153
170
|
/** Record segments that were revalidated */
|
|
154
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>;
|
|
155
188
|
/** Complete the action with result */
|
|
156
189
|
complete(result?: unknown): void;
|
|
157
190
|
/** Fail the action with error */
|
|
@@ -178,7 +211,12 @@ export interface EventController {
|
|
|
178
211
|
abortNavigation(): void;
|
|
179
212
|
|
|
180
213
|
// Action operations
|
|
181
|
-
startAction(
|
|
214
|
+
startAction(
|
|
215
|
+
actionId: string,
|
|
216
|
+
args: unknown[],
|
|
217
|
+
/** Originating history entry key; scopes location-state arbitration. */
|
|
218
|
+
cohort?: string,
|
|
219
|
+
): ActionHandle;
|
|
182
220
|
abortAllActions(): void;
|
|
183
221
|
|
|
184
222
|
// State access
|
|
@@ -196,14 +234,36 @@ export interface EventController {
|
|
|
196
234
|
listener: ActionStateListener,
|
|
197
235
|
): () => void;
|
|
198
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;
|
|
199
243
|
|
|
200
244
|
// Handle operations
|
|
201
245
|
setHandleData(
|
|
202
246
|
data: HandleData,
|
|
203
247
|
matched?: string[],
|
|
204
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[],
|
|
205
257
|
): void;
|
|
206
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;
|
|
207
267
|
|
|
208
268
|
// Params operations
|
|
209
269
|
setParams(params: Record<string, string>): void;
|
|
@@ -216,9 +276,70 @@ export interface EventController {
|
|
|
216
276
|
hadAnyConcurrentActions(): boolean;
|
|
217
277
|
}
|
|
218
278
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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
|
+
}
|
|
222
343
|
|
|
223
344
|
const DEFAULT_ACTION_STATE: TrackedActionState = {
|
|
224
345
|
state: "idle",
|
|
@@ -228,6 +349,13 @@ const DEFAULT_ACTION_STATE: TrackedActionState = {
|
|
|
228
349
|
result: null,
|
|
229
350
|
};
|
|
230
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
|
+
|
|
231
359
|
/**
|
|
232
360
|
* Check if a subscription ID matches an action's full ID.
|
|
233
361
|
*
|
|
@@ -240,20 +368,40 @@ function matchesActionId(
|
|
|
240
368
|
entryActionId: string,
|
|
241
369
|
): boolean {
|
|
242
370
|
if (subscriptionId.includes("#")) {
|
|
243
|
-
// Full ID: exact match
|
|
244
371
|
return subscriptionId === entryActionId;
|
|
245
372
|
}
|
|
246
|
-
// Action name only: suffix match (matches "anything#actionName")
|
|
247
373
|
return entryActionId.endsWith(`#${subscriptionId}`);
|
|
248
374
|
}
|
|
249
375
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
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
|
+
}
|
|
253
404
|
|
|
254
|
-
/**
|
|
255
|
-
* Configuration for creating an event controller
|
|
256
|
-
*/
|
|
257
405
|
export interface EventControllerConfig {
|
|
258
406
|
initialLocation?: NavigationLocation;
|
|
259
407
|
}
|
|
@@ -271,63 +419,103 @@ export interface EventControllerConfig {
|
|
|
271
419
|
export function createEventController(
|
|
272
420
|
config?: EventControllerConfig,
|
|
273
421
|
): EventController {
|
|
274
|
-
// ========================================================================
|
|
275
|
-
// Source of Truth
|
|
276
|
-
// ========================================================================
|
|
277
|
-
|
|
278
|
-
// Current navigation in progress (null = idle)
|
|
279
422
|
let currentNavigation: NavigationEntry | null = null;
|
|
280
423
|
|
|
281
|
-
// All in-flight actions (keyed by unique instance ID)
|
|
282
424
|
const inflightActions = new Map<string, ActionEntry>();
|
|
283
425
|
|
|
284
|
-
// Committed location (updated when navigation completes)
|
|
285
426
|
let location: NavigationLocation =
|
|
286
427
|
config?.initialLocation ??
|
|
287
428
|
(typeof window !== "undefined"
|
|
288
429
|
? new URL(window.location.href)
|
|
289
430
|
: new URL("/", "http://localhost"));
|
|
290
431
|
|
|
291
|
-
// Track if any concurrent actions occurred (for consolidation)
|
|
292
432
|
let hadAnyConcurrentActions = false;
|
|
293
433
|
|
|
294
|
-
// Track segments revalidated by concurrent actions
|
|
295
434
|
const concurrentRevalidatedSegments = new Set<string>();
|
|
296
435
|
|
|
297
|
-
//
|
|
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
|
+
|
|
298
458
|
let activeStreamCount = 0;
|
|
299
459
|
|
|
300
|
-
// Handle data from RSC payload
|
|
301
460
|
let handleData: HandleData = {};
|
|
302
461
|
let handleSegmentOrder: string[] = [];
|
|
462
|
+
let routeSegmentIds: string[] = [];
|
|
303
463
|
|
|
304
|
-
// Merged route params from current match
|
|
305
464
|
let routeParams: Record<string, string> = {};
|
|
306
465
|
|
|
307
|
-
// ========================================================================
|
|
308
|
-
// Listeners
|
|
309
|
-
// ========================================================================
|
|
310
|
-
|
|
311
466
|
const stateListeners = new Set<StateListener>();
|
|
312
467
|
const actionListeners = new Map<string, Set<ActionStateListener>>();
|
|
313
468
|
const handleListeners = new Set<HandleListener>();
|
|
314
469
|
|
|
315
|
-
|
|
316
|
-
let notifyTimeout: ReturnType<typeof setTimeout> | null = null;
|
|
470
|
+
const notifyStateListeners = makeDebouncedNotifier(stateListeners);
|
|
317
471
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
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();
|
|
326
482
|
}
|
|
327
483
|
|
|
328
|
-
// Debounce per-action notifications
|
|
329
484
|
const actionNotifyTimeouts = new Map<string, ReturnType<typeof setTimeout>>();
|
|
330
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
|
+
|
|
331
519
|
function notifyAction(actionId: string) {
|
|
332
520
|
const existing = actionNotifyTimeouts.get(actionId);
|
|
333
521
|
if (existing !== undefined) {
|
|
@@ -337,58 +525,48 @@ export function createEventController(
|
|
|
337
525
|
actionId,
|
|
338
526
|
setTimeout(() => {
|
|
339
527
|
actionNotifyTimeouts.delete(actionId);
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
listeners.forEach((listener) => listener(state));
|
|
346
|
-
}
|
|
347
|
-
}
|
|
528
|
+
notifyActionListenerSets(
|
|
529
|
+
[...actionListeners].filter(([subscriptionId]) =>
|
|
530
|
+
matchesActionId(subscriptionId, actionId),
|
|
531
|
+
),
|
|
532
|
+
);
|
|
348
533
|
}, 0),
|
|
349
534
|
);
|
|
350
535
|
}
|
|
351
536
|
|
|
352
|
-
|
|
353
|
-
let handleNotifyTimeout: ReturnType<typeof setTimeout> | null = null;
|
|
537
|
+
const notifyHandles = makeDebouncedNotifier(handleListeners);
|
|
354
538
|
|
|
355
|
-
function
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
}
|
|
359
|
-
handleNotifyTimeout = setTimeout(() => {
|
|
360
|
-
handleNotifyTimeout = null;
|
|
361
|
-
handleListeners.forEach((listener) => listener());
|
|
362
|
-
}, 0);
|
|
539
|
+
function flushRouteState(): void {
|
|
540
|
+
notifyStateListeners.flush();
|
|
541
|
+
notifyHandles.flush();
|
|
363
542
|
}
|
|
364
543
|
|
|
365
|
-
// ========================================================================
|
|
366
|
-
// Derived State
|
|
367
|
-
// ========================================================================
|
|
368
|
-
|
|
369
544
|
function getState(): DerivedNavigationState {
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
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
|
+
|
|
382
561
|
const hasActiveActions = inflightActionsList.length > 0;
|
|
383
562
|
const isVisibleNavigation =
|
|
384
563
|
currentNavigation !== null &&
|
|
385
564
|
!currentNavigation.options?.skipLoadingState;
|
|
386
565
|
const state = isVisibleNavigation || hasActiveActions ? "loading" : "idle";
|
|
387
566
|
|
|
388
|
-
// Streaming: true if any active streams (navigation or action) or loading
|
|
389
567
|
const isStreaming = activeStreamCount > 0 || state === "loading";
|
|
390
568
|
|
|
391
|
-
|
|
569
|
+
cachedDerivedState = {
|
|
392
570
|
state,
|
|
393
571
|
isStreaming,
|
|
394
572
|
// True when a navigation is active (fetching or streaming, before
|
|
@@ -404,31 +582,28 @@ export function createEventController(
|
|
|
404
582
|
: null,
|
|
405
583
|
inflightActions: inflightActionsList,
|
|
406
584
|
};
|
|
585
|
+
return cachedDerivedState;
|
|
407
586
|
}
|
|
408
587
|
|
|
409
588
|
function getActionState(actionId: string): TrackedActionState {
|
|
410
|
-
//
|
|
411
|
-
//
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
)
|
|
416
|
-
.
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
)
|
|
423
|
-
.sort((a, b) => b.startedAt - a.startedAt)[0];
|
|
424
|
-
|
|
425
|
-
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);
|
|
426
602
|
|
|
427
603
|
if (!entry) {
|
|
428
604
|
return { ...DEFAULT_ACTION_STATE };
|
|
429
605
|
}
|
|
430
606
|
|
|
431
|
-
// Derive state from phase
|
|
432
607
|
let state: ActionLifecycleState;
|
|
433
608
|
switch (entry.phase) {
|
|
434
609
|
case "fetching":
|
|
@@ -543,12 +718,45 @@ export function createEventController(
|
|
|
543
718
|
// Action Operations
|
|
544
719
|
// ========================================================================
|
|
545
720
|
|
|
546
|
-
function startAction(
|
|
721
|
+
function startAction(
|
|
722
|
+
actionId: string,
|
|
723
|
+
args: unknown[],
|
|
724
|
+
cohort?: string,
|
|
725
|
+
): ActionHandle {
|
|
547
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++;
|
|
548
729
|
const abort = new AbortController();
|
|
549
730
|
|
|
550
|
-
//
|
|
551
|
-
|
|
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
|
+
);
|
|
552
760
|
if (hadConcurrent) {
|
|
553
761
|
hadAnyConcurrentActions = true;
|
|
554
762
|
}
|
|
@@ -570,11 +778,28 @@ export function createEventController(
|
|
|
570
778
|
let settled = false;
|
|
571
779
|
let streamingEnded = false;
|
|
572
780
|
let actionCompleted = false;
|
|
781
|
+
let cohortReleased = false;
|
|
573
782
|
let pendingResult:
|
|
574
783
|
| { type: "success"; value?: unknown }
|
|
575
784
|
| { type: "error"; value: unknown }
|
|
576
785
|
| null = null;
|
|
577
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
|
+
|
|
578
803
|
function doSettle() {
|
|
579
804
|
if (settled) return;
|
|
580
805
|
settled = true;
|
|
@@ -582,6 +807,9 @@ export function createEventController(
|
|
|
582
807
|
// Cleanup after brief delay (allow useAction to read result)
|
|
583
808
|
setTimeout(() => {
|
|
584
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();
|
|
585
813
|
// Check for consolidation
|
|
586
814
|
if (inflightActions.size === 0) {
|
|
587
815
|
// All actions done - reset tracking
|
|
@@ -610,6 +838,19 @@ export function createEventController(
|
|
|
610
838
|
doSettle();
|
|
611
839
|
}
|
|
612
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
|
+
|
|
613
854
|
return {
|
|
614
855
|
id,
|
|
615
856
|
abort,
|
|
@@ -645,36 +886,32 @@ export function createEventController(
|
|
|
645
886
|
segmentIds.forEach((id) => concurrentRevalidatedSegments.add(id));
|
|
646
887
|
},
|
|
647
888
|
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
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
|
+
}
|
|
660
905
|
}
|
|
661
|
-
|
|
906
|
+
return winning;
|
|
662
907
|
},
|
|
663
908
|
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
actionCompleted = true;
|
|
668
|
-
entry.completed = true;
|
|
669
|
-
pendingResult = { type: "error", value: error };
|
|
909
|
+
complete(result?: unknown) {
|
|
910
|
+
settleWith({ type: "success", value: result });
|
|
911
|
+
},
|
|
670
912
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
if (entry.phase === "fetching" || streamingEnded) {
|
|
674
|
-
streamingEnded = true; // Mark as ended if never started
|
|
675
|
-
tryFinalize();
|
|
676
|
-
}
|
|
677
|
-
// If streaming is in progress, tryFinalize() will be called when streaming ends
|
|
913
|
+
fail(error: unknown) {
|
|
914
|
+
settleWith({ type: "error", value: error });
|
|
678
915
|
},
|
|
679
916
|
|
|
680
917
|
getRevalidatedSegments(): Set<string> {
|
|
@@ -690,6 +927,10 @@ export function createEventController(
|
|
|
690
927
|
[Symbol.dispose]() {
|
|
691
928
|
// If aborted, another navigation/error took over - don't touch state
|
|
692
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();
|
|
693
934
|
inflightActions.delete(id);
|
|
694
935
|
notify();
|
|
695
936
|
notifyAction(actionId);
|
|
@@ -724,16 +965,14 @@ export function createEventController(
|
|
|
724
965
|
}
|
|
725
966
|
hadAnyConcurrentActions = false;
|
|
726
967
|
concurrentRevalidatedSegments.clear();
|
|
968
|
+
cohortArbitration.clear();
|
|
727
969
|
notify();
|
|
728
970
|
// Notify all action listeners directly by subscription ID.
|
|
729
971
|
// actionListeners keys are subscription IDs (possibly short names like
|
|
730
972
|
// "addToCart"), not full entry actionIds. Passing them to notifyAction
|
|
731
973
|
// would fail the suffix matcher — instead, notify each subscriber with
|
|
732
974
|
// its own state.
|
|
733
|
-
|
|
734
|
-
const state = getActionState(subscriptionId);
|
|
735
|
-
listeners.forEach((listener) => listener(state));
|
|
736
|
-
}
|
|
975
|
+
notifyActionListenerSets(actionListeners);
|
|
737
976
|
}
|
|
738
977
|
|
|
739
978
|
// ========================================================================
|
|
@@ -744,8 +983,13 @@ export function createEventController(
|
|
|
744
983
|
data: HandleData,
|
|
745
984
|
matched?: string[],
|
|
746
985
|
isPartial?: boolean,
|
|
986
|
+
resolvedIds?: string[],
|
|
747
987
|
): void {
|
|
748
|
-
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);
|
|
749
993
|
|
|
750
994
|
if (isPartial && newSegmentOrder.length > 0) {
|
|
751
995
|
// Partial update: merge new data with existing
|
|
@@ -757,10 +1001,19 @@ export function createEventController(
|
|
|
757
1001
|
handleData[handleName][segmentId] = data[handleName][segmentId];
|
|
758
1002
|
}
|
|
759
1003
|
}
|
|
760
|
-
|
|
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.
|
|
761
1011
|
for (const handleName of Object.keys(handleData)) {
|
|
762
1012
|
for (const segmentId of Object.keys(handleData[handleName])) {
|
|
763
|
-
|
|
1013
|
+
const droppedFromMatch = !newSegmentOrder.includes(segmentId);
|
|
1014
|
+
const reresolvedWithoutPush =
|
|
1015
|
+
resolvedIdSet?.has(segmentId) && !data[handleName]?.[segmentId];
|
|
1016
|
+
if (droppedFromMatch || reresolvedWithoutPush) {
|
|
764
1017
|
delete handleData[handleName][segmentId];
|
|
765
1018
|
}
|
|
766
1019
|
}
|
|
@@ -770,17 +1023,31 @@ export function createEventController(
|
|
|
770
1023
|
handleData = data;
|
|
771
1024
|
}
|
|
772
1025
|
handleSegmentOrder = newSegmentOrder;
|
|
1026
|
+
routeSegmentIds = newRouteSegmentIds;
|
|
773
1027
|
|
|
774
|
-
notifyHandles();
|
|
1028
|
+
notifyHandles.schedule();
|
|
775
1029
|
}
|
|
776
1030
|
|
|
777
1031
|
function getHandleState(): HandleState {
|
|
778
1032
|
return {
|
|
779
1033
|
data: handleData,
|
|
780
1034
|
segmentOrder: handleSegmentOrder,
|
|
1035
|
+
routeSegmentIds,
|
|
781
1036
|
};
|
|
782
1037
|
}
|
|
783
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
|
+
|
|
784
1051
|
// ========================================================================
|
|
785
1052
|
// Subscriptions
|
|
786
1053
|
// ========================================================================
|
|
@@ -849,6 +1116,7 @@ export function createEventController(
|
|
|
849
1116
|
// Handles
|
|
850
1117
|
setHandleData,
|
|
851
1118
|
getHandleState,
|
|
1119
|
+
setRouteSegmentIds,
|
|
852
1120
|
|
|
853
1121
|
// Params
|
|
854
1122
|
setParams,
|
|
@@ -858,6 +1126,7 @@ export function createEventController(
|
|
|
858
1126
|
subscribe,
|
|
859
1127
|
subscribeToAction,
|
|
860
1128
|
subscribeToHandles,
|
|
1129
|
+
flushRouteState,
|
|
861
1130
|
|
|
862
1131
|
// Direct access
|
|
863
1132
|
getCurrentNavigation: () => currentNavigation,
|
|
@@ -865,40 +1134,3 @@ export function createEventController(
|
|
|
865
1134
|
hadAnyConcurrentActions: () => hadAnyConcurrentActions,
|
|
866
1135
|
};
|
|
867
1136
|
}
|
|
868
|
-
|
|
869
|
-
// ============================================================================
|
|
870
|
-
// Singleton
|
|
871
|
-
// ============================================================================
|
|
872
|
-
|
|
873
|
-
let controllerInstance: EventController | null = null;
|
|
874
|
-
|
|
875
|
-
/**
|
|
876
|
-
* Initialize the global event controller
|
|
877
|
-
*/
|
|
878
|
-
export function initEventController(
|
|
879
|
-
config?: EventControllerConfig,
|
|
880
|
-
): EventController {
|
|
881
|
-
if (!controllerInstance) {
|
|
882
|
-
controllerInstance = createEventController(config);
|
|
883
|
-
}
|
|
884
|
-
return controllerInstance;
|
|
885
|
-
}
|
|
886
|
-
|
|
887
|
-
/**
|
|
888
|
-
* Get the global event controller
|
|
889
|
-
*/
|
|
890
|
-
export function getEventController(): EventController {
|
|
891
|
-
if (!controllerInstance) {
|
|
892
|
-
throw new Error(
|
|
893
|
-
"Event controller not initialized. Call initEventController first.",
|
|
894
|
-
);
|
|
895
|
-
}
|
|
896
|
-
return controllerInstance;
|
|
897
|
-
}
|
|
898
|
-
|
|
899
|
-
/**
|
|
900
|
-
* Reset the controller instance (for testing)
|
|
901
|
-
*/
|
|
902
|
-
export function resetEventController(): void {
|
|
903
|
-
controllerInstance = null;
|
|
904
|
-
}
|