@rangojs/router 0.0.0-experimental.1b930379 → 0.0.0-experimental.1db96a9e
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 +4 -0
- package/README.md +76 -18
- 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 +138 -50
- package/dist/bin/rango.js.map +1 -0
- package/dist/browser/event-controller.d.ts +191 -0
- package/dist/browser/event-controller.d.ts.map +1 -0
- package/dist/browser/event-controller.js +559 -0
- package/dist/browser/event-controller.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/link-interceptor.d.ts +38 -0
- package/dist/browser/link-interceptor.d.ts.map +1 -0
- package/dist/browser/link-interceptor.js +99 -0
- package/dist/browser/link-interceptor.js.map +1 -0
- package/dist/browser/logging.d.ts +10 -0
- package/dist/browser/logging.d.ts.map +1 -0
- package/dist/browser/logging.js +29 -0
- package/dist/browser/logging.js.map +1 -0
- package/dist/browser/lru-cache.d.ts +17 -0
- package/dist/browser/lru-cache.d.ts.map +1 -0
- package/dist/browser/lru-cache.js +50 -0
- package/dist/browser/lru-cache.js.map +1 -0
- package/dist/browser/merge-segment-loaders.d.ts +39 -0
- package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
- package/dist/browser/merge-segment-loaders.js +102 -0
- package/dist/browser/merge-segment-loaders.js.map +1 -0
- package/dist/browser/navigation-bridge.d.ts +102 -0
- package/dist/browser/navigation-bridge.d.ts.map +1 -0
- package/dist/browser/navigation-bridge.js +708 -0
- package/dist/browser/navigation-bridge.js.map +1 -0
- package/dist/browser/navigation-client.d.ts +25 -0
- package/dist/browser/navigation-client.d.ts.map +1 -0
- package/dist/browser/navigation-client.js +157 -0
- package/dist/browser/navigation-client.js.map +1 -0
- package/dist/browser/navigation-store.d.ts +101 -0
- package/dist/browser/navigation-store.d.ts.map +1 -0
- package/dist/browser/navigation-store.js +625 -0
- package/dist/browser/navigation-store.js.map +1 -0
- package/dist/browser/partial-update.d.ts +75 -0
- package/dist/browser/partial-update.d.ts.map +1 -0
- package/dist/browser/partial-update.js +426 -0
- package/dist/browser/partial-update.js.map +1 -0
- package/dist/browser/react/Link.d.ts +86 -0
- package/dist/browser/react/Link.d.ts.map +1 -0
- package/dist/browser/react/Link.js +128 -0
- package/dist/browser/react/Link.js.map +1 -0
- package/dist/browser/react/NavigationProvider.d.ts +63 -0
- package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
- package/dist/browser/react/NavigationProvider.js +216 -0
- package/dist/browser/react/NavigationProvider.js.map +1 -0
- package/dist/browser/react/ScrollRestoration.d.ts +75 -0
- package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
- package/dist/browser/react/ScrollRestoration.js +57 -0
- package/dist/browser/react/ScrollRestoration.js.map +1 -0
- package/dist/browser/react/context.d.ts +46 -0
- package/dist/browser/react/context.d.ts.map +1 -0
- package/dist/browser/react/context.js +10 -0
- package/dist/browser/react/context.js.map +1 -0
- package/dist/browser/react/index.d.ts +11 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/index.js +22 -0
- package/dist/browser/react/index.js.map +1 -0
- package/dist/browser/react/location-state-shared.d.ts +63 -0
- package/dist/browser/react/location-state-shared.d.ts.map +1 -0
- package/dist/browser/react/location-state-shared.js +81 -0
- package/dist/browser/react/location-state-shared.js.map +1 -0
- package/dist/browser/react/location-state.d.ts +23 -0
- package/dist/browser/react/location-state.d.ts.map +1 -0
- package/dist/browser/react/location-state.js +29 -0
- package/dist/browser/react/location-state.js.map +1 -0
- package/dist/browser/react/mount-context.d.ts +24 -0
- package/dist/browser/react/mount-context.d.ts.map +1 -0
- package/dist/browser/react/mount-context.js +24 -0
- package/dist/browser/react/mount-context.js.map +1 -0
- package/dist/browser/react/use-action.d.ts +64 -0
- package/dist/browser/react/use-action.d.ts.map +1 -0
- package/dist/browser/react/use-action.js +134 -0
- package/dist/browser/react/use-action.js.map +1 -0
- package/dist/browser/react/use-client-cache.d.ts +41 -0
- package/dist/browser/react/use-client-cache.d.ts.map +1 -0
- package/dist/browser/react/use-client-cache.js +39 -0
- package/dist/browser/react/use-client-cache.js.map +1 -0
- package/dist/browser/react/use-handle.d.ts +31 -0
- package/dist/browser/react/use-handle.d.ts.map +1 -0
- package/dist/browser/react/use-handle.js +144 -0
- package/dist/browser/react/use-handle.js.map +1 -0
- package/dist/browser/react/use-href.d.ts +33 -0
- package/dist/browser/react/use-href.d.ts.map +1 -0
- package/dist/browser/react/use-href.js +39 -0
- package/dist/browser/react/use-href.js.map +1 -0
- package/dist/browser/react/use-link-status.d.ts +37 -0
- package/dist/browser/react/use-link-status.d.ts.map +1 -0
- package/dist/browser/react/use-link-status.js +99 -0
- package/dist/browser/react/use-link-status.js.map +1 -0
- package/dist/browser/react/use-mount.d.ts +25 -0
- package/dist/browser/react/use-mount.d.ts.map +1 -0
- package/dist/browser/react/use-mount.js +30 -0
- package/dist/browser/react/use-mount.js.map +1 -0
- package/dist/browser/react/use-navigation.d.ts +27 -0
- package/dist/browser/react/use-navigation.d.ts.map +1 -0
- package/dist/browser/react/use-navigation.js +87 -0
- package/dist/browser/react/use-navigation.js.map +1 -0
- package/dist/browser/react/use-segments.d.ts +38 -0
- package/dist/browser/react/use-segments.d.ts.map +1 -0
- package/dist/browser/react/use-segments.js +130 -0
- package/dist/browser/react/use-segments.js.map +1 -0
- package/dist/browser/request-controller.d.ts +26 -0
- package/dist/browser/request-controller.d.ts.map +1 -0
- package/dist/browser/request-controller.js +147 -0
- package/dist/browser/request-controller.js.map +1 -0
- package/dist/browser/rsc-router.d.ts +129 -0
- package/dist/browser/rsc-router.d.ts.map +1 -0
- package/dist/browser/rsc-router.js +195 -0
- package/dist/browser/rsc-router.js.map +1 -0
- package/dist/browser/scroll-restoration.d.ts +93 -0
- package/dist/browser/scroll-restoration.d.ts.map +1 -0
- package/dist/browser/scroll-restoration.js +321 -0
- package/dist/browser/scroll-restoration.js.map +1 -0
- package/dist/browser/segment-structure-assert.d.ts +17 -0
- package/dist/browser/segment-structure-assert.d.ts.map +1 -0
- package/dist/browser/segment-structure-assert.js +59 -0
- package/dist/browser/segment-structure-assert.js.map +1 -0
- package/dist/browser/server-action-bridge.d.ts +26 -0
- package/dist/browser/server-action-bridge.d.ts.map +1 -0
- package/dist/browser/server-action-bridge.js +668 -0
- package/dist/browser/server-action-bridge.js.map +1 -0
- package/dist/browser/shallow.d.ts +12 -0
- package/dist/browser/shallow.d.ts.map +1 -0
- package/dist/browser/shallow.js +34 -0
- package/dist/browser/shallow.js.map +1 -0
- package/dist/browser/types.d.ts +369 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
- package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-cli.test.js +237 -0
- package/dist/build/__tests__/generate-cli.test.js.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.js +119 -0
- package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.js +620 -0
- package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.js +308 -0
- package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +81 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +276 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/build/generate-route-types.d.ts +115 -0
- package/dist/build/generate-route-types.d.ts.map +1 -0
- package/dist/build/generate-route-types.js +740 -0
- package/dist/build/generate-route-types.js.map +1 -0
- package/dist/build/index.d.ts +21 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +21 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/route-trie.d.ts +71 -0
- package/dist/build/route-trie.d.ts.map +1 -0
- package/dist/build/route-trie.js +175 -0
- package/dist/build/route-trie.js.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.js +208 -0
- package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
- package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
- package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
- package/dist/cache/__tests__/document-cache.test.js +345 -0
- package/dist/cache/__tests__/document-cache.test.js.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
- package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
- package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-store.test.js +367 -0
- package/dist/cache/__tests__/memory-store.test.js.map +1 -0
- package/dist/cache/cache-scope.d.ts +102 -0
- package/dist/cache/cache-scope.d.ts.map +1 -0
- package/dist/cache/cache-scope.js +440 -0
- package/dist/cache/cache-scope.js.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
- package/dist/cache/cf/cf-cache-store.d.ts +165 -0
- package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
- package/dist/cache/cf/cf-cache-store.js +242 -0
- package/dist/cache/cf/cf-cache-store.js.map +1 -0
- package/dist/cache/cf/index.d.ts +14 -0
- package/dist/cache/cf/index.d.ts.map +1 -0
- package/dist/cache/cf/index.js +17 -0
- package/dist/cache/cf/index.js.map +1 -0
- package/dist/cache/document-cache.d.ts +64 -0
- package/dist/cache/document-cache.d.ts.map +1 -0
- package/dist/cache/document-cache.js +228 -0
- package/dist/cache/document-cache.js.map +1 -0
- package/dist/cache/index.d.ts +19 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-segment-store.d.ts +110 -0
- package/dist/cache/memory-segment-store.d.ts.map +1 -0
- package/dist/cache/memory-segment-store.js +117 -0
- package/dist/cache/memory-segment-store.js.map +1 -0
- package/dist/cache/memory-store.d.ts +41 -0
- package/dist/cache/memory-store.d.ts.map +1 -0
- package/dist/cache/memory-store.js +191 -0
- package/dist/cache/memory-store.js.map +1 -0
- package/dist/cache/types.d.ts +317 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +12 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client.d.ts +248 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +367 -0
- package/dist/client.js.map +1 -0
- package/dist/client.rsc.d.ts +26 -0
- package/dist/client.rsc.d.ts.map +1 -0
- package/dist/client.rsc.js +46 -0
- package/dist/client.rsc.js.map +1 -0
- package/dist/component-utils.d.ts +36 -0
- package/dist/component-utils.d.ts.map +1 -0
- package/dist/component-utils.js +61 -0
- package/dist/component-utils.js.map +1 -0
- package/dist/components/DefaultDocument.d.ts +13 -0
- package/dist/components/DefaultDocument.d.ts.map +1 -0
- package/dist/components/DefaultDocument.js +15 -0
- package/dist/components/DefaultDocument.js.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +157 -0
- package/dist/debug.js.map +1 -0
- package/dist/default-error-boundary.d.ts +11 -0
- package/dist/default-error-boundary.d.ts.map +1 -0
- package/dist/default-error-boundary.js +45 -0
- package/dist/default-error-boundary.js.map +1 -0
- package/dist/deps/browser.d.ts +2 -0
- package/dist/deps/browser.d.ts.map +1 -0
- package/dist/deps/browser.js +3 -0
- package/dist/deps/browser.js.map +1 -0
- package/dist/deps/html-stream-client.d.ts +2 -0
- package/dist/deps/html-stream-client.d.ts.map +1 -0
- package/dist/deps/html-stream-client.js +3 -0
- package/dist/deps/html-stream-client.js.map +1 -0
- package/dist/deps/html-stream-server.d.ts +2 -0
- package/dist/deps/html-stream-server.d.ts.map +1 -0
- package/dist/deps/html-stream-server.js +3 -0
- package/dist/deps/html-stream-server.js.map +1 -0
- package/dist/deps/rsc.d.ts +2 -0
- package/dist/deps/rsc.d.ts.map +1 -0
- package/dist/deps/rsc.js +4 -0
- package/dist/deps/rsc.js.map +1 -0
- package/dist/deps/ssr.d.ts +2 -0
- package/dist/deps/ssr.d.ts.map +1 -0
- package/dist/deps/ssr.js +3 -0
- package/dist/deps/ssr.js.map +1 -0
- package/dist/errors.d.ts +174 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +241 -0
- package/dist/errors.js.map +1 -0
- package/dist/handle.d.ts +78 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +82 -0
- package/dist/handle.js.map +1 -0
- package/dist/handles/MetaTags.d.ts +14 -0
- package/dist/handles/MetaTags.d.ts.map +1 -0
- package/dist/handles/MetaTags.js +136 -0
- package/dist/handles/MetaTags.js.map +1 -0
- package/dist/handles/index.d.ts +6 -0
- package/dist/handles/index.d.ts.map +1 -0
- package/dist/handles/index.js +6 -0
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/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/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 +684 -366
- package/dist/vite/index.js.bak +5448 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/index.named-routes.gen.ts +103 -0
- package/dist/vite/package-resolution.d.ts +43 -0
- package/dist/vite/package-resolution.d.ts.map +1 -0
- package/dist/vite/package-resolution.js +112 -0
- package/dist/vite/package-resolution.js.map +1 -0
- package/dist/vite/virtual-entries.d.ts +25 -0
- package/dist/vite/virtual-entries.d.ts.map +1 -0
- package/dist/vite/virtual-entries.js +110 -0
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +16 -15
- package/skills/cache-guide/SKILL.md +32 -0
- package/skills/caching/SKILL.md +45 -4
- package/skills/links/SKILL.md +3 -1
- package/skills/loader/SKILL.md +53 -43
- package/skills/middleware/SKILL.md +2 -0
- package/skills/parallel/SKILL.md +126 -0
- package/skills/prerender/SKILL.md +110 -68
- package/skills/route/SKILL.md +31 -0
- package/skills/router-setup/SKILL.md +87 -2
- package/skills/typesafety/SKILL.md +10 -0
- package/src/__internal.ts +1 -1
- package/src/browser/app-version.ts +14 -0
- package/src/browser/event-controller.ts +5 -0
- package/src/browser/navigation-bridge.ts +19 -13
- package/src/browser/navigation-client.ts +115 -58
- package/src/browser/navigation-store.ts +43 -8
- package/src/browser/navigation-transaction.ts +11 -9
- package/src/browser/partial-update.ts +80 -15
- package/src/browser/prefetch/cache.ts +57 -5
- package/src/browser/prefetch/fetch.ts +38 -23
- package/src/browser/prefetch/queue.ts +92 -20
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/react/Link.tsx +53 -9
- package/src/browser/react/NavigationProvider.tsx +40 -4
- package/src/browser/react/context.ts +7 -2
- package/src/browser/react/use-handle.ts +9 -58
- package/src/browser/react/use-router.ts +21 -8
- package/src/browser/rsc-router.tsx +134 -59
- package/src/browser/scroll-restoration.ts +41 -42
- package/src/browser/segment-reconciler.ts +6 -1
- package/src/browser/server-action-bridge.ts +8 -6
- package/src/browser/types.ts +36 -5
- package/src/build/generate-manifest.ts +6 -6
- package/src/build/generate-route-types.ts +3 -0
- package/src/build/route-types/include-resolution.ts +8 -1
- package/src/build/route-types/router-processing.ts +223 -74
- package/src/build/route-types/scan-filter.ts +8 -1
- package/src/cache/cache-runtime.ts +15 -11
- package/src/cache/cache-scope.ts +48 -7
- package/src/cache/cf/cf-cache-store.ts +453 -11
- package/src/cache/cf/index.ts +5 -1
- package/src/cache/document-cache.ts +17 -7
- package/src/cache/index.ts +1 -0
- package/src/cache/taint.ts +55 -0
- package/src/client.tsx +2 -56
- package/src/context-var.ts +72 -2
- package/src/debug.ts +2 -2
- package/src/handle.ts +40 -0
- package/src/index.rsc.ts +3 -1
- package/src/index.ts +12 -0
- package/src/prerender/store.ts +5 -4
- package/src/prerender.ts +138 -77
- package/src/reverse.ts +22 -1
- package/src/route-definition/dsl-helpers.ts +73 -25
- package/src/route-definition/helpers-types.ts +10 -6
- package/src/route-definition/index.ts +3 -0
- package/src/route-definition/redirect.ts +11 -3
- package/src/route-definition/resolve-handler-use.ts +149 -0
- package/src/route-map-builder.ts +7 -1
- package/src/route-types.ts +11 -0
- package/src/router/content-negotiation.ts +100 -1
- package/src/router/find-match.ts +4 -2
- package/src/router/handler-context.ts +79 -23
- package/src/router/intercept-resolution.ts +11 -4
- package/src/router/lazy-includes.ts +4 -1
- package/src/router/loader-resolution.ts +156 -21
- package/src/router/logging.ts +5 -2
- package/src/router/manifest.ts +9 -3
- package/src/router/match-api.ts +124 -189
- package/src/router/match-middleware/background-revalidation.ts +30 -2
- package/src/router/match-middleware/cache-lookup.ts +92 -16
- package/src/router/match-middleware/cache-store.ts +53 -10
- package/src/router/match-middleware/intercept-resolution.ts +9 -7
- package/src/router/match-middleware/segment-resolution.ts +61 -5
- package/src/router/match-result.ts +22 -6
- package/src/router/metrics.ts +6 -1
- package/src/router/middleware-types.ts +6 -8
- package/src/router/middleware.ts +4 -6
- package/src/router/navigation-snapshot.ts +182 -0
- package/src/router/prerender-match.ts +110 -10
- package/src/router/preview-match.ts +30 -102
- package/src/router/request-classification.ts +310 -0
- package/src/router/route-snapshot.ts +245 -0
- package/src/router/router-context.ts +6 -1
- package/src/router/router-interfaces.ts +36 -4
- package/src/router/router-options.ts +37 -11
- package/src/router/segment-resolution/fresh.ts +193 -20
- package/src/router/segment-resolution/helpers.ts +29 -24
- package/src/router/segment-resolution/loader-cache.ts +1 -0
- package/src/router/segment-resolution/revalidation.ts +431 -297
- package/src/router/segment-wrappers.ts +2 -0
- package/src/router/types.ts +1 -0
- package/src/router.ts +59 -6
- package/src/rsc/handler.ts +464 -368
- package/src/rsc/loader-fetch.ts +23 -3
- package/src/rsc/manifest-init.ts +5 -1
- package/src/rsc/progressive-enhancement.ts +14 -2
- package/src/rsc/rsc-rendering.ts +10 -1
- package/src/rsc/server-action.ts +8 -0
- package/src/rsc/ssr-setup.ts +2 -2
- package/src/rsc/types.ts +9 -1
- package/src/segment-system.tsx +140 -4
- package/src/server/context.ts +140 -14
- package/src/server/handle-store.ts +19 -0
- package/src/server/loader-registry.ts +9 -8
- package/src/server/request-context.ts +185 -19
- package/src/ssr/index.tsx +4 -0
- package/src/static-handler.ts +18 -6
- package/src/types/cache-types.ts +4 -4
- package/src/types/handler-context.ts +137 -33
- package/src/types/loader-types.ts +36 -9
- package/src/types/route-entry.ts +8 -1
- package/src/types/segments.ts +2 -0
- package/src/urls/path-helper-types.ts +9 -2
- package/src/urls/path-helper.ts +48 -13
- package/src/urls/pattern-types.ts +12 -0
- package/src/urls/response-types.ts +16 -6
- package/src/use-loader.tsx +73 -4
- package/src/vite/discovery/bundle-postprocess.ts +30 -33
- package/src/vite/discovery/discover-routers.ts +5 -1
- package/src/vite/discovery/prerender-collection.ts +44 -1
- package/src/vite/discovery/state.ts +13 -6
- package/src/vite/index.ts +4 -0
- package/src/vite/plugin-types.ts +51 -79
- package/src/vite/plugins/expose-action-id.ts +1 -3
- package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
- package/src/vite/plugins/expose-internal-ids.ts +122 -39
- package/src/vite/plugins/performance-tracks.ts +88 -0
- package/src/vite/plugins/refresh-cmd.ts +88 -26
- package/src/vite/plugins/version-plugin.ts +13 -1
- package/src/vite/rango.ts +163 -211
- package/src/vite/router-discovery.ts +178 -45
- package/src/vite/utils/banner.ts +3 -3
- package/src/vite/utils/prerender-utils.ts +18 -0
- package/src/vite/utils/shared-utils.ts +3 -2
package/src/prerender.ts
CHANGED
|
@@ -36,6 +36,7 @@ import type { Handle } from "./handle.js";
|
|
|
36
36
|
import type { ContextVar } from "./context-var.js";
|
|
37
37
|
import type { ReverseFunction } from "./reverse.js";
|
|
38
38
|
import type { DefaultReverseRouteMap } from "./types/global-namespace.js";
|
|
39
|
+
import type { UseItems, HandlerUseItem } from "./route-types.js";
|
|
39
40
|
import { isCachedFunction } from "./cache/taint.js";
|
|
40
41
|
|
|
41
42
|
// -- Named route resolution types -------------------------------------------
|
|
@@ -105,13 +106,6 @@ type ResolvePrerenderParams<
|
|
|
105
106
|
// -- Types ------------------------------------------------------------------
|
|
106
107
|
|
|
107
108
|
export interface PrerenderOptions {
|
|
108
|
-
/**
|
|
109
|
-
* Keep handler in server bundle for live fallback (default: false).
|
|
110
|
-
* false: handler replaced with stub, source-only APIs excluded from bundle.
|
|
111
|
-
* true: handler stays in bundle, unknown params render live at request time.
|
|
112
|
-
*/
|
|
113
|
-
passthrough?: boolean;
|
|
114
|
-
|
|
115
109
|
/**
|
|
116
110
|
* Maximum number of param sets to render in parallel (default: 1).
|
|
117
111
|
* Only applies to dynamic Prerender handlers with getParams().
|
|
@@ -131,8 +125,8 @@ export interface PrerenderOptions {
|
|
|
131
125
|
|
|
132
126
|
/**
|
|
133
127
|
* Context passed to Prerender() handlers at build time.
|
|
134
|
-
* Has a synthetic URL from getParams, params, and
|
|
135
|
-
* No request,
|
|
128
|
+
* Has a synthetic URL from getParams, params, pathname, and optionally env.
|
|
129
|
+
* No request, headers, cookies.
|
|
136
130
|
*/
|
|
137
131
|
export interface BuildContext<TParams> {
|
|
138
132
|
/** Params extracted from the route pattern (populated from getParams). */
|
|
@@ -141,6 +135,23 @@ export interface BuildContext<TParams> {
|
|
|
141
135
|
/** True during build-time pre-rendering, false during passthrough live render. */
|
|
142
136
|
build: true;
|
|
143
137
|
|
|
138
|
+
/**
|
|
139
|
+
* True when running in Vite dev mode (on-demand prerender), false during
|
|
140
|
+
* production `vite build`. Use this to branch on runtime mode without
|
|
141
|
+
* changing build semantics.
|
|
142
|
+
*/
|
|
143
|
+
dev: boolean;
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Build-time environment bindings (KV, D1, etc.) supplied by the Vite plugin.
|
|
147
|
+
* Only available when `buildEnv` is configured in rango() options.
|
|
148
|
+
* Throws with a clear error if not configured.
|
|
149
|
+
*
|
|
150
|
+
* This is NOT the live request env — it is shared across all prerender
|
|
151
|
+
* invocations for the build.
|
|
152
|
+
*/
|
|
153
|
+
env: DefaultEnv;
|
|
154
|
+
|
|
144
155
|
/** Read a variable set by getParams or a parent handler. */
|
|
145
156
|
get: {
|
|
146
157
|
<T>(contextVar: ContextVar<T>): T | undefined;
|
|
@@ -173,8 +184,8 @@ export interface BuildContext<TParams> {
|
|
|
173
184
|
|
|
174
185
|
/**
|
|
175
186
|
* Signal that this param set should not produce a local prerender artifact.
|
|
176
|
-
* At runtime the handler runs
|
|
177
|
-
* with `
|
|
187
|
+
* At runtime the live handler runs instead. Only valid on routes wrapped
|
|
188
|
+
* with `Passthrough()`.
|
|
178
189
|
*/
|
|
179
190
|
passthrough: () => PrerenderPassthroughResult;
|
|
180
191
|
}
|
|
@@ -187,6 +198,17 @@ export interface StaticBuildContext {
|
|
|
187
198
|
/** Always true for Static handlers at build time. */
|
|
188
199
|
build: true;
|
|
189
200
|
|
|
201
|
+
/**
|
|
202
|
+
* True when running in Vite dev mode, false during production build.
|
|
203
|
+
*/
|
|
204
|
+
dev: boolean;
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Build-time environment bindings supplied by the Vite plugin.
|
|
208
|
+
* Only available when `buildEnv` is configured in rango() options.
|
|
209
|
+
*/
|
|
210
|
+
env: DefaultEnv;
|
|
211
|
+
|
|
190
212
|
/** Read a variable (available for type consistency with BuildContext). */
|
|
191
213
|
get: {
|
|
192
214
|
<T>(contextVar: ContextVar<T>): T | undefined;
|
|
@@ -214,6 +236,17 @@ export interface GetParamsContext {
|
|
|
214
236
|
/** Always true during build-time getParams execution. */
|
|
215
237
|
build: true;
|
|
216
238
|
|
|
239
|
+
/**
|
|
240
|
+
* True when running in Vite dev mode, false during production build.
|
|
241
|
+
*/
|
|
242
|
+
dev: boolean;
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Build-time environment bindings supplied by the Vite plugin.
|
|
246
|
+
* Only available when `buildEnv` is configured in rango() options.
|
|
247
|
+
*/
|
|
248
|
+
env: DefaultEnv;
|
|
249
|
+
|
|
217
250
|
/** Set a variable that will be available to each handler invocation via ctx.get(). */
|
|
218
251
|
set: {
|
|
219
252
|
<T>(contextVar: ContextVar<T>, value: T): void;
|
|
@@ -224,23 +257,6 @@ export interface GetParamsContext {
|
|
|
224
257
|
reverse: BuildReverseFunction;
|
|
225
258
|
}
|
|
226
259
|
|
|
227
|
-
/**
|
|
228
|
-
* Context type for passthrough Prerender handlers.
|
|
229
|
-
*
|
|
230
|
-
* When `passthrough: true`, the handler runs both at build time and at request
|
|
231
|
-
* time. The context is a full `HandlerContext` with `build: boolean`:
|
|
232
|
-
* - `ctx.build === true`: build-time, env/request/res throw at runtime
|
|
233
|
-
* - `ctx.build === false`: live request, full context available
|
|
234
|
-
*
|
|
235
|
-
* For `passthrough: false` (default), handlers receive `BuildContext` only.
|
|
236
|
-
*/
|
|
237
|
-
export type PrerenderPassthroughContext<
|
|
238
|
-
TParams = {},
|
|
239
|
-
TEnv = DefaultEnv,
|
|
240
|
-
> = HandlerContext<TParams, TEnv> & {
|
|
241
|
-
passthrough: () => PrerenderPassthroughResult;
|
|
242
|
-
};
|
|
243
|
-
|
|
244
260
|
export interface PrerenderHandlerDefinition<
|
|
245
261
|
TParams extends Record<string, any> = any,
|
|
246
262
|
> {
|
|
@@ -253,6 +269,8 @@ export interface PrerenderHandlerDefinition<
|
|
|
253
269
|
getParams?: (ctx: GetParamsContext) => Promise<TParams[]> | TParams[];
|
|
254
270
|
/** Pre-render options. */
|
|
255
271
|
options?: PrerenderOptions;
|
|
272
|
+
/** Composable default DSL items merged when the handler is mounted. */
|
|
273
|
+
use?: () => UseItems<HandlerUseItem>;
|
|
256
274
|
}
|
|
257
275
|
|
|
258
276
|
// -- Overloads --------------------------------------------------------------
|
|
@@ -263,7 +281,7 @@ export interface PrerenderHandlerDefinition<
|
|
|
263
281
|
// Explicit params work as before:
|
|
264
282
|
// Prerender<{ slug: string }> → params = { slug: string }
|
|
265
283
|
|
|
266
|
-
// Overload 1: Static handler
|
|
284
|
+
// Overload 1: Static handler (build-time only)
|
|
267
285
|
export function Prerender<
|
|
268
286
|
T extends
|
|
269
287
|
| keyof DefaultPrerenderRouteMap
|
|
@@ -273,34 +291,15 @@ export function Prerender<
|
|
|
273
291
|
>(
|
|
274
292
|
handler: (
|
|
275
293
|
ctx: BuildContext<ResolvePrerenderParams<T, TRouteMap>>,
|
|
276
|
-
) => ReactNode | Promise<ReactNode>,
|
|
277
|
-
options?: PrerenderOptions & { passthrough?: false },
|
|
278
|
-
__injectedId?: string,
|
|
279
|
-
): PrerenderHandlerDefinition<ResolvePrerenderParams<T, TRouteMap>>;
|
|
280
|
-
|
|
281
|
-
// Overload 2: Static handler, passthrough (build + live — full HandlerContext)
|
|
282
|
-
export function Prerender<
|
|
283
|
-
T extends
|
|
284
|
-
| keyof DefaultPrerenderRouteMap
|
|
285
|
-
| `.${keyof TRouteMap & string}`
|
|
286
|
-
| Record<string, any> = {},
|
|
287
|
-
TRouteMap extends {} = DefaultPrerenderRouteMap,
|
|
288
|
-
TEnv = DefaultEnv,
|
|
289
|
-
>(
|
|
290
|
-
handler: (
|
|
291
|
-
ctx: PrerenderPassthroughContext<
|
|
292
|
-
ResolvePrerenderParams<T, TRouteMap>,
|
|
293
|
-
TEnv
|
|
294
|
-
>,
|
|
295
294
|
) =>
|
|
296
295
|
| ReactNode
|
|
297
296
|
| PrerenderPassthroughResult
|
|
298
297
|
| Promise<ReactNode | PrerenderPassthroughResult>,
|
|
299
|
-
options
|
|
298
|
+
options?: PrerenderOptions,
|
|
300
299
|
__injectedId?: string,
|
|
301
300
|
): PrerenderHandlerDefinition<ResolvePrerenderParams<T, TRouteMap>>;
|
|
302
301
|
|
|
303
|
-
// Overload
|
|
302
|
+
// Overload 2: Dynamic handler (build-time only)
|
|
304
303
|
export function Prerender<
|
|
305
304
|
T extends
|
|
306
305
|
| keyof DefaultPrerenderRouteMap
|
|
@@ -315,35 +314,11 @@ export function Prerender<
|
|
|
315
314
|
| ResolvePrerenderParams<T, TRouteMap>[],
|
|
316
315
|
handler: (
|
|
317
316
|
ctx: BuildContext<ResolvePrerenderParams<T, TRouteMap>>,
|
|
318
|
-
) => ReactNode | Promise<ReactNode>,
|
|
319
|
-
options?: PrerenderOptions & { passthrough?: false },
|
|
320
|
-
__injectedId?: string,
|
|
321
|
-
): PrerenderHandlerDefinition<ResolvePrerenderParams<T, TRouteMap>>;
|
|
322
|
-
|
|
323
|
-
// Overload 4: Dynamic handler, passthrough (build + live — full HandlerContext)
|
|
324
|
-
export function Prerender<
|
|
325
|
-
T extends
|
|
326
|
-
| keyof DefaultPrerenderRouteMap
|
|
327
|
-
| `.${keyof TRouteMap & string}`
|
|
328
|
-
| Record<string, any>,
|
|
329
|
-
TRouteMap extends {} = DefaultPrerenderRouteMap,
|
|
330
|
-
TEnv = DefaultEnv,
|
|
331
|
-
>(
|
|
332
|
-
getParams: (
|
|
333
|
-
ctx: GetParamsContext,
|
|
334
|
-
) =>
|
|
335
|
-
| Promise<ResolvePrerenderParams<T, TRouteMap>[]>
|
|
336
|
-
| ResolvePrerenderParams<T, TRouteMap>[],
|
|
337
|
-
handler: (
|
|
338
|
-
ctx: PrerenderPassthroughContext<
|
|
339
|
-
ResolvePrerenderParams<T, TRouteMap>,
|
|
340
|
-
TEnv
|
|
341
|
-
>,
|
|
342
317
|
) =>
|
|
343
318
|
| ReactNode
|
|
344
319
|
| PrerenderPassthroughResult
|
|
345
320
|
| Promise<ReactNode | PrerenderPassthroughResult>,
|
|
346
|
-
options
|
|
321
|
+
options?: PrerenderOptions,
|
|
347
322
|
__injectedId?: string,
|
|
348
323
|
): PrerenderHandlerDefinition<ResolvePrerenderParams<T, TRouteMap>>;
|
|
349
324
|
|
|
@@ -422,7 +397,7 @@ export function Prerender<TParams extends Record<string, any>>(
|
|
|
422
397
|
/**
|
|
423
398
|
* Sentinel returned by `ctx.passthrough()` to signal that a specific param set
|
|
424
399
|
* should not produce a local prerender artifact. The build skips writing the
|
|
425
|
-
* entry; at runtime the
|
|
400
|
+
* entry; at runtime the Passthrough live handler runs instead.
|
|
426
401
|
*/
|
|
427
402
|
export const PRERENDER_PASSTHROUGH: Readonly<{
|
|
428
403
|
__brand: "prerenderPassthrough";
|
|
@@ -446,7 +421,7 @@ export function isPrerenderPassthrough(
|
|
|
446
421
|
);
|
|
447
422
|
}
|
|
448
423
|
|
|
449
|
-
// -- Type
|
|
424
|
+
// -- Type guards ------------------------------------------------------------
|
|
450
425
|
|
|
451
426
|
/**
|
|
452
427
|
* Type guard to check if a value is a PrerenderHandlerDefinition.
|
|
@@ -461,3 +436,89 @@ export function isPrerenderHandler(
|
|
|
461
436
|
(value as { __brand: unknown }).__brand === "prerenderHandler"
|
|
462
437
|
);
|
|
463
438
|
}
|
|
439
|
+
|
|
440
|
+
// -- Passthrough wrapper ----------------------------------------------------
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* A prerender route with a live fallback handler for unknown params at runtime.
|
|
444
|
+
*
|
|
445
|
+
* Wraps a `Prerender(...)` definition with a separate handler that runs at
|
|
446
|
+
* request time for params not covered by `getParams()`.
|
|
447
|
+
*
|
|
448
|
+
* - Build time: `prerenderDef` provides getParams + build handler.
|
|
449
|
+
* - Runtime: `liveHandler` runs for unknown params with full HandlerContext.
|
|
450
|
+
*
|
|
451
|
+
* @example
|
|
452
|
+
* ```ts
|
|
453
|
+
* const BlogPrerender = Prerender(
|
|
454
|
+
* async () => [{ slug: "getting-started" }, { slug: "api-reference" }],
|
|
455
|
+
* async (ctx) => <BlogPost slug={ctx.params.slug} />,
|
|
456
|
+
* );
|
|
457
|
+
*
|
|
458
|
+
* // In route definition:
|
|
459
|
+
* path("/blog/:slug", Passthrough(BlogPrerender, async (ctx) => {
|
|
460
|
+
* const post = await ctx.env.DB.get(ctx.params.slug);
|
|
461
|
+
* return <BlogPost slug={ctx.params.slug} post={post} />;
|
|
462
|
+
* }))
|
|
463
|
+
* ```
|
|
464
|
+
*/
|
|
465
|
+
export interface PassthroughHandlerDefinition<
|
|
466
|
+
TParams extends Record<string, any> = any,
|
|
467
|
+
TEnv = DefaultEnv,
|
|
468
|
+
> {
|
|
469
|
+
readonly __brand: "passthroughHandler";
|
|
470
|
+
/** The underlying prerender definition (build-time rendering). */
|
|
471
|
+
prerenderDef: PrerenderHandlerDefinition<TParams>;
|
|
472
|
+
/** Live handler for runtime fallback on unknown params. */
|
|
473
|
+
liveHandler: (
|
|
474
|
+
ctx: HandlerContext<TParams, TEnv>,
|
|
475
|
+
) => ReactNode | Promise<ReactNode> | Response | Promise<Response>;
|
|
476
|
+
/** Composable default DSL items merged when the handler is mounted. */
|
|
477
|
+
use?: () => UseItems<HandlerUseItem>;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
export function Passthrough<
|
|
481
|
+
TParams extends Record<string, any>,
|
|
482
|
+
TEnv = DefaultEnv,
|
|
483
|
+
>(
|
|
484
|
+
prerenderDef: PrerenderHandlerDefinition<TParams>,
|
|
485
|
+
liveHandler: (
|
|
486
|
+
ctx: HandlerContext<TParams, TEnv>,
|
|
487
|
+
) => ReactNode | Promise<ReactNode> | Response | Promise<Response>,
|
|
488
|
+
): PassthroughHandlerDefinition<TParams, TEnv>;
|
|
489
|
+
|
|
490
|
+
// Implementation
|
|
491
|
+
export function Passthrough<
|
|
492
|
+
TParams extends Record<string, any>,
|
|
493
|
+
TEnv = DefaultEnv,
|
|
494
|
+
>(
|
|
495
|
+
prerenderDef: PrerenderHandlerDefinition<TParams>,
|
|
496
|
+
liveHandler: (
|
|
497
|
+
ctx: HandlerContext<TParams, TEnv>,
|
|
498
|
+
) => ReactNode | Promise<ReactNode> | Response | Promise<Response>,
|
|
499
|
+
): PassthroughHandlerDefinition<TParams, TEnv> {
|
|
500
|
+
if (!isPrerenderHandler(prerenderDef)) {
|
|
501
|
+
throw new Error(
|
|
502
|
+
"[rsc-router] Passthrough: first argument must be a Prerender() definition.",
|
|
503
|
+
);
|
|
504
|
+
}
|
|
505
|
+
return {
|
|
506
|
+
__brand: "passthroughHandler" as const,
|
|
507
|
+
prerenderDef,
|
|
508
|
+
liveHandler,
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
/**
|
|
513
|
+
* Type guard to check if a value is a PassthroughHandlerDefinition.
|
|
514
|
+
*/
|
|
515
|
+
export function isPassthroughHandler(
|
|
516
|
+
value: unknown,
|
|
517
|
+
): value is PassthroughHandlerDefinition {
|
|
518
|
+
return (
|
|
519
|
+
typeof value === "object" &&
|
|
520
|
+
value !== null &&
|
|
521
|
+
"__brand" in value &&
|
|
522
|
+
(value as { __brand: unknown }).__brand === "passthroughHandler"
|
|
523
|
+
);
|
|
524
|
+
}
|
package/src/reverse.ts
CHANGED
|
@@ -305,8 +305,22 @@ export function createReverse<TRoutes extends Record<string, string>>(
|
|
|
305
305
|
if (params) {
|
|
306
306
|
// Replace :param placeholders with actual values
|
|
307
307
|
// Strip constraint syntax: :param(a|b) -> use "param" as key
|
|
308
|
+
// Optional params (:param?) are omitted when not provided
|
|
309
|
+
let hadOmittedOptional = false;
|
|
308
310
|
result = result.replace(
|
|
309
|
-
/:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))
|
|
311
|
+
/:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?(\?)/g,
|
|
312
|
+
(_, key, _constraint, optional) => {
|
|
313
|
+
const value = params[key];
|
|
314
|
+
if (value === undefined) {
|
|
315
|
+
hadOmittedOptional = true;
|
|
316
|
+
return "";
|
|
317
|
+
}
|
|
318
|
+
return encodeURIComponent(value);
|
|
319
|
+
},
|
|
320
|
+
);
|
|
321
|
+
// Second pass: required params (no trailing ?)
|
|
322
|
+
result = result.replace(
|
|
323
|
+
/:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?(?!\?)/g,
|
|
310
324
|
(_, key) => {
|
|
311
325
|
const value = params[key];
|
|
312
326
|
if (value === undefined) {
|
|
@@ -315,6 +329,13 @@ export function createReverse<TRoutes extends Record<string, string>>(
|
|
|
315
329
|
return encodeURIComponent(value);
|
|
316
330
|
},
|
|
317
331
|
);
|
|
332
|
+
// Clean up slashes only when an optional param was actually omitted,
|
|
333
|
+
// so intentional trailing-slash patterns like "/blog/" are preserved.
|
|
334
|
+
if (hadOmittedOptional) {
|
|
335
|
+
const hadTrailingSlash = pattern.length > 1 && pattern.endsWith("/");
|
|
336
|
+
result = result.replace(/\/\/+/g, "/").replace(/\/+$/, "") || "/";
|
|
337
|
+
if (hadTrailingSlash && !result.endsWith("/")) result += "/";
|
|
338
|
+
}
|
|
318
339
|
}
|
|
319
340
|
|
|
320
341
|
// Append search params as query string
|
|
@@ -37,6 +37,7 @@ import type {
|
|
|
37
37
|
UseItems,
|
|
38
38
|
} from "../route-types.js";
|
|
39
39
|
import type { RouteHelpers } from "./helpers-types.js";
|
|
40
|
+
import { resolveHandlerUse, mergeHandlerUse } from "./resolve-handler-use.js";
|
|
40
41
|
|
|
41
42
|
/**
|
|
42
43
|
* Check if an item contains routes (directly or inside nested structures like cache).
|
|
@@ -282,7 +283,7 @@ const cache: RouteHelpers<any, any>["cache"] = (
|
|
|
282
283
|
errorBoundary: [],
|
|
283
284
|
notFoundBoundary: [],
|
|
284
285
|
layout: [],
|
|
285
|
-
parallel:
|
|
286
|
+
parallel: {},
|
|
286
287
|
intercept: [],
|
|
287
288
|
loader: [],
|
|
288
289
|
...(cacheUrlPrefix ? { mountPath: cacheUrlPrefix } : {}),
|
|
@@ -320,7 +321,7 @@ const cache: RouteHelpers<any, any>["cache"] = (
|
|
|
320
321
|
errorBoundary: [],
|
|
321
322
|
notFoundBoundary: [],
|
|
322
323
|
layout: [],
|
|
323
|
-
parallel:
|
|
324
|
+
parallel: {},
|
|
324
325
|
intercept: [],
|
|
325
326
|
loader: [],
|
|
326
327
|
...(cacheUrlPrefix2 ? { mountPath: cacheUrlPrefix2 } : {}),
|
|
@@ -393,6 +394,8 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
|
393
394
|
"parallel() cannot be nested inside another parallel()",
|
|
394
395
|
);
|
|
395
396
|
|
|
397
|
+
const slotNames = Object.keys(slots as Record<string, any>) as `@${string}`[];
|
|
398
|
+
|
|
396
399
|
const namespace = `${ctx.namespace}.$${store.getNextIndex("parallel")}`;
|
|
397
400
|
|
|
398
401
|
// Unwrap any static handler definitions in parallel slots
|
|
@@ -431,7 +434,7 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
|
431
434
|
errorBoundary: [],
|
|
432
435
|
notFoundBoundary: [],
|
|
433
436
|
layout: [],
|
|
434
|
-
parallel:
|
|
437
|
+
parallel: {},
|
|
435
438
|
intercept: [],
|
|
436
439
|
loader: [],
|
|
437
440
|
...(parallelUrlPrefix ? { mountPath: parallelUrlPrefix } : {}),
|
|
@@ -445,16 +448,46 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
|
445
448
|
: {}),
|
|
446
449
|
} satisfies EntryData;
|
|
447
450
|
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
451
|
+
for (const slotName of slotNames) {
|
|
452
|
+
const slotEntry = {
|
|
453
|
+
...entry,
|
|
454
|
+
handler: { [slotName]: unwrappedSlots[slotName]! },
|
|
455
|
+
middleware: [...entry.middleware],
|
|
456
|
+
revalidate: [...entry.revalidate],
|
|
457
|
+
errorBoundary: [...entry.errorBoundary],
|
|
458
|
+
notFoundBoundary: [...entry.notFoundBoundary],
|
|
459
|
+
layout: [...entry.layout],
|
|
460
|
+
parallel: { ...entry.parallel },
|
|
461
|
+
intercept: [...entry.intercept],
|
|
462
|
+
loader: [...entry.loader],
|
|
463
|
+
...(entry.staticHandlerIds?.[slotName]
|
|
464
|
+
? {
|
|
465
|
+
isStaticPrerender: true as const,
|
|
466
|
+
staticHandlerIds: { [slotName]: entry.staticHandlerIds[slotName]! },
|
|
467
|
+
}
|
|
468
|
+
: {
|
|
469
|
+
isStaticPrerender: undefined,
|
|
470
|
+
staticHandlerIds: undefined,
|
|
471
|
+
}),
|
|
472
|
+
} satisfies EntryData;
|
|
473
|
+
|
|
474
|
+
// Per-slot: handler.use defaults first, then explicit use second.
|
|
475
|
+
// This matches the "defaults first, overrides second" rule used by
|
|
476
|
+
// path(), layout(), and intercept(). Each slot's handler.use is
|
|
477
|
+
// scoped to its own entry (no cross-slot bleed).
|
|
478
|
+
const slotHandler = (slots as Record<string, any>)[slotName];
|
|
479
|
+
const slotHandlerUse = resolveHandlerUse(slotHandler);
|
|
480
|
+
const slotMergedUse = mergeHandlerUse(slotHandlerUse, use, "parallel");
|
|
481
|
+
if (slotMergedUse) {
|
|
482
|
+
const result = store.run(namespace, slotEntry, slotMergedUse)?.flat(3);
|
|
483
|
+
invariant(
|
|
484
|
+
Array.isArray(result) && result.every((item) => isValidUseItem(item)),
|
|
485
|
+
`parallel() use() callback must return an array of use items [${namespace}]`,
|
|
486
|
+
);
|
|
487
|
+
}
|
|
456
488
|
|
|
457
|
-
|
|
489
|
+
ctx.parent.parallel[slotName] = slotEntry;
|
|
490
|
+
}
|
|
458
491
|
return { name: namespace, type: "parallel" } as ParallelItem;
|
|
459
492
|
};
|
|
460
493
|
|
|
@@ -502,8 +535,12 @@ const intercept = (
|
|
|
502
535
|
when: [], // Selector conditions for conditional interception
|
|
503
536
|
};
|
|
504
537
|
|
|
505
|
-
//
|
|
506
|
-
|
|
538
|
+
// Merge handler.use defaults with explicit use
|
|
539
|
+
const handlerUseFn = resolveHandlerUse(handler);
|
|
540
|
+
const mergedUse = mergeHandlerUse(handlerUseFn, use, "intercept");
|
|
541
|
+
|
|
542
|
+
// Run merged use callback to collect loaders, revalidate, middleware, etc.
|
|
543
|
+
if (mergedUse) {
|
|
507
544
|
// Create a temporary parent context for the use() callback
|
|
508
545
|
// so that middleware, loader, revalidate attach to the intercept entry
|
|
509
546
|
const originalParent = ctx.parent;
|
|
@@ -530,7 +567,7 @@ const intercept = (
|
|
|
530
567
|
};
|
|
531
568
|
ctx.parent = tempParent as EntryData;
|
|
532
569
|
|
|
533
|
-
const result =
|
|
570
|
+
const result = mergedUse()?.flat(3);
|
|
534
571
|
|
|
535
572
|
// Restore original parent
|
|
536
573
|
ctx.parent = originalParent;
|
|
@@ -627,11 +664,15 @@ const loadingFn: RouteHelpers<any, any>["loading"] = (component, options) => {
|
|
|
627
664
|
invariant(false, "No parent entry available for loading()");
|
|
628
665
|
}
|
|
629
666
|
|
|
667
|
+
// Unwrap function form: loading(() => <Skeleton />) → loading(<Skeleton />)
|
|
668
|
+
const resolved =
|
|
669
|
+
typeof component === "function" ? (component as () => any)() : component;
|
|
670
|
+
|
|
630
671
|
// If ssr: false and we're in SSR, set loading to false
|
|
631
672
|
if (options?.ssr === false && ctx.isSSR) {
|
|
632
673
|
parent.loading = false;
|
|
633
674
|
} else {
|
|
634
|
-
parent.loading =
|
|
675
|
+
parent.loading = resolved;
|
|
635
676
|
}
|
|
636
677
|
|
|
637
678
|
const name = `$${store.getNextIndex("loading")}`;
|
|
@@ -687,7 +728,7 @@ const transitionFn = (
|
|
|
687
728
|
errorBoundary: [],
|
|
688
729
|
notFoundBoundary: [],
|
|
689
730
|
layout: [],
|
|
690
|
-
parallel:
|
|
731
|
+
parallel: {},
|
|
691
732
|
intercept: [],
|
|
692
733
|
loader: [],
|
|
693
734
|
} as EntryData;
|
|
@@ -727,14 +768,14 @@ const routeFn: RouteHelpers<any, any>["route"] = (name, handler, use) => {
|
|
|
727
768
|
shortCode: store.getShortCode("route"),
|
|
728
769
|
type: "route",
|
|
729
770
|
parent: ctx.parent,
|
|
730
|
-
handler,
|
|
771
|
+
handler: handler as unknown as Handler<any, any, any>,
|
|
731
772
|
loading: undefined, // Allow loading() to attach loading state
|
|
732
773
|
middleware: [],
|
|
733
774
|
revalidate: [],
|
|
734
775
|
errorBoundary: [],
|
|
735
776
|
notFoundBoundary: [],
|
|
736
777
|
layout: [],
|
|
737
|
-
parallel:
|
|
778
|
+
parallel: {},
|
|
738
779
|
intercept: [],
|
|
739
780
|
loader: [],
|
|
740
781
|
} satisfies EntryData;
|
|
@@ -746,9 +787,12 @@ const routeFn: RouteHelpers<any, any>["route"] = (name, handler, use) => {
|
|
|
746
787
|
);
|
|
747
788
|
/* Register route entry */
|
|
748
789
|
ctx.manifest.set(name, entry);
|
|
790
|
+
/* Merge handler.use defaults with explicit use */
|
|
791
|
+
const handlerUseFn = resolveHandlerUse(handler);
|
|
792
|
+
const mergedUse = mergeHandlerUse(handlerUseFn, use, "route");
|
|
749
793
|
/* Run use and attach handlers */
|
|
750
|
-
if (
|
|
751
|
-
const result = store.run(namespace, entry,
|
|
794
|
+
if (mergedUse) {
|
|
795
|
+
const result = store.run(namespace, entry, mergedUse)?.flat(3);
|
|
752
796
|
invariant(
|
|
753
797
|
Array.isArray(result) && result.every((item) => isValidUseItem(item)),
|
|
754
798
|
`route() use() callback must return an array of use items [${namespace}]`,
|
|
@@ -791,7 +835,7 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
|
791
835
|
revalidate: [],
|
|
792
836
|
errorBoundary: [],
|
|
793
837
|
notFoundBoundary: [],
|
|
794
|
-
parallel:
|
|
838
|
+
parallel: {},
|
|
795
839
|
intercept: [],
|
|
796
840
|
layout: [],
|
|
797
841
|
loader: [],
|
|
@@ -809,10 +853,14 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
|
809
853
|
(handler as any).$$routePrefix = ctx.namePrefix;
|
|
810
854
|
}
|
|
811
855
|
|
|
812
|
-
//
|
|
856
|
+
// Merge handler.use defaults with explicit use
|
|
857
|
+
const handlerUseFn = resolveHandlerUse(handler);
|
|
858
|
+
const mergedUse = mergeHandlerUse(handlerUseFn, use, "layout");
|
|
859
|
+
|
|
860
|
+
// Run merged use callback if present
|
|
813
861
|
let result: AllUseItems[] | undefined;
|
|
814
|
-
if (
|
|
815
|
-
result = store.run(namespace, entry,
|
|
862
|
+
if (mergedUse) {
|
|
863
|
+
result = store.run(namespace, entry, mergedUse)?.flat(3);
|
|
816
864
|
|
|
817
865
|
invariant(
|
|
818
866
|
Array.isArray(result) && result.every((item) => isValidUseItem(item)),
|
|
@@ -228,11 +228,12 @@ export type RouteHelpers<T extends RouteDefinition, TEnv> = {
|
|
|
228
228
|
* revalidate(({ actionId }) => actionId?.includes("Cart") ?? false),
|
|
229
229
|
* ])
|
|
230
230
|
*
|
|
231
|
-
* //
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
* }
|
|
231
|
+
* // Consume in client components with useLoader()
|
|
232
|
+
* // (preferred — cache-safe, always fresh)
|
|
233
|
+
* function ProductDetails() {
|
|
234
|
+
* const { data } = useLoader(ProductLoader);
|
|
235
|
+
* return <div>{data.name}</div>;
|
|
236
|
+
* }
|
|
236
237
|
* ```
|
|
237
238
|
* @param loaderDef - Loader created with createLoader()
|
|
238
239
|
* @param use - Optional callback for loader-specific revalidation rules
|
|
@@ -254,7 +255,10 @@ export type RouteHelpers<T extends RouteDefinition, TEnv> = {
|
|
|
254
255
|
* @param options - Configuration options
|
|
255
256
|
* @param options.ssr - If false, skip showing loading on document requests (SSR)
|
|
256
257
|
*/
|
|
257
|
-
loading: (
|
|
258
|
+
loading: (
|
|
259
|
+
component: ReactNode | (() => ReactNode),
|
|
260
|
+
options?: { ssr?: boolean },
|
|
261
|
+
) => LoadingItem;
|
|
258
262
|
/**
|
|
259
263
|
* Attach an error boundary to catch errors in this segment and children
|
|
260
264
|
* ```typescript
|
|
@@ -2,6 +2,7 @@ import type { LocationStateEntry } from "../browser/react/location-state-shared.
|
|
|
2
2
|
import {
|
|
3
3
|
requireRequestContext,
|
|
4
4
|
getRequestContext,
|
|
5
|
+
_getRequestContext,
|
|
5
6
|
} from "../server/request-context.js";
|
|
6
7
|
|
|
7
8
|
/**
|
|
@@ -71,9 +72,9 @@ export function redirect(
|
|
|
71
72
|
// actions both deliver state through Flight payloads, so suppress for those.
|
|
72
73
|
if (
|
|
73
74
|
reqCtx &&
|
|
74
|
-
!reqCtx.
|
|
75
|
+
!reqCtx.originalUrl.searchParams.has("_rsc_partial") &&
|
|
75
76
|
!reqCtx.request.headers.has("rsc-action") &&
|
|
76
|
-
!reqCtx.
|
|
77
|
+
!reqCtx.originalUrl.searchParams.has("_rsc_action")
|
|
77
78
|
) {
|
|
78
79
|
console.warn(
|
|
79
80
|
`[Router] redirect() with state during a full-page (SSR) request to "${url}". ` +
|
|
@@ -83,10 +84,17 @@ export function redirect(
|
|
|
83
84
|
}
|
|
84
85
|
}
|
|
85
86
|
|
|
87
|
+
// Auto-prefix root-relative URLs with basename for app-local redirects.
|
|
88
|
+
const bn = _getRequestContext()?._basename;
|
|
89
|
+
let resolvedUrl = url;
|
|
90
|
+
if (bn && url.startsWith("/") && !url.startsWith(bn + "/") && url !== bn) {
|
|
91
|
+
resolvedUrl = url === "/" ? bn : bn + url;
|
|
92
|
+
}
|
|
93
|
+
|
|
86
94
|
return new Response(null, {
|
|
87
95
|
status,
|
|
88
96
|
headers: {
|
|
89
|
-
Location:
|
|
97
|
+
Location: resolvedUrl,
|
|
90
98
|
"X-RSC-Redirect": "soft",
|
|
91
99
|
},
|
|
92
100
|
});
|