@rangojs/router 0.0.0-experimental.18 → 0.0.0-experimental.1878aa49
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/{CLAUDE.md → AGENTS.md} +4 -0
- package/README.md +91 -19
- package/dist/__internal.d.ts +83 -0
- package/dist/__internal.d.ts.map +1 -0
- package/dist/__internal.js +19 -0
- package/dist/__internal.js.map +1 -0
- package/dist/__mocks__/version.d.ts +7 -0
- package/dist/__mocks__/version.d.ts.map +1 -0
- package/dist/__mocks__/version.js +7 -0
- package/dist/__mocks__/version.js.map +1 -0
- package/dist/__tests__/client-href.test.d.ts +2 -0
- package/dist/__tests__/client-href.test.d.ts.map +1 -0
- package/dist/__tests__/client-href.test.js +74 -0
- package/dist/__tests__/client-href.test.js.map +1 -0
- package/dist/__tests__/component-utils.test.d.ts +2 -0
- package/dist/__tests__/component-utils.test.d.ts.map +1 -0
- package/dist/__tests__/component-utils.test.js +51 -0
- package/dist/__tests__/component-utils.test.js.map +1 -0
- package/dist/__tests__/event-controller.test.d.ts +2 -0
- package/dist/__tests__/event-controller.test.d.ts.map +1 -0
- package/dist/__tests__/event-controller.test.js +538 -0
- package/dist/__tests__/event-controller.test.js.map +1 -0
- package/dist/__tests__/helpers/route-tree.d.ts +118 -0
- package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
- package/dist/__tests__/helpers/route-tree.js +374 -0
- package/dist/__tests__/helpers/route-tree.js.map +1 -0
- package/dist/__tests__/match-result.test.d.ts +2 -0
- package/dist/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/__tests__/match-result.test.js +154 -0
- package/dist/__tests__/match-result.test.js.map +1 -0
- package/dist/__tests__/navigation-store.test.d.ts +2 -0
- package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
- package/dist/__tests__/navigation-store.test.js +440 -0
- package/dist/__tests__/navigation-store.test.js.map +1 -0
- package/dist/__tests__/partial-update.test.d.ts +2 -0
- package/dist/__tests__/partial-update.test.d.ts.map +1 -0
- package/dist/__tests__/partial-update.test.js +1009 -0
- package/dist/__tests__/partial-update.test.js.map +1 -0
- package/dist/__tests__/reverse-types.test.d.ts +8 -0
- package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
- package/dist/__tests__/reverse-types.test.js +656 -0
- package/dist/__tests__/reverse-types.test.js.map +1 -0
- package/dist/__tests__/route-definition.test.d.ts +2 -0
- package/dist/__tests__/route-definition.test.d.ts.map +1 -0
- package/dist/__tests__/route-definition.test.js +55 -0
- package/dist/__tests__/route-definition.test.js.map +1 -0
- package/dist/__tests__/router-helpers.test.d.ts +2 -0
- package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
- package/dist/__tests__/router-helpers.test.js +377 -0
- package/dist/__tests__/router-helpers.test.js.map +1 -0
- package/dist/__tests__/router-integration-2.test.d.ts +2 -0
- package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
- package/dist/__tests__/router-integration-2.test.js +426 -0
- package/dist/__tests__/router-integration-2.test.js.map +1 -0
- package/dist/__tests__/router-integration.test.d.ts +2 -0
- package/dist/__tests__/router-integration.test.d.ts.map +1 -0
- package/dist/__tests__/router-integration.test.js +1051 -0
- package/dist/__tests__/router-integration.test.js.map +1 -0
- package/dist/__tests__/search-params.test.d.ts +5 -0
- package/dist/__tests__/search-params.test.d.ts.map +1 -0
- package/dist/__tests__/search-params.test.js +306 -0
- package/dist/__tests__/search-params.test.js.map +1 -0
- package/dist/__tests__/segment-system.test.d.ts +2 -0
- package/dist/__tests__/segment-system.test.d.ts.map +1 -0
- package/dist/__tests__/segment-system.test.js +627 -0
- package/dist/__tests__/segment-system.test.js.map +1 -0
- package/dist/__tests__/static-handler-types.test.d.ts +8 -0
- package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
- package/dist/__tests__/static-handler-types.test.js +63 -0
- package/dist/__tests__/static-handler-types.test.js.map +1 -0
- package/dist/__tests__/urls.test.d.ts +2 -0
- package/dist/__tests__/urls.test.d.ts.map +1 -0
- package/dist/__tests__/urls.test.js +421 -0
- package/dist/__tests__/urls.test.js.map +1 -0
- package/dist/__tests__/use-mount.test.d.ts +2 -0
- package/dist/__tests__/use-mount.test.d.ts.map +1 -0
- package/dist/__tests__/use-mount.test.js +35 -0
- package/dist/__tests__/use-mount.test.js.map +1 -0
- package/dist/bin/rango.d.ts +2 -0
- package/dist/bin/rango.d.ts.map +1 -0
- package/dist/bin/rango.js +348 -80
- package/dist/bin/rango.js.map +1 -0
- package/dist/browser/event-controller.d.ts +191 -0
- package/dist/browser/event-controller.d.ts.map +1 -0
- package/dist/browser/event-controller.js +559 -0
- package/dist/browser/event-controller.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/link-interceptor.d.ts +38 -0
- package/dist/browser/link-interceptor.d.ts.map +1 -0
- package/dist/browser/link-interceptor.js +99 -0
- package/dist/browser/link-interceptor.js.map +1 -0
- package/dist/browser/logging.d.ts +10 -0
- package/dist/browser/logging.d.ts.map +1 -0
- package/dist/browser/logging.js +29 -0
- package/dist/browser/logging.js.map +1 -0
- package/dist/browser/lru-cache.d.ts +17 -0
- package/dist/browser/lru-cache.d.ts.map +1 -0
- package/dist/browser/lru-cache.js +50 -0
- package/dist/browser/lru-cache.js.map +1 -0
- package/dist/browser/merge-segment-loaders.d.ts +39 -0
- package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
- package/dist/browser/merge-segment-loaders.js +102 -0
- package/dist/browser/merge-segment-loaders.js.map +1 -0
- package/dist/browser/navigation-bridge.d.ts +102 -0
- package/dist/browser/navigation-bridge.d.ts.map +1 -0
- package/dist/browser/navigation-bridge.js +708 -0
- package/dist/browser/navigation-bridge.js.map +1 -0
- package/dist/browser/navigation-client.d.ts +25 -0
- package/dist/browser/navigation-client.d.ts.map +1 -0
- package/dist/browser/navigation-client.js +157 -0
- package/dist/browser/navigation-client.js.map +1 -0
- package/dist/browser/navigation-store.d.ts +101 -0
- package/dist/browser/navigation-store.d.ts.map +1 -0
- package/dist/browser/navigation-store.js +625 -0
- package/dist/browser/navigation-store.js.map +1 -0
- package/dist/browser/partial-update.d.ts +75 -0
- package/dist/browser/partial-update.d.ts.map +1 -0
- package/dist/browser/partial-update.js +426 -0
- package/dist/browser/partial-update.js.map +1 -0
- package/dist/browser/react/Link.d.ts +86 -0
- package/dist/browser/react/Link.d.ts.map +1 -0
- package/dist/browser/react/Link.js +128 -0
- package/dist/browser/react/Link.js.map +1 -0
- package/dist/browser/react/NavigationProvider.d.ts +63 -0
- package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
- package/dist/browser/react/NavigationProvider.js +216 -0
- package/dist/browser/react/NavigationProvider.js.map +1 -0
- package/dist/browser/react/ScrollRestoration.d.ts +75 -0
- package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
- package/dist/browser/react/ScrollRestoration.js +57 -0
- package/dist/browser/react/ScrollRestoration.js.map +1 -0
- package/dist/browser/react/context.d.ts +46 -0
- package/dist/browser/react/context.d.ts.map +1 -0
- package/dist/browser/react/context.js +10 -0
- package/dist/browser/react/context.js.map +1 -0
- package/dist/browser/react/index.d.ts +11 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/index.js +22 -0
- package/dist/browser/react/index.js.map +1 -0
- package/dist/browser/react/location-state-shared.d.ts +63 -0
- package/dist/browser/react/location-state-shared.d.ts.map +1 -0
- package/dist/browser/react/location-state-shared.js +81 -0
- package/dist/browser/react/location-state-shared.js.map +1 -0
- package/dist/browser/react/location-state.d.ts +23 -0
- package/dist/browser/react/location-state.d.ts.map +1 -0
- package/dist/browser/react/location-state.js +29 -0
- package/dist/browser/react/location-state.js.map +1 -0
- package/dist/browser/react/mount-context.d.ts +24 -0
- package/dist/browser/react/mount-context.d.ts.map +1 -0
- package/dist/browser/react/mount-context.js +24 -0
- package/dist/browser/react/mount-context.js.map +1 -0
- package/dist/browser/react/use-action.d.ts +64 -0
- package/dist/browser/react/use-action.d.ts.map +1 -0
- package/dist/browser/react/use-action.js +134 -0
- package/dist/browser/react/use-action.js.map +1 -0
- package/dist/browser/react/use-client-cache.d.ts +41 -0
- package/dist/browser/react/use-client-cache.d.ts.map +1 -0
- package/dist/browser/react/use-client-cache.js +39 -0
- package/dist/browser/react/use-client-cache.js.map +1 -0
- package/dist/browser/react/use-handle.d.ts +31 -0
- package/dist/browser/react/use-handle.d.ts.map +1 -0
- package/dist/browser/react/use-handle.js +144 -0
- package/dist/browser/react/use-handle.js.map +1 -0
- package/dist/browser/react/use-href.d.ts +33 -0
- package/dist/browser/react/use-href.d.ts.map +1 -0
- package/dist/browser/react/use-href.js +39 -0
- package/dist/browser/react/use-href.js.map +1 -0
- package/dist/browser/react/use-link-status.d.ts +37 -0
- package/dist/browser/react/use-link-status.d.ts.map +1 -0
- package/dist/browser/react/use-link-status.js +99 -0
- package/dist/browser/react/use-link-status.js.map +1 -0
- package/dist/browser/react/use-mount.d.ts +25 -0
- package/dist/browser/react/use-mount.d.ts.map +1 -0
- package/dist/browser/react/use-mount.js +30 -0
- package/dist/browser/react/use-mount.js.map +1 -0
- package/dist/browser/react/use-navigation.d.ts +27 -0
- package/dist/browser/react/use-navigation.d.ts.map +1 -0
- package/dist/browser/react/use-navigation.js +87 -0
- package/dist/browser/react/use-navigation.js.map +1 -0
- package/dist/browser/react/use-segments.d.ts +38 -0
- package/dist/browser/react/use-segments.d.ts.map +1 -0
- package/dist/browser/react/use-segments.js +130 -0
- package/dist/browser/react/use-segments.js.map +1 -0
- package/dist/browser/request-controller.d.ts +26 -0
- package/dist/browser/request-controller.d.ts.map +1 -0
- package/dist/browser/request-controller.js +147 -0
- package/dist/browser/request-controller.js.map +1 -0
- package/dist/browser/rsc-router.d.ts +129 -0
- package/dist/browser/rsc-router.d.ts.map +1 -0
- package/dist/browser/rsc-router.js +195 -0
- package/dist/browser/rsc-router.js.map +1 -0
- package/dist/browser/scroll-restoration.d.ts +93 -0
- package/dist/browser/scroll-restoration.d.ts.map +1 -0
- package/dist/browser/scroll-restoration.js +321 -0
- package/dist/browser/scroll-restoration.js.map +1 -0
- package/dist/browser/segment-structure-assert.d.ts +17 -0
- package/dist/browser/segment-structure-assert.d.ts.map +1 -0
- package/dist/browser/segment-structure-assert.js +59 -0
- package/dist/browser/segment-structure-assert.js.map +1 -0
- package/dist/browser/server-action-bridge.d.ts +26 -0
- package/dist/browser/server-action-bridge.d.ts.map +1 -0
- package/dist/browser/server-action-bridge.js +668 -0
- package/dist/browser/server-action-bridge.js.map +1 -0
- package/dist/browser/shallow.d.ts +12 -0
- package/dist/browser/shallow.d.ts.map +1 -0
- package/dist/browser/shallow.js +34 -0
- package/dist/browser/shallow.js.map +1 -0
- package/dist/browser/types.d.ts +369 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
- package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-cli.test.js +237 -0
- package/dist/build/__tests__/generate-cli.test.js.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.js +119 -0
- package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.js +620 -0
- package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.js +308 -0
- package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +81 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +276 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/build/generate-route-types.d.ts +115 -0
- package/dist/build/generate-route-types.d.ts.map +1 -0
- package/dist/build/generate-route-types.js +740 -0
- package/dist/build/generate-route-types.js.map +1 -0
- package/dist/build/index.d.ts +21 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +21 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/route-trie.d.ts +71 -0
- package/dist/build/route-trie.d.ts.map +1 -0
- package/dist/build/route-trie.js +175 -0
- package/dist/build/route-trie.js.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.js +208 -0
- package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
- package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
- package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
- package/dist/cache/__tests__/document-cache.test.js +345 -0
- package/dist/cache/__tests__/document-cache.test.js.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
- package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
- package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-store.test.js +367 -0
- package/dist/cache/__tests__/memory-store.test.js.map +1 -0
- package/dist/cache/cache-scope.d.ts +102 -0
- package/dist/cache/cache-scope.d.ts.map +1 -0
- package/dist/cache/cache-scope.js +440 -0
- package/dist/cache/cache-scope.js.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
- package/dist/cache/cf/cf-cache-store.d.ts +165 -0
- package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
- package/dist/cache/cf/cf-cache-store.js +242 -0
- package/dist/cache/cf/cf-cache-store.js.map +1 -0
- package/dist/cache/cf/index.d.ts +14 -0
- package/dist/cache/cf/index.d.ts.map +1 -0
- package/dist/cache/cf/index.js +17 -0
- package/dist/cache/cf/index.js.map +1 -0
- package/dist/cache/document-cache.d.ts +64 -0
- package/dist/cache/document-cache.d.ts.map +1 -0
- package/dist/cache/document-cache.js +228 -0
- package/dist/cache/document-cache.js.map +1 -0
- package/dist/cache/index.d.ts +19 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-segment-store.d.ts +110 -0
- package/dist/cache/memory-segment-store.d.ts.map +1 -0
- package/dist/cache/memory-segment-store.js +117 -0
- package/dist/cache/memory-segment-store.js.map +1 -0
- package/dist/cache/memory-store.d.ts +41 -0
- package/dist/cache/memory-store.d.ts.map +1 -0
- package/dist/cache/memory-store.js +191 -0
- package/dist/cache/memory-store.js.map +1 -0
- package/dist/cache/types.d.ts +317 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +12 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client.d.ts +248 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +367 -0
- package/dist/client.js.map +1 -0
- package/dist/client.rsc.d.ts +26 -0
- package/dist/client.rsc.d.ts.map +1 -0
- package/dist/client.rsc.js +46 -0
- package/dist/client.rsc.js.map +1 -0
- package/dist/component-utils.d.ts +36 -0
- package/dist/component-utils.d.ts.map +1 -0
- package/dist/component-utils.js +61 -0
- package/dist/component-utils.js.map +1 -0
- package/dist/components/DefaultDocument.d.ts +13 -0
- package/dist/components/DefaultDocument.d.ts.map +1 -0
- package/dist/components/DefaultDocument.js +15 -0
- package/dist/components/DefaultDocument.js.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +157 -0
- package/dist/debug.js.map +1 -0
- package/dist/default-error-boundary.d.ts +11 -0
- package/dist/default-error-boundary.d.ts.map +1 -0
- package/dist/default-error-boundary.js +45 -0
- package/dist/default-error-boundary.js.map +1 -0
- package/dist/deps/browser.d.ts +2 -0
- package/dist/deps/browser.d.ts.map +1 -0
- package/dist/deps/browser.js +3 -0
- package/dist/deps/browser.js.map +1 -0
- package/dist/deps/html-stream-client.d.ts +2 -0
- package/dist/deps/html-stream-client.d.ts.map +1 -0
- package/dist/deps/html-stream-client.js +3 -0
- package/dist/deps/html-stream-client.js.map +1 -0
- package/dist/deps/html-stream-server.d.ts +2 -0
- package/dist/deps/html-stream-server.d.ts.map +1 -0
- package/dist/deps/html-stream-server.js +3 -0
- package/dist/deps/html-stream-server.js.map +1 -0
- package/dist/deps/rsc.d.ts +2 -0
- package/dist/deps/rsc.d.ts.map +1 -0
- package/dist/deps/rsc.js +4 -0
- package/dist/deps/rsc.js.map +1 -0
- package/dist/deps/ssr.d.ts +2 -0
- package/dist/deps/ssr.d.ts.map +1 -0
- package/dist/deps/ssr.js +3 -0
- package/dist/deps/ssr.js.map +1 -0
- package/dist/errors.d.ts +174 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +241 -0
- package/dist/errors.js.map +1 -0
- package/dist/handle.d.ts +78 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +82 -0
- package/dist/handle.js.map +1 -0
- package/dist/handles/MetaTags.d.ts +14 -0
- package/dist/handles/MetaTags.d.ts.map +1 -0
- package/dist/handles/MetaTags.js +136 -0
- package/dist/handles/MetaTags.js.map +1 -0
- package/dist/handles/index.d.ts +6 -0
- package/dist/handles/index.d.ts.map +1 -0
- package/dist/handles/index.js +6 -0
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/{src/href-context.ts → dist/href-context.d.ts} +7 -11
- package/dist/href-context.d.ts.map +1 -0
- package/dist/href-context.js +21 -0
- package/dist/href-context.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.rsc.d.ts +32 -0
- package/dist/index.rsc.d.ts.map +1 -0
- package/dist/index.rsc.js +40 -0
- package/dist/index.rsc.js.map +1 -0
- package/dist/internal-debug.d.ts +2 -0
- package/dist/internal-debug.d.ts.map +1 -0
- package/dist/internal-debug.js +5 -0
- package/dist/internal-debug.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/loader.rsc.d.ts +19 -0
- package/dist/loader.rsc.d.ts.map +1 -0
- package/dist/loader.rsc.js +99 -0
- package/dist/loader.rsc.js.map +1 -0
- package/dist/network-error-thrower.d.ts +17 -0
- package/dist/network-error-thrower.d.ts.map +1 -0
- package/dist/network-error-thrower.js +14 -0
- package/dist/network-error-thrower.js.map +1 -0
- package/dist/outlet-context.d.ts +13 -0
- package/dist/outlet-context.d.ts.map +1 -0
- package/dist/outlet-context.js +3 -0
- package/dist/outlet-context.js.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.js +148 -0
- package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
- package/dist/prerender/param-hash.d.ts +16 -0
- package/dist/prerender/param-hash.d.ts.map +1 -0
- package/dist/prerender/param-hash.js +36 -0
- package/dist/prerender/param-hash.js.map +1 -0
- package/dist/prerender/store.d.ts +38 -0
- package/dist/prerender/store.d.ts.map +1 -0
- package/dist/prerender/store.js +61 -0
- package/dist/prerender/store.js.map +1 -0
- package/dist/prerender.d.ts +66 -0
- package/dist/prerender.d.ts.map +1 -0
- package/dist/prerender.js +57 -0
- package/dist/prerender.js.map +1 -0
- package/dist/reverse.d.ts +196 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +78 -0
- package/dist/reverse.js.map +1 -0
- package/dist/root-error-boundary.d.ts +33 -0
- package/dist/root-error-boundary.d.ts.map +1 -0
- package/dist/root-error-boundary.js +165 -0
- package/dist/root-error-boundary.js.map +1 -0
- package/dist/route-content-wrapper.d.ts +46 -0
- package/dist/route-content-wrapper.d.ts.map +1 -0
- package/dist/route-content-wrapper.js +77 -0
- package/dist/route-content-wrapper.js.map +1 -0
- package/dist/route-definition.d.ts +421 -0
- package/dist/route-definition.d.ts.map +1 -0
- package/dist/route-definition.js +868 -0
- package/dist/route-definition.js.map +1 -0
- package/dist/route-map-builder.d.ts +155 -0
- package/dist/route-map-builder.d.ts.map +1 -0
- package/dist/route-map-builder.js +237 -0
- package/dist/route-map-builder.js.map +1 -0
- package/dist/route-types.d.ts +165 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +7 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router/__tests__/handler-context.test.d.ts +2 -0
- package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/handler-context.test.js +65 -0
- package/dist/router/__tests__/handler-context.test.js.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
- package/dist/router/__tests__/match-context.test.d.ts +2 -0
- package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-context.test.js +92 -0
- package/dist/router/__tests__/match-context.test.js.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.js +417 -0
- package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
- package/dist/router/__tests__/match-result.test.d.ts +2 -0
- package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-result.test.js +457 -0
- package/dist/router/__tests__/match-result.test.js.map +1 -0
- package/dist/router/__tests__/on-error.test.d.ts +2 -0
- package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
- package/dist/router/__tests__/on-error.test.js +678 -0
- package/dist/router/__tests__/on-error.test.js.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.js +629 -0
- package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
- package/dist/router/error-handling.d.ts +77 -0
- package/dist/router/error-handling.d.ts.map +1 -0
- package/dist/router/error-handling.js +202 -0
- package/dist/router/error-handling.js.map +1 -0
- package/dist/router/handler-context.d.ts +20 -0
- package/dist/router/handler-context.d.ts.map +1 -0
- package/dist/router/handler-context.js +198 -0
- package/dist/router/handler-context.js.map +1 -0
- package/dist/router/intercept-resolution.d.ts +66 -0
- package/dist/router/intercept-resolution.d.ts.map +1 -0
- package/dist/router/intercept-resolution.js +246 -0
- package/dist/router/intercept-resolution.js.map +1 -0
- package/dist/router/loader-resolution.d.ts +64 -0
- package/dist/router/loader-resolution.d.ts.map +1 -0
- package/dist/router/loader-resolution.js +284 -0
- package/dist/router/loader-resolution.js.map +1 -0
- package/dist/router/logging.d.ts +15 -0
- package/dist/router/logging.d.ts.map +1 -0
- package/dist/router/logging.js +99 -0
- package/dist/router/logging.js.map +1 -0
- package/dist/router/manifest.d.ts +22 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +181 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/match-api.d.ts +35 -0
- package/dist/router/match-api.d.ts.map +1 -0
- package/dist/router/match-api.js +406 -0
- package/dist/router/match-api.js.map +1 -0
- package/dist/router/match-context.d.ts +206 -0
- package/dist/router/match-context.d.ts.map +1 -0
- package/dist/router/match-context.js +17 -0
- package/dist/router/match-context.js.map +1 -0
- package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
- package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
- package/dist/router/match-middleware/background-revalidation.js +75 -0
- package/dist/router/match-middleware/background-revalidation.js.map +1 -0
- package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
- package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-lookup.js +257 -0
- package/dist/router/match-middleware/cache-lookup.js.map +1 -0
- package/dist/router/match-middleware/cache-store.d.ts +113 -0
- package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-store.js +108 -0
- package/dist/router/match-middleware/cache-store.js.map +1 -0
- package/dist/router/match-middleware/index.d.ts +81 -0
- package/dist/router/match-middleware/index.d.ts.map +1 -0
- package/dist/router/match-middleware/index.js +80 -0
- package/dist/router/match-middleware/index.js.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.js +134 -0
- package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
- package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
- package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/segment-resolution.js +53 -0
- package/dist/router/match-middleware/segment-resolution.js.map +1 -0
- package/dist/router/match-pipelines.d.ts +147 -0
- package/dist/router/match-pipelines.d.ts.map +1 -0
- package/dist/router/match-pipelines.js +82 -0
- package/dist/router/match-pipelines.js.map +1 -0
- package/dist/router/match-result.d.ts +126 -0
- package/dist/router/match-result.d.ts.map +1 -0
- package/dist/router/match-result.js +93 -0
- package/dist/router/match-result.js.map +1 -0
- package/dist/router/metrics.d.ts +20 -0
- package/dist/router/metrics.d.ts.map +1 -0
- package/dist/router/metrics.js +47 -0
- package/dist/router/metrics.js.map +1 -0
- package/dist/router/middleware.d.ts +249 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +434 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/middleware.test.d.ts +2 -0
- package/dist/router/middleware.test.d.ts.map +1 -0
- package/dist/router/middleware.test.js +816 -0
- package/dist/router/middleware.test.js.map +1 -0
- package/dist/router/pattern-matching.d.ts +149 -0
- package/dist/router/pattern-matching.d.ts.map +1 -0
- package/dist/router/pattern-matching.js +349 -0
- package/dist/router/pattern-matching.js.map +1 -0
- package/dist/router/revalidation.d.ts +44 -0
- package/dist/router/revalidation.d.ts.map +1 -0
- package/dist/router/revalidation.js +147 -0
- package/dist/router/revalidation.js.map +1 -0
- package/dist/router/router-context.d.ts +135 -0
- package/dist/router/router-context.d.ts.map +1 -0
- package/dist/router/router-context.js +36 -0
- package/dist/router/router-context.js.map +1 -0
- package/dist/router/segment-resolution.d.ts +127 -0
- package/dist/router/segment-resolution.d.ts.map +1 -0
- package/dist/router/segment-resolution.js +919 -0
- package/dist/router/segment-resolution.js.map +1 -0
- package/dist/router/trie-matching.d.ts +40 -0
- package/dist/router/trie-matching.d.ts.map +1 -0
- package/dist/router/trie-matching.js +127 -0
- package/dist/router/trie-matching.js.map +1 -0
- package/dist/router/types.d.ts +136 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router.d.ts +753 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.gen.d.ts +6 -0
- package/dist/router.gen.d.ts.map +1 -0
- package/dist/router.gen.js +6 -0
- package/dist/router.gen.js.map +1 -0
- package/dist/router.js +1304 -0
- package/dist/router.js.map +1 -0
- package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
- package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/rsc/__tests__/helpers.test.js +140 -0
- package/dist/rsc/__tests__/helpers.test.js.map +1 -0
- package/dist/rsc/handler.d.ts +45 -0
- package/dist/rsc/handler.d.ts.map +1 -0
- package/dist/rsc/handler.js +1172 -0
- package/dist/rsc/handler.js.map +1 -0
- package/dist/rsc/helpers.d.ts +16 -0
- package/dist/rsc/helpers.d.ts.map +1 -0
- package/dist/rsc/helpers.js +55 -0
- package/dist/rsc/helpers.js.map +1 -0
- package/dist/rsc/index.d.ts +22 -0
- package/dist/rsc/index.d.ts.map +1 -0
- package/dist/rsc/index.js +23 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/nonce.d.ts +9 -0
- package/dist/rsc/nonce.d.ts.map +1 -0
- package/dist/rsc/nonce.js +18 -0
- package/dist/rsc/nonce.js.map +1 -0
- package/dist/rsc/types.d.ts +206 -0
- package/dist/rsc/types.d.ts.map +1 -0
- package/dist/rsc/types.js +8 -0
- package/dist/rsc/types.js.map +1 -0
- package/dist/search-params.d.ts +103 -0
- package/dist/search-params.d.ts.map +1 -0
- package/dist/search-params.js +74 -0
- package/dist/search-params.js.map +1 -0
- package/dist/segment-system.d.ts +75 -0
- package/dist/segment-system.d.ts.map +1 -0
- package/dist/segment-system.js +336 -0
- package/dist/segment-system.js.map +1 -0
- package/dist/server/context.d.ts +245 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +197 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fetchable-loader-store.d.ts +18 -0
- package/dist/server/fetchable-loader-store.d.ts.map +1 -0
- package/dist/server/fetchable-loader-store.js +18 -0
- package/dist/server/fetchable-loader-store.js.map +1 -0
- package/dist/server/handle-store.d.ts +85 -0
- package/dist/server/handle-store.d.ts.map +1 -0
- package/dist/server/handle-store.js +142 -0
- package/dist/server/handle-store.js.map +1 -0
- package/dist/server/loader-registry.d.ts +55 -0
- package/dist/server/loader-registry.d.ts.map +1 -0
- package/dist/server/loader-registry.js +132 -0
- package/dist/server/loader-registry.js.map +1 -0
- package/dist/server/request-context.d.ts +226 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +290 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/root-layout.d.ts +4 -0
- package/dist/server/root-layout.d.ts.map +1 -0
- package/dist/server/root-layout.js +5 -0
- package/dist/server/root-layout.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
- package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
- package/dist/ssr/index.d.ts +98 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +158 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/static-handler.d.ts +50 -0
- package/dist/static-handler.d.ts.map +1 -0
- package/dist/static-handler.gen.d.ts +5 -0
- package/dist/static-handler.gen.d.ts.map +1 -0
- package/dist/static-handler.gen.js +5 -0
- package/dist/static-handler.gen.js.map +1 -0
- package/dist/static-handler.js +29 -0
- package/dist/static-handler.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +20 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +240 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/ThemeScript.d.ts +48 -0
- package/dist/theme/ThemeScript.d.ts.map +1 -0
- package/dist/theme/ThemeScript.js +13 -0
- package/dist/theme/ThemeScript.js.map +1 -0
- package/dist/theme/__tests__/theme.test.d.ts +2 -0
- package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
- package/dist/theme/__tests__/theme.test.js +103 -0
- package/dist/theme/__tests__/theme.test.js.map +1 -0
- package/dist/theme/constants.d.ts +29 -0
- package/dist/theme/constants.d.ts.map +1 -0
- package/dist/theme/constants.js +48 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +31 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +36 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-context.d.ts +40 -0
- package/dist/theme/theme-context.d.ts.map +1 -0
- package/dist/theme/theme-context.js +60 -0
- package/dist/theme/theme-context.js.map +1 -0
- package/dist/theme/theme-script.d.ts +27 -0
- package/dist/theme/theme-script.d.ts.map +1 -0
- package/dist/theme/theme-script.js +147 -0
- package/dist/theme/theme-script.js.map +1 -0
- package/dist/theme/types.d.ts +163 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +11 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/theme/use-theme.d.ts +12 -0
- package/dist/theme/use-theme.d.ts.map +1 -0
- package/dist/theme/use-theme.js +40 -0
- package/dist/theme/use-theme.js.map +1 -0
- package/dist/types.d.ts +1479 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/urls.d.ts +441 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.gen.d.ts +8 -0
- package/dist/urls.gen.d.ts.map +1 -0
- package/dist/urls.gen.js +8 -0
- package/dist/urls.gen.js.map +1 -0
- package/dist/urls.js +443 -0
- package/dist/urls.js.map +1 -0
- package/dist/use-loader.d.ts +127 -0
- package/dist/use-loader.d.ts.map +1 -0
- package/dist/use-loader.js +237 -0
- package/dist/use-loader.js.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
- package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.js +39 -0
- package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
- package/dist/vite/ast-handler-extract.d.ts +49 -0
- package/dist/vite/ast-handler-extract.d.ts.map +1 -0
- package/dist/vite/ast-handler-extract.js +249 -0
- package/dist/vite/ast-handler-extract.js.map +1 -0
- package/dist/vite/expose-action-id.d.ts +19 -0
- package/dist/vite/expose-action-id.d.ts.map +1 -0
- package/dist/vite/expose-action-id.js +250 -0
- package/dist/vite/expose-action-id.js.map +1 -0
- package/dist/vite/expose-id-utils.d.ts +69 -0
- package/dist/vite/expose-id-utils.d.ts.map +1 -0
- package/dist/vite/expose-id-utils.js +289 -0
- package/dist/vite/expose-id-utils.js.map +1 -0
- package/dist/vite/expose-internal-ids.d.ts +22 -0
- package/dist/vite/expose-internal-ids.d.ts.map +1 -0
- package/dist/vite/expose-internal-ids.js +886 -0
- package/dist/vite/expose-internal-ids.js.map +1 -0
- package/dist/vite/index.d.ts +149 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +883 -444
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/index.named-routes.gen.ts +103 -0
- package/dist/vite/package-resolution.d.ts +43 -0
- package/dist/vite/package-resolution.d.ts.map +1 -0
- package/dist/vite/package-resolution.js +112 -0
- package/dist/vite/package-resolution.js.map +1 -0
- package/dist/vite/virtual-entries.d.ts +25 -0
- package/dist/vite/virtual-entries.d.ts.map +1 -0
- package/dist/vite/virtual-entries.js +110 -0
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +17 -16
- package/skills/breadcrumbs/SKILL.md +250 -0
- package/skills/cache-guide/SKILL.md +32 -0
- package/skills/caching/SKILL.md +49 -8
- package/skills/document-cache/SKILL.md +2 -2
- package/skills/hooks/SKILL.md +34 -32
- package/skills/host-router/SKILL.md +218 -0
- package/skills/intercept/SKILL.md +79 -0
- package/skills/layout/SKILL.md +62 -2
- package/skills/links/SKILL.md +3 -1
- package/skills/loader/SKILL.md +166 -23
- package/skills/middleware/SKILL.md +83 -0
- package/skills/parallel/SKILL.md +183 -2
- package/skills/prerender/SKILL.md +189 -19
- package/skills/rango/SKILL.md +0 -1
- package/skills/route/SKILL.md +76 -5
- package/skills/router-setup/SKILL.md +172 -5
- package/skills/typesafety/SKILL.md +35 -23
- package/src/__internal.ts +93 -1
- package/src/bin/rango.ts +56 -19
- package/src/browser/action-coordinator.ts +97 -0
- package/src/browser/app-version.ts +14 -0
- package/src/browser/event-controller.ts +30 -27
- package/src/browser/history-state.ts +80 -0
- package/src/browser/intercept-utils.ts +1 -1
- package/src/browser/link-interceptor.ts +4 -3
- package/src/browser/merge-segment-loaders.ts +9 -2
- package/src/browser/navigation-bridge.ts +160 -31
- package/src/browser/navigation-client.ts +141 -88
- package/src/browser/navigation-store.ts +44 -39
- package/src/browser/navigation-transaction.ts +55 -214
- package/src/browser/partial-update.ts +181 -164
- package/src/browser/prefetch/cache.ts +206 -0
- package/src/browser/prefetch/fetch.ts +150 -0
- package/src/browser/prefetch/policy.ts +48 -0
- package/src/browser/prefetch/queue.ts +160 -0
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/react/Link.tsx +97 -36
- package/src/browser/react/NavigationProvider.tsx +49 -5
- package/src/browser/react/context.ts +7 -2
- package/src/browser/react/index.ts +2 -6
- package/src/browser/react/location-state-shared.ts +1 -1
- package/src/browser/react/location-state.ts +2 -0
- package/src/browser/react/nonce-context.ts +23 -0
- package/src/browser/react/use-action.ts +9 -1
- package/src/browser/react/use-handle.ts +3 -25
- package/src/browser/react/use-params.ts +2 -4
- package/src/browser/react/use-pathname.ts +2 -3
- package/src/browser/react/use-router.ts +22 -9
- package/src/browser/react/use-search-params.ts +2 -1
- package/src/browser/react/use-segments.ts +7 -60
- package/src/browser/response-adapter.ts +73 -0
- package/src/browser/rsc-router.tsx +154 -64
- package/src/browser/scroll-restoration.ts +37 -37
- package/src/browser/segment-reconciler.ts +6 -1
- package/src/browser/server-action-bridge.ts +463 -426
- package/src/browser/types.ts +61 -36
- package/src/browser/validate-redirect-origin.ts +29 -0
- package/src/build/generate-manifest.ts +8 -0
- package/src/build/generate-route-types.ts +7 -0
- package/src/build/route-trie.ts +19 -3
- package/src/build/route-types/codegen.ts +13 -4
- package/src/build/route-types/include-resolution.ts +21 -1
- package/src/build/route-types/per-module-writer.ts +15 -3
- package/src/build/route-types/router-processing.ts +391 -90
- package/src/build/runtime-discovery.ts +13 -1
- package/src/cache/background-task.ts +34 -0
- package/src/cache/cache-key-utils.ts +44 -0
- package/src/cache/cache-policy.ts +125 -0
- package/src/cache/cache-runtime.ts +136 -96
- package/src/cache/cache-scope.ts +119 -80
- package/src/cache/cf/cf-cache-store.ts +462 -15
- package/src/cache/cf/index.ts +5 -1
- package/src/cache/document-cache.ts +88 -53
- package/src/cache/handle-capture.ts +81 -0
- package/src/cache/index.ts +1 -0
- package/src/cache/memory-segment-store.ts +18 -7
- package/src/cache/profile-registry.ts +43 -8
- package/src/cache/read-through-swr.ts +134 -0
- package/src/cache/segment-codec.ts +101 -112
- package/src/cache/taint.ts +81 -0
- package/src/client.rsc.tsx +2 -1
- package/src/client.tsx +54 -76
- package/src/context-var.ts +72 -2
- package/src/debug.ts +2 -2
- package/src/errors.ts +6 -1
- package/src/handle.ts +1 -1
- package/src/handles/MetaTags.tsx +5 -2
- package/src/handles/breadcrumbs.ts +66 -0
- package/src/handles/index.ts +1 -0
- package/src/host/cookie-handler.ts +8 -3
- package/src/host/index.ts +0 -3
- package/src/host/router.ts +14 -1
- package/src/href-client.ts +3 -1
- package/src/index.rsc.ts +24 -23
- package/src/index.ts +45 -52
- package/src/loader.rsc.ts +12 -4
- package/src/loader.ts +8 -0
- package/src/prerender/store.ts +60 -18
- package/src/prerender.ts +76 -18
- package/src/reverse.ts +11 -7
- package/src/root-error-boundary.tsx +30 -26
- package/src/route-definition/dsl-helpers.ts +41 -13
- package/src/route-definition/helpers-types.ts +6 -5
- package/src/route-definition/index.ts +0 -3
- package/src/route-definition/redirect.ts +24 -4
- package/src/route-map-builder.ts +45 -3
- package/src/route-name.ts +53 -0
- package/src/route-types.ts +7 -0
- package/src/router/content-negotiation.ts +1 -1
- package/src/router/debug-manifest.ts +16 -3
- package/src/router/find-match.ts +4 -2
- package/src/router/handler-context.ts +159 -34
- package/src/router/intercept-resolution.ts +17 -8
- package/src/router/lazy-includes.ts +8 -1
- package/src/router/loader-resolution.ts +11 -3
- package/src/router/logging.ts +104 -4
- package/src/router/manifest.ts +45 -7
- package/src/router/match-api.ts +62 -8
- package/src/router/match-context.ts +3 -0
- package/src/router/match-handlers.ts +185 -11
- package/src/router/match-middleware/background-revalidation.ts +94 -86
- package/src/router/match-middleware/cache-lookup.ts +138 -13
- package/src/router/match-middleware/cache-store.ts +55 -10
- package/src/router/match-middleware/intercept-resolution.ts +9 -7
- package/src/router/match-middleware/segment-resolution.ts +8 -5
- package/src/router/match-pipelines.ts +8 -43
- package/src/router/match-result.ts +22 -15
- package/src/router/metrics.ts +238 -13
- package/src/router/middleware-types.ts +60 -12
- package/src/router/middleware.ts +214 -42
- package/src/router/pattern-matching.ts +61 -10
- package/src/router/prerender-match.ts +40 -8
- package/src/router/preview-match.ts +7 -1
- package/src/router/revalidation.ts +87 -8
- package/src/router/router-context.ts +20 -0
- package/src/router/router-interfaces.ts +73 -5
- package/src/router/router-options.ts +250 -19
- package/src/router/segment-resolution/fresh.ts +277 -45
- package/src/router/segment-resolution/helpers.ts +49 -25
- package/src/router/segment-resolution/loader-cache.ts +38 -146
- package/src/router/segment-resolution/revalidation.ts +619 -275
- package/src/router/segment-wrappers.ts +5 -0
- package/src/router/telemetry-otel.ts +299 -0
- package/src/router/telemetry.ts +300 -0
- package/src/router/timeout.ts +148 -0
- package/src/router/trie-matching.ts +20 -2
- package/src/router/types.ts +8 -1
- package/src/router.ts +230 -25
- package/src/rsc/handler-context.ts +11 -0
- package/src/rsc/handler.ts +492 -96
- package/src/rsc/helpers.ts +25 -16
- package/src/rsc/index.ts +0 -20
- package/src/rsc/loader-fetch.ts +84 -42
- package/src/rsc/manifest-init.ts +5 -1
- package/src/rsc/origin-guard.ts +141 -0
- package/src/rsc/progressive-enhancement.ts +249 -19
- package/src/rsc/response-route-handler.ts +37 -26
- package/src/rsc/rsc-rendering.ts +40 -41
- package/src/rsc/runtime-warnings.ts +42 -0
- package/src/rsc/server-action.ts +150 -68
- package/src/rsc/ssr-setup.ts +128 -0
- package/src/rsc/types.ts +18 -1
- package/src/search-params.ts +38 -23
- package/src/segment-system.tsx +140 -4
- package/src/server/context.ts +187 -20
- package/src/server/fetchable-loader-store.ts +11 -6
- package/src/server/handle-store.ts +66 -9
- package/src/server/loader-registry.ts +20 -54
- package/src/server/request-context.ts +188 -41
- package/src/server.ts +6 -0
- package/src/ssr/index.tsx +66 -26
- package/src/static-handler.ts +7 -0
- package/src/theme/ThemeProvider.tsx +6 -1
- package/src/theme/index.ts +4 -18
- package/src/theme/theme-context.ts +1 -28
- package/src/theme/theme-script.ts +2 -1
- package/src/types/cache-types.ts +9 -4
- package/src/types/error-types.ts +3 -0
- package/src/types/global-namespace.ts +9 -0
- package/src/types/handler-context.ts +167 -55
- package/src/types/loader-types.ts +11 -5
- package/src/types/route-config.ts +17 -8
- package/src/types/route-entry.ts +35 -0
- package/src/types/segments.ts +2 -5
- package/src/urls/include-helper.ts +49 -8
- package/src/urls/index.ts +1 -0
- package/src/urls/path-helper-types.ts +30 -12
- package/src/urls/path-helper.ts +18 -3
- package/src/urls/pattern-types.ts +33 -1
- package/src/urls/response-types.ts +27 -2
- package/src/urls/type-extraction.ts +23 -15
- package/src/use-loader.tsx +12 -4
- package/src/vite/discovery/bundle-postprocess.ts +32 -52
- package/src/vite/discovery/discover-routers.ts +53 -23
- package/src/vite/discovery/prerender-collection.ts +58 -41
- package/src/vite/discovery/route-types-writer.ts +7 -7
- package/src/vite/discovery/state.ts +4 -9
- package/src/vite/discovery/virtual-module-codegen.ts +5 -2
- package/src/vite/index.ts +4 -3
- package/src/vite/plugin-types.ts +0 -83
- package/src/vite/plugins/client-ref-dedup.ts +115 -0
- package/src/vite/plugins/client-ref-hashing.ts +3 -3
- package/src/vite/plugins/expose-action-id.ts +1 -3
- package/src/vite/plugins/performance-tracks.ts +88 -0
- package/src/vite/plugins/refresh-cmd.ts +65 -0
- package/src/vite/plugins/use-cache-transform.ts +91 -3
- package/src/vite/plugins/version-plugin.ts +13 -1
- package/src/vite/rango.ts +172 -210
- package/src/vite/router-discovery.ts +115 -44
- package/src/vite/utils/banner.ts +3 -3
- package/src/vite/utils/prerender-utils.ts +81 -0
- package/src/vite/utils/shared-utils.ts +6 -3
- package/skills/testing/SKILL.md +0 -226
- package/src/browser/prefetch-cache.ts +0 -48
- package/src/browser/prefetch-fetch.ts +0 -109
- package/src/browser/prefetch-queue.ts +0 -81
- package/src/browser/request-controller.ts +0 -164
- package/src/route-definition/route-function.ts +0 -119
- package/src/router.gen.ts +0 -6
- package/src/static-handler.gen.ts +0 -5
- package/src/urls.gen.ts +0 -8
- /package/src/browser/{prefetch-observer.ts → prefetch/observer.ts} +0 -0
|
@@ -18,6 +18,15 @@ import { hasActiveIntercept as hasActiveInterceptSlots } from "./intercept-utils
|
|
|
18
18
|
import type { BoundTransaction } from "./navigation-transaction.js";
|
|
19
19
|
import { ServerRedirect } from "../errors.js";
|
|
20
20
|
import { debugLog } from "./logging.js";
|
|
21
|
+
import { validateRedirectOrigin } from "./validate-redirect-origin.js";
|
|
22
|
+
import type { NavigationUpdate } from "./types.js";
|
|
23
|
+
|
|
24
|
+
/** Build a scroll payload from the commit's scroll option */
|
|
25
|
+
function toScrollPayload(
|
|
26
|
+
scroll: boolean | undefined,
|
|
27
|
+
): NonNullable<NavigationUpdate["scroll"]> {
|
|
28
|
+
return { enabled: scroll !== false ? scroll : false };
|
|
29
|
+
}
|
|
21
30
|
|
|
22
31
|
/**
|
|
23
32
|
* Configuration for creating a partial updater
|
|
@@ -30,8 +39,8 @@ export interface PartialUpdateConfig {
|
|
|
30
39
|
segments: ResolvedSegment[],
|
|
31
40
|
options?: RenderSegmentsOptions,
|
|
32
41
|
) => Promise<ReactNode> | ReactNode;
|
|
33
|
-
/** RSC version
|
|
34
|
-
|
|
42
|
+
/** RSC version getter — returns the current version (may change after HMR) */
|
|
43
|
+
getVersion?: () => string | undefined;
|
|
35
44
|
}
|
|
36
45
|
|
|
37
46
|
/**
|
|
@@ -51,9 +60,25 @@ export interface CommitOverrides {
|
|
|
51
60
|
}
|
|
52
61
|
|
|
53
62
|
/**
|
|
54
|
-
*
|
|
55
|
-
* Transaction encapsulates all store mutations for atomic commit
|
|
63
|
+
* Discriminated update mode for partial updates.
|
|
56
64
|
*/
|
|
65
|
+
export type UpdateMode =
|
|
66
|
+
| {
|
|
67
|
+
type: "navigate";
|
|
68
|
+
/** Cached segments for the target URL. When provided, these are used to build
|
|
69
|
+
* the segment map instead of the current page's segments. This ensures consistency
|
|
70
|
+
* when we send cached segment IDs to the server - if the server returns empty diff,
|
|
71
|
+
* we use the same segments we told the server we have. */
|
|
72
|
+
targetCacheSegments?: ResolvedSegment[];
|
|
73
|
+
/** Cached handle data for the target URL. When server returns empty diff and we're
|
|
74
|
+
* rendering from cache, this is passed to the UI to restore breadcrumbs etc. */
|
|
75
|
+
targetCacheHandleData?: Record<string, Record<string, unknown[]>>;
|
|
76
|
+
/** Source URL for intercept restore (popstate cache miss) */
|
|
77
|
+
interceptSourceUrl?: string;
|
|
78
|
+
}
|
|
79
|
+
| { type: "leave-intercept" }
|
|
80
|
+
| { type: "stale-revalidation"; interceptSourceUrl?: string }
|
|
81
|
+
| { type: "action"; interceptSourceUrl?: string };
|
|
57
82
|
|
|
58
83
|
/**
|
|
59
84
|
* Type for the fetchPartialUpdate function
|
|
@@ -63,24 +88,9 @@ export type PartialUpdater = (
|
|
|
63
88
|
segmentIds: string[] | undefined,
|
|
64
89
|
isRetry: boolean,
|
|
65
90
|
signal: AbortSignal | undefined,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
staleRevalidation?: boolean;
|
|
70
|
-
interceptSourceUrl?: string;
|
|
71
|
-
/** Cached segments for the target URL. When provided, these are used to build
|
|
72
|
-
* the segment map instead of the current page's segments. This ensures consistency
|
|
73
|
-
* when we send cached segment IDs to the server - if the server returns empty diff,
|
|
74
|
-
* we use the same segments we told the server we have. */
|
|
75
|
-
targetCacheSegments?: ResolvedSegment[];
|
|
76
|
-
/** Cached handle data for the target URL. When server returns empty diff and we're
|
|
77
|
-
* rendering from cache, this is passed to the UI to restore breadcrumbs etc. */
|
|
78
|
-
targetCacheHandleData?: Record<string, Record<string, unknown[]>>;
|
|
79
|
-
/** When true, we're leaving an intercept state - don't use current segment IDs
|
|
80
|
-
* as fallback and force a fresh render from server */
|
|
81
|
-
leavingIntercept?: boolean;
|
|
82
|
-
},
|
|
83
|
-
) => Promise<Promise<void>>;
|
|
91
|
+
tx: BoundTransaction,
|
|
92
|
+
mode?: UpdateMode,
|
|
93
|
+
) => Promise<void>;
|
|
84
94
|
|
|
85
95
|
/**
|
|
86
96
|
* Create a partial updater for fetching and applying RSC partial updates
|
|
@@ -90,23 +100,17 @@ export type PartialUpdater = (
|
|
|
90
100
|
*
|
|
91
101
|
* @param config - Partial update configuration
|
|
92
102
|
* @returns fetchPartialUpdate function
|
|
93
|
-
*
|
|
94
|
-
* @example
|
|
95
|
-
* ```typescript
|
|
96
|
-
* const fetchPartialUpdate = createPartialUpdater({
|
|
97
|
-
* store,
|
|
98
|
-
* client,
|
|
99
|
-
* onUpdate: (update) => store.emit(update),
|
|
100
|
-
* renderSegments,
|
|
101
|
-
* });
|
|
102
|
-
*
|
|
103
|
-
* await fetchPartialUpdate('/new-page');
|
|
104
|
-
* ```
|
|
105
103
|
*/
|
|
106
104
|
export function createPartialUpdater(
|
|
107
105
|
config: PartialUpdateConfig,
|
|
108
106
|
): PartialUpdater {
|
|
109
|
-
const {
|
|
107
|
+
const {
|
|
108
|
+
store,
|
|
109
|
+
client,
|
|
110
|
+
onUpdate,
|
|
111
|
+
renderSegments,
|
|
112
|
+
getVersion = () => undefined,
|
|
113
|
+
} = config;
|
|
110
114
|
|
|
111
115
|
/**
|
|
112
116
|
* Get current page's cached segments as an array
|
|
@@ -119,7 +123,6 @@ export function createPartialUpdater(
|
|
|
119
123
|
|
|
120
124
|
/**
|
|
121
125
|
* Fetch partial update and trigger UI update
|
|
122
|
-
* Returns a promise that resolves when the RSC stream is fully consumed
|
|
123
126
|
*
|
|
124
127
|
* @param tx - Transaction for committing segment state (required)
|
|
125
128
|
* @param signal - AbortSignal to check if navigation is stale (not for aborting fetch)
|
|
@@ -130,39 +133,26 @@ export function createPartialUpdater(
|
|
|
130
133
|
isRetry: boolean,
|
|
131
134
|
signal: AbortSignal | undefined,
|
|
132
135
|
tx: BoundTransaction,
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
staleRevalidation?: boolean;
|
|
136
|
-
interceptSourceUrl?: string;
|
|
137
|
-
targetCacheSegments?: ResolvedSegment[];
|
|
138
|
-
targetCacheHandleData?: Record<string, Record<string, unknown[]>>;
|
|
139
|
-
leavingIntercept?: boolean;
|
|
140
|
-
},
|
|
141
|
-
): Promise<Promise<void>> {
|
|
142
|
-
const {
|
|
143
|
-
isAction = false,
|
|
144
|
-
staleRevalidation = false,
|
|
145
|
-
interceptSourceUrl,
|
|
146
|
-
targetCacheSegments,
|
|
147
|
-
targetCacheHandleData,
|
|
148
|
-
leavingIntercept = false,
|
|
149
|
-
} = options || {};
|
|
136
|
+
mode: UpdateMode = { type: "navigate" },
|
|
137
|
+
): Promise<void> {
|
|
150
138
|
const segmentState = store.getSegmentState();
|
|
151
139
|
const url = targetUrl || window.location.href;
|
|
152
140
|
|
|
153
141
|
// Capture history key at start for stale revalidation consistency check
|
|
154
142
|
const historyKeyAtStart = store.getHistoryKey();
|
|
155
143
|
|
|
156
|
-
//
|
|
157
|
-
|
|
144
|
+
// Derive interceptSourceUrl from modes that carry it
|
|
145
|
+
const interceptSourceUrl =
|
|
146
|
+
mode.type === "stale-revalidation" ||
|
|
147
|
+
mode.type === "action" ||
|
|
148
|
+
mode.type === "navigate"
|
|
149
|
+
? mode.interceptSourceUrl
|
|
150
|
+
: undefined;
|
|
151
|
+
|
|
152
|
+
// When leaving intercept, filter out intercept-specific segments
|
|
158
153
|
let segments: string[];
|
|
159
|
-
if (
|
|
160
|
-
// When leaving intercept, only send segments that aren't intercept-specific
|
|
161
|
-
// The server will return the non-intercept version of the route
|
|
154
|
+
if (mode.type === "leave-intercept") {
|
|
162
155
|
const currentSegments = segmentIds ?? segmentState.currentSegmentIds;
|
|
163
|
-
// Use cached segment metadata (namespace) to identify intercept segments.
|
|
164
|
-
// Only intercept segments have namespace starting with "intercept:" —
|
|
165
|
-
// regular parallel segments like @sidebar are preserved.
|
|
166
156
|
const currentCached = getCurrentCachedSegments();
|
|
167
157
|
const interceptIds = new Set(
|
|
168
158
|
currentCached
|
|
@@ -178,7 +168,6 @@ export function createPartialUpdater(
|
|
|
178
168
|
}
|
|
179
169
|
|
|
180
170
|
// For intercept revalidation, use the intercept source URL as previousUrl
|
|
181
|
-
// This tells the server the route should be treated as an intercept
|
|
182
171
|
const previousUrl =
|
|
183
172
|
interceptSourceUrl || tx.currentUrl || segmentState.currentUrl;
|
|
184
173
|
|
|
@@ -191,36 +180,32 @@ export function createPartialUpdater(
|
|
|
191
180
|
}
|
|
192
181
|
|
|
193
182
|
// Get cached segments for merging with server diff.
|
|
194
|
-
// When
|
|
195
|
-
// to ensure consistency - we use the same segments we told the server we have.
|
|
183
|
+
// When navigating with targetCacheSegments, use those for consistency.
|
|
196
184
|
// Otherwise fall back to current page's segments (for same-route revalidation).
|
|
185
|
+
const targetCache =
|
|
186
|
+
mode.type === "navigate" ? mode.targetCacheSegments : undefined;
|
|
197
187
|
const cachedSegs =
|
|
198
|
-
|
|
199
|
-
?
|
|
188
|
+
targetCache && targetCache.length > 0
|
|
189
|
+
? targetCache
|
|
200
190
|
: getCurrentCachedSegments();
|
|
201
|
-
|
|
202
|
-
// The token is ended when the stream completes
|
|
203
|
-
const streamingToken = tx.startStreaming();
|
|
191
|
+
|
|
204
192
|
// Fetch partial payload (no abort signal - RSC doesn't support it well)
|
|
205
|
-
// Wrapped in try/catch to ensure streamingToken.end() is called if fetch throws,
|
|
206
|
-
// preventing isStreaming from being permanently stuck as true.
|
|
207
193
|
let fetchResult: Awaited<ReturnType<NavigationClient["fetchPartial"]>>;
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}
|
|
194
|
+
fetchResult = await client.fetchPartial({
|
|
195
|
+
targetUrl: url,
|
|
196
|
+
segmentIds: segments,
|
|
197
|
+
previousUrl,
|
|
198
|
+
// Mark stale when explicitly requested OR when no segments are sent
|
|
199
|
+
// (action redirect sends empty segments for a fresh render).
|
|
200
|
+
staleRevalidation:
|
|
201
|
+
mode.type === "stale-revalidation" || segments.length === 0,
|
|
202
|
+
version: getVersion(),
|
|
203
|
+
routerId: store.getRouterId?.(),
|
|
204
|
+
});
|
|
205
|
+
// Mark navigation as streaming (response received, now parsing RSC).
|
|
206
|
+
// Called after fetchPartial so pendingUrl stays set during the network wait,
|
|
207
|
+
// allowing useLinkStatus to show per-link pending indicators.
|
|
208
|
+
const streamingToken = tx.startStreaming();
|
|
224
209
|
const { payload, streamComplete: rawStreamComplete } = fetchResult;
|
|
225
210
|
debugLog("payload.metadata", payload.metadata);
|
|
226
211
|
|
|
@@ -228,17 +213,35 @@ export function createPartialUpdater(
|
|
|
228
213
|
streamingToken.end();
|
|
229
214
|
});
|
|
230
215
|
|
|
231
|
-
//
|
|
232
|
-
// a
|
|
233
|
-
//
|
|
234
|
-
//
|
|
235
|
-
|
|
216
|
+
// Detect app switch: if routerId changed, the navigation crossed into
|
|
217
|
+
// a different router (e.g., via host router path mount). Downgrade
|
|
218
|
+
// partial to full so the entire tree is replaced without reconciliation
|
|
219
|
+
// against stale segments from the previous app.
|
|
220
|
+
if (payload.metadata?.routerId) {
|
|
221
|
+
const prevRouterId = store.getRouterId?.();
|
|
222
|
+
if (prevRouterId && prevRouterId !== payload.metadata.routerId) {
|
|
223
|
+
debugLog(
|
|
224
|
+
`[Browser] App switch detected (${prevRouterId} → ${payload.metadata.routerId}), forcing full update`,
|
|
225
|
+
);
|
|
226
|
+
payload.metadata.isPartial = false;
|
|
227
|
+
}
|
|
228
|
+
store.setRouterId?.(payload.metadata.routerId);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Handle server-side redirect with state
|
|
236
232
|
if (payload.metadata?.redirect) {
|
|
237
233
|
if (signal?.aborted) {
|
|
238
|
-
|
|
239
|
-
return
|
|
234
|
+
debugLog("[Browser] Ignoring stale redirect (aborted)");
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
const redirectUrl = validateRedirectOrigin(
|
|
238
|
+
payload.metadata.redirect.url,
|
|
239
|
+
window.location.origin,
|
|
240
|
+
);
|
|
241
|
+
if (!redirectUrl) {
|
|
242
|
+
debugLog("[Browser] Ignoring blocked redirect payload");
|
|
243
|
+
return;
|
|
240
244
|
}
|
|
241
|
-
const { url: redirectUrl } = payload.metadata.redirect;
|
|
242
245
|
const serverState = payload.metadata.locationState;
|
|
243
246
|
throw new ServerRedirect(redirectUrl, serverState);
|
|
244
247
|
}
|
|
@@ -249,15 +252,13 @@ export function createPartialUpdater(
|
|
|
249
252
|
// Check if this navigation is stale (a newer one started)
|
|
250
253
|
if (signal?.aborted) {
|
|
251
254
|
debugLog("[Browser] Ignoring stale navigation (aborted)");
|
|
252
|
-
return
|
|
255
|
+
return;
|
|
253
256
|
}
|
|
254
257
|
|
|
255
258
|
debugLog(`[Browser] Partial update - matched: ${matched?.join(", ")}`);
|
|
256
259
|
debugLog(`[Browser] Diff: ${diff?.join(", ")}`);
|
|
257
260
|
|
|
258
261
|
// If diff is empty, nothing changed on server side.
|
|
259
|
-
// However, if we're navigating with targetCacheSegments (to a different route),
|
|
260
|
-
// we still need to render those segments since the UI is showing the old route.
|
|
261
262
|
if (!diff || diff.length === 0) {
|
|
262
263
|
const matchedIds = matched || [];
|
|
263
264
|
const cacheMap = new Map(cachedSegs.map((s) => [s.id, s]));
|
|
@@ -266,8 +267,7 @@ export function createPartialUpdater(
|
|
|
266
267
|
.filter(Boolean) as ResolvedSegment[];
|
|
267
268
|
|
|
268
269
|
// When navigating with cached segments to a different route, render them.
|
|
269
|
-
|
|
270
|
-
if (targetCacheSegments && targetCacheSegments.length > 0) {
|
|
270
|
+
if (mode.type === "navigate" && targetCache && targetCache.length > 0) {
|
|
271
271
|
debugLog(
|
|
272
272
|
"[Browser] No diff but navigating with cached segments - rendering target route",
|
|
273
273
|
);
|
|
@@ -276,21 +276,35 @@ export function createPartialUpdater(
|
|
|
276
276
|
forceAwait: true,
|
|
277
277
|
});
|
|
278
278
|
|
|
279
|
-
tx.commit(
|
|
279
|
+
const { scroll: commitScroll } = tx.commit(
|
|
280
|
+
matchedIds,
|
|
281
|
+
existingSegments,
|
|
282
|
+
);
|
|
283
|
+
|
|
284
|
+
// tx.commit() cached the source page's handleData because
|
|
285
|
+
// eventController hasn't been updated yet. Overwrite with the
|
|
286
|
+
// correct cached handleData to prevent cache corruption on
|
|
287
|
+
// subsequent navigations to this same URL.
|
|
288
|
+
if (mode.targetCacheHandleData) {
|
|
289
|
+
store.updateCacheHandleData(
|
|
290
|
+
store.getHistoryKey(),
|
|
291
|
+
mode.targetCacheHandleData,
|
|
292
|
+
);
|
|
293
|
+
}
|
|
280
294
|
|
|
281
295
|
// Include cachedHandleData in metadata so NavigationProvider can restore
|
|
282
296
|
// breadcrumbs and other handle data from cache.
|
|
283
|
-
//
|
|
297
|
+
// Remove `handles` from metadata to prevent NavigationProvider from
|
|
284
298
|
// processing an empty handles stream, which would clear the cached breadcrumbs.
|
|
285
|
-
// When rendering from cache with empty diff, we want to use cachedHandleData instead.
|
|
286
299
|
const { handles: _unusedHandles, ...metadataWithoutHandles } =
|
|
287
300
|
payload.metadata!;
|
|
288
301
|
const cachedUpdate = {
|
|
289
302
|
root: newTree,
|
|
290
303
|
metadata: {
|
|
291
304
|
...metadataWithoutHandles,
|
|
292
|
-
cachedHandleData: targetCacheHandleData,
|
|
305
|
+
cachedHandleData: mode.targetCacheHandleData,
|
|
293
306
|
},
|
|
307
|
+
scroll: toScrollPayload(commitScroll),
|
|
294
308
|
};
|
|
295
309
|
|
|
296
310
|
const cachedHasTransition = existingSegments.some(
|
|
@@ -308,13 +322,11 @@ export function createPartialUpdater(
|
|
|
308
322
|
}
|
|
309
323
|
|
|
310
324
|
debugLog("[Browser] Navigation complete (rendered from cache)");
|
|
311
|
-
return
|
|
325
|
+
return;
|
|
312
326
|
}
|
|
313
327
|
|
|
314
328
|
// When leaving intercept, force re-render even with empty diff
|
|
315
|
-
|
|
316
|
-
// to remove the modal from the UI
|
|
317
|
-
if (leavingIntercept) {
|
|
329
|
+
if (mode.type === "leave-intercept") {
|
|
318
330
|
debugLog(
|
|
319
331
|
"[Browser] Leaving intercept - forcing re-render to remove modal",
|
|
320
332
|
);
|
|
@@ -323,15 +335,19 @@ export function createPartialUpdater(
|
|
|
323
335
|
forceAwait: true,
|
|
324
336
|
});
|
|
325
337
|
|
|
326
|
-
tx.commit(
|
|
338
|
+
const { scroll: leaveScroll } = tx.commit(
|
|
339
|
+
matchedIds,
|
|
340
|
+
existingSegments,
|
|
341
|
+
);
|
|
327
342
|
|
|
328
343
|
onUpdate({
|
|
329
344
|
root: newTree,
|
|
330
345
|
metadata: payload.metadata,
|
|
346
|
+
scroll: toScrollPayload(leaveScroll),
|
|
331
347
|
});
|
|
332
348
|
|
|
333
349
|
debugLog("[Browser] Navigation complete (left intercept)");
|
|
334
|
-
return
|
|
350
|
+
return;
|
|
335
351
|
}
|
|
336
352
|
|
|
337
353
|
// Same route revalidation with no changes - skip UI update
|
|
@@ -340,13 +356,15 @@ export function createPartialUpdater(
|
|
|
340
356
|
);
|
|
341
357
|
tx.commit(matchedIds, existingSegments);
|
|
342
358
|
debugLog("[Browser] Navigation complete (no re-render)");
|
|
343
|
-
return
|
|
359
|
+
return;
|
|
344
360
|
}
|
|
345
361
|
|
|
346
362
|
// Reconcile server segments with cached segments (single source of truth)
|
|
347
363
|
const matchedIds = matched || [];
|
|
348
364
|
const actor: ReconcileActor =
|
|
349
|
-
|
|
365
|
+
mode.type === "stale-revalidation" || mode.type === "action"
|
|
366
|
+
? "stale-revalidation"
|
|
367
|
+
: "navigation";
|
|
350
368
|
|
|
351
369
|
const reconciled = reconcileSegments({
|
|
352
370
|
actor,
|
|
@@ -376,31 +394,28 @@ export function createPartialUpdater(
|
|
|
376
394
|
debugLog(
|
|
377
395
|
"[Browser] Ignoring stale navigation (aborted during HMR retry)",
|
|
378
396
|
);
|
|
379
|
-
return
|
|
397
|
+
return;
|
|
380
398
|
}
|
|
381
|
-
if (
|
|
382
|
-
return
|
|
399
|
+
if (mode.type === "action") {
|
|
400
|
+
return;
|
|
383
401
|
}
|
|
384
402
|
console.warn(
|
|
385
403
|
`[Browser] HMR detected: Missing ${missingCount} segments. Refetching all...`,
|
|
386
404
|
);
|
|
387
405
|
|
|
388
406
|
// Refetch with empty segments = server sends everything
|
|
389
|
-
return fetchPartialUpdate(url, [], true, signal, tx,
|
|
407
|
+
return fetchPartialUpdate(url, [], true, signal, tx, mode);
|
|
390
408
|
}
|
|
391
409
|
|
|
392
410
|
if (signal?.aborted) {
|
|
393
411
|
debugLog("[Browser] Ignoring stale navigation (aborted before render)");
|
|
394
|
-
return
|
|
412
|
+
return;
|
|
395
413
|
}
|
|
396
414
|
|
|
397
415
|
// Rebuild tree on client (await for loader data resolution)
|
|
398
|
-
// Race against abort signal to allow cancellation during loader awaiting
|
|
399
|
-
// Pass intercept segments separately for explicit handling
|
|
400
|
-
// For stale revalidation, use forceAwait to ensure no loading fallbacks
|
|
401
416
|
const renderOptions = {
|
|
402
|
-
isAction,
|
|
403
|
-
forceAwait:
|
|
417
|
+
isAction: mode.type === "action",
|
|
418
|
+
forceAwait: mode.type === "stale-revalidation",
|
|
404
419
|
interceptSegments:
|
|
405
420
|
reconciled.interceptSegments.length > 0
|
|
406
421
|
? reconciled.interceptSegments
|
|
@@ -423,64 +438,68 @@ export function createPartialUpdater(
|
|
|
423
438
|
// Final abort check before committing - another navigation may have started
|
|
424
439
|
if (signal?.aborted) {
|
|
425
440
|
debugLog("[Browser] Ignoring stale navigation (aborted before commit)");
|
|
426
|
-
return
|
|
441
|
+
return;
|
|
427
442
|
}
|
|
428
443
|
|
|
429
444
|
// Check if this is an intercept response (any slot is active)
|
|
430
|
-
// If so, disable scroll to keep the current scroll position
|
|
431
445
|
const isInterceptResponse = hasActiveInterceptSlots(
|
|
432
446
|
payload.metadata?.slots,
|
|
433
447
|
);
|
|
434
448
|
|
|
435
|
-
// Track intercept context
|
|
436
|
-
|
|
449
|
+
// Track intercept context (only on navigation, not actions or stale revalidation)
|
|
450
|
+
// Use the authoritative source from mode/history state when restoring an
|
|
451
|
+
// intercept via popstate cache miss; fall back to the current URL for fresh
|
|
452
|
+
// intercept navigations.
|
|
453
|
+
const effectiveInterceptSource =
|
|
454
|
+
interceptSourceUrl || segmentState.currentUrl;
|
|
455
|
+
if (mode.type !== "action" && mode.type !== "stale-revalidation") {
|
|
437
456
|
if (isInterceptResponse) {
|
|
438
|
-
|
|
439
|
-
store.setInterceptSourceUrl(segmentState.currentUrl);
|
|
457
|
+
store.setInterceptSourceUrl(effectiveInterceptSource);
|
|
440
458
|
} else {
|
|
441
|
-
// Clear intercept context when navigating to a non-intercept route
|
|
442
459
|
store.setInterceptSourceUrl(null);
|
|
443
460
|
}
|
|
444
461
|
}
|
|
445
462
|
|
|
446
|
-
// Commit navigation -
|
|
447
|
-
//
|
|
448
|
-
//
|
|
449
|
-
const allSegmentIds =
|
|
463
|
+
// Commit navigation - use server's matched as the authoritative segment ID list.
|
|
464
|
+
// reconciled.segments may be missing IDs (e.g., loader segments not in diff or cache)
|
|
465
|
+
// but the server's matched always includes all expected segment IDs.
|
|
466
|
+
const allSegmentIds = matchedIds;
|
|
450
467
|
const serverLocationState = payload.metadata?.locationState;
|
|
451
468
|
const overrides: CommitOverrides | undefined = isInterceptResponse
|
|
452
469
|
? {
|
|
453
470
|
scroll: false,
|
|
454
471
|
intercept: true,
|
|
455
|
-
interceptSourceUrl:
|
|
472
|
+
interceptSourceUrl: effectiveInterceptSource,
|
|
456
473
|
...(serverLocationState && { serverState: serverLocationState }),
|
|
457
474
|
}
|
|
458
475
|
: serverLocationState
|
|
459
476
|
? { serverState: serverLocationState }
|
|
460
477
|
: undefined;
|
|
461
|
-
tx.commit(
|
|
478
|
+
const { scroll: navScroll } = tx.commit(
|
|
479
|
+
allSegmentIds,
|
|
480
|
+
reconciled.segments,
|
|
481
|
+
overrides,
|
|
482
|
+
);
|
|
462
483
|
|
|
463
484
|
// For stale revalidation: verify history key hasn't changed before updating UI
|
|
464
|
-
|
|
465
|
-
if (staleRevalidation) {
|
|
485
|
+
if (mode.type === "stale-revalidation") {
|
|
466
486
|
const historyKeyNow = store.getHistoryKey();
|
|
467
487
|
if (historyKeyNow !== historyKeyAtStart) {
|
|
468
488
|
debugLog(
|
|
469
489
|
`[Browser] Stale revalidation: history key changed (${historyKeyAtStart} -> ${historyKeyNow}), skipping UI update`,
|
|
470
490
|
);
|
|
471
|
-
return
|
|
491
|
+
return;
|
|
472
492
|
}
|
|
473
493
|
}
|
|
474
494
|
|
|
475
495
|
debugLog("[partial-update] updating document");
|
|
476
496
|
|
|
477
|
-
// Emit update to trigger React render
|
|
478
|
-
//
|
|
479
|
-
// For actions: wrap in startTransition to avoid UI flickering
|
|
480
|
-
// For transitions: wrap in startTransition + addTransitionType for ViewTransition
|
|
497
|
+
// Emit update to trigger React render.
|
|
498
|
+
// Scroll info is included so NavigationProvider applies it after React commits.
|
|
481
499
|
const hasTransition = reconciled.mainSegments.some((s) => s.transition);
|
|
500
|
+
const scrollPayload = toScrollPayload(navScroll);
|
|
482
501
|
|
|
483
|
-
if (
|
|
502
|
+
if (mode.type === "action" || mode.type === "stale-revalidation") {
|
|
484
503
|
startTransition(() => {
|
|
485
504
|
if (hasTransition && addTransitionType) {
|
|
486
505
|
addTransitionType("action");
|
|
@@ -488,6 +507,7 @@ export function createPartialUpdater(
|
|
|
488
507
|
onUpdate({
|
|
489
508
|
root: newTree,
|
|
490
509
|
metadata: payload.metadata!,
|
|
510
|
+
scroll: scrollPayload,
|
|
491
511
|
});
|
|
492
512
|
});
|
|
493
513
|
} else if (hasTransition) {
|
|
@@ -498,59 +518,52 @@ export function createPartialUpdater(
|
|
|
498
518
|
onUpdate({
|
|
499
519
|
root: newTree,
|
|
500
520
|
metadata: payload.metadata!,
|
|
521
|
+
scroll: scrollPayload,
|
|
501
522
|
});
|
|
502
523
|
});
|
|
503
524
|
} else {
|
|
504
525
|
onUpdate({
|
|
505
526
|
root: newTree,
|
|
506
527
|
metadata: payload.metadata!,
|
|
528
|
+
scroll: scrollPayload,
|
|
507
529
|
});
|
|
508
530
|
}
|
|
509
531
|
|
|
510
532
|
debugLog("[Browser] Navigation complete");
|
|
511
|
-
return
|
|
533
|
+
return;
|
|
512
534
|
} else {
|
|
513
535
|
// Full update (fallback)
|
|
514
|
-
// Reconstruct the tree client-side from segments via renderSegments
|
|
515
|
-
// to ensure consistent component references with action revalidation.
|
|
516
536
|
console.warn(`[Browser] Full update (fallback)`);
|
|
517
537
|
|
|
518
538
|
const segments = payload.metadata?.segments || [];
|
|
519
539
|
|
|
520
|
-
// Check if this navigation is stale (a newer one started)
|
|
521
540
|
if (signal?.aborted) {
|
|
522
541
|
debugLog("[Browser] Ignoring stale navigation (aborted)");
|
|
523
|
-
return
|
|
542
|
+
return;
|
|
524
543
|
}
|
|
525
544
|
|
|
526
545
|
const segmentIds = segments.map((s: ResolvedSegment) => s.id);
|
|
527
546
|
|
|
528
|
-
// Render on client for consistent component references
|
|
529
547
|
const newTree = await renderSegments(segments);
|
|
530
548
|
|
|
531
|
-
// Final abort check before committing - another navigation may have started
|
|
532
549
|
if (signal?.aborted) {
|
|
533
550
|
debugLog("[Browser] Ignoring stale navigation (aborted before commit)");
|
|
534
|
-
return
|
|
551
|
+
return;
|
|
535
552
|
}
|
|
536
553
|
|
|
537
|
-
// Commit navigation - transaction handles all store mutations atomically
|
|
538
554
|
const fullUpdateServerState = payload.metadata?.locationState;
|
|
539
|
-
|
|
540
|
-
tx.commit(segmentIds, segments, {
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
555
|
+
const { scroll: fullScroll } = fullUpdateServerState
|
|
556
|
+
? tx.commit(segmentIds, segments, {
|
|
557
|
+
serverState: fullUpdateServerState,
|
|
558
|
+
})
|
|
559
|
+
: tx.commit(segmentIds, segments);
|
|
544
560
|
|
|
545
|
-
// Emit update to trigger React render
|
|
546
|
-
// For stale revalidation: wait for stream to complete, then update
|
|
547
|
-
// For actions: wrap in startTransition to avoid UI flickering
|
|
548
|
-
// For transitions: wrap in startTransition + addTransitionType
|
|
549
561
|
const fullHasTransition = segments.some(
|
|
550
562
|
(s: ResolvedSegment) => s.transition,
|
|
551
563
|
);
|
|
564
|
+
const fullScrollPayload = toScrollPayload(fullScroll);
|
|
552
565
|
|
|
553
|
-
if (
|
|
566
|
+
if (mode.type === "stale-revalidation") {
|
|
554
567
|
await rawStreamComplete;
|
|
555
568
|
startTransition(() => {
|
|
556
569
|
if (fullHasTransition && addTransitionType) {
|
|
@@ -559,9 +572,10 @@ export function createPartialUpdater(
|
|
|
559
572
|
onUpdate({
|
|
560
573
|
root: newTree,
|
|
561
574
|
metadata: payload.metadata!,
|
|
575
|
+
scroll: fullScrollPayload,
|
|
562
576
|
});
|
|
563
577
|
});
|
|
564
|
-
} else if (
|
|
578
|
+
} else if (mode.type === "action") {
|
|
565
579
|
startTransition(async () => {
|
|
566
580
|
if (fullHasTransition && addTransitionType) {
|
|
567
581
|
addTransitionType("action");
|
|
@@ -569,6 +583,7 @@ export function createPartialUpdater(
|
|
|
569
583
|
onUpdate({
|
|
570
584
|
root: newTree,
|
|
571
585
|
metadata: payload.metadata!,
|
|
586
|
+
scroll: fullScrollPayload,
|
|
572
587
|
});
|
|
573
588
|
});
|
|
574
589
|
} else if (fullHasTransition) {
|
|
@@ -579,16 +594,18 @@ export function createPartialUpdater(
|
|
|
579
594
|
onUpdate({
|
|
580
595
|
root: newTree,
|
|
581
596
|
metadata: payload.metadata!,
|
|
597
|
+
scroll: fullScrollPayload,
|
|
582
598
|
});
|
|
583
599
|
});
|
|
584
600
|
} else {
|
|
585
601
|
onUpdate({
|
|
586
602
|
root: newTree,
|
|
587
603
|
metadata: payload.metadata!,
|
|
604
|
+
scroll: fullScrollPayload,
|
|
588
605
|
});
|
|
589
606
|
}
|
|
590
607
|
|
|
591
|
-
return
|
|
608
|
+
return;
|
|
592
609
|
}
|
|
593
610
|
}
|
|
594
611
|
|