@rangojs/router 0.0.0-experimental.8 → 0.0.0-experimental.80daa23e
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 +13 -0
- package/README.md +472 -7
- 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 +2343 -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/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -26
- package/dist/browser/react/use-client-cache.js.map +1 -0
- package/dist/browser/react/use-handle.d.ts +31 -0
- package/dist/browser/react/use-handle.d.ts.map +1 -0
- package/dist/browser/react/use-handle.js +144 -0
- package/dist/browser/react/use-handle.js.map +1 -0
- package/dist/browser/react/use-href.d.ts +33 -0
- package/dist/browser/react/use-href.d.ts.map +1 -0
- package/dist/browser/react/use-href.js +39 -0
- package/dist/browser/react/use-href.js.map +1 -0
- package/dist/browser/react/use-link-status.d.ts +37 -0
- package/dist/browser/react/use-link-status.d.ts.map +1 -0
- package/dist/browser/react/use-link-status.js +99 -0
- package/dist/browser/react/use-link-status.js.map +1 -0
- package/dist/browser/react/use-mount.d.ts +25 -0
- package/dist/browser/react/use-mount.d.ts.map +1 -0
- package/dist/browser/react/use-mount.js +30 -0
- package/dist/browser/react/use-mount.js.map +1 -0
- package/dist/browser/react/use-navigation.d.ts +27 -0
- package/dist/browser/react/use-navigation.d.ts.map +1 -0
- package/dist/browser/react/use-navigation.js +87 -0
- package/dist/browser/react/use-navigation.js.map +1 -0
- package/dist/browser/react/use-segments.d.ts +38 -0
- package/dist/browser/react/use-segments.d.ts.map +1 -0
- package/dist/browser/react/use-segments.js +130 -0
- package/dist/browser/react/use-segments.js.map +1 -0
- package/dist/browser/request-controller.d.ts +26 -0
- package/dist/browser/request-controller.d.ts.map +1 -0
- package/dist/browser/request-controller.js +147 -0
- package/dist/browser/request-controller.js.map +1 -0
- package/dist/browser/rsc-router.d.ts +129 -0
- package/dist/browser/rsc-router.d.ts.map +1 -0
- package/dist/browser/rsc-router.js +195 -0
- package/dist/browser/rsc-router.js.map +1 -0
- package/dist/browser/scroll-restoration.d.ts +93 -0
- package/dist/browser/scroll-restoration.d.ts.map +1 -0
- package/dist/browser/scroll-restoration.js +321 -0
- package/dist/browser/scroll-restoration.js.map +1 -0
- package/dist/browser/segment-structure-assert.d.ts +17 -0
- package/dist/browser/segment-structure-assert.d.ts.map +1 -0
- package/dist/browser/segment-structure-assert.js +59 -0
- package/dist/browser/segment-structure-assert.js.map +1 -0
- package/dist/browser/server-action-bridge.d.ts +26 -0
- package/dist/browser/server-action-bridge.d.ts.map +1 -0
- package/dist/browser/server-action-bridge.js +668 -0
- package/dist/browser/server-action-bridge.js.map +1 -0
- package/dist/browser/shallow.d.ts +12 -0
- package/dist/browser/shallow.d.ts.map +1 -0
- package/dist/browser/shallow.js +34 -0
- package/dist/browser/shallow.js.map +1 -0
- package/dist/browser/types.d.ts +369 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
- package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-cli.test.js +237 -0
- package/dist/build/__tests__/generate-cli.test.js.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.js +119 -0
- package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.js +620 -0
- package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.js +308 -0
- package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +81 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +276 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/build/generate-route-types.d.ts +115 -0
- package/dist/build/generate-route-types.d.ts.map +1 -0
- package/dist/build/generate-route-types.js +740 -0
- package/dist/build/generate-route-types.js.map +1 -0
- package/dist/build/index.d.ts +21 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +21 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/route-trie.d.ts +71 -0
- package/dist/build/route-trie.d.ts.map +1 -0
- package/dist/build/route-trie.js +175 -0
- package/dist/build/route-trie.js.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.js +208 -0
- package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
- package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
- package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
- package/dist/cache/__tests__/document-cache.test.js +345 -0
- package/dist/cache/__tests__/document-cache.test.js.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
- package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
- package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-store.test.js +367 -0
- package/dist/cache/__tests__/memory-store.test.js.map +1 -0
- package/dist/cache/cache-scope.d.ts +102 -0
- package/dist/cache/cache-scope.d.ts.map +1 -0
- package/dist/cache/cache-scope.js +440 -0
- package/dist/cache/cache-scope.js.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
- package/dist/cache/cf/cf-cache-store.d.ts +165 -0
- package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
- package/dist/cache/cf/cf-cache-store.js +242 -0
- package/dist/cache/cf/cf-cache-store.js.map +1 -0
- package/dist/cache/cf/index.d.ts +14 -0
- package/dist/cache/cf/index.d.ts.map +1 -0
- package/dist/cache/cf/index.js +17 -0
- package/dist/cache/cf/index.js.map +1 -0
- package/dist/cache/document-cache.d.ts +64 -0
- package/dist/cache/document-cache.d.ts.map +1 -0
- package/dist/cache/document-cache.js +228 -0
- package/dist/cache/document-cache.js.map +1 -0
- package/dist/cache/index.d.ts +19 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-segment-store.d.ts +110 -0
- package/dist/cache/memory-segment-store.d.ts.map +1 -0
- package/dist/cache/memory-segment-store.js +117 -0
- package/dist/cache/memory-segment-store.js.map +1 -0
- package/dist/cache/memory-store.d.ts +41 -0
- package/dist/cache/memory-store.d.ts.map +1 -0
- package/dist/cache/memory-store.js +191 -0
- package/dist/cache/memory-store.js.map +1 -0
- package/dist/cache/types.d.ts +317 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +12 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client.d.ts +248 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +367 -0
- package/dist/client.js.map +1 -0
- package/dist/client.rsc.d.ts +26 -0
- package/dist/client.rsc.d.ts.map +1 -0
- package/dist/client.rsc.js +46 -0
- package/dist/client.rsc.js.map +1 -0
- package/dist/component-utils.d.ts +36 -0
- package/dist/component-utils.d.ts.map +1 -0
- package/dist/component-utils.js +61 -0
- package/dist/component-utils.js.map +1 -0
- package/dist/components/DefaultDocument.d.ts +13 -0
- package/dist/components/DefaultDocument.d.ts.map +1 -0
- package/dist/components/DefaultDocument.js +15 -0
- package/dist/components/DefaultDocument.js.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +157 -0
- package/dist/debug.js.map +1 -0
- package/dist/default-error-boundary.d.ts +11 -0
- package/dist/default-error-boundary.d.ts.map +1 -0
- package/dist/default-error-boundary.js +45 -0
- package/dist/default-error-boundary.js.map +1 -0
- package/dist/deps/browser.d.ts +2 -0
- package/dist/deps/browser.d.ts.map +1 -0
- package/dist/deps/browser.js +3 -0
- package/dist/deps/browser.js.map +1 -0
- package/dist/deps/html-stream-client.d.ts +2 -0
- package/dist/deps/html-stream-client.d.ts.map +1 -0
- package/dist/deps/html-stream-client.js +3 -0
- package/dist/deps/html-stream-client.js.map +1 -0
- package/dist/deps/html-stream-server.d.ts +2 -0
- package/dist/deps/html-stream-server.d.ts.map +1 -0
- package/dist/deps/html-stream-server.js +3 -0
- package/dist/deps/html-stream-server.js.map +1 -0
- package/dist/deps/rsc.d.ts +2 -0
- package/dist/deps/rsc.d.ts.map +1 -0
- package/dist/deps/rsc.js +4 -0
- package/dist/deps/rsc.js.map +1 -0
- package/dist/deps/ssr.d.ts +2 -0
- package/dist/deps/ssr.d.ts.map +1 -0
- package/dist/deps/ssr.js +3 -0
- package/dist/deps/ssr.js.map +1 -0
- package/dist/errors.d.ts +174 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +241 -0
- package/dist/errors.js.map +1 -0
- package/dist/handle.d.ts +78 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +82 -0
- package/dist/handle.js.map +1 -0
- package/dist/handles/MetaTags.d.ts +14 -0
- package/dist/handles/MetaTags.d.ts.map +1 -0
- package/dist/handles/MetaTags.js +136 -0
- package/dist/handles/MetaTags.js.map +1 -0
- package/dist/handles/index.d.ts +6 -0
- package/dist/handles/index.d.ts.map +1 -0
- package/{src/handles/index.ts → dist/handles/index.js} +1 -1
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/{src/href-context.ts → dist/href-context.d.ts} +7 -11
- package/dist/href-context.d.ts.map +1 -0
- package/dist/href-context.js +21 -0
- package/dist/href-context.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.rsc.d.ts +32 -0
- package/dist/index.rsc.d.ts.map +1 -0
- package/dist/index.rsc.js +40 -0
- package/dist/index.rsc.js.map +1 -0
- package/dist/internal-debug.d.ts +2 -0
- package/dist/internal-debug.d.ts.map +1 -0
- package/dist/internal-debug.js +5 -0
- package/dist/internal-debug.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/loader.rsc.d.ts +19 -0
- package/dist/loader.rsc.d.ts.map +1 -0
- package/dist/loader.rsc.js +99 -0
- package/dist/loader.rsc.js.map +1 -0
- package/{src/network-error-thrower.tsx → dist/network-error-thrower.d.ts} +4 -8
- 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/__internal.d.ts +127 -0
- package/dist/types/bin/rango.d.ts +1 -0
- package/dist/types/browser/action-coordinator.d.ts +57 -0
- package/dist/types/browser/action-fence.d.ts +33 -0
- package/dist/types/browser/app-shell.d.ts +34 -0
- package/dist/types/browser/app-version.d.ts +6 -0
- package/dist/types/browser/connection-warmup.d.ts +31 -0
- package/dist/types/browser/cookie-name.d.ts +66 -0
- package/dist/types/browser/dev-discovery.d.ts +11 -0
- package/dist/types/browser/event-controller.d.ts +231 -0
- package/dist/types/browser/history-state.d.ts +26 -0
- package/dist/types/browser/index.d.ts +1 -0
- package/dist/types/browser/intercept-utils.d.ts +30 -0
- package/dist/types/browser/invalidate-client-cache.d.ts +17 -0
- package/dist/types/browser/link-interceptor.d.ts +53 -0
- package/dist/types/browser/logging.d.ts +33 -0
- package/dist/types/browser/merge-segment-loaders.d.ts +38 -0
- package/dist/types/browser/navigation-bridge.d.ts +39 -0
- package/dist/types/browser/navigation-client.d.ts +17 -0
- package/dist/types/browser/navigation-store-handle.d.ts +25 -0
- package/dist/types/browser/navigation-store.d.ts +85 -0
- package/dist/types/browser/navigation-transaction.d.ts +75 -0
- package/dist/types/browser/network-error-handler.d.ts +35 -0
- package/dist/types/browser/notify-listeners.d.ts +2 -0
- package/dist/types/browser/partial-update.d.ts +61 -0
- package/dist/types/browser/prefetch/cache.d.ts +224 -0
- package/dist/types/browser/prefetch/default-strategy.d.ts +31 -0
- package/dist/types/browser/prefetch/fetch.d.ts +52 -0
- package/dist/types/browser/prefetch/invalidation.d.ts +6 -0
- package/dist/types/browser/prefetch/loader.d.ts +12 -0
- package/dist/types/browser/prefetch/observer.d.ts +24 -0
- package/dist/types/browser/prefetch/policy.d.ts +13 -0
- package/dist/types/browser/prefetch/queue.d.ts +48 -0
- package/dist/types/browser/prefetch/resource-ready.d.ts +28 -0
- package/dist/types/browser/prefetch/runtime.d.ts +2 -0
- package/dist/types/browser/rango-state.d.ts +56 -0
- package/dist/types/browser/react/Link.d.ts +132 -0
- package/dist/types/browser/react/NavigationProvider.d.ts +88 -0
- package/dist/types/browser/react/ScrollRestoration.d.ts +78 -0
- package/dist/types/browser/react/context.d.ts +57 -0
- package/dist/types/browser/react/filter-segment-order.d.ts +35 -0
- package/dist/types/browser/react/index.d.ts +1 -0
- package/dist/types/browser/react/location-state-shared.d.ts +162 -0
- package/dist/types/browser/react/location-state.d.ts +29 -0
- package/dist/types/browser/react/mount-context.d.ts +23 -0
- package/dist/types/browser/react/nonce-context.d.ts +14 -0
- package/dist/types/browser/react/shallow-equal.d.ts +5 -0
- package/dist/types/browser/react/use-action.d.ts +61 -0
- package/dist/types/browser/react/use-handle.d.ts +21 -0
- package/dist/types/browser/react/use-href.d.ts +32 -0
- package/dist/types/browser/react/use-link-status.d.ts +36 -0
- package/dist/types/browser/react/use-mount.d.ts +24 -0
- package/dist/types/browser/react/use-navigation.d.ts +15 -0
- package/dist/types/browser/react/use-params.d.ts +21 -0
- package/dist/types/browser/react/use-pathname.d.ts +13 -0
- package/dist/types/browser/react/use-reverse.d.ts +40 -0
- package/dist/types/browser/react/use-router.d.ts +30 -0
- package/dist/types/browser/react/use-search-params.d.ts +66 -0
- package/dist/types/browser/react/use-segments.d.ts +29 -0
- package/dist/types/browser/response-adapter.d.ts +58 -0
- package/dist/types/browser/rsc-router.d.ts +146 -0
- package/dist/types/browser/scroll-restoration.d.ts +103 -0
- package/dist/types/browser/segment-reconciler.d.ts +74 -0
- package/dist/types/browser/segment-structure-assert.d.ts +16 -0
- package/dist/types/browser/server-action-bridge.d.ts +29 -0
- package/dist/types/browser/types.d.ts +546 -0
- package/dist/types/browser/validate-redirect-origin.d.ts +28 -0
- package/dist/types/build/collect-fallback-refs.d.ts +5 -0
- package/dist/types/build/generate-manifest.d.ts +106 -0
- package/dist/types/build/generate-route-types.d.ts +8 -0
- package/dist/types/build/index.d.ts +21 -0
- package/dist/types/build/merge-full-manifests.d.ts +3 -0
- package/dist/types/build/prefix-tree-utils.d.ts +56 -0
- package/dist/types/build/route-trie.d.ts +20 -0
- package/dist/types/build/route-types/ast-helpers.d.ts +3 -0
- package/dist/types/build/route-types/ast-route-extraction.d.ts +13 -0
- package/dist/types/build/route-types/codegen.d.ts +16 -0
- package/dist/types/build/route-types/include-resolution.d.ts +74 -0
- package/dist/types/build/route-types/param-extraction.d.ts +13 -0
- package/dist/types/build/route-types/per-module-writer.d.ts +20 -0
- package/dist/types/build/route-types/router-processing.d.ts +81 -0
- package/dist/types/build/route-types/scan-filter.d.ts +17 -0
- package/dist/types/build/route-types/source-scan.d.ts +13 -0
- package/dist/types/build/runtime-discovery.d.ts +24 -0
- package/dist/types/cache/background-task.d.ts +21 -0
- package/dist/types/cache/cache-error.d.ts +71 -0
- package/dist/types/cache/cache-exec-scope.d.ts +31 -0
- package/dist/types/cache/cache-key-utils.d.ts +43 -0
- package/dist/types/cache/cache-policy.d.ts +59 -0
- package/dist/types/cache/cache-runtime.d.ts +51 -0
- package/dist/types/cache/cache-scope.d.ts +215 -0
- package/dist/types/cache/cache-tag.d.ts +79 -0
- package/dist/types/cache/cf/cf-base64.d.ts +4 -0
- package/dist/types/cache/cf/cf-cache-constants.d.ts +112 -0
- package/dist/types/cache/cf/cf-cache-store.d.ts +630 -0
- package/dist/types/cache/cf/cf-cache-types.d.ts +365 -0
- package/dist/types/cache/cf/cf-kv-utils.d.ts +43 -0
- package/dist/types/cache/cf/cf-tag-marker-memo.d.ts +15 -0
- package/dist/types/cache/cf/cf-zone-purge.d.ts +31 -0
- package/dist/types/cache/cf/index.d.ts +4 -0
- package/dist/types/cache/document-cache.d.ts +71 -0
- package/dist/types/cache/handle-capture.d.ts +23 -0
- package/dist/types/cache/handle-snapshot.d.ts +39 -0
- package/dist/types/cache/index.d.ts +9 -0
- package/dist/types/cache/memory-segment-store.d.ts +163 -0
- package/dist/types/cache/profile-registry.d.ts +40 -0
- package/dist/types/cache/read-through-swr.d.ts +61 -0
- package/dist/types/cache/search-params-filter.d.ts +64 -0
- package/dist/types/cache/segment-codec.d.ts +78 -0
- package/dist/types/cache/shell-snapshot.d.ts +186 -0
- package/dist/types/cache/tag-invalidation.d.ts +74 -0
- package/dist/types/cache/taint.d.ts +77 -0
- package/dist/types/cache/types.d.ts +522 -0
- package/dist/types/cache/vercel/index.d.ts +1 -0
- package/dist/types/cache/vercel/vercel-cache-store.d.ts +268 -0
- package/dist/types/client-urls/client-root.d.ts +38 -0
- package/dist/types/client-urls/client-urls.d.ts +5 -0
- package/dist/types/client-urls/navigation.d.ts +38 -0
- package/dist/types/client-urls/revalidation-protocol.d.ts +25 -0
- package/dist/types/client-urls/server-projection.d.ts +71 -0
- package/dist/types/client-urls/types.d.ts +148 -0
- package/dist/types/client.d.ts +192 -0
- package/dist/types/client.rsc.d.ts +42 -0
- package/dist/types/cloudflare/index.d.ts +7 -0
- package/dist/types/cloudflare/tracing.d.ts +57 -0
- package/dist/types/component-utils.d.ts +46 -0
- package/dist/types/components/DefaultDocument.d.ts +13 -0
- package/dist/types/context-var.d.ts +84 -0
- package/dist/types/debug.d.ts +57 -0
- package/dist/types/decode-loader-results.d.ts +42 -0
- package/dist/types/default-error-boundary.d.ts +10 -0
- package/dist/types/defer.d.ts +89 -0
- package/dist/types/deps/browser.d.ts +1 -0
- package/dist/types/deps/html-stream-client.d.ts +1 -0
- package/dist/types/deps/html-stream-server.d.ts +1 -0
- package/dist/types/deps/rsc.d.ts +1 -0
- package/dist/types/deps/ssr.d.ts +1 -0
- package/dist/types/dev-discovery-protocol.d.ts +5 -0
- package/dist/types/encode-kv.d.ts +35 -0
- package/dist/types/errors.d.ts +227 -0
- package/dist/types/escape-script.d.ts +44 -0
- package/dist/types/handle.d.ts +93 -0
- package/dist/types/handles/MetaTags.d.ts +17 -0
- package/dist/types/handles/Scripts.d.ts +38 -0
- package/dist/types/handles/breadcrumbs.d.ts +43 -0
- package/dist/types/handles/deferred-resolution.d.ts +53 -0
- package/dist/types/handles/is-thenable.d.ts +10 -0
- package/dist/types/handles/meta.d.ts +43 -0
- package/dist/types/handles/script.d.ts +139 -0
- package/dist/types/host/cookie-handler.d.ts +8 -0
- package/dist/types/host/errors.d.ts +40 -0
- package/dist/types/host/index.d.ts +33 -0
- package/dist/types/host/pattern-matcher.d.ts +30 -0
- package/dist/types/host/router.d.ts +12 -0
- package/dist/types/host/testing.d.ts +41 -0
- package/dist/types/host/types.d.ts +148 -0
- package/dist/types/host/utils.d.ts +20 -0
- package/dist/types/href-client.d.ts +214 -0
- package/dist/types/index.d.ts +113 -0
- package/dist/types/index.rsc.d.ts +52 -0
- package/dist/types/internal-debug.d.ts +1 -0
- package/dist/types/loader-redirect.d.ts +27 -0
- package/dist/types/loader-store.d.ts +193 -0
- package/dist/types/loader.d.ts +18 -0
- package/dist/types/loader.rsc.d.ts +18 -0
- package/dist/types/missing-id-error.d.ts +1 -0
- package/dist/types/outlet-context.d.ts +32 -0
- package/dist/types/outlet-provider.d.ts +15 -0
- package/dist/types/prerender/build-shell-capture.d.ts +104 -0
- package/dist/types/prerender/param-hash.d.ts +6 -0
- package/dist/types/prerender/shell-manifest-key.d.ts +18 -0
- package/dist/types/prerender/store.d.ts +63 -0
- package/dist/types/prerender.d.ts +292 -0
- package/dist/types/redirect-origin.d.ts +71 -0
- package/dist/types/regex-escape.d.ts +6 -0
- package/dist/types/render-error-thrower.d.ts +13 -0
- package/dist/types/response-utils.d.ts +35 -0
- package/dist/types/reverse.d.ts +206 -0
- package/dist/types/root-error-boundary.d.ts +32 -0
- package/dist/types/route-content-wrapper.d.ts +84 -0
- package/dist/types/route-definition/dsl-helpers.d.ts +130 -0
- package/dist/types/route-definition/helper-factories.d.ts +22 -0
- package/dist/types/route-definition/helpers-types.d.ts +405 -0
- package/dist/types/route-definition/index.d.ts +7 -0
- package/dist/types/route-definition/redirect.d.ts +48 -0
- package/dist/types/route-definition/resolve-handler-use.d.ts +19 -0
- package/dist/types/route-definition/use-item-types.d.ts +1 -0
- package/dist/types/route-definition.d.ts +1 -0
- package/dist/types/route-map-builder.d.ts +102 -0
- package/dist/types/route-name.d.ts +27 -0
- package/dist/types/route-types.d.ts +172 -0
- package/dist/types/router/basename.d.ts +10 -0
- package/dist/types/router/content-negotiation.d.ts +91 -0
- package/dist/types/router/debug-manifest.d.ts +7 -0
- package/dist/types/router/error-handling.d.ts +110 -0
- package/dist/types/router/find-match.d.ts +19 -0
- package/dist/types/router/handler-context.d.ts +41 -0
- package/dist/types/router/instrument.d.ts +191 -0
- package/dist/types/router/intercept-resolution.d.ts +91 -0
- package/dist/types/router/lazy-includes.d.ts +26 -0
- package/dist/types/router/loader-resolution.d.ts +85 -0
- package/dist/types/router/logging.d.ts +41 -0
- package/dist/types/router/manifest.d.ts +8 -0
- package/dist/types/router/match-api.d.ts +19 -0
- package/dist/types/router/match-context.d.ts +184 -0
- package/dist/types/router/match-handlers.d.ts +48 -0
- package/dist/types/router/match-middleware/background-revalidation.d.ts +113 -0
- package/dist/types/router/match-middleware/cache-lookup.d.ts +126 -0
- package/dist/types/router/match-middleware/cache-store.d.ts +112 -0
- package/dist/types/router/match-middleware/index.d.ts +80 -0
- package/dist/types/router/match-middleware/intercept-resolution.d.ts +116 -0
- package/dist/types/router/match-middleware/segment-resolution.d.ts +94 -0
- package/dist/types/router/match-pipelines.d.ts +103 -0
- package/dist/types/router/match-result.d.ts +114 -0
- package/dist/types/router/metrics.d.ts +6 -0
- package/dist/types/router/middleware-types.d.ts +74 -0
- package/dist/types/router/middleware.d.ts +116 -0
- package/dist/types/router/navigation-snapshot.d.ts +51 -0
- package/dist/types/router/params-util.d.ts +8 -0
- package/dist/types/router/parse-pattern.d.ts +38 -0
- package/dist/types/router/pattern-matching.d.ts +169 -0
- package/dist/types/router/prefetch-cache-ttl.d.ts +27 -0
- package/dist/types/router/prefetch-default.d.ts +28 -0
- package/dist/types/router/prefetch-limits.d.ts +20 -0
- package/dist/types/router/prerender-match.d.ts +53 -0
- package/dist/types/router/preview-match.d.ts +22 -0
- package/dist/types/router/request-classification.d.ts +104 -0
- package/dist/types/router/revalidation.d.ts +64 -0
- package/dist/types/router/route-snapshot.d.ts +112 -0
- package/dist/types/router/route-trie-builder.d.ts +77 -0
- package/dist/types/router/router-context.d.ts +137 -0
- package/dist/types/router/router-interfaces.d.ts +461 -0
- package/dist/types/router/router-options.d.ts +792 -0
- package/dist/types/router/router-registry.d.ts +15 -0
- package/dist/types/router/segment-resolution/fresh.d.ts +55 -0
- package/dist/types/router/segment-resolution/helpers.d.ts +93 -0
- package/dist/types/router/segment-resolution/loader-cache.d.ts +33 -0
- package/dist/types/router/segment-resolution/loader-mask.d.ts +44 -0
- package/dist/types/router/segment-resolution/loader-snapshot.d.ts +90 -0
- package/dist/types/router/segment-resolution/mask-nested.d.ts +53 -0
- package/dist/types/router/segment-resolution/revalidation.d.ts +85 -0
- package/dist/types/router/segment-resolution/static-store.d.ts +17 -0
- package/dist/types/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
- package/dist/types/router/segment-resolution/view-transition-default.d.ts +27 -0
- package/dist/types/router/segment-resolution.d.ts +3 -0
- package/dist/types/router/segment-wrappers.d.ts +53 -0
- package/dist/types/router/state-cookie-name.d.ts +1 -0
- package/dist/types/router/substitute-pattern-params.d.ts +23 -0
- package/dist/types/router/telemetry-otel.d.ts +113 -0
- package/dist/types/router/telemetry.d.ts +216 -0
- package/dist/types/router/timeout.d.ts +107 -0
- package/dist/types/router/tracing.d.ts +139 -0
- package/dist/types/router/transition-when.d.ts +13 -0
- package/dist/types/router/trie-matching.d.ts +32 -0
- package/dist/types/router/types.d.ts +98 -0
- package/dist/types/router/url-params.d.ts +26 -0
- package/dist/types/router.d.ts +7 -0
- package/dist/types/rsc/capture-queue.d.ts +49 -0
- package/dist/types/rsc/full-payload.d.ts +22 -0
- package/dist/types/rsc/handler-context.d.ts +32 -0
- package/dist/types/rsc/handler.d.ts +9 -0
- package/dist/types/rsc/helpers.d.ts +127 -0
- package/dist/types/rsc/index.d.ts +17 -0
- package/dist/types/rsc/json-route-result.d.ts +20 -0
- package/dist/types/rsc/loader-fetch.d.ts +14 -0
- package/dist/types/rsc/manifest-init.d.ts +18 -0
- package/dist/types/rsc/nonce.d.ts +38 -0
- package/dist/types/rsc/origin-guard.d.ts +50 -0
- package/dist/types/rsc/progressive-enhancement.d.ts +19 -0
- package/dist/types/rsc/redirect-guard.d.ts +37 -0
- package/dist/types/rsc/render-pipeline.d.ts +148 -0
- package/dist/types/rsc/response-cache-serve.d.ts +46 -0
- package/dist/types/rsc/response-error.d.ts +19 -0
- package/dist/types/rsc/response-route-handler.d.ts +29 -0
- package/dist/types/rsc/routine-plan.d.ts +124 -0
- package/dist/types/rsc/rsc-rendering.d.ts +18 -0
- package/dist/types/rsc/runtime-warnings.d.ts +22 -0
- package/dist/types/rsc/server-action.d.ts +68 -0
- package/dist/types/rsc/shell-build-manifest.d.ts +90 -0
- package/dist/types/rsc/shell-capture-constants.d.ts +44 -0
- package/dist/types/rsc/shell-capture.d.ts +425 -0
- package/dist/types/rsc/shell-serve.d.ts +200 -0
- package/dist/types/rsc/ssr-setup.d.ts +73 -0
- package/dist/types/rsc/stream-idle.d.ts +60 -0
- package/dist/types/rsc/transition-gate.d.ts +23 -0
- package/dist/types/rsc/types.d.ts +353 -0
- package/dist/types/runtime-env.d.ts +1 -0
- package/dist/types/search-params.d.ts +125 -0
- package/dist/types/segment-content-promise.d.ts +13 -0
- package/dist/types/segment-fragments.d.ts +79 -0
- package/dist/types/segment-loader-promise.d.ts +22 -0
- package/dist/types/segment-system.d.ts +86 -0
- package/dist/types/serialize.d.ts +164 -0
- package/dist/types/server/context.d.ts +520 -0
- package/dist/types/server/cookie-parse.d.ts +10 -0
- package/dist/types/server/cookie-store.d.ts +107 -0
- package/dist/types/server/fetchable-loader-store.d.ts +20 -0
- package/dist/types/server/handle-store.d.ts +131 -0
- package/dist/types/server/loader-registry.d.ts +32 -0
- package/dist/types/server/request-context.d.ts +717 -0
- package/dist/types/server/root-layout.d.ts +3 -0
- package/dist/types/server.d.ts +16 -0
- package/dist/types/ssr/index.d.ts +271 -0
- package/dist/types/ssr/inject-rsc-eager.d.ts +3 -0
- package/dist/types/ssr/preinit-client-references.d.ts +71 -0
- package/dist/types/ssr/ssr-root.d.ts +84 -0
- package/dist/types/ssr-suspension-warning.d.ts +19 -0
- package/dist/types/static-handler.d.ts +71 -0
- package/dist/types/testing/cache-status.d.ts +63 -0
- package/dist/types/testing/collect-handle.d.ts +20 -0
- package/dist/types/testing/dispatch.d.ts +127 -0
- package/dist/types/testing/dom.entry.d.ts +15 -0
- package/dist/types/testing/e2e/fixture.d.ts +37 -0
- package/dist/types/testing/e2e/index.d.ts +31 -0
- package/dist/types/testing/e2e/matchers.d.ts +17 -0
- package/dist/types/testing/e2e/page-helpers.d.ts +86 -0
- package/dist/types/testing/e2e/parity.d.ts +111 -0
- package/dist/types/testing/e2e/server.d.ts +35 -0
- package/dist/types/testing/flight-matchers.d.ts +55 -0
- package/dist/types/testing/flight-normalize.d.ts +1 -0
- package/dist/types/testing/flight-tree.d.ts +192 -0
- package/dist/types/testing/flight.d.ts +115 -0
- package/dist/types/testing/flight.entry.d.ts +27 -0
- package/dist/types/testing/generated-routes.d.ts +66 -0
- package/dist/types/testing/index.d.ts +54 -0
- package/dist/types/testing/internal/context.d.ts +225 -0
- package/dist/types/testing/internal/flight-client-globals.d.ts +1 -0
- package/dist/types/testing/internal/seed-vars.d.ts +30 -0
- package/dist/types/testing/render-handler.d.ts +160 -0
- package/dist/types/testing/render-route.d.ts +265 -0
- package/dist/types/testing/run-loader.d.ts +195 -0
- package/dist/types/testing/run-middleware.d.ts +132 -0
- package/dist/types/testing/run-transition-when.d.ts +78 -0
- package/dist/types/testing/shell-status.d.ts +81 -0
- package/dist/types/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
- package/dist/types/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
- package/dist/types/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
- package/dist/types/testing/vitest-stubs/version.d.ts +1 -0
- package/dist/types/testing/vitest.d.ts +205 -0
- package/dist/types/theme/ThemeProvider.d.ts +13 -0
- package/dist/types/theme/ThemeScript.d.ts +45 -0
- package/dist/types/theme/constants.d.ts +39 -0
- package/dist/types/theme/index.d.ts +29 -0
- package/dist/types/theme/theme-context.d.ts +21 -0
- package/dist/types/theme/theme-script.d.ts +26 -0
- package/dist/types/theme/types.d.ts +162 -0
- package/dist/types/theme/use-theme.d.ts +8 -0
- package/dist/types/types/boundaries.d.ts +115 -0
- package/dist/types/types/cache-types.d.ts +191 -0
- package/dist/types/types/error-types.d.ts +114 -0
- package/dist/types/types/global-namespace.d.ts +90 -0
- package/dist/types/types/handler-context.d.ts +658 -0
- package/dist/types/types/index.d.ts +11 -0
- package/dist/types/types/loader-types.d.ts +240 -0
- package/dist/types/types/request-scope.d.ts +93 -0
- package/dist/types/types/route-config.d.ts +105 -0
- package/dist/types/types/route-entry.d.ts +98 -0
- package/dist/types/types/segments.d.ts +254 -0
- package/dist/types/types.d.ts +1 -0
- package/dist/types/urls/include-helper.d.ts +17 -0
- package/dist/types/urls/include-provider.d.ts +27 -0
- package/dist/types/urls/index.d.ts +6 -0
- package/dist/types/urls/path-helper-types.d.ts +207 -0
- package/dist/types/urls/path-helper.d.ts +12 -0
- package/dist/types/urls/pattern-types.d.ts +166 -0
- package/dist/types/urls/response-types.d.ts +67 -0
- package/dist/types/urls/type-extraction.d.ts +157 -0
- package/dist/types/urls/urls-function.d.ts +24 -0
- package/dist/types/urls.d.ts +1 -0
- package/dist/types/use-loader.d.ts +150 -0
- package/dist/types/vercel/index.d.ts +10 -0
- package/dist/types/vercel/tracing.d.ts +71 -0
- package/dist/types/vite/debug.d.ts +80 -0
- package/dist/types/vite/discovery/bundle-postprocess.d.ts +12 -0
- package/dist/types/vite/discovery/client-urls-projection.d.ts +53 -0
- package/dist/types/vite/discovery/dev-prerender-cache.d.ts +65 -0
- package/dist/types/vite/discovery/discover-routers.d.ts +17 -0
- package/dist/types/vite/discovery/discovery-errors.d.ts +113 -0
- package/dist/types/vite/discovery/gate-state.d.ts +79 -0
- package/dist/types/vite/discovery/prerender-collection.d.ts +24 -0
- package/dist/types/vite/discovery/route-types-writer.d.ts +32 -0
- package/dist/types/vite/discovery/self-gen-tracking.d.ts +22 -0
- package/dist/types/vite/discovery/shell-prerender-phase.d.ts +40 -0
- package/dist/types/vite/discovery/state.d.ts +170 -0
- package/dist/types/vite/discovery/virtual-module-codegen.d.ts +15 -0
- package/dist/types/vite/encryption-key.d.ts +2 -0
- package/dist/types/vite/index.d.ts +11 -0
- package/dist/types/vite/inject-client-debug.d.ts +56 -0
- package/dist/types/vite/plugin-types.d.ts +298 -0
- package/dist/types/vite/plugins/cjs-to-esm.d.ts +6 -0
- package/dist/types/vite/plugins/client-ref-dedup.d.ts +29 -0
- package/dist/types/vite/plugins/client-ref-hashing.d.ts +35 -0
- package/dist/types/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
- package/dist/types/vite/plugins/expose-action-id.d.ts +18 -0
- package/dist/types/vite/plugins/expose-id-utils.d.ts +37 -0
- package/dist/types/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
- package/dist/types/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
- package/dist/types/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
- package/dist/types/vite/plugins/expose-ids/router-transform.d.ts +13 -0
- package/dist/types/vite/plugins/expose-ids/types.d.ts +29 -0
- package/dist/types/vite/plugins/expose-internal-ids.d.ts +16 -0
- package/dist/types/vite/plugins/performance-tracks.d.ts +25 -0
- package/dist/types/vite/plugins/refresh-cmd.d.ts +20 -0
- package/dist/types/vite/plugins/server-ref-hashing.d.ts +24 -0
- package/dist/types/vite/plugins/server-reference-pattern.d.ts +1 -0
- package/dist/types/vite/plugins/use-cache-transform.d.ts +20 -0
- package/dist/types/vite/plugins/vercel-output.d.ts +85 -0
- package/dist/types/vite/plugins/version-injector.d.ts +21 -0
- package/dist/types/vite/plugins/version-plugin.d.ts +19 -0
- package/dist/types/vite/plugins/virtual-entries.d.ts +36 -0
- package/dist/types/vite/plugins/virtual-stub-plugin.d.ts +7 -0
- package/dist/types/vite/rango.d.ts +29 -0
- package/dist/types/vite/router-discovery.d.ts +23 -0
- package/dist/types/vite/utils/ast-handler-extract.d.ts +64 -0
- package/dist/types/vite/utils/banner.d.ts +2 -0
- package/dist/types/vite/utils/bundle-analysis.d.ts +28 -0
- package/dist/types/vite/utils/client-chunks.d.ts +55 -0
- package/dist/types/vite/utils/directive-prologue.d.ts +16 -0
- package/dist/types/vite/utils/forward-user-plugins.d.ts +37 -0
- package/dist/types/vite/utils/manifest-utils.d.ts +7 -0
- package/dist/types/vite/utils/package-resolution.d.ts +6 -0
- package/dist/types/vite/utils/prerender-utils.d.ts +32 -0
- package/dist/types/vite/utils/shared-utils.d.ts +67 -0
- package/dist/types.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 +12042 -1346
- 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/{src/vite/package-resolution.ts → dist/vite/package-resolution.js} +53 -66
- package/dist/vite/package-resolution.js.map +1 -0
- package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/dist/vite/virtual-entries.d.ts +25 -0
- package/dist/vite/virtual-entries.d.ts.map +1 -0
- package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +170 -77
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +359 -0
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +492 -0
- package/skills/caching/SKILL.md +452 -26
- package/skills/catalog.json +289 -0
- package/skills/client-urls/SKILL.md +339 -0
- package/skills/cloudflare/SKILL.md +153 -0
- package/skills/cloudflare/agents/openai.yaml +4 -0
- package/skills/cloudflare/references/d1-and-local-dev.md +131 -0
- package/skills/cloudflare/references/streaming-and-deploy.md +107 -0
- package/skills/cloudflare/references/webhooks-and-crypto.md +147 -0
- package/skills/comparison/SKILL.md +50 -0
- package/skills/comparison/agents/openai.yaml +4 -0
- package/skills/comparison/references/framework-comparison.md +858 -0
- package/skills/composability/SKILL.md +292 -0
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +16 -18
- package/skills/defer-hydration/SKILL.md +235 -0
- package/skills/deployment-caching/SKILL.md +176 -0
- package/skills/document-cache/SKILL.md +125 -65
- package/skills/fonts/SKILL.md +167 -0
- package/skills/handler-use/SKILL.md +364 -0
- package/skills/hooks/SKILL.md +76 -432
- package/skills/hooks/data.md +282 -0
- package/skills/hooks/handle-and-actions.md +110 -0
- package/skills/hooks/navigation.md +110 -0
- package/skills/hooks/outlets.md +62 -0
- package/skills/hooks/state.md +228 -0
- package/skills/hooks/urls.md +172 -0
- package/skills/host-router/SKILL.md +320 -0
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +215 -16
- package/skills/layout/SKILL.md +147 -7
- package/skills/links/SKILL.md +360 -33
- package/skills/loader/SKILL.md +762 -51
- package/skills/middleware/SKILL.md +251 -38
- package/skills/migrate-nextjs/SKILL.md +854 -0
- package/skills/migrate-nextjs/backend-host-swap.md +120 -0
- package/skills/migrate-react-router/SKILL.md +189 -0
- package/skills/migrate-react-router/component-migration.md +201 -0
- package/skills/migrate-react-router/data-and-actions.md +236 -0
- package/skills/migrate-react-router/route-mapping.md +284 -0
- package/skills/mime-routes/SKILL.md +165 -0
- package/skills/observability/SKILL.md +231 -0
- package/skills/parallel/SKILL.md +327 -4
- package/skills/ppr/SKILL.md +918 -0
- package/skills/prerender/SKILL.md +751 -0
- package/skills/rango/SKILL.md +387 -17
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +539 -0
- package/skills/route/SKILL.md +399 -15
- package/skills/router-setup/SKILL.md +270 -34
- package/skills/scripts/SKILL.md +189 -0
- package/skills/server-actions/SKILL.md +776 -0
- package/skills/shell-manifest/SKILL.md +194 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/tailwind/SKILL.md +153 -0
- package/skills/testing/SKILL.md +131 -0
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +172 -0
- package/skills/testing/client-components.md +131 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +153 -0
- package/skills/testing/loader.md +130 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +122 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +85 -0
- package/skills/testing/server-actions.md +107 -0
- package/skills/testing/server-tree.md +128 -0
- package/skills/testing/setup.md +123 -0
- package/skills/theme/SKILL.md +16 -12
- package/skills/typesafety/SKILL.md +45 -387
- package/skills/typesafety/env-and-bindings.md +254 -0
- package/skills/typesafety/generated-files-and-cli.md +342 -0
- package/skills/typesafety/params-and-search.md +153 -0
- package/skills/typesafety/route-types.md +213 -0
- package/skills/use-cache/SKILL.md +430 -0
- package/skills/vercel/SKILL.md +149 -0
- package/skills/view-transitions/SKILL.md +341 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +77 -44
- package/src/bin/rango.ts +325 -0
- package/src/browser/action-coordinator.ts +114 -0
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +39 -0
- package/src/browser/app-version.ts +14 -0
- package/src/browser/connection-warmup.ts +134 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/dev-discovery.ts +66 -0
- package/src/browser/event-controller.ts +477 -217
- package/src/browser/history-state.ts +101 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/intercept-utils.ts +52 -0
- package/src/browser/invalidate-client-cache.ts +52 -0
- package/src/browser/link-interceptor.ts +487 -18
- package/src/browser/logging.ts +83 -0
- package/src/browser/merge-segment-loaders.ts +23 -13
- package/src/browser/navigation-bridge.ts +471 -570
- package/src/browser/navigation-client.ts +343 -79
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +228 -366
- package/src/browser/navigation-transaction.ts +247 -0
- package/src/browser/network-error-handler.ts +88 -0
- package/src/browser/notify-listeners.ts +22 -0
- package/src/browser/partial-update.ts +491 -365
- package/src/browser/prefetch/cache.ts +457 -0
- package/src/browser/prefetch/default-strategy.ts +74 -0
- package/src/browser/prefetch/fetch.ts +548 -0
- package/src/browser/prefetch/invalidation.ts +30 -0
- package/src/browser/prefetch/loader.ts +111 -0
- package/src/browser/prefetch/observer.ts +93 -0
- package/src/browser/prefetch/policy.ts +48 -0
- package/src/browser/prefetch/queue.ts +209 -0
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/prefetch/runtime.ts +6 -0
- package/src/browser/rango-state.ts +215 -0
- package/src/browser/react/Link.tsx +332 -85
- package/src/browser/react/NavigationProvider.tsx +275 -109
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/context.ts +15 -0
- package/src/browser/react/filter-segment-order.ts +70 -0
- package/src/browser/react/index.ts +0 -48
- package/src/browser/react/location-state-shared.ts +272 -60
- package/src/browser/react/location-state.ts +90 -20
- package/src/browser/react/mount-context.ts +6 -1
- package/src/browser/react/nonce-context.ts +23 -0
- package/src/browser/react/shallow-equal.ts +27 -0
- package/src/browser/react/use-action.ts +35 -66
- package/src/browser/react/use-handle.ts +39 -132
- package/src/browser/react/use-href.tsx +9 -2
- package/src/browser/react/use-link-status.ts +39 -13
- package/src/browser/react/use-navigation.ts +53 -69
- package/src/browser/react/use-params.ts +75 -0
- package/src/browser/react/use-pathname.ts +47 -0
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +127 -0
- package/src/browser/react/use-search-params.ts +174 -0
- package/src/browser/react/use-segments.ts +72 -99
- package/src/browser/response-adapter.ts +164 -0
- package/src/browser/rsc-router.tsx +446 -74
- package/src/browser/scroll-restoration.ts +140 -50
- package/src/browser/segment-reconciler.ts +253 -0
- package/src/browser/segment-structure-assert.ts +17 -1
- package/src/browser/server-action-bridge.ts +707 -603
- package/src/browser/types.ts +266 -75
- package/src/browser/validate-redirect-origin.ts +56 -0
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +324 -84
- package/src/build/generate-route-types.ts +41 -0
- package/src/build/index.ts +22 -1
- package/src/build/merge-full-manifests.ts +161 -0
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +54 -0
- package/src/build/route-types/ast-helpers.ts +25 -0
- package/src/build/route-types/ast-route-extraction.ts +105 -0
- package/src/build/route-types/codegen.ts +113 -0
- package/src/build/route-types/include-resolution.ts +867 -0
- package/src/build/route-types/param-extraction.ts +51 -0
- package/src/build/route-types/per-module-writer.ts +149 -0
- package/src/build/route-types/router-processing.ts +726 -0
- package/src/build/route-types/scan-filter.ts +85 -0
- package/src/build/route-types/source-scan.ts +216 -0
- package/src/build/runtime-discovery.ts +234 -0
- package/src/cache/background-task.ts +34 -0
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-exec-scope.ts +47 -0
- package/src/cache/cache-key-utils.ts +102 -0
- package/src/cache/cache-policy.ts +199 -0
- package/src/cache/cache-runtime.ts +787 -0
- package/src/cache/cache-scope.ts +478 -342
- package/src/cache/cache-tag.ts +149 -0
- package/src/cache/cf/cf-base64.ts +33 -0
- package/src/cache/cf/cf-cache-constants.ts +134 -0
- package/src/cache/cf/cf-cache-store.ts +3397 -152
- package/src/cache/cf/cf-cache-types.ts +417 -0
- package/src/cache/cf/cf-kv-utils.ts +84 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +108 -0
- package/src/cache/cf/cf-zone-purge.ts +101 -0
- package/src/cache/cf/index.ts +21 -16
- package/src/cache/document-cache.ts +275 -105
- package/src/cache/handle-capture.ts +81 -0
- package/src/cache/handle-snapshot.ts +132 -0
- package/src/cache/index.ts +33 -35
- package/src/cache/memory-segment-store.ts +457 -30
- package/src/cache/profile-registry.ts +88 -0
- package/src/cache/read-through-swr.ts +184 -0
- package/src/cache/search-params-filter.ts +118 -0
- package/src/cache/segment-codec.ts +311 -0
- package/src/cache/shell-snapshot.ts +516 -0
- package/src/cache/tag-invalidation.ts +230 -0
- package/src/cache/taint.ts +172 -0
- package/src/cache/types.ts +405 -212
- package/src/cache/vercel/index.ts +11 -0
- package/src/cache/vercel/vercel-cache-store.ts +1264 -0
- package/src/client-urls/client-root.tsx +168 -0
- package/src/client-urls/client-urls.ts +779 -0
- package/src/client-urls/navigation.ts +237 -0
- package/src/client-urls/revalidation-protocol.ts +56 -0
- package/src/client-urls/server-projection.ts +670 -0
- package/src/client-urls/types.ts +202 -0
- package/src/client.rsc.tsx +55 -21
- package/src/client.tsx +179 -330
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +112 -0
- package/src/component-utils.ts +23 -4
- package/src/components/DefaultDocument.tsx +13 -3
- package/src/context-var.ts +168 -0
- package/src/debug.ts +19 -9
- package/src/decode-loader-results.ts +165 -0
- package/src/defer.ts +185 -0
- package/src/deps/ssr.ts +4 -2
- package/src/dev-discovery-protocol.ts +11 -0
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +149 -3
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +111 -55
- package/src/handles/MetaTags.tsx +83 -59
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +93 -0
- package/src/handles/deferred-resolution.ts +134 -0
- package/src/handles/is-thenable.ts +16 -0
- package/src/handles/meta.ts +44 -53
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +20 -65
- package/src/host/errors.ts +21 -30
- package/src/host/index.ts +13 -9
- package/src/host/pattern-matcher.ts +50 -79
- package/src/host/router.ts +151 -121
- package/src/host/testing.ts +45 -32
- package/src/host/types.ts +52 -11
- package/src/host/utils.ts +2 -2
- package/src/href-client.ts +236 -31
- package/src/index.rsc.ts +252 -20
- package/src/index.ts +343 -30
- package/src/internal-debug.ts +12 -0
- package/src/loader-redirect.tsx +64 -0
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +39 -163
- package/src/loader.ts +31 -13
- package/src/missing-id-error.ts +68 -0
- package/src/outlet-context.ts +21 -1
- package/src/outlet-provider.tsx +59 -0
- package/src/prerender/build-shell-capture.ts +453 -0
- package/src/prerender/param-hash.ts +37 -0
- package/src/prerender/shell-manifest-key.ts +20 -0
- package/src/prerender/store.ts +195 -0
- package/src/prerender.ts +592 -0
- package/src/redirect-origin.ts +172 -0
- package/src/regex-escape.ts +8 -0
- package/src/render-error-thrower.tsx +20 -0
- package/src/response-utils.ts +62 -0
- package/src/reverse.ts +380 -0
- package/src/root-error-boundary.tsx +42 -48
- package/src/route-content-wrapper.tsx +123 -78
- package/src/route-definition/dsl-helpers.ts +1150 -0
- package/src/route-definition/helper-factories.ts +88 -0
- package/src/route-definition/helpers-types.ts +522 -0
- package/src/route-definition/index.ts +54 -0
- package/src/route-definition/redirect.ts +133 -0
- package/src/route-definition/resolve-handler-use.ts +160 -0
- package/src/route-definition/use-item-types.ts +29 -0
- package/src/route-definition.ts +1 -1428
- package/src/route-map-builder.ts +249 -127
- package/src/route-name.ts +53 -0
- package/src/route-types.ts +87 -45
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +305 -0
- package/src/router/debug-manifest.ts +72 -0
- package/src/router/error-handling.ts +119 -38
- package/src/router/find-match.ts +259 -0
- package/src/router/handler-context.ts +439 -86
- package/src/router/instrument.ts +401 -0
- package/src/router/intercept-resolution.ts +479 -0
- package/src/router/lazy-includes.ts +261 -0
- package/src/router/loader-resolution.ts +714 -142
- package/src/router/logging.ts +245 -0
- package/src/router/manifest.ts +225 -63
- package/src/router/match-api.ts +591 -0
- package/src/router/match-context.ts +5 -25
- package/src/router/match-handlers.ts +537 -0
- package/src/router/match-middleware/background-revalidation.ts +128 -97
- package/src/router/match-middleware/cache-lookup.ts +537 -73
- package/src/router/match-middleware/cache-store.ts +214 -60
- package/src/router/match-middleware/intercept-resolution.ts +56 -38
- package/src/router/match-middleware/segment-resolution.ts +71 -19
- package/src/router/match-pipelines.ts +11 -87
- package/src/router/match-result.ts +150 -53
- package/src/router/metrics.ts +235 -29
- package/src/router/middleware-types.ts +110 -0
- package/src/router/middleware.ts +526 -441
- package/src/router/navigation-snapshot.ts +173 -0
- package/src/router/params-util.ts +23 -0
- package/src/router/parse-pattern.ts +115 -0
- package/src/router/pattern-matching.ts +348 -149
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prefetch-default.ts +59 -0
- package/src/router/prefetch-limits.ts +37 -0
- package/src/router/prerender-match.ts +592 -0
- package/src/router/preview-match.ts +102 -0
- package/src/router/request-classification.ts +291 -0
- package/src/router/revalidation.ts +252 -90
- package/src/router/route-snapshot.ts +256 -0
- package/src/router/route-trie-builder.ts +334 -0
- package/src/router/router-context.ts +45 -48
- package/src/router/router-interfaces.ts +614 -0
- package/src/router/router-options.ts +842 -0
- package/src/router/router-registry.ts +21 -0
- package/src/router/segment-resolution/fresh.ts +879 -0
- package/src/router/segment-resolution/helpers.ts +346 -0
- package/src/router/segment-resolution/loader-cache.ts +368 -0
- package/src/router/segment-resolution/loader-mask.ts +60 -0
- package/src/router/segment-resolution/loader-snapshot.ts +259 -0
- package/src/router/segment-resolution/mask-nested.ts +99 -0
- package/src/router/segment-resolution/revalidation.ts +1376 -0
- package/src/router/segment-resolution/static-store.ts +107 -0
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution/view-transition-default.ts +60 -0
- package/src/router/segment-resolution.ts +25 -0
- package/src/router/segment-wrappers.ts +292 -0
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/substitute-pattern-params.ts +75 -0
- package/src/router/telemetry-otel.ts +270 -0
- package/src/router/telemetry.ts +386 -0
- package/src/router/timeout.ts +179 -0
- package/src/router/tracing.ts +235 -0
- package/src/router/transition-when.ts +76 -0
- package/src/router/trie-matching.ts +351 -0
- package/src/router/types.ts +60 -39
- package/src/router/url-params.ts +57 -0
- package/src/router.ts +911 -4253
- package/src/rsc/capture-queue.ts +218 -0
- package/src/rsc/full-payload.ts +77 -0
- package/src/rsc/handler-context.ts +47 -0
- package/src/rsc/handler.ts +1226 -834
- package/src/rsc/helpers.ts +351 -19
- package/src/rsc/index.ts +2 -25
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +305 -0
- package/src/rsc/manifest-init.ts +89 -0
- package/src/rsc/nonce.ts +39 -0
- package/src/rsc/origin-guard.ts +155 -0
- package/src/rsc/progressive-enhancement.ts +686 -0
- package/src/rsc/redirect-guard.ts +102 -0
- package/src/rsc/render-pipeline.ts +611 -0
- package/src/rsc/response-cache-serve.ts +259 -0
- package/src/rsc/response-error.ts +104 -0
- package/src/rsc/response-route-handler.ts +221 -0
- package/src/rsc/routine-plan.ts +359 -0
- package/src/rsc/rsc-rendering.ts +1729 -0
- package/src/rsc/runtime-warnings.ts +55 -0
- package/src/rsc/server-action.ts +639 -0
- package/src/rsc/shell-build-manifest.ts +343 -0
- package/src/rsc/shell-capture-constants.ts +45 -0
- package/src/rsc/shell-capture.ts +2135 -0
- package/src/rsc/shell-serve.ts +350 -0
- package/src/rsc/ssr-setup.ts +236 -0
- package/src/rsc/stream-idle.ts +137 -0
- package/src/rsc/transition-gate.ts +86 -0
- package/src/rsc/types.ts +167 -14
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +235 -0
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-fragments.ts +165 -0
- package/src/segment-loader-promise.ts +167 -0
- package/src/segment-system.tsx +544 -136
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +741 -90
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +337 -0
- package/src/server/fetchable-loader-store.ts +37 -0
- package/src/server/handle-store.ts +278 -60
- package/src/server/loader-registry.ts +51 -100
- package/src/server/request-context.ts +1296 -161
- package/src/server.ts +38 -128
- package/src/ssr/index.tsx +716 -140
- package/src/ssr/inject-rsc-eager.ts +167 -0
- package/src/ssr/preinit-client-references.ts +106 -0
- package/src/ssr/ssr-root.tsx +305 -0
- package/src/ssr-suspension-warning.ts +67 -0
- package/src/static-handler.ts +139 -0
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +46 -0
- package/src/testing/dispatch.ts +951 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +147 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +319 -0
- package/src/testing/e2e/parity.ts +400 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +257 -0
- package/src/testing/generated-routes.ts +199 -0
- package/src/testing/index.ts +121 -0
- package/src/testing/internal/context.ts +380 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +371 -0
- package/src/testing/render-route.tsx +667 -0
- package/src/testing/run-loader.ts +423 -0
- package/src/testing/run-middleware.ts +219 -0
- package/src/testing/run-transition-when.ts +197 -0
- package/src/testing/shell-status.ts +206 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +305 -0
- package/src/theme/ThemeProvider.tsx +76 -98
- package/src/theme/ThemeScript.tsx +12 -14
- package/src/theme/constants.ts +57 -15
- package/src/theme/index.ts +3 -20
- package/src/theme/theme-context.ts +5 -35
- package/src/theme/theme-script.ts +43 -39
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +142 -0
- package/src/types/cache-types.ts +207 -0
- package/src/types/error-types.ts +132 -0
- package/src/types/global-namespace.ts +113 -0
- package/src/types/handler-context.ts +850 -0
- package/src/types/index.ts +82 -0
- package/src/types/loader-types.ts +273 -0
- package/src/types/request-scope.ts +112 -0
- package/src/types/route-config.ts +138 -0
- package/src/types/route-entry.ts +117 -0
- package/src/types/segments.ts +291 -0
- package/src/types.ts +1 -1623
- package/src/urls/include-helper.ts +181 -0
- package/src/urls/include-provider.ts +71 -0
- package/src/urls/index.ts +44 -0
- package/src/urls/path-helper-types.ts +435 -0
- package/src/urls/path-helper.ts +284 -0
- package/src/urls/pattern-types.ts +189 -0
- package/src/urls/response-types.ts +109 -0
- package/src/urls/type-extraction.ts +316 -0
- package/src/urls/urls-function.ts +80 -0
- package/src/urls.ts +1 -802
- package/src/use-loader.tsx +487 -138
- package/src/vercel/index.ts +11 -0
- package/src/vercel/tracing.ts +89 -0
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +185 -0
- package/src/vite/discovery/client-urls-projection.ts +322 -0
- package/src/vite/discovery/dev-prerender-cache.ts +117 -0
- package/src/vite/discovery/discover-routers.ts +375 -0
- package/src/vite/discovery/discovery-errors.ts +255 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +494 -0
- package/src/vite/discovery/route-types-writer.ts +214 -0
- package/src/vite/discovery/self-gen-tracking.ts +73 -0
- package/src/vite/discovery/shell-prerender-phase.ts +397 -0
- package/src/vite/discovery/state.ts +215 -0
- package/src/vite/discovery/virtual-module-codegen.ts +342 -0
- package/src/vite/encryption-key.ts +29 -0
- package/src/vite/index.ts +31 -1137
- package/src/vite/inject-client-debug.ts +88 -0
- package/src/vite/plugin-types.ts +336 -0
- package/src/vite/plugins/cjs-to-esm.ts +90 -0
- package/src/vite/plugins/client-ref-dedup.ts +382 -0
- package/src/vite/plugins/client-ref-hashing.ts +118 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
- package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +130 -136
- package/src/vite/plugins/expose-id-utils.ts +332 -0
- package/src/vite/plugins/expose-ids/export-analysis.ts +363 -0
- package/src/vite/plugins/expose-ids/handler-transform.ts +130 -0
- package/src/vite/plugins/expose-ids/loader-transform.ts +64 -0
- package/src/vite/plugins/expose-ids/router-transform.ts +199 -0
- package/src/vite/plugins/expose-ids/types.ts +45 -0
- package/src/vite/plugins/expose-internal-ids.ts +851 -0
- package/src/vite/plugins/performance-tracks.ts +89 -0
- package/src/vite/plugins/refresh-cmd.ts +127 -0
- package/src/vite/plugins/server-ref-hashing.ts +74 -0
- package/src/vite/plugins/server-reference-pattern.ts +10 -0
- package/src/vite/plugins/use-cache-transform.ts +313 -0
- package/src/vite/plugins/vercel-output.ts +384 -0
- package/src/vite/plugins/version-injector.ts +93 -0
- package/src/vite/plugins/version-plugin.ts +271 -0
- package/src/vite/plugins/virtual-entries.ts +286 -0
- package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
- package/src/vite/rango.ts +609 -0
- package/src/vite/router-discovery.ts +2400 -0
- package/src/vite/utils/ast-handler-extract.ts +508 -0
- package/src/vite/utils/banner.ts +36 -0
- package/src/vite/utils/bundle-analysis.ts +132 -0
- package/src/vite/utils/client-chunks.ts +184 -0
- package/src/vite/utils/directive-prologue.ts +40 -0
- package/src/vite/utils/forward-user-plugins.ts +171 -0
- package/src/vite/utils/manifest-utils.ts +12 -0
- package/src/vite/utils/package-resolution.ts +90 -0
- package/src/vite/utils/prerender-utils.ts +268 -0
- package/src/vite/utils/shared-utils.ts +283 -0
- package/CLAUDE.md +0 -43
- package/src/browser/lru-cache.ts +0 -69
- package/src/browser/request-controller.ts +0 -164
- package/src/browser/shallow.ts +0 -35
- package/src/cache/memory-store.ts +0 -253
- package/src/href.ts +0 -255
- package/src/server/route-manifest-cache.ts +0 -173
- package/src/vite/expose-handle-id.ts +0 -209
- package/src/vite/expose-loader-id.ts +0 -426
- package/src/vite/expose-location-state-id.ts +0 -177
- /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import type { ReactNode } from "react";
|
|
8
|
-
import { track } from "../server/context";
|
|
9
8
|
import type { EntryData } from "../server/context";
|
|
9
|
+
import { observePhase, PHASES } from "./instrument.js";
|
|
10
|
+
import { contextGet } from "../context-var.js";
|
|
10
11
|
import type {
|
|
11
12
|
ResolvedSegment,
|
|
12
13
|
HandlerContext,
|
|
@@ -17,12 +18,37 @@ import type {
|
|
|
17
18
|
ErrorBoundaryHandler,
|
|
18
19
|
ErrorBoundaryFallbackProps,
|
|
19
20
|
ErrorInfo,
|
|
21
|
+
NotFoundBoundaryHandler,
|
|
22
|
+
NotFoundBoundaryFallbackProps,
|
|
20
23
|
} from "../types";
|
|
21
|
-
import
|
|
22
|
-
import {
|
|
23
|
-
import
|
|
24
|
-
import {
|
|
25
|
-
|
|
24
|
+
import { createElement } from "react";
|
|
25
|
+
import { isDataNotFoundError } from "../errors.js";
|
|
26
|
+
import { isRedirectResponse } from "../response-utils.js";
|
|
27
|
+
import {
|
|
28
|
+
resolveSoftRedirectUrl,
|
|
29
|
+
getRedirectState,
|
|
30
|
+
isExternalRedirect,
|
|
31
|
+
} from "../redirect-origin.js";
|
|
32
|
+
import {
|
|
33
|
+
createNotFoundInfo,
|
|
34
|
+
renderNotFoundFallback,
|
|
35
|
+
resolveNotFoundFallback,
|
|
36
|
+
} from "./error-handling.js";
|
|
37
|
+
import { isHandle, collectHandleData, type Handle } from "../handle.js";
|
|
38
|
+
import { withDefer } from "../defer.js";
|
|
39
|
+
import {
|
|
40
|
+
buildHandleSnapshot,
|
|
41
|
+
type HandleStore,
|
|
42
|
+
} from "../server/handle-store.js";
|
|
43
|
+
import { getFetchableLoader } from "../server/fetchable-loader-store.js";
|
|
44
|
+
import { _getRequestContext } from "../server/request-context.js";
|
|
45
|
+
import {
|
|
46
|
+
isInsideLoaderScope,
|
|
47
|
+
runInsideLoaderBodyScope,
|
|
48
|
+
isInsidePushCallbackScope,
|
|
49
|
+
runInsidePushCallbackScope,
|
|
50
|
+
} from "../server/context.js";
|
|
51
|
+
import { debugLog } from "./logging.js";
|
|
26
52
|
|
|
27
53
|
/**
|
|
28
54
|
* Internal callback signature for loader error notifications.
|
|
@@ -35,14 +61,69 @@ export type LoaderErrorCallback = (
|
|
|
35
61
|
segmentId: string;
|
|
36
62
|
loaderName: string;
|
|
37
63
|
handledByBoundary: boolean;
|
|
38
|
-
}
|
|
64
|
+
},
|
|
39
65
|
) => void;
|
|
40
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Loader-thrown authority signals (notFound()/redirect()) are detected by the
|
|
69
|
+
* shape a consumer can actually throw: DataNotFoundError via the shared
|
|
70
|
+
* cross-realm-safe isDataNotFoundError, redirect by 3xx Response.
|
|
71
|
+
*/
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Deliver one `ctx.use(Handle)(value)` push to the owning segment.
|
|
75
|
+
*
|
|
76
|
+
* Shared by the handler lane (setupLoaderAccess) and the loader-body lane
|
|
77
|
+
* (createLoaderExecutor) so a loader push attributes and scopes EXACTLY like a
|
|
78
|
+
* handler push — that parity is the contract `ctx.use` in a loader promises.
|
|
79
|
+
*
|
|
80
|
+
* A function value runs inside the push-callback scope so `ctx.use(loader)`
|
|
81
|
+
* calls it makes — including after its own awaits, for an async callback — are
|
|
82
|
+
* not registered as handler-to-loader deps and do not trip the deadlock guard.
|
|
83
|
+
* A pushed promise value is not tracked by handleStore.settled and does not
|
|
84
|
+
* block segment resolution, so it cannot form a rendered() deadlock. The ALS
|
|
85
|
+
* scope (not a plain boolean) is what survives the callback's awaits.
|
|
86
|
+
*/
|
|
87
|
+
function pushHandleValue(
|
|
88
|
+
store: HandleStore | undefined,
|
|
89
|
+
segmentId: string | undefined,
|
|
90
|
+
handleId: string,
|
|
91
|
+
dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>),
|
|
92
|
+
): void {
|
|
93
|
+
if (!store || !segmentId) return;
|
|
94
|
+
if (typeof dataOrFn === "function") {
|
|
95
|
+
store.push(
|
|
96
|
+
handleId,
|
|
97
|
+
segmentId,
|
|
98
|
+
runInsidePushCallbackScope(() => (dataOrFn as () => Promise<unknown>)()),
|
|
99
|
+
);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
store.push(handleId, segmentId, dataOrFn);
|
|
103
|
+
}
|
|
104
|
+
|
|
41
105
|
/**
|
|
42
106
|
* Wrap a loader promise with error handling for deferred client-side resolution.
|
|
43
107
|
* Catches errors and converts them to LoaderDataResult objects that include
|
|
44
108
|
* error info and pre-rendered fallback UI when an error boundary is available.
|
|
45
109
|
*
|
|
110
|
+
* Loader-thrown SIGNALS are routed before error handling — they are control
|
|
111
|
+
* flow, not failures (onError is not invoked for them):
|
|
112
|
+
* - notFound(): the not-found UI is resolved and rendered HERE, server-side
|
|
113
|
+
* (nearest notFoundBoundary → router notFound option → default), exactly
|
|
114
|
+
* like the consumption lane (segment-resolution/helpers.ts), and rides the
|
|
115
|
+
* envelope's `fallback` — the client swaps with zero extra fetches. The
|
|
116
|
+
* response status is opportunistically set to 404 via the request stub: if
|
|
117
|
+
* the rejection settles before the document Response is constructed the
|
|
118
|
+
* status is a real 404; after, the stub write is inert (streamed fix-up
|
|
119
|
+
* only). Nav-lane payloads are 200 either way — the client owns 404
|
|
120
|
+
* presentation there.
|
|
121
|
+
* - redirect() (thrown 3xx Response): the target is resolved through the
|
|
122
|
+
* soft-redirect same-origin rules NOW so unsafe targets never leave the
|
|
123
|
+
* server; the client navigates when the entry decodes. No document-lane
|
|
124
|
+
* 302 — pre-stream redirect authority belongs to middleware (doctrine);
|
|
125
|
+
* a loader redirect is always a client-side navigate.
|
|
126
|
+
*
|
|
46
127
|
* @param onError - Optional callback invoked when loader errors occur.
|
|
47
128
|
* This has a simplified signature for internal use - the caller (typically
|
|
48
129
|
* wrapLoaderPromise in router.ts) is responsible for bridging to the full
|
|
@@ -54,16 +135,26 @@ export function wrapLoaderWithErrorHandling<T>(
|
|
|
54
135
|
segmentId: string,
|
|
55
136
|
pathname: string,
|
|
56
137
|
findNearestErrorBoundary: (
|
|
57
|
-
entry: EntryData | null
|
|
138
|
+
entry: EntryData | null,
|
|
58
139
|
) => ReactNode | ErrorBoundaryHandler | null,
|
|
59
140
|
createErrorInfo: (
|
|
60
141
|
error: unknown,
|
|
61
142
|
segmentId: string,
|
|
62
|
-
segmentType: ErrorInfo["segmentType"]
|
|
143
|
+
segmentType: ErrorInfo["segmentType"],
|
|
63
144
|
) => ErrorInfo,
|
|
64
|
-
onError?: LoaderErrorCallback
|
|
145
|
+
onError?: LoaderErrorCallback,
|
|
146
|
+
notFoundDeps?: {
|
|
147
|
+
findNearestNotFoundBoundary: (
|
|
148
|
+
entry: EntryData | null,
|
|
149
|
+
) => ReactNode | NotFoundBoundaryHandler | null;
|
|
150
|
+
notFoundComponent?:
|
|
151
|
+
| ReactNode
|
|
152
|
+
| ((props: { pathname: string }) => ReactNode);
|
|
153
|
+
},
|
|
65
154
|
): Promise<LoaderDataResult<T>> {
|
|
66
|
-
// Extract
|
|
155
|
+
// Extract the trailing token from segmentId (format: "<shortCode>D<i>.<loaderId>").
|
|
156
|
+
// The token is the loader's $$id (hash#export in prod, pathfrag#export in dev),
|
|
157
|
+
// not a clean display name.
|
|
67
158
|
const loaderName = segmentId.split(".").pop() || "unknown";
|
|
68
159
|
|
|
69
160
|
return Promise.resolve(promise)
|
|
@@ -72,9 +163,95 @@ export function wrapLoaderWithErrorHandling<T>(
|
|
|
72
163
|
__loaderResult: true,
|
|
73
164
|
ok: true,
|
|
74
165
|
data,
|
|
75
|
-
})
|
|
166
|
+
}),
|
|
76
167
|
)
|
|
77
168
|
.catch((error): LoaderDataResult<T> => {
|
|
169
|
+
if (isDataNotFoundError(error)) {
|
|
170
|
+
// Opportunistic document 404: the stub status is read once when the
|
|
171
|
+
// document Response is constructed (createResponseWithMergedHeaders);
|
|
172
|
+
// a pre-construction write becomes the real status, a later write is
|
|
173
|
+
// harmless. Same mechanism as the consumption lane's setResponseStatus.
|
|
174
|
+
_getRequestContext()?._setStatus(404);
|
|
175
|
+
|
|
176
|
+
const effective = resolveNotFoundFallback(
|
|
177
|
+
notFoundDeps?.findNearestNotFoundBoundary(entry),
|
|
178
|
+
notFoundDeps?.notFoundComponent,
|
|
179
|
+
pathname,
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
const notFoundInfo = createNotFoundInfo(
|
|
183
|
+
error as { message: string },
|
|
184
|
+
segmentId,
|
|
185
|
+
"loader",
|
|
186
|
+
pathname,
|
|
187
|
+
);
|
|
188
|
+
let renderedNotFound: ReactNode;
|
|
189
|
+
try {
|
|
190
|
+
renderedNotFound = renderNotFoundFallback(effective, notFoundInfo);
|
|
191
|
+
} catch {
|
|
192
|
+
// A throwing boundary must not collapse the envelope (the wrapped
|
|
193
|
+
// promise is contracted to never reject); degrade to the default.
|
|
194
|
+
// Deliberately NOT shared with the consumption lane
|
|
195
|
+
// (segment-resolution/helpers.ts), which lets a throwing boundary
|
|
196
|
+
// propagate to the error boundary — only this lane is contracted to
|
|
197
|
+
// never reject.
|
|
198
|
+
renderedNotFound = createElement("h1", null, "Not Found");
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
debugLog("loader", "loader threw notFound()", {
|
|
202
|
+
segmentId,
|
|
203
|
+
pathname,
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
return {
|
|
207
|
+
__loaderResult: true,
|
|
208
|
+
ok: false,
|
|
209
|
+
notFound: true,
|
|
210
|
+
error: createErrorInfo(error, segmentId, "loader"),
|
|
211
|
+
fallback: renderedNotFound ?? null,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (error instanceof Response && isRedirectResponse(error)) {
|
|
216
|
+
const reqCtx = _getRequestContext();
|
|
217
|
+
const requestOrigin = reqCtx?.originalUrl?.origin ?? reqCtx?.url.origin;
|
|
218
|
+
const location = error.headers.get("Location")!;
|
|
219
|
+
// Same-origin policy applied server-side; the wire never carries an
|
|
220
|
+
// unresolved target. redirect(url, { external: true })'s WeakSet brand
|
|
221
|
+
// survives (the thrown Response IS the branded object).
|
|
222
|
+
const to = requestOrigin
|
|
223
|
+
? resolveSoftRedirectUrl(
|
|
224
|
+
location,
|
|
225
|
+
requestOrigin,
|
|
226
|
+
reqCtx?._basename,
|
|
227
|
+
isExternalRedirect(error),
|
|
228
|
+
)
|
|
229
|
+
: location;
|
|
230
|
+
|
|
231
|
+
debugLog("loader", "loader threw redirect()", {
|
|
232
|
+
segmentId,
|
|
233
|
+
to,
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
// redirect(url, { state }): the resolved state rides the thrown
|
|
237
|
+
// Response (attachRedirectState), NOT payload metadata — a streaming
|
|
238
|
+
// loader settles after the metadata flush, so the marker is the only
|
|
239
|
+
// carrier that reaches the client. LoaderRedirect navigates with it.
|
|
240
|
+
const redirectState = getRedirectState(error);
|
|
241
|
+
|
|
242
|
+
return {
|
|
243
|
+
__loaderResult: true,
|
|
244
|
+
ok: false,
|
|
245
|
+
redirect: { to, ...(redirectState && { state: redirectState }) },
|
|
246
|
+
error: createErrorInfo(
|
|
247
|
+
new Error(`Loader redirected to ${to}`),
|
|
248
|
+
segmentId,
|
|
249
|
+
"loader",
|
|
250
|
+
),
|
|
251
|
+
fallback: null,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
|
|
78
255
|
// Find nearest error boundary
|
|
79
256
|
const fallback = findNearestErrorBoundary(entry);
|
|
80
257
|
|
|
@@ -99,22 +276,46 @@ export function wrapLoaderWithErrorHandling<T>(
|
|
|
99
276
|
};
|
|
100
277
|
}
|
|
101
278
|
|
|
102
|
-
// Render fallback on server
|
|
279
|
+
// Render fallback on server. The user ErrorBoundaryHandler may throw
|
|
280
|
+
// synchronously; if it does we must NOT let that rejection escape — the
|
|
281
|
+
// wrapped LoaderDataResult promise is contracted to never reject (see
|
|
282
|
+
// segment-resolution/fresh.ts `await Promise.all(...wrapped)`), and a
|
|
283
|
+
// rejection here would collapse the whole entry and discard healthy
|
|
284
|
+
// sibling loader data. On a fallback-render throw, fall back to the
|
|
285
|
+
// no-boundary result (fallback: null) so the client throws the ORIGINAL
|
|
286
|
+
// error, and the wrapped promise still resolves to a LoaderDataResult.
|
|
103
287
|
let renderedFallback: ReactNode;
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
288
|
+
try {
|
|
289
|
+
if (typeof fallback === "function") {
|
|
290
|
+
// ErrorBoundaryHandler - call with error info
|
|
291
|
+
const props: ErrorBoundaryFallbackProps = {
|
|
292
|
+
error: errorInfo,
|
|
293
|
+
};
|
|
294
|
+
renderedFallback = fallback(props);
|
|
295
|
+
} else {
|
|
296
|
+
renderedFallback = fallback;
|
|
297
|
+
}
|
|
298
|
+
} catch (fallbackError) {
|
|
299
|
+
debugLog("loader", "error boundary fallback render threw", {
|
|
300
|
+
segmentId,
|
|
301
|
+
message: errorInfo.message,
|
|
302
|
+
fallbackError:
|
|
303
|
+
fallbackError instanceof Error
|
|
304
|
+
? fallbackError.message
|
|
305
|
+
: String(fallbackError),
|
|
306
|
+
});
|
|
307
|
+
return {
|
|
308
|
+
__loaderResult: true,
|
|
309
|
+
ok: false,
|
|
107
310
|
error: errorInfo,
|
|
311
|
+
fallback: null,
|
|
108
312
|
};
|
|
109
|
-
renderedFallback = fallback(props);
|
|
110
|
-
} else {
|
|
111
|
-
renderedFallback = fallback;
|
|
112
313
|
}
|
|
113
314
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
errorInfo.message
|
|
117
|
-
);
|
|
315
|
+
debugLog("loader", "loader error wrapped with boundary fallback", {
|
|
316
|
+
segmentId,
|
|
317
|
+
message: errorInfo.message,
|
|
318
|
+
});
|
|
118
319
|
|
|
119
320
|
return {
|
|
120
321
|
__loaderResult: true,
|
|
@@ -126,61 +327,114 @@ export function wrapLoaderWithErrorHandling<T>(
|
|
|
126
327
|
}
|
|
127
328
|
|
|
128
329
|
/**
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
* For handles: Returns a push function bound to the current segment.
|
|
330
|
+
* Detect cycles in the loader dependency graph using DFS from a given node.
|
|
331
|
+
* Returns the cycle path (array of loader IDs forming the cycle) if one exists,
|
|
332
|
+
* or null if no cycle is found.
|
|
133
333
|
*/
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
334
|
+
function detectLoaderCycle(
|
|
335
|
+
from: string,
|
|
336
|
+
to: string,
|
|
337
|
+
dependsOn: Map<string, Set<string>>,
|
|
338
|
+
): string[] | null {
|
|
339
|
+
// If `to` can reach `from` via the dependency graph, adding the edge
|
|
340
|
+
// from -> to creates a cycle. We search from `to` looking for `from`.
|
|
341
|
+
const visited = new Set<string>();
|
|
342
|
+
const path: string[] = [from, to];
|
|
343
|
+
|
|
344
|
+
function dfs(current: string): string[] | null {
|
|
345
|
+
if (current === from) {
|
|
346
|
+
// Found a cycle: return the path leading back to `from`
|
|
347
|
+
return path;
|
|
348
|
+
}
|
|
349
|
+
if (visited.has(current)) return null;
|
|
350
|
+
visited.add(current);
|
|
142
351
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
// Handle case: return a push function
|
|
146
|
-
if (isHandle(item)) {
|
|
147
|
-
const handle = item;
|
|
148
|
-
const store = getHandleStore();
|
|
149
|
-
const segmentId = (ctx as InternalHandlerContext)._currentSegmentId;
|
|
352
|
+
const deps = dependsOn.get(current);
|
|
353
|
+
if (!deps) return null;
|
|
150
354
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
355
|
+
for (const dep of deps) {
|
|
356
|
+
path.push(dep);
|
|
357
|
+
const cycle = dfs(dep);
|
|
358
|
+
if (cycle) return cycle;
|
|
359
|
+
path.pop();
|
|
360
|
+
}
|
|
361
|
+
return null;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
return dfs(to);
|
|
365
|
+
}
|
|
157
366
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
367
|
+
/**
|
|
368
|
+
* Creates a memoizing loader executor with cycle detection.
|
|
369
|
+
* Shared by setupLoaderAccess and setupLoaderAccessSilent; only the handle
|
|
370
|
+
* branch differs between the two, so only the loader logic is extracted here.
|
|
371
|
+
*
|
|
372
|
+
* Returns a useLoader(loader, callerLoaderId) function that:
|
|
373
|
+
* - Tracks dependency edges between loaders for cycle detection
|
|
374
|
+
* - Throws immediately (synchronously inside an async fn) on circular deps
|
|
375
|
+
* - Memoizes each loader's promise so it runs at most once per request
|
|
376
|
+
*/
|
|
377
|
+
function createLoaderExecutor<TEnv>(
|
|
378
|
+
ctx: HandlerContext<any, TEnv>,
|
|
379
|
+
loaderPromises: Map<string, Promise<any>>,
|
|
380
|
+
executorOptions?: {
|
|
381
|
+
/**
|
|
382
|
+
* Background proactive-caching mode: ctx.handle() pushes become no-ops
|
|
383
|
+
* (mirroring setupLoaderAccessSilent's handler-handle no-op) and loader
|
|
384
|
+
* bodies are NOT aux-tracked into the foreground handle store — a
|
|
385
|
+
* background run must neither duplicate handle data nor extend the live
|
|
386
|
+
* payload's handle-stream lifetime.
|
|
387
|
+
*/
|
|
388
|
+
silentHandles?: boolean;
|
|
389
|
+
},
|
|
390
|
+
): (
|
|
391
|
+
loader: LoaderDefinition<any, any>,
|
|
392
|
+
callerLoaderId: string | null,
|
|
393
|
+
) => Promise<any> {
|
|
394
|
+
// Capture RequestContext eagerly for cookie access (ALS protection on Cloudflare)
|
|
395
|
+
const reqCtxRef = _getRequestContext();
|
|
396
|
+
const silentHandles = executorOptions?.silentHandles === true;
|
|
397
|
+
|
|
398
|
+
// Dependency graph: loaderId -> set of loader IDs it directly depends on.
|
|
399
|
+
const dependsOn = new Map<string, Set<string>>();
|
|
400
|
+
|
|
401
|
+
// Loaders whose promises have not yet settled.
|
|
402
|
+
// A dependency on a pending loader that closes a cycle means deadlock.
|
|
403
|
+
const pendingLoaders = new Set<string>();
|
|
404
|
+
|
|
405
|
+
function useLoader(
|
|
406
|
+
loader: LoaderDefinition<any, any>,
|
|
407
|
+
callerLoaderId: string | null,
|
|
408
|
+
): Promise<any> {
|
|
409
|
+
// Record the dependency edge and check for cycles before running
|
|
410
|
+
if (callerLoaderId !== null) {
|
|
411
|
+
let deps = dependsOn.get(callerLoaderId);
|
|
412
|
+
if (!deps) {
|
|
413
|
+
deps = new Set();
|
|
414
|
+
dependsOn.set(callerLoaderId, deps);
|
|
415
|
+
}
|
|
163
416
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
417
|
+
// Only relevant when the target is still pending (would deadlock)
|
|
418
|
+
if (pendingLoaders.has(loader.$$id)) {
|
|
419
|
+
const cycle = detectLoaderCycle(callerLoaderId, loader.$$id, dependsOn);
|
|
420
|
+
if (cycle) {
|
|
421
|
+
throw new Error(
|
|
422
|
+
`Circular loader dependency detected: ${cycle.join(" -> ")}. ` +
|
|
423
|
+
`Loaders cannot depend on each other in a cycle. ` +
|
|
424
|
+
`Refactor to break the circular dependency.`,
|
|
425
|
+
);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
168
428
|
|
|
169
|
-
|
|
170
|
-
store.push(handle.$$id, segmentId, valueOrPromise);
|
|
171
|
-
};
|
|
429
|
+
deps.add(loader.$$id);
|
|
172
430
|
}
|
|
173
431
|
|
|
174
|
-
// Loader case: existing behavior
|
|
175
|
-
const loader = item as LoaderDefinition<any, any>;
|
|
176
|
-
|
|
177
432
|
// Return cached promise if already started
|
|
178
433
|
if (loaderPromises.has(loader.$$id)) {
|
|
179
|
-
return loaderPromises.get(loader.$$id)
|
|
434
|
+
return loaderPromises.get(loader.$$id)!;
|
|
180
435
|
}
|
|
181
436
|
|
|
182
437
|
// Get loader function - either from loader object or fetchable registry
|
|
183
|
-
// Fetchable loaders store fn in registry (not on object) to avoid client bundling issues
|
|
184
438
|
let loaderFn = loader.fn;
|
|
185
439
|
if (!loaderFn) {
|
|
186
440
|
const fetchable = getFetchableLoader(loader.$$id);
|
|
@@ -189,122 +443,440 @@ export function setupLoaderAccess<TEnv>(
|
|
|
189
443
|
}
|
|
190
444
|
}
|
|
191
445
|
|
|
192
|
-
// Ensure loader has a function
|
|
193
446
|
if (!loaderFn) {
|
|
194
447
|
throw new Error(
|
|
195
|
-
`Loader "${loader.$$id}" has no function. This usually means the loader was defined without "use server" and the function was not included in the build
|
|
448
|
+
`Loader "${loader.$$id}" has no function. This usually means the loader was defined without "use server" and the function was not included in the build.`,
|
|
196
449
|
);
|
|
197
450
|
}
|
|
198
451
|
|
|
199
|
-
|
|
452
|
+
pendingLoaders.add(loader.$$id);
|
|
453
|
+
|
|
454
|
+
const currentLoaderId = loader.$$id;
|
|
455
|
+
const variables = (ctx as InternalHandlerContext<any, TEnv>)._variables;
|
|
456
|
+
|
|
457
|
+
// Capture whether this loader is being started from a DSL loader scope
|
|
458
|
+
// (runInsideLoaderScope in fresh.ts). Handler-invoked loaders are NOT
|
|
459
|
+
// inside loader scope. This determines whether rendered() is allowed.
|
|
460
|
+
const isDslLoader = isInsideLoaderScope();
|
|
461
|
+
|
|
462
|
+
// Owning segment for ctx.handle() attribution, captured SYNCHRONOUSLY at
|
|
463
|
+
// kickoff: segment resolution sets _currentSegmentId while resolving the
|
|
464
|
+
// segment that declares this loader (fresh.ts), and the value moves on as
|
|
465
|
+
// resolution continues — by the time the async body pushes, it would be
|
|
466
|
+
// stale. Attributing to the owning route/layout segment gives handle
|
|
467
|
+
// pushes the same granularity handler pushes have (segmentOrder-correct
|
|
468
|
+
// for breadcrumb accumulation).
|
|
469
|
+
const owningSegmentId = (ctx as InternalHandlerContext<any, TEnv>)
|
|
470
|
+
._currentSegmentId;
|
|
471
|
+
|
|
472
|
+
let renderedResolved = false;
|
|
473
|
+
let renderedPromise: Promise<void> | null = null;
|
|
474
|
+
|
|
475
|
+
// Loader functions are always fresh (never cached), so they get an
|
|
476
|
+
// unguarded get that bypasses non-cacheable read guards. This applies
|
|
477
|
+
// to ALL loaders — DSL and handler-called — because the loader
|
|
478
|
+
// function itself always re-executes. Also handles nested deps
|
|
479
|
+
// (loaderA → use(loaderB)) since all share this unguarded get.
|
|
200
480
|
const loaderCtx: LoaderContext<Record<string, string | undefined>, TEnv> = {
|
|
201
481
|
params: ctx.params,
|
|
482
|
+
routeParams: (ctx.params ?? {}) as Record<string, string>,
|
|
202
483
|
request: ctx.request,
|
|
203
484
|
searchParams: ctx.searchParams,
|
|
485
|
+
search: (ctx as any).search,
|
|
204
486
|
pathname: ctx.pathname,
|
|
205
487
|
url: ctx.url,
|
|
488
|
+
originalUrl: ctx.originalUrl,
|
|
206
489
|
env: ctx.env,
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
490
|
+
waitUntil: ctx.waitUntil.bind(ctx),
|
|
491
|
+
executionContext: ctx.executionContext,
|
|
492
|
+
get: ((keyOrVar: any) => {
|
|
493
|
+
// Handle READ (moved from ctx.use(handle)): collected data, available
|
|
494
|
+
// after `await ctx.rendered()` — the rendered-barrier contract.
|
|
495
|
+
if (isHandle(keyOrVar)) {
|
|
496
|
+
if (!renderedResolved) {
|
|
497
|
+
throw new Error(
|
|
498
|
+
`ctx.get(handle) in a loader requires "await ctx.rendered()" first. ` +
|
|
499
|
+
`Handle "${keyOrVar.$$id}" cannot be read until the render tree has settled.`,
|
|
500
|
+
);
|
|
501
|
+
}
|
|
502
|
+
const reqCtx = reqCtxRef ?? _getRequestContext();
|
|
503
|
+
if (!reqCtx) {
|
|
504
|
+
throw new Error(
|
|
505
|
+
`ctx.get(handle) failed: request context not available.`,
|
|
506
|
+
);
|
|
507
|
+
}
|
|
508
|
+
const segmentOrder = reqCtx._renderBarrierSegmentOrder ?? [];
|
|
509
|
+
// The complete snapshot is cached at barrier resolution for
|
|
510
|
+
// non-streaming trees, and by rendered() after handleStore.settled for
|
|
511
|
+
// streaming trees (where the eager snapshot would have been incomplete
|
|
512
|
+
// because loading() handlers were still in flight). Either way it is
|
|
513
|
+
// present by the time a loader reads a handle; the fresh build is only
|
|
514
|
+
// a defensive fallback.
|
|
515
|
+
const snapshot =
|
|
516
|
+
reqCtx._renderBarrierHandleSnapshot ??
|
|
517
|
+
buildHandleSnapshot(reqCtx._handleStore, segmentOrder);
|
|
518
|
+
return collectHandleData(keyOrVar, snapshot, segmentOrder);
|
|
519
|
+
}
|
|
520
|
+
return contextGet(variables, keyOrVar);
|
|
521
|
+
}) as typeof ctx.get,
|
|
522
|
+
use: ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
|
|
523
|
+
if (isHandle(item)) {
|
|
524
|
+
// Handle WRITE — handler parity: `ctx.use(Meta)({...})` pushes from
|
|
525
|
+
// the loader body exactly like a handler push. Reads moved to
|
|
526
|
+
// ctx.get(handle) (rendered()-gated). Pushes attribute to the OWNING
|
|
527
|
+
// segment and are legal for the whole body: the body is tracked on
|
|
528
|
+
// the handle store's auxiliary lane, so the store stays open past
|
|
529
|
+
// the handler barrier. Delivery follows the race: pushes that beat
|
|
530
|
+
// the handler barrier ride the SSR snapshot, later ones stream via
|
|
531
|
+
// metadata.handlesLate (document) or the still-open handles
|
|
532
|
+
// generator (nav/action lanes).
|
|
533
|
+
const handleDef = item;
|
|
534
|
+
if (silentHandles) {
|
|
535
|
+
return withDefer((_dataOrFn: unknown) => {});
|
|
536
|
+
}
|
|
537
|
+
const store =
|
|
538
|
+
reqCtxRef?._handleStore ?? _getRequestContext()?._handleStore;
|
|
539
|
+
const segmentId = owningSegmentId;
|
|
540
|
+
return withDefer(
|
|
541
|
+
(
|
|
542
|
+
dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>),
|
|
543
|
+
) => {
|
|
544
|
+
pushHandleValue(store, segmentId, handleDef.$$id, dataOrFn);
|
|
545
|
+
},
|
|
546
|
+
);
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
// Loader case
|
|
550
|
+
return useLoader(item as LoaderDefinition<any, any>, currentLoaderId);
|
|
551
|
+
}) as LoaderContext["use"],
|
|
216
552
|
method: "GET",
|
|
217
553
|
body: undefined,
|
|
554
|
+
reverse: ctx.reverse as LoaderContext["reverse"],
|
|
555
|
+
rendered: (): Promise<void> => {
|
|
556
|
+
// Guard: only DSL loaders may use rendered()
|
|
557
|
+
if (!isDslLoader) {
|
|
558
|
+
throw new Error(
|
|
559
|
+
`ctx.rendered() is only available in DSL loaders (registered via loader() in urls()). ` +
|
|
560
|
+
`Handler-invoked loaders (ctx.use(Loader) inside a handler) cannot use rendered().`,
|
|
561
|
+
);
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
const reqCtx = reqCtxRef ?? _getRequestContext();
|
|
565
|
+
|
|
566
|
+
if (renderedPromise) return renderedPromise;
|
|
567
|
+
|
|
568
|
+
if (!reqCtx) {
|
|
569
|
+
throw new Error(
|
|
570
|
+
`ctx.rendered() failed: request context not available.`,
|
|
571
|
+
);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
// awaitBeforeFlush cycle: segment resolution awaits this loader
|
|
575
|
+
// (loader(Def, { ssr: false })), the barrier awaits segment
|
|
576
|
+
// resolution, and rendered() awaits the barrier — waiting here can
|
|
577
|
+
// never complete. Fail fast with the cause instead of hanging the
|
|
578
|
+
// document render. Only document renders populate the set (the flag is
|
|
579
|
+
// stamped per-isSSR), so the same loader may still use rendered() on
|
|
580
|
+
// navigation renders.
|
|
581
|
+
if (reqCtx._awaitBeforeFlushLoaderIds?.has(currentLoaderId)) {
|
|
582
|
+
throw new Error(
|
|
583
|
+
`Deadlock: loader "${currentLoaderId}" is registered with ` +
|
|
584
|
+
`ssr: false, so the document render awaits it before ` +
|
|
585
|
+
`the render barrier resolves — ctx.rendered() (and the ` +
|
|
586
|
+
`ctx.get(handle) read it gates) can never settle here. Drop ` +
|
|
587
|
+
`ssr: false on this loader or move the handle read to ` +
|
|
588
|
+
`a component.`,
|
|
589
|
+
);
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
// Bidirectional deadlock check: if a handler already started
|
|
593
|
+
// awaiting this loader, calling rendered() would deadlock. This is the
|
|
594
|
+
// real cycle guard (it holds for both streaming and non-streaming): the
|
|
595
|
+
// handler blocks segment resolution, which blocks the barrier, which
|
|
596
|
+
// blocks this loader.
|
|
597
|
+
if (reqCtx._handlerLoaderDeps?.has(currentLoaderId)) {
|
|
598
|
+
throw new Error(
|
|
599
|
+
`Deadlock: loader "${currentLoaderId}" called ctx.rendered() but a handler ` +
|
|
600
|
+
`is already awaiting this loader via ctx.use(). The handler blocks ` +
|
|
601
|
+
`segment resolution, which blocks the barrier, which blocks this loader. ` +
|
|
602
|
+
`Move the data dependency to a loader-to-loader pattern instead.`,
|
|
603
|
+
);
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
// Register this loader as waiting for the barrier so that
|
|
607
|
+
// setupLoaderAccess can detect deadlocks when a handler
|
|
608
|
+
// tries to await the same loader via ctx.use().
|
|
609
|
+
if (!reqCtx._renderBarrierWaiters) {
|
|
610
|
+
reqCtx._renderBarrierWaiters = new Set();
|
|
611
|
+
}
|
|
612
|
+
reqCtx._renderBarrierWaiters.add(currentLoaderId);
|
|
613
|
+
|
|
614
|
+
// Streaming trees (loading()): the barrier resolves once the segment
|
|
615
|
+
// tree is resolved, but loading() handlers stream behind Suspense and
|
|
616
|
+
// their handle pushes are still in flight then. Their async execution
|
|
617
|
+
// IS tracked in the handle store (trackHandler -> store.track), so after
|
|
618
|
+
// the barrier we seal (no further handlers register once the tree is
|
|
619
|
+
// resolved) and wait for settled — every tracked handler, streaming
|
|
620
|
+
// included, has finished pushing. The loader's own segment streams in
|
|
621
|
+
// after, so this does not block the shell; the deadlock guard above
|
|
622
|
+
// keeps a handler from depending on this loader.
|
|
623
|
+
const streaming = reqCtx._treeHasStreaming === true;
|
|
624
|
+
renderedPromise = reqCtx._renderBarrier.then(async () => {
|
|
625
|
+
if (streaming) {
|
|
626
|
+
reqCtx._handleStore.seal();
|
|
627
|
+
await reqCtx._handleStore.settled;
|
|
628
|
+
// The eager snapshot was intentionally left unbuilt for streaming
|
|
629
|
+
// (it would have been incomplete). Build the complete one once, now
|
|
630
|
+
// that the store has settled, so every ctx.use(handle) reads the
|
|
631
|
+
// cached snapshot instead of rebuilding it per call.
|
|
632
|
+
reqCtx._renderBarrierHandleSnapshot ??= buildHandleSnapshot(
|
|
633
|
+
reqCtx._handleStore,
|
|
634
|
+
reqCtx._renderBarrierSegmentOrder ?? [],
|
|
635
|
+
);
|
|
636
|
+
}
|
|
637
|
+
renderedResolved = true;
|
|
638
|
+
});
|
|
639
|
+
return renderedPromise;
|
|
640
|
+
},
|
|
218
641
|
};
|
|
219
642
|
|
|
220
|
-
//
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
643
|
+
// Meter this loader once via observePhase (loader:<id> perf metric +
|
|
644
|
+
// rango.loader span); loaderFn runs inside the span callback so its KV/D1/
|
|
645
|
+
// fetch spans nest under it. This is one of the observePhase loader funnels —
|
|
646
|
+
// see instrument.ts for the single-metering contract.
|
|
647
|
+
//
|
|
648
|
+
// Run the loader body inside loader scope so request-scoped reads
|
|
649
|
+
// (cookies()/headers() and non-cacheable ctx.get) are exempt from the
|
|
650
|
+
// cache-purity guards: loaders always run fresh, so their reads never leak
|
|
651
|
+
// into a cached segment. DSL loaders are already wrapped by fresh.ts; this
|
|
652
|
+
// also covers handler-invoked loaders (ctx.use(Loader) from a handler),
|
|
653
|
+
// which otherwise execute in the caller's cache scope and would wrongly
|
|
654
|
+
// throw. rendered() gating uses the captured isDslLoader (above), so this
|
|
655
|
+
// does not grant rendered() to handler-invoked loaders. Uses a body-only
|
|
656
|
+
// scope, so isInsideLoaderScope() / barrier / deadlock gating is unchanged.
|
|
657
|
+
//
|
|
658
|
+
// `handlerInvoked` (!isDslLoader) rides on the scope for the CONSUMPTION-
|
|
659
|
+
// LANE RULE: a handler-consumed loader's value is a BAKED copy in every
|
|
660
|
+
// shared artifact (cache(), "use cache", the PPR shell), so its identity
|
|
661
|
+
// reads are exempt from the shell-capture guard — same allowance the
|
|
662
|
+
// cache-purity guards give it. DSL segment loaders keep their lane
|
|
663
|
+
// machinery (live = masked at capture, bake = guarded). A DSL loader's
|
|
664
|
+
// nested deps inherit isDslLoader=false only when the CHAIN started in a
|
|
665
|
+
// handler; a chain started by the segment funnel stays DSL (the loader
|
|
666
|
+
// scope ALS survives the body's awaits).
|
|
667
|
+
// Shell fast path eligibility: a HANDLER-invoked loader executing during a
|
|
668
|
+
// capture is handler-layer dynamism — on a handler-free (replayed) HIT it
|
|
669
|
+
// would never re-run, freezing its consumption-lane value (#672's "fresh
|
|
670
|
+
// per serve" slot shape). Mark the capture; the entry declines the fast
|
|
671
|
+
// path and keeps the full tail. DSL loaders re-run on every HIT and never
|
|
672
|
+
// set this.
|
|
673
|
+
if (!isDslLoader) {
|
|
674
|
+
const captureCtx = _getRequestContext();
|
|
675
|
+
if (
|
|
676
|
+
captureCtx?._shellCaptureRun &&
|
|
677
|
+
captureCtx._shellCaptureHandleLiveness
|
|
678
|
+
) {
|
|
679
|
+
captureCtx._shellCaptureHandleLiveness.handlerInvokedLoader = true;
|
|
680
|
+
}
|
|
681
|
+
}
|
|
227
682
|
|
|
228
|
-
|
|
229
|
-
|
|
683
|
+
const promise = observePhase(PHASES.loader(loader.$$id), () =>
|
|
684
|
+
Promise.resolve(
|
|
685
|
+
runInsideLoaderBodyScope(
|
|
686
|
+
() => loaderFn(loaderCtx as LoaderContext<any, TEnv>),
|
|
687
|
+
loader.$$id,
|
|
688
|
+
!isDslLoader,
|
|
689
|
+
),
|
|
690
|
+
).finally(() => {
|
|
691
|
+
pendingLoaders.delete(loader.$$id);
|
|
692
|
+
}),
|
|
693
|
+
);
|
|
694
|
+
|
|
695
|
+
// Auxiliary-lane tracking: keeps the handle store open for this body's
|
|
696
|
+
// ctx.handle() pushes without joining `settled` (the handler barrier that
|
|
697
|
+
// gates SSR/hydration and rendered()-readers — joining it would block the
|
|
698
|
+
// document on the slowest loader and self-deadlock rendered() callers).
|
|
699
|
+
// DSL loaders only: handler-invoked loaders are awaited by their handler,
|
|
700
|
+
// so they complete inside the handler lane already. A nested DSL kickoff
|
|
701
|
+
// mid-body registers while its parent is still tracked, so the lane can
|
|
702
|
+
// never re-open after draining.
|
|
703
|
+
if (isDslLoader && !silentHandles) {
|
|
704
|
+
(reqCtxRef ?? _getRequestContext())?._handleStore?.trackAuxiliary(
|
|
705
|
+
promise,
|
|
706
|
+
);
|
|
707
|
+
}
|
|
230
708
|
|
|
709
|
+
loaderPromises.set(loader.$$id, promise);
|
|
231
710
|
return promise;
|
|
232
|
-
}
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
return useLoader;
|
|
233
714
|
}
|
|
234
715
|
|
|
235
716
|
/**
|
|
236
|
-
* Set up
|
|
237
|
-
* Handles are silently ignored (no push to HandleStore).
|
|
238
|
-
* Loaders work normally but with fresh memoization.
|
|
717
|
+
* Set up the use() method on handler context to access loaders and handles.
|
|
239
718
|
*
|
|
240
|
-
*
|
|
241
|
-
*
|
|
719
|
+
* For loaders: Lazily runs loaders, memoizes results per request.
|
|
720
|
+
* For handles: Returns a push function bound to the current segment.
|
|
721
|
+
*
|
|
722
|
+
* Includes cycle detection: tracks dependency edges between loaders and
|
|
723
|
+
* throws on circular dependencies to prevent deadlocks.
|
|
242
724
|
*/
|
|
243
|
-
export function
|
|
725
|
+
export function setupLoaderAccess<TEnv>(
|
|
244
726
|
ctx: HandlerContext<any, TEnv>,
|
|
245
|
-
loaderPromises: Map<string, Promise<any
|
|
727
|
+
loaderPromises: Map<string, Promise<any>>,
|
|
246
728
|
): void {
|
|
729
|
+
// Eagerly capture the request context and HandleStore at setup time
|
|
730
|
+
// (before pipeline async ops). In workerd/Cloudflare, dynamic imports and
|
|
731
|
+
// fetch() in the match pipeline can disrupt AsyncLocalStorage, causing
|
|
732
|
+
// getRequestContext() to return undefined when handlers later call
|
|
733
|
+
// ctx.use(handle). Capturing early ensures references survive ALS disruption.
|
|
734
|
+
const reqCtxRef = _getRequestContext();
|
|
735
|
+
const handleStoreRef = reqCtxRef?._handleStore;
|
|
736
|
+
|
|
737
|
+
const useLoader = createLoaderExecutor(ctx, loaderPromises);
|
|
738
|
+
|
|
247
739
|
ctx.use = ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
|
|
248
|
-
// Handle case: return a no-op push function
|
|
249
740
|
if (isHandle(item)) {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
}
|
|
741
|
+
const handle = item;
|
|
742
|
+
const store = handleStoreRef;
|
|
743
|
+
const segmentId = (ctx as InternalHandlerContext<any, TEnv>)
|
|
744
|
+
._currentSegmentId;
|
|
255
745
|
|
|
256
|
-
|
|
257
|
-
|
|
746
|
+
if (!segmentId) {
|
|
747
|
+
throw new Error(
|
|
748
|
+
`Handle "${handle.$$id}" used outside of handler context. ` +
|
|
749
|
+
`Handles must be used within route/layout handlers.`,
|
|
750
|
+
);
|
|
751
|
+
}
|
|
258
752
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
753
|
+
return withDefer(
|
|
754
|
+
(dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>)) => {
|
|
755
|
+
pushHandleValue(store, segmentId, handle.$$id, dataOrFn);
|
|
756
|
+
},
|
|
757
|
+
);
|
|
262
758
|
}
|
|
263
759
|
|
|
264
|
-
//
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
760
|
+
// Deadlock guard and handler-to-loader dependency tracking.
|
|
761
|
+
// Skip when inside a DSL loader scope (resolveLoaderData also calls
|
|
762
|
+
// ctx.use() but that's DSL-to-DSL, not handler-to-loader) or when
|
|
763
|
+
// inside a handle push callback (push callbacks don't block segment
|
|
764
|
+
// resolution so they can't cause rendered() deadlocks). The push-callback
|
|
765
|
+
// check is an ALS scope so it also exempts an ASYNC callback's continuation
|
|
766
|
+
// after its first await — relevant on streaming trees, where the guard
|
|
767
|
+
// state now stays live until handleStore.settled.
|
|
768
|
+
const loader = item as LoaderDefinition<any, any>;
|
|
769
|
+
if (!isInsideLoaderScope() && !isInsidePushCallbackScope()) {
|
|
770
|
+
const reqCtx = reqCtxRef ?? _getRequestContext();
|
|
771
|
+
if (reqCtx) {
|
|
772
|
+
// Direction 1: handler awaits loader that already called rendered()
|
|
773
|
+
if (
|
|
774
|
+
loaderPromises.has(loader.$$id) &&
|
|
775
|
+
reqCtx._renderBarrierWaiters?.has(loader.$$id)
|
|
776
|
+
) {
|
|
777
|
+
throw new Error(
|
|
778
|
+
`Deadlock: handler is awaiting loader "${loader.$$id}" which called ctx.rendered(). ` +
|
|
779
|
+
`The loader is waiting for segment resolution, but the handler blocks resolution. ` +
|
|
780
|
+
`Move the data dependency to a loader-to-loader pattern instead.`,
|
|
781
|
+
);
|
|
782
|
+
}
|
|
783
|
+
// Direction 2: track dep so rendered() can detect the deadlock if the
|
|
784
|
+
// loader calls it later. Skip once the guard window is CLOSED — for a
|
|
785
|
+
// non-streaming tree that is when the barrier resolves (rendered()
|
|
786
|
+
// resolves immediately), and for a streaming tree it is when
|
|
787
|
+
// handleStore.settled completes (rendered() keeps waiting until then, so
|
|
788
|
+
// a loading() handler resuming after the barrier can still form a
|
|
789
|
+
// cycle). Using the explicit guard-closed flag rather than
|
|
790
|
+
// _renderBarrierSegmentOrder keeps tracking live across the streaming
|
|
791
|
+
// settle wait. (Handle push callbacks are already excluded above via
|
|
792
|
+
// isInsidePushCallbackScope(), so they cannot produce false positives
|
|
793
|
+
// here.)
|
|
794
|
+
if (!reqCtx._renderBarrierGuardClosed) {
|
|
795
|
+
if (!reqCtx._handlerLoaderDeps) reqCtx._handlerLoaderDeps = new Set();
|
|
796
|
+
reqCtx._handlerLoaderDeps.add(loader.$$id);
|
|
797
|
+
}
|
|
270
798
|
}
|
|
271
799
|
}
|
|
272
800
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
801
|
+
return useLoader(loader, null);
|
|
802
|
+
}) as typeof ctx.use;
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
/**
|
|
806
|
+
* Set up ctx.use() for pre-rendering (build-time).
|
|
807
|
+
* Handles push to HandleStore; loaders throw with a clear error.
|
|
808
|
+
*/
|
|
809
|
+
export function setupBuildUse<TEnv>(ctx: HandlerContext<any, TEnv>): void {
|
|
810
|
+
// Eagerly capture the HandleStore (same ALS protection as setupLoaderAccess).
|
|
811
|
+
const handleStoreRef = _getRequestContext()?._handleStore;
|
|
812
|
+
|
|
813
|
+
ctx.use = ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
|
|
814
|
+
// Handle case: return a push function bound to the current segment
|
|
815
|
+
if (isHandle(item)) {
|
|
816
|
+
const handle = item;
|
|
817
|
+
const store = handleStoreRef;
|
|
818
|
+
const segmentId = (ctx as InternalHandlerContext<any, TEnv>)
|
|
819
|
+
._currentSegmentId;
|
|
820
|
+
|
|
821
|
+
if (!segmentId) {
|
|
822
|
+
throw new Error(
|
|
823
|
+
`Handle "${handle.$$id}" used outside of handler context. ` +
|
|
824
|
+
`Handles must be used within route/layout handlers.`,
|
|
825
|
+
);
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
// Wrap with withDefer so ctx.use(Handle).defer(...) works on the build /
|
|
829
|
+
// prerender path, matching production setupLoaderAccess. Without it a
|
|
830
|
+
// prerender handler calling .defer() throws "defer is not a function".
|
|
831
|
+
return withDefer(
|
|
832
|
+
(dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>)) => {
|
|
833
|
+
if (!store) return;
|
|
834
|
+
|
|
835
|
+
const valueOrPromise =
|
|
836
|
+
typeof dataOrFn === "function"
|
|
837
|
+
? (dataOrFn as () => Promise<unknown>)()
|
|
838
|
+
: dataOrFn;
|
|
839
|
+
|
|
840
|
+
store.push(handle.$$id, segmentId, valueOrPromise);
|
|
841
|
+
},
|
|
276
842
|
);
|
|
277
843
|
}
|
|
278
844
|
|
|
279
|
-
//
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
var: ctx.var,
|
|
288
|
-
get: ctx.get,
|
|
289
|
-
use: <TDep, TDepParams = any>(
|
|
290
|
-
dep: LoaderDefinition<TDep, TDepParams>
|
|
291
|
-
): Promise<TDep> => {
|
|
292
|
-
return ctx.use(dep);
|
|
293
|
-
},
|
|
294
|
-
method: "GET",
|
|
295
|
-
body: undefined,
|
|
296
|
-
};
|
|
845
|
+
// Loader case: not available during pre-rendering
|
|
846
|
+
throw new Error(
|
|
847
|
+
"Loaders are not available during pre-rendering. " +
|
|
848
|
+
"Use them on parent layouts with cache() for request-time data, " +
|
|
849
|
+
"or use a passthrough prerender handler.",
|
|
850
|
+
);
|
|
851
|
+
}) as typeof ctx.use;
|
|
852
|
+
}
|
|
297
853
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
854
|
+
/**
|
|
855
|
+
* Set up ctx.use() for proactive caching (silent mode).
|
|
856
|
+
* Handles are silently ignored (no push to HandleStore).
|
|
857
|
+
* Loaders work normally but with fresh memoization and cycle detection.
|
|
858
|
+
*
|
|
859
|
+
* This prevents duplicate handle data (breadcrumbs, meta) from being
|
|
860
|
+
* pushed to the response stream during background proactive caching.
|
|
861
|
+
*/
|
|
862
|
+
export function setupLoaderAccessSilent<TEnv>(
|
|
863
|
+
ctx: HandlerContext<any, TEnv>,
|
|
864
|
+
loaderPromises: Map<string, Promise<any>>,
|
|
865
|
+
): void {
|
|
866
|
+
const useLoader = createLoaderExecutor(ctx, loaderPromises, {
|
|
867
|
+
silentHandles: true,
|
|
868
|
+
});
|
|
305
869
|
|
|
306
|
-
|
|
307
|
-
|
|
870
|
+
ctx.use = ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
|
|
871
|
+
if (isHandle(item)) {
|
|
872
|
+
// Silent mode - return a no-op so handle data is not pushed during caching.
|
|
873
|
+
// Wrap with withDefer so ctx.use(Handle).defer(...) still resolves to a
|
|
874
|
+
// callable resolver (also a no-op here), matching production's push shape
|
|
875
|
+
// instead of throwing "defer is not a function".
|
|
876
|
+
return withDefer((_dataOrFn: unknown) => {});
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
return useLoader(item as LoaderDefinition<any, any>, null);
|
|
308
880
|
}) as typeof ctx.use;
|
|
309
881
|
}
|
|
310
882
|
|
|
@@ -320,7 +892,7 @@ export function setupLoaderAccessSilent<TEnv>(
|
|
|
320
892
|
export async function revalidate<T>(
|
|
321
893
|
shouldRevalidate: () => Promise<boolean>,
|
|
322
894
|
onRevalidate: () => Promise<T>,
|
|
323
|
-
onSkip: () => T
|
|
895
|
+
onSkip: () => T,
|
|
324
896
|
): Promise<T> {
|
|
325
897
|
const needsRevalidation = await shouldRevalidate();
|
|
326
898
|
return needsRevalidation ? await onRevalidate() : onSkip();
|