@rangojs/router 0.0.0-experimental.dfdb0387 → 0.0.0-experimental.e9c0b2f2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +8 -0
- package/README.md +184 -31
- 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 +339 -106
- package/dist/bin/rango.js.map +1 -0
- package/dist/browser/event-controller.d.ts +191 -0
- package/dist/browser/event-controller.d.ts.map +1 -0
- package/dist/browser/event-controller.js +559 -0
- package/dist/browser/event-controller.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/link-interceptor.d.ts +38 -0
- package/dist/browser/link-interceptor.d.ts.map +1 -0
- package/dist/browser/link-interceptor.js +99 -0
- package/dist/browser/link-interceptor.js.map +1 -0
- package/dist/browser/logging.d.ts +10 -0
- package/dist/browser/logging.d.ts.map +1 -0
- package/dist/browser/logging.js +29 -0
- package/dist/browser/logging.js.map +1 -0
- package/dist/browser/lru-cache.d.ts +17 -0
- package/dist/browser/lru-cache.d.ts.map +1 -0
- package/dist/browser/lru-cache.js +50 -0
- package/dist/browser/lru-cache.js.map +1 -0
- package/dist/browser/merge-segment-loaders.d.ts +39 -0
- package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
- package/dist/browser/merge-segment-loaders.js +102 -0
- package/dist/browser/merge-segment-loaders.js.map +1 -0
- package/dist/browser/navigation-bridge.d.ts +102 -0
- package/dist/browser/navigation-bridge.d.ts.map +1 -0
- package/dist/browser/navigation-bridge.js +708 -0
- package/dist/browser/navigation-bridge.js.map +1 -0
- package/dist/browser/navigation-client.d.ts +25 -0
- package/dist/browser/navigation-client.d.ts.map +1 -0
- package/dist/browser/navigation-client.js +157 -0
- package/dist/browser/navigation-client.js.map +1 -0
- package/dist/browser/navigation-store.d.ts +101 -0
- package/dist/browser/navigation-store.d.ts.map +1 -0
- package/dist/browser/navigation-store.js +625 -0
- package/dist/browser/navigation-store.js.map +1 -0
- package/dist/browser/partial-update.d.ts +75 -0
- package/dist/browser/partial-update.d.ts.map +1 -0
- package/dist/browser/partial-update.js +426 -0
- package/dist/browser/partial-update.js.map +1 -0
- package/dist/browser/react/Link.d.ts +86 -0
- package/dist/browser/react/Link.d.ts.map +1 -0
- package/dist/browser/react/Link.js +128 -0
- package/dist/browser/react/Link.js.map +1 -0
- package/dist/browser/react/NavigationProvider.d.ts +63 -0
- package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
- package/dist/browser/react/NavigationProvider.js +216 -0
- package/dist/browser/react/NavigationProvider.js.map +1 -0
- package/dist/browser/react/ScrollRestoration.d.ts +75 -0
- package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
- package/dist/browser/react/ScrollRestoration.js +57 -0
- package/dist/browser/react/ScrollRestoration.js.map +1 -0
- package/dist/browser/react/context.d.ts +46 -0
- package/dist/browser/react/context.d.ts.map +1 -0
- package/dist/browser/react/context.js +10 -0
- package/dist/browser/react/context.js.map +1 -0
- package/dist/browser/react/index.d.ts +11 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/index.js +22 -0
- package/dist/browser/react/index.js.map +1 -0
- package/dist/browser/react/location-state-shared.d.ts +63 -0
- package/dist/browser/react/location-state-shared.d.ts.map +1 -0
- package/dist/browser/react/location-state-shared.js +81 -0
- package/dist/browser/react/location-state-shared.js.map +1 -0
- package/dist/browser/react/location-state.d.ts +23 -0
- package/dist/browser/react/location-state.d.ts.map +1 -0
- package/dist/browser/react/location-state.js +29 -0
- package/dist/browser/react/location-state.js.map +1 -0
- package/dist/browser/react/mount-context.d.ts +24 -0
- package/dist/browser/react/mount-context.d.ts.map +1 -0
- package/dist/browser/react/mount-context.js +24 -0
- package/dist/browser/react/mount-context.js.map +1 -0
- package/dist/browser/react/use-action.d.ts +64 -0
- package/dist/browser/react/use-action.d.ts.map +1 -0
- package/dist/browser/react/use-action.js +134 -0
- package/dist/browser/react/use-action.js.map +1 -0
- package/dist/browser/react/use-client-cache.d.ts +41 -0
- package/dist/browser/react/use-client-cache.d.ts.map +1 -0
- package/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
- package/dist/browser/react/use-client-cache.js.map +1 -0
- package/dist/browser/react/use-handle.d.ts +31 -0
- package/dist/browser/react/use-handle.d.ts.map +1 -0
- package/dist/browser/react/use-handle.js +144 -0
- package/dist/browser/react/use-handle.js.map +1 -0
- package/dist/browser/react/use-href.d.ts +33 -0
- package/dist/browser/react/use-href.d.ts.map +1 -0
- package/dist/browser/react/use-href.js +39 -0
- package/dist/browser/react/use-href.js.map +1 -0
- package/dist/browser/react/use-link-status.d.ts +37 -0
- package/dist/browser/react/use-link-status.d.ts.map +1 -0
- package/dist/browser/react/use-link-status.js +99 -0
- package/dist/browser/react/use-link-status.js.map +1 -0
- package/dist/browser/react/use-mount.d.ts +25 -0
- package/dist/browser/react/use-mount.d.ts.map +1 -0
- package/dist/browser/react/use-mount.js +30 -0
- package/dist/browser/react/use-mount.js.map +1 -0
- package/dist/browser/react/use-navigation.d.ts +27 -0
- package/dist/browser/react/use-navigation.d.ts.map +1 -0
- package/dist/browser/react/use-navigation.js +87 -0
- package/dist/browser/react/use-navigation.js.map +1 -0
- package/dist/browser/react/use-segments.d.ts +38 -0
- package/dist/browser/react/use-segments.d.ts.map +1 -0
- package/dist/browser/react/use-segments.js +130 -0
- package/dist/browser/react/use-segments.js.map +1 -0
- package/dist/browser/request-controller.d.ts +26 -0
- package/dist/browser/request-controller.d.ts.map +1 -0
- package/dist/browser/request-controller.js +147 -0
- package/dist/browser/request-controller.js.map +1 -0
- package/dist/browser/rsc-router.d.ts +129 -0
- package/dist/browser/rsc-router.d.ts.map +1 -0
- package/dist/browser/rsc-router.js +195 -0
- package/dist/browser/rsc-router.js.map +1 -0
- package/dist/browser/scroll-restoration.d.ts +93 -0
- package/dist/browser/scroll-restoration.d.ts.map +1 -0
- package/dist/browser/scroll-restoration.js +321 -0
- package/dist/browser/scroll-restoration.js.map +1 -0
- package/dist/browser/segment-structure-assert.d.ts +17 -0
- package/dist/browser/segment-structure-assert.d.ts.map +1 -0
- package/dist/browser/segment-structure-assert.js +59 -0
- package/dist/browser/segment-structure-assert.js.map +1 -0
- package/dist/browser/server-action-bridge.d.ts +26 -0
- package/dist/browser/server-action-bridge.d.ts.map +1 -0
- package/dist/browser/server-action-bridge.js +668 -0
- package/dist/browser/server-action-bridge.js.map +1 -0
- package/dist/browser/shallow.d.ts +12 -0
- package/dist/browser/shallow.d.ts.map +1 -0
- package/dist/browser/shallow.js +34 -0
- package/dist/browser/shallow.js.map +1 -0
- package/dist/browser/types.d.ts +369 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
- package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-cli.test.js +237 -0
- package/dist/build/__tests__/generate-cli.test.js.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.js +119 -0
- package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.js +620 -0
- package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.js +308 -0
- package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +81 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +276 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/build/generate-route-types.d.ts +115 -0
- package/dist/build/generate-route-types.d.ts.map +1 -0
- package/dist/build/generate-route-types.js +740 -0
- package/dist/build/generate-route-types.js.map +1 -0
- package/dist/build/index.d.ts +21 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +21 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/route-trie.d.ts +71 -0
- package/dist/build/route-trie.d.ts.map +1 -0
- package/dist/build/route-trie.js +175 -0
- package/dist/build/route-trie.js.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.js +208 -0
- package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
- package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
- package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
- package/dist/cache/__tests__/document-cache.test.js +345 -0
- package/dist/cache/__tests__/document-cache.test.js.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
- package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
- package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-store.test.js +367 -0
- package/dist/cache/__tests__/memory-store.test.js.map +1 -0
- package/dist/cache/cache-scope.d.ts +102 -0
- package/dist/cache/cache-scope.d.ts.map +1 -0
- package/dist/cache/cache-scope.js +440 -0
- package/dist/cache/cache-scope.js.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
- package/dist/cache/cf/cf-cache-store.d.ts +165 -0
- package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
- package/dist/cache/cf/cf-cache-store.js +242 -0
- package/dist/cache/cf/cf-cache-store.js.map +1 -0
- package/dist/cache/cf/index.d.ts +14 -0
- package/dist/cache/cf/index.d.ts.map +1 -0
- package/dist/cache/cf/index.js +17 -0
- package/dist/cache/cf/index.js.map +1 -0
- package/dist/cache/document-cache.d.ts +64 -0
- package/dist/cache/document-cache.d.ts.map +1 -0
- package/dist/cache/document-cache.js +228 -0
- package/dist/cache/document-cache.js.map +1 -0
- package/dist/cache/index.d.ts +19 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-segment-store.d.ts +110 -0
- package/dist/cache/memory-segment-store.d.ts.map +1 -0
- package/dist/cache/memory-segment-store.js +117 -0
- package/dist/cache/memory-segment-store.js.map +1 -0
- package/dist/cache/memory-store.d.ts +41 -0
- package/dist/cache/memory-store.d.ts.map +1 -0
- package/dist/cache/memory-store.js +191 -0
- package/dist/cache/memory-store.js.map +1 -0
- package/dist/cache/types.d.ts +317 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +12 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client.d.ts +248 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +367 -0
- package/dist/client.js.map +1 -0
- package/dist/client.rsc.d.ts +26 -0
- package/dist/client.rsc.d.ts.map +1 -0
- package/dist/client.rsc.js +46 -0
- package/dist/client.rsc.js.map +1 -0
- package/dist/component-utils.d.ts +36 -0
- package/dist/component-utils.d.ts.map +1 -0
- package/dist/component-utils.js +61 -0
- package/dist/component-utils.js.map +1 -0
- package/dist/components/DefaultDocument.d.ts +13 -0
- package/dist/components/DefaultDocument.d.ts.map +1 -0
- package/dist/components/DefaultDocument.js +15 -0
- package/dist/components/DefaultDocument.js.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +157 -0
- package/dist/debug.js.map +1 -0
- package/dist/default-error-boundary.d.ts +11 -0
- package/dist/default-error-boundary.d.ts.map +1 -0
- package/dist/default-error-boundary.js +45 -0
- package/dist/default-error-boundary.js.map +1 -0
- package/dist/deps/browser.d.ts +2 -0
- package/dist/deps/browser.d.ts.map +1 -0
- package/dist/deps/browser.js +3 -0
- package/dist/deps/browser.js.map +1 -0
- package/dist/deps/html-stream-client.d.ts +2 -0
- package/dist/deps/html-stream-client.d.ts.map +1 -0
- package/dist/deps/html-stream-client.js +3 -0
- package/dist/deps/html-stream-client.js.map +1 -0
- package/dist/deps/html-stream-server.d.ts +2 -0
- package/dist/deps/html-stream-server.d.ts.map +1 -0
- package/dist/deps/html-stream-server.js +3 -0
- package/dist/deps/html-stream-server.js.map +1 -0
- package/dist/deps/rsc.d.ts +2 -0
- package/dist/deps/rsc.d.ts.map +1 -0
- package/dist/deps/rsc.js +4 -0
- package/dist/deps/rsc.js.map +1 -0
- package/dist/deps/ssr.d.ts +2 -0
- package/dist/deps/ssr.d.ts.map +1 -0
- package/dist/deps/ssr.js +3 -0
- package/dist/deps/ssr.js.map +1 -0
- package/dist/errors.d.ts +174 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +241 -0
- package/dist/errors.js.map +1 -0
- package/dist/handle.d.ts +78 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +82 -0
- package/dist/handle.js.map +1 -0
- package/dist/handles/MetaTags.d.ts +14 -0
- package/dist/handles/MetaTags.d.ts.map +1 -0
- package/dist/handles/MetaTags.js +136 -0
- package/dist/handles/MetaTags.js.map +1 -0
- package/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
- package/dist/handles/index.d.ts.map +1 -0
- package/dist/handles/index.js +6 -0
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/dist/href-context.d.ts +29 -0
- package/dist/href-context.d.ts.map +1 -0
- package/dist/href-context.js +21 -0
- package/dist/href-context.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.rsc.d.ts +32 -0
- package/dist/index.rsc.d.ts.map +1 -0
- package/dist/index.rsc.js +40 -0
- package/dist/index.rsc.js.map +1 -0
- package/dist/internal-debug.d.ts +2 -0
- package/dist/internal-debug.d.ts.map +1 -0
- package/dist/internal-debug.js +5 -0
- package/dist/internal-debug.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/loader.rsc.d.ts +19 -0
- package/dist/loader.rsc.d.ts.map +1 -0
- package/dist/loader.rsc.js +99 -0
- package/dist/loader.rsc.js.map +1 -0
- package/dist/network-error-thrower.d.ts +17 -0
- package/dist/network-error-thrower.d.ts.map +1 -0
- package/dist/network-error-thrower.js +14 -0
- package/dist/network-error-thrower.js.map +1 -0
- package/dist/outlet-context.d.ts +13 -0
- package/dist/outlet-context.d.ts.map +1 -0
- package/dist/outlet-context.js +3 -0
- package/dist/outlet-context.js.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.js +148 -0
- package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
- package/dist/prerender/param-hash.d.ts +16 -0
- package/dist/prerender/param-hash.d.ts.map +1 -0
- package/dist/prerender/param-hash.js +36 -0
- package/dist/prerender/param-hash.js.map +1 -0
- package/dist/prerender/store.d.ts +38 -0
- package/dist/prerender/store.d.ts.map +1 -0
- package/dist/prerender/store.js +61 -0
- package/dist/prerender/store.js.map +1 -0
- package/dist/prerender.d.ts +66 -0
- package/dist/prerender.d.ts.map +1 -0
- package/dist/prerender.js +57 -0
- package/dist/prerender.js.map +1 -0
- package/dist/reverse.d.ts +196 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +78 -0
- package/dist/reverse.js.map +1 -0
- package/dist/root-error-boundary.d.ts +33 -0
- package/dist/root-error-boundary.d.ts.map +1 -0
- package/dist/root-error-boundary.js +165 -0
- package/dist/root-error-boundary.js.map +1 -0
- package/dist/route-content-wrapper.d.ts +46 -0
- package/dist/route-content-wrapper.d.ts.map +1 -0
- package/dist/route-content-wrapper.js +77 -0
- package/dist/route-content-wrapper.js.map +1 -0
- package/dist/route-definition.d.ts +421 -0
- package/dist/route-definition.d.ts.map +1 -0
- package/dist/route-definition.js +868 -0
- package/dist/route-definition.js.map +1 -0
- package/dist/route-map-builder.d.ts +155 -0
- package/dist/route-map-builder.d.ts.map +1 -0
- package/dist/route-map-builder.js +237 -0
- package/dist/route-map-builder.js.map +1 -0
- package/dist/route-types.d.ts +165 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +7 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router/__tests__/handler-context.test.d.ts +2 -0
- package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/handler-context.test.js +65 -0
- package/dist/router/__tests__/handler-context.test.js.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
- package/dist/router/__tests__/match-context.test.d.ts +2 -0
- package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-context.test.js +92 -0
- package/dist/router/__tests__/match-context.test.js.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.js +417 -0
- package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
- package/dist/router/__tests__/match-result.test.d.ts +2 -0
- package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-result.test.js +457 -0
- package/dist/router/__tests__/match-result.test.js.map +1 -0
- package/dist/router/__tests__/on-error.test.d.ts +2 -0
- package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
- package/dist/router/__tests__/on-error.test.js +678 -0
- package/dist/router/__tests__/on-error.test.js.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.js +629 -0
- package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
- package/dist/router/error-handling.d.ts +77 -0
- package/dist/router/error-handling.d.ts.map +1 -0
- package/dist/router/error-handling.js +202 -0
- package/dist/router/error-handling.js.map +1 -0
- package/dist/router/handler-context.d.ts +20 -0
- package/dist/router/handler-context.d.ts.map +1 -0
- package/dist/router/handler-context.js +198 -0
- package/dist/router/handler-context.js.map +1 -0
- package/dist/router/intercept-resolution.d.ts +66 -0
- package/dist/router/intercept-resolution.d.ts.map +1 -0
- package/dist/router/intercept-resolution.js +246 -0
- package/dist/router/intercept-resolution.js.map +1 -0
- package/dist/router/loader-resolution.d.ts +64 -0
- package/dist/router/loader-resolution.d.ts.map +1 -0
- package/dist/router/loader-resolution.js +284 -0
- package/dist/router/loader-resolution.js.map +1 -0
- package/dist/router/logging.d.ts +15 -0
- package/dist/router/logging.d.ts.map +1 -0
- package/dist/router/logging.js +99 -0
- package/dist/router/logging.js.map +1 -0
- package/dist/router/manifest.d.ts +22 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +181 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/match-api.d.ts +35 -0
- package/dist/router/match-api.d.ts.map +1 -0
- package/dist/router/match-api.js +406 -0
- package/dist/router/match-api.js.map +1 -0
- package/dist/router/match-context.d.ts +206 -0
- package/dist/router/match-context.d.ts.map +1 -0
- package/dist/router/match-context.js +17 -0
- package/dist/router/match-context.js.map +1 -0
- package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
- package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
- package/dist/router/match-middleware/background-revalidation.js +75 -0
- package/dist/router/match-middleware/background-revalidation.js.map +1 -0
- package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
- package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-lookup.js +257 -0
- package/dist/router/match-middleware/cache-lookup.js.map +1 -0
- package/dist/router/match-middleware/cache-store.d.ts +113 -0
- package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-store.js +108 -0
- package/dist/router/match-middleware/cache-store.js.map +1 -0
- package/dist/router/match-middleware/index.d.ts +81 -0
- package/dist/router/match-middleware/index.d.ts.map +1 -0
- package/dist/router/match-middleware/index.js +80 -0
- package/dist/router/match-middleware/index.js.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.js +134 -0
- package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
- package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
- package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/segment-resolution.js +53 -0
- package/dist/router/match-middleware/segment-resolution.js.map +1 -0
- package/dist/router/match-pipelines.d.ts +147 -0
- package/dist/router/match-pipelines.d.ts.map +1 -0
- package/dist/router/match-pipelines.js +82 -0
- package/dist/router/match-pipelines.js.map +1 -0
- package/dist/router/match-result.d.ts +126 -0
- package/dist/router/match-result.d.ts.map +1 -0
- package/dist/router/match-result.js +93 -0
- package/dist/router/match-result.js.map +1 -0
- package/dist/router/metrics.d.ts +20 -0
- package/dist/router/metrics.d.ts.map +1 -0
- package/dist/router/metrics.js +47 -0
- package/dist/router/metrics.js.map +1 -0
- package/dist/router/middleware.d.ts +249 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +434 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/middleware.test.d.ts +2 -0
- package/dist/router/middleware.test.d.ts.map +1 -0
- package/dist/router/middleware.test.js +816 -0
- package/dist/router/middleware.test.js.map +1 -0
- package/dist/router/pattern-matching.d.ts +149 -0
- package/dist/router/pattern-matching.d.ts.map +1 -0
- package/dist/router/pattern-matching.js +349 -0
- package/dist/router/pattern-matching.js.map +1 -0
- package/dist/router/revalidation.d.ts +44 -0
- package/dist/router/revalidation.d.ts.map +1 -0
- package/dist/router/revalidation.js +147 -0
- package/dist/router/revalidation.js.map +1 -0
- package/dist/router/router-context.d.ts +135 -0
- package/dist/router/router-context.d.ts.map +1 -0
- package/dist/router/router-context.js +36 -0
- package/dist/router/router-context.js.map +1 -0
- package/dist/router/segment-resolution.d.ts +127 -0
- package/dist/router/segment-resolution.d.ts.map +1 -0
- package/dist/router/segment-resolution.js +919 -0
- package/dist/router/segment-resolution.js.map +1 -0
- package/dist/router/trie-matching.d.ts +40 -0
- package/dist/router/trie-matching.d.ts.map +1 -0
- package/dist/router/trie-matching.js +127 -0
- package/dist/router/trie-matching.js.map +1 -0
- package/dist/router/types.d.ts +136 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router.d.ts +753 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.gen.d.ts +6 -0
- package/dist/router.gen.d.ts.map +1 -0
- package/dist/router.gen.js +6 -0
- package/dist/router.gen.js.map +1 -0
- package/dist/router.js +1304 -0
- package/dist/router.js.map +1 -0
- package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
- package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/rsc/__tests__/helpers.test.js +140 -0
- package/dist/rsc/__tests__/helpers.test.js.map +1 -0
- package/dist/rsc/handler.d.ts +45 -0
- package/dist/rsc/handler.d.ts.map +1 -0
- package/dist/rsc/handler.js +1172 -0
- package/dist/rsc/handler.js.map +1 -0
- package/dist/rsc/helpers.d.ts +16 -0
- package/dist/rsc/helpers.d.ts.map +1 -0
- package/dist/rsc/helpers.js +55 -0
- package/dist/rsc/helpers.js.map +1 -0
- package/dist/rsc/index.d.ts +22 -0
- package/dist/rsc/index.d.ts.map +1 -0
- package/dist/rsc/index.js +23 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/nonce.d.ts +9 -0
- package/dist/rsc/nonce.d.ts.map +1 -0
- package/dist/rsc/nonce.js +18 -0
- package/dist/rsc/nonce.js.map +1 -0
- package/dist/rsc/types.d.ts +206 -0
- package/dist/rsc/types.d.ts.map +1 -0
- package/dist/rsc/types.js +8 -0
- package/dist/rsc/types.js.map +1 -0
- package/dist/search-params.d.ts +103 -0
- package/dist/search-params.d.ts.map +1 -0
- package/dist/search-params.js +74 -0
- package/dist/search-params.js.map +1 -0
- package/dist/segment-system.d.ts +75 -0
- package/dist/segment-system.d.ts.map +1 -0
- package/dist/segment-system.js +336 -0
- package/dist/segment-system.js.map +1 -0
- package/dist/server/context.d.ts +245 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +197 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fetchable-loader-store.d.ts +18 -0
- package/dist/server/fetchable-loader-store.d.ts.map +1 -0
- package/dist/server/fetchable-loader-store.js +18 -0
- package/dist/server/fetchable-loader-store.js.map +1 -0
- package/dist/server/handle-store.d.ts +85 -0
- package/dist/server/handle-store.d.ts.map +1 -0
- package/dist/server/handle-store.js +142 -0
- package/dist/server/handle-store.js.map +1 -0
- package/dist/server/loader-registry.d.ts +55 -0
- package/dist/server/loader-registry.d.ts.map +1 -0
- package/dist/server/loader-registry.js +132 -0
- package/dist/server/loader-registry.js.map +1 -0
- package/dist/server/request-context.d.ts +226 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +290 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/root-layout.d.ts +4 -0
- package/dist/server/root-layout.d.ts.map +1 -0
- package/dist/server/root-layout.js +5 -0
- package/dist/server/root-layout.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
- package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
- package/dist/ssr/index.d.ts +98 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +158 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/static-handler.d.ts +50 -0
- package/dist/static-handler.d.ts.map +1 -0
- package/dist/static-handler.gen.d.ts +5 -0
- package/dist/static-handler.gen.d.ts.map +1 -0
- package/dist/static-handler.gen.js +5 -0
- package/dist/static-handler.gen.js.map +1 -0
- package/dist/static-handler.js +29 -0
- package/dist/static-handler.js.map +1 -0
- package/dist/testing/vitest.js +82 -0
- package/dist/theme/ThemeProvider.d.ts +20 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +240 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/ThemeScript.d.ts +48 -0
- package/dist/theme/ThemeScript.d.ts.map +1 -0
- package/dist/theme/ThemeScript.js +13 -0
- package/dist/theme/ThemeScript.js.map +1 -0
- package/dist/theme/__tests__/theme.test.d.ts +2 -0
- package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
- package/dist/theme/__tests__/theme.test.js +103 -0
- package/dist/theme/__tests__/theme.test.js.map +1 -0
- package/dist/theme/constants.d.ts +29 -0
- package/dist/theme/constants.d.ts.map +1 -0
- package/dist/theme/constants.js +48 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +31 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +36 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-context.d.ts +40 -0
- package/dist/theme/theme-context.d.ts.map +1 -0
- package/dist/theme/theme-context.js +60 -0
- package/dist/theme/theme-context.js.map +1 -0
- package/dist/theme/theme-script.d.ts +27 -0
- package/dist/theme/theme-script.d.ts.map +1 -0
- package/dist/theme/theme-script.js +147 -0
- package/dist/theme/theme-script.js.map +1 -0
- package/dist/theme/types.d.ts +163 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +11 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/theme/use-theme.d.ts +12 -0
- package/dist/theme/use-theme.d.ts.map +1 -0
- package/dist/theme/use-theme.js +40 -0
- package/dist/theme/use-theme.js.map +1 -0
- package/dist/types.d.ts +1479 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/urls.d.ts +441 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.gen.d.ts +8 -0
- package/dist/urls.gen.d.ts.map +1 -0
- package/dist/urls.gen.js +8 -0
- package/dist/urls.gen.js.map +1 -0
- package/dist/urls.js +443 -0
- package/dist/urls.js.map +1 -0
- package/dist/use-loader.d.ts +127 -0
- package/dist/use-loader.d.ts.map +1 -0
- package/dist/use-loader.js +237 -0
- package/dist/use-loader.js.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
- package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.js +39 -0
- package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
- package/dist/vite/ast-handler-extract.d.ts +49 -0
- package/dist/vite/ast-handler-extract.d.ts.map +1 -0
- package/dist/vite/ast-handler-extract.js +249 -0
- package/dist/vite/ast-handler-extract.js.map +1 -0
- package/dist/vite/expose-action-id.d.ts +19 -0
- package/dist/vite/expose-action-id.d.ts.map +1 -0
- package/dist/vite/expose-action-id.js +250 -0
- package/dist/vite/expose-action-id.js.map +1 -0
- package/dist/vite/expose-id-utils.d.ts +69 -0
- package/dist/vite/expose-id-utils.d.ts.map +1 -0
- package/dist/vite/expose-id-utils.js +289 -0
- package/dist/vite/expose-id-utils.js.map +1 -0
- package/dist/vite/expose-internal-ids.d.ts +22 -0
- package/dist/vite/expose-internal-ids.d.ts.map +1 -0
- package/dist/vite/expose-internal-ids.js +886 -0
- package/dist/vite/expose-internal-ids.js.map +1 -0
- package/dist/vite/index.d.ts +149 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +3247 -1128
- 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/dist/vite/virtual-entries.js +110 -0
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +81 -12
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +64 -2
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +224 -32
- package/skills/caching/SKILL.md +279 -17
- package/skills/composability/SKILL.md +27 -2
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +4 -2
- package/skills/document-cache/SKILL.md +78 -55
- package/skills/handler-use/SKILL.md +364 -0
- package/skills/hooks/SKILL.md +250 -30
- package/skills/host-router/SKILL.md +125 -23
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +50 -6
- package/skills/layout/SKILL.md +35 -9
- package/skills/links/SKILL.md +247 -17
- package/skills/loader/SKILL.md +225 -9
- package/skills/middleware/SKILL.md +50 -13
- package/skills/migrate-nextjs/SKILL.md +584 -0
- package/skills/migrate-react-router/SKILL.md +771 -0
- package/skills/mime-routes/SKILL.md +28 -1
- package/skills/observability/SKILL.md +194 -0
- package/skills/parallel/SKILL.md +77 -7
- package/skills/prerender/SKILL.md +45 -43
- package/skills/rango/SKILL.md +257 -22
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +123 -48
- package/skills/route/SKILL.md +70 -5
- package/skills/router-setup/SKILL.md +30 -6
- package/skills/scripts/SKILL.md +179 -0
- package/skills/server-actions/SKILL.md +775 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/tailwind/SKILL.md +27 -3
- package/skills/testing/SKILL.md +129 -0
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +127 -0
- package/skills/testing/client-components.md +124 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +129 -0
- package/skills/testing/loader.md +128 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +121 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +84 -0
- package/skills/testing/server-actions.md +107 -0
- package/skills/testing/server-tree.md +128 -0
- package/skills/testing/setup.md +123 -0
- package/skills/typesafety/SKILL.md +322 -29
- package/skills/use-cache/SKILL.md +46 -14
- package/skills/vercel/SKILL.md +128 -0
- package/skills/view-transitions/SKILL.md +294 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +0 -65
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +39 -0
- package/src/browser/connection-warmup.ts +134 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/event-controller.ts +192 -150
- package/src/browser/history-state.ts +21 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/invalidate-client-cache.ts +52 -0
- package/src/browser/navigation-bridge.ts +50 -11
- package/src/browser/navigation-client.ts +113 -78
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +33 -59
- package/src/browser/navigation-transaction.ts +9 -59
- package/src/browser/partial-update.ts +109 -122
- package/src/browser/prefetch/cache.ts +193 -68
- package/src/browser/prefetch/fetch.ts +293 -59
- package/src/browser/prefetch/queue.ts +42 -8
- package/src/browser/rango-state.ts +158 -76
- package/src/browser/react/Link.tsx +48 -20
- package/src/browser/react/NavigationProvider.tsx +95 -117
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/filter-segment-order.ts +66 -7
- package/src/browser/react/index.ts +0 -48
- package/src/browser/react/location-state-shared.ts +178 -8
- package/src/browser/react/location-state.ts +39 -14
- package/src/browser/react/use-action.ts +6 -15
- package/src/browser/react/use-handle.ts +17 -14
- package/src/browser/react/use-href.tsx +8 -1
- package/src/browser/react/use-link-status.ts +33 -8
- package/src/browser/react/use-navigation.ts +32 -7
- package/src/browser/react/use-params.ts +20 -10
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +25 -3
- package/src/browser/react/use-search-params.ts +0 -5
- package/src/browser/react/use-segments.ts +11 -21
- package/src/browser/response-adapter.ts +66 -4
- package/src/browser/rsc-router.tsx +91 -24
- package/src/browser/scroll-restoration.ts +30 -17
- package/src/browser/segment-reconciler.ts +10 -14
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +214 -55
- package/src/browser/types.ts +48 -8
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +60 -35
- package/src/build/generate-route-types.ts +3 -1
- package/src/build/index.ts +8 -2
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +165 -36
- package/src/build/route-types/ast-route-extraction.ts +15 -8
- package/src/build/route-types/codegen.ts +16 -5
- package/src/build/route-types/include-resolution.ts +117 -23
- package/src/build/route-types/param-extraction.ts +6 -3
- package/src/build/route-types/per-module-writer.ts +22 -6
- package/src/build/route-types/router-processing.ts +128 -51
- package/src/build/route-types/scan-filter.ts +1 -1
- package/src/build/route-types/source-scan.ts +216 -0
- package/src/build/runtime-discovery.ts +9 -20
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-key-utils.ts +29 -13
- package/src/cache/cache-policy.ts +108 -34
- package/src/cache/cache-runtime.ts +199 -37
- package/src/cache/cache-scope.ts +188 -82
- package/src/cache/cache-tag.ts +103 -0
- package/src/cache/cf/cf-base64.ts +33 -0
- package/src/cache/cf/cf-cache-constants.ts +127 -0
- package/src/cache/cf/cf-cache-store.ts +1989 -378
- package/src/cache/cf/cf-cache-types.ts +349 -0
- package/src/cache/cf/cf-kv-utils.ts +46 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
- package/src/cache/cf/index.ts +6 -16
- package/src/cache/document-cache.ts +72 -20
- package/src/cache/handle-snapshot.ts +70 -0
- package/src/cache/index.ts +22 -20
- package/src/cache/memory-segment-store.ts +136 -37
- package/src/cache/profile-registry.ts +31 -31
- package/src/cache/read-through-swr.ts +41 -11
- package/src/cache/segment-codec.ts +9 -17
- package/src/cache/tag-invalidation.ts +230 -0
- package/src/cache/types.ts +37 -100
- package/src/cache/vercel/index.ts +11 -0
- package/src/cache/vercel/vercel-cache-store.ts +855 -0
- package/src/client.rsc.tsx +44 -21
- package/src/client.tsx +118 -235
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +109 -0
- package/src/component-utils.ts +19 -0
- package/src/components/DefaultDocument.tsx +8 -2
- package/src/context-var.ts +18 -6
- package/src/decode-loader-results.ts +52 -0
- package/src/defer.ts +196 -0
- package/src/deps/ssr.ts +0 -1
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +30 -4
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +31 -23
- package/src/handles/MetaTags.tsx +56 -19
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +37 -8
- package/src/handles/is-thenable.ts +19 -0
- package/src/handles/meta.ts +51 -40
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +9 -60
- package/src/host/errors.ts +0 -24
- package/src/host/index.ts +8 -2
- package/src/host/pattern-matcher.ts +23 -52
- package/src/host/router.ts +107 -99
- package/src/host/testing.ts +40 -27
- package/src/host/types.ts +37 -4
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +137 -22
- package/src/index.rsc.ts +90 -11
- package/src/index.ts +125 -19
- package/src/internal-debug.ts +2 -4
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +20 -13
- package/src/loader.ts +12 -11
- package/src/missing-id-error.ts +68 -0
- package/src/network-error-thrower.tsx +1 -6
- package/src/outlet-context.ts +1 -1
- package/src/outlet-provider.tsx +1 -5
- package/src/prerender/param-hash.ts +16 -16
- package/src/prerender/store.ts +32 -37
- package/src/prerender.ts +61 -6
- package/src/redirect-origin.ts +100 -0
- package/src/regex-escape.ts +8 -0
- package/src/response-utils.ts +62 -0
- package/src/reverse.ts +65 -36
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +7 -72
- package/src/route-definition/dsl-helpers.ts +418 -273
- package/src/route-definition/helper-factories.ts +29 -139
- package/src/route-definition/helpers-types.ts +103 -31
- package/src/route-definition/redirect.ts +44 -11
- package/src/route-definition/resolve-handler-use.ts +12 -0
- package/src/route-definition/use-item-types.ts +32 -0
- package/src/route-map-builder.ts +0 -16
- package/src/route-types.ts +26 -41
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +73 -25
- package/src/router/error-handling.ts +45 -18
- package/src/router/find-match.ts +44 -23
- package/src/router/handler-context.ts +27 -39
- package/src/router/instrument.ts +350 -0
- package/src/router/intercept-resolution.ts +39 -20
- package/src/router/lazy-includes.ts +15 -52
- package/src/router/loader-resolution.ts +155 -72
- package/src/router/logging.ts +0 -6
- package/src/router/manifest.ts +40 -42
- package/src/router/match-api.ts +4 -23
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +58 -58
- package/src/router/match-middleware/background-revalidation.ts +6 -7
- package/src/router/match-middleware/cache-lookup.ts +161 -286
- package/src/router/match-middleware/cache-store.ts +31 -34
- package/src/router/match-middleware/intercept-resolution.ts +0 -22
- package/src/router/match-middleware/segment-resolution.ts +0 -22
- package/src/router/match-pipelines.ts +1 -42
- package/src/router/match-result.ts +44 -74
- package/src/router/metrics.ts +0 -34
- package/src/router/middleware-types.ts +7 -134
- package/src/router/middleware.ts +266 -166
- package/src/router/navigation-snapshot.ts +0 -51
- package/src/router/params-util.ts +23 -0
- package/src/router/pattern-matching.ts +132 -90
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prerender-match.ts +104 -65
- package/src/router/preview-match.ts +3 -1
- package/src/router/request-classification.ts +28 -62
- package/src/router/revalidation.ts +123 -73
- package/src/router/route-snapshot.ts +0 -1
- package/src/router/router-context.ts +3 -28
- package/src/router/router-interfaces.ts +83 -35
- package/src/router/router-options.ts +136 -5
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +93 -84
- package/src/router/segment-resolution/helpers.ts +86 -6
- package/src/router/segment-resolution/loader-cache.ts +62 -37
- package/src/router/segment-resolution/revalidation.ts +269 -320
- package/src/router/segment-resolution/static-store.ts +19 -5
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution/view-transition-default.ts +36 -0
- package/src/router/segment-resolution.ts +5 -1
- package/src/router/segment-wrappers.ts +6 -5
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/substitute-pattern-params.ts +56 -0
- package/src/router/telemetry-otel.ts +161 -199
- package/src/router/telemetry.ts +96 -19
- package/src/router/timeout.ts +0 -20
- package/src/router/tracing.ts +206 -0
- package/src/router/trie-matching.ts +163 -59
- package/src/router/types.ts +9 -63
- package/src/router/url-params.ts +44 -0
- package/src/router.ts +110 -55
- package/src/rsc/handler-context.ts +3 -2
- package/src/rsc/handler.ts +266 -219
- package/src/rsc/helpers.ts +168 -46
- package/src/rsc/index.ts +2 -5
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +114 -38
- package/src/rsc/manifest-init.ts +28 -41
- package/src/rsc/origin-guard.ts +39 -25
- package/src/rsc/progressive-enhancement.ts +63 -9
- package/src/rsc/redirect-guard.ts +99 -0
- package/src/rsc/response-cache-serve.ts +238 -0
- package/src/rsc/response-error.ts +79 -12
- package/src/rsc/response-route-handler.ts +99 -189
- package/src/rsc/rsc-rendering.ts +99 -75
- package/src/rsc/runtime-warnings.ts +23 -10
- package/src/rsc/server-action.ts +258 -115
- package/src/rsc/ssr-setup.ts +16 -0
- package/src/rsc/types.ts +23 -5
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +35 -30
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-loader-promise.ts +149 -0
- package/src/segment-system.tsx +218 -202
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +175 -53
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +80 -5
- package/src/server/handle-store.ts +21 -38
- package/src/server/loader-registry.ts +21 -42
- package/src/server/request-context.ts +235 -175
- package/src/ssr/index.tsx +21 -16
- package/src/static-handler.ts +10 -13
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +40 -0
- package/src/testing/dispatch.ts +701 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +128 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +272 -0
- package/src/testing/e2e/parity.ts +387 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +257 -0
- package/src/testing/generated-routes.ts +183 -0
- package/src/testing/index.ts +99 -0
- package/src/testing/internal/context.ts +371 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +343 -0
- package/src/testing/render-route.tsx +581 -0
- package/src/testing/run-loader.ts +385 -0
- package/src/testing/run-middleware.ts +205 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +305 -0
- package/src/theme/ThemeProvider.tsx +20 -58
- package/src/theme/ThemeScript.tsx +7 -9
- package/src/theme/constants.ts +52 -13
- package/src/theme/index.ts +0 -7
- package/src/theme/theme-context.ts +1 -5
- package/src/theme/theme-script.ts +22 -21
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +0 -35
- package/src/types/cache-types.ts +13 -4
- package/src/types/error-types.ts +30 -90
- package/src/types/global-namespace.ts +54 -41
- package/src/types/handler-context.ts +109 -61
- package/src/types/index.ts +1 -10
- package/src/types/loader-types.ts +11 -9
- package/src/types/request-scope.ts +112 -0
- package/src/types/route-config.ts +6 -50
- package/src/types/route-entry.ts +11 -6
- package/src/types/segments.ts +35 -15
- package/src/urls/include-helper.ts +33 -70
- package/src/urls/index.ts +1 -11
- package/src/urls/path-helper-types.ts +49 -9
- package/src/urls/path-helper.ts +17 -106
- package/src/urls/pattern-types.ts +36 -19
- package/src/urls/response-types.ts +22 -29
- package/src/urls/type-extraction.ts +58 -139
- package/src/urls/urls-function.ts +1 -18
- package/src/use-loader.tsx +292 -107
- package/src/vercel/index.ts +11 -0
- package/src/vercel/tracing.ts +88 -0
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +8 -7
- package/src/vite/discovery/discover-routers.ts +126 -85
- package/src/vite/discovery/discovery-errors.ts +194 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +96 -68
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/state.ts +45 -1
- package/src/vite/discovery/virtual-module-codegen.ts +14 -34
- package/src/vite/index.ts +4 -0
- package/src/vite/plugin-types.ts +210 -10
- package/src/vite/plugins/cjs-to-esm.ts +16 -19
- package/src/vite/plugins/client-ref-dedup.ts +16 -11
- package/src/vite/plugins/client-ref-hashing.ts +28 -15
- package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
- package/src/vite/plugins/expose-action-id.ts +48 -95
- package/src/vite/plugins/expose-id-utils.ts +88 -55
- package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
- package/src/vite/plugins/expose-ids/handler-transform.ts +11 -90
- package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
- package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
- package/src/vite/plugins/expose-internal-ids.ts +505 -486
- package/src/vite/plugins/performance-tracks.ts +26 -25
- package/src/vite/plugins/refresh-cmd.ts +1 -1
- package/src/vite/plugins/use-cache-transform.ts +73 -83
- package/src/vite/plugins/vercel-output.ts +295 -0
- package/src/vite/plugins/version-injector.ts +21 -25
- package/src/vite/plugins/version-plugin.ts +37 -40
- package/src/vite/plugins/virtual-entries.ts +71 -18
- package/src/vite/rango.ts +225 -137
- package/src/vite/router-discovery.ts +769 -106
- package/src/vite/utils/ast-handler-extract.ts +26 -35
- package/src/vite/utils/banner.ts +1 -1
- package/src/vite/utils/bundle-analysis.ts +10 -15
- package/src/vite/utils/client-chunks.ts +184 -0
- package/src/vite/utils/directive-prologue.ts +40 -0
- package/src/vite/utils/forward-user-plugins.ts +171 -0
- package/src/vite/utils/manifest-utils.ts +4 -59
- package/src/vite/utils/package-resolution.ts +20 -52
- package/src/vite/utils/prerender-utils.ts +67 -38
- package/src/vite/utils/shared-utils.ts +95 -43
- package/src/browser/action-response-classifier.ts +0 -99
- package/src/browser/shallow.ts +0 -40
- package/src/router/middleware-cookies.ts +0 -55
|
@@ -11,12 +11,17 @@ import {
|
|
|
11
11
|
getContext,
|
|
12
12
|
getNamePrefix,
|
|
13
13
|
getUrlPrefix,
|
|
14
|
+
requireDslContext,
|
|
14
15
|
type EntryData,
|
|
16
|
+
type EntryPropDatas,
|
|
17
|
+
type EntryPropSegments,
|
|
18
|
+
type HelperContext,
|
|
15
19
|
type InterceptEntry,
|
|
16
20
|
} from "../server/context";
|
|
17
21
|
import { invariant } from "../errors";
|
|
22
|
+
import { validateUserRouteName } from "../route-name.js";
|
|
18
23
|
import { isCachedFunction } from "../cache/taint.js";
|
|
19
|
-
import {
|
|
24
|
+
import { RangoContext } from "../server/context";
|
|
20
25
|
import { isStaticHandler } from "../static-handler.js";
|
|
21
26
|
import RootLayout from "../server/root-layout";
|
|
22
27
|
import type {
|
|
@@ -38,6 +43,7 @@ import type {
|
|
|
38
43
|
} from "../route-types.js";
|
|
39
44
|
import type { RouteHelpers } from "./helpers-types.js";
|
|
40
45
|
import { resolveHandlerUse, mergeHandlerUse } from "./resolve-handler-use.js";
|
|
46
|
+
import { ALL_USE_ITEM_TYPES } from "./use-item-types.js";
|
|
41
47
|
|
|
42
48
|
/**
|
|
43
49
|
* Check if an item contains routes (directly or inside nested structures like cache).
|
|
@@ -55,19 +61,111 @@ const hasRoutesInItem = (item: AllUseItems): boolean => {
|
|
|
55
61
|
if (item.type === "layout" && item.uses) {
|
|
56
62
|
return item.uses.some((child) => hasRoutesInItem(child));
|
|
57
63
|
}
|
|
64
|
+
if (item.type === "middleware" && item.uses) {
|
|
65
|
+
return item.uses.some((child) => hasRoutesInItem(child));
|
|
66
|
+
}
|
|
58
67
|
return false;
|
|
59
68
|
};
|
|
60
69
|
|
|
70
|
+
/**
|
|
71
|
+
* Fresh empty collections shared by every from-scratch segment entry. Returns
|
|
72
|
+
* new arrays/objects per call so no two entries share mutable references.
|
|
73
|
+
* mountPath is intentionally NOT included here — each call site adds it from
|
|
74
|
+
* getUrlPrefix() where applicable: the route() and transition() helpers add
|
|
75
|
+
* none, while path() (which also builds a `type: "route"` entry) and the
|
|
76
|
+
* structural helpers (layout/cache/middleware/parallel) do.
|
|
77
|
+
*/
|
|
78
|
+
const emptySegmentBase = (): EntryPropDatas &
|
|
79
|
+
EntryPropSegments & { loading: undefined } => ({
|
|
80
|
+
loading: undefined,
|
|
81
|
+
middleware: [],
|
|
82
|
+
revalidate: [],
|
|
83
|
+
errorBoundary: [],
|
|
84
|
+
notFoundBoundary: [],
|
|
85
|
+
layout: [],
|
|
86
|
+
parallel: {},
|
|
87
|
+
intercept: [],
|
|
88
|
+
loader: [],
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Run a children/use callback as a nested scope, flatten the result, and assert
|
|
93
|
+
* every item is a valid use item. `kind` preserves the existing error wording
|
|
94
|
+
* ("use()" vs "children" callback).
|
|
95
|
+
*/
|
|
96
|
+
function runAndValidateUseItems(
|
|
97
|
+
store: ReturnType<typeof getContext>,
|
|
98
|
+
namespace: string,
|
|
99
|
+
entry: EntryData,
|
|
100
|
+
cb: () => any,
|
|
101
|
+
label: string,
|
|
102
|
+
kind: "use" | "children",
|
|
103
|
+
): AllUseItems[] {
|
|
104
|
+
const result = store.run(namespace, entry, cb)?.flat(3);
|
|
105
|
+
return validateUseItems(result, namespace, label, kind);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** Assert an already-invoked, flattened callback result is a use-item array. */
|
|
109
|
+
function validateUseItems(
|
|
110
|
+
result: any,
|
|
111
|
+
namespace: string,
|
|
112
|
+
label: string,
|
|
113
|
+
kind: "use" | "children",
|
|
114
|
+
): AllUseItems[] {
|
|
115
|
+
invariant(
|
|
116
|
+
Array.isArray(result) && result.every((item) => isValidUseItem(item)),
|
|
117
|
+
`${label}() ${kind === "use" ? "use()" : "children"} callback must return an array of use items [${namespace}]`,
|
|
118
|
+
);
|
|
119
|
+
return result as AllUseItems[];
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** True when a children/use result contains no routes (directly or nested). */
|
|
123
|
+
const isOrphan = (result: AllUseItems[]): boolean =>
|
|
124
|
+
!result.some((item) => item != null && hasRoutesInItem(item));
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Register a routeless structural entry as an orphan sibling: clear its parent
|
|
128
|
+
* pointer so it leaves the middleware/parent-pointer chain (LOAD-BEARING — see
|
|
129
|
+
* docs/tree-structure.md) and push it onto the parent's layout[] so it renders
|
|
130
|
+
* as a wrapper. Used by cache()/middleware()/transition(); layout() runs extra
|
|
131
|
+
* validation and registers inline.
|
|
132
|
+
*/
|
|
133
|
+
const attachOrphanSibling = (
|
|
134
|
+
parent: EntryData | null,
|
|
135
|
+
entry: EntryData,
|
|
136
|
+
): void => {
|
|
137
|
+
entry.parent = null;
|
|
138
|
+
if (parent && "layout" in parent) parent.layout.push(entry);
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Run `fn` with `ctx.parent` temporarily redirected to `temp` — a satellite
|
|
143
|
+
* entry that captures the attachments declared by a use() callback — restoring
|
|
144
|
+
* the original parent afterward, including on throw. loader()/intercept() each
|
|
145
|
+
* build their own tempParent shape (intercept keeps a loading get/set accessor
|
|
146
|
+
* and a captured-layouts array); this only centralizes the save/restore.
|
|
147
|
+
*/
|
|
148
|
+
function withParent<T>(ctx: HelperContext, temp: EntryData, fn: () => T): T {
|
|
149
|
+
const original = ctx.parent;
|
|
150
|
+
ctx.parent = temp;
|
|
151
|
+
try {
|
|
152
|
+
return fn();
|
|
153
|
+
} finally {
|
|
154
|
+
ctx.parent = original;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
61
158
|
const revalidate: RouteHelpers<any, any>["revalidate"] = (fn) => {
|
|
62
|
-
const ctx =
|
|
63
|
-
|
|
159
|
+
const { store, ctx } = requireDslContext(
|
|
160
|
+
"revalidate() must be called inside urls()",
|
|
161
|
+
);
|
|
64
162
|
|
|
65
163
|
// Attach to last entry in stack
|
|
66
164
|
const parent = ctx.parent;
|
|
67
165
|
if (!parent || !("revalidate" in parent)) {
|
|
68
166
|
invariant(false, "No parent entry available for revalidate()");
|
|
69
167
|
}
|
|
70
|
-
const name = `$${
|
|
168
|
+
const name = `$${store.getNextIndex("revalidate")}`;
|
|
71
169
|
parent.revalidate.push(fn);
|
|
72
170
|
return { name, type: "revalidate" } as RevalidateItem;
|
|
73
171
|
};
|
|
@@ -105,15 +203,16 @@ const revalidate: RouteHelpers<any, any>["revalidate"] = (fn) => {
|
|
|
105
203
|
* ```
|
|
106
204
|
*/
|
|
107
205
|
const errorBoundary: RouteHelpers<any, any>["errorBoundary"] = (fallback) => {
|
|
108
|
-
const ctx =
|
|
109
|
-
|
|
206
|
+
const { store, ctx } = requireDslContext(
|
|
207
|
+
"errorBoundary() must be called inside urls()",
|
|
208
|
+
);
|
|
110
209
|
|
|
111
210
|
// Attach to parent entry in stack
|
|
112
211
|
const parent = ctx.parent;
|
|
113
212
|
if (!parent || !("errorBoundary" in parent)) {
|
|
114
213
|
invariant(false, "No parent entry available for errorBoundary()");
|
|
115
214
|
}
|
|
116
|
-
const name = `$${
|
|
215
|
+
const name = `$${store.getNextIndex("errorBoundary")}`;
|
|
117
216
|
parent.errorBoundary.push(fallback);
|
|
118
217
|
return { name, type: "errorBoundary" } as ErrorBoundaryItem;
|
|
119
218
|
};
|
|
@@ -152,15 +251,16 @@ const errorBoundary: RouteHelpers<any, any>["errorBoundary"] = (fallback) => {
|
|
|
152
251
|
const notFoundBoundary: RouteHelpers<any, any>["notFoundBoundary"] = (
|
|
153
252
|
fallback,
|
|
154
253
|
) => {
|
|
155
|
-
const ctx =
|
|
156
|
-
|
|
254
|
+
const { store, ctx } = requireDslContext(
|
|
255
|
+
"notFoundBoundary() must be called inside urls()",
|
|
256
|
+
);
|
|
157
257
|
|
|
158
258
|
// Attach to parent entry in stack
|
|
159
259
|
const parent = ctx.parent;
|
|
160
260
|
if (!parent || !("notFoundBoundary" in parent)) {
|
|
161
261
|
invariant(false, "No parent entry available for notFoundBoundary()");
|
|
162
262
|
}
|
|
163
|
-
const name = `$${
|
|
263
|
+
const name = `$${store.getNextIndex("notFoundBoundary")}`;
|
|
164
264
|
parent.notFoundBoundary.push(fallback);
|
|
165
265
|
return { name, type: "notFoundBoundary" } as NotFoundBoundaryItem;
|
|
166
266
|
};
|
|
@@ -174,8 +274,9 @@ const notFoundBoundary: RouteHelpers<any, any>["notFoundBoundary"] = (
|
|
|
174
274
|
* for the intercept to activate.
|
|
175
275
|
*/
|
|
176
276
|
const when: RouteHelpers<any, any>["when"] = (fn) => {
|
|
177
|
-
const ctx =
|
|
178
|
-
|
|
277
|
+
const { store, ctx } = requireDslContext(
|
|
278
|
+
"when() must be called inside intercept()",
|
|
279
|
+
);
|
|
179
280
|
|
|
180
281
|
// The when() function needs to be captured by the intercept's tempParent
|
|
181
282
|
// which should have a `when` array. If not present, we're not inside intercept()
|
|
@@ -187,7 +288,7 @@ const when: RouteHelpers<any, any>["when"] = (fn) => {
|
|
|
187
288
|
);
|
|
188
289
|
}
|
|
189
290
|
|
|
190
|
-
const name = `$${
|
|
291
|
+
const name = `$${store.getNextIndex("when")}`;
|
|
191
292
|
parent.when.push(fn);
|
|
192
293
|
return { name, type: "when" } as WhenItem;
|
|
193
294
|
};
|
|
@@ -202,21 +303,21 @@ const when: RouteHelpers<any, any>["when"] = (fn) => {
|
|
|
202
303
|
* Supports these call signatures:
|
|
203
304
|
* - cache() - no args, uses app-level defaults (for loader caching)
|
|
204
305
|
* - cache(() => [...]) - wraps children with app-level defaults
|
|
205
|
-
* - cache('profileName') - uses a named cache profile
|
|
206
|
-
* - cache('profileName', () => [...]) - named profile with children
|
|
207
306
|
* - cache({ ttl: 60 }, () => [...]) - with explicit options
|
|
307
|
+
*
|
|
308
|
+
* Named cache profiles are applied via the `"use cache: <profile>"` directive,
|
|
309
|
+
* not a `cache("profileName")` form in the route tree.
|
|
208
310
|
*/
|
|
209
311
|
const cache: RouteHelpers<any, any>["cache"] = (
|
|
210
312
|
optionsOrChildren?:
|
|
211
313
|
| PartialCacheOptions
|
|
212
314
|
| false
|
|
213
|
-
| string
|
|
214
315
|
| (() => UseItems<AllUseItems>),
|
|
215
316
|
maybeChildren?: () => UseItems<AllUseItems>,
|
|
216
317
|
) => {
|
|
217
|
-
const store =
|
|
218
|
-
|
|
219
|
-
|
|
318
|
+
const { store, ctx } = requireDslContext(
|
|
319
|
+
"cache() must be called inside urls()",
|
|
320
|
+
);
|
|
220
321
|
|
|
221
322
|
// Handle overloaded signature
|
|
222
323
|
let options: PartialCacheOptions | false;
|
|
@@ -226,18 +327,6 @@ const cache: RouteHelpers<any, any>["cache"] = (
|
|
|
226
327
|
// cache() - no args, use defaults
|
|
227
328
|
options = {};
|
|
228
329
|
children = undefined;
|
|
229
|
-
} else if (typeof optionsOrChildren === "string") {
|
|
230
|
-
// cache('profileName') or cache('profileName', () => [...])
|
|
231
|
-
// Resolve from context-scoped profiles (set per-router via HelperContext).
|
|
232
|
-
const ctxStore = RSCRouterContext.getStore();
|
|
233
|
-
const profile = ctxStore?.cacheProfiles?.[optionsOrChildren];
|
|
234
|
-
invariant(
|
|
235
|
-
profile,
|
|
236
|
-
`cache("${optionsOrChildren}"): unknown cache profile. ` +
|
|
237
|
-
`Define it in createRouter({ cacheProfiles: { "${optionsOrChildren}": { ttl: ... } } }).`,
|
|
238
|
-
);
|
|
239
|
-
options = { ttl: profile.ttl, swr: profile.swr, tags: profile.tags };
|
|
240
|
-
children = maybeChildren;
|
|
241
330
|
} else if (typeof optionsOrChildren === "function") {
|
|
242
331
|
// cache(() => [...]) - use empty options (will use defaults)
|
|
243
332
|
options = {};
|
|
@@ -268,26 +357,18 @@ const cache: RouteHelpers<any, any>["cache"] = (
|
|
|
268
357
|
// Create orphan cache entry (like orphan layout)
|
|
269
358
|
// Subsequent siblings in the same array will attach to this entry
|
|
270
359
|
const namespace = `${ctx.namespace}.${cacheIndex}`;
|
|
271
|
-
const
|
|
360
|
+
const urlPrefix = getUrlPrefix();
|
|
272
361
|
|
|
273
362
|
const entry = {
|
|
363
|
+
...emptySegmentBase(),
|
|
274
364
|
id: namespace,
|
|
275
365
|
shortCode: store.getShortCode("cache"),
|
|
276
366
|
type: "cache",
|
|
277
367
|
parent: parent, // link to current parent for hierarchy
|
|
278
368
|
cache: cacheConfig,
|
|
279
369
|
handler: RootLayout,
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
revalidate: [],
|
|
283
|
-
errorBoundary: [],
|
|
284
|
-
notFoundBoundary: [],
|
|
285
|
-
layout: [],
|
|
286
|
-
parallel: {},
|
|
287
|
-
intercept: [],
|
|
288
|
-
loader: [],
|
|
289
|
-
...(cacheUrlPrefix ? { mountPath: cacheUrlPrefix } : {}),
|
|
290
|
-
} as EntryData;
|
|
370
|
+
...(urlPrefix ? { mountPath: urlPrefix } : {}),
|
|
371
|
+
} satisfies EntryData;
|
|
291
372
|
|
|
292
373
|
// Attach to parent's layout array (cache entries are structural like layouts)
|
|
293
374
|
if (parent && "layout" in parent) {
|
|
@@ -301,13 +382,23 @@ const cache: RouteHelpers<any, any>["cache"] = (
|
|
|
301
382
|
return { name: namespace, type: "cache" } as CacheItem;
|
|
302
383
|
}
|
|
303
384
|
|
|
385
|
+
// Inside a loader() use() callback, only the direct form — cache()/cache(opts)
|
|
386
|
+
// — writes cache config to the loader entry. The wrapper form creates a
|
|
387
|
+
// structural cache boundary with its own children scope, which has no effect
|
|
388
|
+
// on the loader and would silently no-op.
|
|
389
|
+
invariant(
|
|
390
|
+
!(ctx.parent && (ctx.parent as any).type === "loader"),
|
|
391
|
+
"cache() wrapper form is not valid inside loader() use(). Use cache({...}) without children to configure the loader's cache.",
|
|
392
|
+
);
|
|
393
|
+
|
|
304
394
|
// With children: create a cache entry (like layout with caching semantics)
|
|
305
395
|
const namespace = `${ctx.namespace}.${cacheIndex}`;
|
|
306
396
|
const cacheShortCode = store.getShortCode("cache");
|
|
307
397
|
|
|
308
|
-
const
|
|
398
|
+
const urlPrefix = getUrlPrefix();
|
|
309
399
|
|
|
310
400
|
const entry = {
|
|
401
|
+
...emptySegmentBase(),
|
|
311
402
|
id: namespace,
|
|
312
403
|
shortCode: cacheShortCode,
|
|
313
404
|
type: "cache",
|
|
@@ -315,48 +406,57 @@ const cache: RouteHelpers<any, any>["cache"] = (
|
|
|
315
406
|
cache: cacheConfig,
|
|
316
407
|
// Cache entries render like layouts (with Outlet as default handler)
|
|
317
408
|
handler: RootLayout, // RootLayout just renders <Outlet />
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
revalidate: [],
|
|
321
|
-
errorBoundary: [],
|
|
322
|
-
notFoundBoundary: [],
|
|
323
|
-
layout: [],
|
|
324
|
-
parallel: {},
|
|
325
|
-
intercept: [],
|
|
326
|
-
loader: [],
|
|
327
|
-
...(cacheUrlPrefix2 ? { mountPath: cacheUrlPrefix2 } : {}),
|
|
328
|
-
} as EntryData;
|
|
409
|
+
...(urlPrefix ? { mountPath: urlPrefix } : {}),
|
|
410
|
+
} satisfies EntryData;
|
|
329
411
|
|
|
330
412
|
// Run children with cache entry as parent
|
|
331
|
-
const result =
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
413
|
+
const result = runAndValidateUseItems(
|
|
414
|
+
store,
|
|
415
|
+
namespace,
|
|
416
|
+
entry,
|
|
417
|
+
children,
|
|
418
|
+
"cache",
|
|
419
|
+
"children",
|
|
336
420
|
);
|
|
337
421
|
|
|
338
|
-
//
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
Array.isArray(result) &&
|
|
342
|
-
result.some((item) => hasRoutesInItem(item));
|
|
343
|
-
|
|
344
|
-
if (!hasRoutes) {
|
|
345
|
-
const parent = ctx.parent;
|
|
346
|
-
if (parent && "layout" in parent) {
|
|
347
|
-
// Attach to parent's layout array (cache entries are structural like layouts)
|
|
348
|
-
entry.parent = null;
|
|
349
|
-
parent.layout.push(entry);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
422
|
+
// Cache entries are structural like layouts: with no routes inside, register
|
|
423
|
+
// as an orphan sibling.
|
|
424
|
+
if (isOrphan(result)) attachOrphanSibling(ctx.parent, entry);
|
|
352
425
|
|
|
353
426
|
return { name: namespace, type: "cache", uses: result } as CacheItem;
|
|
354
427
|
};
|
|
355
428
|
|
|
356
|
-
const middleware: RouteHelpers<any, any>["middleware"] = (...
|
|
429
|
+
const middleware: RouteHelpers<any, any>["middleware"] = (...args: any[]) => {
|
|
430
|
+
// Four call forms:
|
|
431
|
+
// middleware(fn) — single fn, sibling
|
|
432
|
+
// middleware(fn, () => [...]) — single fn, wrapping
|
|
433
|
+
// middleware([fn1, fn2]) — array, sibling
|
|
434
|
+
// middleware([fn1, fn2], () => [...]) — array, wrapping
|
|
435
|
+
const isArray = Array.isArray(args[0]);
|
|
436
|
+
|
|
437
|
+
// Reject the removed variadic form before executing anything.
|
|
438
|
+
// middleware(fn1, fn2, fn3) — 3+ args, always wrong.
|
|
439
|
+
// middleware(fn1, fn2) where fn2 is a middleware fn (length >= 1), not a
|
|
440
|
+
// children callback (length === 0) — legacy two-fn form, reject early.
|
|
441
|
+
if (
|
|
442
|
+
args.length > 2 ||
|
|
443
|
+
(!isArray &&
|
|
444
|
+
args.length === 2 &&
|
|
445
|
+
typeof args[1] === "function" &&
|
|
446
|
+
args[1].length > 0)
|
|
447
|
+
) {
|
|
448
|
+
throw new Error(
|
|
449
|
+
"middleware() no longer accepts variadic arguments. " +
|
|
450
|
+
"Use middleware([fn1, fn2, ...]) instead of middleware(fn1, fn2, ...).",
|
|
451
|
+
);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
const fns: MiddlewareFn<any>[] = isArray ? args[0] : [args[0]];
|
|
455
|
+
const children: (() => any[]) | undefined =
|
|
456
|
+
typeof args[1] === "function" ? args[1] : undefined;
|
|
457
|
+
|
|
357
458
|
// Prevent "use cache" functions from being used as middleware.
|
|
358
|
-
|
|
359
|
-
for (const f of fn) {
|
|
459
|
+
for (const f of fns) {
|
|
360
460
|
if (isCachedFunction(f)) {
|
|
361
461
|
throw new Error(
|
|
362
462
|
`A "use cache" function cannot be used as middleware. ` +
|
|
@@ -367,23 +467,84 @@ const middleware: RouteHelpers<any, any>["middleware"] = (...fn) => {
|
|
|
367
467
|
}
|
|
368
468
|
}
|
|
369
469
|
|
|
370
|
-
const ctx =
|
|
371
|
-
|
|
470
|
+
const { store, ctx } = requireDslContext(
|
|
471
|
+
"middleware() must be called inside urls()",
|
|
472
|
+
);
|
|
372
473
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
474
|
+
if (!children) {
|
|
475
|
+
// Sibling mode: attach to parent entry
|
|
476
|
+
const parent = ctx.parent;
|
|
477
|
+
if (!parent || !("middleware" in parent)) {
|
|
478
|
+
invariant(false, "No parent entry available for middleware()");
|
|
479
|
+
}
|
|
480
|
+
const name = `$${store.getNextIndex("middleware")}`;
|
|
481
|
+
parent.middleware.push(...fns);
|
|
482
|
+
return { name, type: "middleware" } as MiddlewareItem;
|
|
377
483
|
}
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
484
|
+
|
|
485
|
+
// Wrapping mode: create a transparent layout that carries the middleware
|
|
486
|
+
const mwIndex = store.getNextIndex("middleware");
|
|
487
|
+
const namespace = `${ctx.namespace}.${mwIndex}`;
|
|
488
|
+
|
|
489
|
+
const urlPrefix = getUrlPrefix();
|
|
490
|
+
const entry = {
|
|
491
|
+
...emptySegmentBase(),
|
|
492
|
+
id: namespace,
|
|
493
|
+
shortCode: store.getShortCode("layout"),
|
|
494
|
+
type: "layout",
|
|
495
|
+
parent: ctx.parent,
|
|
496
|
+
handler: RootLayout,
|
|
497
|
+
middleware: [...fns],
|
|
498
|
+
...(urlPrefix ? { mountPath: urlPrefix } : {}),
|
|
499
|
+
} satisfies EntryData;
|
|
500
|
+
|
|
501
|
+
// Run children callback. If the second arg was actually a middleware fn
|
|
502
|
+
// (old variadic form: middleware(mw1, mw2)), this will return a non-array
|
|
503
|
+
// and the invariant below gives a clear migration error.
|
|
504
|
+
const rawResult = store.run(namespace, entry, children);
|
|
505
|
+
|
|
506
|
+
invariant(
|
|
507
|
+
Array.isArray(rawResult),
|
|
508
|
+
"middleware(fn, children) expects the second argument to return an array of use items. " +
|
|
509
|
+
"To pass multiple middleware, use middleware([fn1, fn2]).",
|
|
510
|
+
);
|
|
511
|
+
|
|
512
|
+
const result = validateUseItems(
|
|
513
|
+
rawResult.flat(3),
|
|
514
|
+
namespace,
|
|
515
|
+
"middleware",
|
|
516
|
+
"children",
|
|
517
|
+
);
|
|
518
|
+
|
|
519
|
+
if (isOrphan(result)) attachOrphanSibling(ctx.parent, entry);
|
|
520
|
+
|
|
521
|
+
return {
|
|
522
|
+
name: namespace,
|
|
523
|
+
type: "middleware",
|
|
524
|
+
uses: result,
|
|
525
|
+
} as MiddlewareItem;
|
|
381
526
|
};
|
|
382
527
|
|
|
528
|
+
// Slot names become part of segment ids: a parallel/intercept slot is encoded
|
|
529
|
+
// as `${shortCode}.${slotName}`, and loader segments append `D${index}.${loaderId}`.
|
|
530
|
+
// A "." in the slot name collides with that separator -- loaderParentId
|
|
531
|
+
// (segment-system.tsx) strips from the FIRST `D<index>.`, so a name like
|
|
532
|
+
// "@D3.foo" is mis-cut to "@" and the loader's data is silently dropped. Reject
|
|
533
|
+
// the dot at definition time so the failure is loud, not a corrupted tree at
|
|
534
|
+
// runtime. (A bare "D" without a trailing dot -- e.g. "@Detail" -- is fine.)
|
|
535
|
+
function assertValidSlotName(slotName: string): void {
|
|
536
|
+
invariant(
|
|
537
|
+
!slotName.includes("."),
|
|
538
|
+
`Slot name "${slotName}" must not contain ".". The dot is a reserved ` +
|
|
539
|
+
`segment-id separator; a name like "@D3.foo" corrupts loader segment-id ` +
|
|
540
|
+
`parsing and silently drops the loader's data. Rename the slot.`,
|
|
541
|
+
);
|
|
542
|
+
}
|
|
543
|
+
|
|
383
544
|
const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
384
|
-
const store =
|
|
385
|
-
|
|
386
|
-
|
|
545
|
+
const { store, ctx } = requireDslContext(
|
|
546
|
+
"parallel() must be called inside urls()",
|
|
547
|
+
);
|
|
387
548
|
|
|
388
549
|
if (!ctx.parent || !ctx.parent?.parallel) {
|
|
389
550
|
invariant(false, "No parent entry available for parallel()");
|
|
@@ -395,16 +556,29 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
|
395
556
|
);
|
|
396
557
|
|
|
397
558
|
const slotNames = Object.keys(slots as Record<string, any>) as `@${string}`[];
|
|
559
|
+
for (const slotName of slotNames) assertValidSlotName(slotName);
|
|
398
560
|
|
|
399
561
|
const namespace = `${ctx.namespace}.$${store.getNextIndex("parallel")}`;
|
|
400
562
|
|
|
401
|
-
// Unwrap
|
|
563
|
+
// Unwrap slot values. A slot value can be:
|
|
564
|
+
// - a Handler / ReactNode (legacy form)
|
|
565
|
+
// - a Static() definition (build-time only)
|
|
566
|
+
// - a slot descriptor `{ handler, use? }` for slot-local overrides
|
|
567
|
+
// The descriptor's `use` runs after the broadcast `use` for that slot,
|
|
568
|
+
// so single-assignment items like `loading()` placed there win without
|
|
569
|
+
// affecting siblings.
|
|
402
570
|
const unwrappedSlots: Record<string, any> = {};
|
|
571
|
+
const slotLocalUses: Record<string, (() => any[]) | undefined> = {};
|
|
403
572
|
let hasStaticSlot = false;
|
|
404
573
|
const staticSlotIds: Record<string, string> = {};
|
|
405
|
-
for (const [slotName,
|
|
574
|
+
for (const [slotName, rawSlot] of Object.entries(
|
|
406
575
|
slots as Record<string, any>,
|
|
407
576
|
)) {
|
|
577
|
+
let slotHandler: any = rawSlot;
|
|
578
|
+
if (isSlotDescriptor(rawSlot)) {
|
|
579
|
+
slotHandler = rawSlot.handler;
|
|
580
|
+
slotLocalUses[slotName] = rawSlot.use;
|
|
581
|
+
}
|
|
408
582
|
if (isStaticHandler(slotHandler)) {
|
|
409
583
|
hasStaticSlot = true;
|
|
410
584
|
unwrappedSlots[slotName] = slotHandler.handler;
|
|
@@ -423,20 +597,12 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
|
423
597
|
// Create full EntryData for parallel with its own loaders/revalidate/loading
|
|
424
598
|
const parallelUrlPrefix = getUrlPrefix();
|
|
425
599
|
const entry = {
|
|
600
|
+
...emptySegmentBase(),
|
|
426
601
|
id: namespace,
|
|
427
602
|
shortCode: store.getShortCode("parallel"),
|
|
428
603
|
type: "parallel",
|
|
429
604
|
parent: null, // Parallels don't participate in parent chain traversal
|
|
430
605
|
handler: unwrappedSlots,
|
|
431
|
-
loading: undefined, // Allow loading() to attach loading state
|
|
432
|
-
middleware: [],
|
|
433
|
-
revalidate: [],
|
|
434
|
-
errorBoundary: [],
|
|
435
|
-
notFoundBoundary: [],
|
|
436
|
-
layout: [],
|
|
437
|
-
parallel: {},
|
|
438
|
-
intercept: [],
|
|
439
|
-
loader: [],
|
|
440
606
|
...(parallelUrlPrefix ? { mountPath: parallelUrlPrefix } : {}),
|
|
441
607
|
...(hasStaticSlot
|
|
442
608
|
? {
|
|
@@ -471,18 +637,33 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
|
471
637
|
}),
|
|
472
638
|
} satisfies EntryData;
|
|
473
639
|
|
|
474
|
-
// Per-slot
|
|
475
|
-
//
|
|
476
|
-
//
|
|
477
|
-
//
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
640
|
+
// Per-slot merge order (narrowest-scope-wins for single-assignment items
|
|
641
|
+
// like loading()):
|
|
642
|
+
// 1. handler.use — defaults baked into the handler
|
|
643
|
+
// 2. shared `use` — broadcast at the parallel() call site
|
|
644
|
+
// 3. slot-local `use` — per-slot override via `{ handler, use }` descriptor
|
|
645
|
+
// Items that accumulate (loader, middleware, revalidate, …) compose
|
|
646
|
+
// across all three layers regardless of order.
|
|
647
|
+
const rawSlot = (slots as Record<string, any>)[slotName];
|
|
648
|
+
const slotHandlerForUse = isSlotDescriptor(rawSlot)
|
|
649
|
+
? rawSlot.handler
|
|
650
|
+
: rawSlot;
|
|
651
|
+
const slotHandlerUse = resolveHandlerUse(slotHandlerForUse);
|
|
652
|
+
const slotLocalUse = slotLocalUses[slotName];
|
|
653
|
+
const explicitUse = combineExplicitUses(use, slotLocalUse);
|
|
654
|
+
const slotMergedUse = mergeHandlerUse(
|
|
655
|
+
slotHandlerUse,
|
|
656
|
+
explicitUse,
|
|
657
|
+
"parallel",
|
|
658
|
+
);
|
|
481
659
|
if (slotMergedUse) {
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
660
|
+
runAndValidateUseItems(
|
|
661
|
+
store,
|
|
662
|
+
namespace,
|
|
663
|
+
slotEntry,
|
|
664
|
+
slotMergedUse,
|
|
665
|
+
"parallel",
|
|
666
|
+
"use",
|
|
486
667
|
);
|
|
487
668
|
}
|
|
488
669
|
|
|
@@ -491,6 +672,28 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
|
491
672
|
return { name: namespace, type: "parallel" } as ParallelItem;
|
|
492
673
|
};
|
|
493
674
|
|
|
675
|
+
function isSlotDescriptor(
|
|
676
|
+
value: unknown,
|
|
677
|
+
): value is { handler: unknown; use?: () => any[] } {
|
|
678
|
+
return (
|
|
679
|
+
typeof value === "object" &&
|
|
680
|
+
value !== null &&
|
|
681
|
+
!("__brand" in value) &&
|
|
682
|
+
"handler" in value &&
|
|
683
|
+
typeof (value as any).handler !== "undefined"
|
|
684
|
+
);
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
function combineExplicitUses(
|
|
688
|
+
sharedUse: (() => any[]) | undefined,
|
|
689
|
+
slotLocalUse: (() => any[]) | undefined,
|
|
690
|
+
): (() => any[]) | undefined {
|
|
691
|
+
if (!sharedUse && !slotLocalUse) return undefined;
|
|
692
|
+
if (!slotLocalUse) return sharedUse;
|
|
693
|
+
if (!sharedUse) return slotLocalUse;
|
|
694
|
+
return () => [...sharedUse(), ...slotLocalUse()];
|
|
695
|
+
}
|
|
696
|
+
|
|
494
697
|
/**
|
|
495
698
|
* Intercept helper - defines an intercepting route for soft navigation
|
|
496
699
|
*/
|
|
@@ -500,9 +703,9 @@ const intercept = (
|
|
|
500
703
|
handler: any,
|
|
501
704
|
use?: () => any[],
|
|
502
705
|
) => {
|
|
503
|
-
const store =
|
|
504
|
-
|
|
505
|
-
|
|
706
|
+
const { store, ctx } = requireDslContext(
|
|
707
|
+
"intercept() must be called inside urls()",
|
|
708
|
+
);
|
|
506
709
|
|
|
507
710
|
if (!ctx.parent || !ctx.parent?.intercept) {
|
|
508
711
|
invariant(false, "No parent entry available for intercept()");
|
|
@@ -513,6 +716,8 @@ const intercept = (
|
|
|
513
716
|
"intercept() cannot be used inside parallel()",
|
|
514
717
|
);
|
|
515
718
|
|
|
719
|
+
assertValidSlotName(slotName);
|
|
720
|
+
|
|
516
721
|
const namespace = `${ctx.namespace}.$${store.getNextIndex("intercept")}.${slotName}`;
|
|
517
722
|
|
|
518
723
|
// Dot-prefixed = local (add include prefix), unprefixed = global (use as-is)
|
|
@@ -541,15 +746,13 @@ const intercept = (
|
|
|
541
746
|
|
|
542
747
|
// Run merged use callback to collect loaders, revalidate, middleware, etc.
|
|
543
748
|
if (mergedUse) {
|
|
544
|
-
//
|
|
545
|
-
// so that middleware, loader, revalidate attach to the intercept entry
|
|
546
|
-
const originalParent = ctx.parent;
|
|
547
|
-
|
|
548
|
-
// Capture layouts in a temporary array
|
|
749
|
+
// Capture layout() calls into a temporary array
|
|
549
750
|
const capturedLayouts: EntryData[] = [];
|
|
550
751
|
|
|
752
|
+
// Temporary parent so middleware/loader/revalidate/when attach to the
|
|
753
|
+
// intercept entry; the loading get/set accessor mirrors writes onto `entry`.
|
|
551
754
|
const tempParent = {
|
|
552
|
-
...
|
|
755
|
+
...ctx.parent,
|
|
553
756
|
middleware: entry.middleware,
|
|
554
757
|
revalidate: entry.revalidate,
|
|
555
758
|
errorBoundary: entry.errorBoundary,
|
|
@@ -557,7 +760,6 @@ const intercept = (
|
|
|
557
760
|
loader: entry.loader,
|
|
558
761
|
layout: capturedLayouts, // Capture layout() calls
|
|
559
762
|
when: entry.when, // Capture when() conditions
|
|
560
|
-
// Use getter/setter to capture loading on the entry
|
|
561
763
|
get loading() {
|
|
562
764
|
return entry.loading;
|
|
563
765
|
},
|
|
@@ -565,12 +767,10 @@ const intercept = (
|
|
|
565
767
|
entry.loading = value;
|
|
566
768
|
},
|
|
567
769
|
};
|
|
568
|
-
ctx.parent = tempParent as EntryData;
|
|
569
|
-
|
|
570
|
-
const result = mergedUse()?.flat(3);
|
|
571
770
|
|
|
572
|
-
|
|
573
|
-
|
|
771
|
+
const result = withParent(ctx, tempParent as EntryData, () =>
|
|
772
|
+
mergedUse()?.flat(3),
|
|
773
|
+
);
|
|
574
774
|
|
|
575
775
|
// Extract layout from captured layouts (use first one if multiple)
|
|
576
776
|
// Layout inside intercept should always be ReactNode or Handler, not Record slots
|
|
@@ -580,10 +780,7 @@ const intercept = (
|
|
|
580
780
|
| Handler<any, any, any>;
|
|
581
781
|
}
|
|
582
782
|
|
|
583
|
-
|
|
584
|
-
Array.isArray(result) && result.every((item) => isValidUseItem(item)),
|
|
585
|
-
`intercept() use() callback must return an array of use items [${namespace}]`,
|
|
586
|
-
);
|
|
783
|
+
validateUseItems(result, namespace, "intercept", "use");
|
|
587
784
|
}
|
|
588
785
|
|
|
589
786
|
ctx.parent.intercept.push(entry);
|
|
@@ -593,10 +790,10 @@ const intercept = (
|
|
|
593
790
|
/**
|
|
594
791
|
* Loader helper - attaches a loader to the current entry
|
|
595
792
|
*/
|
|
596
|
-
const
|
|
597
|
-
const store =
|
|
598
|
-
|
|
599
|
-
|
|
793
|
+
const loader: RouteHelpers<any, any>["loader"] = (loaderDef, use) => {
|
|
794
|
+
const { store, ctx } = requireDslContext(
|
|
795
|
+
"loader() must be called inside urls()",
|
|
796
|
+
);
|
|
600
797
|
|
|
601
798
|
// Attach to last entry in stack
|
|
602
799
|
if (!ctx.parent || !ctx.parent?.loader) {
|
|
@@ -611,25 +808,28 @@ const loaderFn: RouteHelpers<any, any>["loader"] = (loaderDef, use) => {
|
|
|
611
808
|
revalidate: [] as ShouldRevalidateFn<any, any>[],
|
|
612
809
|
};
|
|
613
810
|
|
|
614
|
-
//
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
811
|
+
// Merge handler.use defaults (attached to the loader definition) with explicit use
|
|
812
|
+
const handlerUseFn = resolveHandlerUse(loaderDef);
|
|
813
|
+
const mergedUse = mergeHandlerUse(handlerUseFn, use, "loader");
|
|
814
|
+
|
|
815
|
+
// If any use callback is in effect, run it to collect revalidation rules and cache config
|
|
816
|
+
if (mergedUse) {
|
|
618
817
|
// Create a temporary "parent" with type "loader" so cache() can detect it.
|
|
619
818
|
// Save existing .cache to distinguish inherited config from newly set config.
|
|
620
|
-
const parentCache = (
|
|
819
|
+
const parentCache = (ctx.parent as any).cache;
|
|
621
820
|
const tempParent = {
|
|
622
|
-
...
|
|
821
|
+
...ctx.parent,
|
|
623
822
|
type: "loader",
|
|
624
823
|
revalidate: loaderEntry.revalidate,
|
|
625
824
|
};
|
|
626
|
-
ctx.parent = tempParent as EntryData;
|
|
627
825
|
|
|
628
|
-
const result =
|
|
826
|
+
const result = withParent(ctx, tempParent as EntryData, () =>
|
|
827
|
+
mergedUse()?.flat(3),
|
|
828
|
+
);
|
|
629
829
|
|
|
630
830
|
// Copy cache config only if cache() was called during the use() callback.
|
|
631
|
-
// The spread
|
|
632
|
-
//
|
|
831
|
+
// The spread may carry an inherited .cache from a parent cache() boundary —
|
|
832
|
+
// only copy if it was newly set.
|
|
633
833
|
if (
|
|
634
834
|
(tempParent as any).cache &&
|
|
635
835
|
(tempParent as any).cache !== parentCache
|
|
@@ -637,13 +837,7 @@ const loaderFn: RouteHelpers<any, any>["loader"] = (loaderDef, use) => {
|
|
|
637
837
|
(loaderEntry as any).cache = (tempParent as any).cache;
|
|
638
838
|
}
|
|
639
839
|
|
|
640
|
-
|
|
641
|
-
ctx.parent = originalParent;
|
|
642
|
-
|
|
643
|
-
invariant(
|
|
644
|
-
Array.isArray(result) && result.every((item) => isValidUseItem(item)),
|
|
645
|
-
`loader() use() callback must return an array of use items [${name}]`,
|
|
646
|
-
);
|
|
840
|
+
validateUseItems(result, name, "loader", "use");
|
|
647
841
|
}
|
|
648
842
|
|
|
649
843
|
ctx.parent.loader.push(loaderEntry);
|
|
@@ -654,10 +848,10 @@ const loaderFn: RouteHelpers<any, any>["loader"] = (loaderDef, use) => {
|
|
|
654
848
|
* Loading helper - attaches a loading component to the current entry
|
|
655
849
|
* Loading components are static (no context) and shown during navigation
|
|
656
850
|
*/
|
|
657
|
-
const
|
|
658
|
-
const store =
|
|
659
|
-
|
|
660
|
-
|
|
851
|
+
const loading: RouteHelpers<any, any>["loading"] = (component, options) => {
|
|
852
|
+
const { store, ctx } = requireDslContext(
|
|
853
|
+
"loading() must be called inside urls()",
|
|
854
|
+
);
|
|
661
855
|
|
|
662
856
|
const parent = ctx.parent;
|
|
663
857
|
if (!parent || !("loading" in parent)) {
|
|
@@ -680,10 +874,13 @@ const loadingFn: RouteHelpers<any, any>["loading"] = (component, options) => {
|
|
|
680
874
|
};
|
|
681
875
|
|
|
682
876
|
/**
|
|
683
|
-
* Transition helper -
|
|
684
|
-
*
|
|
877
|
+
* Transition helper - opts the entry (or a wrapped group of routes) into
|
|
878
|
+
* transition-driven navigation by attaching a TransitionConfig. This drives the
|
|
879
|
+
* commit through startTransition (content hold on all React versions) and, on
|
|
880
|
+
* experimental React, places a `<ViewTransition>` boundary unless
|
|
881
|
+
* `viewTransition: false`. See skills/view-transitions for the matrix.
|
|
685
882
|
*/
|
|
686
|
-
const
|
|
883
|
+
const transition = (
|
|
687
884
|
configOrChildren?: TransitionConfig | (() => UseItems<AllUseItems>),
|
|
688
885
|
maybeChildren?: () => UseItems<AllUseItems>,
|
|
689
886
|
): TransitionItem => {
|
|
@@ -697,11 +894,15 @@ const transitionFn = (
|
|
|
697
894
|
const children: (() => UseItems<AllUseItems>) | undefined =
|
|
698
895
|
typeof configOrChildren === "function" ? configOrChildren : maybeChildren;
|
|
699
896
|
|
|
700
|
-
const store =
|
|
701
|
-
|
|
702
|
-
|
|
897
|
+
const { store, ctx } = requireDslContext(
|
|
898
|
+
"transition() must be called inside urls()",
|
|
899
|
+
);
|
|
703
900
|
|
|
704
|
-
|
|
901
|
+
// Allocate a single index for this transition() call (used in all paths),
|
|
902
|
+
// mirroring cache() — the child form uses it for the name, the wrapper form
|
|
903
|
+
// reuses it for the namespace, so no index is burned.
|
|
904
|
+
const transitionIndex = store.getNextIndex("transition");
|
|
905
|
+
const name = `$${transitionIndex}`;
|
|
705
906
|
|
|
706
907
|
if (!children) {
|
|
707
908
|
// Position 1: child of path() — attach to parent entry
|
|
@@ -714,70 +915,51 @@ const transitionFn = (
|
|
|
714
915
|
}
|
|
715
916
|
|
|
716
917
|
// Position 2: wrapper — create a transparent layout with transition config
|
|
717
|
-
const namespace = `${ctx.namespace}.${
|
|
918
|
+
const namespace = `${ctx.namespace}.${transitionIndex}`;
|
|
718
919
|
const entry = {
|
|
920
|
+
...emptySegmentBase(),
|
|
719
921
|
id: namespace,
|
|
720
922
|
shortCode: store.getShortCode("layout"),
|
|
721
923
|
type: "layout",
|
|
722
924
|
parent: ctx.parent,
|
|
723
925
|
handler: RootLayout,
|
|
724
|
-
loading: undefined,
|
|
725
926
|
transition: config,
|
|
726
|
-
|
|
727
|
-
revalidate: [],
|
|
728
|
-
errorBoundary: [],
|
|
729
|
-
notFoundBoundary: [],
|
|
730
|
-
layout: [],
|
|
731
|
-
parallel: {},
|
|
732
|
-
intercept: [],
|
|
733
|
-
loader: [],
|
|
734
|
-
} as EntryData;
|
|
735
|
-
|
|
736
|
-
const result = store.run(namespace, entry, children)?.flat(3);
|
|
927
|
+
} satisfies EntryData;
|
|
737
928
|
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
929
|
+
const result = runAndValidateUseItems(
|
|
930
|
+
store,
|
|
931
|
+
namespace,
|
|
932
|
+
entry,
|
|
933
|
+
children,
|
|
934
|
+
"transition",
|
|
935
|
+
"children",
|
|
741
936
|
);
|
|
742
937
|
|
|
743
|
-
|
|
744
|
-
result &&
|
|
745
|
-
Array.isArray(result) &&
|
|
746
|
-
result.some((item) => hasRoutesInItem(item));
|
|
747
|
-
|
|
748
|
-
if (!hasRoutes) {
|
|
749
|
-
const parent = ctx.parent;
|
|
750
|
-
if (parent && "layout" in parent) {
|
|
751
|
-
entry.parent = null;
|
|
752
|
-
parent.layout.push(entry);
|
|
753
|
-
}
|
|
754
|
-
}
|
|
938
|
+
if (isOrphan(result)) attachOrphanSibling(ctx.parent, entry);
|
|
755
939
|
|
|
756
940
|
return { name: namespace, type: "transition" } as TransitionItem;
|
|
757
941
|
};
|
|
758
942
|
|
|
759
|
-
const
|
|
760
|
-
const store =
|
|
761
|
-
|
|
762
|
-
|
|
943
|
+
const route: RouteHelpers<any, any>["route"] = (name, handler, use) => {
|
|
944
|
+
const { store, ctx } = requireDslContext(
|
|
945
|
+
"route() must be called inside urls()",
|
|
946
|
+
);
|
|
947
|
+
|
|
948
|
+
// Reject names colliding with reserved internal prefixes ($path_, $prefix_),
|
|
949
|
+
// the same guard path() and include() enforce. Without it such a name
|
|
950
|
+
// type-checks on an untyped router, then silently vanishes from generated
|
|
951
|
+
// route-types and public reverse() (isAutoGeneratedRouteName filters it out).
|
|
952
|
+
validateUserRouteName(name);
|
|
763
953
|
|
|
764
954
|
const namespace = `${ctx.namespace}.${store.getNextIndex("route")}.${name}`;
|
|
765
955
|
|
|
766
956
|
const entry = {
|
|
957
|
+
...emptySegmentBase(),
|
|
767
958
|
id: namespace,
|
|
768
959
|
shortCode: store.getShortCode("route"),
|
|
769
960
|
type: "route",
|
|
770
961
|
parent: ctx.parent,
|
|
771
962
|
handler: handler as unknown as Handler<any, any, any>,
|
|
772
|
-
loading: undefined, // Allow loading() to attach loading state
|
|
773
|
-
middleware: [],
|
|
774
|
-
revalidate: [],
|
|
775
|
-
errorBoundary: [],
|
|
776
|
-
notFoundBoundary: [],
|
|
777
|
-
layout: [],
|
|
778
|
-
parallel: {},
|
|
779
|
-
intercept: [],
|
|
780
|
-
loader: [],
|
|
781
963
|
} satisfies EntryData;
|
|
782
964
|
|
|
783
965
|
/* We will throw if user is registring same route name twice */
|
|
@@ -792,10 +974,13 @@ const routeFn: RouteHelpers<any, any>["route"] = (name, handler, use) => {
|
|
|
792
974
|
const mergedUse = mergeHandlerUse(handlerUseFn, use, "route");
|
|
793
975
|
/* Run use and attach handlers */
|
|
794
976
|
if (mergedUse) {
|
|
795
|
-
const result =
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
977
|
+
const result = runAndValidateUseItems(
|
|
978
|
+
store,
|
|
979
|
+
namespace,
|
|
980
|
+
entry,
|
|
981
|
+
mergedUse,
|
|
982
|
+
"route",
|
|
983
|
+
"use",
|
|
799
984
|
);
|
|
800
985
|
return { name: namespace, type: "route", uses: result } as RouteItem;
|
|
801
986
|
}
|
|
@@ -805,9 +990,9 @@ const routeFn: RouteHelpers<any, any>["route"] = (name, handler, use) => {
|
|
|
805
990
|
};
|
|
806
991
|
|
|
807
992
|
const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
808
|
-
const store =
|
|
809
|
-
|
|
810
|
-
|
|
993
|
+
const { store, ctx } = requireDslContext(
|
|
994
|
+
"layout() must be called inside urls()",
|
|
995
|
+
);
|
|
811
996
|
|
|
812
997
|
invariant(
|
|
813
998
|
!ctx.parent || ctx.parent.type !== "parallel",
|
|
@@ -825,20 +1010,12 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
|
825
1010
|
|
|
826
1011
|
const urlPrefix = getUrlPrefix();
|
|
827
1012
|
const entry = {
|
|
1013
|
+
...emptySegmentBase(),
|
|
828
1014
|
id: namespace,
|
|
829
1015
|
shortCode,
|
|
830
1016
|
type: "layout",
|
|
831
1017
|
parent: ctx.parent,
|
|
832
1018
|
handler: unwrappedHandler,
|
|
833
|
-
loading: undefined, // Allow loading() to attach loading state
|
|
834
|
-
middleware: [],
|
|
835
|
-
revalidate: [],
|
|
836
|
-
errorBoundary: [],
|
|
837
|
-
notFoundBoundary: [],
|
|
838
|
-
parallel: {},
|
|
839
|
-
intercept: [],
|
|
840
|
-
layout: [],
|
|
841
|
-
loader: [],
|
|
842
1019
|
...(urlPrefix ? { mountPath: urlPrefix } : {}),
|
|
843
1020
|
...(isStatic
|
|
844
1021
|
? {
|
|
@@ -860,11 +1037,13 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
|
860
1037
|
// Run merged use callback if present
|
|
861
1038
|
let result: AllUseItems[] | undefined;
|
|
862
1039
|
if (mergedUse) {
|
|
863
|
-
result =
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
1040
|
+
result = runAndValidateUseItems(
|
|
1041
|
+
store,
|
|
1042
|
+
namespace,
|
|
1043
|
+
entry,
|
|
1044
|
+
mergedUse,
|
|
1045
|
+
"layout",
|
|
1046
|
+
"use",
|
|
868
1047
|
);
|
|
869
1048
|
}
|
|
870
1049
|
|
|
@@ -906,9 +1085,7 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
|
906
1085
|
`Orphan layouts can only be defined inside route or layout > check [${namespace}]`,
|
|
907
1086
|
);
|
|
908
1087
|
|
|
909
|
-
|
|
910
|
-
entry.parent = null;
|
|
911
|
-
parent.layout.push(entry);
|
|
1088
|
+
attachOrphanSibling(parent, entry);
|
|
912
1089
|
}
|
|
913
1090
|
}
|
|
914
1091
|
|
|
@@ -921,33 +1098,15 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
|
921
1098
|
} as LayoutItem;
|
|
922
1099
|
};
|
|
923
1100
|
|
|
924
|
-
const isValidUseItem = (item: any): item is AllUseItems | undefined | null =>
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
(item
|
|
929
|
-
typeof item === "object" &&
|
|
930
|
-
"type" in item &&
|
|
931
|
-
[
|
|
932
|
-
"layout",
|
|
933
|
-
"route",
|
|
934
|
-
"middleware",
|
|
935
|
-
"revalidate",
|
|
936
|
-
"parallel",
|
|
937
|
-
"intercept",
|
|
938
|
-
"loader",
|
|
939
|
-
"loading",
|
|
940
|
-
"errorBoundary",
|
|
941
|
-
"notFoundBoundary",
|
|
942
|
-
"when",
|
|
943
|
-
"cache",
|
|
944
|
-
"transition",
|
|
945
|
-
"include", // For urls() include() helper
|
|
946
|
-
].includes(item.type))
|
|
947
|
-
);
|
|
948
|
-
};
|
|
1101
|
+
const isValidUseItem = (item: any): item is AllUseItems | undefined | null =>
|
|
1102
|
+
item == null ||
|
|
1103
|
+
(typeof item === "object" &&
|
|
1104
|
+
"type" in item &&
|
|
1105
|
+
ALL_USE_ITEM_TYPES.has(item.type));
|
|
949
1106
|
|
|
950
|
-
//
|
|
1107
|
+
// DSL helpers exported for direct import from @rangojs/router and for
|
|
1108
|
+
// assembly into the RouteHelpers object in helper-factories.ts. The route-item
|
|
1109
|
+
// types are discriminated by their `type` literal, so the helpers carry no brand.
|
|
951
1110
|
export {
|
|
952
1111
|
layout,
|
|
953
1112
|
cache,
|
|
@@ -958,25 +1117,11 @@ export {
|
|
|
958
1117
|
when,
|
|
959
1118
|
errorBoundary,
|
|
960
1119
|
notFoundBoundary,
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
const isOrphanLayout = (item: AllUseItems): boolean => {
|
|
967
|
-
return (
|
|
968
|
-
item.type === "layout" &&
|
|
969
|
-
!item.uses?.some((child) => hasRoutesInItem(child))
|
|
970
|
-
);
|
|
971
|
-
};
|
|
972
|
-
|
|
973
|
-
// Internal exports used by helper-factories.ts
|
|
974
|
-
export {
|
|
975
|
-
routeFn,
|
|
976
|
-
loaderFn,
|
|
977
|
-
loadingFn,
|
|
978
|
-
transitionFn,
|
|
979
|
-
hasRoutesInItem,
|
|
1120
|
+
route,
|
|
1121
|
+
loader,
|
|
1122
|
+
loading,
|
|
1123
|
+
transition,
|
|
980
1124
|
isValidUseItem,
|
|
981
|
-
|
|
1125
|
+
emptySegmentBase,
|
|
1126
|
+
runAndValidateUseItems,
|
|
982
1127
|
};
|