@rangojs/router 0.0.0-experimental.13 → 0.0.0-experimental.135c6902
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 +9 -0
- package/README.md +884 -4
- package/dist/__internal.d.ts +83 -0
- package/dist/__internal.d.ts.map +1 -0
- package/dist/__internal.js +19 -0
- package/dist/__internal.js.map +1 -0
- package/dist/__mocks__/version.d.ts +7 -0
- package/dist/__mocks__/version.d.ts.map +1 -0
- package/dist/__mocks__/version.js +7 -0
- package/dist/__mocks__/version.js.map +1 -0
- package/dist/__tests__/client-href.test.d.ts +2 -0
- package/dist/__tests__/client-href.test.d.ts.map +1 -0
- package/dist/__tests__/client-href.test.js +74 -0
- package/dist/__tests__/client-href.test.js.map +1 -0
- package/dist/__tests__/component-utils.test.d.ts +2 -0
- package/dist/__tests__/component-utils.test.d.ts.map +1 -0
- package/dist/__tests__/component-utils.test.js +51 -0
- package/dist/__tests__/component-utils.test.js.map +1 -0
- package/dist/__tests__/event-controller.test.d.ts +2 -0
- package/dist/__tests__/event-controller.test.d.ts.map +1 -0
- package/dist/__tests__/event-controller.test.js +538 -0
- package/dist/__tests__/event-controller.test.js.map +1 -0
- package/dist/__tests__/helpers/route-tree.d.ts +118 -0
- package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
- package/dist/__tests__/helpers/route-tree.js +374 -0
- package/dist/__tests__/helpers/route-tree.js.map +1 -0
- package/dist/__tests__/match-result.test.d.ts +2 -0
- package/dist/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/__tests__/match-result.test.js +154 -0
- package/dist/__tests__/match-result.test.js.map +1 -0
- package/dist/__tests__/navigation-store.test.d.ts +2 -0
- package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
- package/dist/__tests__/navigation-store.test.js +440 -0
- package/dist/__tests__/navigation-store.test.js.map +1 -0
- package/dist/__tests__/partial-update.test.d.ts +2 -0
- package/dist/__tests__/partial-update.test.d.ts.map +1 -0
- package/dist/__tests__/partial-update.test.js +1009 -0
- package/dist/__tests__/partial-update.test.js.map +1 -0
- package/dist/__tests__/reverse-types.test.d.ts +8 -0
- package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
- package/dist/__tests__/reverse-types.test.js +656 -0
- package/dist/__tests__/reverse-types.test.js.map +1 -0
- package/dist/__tests__/route-definition.test.d.ts +2 -0
- package/dist/__tests__/route-definition.test.d.ts.map +1 -0
- package/dist/__tests__/route-definition.test.js +55 -0
- package/dist/__tests__/route-definition.test.js.map +1 -0
- package/dist/__tests__/router-helpers.test.d.ts +2 -0
- package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
- package/dist/__tests__/router-helpers.test.js +377 -0
- package/dist/__tests__/router-helpers.test.js.map +1 -0
- package/dist/__tests__/router-integration-2.test.d.ts +2 -0
- package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
- package/dist/__tests__/router-integration-2.test.js +426 -0
- package/dist/__tests__/router-integration-2.test.js.map +1 -0
- package/dist/__tests__/router-integration.test.d.ts +2 -0
- package/dist/__tests__/router-integration.test.d.ts.map +1 -0
- package/dist/__tests__/router-integration.test.js +1051 -0
- package/dist/__tests__/router-integration.test.js.map +1 -0
- package/dist/__tests__/search-params.test.d.ts +5 -0
- package/dist/__tests__/search-params.test.d.ts.map +1 -0
- package/dist/__tests__/search-params.test.js +306 -0
- package/dist/__tests__/search-params.test.js.map +1 -0
- package/dist/__tests__/segment-system.test.d.ts +2 -0
- package/dist/__tests__/segment-system.test.d.ts.map +1 -0
- package/dist/__tests__/segment-system.test.js +627 -0
- package/dist/__tests__/segment-system.test.js.map +1 -0
- package/dist/__tests__/static-handler-types.test.d.ts +8 -0
- package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
- package/dist/__tests__/static-handler-types.test.js +63 -0
- package/dist/__tests__/static-handler-types.test.js.map +1 -0
- package/dist/__tests__/urls.test.d.ts +2 -0
- package/dist/__tests__/urls.test.d.ts.map +1 -0
- package/dist/__tests__/urls.test.js +421 -0
- package/dist/__tests__/urls.test.js.map +1 -0
- package/dist/__tests__/use-mount.test.d.ts +2 -0
- package/dist/__tests__/use-mount.test.d.ts.map +1 -0
- package/dist/__tests__/use-mount.test.js +35 -0
- package/dist/__tests__/use-mount.test.js.map +1 -0
- package/dist/bin/rango.d.ts +2 -0
- package/dist/bin/rango.d.ts.map +1 -0
- package/dist/bin/rango.js +1531 -212
- package/dist/bin/rango.js.map +1 -0
- package/dist/browser/event-controller.d.ts +191 -0
- package/dist/browser/event-controller.d.ts.map +1 -0
- package/dist/browser/event-controller.js +559 -0
- package/dist/browser/event-controller.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/link-interceptor.d.ts +38 -0
- package/dist/browser/link-interceptor.d.ts.map +1 -0
- package/dist/browser/link-interceptor.js +99 -0
- package/dist/browser/link-interceptor.js.map +1 -0
- package/dist/browser/logging.d.ts +10 -0
- package/dist/browser/logging.d.ts.map +1 -0
- package/dist/browser/logging.js +29 -0
- package/dist/browser/logging.js.map +1 -0
- package/dist/browser/lru-cache.d.ts +17 -0
- package/dist/browser/lru-cache.d.ts.map +1 -0
- package/dist/browser/lru-cache.js +50 -0
- package/dist/browser/lru-cache.js.map +1 -0
- package/dist/browser/merge-segment-loaders.d.ts +39 -0
- package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
- package/dist/browser/merge-segment-loaders.js +102 -0
- package/dist/browser/merge-segment-loaders.js.map +1 -0
- package/dist/browser/navigation-bridge.d.ts +102 -0
- package/dist/browser/navigation-bridge.d.ts.map +1 -0
- package/dist/browser/navigation-bridge.js +708 -0
- package/dist/browser/navigation-bridge.js.map +1 -0
- package/dist/browser/navigation-client.d.ts +25 -0
- package/dist/browser/navigation-client.d.ts.map +1 -0
- package/dist/browser/navigation-client.js +157 -0
- package/dist/browser/navigation-client.js.map +1 -0
- package/dist/browser/navigation-store.d.ts +101 -0
- package/dist/browser/navigation-store.d.ts.map +1 -0
- package/dist/browser/navigation-store.js +625 -0
- package/dist/browser/navigation-store.js.map +1 -0
- package/dist/browser/partial-update.d.ts +75 -0
- package/dist/browser/partial-update.d.ts.map +1 -0
- package/dist/browser/partial-update.js +426 -0
- package/dist/browser/partial-update.js.map +1 -0
- package/dist/browser/react/Link.d.ts +86 -0
- package/dist/browser/react/Link.d.ts.map +1 -0
- package/dist/browser/react/Link.js +128 -0
- package/dist/browser/react/Link.js.map +1 -0
- package/dist/browser/react/NavigationProvider.d.ts +63 -0
- package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
- package/dist/browser/react/NavigationProvider.js +216 -0
- package/dist/browser/react/NavigationProvider.js.map +1 -0
- package/dist/browser/react/ScrollRestoration.d.ts +75 -0
- package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
- package/dist/browser/react/ScrollRestoration.js +57 -0
- package/dist/browser/react/ScrollRestoration.js.map +1 -0
- package/dist/browser/react/context.d.ts +46 -0
- package/dist/browser/react/context.d.ts.map +1 -0
- package/dist/browser/react/context.js +10 -0
- package/dist/browser/react/context.js.map +1 -0
- package/dist/browser/react/index.d.ts +11 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/index.js +22 -0
- package/dist/browser/react/index.js.map +1 -0
- package/dist/browser/react/location-state-shared.d.ts +63 -0
- package/dist/browser/react/location-state-shared.d.ts.map +1 -0
- package/dist/browser/react/location-state-shared.js +81 -0
- package/dist/browser/react/location-state-shared.js.map +1 -0
- package/dist/browser/react/location-state.d.ts +23 -0
- package/dist/browser/react/location-state.d.ts.map +1 -0
- package/dist/browser/react/location-state.js +29 -0
- package/dist/browser/react/location-state.js.map +1 -0
- package/dist/browser/react/mount-context.d.ts +24 -0
- package/dist/browser/react/mount-context.d.ts.map +1 -0
- package/dist/browser/react/mount-context.js +24 -0
- package/dist/browser/react/mount-context.js.map +1 -0
- package/dist/browser/react/use-action.d.ts +64 -0
- package/dist/browser/react/use-action.d.ts.map +1 -0
- package/dist/browser/react/use-action.js +134 -0
- package/dist/browser/react/use-action.js.map +1 -0
- package/dist/browser/react/use-client-cache.d.ts +41 -0
- package/dist/browser/react/use-client-cache.d.ts.map +1 -0
- package/dist/browser/react/use-client-cache.js +39 -0
- package/dist/browser/react/use-client-cache.js.map +1 -0
- package/dist/browser/react/use-handle.d.ts +31 -0
- package/dist/browser/react/use-handle.d.ts.map +1 -0
- package/dist/browser/react/use-handle.js +144 -0
- package/dist/browser/react/use-handle.js.map +1 -0
- package/dist/browser/react/use-href.d.ts +33 -0
- package/dist/browser/react/use-href.d.ts.map +1 -0
- package/dist/browser/react/use-href.js +39 -0
- package/dist/browser/react/use-href.js.map +1 -0
- package/dist/browser/react/use-link-status.d.ts +37 -0
- package/dist/browser/react/use-link-status.d.ts.map +1 -0
- package/dist/browser/react/use-link-status.js +99 -0
- package/dist/browser/react/use-link-status.js.map +1 -0
- package/dist/browser/react/use-mount.d.ts +25 -0
- package/dist/browser/react/use-mount.d.ts.map +1 -0
- package/dist/browser/react/use-mount.js +30 -0
- package/dist/browser/react/use-mount.js.map +1 -0
- package/dist/browser/react/use-navigation.d.ts +27 -0
- package/dist/browser/react/use-navigation.d.ts.map +1 -0
- package/dist/browser/react/use-navigation.js +87 -0
- package/dist/browser/react/use-navigation.js.map +1 -0
- package/dist/browser/react/use-segments.d.ts +38 -0
- package/dist/browser/react/use-segments.d.ts.map +1 -0
- package/dist/browser/react/use-segments.js +130 -0
- package/dist/browser/react/use-segments.js.map +1 -0
- package/dist/browser/request-controller.d.ts +26 -0
- package/dist/browser/request-controller.d.ts.map +1 -0
- package/dist/browser/request-controller.js +147 -0
- package/dist/browser/request-controller.js.map +1 -0
- package/dist/browser/rsc-router.d.ts +129 -0
- package/dist/browser/rsc-router.d.ts.map +1 -0
- package/dist/browser/rsc-router.js +195 -0
- package/dist/browser/rsc-router.js.map +1 -0
- package/dist/browser/scroll-restoration.d.ts +93 -0
- package/dist/browser/scroll-restoration.d.ts.map +1 -0
- package/dist/browser/scroll-restoration.js +321 -0
- package/dist/browser/scroll-restoration.js.map +1 -0
- package/dist/browser/segment-structure-assert.d.ts +17 -0
- package/dist/browser/segment-structure-assert.d.ts.map +1 -0
- package/dist/browser/segment-structure-assert.js +59 -0
- package/dist/browser/segment-structure-assert.js.map +1 -0
- package/dist/browser/server-action-bridge.d.ts +26 -0
- package/dist/browser/server-action-bridge.d.ts.map +1 -0
- package/dist/browser/server-action-bridge.js +668 -0
- package/dist/browser/server-action-bridge.js.map +1 -0
- package/dist/browser/shallow.d.ts +12 -0
- package/dist/browser/shallow.d.ts.map +1 -0
- package/dist/browser/shallow.js +34 -0
- package/dist/browser/shallow.js.map +1 -0
- package/dist/browser/types.d.ts +369 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
- package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-cli.test.js +237 -0
- package/dist/build/__tests__/generate-cli.test.js.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.js +119 -0
- package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.js +620 -0
- package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.js +308 -0
- package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +81 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +276 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/build/generate-route-types.d.ts +115 -0
- package/dist/build/generate-route-types.d.ts.map +1 -0
- package/dist/build/generate-route-types.js +740 -0
- package/dist/build/generate-route-types.js.map +1 -0
- package/dist/build/index.d.ts +21 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +21 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/route-trie.d.ts +71 -0
- package/dist/build/route-trie.d.ts.map +1 -0
- package/dist/build/route-trie.js +175 -0
- package/dist/build/route-trie.js.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.js +208 -0
- package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
- package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
- package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
- package/dist/cache/__tests__/document-cache.test.js +345 -0
- package/dist/cache/__tests__/document-cache.test.js.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
- package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
- package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-store.test.js +367 -0
- package/dist/cache/__tests__/memory-store.test.js.map +1 -0
- package/dist/cache/cache-scope.d.ts +102 -0
- package/dist/cache/cache-scope.d.ts.map +1 -0
- package/dist/cache/cache-scope.js +440 -0
- package/dist/cache/cache-scope.js.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
- package/dist/cache/cf/cf-cache-store.d.ts +165 -0
- package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
- package/dist/cache/cf/cf-cache-store.js +242 -0
- package/dist/cache/cf/cf-cache-store.js.map +1 -0
- package/dist/cache/cf/index.d.ts +14 -0
- package/dist/cache/cf/index.d.ts.map +1 -0
- package/dist/cache/cf/index.js +17 -0
- package/dist/cache/cf/index.js.map +1 -0
- package/dist/cache/document-cache.d.ts +64 -0
- package/dist/cache/document-cache.d.ts.map +1 -0
- package/dist/cache/document-cache.js +228 -0
- package/dist/cache/document-cache.js.map +1 -0
- package/dist/cache/index.d.ts +19 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-segment-store.d.ts +110 -0
- package/dist/cache/memory-segment-store.d.ts.map +1 -0
- package/dist/cache/memory-segment-store.js +117 -0
- package/dist/cache/memory-segment-store.js.map +1 -0
- package/dist/cache/memory-store.d.ts +41 -0
- package/dist/cache/memory-store.d.ts.map +1 -0
- package/dist/cache/memory-store.js +191 -0
- package/dist/cache/memory-store.js.map +1 -0
- package/dist/cache/types.d.ts +317 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +12 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client.d.ts +248 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +367 -0
- package/dist/client.js.map +1 -0
- package/dist/client.rsc.d.ts +26 -0
- package/dist/client.rsc.d.ts.map +1 -0
- package/dist/client.rsc.js +46 -0
- package/dist/client.rsc.js.map +1 -0
- package/dist/component-utils.d.ts +36 -0
- package/dist/component-utils.d.ts.map +1 -0
- package/dist/component-utils.js +61 -0
- package/dist/component-utils.js.map +1 -0
- package/dist/components/DefaultDocument.d.ts +13 -0
- package/dist/components/DefaultDocument.d.ts.map +1 -0
- package/dist/components/DefaultDocument.js +15 -0
- package/dist/components/DefaultDocument.js.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +157 -0
- package/dist/debug.js.map +1 -0
- package/dist/default-error-boundary.d.ts +11 -0
- package/dist/default-error-boundary.d.ts.map +1 -0
- package/dist/default-error-boundary.js +45 -0
- package/dist/default-error-boundary.js.map +1 -0
- package/dist/deps/browser.d.ts +2 -0
- package/dist/deps/browser.d.ts.map +1 -0
- package/dist/deps/browser.js +3 -0
- package/dist/deps/browser.js.map +1 -0
- package/dist/deps/html-stream-client.d.ts +2 -0
- package/dist/deps/html-stream-client.d.ts.map +1 -0
- package/dist/deps/html-stream-client.js +3 -0
- package/dist/deps/html-stream-client.js.map +1 -0
- package/dist/deps/html-stream-server.d.ts +2 -0
- package/dist/deps/html-stream-server.d.ts.map +1 -0
- package/dist/deps/html-stream-server.js +3 -0
- package/dist/deps/html-stream-server.js.map +1 -0
- package/dist/deps/rsc.d.ts +2 -0
- package/dist/deps/rsc.d.ts.map +1 -0
- package/dist/deps/rsc.js +4 -0
- package/dist/deps/rsc.js.map +1 -0
- package/dist/deps/ssr.d.ts +2 -0
- package/dist/deps/ssr.d.ts.map +1 -0
- package/dist/deps/ssr.js +3 -0
- package/dist/deps/ssr.js.map +1 -0
- package/dist/errors.d.ts +174 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +241 -0
- package/dist/errors.js.map +1 -0
- package/dist/handle.d.ts +78 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +82 -0
- package/dist/handle.js.map +1 -0
- package/dist/handles/MetaTags.d.ts +14 -0
- package/dist/handles/MetaTags.d.ts.map +1 -0
- package/dist/handles/MetaTags.js +136 -0
- package/dist/handles/MetaTags.js.map +1 -0
- package/dist/handles/index.d.ts +6 -0
- package/dist/handles/index.d.ts.map +1 -0
- package/dist/handles/index.js +6 -0
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/{src/href-context.ts → dist/href-context.d.ts} +7 -11
- package/dist/href-context.d.ts.map +1 -0
- package/dist/href-context.js +21 -0
- package/dist/href-context.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.rsc.d.ts +32 -0
- package/dist/index.rsc.d.ts.map +1 -0
- package/dist/index.rsc.js +40 -0
- package/dist/index.rsc.js.map +1 -0
- package/dist/internal-debug.d.ts +2 -0
- package/dist/internal-debug.d.ts.map +1 -0
- package/dist/internal-debug.js +5 -0
- package/dist/internal-debug.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/loader.rsc.d.ts +19 -0
- package/dist/loader.rsc.d.ts.map +1 -0
- package/dist/loader.rsc.js +99 -0
- package/dist/loader.rsc.js.map +1 -0
- package/dist/network-error-thrower.d.ts +17 -0
- package/dist/network-error-thrower.d.ts.map +1 -0
- package/dist/network-error-thrower.js +14 -0
- package/dist/network-error-thrower.js.map +1 -0
- package/dist/outlet-context.d.ts +13 -0
- package/dist/outlet-context.d.ts.map +1 -0
- package/dist/outlet-context.js +3 -0
- package/dist/outlet-context.js.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.js +148 -0
- package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
- package/dist/prerender/param-hash.d.ts +16 -0
- package/dist/prerender/param-hash.d.ts.map +1 -0
- package/dist/prerender/param-hash.js +36 -0
- package/dist/prerender/param-hash.js.map +1 -0
- package/dist/prerender/store.d.ts +38 -0
- package/dist/prerender/store.d.ts.map +1 -0
- package/dist/prerender/store.js +61 -0
- package/dist/prerender/store.js.map +1 -0
- package/dist/prerender.d.ts +66 -0
- package/dist/prerender.d.ts.map +1 -0
- package/dist/prerender.js +57 -0
- package/dist/prerender.js.map +1 -0
- package/dist/reverse.d.ts +196 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +78 -0
- package/dist/reverse.js.map +1 -0
- package/dist/root-error-boundary.d.ts +33 -0
- package/dist/root-error-boundary.d.ts.map +1 -0
- package/dist/root-error-boundary.js +165 -0
- package/dist/root-error-boundary.js.map +1 -0
- package/dist/route-content-wrapper.d.ts +46 -0
- package/dist/route-content-wrapper.d.ts.map +1 -0
- package/dist/route-content-wrapper.js +77 -0
- package/dist/route-content-wrapper.js.map +1 -0
- package/dist/route-definition.d.ts +421 -0
- package/dist/route-definition.d.ts.map +1 -0
- package/dist/route-definition.js +868 -0
- package/dist/route-definition.js.map +1 -0
- package/dist/route-map-builder.d.ts +155 -0
- package/dist/route-map-builder.d.ts.map +1 -0
- package/dist/route-map-builder.js +237 -0
- package/dist/route-map-builder.js.map +1 -0
- package/dist/route-types.d.ts +165 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +7 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router/__tests__/handler-context.test.d.ts +2 -0
- package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/handler-context.test.js +65 -0
- package/dist/router/__tests__/handler-context.test.js.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
- package/dist/router/__tests__/match-context.test.d.ts +2 -0
- package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-context.test.js +92 -0
- package/dist/router/__tests__/match-context.test.js.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.js +417 -0
- package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
- package/dist/router/__tests__/match-result.test.d.ts +2 -0
- package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-result.test.js +457 -0
- package/dist/router/__tests__/match-result.test.js.map +1 -0
- package/dist/router/__tests__/on-error.test.d.ts +2 -0
- package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
- package/dist/router/__tests__/on-error.test.js +678 -0
- package/dist/router/__tests__/on-error.test.js.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.js +629 -0
- package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
- package/dist/router/error-handling.d.ts +77 -0
- package/dist/router/error-handling.d.ts.map +1 -0
- package/dist/router/error-handling.js +202 -0
- package/dist/router/error-handling.js.map +1 -0
- package/dist/router/handler-context.d.ts +20 -0
- package/dist/router/handler-context.d.ts.map +1 -0
- package/dist/router/handler-context.js +198 -0
- package/dist/router/handler-context.js.map +1 -0
- package/dist/router/intercept-resolution.d.ts +66 -0
- package/dist/router/intercept-resolution.d.ts.map +1 -0
- package/dist/router/intercept-resolution.js +246 -0
- package/dist/router/intercept-resolution.js.map +1 -0
- package/dist/router/loader-resolution.d.ts +64 -0
- package/dist/router/loader-resolution.d.ts.map +1 -0
- package/dist/router/loader-resolution.js +284 -0
- package/dist/router/loader-resolution.js.map +1 -0
- package/dist/router/logging.d.ts +15 -0
- package/dist/router/logging.d.ts.map +1 -0
- package/dist/router/logging.js +99 -0
- package/dist/router/logging.js.map +1 -0
- package/dist/router/manifest.d.ts +22 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +181 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/match-api.d.ts +35 -0
- package/dist/router/match-api.d.ts.map +1 -0
- package/dist/router/match-api.js +406 -0
- package/dist/router/match-api.js.map +1 -0
- package/dist/router/match-context.d.ts +206 -0
- package/dist/router/match-context.d.ts.map +1 -0
- package/dist/router/match-context.js +17 -0
- package/dist/router/match-context.js.map +1 -0
- package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
- package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
- package/dist/router/match-middleware/background-revalidation.js +75 -0
- package/dist/router/match-middleware/background-revalidation.js.map +1 -0
- package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
- package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-lookup.js +257 -0
- package/dist/router/match-middleware/cache-lookup.js.map +1 -0
- package/dist/router/match-middleware/cache-store.d.ts +113 -0
- package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-store.js +108 -0
- package/dist/router/match-middleware/cache-store.js.map +1 -0
- package/dist/router/match-middleware/index.d.ts +81 -0
- package/dist/router/match-middleware/index.d.ts.map +1 -0
- package/dist/router/match-middleware/index.js +80 -0
- package/dist/router/match-middleware/index.js.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.js +134 -0
- package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
- package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
- package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/segment-resolution.js +53 -0
- package/dist/router/match-middleware/segment-resolution.js.map +1 -0
- package/dist/router/match-pipelines.d.ts +147 -0
- package/dist/router/match-pipelines.d.ts.map +1 -0
- package/dist/router/match-pipelines.js +82 -0
- package/dist/router/match-pipelines.js.map +1 -0
- package/dist/router/match-result.d.ts +126 -0
- package/dist/router/match-result.d.ts.map +1 -0
- package/dist/router/match-result.js +93 -0
- package/dist/router/match-result.js.map +1 -0
- package/dist/router/metrics.d.ts +20 -0
- package/dist/router/metrics.d.ts.map +1 -0
- package/dist/router/metrics.js +47 -0
- package/dist/router/metrics.js.map +1 -0
- package/dist/router/middleware.d.ts +249 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +434 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/middleware.test.d.ts +2 -0
- package/dist/router/middleware.test.d.ts.map +1 -0
- package/dist/router/middleware.test.js +816 -0
- package/dist/router/middleware.test.js.map +1 -0
- package/dist/router/pattern-matching.d.ts +149 -0
- package/dist/router/pattern-matching.d.ts.map +1 -0
- package/dist/router/pattern-matching.js +349 -0
- package/dist/router/pattern-matching.js.map +1 -0
- package/dist/router/revalidation.d.ts +44 -0
- package/dist/router/revalidation.d.ts.map +1 -0
- package/dist/router/revalidation.js +147 -0
- package/dist/router/revalidation.js.map +1 -0
- package/dist/router/router-context.d.ts +135 -0
- package/dist/router/router-context.d.ts.map +1 -0
- package/dist/router/router-context.js +36 -0
- package/dist/router/router-context.js.map +1 -0
- package/dist/router/segment-resolution.d.ts +127 -0
- package/dist/router/segment-resolution.d.ts.map +1 -0
- package/dist/router/segment-resolution.js +919 -0
- package/dist/router/segment-resolution.js.map +1 -0
- package/dist/router/trie-matching.d.ts +40 -0
- package/dist/router/trie-matching.d.ts.map +1 -0
- package/dist/router/trie-matching.js +127 -0
- package/dist/router/trie-matching.js.map +1 -0
- package/dist/router/types.d.ts +136 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router.d.ts +753 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.gen.d.ts +6 -0
- package/dist/router.gen.d.ts.map +1 -0
- package/dist/router.gen.js +6 -0
- package/dist/router.gen.js.map +1 -0
- package/dist/router.js +1304 -0
- package/dist/router.js.map +1 -0
- package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
- package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/rsc/__tests__/helpers.test.js +140 -0
- package/dist/rsc/__tests__/helpers.test.js.map +1 -0
- package/dist/rsc/handler.d.ts +45 -0
- package/dist/rsc/handler.d.ts.map +1 -0
- package/dist/rsc/handler.js +1172 -0
- package/dist/rsc/handler.js.map +1 -0
- package/dist/rsc/helpers.d.ts +16 -0
- package/dist/rsc/helpers.d.ts.map +1 -0
- package/dist/rsc/helpers.js +55 -0
- package/dist/rsc/helpers.js.map +1 -0
- package/dist/rsc/index.d.ts +22 -0
- package/dist/rsc/index.d.ts.map +1 -0
- package/dist/rsc/index.js +23 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/nonce.d.ts +9 -0
- package/dist/rsc/nonce.d.ts.map +1 -0
- package/dist/rsc/nonce.js +18 -0
- package/dist/rsc/nonce.js.map +1 -0
- package/dist/rsc/types.d.ts +206 -0
- package/dist/rsc/types.d.ts.map +1 -0
- package/dist/rsc/types.js +8 -0
- package/dist/rsc/types.js.map +1 -0
- package/dist/search-params.d.ts +103 -0
- package/dist/search-params.d.ts.map +1 -0
- package/dist/search-params.js +74 -0
- package/dist/search-params.js.map +1 -0
- package/dist/segment-system.d.ts +75 -0
- package/dist/segment-system.d.ts.map +1 -0
- package/dist/segment-system.js +336 -0
- package/dist/segment-system.js.map +1 -0
- package/dist/server/context.d.ts +245 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +197 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fetchable-loader-store.d.ts +18 -0
- package/dist/server/fetchable-loader-store.d.ts.map +1 -0
- package/dist/server/fetchable-loader-store.js +18 -0
- package/dist/server/fetchable-loader-store.js.map +1 -0
- package/dist/server/handle-store.d.ts +85 -0
- package/dist/server/handle-store.d.ts.map +1 -0
- package/dist/server/handle-store.js +142 -0
- package/dist/server/handle-store.js.map +1 -0
- package/dist/server/loader-registry.d.ts +55 -0
- package/dist/server/loader-registry.d.ts.map +1 -0
- package/dist/server/loader-registry.js +132 -0
- package/dist/server/loader-registry.js.map +1 -0
- package/dist/server/request-context.d.ts +226 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +290 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/root-layout.d.ts +4 -0
- package/dist/server/root-layout.d.ts.map +1 -0
- package/dist/server/root-layout.js +5 -0
- package/dist/server/root-layout.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
- package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
- package/dist/ssr/index.d.ts +98 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +158 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/static-handler.d.ts +50 -0
- package/dist/static-handler.d.ts.map +1 -0
- package/dist/static-handler.gen.d.ts +5 -0
- package/dist/static-handler.gen.d.ts.map +1 -0
- package/dist/static-handler.gen.js +5 -0
- package/dist/static-handler.gen.js.map +1 -0
- package/dist/static-handler.js +29 -0
- package/dist/static-handler.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +20 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +240 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/ThemeScript.d.ts +48 -0
- package/dist/theme/ThemeScript.d.ts.map +1 -0
- package/dist/theme/ThemeScript.js +13 -0
- package/dist/theme/ThemeScript.js.map +1 -0
- package/dist/theme/__tests__/theme.test.d.ts +2 -0
- package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
- package/dist/theme/__tests__/theme.test.js +103 -0
- package/dist/theme/__tests__/theme.test.js.map +1 -0
- package/dist/theme/constants.d.ts +29 -0
- package/dist/theme/constants.d.ts.map +1 -0
- package/dist/theme/constants.js +48 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +31 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +36 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-context.d.ts +40 -0
- package/dist/theme/theme-context.d.ts.map +1 -0
- package/dist/theme/theme-context.js +60 -0
- package/dist/theme/theme-context.js.map +1 -0
- package/dist/theme/theme-script.d.ts +27 -0
- package/dist/theme/theme-script.d.ts.map +1 -0
- package/dist/theme/theme-script.js +147 -0
- package/dist/theme/theme-script.js.map +1 -0
- package/dist/theme/types.d.ts +163 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +11 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/theme/use-theme.d.ts +12 -0
- package/dist/theme/use-theme.d.ts.map +1 -0
- package/dist/theme/use-theme.js +40 -0
- package/dist/theme/use-theme.js.map +1 -0
- package/dist/types.d.ts +1479 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/urls.d.ts +441 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.gen.d.ts +8 -0
- package/dist/urls.gen.d.ts.map +1 -0
- package/dist/urls.gen.js +8 -0
- package/dist/urls.gen.js.map +1 -0
- package/dist/urls.js +443 -0
- package/dist/urls.js.map +1 -0
- package/dist/use-loader.d.ts +127 -0
- package/dist/use-loader.d.ts.map +1 -0
- package/dist/use-loader.js +237 -0
- package/dist/use-loader.js.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
- package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.js +39 -0
- package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
- package/dist/vite/ast-handler-extract.d.ts +49 -0
- package/dist/vite/ast-handler-extract.d.ts.map +1 -0
- package/dist/vite/ast-handler-extract.js +249 -0
- package/dist/vite/ast-handler-extract.js.map +1 -0
- package/dist/vite/expose-action-id.d.ts +19 -0
- package/dist/vite/expose-action-id.d.ts.map +1 -0
- package/dist/vite/expose-action-id.js +250 -0
- package/dist/vite/expose-action-id.js.map +1 -0
- package/dist/vite/expose-id-utils.d.ts +69 -0
- package/dist/vite/expose-id-utils.d.ts.map +1 -0
- package/dist/vite/expose-id-utils.js +289 -0
- package/dist/vite/expose-id-utils.js.map +1 -0
- package/dist/vite/expose-internal-ids.d.ts +22 -0
- package/dist/vite/expose-internal-ids.d.ts.map +1 -0
- package/dist/vite/expose-internal-ids.js +886 -0
- package/dist/vite/expose-internal-ids.js.map +1 -0
- package/dist/vite/index.d.ts +149 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +3995 -2489
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/package-resolution.d.ts +43 -0
- package/dist/vite/package-resolution.d.ts.map +1 -0
- package/dist/vite/package-resolution.js +112 -0
- package/dist/vite/package-resolution.js.map +1 -0
- package/dist/vite/virtual-entries.d.ts +25 -0
- package/dist/vite/virtual-entries.d.ts.map +1 -0
- package/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +57 -52
- package/skills/breadcrumbs/SKILL.md +250 -0
- package/skills/cache-guide/SKILL.md +262 -0
- package/skills/caching/SKILL.md +85 -23
- package/skills/composability/SKILL.md +172 -0
- package/skills/debug-manifest/SKILL.md +12 -8
- package/skills/document-cache/SKILL.md +18 -16
- package/skills/fonts/SKILL.md +6 -4
- package/skills/hooks/SKILL.md +328 -70
- package/skills/host-router/SKILL.md +218 -0
- package/skills/intercept/SKILL.md +131 -8
- package/skills/layout/SKILL.md +100 -3
- package/skills/links/SKILL.md +62 -15
- package/skills/loader/SKILL.md +368 -42
- package/skills/middleware/SKILL.md +171 -34
- package/skills/mime-routes/SKILL.md +14 -10
- package/skills/parallel/SKILL.md +137 -1
- package/skills/prerender/SKILL.md +366 -28
- package/skills/rango/SKILL.md +85 -21
- package/skills/response-routes/SKILL.md +136 -83
- package/skills/route/SKILL.md +195 -21
- package/skills/router-setup/SKILL.md +123 -30
- package/skills/theme/SKILL.md +9 -8
- package/skills/typesafety/SKILL.md +240 -102
- package/skills/use-cache/SKILL.md +324 -0
- package/src/__internal.ts +102 -4
- package/src/bin/rango.ts +312 -15
- package/src/browser/action-coordinator.ts +97 -0
- package/src/browser/action-response-classifier.ts +99 -0
- package/src/browser/event-controller.ts +92 -64
- package/src/browser/history-state.ts +80 -0
- package/src/browser/intercept-utils.ts +52 -0
- package/src/browser/link-interceptor.ts +24 -4
- package/src/browser/logging.ts +11 -0
- package/src/browser/merge-segment-loaders.ts +20 -12
- package/src/browser/navigation-bridge.ts +266 -558
- package/src/browser/navigation-client.ts +132 -75
- package/src/browser/navigation-store.ts +33 -50
- package/src/browser/navigation-transaction.ts +297 -0
- package/src/browser/network-error-handler.ts +61 -0
- package/src/browser/partial-update.ts +292 -309
- package/src/browser/prefetch/cache.ts +206 -0
- package/src/browser/prefetch/fetch.ts +144 -0
- package/src/browser/prefetch/observer.ts +65 -0
- package/src/browser/prefetch/policy.ts +48 -0
- package/src/browser/prefetch/queue.ts +128 -0
- package/src/browser/rango-state.ts +112 -0
- package/src/browser/react/Link.tsx +190 -70
- package/src/browser/react/NavigationProvider.tsx +78 -11
- package/src/browser/react/context.ts +6 -0
- package/src/browser/react/filter-segment-order.ts +11 -0
- package/src/browser/react/index.ts +12 -12
- package/src/browser/react/location-state-shared.ts +95 -53
- package/src/browser/react/location-state.ts +60 -15
- 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 +29 -51
- package/src/browser/react/use-client-cache.ts +5 -3
- package/src/browser/react/use-handle.ts +29 -70
- package/src/browser/react/use-link-status.ts +6 -5
- package/src/browser/react/use-navigation.ts +22 -63
- package/src/browser/react/use-params.ts +65 -0
- package/src/browser/react/use-pathname.ts +47 -0
- package/src/browser/react/use-router.ts +63 -0
- package/src/browser/react/use-search-params.ts +56 -0
- package/src/browser/react/use-segments.ts +80 -97
- package/src/browser/response-adapter.ts +73 -0
- package/src/browser/rsc-router.tsx +188 -57
- package/src/browser/scroll-restoration.ts +117 -44
- package/src/browser/segment-reconciler.ts +221 -0
- package/src/browser/segment-structure-assert.ts +16 -0
- package/src/browser/server-action-bridge.ts +488 -606
- package/src/browser/shallow.ts +6 -1
- package/src/browser/types.ts +116 -47
- package/src/browser/validate-redirect-origin.ts +29 -0
- package/src/build/generate-manifest.ts +63 -21
- package/src/build/generate-route-types.ts +36 -1038
- package/src/build/index.ts +2 -5
- package/src/build/route-trie.ts +38 -12
- package/src/build/route-types/ast-helpers.ts +25 -0
- package/src/build/route-types/ast-route-extraction.ts +98 -0
- package/src/build/route-types/codegen.ts +102 -0
- package/src/build/route-types/include-resolution.ts +411 -0
- package/src/build/route-types/param-extraction.ts +48 -0
- package/src/build/route-types/per-module-writer.ts +128 -0
- package/src/build/route-types/router-processing.ts +479 -0
- package/src/build/route-types/scan-filter.ts +78 -0
- package/src/build/runtime-discovery.ts +231 -0
- package/src/cache/background-task.ts +34 -0
- package/src/cache/cache-key-utils.ts +44 -0
- package/src/cache/cache-policy.ts +125 -0
- package/src/cache/cache-runtime.ts +338 -0
- package/src/cache/cache-scope.ts +122 -303
- package/src/cache/cf/cf-cache-store.ts +571 -17
- package/src/cache/cf/index.ts +13 -3
- package/src/cache/document-cache.ts +116 -77
- package/src/cache/handle-capture.ts +81 -0
- package/src/cache/handle-snapshot.ts +41 -0
- package/src/cache/index.ts +1 -15
- package/src/cache/memory-segment-store.ts +191 -13
- package/src/cache/profile-registry.ts +73 -0
- package/src/cache/read-through-swr.ts +134 -0
- package/src/cache/segment-codec.ts +256 -0
- package/src/cache/taint.ts +98 -0
- package/src/cache/types.ts +72 -122
- package/src/client.rsc.tsx +3 -1
- package/src/client.tsx +84 -126
- package/src/component-utils.ts +4 -4
- package/src/components/DefaultDocument.tsx +5 -1
- package/src/context-var.ts +86 -0
- package/src/debug.ts +19 -9
- package/src/errors.ts +77 -7
- package/src/handle.ts +12 -7
- package/src/handles/MetaTags.tsx +73 -20
- package/src/handles/breadcrumbs.ts +66 -0
- package/src/handles/index.ts +1 -0
- package/src/handles/meta.ts +30 -13
- package/src/host/cookie-handler.ts +21 -15
- package/src/host/errors.ts +8 -8
- package/src/host/index.ts +4 -7
- package/src/host/pattern-matcher.ts +27 -27
- package/src/host/router.ts +61 -39
- package/src/host/testing.ts +8 -8
- package/src/host/types.ts +15 -7
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +65 -45
- package/src/index.rsc.ts +104 -40
- package/src/index.ts +122 -67
- package/src/internal-debug.ts +9 -3
- package/src/loader.rsc.ts +18 -93
- package/src/loader.ts +26 -9
- package/src/network-error-thrower.tsx +3 -1
- package/src/outlet-provider.tsx +45 -0
- package/src/prerender/param-hash.ts +4 -2
- package/src/prerender/store.ts +121 -17
- package/src/prerender.ts +325 -20
- package/src/reverse.ts +144 -124
- package/src/root-error-boundary.tsx +41 -29
- package/src/route-content-wrapper.tsx +7 -4
- package/src/route-definition/dsl-helpers.ts +959 -0
- package/src/route-definition/helper-factories.ts +200 -0
- package/src/route-definition/helpers-types.ts +430 -0
- package/src/route-definition/index.ts +52 -0
- package/src/route-definition/redirect.ts +93 -0
- package/src/route-definition.ts +1 -1450
- package/src/route-map-builder.ts +87 -133
- package/src/route-name.ts +53 -0
- package/src/route-types.ts +41 -6
- package/src/router/content-negotiation.ts +116 -0
- package/src/router/debug-manifest.ts +72 -0
- package/src/router/error-handling.ts +9 -9
- package/src/router/find-match.ts +160 -0
- package/src/router/handler-context.ts +324 -116
- package/src/router/intercept-resolution.ts +11 -4
- package/src/router/lazy-includes.ts +237 -0
- package/src/router/loader-resolution.ts +179 -133
- package/src/router/logging.ts +112 -6
- package/src/router/manifest.ts +58 -19
- package/src/router/match-api.ts +89 -88
- package/src/router/match-context.ts +4 -2
- package/src/router/match-handlers.ts +440 -0
- package/src/router/match-middleware/background-revalidation.ts +84 -89
- package/src/router/match-middleware/cache-lookup.ts +261 -48
- package/src/router/match-middleware/cache-store.ts +54 -13
- package/src/router/match-middleware/intercept-resolution.ts +45 -22
- package/src/router/match-middleware/segment-resolution.ts +20 -9
- package/src/router/match-pipelines.ts +10 -45
- package/src/router/match-result.ts +34 -17
- package/src/router/metrics.ts +235 -15
- package/src/router/middleware-cookies.ts +55 -0
- package/src/router/middleware-types.ts +222 -0
- package/src/router/middleware.ts +327 -369
- package/src/router/pattern-matching.ts +169 -31
- package/src/router/prerender-match.ts +402 -0
- package/src/router/preview-match.ts +170 -0
- package/src/router/revalidation.ts +105 -14
- package/src/router/router-context.ts +40 -21
- package/src/router/router-interfaces.ts +452 -0
- package/src/router/router-options.ts +592 -0
- package/src/router/router-registry.ts +24 -0
- package/src/router/segment-resolution/fresh.ts +656 -0
- package/src/router/segment-resolution/helpers.ts +263 -0
- package/src/router/segment-resolution/loader-cache.ts +199 -0
- package/src/router/segment-resolution/revalidation.ts +1277 -0
- package/src/router/segment-resolution/static-store.ts +67 -0
- package/src/router/segment-resolution.ts +21 -1354
- package/src/router/segment-wrappers.ts +291 -0
- package/src/router/telemetry-otel.ts +299 -0
- package/src/router/telemetry.ts +300 -0
- package/src/router/timeout.ts +148 -0
- package/src/router/trie-matching.ts +96 -29
- package/src/router/types.ts +15 -9
- package/src/router.ts +642 -2366
- package/src/rsc/handler-context.ts +45 -0
- package/src/rsc/handler.ts +646 -1027
- package/src/rsc/helpers.ts +140 -6
- package/src/rsc/index.ts +0 -20
- package/src/rsc/loader-fetch.ts +209 -0
- package/src/rsc/manifest-init.ts +86 -0
- package/src/rsc/nonce.ts +14 -0
- package/src/rsc/origin-guard.ts +141 -0
- package/src/rsc/progressive-enhancement.ts +379 -0
- package/src/rsc/response-error.ts +37 -0
- package/src/rsc/response-route-handler.ts +347 -0
- package/src/rsc/rsc-rendering.ts +237 -0
- package/src/rsc/runtime-warnings.ts +42 -0
- package/src/rsc/server-action.ts +348 -0
- package/src/rsc/ssr-setup.ts +128 -0
- package/src/rsc/types.ts +38 -11
- package/src/search-params.ts +66 -54
- package/src/segment-system.tsx +165 -17
- package/src/server/context.ts +237 -54
- package/src/server/cookie-store.ts +190 -0
- package/src/server/fetchable-loader-store.ts +11 -6
- package/src/server/handle-store.ts +94 -15
- package/src/server/loader-registry.ts +15 -56
- package/src/server/request-context.ts +438 -71
- package/src/server.ts +26 -164
- package/src/ssr/index.tsx +101 -31
- package/src/static-handler.ts +22 -4
- package/src/theme/ThemeProvider.tsx +21 -15
- package/src/theme/ThemeScript.tsx +5 -5
- package/src/theme/constants.ts +5 -2
- package/src/theme/index.ts +4 -14
- package/src/theme/theme-context.ts +4 -30
- package/src/theme/theme-script.ts +21 -18
- package/src/types/boundaries.ts +158 -0
- package/src/types/cache-types.ts +198 -0
- package/src/types/error-types.ts +192 -0
- package/src/types/global-namespace.ts +100 -0
- package/src/types/handler-context.ts +687 -0
- package/src/types/index.ts +88 -0
- package/src/types/loader-types.ts +183 -0
- package/src/types/route-config.ts +170 -0
- package/src/types/route-entry.ts +109 -0
- package/src/types/segments.ts +150 -0
- package/src/types.ts +1 -1795
- package/src/urls/include-helper.ts +197 -0
- package/src/urls/index.ts +53 -0
- package/src/urls/path-helper-types.ts +339 -0
- package/src/urls/path-helper.ts +329 -0
- package/src/urls/pattern-types.ts +95 -0
- package/src/urls/response-types.ts +106 -0
- package/src/urls/type-extraction.ts +372 -0
- package/src/urls/urls-function.ts +98 -0
- package/src/urls.ts +1 -1323
- package/src/use-loader.tsx +85 -77
- package/src/vite/discovery/bundle-postprocess.ts +184 -0
- package/src/vite/discovery/discover-routers.ts +344 -0
- package/src/vite/discovery/prerender-collection.ts +385 -0
- package/src/vite/discovery/route-types-writer.ts +258 -0
- package/src/vite/discovery/self-gen-tracking.ts +47 -0
- package/src/vite/discovery/state.ts +108 -0
- package/src/vite/discovery/virtual-module-codegen.ts +203 -0
- package/src/vite/index.ts +11 -2259
- package/src/vite/plugin-types.ts +48 -0
- package/src/vite/plugins/cjs-to-esm.ts +93 -0
- package/src/vite/plugins/client-ref-dedup.ts +115 -0
- package/src/vite/plugins/client-ref-hashing.ts +105 -0
- package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -47
- package/src/vite/{expose-id-utils.ts → plugins/expose-id-utils.ts} +8 -43
- package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
- package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
- package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
- package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
- package/src/vite/plugins/expose-ids/types.ts +45 -0
- package/src/vite/plugins/expose-internal-ids.ts +569 -0
- package/src/vite/plugins/refresh-cmd.ts +65 -0
- package/src/vite/plugins/use-cache-transform.ts +323 -0
- package/src/vite/plugins/version-injector.ts +83 -0
- package/src/vite/plugins/version-plugin.ts +266 -0
- package/src/vite/plugins/virtual-entries.ts +123 -0
- package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
- package/src/vite/rango.ts +445 -0
- package/src/vite/router-discovery.ts +777 -0
- package/src/vite/{ast-handler-extract.ts → utils/ast-handler-extract.ts} +181 -9
- package/src/vite/utils/banner.ts +36 -0
- package/src/vite/utils/bundle-analysis.ts +137 -0
- package/src/vite/utils/manifest-utils.ts +70 -0
- package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
- package/src/vite/utils/prerender-utils.ts +189 -0
- package/src/vite/utils/shared-utils.ts +169 -0
- package/CLAUDE.md +0 -43
- package/src/browser/lru-cache.ts +0 -69
- package/src/browser/request-controller.ts +0 -164
- package/src/cache/memory-store.ts +0 -253
- package/src/router.gen.ts +0 -6
- package/src/static-handler.gen.ts +0 -5
- package/src/urls.gen.ts +0 -8
- package/src/vite/expose-internal-ids.ts +0 -1167
- /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { registerRouteMap } from "../route-map-builder.js";
|
|
2
|
+
import { extractStaticPrefix } from "./pattern-matching.js";
|
|
3
|
+
import {
|
|
4
|
+
EntryData,
|
|
5
|
+
RSCRouterContext,
|
|
6
|
+
runWithPrefixes,
|
|
7
|
+
getIsolatedLazyParent,
|
|
8
|
+
} from "../server/context";
|
|
9
|
+
import type { UrlPatterns } from "../urls.js";
|
|
10
|
+
import type { AllUseItems, IncludeItem } from "../route-types.js";
|
|
11
|
+
import type { ResolvedRouteMap, RouteEntry, TrailingSlashMode } from "../types";
|
|
12
|
+
|
|
13
|
+
export interface LazyEvalDeps<TEnv = any> {
|
|
14
|
+
routesEntries: RouteEntry<TEnv>[];
|
|
15
|
+
mergedRouteMap: Record<string, string>;
|
|
16
|
+
nextMountIndex: () => number;
|
|
17
|
+
getPrecomputedByPrefix: () => Map<string, Record<string, string>> | null;
|
|
18
|
+
routerId?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Detect lazy includes in handler result and create placeholder entries
|
|
22
|
+
// Lazy includes are IncludeItem with lazy: true and _lazyContext
|
|
23
|
+
// Moved to outer scope so it can be reused by evaluateLazyEntry for nested includes
|
|
24
|
+
export function findLazyIncludes<TEnv = any>(
|
|
25
|
+
items: AllUseItems[],
|
|
26
|
+
): Array<{
|
|
27
|
+
prefix: string;
|
|
28
|
+
patterns: UrlPatterns<TEnv>;
|
|
29
|
+
context: {
|
|
30
|
+
urlPrefix: string;
|
|
31
|
+
namePrefix: string | undefined;
|
|
32
|
+
parent: unknown;
|
|
33
|
+
rootScoped?: boolean;
|
|
34
|
+
};
|
|
35
|
+
}> {
|
|
36
|
+
const lazyItems: Array<{
|
|
37
|
+
prefix: string;
|
|
38
|
+
patterns: UrlPatterns<TEnv>;
|
|
39
|
+
context: {
|
|
40
|
+
urlPrefix: string;
|
|
41
|
+
namePrefix: string | undefined;
|
|
42
|
+
parent: unknown;
|
|
43
|
+
rootScoped?: boolean;
|
|
44
|
+
};
|
|
45
|
+
}> = [];
|
|
46
|
+
|
|
47
|
+
for (const item of items) {
|
|
48
|
+
if (!item) continue;
|
|
49
|
+
if (item.type === "include") {
|
|
50
|
+
const includeItem = item as IncludeItem;
|
|
51
|
+
if (includeItem.lazy === true && includeItem._lazyContext) {
|
|
52
|
+
lazyItems.push({
|
|
53
|
+
prefix: includeItem.prefix,
|
|
54
|
+
patterns: includeItem.patterns as UrlPatterns<TEnv>,
|
|
55
|
+
context: includeItem._lazyContext,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Recursively check nested items (in layouts, etc.)
|
|
60
|
+
if ((item as any).uses && Array.isArray((item as any).uses)) {
|
|
61
|
+
lazyItems.push(...findLazyIncludes((item as any).uses));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return lazyItems;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Evaluate a lazy entry's patterns and populate its routes
|
|
70
|
+
* This runs the lazy patterns handler and updates the entry in-place
|
|
71
|
+
* Also detects nested lazy includes and registers them as new entries
|
|
72
|
+
*/
|
|
73
|
+
export function evaluateLazyEntry<TEnv = any>(
|
|
74
|
+
entry: RouteEntry<TEnv>,
|
|
75
|
+
deps: LazyEvalDeps<TEnv>,
|
|
76
|
+
): void {
|
|
77
|
+
if (!entry.lazy || entry.lazyEvaluated || !entry.lazyPatterns) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Check for pre-computed routes from build-time data.
|
|
82
|
+
// Only leaf nodes (no nested includes) are precomputed, so entries with
|
|
83
|
+
// nested lazy includes fall through to the handler below.
|
|
84
|
+
// When multiple entries share the same staticPrefix (e.g., several
|
|
85
|
+
// include("/", ...) calls), the precomputed data merges all their routes
|
|
86
|
+
// into one entry. Assigning that merged set to the first matching entry
|
|
87
|
+
// causes findMatch to pick the wrong handler for routes belonging to a
|
|
88
|
+
// different include. Skip the shortcut when the prefix is shared.
|
|
89
|
+
const currentPrecomputed = deps.getPrecomputedByPrefix();
|
|
90
|
+
if (currentPrecomputed) {
|
|
91
|
+
const routes = currentPrecomputed.get(entry.staticPrefix);
|
|
92
|
+
if (routes) {
|
|
93
|
+
const prefixIsShared =
|
|
94
|
+
deps.routesEntries.filter((e) => e.staticPrefix === entry.staticPrefix)
|
|
95
|
+
.length > 1;
|
|
96
|
+
if (!prefixIsShared) {
|
|
97
|
+
entry.lazyEvaluated = true;
|
|
98
|
+
entry.routes = routes as ResolvedRouteMap<any>;
|
|
99
|
+
for (const [name, pattern] of Object.entries(routes)) {
|
|
100
|
+
deps.mergedRouteMap[name] = pattern;
|
|
101
|
+
}
|
|
102
|
+
registerRouteMap(deps.mergedRouteMap);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Mark as evaluated immediately to prevent concurrent evaluation.
|
|
109
|
+
// JS is single-threaded but handlers.handler() could theoretically yield,
|
|
110
|
+
// and the while-loop in findMatch retries after evaluation.
|
|
111
|
+
entry.lazyEvaluated = true;
|
|
112
|
+
|
|
113
|
+
const lazyPatterns = entry.lazyPatterns as UrlPatterns<TEnv>;
|
|
114
|
+
const lazyContext = entry.lazyContext;
|
|
115
|
+
|
|
116
|
+
// Create a new context for evaluating the lazy patterns
|
|
117
|
+
const manifest = new Map<string, EntryData>();
|
|
118
|
+
const patterns = new Map<string, string>();
|
|
119
|
+
const patternsByPrefix = new Map<string, Map<string, string>>();
|
|
120
|
+
const trailingSlashMap = new Map<string, TrailingSlashMode>();
|
|
121
|
+
|
|
122
|
+
// Capture the handler result to detect nested lazy includes
|
|
123
|
+
let handlerResult: AllUseItems[] = [];
|
|
124
|
+
|
|
125
|
+
// Merge captured counters from include() to maintain consistent
|
|
126
|
+
// shortCode indices with sibling entries from pattern extraction
|
|
127
|
+
const lazyCounters: Record<string, number> = {};
|
|
128
|
+
if (lazyContext && (lazyContext as any).counters) {
|
|
129
|
+
const captured = (lazyContext as any).counters as Record<string, number>;
|
|
130
|
+
for (const [key, value] of Object.entries(captured)) {
|
|
131
|
+
lazyCounters[key] = value;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
RSCRouterContext.run(
|
|
136
|
+
{
|
|
137
|
+
manifest,
|
|
138
|
+
patterns,
|
|
139
|
+
patternsByPrefix,
|
|
140
|
+
trailingSlash: trailingSlashMap,
|
|
141
|
+
namespace: "lazy",
|
|
142
|
+
parent: getIsolatedLazyParent(lazyContext?.parent as EntryData | null),
|
|
143
|
+
counters: lazyCounters,
|
|
144
|
+
cacheProfiles: (lazyContext as any)?.cacheProfiles,
|
|
145
|
+
rootScoped: (lazyContext as any)?.rootScoped,
|
|
146
|
+
},
|
|
147
|
+
() => {
|
|
148
|
+
// Run the lazy patterns handler with the original context prefixes
|
|
149
|
+
// The prefix comes from the IncludeItem stored in lazyPatterns
|
|
150
|
+
const includePrefix = (entry as any)._lazyPrefix || "";
|
|
151
|
+
const fullPrefix = (lazyContext?.urlPrefix || "") + includePrefix;
|
|
152
|
+
|
|
153
|
+
if (fullPrefix || lazyContext?.namePrefix) {
|
|
154
|
+
runWithPrefixes(fullPrefix, lazyContext?.namePrefix, () => {
|
|
155
|
+
handlerResult = lazyPatterns.handler() as AllUseItems[];
|
|
156
|
+
});
|
|
157
|
+
} else {
|
|
158
|
+
handlerResult = lazyPatterns.handler() as AllUseItems[];
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
);
|
|
162
|
+
|
|
163
|
+
// Populate the entry's routes from the patterns
|
|
164
|
+
const routesObject: Record<string, string> = {};
|
|
165
|
+
for (const [name, pattern] of patterns.entries()) {
|
|
166
|
+
routesObject[name] = pattern;
|
|
167
|
+
// Also add to merged route map for reverse() support
|
|
168
|
+
const existingPattern = deps.mergedRouteMap[name];
|
|
169
|
+
if (existingPattern !== undefined && existingPattern !== pattern) {
|
|
170
|
+
console.warn(
|
|
171
|
+
`[@rangojs/router] Route name conflict: "${name}" already maps to "${existingPattern}", ` +
|
|
172
|
+
`overwriting with "${pattern}" (from lazy include). Use unique route names to avoid this.`,
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
deps.mergedRouteMap[name] = pattern;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Update the entry in-place
|
|
179
|
+
entry.routes = routesObject as ResolvedRouteMap<any>;
|
|
180
|
+
|
|
181
|
+
// Note: Do NOT clear lazyPatterns/lazyContext here.
|
|
182
|
+
// loadManifest() needs them on every request to re-run the handler
|
|
183
|
+
// in the correct AsyncLocalStorage context (Store.manifest).
|
|
184
|
+
|
|
185
|
+
// Update trailing slash config if available
|
|
186
|
+
if (trailingSlashMap.size > 0) {
|
|
187
|
+
entry.trailingSlash = Object.fromEntries(trailingSlashMap);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Detect nested lazy includes and register them as new entries
|
|
191
|
+
const nestedLazyIncludes = findLazyIncludes(handlerResult);
|
|
192
|
+
for (const lazyInclude of nestedLazyIncludes) {
|
|
193
|
+
// Compute the full URL prefix (combining parent prefix if any)
|
|
194
|
+
const fullPrefix = lazyInclude.context.urlPrefix
|
|
195
|
+
? lazyInclude.context.urlPrefix + lazyInclude.prefix
|
|
196
|
+
: lazyInclude.prefix;
|
|
197
|
+
|
|
198
|
+
const nestedEntry: RouteEntry<TEnv> & { _lazyPrefix?: string } = {
|
|
199
|
+
prefix: "",
|
|
200
|
+
staticPrefix: extractStaticPrefix(fullPrefix),
|
|
201
|
+
routes: {} as ResolvedRouteMap<any>, // Empty until first match
|
|
202
|
+
trailingSlash: entry.trailingSlash,
|
|
203
|
+
handler: (lazyInclude.patterns as UrlPatterns<TEnv>).handler,
|
|
204
|
+
mountIndex: deps.nextMountIndex(),
|
|
205
|
+
routerId: deps.routerId,
|
|
206
|
+
// Lazy evaluation fields
|
|
207
|
+
lazy: true,
|
|
208
|
+
lazyPatterns: lazyInclude.patterns,
|
|
209
|
+
lazyContext: lazyInclude.context,
|
|
210
|
+
lazyEvaluated: false,
|
|
211
|
+
// Store the include prefix for evaluation
|
|
212
|
+
_lazyPrefix: lazyInclude.prefix,
|
|
213
|
+
};
|
|
214
|
+
// Insert nested lazy entry before any entry whose staticPrefix is a
|
|
215
|
+
// prefix of (but shorter than) this lazy entry's staticPrefix.
|
|
216
|
+
// This ensures more specific lazy includes are matched before
|
|
217
|
+
// less specific eager entries (e.g., "/href/nested" before "/href/:id").
|
|
218
|
+
const nestedPrefix = nestedEntry.staticPrefix;
|
|
219
|
+
let insertIndex = deps.routesEntries.length;
|
|
220
|
+
if (nestedPrefix) {
|
|
221
|
+
for (let i = 0; i < deps.routesEntries.length; i++) {
|
|
222
|
+
const existing = deps.routesEntries[i]!;
|
|
223
|
+
if (
|
|
224
|
+
nestedPrefix.startsWith(existing.staticPrefix) &&
|
|
225
|
+
nestedPrefix.length > existing.staticPrefix.length
|
|
226
|
+
) {
|
|
227
|
+
insertIndex = i;
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
deps.routesEntries.splice(insertIndex, 0, nestedEntry);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Re-register route map for runtime reverse() usage
|
|
236
|
+
registerRouteMap(deps.mergedRouteMap);
|
|
237
|
+
}
|
|
@@ -22,7 +22,7 @@ import type { LoaderRevalidationResult, ActionContext } from "./types";
|
|
|
22
22
|
import { isHandle, type Handle } from "../handle.js";
|
|
23
23
|
import type { HandleStore } from "../server/handle-store.js";
|
|
24
24
|
import { getFetchableLoader } from "../server/fetchable-loader-store.js";
|
|
25
|
-
import {
|
|
25
|
+
import { _getRequestContext } from "../server/request-context.js";
|
|
26
26
|
import { debugLog } from "./logging.js";
|
|
27
27
|
|
|
28
28
|
/**
|
|
@@ -36,7 +36,7 @@ export type LoaderErrorCallback = (
|
|
|
36
36
|
segmentId: string;
|
|
37
37
|
loaderName: string;
|
|
38
38
|
handledByBoundary: boolean;
|
|
39
|
-
}
|
|
39
|
+
},
|
|
40
40
|
) => void;
|
|
41
41
|
|
|
42
42
|
/**
|
|
@@ -55,14 +55,14 @@ export function wrapLoaderWithErrorHandling<T>(
|
|
|
55
55
|
segmentId: string,
|
|
56
56
|
pathname: string,
|
|
57
57
|
findNearestErrorBoundary: (
|
|
58
|
-
entry: EntryData | null
|
|
58
|
+
entry: EntryData | null,
|
|
59
59
|
) => ReactNode | ErrorBoundaryHandler | null,
|
|
60
60
|
createErrorInfo: (
|
|
61
61
|
error: unknown,
|
|
62
62
|
segmentId: string,
|
|
63
|
-
segmentType: ErrorInfo["segmentType"]
|
|
63
|
+
segmentType: ErrorInfo["segmentType"],
|
|
64
64
|
) => ErrorInfo,
|
|
65
|
-
onError?: LoaderErrorCallback
|
|
65
|
+
onError?: LoaderErrorCallback,
|
|
66
66
|
): Promise<LoaderDataResult<T>> {
|
|
67
67
|
// Extract loader name from segmentId (format: "M1L0D0.loaderName")
|
|
68
68
|
const loaderName = segmentId.split(".").pop() || "unknown";
|
|
@@ -73,7 +73,7 @@ export function wrapLoaderWithErrorHandling<T>(
|
|
|
73
73
|
__loaderResult: true,
|
|
74
74
|
ok: true,
|
|
75
75
|
data,
|
|
76
|
-
})
|
|
76
|
+
}),
|
|
77
77
|
)
|
|
78
78
|
.catch((error): LoaderDataResult<T> => {
|
|
79
79
|
// Find nearest error boundary
|
|
@@ -127,61 +127,103 @@ export function wrapLoaderWithErrorHandling<T>(
|
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
/**
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
* For handles: Returns a push function bound to the current segment.
|
|
130
|
+
* Detect cycles in the loader dependency graph using DFS from a given node.
|
|
131
|
+
* Returns the cycle path (array of loader IDs forming the cycle) if one exists,
|
|
132
|
+
* or null if no cycle is found.
|
|
134
133
|
*/
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
134
|
+
function detectLoaderCycle(
|
|
135
|
+
from: string,
|
|
136
|
+
to: string,
|
|
137
|
+
dependsOn: Map<string, Set<string>>,
|
|
138
|
+
): string[] | null {
|
|
139
|
+
// If `to` can reach `from` via the dependency graph, adding the edge
|
|
140
|
+
// from -> to creates a cycle. We search from `to` looking for `from`.
|
|
141
|
+
const visited = new Set<string>();
|
|
142
|
+
const path: string[] = [from, to];
|
|
143
|
+
|
|
144
|
+
function dfs(current: string): string[] | null {
|
|
145
|
+
if (current === from) {
|
|
146
|
+
// Found a cycle: return the path leading back to `from`
|
|
147
|
+
return path;
|
|
148
|
+
}
|
|
149
|
+
if (visited.has(current)) return null;
|
|
150
|
+
visited.add(current);
|
|
143
151
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
// Handle case: return a push function
|
|
147
|
-
if (isHandle(item)) {
|
|
148
|
-
const handle = item;
|
|
149
|
-
const store = getHandleStore();
|
|
150
|
-
const segmentId = (ctx as InternalHandlerContext)._currentSegmentId;
|
|
152
|
+
const deps = dependsOn.get(current);
|
|
153
|
+
if (!deps) return null;
|
|
151
154
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
155
|
+
for (const dep of deps) {
|
|
156
|
+
path.push(dep);
|
|
157
|
+
const cycle = dfs(dep);
|
|
158
|
+
if (cycle) return cycle;
|
|
159
|
+
path.pop();
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
158
163
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
// Promises are pushed directly - RSC will serialize and stream them
|
|
162
|
-
return (dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>)) => {
|
|
163
|
-
if (!store) return;
|
|
164
|
+
return dfs(to);
|
|
165
|
+
}
|
|
164
166
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
167
|
+
/**
|
|
168
|
+
* Creates a memoizing loader executor with cycle detection.
|
|
169
|
+
* Shared by setupLoaderAccess and setupLoaderAccessSilent; only the handle
|
|
170
|
+
* branch differs between the two, so only the loader logic is extracted here.
|
|
171
|
+
*
|
|
172
|
+
* Returns a useLoader(loader, callerLoaderId) function that:
|
|
173
|
+
* - Tracks dependency edges between loaders for cycle detection
|
|
174
|
+
* - Throws immediately (synchronously inside an async fn) on circular deps
|
|
175
|
+
* - Memoizes each loader's promise so it runs at most once per request
|
|
176
|
+
*/
|
|
177
|
+
function createLoaderExecutor<TEnv>(
|
|
178
|
+
ctx: HandlerContext<any, TEnv>,
|
|
179
|
+
loaderPromises: Map<string, Promise<any>>,
|
|
180
|
+
): (
|
|
181
|
+
loader: LoaderDefinition<any, any>,
|
|
182
|
+
callerLoaderId: string | null,
|
|
183
|
+
) => Promise<any> {
|
|
184
|
+
// Capture RequestContext eagerly for cookie access (ALS protection on Cloudflare)
|
|
185
|
+
const reqCtxRef = _getRequestContext();
|
|
186
|
+
|
|
187
|
+
// Dependency graph: loaderId -> set of loader IDs it directly depends on.
|
|
188
|
+
const dependsOn = new Map<string, Set<string>>();
|
|
189
|
+
|
|
190
|
+
// Loaders whose promises have not yet settled.
|
|
191
|
+
// A dependency on a pending loader that closes a cycle means deadlock.
|
|
192
|
+
const pendingLoaders = new Set<string>();
|
|
193
|
+
|
|
194
|
+
function useLoader(
|
|
195
|
+
loader: LoaderDefinition<any, any>,
|
|
196
|
+
callerLoaderId: string | null,
|
|
197
|
+
): Promise<any> {
|
|
198
|
+
// Record the dependency edge and check for cycles before running
|
|
199
|
+
if (callerLoaderId !== null) {
|
|
200
|
+
let deps = dependsOn.get(callerLoaderId);
|
|
201
|
+
if (!deps) {
|
|
202
|
+
deps = new Set();
|
|
203
|
+
dependsOn.set(callerLoaderId, deps);
|
|
204
|
+
}
|
|
169
205
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
206
|
+
// Only relevant when the target is still pending (would deadlock)
|
|
207
|
+
if (pendingLoaders.has(loader.$$id)) {
|
|
208
|
+
const cycle = detectLoaderCycle(callerLoaderId, loader.$$id, dependsOn);
|
|
209
|
+
if (cycle) {
|
|
210
|
+
throw new Error(
|
|
211
|
+
`Circular loader dependency detected: ${cycle.join(" -> ")}. ` +
|
|
212
|
+
`Loaders cannot depend on each other in a cycle. ` +
|
|
213
|
+
`Refactor to break the circular dependency.`,
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
174
217
|
|
|
175
|
-
|
|
176
|
-
|
|
218
|
+
deps.add(loader.$$id);
|
|
219
|
+
}
|
|
177
220
|
|
|
178
221
|
// Return cached promise if already started
|
|
179
222
|
if (loaderPromises.has(loader.$$id)) {
|
|
180
|
-
return loaderPromises.get(loader.$$id)
|
|
223
|
+
return loaderPromises.get(loader.$$id)!;
|
|
181
224
|
}
|
|
182
225
|
|
|
183
226
|
// Get loader function - either from loader object or fetchable registry
|
|
184
|
-
// Fetchable loaders store fn in registry (not on object) to avoid client bundling issues
|
|
185
227
|
let loaderFn = loader.fn;
|
|
186
228
|
if (!loaderFn) {
|
|
187
229
|
const fetchable = getFetchableLoader(loader.$$id);
|
|
@@ -190,46 +232,102 @@ export function setupLoaderAccess<TEnv>(
|
|
|
190
232
|
}
|
|
191
233
|
}
|
|
192
234
|
|
|
193
|
-
// Ensure loader has a function
|
|
194
235
|
if (!loaderFn) {
|
|
195
236
|
throw new Error(
|
|
196
|
-
`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
|
|
237
|
+
`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.`,
|
|
197
238
|
);
|
|
198
239
|
}
|
|
199
240
|
|
|
200
|
-
|
|
241
|
+
pendingLoaders.add(loader.$$id);
|
|
242
|
+
|
|
243
|
+
const currentLoaderId = loader.$$id;
|
|
201
244
|
const loaderCtx: LoaderContext<Record<string, string | undefined>, TEnv> = {
|
|
202
245
|
params: ctx.params,
|
|
246
|
+
routeParams: (ctx.params ?? {}) as Record<string, string>,
|
|
203
247
|
request: ctx.request,
|
|
204
248
|
searchParams: ctx.searchParams,
|
|
249
|
+
search: (ctx as any).search,
|
|
205
250
|
pathname: ctx.pathname,
|
|
206
251
|
url: ctx.url,
|
|
207
252
|
env: ctx.env,
|
|
208
253
|
var: ctx.var,
|
|
209
254
|
get: ctx.get,
|
|
210
255
|
use: <TDep, TDepParams = any>(
|
|
211
|
-
dep: LoaderDefinition<TDep, TDepParams
|
|
256
|
+
dep: LoaderDefinition<TDep, TDepParams>,
|
|
212
257
|
): Promise<TDep> => {
|
|
213
|
-
|
|
214
|
-
return ctx.use(dep);
|
|
258
|
+
return useLoader(dep, currentLoaderId);
|
|
215
259
|
},
|
|
216
|
-
// Default to GET for loaders called through route handlers
|
|
217
260
|
method: "GET",
|
|
218
261
|
body: undefined,
|
|
262
|
+
reverse: ctx.reverse as LoaderContext["reverse"],
|
|
219
263
|
};
|
|
220
264
|
|
|
221
|
-
|
|
222
|
-
const doneLoader = track(`loader:${loader.$$id}`);
|
|
265
|
+
const doneLoader = track(`loader:${loader.$$id}`, 2);
|
|
223
266
|
const promise = Promise.resolve(
|
|
224
|
-
loaderFn(loaderCtx as LoaderContext<any, TEnv>)
|
|
267
|
+
loaderFn(loaderCtx as LoaderContext<any, TEnv>),
|
|
225
268
|
).finally(() => {
|
|
269
|
+
pendingLoaders.delete(loader.$$id);
|
|
226
270
|
doneLoader();
|
|
227
271
|
});
|
|
228
272
|
|
|
229
|
-
// Memoize for subsequent calls
|
|
230
273
|
loaderPromises.set(loader.$$id, promise);
|
|
231
|
-
|
|
232
274
|
return promise;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
return useLoader;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Set up the use() method on handler context to access loaders and handles.
|
|
282
|
+
*
|
|
283
|
+
* For loaders: Lazily runs loaders, memoizes results per request.
|
|
284
|
+
* For handles: Returns a push function bound to the current segment.
|
|
285
|
+
*
|
|
286
|
+
* Includes cycle detection: tracks dependency edges between loaders and
|
|
287
|
+
* throws on circular dependencies to prevent deadlocks.
|
|
288
|
+
*/
|
|
289
|
+
export function setupLoaderAccess<TEnv>(
|
|
290
|
+
ctx: HandlerContext<any, TEnv>,
|
|
291
|
+
loaderPromises: Map<string, Promise<any>>,
|
|
292
|
+
): void {
|
|
293
|
+
// Eagerly capture the HandleStore at setup time (before pipeline async ops).
|
|
294
|
+
// In workerd/Cloudflare, dynamic imports and fetch() in the match pipeline
|
|
295
|
+
// can disrupt AsyncLocalStorage, causing getRequestContext() to return
|
|
296
|
+
// undefined when handlers later call ctx.use(handle). Capturing early
|
|
297
|
+
// ensures the store reference survives ALS disruption.
|
|
298
|
+
const handleStoreRef = _getRequestContext()?._handleStore;
|
|
299
|
+
|
|
300
|
+
const useLoader = createLoaderExecutor(ctx, loaderPromises);
|
|
301
|
+
|
|
302
|
+
ctx.use = ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
|
|
303
|
+
if (isHandle(item)) {
|
|
304
|
+
const handle = item;
|
|
305
|
+
const store = handleStoreRef;
|
|
306
|
+
const segmentId = (ctx as InternalHandlerContext<any, TEnv>)
|
|
307
|
+
._currentSegmentId;
|
|
308
|
+
|
|
309
|
+
if (!segmentId) {
|
|
310
|
+
throw new Error(
|
|
311
|
+
`Handle "${handle.$$id}" used outside of handler context. ` +
|
|
312
|
+
`Handles must be used within route/layout handlers.`,
|
|
313
|
+
);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
return (
|
|
317
|
+
dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>),
|
|
318
|
+
) => {
|
|
319
|
+
if (!store) return;
|
|
320
|
+
|
|
321
|
+
const valueOrPromise =
|
|
322
|
+
typeof dataOrFn === "function"
|
|
323
|
+
? (dataOrFn as () => Promise<unknown>)()
|
|
324
|
+
: dataOrFn;
|
|
325
|
+
|
|
326
|
+
store.push(handle.$$id, segmentId, valueOrPromise);
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
return useLoader(item as LoaderDefinition<any, any>, null);
|
|
233
331
|
}) as typeof ctx.use;
|
|
234
332
|
}
|
|
235
333
|
|
|
@@ -237,20 +335,17 @@ export function setupLoaderAccess<TEnv>(
|
|
|
237
335
|
* Set up ctx.use() for pre-rendering (build-time).
|
|
238
336
|
* Handles push to HandleStore; loaders throw with a clear error.
|
|
239
337
|
*/
|
|
240
|
-
export function setupBuildUse<TEnv>(
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
// Get HandleStore from request context
|
|
244
|
-
const getHandleStore = (): HandleStore | undefined => {
|
|
245
|
-
return getRequestContext()?._handleStore;
|
|
246
|
-
};
|
|
338
|
+
export function setupBuildUse<TEnv>(ctx: HandlerContext<any, TEnv>): void {
|
|
339
|
+
// Eagerly capture the HandleStore (same ALS protection as setupLoaderAccess).
|
|
340
|
+
const handleStoreRef = _getRequestContext()?._handleStore;
|
|
247
341
|
|
|
248
342
|
ctx.use = ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
|
|
249
343
|
// Handle case: return a push function bound to the current segment
|
|
250
344
|
if (isHandle(item)) {
|
|
251
345
|
const handle = item;
|
|
252
|
-
const store =
|
|
253
|
-
const segmentId = (ctx as InternalHandlerContext)
|
|
346
|
+
const store = handleStoreRef;
|
|
347
|
+
const segmentId = (ctx as InternalHandlerContext<any, TEnv>)
|
|
348
|
+
._currentSegmentId;
|
|
254
349
|
|
|
255
350
|
if (!segmentId) {
|
|
256
351
|
throw new Error(
|
|
@@ -259,12 +354,15 @@ export function setupBuildUse<TEnv>(
|
|
|
259
354
|
);
|
|
260
355
|
}
|
|
261
356
|
|
|
262
|
-
return (
|
|
357
|
+
return (
|
|
358
|
+
dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>),
|
|
359
|
+
) => {
|
|
263
360
|
if (!store) return;
|
|
264
361
|
|
|
265
|
-
const valueOrPromise =
|
|
266
|
-
|
|
267
|
-
|
|
362
|
+
const valueOrPromise =
|
|
363
|
+
typeof dataOrFn === "function"
|
|
364
|
+
? (dataOrFn as () => Promise<unknown>)()
|
|
365
|
+
: dataOrFn;
|
|
268
366
|
|
|
269
367
|
store.push(handle.$$id, segmentId, valueOrPromise);
|
|
270
368
|
};
|
|
@@ -282,76 +380,24 @@ export function setupBuildUse<TEnv>(
|
|
|
282
380
|
/**
|
|
283
381
|
* Set up ctx.use() for proactive caching (silent mode).
|
|
284
382
|
* Handles are silently ignored (no push to HandleStore).
|
|
285
|
-
* Loaders work normally but with fresh memoization.
|
|
383
|
+
* Loaders work normally but with fresh memoization and cycle detection.
|
|
286
384
|
*
|
|
287
385
|
* This prevents duplicate handle data (breadcrumbs, meta) from being
|
|
288
386
|
* pushed to the response stream during background proactive caching.
|
|
289
387
|
*/
|
|
290
388
|
export function setupLoaderAccessSilent<TEnv>(
|
|
291
389
|
ctx: HandlerContext<any, TEnv>,
|
|
292
|
-
loaderPromises: Map<string, Promise<any
|
|
390
|
+
loaderPromises: Map<string, Promise<any>>,
|
|
293
391
|
): void {
|
|
392
|
+
const useLoader = createLoaderExecutor(ctx, loaderPromises);
|
|
393
|
+
|
|
294
394
|
ctx.use = ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
|
|
295
|
-
// Handle case: return a no-op push function
|
|
296
395
|
if (isHandle(item)) {
|
|
297
|
-
// Silent mode - return a
|
|
298
|
-
return (_dataOrFn: unknown) => {
|
|
299
|
-
// Intentionally empty - don't push handle data during proactive caching
|
|
300
|
-
};
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// Loader case: same as setupLoaderAccess
|
|
304
|
-
const loader = item as LoaderDefinition<any, any>;
|
|
305
|
-
|
|
306
|
-
// Return cached promise if already started
|
|
307
|
-
if (loaderPromises.has(loader.$$id)) {
|
|
308
|
-
return loaderPromises.get(loader.$$id);
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
// Get loader function
|
|
312
|
-
let loaderFn = loader.fn;
|
|
313
|
-
if (!loaderFn) {
|
|
314
|
-
const fetchable = getFetchableLoader(loader.$$id);
|
|
315
|
-
if (fetchable) {
|
|
316
|
-
loaderFn = fetchable.fn;
|
|
317
|
-
}
|
|
396
|
+
// Silent mode - return a no-op so handle data is not pushed during caching
|
|
397
|
+
return (_dataOrFn: unknown) => {};
|
|
318
398
|
}
|
|
319
399
|
|
|
320
|
-
|
|
321
|
-
throw new Error(
|
|
322
|
-
`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.`
|
|
323
|
-
);
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
// Create loader context with recursive use() support
|
|
327
|
-
const loaderCtx: LoaderContext<Record<string, string | undefined>, TEnv> = {
|
|
328
|
-
params: ctx.params,
|
|
329
|
-
request: ctx.request,
|
|
330
|
-
searchParams: ctx.searchParams,
|
|
331
|
-
pathname: ctx.pathname,
|
|
332
|
-
url: ctx.url,
|
|
333
|
-
env: ctx.env,
|
|
334
|
-
var: ctx.var,
|
|
335
|
-
get: ctx.get,
|
|
336
|
-
use: <TDep, TDepParams = any>(
|
|
337
|
-
dep: LoaderDefinition<TDep, TDepParams>
|
|
338
|
-
): Promise<TDep> => {
|
|
339
|
-
return ctx.use(dep);
|
|
340
|
-
},
|
|
341
|
-
method: "GET",
|
|
342
|
-
body: undefined,
|
|
343
|
-
};
|
|
344
|
-
|
|
345
|
-
// Start loader execution with tracking
|
|
346
|
-
const doneLoader = track(`loader:${loader.$$id}`);
|
|
347
|
-
const promise = Promise.resolve(
|
|
348
|
-
loaderFn(loaderCtx as LoaderContext<any, TEnv>)
|
|
349
|
-
).finally(() => {
|
|
350
|
-
doneLoader();
|
|
351
|
-
});
|
|
352
|
-
|
|
353
|
-
loaderPromises.set(loader.$$id, promise);
|
|
354
|
-
return promise;
|
|
400
|
+
return useLoader(item as LoaderDefinition<any, any>, null);
|
|
355
401
|
}) as typeof ctx.use;
|
|
356
402
|
}
|
|
357
403
|
|
|
@@ -367,7 +413,7 @@ export function setupLoaderAccessSilent<TEnv>(
|
|
|
367
413
|
export async function revalidate<T>(
|
|
368
414
|
shouldRevalidate: () => Promise<boolean>,
|
|
369
415
|
onRevalidate: () => Promise<T>,
|
|
370
|
-
onSkip: () => T
|
|
416
|
+
onSkip: () => T,
|
|
371
417
|
): Promise<T> {
|
|
372
418
|
const needsRevalidation = await shouldRevalidate();
|
|
373
419
|
return needsRevalidation ? await onRevalidate() : onSkip();
|