@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
|
@@ -11,6 +11,8 @@ import {
|
|
|
11
11
|
createStaticContext,
|
|
12
12
|
createReverseFunction,
|
|
13
13
|
} from "./handler-context.js";
|
|
14
|
+
import { isPrerenderPassthrough } from "../prerender.js";
|
|
15
|
+
import { isRouteRootScoped } from "../route-map-builder.js";
|
|
14
16
|
import { setupBuildUse } from "./loader-resolution.js";
|
|
15
17
|
import { loadManifest } from "./manifest.js";
|
|
16
18
|
import { traverseBack } from "./pattern-matching.js";
|
|
@@ -51,6 +53,7 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
51
53
|
params: Record<string, string>,
|
|
52
54
|
deps: PrerenderMatchDeps<TEnv>,
|
|
53
55
|
buildVars?: Record<string, any>,
|
|
56
|
+
isPassthroughRoute?: boolean,
|
|
54
57
|
): Promise<{
|
|
55
58
|
segments: SerializedSegmentData[];
|
|
56
59
|
handles: Record<string, SegmentHandleData>;
|
|
@@ -58,6 +61,7 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
58
61
|
params: Record<string, string>;
|
|
59
62
|
interceptSegments?: SerializedSegmentData[];
|
|
60
63
|
interceptHandles?: Record<string, SegmentHandleData>;
|
|
64
|
+
passthrough?: true;
|
|
61
65
|
} | null> {
|
|
62
66
|
// 1. Find the matching route entry
|
|
63
67
|
const matched = deps.findMatch(pathname);
|
|
@@ -65,6 +69,7 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
65
69
|
|
|
66
70
|
// Use params from trie match if available, fall back to provided params
|
|
67
71
|
const matchedParams = matched.params ?? params;
|
|
72
|
+
const matchedPassthroughRoute = isPassthroughRoute ?? matched.pt === true;
|
|
68
73
|
|
|
69
74
|
// Build RouterContext for loadManifest/traverseBack
|
|
70
75
|
const routerCtx = deps.buildRouterContext();
|
|
@@ -96,9 +101,10 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
96
101
|
env: {} as TEnv,
|
|
97
102
|
request: new Request("http://prerender" + pathname),
|
|
98
103
|
url: new URL("http://prerender" + pathname),
|
|
104
|
+
originalUrl: new URL("http://prerender" + pathname),
|
|
99
105
|
pathname,
|
|
100
106
|
searchParams: new URLSearchParams(),
|
|
101
|
-
|
|
107
|
+
_variables: variables,
|
|
102
108
|
get: ((keyOrVar: any) => contextGet(variables, keyOrVar)) as any,
|
|
103
109
|
set: ((keyOrVar: any, value: any) => {
|
|
104
110
|
contextSet(variables, keyOrVar, value);
|
|
@@ -111,6 +117,7 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
111
117
|
deleteCookie: () => {},
|
|
112
118
|
header: () => {},
|
|
113
119
|
setStatus: () => {},
|
|
120
|
+
_setStatus: () => {},
|
|
114
121
|
use: (() => {
|
|
115
122
|
throw new Error("use() not available during pre-rendering");
|
|
116
123
|
}) as any,
|
|
@@ -121,10 +128,12 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
121
128
|
_onResponseCallbacks: [],
|
|
122
129
|
setLocationState() {},
|
|
123
130
|
_locationState: undefined,
|
|
131
|
+
_reportedErrors: new WeakSet<object>(),
|
|
124
132
|
reverse: createReverseFunction(
|
|
125
133
|
deps.mergedRouteMap,
|
|
126
134
|
matched.routeKey,
|
|
127
135
|
matchedParams,
|
|
136
|
+
matched.routeKey ? isRouteRootScoped(matched.routeKey) : undefined,
|
|
128
137
|
),
|
|
129
138
|
};
|
|
130
139
|
|
|
@@ -138,6 +147,7 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
138
147
|
deps.mergedRouteMap,
|
|
139
148
|
matched.routeKey,
|
|
140
149
|
variables,
|
|
150
|
+
matchedPassthroughRoute,
|
|
141
151
|
);
|
|
142
152
|
|
|
143
153
|
// 7. Wire use() for handles only (loaders throw)
|
|
@@ -154,17 +164,31 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
154
164
|
{ skipLoaders: true },
|
|
155
165
|
);
|
|
156
166
|
|
|
157
|
-
// 9.
|
|
167
|
+
// 9. Detect passthrough sentinel: handler returned ctx.passthrough()
|
|
168
|
+
for (const seg of allSegments) {
|
|
169
|
+
if (isPrerenderPassthrough(seg.component)) {
|
|
170
|
+
return {
|
|
171
|
+
segments: [],
|
|
172
|
+
handles: {},
|
|
173
|
+
routeName: matched.routeKey,
|
|
174
|
+
params: matchedParams,
|
|
175
|
+
passthrough: true as const,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// 10. Filter out any loader segments (belt-and-suspenders)
|
|
158
181
|
const nonLoaderSegments = allSegments.filter((s) => s.type !== "loader");
|
|
159
182
|
|
|
160
|
-
//
|
|
183
|
+
// 11. Wait for handles to settle
|
|
184
|
+
handleStore.seal();
|
|
161
185
|
await handleStore.settled;
|
|
162
186
|
|
|
163
|
-
//
|
|
187
|
+
// 12. Serialize segments using the cache serializer
|
|
164
188
|
const { serializeSegments } = await import("../cache/segment-codec.js");
|
|
165
189
|
const serializedSegments = await serializeSegments(nonLoaderSegments);
|
|
166
190
|
|
|
167
|
-
//
|
|
191
|
+
// 13. Collect handle data per segment (skip segments with no handle data)
|
|
168
192
|
const handles: Record<string, SegmentHandleData> = {};
|
|
169
193
|
for (const seg of nonLoaderSegments) {
|
|
170
194
|
const segHandles = handleStore.getDataForSegment(seg.id);
|
|
@@ -176,7 +200,7 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
176
200
|
// Use the trie-level route key (e.g., "docs", "docs.article")
|
|
177
201
|
const routeName = matched.routeKey;
|
|
178
202
|
|
|
179
|
-
//
|
|
203
|
+
// 14. Resolve intercept segments for this route (if any ancestor defines
|
|
180
204
|
// an intercept targeting this route). At build time we skip when()
|
|
181
205
|
// evaluation -- we pre-render all intercepts unconditionally and let
|
|
182
206
|
// runtime matching decide which to serve.
|
|
@@ -309,9 +333,10 @@ export async function renderStaticSegment<TEnv = any>(
|
|
|
309
333
|
env: {} as TEnv,
|
|
310
334
|
request: syntheticRequest,
|
|
311
335
|
url: syntheticUrl,
|
|
336
|
+
originalUrl: syntheticUrl,
|
|
312
337
|
pathname: "/",
|
|
313
338
|
searchParams: syntheticUrl.searchParams,
|
|
314
|
-
|
|
339
|
+
_variables: {},
|
|
315
340
|
get: () => undefined as any,
|
|
316
341
|
set: () => {},
|
|
317
342
|
params: {},
|
|
@@ -322,6 +347,7 @@ export async function renderStaticSegment<TEnv = any>(
|
|
|
322
347
|
deleteCookie: () => {},
|
|
323
348
|
header: () => {},
|
|
324
349
|
setStatus: () => {},
|
|
350
|
+
_setStatus: () => {},
|
|
325
351
|
use: (() => {
|
|
326
352
|
throw new Error("use() not available during static pre-rendering");
|
|
327
353
|
}) as any,
|
|
@@ -332,7 +358,13 @@ export async function renderStaticSegment<TEnv = any>(
|
|
|
332
358
|
_onResponseCallbacks: [],
|
|
333
359
|
setLocationState() {},
|
|
334
360
|
_locationState: undefined,
|
|
335
|
-
|
|
361
|
+
_reportedErrors: new WeakSet<object>(),
|
|
362
|
+
reverse: createReverseFunction(
|
|
363
|
+
mergedRouteMap,
|
|
364
|
+
routeName,
|
|
365
|
+
{},
|
|
366
|
+
routeName ? isRouteRootScoped(routeName) : undefined,
|
|
367
|
+
),
|
|
336
368
|
};
|
|
337
369
|
|
|
338
370
|
return runWithRequestContext(minimalRequestContext, async () => {
|
|
@@ -122,9 +122,15 @@ export async function previewMatch<TEnv = any>(
|
|
|
122
122
|
undefined,
|
|
123
123
|
false,
|
|
124
124
|
);
|
|
125
|
+
// Recompute middleware from the selected variant's entry tree
|
|
126
|
+
// since different variants can have different middleware chains.
|
|
127
|
+
const variantMiddleware = collectRouteMiddleware(
|
|
128
|
+
traverseBack(negotiateEntry),
|
|
129
|
+
matched.params,
|
|
130
|
+
);
|
|
125
131
|
return {
|
|
126
132
|
routeMiddleware:
|
|
127
|
-
|
|
133
|
+
variantMiddleware.length > 0 ? variantMiddleware : undefined,
|
|
128
134
|
responseType: variant.responseType,
|
|
129
135
|
handler:
|
|
130
136
|
negotiateEntry.type === "route"
|
|
@@ -6,7 +6,14 @@
|
|
|
6
6
|
|
|
7
7
|
import type { ResolvedSegment, HandlerContext } from "../types";
|
|
8
8
|
import type { ActionContext } from "./types";
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
debugLog,
|
|
11
|
+
pushRevalidationTraceEntry,
|
|
12
|
+
isTraceActive,
|
|
13
|
+
} from "./logging.js";
|
|
14
|
+
import type { RevalidationTraceEntry } from "./logging.js";
|
|
15
|
+
import { _getRequestContext } from "../server/request-context.js";
|
|
16
|
+
import { isAutoGeneratedRouteName } from "../route-name.js";
|
|
10
17
|
|
|
11
18
|
function paramsEqual(
|
|
12
19
|
a: Record<string, string>,
|
|
@@ -50,6 +57,8 @@ interface EvaluateRevalidationOptions<TEnv> {
|
|
|
50
57
|
actionContext?: ActionContext;
|
|
51
58
|
/** If true, this is a stale cache revalidation request */
|
|
52
59
|
stale?: boolean;
|
|
60
|
+
/** Trace source hint for the revalidation trace */
|
|
61
|
+
traceSource?: RevalidationTraceEntry["source"];
|
|
53
62
|
}
|
|
54
63
|
|
|
55
64
|
/**
|
|
@@ -71,47 +80,97 @@ export async function evaluateRevalidation<TEnv>(
|
|
|
71
80
|
context,
|
|
72
81
|
actionContext,
|
|
73
82
|
stale,
|
|
83
|
+
traceSource,
|
|
74
84
|
} = options;
|
|
75
85
|
const nextParams = segment.params || {};
|
|
76
86
|
const paramsChanged = !paramsEqual(nextParams, prevParams);
|
|
87
|
+
const searchChanged = prevUrl.search !== nextUrl.search;
|
|
88
|
+
|
|
89
|
+
// Trace helper: push a structured entry to the request-scoped trace buffer.
|
|
90
|
+
// Guarded by isTraceActive() so object construction is skipped in production.
|
|
91
|
+
function pushTrace(
|
|
92
|
+
defaultVal: boolean,
|
|
93
|
+
finalVal: boolean,
|
|
94
|
+
reason: string,
|
|
95
|
+
): void {
|
|
96
|
+
if (!isTraceActive()) return;
|
|
97
|
+
pushRevalidationTraceEntry({
|
|
98
|
+
segmentId: segment.id,
|
|
99
|
+
segmentType: segment.type,
|
|
100
|
+
belongsToRoute: segment.belongsToRoute ?? false,
|
|
101
|
+
source: traceSource ?? "segment-resolution",
|
|
102
|
+
defaultShouldRevalidate: defaultVal,
|
|
103
|
+
finalShouldRevalidate: finalVal,
|
|
104
|
+
reason,
|
|
105
|
+
customRevalidators: revalidations.length || undefined,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
77
108
|
|
|
78
109
|
// Calculate default revalidation based on segment type and request method
|
|
79
110
|
let defaultShouldRevalidate: boolean;
|
|
111
|
+
let defaultReason: string;
|
|
80
112
|
|
|
81
113
|
if (request.method === "POST") {
|
|
82
114
|
// Actions: revalidate segments that belong to the route, skip parent chain
|
|
83
115
|
if (segment.type === "route") {
|
|
84
116
|
// Route segment always revalidates on actions
|
|
85
117
|
defaultShouldRevalidate = true;
|
|
118
|
+
defaultReason = "action:route-segment";
|
|
86
119
|
} else if (segment.type === "loader") {
|
|
87
120
|
// Loaders always revalidate on actions - they often contain action-sensitive data
|
|
88
121
|
// (e.g., cart count after add-to-cart action)
|
|
89
122
|
defaultShouldRevalidate = true;
|
|
123
|
+
defaultReason = "action:loader-segment";
|
|
90
124
|
} else if (segment.belongsToRoute) {
|
|
91
125
|
// Segment belongs to route (orphan layouts/parallels) - revalidate
|
|
92
126
|
defaultShouldRevalidate = true;
|
|
127
|
+
defaultReason = "action:belongs-to-route";
|
|
93
128
|
} else {
|
|
94
129
|
// Parent chain segment (shared layouts/parallels) - don't revalidate
|
|
95
130
|
defaultShouldRevalidate = false;
|
|
131
|
+
defaultReason = "action:parent-chain-skip";
|
|
96
132
|
}
|
|
97
133
|
} else {
|
|
98
134
|
// Navigation (GET): Conservative defaults to minimize unnecessary revalidations
|
|
99
135
|
// Only the route segment revalidates by default - all others require explicit opt-in
|
|
100
136
|
|
|
101
137
|
if (segment.type === "route") {
|
|
102
|
-
// Route segments revalidate when params change
|
|
103
|
-
//
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
138
|
+
// Route segments revalidate when path params OR search params change.
|
|
139
|
+
// Search params (e.g., ?page=2&sort=price) are server-parsed via ctx.search,
|
|
140
|
+
// so the handler must re-execute to produce updated content.
|
|
141
|
+
const routeChanged = paramsChanged || searchChanged;
|
|
142
|
+
defaultShouldRevalidate = routeChanged;
|
|
143
|
+
defaultReason = paramsChanged
|
|
144
|
+
? "nav:params-changed"
|
|
145
|
+
: searchChanged
|
|
146
|
+
? "nav:search-changed"
|
|
147
|
+
: "nav:params-unchanged";
|
|
148
|
+
if (routeChanged) {
|
|
149
|
+
debugLog("revalidation", "route revalidating", {
|
|
107
150
|
segmentId: segment.id,
|
|
151
|
+
paramsChanged,
|
|
152
|
+
searchChanged,
|
|
108
153
|
});
|
|
109
154
|
}
|
|
155
|
+
} else if (segment.belongsToRoute && (paramsChanged || searchChanged)) {
|
|
156
|
+
// Children of the route path (loaders, orphan layouts/parallels)
|
|
157
|
+
// revalidate when path params or search params change
|
|
158
|
+
defaultShouldRevalidate = true;
|
|
159
|
+
defaultReason = paramsChanged
|
|
160
|
+
? "nav:route-child-params-changed"
|
|
161
|
+
: "nav:route-child-search-changed";
|
|
162
|
+
debugLog("revalidation", "route child revalidating", {
|
|
163
|
+
segmentId: segment.id,
|
|
164
|
+
segmentType: segment.type,
|
|
165
|
+
paramsChanged,
|
|
166
|
+
searchChanged,
|
|
167
|
+
});
|
|
110
168
|
} else {
|
|
111
|
-
//
|
|
169
|
+
// Parent layouts and parallels default to no revalidation
|
|
112
170
|
// Cannot assume these segments depend on params without explicit declaration
|
|
113
171
|
// Use custom revalidation functions to opt-in when needed
|
|
114
172
|
defaultShouldRevalidate = false;
|
|
173
|
+
defaultReason = "nav:non-route-skip";
|
|
115
174
|
debugLog("revalidation", "non-route segment skipped by default", {
|
|
116
175
|
segmentId: segment.id,
|
|
117
176
|
segmentType: segment.type,
|
|
@@ -132,6 +191,7 @@ export async function evaluateRevalidation<TEnv>(
|
|
|
132
191
|
segmentId: segment.id,
|
|
133
192
|
});
|
|
134
193
|
}
|
|
194
|
+
pushTrace(defaultShouldRevalidate, defaultShouldRevalidate, defaultReason);
|
|
135
195
|
return defaultShouldRevalidate;
|
|
136
196
|
}
|
|
137
197
|
|
|
@@ -142,6 +202,16 @@ export async function evaluateRevalidation<TEnv>(
|
|
|
142
202
|
// Execute revalidation functions with soft/hard decision pattern
|
|
143
203
|
let currentSuggestion = defaultShouldRevalidate;
|
|
144
204
|
|
|
205
|
+
// Compute public route names (filtered: undefined for auto-generated routes)
|
|
206
|
+
const toRouteName =
|
|
207
|
+
routeKey && !isAutoGeneratedRouteName(routeKey) ? routeKey : undefined;
|
|
208
|
+
const reqCtx = _getRequestContext();
|
|
209
|
+
const prevRouteKey = reqCtx?._prevRouteKey;
|
|
210
|
+
const fromRouteName =
|
|
211
|
+
prevRouteKey && !isAutoGeneratedRouteName(prevRouteKey)
|
|
212
|
+
? prevRouteKey
|
|
213
|
+
: undefined;
|
|
214
|
+
|
|
145
215
|
for (const { name, fn } of revalidations) {
|
|
146
216
|
const result = fn({
|
|
147
217
|
currentParams: prevSegment?.params || prevParams, // Use segment params if available, else route params
|
|
@@ -160,7 +230,9 @@ export async function evaluateRevalidation<TEnv>(
|
|
|
160
230
|
actionResult: actionContext?.actionResult,
|
|
161
231
|
formData: actionContext?.formData,
|
|
162
232
|
method: request.method, // GET for navigation, POST for actions
|
|
163
|
-
routeName:
|
|
233
|
+
routeName: toRouteName, // Navigation target route name (filtered)
|
|
234
|
+
fromRouteName, // Navigation source route name (filtered)
|
|
235
|
+
toRouteName, // Navigation target route name (filtered)
|
|
164
236
|
// Stale cache context (only true for background revalidation after stale cache render)
|
|
165
237
|
stale,
|
|
166
238
|
});
|
|
@@ -176,6 +248,7 @@ export async function evaluateRevalidation<TEnv>(
|
|
|
176
248
|
revalidator: name,
|
|
177
249
|
revalidate: result,
|
|
178
250
|
});
|
|
251
|
+
pushTrace(defaultShouldRevalidate, result, `hard:${name}`);
|
|
179
252
|
return result;
|
|
180
253
|
} else if (
|
|
181
254
|
result &&
|
|
@@ -206,5 +279,11 @@ export async function evaluateRevalidation<TEnv>(
|
|
|
206
279
|
segmentId: segment.id,
|
|
207
280
|
revalidate: currentSuggestion,
|
|
208
281
|
});
|
|
282
|
+
const softNames = revalidations.map((r) => r.name).join(",");
|
|
283
|
+
pushTrace(
|
|
284
|
+
defaultShouldRevalidate,
|
|
285
|
+
currentSuggestion,
|
|
286
|
+
`soft-chain:${softNames}`,
|
|
287
|
+
);
|
|
209
288
|
return currentSuggestion;
|
|
210
289
|
}
|
|
@@ -18,6 +18,7 @@ import type {
|
|
|
18
18
|
ShouldRevalidateFn,
|
|
19
19
|
} from "../types.js";
|
|
20
20
|
import type { RouteMatchResult } from "./pattern-matching.js";
|
|
21
|
+
import type { TelemetrySink } from "./telemetry.js";
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
24
|
* Revalidation context passed to segment resolution
|
|
@@ -79,6 +80,7 @@ export interface RouterContext<TEnv = any> {
|
|
|
79
80
|
routeMap?: Record<string, string>,
|
|
80
81
|
routeName?: string,
|
|
81
82
|
responseType?: string,
|
|
83
|
+
isPassthroughRoute?: boolean,
|
|
82
84
|
) => HandlerContext<any, TEnv>;
|
|
83
85
|
|
|
84
86
|
// Loader setup
|
|
@@ -136,6 +138,7 @@ export interface RouterContext<TEnv = any> {
|
|
|
136
138
|
interceptResult: InterceptResult | null,
|
|
137
139
|
localRouteName: string,
|
|
138
140
|
pathname: string,
|
|
141
|
+
stale?: boolean,
|
|
139
142
|
) => Promise<{ segments: ResolvedSegment[]; matchedIds: string[] }>;
|
|
140
143
|
|
|
141
144
|
// Generator-based segment resolution (for pipeline)
|
|
@@ -181,6 +184,15 @@ export interface RouterContext<TEnv = any> {
|
|
|
181
184
|
context: HandlerContext<any, TEnv>;
|
|
182
185
|
actionContext?: any;
|
|
183
186
|
stale?: boolean;
|
|
187
|
+
traceSource?:
|
|
188
|
+
| "segment-resolution"
|
|
189
|
+
| "cache-hit"
|
|
190
|
+
| "loader"
|
|
191
|
+
| "parallel"
|
|
192
|
+
| "orphan-layout"
|
|
193
|
+
| "route-handler"
|
|
194
|
+
| "layout-handler"
|
|
195
|
+
| "intercept-loader";
|
|
184
196
|
}) => Promise<boolean>;
|
|
185
197
|
|
|
186
198
|
// Request context
|
|
@@ -198,6 +210,7 @@ export interface RouterContext<TEnv = any> {
|
|
|
198
210
|
params: Record<string, string>,
|
|
199
211
|
handlerContext: HandlerContext<any, TEnv>,
|
|
200
212
|
loaderPromises: Map<string, Promise<any>>,
|
|
213
|
+
options?: { skipLoaders?: boolean },
|
|
201
214
|
) => Promise<ResolvedSegment[]>;
|
|
202
215
|
|
|
203
216
|
// Generator-based simple resolution
|
|
@@ -234,6 +247,7 @@ export interface RouterContext<TEnv = any> {
|
|
|
234
247
|
nextUrl: URL,
|
|
235
248
|
routeKey: string,
|
|
236
249
|
actionContext?: any,
|
|
250
|
+
stale?: boolean,
|
|
237
251
|
) => Promise<{ segments: ResolvedSegment[]; matchedIds: string[] }>;
|
|
238
252
|
|
|
239
253
|
// Entry revalidation map
|
|
@@ -241,6 +255,12 @@ export interface RouterContext<TEnv = any> {
|
|
|
241
255
|
entries: EntryData[],
|
|
242
256
|
) => Map<string, { revalidate: ShouldRevalidateFn[] }>;
|
|
243
257
|
|
|
258
|
+
// Telemetry sink (optional, no-op when undefined)
|
|
259
|
+
telemetry?: TelemetrySink;
|
|
260
|
+
|
|
261
|
+
// Request ID for telemetry span correlation (set per-request in match handlers)
|
|
262
|
+
requestId?: string;
|
|
263
|
+
|
|
244
264
|
// Intercept loaders only (for cache hit + intercept scenarios)
|
|
245
265
|
resolveInterceptLoadersOnly?: (
|
|
246
266
|
intercept: InterceptEntry,
|
|
@@ -2,6 +2,7 @@ import type { ComponentType, ReactNode } from "react";
|
|
|
2
2
|
import type { SerializedManifest } from "../debug.js";
|
|
3
3
|
import type { ReverseFunction } from "../reverse.js";
|
|
4
4
|
import type { UrlPatterns } from "../urls.js";
|
|
5
|
+
import type { UrlBuilder } from "../urls/pattern-types.js";
|
|
5
6
|
import type { EntryData } from "../server/context";
|
|
6
7
|
import type { ErrorInfo, MatchResult } from "../types";
|
|
7
8
|
import type { NonceProvider } from "../rsc/types.js";
|
|
@@ -14,6 +15,7 @@ import type { MiddlewareEntry, MiddlewareFn } from "./middleware.js";
|
|
|
14
15
|
import { RSC_ROUTER_BRAND } from "./router-registry.js";
|
|
15
16
|
import type { RSCRouterOptions, RootLayoutProps } from "./router-options.js";
|
|
16
17
|
import type { DefaultVars } from "../types/global-namespace.js";
|
|
18
|
+
import type { ResolvedTimeouts, OnTimeoutCallback } from "./timeout.js";
|
|
17
19
|
|
|
18
20
|
/**
|
|
19
21
|
* Options passed to router.fetch(), router.match(), and other request entrypoints.
|
|
@@ -67,12 +69,24 @@ export interface RSCRouter<
|
|
|
67
69
|
readonly id: string;
|
|
68
70
|
|
|
69
71
|
/**
|
|
70
|
-
*
|
|
72
|
+
* URL prefix applied to all routes. Undefined when no basename is configured.
|
|
73
|
+
*/
|
|
74
|
+
readonly basename: string | undefined;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Register routes using URL patterns from urls() or a builder function
|
|
71
78
|
*
|
|
72
79
|
* @example
|
|
73
80
|
* ```typescript
|
|
74
|
-
*
|
|
75
|
-
*
|
|
81
|
+
* // With urls()
|
|
82
|
+
* createRouter({}).routes(urlpatterns)
|
|
83
|
+
*
|
|
84
|
+
* // With builder function (urls() is implicit)
|
|
85
|
+
* createRouter({}).routes(({ path, layout }) => [
|
|
86
|
+
* layout(RootLayout, () => [
|
|
87
|
+
* path("/", HomePage),
|
|
88
|
+
* ]),
|
|
89
|
+
* ])
|
|
76
90
|
* ```
|
|
77
91
|
*/
|
|
78
92
|
routes<T extends UrlPatterns<TEnv, any>>(
|
|
@@ -84,6 +98,7 @@ export interface RSCRouter<
|
|
|
84
98
|
? MergeRoutesWithResponses<NonNullable<T["_routes"]>, T["_responses"]>
|
|
85
99
|
: Record<string, string>)
|
|
86
100
|
>;
|
|
101
|
+
routes(builder: UrlBuilder<TEnv>): RSCRouter<TEnv, TRoutes>;
|
|
87
102
|
|
|
88
103
|
/**
|
|
89
104
|
* Add global middleware that runs on all routes
|
|
@@ -187,8 +202,11 @@ export interface RSCRouterInternal<
|
|
|
187
202
|
*/
|
|
188
203
|
readonly id: string;
|
|
189
204
|
|
|
205
|
+
/** URL prefix applied to all routes. */
|
|
206
|
+
readonly basename: string | undefined;
|
|
207
|
+
|
|
190
208
|
/**
|
|
191
|
-
* Register routes using URL patterns from urls()
|
|
209
|
+
* Register routes using URL patterns from urls() or a builder function
|
|
192
210
|
*/
|
|
193
211
|
routes<T extends UrlPatterns<TEnv, any>>(
|
|
194
212
|
patterns: T,
|
|
@@ -199,6 +217,7 @@ export interface RSCRouterInternal<
|
|
|
199
217
|
? MergeRoutesWithResponses<NonNullable<T["_routes"]>, T["_responses"]>
|
|
200
218
|
: Record<string, string>)
|
|
201
219
|
>;
|
|
220
|
+
routes(builder: UrlBuilder<TEnv>): RSCRouter<TEnv, TRoutes>;
|
|
202
221
|
|
|
203
222
|
/**
|
|
204
223
|
* Add global middleware that runs on all routes
|
|
@@ -246,12 +265,28 @@ export interface RSCRouterInternal<
|
|
|
246
265
|
*/
|
|
247
266
|
readonly themeConfig: import("../theme/types.js").ResolvedThemeConfig | null;
|
|
248
267
|
|
|
268
|
+
/**
|
|
269
|
+
* Cache profiles for "use cache" per-request resolution.
|
|
270
|
+
* Always includes at least the "default" profile.
|
|
271
|
+
*/
|
|
272
|
+
readonly cacheProfiles: Record<
|
|
273
|
+
string,
|
|
274
|
+
import("../cache/profile-registry.js").CacheProfile
|
|
275
|
+
>;
|
|
276
|
+
|
|
249
277
|
/**
|
|
250
278
|
* Cache-Control header value for prefetch responses.
|
|
251
|
-
* False means no
|
|
279
|
+
* False means no caching of prefetch responses.
|
|
280
|
+
* Derived from prefetchCacheTTL.
|
|
252
281
|
*/
|
|
253
282
|
readonly prefetchCacheControl: string | false;
|
|
254
283
|
|
|
284
|
+
/**
|
|
285
|
+
* TTL in milliseconds for the client-side in-memory prefetch cache.
|
|
286
|
+
* 0 means caching is disabled.
|
|
287
|
+
*/
|
|
288
|
+
readonly prefetchCacheTTL: number;
|
|
289
|
+
|
|
255
290
|
/**
|
|
256
291
|
* Whether connection warmup is enabled.
|
|
257
292
|
* When true, the client sends HEAD /?_rsc_warmup after idle periods
|
|
@@ -259,12 +294,28 @@ export interface RSCRouterInternal<
|
|
|
259
294
|
*/
|
|
260
295
|
readonly warmupEnabled: boolean;
|
|
261
296
|
|
|
297
|
+
/**
|
|
298
|
+
* Whether router-wide performance debugging is enabled.
|
|
299
|
+
* Used by the request handler to create metrics before middleware runs.
|
|
300
|
+
*/
|
|
301
|
+
readonly debugPerformance?: boolean;
|
|
302
|
+
|
|
262
303
|
/**
|
|
263
304
|
* Whether ?__debug_manifest is allowed in production.
|
|
264
305
|
* Always enabled in development.
|
|
265
306
|
*/
|
|
266
307
|
readonly allowDebugManifest: boolean;
|
|
267
308
|
|
|
309
|
+
/**
|
|
310
|
+
* Resolved timeout configuration (merged from shorthand + structured).
|
|
311
|
+
*/
|
|
312
|
+
readonly timeouts: ResolvedTimeouts;
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Custom timeout response handler.
|
|
316
|
+
*/
|
|
317
|
+
readonly onTimeout?: OnTimeoutCallback<TEnv>;
|
|
318
|
+
|
|
268
319
|
/**
|
|
269
320
|
* App-level middleware entries
|
|
270
321
|
* These wrap the entire request/response cycle
|
|
@@ -286,6 +337,18 @@ export interface RSCRouterInternal<
|
|
|
286
337
|
*/
|
|
287
338
|
readonly urlpatterns?: UrlPatterns<TEnv, any>;
|
|
288
339
|
|
|
340
|
+
/**
|
|
341
|
+
* SSR configuration. resolveStreaming determines stream vs allReady
|
|
342
|
+
* per HTML request (undefined = always stream).
|
|
343
|
+
*/
|
|
344
|
+
readonly ssr?: import("./router-options.js").SSROptions<TEnv>;
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Cross-origin request protection configuration.
|
|
348
|
+
* Default: true (enabled).
|
|
349
|
+
*/
|
|
350
|
+
readonly originCheck: import("../rsc/origin-guard.js").OriginCheckConfig<TEnv>;
|
|
351
|
+
|
|
289
352
|
/**
|
|
290
353
|
* Source file path where createRouter() was called.
|
|
291
354
|
* Set via Error.stack parsing at construction time.
|
|
@@ -293,6 +356,9 @@ export interface RSCRouterInternal<
|
|
|
293
356
|
*/
|
|
294
357
|
readonly __sourceFile?: string;
|
|
295
358
|
|
|
359
|
+
/** @internal basename for runtime manifest generation */
|
|
360
|
+
readonly __basename?: string;
|
|
361
|
+
|
|
296
362
|
match(
|
|
297
363
|
request: Request,
|
|
298
364
|
input?: RouterRequestInput<TEnv>,
|
|
@@ -307,6 +373,7 @@ export interface RSCRouterInternal<
|
|
|
307
373
|
pathname: string,
|
|
308
374
|
params: Record<string, string>,
|
|
309
375
|
buildVars?: Record<string, any>,
|
|
376
|
+
isPassthroughRoute?: boolean,
|
|
310
377
|
): Promise<{
|
|
311
378
|
segments: SerializedSegmentData[];
|
|
312
379
|
handles: Record<string, SegmentHandleData>;
|
|
@@ -314,6 +381,7 @@ export interface RSCRouterInternal<
|
|
|
314
381
|
params: Record<string, string>;
|
|
315
382
|
interceptSegments?: SerializedSegmentData[];
|
|
316
383
|
interceptHandles?: Record<string, SegmentHandleData>;
|
|
384
|
+
passthrough?: true;
|
|
317
385
|
} | null>;
|
|
318
386
|
|
|
319
387
|
/**
|