@rangojs/router 0.0.0-experimental.125 → 0.0.0-experimental.126
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/README.md +6 -4
- 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.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/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
- 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/dist/href-context.d.ts +29 -0
- 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 +307 -26
- package/dist/vite/index.js.bak +5448 -0
- 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 +19 -18
- package/skills/breadcrumbs/SKILL.md +60 -0
- package/skills/server-actions/SKILL.md +25 -1
- package/skills/testing/SKILL.md +17 -17
- package/skills/testing/cache-prerender.md +29 -3
- package/skills/testing/flight.md +13 -10
- package/skills/testing/render-handler.md +3 -0
- package/skills/testing/server-tree.md +1 -1
- package/skills/testing/setup.md +1 -1
- package/src/browser/partial-update.ts +22 -1
- package/src/browser/react/use-router.ts +2 -1
- package/src/browser/rsc-router.tsx +8 -1
- package/src/browser/server-action-bridge.ts +51 -3
- package/src/browser/types.ts +23 -4
- package/src/browser/validate-redirect-origin.ts +43 -15
- package/src/build/index.ts +8 -9
- package/src/build/route-trie.ts +43 -11
- package/src/cache/cache-runtime.ts +21 -0
- package/src/cache/document-cache.ts +10 -0
- package/src/cache/profile-registry.ts +6 -34
- package/src/client.rsc.tsx +3 -0
- package/src/client.tsx +5 -0
- package/src/context-var.ts +12 -0
- package/src/defer.ts +196 -0
- package/src/handles/breadcrumbs.ts +16 -5
- package/src/index.rsc.ts +7 -0
- package/src/index.ts +7 -0
- package/src/redirect-origin.ts +100 -0
- package/src/route-definition/redirect.ts +32 -8
- package/src/route-definition/resolve-handler-use.ts +6 -0
- package/src/router/find-match.ts +0 -1
- package/src/router/loader-resolution.ts +22 -21
- package/src/router/match-middleware/cache-lookup.ts +95 -125
- package/src/router/match-middleware/segment-resolution.ts +0 -1
- package/src/router/middleware-types.ts +0 -1
- package/src/router/middleware.ts +71 -31
- package/src/router/pattern-matching.ts +4 -23
- package/src/router/prerender-match.ts +27 -6
- package/src/router/revalidation.ts +9 -4
- package/src/router/route-snapshot.ts +0 -1
- package/src/router/router-context.ts +0 -1
- package/src/router/router-interfaces.ts +10 -0
- package/src/router/segment-resolution/loader-cache.ts +25 -10
- package/src/router/segment-resolution/revalidation.ts +185 -243
- package/src/router/segment-wrappers.ts +0 -3
- package/src/router/trie-matching.ts +3 -5
- package/src/router.ts +4 -9
- package/src/rsc/handler-context.ts +1 -0
- package/src/rsc/handler.ts +9 -2
- package/src/rsc/helpers.ts +56 -3
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/origin-guard.ts +10 -4
- package/src/rsc/progressive-enhancement.ts +8 -0
- package/src/rsc/redirect-guard.ts +99 -0
- package/src/rsc/response-route-handler.ts +23 -18
- package/src/rsc/server-action.ts +4 -1
- package/src/rsc/types.ts +6 -2
- package/src/server/request-context.ts +22 -13
- package/src/testing/cache-status.ts +44 -1
- package/src/testing/dispatch.ts +43 -6
- package/src/testing/e2e/index.ts +1 -0
- package/src/testing/flight.ts +48 -2
- package/src/testing/index.ts +1 -0
- package/src/testing/render-handler.ts +31 -12
- package/src/testing/render-route.tsx +75 -13
- package/src/types/handler-context.ts +28 -1
- package/src/vite/discovery/discover-routers.ts +22 -11
- package/src/vite/discovery/prerender-collection.ts +2 -4
- package/src/vite/discovery/state.ts +5 -0
- package/src/vite/plugin-types.ts +32 -8
- package/src/vite/plugins/refresh-cmd.ts +1 -1
- package/src/vite/plugins/use-cache-transform.ts +21 -10
- package/src/vite/rango.ts +1 -0
- package/src/vite/router-discovery.ts +7 -0
- package/src/router/middleware-cookies.ts +0 -42
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
getParallelEntries,
|
|
15
15
|
getParallelSlotEntries,
|
|
16
16
|
type EntryData,
|
|
17
|
+
type ParallelEntryData,
|
|
17
18
|
} from "../../server/context";
|
|
18
19
|
import type {
|
|
19
20
|
HandlerContext,
|
|
@@ -386,6 +387,97 @@ export function buildEntryRevalidateMap(
|
|
|
386
387
|
return map;
|
|
387
388
|
}
|
|
388
389
|
|
|
390
|
+
/**
|
|
391
|
+
* Resolve the component for a single parallel slot on the revalidation path.
|
|
392
|
+
* Pure component resolution shared verbatim by
|
|
393
|
+
* resolveParallelSegmentsWithRevalidation and the orphan-inlined loop in
|
|
394
|
+
* resolveOrphanLayoutWithRevalidation: try the static slot cache, else run the
|
|
395
|
+
* slot handler (pinning _currentSegmentId to the slot id so handle pushes land
|
|
396
|
+
* in the slot's own bucket, and wrapping a streamed handler). Returns the
|
|
397
|
+
* resolved component and whether the handler actually ran. Does NOT touch the
|
|
398
|
+
* revalidate-default policy (the caller decides shouldResolve, including the
|
|
399
|
+
* orphan-vs-main defaultOverride divergence) or loader-resolution ordering.
|
|
400
|
+
*/
|
|
401
|
+
async function resolveParallelSlotComponent<TEnv>(args: {
|
|
402
|
+
shouldResolve: boolean;
|
|
403
|
+
parallelEntry: ParallelEntryData;
|
|
404
|
+
slot: string;
|
|
405
|
+
parallelId: string;
|
|
406
|
+
handler:
|
|
407
|
+
| ((ctx: HandlerContext<any, TEnv>) => ReactNode | Promise<ReactNode>)
|
|
408
|
+
| ReactNode
|
|
409
|
+
| undefined;
|
|
410
|
+
context: HandlerContext<any, TEnv>;
|
|
411
|
+
deps: SegmentResolutionDeps<TEnv>;
|
|
412
|
+
routeKey: string;
|
|
413
|
+
params: Record<string, string>;
|
|
414
|
+
}): Promise<{ component: ReactNode | undefined; handlerRan: boolean }> {
|
|
415
|
+
const {
|
|
416
|
+
shouldResolve,
|
|
417
|
+
parallelEntry,
|
|
418
|
+
slot,
|
|
419
|
+
parallelId,
|
|
420
|
+
handler,
|
|
421
|
+
context,
|
|
422
|
+
deps,
|
|
423
|
+
routeKey,
|
|
424
|
+
params,
|
|
425
|
+
} = args;
|
|
426
|
+
|
|
427
|
+
let component: ReactNode | undefined;
|
|
428
|
+
let handlerRan = false;
|
|
429
|
+
if (shouldResolve) {
|
|
430
|
+
component = await tryStaticSlot(parallelEntry, slot, parallelId);
|
|
431
|
+
// tryStaticSlot returning a value means the static cache supplied the
|
|
432
|
+
// component — handler did NOT run. handlerRan stays false.
|
|
433
|
+
}
|
|
434
|
+
if (component === undefined) {
|
|
435
|
+
const hasLoadingFallback =
|
|
436
|
+
parallelEntry.loading !== undefined && parallelEntry.loading !== false;
|
|
437
|
+
if (!shouldResolve) {
|
|
438
|
+
component = null;
|
|
439
|
+
} else if (handler === undefined) {
|
|
440
|
+
// Handler evicted (production static slot) but static lookup missed.
|
|
441
|
+
// Nothing to render — use null so the client keeps its cached version.
|
|
442
|
+
component = null;
|
|
443
|
+
} else {
|
|
444
|
+
// Slot-keyed pushes — slot owns its own bucket, parent layout owns its
|
|
445
|
+
// own. On slot-only revalidations the partial merge updates only the
|
|
446
|
+
// slot's bucket; the parent's bucket stays intact.
|
|
447
|
+
(context as InternalHandlerContext<any, TEnv>)._currentSegmentId =
|
|
448
|
+
parallelId;
|
|
449
|
+
handlerRan = true;
|
|
450
|
+
if (hasLoadingFallback) {
|
|
451
|
+
const result =
|
|
452
|
+
typeof handler === "function" ? handler(context) : handler;
|
|
453
|
+
if (result instanceof Promise) {
|
|
454
|
+
warnOnStreamedResponse(result, parallelId);
|
|
455
|
+
const tracked = deps.trackHandler(result, {
|
|
456
|
+
segmentId: parallelId,
|
|
457
|
+
segmentType: "parallel",
|
|
458
|
+
});
|
|
459
|
+
observeStreamedHandler(
|
|
460
|
+
tracked,
|
|
461
|
+
parallelId,
|
|
462
|
+
"parallel",
|
|
463
|
+
context.pathname,
|
|
464
|
+
routeKey,
|
|
465
|
+
params,
|
|
466
|
+
);
|
|
467
|
+
component = tracked as ReactNode;
|
|
468
|
+
} else {
|
|
469
|
+
component = result as ReactNode;
|
|
470
|
+
}
|
|
471
|
+
} else {
|
|
472
|
+
component =
|
|
473
|
+
typeof handler === "function" ? await handler(context) : handler;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
return { component, handlerRan };
|
|
479
|
+
}
|
|
480
|
+
|
|
389
481
|
/**
|
|
390
482
|
* Resolve parallel segments with revalidation.
|
|
391
483
|
*/
|
|
@@ -403,9 +495,30 @@ export async function resolveParallelSegmentsWithRevalidation<TEnv>(
|
|
|
403
495
|
deps: SegmentResolutionDeps<TEnv>,
|
|
404
496
|
actionContext?: ActionContext,
|
|
405
497
|
stale?: boolean,
|
|
498
|
+
options?: {
|
|
499
|
+
/**
|
|
500
|
+
* Seed for an unknown parent-chain slot (slot not in clientSegmentIds) when
|
|
501
|
+
* there are no deciding revalidate fns. "type-derived" (default, main path):
|
|
502
|
+
* `belongsToRoute || isNewParent`. "force-render" (orphan path): always
|
|
503
|
+
* `true` — orphan parallels always belong to the route and must render
|
|
504
|
+
* unless the user opts out via revalidate(); the #482 blank-parent-chain-
|
|
505
|
+
* slot guard.
|
|
506
|
+
*/
|
|
507
|
+
parentChainDefault?: "type-derived" | "force-render";
|
|
508
|
+
/**
|
|
509
|
+
* When a slot's loaders are resolved relative to the slot segment push.
|
|
510
|
+
* "after" (default, main path) pushes the slot segment first; "before"
|
|
511
|
+
* (orphan path) resolves loaders first. This only changes the
|
|
512
|
+
* segments/matchedIds emission ORDER (the client reconciler is insensitive
|
|
513
|
+
* to it: loader sub-ids are filtered out and slots are re-grouped by parent).
|
|
514
|
+
*/
|
|
515
|
+
loaderOrder?: "after" | "before";
|
|
516
|
+
},
|
|
406
517
|
): Promise<SegmentRevalidationResult> {
|
|
407
518
|
const segments: ResolvedSegment[] = [];
|
|
408
519
|
const matchedIds: string[] = [];
|
|
520
|
+
const parentChainDefault = options?.parentChainDefault ?? "type-derived";
|
|
521
|
+
const loaderOrder = options?.loaderOrder ?? "after";
|
|
409
522
|
|
|
410
523
|
const resolvedParallelEntries = new Set<string>();
|
|
411
524
|
for (const { slot, entry: parallelEntry } of getParallelSlotEntries(
|
|
@@ -430,6 +543,34 @@ export async function resolveParallelSegmentsWithRevalidation<TEnv>(
|
|
|
430
543
|
|
|
431
544
|
const isFullRefetch = clientSegmentIds.size === 0;
|
|
432
545
|
const isNewParent = !clientSegmentIds.has(entry.shortCode);
|
|
546
|
+
|
|
547
|
+
// A slot's loaders (never cached) are deduped per parallel entry and
|
|
548
|
+
// emitted either before or after the slot segment per loaderOrder.
|
|
549
|
+
const resolveSlotLoaders = async () => {
|
|
550
|
+
if (resolvedParallelEntries.has(parallelEntry.id)) return;
|
|
551
|
+
const loaderResult = await resolveLoadersWithRevalidation(
|
|
552
|
+
parallelEntry,
|
|
553
|
+
context,
|
|
554
|
+
belongsToRoute,
|
|
555
|
+
clientSegmentIds,
|
|
556
|
+
prevParams,
|
|
557
|
+
request,
|
|
558
|
+
prevUrl,
|
|
559
|
+
nextUrl,
|
|
560
|
+
routeKey,
|
|
561
|
+
deps,
|
|
562
|
+
actionContext,
|
|
563
|
+
entry.shortCode,
|
|
564
|
+
stale,
|
|
565
|
+
);
|
|
566
|
+
segments.push(...loaderResult.segments);
|
|
567
|
+
matchedIds.push(...loaderResult.matchedIds);
|
|
568
|
+
resolvedParallelEntries.add(parallelEntry.id);
|
|
569
|
+
};
|
|
570
|
+
|
|
571
|
+
if (loaderOrder === "before") {
|
|
572
|
+
await resolveSlotLoaders();
|
|
573
|
+
}
|
|
433
574
|
// Always announce the slot in matchedIds — it's unconditionally appended
|
|
434
575
|
// to `segments` below, and a segment present in segments but missing from
|
|
435
576
|
// matched lets the client prune it (then it's missing from clientSegmentIds
|
|
@@ -449,7 +590,10 @@ export async function resolveParallelSegmentsWithRevalidation<TEnv>(
|
|
|
449
590
|
// soft chain seeds with the right "new segment" / "parent-chain" value.
|
|
450
591
|
let defaultOverride: { value: boolean; reason: string } | undefined;
|
|
451
592
|
if (!clientSegmentIds.has(parallelId)) {
|
|
452
|
-
const value =
|
|
593
|
+
const value =
|
|
594
|
+
parentChainDefault === "force-render"
|
|
595
|
+
? true
|
|
596
|
+
: belongsToRoute || isNewParent;
|
|
453
597
|
defaultOverride = {
|
|
454
598
|
value,
|
|
455
599
|
reason: value ? "new-segment" : "skip-parent-chain",
|
|
@@ -497,56 +641,17 @@ export async function resolveParallelSegmentsWithRevalidation<TEnv>(
|
|
|
497
641
|
shouldResolve,
|
|
498
642
|
);
|
|
499
643
|
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
component = null;
|
|
512
|
-
} else if (handler === undefined) {
|
|
513
|
-
// Handler evicted (production static slot) but static lookup missed.
|
|
514
|
-
// Nothing to render — use null so the client keeps its cached version.
|
|
515
|
-
component = null;
|
|
516
|
-
} else {
|
|
517
|
-
// Slot-keyed pushes — slot owns its own bucket, parent layout owns
|
|
518
|
-
// its own. On slot-only revalidations the partial merge updates only
|
|
519
|
-
// the slot's bucket; the parent's bucket stays intact.
|
|
520
|
-
(context as InternalHandlerContext<any, TEnv>)._currentSegmentId =
|
|
521
|
-
parallelId;
|
|
522
|
-
handlerRan = true;
|
|
523
|
-
if (hasLoadingFallback) {
|
|
524
|
-
const result =
|
|
525
|
-
typeof handler === "function" ? handler(context) : handler;
|
|
526
|
-
if (result instanceof Promise) {
|
|
527
|
-
warnOnStreamedResponse(result, parallelId);
|
|
528
|
-
const tracked = deps.trackHandler(result, {
|
|
529
|
-
segmentId: parallelId,
|
|
530
|
-
segmentType: "parallel",
|
|
531
|
-
});
|
|
532
|
-
observeStreamedHandler(
|
|
533
|
-
tracked,
|
|
534
|
-
parallelId,
|
|
535
|
-
"parallel",
|
|
536
|
-
context.pathname,
|
|
537
|
-
routeKey,
|
|
538
|
-
params,
|
|
539
|
-
);
|
|
540
|
-
component = tracked as ReactNode;
|
|
541
|
-
} else {
|
|
542
|
-
component = result as ReactNode;
|
|
543
|
-
}
|
|
544
|
-
} else {
|
|
545
|
-
component =
|
|
546
|
-
typeof handler === "function" ? await handler(context) : handler;
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
}
|
|
644
|
+
const { component, handlerRan } = await resolveParallelSlotComponent({
|
|
645
|
+
shouldResolve,
|
|
646
|
+
parallelEntry,
|
|
647
|
+
slot,
|
|
648
|
+
parallelId,
|
|
649
|
+
handler,
|
|
650
|
+
context,
|
|
651
|
+
deps,
|
|
652
|
+
routeKey,
|
|
653
|
+
params,
|
|
654
|
+
});
|
|
550
655
|
|
|
551
656
|
segments.push({
|
|
552
657
|
id: parallelId,
|
|
@@ -569,28 +674,9 @@ export async function resolveParallelSegmentsWithRevalidation<TEnv>(
|
|
|
569
674
|
: {}),
|
|
570
675
|
});
|
|
571
676
|
|
|
572
|
-
if (
|
|
573
|
-
|
|
677
|
+
if (loaderOrder === "after") {
|
|
678
|
+
await resolveSlotLoaders();
|
|
574
679
|
}
|
|
575
|
-
|
|
576
|
-
const loaderResult = await resolveLoadersWithRevalidation(
|
|
577
|
-
parallelEntry,
|
|
578
|
-
context,
|
|
579
|
-
belongsToRoute,
|
|
580
|
-
clientSegmentIds,
|
|
581
|
-
prevParams,
|
|
582
|
-
request,
|
|
583
|
-
prevUrl,
|
|
584
|
-
nextUrl,
|
|
585
|
-
routeKey,
|
|
586
|
-
deps,
|
|
587
|
-
actionContext,
|
|
588
|
-
entry.shortCode,
|
|
589
|
-
stale,
|
|
590
|
-
);
|
|
591
|
-
segments.push(...loaderResult.segments);
|
|
592
|
-
matchedIds.push(...loaderResult.matchedIds);
|
|
593
|
-
resolvedParallelEntries.add(parallelEntry.id);
|
|
594
680
|
}
|
|
595
681
|
|
|
596
682
|
return { segments, matchedIds };
|
|
@@ -798,7 +884,6 @@ export async function resolveSegmentWithRevalidation<TEnv>(
|
|
|
798
884
|
request: Request,
|
|
799
885
|
prevUrl: URL,
|
|
800
886
|
nextUrl: URL,
|
|
801
|
-
loaderPromises: Map<string, Promise<any>>,
|
|
802
887
|
deps: SegmentResolutionDeps<TEnv>,
|
|
803
888
|
actionContext?: ActionContext,
|
|
804
889
|
stale?: boolean,
|
|
@@ -1113,174 +1198,33 @@ export async function resolveOrphanLayoutWithRevalidation<TEnv>(
|
|
|
1113
1198
|
...(orphan.mountPath ? { mountPath: orphan.mountPath } : {}),
|
|
1114
1199
|
});
|
|
1115
1200
|
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
)
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
matchedIds.push(...loaderResult.matchedIds);
|
|
1144
|
-
resolvedParallelEntries.add(parallelEntry.id);
|
|
1145
|
-
}
|
|
1146
|
-
|
|
1147
|
-
const slots = parallelEntry.handler as Record<
|
|
1148
|
-
`@${string}`,
|
|
1149
|
-
| ((ctx: HandlerContext<any, TEnv>) => ReactNode | Promise<ReactNode>)
|
|
1150
|
-
| ReactNode
|
|
1151
|
-
>;
|
|
1152
|
-
// Handler may be undefined in production after static handler eviction.
|
|
1153
|
-
const handler = slots[slot];
|
|
1154
|
-
|
|
1155
|
-
// Use orphan.shortCode (the parent layout) to match the SSR path
|
|
1156
|
-
// (resolveParallelEntry receives parentShortCode = orphan.shortCode).
|
|
1157
|
-
// Using parallelEntry.shortCode would generate IDs the client doesn't know about.
|
|
1158
|
-
const parallelId = `${orphan.shortCode}.${slot}`;
|
|
1159
|
-
matchedIds.push(parallelId);
|
|
1160
|
-
|
|
1161
|
-
const isFullRefetch = clientSegmentIds.size === 0;
|
|
1162
|
-
let shouldResolve: boolean;
|
|
1163
|
-
if (isFullRefetch) {
|
|
1164
|
-
// Same load-bearing rationale as the main parallel path: full refetch
|
|
1165
|
-
// means the client has nothing to fall back to, so the slot must render.
|
|
1166
|
-
traceFullRefetchedParallelSlot(parallelId, belongsToRoute);
|
|
1167
|
-
shouldResolve = true;
|
|
1168
|
-
} else {
|
|
1169
|
-
// When slot is unknown to the client, seed the soft chain with `true`
|
|
1170
|
-
// (orphan parallels always belong to the route — we want them rendered
|
|
1171
|
-
// unless the user explicitly opts out via revalidate()).
|
|
1172
|
-
const defaultOverride = clientSegmentIds.has(parallelId)
|
|
1173
|
-
? undefined
|
|
1174
|
-
: { value: true, reason: "new-segment" };
|
|
1175
|
-
|
|
1176
|
-
const dummySegment: ResolvedSegment = {
|
|
1177
|
-
id: parallelId,
|
|
1178
|
-
namespace: parallelEntry.id,
|
|
1179
|
-
type: "parallel",
|
|
1180
|
-
index: 0,
|
|
1181
|
-
component: null as any,
|
|
1182
|
-
params,
|
|
1183
|
-
slot,
|
|
1184
|
-
belongsToRoute,
|
|
1185
|
-
parallelName: `${parallelEntry.id}.${slot}`,
|
|
1186
|
-
...(parallelEntry.mountPath
|
|
1187
|
-
? { mountPath: parallelEntry.mountPath }
|
|
1188
|
-
: {}),
|
|
1189
|
-
};
|
|
1190
|
-
|
|
1191
|
-
shouldResolve = await evaluateRevalidation({
|
|
1192
|
-
segment: dummySegment,
|
|
1193
|
-
prevParams,
|
|
1194
|
-
getPrevSegment: null,
|
|
1195
|
-
request,
|
|
1196
|
-
prevUrl,
|
|
1197
|
-
nextUrl,
|
|
1198
|
-
revalidations: parallelEntry.revalidate.map((fn, i) => ({
|
|
1199
|
-
name: `revalidate${i}`,
|
|
1200
|
-
fn,
|
|
1201
|
-
})),
|
|
1202
|
-
routeKey,
|
|
1203
|
-
context,
|
|
1204
|
-
actionContext,
|
|
1205
|
-
stale,
|
|
1206
|
-
traceSource: "parallel",
|
|
1207
|
-
defaultOverride,
|
|
1208
|
-
});
|
|
1209
|
-
}
|
|
1210
|
-
emitRevalidationDecision(
|
|
1211
|
-
parallelId,
|
|
1212
|
-
context.pathname,
|
|
1213
|
-
routeKey,
|
|
1214
|
-
shouldResolve,
|
|
1215
|
-
);
|
|
1216
|
-
|
|
1217
|
-
let component: ReactNode | undefined;
|
|
1218
|
-
let handlerRan = false;
|
|
1219
|
-
if (shouldResolve) {
|
|
1220
|
-
component = await tryStaticSlot(parallelEntry, slot, parallelId);
|
|
1221
|
-
}
|
|
1222
|
-
if (component === undefined) {
|
|
1223
|
-
const hasLoadingFallback =
|
|
1224
|
-
parallelEntry.loading !== undefined && parallelEntry.loading !== false;
|
|
1225
|
-
if (!shouldResolve) {
|
|
1226
|
-
component = null;
|
|
1227
|
-
} else if (handler === undefined) {
|
|
1228
|
-
// Handler evicted (production static slot) but static lookup missed.
|
|
1229
|
-
component = null;
|
|
1230
|
-
} else {
|
|
1231
|
-
// Slot-keyed pushes — see resolveParallelSegmentsWithRevalidation.
|
|
1232
|
-
(context as InternalHandlerContext<any, TEnv>)._currentSegmentId =
|
|
1233
|
-
parallelId;
|
|
1234
|
-
handlerRan = true;
|
|
1235
|
-
if (hasLoadingFallback) {
|
|
1236
|
-
const result =
|
|
1237
|
-
typeof handler === "function" ? handler(context) : handler;
|
|
1238
|
-
if (result instanceof Promise) {
|
|
1239
|
-
warnOnStreamedResponse(result, parallelId);
|
|
1240
|
-
const tracked = deps.trackHandler(result, {
|
|
1241
|
-
segmentId: parallelId,
|
|
1242
|
-
segmentType: "parallel",
|
|
1243
|
-
});
|
|
1244
|
-
observeStreamedHandler(
|
|
1245
|
-
tracked,
|
|
1246
|
-
parallelId,
|
|
1247
|
-
"parallel",
|
|
1248
|
-
context.pathname,
|
|
1249
|
-
routeKey,
|
|
1250
|
-
params,
|
|
1251
|
-
);
|
|
1252
|
-
component = tracked as ReactNode;
|
|
1253
|
-
} else {
|
|
1254
|
-
component = result as ReactNode;
|
|
1255
|
-
}
|
|
1256
|
-
} else {
|
|
1257
|
-
component =
|
|
1258
|
-
typeof handler === "function" ? await handler(context) : handler;
|
|
1259
|
-
}
|
|
1260
|
-
}
|
|
1261
|
-
}
|
|
1262
|
-
|
|
1263
|
-
segments.push({
|
|
1264
|
-
id: parallelId,
|
|
1265
|
-
namespace: parallelEntry.id,
|
|
1266
|
-
type: "parallel",
|
|
1267
|
-
index: 0,
|
|
1268
|
-
component,
|
|
1269
|
-
loading: parallelEntry.loading === false ? null : parallelEntry.loading,
|
|
1270
|
-
transition: applyViewTransitionDefault(
|
|
1271
|
-
parallelEntry.transition,
|
|
1272
|
-
deps.viewTransitionDefault,
|
|
1273
|
-
),
|
|
1274
|
-
params,
|
|
1275
|
-
slot,
|
|
1276
|
-
_handlerRan: handlerRan,
|
|
1277
|
-
belongsToRoute,
|
|
1278
|
-
parallelName: `${parallelEntry.id}.${slot}`,
|
|
1279
|
-
...(parallelEntry.mountPath
|
|
1280
|
-
? { mountPath: parallelEntry.mountPath }
|
|
1281
|
-
: {}),
|
|
1282
|
-
});
|
|
1283
|
-
}
|
|
1201
|
+
// Resolve the orphan layout's parallel slots through the shared main-path
|
|
1202
|
+
// helper. The orphan policy is carried by explicit args, byte-for-byte:
|
|
1203
|
+
// - parentChainDefault "force-render": an unknown parent-chain slot seeds
|
|
1204
|
+
// `true` (orphan parallels always belong to the route — the #482 guard),
|
|
1205
|
+
// where the main path would seed `belongsToRoute || isNewParent`.
|
|
1206
|
+
// - loaderOrder "before": a slot's loaders are emitted before the slot
|
|
1207
|
+
// segment, matching the prior inlined order.
|
|
1208
|
+
// `entry.shortCode` inside the helper is `orphan.shortCode` (orphan is passed
|
|
1209
|
+
// as `entry`), so the parallel ids + loader shortCodeOverride are unchanged.
|
|
1210
|
+
const parallelResult = await resolveParallelSegmentsWithRevalidation(
|
|
1211
|
+
orphan,
|
|
1212
|
+
params,
|
|
1213
|
+
context,
|
|
1214
|
+
belongsToRoute,
|
|
1215
|
+
clientSegmentIds,
|
|
1216
|
+
prevParams,
|
|
1217
|
+
request,
|
|
1218
|
+
prevUrl,
|
|
1219
|
+
nextUrl,
|
|
1220
|
+
routeKey,
|
|
1221
|
+
deps,
|
|
1222
|
+
actionContext,
|
|
1223
|
+
stale,
|
|
1224
|
+
{ parentChainDefault: "force-render", loaderOrder: "before" },
|
|
1225
|
+
);
|
|
1226
|
+
segments.push(...parallelResult.segments);
|
|
1227
|
+
matchedIds.push(...parallelResult.matchedIds);
|
|
1284
1228
|
|
|
1285
1229
|
return { segments, matchedIds };
|
|
1286
1230
|
}
|
|
@@ -1298,7 +1242,6 @@ export async function resolveAllSegmentsWithRevalidation<TEnv>(
|
|
|
1298
1242
|
request: Request,
|
|
1299
1243
|
prevUrl: URL,
|
|
1300
1244
|
nextUrl: URL,
|
|
1301
|
-
loaderPromises: Map<string, Promise<any>>,
|
|
1302
1245
|
actionContext: ActionContext | undefined,
|
|
1303
1246
|
interceptResult: { intercept: any; entry: EntryData } | null,
|
|
1304
1247
|
localRouteName: string,
|
|
@@ -1350,7 +1293,6 @@ export async function resolveAllSegmentsWithRevalidation<TEnv>(
|
|
|
1350
1293
|
request,
|
|
1351
1294
|
prevUrl,
|
|
1352
1295
|
nextUrl,
|
|
1353
|
-
loaderPromises,
|
|
1354
1296
|
deps,
|
|
1355
1297
|
actionContext,
|
|
1356
1298
|
stale,
|
|
@@ -68,7 +68,6 @@ export interface SegmentWrappers<TEnv = any> {
|
|
|
68
68
|
request: Request,
|
|
69
69
|
prevUrl: URL,
|
|
70
70
|
nextUrl: URL,
|
|
71
|
-
loaderPromises: Map<string, Promise<any>>,
|
|
72
71
|
actionContext:
|
|
73
72
|
| {
|
|
74
73
|
actionId?: string;
|
|
@@ -192,7 +191,6 @@ export function createSegmentWrappers<TEnv = any>(
|
|
|
192
191
|
request: Request,
|
|
193
192
|
prevUrl: URL,
|
|
194
193
|
nextUrl: URL,
|
|
195
|
-
loaderPromises: Map<string, Promise<any>>,
|
|
196
194
|
actionContext:
|
|
197
195
|
| {
|
|
198
196
|
actionId?: string;
|
|
@@ -216,7 +214,6 @@ export function createSegmentWrappers<TEnv = any>(
|
|
|
216
214
|
request,
|
|
217
215
|
prevUrl,
|
|
218
216
|
nextUrl,
|
|
219
|
-
loaderPromises,
|
|
220
217
|
actionContext,
|
|
221
218
|
interceptResult,
|
|
222
219
|
localRouteName,
|
|
@@ -15,10 +15,6 @@ export interface TrieMatchResult {
|
|
|
15
15
|
sp: string;
|
|
16
16
|
/** Matched route params */
|
|
17
17
|
params: Record<string, string>;
|
|
18
|
-
/** Optional param names declared on the route. Absent params are omitted
|
|
19
|
-
* from `params` (read as `undefined`), matching the
|
|
20
|
-
* `ExtractParams<"/:locale?/...">` type. */
|
|
21
|
-
optionalParams?: string[];
|
|
22
18
|
/** Redirect target if trailing slash requires it */
|
|
23
19
|
redirectTo?: string;
|
|
24
20
|
/** Route has pre-rendered data available */
|
|
@@ -182,6 +178,9 @@ function walkTrie(
|
|
|
182
178
|
}
|
|
183
179
|
|
|
184
180
|
if (node.xp) {
|
|
181
|
+
// node.xp keys are pre-sorted longest-suffix-first at build time
|
|
182
|
+
// (route-trie.ts sortSuffixParams), so the first match is the most specific
|
|
183
|
+
// suffix: `/app.min.js` matches `:file.min.js` before `:file.js`.
|
|
185
184
|
for (const suffix in node.xp) {
|
|
186
185
|
if (segment.endsWith(suffix) && segment.length > suffix.length) {
|
|
187
186
|
const paramValue = segment.slice(0, -suffix.length);
|
|
@@ -274,7 +273,6 @@ function validateAndBuild(
|
|
|
274
273
|
params,
|
|
275
274
|
};
|
|
276
275
|
|
|
277
|
-
if (leaf.op) result.optionalParams = leaf.op;
|
|
278
276
|
if (redirectTo) result.redirectTo = redirectTo;
|
|
279
277
|
if (leaf.pr) result.pr = true;
|
|
280
278
|
if (leaf.pt) result.pt = true;
|
package/src/router.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
2
|
import { createCacheScope } from "./cache/cache-scope.js";
|
|
3
|
-
import {
|
|
4
|
-
setCacheProfiles,
|
|
5
|
-
resolveCacheProfiles,
|
|
6
|
-
} from "./cache/profile-registry.js";
|
|
3
|
+
import { resolveCacheProfiles } from "./cache/profile-registry.js";
|
|
7
4
|
import { isCachedFunction } from "./cache/taint.js";
|
|
8
5
|
import { assertClientComponent } from "./component-utils.js";
|
|
9
6
|
import { DefaultDocument } from "./components/DefaultDocument.js";
|
|
@@ -181,11 +178,10 @@ export function createRouter<TEnv = any>(
|
|
|
181
178
|
// Resolve telemetry sink (no-op when not configured)
|
|
182
179
|
const telemetry = resolveSink(telemetrySink);
|
|
183
180
|
|
|
184
|
-
// Resolve cache profiles: merge user config with guaranteed default
|
|
185
|
-
// This resolved map is
|
|
186
|
-
//
|
|
181
|
+
// Resolve cache profiles: merge user config with the guaranteed default
|
|
182
|
+
// profile. This resolved map is threaded onto each request context; the
|
|
183
|
+
// "use cache: <profile>" runtime path reads it request-scoped.
|
|
187
184
|
const resolvedCacheProfiles = resolveCacheProfiles(cacheProfilesOption);
|
|
188
|
-
setCacheProfiles(resolvedCacheProfiles);
|
|
189
185
|
|
|
190
186
|
// Source file: prefer Vite-injected path (zero cost), fall back to
|
|
191
187
|
// stack trace parsing for non-Vite environments (e.g. tests).
|
|
@@ -355,7 +351,6 @@ export function createRouter<TEnv = any>(
|
|
|
355
351
|
regex,
|
|
356
352
|
paramNames,
|
|
357
353
|
handler,
|
|
358
|
-
mountPrefix,
|
|
359
354
|
});
|
|
360
355
|
}
|
|
361
356
|
|
package/src/rsc/handler.ts
CHANGED
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
interceptRedirectForPartial,
|
|
32
32
|
buildRouteMiddlewareEntries,
|
|
33
33
|
} from "./helpers.js";
|
|
34
|
+
import { guardOutgoingRedirect } from "./redirect-guard.js";
|
|
34
35
|
import { isWebSocketUpgradeResponse } from "../response-utils.js";
|
|
35
36
|
import {
|
|
36
37
|
handleResponseRoute,
|
|
@@ -292,12 +293,13 @@ export function createRSCHandler<
|
|
|
292
293
|
function createRedirectFlightResponse(
|
|
293
294
|
redirectUrl: string,
|
|
294
295
|
locationState?: Record<string, unknown>,
|
|
296
|
+
external?: boolean,
|
|
295
297
|
): Response {
|
|
296
298
|
const redirectPayload: RscPayload = {
|
|
297
299
|
metadata: {
|
|
298
300
|
pathname: redirectUrl,
|
|
299
301
|
segments: [],
|
|
300
|
-
redirect: { url: redirectUrl },
|
|
302
|
+
redirect: { url: redirectUrl, ...(external && { external: true }) },
|
|
301
303
|
...(locationState && { locationState }),
|
|
302
304
|
},
|
|
303
305
|
};
|
|
@@ -570,7 +572,12 @@ export function createRSCHandler<
|
|
|
570
572
|
response.headers.set("Server-Timing", fullTiming);
|
|
571
573
|
}
|
|
572
574
|
|
|
573
|
-
|
|
575
|
+
// Single open-redirect chokepoint: every response (PE, full-page,
|
|
576
|
+
// middleware short-circuit, response-route) funnels through here, so
|
|
577
|
+
// guarding browser-followed (3xx) redirects once covers them all and any
|
|
578
|
+
// future redirect exit. Soft SPA/Flight redirects are 200/204 and pass
|
|
579
|
+
// through untouched (validated client-side instead).
|
|
580
|
+
return guardOutgoingRedirect(response, url.origin, router.basename);
|
|
574
581
|
});
|
|
575
582
|
};
|
|
576
583
|
|