@rangojs/router 0.0.0-experimental.e16b7c00 → 0.0.0-experimental.e9c0b2f2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +8 -0
- package/README.md +64 -6
- 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 +195 -52
- 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/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
- 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/testing/vitest.js +82 -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 +1165 -310
- 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 +71 -7
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +61 -1
- package/skills/bundle-analysis/SKILL.md +2 -2
- package/skills/cache-guide/SKILL.md +2 -2
- package/skills/caching/SKILL.md +92 -10
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +4 -2
- package/skills/document-cache/SKILL.md +2 -2
- package/skills/handler-use/SKILL.md +1 -1
- package/skills/hooks/SKILL.md +40 -29
- package/skills/host-router/SKILL.md +80 -3
- package/skills/intercept/SKILL.md +5 -3
- package/skills/layout/SKILL.md +11 -6
- package/skills/loader/SKILL.md +25 -19
- package/skills/middleware/SKILL.md +4 -2
- package/skills/migrate-nextjs/SKILL.md +3 -1
- package/skills/migrate-react-router/SKILL.md +4 -2
- package/skills/mime-routes/SKILL.md +2 -2
- package/skills/observability/SKILL.md +61 -4
- package/skills/parallel/SKILL.md +9 -4
- package/skills/prerender/SKILL.md +31 -10
- package/skills/rango/SKILL.md +31 -10
- package/skills/response-routes/SKILL.md +63 -45
- package/skills/route/SKILL.md +14 -2
- package/skills/router-setup/SKILL.md +27 -3
- package/skills/scripts/SKILL.md +179 -0
- package/skills/server-actions/SKILL.md +25 -1
- package/skills/tailwind/SKILL.md +27 -3
- package/skills/testing/SKILL.md +129 -0
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +127 -0
- package/skills/testing/client-components.md +124 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +129 -0
- package/skills/testing/loader.md +128 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +121 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +84 -0
- package/skills/testing/server-actions.md +107 -0
- package/skills/testing/server-tree.md +128 -0
- package/skills/testing/setup.md +123 -0
- package/skills/typesafety/SKILL.md +6 -5
- package/skills/use-cache/SKILL.md +10 -9
- package/skills/vercel/SKILL.md +128 -0
- package/src/__augment-tests__/augmented.check.ts +2 -3
- package/src/__internal.ts +0 -65
- package/src/browser/action-coordinator.ts +1 -1
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +14 -27
- package/src/browser/connection-warmup.ts +134 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/event-controller.ts +115 -89
- package/src/browser/invalidate-client-cache.ts +52 -0
- package/src/browser/navigation-bridge.ts +16 -52
- package/src/browser/navigation-client.ts +84 -69
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +25 -74
- package/src/browser/navigation-transaction.ts +0 -32
- package/src/browser/partial-update.ts +81 -127
- package/src/browser/prefetch/cache.ts +99 -72
- package/src/browser/prefetch/fetch.ts +176 -34
- package/src/browser/prefetch/queue.ts +6 -3
- package/src/browser/rango-state.ts +157 -115
- package/src/browser/react/Link.tsx +30 -7
- package/src/browser/react/NavigationProvider.tsx +32 -95
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/filter-segment-order.ts +17 -2
- package/src/browser/react/index.ts +0 -51
- package/src/browser/react/location-state-shared.ts +14 -15
- package/src/browser/react/location-state.ts +0 -1
- package/src/browser/react/use-action.ts +6 -15
- package/src/browser/react/use-handle.ts +0 -5
- package/src/browser/react/use-href.tsx +8 -1
- package/src/browser/react/use-link-status.ts +33 -8
- package/src/browser/react/use-navigation.ts +10 -5
- package/src/browser/react/use-params.ts +0 -2
- package/src/browser/react/use-router.ts +6 -4
- package/src/browser/react/use-search-params.ts +0 -5
- package/src/browser/react/use-segments.ts +0 -13
- package/src/browser/response-adapter.ts +41 -4
- package/src/browser/rsc-router.tsx +43 -18
- package/src/browser/scroll-restoration.ts +8 -3
- package/src/browser/server-action-bridge.ts +194 -28
- package/src/browser/types.ts +40 -21
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/generate-route-types.ts +1 -1
- package/src/build/index.ts +8 -4
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +117 -15
- package/src/build/route-types/ast-route-extraction.ts +15 -8
- package/src/build/route-types/codegen.ts +12 -1
- package/src/build/route-types/include-resolution.ts +116 -22
- package/src/build/route-types/param-extraction.ts +6 -3
- package/src/build/route-types/per-module-writer.ts +15 -2
- package/src/build/route-types/router-processing.ts +77 -41
- package/src/build/route-types/source-scan.ts +105 -7
- package/src/cache/cache-key-utils.ts +29 -13
- package/src/cache/cache-policy.ts +42 -62
- package/src/cache/cache-runtime.ts +126 -30
- package/src/cache/cache-scope.ts +118 -43
- package/src/cache/cache-tag.ts +7 -39
- package/src/cache/cf/cf-base64.ts +33 -0
- package/src/cache/cf/cf-cache-constants.ts +127 -0
- package/src/cache/cf/cf-cache-store.ts +1257 -537
- package/src/cache/cf/cf-cache-types.ts +349 -0
- package/src/cache/cf/cf-kv-utils.ts +46 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
- package/src/cache/cf/index.ts +6 -19
- package/src/cache/document-cache.ts +32 -32
- package/src/cache/handle-snapshot.ts +70 -0
- package/src/cache/index.ts +20 -24
- package/src/cache/memory-segment-store.ts +3 -48
- package/src/cache/profile-registry.ts +31 -31
- package/src/cache/read-through-swr.ts +41 -11
- package/src/cache/segment-codec.ts +9 -17
- package/src/cache/tag-invalidation.ts +29 -5
- package/src/cache/types.ts +14 -104
- package/src/cache/vercel/index.ts +11 -0
- package/src/cache/vercel/vercel-cache-store.ts +855 -0
- package/src/client.rsc.tsx +42 -22
- package/src/client.tsx +31 -58
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +109 -0
- package/src/component-utils.ts +19 -0
- package/src/components/DefaultDocument.tsx +8 -2
- package/src/context-var.ts +13 -1
- package/src/decode-loader-results.ts +18 -2
- package/src/defer.ts +196 -0
- package/src/deps/ssr.ts +0 -1
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +0 -3
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +28 -18
- package/src/handles/MetaTags.tsx +56 -19
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +37 -8
- package/src/handles/is-thenable.ts +19 -0
- package/src/handles/meta.ts +51 -40
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +9 -60
- package/src/host/errors.ts +0 -24
- package/src/host/index.ts +6 -0
- package/src/host/pattern-matcher.ts +23 -52
- package/src/host/router.ts +1 -65
- package/src/host/testing.ts +40 -27
- package/src/host/types.ts +6 -2
- package/src/href-client.ts +7 -12
- package/src/index.rsc.ts +75 -8
- package/src/index.ts +60 -4
- package/src/internal-debug.ts +2 -4
- package/src/loader.rsc.ts +19 -9
- package/src/loader.ts +12 -4
- package/src/network-error-thrower.tsx +1 -6
- package/src/outlet-provider.tsx +1 -5
- package/src/prerender/param-hash.ts +16 -16
- package/src/prerender/store.ts +32 -37
- package/src/prerender.ts +58 -3
- package/src/redirect-origin.ts +100 -0
- package/src/regex-escape.ts +8 -0
- package/src/response-utils.ts +25 -0
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +1 -44
- package/src/route-definition/dsl-helpers.ts +39 -21
- package/src/route-definition/helpers-types.ts +3 -3
- package/src/route-definition/redirect.ts +44 -11
- package/src/route-definition/resolve-handler-use.ts +6 -0
- package/src/route-map-builder.ts +0 -16
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +58 -23
- package/src/router/error-handling.ts +44 -17
- package/src/router/find-match.ts +44 -23
- package/src/router/handler-context.ts +6 -1
- package/src/router/instrument.ts +350 -0
- package/src/router/intercept-resolution.ts +35 -2
- package/src/router/lazy-includes.ts +7 -44
- package/src/router/loader-resolution.ts +139 -73
- package/src/router/logging.ts +0 -6
- package/src/router/manifest.ts +18 -29
- package/src/router/match-api.ts +0 -20
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +57 -58
- package/src/router/match-middleware/background-revalidation.ts +6 -7
- package/src/router/match-middleware/cache-lookup.ts +115 -194
- package/src/router/match-middleware/cache-store.ts +28 -32
- package/src/router/match-middleware/intercept-resolution.ts +0 -22
- package/src/router/match-middleware/segment-resolution.ts +0 -22
- package/src/router/match-pipelines.ts +1 -42
- package/src/router/match-result.ts +1 -52
- package/src/router/metrics.ts +0 -34
- package/src/router/middleware-types.ts +0 -116
- package/src/router/middleware.ts +175 -90
- package/src/router/navigation-snapshot.ts +0 -51
- package/src/router/params-util.ts +23 -0
- package/src/router/pattern-matching.ts +47 -89
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prerender-match.ts +101 -64
- package/src/router/request-classification.ts +25 -35
- package/src/router/revalidation.ts +75 -81
- package/src/router/route-snapshot.ts +0 -1
- package/src/router/router-context.ts +3 -28
- package/src/router/router-interfaces.ts +38 -7
- package/src/router/router-options.ts +111 -4
- package/src/router/segment-resolution/fresh.ts +66 -78
- package/src/router/segment-resolution/helpers.ts +86 -6
- package/src/router/segment-resolution/loader-cache.ts +57 -23
- package/src/router/segment-resolution/revalidation.ts +212 -304
- package/src/router/segment-resolution/static-store.ts +19 -5
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution.ts +5 -1
- package/src/router/segment-wrappers.ts +6 -5
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/telemetry-otel.ts +161 -199
- package/src/router/telemetry.ts +96 -19
- package/src/router/timeout.ts +0 -20
- package/src/router/tracing.ts +206 -0
- package/src/router/trie-matching.ts +163 -64
- package/src/router/types.ts +1 -63
- package/src/router/url-params.ts +0 -5
- package/src/router.ts +87 -37
- package/src/rsc/handler-context.ts +1 -0
- package/src/rsc/handler.ts +232 -153
- package/src/rsc/helpers.ts +97 -4
- package/src/rsc/index.ts +1 -4
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +114 -38
- package/src/rsc/manifest-init.ts +28 -41
- package/src/rsc/origin-guard.ts +11 -15
- package/src/rsc/progressive-enhancement.ts +59 -9
- package/src/rsc/redirect-guard.ts +99 -0
- package/src/rsc/response-cache-serve.ts +238 -0
- package/src/rsc/response-error.ts +79 -12
- package/src/rsc/response-route-handler.ts +57 -147
- package/src/rsc/rsc-rendering.ts +64 -24
- package/src/rsc/runtime-warnings.ts +14 -0
- package/src/rsc/server-action.ts +244 -81
- package/src/rsc/types.ts +15 -3
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +31 -26
- package/src/segment-loader-promise.ts +31 -4
- package/src/segment-system.tsx +89 -89
- package/src/server/context.ts +32 -0
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +52 -1
- package/src/server/handle-store.ts +21 -38
- package/src/server/loader-registry.ts +21 -42
- package/src/server/request-context.ts +189 -131
- package/src/ssr/index.tsx +19 -18
- package/src/static-handler.ts +10 -13
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +40 -0
- package/src/testing/dispatch.ts +701 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +128 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +272 -0
- package/src/testing/e2e/parity.ts +387 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +257 -0
- package/src/testing/generated-routes.ts +183 -0
- package/src/testing/index.ts +99 -0
- package/src/testing/internal/context.ts +371 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +343 -0
- package/src/testing/render-route.tsx +581 -0
- package/src/testing/run-loader.ts +385 -0
- package/src/testing/run-middleware.ts +205 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +305 -0
- package/src/theme/ThemeProvider.tsx +20 -58
- package/src/theme/ThemeScript.tsx +7 -9
- package/src/theme/constants.ts +52 -13
- package/src/theme/index.ts +0 -7
- package/src/theme/theme-context.ts +1 -5
- package/src/theme/theme-script.ts +22 -21
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +0 -35
- package/src/types/cache-types.ts +3 -3
- package/src/types/error-types.ts +25 -89
- package/src/types/global-namespace.ts +15 -15
- package/src/types/handler-context.ts +44 -14
- package/src/types/index.ts +0 -10
- package/src/types/loader-types.ts +6 -3
- package/src/types/request-scope.ts +8 -22
- package/src/types/route-config.ts +6 -50
- package/src/types/route-entry.ts +0 -6
- package/src/types/segments.ts +0 -13
- package/src/urls/include-helper.ts +0 -4
- package/src/urls/index.ts +1 -8
- package/src/urls/path-helper-types.ts +8 -2
- package/src/urls/path-helper.ts +0 -54
- package/src/urls/type-extraction.ts +33 -24
- package/src/urls/urls-function.ts +0 -13
- package/src/use-loader.tsx +0 -186
- package/src/vercel/index.ts +11 -0
- package/src/vercel/tracing.ts +88 -0
- package/src/vite/discovery/bundle-postprocess.ts +2 -1
- package/src/vite/discovery/discover-routers.ts +33 -42
- package/src/vite/discovery/prerender-collection.ts +33 -46
- package/src/vite/discovery/state.ts +12 -1
- package/src/vite/discovery/virtual-module-codegen.ts +1 -11
- package/src/vite/index.ts +2 -0
- package/src/vite/plugin-types.ts +143 -10
- package/src/vite/plugins/cjs-to-esm.ts +8 -12
- package/src/vite/plugins/client-ref-dedup.ts +0 -11
- package/src/vite/plugins/client-ref-hashing.ts +0 -10
- package/src/vite/plugins/cloudflare-protocol-stub.ts +0 -20
- package/src/vite/plugins/expose-action-id.ts +2 -73
- package/src/vite/plugins/expose-id-utils.ts +85 -56
- package/src/vite/plugins/expose-ids/export-analysis.ts +30 -43
- package/src/vite/plugins/expose-ids/handler-transform.ts +5 -31
- package/src/vite/plugins/expose-ids/loader-transform.ts +12 -20
- package/src/vite/plugins/expose-ids/router-transform.ts +98 -26
- package/src/vite/plugins/expose-internal-ids.ts +10 -1
- package/src/vite/plugins/performance-tracks.ts +0 -3
- package/src/vite/plugins/refresh-cmd.ts +1 -1
- package/src/vite/plugins/use-cache-transform.ts +21 -46
- package/src/vite/plugins/vercel-output.ts +295 -0
- package/src/vite/plugins/version-injector.ts +0 -20
- package/src/vite/plugins/version-plugin.ts +6 -66
- package/src/vite/plugins/virtual-entries.ts +70 -17
- package/src/vite/rango.ts +135 -134
- package/src/vite/router-discovery.ts +21 -8
- package/src/vite/utils/ast-handler-extract.ts +11 -20
- package/src/vite/utils/bundle-analysis.ts +6 -13
- package/src/vite/utils/client-chunks.ts +0 -6
- package/src/vite/utils/directive-prologue.ts +40 -0
- package/src/vite/utils/forward-user-plugins.ts +0 -22
- package/src/vite/utils/manifest-utils.ts +4 -75
- package/src/vite/utils/package-resolution.ts +1 -73
- package/src/vite/utils/prerender-utils.ts +54 -40
- package/src/vite/utils/shared-utils.ts +8 -37
- package/src/browser/shallow.ts +0 -40
- package/src/router/middleware-cookies.ts +0 -55
|
@@ -11,8 +11,15 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
14
|
+
import { parseCookiesFromHeader } from "./cookie-parse.js";
|
|
14
15
|
import type { CacheErrorCategory } from "../cache/cache-error.js";
|
|
15
16
|
import type { CookieOptions } from "../router/middleware.js";
|
|
17
|
+
import {
|
|
18
|
+
KEEP_CACHE_HEADER,
|
|
19
|
+
getRawCookieValue,
|
|
20
|
+
mintStateValue,
|
|
21
|
+
serializeStateCookie,
|
|
22
|
+
} from "../browser/cookie-name.js";
|
|
16
23
|
import type { LoaderDefinition, LoaderContext } from "../types.js";
|
|
17
24
|
import type { ScopedReverseFunction } from "../reverse.js";
|
|
18
25
|
import type {
|
|
@@ -34,13 +41,20 @@ import {
|
|
|
34
41
|
type HandleData,
|
|
35
42
|
} from "./handle-store.js";
|
|
36
43
|
import { isHandle } from "../handle.js";
|
|
37
|
-
import {
|
|
44
|
+
import { withDefer } from "../defer.js";
|
|
45
|
+
import { type MetricsStore } from "./context.js";
|
|
46
|
+
import { observePhase, PHASES } from "../router/instrument.js";
|
|
38
47
|
import { getFetchableLoader } from "./fetchable-loader-store.js";
|
|
39
48
|
import type { SegmentCacheStore } from "../cache/types.js";
|
|
40
49
|
import type { Theme, ResolvedThemeConfig } from "../theme/types.js";
|
|
41
50
|
import type { ExecutionContext, RequestScope } from "../types/request-scope.js";
|
|
51
|
+
import type { ResolvedTracing } from "../router/tracing.js";
|
|
42
52
|
import { fireAndForgetWaitUntil } from "../types/request-scope.js";
|
|
43
|
-
import {
|
|
53
|
+
import {
|
|
54
|
+
THEME_COOKIE,
|
|
55
|
+
isValidTheme,
|
|
56
|
+
warnInvalidTheme,
|
|
57
|
+
} from "../theme/constants.js";
|
|
44
58
|
import type { LocationStateEntry } from "../browser/react/location-state-shared.js";
|
|
45
59
|
import { NOCACHE_SYMBOL, assertNotInsideCacheExec } from "../cache/taint.js";
|
|
46
60
|
import { isInsideCacheScope } from "./context.js";
|
|
@@ -48,7 +62,12 @@ import {
|
|
|
48
62
|
createReverseFunction,
|
|
49
63
|
stripInternalParams,
|
|
50
64
|
} from "../router/handler-context.js";
|
|
51
|
-
import {
|
|
65
|
+
import {
|
|
66
|
+
getGlobalRouteMap,
|
|
67
|
+
isRouteRootScoped,
|
|
68
|
+
getSearchSchema,
|
|
69
|
+
} from "../route-map-builder.js";
|
|
70
|
+
import { parseSearchParams } from "../search-params.js";
|
|
52
71
|
import { invariant } from "../errors.js";
|
|
53
72
|
import { isAutoGeneratedRouteName } from "../route-name.js";
|
|
54
73
|
|
|
@@ -103,6 +122,10 @@ export interface RequestContext<
|
|
|
103
122
|
setStatus(status: number): void;
|
|
104
123
|
/** @internal Set status bypassing cache-exec guard (for framework error handling) */
|
|
105
124
|
_setStatus(status: number): void;
|
|
125
|
+
/** @internal Rotate the rango state cookie (server seat of invalidateClientCache). */
|
|
126
|
+
_rotateStateCookie(): void;
|
|
127
|
+
/** @internal Set the keepClientCache() directive header on the response. */
|
|
128
|
+
_setKeepCacheDirective(): void;
|
|
106
129
|
|
|
107
130
|
/**
|
|
108
131
|
* Access loader data or push handle data.
|
|
@@ -293,7 +316,9 @@ export interface RequestContext<
|
|
|
293
316
|
|
|
294
317
|
/**
|
|
295
318
|
* @internal Set to true when the matched entry tree contains any `loading()`
|
|
296
|
-
* entries (streaming).
|
|
319
|
+
* entries (streaming). On a streaming tree rendered() waits for the streaming
|
|
320
|
+
* handlers to settle (via handleStore.settled) before resolving, and the
|
|
321
|
+
* deadlock guard state is kept live until that wait completes.
|
|
297
322
|
*/
|
|
298
323
|
_treeHasStreaming?: boolean;
|
|
299
324
|
|
|
@@ -317,6 +342,18 @@ export interface RequestContext<
|
|
|
317
342
|
*/
|
|
318
343
|
_renderBarrierHandleSnapshot?: HandleData;
|
|
319
344
|
|
|
345
|
+
/**
|
|
346
|
+
* @internal The deadlock guard window is closed (no further handler-awaits-
|
|
347
|
+
* loader cycle is possible). For non-streaming trees this is set when the
|
|
348
|
+
* barrier resolves. For streaming trees the window stays open until
|
|
349
|
+
* handleStore.settled — rendered() keeps waiting past the barrier and a
|
|
350
|
+
* loading() handler can still resume and await a still-waiting loader — so it
|
|
351
|
+
* is set only after settled. The guard (loader-resolution `setupLoaderAccess`)
|
|
352
|
+
* reads this instead of `_renderBarrierSegmentOrder` so it does not go blind
|
|
353
|
+
* during the streaming settle wait.
|
|
354
|
+
*/
|
|
355
|
+
_renderBarrierGuardClosed?: boolean;
|
|
356
|
+
|
|
320
357
|
/** @internal Per-request error dedup set for onError reporting */
|
|
321
358
|
_reportedErrors: WeakSet<object>;
|
|
322
359
|
|
|
@@ -338,6 +375,9 @@ export interface RequestContext<
|
|
|
338
375
|
/** @internal Request-scoped performance metrics store */
|
|
339
376
|
_metricsStore?: MetricsStore;
|
|
340
377
|
|
|
378
|
+
/** @internal Resolved platform phase-span tracing for this request (Cloudflare or OTel) */
|
|
379
|
+
_tracing?: ResolvedTracing;
|
|
380
|
+
|
|
341
381
|
/** @internal Router basename for this request (used by redirect()) */
|
|
342
382
|
_basename?: string;
|
|
343
383
|
|
|
@@ -346,6 +386,15 @@ export interface RequestContext<
|
|
|
346
386
|
* to avoid a second resolveRoute call. Cleared on HMR invalidation.
|
|
347
387
|
*/
|
|
348
388
|
_classifiedRoute?: import("../router/route-snapshot.js").RouteSnapshot;
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* @internal Coarse route-level cache signal for the X-Rango-Cache debug
|
|
392
|
+
* header. Populated by match/matchPartial only when the debug cache signal
|
|
393
|
+
* gate is enabled (debugCacheSignal option or RANGO_TEST_SIGNALS=1). Read by
|
|
394
|
+
* the response-finalization path (createResponseWithMergedHeaders). Undefined
|
|
395
|
+
* when the gate is off, so no header is emitted.
|
|
396
|
+
*/
|
|
397
|
+
_cacheSignal?: import("../router/telemetry.js").CacheSegmentSignal[];
|
|
349
398
|
}
|
|
350
399
|
|
|
351
400
|
/**
|
|
@@ -381,13 +430,17 @@ export type PublicRequestContext<
|
|
|
381
430
|
| "_renderBarrierWaiters"
|
|
382
431
|
| "_handlerLoaderDeps"
|
|
383
432
|
| "_renderBarrierHandleSnapshot"
|
|
433
|
+
| "_renderBarrierGuardClosed"
|
|
384
434
|
| "_reportBackgroundError"
|
|
385
435
|
| "_debugPerformance"
|
|
386
436
|
| "_metricsStore"
|
|
387
437
|
| "_basename"
|
|
388
438
|
| "_setStatus"
|
|
439
|
+
| "_rotateStateCookie"
|
|
440
|
+
| "_setKeepCacheDirective"
|
|
389
441
|
| "_variables"
|
|
390
442
|
| "_classifiedRoute"
|
|
443
|
+
| "_cacheSignal"
|
|
391
444
|
| "res"
|
|
392
445
|
>;
|
|
393
446
|
|
|
@@ -439,6 +492,7 @@ export function _getRequestContext<TEnv = DefaultEnv>():
|
|
|
439
492
|
export function setRequestContextParams(
|
|
440
493
|
params: Record<string, string>,
|
|
441
494
|
routeName?: string,
|
|
495
|
+
routeMap?: Record<string, string>,
|
|
442
496
|
): void {
|
|
443
497
|
const ctx = requestContextStorage.getStore();
|
|
444
498
|
if (ctx) {
|
|
@@ -451,9 +505,13 @@ export function setRequestContextParams(
|
|
|
451
505
|
: undefined
|
|
452
506
|
) as DefaultRouteName | undefined;
|
|
453
507
|
}
|
|
454
|
-
// Update reverse with scoped resolution now that route is known
|
|
508
|
+
// Update reverse with scoped resolution now that route is known. Production
|
|
509
|
+
// omits routeMap and uses the global map (routes are registered globally);
|
|
510
|
+
// the testing primitives (renderToFlightString/renderServerTree) pass a
|
|
511
|
+
// scoped routeMap so `ctx.reverse` is not order-dependent on whatever router
|
|
512
|
+
// registered last.
|
|
455
513
|
ctx.reverse = createReverseFunction(
|
|
456
|
-
getGlobalRouteMap(),
|
|
514
|
+
routeMap ?? getGlobalRouteMap(),
|
|
457
515
|
routeName,
|
|
458
516
|
params,
|
|
459
517
|
routeName ? isRouteRootScoped(routeName) : undefined,
|
|
@@ -487,16 +545,6 @@ export function getLocationState(): LocationStateEntry[] | undefined {
|
|
|
487
545
|
return ctx?._locationState;
|
|
488
546
|
}
|
|
489
547
|
|
|
490
|
-
/**
|
|
491
|
-
* Get the current request context, throwing if not available
|
|
492
|
-
* @deprecated Use getRequestContext() directly — it now throws if outside context
|
|
493
|
-
*/
|
|
494
|
-
export function requireRequestContext<
|
|
495
|
-
TEnv = DefaultEnv,
|
|
496
|
-
>(): RequestContext<TEnv> {
|
|
497
|
-
return getRequestContext<TEnv>();
|
|
498
|
-
}
|
|
499
|
-
|
|
500
548
|
export type { ExecutionContext };
|
|
501
549
|
|
|
502
550
|
/**
|
|
@@ -525,6 +573,10 @@ export interface CreateRequestContextOptions<TEnv> {
|
|
|
525
573
|
executionContext?: ExecutionContext;
|
|
526
574
|
/** Optional theme configuration (enables ctx.theme and ctx.setTheme) */
|
|
527
575
|
themeConfig?: ResolvedThemeConfig | null;
|
|
576
|
+
/** Resolved rango state cookie name, for the server seat of invalidateClientCache(). */
|
|
577
|
+
stateCookieName?: string;
|
|
578
|
+
/** Build version, used as the prefix of a server-rotated rango state value. */
|
|
579
|
+
version?: string;
|
|
528
580
|
}
|
|
529
581
|
|
|
530
582
|
/**
|
|
@@ -549,12 +601,13 @@ export function createRequestContext<TEnv>(
|
|
|
549
601
|
cacheProfiles,
|
|
550
602
|
executionContext,
|
|
551
603
|
themeConfig,
|
|
604
|
+
stateCookieName,
|
|
605
|
+
version: stateVersion,
|
|
552
606
|
} = options;
|
|
553
607
|
const cookieHeader = request.headers.get("Cookie");
|
|
608
|
+
let rangoStateRotated = false;
|
|
554
609
|
let parsedCookies: Record<string, string> | null = null;
|
|
555
610
|
|
|
556
|
-
// Create stub response for collecting headers/cookies.
|
|
557
|
-
// All cookie/header mutations go here; cookie reads derive from it.
|
|
558
611
|
let stubResponse = initialResponse
|
|
559
612
|
? new Response(null, {
|
|
560
613
|
status: initialResponse.status,
|
|
@@ -563,11 +616,9 @@ export function createRequestContext<TEnv>(
|
|
|
563
616
|
})
|
|
564
617
|
: new Response(null, { status: 200 });
|
|
565
618
|
|
|
566
|
-
// Create handle store and loader memoization for this request
|
|
567
619
|
const handleStore = createHandleStore();
|
|
568
620
|
const loaderPromises = new Map<string, Promise<any>>();
|
|
569
621
|
|
|
570
|
-
// Lazy parse cookies from the original Cookie header
|
|
571
622
|
const getParsedCookies = (): Record<string, string> => {
|
|
572
623
|
if (!parsedCookies) {
|
|
573
624
|
parsedCookies = parseCookiesFromHeader(cookieHeader);
|
|
@@ -575,7 +626,6 @@ export function createRequestContext<TEnv>(
|
|
|
575
626
|
return parsedCookies;
|
|
576
627
|
};
|
|
577
628
|
|
|
578
|
-
// Cached response cookie mutations — invalidated on setCookie/deleteCookie/setTheme
|
|
579
629
|
let responseCookieCache: Map<string, string | null> | null = null;
|
|
580
630
|
const getResponseCookies = (): Map<string, string | null> => {
|
|
581
631
|
if (!responseCookieCache) {
|
|
@@ -587,8 +637,6 @@ export function createRequestContext<TEnv>(
|
|
|
587
637
|
responseCookieCache = null;
|
|
588
638
|
};
|
|
589
639
|
|
|
590
|
-
// Guard: throw if a response-level side effect is called inside a cache() scope.
|
|
591
|
-
// Uses ALS to detect the scope (set during segment resolution).
|
|
592
640
|
function assertNotInsideCacheScopeALS(methodName: string): void {
|
|
593
641
|
if (isInsideCacheScope()) {
|
|
594
642
|
throw new Error(
|
|
@@ -599,8 +647,7 @@ export function createRequestContext<TEnv>(
|
|
|
599
647
|
}
|
|
600
648
|
}
|
|
601
649
|
|
|
602
|
-
//
|
|
603
|
-
// The stub IS the source of truth for same-request mutations.
|
|
650
|
+
// Response stub Set-Cookie wins, then original header (source of truth for mutations).
|
|
604
651
|
const effectiveCookie = (name: string): string | undefined => {
|
|
605
652
|
const mutations = getResponseCookies();
|
|
606
653
|
if (mutations.has(name)) {
|
|
@@ -610,14 +657,11 @@ export function createRequestContext<TEnv>(
|
|
|
610
657
|
return getParsedCookies()[name];
|
|
611
658
|
};
|
|
612
659
|
|
|
613
|
-
// Theme helpers (only used when themeConfig is provided)
|
|
614
660
|
const getTheme = (): Theme | undefined => {
|
|
615
661
|
if (!themeConfig) return undefined;
|
|
616
662
|
|
|
617
|
-
// Use overlay-aware read so setTheme() in the same request is reflected
|
|
618
663
|
const stored = effectiveCookie(themeConfig.storageKey);
|
|
619
664
|
if (stored) {
|
|
620
|
-
// Validate stored value
|
|
621
665
|
if (stored === "system" && themeConfig.enableSystem) {
|
|
622
666
|
return "system";
|
|
623
667
|
}
|
|
@@ -631,15 +675,15 @@ export function createRequestContext<TEnv>(
|
|
|
631
675
|
const setTheme = (theme: Theme): void => {
|
|
632
676
|
if (!themeConfig) return;
|
|
633
677
|
|
|
634
|
-
//
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
678
|
+
// Shared guard (isValidTheme): reject any value not in the configured theme
|
|
679
|
+
// set, AND reject "system" when system detection is off — a cookie of
|
|
680
|
+
// theme=system with enableSystem:false would re-apply a bogus class="system"
|
|
681
|
+
// on the next SSR.
|
|
682
|
+
if (!isValidTheme(theme, themeConfig)) {
|
|
683
|
+
warnInvalidTheme(theme, themeConfig);
|
|
639
684
|
return;
|
|
640
685
|
}
|
|
641
686
|
|
|
642
|
-
// Write to stub — effectiveCookie() will pick it up on next read
|
|
643
687
|
stubResponse.headers.append(
|
|
644
688
|
"Set-Cookie",
|
|
645
689
|
serializeCookieValue(themeConfig.storageKey, theme, {
|
|
@@ -651,10 +695,8 @@ export function createRequestContext<TEnv>(
|
|
|
651
695
|
invalidateResponseCookieCache();
|
|
652
696
|
};
|
|
653
697
|
|
|
654
|
-
// Strip internal _rsc* params so userland sees a clean URL.
|
|
655
698
|
const cleanUrl = stripInternalParams(url);
|
|
656
699
|
|
|
657
|
-
// Build the context object first (without use), then add use
|
|
658
700
|
const ctx: RequestContext<TEnv> = {
|
|
659
701
|
env,
|
|
660
702
|
request,
|
|
@@ -740,6 +782,45 @@ export function createRequestContext<TEnv>(
|
|
|
740
782
|
stubResponse.headers.set(name, value);
|
|
741
783
|
},
|
|
742
784
|
|
|
785
|
+
// Rotate the rango state cookie for the responding client (the server seat
|
|
786
|
+
// of invalidateClientCache). Writes ONE Set-Cookie per request with the
|
|
787
|
+
// value {version}:{timestamp}; the `:` stays raw (the cookie-name.ts
|
|
788
|
+
// serializer), not the URL-encoded form serializeCookieValue would produce.
|
|
789
|
+
// The timestamp is strictly greater than the client's current one (inbound
|
|
790
|
+
// X-Rango-State), so a same-millisecond server rotation still differs from
|
|
791
|
+
// the client value and the divergence observer fires.
|
|
792
|
+
_rotateStateCookie(): void {
|
|
793
|
+
if (rangoStateRotated) return;
|
|
794
|
+
rangoStateRotated = true;
|
|
795
|
+
if (!stateCookieName) return;
|
|
796
|
+
// The client's current value, for the monotonic guard: prefer the
|
|
797
|
+
// X-Rango-State header (router navigation/prefetch fetches send it), but
|
|
798
|
+
// fall back to the request's rango state cookie — action POSTs / plain
|
|
799
|
+
// app fetch()s carry no router header yet DO send the cookie. Without the
|
|
800
|
+
// fallback, prevTs stays 0 and a same-ms mint can equal the client value,
|
|
801
|
+
// leaving the divergence observer silent. `|| null` so an empty header
|
|
802
|
+
// ('' from proxy normalization) falls through instead of short-circuiting.
|
|
803
|
+
// getRawCookieValue reads the cookie undecoded (the wire value
|
|
804
|
+
// decodeStateValue decodes exactly once) AND is the same parser the client
|
|
805
|
+
// mirror uses, so both seats read the same jar entry.
|
|
806
|
+
const prevRaw =
|
|
807
|
+
(request.headers.get("x-rango-state") || null) ??
|
|
808
|
+
getRawCookieValue(cookieHeader, stateCookieName);
|
|
809
|
+
const value = mintStateValue(stateVersion ?? "0", prevRaw);
|
|
810
|
+
stubResponse.headers.append(
|
|
811
|
+
"Set-Cookie",
|
|
812
|
+
serializeStateCookie(stateCookieName, value, url.protocol === "https:"),
|
|
813
|
+
);
|
|
814
|
+
invalidateResponseCookieCache();
|
|
815
|
+
},
|
|
816
|
+
|
|
817
|
+
// Set the keepClientCache() directive header. The action bridge reads it on
|
|
818
|
+
// the response and suppresses its automatic invalidation. `.set` makes this
|
|
819
|
+
// idempotent (one header regardless of call count).
|
|
820
|
+
_setKeepCacheDirective(): void {
|
|
821
|
+
stubResponse.headers.set(KEEP_CACHE_HEADER, "1");
|
|
822
|
+
},
|
|
823
|
+
|
|
743
824
|
setStatus(status: number): void {
|
|
744
825
|
assertNotInsideCacheExec(ctx, "setStatus");
|
|
745
826
|
assertNotInsideCacheScopeALS("setStatus");
|
|
@@ -756,7 +837,6 @@ export function createRequestContext<TEnv>(
|
|
|
756
837
|
});
|
|
757
838
|
},
|
|
758
839
|
|
|
759
|
-
// Placeholder - will be replaced below
|
|
760
840
|
use: null as any,
|
|
761
841
|
|
|
762
842
|
method: request.method,
|
|
@@ -769,7 +849,11 @@ export function createRequestContext<TEnv>(
|
|
|
769
849
|
|
|
770
850
|
waitUntil(fn: () => Promise<void>): void {
|
|
771
851
|
if (executionContext?.waitUntil) {
|
|
772
|
-
|
|
852
|
+
// Wrap in Promise.resolve().then(fn) so a SYNCHRONOUS throw in a
|
|
853
|
+
// non-async callback becomes a rejected promise handed to the host's
|
|
854
|
+
// waitUntil (logged as a background failure), instead of escaping into
|
|
855
|
+
// the request flow. Mirrors fireAndForgetWaitUntil's deferral.
|
|
856
|
+
executionContext.waitUntil(Promise.resolve().then(fn));
|
|
773
857
|
} else {
|
|
774
858
|
fireAndForgetWaitUntil(fn);
|
|
775
859
|
}
|
|
@@ -785,7 +869,6 @@ export function createRequestContext<TEnv>(
|
|
|
785
869
|
this._onResponseCallbacks.push(callback);
|
|
786
870
|
},
|
|
787
871
|
|
|
788
|
-
// Theme properties (only set when themeConfig is provided)
|
|
789
872
|
get theme() {
|
|
790
873
|
return themeConfig ? getTheme() : undefined;
|
|
791
874
|
},
|
|
@@ -809,19 +892,17 @@ export function createRequestContext<TEnv>(
|
|
|
809
892
|
_reportedErrors: new WeakSet<object>(),
|
|
810
893
|
_metricsStore: undefined,
|
|
811
894
|
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
_resolveRenderBarrier: null as any, // set below
|
|
895
|
+
_renderBarrier: null as any,
|
|
896
|
+
_resolveRenderBarrier: null as any,
|
|
815
897
|
_renderBarrierSegmentOrder: undefined,
|
|
816
898
|
|
|
817
899
|
reverse: createReverseFunction(getGlobalRouteMap(), undefined, {}),
|
|
818
900
|
};
|
|
819
901
|
|
|
820
|
-
// Lazy
|
|
821
|
-
// calls rendered(). Requests that don't use rendered() pay zero cost.
|
|
902
|
+
// Lazy allocation: only create Promise when a loader calls rendered().
|
|
822
903
|
let barrierResolved = false;
|
|
823
904
|
let resolveBarrier: (() => void) | undefined;
|
|
824
|
-
ctx._renderBarrier = null as any;
|
|
905
|
+
ctx._renderBarrier = null as any;
|
|
825
906
|
ctx._resolveRenderBarrier = (
|
|
826
907
|
segments: Array<{ type: string; id: string }>,
|
|
827
908
|
) => {
|
|
@@ -831,21 +912,26 @@ export function createRequestContext<TEnv>(
|
|
|
831
912
|
.filter((s) => s.type !== "loader")
|
|
832
913
|
.map((s) => s.id);
|
|
833
914
|
ctx._renderBarrierSegmentOrder = segOrder;
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
ctx.
|
|
915
|
+
|
|
916
|
+
const closeGuard = () => {
|
|
917
|
+
ctx._renderBarrierWaiters = undefined;
|
|
918
|
+
ctx._handlerLoaderDeps = undefined;
|
|
919
|
+
ctx._renderBarrierGuardClosed = true;
|
|
920
|
+
};
|
|
921
|
+
|
|
922
|
+
if (ctx._treeHasStreaming) {
|
|
923
|
+
handleStore.settled.then(closeGuard);
|
|
924
|
+
} else {
|
|
925
|
+
ctx._renderBarrierHandleSnapshot = buildHandleSnapshot(
|
|
926
|
+
handleStore,
|
|
927
|
+
segOrder,
|
|
928
|
+
);
|
|
929
|
+
closeGuard();
|
|
930
|
+
}
|
|
842
931
|
if (resolveBarrier) resolveBarrier();
|
|
843
932
|
};
|
|
844
933
|
Object.defineProperty(ctx, "_renderBarrier", {
|
|
845
934
|
get() {
|
|
846
|
-
// Barrier already resolved (cache/prerender hit) or first lazy access.
|
|
847
|
-
// Either way, replace the getter with a concrete value to avoid
|
|
848
|
-
// repeated Promise.resolve() allocations on subsequent reads.
|
|
849
935
|
const p = barrierResolved
|
|
850
936
|
? Promise.resolve()
|
|
851
937
|
: new Promise<void>((resolve) => {
|
|
@@ -861,32 +947,33 @@ export function createRequestContext<TEnv>(
|
|
|
861
947
|
configurable: true,
|
|
862
948
|
});
|
|
863
949
|
|
|
864
|
-
// Now create use() with access to ctx
|
|
865
950
|
ctx.use = createUseFunction({
|
|
866
951
|
handleStore,
|
|
867
952
|
loaderPromises,
|
|
868
953
|
getContext: () => ctx,
|
|
869
954
|
});
|
|
870
955
|
|
|
871
|
-
// Brand with taint symbol so "use cache" excludes ctx from cache keys
|
|
872
956
|
(ctx as any)[NOCACHE_SYMBOL] = true;
|
|
873
957
|
return ctx;
|
|
874
958
|
}
|
|
875
959
|
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
*
|
|
881
|
-
|
|
882
|
-
|
|
960
|
+
// Capture the Max-Age value so it can be parsed numerically. A leading zero
|
|
961
|
+
// (Max-Age=05) is a non-zero lifetime, not a deletion; only a value that parses
|
|
962
|
+
// to <= 0 marks a cookie for deletion. Pattern-matching a leading "0" misread
|
|
963
|
+
// zero-prefixed values like 05 / 010 as deletions.
|
|
964
|
+
const MAX_AGE_RE = /;\s*Max-Age\s*=\s*(-?\d+)/i;
|
|
965
|
+
|
|
966
|
+
function isCookieDeletion(header: string): boolean {
|
|
967
|
+
const m = MAX_AGE_RE.exec(header);
|
|
968
|
+
if (!m) return false;
|
|
969
|
+
return Number(m[1]) <= 0;
|
|
970
|
+
}
|
|
883
971
|
|
|
884
972
|
function parseResponseCookies(response: Response): Map<string, string | null> {
|
|
885
973
|
const result = new Map<string, string | null>();
|
|
886
974
|
const setCookies = response.headers.getSetCookie();
|
|
887
975
|
|
|
888
976
|
for (const header of setCookies) {
|
|
889
|
-
// First segment before ';' is the name=value pair
|
|
890
977
|
const semiIdx = header.indexOf(";");
|
|
891
978
|
const pair = semiIdx === -1 ? header : header.substring(0, semiIdx);
|
|
892
979
|
const eqIdx = pair.indexOf("=");
|
|
@@ -898,49 +985,22 @@ function parseResponseCookies(response: Response): Map<string, string | null> {
|
|
|
898
985
|
name = decodeURIComponent(pair.substring(0, eqIdx).trim());
|
|
899
986
|
value = decodeURIComponent(pair.substring(eqIdx + 1).trim());
|
|
900
987
|
} catch {
|
|
901
|
-
// Malformed encoding — skip this entry
|
|
902
988
|
continue;
|
|
903
989
|
}
|
|
904
990
|
|
|
905
|
-
|
|
906
|
-
const isDeleted = MAX_AGE_ZERO_RE.test(header);
|
|
991
|
+
const isDeleted = isCookieDeletion(header);
|
|
907
992
|
result.set(name, isDeleted ? null : value);
|
|
908
993
|
}
|
|
909
994
|
|
|
910
995
|
return result;
|
|
911
996
|
}
|
|
912
997
|
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
cookieHeader: string | null,
|
|
918
|
-
): Record<string, string> {
|
|
919
|
-
if (!cookieHeader) return {};
|
|
920
|
-
|
|
921
|
-
const cookies: Record<string, string> = {};
|
|
922
|
-
const pairs = cookieHeader.split(";");
|
|
923
|
-
|
|
924
|
-
for (const pair of pairs) {
|
|
925
|
-
const [name, ...rest] = pair.trim().split("=");
|
|
926
|
-
if (name) {
|
|
927
|
-
const raw = rest.join("=");
|
|
928
|
-
try {
|
|
929
|
-
cookies[name] = decodeURIComponent(raw);
|
|
930
|
-
} catch {
|
|
931
|
-
// Malformed percent-encoded value (e.g. %zz, %2) - fall back to raw value
|
|
932
|
-
cookies[name] = raw;
|
|
933
|
-
}
|
|
934
|
-
}
|
|
935
|
-
}
|
|
936
|
-
|
|
937
|
-
return cookies;
|
|
938
|
-
}
|
|
998
|
+
// Re-exported for unit tests and the existing import path. The implementation
|
|
999
|
+
// lives in the dependency-free ./cookie-parse leaf so consumers (e.g. the host
|
|
1000
|
+
// dispatcher) can share it without pulling this module's request-context graph.
|
|
1001
|
+
export { parseCookiesFromHeader };
|
|
939
1002
|
|
|
940
|
-
|
|
941
|
-
* Serialize a cookie for Set-Cookie header
|
|
942
|
-
*/
|
|
943
|
-
function serializeCookieValue(
|
|
1003
|
+
export function serializeCookieValue(
|
|
944
1004
|
name: string,
|
|
945
1005
|
value: string,
|
|
946
1006
|
options: CookieOptions = {},
|
|
@@ -967,20 +1027,12 @@ export interface CreateUseFunctionOptions<TEnv> {
|
|
|
967
1027
|
getContext: () => RequestContext<TEnv>;
|
|
968
1028
|
}
|
|
969
1029
|
|
|
970
|
-
/**
|
|
971
|
-
* Create the use() function for loader and handle composition.
|
|
972
|
-
*
|
|
973
|
-
* This is the unified implementation used by both RequestContext and HandlerContext.
|
|
974
|
-
* - For loaders: executes and memoizes loader functions
|
|
975
|
-
* - For handles: returns a push function to add handle data
|
|
976
|
-
*/
|
|
977
1030
|
export function createUseFunction<TEnv>(
|
|
978
1031
|
options: CreateUseFunctionOptions<TEnv>,
|
|
979
1032
|
): RequestContext["use"] {
|
|
980
1033
|
const { handleStore, loaderPromises, getContext } = options;
|
|
981
1034
|
|
|
982
1035
|
return ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
|
|
983
|
-
// Handle case: return a push function
|
|
984
1036
|
if (isHandle(item)) {
|
|
985
1037
|
const handle = item;
|
|
986
1038
|
const ctx = getContext();
|
|
@@ -993,30 +1045,24 @@ export function createUseFunction<TEnv>(
|
|
|
993
1045
|
);
|
|
994
1046
|
}
|
|
995
1047
|
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
// Push directly - promises will be serialized by RSC and streamed
|
|
1007
|
-
handleStore.push(handle.$$id, segmentId, valueOrPromise);
|
|
1008
|
-
};
|
|
1048
|
+
return withDefer(
|
|
1049
|
+
(dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>)) => {
|
|
1050
|
+
const valueOrPromise =
|
|
1051
|
+
typeof dataOrFn === "function"
|
|
1052
|
+
? (dataOrFn as () => Promise<unknown>)()
|
|
1053
|
+
: dataOrFn;
|
|
1054
|
+
|
|
1055
|
+
handleStore.push(handle.$$id, segmentId, valueOrPromise);
|
|
1056
|
+
},
|
|
1057
|
+
);
|
|
1009
1058
|
}
|
|
1010
1059
|
|
|
1011
|
-
// Loader case
|
|
1012
1060
|
const loader = item as LoaderDefinition<any, any>;
|
|
1013
1061
|
|
|
1014
|
-
// Return cached promise if already started
|
|
1015
1062
|
if (loaderPromises.has(loader.$$id)) {
|
|
1016
1063
|
return loaderPromises.get(loader.$$id);
|
|
1017
1064
|
}
|
|
1018
1065
|
|
|
1019
|
-
// Get loader function - either from loader object or fetchable registry
|
|
1020
1066
|
let loaderFn = loader.fn;
|
|
1021
1067
|
if (!loaderFn) {
|
|
1022
1068
|
const fetchable = getFetchableLoader(loader.$$id);
|
|
@@ -1033,13 +1079,24 @@ export function createUseFunction<TEnv>(
|
|
|
1033
1079
|
|
|
1034
1080
|
const ctx = getContext();
|
|
1035
1081
|
|
|
1036
|
-
//
|
|
1082
|
+
// Build the typed ctx.search the same way the render path
|
|
1083
|
+
// (createHandlerContext) and the fetchable-loader path (loader-fetch.ts) do:
|
|
1084
|
+
// parse the route's search schema over the cleaned searchParams. The base
|
|
1085
|
+
// RequestContext carries no `search` field, so reading `(ctx as any).search`
|
|
1086
|
+
// here always yielded {} — dropping typed search for action/dispatch loaders.
|
|
1087
|
+
const searchSchema = ctx._routeName
|
|
1088
|
+
? getSearchSchema(ctx._routeName)
|
|
1089
|
+
: undefined;
|
|
1090
|
+
const loaderSearch = searchSchema
|
|
1091
|
+
? parseSearchParams(ctx.searchParams, searchSchema)
|
|
1092
|
+
: {};
|
|
1093
|
+
|
|
1037
1094
|
const loaderCtx: LoaderContext<Record<string, string | undefined>, TEnv> = {
|
|
1038
1095
|
params: ctx.params,
|
|
1039
1096
|
routeParams: (ctx.params ?? {}) as Record<string, string>,
|
|
1040
1097
|
request: ctx.request,
|
|
1041
1098
|
searchParams: ctx.searchParams,
|
|
1042
|
-
search:
|
|
1099
|
+
search: loaderSearch,
|
|
1043
1100
|
pathname: ctx.pathname,
|
|
1044
1101
|
url: ctx.url,
|
|
1045
1102
|
originalUrl: ctx.originalUrl,
|
|
@@ -1050,7 +1107,6 @@ export function createUseFunction<TEnv>(
|
|
|
1050
1107
|
use: (<TDep, TDepParams = any>(
|
|
1051
1108
|
dep: LoaderDefinition<TDep, TDepParams>,
|
|
1052
1109
|
): Promise<TDep> => {
|
|
1053
|
-
// Recursive call - will start dep loader if not already started
|
|
1054
1110
|
return ctx.use(dep);
|
|
1055
1111
|
}) as LoaderContext["use"],
|
|
1056
1112
|
method: "GET",
|
|
@@ -1069,12 +1125,14 @@ export function createUseFunction<TEnv>(
|
|
|
1069
1125
|
},
|
|
1070
1126
|
};
|
|
1071
1127
|
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1128
|
+
// Meter through the same unified phase API as the loader-resolution funnel
|
|
1129
|
+
// (observePhase), so a loader resolved via this base request-context ctx.use
|
|
1130
|
+
// co-emits the "loader:<id>" perf metric AND the "rango.loader" span — no
|
|
1131
|
+
// drift between the two ctx.use implementations.
|
|
1132
|
+
const promise = observePhase(PHASES.loader(loader.$$id), () =>
|
|
1133
|
+
Promise.resolve(loaderFn(loaderCtx)),
|
|
1134
|
+
);
|
|
1076
1135
|
|
|
1077
|
-
// Memoize for subsequent calls
|
|
1078
1136
|
loaderPromises.set(loader.$$id, promise);
|
|
1079
1137
|
|
|
1080
1138
|
return promise;
|