@rangojs/router 0.0.0-experimental.2 → 0.0.0-experimental.20dbba0c
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 +972 -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/{src/__mocks__/version.ts → dist/__mocks__/version.js} +1 -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 +1689 -0
- package/dist/bin/rango.js.map +1 -0
- package/dist/browser/event-controller.d.ts +191 -0
- package/dist/browser/event-controller.d.ts.map +1 -0
- package/dist/browser/event-controller.js +559 -0
- package/dist/browser/event-controller.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/link-interceptor.d.ts +38 -0
- package/dist/browser/link-interceptor.d.ts.map +1 -0
- package/dist/browser/link-interceptor.js +99 -0
- package/dist/browser/link-interceptor.js.map +1 -0
- package/dist/browser/logging.d.ts +10 -0
- package/dist/browser/logging.d.ts.map +1 -0
- package/dist/browser/logging.js +29 -0
- package/dist/browser/logging.js.map +1 -0
- package/dist/browser/lru-cache.d.ts +17 -0
- package/dist/browser/lru-cache.d.ts.map +1 -0
- package/dist/browser/lru-cache.js +50 -0
- package/dist/browser/lru-cache.js.map +1 -0
- package/dist/browser/merge-segment-loaders.d.ts +39 -0
- package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
- package/dist/browser/merge-segment-loaders.js +102 -0
- package/dist/browser/merge-segment-loaders.js.map +1 -0
- package/dist/browser/navigation-bridge.d.ts +102 -0
- package/dist/browser/navigation-bridge.d.ts.map +1 -0
- package/dist/browser/navigation-bridge.js +708 -0
- package/dist/browser/navigation-bridge.js.map +1 -0
- package/dist/browser/navigation-client.d.ts +25 -0
- package/dist/browser/navigation-client.d.ts.map +1 -0
- package/dist/browser/navigation-client.js +157 -0
- package/dist/browser/navigation-client.js.map +1 -0
- package/dist/browser/navigation-store.d.ts +101 -0
- package/dist/browser/navigation-store.d.ts.map +1 -0
- package/dist/browser/navigation-store.js +625 -0
- package/dist/browser/navigation-store.js.map +1 -0
- package/dist/browser/partial-update.d.ts +75 -0
- package/dist/browser/partial-update.d.ts.map +1 -0
- package/dist/browser/partial-update.js +426 -0
- package/dist/browser/partial-update.js.map +1 -0
- package/dist/browser/react/Link.d.ts +86 -0
- package/dist/browser/react/Link.d.ts.map +1 -0
- package/dist/browser/react/Link.js +128 -0
- package/dist/browser/react/Link.js.map +1 -0
- package/dist/browser/react/NavigationProvider.d.ts +63 -0
- package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
- package/dist/browser/react/NavigationProvider.js +216 -0
- package/dist/browser/react/NavigationProvider.js.map +1 -0
- package/dist/browser/react/ScrollRestoration.d.ts +75 -0
- package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
- package/dist/browser/react/ScrollRestoration.js +57 -0
- package/dist/browser/react/ScrollRestoration.js.map +1 -0
- package/dist/browser/react/context.d.ts +46 -0
- package/dist/browser/react/context.d.ts.map +1 -0
- package/dist/browser/react/context.js +10 -0
- package/dist/browser/react/context.js.map +1 -0
- package/dist/browser/react/index.d.ts +11 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/index.js +22 -0
- package/dist/browser/react/index.js.map +1 -0
- package/dist/browser/react/location-state-shared.d.ts +63 -0
- package/dist/browser/react/location-state-shared.d.ts.map +1 -0
- package/dist/browser/react/location-state-shared.js +81 -0
- package/dist/browser/react/location-state-shared.js.map +1 -0
- package/dist/browser/react/location-state.d.ts +23 -0
- package/dist/browser/react/location-state.d.ts.map +1 -0
- package/dist/browser/react/location-state.js +29 -0
- package/dist/browser/react/location-state.js.map +1 -0
- package/dist/browser/react/mount-context.d.ts +24 -0
- package/dist/browser/react/mount-context.d.ts.map +1 -0
- package/dist/browser/react/mount-context.js +24 -0
- package/dist/browser/react/mount-context.js.map +1 -0
- package/dist/browser/react/use-action.d.ts +64 -0
- package/dist/browser/react/use-action.d.ts.map +1 -0
- package/dist/browser/react/use-action.js +134 -0
- package/dist/browser/react/use-action.js.map +1 -0
- package/dist/browser/react/use-client-cache.d.ts +41 -0
- package/dist/browser/react/use-client-cache.d.ts.map +1 -0
- package/dist/browser/react/use-client-cache.js +39 -0
- package/dist/browser/react/use-client-cache.js.map +1 -0
- package/dist/browser/react/use-handle.d.ts +31 -0
- package/dist/browser/react/use-handle.d.ts.map +1 -0
- package/dist/browser/react/use-handle.js +144 -0
- package/dist/browser/react/use-handle.js.map +1 -0
- package/dist/browser/react/use-href.d.ts +33 -0
- package/dist/browser/react/use-href.d.ts.map +1 -0
- package/dist/browser/react/use-href.js +39 -0
- package/dist/browser/react/use-href.js.map +1 -0
- package/dist/browser/react/use-link-status.d.ts +37 -0
- package/dist/browser/react/use-link-status.d.ts.map +1 -0
- package/dist/browser/react/use-link-status.js +99 -0
- package/dist/browser/react/use-link-status.js.map +1 -0
- package/dist/browser/react/use-mount.d.ts +25 -0
- package/dist/browser/react/use-mount.d.ts.map +1 -0
- package/dist/browser/react/use-mount.js +30 -0
- package/dist/browser/react/use-mount.js.map +1 -0
- package/dist/browser/react/use-navigation.d.ts +27 -0
- package/dist/browser/react/use-navigation.d.ts.map +1 -0
- package/dist/browser/react/use-navigation.js +87 -0
- package/dist/browser/react/use-navigation.js.map +1 -0
- package/dist/browser/react/use-segments.d.ts +38 -0
- package/dist/browser/react/use-segments.d.ts.map +1 -0
- package/dist/browser/react/use-segments.js +130 -0
- package/dist/browser/react/use-segments.js.map +1 -0
- package/dist/browser/request-controller.d.ts +26 -0
- package/dist/browser/request-controller.d.ts.map +1 -0
- package/dist/browser/request-controller.js +147 -0
- package/dist/browser/request-controller.js.map +1 -0
- package/dist/browser/rsc-router.d.ts +129 -0
- package/dist/browser/rsc-router.d.ts.map +1 -0
- package/dist/browser/rsc-router.js +195 -0
- package/dist/browser/rsc-router.js.map +1 -0
- package/dist/browser/scroll-restoration.d.ts +93 -0
- package/dist/browser/scroll-restoration.d.ts.map +1 -0
- package/dist/browser/scroll-restoration.js +321 -0
- package/dist/browser/scroll-restoration.js.map +1 -0
- package/dist/browser/segment-structure-assert.d.ts +17 -0
- package/dist/browser/segment-structure-assert.d.ts.map +1 -0
- package/dist/browser/segment-structure-assert.js +59 -0
- package/dist/browser/segment-structure-assert.js.map +1 -0
- package/dist/browser/server-action-bridge.d.ts +26 -0
- package/dist/browser/server-action-bridge.d.ts.map +1 -0
- package/dist/browser/server-action-bridge.js +668 -0
- package/dist/browser/server-action-bridge.js.map +1 -0
- package/dist/browser/shallow.d.ts +12 -0
- package/dist/browser/shallow.d.ts.map +1 -0
- package/dist/browser/shallow.js +34 -0
- package/dist/browser/shallow.js.map +1 -0
- package/dist/browser/types.d.ts +369 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
- package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-cli.test.js +237 -0
- package/dist/build/__tests__/generate-cli.test.js.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.js +119 -0
- package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.js +620 -0
- package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.js +308 -0
- package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +81 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +276 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/build/generate-route-types.d.ts +115 -0
- package/dist/build/generate-route-types.d.ts.map +1 -0
- package/dist/build/generate-route-types.js +740 -0
- package/dist/build/generate-route-types.js.map +1 -0
- package/dist/build/index.d.ts +21 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +21 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/route-trie.d.ts +71 -0
- package/dist/build/route-trie.d.ts.map +1 -0
- package/dist/build/route-trie.js +175 -0
- package/dist/build/route-trie.js.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.js +208 -0
- package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
- package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
- package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
- package/dist/cache/__tests__/document-cache.test.js +345 -0
- package/dist/cache/__tests__/document-cache.test.js.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
- package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
- package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-store.test.js +367 -0
- package/dist/cache/__tests__/memory-store.test.js.map +1 -0
- package/dist/cache/cache-scope.d.ts +102 -0
- package/dist/cache/cache-scope.d.ts.map +1 -0
- package/dist/cache/cache-scope.js +440 -0
- package/dist/cache/cache-scope.js.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
- package/dist/cache/cf/cf-cache-store.d.ts +165 -0
- package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
- package/dist/cache/cf/cf-cache-store.js +242 -0
- package/dist/cache/cf/cf-cache-store.js.map +1 -0
- package/dist/cache/cf/index.d.ts +14 -0
- package/dist/cache/cf/index.d.ts.map +1 -0
- package/dist/cache/cf/index.js +17 -0
- package/dist/cache/cf/index.js.map +1 -0
- package/dist/cache/document-cache.d.ts +64 -0
- package/dist/cache/document-cache.d.ts.map +1 -0
- package/dist/cache/document-cache.js +228 -0
- package/dist/cache/document-cache.js.map +1 -0
- package/dist/cache/index.d.ts +19 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-segment-store.d.ts +110 -0
- package/dist/cache/memory-segment-store.d.ts.map +1 -0
- package/dist/cache/memory-segment-store.js +117 -0
- package/dist/cache/memory-segment-store.js.map +1 -0
- package/dist/cache/memory-store.d.ts +41 -0
- package/dist/cache/memory-store.d.ts.map +1 -0
- package/dist/cache/memory-store.js +191 -0
- package/dist/cache/memory-store.js.map +1 -0
- package/dist/cache/types.d.ts +317 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +12 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client.d.ts +248 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +367 -0
- package/dist/client.js.map +1 -0
- package/dist/client.rsc.d.ts +26 -0
- package/dist/client.rsc.d.ts.map +1 -0
- package/dist/client.rsc.js +46 -0
- package/dist/client.rsc.js.map +1 -0
- package/dist/component-utils.d.ts +36 -0
- package/dist/component-utils.d.ts.map +1 -0
- package/dist/component-utils.js +61 -0
- package/dist/component-utils.js.map +1 -0
- package/dist/components/DefaultDocument.d.ts +13 -0
- package/dist/components/DefaultDocument.d.ts.map +1 -0
- package/dist/components/DefaultDocument.js +15 -0
- package/dist/components/DefaultDocument.js.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +157 -0
- package/dist/debug.js.map +1 -0
- package/dist/default-error-boundary.d.ts +11 -0
- package/dist/default-error-boundary.d.ts.map +1 -0
- package/dist/default-error-boundary.js +45 -0
- package/dist/default-error-boundary.js.map +1 -0
- package/dist/deps/browser.d.ts +2 -0
- package/dist/deps/browser.d.ts.map +1 -0
- package/dist/deps/browser.js +3 -0
- package/dist/deps/browser.js.map +1 -0
- package/dist/deps/html-stream-client.d.ts +2 -0
- package/dist/deps/html-stream-client.d.ts.map +1 -0
- package/dist/deps/html-stream-client.js +3 -0
- package/dist/deps/html-stream-client.js.map +1 -0
- package/dist/deps/html-stream-server.d.ts +2 -0
- package/dist/deps/html-stream-server.d.ts.map +1 -0
- package/dist/deps/html-stream-server.js +3 -0
- package/dist/deps/html-stream-server.js.map +1 -0
- package/dist/deps/rsc.d.ts +2 -0
- package/dist/deps/rsc.d.ts.map +1 -0
- package/dist/deps/rsc.js +4 -0
- package/dist/deps/rsc.js.map +1 -0
- package/dist/deps/ssr.d.ts +2 -0
- package/dist/deps/ssr.d.ts.map +1 -0
- package/dist/deps/ssr.js +3 -0
- package/dist/deps/ssr.js.map +1 -0
- package/dist/errors.d.ts +174 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +241 -0
- package/dist/errors.js.map +1 -0
- package/dist/handle.d.ts +78 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +82 -0
- package/dist/handle.js.map +1 -0
- package/dist/handles/MetaTags.d.ts +14 -0
- package/dist/handles/MetaTags.d.ts.map +1 -0
- package/dist/handles/MetaTags.js +136 -0
- package/dist/handles/MetaTags.js.map +1 -0
- package/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 +5320 -834
- package/dist/vite/index.js.bak +5448 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/index.named-routes.gen.ts +103 -0
- package/dist/vite/package-resolution.d.ts +43 -0
- package/dist/vite/package-resolution.d.ts.map +1 -0
- package/dist/vite/package-resolution.js +112 -0
- package/dist/vite/package-resolution.js.map +1 -0
- package/dist/vite/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} +18 -17
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +92 -55
- package/skills/breadcrumbs/SKILL.md +252 -0
- package/skills/cache-guide/SKILL.md +294 -0
- package/skills/caching/SKILL.md +173 -231
- package/skills/composability/SKILL.md +172 -0
- package/skills/debug-manifest/SKILL.md +112 -0
- package/skills/document-cache/SKILL.md +88 -58
- package/skills/fonts/SKILL.md +167 -0
- package/skills/handler-use/SKILL.md +362 -0
- package/skills/hooks/SKILL.md +420 -67
- package/skills/host-router/SKILL.md +218 -0
- package/skills/intercept/SKILL.md +243 -202
- package/skills/layout/SKILL.md +262 -146
- package/skills/links/SKILL.md +313 -0
- package/skills/loader/SKILL.md +525 -251
- package/skills/middleware/SKILL.md +248 -320
- package/skills/migrate-nextjs/SKILL.md +560 -0
- package/skills/migrate-react-router/SKILL.md +765 -0
- package/skills/mime-routes/SKILL.md +128 -0
- package/skills/parallel/SKILL.md +393 -158
- package/skills/prerender/SKILL.md +685 -0
- package/skills/rango/SKILL.md +120 -0
- package/skills/response-routes/SKILL.md +419 -0
- package/skills/route/SKILL.md +388 -89
- package/skills/router-setup/SKILL.md +388 -267
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/tailwind/SKILL.md +129 -0
- package/skills/theme/SKILL.md +36 -11
- package/skills/typesafety/SKILL.md +456 -173
- package/skills/use-cache/SKILL.md +324 -0
- package/src/__internal.ts +273 -0
- package/src/bin/rango.ts +321 -0
- package/src/browser/action-coordinator.ts +97 -0
- package/src/browser/action-response-classifier.ts +99 -0
- package/src/browser/app-shell.ts +52 -0
- package/src/browser/app-version.ts +14 -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 +55 -0
- package/src/browser/merge-segment-loaders.ts +20 -12
- package/src/browser/navigation-bridge.ts +383 -557
- package/src/browser/navigation-client.ts +229 -68
- package/src/browser/navigation-store.ts +97 -55
- package/src/browser/navigation-transaction.ts +297 -0
- package/src/browser/network-error-handler.ts +61 -0
- package/src/browser/partial-update.ts +391 -304
- package/src/browser/prefetch/cache.ts +314 -0
- package/src/browser/prefetch/fetch.ts +282 -0
- package/src/browser/prefetch/observer.ts +65 -0
- package/src/browser/prefetch/policy.ts +48 -0
- package/src/browser/prefetch/queue.ts +191 -0
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/rango-state.ts +152 -0
- package/src/browser/react/Link.tsx +258 -74
- package/src/browser/react/NavigationProvider.tsx +219 -33
- package/src/browser/react/context.ts +11 -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 +37 -0
- 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 +30 -95
- package/src/browser/react/use-href.tsx +20 -188
- package/src/browser/react/use-link-status.ts +6 -5
- package/src/browser/react/use-mount.ts +31 -0
- package/src/browser/react/use-navigation.ts +49 -80
- package/src/browser/react/use-params.ts +75 -0
- package/src/browser/react/use-pathname.ts +47 -0
- package/src/browser/react/use-router.ts +83 -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 +251 -70
- package/src/browser/scroll-restoration.ts +127 -52
- package/src/browser/segment-reconciler.ts +243 -0
- package/src/browser/segment-structure-assert.ts +83 -0
- package/src/browser/server-action-bridge.ts +510 -588
- package/src/browser/shallow.ts +6 -1
- package/src/browser/types.ts +176 -58
- package/src/browser/validate-redirect-origin.ts +29 -0
- package/src/build/generate-manifest.ts +438 -0
- package/src/build/generate-route-types.ts +39 -0
- package/src/build/index.ts +35 -0
- package/src/build/route-trie.ts +291 -0
- 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 +418 -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 +618 -0
- package/src/build/route-types/scan-filter.ts +85 -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 +342 -0
- package/src/cache/cache-scope.ts +167 -309
- package/src/cache/cf/cf-cache-store.ts +573 -21
- 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 +153 -0
- package/src/cache/types.ts +76 -121
- package/src/client.rsc.tsx +12 -15
- package/src/client.tsx +142 -308
- package/src/component-utils.ts +4 -4
- package/src/components/DefaultDocument.tsx +6 -2
- package/src/context-var.ts +156 -0
- package/src/debug.ts +243 -0
- package/src/errors.ts +108 -2
- package/src/handle.ts +74 -19
- package/src/handles/MetaTags.tsx +76 -23
- package/src/handles/breadcrumbs.ts +66 -0
- package/src/handles/index.ts +1 -0
- package/src/handles/meta.ts +32 -15
- package/src/host/cookie-handler.ts +165 -0
- package/src/host/errors.ts +97 -0
- package/src/host/index.ts +53 -0
- package/src/host/pattern-matcher.ts +214 -0
- package/src/host/router.ts +352 -0
- package/src/host/testing.ts +79 -0
- package/src/host/types.ts +146 -0
- package/src/host/utils.ts +25 -0
- package/src/href-client.ts +141 -47
- package/src/index.rsc.ts +187 -28
- package/src/index.ts +271 -38
- package/src/internal-debug.ts +11 -0
- package/src/loader.rsc.ts +27 -142
- package/src/loader.ts +27 -10
- package/src/network-error-thrower.tsx +3 -1
- package/src/outlet-context.ts +1 -1
- package/src/outlet-provider.tsx +45 -0
- package/src/prerender/param-hash.ts +37 -0
- package/src/prerender/store.ts +186 -0
- package/src/prerender.ts +524 -0
- package/src/response-utils.ts +28 -0
- package/src/reverse.ts +355 -0
- package/src/root-error-boundary.tsx +41 -29
- package/src/route-content-wrapper.tsx +9 -11
- package/src/route-definition/dsl-helpers.ts +1134 -0
- package/src/route-definition/helper-factories.ts +200 -0
- package/src/route-definition/helpers-types.ts +478 -0
- package/src/route-definition/index.ts +55 -0
- package/src/route-definition/redirect.ts +101 -0
- package/src/route-definition/resolve-handler-use.ts +155 -0
- package/src/route-definition.ts +1 -1371
- package/src/route-map-builder.ts +247 -112
- package/src/route-name.ts +53 -0
- package/src/route-types.ts +88 -9
- package/src/router/content-negotiation.ts +215 -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 +457 -88
- package/src/router/intercept-resolution.ts +402 -0
- package/src/router/lazy-includes.ts +237 -0
- package/src/router/loader-resolution.ts +360 -128
- package/src/router/logging.ts +251 -0
- package/src/router/manifest.ts +187 -43
- package/src/router/match-api.ts +555 -0
- package/src/router/match-context.ts +6 -4
- package/src/router/match-handlers.ts +440 -0
- package/src/router/match-middleware/background-revalidation.ts +108 -93
- package/src/router/match-middleware/cache-lookup.ts +460 -10
- package/src/router/match-middleware/cache-store.ts +98 -26
- package/src/router/match-middleware/intercept-resolution.ts +57 -17
- package/src/router/match-middleware/segment-resolution.ts +80 -6
- package/src/router/match-pipelines.ts +10 -45
- package/src/router/match-result.ts +135 -36
- package/src/router/metrics.ts +240 -15
- package/src/router/middleware-cookies.ts +55 -0
- package/src/router/middleware-types.ts +200 -0
- package/src/router/middleware.ts +359 -333
- package/src/router/navigation-snapshot.ts +182 -0
- package/src/router/pattern-matching.ts +375 -33
- package/src/router/prerender-match.ts +502 -0
- package/src/router/preview-match.ts +98 -0
- package/src/router/request-classification.ts +310 -0
- package/src/router/revalidation.ts +137 -38
- package/src/router/route-snapshot.ts +245 -0
- package/src/router/router-context.ts +45 -23
- package/src/router/router-interfaces.ts +484 -0
- package/src/router/router-options.ts +618 -0
- package/src/router/router-registry.ts +24 -0
- package/src/router/segment-resolution/fresh.ts +748 -0
- package/src/router/segment-resolution/helpers.ts +268 -0
- package/src/router/segment-resolution/loader-cache.ts +199 -0
- package/src/router/segment-resolution/revalidation.ts +1379 -0
- package/src/router/segment-resolution/static-store.ts +67 -0
- package/src/router/segment-resolution.ts +21 -0
- 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 +245 -0
- package/src/router/types.ts +79 -4
- package/src/router/url-params.ts +49 -0
- package/src/router.ts +750 -3572
- package/src/rsc/handler-context.ts +45 -0
- package/src/rsc/handler.ts +934 -801
- package/src/rsc/helpers.ts +181 -19
- package/src/rsc/index.ts +5 -25
- package/src/rsc/loader-fetch.ts +229 -0
- package/src/rsc/manifest-init.ts +90 -0
- package/src/rsc/nonce.ts +14 -0
- package/src/rsc/origin-guard.ts +141 -0
- package/src/rsc/progressive-enhancement.ts +393 -0
- package/src/rsc/response-error.ts +37 -0
- package/src/rsc/response-route-handler.ts +360 -0
- package/src/rsc/rsc-rendering.ts +253 -0
- package/src/rsc/runtime-warnings.ts +42 -0
- package/src/rsc/server-action.ts +358 -0
- package/src/rsc/ssr-setup.ts +128 -0
- package/src/rsc/types.ts +48 -14
- package/src/search-params.ts +230 -0
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-loader-promise.ts +122 -0
- package/src/segment-system.tsx +165 -81
- package/src/server/context.ts +384 -61
- package/src/server/cookie-store.ts +190 -0
- package/src/server/fetchable-loader-store.ts +37 -0
- package/src/server/handle-store.ts +117 -20
- package/src/server/loader-registry.ts +24 -64
- package/src/server/request-context.ts +603 -109
- package/src/server.ts +36 -131
- package/src/ssr/index.tsx +160 -25
- package/src/static-handler.ts +126 -0
- package/src/theme/ThemeProvider.tsx +21 -15
- package/src/theme/ThemeScript.tsx +5 -5
- package/src/theme/constants.ts +11 -4
- package/src/theme/index.ts +4 -14
- package/src/theme/theme-context.ts +5 -31
- package/src/theme/theme-script.ts +21 -18
- package/src/theme/types.ts +1 -1
- 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 +759 -0
- package/src/types/index.ts +88 -0
- package/src/types/loader-types.ts +209 -0
- package/src/types/request-scope.ts +126 -0
- package/src/types/route-config.ts +170 -0
- package/src/types/route-entry.ts +120 -0
- package/src/types/segments.ts +150 -0
- package/src/types.ts +1 -1561
- package/src/urls/include-helper.ts +207 -0
- package/src/urls/index.ts +53 -0
- package/src/urls/path-helper-types.ts +372 -0
- package/src/urls/path-helper.ts +364 -0
- package/src/urls/pattern-types.ts +107 -0
- package/src/urls/response-types.ts +108 -0
- package/src/urls/type-extraction.ts +372 -0
- package/src/urls/urls-function.ts +98 -0
- package/src/urls.ts +1 -726
- package/src/use-loader.tsx +161 -81
- package/src/vite/discovery/bundle-postprocess.ts +181 -0
- package/src/vite/discovery/discover-routers.ts +348 -0
- package/src/vite/discovery/prerender-collection.ts +439 -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 +117 -0
- package/src/vite/discovery/virtual-module-codegen.ts +203 -0
- package/src/vite/index.ts +18 -785
- package/src/vite/plugin-types.ts +103 -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/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 +214 -0
- package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -53
- package/src/vite/plugins/expose-id-utils.ts +299 -0
- package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
- package/src/vite/plugins/expose-ids/handler-transform.ts +209 -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 +786 -0
- package/src/vite/plugins/performance-tracks.ts +88 -0
- package/src/vite/plugins/refresh-cmd.ts +127 -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 +483 -0
- package/src/vite/router-discovery.ts +977 -0
- package/src/vite/utils/ast-handler-extract.ts +517 -0
- 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} +58 -29
- package/src/vite/utils/prerender-utils.ts +221 -0
- package/src/vite/utils/shared-utils.ts +170 -0
- package/CLAUDE.md +0 -7
- package/src/__tests__/component-utils.test.ts +0 -76
- package/src/__tests__/route-definition.test.ts +0 -63
- package/src/__tests__/urls.test.tsx +0 -436
- package/src/browser/lru-cache.ts +0 -69
- package/src/browser/request-controller.ts +0 -164
- package/src/cache/__tests__/document-cache.test.ts +0 -522
- package/src/cache/__tests__/memory-segment-store.test.ts +0 -487
- package/src/cache/__tests__/memory-store.test.ts +0 -484
- package/src/cache/cf/__tests__/cf-cache-store.test.ts +0 -428
- package/src/cache/memory-store.ts +0 -253
- package/src/href.ts +0 -177
- package/src/route-utils.ts +0 -89
- package/src/router/__tests__/match-context.test.ts +0 -104
- package/src/router/__tests__/match-pipelines.test.ts +0 -537
- package/src/router/__tests__/match-result.test.ts +0 -566
- package/src/router/__tests__/on-error.test.ts +0 -935
- package/src/router/__tests__/pattern-matching.test.ts +0 -577
- package/src/router/middleware.test.ts +0 -1355
- package/src/rsc/__tests__/helpers.test.ts +0 -175
- package/src/server/__tests__/request-context.test.ts +0 -171
- package/src/ssr/__tests__/ssr-handler.test.tsx +0 -188
- package/src/theme/__tests__/theme.test.ts +0 -120
- package/src/vite/__tests__/expose-loader-id.test.ts +0 -117
- package/src/vite/expose-handle-id.ts +0 -209
- package/src/vite/expose-loader-id.ts +0 -357
- package/src/vite/expose-location-state-id.ts +0 -177
- /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
package/src/server/context.ts
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
2
|
import type { ReactNode } from "react";
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
PartialCacheOptions,
|
|
5
|
+
ErrorBoundaryHandler,
|
|
6
|
+
Handler,
|
|
7
|
+
LoaderDefinition,
|
|
8
|
+
MiddlewareFn,
|
|
9
|
+
NotFoundBoundaryHandler,
|
|
10
|
+
ShouldRevalidateFn,
|
|
11
|
+
TransitionConfig,
|
|
12
|
+
} from "../types";
|
|
4
13
|
import { invariant } from "../errors";
|
|
14
|
+
import type { DefaultRouteName } from "../types/global-namespace.js";
|
|
5
15
|
|
|
6
16
|
// ============================================================================
|
|
7
17
|
// Performance Metrics Types
|
|
@@ -9,15 +19,20 @@ import { invariant } from "../errors";
|
|
|
9
19
|
|
|
10
20
|
/**
|
|
11
21
|
* Performance metric entry for a single measured operation
|
|
22
|
+
*
|
|
23
|
+
* @internal This type is an implementation detail and may change without notice.
|
|
12
24
|
*/
|
|
13
25
|
export interface PerformanceMetric {
|
|
14
|
-
label: string;
|
|
15
|
-
duration: number;
|
|
16
|
-
startTime: number;
|
|
26
|
+
label: string; // e.g., "route-matching", "loader:UserLoader"
|
|
27
|
+
duration: number; // milliseconds
|
|
28
|
+
startTime: number; // relative to request start
|
|
29
|
+
depth?: number; // nesting level for hierarchical display (0 = top-level)
|
|
17
30
|
}
|
|
18
31
|
|
|
19
32
|
/**
|
|
20
33
|
* Request-scoped metrics store
|
|
34
|
+
*
|
|
35
|
+
* @internal This type is an implementation detail and may change without notice.
|
|
21
36
|
*/
|
|
22
37
|
export interface MetricsStore {
|
|
23
38
|
enabled: boolean;
|
|
@@ -32,6 +47,8 @@ export interface MetricsStore {
|
|
|
32
47
|
* Cache configuration for an entry
|
|
33
48
|
* When set, this entry and its children will use this cache config
|
|
34
49
|
* unless overridden by a nested cache() call.
|
|
50
|
+
*
|
|
51
|
+
* @internal This type is an implementation detail and may change without notice.
|
|
35
52
|
*/
|
|
36
53
|
export type EntryCacheConfig = {
|
|
37
54
|
/** Cache options (false means caching disabled for this entry) - ttl is optional, uses defaults */
|
|
@@ -40,6 +57,8 @@ export type EntryCacheConfig = {
|
|
|
40
57
|
|
|
41
58
|
/**
|
|
42
59
|
* Entry data structure for manifest
|
|
60
|
+
*
|
|
61
|
+
* @internal This type is an implementation detail and may change without notice.
|
|
43
62
|
*/
|
|
44
63
|
export type EntryPropCommon = {
|
|
45
64
|
id: string;
|
|
@@ -47,16 +66,25 @@ export type EntryPropCommon = {
|
|
|
47
66
|
parent: EntryData | null;
|
|
48
67
|
/** Cache configuration for this entry (set by cache() DSL) */
|
|
49
68
|
cache?: EntryCacheConfig;
|
|
69
|
+
/** URL prefix from include() scope, used for MountContext on client */
|
|
70
|
+
mountPath?: string;
|
|
50
71
|
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @internal This type is an implementation detail and may change without notice.
|
|
75
|
+
*/
|
|
51
76
|
export type EntryPropDatas = {
|
|
52
77
|
middleware: MiddlewareFn<any, any>[];
|
|
53
78
|
revalidate: ShouldRevalidateFn<any, any>[];
|
|
54
79
|
errorBoundary: (ReactNode | ErrorBoundaryHandler)[];
|
|
55
80
|
notFoundBoundary: (ReactNode | NotFoundBoundaryHandler)[];
|
|
56
81
|
};
|
|
82
|
+
|
|
57
83
|
/**
|
|
58
84
|
* Loader entry stored in EntryData
|
|
59
85
|
* Contains the loader definition and its revalidation rules
|
|
86
|
+
*
|
|
87
|
+
* @internal This type is an implementation detail and may change without notice.
|
|
60
88
|
*/
|
|
61
89
|
export type LoaderEntry = {
|
|
62
90
|
loader: LoaderDefinition<any>;
|
|
@@ -68,6 +96,8 @@ export type LoaderEntry = {
|
|
|
68
96
|
/**
|
|
69
97
|
* Segments state for intercept context
|
|
70
98
|
* Matches the structure from useSegments() for consistency
|
|
99
|
+
*
|
|
100
|
+
* @internal This type is an implementation detail and may change without notice.
|
|
71
101
|
*/
|
|
72
102
|
export type InterceptSegmentsState = {
|
|
73
103
|
/** URL path segments (e.g., /shop/products/123 → ["shop", "products", "123"]) */
|
|
@@ -82,80 +112,134 @@ export type InterceptSegmentsState = {
|
|
|
82
112
|
*
|
|
83
113
|
* Note: when() is evaluated during route matching, BEFORE middleware runs.
|
|
84
114
|
* So ctx.get()/ctx.use() are not available, but env (platform bindings) is.
|
|
115
|
+
*
|
|
116
|
+
* @internal This type is an implementation detail and may change without notice.
|
|
85
117
|
*/
|
|
86
118
|
export type InterceptSelectorContext<TEnv = any> = {
|
|
87
|
-
from: URL;
|
|
88
|
-
to: URL;
|
|
89
|
-
params: Record<string, string>;
|
|
90
|
-
request: Request;
|
|
91
|
-
env: TEnv;
|
|
92
|
-
segments: InterceptSegmentsState;
|
|
119
|
+
from: URL; // Source URL (where user is coming from)
|
|
120
|
+
to: URL; // Destination URL (where user is navigating to)
|
|
121
|
+
params: Record<string, string>; // Matched route params
|
|
122
|
+
request: Request; // The HTTP request object
|
|
123
|
+
env: TEnv; // Platform bindings (Cloudflare env, etc.)
|
|
124
|
+
segments: InterceptSegmentsState; // Client's current segments (where navigating FROM)
|
|
125
|
+
fromRouteName?: DefaultRouteName; // Named route being navigated away from (undefined for unnamed routes)
|
|
126
|
+
toRouteName?: DefaultRouteName; // Named route being navigated to (undefined for unnamed routes)
|
|
93
127
|
};
|
|
94
128
|
|
|
95
129
|
/**
|
|
96
130
|
* Selector function for conditional interception
|
|
97
131
|
* Returns true to intercept, false to skip and fall through to route handler
|
|
132
|
+
*
|
|
133
|
+
* @internal This type is an implementation detail and may change without notice.
|
|
98
134
|
*/
|
|
99
|
-
export type InterceptWhenFn<TEnv = any> = (
|
|
135
|
+
export type InterceptWhenFn<TEnv = any> = (
|
|
136
|
+
ctx: InterceptSelectorContext<TEnv>,
|
|
137
|
+
) => boolean;
|
|
100
138
|
|
|
101
139
|
/**
|
|
102
140
|
* Intercept entry stored in EntryData
|
|
103
141
|
* Contains the slot name, route to intercept, and handler
|
|
142
|
+
*
|
|
143
|
+
* @internal This type is an implementation detail and may change without notice.
|
|
104
144
|
*/
|
|
105
145
|
export type InterceptEntry = {
|
|
106
|
-
slotName: `@${string}`;
|
|
107
|
-
routeName: string;
|
|
108
|
-
handler: ReactNode | Handler<any, any>;
|
|
146
|
+
slotName: `@${string}`; // e.g., "@modal"
|
|
147
|
+
routeName: string; // e.g., "card"
|
|
148
|
+
handler: ReactNode | Handler<any, any, any>;
|
|
109
149
|
middleware: MiddlewareFn<any, any>[];
|
|
110
150
|
revalidate: ShouldRevalidateFn<any, any>[];
|
|
111
151
|
errorBoundary: (ReactNode | ErrorBoundaryHandler)[];
|
|
112
152
|
notFoundBoundary: (ReactNode | NotFoundBoundaryHandler)[];
|
|
113
153
|
loader: LoaderEntry[];
|
|
114
154
|
loading?: ReactNode | false;
|
|
115
|
-
|
|
116
|
-
|
|
155
|
+
transition?: TransitionConfig;
|
|
156
|
+
layout?: ReactNode | Handler<any, any, any>; // Wrapper layout with <Outlet /> for content
|
|
157
|
+
when: InterceptWhenFn[]; // Selector conditions - all must return true to intercept
|
|
117
158
|
};
|
|
118
159
|
|
|
160
|
+
export interface ParallelEntryData
|
|
161
|
+
extends EntryPropCommon, EntryPropDatas, EntryPropSegments {
|
|
162
|
+
type: "parallel";
|
|
163
|
+
handler: Record<`@${string}`, Handler<any, any, any> | ReactNode>;
|
|
164
|
+
loading?: ReactNode | false;
|
|
165
|
+
transition?: TransitionConfig;
|
|
166
|
+
/** Set when any parallel slot is a Static definition */
|
|
167
|
+
isStaticPrerender?: true;
|
|
168
|
+
/** Per-slot static handler $$ids for build-time store lookup */
|
|
169
|
+
staticHandlerIds?: Record<string, string>;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export type ParallelEntries = Partial<Record<`@${string}`, ParallelEntryData>>;
|
|
173
|
+
|
|
119
174
|
export type EntryPropSegments = {
|
|
120
175
|
loader: LoaderEntry[];
|
|
121
176
|
layout: EntryData[];
|
|
122
|
-
parallel:
|
|
177
|
+
parallel: ParallelEntries; // slot -> parallel entry (same entry may back multiple slots)
|
|
123
178
|
intercept: InterceptEntry[]; // intercept definitions for soft navigation
|
|
124
179
|
};
|
|
125
180
|
|
|
126
181
|
export type EntryData =
|
|
127
182
|
| ({
|
|
128
183
|
type: "route";
|
|
129
|
-
handler: Handler<any, any>;
|
|
184
|
+
handler: Handler<any, any, any>;
|
|
130
185
|
loading?: ReactNode | false;
|
|
186
|
+
transition?: TransitionConfig;
|
|
131
187
|
/** URL pattern for this route (used by path() in urls()) */
|
|
132
188
|
pattern?: string;
|
|
189
|
+
/** Set when handler is a Prerender definition */
|
|
190
|
+
isPrerender?: true;
|
|
191
|
+
/** Original PrerenderHandlerDefinition (for build-time getParams access) */
|
|
192
|
+
prerenderDef?: {
|
|
193
|
+
getParams?: (ctx: any) => Promise<any[]> | any[];
|
|
194
|
+
options?: { concurrency?: number };
|
|
195
|
+
};
|
|
196
|
+
/** Set when route is wrapped with Passthrough() — has a separate live handler */
|
|
197
|
+
isPassthrough?: true;
|
|
198
|
+
/** Live handler for runtime fallback (only set on Passthrough routes) */
|
|
199
|
+
liveHandler?: Handler<any, any, any>;
|
|
200
|
+
/** Set when handler is a Static definition (build-time only) */
|
|
201
|
+
isStaticPrerender?: true;
|
|
202
|
+
/** Static handler $$id for build-time store lookup */
|
|
203
|
+
staticHandlerId?: string;
|
|
204
|
+
/** Response type for non-RSC routes (json, text, image, any) */
|
|
205
|
+
responseType?: string;
|
|
133
206
|
} & EntryPropCommon &
|
|
134
207
|
EntryPropDatas &
|
|
135
208
|
EntryPropSegments)
|
|
136
209
|
| ({
|
|
137
210
|
type: "layout";
|
|
138
|
-
handler: ReactNode | Handler<any, any>;
|
|
139
|
-
loading?: ReactNode | false;
|
|
140
|
-
} & EntryPropCommon &
|
|
141
|
-
EntryPropDatas &
|
|
142
|
-
EntryPropSegments)
|
|
143
|
-
| ({
|
|
144
|
-
type: "parallel";
|
|
145
|
-
handler: Record<`@${string}`, Handler<any, any> | ReactNode>;
|
|
211
|
+
handler: ReactNode | Handler<any, any, any>;
|
|
146
212
|
loading?: ReactNode | false;
|
|
213
|
+
transition?: TransitionConfig;
|
|
214
|
+
/** Set when handler is a Static definition (build-time only) */
|
|
215
|
+
isStaticPrerender?: true;
|
|
216
|
+
/** Static handler $$id for build-time store lookup */
|
|
217
|
+
staticHandlerId?: string;
|
|
147
218
|
} & EntryPropCommon &
|
|
148
219
|
EntryPropDatas &
|
|
149
220
|
EntryPropSegments)
|
|
221
|
+
| ParallelEntryData
|
|
150
222
|
| ({
|
|
151
223
|
type: "cache";
|
|
152
224
|
/** Cache entries create cache boundaries and render like layouts (with Outlet) */
|
|
153
|
-
handler: ReactNode | Handler<any, any>;
|
|
225
|
+
handler: ReactNode | Handler<any, any, any>;
|
|
154
226
|
loading?: ReactNode | false;
|
|
227
|
+
transition?: TransitionConfig;
|
|
155
228
|
} & EntryPropCommon &
|
|
156
229
|
EntryPropDatas &
|
|
157
230
|
EntryPropSegments);
|
|
158
231
|
|
|
232
|
+
/**
|
|
233
|
+
* Tracked include info for build-time manifest generation
|
|
234
|
+
*/
|
|
235
|
+
export interface TrackedInclude {
|
|
236
|
+
prefix: string;
|
|
237
|
+
fullPrefix: string;
|
|
238
|
+
namePrefix?: string;
|
|
239
|
+
patterns: unknown; // UrlPatterns
|
|
240
|
+
lazy: boolean;
|
|
241
|
+
}
|
|
242
|
+
|
|
159
243
|
/**
|
|
160
244
|
* Context stored in AsyncLocalStorage
|
|
161
245
|
*/
|
|
@@ -171,17 +255,57 @@ interface HelperContext {
|
|
|
171
255
|
isSSR?: boolean;
|
|
172
256
|
/** URL patterns map for path() routes (route name -> pattern) */
|
|
173
257
|
patterns?: Map<string, string>;
|
|
258
|
+
/** URL patterns grouped by include prefix for separate entry creation */
|
|
259
|
+
patternsByPrefix?: Map<string, Map<string, string>>;
|
|
174
260
|
/** Trailing slash config per route name */
|
|
175
261
|
trailingSlash?: Map<string, "never" | "always" | "ignore">;
|
|
262
|
+
/** Search param schemas per route name */
|
|
263
|
+
searchSchemas?: Map<string, Record<string, string>>;
|
|
176
264
|
/** URL prefix from include() - applied to all path() patterns */
|
|
177
265
|
urlPrefix?: string;
|
|
178
266
|
/** Name prefix from include() - applied to all named routes */
|
|
179
267
|
namePrefix?: string;
|
|
268
|
+
/** True when this scope is at root level (no named include boundary above).
|
|
269
|
+
* Routes at root scope allow dot-local reverse to fall back to bare names. */
|
|
270
|
+
rootScoped?: boolean;
|
|
180
271
|
/** Run helper for cleaner middleware code */
|
|
181
272
|
run?: <T>(fn: () => T | Promise<T>) => T | Promise<T>;
|
|
273
|
+
/** Tracked includes for build-time manifest generation */
|
|
274
|
+
trackedIncludes?: TrackedInclude[];
|
|
275
|
+
/** Cache profiles for DSL-time cache("profileName") resolution */
|
|
276
|
+
cacheProfiles?: Record<
|
|
277
|
+
string,
|
|
278
|
+
import("../cache/profile-registry.js").CacheProfile
|
|
279
|
+
>;
|
|
280
|
+
/** True when resolving handlers inside a cache() DSL boundary.
|
|
281
|
+
* Read by ctx.get() to guard non-cacheable variable reads. */
|
|
282
|
+
insideCacheScope?: boolean;
|
|
283
|
+
/**
|
|
284
|
+
* Include scope string applied to direct-descendant shortCodes.
|
|
285
|
+
*
|
|
286
|
+
* Each `include(...)` call allocates a sibling-positional token like `I0`,
|
|
287
|
+
* `I1` from its parent's include counter and stores the composed scope
|
|
288
|
+
* (`${parentScope}I${idx}`) in its lazyContext. When the include's handler
|
|
289
|
+
* evaluates lazily, the store's `includeScope` is set from that context so
|
|
290
|
+
* every direct-descendant shortCode is generated as
|
|
291
|
+
* `${parent.shortCode}${includeScope}${prefix}${index}` — preventing
|
|
292
|
+
* collisions with siblings declared outside the include.
|
|
293
|
+
*
|
|
294
|
+
* The scope is NOT propagated through `store.run(...)`, so layouts /
|
|
295
|
+
* parallels / caches inside the include absorb the scope into their own
|
|
296
|
+
* shortCodes and their children start fresh.
|
|
297
|
+
*/
|
|
298
|
+
includeScope?: string;
|
|
182
299
|
}
|
|
183
|
-
|
|
184
|
-
|
|
300
|
+
// Use a global symbol key so the AsyncLocalStorage instance survives HMR
|
|
301
|
+
// module re-evaluation. Without this, Vite's RSC module runner may create
|
|
302
|
+
// a new instance when context.ts is re-evaluated, while other modules still
|
|
303
|
+
// hold references to the old instance — causing getStore() to return
|
|
304
|
+
// undefined even inside a run() callback.
|
|
305
|
+
const RSC_CONTEXT_KEY = Symbol.for("rangojs-router:rsc-context");
|
|
306
|
+
export const RSCRouterContext: AsyncLocalStorage<HelperContext> = ((
|
|
307
|
+
globalThis as any
|
|
308
|
+
)[RSC_CONTEXT_KEY] ??= new AsyncLocalStorage<HelperContext>());
|
|
185
309
|
|
|
186
310
|
export const getContext = (): {
|
|
187
311
|
context: AsyncLocalStorage<HelperContext>;
|
|
@@ -189,21 +313,21 @@ export const getContext = (): {
|
|
|
189
313
|
getParent: () => EntryData | null;
|
|
190
314
|
getOrCreateStore: (forRoute?: string) => HelperContext;
|
|
191
315
|
getNextIndex: (
|
|
192
|
-
type: (string & {}) | "layout" | "parallel" | "middleware" | "revalidate"
|
|
316
|
+
type: (string & {}) | "layout" | "parallel" | "middleware" | "revalidate",
|
|
193
317
|
) => string;
|
|
194
318
|
getShortCode: (
|
|
195
|
-
type: "layout" | "parallel" | "route" | "loader" | "cache"
|
|
319
|
+
type: "layout" | "parallel" | "route" | "loader" | "cache",
|
|
196
320
|
) => string;
|
|
197
321
|
run: <T>(
|
|
198
322
|
namespace: string,
|
|
199
323
|
parent: EntryData | null,
|
|
200
|
-
callback: (...args: any[]) => T
|
|
324
|
+
callback: (...args: any[]) => T,
|
|
201
325
|
) => T;
|
|
202
326
|
runWithStore: <T>(
|
|
203
327
|
store: HelperContext,
|
|
204
328
|
namespace: string,
|
|
205
329
|
parent: EntryData | null,
|
|
206
|
-
callback: (...args: any[]) => T
|
|
330
|
+
callback: (...args: any[]) => T,
|
|
207
331
|
) => T;
|
|
208
332
|
} => {
|
|
209
333
|
const context = RSCRouterContext;
|
|
@@ -220,7 +344,9 @@ export const getContext = (): {
|
|
|
220
344
|
forRoute,
|
|
221
345
|
counters: {},
|
|
222
346
|
patterns: new Map<string, string>(),
|
|
347
|
+
patternsByPrefix: new Map<string, Map<string, string>>(),
|
|
223
348
|
trailingSlash: new Map<string, "never" | "always" | "ignore">(),
|
|
349
|
+
searchSchemas: new Map<string, Record<string, string>>(),
|
|
224
350
|
} satisfies HelperContext;
|
|
225
351
|
}
|
|
226
352
|
return store;
|
|
@@ -229,7 +355,7 @@ export const getContext = (): {
|
|
|
229
355
|
const store = context.getStore();
|
|
230
356
|
if (!store) {
|
|
231
357
|
throw new Error(
|
|
232
|
-
"RSC Router context store is not available. Make sure to run within RSC Router context."
|
|
358
|
+
"RSC Router context store is not available. Make sure to run within RSC Router context.",
|
|
233
359
|
);
|
|
234
360
|
}
|
|
235
361
|
return store;
|
|
@@ -243,7 +369,7 @@ export const getContext = (): {
|
|
|
243
369
|
return store.parent;
|
|
244
370
|
},
|
|
245
371
|
getNextIndex: (
|
|
246
|
-
type: (string & {}) | "layout" | "parallel" | "middleware" | "revalidate"
|
|
372
|
+
type: (string & {}) | "layout" | "parallel" | "middleware" | "revalidate",
|
|
247
373
|
) => {
|
|
248
374
|
const store = context.getStore();
|
|
249
375
|
invariant(store, "No context RSCRouterContext available");
|
|
@@ -252,35 +378,55 @@ export const getContext = (): {
|
|
|
252
378
|
store.counters[type] = index + 1;
|
|
253
379
|
return `$${type}.${index}`;
|
|
254
380
|
},
|
|
255
|
-
getShortCode: (
|
|
381
|
+
getShortCode: (
|
|
382
|
+
type: "layout" | "parallel" | "route" | "loader" | "cache",
|
|
383
|
+
) => {
|
|
256
384
|
const store = context.getStore();
|
|
257
385
|
invariant(store, "No context RSCRouterContext available");
|
|
258
386
|
|
|
259
387
|
const parent = store.parent;
|
|
260
|
-
const prefix =
|
|
261
|
-
|
|
388
|
+
const prefix =
|
|
389
|
+
type === "layout"
|
|
390
|
+
? "L"
|
|
391
|
+
: type === "parallel"
|
|
392
|
+
? "P"
|
|
393
|
+
: type === "loader"
|
|
394
|
+
? "D"
|
|
395
|
+
: type === "cache"
|
|
396
|
+
? "C"
|
|
397
|
+
: "R";
|
|
398
|
+
const mountPrefix =
|
|
399
|
+
store.mountIndex !== undefined ? `M${store.mountIndex}` : "";
|
|
400
|
+
|
|
401
|
+
const includeScope = store.includeScope ?? "";
|
|
262
402
|
|
|
263
403
|
if (!parent) {
|
|
264
404
|
// Root entry: prefix with mount index and use mount-scoped counter
|
|
265
|
-
const counterKey = mountPrefix
|
|
405
|
+
const counterKey = mountPrefix
|
|
406
|
+
? `${mountPrefix}_root_${type}`
|
|
407
|
+
: `root_${type}`;
|
|
266
408
|
store.counters[counterKey] ??= 0;
|
|
267
409
|
const index = store.counters[counterKey];
|
|
268
410
|
store.counters[counterKey] = index + 1;
|
|
269
411
|
return `${mountPrefix}${prefix}${index}`;
|
|
270
412
|
} else {
|
|
271
|
-
// Child entry: use parent-scoped counter
|
|
272
|
-
|
|
413
|
+
// Child entry: use parent-scoped counter with includeScope appended.
|
|
414
|
+
// When we're evaluating a lazy include's direct children, includeScope
|
|
415
|
+
// is a per-include token like "I0" / "I1I0" that partitions the
|
|
416
|
+
// parent's counter namespace so routes inside one include cannot
|
|
417
|
+
// collide with siblings declared outside it.
|
|
418
|
+
const counterKey = `${parent.shortCode}${includeScope}_${type}`;
|
|
273
419
|
store.counters[counterKey] ??= 0;
|
|
274
420
|
const index = store.counters[counterKey];
|
|
275
421
|
store.counters[counterKey] = index + 1;
|
|
276
|
-
return `${parent.shortCode}${prefix}${index}`;
|
|
422
|
+
return `${parent.shortCode}${includeScope}${prefix}${index}`;
|
|
277
423
|
}
|
|
278
424
|
},
|
|
279
425
|
runWithStore: <T>(
|
|
280
426
|
store: HelperContext,
|
|
281
427
|
namespace: string,
|
|
282
428
|
parent: EntryData | null,
|
|
283
|
-
callback: (...args: any[]) => T
|
|
429
|
+
callback: (...args: any[]) => T,
|
|
284
430
|
): T => {
|
|
285
431
|
return context.run(
|
|
286
432
|
{
|
|
@@ -294,23 +440,33 @@ export const getContext = (): {
|
|
|
294
440
|
isSSR: store.isSSR,
|
|
295
441
|
patterns: store.patterns,
|
|
296
442
|
trailingSlash: store.trailingSlash,
|
|
443
|
+
searchSchemas: store.searchSchemas,
|
|
297
444
|
urlPrefix: store.urlPrefix,
|
|
298
445
|
namePrefix: store.namePrefix,
|
|
446
|
+
rootScoped: store.rootScoped,
|
|
447
|
+
trackedIncludes: store.trackedIncludes,
|
|
448
|
+
cacheProfiles: store.cacheProfiles,
|
|
449
|
+
includeScope: store.includeScope,
|
|
299
450
|
},
|
|
300
|
-
callback
|
|
451
|
+
callback,
|
|
301
452
|
);
|
|
302
453
|
},
|
|
303
454
|
run: <T>(
|
|
304
455
|
namespace: string,
|
|
305
456
|
parent: EntryData | null,
|
|
306
|
-
callback: (...args: any[]) => T
|
|
457
|
+
callback: (...args: any[]) => T,
|
|
307
458
|
) => {
|
|
308
459
|
const store = context.getStore();
|
|
309
460
|
// Preserve parent counters to ensure globally unique shortCodes
|
|
310
461
|
const counters = store?.counters || {};
|
|
311
462
|
const manifest = store ? store.manifest : new Map<string, EntryData>();
|
|
312
463
|
const patterns = store?.patterns || new Map<string, string>();
|
|
313
|
-
const
|
|
464
|
+
const patternsByPrefix = store?.patternsByPrefix;
|
|
465
|
+
const trailingSlash =
|
|
466
|
+
store?.trailingSlash ||
|
|
467
|
+
new Map<string, "never" | "always" | "ignore">();
|
|
468
|
+
const searchSchemas =
|
|
469
|
+
store?.searchSchemas || new Map<string, Record<string, string>>();
|
|
314
470
|
return context.run(
|
|
315
471
|
{
|
|
316
472
|
manifest,
|
|
@@ -322,11 +478,16 @@ export const getContext = (): {
|
|
|
322
478
|
metrics: store?.metrics,
|
|
323
479
|
isSSR: store?.isSSR,
|
|
324
480
|
patterns,
|
|
481
|
+
patternsByPrefix,
|
|
325
482
|
trailingSlash,
|
|
483
|
+
searchSchemas,
|
|
326
484
|
urlPrefix: store?.urlPrefix,
|
|
327
485
|
namePrefix: store?.namePrefix,
|
|
486
|
+
rootScoped: store?.rootScoped,
|
|
487
|
+
trackedIncludes: store?.trackedIncludes,
|
|
488
|
+
cacheProfiles: store?.cacheProfiles,
|
|
328
489
|
},
|
|
329
|
-
callback
|
|
490
|
+
callback,
|
|
330
491
|
);
|
|
331
492
|
},
|
|
332
493
|
};
|
|
@@ -339,30 +500,61 @@ export const getContext = (): {
|
|
|
339
500
|
export function runWithPrefixes<T>(
|
|
340
501
|
urlPrefix: string,
|
|
341
502
|
namePrefix: string | undefined,
|
|
342
|
-
callback: () => T
|
|
503
|
+
callback: () => T,
|
|
343
504
|
): T {
|
|
344
505
|
const store = RSCRouterContext.getStore();
|
|
345
506
|
if (!store) {
|
|
346
507
|
throw new Error("runWithPrefixes must be called within router context");
|
|
347
508
|
}
|
|
348
509
|
|
|
349
|
-
// Combine prefixes if there are existing ones
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
510
|
+
// Combine prefixes if there are existing ones, avoiding double slashes
|
|
511
|
+
let combinedUrlPrefix: string;
|
|
512
|
+
if (store.urlPrefix) {
|
|
513
|
+
if (store.urlPrefix.endsWith("/") && urlPrefix.startsWith("/")) {
|
|
514
|
+
combinedUrlPrefix = store.urlPrefix + urlPrefix.slice(1);
|
|
515
|
+
} else {
|
|
516
|
+
combinedUrlPrefix = store.urlPrefix + urlPrefix;
|
|
517
|
+
}
|
|
518
|
+
} else {
|
|
519
|
+
combinedUrlPrefix = urlPrefix;
|
|
520
|
+
}
|
|
521
|
+
const combinedNamePrefix =
|
|
522
|
+
namePrefix !== undefined
|
|
523
|
+
? namePrefix === ""
|
|
524
|
+
? store.namePrefix
|
|
525
|
+
: store.namePrefix
|
|
526
|
+
? `${store.namePrefix}.${namePrefix}`
|
|
527
|
+
: namePrefix
|
|
528
|
+
: store.namePrefix;
|
|
529
|
+
|
|
530
|
+
// Track root scope for dot-local reverse resolution.
|
|
531
|
+
//
|
|
532
|
+
// The flag answers: "can this route reach bare names at root scope?"
|
|
533
|
+
// It propagates through the include chain:
|
|
534
|
+
//
|
|
535
|
+
// { name: "" } — transparent: inherit parent, default true
|
|
536
|
+
// { name: "foo" } — inherit parent if already set, else create boundary (false)
|
|
537
|
+
// no name — inherit parent unchanged
|
|
538
|
+
//
|
|
539
|
+
// This means { name: "" } + nested { name: "sub" } keeps rootScoped=true
|
|
540
|
+
// (the outer transparent include establishes root access, and the inner
|
|
541
|
+
// named include inherits it). But a direct { name: "sub" } at root gets
|
|
542
|
+
// rootScoped=false (no prior root-access grant, so it creates a boundary).
|
|
543
|
+
const combinedRootScoped =
|
|
544
|
+
namePrefix === ""
|
|
545
|
+
? (store.rootScoped ?? true)
|
|
546
|
+
: namePrefix !== undefined
|
|
547
|
+
? (store.rootScoped ?? false)
|
|
548
|
+
: store.rootScoped;
|
|
358
549
|
|
|
359
550
|
return RSCRouterContext.run(
|
|
360
551
|
{
|
|
361
552
|
...store,
|
|
362
553
|
urlPrefix: combinedUrlPrefix,
|
|
363
554
|
namePrefix: combinedNamePrefix,
|
|
555
|
+
rootScoped: combinedRootScoped,
|
|
364
556
|
},
|
|
365
|
-
callback
|
|
557
|
+
callback,
|
|
366
558
|
);
|
|
367
559
|
}
|
|
368
560
|
|
|
@@ -382,9 +574,92 @@ export function getNamePrefix(): string | undefined {
|
|
|
382
574
|
return store?.namePrefix;
|
|
383
575
|
}
|
|
384
576
|
|
|
577
|
+
/**
|
|
578
|
+
* Get whether the current scope is at root level (no named include boundary above).
|
|
579
|
+
* Returns true at root or inside { name: "" } includes, false inside named includes.
|
|
580
|
+
*/
|
|
581
|
+
export function getRootScoped(): boolean {
|
|
582
|
+
const store = RSCRouterContext.getStore();
|
|
583
|
+
return store?.rootScoped ?? true;
|
|
584
|
+
}
|
|
585
|
+
|
|
385
586
|
// Export HelperContext type for use in other modules
|
|
386
587
|
export type { HelperContext };
|
|
387
588
|
|
|
589
|
+
/**
|
|
590
|
+
* Return an isolated copy of a lazy include's captured parent entry.
|
|
591
|
+
*
|
|
592
|
+
* DSL helpers (loader(), middleware(), etc.) mutate ctx.parent in place.
|
|
593
|
+
* Multiple include() scopes capture the *same* syntheticMapRoot as their
|
|
594
|
+
* parent, so without isolation one include's loaders/middleware leak into
|
|
595
|
+
* every other route that shares that root.
|
|
596
|
+
*
|
|
597
|
+
* The clone is shallow: only the mutable arrays are copied so each
|
|
598
|
+
* include pushes to its own list. The rest of the entry (id, shortCode,
|
|
599
|
+
* parent pointer, handler) stays shared, which is correct and cheap.
|
|
600
|
+
*/
|
|
601
|
+
export function getIsolatedLazyParent(
|
|
602
|
+
captured: EntryData | null | undefined,
|
|
603
|
+
): EntryData | null {
|
|
604
|
+
if (!captured) return null;
|
|
605
|
+
return {
|
|
606
|
+
...captured,
|
|
607
|
+
loader: [...captured.loader],
|
|
608
|
+
middleware: [...captured.middleware],
|
|
609
|
+
revalidate: [...captured.revalidate],
|
|
610
|
+
errorBoundary: [...captured.errorBoundary],
|
|
611
|
+
notFoundBoundary: [...captured.notFoundBoundary],
|
|
612
|
+
layout: [...captured.layout],
|
|
613
|
+
parallel: { ...captured.parallel },
|
|
614
|
+
intercept: [...captured.intercept],
|
|
615
|
+
};
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
export function getParallelEntries(
|
|
619
|
+
parallels: ParallelEntries | EntryData[] | undefined,
|
|
620
|
+
): ParallelEntryData[] {
|
|
621
|
+
if (!parallels) return [];
|
|
622
|
+
if (Array.isArray(parallels)) {
|
|
623
|
+
return parallels.filter(
|
|
624
|
+
(entry): entry is ParallelEntryData => entry.type === "parallel",
|
|
625
|
+
);
|
|
626
|
+
}
|
|
627
|
+
return Object.values(parallels).filter(
|
|
628
|
+
(entry): entry is ParallelEntryData => !!entry,
|
|
629
|
+
);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
export function getParallelSlotEntries(
|
|
633
|
+
parallels: ParallelEntries | EntryData[] | undefined,
|
|
634
|
+
): Array<{ slot: `@${string}`; entry: ParallelEntryData }> {
|
|
635
|
+
if (!parallels) return [];
|
|
636
|
+
|
|
637
|
+
if (Array.isArray(parallels)) {
|
|
638
|
+
return getParallelEntries(parallels).flatMap((entry) =>
|
|
639
|
+
(Object.keys(entry.handler) as `@${string}`[]).map((slot) => ({
|
|
640
|
+
slot,
|
|
641
|
+
entry,
|
|
642
|
+
})),
|
|
643
|
+
);
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
return Object.entries(parallels)
|
|
647
|
+
.filter(([, entry]) => !!entry)
|
|
648
|
+
.map(([slot, entry]) => ({
|
|
649
|
+
slot: slot as `@${string}`,
|
|
650
|
+
entry: entry!,
|
|
651
|
+
}));
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
export function getParallelSlotCount(
|
|
655
|
+
parallels: ParallelEntries | EntryData[] | undefined,
|
|
656
|
+
): number {
|
|
657
|
+
if (!parallels) return 0;
|
|
658
|
+
return Array.isArray(parallels)
|
|
659
|
+
? parallels.filter((entry) => entry?.type === "parallel").length
|
|
660
|
+
: Object.keys(parallels).length;
|
|
661
|
+
}
|
|
662
|
+
|
|
388
663
|
// ============================================================================
|
|
389
664
|
// Performance Metrics Helpers
|
|
390
665
|
// ============================================================================
|
|
@@ -400,7 +675,7 @@ export type { HelperContext };
|
|
|
400
675
|
* done(); // Records duration
|
|
401
676
|
* ```
|
|
402
677
|
*/
|
|
403
|
-
export function track(label: string): () => void {
|
|
678
|
+
export function track(label: string, depth?: number): () => void {
|
|
404
679
|
const store = RSCRouterContext.getStore();
|
|
405
680
|
|
|
406
681
|
// No-op if context unavailable or metrics not enabled
|
|
@@ -411,7 +686,55 @@ export function track(label: string): () => void {
|
|
|
411
686
|
const startTime = performance.now() - store.metrics.requestStart;
|
|
412
687
|
|
|
413
688
|
return () => {
|
|
414
|
-
const duration =
|
|
415
|
-
|
|
689
|
+
const duration =
|
|
690
|
+
performance.now() - store.metrics!.requestStart - startTime;
|
|
691
|
+
store.metrics!.metrics.push({
|
|
692
|
+
label,
|
|
693
|
+
duration,
|
|
694
|
+
startTime,
|
|
695
|
+
...(depth != null ? { depth } : {}),
|
|
696
|
+
});
|
|
416
697
|
};
|
|
417
698
|
}
|
|
699
|
+
|
|
700
|
+
/**
|
|
701
|
+
* Separate ALS for tracking loader execution scope.
|
|
702
|
+
* Uses a dedicated ALS (not RSCRouterContext) to avoid issues with
|
|
703
|
+
* nested RSCRouterContext.run() calls in Vite's module runner.
|
|
704
|
+
*/
|
|
705
|
+
const LOADER_SCOPE_KEY = Symbol.for("rangojs-router:loader-scope");
|
|
706
|
+
const loaderScopeALS: AsyncLocalStorage<{ active: true }> = ((
|
|
707
|
+
globalThis as any
|
|
708
|
+
)[LOADER_SCOPE_KEY] ??= new AsyncLocalStorage<{ active: true }>());
|
|
709
|
+
|
|
710
|
+
/**
|
|
711
|
+
* Check if the current execution is inside a cache() DSL boundary.
|
|
712
|
+
* Returns false inside loader execution — loaders are always fresh
|
|
713
|
+
* (never cached), so non-cacheable reads are safe.
|
|
714
|
+
*/
|
|
715
|
+
export function isInsideCacheScope(): boolean {
|
|
716
|
+
if (RSCRouterContext.getStore()?.insideCacheScope !== true) return false;
|
|
717
|
+
// Loaders are always fresh — even inside a cache() boundary, the loader
|
|
718
|
+
// function re-executes on every request. Skip the guard when running
|
|
719
|
+
// inside a loader.
|
|
720
|
+
if (loaderScopeALS.getStore()?.active) return false;
|
|
721
|
+
return true;
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
/**
|
|
725
|
+
* Check if the current execution is inside a DSL loader scope
|
|
726
|
+
* (wrapped by runInsideLoaderScope). Used by rendered() barrier
|
|
727
|
+
* to distinguish DSL loaders from handler-invoked loaders.
|
|
728
|
+
*/
|
|
729
|
+
export function isInsideLoaderScope(): boolean {
|
|
730
|
+
return loaderScopeALS.getStore()?.active === true;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
/**
|
|
734
|
+
* Run `fn` inside a loader scope. While active, cache-scope guards
|
|
735
|
+
* are bypassed because loaders are always fresh (never cached) and
|
|
736
|
+
* their side effects (setCookie, header, etc.) are safe.
|
|
737
|
+
*/
|
|
738
|
+
export function runInsideLoaderScope<T>(fn: () => T): T {
|
|
739
|
+
return loaderScopeALS.run({ active: true }, fn);
|
|
740
|
+
}
|