@rangojs/router 0.0.0-experimental.80 → 0.0.0-experimental.80daa23e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +8 -4
- package/README.md +318 -791
- 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 +927 -273
- 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/{src/network-error-thrower.tsx → dist/network-error-thrower.d.ts} +4 -10
- package/dist/network-error-thrower.d.ts.map +1 -0
- package/dist/network-error-thrower.js +14 -0
- package/dist/network-error-thrower.js.map +1 -0
- package/dist/outlet-context.d.ts +13 -0
- package/dist/outlet-context.d.ts.map +1 -0
- package/dist/outlet-context.js +3 -0
- package/dist/outlet-context.js.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.js +148 -0
- package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
- package/dist/prerender/param-hash.d.ts +16 -0
- package/dist/prerender/param-hash.d.ts.map +1 -0
- package/dist/prerender/param-hash.js +36 -0
- package/dist/prerender/param-hash.js.map +1 -0
- package/dist/prerender/store.d.ts +38 -0
- package/dist/prerender/store.d.ts.map +1 -0
- package/dist/prerender/store.js +61 -0
- package/dist/prerender/store.js.map +1 -0
- package/dist/prerender.d.ts +66 -0
- package/dist/prerender.d.ts.map +1 -0
- package/dist/prerender.js +57 -0
- package/dist/prerender.js.map +1 -0
- package/dist/reverse.d.ts +196 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +78 -0
- package/dist/reverse.js.map +1 -0
- package/dist/root-error-boundary.d.ts +33 -0
- package/dist/root-error-boundary.d.ts.map +1 -0
- package/dist/root-error-boundary.js +165 -0
- package/dist/root-error-boundary.js.map +1 -0
- package/dist/route-content-wrapper.d.ts +46 -0
- package/dist/route-content-wrapper.d.ts.map +1 -0
- package/dist/route-content-wrapper.js +77 -0
- package/dist/route-content-wrapper.js.map +1 -0
- package/dist/route-definition.d.ts +421 -0
- package/dist/route-definition.d.ts.map +1 -0
- package/dist/route-definition.js +868 -0
- package/dist/route-definition.js.map +1 -0
- package/dist/route-map-builder.d.ts +155 -0
- package/dist/route-map-builder.d.ts.map +1 -0
- package/dist/route-map-builder.js +237 -0
- package/dist/route-map-builder.js.map +1 -0
- package/dist/route-types.d.ts +165 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +7 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router/__tests__/handler-context.test.d.ts +2 -0
- package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/handler-context.test.js +65 -0
- package/dist/router/__tests__/handler-context.test.js.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
- package/dist/router/__tests__/match-context.test.d.ts +2 -0
- package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-context.test.js +92 -0
- package/dist/router/__tests__/match-context.test.js.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.js +417 -0
- package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
- package/dist/router/__tests__/match-result.test.d.ts +2 -0
- package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-result.test.js +457 -0
- package/dist/router/__tests__/match-result.test.js.map +1 -0
- package/dist/router/__tests__/on-error.test.d.ts +2 -0
- package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
- package/dist/router/__tests__/on-error.test.js +678 -0
- package/dist/router/__tests__/on-error.test.js.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.js +629 -0
- package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
- package/dist/router/error-handling.d.ts +77 -0
- package/dist/router/error-handling.d.ts.map +1 -0
- package/dist/router/error-handling.js +202 -0
- package/dist/router/error-handling.js.map +1 -0
- package/dist/router/handler-context.d.ts +20 -0
- package/dist/router/handler-context.d.ts.map +1 -0
- package/dist/router/handler-context.js +198 -0
- package/dist/router/handler-context.js.map +1 -0
- package/dist/router/intercept-resolution.d.ts +66 -0
- package/dist/router/intercept-resolution.d.ts.map +1 -0
- package/dist/router/intercept-resolution.js +246 -0
- package/dist/router/intercept-resolution.js.map +1 -0
- package/dist/router/loader-resolution.d.ts +64 -0
- package/dist/router/loader-resolution.d.ts.map +1 -0
- package/dist/router/loader-resolution.js +284 -0
- package/dist/router/loader-resolution.js.map +1 -0
- package/dist/router/logging.d.ts +15 -0
- package/dist/router/logging.d.ts.map +1 -0
- package/dist/router/logging.js +99 -0
- package/dist/router/logging.js.map +1 -0
- package/dist/router/manifest.d.ts +22 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +181 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/match-api.d.ts +35 -0
- package/dist/router/match-api.d.ts.map +1 -0
- package/dist/router/match-api.js +406 -0
- package/dist/router/match-api.js.map +1 -0
- package/dist/router/match-context.d.ts +206 -0
- package/dist/router/match-context.d.ts.map +1 -0
- package/dist/router/match-context.js +17 -0
- package/dist/router/match-context.js.map +1 -0
- package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
- package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
- package/dist/router/match-middleware/background-revalidation.js +75 -0
- package/dist/router/match-middleware/background-revalidation.js.map +1 -0
- package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
- package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-lookup.js +257 -0
- package/dist/router/match-middleware/cache-lookup.js.map +1 -0
- package/dist/router/match-middleware/cache-store.d.ts +113 -0
- package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-store.js +108 -0
- package/dist/router/match-middleware/cache-store.js.map +1 -0
- package/dist/router/match-middleware/index.d.ts +81 -0
- package/dist/router/match-middleware/index.d.ts.map +1 -0
- package/dist/router/match-middleware/index.js +80 -0
- package/dist/router/match-middleware/index.js.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.js +134 -0
- package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
- package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
- package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/segment-resolution.js +53 -0
- package/dist/router/match-middleware/segment-resolution.js.map +1 -0
- package/dist/router/match-pipelines.d.ts +147 -0
- package/dist/router/match-pipelines.d.ts.map +1 -0
- package/dist/router/match-pipelines.js +82 -0
- package/dist/router/match-pipelines.js.map +1 -0
- package/dist/router/match-result.d.ts +126 -0
- package/dist/router/match-result.d.ts.map +1 -0
- package/dist/router/match-result.js +93 -0
- package/dist/router/match-result.js.map +1 -0
- package/dist/router/metrics.d.ts +20 -0
- package/dist/router/metrics.d.ts.map +1 -0
- package/dist/router/metrics.js +47 -0
- package/dist/router/metrics.js.map +1 -0
- package/dist/router/middleware.d.ts +249 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +434 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/middleware.test.d.ts +2 -0
- package/dist/router/middleware.test.d.ts.map +1 -0
- package/dist/router/middleware.test.js +816 -0
- package/dist/router/middleware.test.js.map +1 -0
- package/dist/router/pattern-matching.d.ts +149 -0
- package/dist/router/pattern-matching.d.ts.map +1 -0
- package/dist/router/pattern-matching.js +349 -0
- package/dist/router/pattern-matching.js.map +1 -0
- package/dist/router/revalidation.d.ts +44 -0
- package/dist/router/revalidation.d.ts.map +1 -0
- package/dist/router/revalidation.js +147 -0
- package/dist/router/revalidation.js.map +1 -0
- package/dist/router/router-context.d.ts +135 -0
- package/dist/router/router-context.d.ts.map +1 -0
- package/dist/router/router-context.js +36 -0
- package/dist/router/router-context.js.map +1 -0
- package/dist/router/segment-resolution.d.ts +127 -0
- package/dist/router/segment-resolution.d.ts.map +1 -0
- package/dist/router/segment-resolution.js +919 -0
- package/dist/router/segment-resolution.js.map +1 -0
- package/dist/router/trie-matching.d.ts +40 -0
- package/dist/router/trie-matching.d.ts.map +1 -0
- package/dist/router/trie-matching.js +127 -0
- package/dist/router/trie-matching.js.map +1 -0
- package/dist/router/types.d.ts +136 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router.d.ts +753 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.gen.d.ts +6 -0
- package/dist/router.gen.d.ts.map +1 -0
- package/dist/router.gen.js +6 -0
- package/dist/router.gen.js.map +1 -0
- package/dist/router.js +1304 -0
- package/dist/router.js.map +1 -0
- package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
- package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/rsc/__tests__/helpers.test.js +140 -0
- package/dist/rsc/__tests__/helpers.test.js.map +1 -0
- package/dist/rsc/handler.d.ts +45 -0
- package/dist/rsc/handler.d.ts.map +1 -0
- package/dist/rsc/handler.js +1172 -0
- package/dist/rsc/handler.js.map +1 -0
- package/dist/rsc/helpers.d.ts +16 -0
- package/dist/rsc/helpers.d.ts.map +1 -0
- package/dist/rsc/helpers.js +55 -0
- package/dist/rsc/helpers.js.map +1 -0
- package/dist/rsc/index.d.ts +22 -0
- package/dist/rsc/index.d.ts.map +1 -0
- package/dist/rsc/index.js +23 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/nonce.d.ts +9 -0
- package/dist/rsc/nonce.d.ts.map +1 -0
- package/dist/rsc/nonce.js +18 -0
- package/dist/rsc/nonce.js.map +1 -0
- package/dist/rsc/types.d.ts +206 -0
- package/dist/rsc/types.d.ts.map +1 -0
- package/dist/rsc/types.js +8 -0
- package/dist/rsc/types.js.map +1 -0
- package/dist/search-params.d.ts +103 -0
- package/dist/search-params.d.ts.map +1 -0
- package/dist/search-params.js +74 -0
- package/dist/search-params.js.map +1 -0
- package/dist/segment-system.d.ts +75 -0
- package/dist/segment-system.d.ts.map +1 -0
- package/dist/segment-system.js +336 -0
- package/dist/segment-system.js.map +1 -0
- package/dist/server/context.d.ts +245 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +197 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fetchable-loader-store.d.ts +18 -0
- package/dist/server/fetchable-loader-store.d.ts.map +1 -0
- package/dist/server/fetchable-loader-store.js +18 -0
- package/dist/server/fetchable-loader-store.js.map +1 -0
- package/dist/server/handle-store.d.ts +85 -0
- package/dist/server/handle-store.d.ts.map +1 -0
- package/dist/server/handle-store.js +142 -0
- package/dist/server/handle-store.js.map +1 -0
- package/dist/server/loader-registry.d.ts +55 -0
- package/dist/server/loader-registry.d.ts.map +1 -0
- package/dist/server/loader-registry.js +132 -0
- package/dist/server/loader-registry.js.map +1 -0
- package/dist/server/request-context.d.ts +226 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +290 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/root-layout.d.ts +4 -0
- package/dist/server/root-layout.d.ts.map +1 -0
- package/dist/server/root-layout.js +5 -0
- package/dist/server/root-layout.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
- package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
- package/dist/ssr/index.d.ts +98 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +158 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/static-handler.d.ts +50 -0
- package/dist/static-handler.d.ts.map +1 -0
- package/dist/static-handler.gen.d.ts +5 -0
- package/dist/static-handler.gen.d.ts.map +1 -0
- package/dist/static-handler.gen.js +5 -0
- package/dist/static-handler.gen.js.map +1 -0
- package/dist/static-handler.js +29 -0
- package/dist/static-handler.js.map +1 -0
- package/dist/testing/vitest.js +82 -0
- package/dist/theme/ThemeProvider.d.ts +20 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +240 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/ThemeScript.d.ts +48 -0
- package/dist/theme/ThemeScript.d.ts.map +1 -0
- package/dist/theme/ThemeScript.js +13 -0
- package/dist/theme/ThemeScript.js.map +1 -0
- package/dist/theme/__tests__/theme.test.d.ts +2 -0
- package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
- package/dist/theme/__tests__/theme.test.js +103 -0
- package/dist/theme/__tests__/theme.test.js.map +1 -0
- package/dist/theme/constants.d.ts +29 -0
- package/dist/theme/constants.d.ts.map +1 -0
- package/dist/theme/constants.js +48 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +31 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +36 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-context.d.ts +40 -0
- package/dist/theme/theme-context.d.ts.map +1 -0
- package/dist/theme/theme-context.js +60 -0
- package/dist/theme/theme-context.js.map +1 -0
- package/dist/theme/theme-script.d.ts +27 -0
- package/dist/theme/theme-script.d.ts.map +1 -0
- package/dist/theme/theme-script.js +147 -0
- package/dist/theme/theme-script.js.map +1 -0
- package/dist/theme/types.d.ts +163 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +11 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/theme/use-theme.d.ts +12 -0
- package/dist/theme/use-theme.d.ts.map +1 -0
- package/dist/theme/use-theme.js +40 -0
- package/dist/theme/use-theme.js.map +1 -0
- package/dist/types/__internal.d.ts +127 -0
- package/dist/types/bin/rango.d.ts +1 -0
- package/dist/types/browser/action-coordinator.d.ts +57 -0
- package/dist/types/browser/action-fence.d.ts +33 -0
- package/dist/types/browser/app-shell.d.ts +34 -0
- package/dist/types/browser/app-version.d.ts +6 -0
- package/dist/types/browser/connection-warmup.d.ts +31 -0
- package/dist/types/browser/cookie-name.d.ts +66 -0
- package/dist/types/browser/dev-discovery.d.ts +11 -0
- package/dist/types/browser/event-controller.d.ts +231 -0
- package/dist/types/browser/history-state.d.ts +26 -0
- package/dist/types/browser/index.d.ts +1 -0
- package/dist/types/browser/intercept-utils.d.ts +30 -0
- package/dist/types/browser/invalidate-client-cache.d.ts +17 -0
- package/dist/types/browser/link-interceptor.d.ts +53 -0
- package/dist/types/browser/logging.d.ts +33 -0
- package/dist/types/browser/merge-segment-loaders.d.ts +38 -0
- package/dist/types/browser/navigation-bridge.d.ts +39 -0
- package/dist/types/browser/navigation-client.d.ts +17 -0
- package/dist/types/browser/navigation-store-handle.d.ts +25 -0
- package/dist/types/browser/navigation-store.d.ts +85 -0
- package/dist/types/browser/navigation-transaction.d.ts +75 -0
- package/dist/types/browser/network-error-handler.d.ts +35 -0
- package/dist/types/browser/notify-listeners.d.ts +2 -0
- package/dist/types/browser/partial-update.d.ts +61 -0
- package/dist/types/browser/prefetch/cache.d.ts +224 -0
- package/dist/types/browser/prefetch/default-strategy.d.ts +31 -0
- package/dist/types/browser/prefetch/fetch.d.ts +52 -0
- package/dist/types/browser/prefetch/invalidation.d.ts +6 -0
- package/dist/types/browser/prefetch/loader.d.ts +12 -0
- package/dist/types/browser/prefetch/observer.d.ts +24 -0
- package/dist/types/browser/prefetch/policy.d.ts +13 -0
- package/dist/types/browser/prefetch/queue.d.ts +48 -0
- package/dist/types/browser/prefetch/resource-ready.d.ts +28 -0
- package/dist/types/browser/prefetch/runtime.d.ts +2 -0
- package/dist/types/browser/rango-state.d.ts +56 -0
- package/dist/types/browser/react/Link.d.ts +132 -0
- package/dist/types/browser/react/NavigationProvider.d.ts +88 -0
- package/dist/types/browser/react/ScrollRestoration.d.ts +78 -0
- package/dist/types/browser/react/context.d.ts +57 -0
- package/dist/types/browser/react/filter-segment-order.d.ts +35 -0
- package/dist/types/browser/react/index.d.ts +1 -0
- package/dist/types/browser/react/location-state-shared.d.ts +162 -0
- package/dist/types/browser/react/location-state.d.ts +29 -0
- package/dist/types/browser/react/mount-context.d.ts +23 -0
- package/dist/types/browser/react/nonce-context.d.ts +14 -0
- package/dist/types/browser/react/shallow-equal.d.ts +5 -0
- package/dist/types/browser/react/use-action.d.ts +61 -0
- package/dist/types/browser/react/use-handle.d.ts +21 -0
- package/dist/types/browser/react/use-href.d.ts +32 -0
- package/dist/types/browser/react/use-link-status.d.ts +36 -0
- package/dist/types/browser/react/use-mount.d.ts +24 -0
- package/dist/types/browser/react/use-navigation.d.ts +15 -0
- package/dist/types/browser/react/use-params.d.ts +21 -0
- package/dist/types/browser/react/use-pathname.d.ts +13 -0
- package/dist/types/browser/react/use-reverse.d.ts +40 -0
- package/dist/types/browser/react/use-router.d.ts +30 -0
- package/dist/types/browser/react/use-search-params.d.ts +66 -0
- package/dist/types/browser/react/use-segments.d.ts +29 -0
- package/dist/types/browser/response-adapter.d.ts +58 -0
- package/dist/types/browser/rsc-router.d.ts +146 -0
- package/dist/types/browser/scroll-restoration.d.ts +103 -0
- package/dist/types/browser/segment-reconciler.d.ts +74 -0
- package/dist/types/browser/segment-structure-assert.d.ts +16 -0
- package/dist/types/browser/server-action-bridge.d.ts +29 -0
- package/dist/types/browser/types.d.ts +546 -0
- package/dist/types/browser/validate-redirect-origin.d.ts +28 -0
- package/dist/types/build/collect-fallback-refs.d.ts +5 -0
- package/dist/types/build/generate-manifest.d.ts +106 -0
- package/dist/types/build/generate-route-types.d.ts +8 -0
- package/dist/types/build/index.d.ts +21 -0
- package/dist/types/build/merge-full-manifests.d.ts +3 -0
- package/dist/types/build/prefix-tree-utils.d.ts +56 -0
- package/dist/types/build/route-trie.d.ts +20 -0
- package/dist/types/build/route-types/ast-helpers.d.ts +3 -0
- package/dist/types/build/route-types/ast-route-extraction.d.ts +13 -0
- package/dist/types/build/route-types/codegen.d.ts +16 -0
- package/dist/types/build/route-types/include-resolution.d.ts +74 -0
- package/dist/types/build/route-types/param-extraction.d.ts +13 -0
- package/dist/types/build/route-types/per-module-writer.d.ts +20 -0
- package/dist/types/build/route-types/router-processing.d.ts +81 -0
- package/dist/types/build/route-types/scan-filter.d.ts +17 -0
- package/dist/types/build/route-types/source-scan.d.ts +13 -0
- package/dist/types/build/runtime-discovery.d.ts +24 -0
- package/dist/types/cache/background-task.d.ts +21 -0
- package/dist/types/cache/cache-error.d.ts +71 -0
- package/dist/types/cache/cache-exec-scope.d.ts +31 -0
- package/dist/types/cache/cache-key-utils.d.ts +43 -0
- package/dist/types/cache/cache-policy.d.ts +59 -0
- package/dist/types/cache/cache-runtime.d.ts +51 -0
- package/dist/types/cache/cache-scope.d.ts +215 -0
- package/dist/types/cache/cache-tag.d.ts +79 -0
- package/dist/types/cache/cf/cf-base64.d.ts +4 -0
- package/dist/types/cache/cf/cf-cache-constants.d.ts +112 -0
- package/dist/types/cache/cf/cf-cache-store.d.ts +630 -0
- package/dist/types/cache/cf/cf-cache-types.d.ts +365 -0
- package/dist/types/cache/cf/cf-kv-utils.d.ts +43 -0
- package/dist/types/cache/cf/cf-tag-marker-memo.d.ts +15 -0
- package/dist/types/cache/cf/cf-zone-purge.d.ts +31 -0
- package/dist/types/cache/cf/index.d.ts +4 -0
- package/dist/types/cache/document-cache.d.ts +71 -0
- package/dist/types/cache/handle-capture.d.ts +23 -0
- package/dist/types/cache/handle-snapshot.d.ts +39 -0
- package/dist/types/cache/index.d.ts +9 -0
- package/dist/types/cache/memory-segment-store.d.ts +163 -0
- package/dist/types/cache/profile-registry.d.ts +40 -0
- package/dist/types/cache/read-through-swr.d.ts +61 -0
- package/dist/types/cache/search-params-filter.d.ts +64 -0
- package/dist/types/cache/segment-codec.d.ts +78 -0
- package/dist/types/cache/shell-snapshot.d.ts +186 -0
- package/dist/types/cache/tag-invalidation.d.ts +74 -0
- package/dist/types/cache/taint.d.ts +77 -0
- package/dist/types/cache/types.d.ts +522 -0
- package/dist/types/cache/vercel/index.d.ts +1 -0
- package/dist/types/cache/vercel/vercel-cache-store.d.ts +268 -0
- package/dist/types/client-urls/client-root.d.ts +38 -0
- package/dist/types/client-urls/client-urls.d.ts +5 -0
- package/dist/types/client-urls/navigation.d.ts +38 -0
- package/dist/types/client-urls/revalidation-protocol.d.ts +25 -0
- package/dist/types/client-urls/server-projection.d.ts +71 -0
- package/dist/types/client-urls/types.d.ts +148 -0
- package/dist/types/client.d.ts +192 -0
- package/dist/types/client.rsc.d.ts +42 -0
- package/dist/types/cloudflare/index.d.ts +7 -0
- package/dist/types/cloudflare/tracing.d.ts +57 -0
- package/dist/types/component-utils.d.ts +46 -0
- package/dist/types/components/DefaultDocument.d.ts +13 -0
- package/dist/types/context-var.d.ts +84 -0
- package/dist/types/debug.d.ts +57 -0
- package/dist/types/decode-loader-results.d.ts +42 -0
- package/dist/types/default-error-boundary.d.ts +10 -0
- package/dist/types/defer.d.ts +89 -0
- package/dist/types/deps/browser.d.ts +1 -0
- package/dist/types/deps/html-stream-client.d.ts +1 -0
- package/dist/types/deps/html-stream-server.d.ts +1 -0
- package/dist/types/deps/rsc.d.ts +1 -0
- package/dist/types/deps/ssr.d.ts +1 -0
- package/dist/types/dev-discovery-protocol.d.ts +5 -0
- package/dist/types/encode-kv.d.ts +35 -0
- package/dist/types/errors.d.ts +227 -0
- package/dist/types/escape-script.d.ts +44 -0
- package/dist/types/handle.d.ts +93 -0
- package/dist/types/handles/MetaTags.d.ts +17 -0
- package/dist/types/handles/Scripts.d.ts +38 -0
- package/dist/types/handles/breadcrumbs.d.ts +43 -0
- package/dist/types/handles/deferred-resolution.d.ts +53 -0
- package/dist/types/handles/is-thenable.d.ts +10 -0
- package/dist/types/handles/meta.d.ts +43 -0
- package/dist/types/handles/script.d.ts +139 -0
- package/dist/types/host/cookie-handler.d.ts +8 -0
- package/dist/types/host/errors.d.ts +40 -0
- package/dist/types/host/index.d.ts +33 -0
- package/dist/types/host/pattern-matcher.d.ts +30 -0
- package/dist/types/host/router.d.ts +12 -0
- package/dist/types/host/testing.d.ts +41 -0
- package/dist/types/host/types.d.ts +148 -0
- package/dist/types/host/utils.d.ts +20 -0
- package/dist/types/href-client.d.ts +214 -0
- package/dist/types/index.d.ts +113 -0
- package/dist/types/index.rsc.d.ts +52 -0
- package/dist/types/internal-debug.d.ts +1 -0
- package/dist/types/loader-redirect.d.ts +27 -0
- package/dist/types/loader-store.d.ts +193 -0
- package/dist/types/loader.d.ts +18 -0
- package/dist/types/loader.rsc.d.ts +18 -0
- package/dist/types/missing-id-error.d.ts +1 -0
- package/dist/types/outlet-context.d.ts +32 -0
- package/dist/types/outlet-provider.d.ts +15 -0
- package/dist/types/prerender/build-shell-capture.d.ts +104 -0
- package/dist/types/prerender/param-hash.d.ts +6 -0
- package/dist/types/prerender/shell-manifest-key.d.ts +18 -0
- package/dist/types/prerender/store.d.ts +63 -0
- package/dist/types/prerender.d.ts +292 -0
- package/dist/types/redirect-origin.d.ts +71 -0
- package/dist/types/regex-escape.d.ts +6 -0
- package/dist/types/render-error-thrower.d.ts +13 -0
- package/dist/types/response-utils.d.ts +35 -0
- package/dist/types/reverse.d.ts +206 -0
- package/dist/types/root-error-boundary.d.ts +32 -0
- package/dist/types/route-content-wrapper.d.ts +84 -0
- package/dist/types/route-definition/dsl-helpers.d.ts +130 -0
- package/dist/types/route-definition/helper-factories.d.ts +22 -0
- package/dist/types/route-definition/helpers-types.d.ts +405 -0
- package/dist/types/route-definition/index.d.ts +7 -0
- package/dist/types/route-definition/redirect.d.ts +48 -0
- package/dist/types/route-definition/resolve-handler-use.d.ts +19 -0
- package/dist/types/route-definition/use-item-types.d.ts +1 -0
- package/dist/types/route-definition.d.ts +1 -0
- package/dist/types/route-map-builder.d.ts +102 -0
- package/dist/types/route-name.d.ts +27 -0
- package/dist/types/route-types.d.ts +172 -0
- package/dist/types/router/basename.d.ts +10 -0
- package/dist/types/router/content-negotiation.d.ts +91 -0
- package/dist/types/router/debug-manifest.d.ts +7 -0
- package/dist/types/router/error-handling.d.ts +110 -0
- package/dist/types/router/find-match.d.ts +19 -0
- package/dist/types/router/handler-context.d.ts +41 -0
- package/dist/types/router/instrument.d.ts +191 -0
- package/dist/types/router/intercept-resolution.d.ts +91 -0
- package/dist/types/router/lazy-includes.d.ts +26 -0
- package/dist/types/router/loader-resolution.d.ts +85 -0
- package/dist/types/router/logging.d.ts +41 -0
- package/dist/types/router/manifest.d.ts +8 -0
- package/dist/types/router/match-api.d.ts +19 -0
- package/dist/types/router/match-context.d.ts +184 -0
- package/dist/types/router/match-handlers.d.ts +48 -0
- package/dist/types/router/match-middleware/background-revalidation.d.ts +113 -0
- package/dist/types/router/match-middleware/cache-lookup.d.ts +126 -0
- package/dist/types/router/match-middleware/cache-store.d.ts +112 -0
- package/dist/types/router/match-middleware/index.d.ts +80 -0
- package/dist/types/router/match-middleware/intercept-resolution.d.ts +116 -0
- package/dist/types/router/match-middleware/segment-resolution.d.ts +94 -0
- package/dist/types/router/match-pipelines.d.ts +103 -0
- package/dist/types/router/match-result.d.ts +114 -0
- package/dist/types/router/metrics.d.ts +6 -0
- package/dist/types/router/middleware-types.d.ts +74 -0
- package/dist/types/router/middleware.d.ts +116 -0
- package/dist/types/router/navigation-snapshot.d.ts +51 -0
- package/dist/types/router/params-util.d.ts +8 -0
- package/dist/types/router/parse-pattern.d.ts +38 -0
- package/dist/types/router/pattern-matching.d.ts +169 -0
- package/dist/types/router/prefetch-cache-ttl.d.ts +27 -0
- package/dist/types/router/prefetch-default.d.ts +28 -0
- package/dist/types/router/prefetch-limits.d.ts +20 -0
- package/dist/types/router/prerender-match.d.ts +53 -0
- package/dist/types/router/preview-match.d.ts +22 -0
- package/dist/types/router/request-classification.d.ts +104 -0
- package/dist/types/router/revalidation.d.ts +64 -0
- package/dist/types/router/route-snapshot.d.ts +112 -0
- package/dist/types/router/route-trie-builder.d.ts +77 -0
- package/dist/types/router/router-context.d.ts +137 -0
- package/dist/types/router/router-interfaces.d.ts +461 -0
- package/dist/types/router/router-options.d.ts +792 -0
- package/dist/types/router/router-registry.d.ts +15 -0
- package/dist/types/router/segment-resolution/fresh.d.ts +55 -0
- package/dist/types/router/segment-resolution/helpers.d.ts +93 -0
- package/dist/types/router/segment-resolution/loader-cache.d.ts +33 -0
- package/dist/types/router/segment-resolution/loader-mask.d.ts +44 -0
- package/dist/types/router/segment-resolution/loader-snapshot.d.ts +90 -0
- package/dist/types/router/segment-resolution/mask-nested.d.ts +53 -0
- package/dist/types/router/segment-resolution/revalidation.d.ts +85 -0
- package/dist/types/router/segment-resolution/static-store.d.ts +17 -0
- package/dist/types/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
- package/dist/types/router/segment-resolution/view-transition-default.d.ts +27 -0
- package/dist/types/router/segment-resolution.d.ts +3 -0
- package/dist/types/router/segment-wrappers.d.ts +53 -0
- package/dist/types/router/state-cookie-name.d.ts +1 -0
- package/dist/types/router/substitute-pattern-params.d.ts +23 -0
- package/dist/types/router/telemetry-otel.d.ts +113 -0
- package/dist/types/router/telemetry.d.ts +216 -0
- package/dist/types/router/timeout.d.ts +107 -0
- package/dist/types/router/tracing.d.ts +139 -0
- package/dist/types/router/transition-when.d.ts +13 -0
- package/dist/types/router/trie-matching.d.ts +32 -0
- package/dist/types/router/types.d.ts +98 -0
- package/dist/types/router/url-params.d.ts +26 -0
- package/dist/types/router.d.ts +7 -0
- package/dist/types/rsc/capture-queue.d.ts +49 -0
- package/dist/types/rsc/full-payload.d.ts +22 -0
- package/dist/types/rsc/handler-context.d.ts +32 -0
- package/dist/types/rsc/handler.d.ts +9 -0
- package/dist/types/rsc/helpers.d.ts +127 -0
- package/dist/types/rsc/index.d.ts +17 -0
- package/dist/types/rsc/json-route-result.d.ts +20 -0
- package/dist/types/rsc/loader-fetch.d.ts +14 -0
- package/dist/types/rsc/manifest-init.d.ts +18 -0
- package/dist/types/rsc/nonce.d.ts +38 -0
- package/dist/types/rsc/origin-guard.d.ts +50 -0
- package/dist/types/rsc/progressive-enhancement.d.ts +19 -0
- package/dist/types/rsc/redirect-guard.d.ts +37 -0
- package/dist/types/rsc/render-pipeline.d.ts +148 -0
- package/dist/types/rsc/response-cache-serve.d.ts +46 -0
- package/dist/types/rsc/response-error.d.ts +19 -0
- package/dist/types/rsc/response-route-handler.d.ts +29 -0
- package/dist/types/rsc/routine-plan.d.ts +124 -0
- package/dist/types/rsc/rsc-rendering.d.ts +18 -0
- package/dist/types/rsc/runtime-warnings.d.ts +22 -0
- package/dist/types/rsc/server-action.d.ts +68 -0
- package/dist/types/rsc/shell-build-manifest.d.ts +90 -0
- package/dist/types/rsc/shell-capture-constants.d.ts +44 -0
- package/dist/types/rsc/shell-capture.d.ts +425 -0
- package/dist/types/rsc/shell-serve.d.ts +200 -0
- package/dist/types/rsc/ssr-setup.d.ts +73 -0
- package/dist/types/rsc/stream-idle.d.ts +60 -0
- package/dist/types/rsc/transition-gate.d.ts +23 -0
- package/dist/types/rsc/types.d.ts +353 -0
- package/dist/types/runtime-env.d.ts +1 -0
- package/dist/types/search-params.d.ts +125 -0
- package/dist/types/segment-content-promise.d.ts +13 -0
- package/dist/types/segment-fragments.d.ts +79 -0
- package/dist/types/segment-loader-promise.d.ts +22 -0
- package/dist/types/segment-system.d.ts +86 -0
- package/dist/types/serialize.d.ts +164 -0
- package/dist/types/server/context.d.ts +520 -0
- package/dist/types/server/cookie-parse.d.ts +10 -0
- package/dist/types/server/cookie-store.d.ts +107 -0
- package/dist/types/server/fetchable-loader-store.d.ts +20 -0
- package/dist/types/server/handle-store.d.ts +131 -0
- package/dist/types/server/loader-registry.d.ts +32 -0
- package/dist/types/server/request-context.d.ts +717 -0
- package/dist/types/server/root-layout.d.ts +3 -0
- package/dist/types/server.d.ts +16 -0
- package/dist/types/ssr/index.d.ts +271 -0
- package/dist/types/ssr/inject-rsc-eager.d.ts +3 -0
- package/dist/types/ssr/preinit-client-references.d.ts +71 -0
- package/dist/types/ssr/ssr-root.d.ts +84 -0
- package/dist/types/ssr-suspension-warning.d.ts +19 -0
- package/dist/types/static-handler.d.ts +71 -0
- package/dist/types/testing/cache-status.d.ts +63 -0
- package/dist/types/testing/collect-handle.d.ts +20 -0
- package/dist/types/testing/dispatch.d.ts +127 -0
- package/dist/types/testing/dom.entry.d.ts +15 -0
- package/dist/types/testing/e2e/fixture.d.ts +37 -0
- package/dist/types/testing/e2e/index.d.ts +31 -0
- package/dist/types/testing/e2e/matchers.d.ts +17 -0
- package/dist/types/testing/e2e/page-helpers.d.ts +86 -0
- package/dist/types/testing/e2e/parity.d.ts +111 -0
- package/dist/types/testing/e2e/server.d.ts +35 -0
- package/dist/types/testing/flight-matchers.d.ts +55 -0
- package/dist/types/testing/flight-normalize.d.ts +1 -0
- package/dist/types/testing/flight-tree.d.ts +192 -0
- package/dist/types/testing/flight.d.ts +115 -0
- package/dist/types/testing/flight.entry.d.ts +27 -0
- package/dist/types/testing/generated-routes.d.ts +66 -0
- package/dist/types/testing/index.d.ts +54 -0
- package/dist/types/testing/internal/context.d.ts +225 -0
- package/dist/types/testing/internal/flight-client-globals.d.ts +1 -0
- package/dist/types/testing/internal/seed-vars.d.ts +30 -0
- package/dist/types/testing/render-handler.d.ts +160 -0
- package/dist/types/testing/render-route.d.ts +265 -0
- package/dist/types/testing/run-loader.d.ts +195 -0
- package/dist/types/testing/run-middleware.d.ts +132 -0
- package/dist/types/testing/run-transition-when.d.ts +78 -0
- package/dist/types/testing/shell-status.d.ts +81 -0
- package/dist/types/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
- package/dist/types/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
- package/dist/types/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
- package/dist/types/testing/vitest-stubs/version.d.ts +1 -0
- package/dist/types/testing/vitest.d.ts +205 -0
- package/dist/types/theme/ThemeProvider.d.ts +13 -0
- package/dist/types/theme/ThemeScript.d.ts +45 -0
- package/dist/types/theme/constants.d.ts +39 -0
- package/dist/types/theme/index.d.ts +29 -0
- package/dist/types/theme/theme-context.d.ts +21 -0
- package/dist/types/theme/theme-script.d.ts +26 -0
- package/dist/types/theme/types.d.ts +162 -0
- package/dist/types/theme/use-theme.d.ts +8 -0
- package/dist/types/types/boundaries.d.ts +115 -0
- package/dist/types/types/cache-types.d.ts +191 -0
- package/dist/types/types/error-types.d.ts +114 -0
- package/dist/types/types/global-namespace.d.ts +90 -0
- package/dist/types/types/handler-context.d.ts +658 -0
- package/dist/types/types/index.d.ts +11 -0
- package/dist/types/types/loader-types.d.ts +240 -0
- package/dist/types/types/request-scope.d.ts +93 -0
- package/dist/types/types/route-config.d.ts +105 -0
- package/dist/types/types/route-entry.d.ts +98 -0
- package/dist/types/types/segments.d.ts +254 -0
- package/dist/types/types.d.ts +1 -0
- package/dist/types/urls/include-helper.d.ts +17 -0
- package/dist/types/urls/include-provider.d.ts +27 -0
- package/dist/types/urls/index.d.ts +6 -0
- package/dist/types/urls/path-helper-types.d.ts +207 -0
- package/dist/types/urls/path-helper.d.ts +12 -0
- package/dist/types/urls/pattern-types.d.ts +166 -0
- package/dist/types/urls/response-types.d.ts +67 -0
- package/dist/types/urls/type-extraction.d.ts +157 -0
- package/dist/types/urls/urls-function.d.ts +24 -0
- package/dist/types/urls.d.ts +1 -0
- package/dist/types/use-loader.d.ts +150 -0
- package/dist/types/vercel/index.d.ts +10 -0
- package/dist/types/vercel/tracing.d.ts +71 -0
- package/dist/types/vite/debug.d.ts +80 -0
- package/dist/types/vite/discovery/bundle-postprocess.d.ts +12 -0
- package/dist/types/vite/discovery/client-urls-projection.d.ts +53 -0
- package/dist/types/vite/discovery/dev-prerender-cache.d.ts +65 -0
- package/dist/types/vite/discovery/discover-routers.d.ts +17 -0
- package/dist/types/vite/discovery/discovery-errors.d.ts +113 -0
- package/dist/types/vite/discovery/gate-state.d.ts +79 -0
- package/dist/types/vite/discovery/prerender-collection.d.ts +24 -0
- package/dist/types/vite/discovery/route-types-writer.d.ts +32 -0
- package/dist/types/vite/discovery/self-gen-tracking.d.ts +22 -0
- package/dist/types/vite/discovery/shell-prerender-phase.d.ts +40 -0
- package/dist/types/vite/discovery/state.d.ts +170 -0
- package/dist/types/vite/discovery/virtual-module-codegen.d.ts +15 -0
- package/dist/types/vite/encryption-key.d.ts +2 -0
- package/dist/types/vite/index.d.ts +11 -0
- package/dist/types/vite/inject-client-debug.d.ts +56 -0
- package/dist/types/vite/plugin-types.d.ts +298 -0
- package/dist/types/vite/plugins/cjs-to-esm.d.ts +6 -0
- package/dist/types/vite/plugins/client-ref-dedup.d.ts +29 -0
- package/dist/types/vite/plugins/client-ref-hashing.d.ts +35 -0
- package/dist/types/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
- package/dist/types/vite/plugins/expose-action-id.d.ts +18 -0
- package/dist/types/vite/plugins/expose-id-utils.d.ts +37 -0
- package/dist/types/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
- package/dist/types/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
- package/dist/types/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
- package/dist/types/vite/plugins/expose-ids/router-transform.d.ts +13 -0
- package/dist/types/vite/plugins/expose-ids/types.d.ts +29 -0
- package/dist/types/vite/plugins/expose-internal-ids.d.ts +16 -0
- package/dist/types/vite/plugins/performance-tracks.d.ts +25 -0
- package/dist/types/vite/plugins/refresh-cmd.d.ts +20 -0
- package/dist/types/vite/plugins/server-ref-hashing.d.ts +24 -0
- package/dist/types/vite/plugins/server-reference-pattern.d.ts +1 -0
- package/dist/types/vite/plugins/use-cache-transform.d.ts +20 -0
- package/dist/types/vite/plugins/vercel-output.d.ts +85 -0
- package/dist/types/vite/plugins/version-injector.d.ts +21 -0
- package/dist/types/vite/plugins/version-plugin.d.ts +19 -0
- package/dist/types/vite/plugins/virtual-entries.d.ts +36 -0
- package/dist/types/vite/plugins/virtual-stub-plugin.d.ts +7 -0
- package/dist/types/vite/rango.d.ts +29 -0
- package/dist/types/vite/router-discovery.d.ts +23 -0
- package/dist/types/vite/utils/ast-handler-extract.d.ts +64 -0
- package/dist/types/vite/utils/banner.d.ts +2 -0
- package/dist/types/vite/utils/bundle-analysis.d.ts +28 -0
- package/dist/types/vite/utils/client-chunks.d.ts +55 -0
- package/dist/types/vite/utils/directive-prologue.d.ts +16 -0
- package/dist/types/vite/utils/forward-user-plugins.d.ts +37 -0
- package/dist/types/vite/utils/manifest-utils.d.ts +7 -0
- package/dist/types/vite/utils/package-resolution.d.ts +6 -0
- package/dist/types/vite/utils/prerender-utils.d.ts +32 -0
- package/dist/types/vite/utils/shared-utils.d.ts +67 -0
- package/dist/types.d.ts +1479 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/urls.d.ts +441 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.gen.d.ts +8 -0
- package/dist/urls.gen.d.ts.map +1 -0
- package/dist/urls.gen.js +8 -0
- package/dist/urls.gen.js.map +1 -0
- package/dist/urls.js +443 -0
- package/dist/urls.js.map +1 -0
- package/dist/use-loader.d.ts +127 -0
- package/dist/use-loader.d.ts.map +1 -0
- package/dist/use-loader.js +237 -0
- package/dist/use-loader.js.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
- package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.js +39 -0
- package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
- package/dist/vite/ast-handler-extract.d.ts +49 -0
- package/dist/vite/ast-handler-extract.d.ts.map +1 -0
- package/dist/vite/ast-handler-extract.js +249 -0
- package/dist/vite/ast-handler-extract.js.map +1 -0
- package/dist/vite/expose-action-id.d.ts +19 -0
- package/dist/vite/expose-action-id.d.ts.map +1 -0
- package/dist/vite/expose-action-id.js +250 -0
- package/dist/vite/expose-action-id.js.map +1 -0
- package/dist/vite/expose-id-utils.d.ts +69 -0
- package/dist/vite/expose-id-utils.d.ts.map +1 -0
- package/dist/vite/expose-id-utils.js +289 -0
- package/dist/vite/expose-id-utils.js.map +1 -0
- package/dist/vite/expose-internal-ids.d.ts +22 -0
- package/dist/vite/expose-internal-ids.d.ts.map +1 -0
- package/dist/vite/expose-internal-ids.js +886 -0
- package/dist/vite/expose-internal-ids.js.map +1 -0
- package/dist/vite/index.d.ts +149 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +10793 -4122
- 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 +121 -38
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +117 -8
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +232 -34
- package/skills/caching/SKILL.md +375 -19
- package/skills/catalog.json +289 -0
- package/skills/client-urls/SKILL.md +339 -0
- package/skills/cloudflare/SKILL.md +153 -0
- package/skills/cloudflare/agents/openai.yaml +4 -0
- package/skills/cloudflare/references/d1-and-local-dev.md +131 -0
- package/skills/cloudflare/references/streaming-and-deploy.md +107 -0
- package/skills/cloudflare/references/webhooks-and-crypto.md +147 -0
- package/skills/comparison/SKILL.md +50 -0
- package/skills/comparison/agents/openai.yaml +4 -0
- package/skills/comparison/references/framework-comparison.md +858 -0
- package/skills/composability/SKILL.md +124 -4
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +5 -11
- package/skills/defer-hydration/SKILL.md +235 -0
- package/skills/deployment-caching/SKILL.md +176 -0
- package/skills/document-cache/SKILL.md +116 -58
- package/skills/fonts/SKILL.md +1 -1
- package/skills/handler-use/SKILL.md +12 -10
- package/skills/hooks/SKILL.md +73 -691
- package/skills/hooks/data.md +282 -0
- package/skills/hooks/handle-and-actions.md +110 -0
- package/skills/hooks/navigation.md +110 -0
- package/skills/hooks/outlets.md +62 -0
- package/skills/hooks/state.md +228 -0
- package/skills/hooks/urls.md +172 -0
- package/skills/host-router/SKILL.md +129 -27
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +75 -19
- package/skills/layout/SKILL.md +40 -19
- package/skills/links/SKILL.md +283 -17
- package/skills/loader/SKILL.md +362 -11
- package/skills/middleware/SKILL.md +58 -13
- package/skills/migrate-nextjs/SKILL.md +336 -42
- package/skills/migrate-nextjs/backend-host-swap.md +120 -0
- package/skills/migrate-react-router/SKILL.md +95 -670
- package/skills/migrate-react-router/component-migration.md +201 -0
- package/skills/migrate-react-router/data-and-actions.md +236 -0
- package/skills/migrate-react-router/route-mapping.md +284 -0
- package/skills/mime-routes/SKILL.md +55 -18
- package/skills/observability/SKILL.md +231 -0
- package/skills/parallel/SKILL.md +72 -11
- package/skills/ppr/SKILL.md +918 -0
- package/skills/prerender/SKILL.md +137 -71
- package/skills/rango/SKILL.md +325 -26
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +180 -52
- package/skills/route/SKILL.md +126 -9
- package/skills/router-setup/SKILL.md +69 -11
- package/skills/scripts/SKILL.md +189 -0
- package/skills/server-actions/SKILL.md +776 -0
- package/skills/shell-manifest/SKILL.md +194 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/tailwind/SKILL.md +28 -4
- package/skills/testing/SKILL.md +131 -0
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +172 -0
- package/skills/testing/client-components.md +131 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +153 -0
- package/skills/testing/loader.md +130 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +122 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +85 -0
- package/skills/testing/server-actions.md +107 -0
- package/skills/testing/server-tree.md +128 -0
- package/skills/testing/setup.md +123 -0
- package/skills/theme/SKILL.md +9 -6
- package/skills/typesafety/SKILL.md +45 -626
- package/skills/typesafety/env-and-bindings.md +254 -0
- package/skills/typesafety/generated-files-and-cli.md +342 -0
- package/skills/typesafety/params-and-search.md +153 -0
- package/skills/typesafety/route-types.md +213 -0
- package/skills/use-cache/SKILL.md +121 -15
- package/skills/vercel/SKILL.md +149 -0
- package/skills/view-transitions/SKILL.md +341 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +0 -65
- package/src/bin/rango.ts +7 -3
- 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/dev-discovery.ts +66 -0
- package/src/browser/event-controller.ts +400 -168
- 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/link-interceptor.ts +469 -20
- package/src/browser/logging.ts +28 -0
- package/src/browser/merge-segment-loaders.ts +6 -4
- package/src/browser/navigation-bridge.ts +171 -27
- package/src/browser/navigation-client.ts +216 -90
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +167 -323
- package/src/browser/navigation-transaction.ts +9 -59
- package/src/browser/network-error-handler.ts +34 -7
- package/src/browser/notify-listeners.ts +22 -0
- package/src/browser/partial-update.ts +243 -144
- package/src/browser/prefetch/cache.ts +325 -84
- package/src/browser/prefetch/default-strategy.ts +74 -0
- package/src/browser/prefetch/fetch.ts +411 -69
- package/src/browser/prefetch/invalidation.ts +30 -0
- package/src/browser/prefetch/loader.ts +111 -0
- package/src/browser/prefetch/observer.ts +50 -22
- package/src/browser/prefetch/queue.ts +61 -12
- package/src/browser/prefetch/runtime.ts +6 -0
- package/src/browser/rango-state.ts +178 -75
- package/src/browser/react/Link.tsx +160 -92
- package/src/browser/react/NavigationProvider.tsx +211 -121
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/context.ts +4 -0
- 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 +10 -5
- 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 +62 -11
- package/src/browser/react/use-search-params.ts +140 -22
- package/src/browser/react/use-segments.ts +11 -21
- package/src/browser/response-adapter.ts +99 -8
- package/src/browser/rsc-router.tsx +248 -32
- package/src/browser/scroll-restoration.ts +37 -22
- package/src/browser/segment-reconciler.ts +31 -21
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +262 -65
- package/src/browser/types.ts +132 -34
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +213 -184
- package/src/build/generate-route-types.ts +3 -1
- package/src/build/index.ts +11 -3
- package/src/build/merge-full-manifests.ts +161 -0
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +43 -280
- 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 +513 -64
- package/src/build/route-types/param-extraction.ts +6 -3
- package/src/build/route-types/per-module-writer.ts +33 -12
- package/src/build/route-types/router-processing.ts +312 -204
- 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 +32 -29
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-exec-scope.ts +47 -0
- package/src/cache/cache-key-utils.ts +73 -15
- package/src/cache/cache-policy.ts +108 -34
- package/src/cache/cache-runtime.ts +566 -121
- package/src/cache/cache-scope.ts +383 -105
- package/src/cache/cache-tag.ts +149 -0
- package/src/cache/cf/cf-base64.ts +33 -0
- package/src/cache/cf/cf-cache-constants.ts +134 -0
- package/src/cache/cf/cf-cache-store.ts +3083 -392
- package/src/cache/cf/cf-cache-types.ts +417 -0
- package/src/cache/cf/cf-kv-utils.ts +84 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +108 -0
- package/src/cache/cf/cf-zone-purge.ts +101 -0
- package/src/cache/cf/index.ts +11 -16
- package/src/cache/document-cache.ts +184 -53
- package/src/cache/handle-snapshot.ts +92 -1
- package/src/cache/index.ts +32 -20
- package/src/cache/memory-segment-store.ts +286 -37
- package/src/cache/profile-registry.ts +46 -31
- package/src/cache/read-through-swr.ts +66 -16
- package/src/cache/search-params-filter.ts +118 -0
- package/src/cache/segment-codec.ts +80 -25
- package/src/cache/shell-snapshot.ts +516 -0
- package/src/cache/tag-invalidation.ts +230 -0
- package/src/cache/taint.ts +28 -9
- package/src/cache/types.ts +343 -100
- package/src/cache/vercel/index.ts +11 -0
- package/src/cache/vercel/vercel-cache-store.ts +1264 -0
- package/src/client-urls/client-root.tsx +168 -0
- package/src/client-urls/client-urls.ts +779 -0
- package/src/client-urls/navigation.ts +237 -0
- package/src/client-urls/revalidation-protocol.ts +56 -0
- package/src/client-urls/server-projection.ts +670 -0
- package/src/client-urls/types.ts +202 -0
- package/src/client.rsc.tsx +53 -21
- package/src/client.tsx +82 -67
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +112 -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 +165 -0
- package/src/defer.ts +185 -0
- package/src/deps/ssr.ts +4 -2
- package/src/dev-discovery-protocol.ts +11 -0
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +44 -4
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +67 -37
- package/src/handles/MetaTags.tsx +24 -53
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +35 -8
- package/src/handles/deferred-resolution.ts +134 -0
- package/src/handles/is-thenable.ts +16 -0
- package/src/handles/meta.ts +14 -40
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +9 -60
- package/src/host/errors.ts +13 -22
- package/src/host/index.ts +9 -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 +108 -12
- package/src/index.ts +106 -14
- package/src/internal-debug.ts +11 -10
- package/src/loader-redirect.tsx +64 -0
- 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/outlet-context.ts +21 -1
- package/src/outlet-provider.tsx +20 -6
- package/src/prerender/build-shell-capture.ts +453 -0
- package/src/prerender/param-hash.ts +16 -16
- package/src/prerender/shell-manifest-key.ts +20 -0
- package/src/prerender/store.ts +47 -38
- package/src/prerender.ts +81 -13
- package/src/redirect-origin.ts +172 -0
- package/src/regex-escape.ts +8 -0
- package/src/render-error-thrower.tsx +20 -0
- package/src/response-utils.ts +62 -0
- package/src/reverse.ts +65 -39
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +120 -78
- package/src/route-definition/dsl-helpers.ts +342 -313
- package/src/route-definition/helper-factories.ts +28 -140
- package/src/route-definition/helpers-types.ts +106 -62
- package/src/route-definition/index.ts +1 -2
- package/src/route-definition/redirect.ts +60 -28
- package/src/route-definition/resolve-handler-use.ts +12 -1
- package/src/route-definition/use-item-types.ts +29 -0
- package/src/route-map-builder.ts +102 -74
- package/src/route-types.ts +19 -46
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +120 -30
- package/src/router/error-handling.ts +110 -29
- package/src/router/find-match.ts +129 -30
- package/src/router/handler-context.ts +58 -57
- package/src/router/instrument.ts +401 -0
- package/src/router/intercept-resolution.ts +98 -21
- package/src/router/lazy-includes.ts +83 -59
- package/src/router/loader-resolution.ts +429 -85
- package/src/router/logging.ts +0 -6
- package/src/router/manifest.ts +74 -40
- package/src/router/match-api.ts +94 -58
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +268 -171
- package/src/router/match-middleware/background-revalidation.ts +40 -24
- package/src/router/match-middleware/cache-lookup.ts +316 -302
- package/src/router/match-middleware/cache-store.ts +134 -52
- 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 +76 -79
- package/src/router/metrics.ts +17 -36
- package/src/router/middleware-types.ts +20 -130
- package/src/router/middleware.ts +302 -172
- package/src/router/navigation-snapshot.ts +51 -60
- package/src/router/params-util.ts +23 -0
- package/src/router/parse-pattern.ts +115 -0
- package/src/router/pattern-matching.ts +181 -150
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prefetch-default.ts +59 -0
- package/src/router/prefetch-limits.ts +37 -0
- package/src/router/prerender-match.ts +159 -69
- package/src/router/preview-match.ts +6 -2
- package/src/router/request-classification.ts +50 -69
- package/src/router/revalidation.ts +146 -83
- package/src/router/route-snapshot.ts +14 -3
- package/src/router/route-trie-builder.ts +334 -0
- package/src/router/router-context.ts +6 -29
- package/src/router/router-interfaces.ts +168 -38
- package/src/router/router-options.ts +235 -11
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +219 -88
- package/src/router/segment-resolution/helpers.ts +96 -18
- package/src/router/segment-resolution/loader-cache.ts +208 -39
- package/src/router/segment-resolution/loader-mask.ts +60 -0
- package/src/router/segment-resolution/loader-snapshot.ts +259 -0
- package/src/router/segment-resolution/mask-nested.ts +99 -0
- package/src/router/segment-resolution/revalidation.ts +318 -321
- package/src/router/segment-resolution/static-store.ts +55 -15
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution/view-transition-default.ts +60 -0
- package/src/router/segment-resolution.ts +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 +75 -0
- package/src/router/telemetry-otel.ts +171 -200
- package/src/router/telemetry.ts +106 -20
- package/src/router/timeout.ts +53 -22
- package/src/router/tracing.ts +235 -0
- package/src/router/transition-when.ts +76 -0
- package/src/router/trie-matching.ts +171 -59
- package/src/router/types.ts +9 -63
- package/src/router/url-params.ts +57 -0
- package/src/router.ts +249 -79
- package/src/rsc/capture-queue.ts +218 -0
- package/src/rsc/full-payload.ts +77 -0
- package/src/rsc/handler-context.ts +4 -2
- package/src/rsc/handler.ts +570 -288
- package/src/rsc/helpers.ts +245 -47
- package/src/rsc/index.ts +2 -5
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +116 -40
- package/src/rsc/manifest-init.ts +55 -56
- package/src/rsc/nonce.ts +26 -1
- package/src/rsc/origin-guard.ts +39 -25
- package/src/rsc/progressive-enhancement.ts +378 -83
- package/src/rsc/redirect-guard.ts +102 -0
- package/src/rsc/render-pipeline.ts +611 -0
- package/src/rsc/response-cache-serve.ts +259 -0
- package/src/rsc/response-error.ts +79 -12
- package/src/rsc/response-route-handler.ts +80 -206
- package/src/rsc/routine-plan.ts +359 -0
- package/src/rsc/rsc-rendering.ts +1647 -164
- package/src/rsc/runtime-warnings.ts +23 -10
- package/src/rsc/server-action.ts +421 -138
- package/src/rsc/shell-build-manifest.ts +343 -0
- package/src/rsc/shell-capture-constants.ts +45 -0
- package/src/rsc/shell-capture.ts +2135 -0
- package/src/rsc/shell-serve.ts +350 -0
- package/src/rsc/ssr-setup.ts +124 -16
- package/src/rsc/stream-idle.ts +137 -0
- package/src/rsc/transition-gate.ts +86 -0
- package/src/rsc/types.ts +125 -7
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +35 -30
- package/src/segment-fragments.ts +165 -0
- package/src/segment-loader-promise.ts +49 -4
- package/src/segment-system.tsx +463 -153
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +426 -55
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +162 -15
- package/src/server/handle-store.ts +190 -70
- package/src/server/loader-registry.ts +33 -42
- package/src/server/request-context.ts +824 -215
- package/src/server.ts +7 -2
- package/src/ssr/index.tsx +687 -184
- package/src/ssr/inject-rsc-eager.ts +167 -0
- package/src/ssr/preinit-client-references.ts +106 -0
- package/src/ssr/ssr-root.tsx +305 -0
- package/src/ssr-suspension-warning.ts +67 -0
- package/src/static-handler.ts +28 -15
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +46 -0
- package/src/testing/dispatch.ts +951 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +147 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +319 -0
- package/src/testing/e2e/parity.ts +400 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +257 -0
- package/src/testing/generated-routes.ts +199 -0
- package/src/testing/index.ts +121 -0
- package/src/testing/internal/context.ts +380 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +371 -0
- package/src/testing/render-route.tsx +667 -0
- package/src/testing/run-loader.ts +423 -0
- package/src/testing/run-middleware.ts +219 -0
- package/src/testing/run-transition-when.ts +197 -0
- package/src/testing/shell-status.ts +206 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +305 -0
- package/src/theme/ThemeProvider.tsx +56 -84
- 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 +19 -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 +123 -64
- package/src/types/index.ts +4 -10
- package/src/types/loader-types.ts +76 -13
- package/src/types/request-scope.ts +112 -0
- package/src/types/route-config.ts +20 -52
- package/src/types/route-entry.ts +3 -6
- package/src/types/segments.ts +155 -14
- package/src/urls/include-helper.ts +38 -64
- package/src/urls/include-provider.ts +71 -0
- package/src/urls/index.ts +2 -11
- package/src/urls/path-helper-types.ts +88 -25
- package/src/urls/path-helper.ts +30 -110
- package/src/urls/pattern-types.ts +101 -19
- package/src/urls/response-types.ts +22 -29
- package/src/urls/type-extraction.ts +98 -154
- package/src/urls/urls-function.ts +1 -19
- package/src/use-loader.tsx +379 -110
- package/src/vercel/index.ts +11 -0
- package/src/vercel/tracing.ts +89 -0
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +18 -14
- package/src/vite/discovery/client-urls-projection.ts +322 -0
- package/src/vite/discovery/dev-prerender-cache.ts +117 -0
- package/src/vite/discovery/discover-routers.ts +178 -151
- package/src/vite/discovery/discovery-errors.ts +255 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +125 -70
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/shell-prerender-phase.ts +397 -0
- package/src/vite/discovery/state.ts +104 -6
- package/src/vite/discovery/virtual-module-codegen.ts +226 -87
- package/src/vite/encryption-key.ts +29 -0
- package/src/vite/index.ts +12 -0
- package/src/vite/inject-client-debug.ts +88 -0
- package/src/vite/plugin-types.ts +243 -10
- package/src/vite/plugins/cjs-to-esm.ts +16 -19
- package/src/vite/plugins/client-ref-dedup.ts +296 -29
- 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 +95 -120
- 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 +551 -486
- package/src/vite/plugins/performance-tracks.ts +26 -25
- package/src/vite/plugins/refresh-cmd.ts +1 -1
- package/src/vite/plugins/server-ref-hashing.ts +74 -0
- package/src/vite/plugins/server-reference-pattern.ts +10 -0
- package/src/vite/plugins/use-cache-transform.ts +73 -83
- package/src/vite/plugins/vercel-output.ts +384 -0
- package/src/vite/plugins/version-injector.ts +39 -29
- package/src/vite/plugins/version-plugin.ts +45 -40
- package/src/vite/plugins/virtual-entries.ts +193 -30
- package/src/vite/rango.ts +287 -140
- package/src/vite/router-discovery.ts +1639 -157
- 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 +1 -59
- package/src/vite/utils/package-resolution.ts +21 -52
- package/src/vite/utils/prerender-utils.ts +96 -49
- package/src/vite/utils/shared-utils.ts +156 -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
package/README.md
CHANGED
|
@@ -1,78 +1,42 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Rango
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A code-first, type-safe React Server Components router. Django-inspired:
|
|
4
|
+
routes are expressed in one visible tree, URLs are built from names, and
|
|
5
|
+
everything past the core is opt-in.
|
|
4
6
|
|
|
5
|
-
> **Experimental:** This package is under active development. APIs may change
|
|
7
|
+
> **Experimental:** This package is under active development. APIs may change
|
|
8
|
+
> between releases. Install with `@experimental` tag.
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
This page is a tour: it builds one small shop and meets the entire core API
|
|
11
|
+
along the way — about six primitives. Everything else is opt-in and linked at
|
|
12
|
+
the end. For the design rationale behind these APIs, read
|
|
13
|
+
[Why Rango](https://github.com/ivogt/vite-rsc/blob/main/packages/rangojs-router/docs/why-rango.md); this page shows how it feels, that page
|
|
14
|
+
argues why it's right.
|
|
8
15
|
|
|
9
|
-
|
|
10
|
-
- **Structural composability** — Attach routes, loaders, middleware, handles, caching, prerendering, and static generation without hiding the route tree
|
|
11
|
-
- **Composable URL patterns** — Django-style `urls()` DSL with `path`, `layout`, `include`
|
|
12
|
-
- **Data loaders** — `createLoader()` with automatic streaming and Suspense integration
|
|
13
|
-
- **Live data layer** — Pre-render or cache the UI shell while loaders stay live by default at request time
|
|
14
|
-
- **Layouts & nesting** — Nested layouts with `<Outlet />` and parallel routes
|
|
15
|
-
- **Segment-level caching** — `cache()` DSL with TTL/SWR and pluggable cache stores
|
|
16
|
-
- **Middleware** — Route-level middleware with cookie and header access
|
|
17
|
-
- **Pre-rendering** — `Prerender()` and `Static()` handlers for build-time rendering
|
|
18
|
-
- **Theme support** — Light/dark mode with FOUC prevention and system detection
|
|
19
|
-
- **Host routing** — Multi-app routing by domain/subdomain via `@rangojs/router/host`
|
|
20
|
-
- **Response routes** — `path.json()`, `path.text()`, `path.xml()` for API endpoints
|
|
21
|
-
- **Trailing slash control** — Per-route canonical URLs with `"never"`, `"always"`, or `"ignore"`
|
|
22
|
-
- **CLI codegen** — `rango generate` for route type generation
|
|
16
|
+
## Start a new app
|
|
23
17
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
- [Execution model](./docs/internal/execution-model.md)
|
|
27
|
-
- [Semantic change checklist](./docs/internal/semantic-change-checklist.md)
|
|
28
|
-
- [Stability roadmap](./docs/internal/stability-roadmap.md)
|
|
29
|
-
|
|
30
|
-
## Installation
|
|
18
|
+
The recommended path is to scaffold a complete app with
|
|
19
|
+
[`create-rango`](https://github.com/rangojs/templates):
|
|
31
20
|
|
|
32
21
|
```bash
|
|
33
|
-
|
|
22
|
+
pnpm create rango my-app
|
|
34
23
|
```
|
|
35
24
|
|
|
36
|
-
|
|
25
|
+
Select a deployment target with `--template basic`, `--template cloudflare`, or
|
|
26
|
+
`--template vercel`. The templates include streaming RSC, typed routes, Server
|
|
27
|
+
Actions, Tailwind CSS, and production deployment configuration. For a plain
|
|
28
|
+
JavaScript Node app, add `--template basic --js`. With npm, run
|
|
29
|
+
`npm create rango@latest my-app`. The scaffolder currently requires Node.js 24
|
|
30
|
+
or newer.
|
|
37
31
|
|
|
38
|
-
|
|
39
|
-
npm install react @vitejs/plugin-rsc
|
|
40
|
-
```
|
|
32
|
+
## Install manually
|
|
41
33
|
|
|
42
|
-
|
|
34
|
+
If you are adding Rango to an existing Vite RSC project:
|
|
43
35
|
|
|
44
36
|
```bash
|
|
45
|
-
npm install @
|
|
37
|
+
npm install @rangojs/router@experimental react @vitejs/plugin-rsc
|
|
46
38
|
```
|
|
47
39
|
|
|
48
|
-
## Import Paths
|
|
49
|
-
|
|
50
|
-
Use these import paths consistently:
|
|
51
|
-
|
|
52
|
-
- `@rangojs/router` — server/RSC router APIs, route DSL, `createRouter`, `urls`, `redirect`, `Prerender`, `Static`, shared types
|
|
53
|
-
- `@rangojs/router/client` — hooks and components such as `Link`, `Outlet`, `href`, `useNavigation`, `useLoader`, `useAction`, `useLocationState`
|
|
54
|
-
- `@rangojs/router/cache` — public cache APIs such as `CFCacheStore`, `MemorySegmentCacheStore`, `createDocumentCacheMiddleware`
|
|
55
|
-
- `@rangojs/router/host`, `@rangojs/router/theme`, `@rangojs/router/vite` — specialized public subpaths
|
|
56
|
-
- `@rangojs/router/rsc`, `@rangojs/router/ssr` — advanced server-only integration subpaths for custom request/HTML pipelines
|
|
57
|
-
|
|
58
|
-
Use only subpaths that are explicitly exported from the package. Avoid deep imports such as `@rangojs/router/cache/cf`.
|
|
59
|
-
|
|
60
|
-
`@rangojs/router` is conditionally resolved. Server-only root APIs such as
|
|
61
|
-
`createRouter()`, `urls()`, `redirect()`, `Prerender()`, and `cookies()` rely on
|
|
62
|
-
the `react-server` export condition and are meant to run in router definitions,
|
|
63
|
-
handlers, and other RSC/server modules. Outside that environment the root entry
|
|
64
|
-
falls back to stub implementations that throw guidance errors.
|
|
65
|
-
|
|
66
|
-
If you hit a root-entrypoint stub error:
|
|
67
|
-
|
|
68
|
-
- hooks and components like `Link`, `Outlet`, `useLoader`, `useNavigation`, and `MetaTags` belong in `@rangojs/router/client`
|
|
69
|
-
- cache APIs like `CFCacheStore` and `createDocumentCacheMiddleware` belong in `@rangojs/router/cache`
|
|
70
|
-
- host-router APIs belong in `@rangojs/router/host`
|
|
71
|
-
|
|
72
|
-
## Quick Start
|
|
73
|
-
|
|
74
|
-
### Vite Config
|
|
75
|
-
|
|
76
40
|
```ts
|
|
77
41
|
// vite.config.ts
|
|
78
42
|
import react from "@vitejs/plugin-react";
|
|
@@ -84,873 +48,436 @@ export default defineConfig({
|
|
|
84
48
|
});
|
|
85
49
|
```
|
|
86
50
|
|
|
87
|
-
|
|
51
|
+
The `cloudflare` preset targets Cloudflare Workers (add
|
|
52
|
+
`@cloudflare/vite-plugin`); the `vercel` preset emits a ready-to-deploy
|
|
53
|
+
`.vercel/output` (Build Output API) from a plain `vite build` — see the
|
|
54
|
+
[`/vercel` skill](./skills/vercel/SKILL.md); omit `preset` for the default
|
|
55
|
+
Node setup.
|
|
88
56
|
|
|
89
|
-
|
|
90
|
-
`@rangojs/router`.
|
|
57
|
+
## Using the skills with your coding agent
|
|
91
58
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
59
|
+
This package ships agent skills in `node_modules/@rangojs/router/skills/` —
|
|
60
|
+
task-focused guides written for LLM coding agents. Start at
|
|
61
|
+
`skills/rango/SKILL.md` (the mental model + catalog); a machine-readable index
|
|
62
|
+
is at `skills/catalog.json`.
|
|
95
63
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
64
|
+
- **Claude Code**: point it at the skills (e.g. "read
|
|
65
|
+
node_modules/@rangojs/router/skills/rango/SKILL.md before routing work"), or
|
|
66
|
+
copy/symlink the directories you use into your project's `.claude/skills/`.
|
|
67
|
+
- **Other agents (Cursor, Codex CLI, Gemini CLI, ...)**: these harnesses
|
|
68
|
+
auto-discover skills from `.agents/skills/` in your project (or
|
|
69
|
+
`~/.agents/skills/`) — copy or symlink the skill directories you use from
|
|
70
|
+
`node_modules/@rangojs/router/skills/<name>` into `.agents/skills/<name>`.
|
|
71
|
+
The files are plain markdown; cross-references like `/loader` name sibling
|
|
72
|
+
skill directories.
|
|
100
73
|
|
|
101
|
-
|
|
102
|
-
// reverse("home") -> "/"
|
|
103
|
-
```
|
|
74
|
+
## 1. Pages
|
|
104
75
|
|
|
105
|
-
|
|
76
|
+
A router is a tree. `path()` places a page, `layout()` wraps children,
|
|
77
|
+
`{ name }` gives a route an identity:
|
|
106
78
|
|
|
107
79
|
```tsx
|
|
80
|
+
// src/router.tsx
|
|
108
81
|
import { createRouter, urls } from "@rangojs/router";
|
|
109
|
-
import {
|
|
82
|
+
import { Document } from "./document";
|
|
83
|
+
import { ShopLayout } from "./layouts/shop";
|
|
84
|
+
import { HomePage } from "./routes/home";
|
|
85
|
+
import { ProductPage } from "./routes/product";
|
|
110
86
|
|
|
111
|
-
const urlpatterns = urls(({ path,
|
|
112
|
-
|
|
113
|
-
|
|
87
|
+
const urlpatterns = urls(({ path, layout }) => [
|
|
88
|
+
layout(<ShopLayout />, () => [
|
|
89
|
+
path("/", HomePage, { name: "home" }),
|
|
90
|
+
path("/products/:slug", ProductPage, { name: "product" }),
|
|
91
|
+
]),
|
|
114
92
|
]);
|
|
115
93
|
|
|
116
|
-
export const router = createRouter().routes(urlpatterns);
|
|
117
|
-
// reverse("blog.post", { slug: "hello-world" }) -> "/blog/hello-world"
|
|
94
|
+
export const router = createRouter({ document: Document }).routes(urlpatterns);
|
|
118
95
|
```
|
|
119
96
|
|
|
120
|
-
|
|
97
|
+
```tsx
|
|
98
|
+
// src/layouts/shop.tsx
|
|
99
|
+
import { Outlet } from "@rangojs/router/client";
|
|
100
|
+
|
|
101
|
+
export function ShopLayout() {
|
|
102
|
+
return (
|
|
103
|
+
<div>
|
|
104
|
+
<nav>Shop</nav>
|
|
105
|
+
<main>
|
|
106
|
+
<Outlet /> {/* child routes render here */}
|
|
107
|
+
</main>
|
|
108
|
+
</div>
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
```
|
|
121
112
|
|
|
122
113
|
```tsx
|
|
123
114
|
// src/document.tsx
|
|
124
115
|
"use client";
|
|
125
116
|
|
|
126
117
|
import type { ReactNode } from "react";
|
|
127
|
-
import { MetaTags } from "@rangojs/router/client";
|
|
118
|
+
import { MetaTags, Scripts } from "@rangojs/router/client";
|
|
128
119
|
|
|
129
120
|
export function Document({ children }: { children: ReactNode }) {
|
|
130
121
|
return (
|
|
131
122
|
<html lang="en">
|
|
132
123
|
<head>
|
|
133
124
|
<MetaTags />
|
|
125
|
+
<Scripts />
|
|
134
126
|
</head>
|
|
135
|
-
<body>
|
|
127
|
+
<body>
|
|
128
|
+
<Scripts position="body" />
|
|
129
|
+
{children}
|
|
130
|
+
</body>
|
|
136
131
|
</html>
|
|
137
132
|
);
|
|
138
133
|
}
|
|
139
134
|
```
|
|
140
135
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
Rango is a named-route router first.
|
|
144
|
-
|
|
145
|
-
Paths define where a route lives. Names define how the app refers to it.
|
|
146
|
-
|
|
147
|
-
It is also structurally composable.
|
|
148
|
-
|
|
149
|
-
As an app grows, routes can pull in external handlers, loaders, middleware, handles, cache policy, intercepts, prerendering, and static generation while keeping the route tree visible at the composition site.
|
|
150
|
-
|
|
151
|
-
### Named Routes
|
|
152
|
-
|
|
153
|
-
```tsx
|
|
154
|
-
import { urls } from "@rangojs/router";
|
|
155
|
-
|
|
156
|
-
const urlpatterns = urls(({ path }) => [
|
|
157
|
-
path("/", HomePage, { name: "home" }),
|
|
158
|
-
path("/product/:slug", ProductPage, { name: "product" }),
|
|
159
|
-
path("/search/:query?", SearchPage, { name: "search" }),
|
|
160
|
-
path("/files/*", FilesPage, { name: "files" }),
|
|
161
|
-
]);
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
Use `reverse()` as the default way to link to routes:
|
|
165
|
-
|
|
166
|
-
```tsx
|
|
167
|
-
router.reverse("product", { slug: "widget" }); // "/product/widget"
|
|
168
|
-
router.reverse("search", undefined, { q: "rsc" }); // "/search?q=rsc"
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### Composable URL Modules
|
|
172
|
-
|
|
173
|
-
Local route names compose cleanly with `include(..., { name })`:
|
|
174
|
-
|
|
175
|
-
```tsx
|
|
176
|
-
import { urls } from "@rangojs/router";
|
|
177
|
-
|
|
178
|
-
export const blogPatterns = urls(({ path }) => [
|
|
179
|
-
path("/", BlogIndexPage, { name: "index" }),
|
|
180
|
-
path("/:slug", BlogPostPage, { name: "post" }),
|
|
181
|
-
]);
|
|
182
|
-
|
|
183
|
-
export const urlpatterns = urls(({ path, include }) => [
|
|
184
|
-
path("/", HomePage, { name: "home" }),
|
|
185
|
-
include("/blog", blogPatterns, { name: "blog" }),
|
|
186
|
-
]);
|
|
187
|
-
|
|
188
|
-
router.reverse("blog.index"); // "/blog"
|
|
189
|
-
router.reverse("blog.post", { slug: "hello-world" }); // "/blog/hello-world"
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
This is the core composition model:
|
|
193
|
-
|
|
194
|
-
- Paths stay local to the module that defines them
|
|
195
|
-
- Names become stable references across the app
|
|
196
|
-
- `include()` scales those names without forcing raw path-string coupling
|
|
197
|
-
|
|
198
|
-
### Structural Composability
|
|
199
|
-
|
|
200
|
-
Rango avoids the usual tradeoff between modularity and visibility.
|
|
201
|
-
|
|
202
|
-
You can extract route behavior into separate files or packages and still keep one readable route definition that shows the structure of the app.
|
|
203
|
-
|
|
204
|
-
```tsx
|
|
205
|
-
import { urls } from "@rangojs/router";
|
|
206
|
-
import { ProductPage } from "./routes/product";
|
|
207
|
-
import { ProductLoader } from "./loaders/product";
|
|
208
|
-
import { productMiddleware } from "./middleware/product";
|
|
209
|
-
import { productRevalidate } from "./revalidation/product";
|
|
210
|
-
|
|
211
|
-
const shopPatterns = urls(({ path, loader, middleware, revalidate, cache }) => [
|
|
212
|
-
path("/product/:slug", ProductPage, { name: "product" }, () => [
|
|
213
|
-
middleware(productMiddleware),
|
|
214
|
-
loader(ProductLoader),
|
|
215
|
-
revalidate(productRevalidate),
|
|
216
|
-
cache({ ttl: 300 }),
|
|
217
|
-
]),
|
|
218
|
-
]);
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
The route tree stays explicit even when behavior is modular.
|
|
222
|
-
|
|
223
|
-
This applies to:
|
|
224
|
-
|
|
225
|
-
- external route modules mounted with `include()`
|
|
226
|
-
- imported loaders, middleware, and handles attached at the route site
|
|
227
|
-
- prerendering and static generation attached without turning the route tree opaque
|
|
228
|
-
|
|
229
|
-
### Loaders As the Live Data Layer
|
|
230
|
-
|
|
231
|
-
Rango separates app structure from app data.
|
|
232
|
-
|
|
233
|
-
Routes, layouts, and pre-rendered segments can be static or cached, while
|
|
234
|
-
loaders stay live by default and re-resolve at request time.
|
|
235
|
-
|
|
236
|
-
This means you can pre-render or cache the shell of a page without freezing its
|
|
237
|
-
data.
|
|
238
|
-
|
|
239
|
-
- `cache()` caches route structure and rendered UI segments
|
|
240
|
-
- `Prerender()` skips loaders at build time
|
|
241
|
-
- `loader()` provides fresh request-time data
|
|
242
|
-
- individual loaders can opt into caching explicitly when needed
|
|
243
|
-
|
|
244
|
-
```tsx
|
|
245
|
-
import { urls, Prerender } from "@rangojs/router";
|
|
246
|
-
import { ArticleLoader } from "./loaders/article";
|
|
247
|
-
|
|
248
|
-
const docsPatterns = urls(({ path, loader }) => [
|
|
249
|
-
path("/docs/:slug", Prerender(DocsArticle), { name: "docs.article" }, () => [
|
|
250
|
-
loader(ArticleLoader), // fresh by default
|
|
251
|
-
]),
|
|
252
|
-
]);
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
Pre-render the page, keep the data live.
|
|
256
|
-
|
|
257
|
-
### Typed Handlers
|
|
136
|
+
(The built-in `DefaultDocument` already wires all of this — a custom document
|
|
137
|
+
is optional.)
|
|
258
138
|
|
|
259
|
-
|
|
139
|
+
A handler is a function of `ctx`. Typing it by route name gives typed params
|
|
140
|
+
— the Vite plugin generates the route map automatically, nothing to register:
|
|
260
141
|
|
|
261
142
|
```tsx
|
|
143
|
+
// src/routes/product.tsx
|
|
262
144
|
import type { Handler } from "@rangojs/router";
|
|
263
145
|
|
|
264
146
|
export const ProductPage: Handler<"product"> = (ctx) => {
|
|
265
|
-
|
|
266
|
-
const homeUrl = ctx.reverse("home"); // type-safe URL by route name
|
|
267
|
-
return <h1>Product: {slug}</h1>;
|
|
147
|
+
return <h1>{ctx.params.slug}</h1>; // slug: string, from the pattern
|
|
268
148
|
};
|
|
269
149
|
```
|
|
270
150
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
All handler typing styles are supported, but they solve different problems:
|
|
274
|
-
|
|
275
|
-
- `Handler<"product">` — default for named app routes
|
|
276
|
-
- `Handler<".post", ScopedRouteMap<"blog">>` — best for reusable included modules
|
|
277
|
-
- `Handler<"/blog/:slug">` — good for unnamed or local-only extracted handlers
|
|
278
|
-
- `Handler<{ slug: string }>` — escape hatch for advanced or decoupled cases
|
|
279
|
-
|
|
280
|
-
Example of a scoped local name inside a mounted module:
|
|
151
|
+
And because routes have names, URLs are built, never hand-written:
|
|
281
152
|
|
|
282
153
|
```tsx
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
type BlogRoutes = ScopedRouteMap<"blog">;
|
|
287
|
-
|
|
288
|
-
export const BlogPostPage: Handler<".post", BlogRoutes> = (ctx) => {
|
|
289
|
-
return <a href={ctx.reverse(".index")}>Back to blog</a>;
|
|
290
|
-
};
|
|
154
|
+
const url = ctx.reverse("product", { slug: "espresso-cup" });
|
|
155
|
+
// "/products/espresso-cup" — name and params compile-time checked
|
|
291
156
|
```
|
|
292
157
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
Define a search schema on the route for type-safe search parameters:
|
|
298
|
-
|
|
299
|
-
```tsx
|
|
300
|
-
const urlpatterns = urls(({ path }) => [
|
|
301
|
-
path("/search", SearchPage, {
|
|
302
|
-
name: "search",
|
|
303
|
-
search: { q: "string", page: "number?", sort: "string?" },
|
|
304
|
-
}),
|
|
305
|
-
]);
|
|
306
|
-
|
|
307
|
-
// Handler receives typed search params via ctx.search
|
|
308
|
-
const SearchPage: Handler<"search"> = (ctx) => {
|
|
309
|
-
const { q, page, sort } = ctx.search;
|
|
310
|
-
// q: string, page: number | undefined, sort: string | undefined
|
|
311
|
-
};
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
### Trailing Slash Handling
|
|
315
|
-
|
|
316
|
-
Trailing slash behavior is a current `path()` feature.
|
|
317
|
-
|
|
318
|
-
Set it per route with `trailingSlash`:
|
|
319
|
-
|
|
320
|
-
```tsx
|
|
321
|
-
const urlpatterns = urls(({ path }) => [
|
|
322
|
-
path("/about", AboutPage, {
|
|
323
|
-
name: "about",
|
|
324
|
-
trailingSlash: "never",
|
|
325
|
-
}),
|
|
326
|
-
path("/docs/", DocsPage, {
|
|
327
|
-
name: "docs",
|
|
328
|
-
trailingSlash: "always",
|
|
329
|
-
}),
|
|
330
|
-
path("/webhook", WebhookHandler, {
|
|
331
|
-
name: "webhook",
|
|
332
|
-
trailingSlash: "ignore",
|
|
333
|
-
}),
|
|
334
|
-
]);
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
Modes:
|
|
338
|
-
|
|
339
|
-
- `"never"` — canonical URL has no trailing slash, redirects `/about/` to `/about`
|
|
340
|
-
- `"always"` — canonical URL has a trailing slash, redirects `/docs` to `/docs/`
|
|
341
|
-
- `"ignore"` — matches both forms without redirect
|
|
342
|
-
|
|
343
|
-
Default behavior when `trailingSlash` is omitted:
|
|
158
|
+
Rename `/products/:slug` to `/shop/:slug` in the one place it's defined and
|
|
159
|
+
every link, redirect, and prefetch follows. In client components, `href()`
|
|
160
|
+
validates static paths against the registered patterns:
|
|
161
|
+
`<Link to={href("/")}>Home</Link>`.
|
|
344
162
|
|
|
345
|
-
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
163
|
+
The tree is also lazy-first, which is the shape serverless cold starts want.
|
|
164
|
+
`include()` mounts a whole route module under a prefix — and with the async
|
|
165
|
+
form, `include("/shop", () => import("./shop"))`, the group is code-split:
|
|
166
|
+
its module doesn't load or run until a request matches it, a group nobody
|
|
167
|
+
visits never evaluates at all, and warm requests run zero route handlers.
|
|
168
|
+
Boot cost stays flat as the app grows — one module body at startup, not one
|
|
169
|
+
per group — while matching stays an `O(path length)` prefix trie, identical
|
|
170
|
+
in dev and production. None of this is assumed: the trie is benchmarked
|
|
171
|
+
in-repo against multi-thousand-route manifests, and the lazy guarantees are
|
|
172
|
+
pinned by run-count tests (see
|
|
173
|
+
[matching & lazy discovery](https://github.com/ivogt/vite-rsc/blob/main/packages/rangojs-router/docs/internal/matching-and-lazy-discovery.md)).
|
|
174
|
+
Grow the tree without watching the boot time.
|
|
349
175
|
|
|
350
|
-
|
|
176
|
+
That's a working site. Everything below adds to this app.
|
|
351
177
|
|
|
352
|
-
|
|
178
|
+
## 2. Data
|
|
353
179
|
|
|
354
|
-
|
|
180
|
+
The product page needs data. A handler is an async server component — fetch
|
|
181
|
+
where you render:
|
|
355
182
|
|
|
356
183
|
```tsx
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
Response types available: `path.json()`, `path.text()`, `path.html()`, `path.xml()`, `path.image()`, `path.stream()`, `path.any()`.
|
|
365
|
-
|
|
366
|
-
## Layouts & Nesting
|
|
367
|
-
|
|
368
|
-
### Layouts with Outlet
|
|
369
|
-
|
|
370
|
-
```tsx
|
|
371
|
-
import { urls } from "@rangojs/router";
|
|
372
|
-
|
|
373
|
-
const urlpatterns = urls(({ path, layout }) => [
|
|
374
|
-
layout(<MainLayout />, () => [
|
|
375
|
-
path("/", HomePage, { name: "home" }),
|
|
376
|
-
path("/about", AboutPage, { name: "about" }),
|
|
377
|
-
]),
|
|
378
|
-
]);
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
```tsx
|
|
382
|
-
"use client";
|
|
383
|
-
import { Outlet } from "@rangojs/router/client";
|
|
384
|
-
|
|
385
|
-
function MainLayout() {
|
|
386
|
-
return (
|
|
387
|
-
<div>
|
|
388
|
-
<nav>...</nav>
|
|
389
|
-
<Outlet />
|
|
390
|
-
</div>
|
|
391
|
-
);
|
|
392
|
-
}
|
|
393
|
-
```
|
|
394
|
-
|
|
395
|
-
### Loading Skeletons
|
|
396
|
-
|
|
397
|
-
```tsx
|
|
398
|
-
const urlpatterns = urls(({ path, loading }) => [
|
|
399
|
-
path("/product/:slug", ProductPage, { name: "product" }, () => [
|
|
400
|
-
loading(<ProductSkeleton />),
|
|
401
|
-
]),
|
|
402
|
-
]);
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
### Parallel Routes
|
|
406
|
-
|
|
407
|
-
```tsx
|
|
408
|
-
const urlpatterns = urls(({ path, layout, parallel, loader, loading }) => [
|
|
409
|
-
layout(BlogLayout, () => [
|
|
410
|
-
parallel({ "@sidebar": BlogSidebarHandler }, () => [
|
|
411
|
-
loader(BlogSidebarLoader),
|
|
412
|
-
loading(<SidebarSkeleton />),
|
|
413
|
-
]),
|
|
414
|
-
path("/blog", BlogIndexPage, { name: "blog" }),
|
|
415
|
-
path("/blog/:slug", BlogPostPage, { name: "blogPost" }),
|
|
416
|
-
]),
|
|
417
|
-
]);
|
|
184
|
+
// src/routes/product.tsx
|
|
185
|
+
export const ProductPage: Handler<"product"> = async (ctx) => {
|
|
186
|
+
const product = await db.products.find(ctx.params.slug);
|
|
187
|
+
ctx.use(Meta)({ title: product.name }); // metadata where the data is
|
|
188
|
+
return <ProductView product={product} />;
|
|
189
|
+
};
|
|
418
190
|
```
|
|
419
191
|
|
|
420
|
-
|
|
192
|
+
That's the default data path. React Router and Remix split data into a
|
|
193
|
+
loader beside the component because components couldn't fetch; RSC collapses
|
|
194
|
+
the split, and Rango doesn't reintroduce it. (That `ctx.use(Meta)` line is
|
|
195
|
+
also the whole metadata story: push tags where the data already is, layouts
|
|
196
|
+
set title templates, deeper segments override — no separate metadata export,
|
|
197
|
+
no second fetch.)
|
|
421
198
|
|
|
422
|
-
|
|
199
|
+
Loaders enter when data needs a life of its own. First case: a **client
|
|
200
|
+
component** needs server data — the stock badge is interactive, but the
|
|
201
|
+
stock lives in the database:
|
|
423
202
|
|
|
424
203
|
```tsx
|
|
204
|
+
// src/loaders/stock.ts
|
|
425
205
|
import { createLoader } from "@rangojs/router";
|
|
426
206
|
|
|
427
|
-
export const
|
|
428
|
-
|
|
429
|
-
return
|
|
207
|
+
export const StockLoader = createLoader(async (ctx) => {
|
|
208
|
+
"use server";
|
|
209
|
+
return db.stockFor(ctx.params.slug);
|
|
430
210
|
});
|
|
431
211
|
```
|
|
432
212
|
|
|
433
|
-
### Using in Server Components (Handlers)
|
|
434
|
-
|
|
435
213
|
```tsx
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
const { posts } = await ctx.use(BlogSidebarLoader);
|
|
441
|
-
return (
|
|
442
|
-
<ul>
|
|
443
|
-
{posts.map((p) => (
|
|
444
|
-
<li key={p.slug}>{p.title}</li>
|
|
445
|
-
))}
|
|
446
|
-
</ul>
|
|
447
|
-
);
|
|
448
|
-
}
|
|
214
|
+
path("/products/:slug", ProductPage, { name: "product" }, () => [
|
|
215
|
+
loader(StockLoader),
|
|
216
|
+
loading(<ProductSkeleton />),
|
|
217
|
+
]),
|
|
449
218
|
```
|
|
450
219
|
|
|
451
|
-
### Using in Client Components
|
|
452
|
-
|
|
453
220
|
```tsx
|
|
221
|
+
// src/components/stock-badge.tsx
|
|
454
222
|
"use client";
|
|
455
223
|
import { useLoader } from "@rangojs/router/client";
|
|
456
|
-
import {
|
|
224
|
+
import { StockLoader } from "../loaders/stock";
|
|
457
225
|
|
|
458
|
-
function
|
|
459
|
-
const { data } = useLoader(
|
|
460
|
-
return
|
|
461
|
-
<ul>
|
|
462
|
-
{data.posts.map((p) => (
|
|
463
|
-
<li key={p.slug}>{p.title}</li>
|
|
464
|
-
))}
|
|
465
|
-
</ul>
|
|
466
|
-
);
|
|
226
|
+
export function StockBadge() {
|
|
227
|
+
const { data } = useLoader(StockLoader);
|
|
228
|
+
return <span>{data.inStock ? "In stock" : "Sold out"}</span>;
|
|
467
229
|
}
|
|
468
230
|
```
|
|
469
231
|
|
|
470
|
-
|
|
232
|
+
Loaders run in parallel with the handler and stream; `loading()` opts the
|
|
233
|
+
segment into skeleton-then-stream. Without it, document requests arrive
|
|
234
|
+
**ready** — the HTML ships with data in place; the skeleton is a per-segment
|
|
235
|
+
choice, not the first impression.
|
|
471
236
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
]);
|
|
478
|
-
```
|
|
237
|
+
The rule of thumb: fetch in the **handler** when the data belongs to the
|
|
238
|
+
rendered page — it will be frozen with the shell if you cache it (step 4).
|
|
239
|
+
Put data in a **loader** when it must outlive the shell: shared with client
|
|
240
|
+
components, fresh on every hit even when the segment is cached, refetchable
|
|
241
|
+
from the client, or revalidated on its own after actions.
|
|
479
242
|
|
|
480
|
-
##
|
|
243
|
+
## 3. Mutations
|
|
481
244
|
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
245
|
+
Users add to cart. A server action is a plain `"use server"` function; the
|
|
246
|
+
form posts to it with standard React 19 hooks — and it works without
|
|
247
|
+
JavaScript:
|
|
485
248
|
|
|
486
249
|
```tsx
|
|
487
|
-
|
|
488
|
-
|
|
250
|
+
// src/actions/cart.ts
|
|
251
|
+
"use server";
|
|
489
252
|
|
|
490
|
-
function
|
|
491
|
-
|
|
492
|
-
<nav>
|
|
493
|
-
<Link to={reverse("home")}>Home</Link>
|
|
494
|
-
<Link to={reverse("blogPost", { slug: "my-post" })}>My Post</Link>
|
|
495
|
-
<Link to={reverse("about")}>About</Link>
|
|
496
|
-
</nav>
|
|
497
|
-
);
|
|
253
|
+
export async function addToCart(productId: string) {
|
|
254
|
+
await db.cart.insert({ productId });
|
|
498
255
|
}
|
|
499
256
|
```
|
|
500
257
|
|
|
501
|
-
`reverse()` is type-safe — route names and required params are checked at compile time. Included routes use dotted names: `reverse("api.health")`.
|
|
502
|
-
|
|
503
|
-
Handlers also have `ctx.reverse()` directly on the context:
|
|
504
|
-
|
|
505
|
-
```tsx
|
|
506
|
-
const BlogPostPage: Handler<"blogPost"> = (ctx) => {
|
|
507
|
-
const backUrl = ctx.reverse("blog");
|
|
508
|
-
return <Link to={backUrl}>Back to blog</Link>;
|
|
509
|
-
};
|
|
510
|
-
```
|
|
511
|
-
|
|
512
|
-
### `href()` for Path Validation (Client Components)
|
|
513
|
-
|
|
514
|
-
In client components, use `href()` for compile-time path validation:
|
|
515
|
-
|
|
516
258
|
```tsx
|
|
259
|
+
// src/components/add-to-cart.tsx
|
|
517
260
|
"use client";
|
|
518
|
-
import {
|
|
261
|
+
import { useActionState } from "react";
|
|
262
|
+
import { addToCart } from "../actions/cart";
|
|
519
263
|
|
|
520
|
-
function
|
|
264
|
+
export function AddToCart({ productId }: { productId: string }) {
|
|
265
|
+
const [, action, pending] = useActionState(() => addToCart(productId), null);
|
|
521
266
|
return (
|
|
522
|
-
<
|
|
523
|
-
<
|
|
524
|
-
|
|
525
|
-
Blog
|
|
526
|
-
</Link>
|
|
527
|
-
<Link to={href("/about")}>About</Link>
|
|
528
|
-
</nav>
|
|
267
|
+
<form action={action}>
|
|
268
|
+
<button disabled={pending}>{pending ? "Adding…" : "Add to cart"}</button>
|
|
269
|
+
</form>
|
|
529
270
|
);
|
|
530
271
|
}
|
|
531
272
|
```
|
|
532
273
|
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
```tsx
|
|
538
|
-
"use client";
|
|
539
|
-
import { useNavigation, useRouter } from "@rangojs/router/client";
|
|
540
|
-
|
|
541
|
-
function SearchForm() {
|
|
542
|
-
const router = useRouter();
|
|
543
|
-
const nav = useNavigation();
|
|
544
|
-
|
|
545
|
-
function handleSubmit(query: string) {
|
|
546
|
-
router.push(`/search?q=${encodeURIComponent(query)}`);
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
return <form onSubmit={...}>{nav.state !== "idle" && <Spinner />}</form>;
|
|
550
|
-
}
|
|
551
|
-
```
|
|
552
|
-
|
|
553
|
-
### Scroll Restoration
|
|
274
|
+
After an action, route segments and loaders re-render by default so the UI
|
|
275
|
+
reflects the new state. `revalidate()` narrows that to the segments that
|
|
276
|
+
actually own the data — matched by action **reference**, so renames are
|
|
277
|
+
compile errors, not stale predicates:
|
|
554
278
|
|
|
555
279
|
```tsx
|
|
556
|
-
|
|
557
|
-
import { ScrollRestoration } from "@rangojs/router/client";
|
|
280
|
+
import * as CartActions from "./actions/cart";
|
|
558
281
|
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
<ScrollRestoration />
|
|
565
|
-
</body>
|
|
566
|
-
</html>
|
|
567
|
-
);
|
|
568
|
-
}
|
|
569
|
-
```
|
|
570
|
-
|
|
571
|
-
## Includes (Composable Modules)
|
|
572
|
-
|
|
573
|
-
Split URL patterns into composable modules with `include()`:
|
|
574
|
-
|
|
575
|
-
```tsx
|
|
576
|
-
// src/api/urls.tsx
|
|
577
|
-
import { urls } from "@rangojs/router";
|
|
578
|
-
|
|
579
|
-
export const apiPatterns = urls(({ path }) => [
|
|
580
|
-
path.json("/health", () => ({ status: "ok" }), { name: "health" }),
|
|
581
|
-
path.json("/products", getProducts, { name: "products" }),
|
|
582
|
-
]);
|
|
583
|
-
|
|
584
|
-
// src/urls.tsx
|
|
585
|
-
import { urls } from "@rangojs/router";
|
|
586
|
-
import { apiPatterns } from "./api/urls";
|
|
587
|
-
|
|
588
|
-
export const urlpatterns = urls(({ path, include }) => [
|
|
589
|
-
path("/", HomePage, { name: "home" }),
|
|
590
|
-
include("/api", apiPatterns, { name: "api" }),
|
|
591
|
-
// Mounts apiPatterns under /api: /api/health, /api/products
|
|
592
|
-
]);
|
|
282
|
+
path("/cart", CartPage, { name: "cart" }, () => [
|
|
283
|
+
loader(CartLoader, () => [
|
|
284
|
+
revalidate((ctx) => ctx.isAction(CartActions) || undefined),
|
|
285
|
+
]),
|
|
286
|
+
]),
|
|
593
287
|
```
|
|
594
288
|
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
289
|
+
Notice what you didn't write: no API endpoint, no fetch wrapper, and no
|
|
290
|
+
client-cache invalidation call. Actions invalidate the client-side caches
|
|
291
|
+
(history entries, prefetches, HTTP cache key) automatically — a no-op action
|
|
292
|
+
can opt out per invocation with `keepClientCache()`.
|
|
598
293
|
|
|
599
|
-
|
|
294
|
+
## 4. Speed
|
|
600
295
|
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
Without a `name`, included routes are local to the mounted module. They still match requests and render normally, but their names are hidden from the generated route map and cannot be reversed globally. Use `{ name: "" }` to merge children into the parent namespace without adding a prefix.
|
|
608
|
-
|
|
609
|
-
**`{ name: "" }` is flattening, not isolation.** Flattened routes behave as if defined inline at the include site — dot-local reverse (`.name`) can reach any sibling route at root scope, including routes from other `{ name: "" }` mounts. If you need module-level isolation, omit the `name` option or use a namespace.
|
|
610
|
-
|
|
611
|
-
## Middleware
|
|
612
|
-
|
|
613
|
-
```tsx
|
|
614
|
-
const urlpatterns = urls(({ path, middleware }) => [
|
|
615
|
-
middleware(
|
|
616
|
-
async (ctx, next) => {
|
|
617
|
-
const start = Date.now();
|
|
618
|
-
const response = await next();
|
|
619
|
-
console.log(
|
|
620
|
-
`${ctx.request.method} ${ctx.url.pathname} ${Date.now() - start}ms`,
|
|
621
|
-
);
|
|
622
|
-
return response;
|
|
623
|
-
},
|
|
624
|
-
() => [path("/dashboard", DashboardPage, { name: "dashboard" })],
|
|
625
|
-
),
|
|
626
|
-
]);
|
|
627
|
-
```
|
|
628
|
-
|
|
629
|
-
## Caching
|
|
630
|
-
|
|
631
|
-
### Route-Level Caching
|
|
296
|
+
Production traffic. Wrap a segment in `cache()` and the rendered shell —
|
|
297
|
+
including everything the handler fetched — is stored, while every loader on
|
|
298
|
+
it keeps running fresh on each hit. This is where the handler-vs-loader
|
|
299
|
+
choice from step 2 pays off: handler data freezes with the shell, the
|
|
300
|
+
`StockLoader` stays live. Cached shell, live data, one line:
|
|
632
301
|
|
|
633
302
|
```tsx
|
|
634
|
-
const urlpatterns = urls(({ path, cache }) => [
|
|
635
|
-
|
|
636
|
-
path("/
|
|
637
|
-
|
|
303
|
+
const urlpatterns = urls(({ path, layout, loader, loading, cache }) => [
|
|
304
|
+
layout(<ShopLayout />, () => [
|
|
305
|
+
path("/", HomePage, { name: "home" }),
|
|
306
|
+
cache({ ttl: 600, swr: 3600, tags: ["products"] }, () => [
|
|
307
|
+
path("/products/:slug", ProductPage, { name: "product" }, () => [
|
|
308
|
+
loader(StockLoader), // never cached: re-runs on every hit
|
|
309
|
+
loading(<ProductSkeleton />),
|
|
310
|
+
]),
|
|
311
|
+
]),
|
|
638
312
|
]),
|
|
639
313
|
]);
|
|
640
314
|
```
|
|
641
315
|
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
import { createRouter } from "@rangojs/router";
|
|
646
|
-
import {
|
|
647
|
-
CFCacheStore,
|
|
648
|
-
createDocumentCacheMiddleware,
|
|
649
|
-
} from "@rangojs/router/cache";
|
|
650
|
-
|
|
651
|
-
export const router = createRouter({
|
|
652
|
-
document: Document,
|
|
653
|
-
cache: (env) => ({
|
|
654
|
-
store: new CFCacheStore({
|
|
655
|
-
defaults: { ttl: 60, swr: 300 },
|
|
656
|
-
ctx: env.ctx,
|
|
657
|
-
}),
|
|
658
|
-
}),
|
|
659
|
-
})
|
|
660
|
-
.use(createDocumentCacheMiddleware())
|
|
661
|
-
.routes(urlpatterns);
|
|
662
|
-
```
|
|
663
|
-
|
|
664
|
-
Available cache stores:
|
|
665
|
-
|
|
666
|
-
- `CFCacheStore` — Cloudflare edge cache (production)
|
|
667
|
-
- `MemorySegmentCacheStore` — In-memory cache (development/testing)
|
|
668
|
-
|
|
669
|
-
## Pre-rendering
|
|
670
|
-
|
|
671
|
-
Pre-rendering generates route segments at build time. The worker handles all requests — there are no static files served from assets.
|
|
672
|
-
|
|
673
|
-
### Static Segments
|
|
674
|
-
|
|
675
|
-
Use `Static()` for segments rendered once at build time (no params). Works on `path()`, `layout()`, and `parallel()`:
|
|
316
|
+
Wire a store once on the router (`MemorySegmentCacheStore` for dev,
|
|
317
|
+
`CFCacheStore` for Cloudflare — see the [`/caching` skill](./skills/caching/SKILL.md)),
|
|
318
|
+
and bust by tag from the mutation that changes the data:
|
|
676
319
|
|
|
677
320
|
```tsx
|
|
678
|
-
|
|
321
|
+
// src/actions/products.ts
|
|
322
|
+
"use server";
|
|
323
|
+
import { updateTag } from "@rangojs/router";
|
|
679
324
|
|
|
680
|
-
export
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
export const DocsNav = Static(async () => {
|
|
685
|
-
const items = await readDocsNavItems();
|
|
686
|
-
return (
|
|
687
|
-
<nav>
|
|
688
|
-
{items.map((i) => (
|
|
689
|
-
<a key={i.slug} href={i.slug}>
|
|
690
|
-
{i.title}
|
|
691
|
-
</a>
|
|
692
|
-
))}
|
|
693
|
-
</nav>
|
|
694
|
-
);
|
|
695
|
-
});
|
|
325
|
+
export async function renameProduct(id: string, name: string) {
|
|
326
|
+
await db.products.rename(id, name);
|
|
327
|
+
await updateTag("products"); // awaitable, read-your-own-writes
|
|
328
|
+
}
|
|
696
329
|
```
|
|
697
330
|
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
Use `Prerender()` for route-scoped pre-rendering. With params, provide `getParams` first, handler second:
|
|
331
|
+
Navigation speed is a `Link` prop away:
|
|
701
332
|
|
|
702
333
|
```tsx
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
async () => {
|
|
707
|
-
const slugs = await getAllBlogSlugs();
|
|
708
|
-
return slugs.map((slug) => ({ slug }));
|
|
709
|
-
},
|
|
710
|
-
async (ctx) => {
|
|
711
|
-
const post = await getPost(ctx.params.slug);
|
|
712
|
-
return <article>{post.content}</article>;
|
|
713
|
-
},
|
|
714
|
-
);
|
|
334
|
+
<Link to={url} prefetch="viewport">
|
|
335
|
+
{product.name}
|
|
336
|
+
</Link>
|
|
715
337
|
```
|
|
716
338
|
|
|
717
|
-
|
|
339
|
+
A fully-prefetched navigation commits a **finished page** — no skeleton, no
|
|
340
|
+
loading flash — and staying correct is the router's job: every action
|
|
341
|
+
invalidates the prefetch caches by default, so a prefetched page can't show
|
|
342
|
+
pre-mutation data.
|
|
718
343
|
|
|
719
|
-
|
|
344
|
+
To move the shell's cost to build time entirely, `Prerender()` bakes it while
|
|
345
|
+
loaders stay live at runtime — same mental model, earlier cache write. See
|
|
346
|
+
the [`/prerender` skill](./skills/prerender/SKILL.md).
|
|
720
347
|
|
|
721
|
-
|
|
722
|
-
import { Prerender, Passthrough } from "@rangojs/router";
|
|
723
|
-
|
|
724
|
-
export const ProductPageDef = Prerender(
|
|
725
|
-
async () => {
|
|
726
|
-
const featured = await db.getFeaturedProducts();
|
|
727
|
-
return featured.map((p) => ({ id: p.id }));
|
|
728
|
-
},
|
|
729
|
-
async (ctx) => {
|
|
730
|
-
const product = await db.getProduct(ctx.params.id);
|
|
731
|
-
return <Product data={product} />;
|
|
732
|
-
},
|
|
733
|
-
);
|
|
734
|
-
|
|
735
|
-
// In route definition:
|
|
736
|
-
path(
|
|
737
|
-
"/products/:id",
|
|
738
|
-
Passthrough(ProductPageDef, async (ctx) => {
|
|
739
|
-
const product = await ctx.env.DB.getProduct(ctx.params.id);
|
|
740
|
-
return <Product data={product} />;
|
|
741
|
-
}),
|
|
742
|
-
);
|
|
743
|
-
```
|
|
348
|
+
## 5. An API, when you need one
|
|
744
349
|
|
|
745
|
-
|
|
350
|
+
Response routes live in the same tree — `path.json()`, `path.text()`,
|
|
351
|
+
`path.xml()`, `path.image()`, `path.stream()`:
|
|
746
352
|
|
|
747
353
|
```tsx
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
},
|
|
753
|
-
async (ctx) => {
|
|
754
|
-
const product = await db.getProduct(ctx.params.id);
|
|
755
|
-
if (!product.published) return ctx.passthrough();
|
|
756
|
-
return <Product data={product} />;
|
|
757
|
-
},
|
|
758
|
-
);
|
|
354
|
+
path("/products/:slug", ProductPage, { name: "product" }),
|
|
355
|
+
path.json("/products/:slug", (ctx) => db.products.find(ctx.params.slug), {
|
|
356
|
+
name: "productJson",
|
|
357
|
+
}),
|
|
759
358
|
```
|
|
760
359
|
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
360
|
+
Same URL: browsers get the page, API clients get JSON, negotiated by
|
|
361
|
+
`Accept` header in the route trie. Handlers return bare values; errors
|
|
362
|
+
serialize as RFC 9457 `application/problem+json`. The payload type is
|
|
363
|
+
inferred from the handler — no codegen:
|
|
764
364
|
|
|
765
365
|
```ts
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
)
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
366
|
+
type Product = RouteResponse<typeof urlpatterns, "productJson">;
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
See the [`/api-client` skill](./skills/api-client/SKILL.md) for a small typed
|
|
370
|
+
client over these endpoints.
|
|
371
|
+
|
|
372
|
+
## Everything else, when you need it
|
|
373
|
+
|
|
374
|
+
That was the core: `path`/`layout`/`include`, names, loaders, actions +
|
|
375
|
+
`revalidate`, `cache`, response routes. The rest is opt-in — reach for it
|
|
376
|
+
when the requirement appears:
|
|
377
|
+
|
|
378
|
+
| I need to… | Skill |
|
|
379
|
+
| ----------------------------------------------- | -------------------------------------------------------------------------------------------- |
|
|
380
|
+
| guard or shape requests (auth, headers) | [`/middleware`](./skills/middleware/SKILL.md) |
|
|
381
|
+
| multi-column layouts, independent slots | [`/parallel`](./skills/parallel/SKILL.md) |
|
|
382
|
+
| open a route as a modal on soft navigation | [`/intercept`](./skills/intercept/SKILL.md) |
|
|
383
|
+
| compose route modules / sub-apps | [`/route`](./skills/route/SKILL.md), [`/composability`](./skills/composability/SKILL.md) |
|
|
384
|
+
| cache a single function or component | [`/use-cache`](./skills/use-cache/SKILL.md), [`/cache-guide`](./skills/cache-guide/SKILL.md) |
|
|
385
|
+
| feed live loaders from a cached shell | [`/shell-manifest`](./skills/shell-manifest/SKILL.md) |
|
|
386
|
+
| edge caching with Cache-Control | [`/document-cache`](./skills/document-cache/SKILL.md) |
|
|
387
|
+
| light/dark mode without FOUC | [`/theme`](./skills/theme/SKILL.md) |
|
|
388
|
+
| analytics / third-party scripts with CSP nonce | [`/scripts`](./skills/scripts/SKILL.md) |
|
|
389
|
+
| locale routing | [`/i18n`](./skills/i18n/SKILL.md) |
|
|
390
|
+
| SSE and WebSockets | [`/streams-and-websockets`](./skills/streams-and-websockets/SKILL.md) |
|
|
391
|
+
| multi-app routing by domain | [`/host-router`](./skills/host-router/SKILL.md) |
|
|
392
|
+
| animate navigations | [`/view-transitions`](./skills/view-transitions/SKILL.md) |
|
|
393
|
+
| test loaders, middleware, handlers, Flight | [`/testing`](./skills/testing/SKILL.md) |
|
|
394
|
+
| see where request time goes | [`/observability`](./skills/observability/SKILL.md) |
|
|
395
|
+
| deploy to Vercel (cache store, tracing, output) | [`/vercel`](./skills/vercel/SKILL.md) |
|
|
396
|
+
| choose in-function vs CDN caching | [`/deployment-caching`](./skills/deployment-caching/SKILL.md) |
|
|
397
|
+
| compare Rango with Next.js / TanStack / Waku | [`/comparison`](./skills/comparison/SKILL.md) |
|
|
398
|
+
|
|
399
|
+
The [`/rango` skill](./skills/rango/SKILL.md) is the full catalog and the
|
|
400
|
+
mental model that ties it together.
|
|
401
|
+
|
|
402
|
+
## Reference
|
|
403
|
+
|
|
404
|
+
### Imports and subpaths
|
|
405
|
+
|
|
406
|
+
| Export | Description |
|
|
407
|
+
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
|
|
408
|
+
| `@rangojs/router` | Server/RSC core and shared types: `createRouter`, `urls`, `createLoader`, `Handler`, `Prerender`, `Meta` |
|
|
409
|
+
| `@rangojs/router/client` | Client: `Link`, `Outlet`, `href`, `useNavigation`, `useLoader`, `MetaTags` |
|
|
410
|
+
| `@rangojs/router/cache` | Cache: `CFCacheStore`, `VercelCacheStore`, `MemorySegmentCacheStore`, `createDocumentCacheMiddleware` |
|
|
411
|
+
| `@rangojs/router/theme` | Theme: `useTheme`, `ThemeProvider`, `ThemeScript` |
|
|
412
|
+
| `@rangojs/router/host` | Host routing: `createHostRouter`, `defineHosts`, `isNoRouteMatchError` |
|
|
413
|
+
| `@rangojs/router/vercel` | Vercel: `createVercelTracing` (phase spans via `@vercel/otel`'s global tracer) |
|
|
414
|
+
| `@rangojs/router/vite` | Vite plugin: `rango()` |
|
|
415
|
+
| `@rangojs/router/testing` | Consumer testing primitives: `runLoader`, `runMiddleware`, `dispatch` (plus `/testing/dom`, `/testing/flight`, `/testing/e2e`) |
|
|
416
|
+
| `@rangojs/router/rsc` | Advanced server pipeline APIs: `createRSCHandler`, request-context access |
|
|
417
|
+
| `@rangojs/router/ssr` | Advanced SSR bridge APIs: `createSSRHandler` |
|
|
418
|
+
|
|
419
|
+
Use only subpaths that are explicitly exported; avoid deep imports.
|
|
420
|
+
|
|
421
|
+
The root entry is conditionally resolved: server-only APIs (`createRouter`,
|
|
422
|
+
`urls`, `redirect`, `Prerender`, `cookies`) run under the `react-server`
|
|
423
|
+
condition and throw guidance errors elsewhere. If you hit a root-entrypoint
|
|
424
|
+
stub error: hooks and components (`Link`, `Outlet`, `useLoader`, `MetaTags`)
|
|
425
|
+
live in `@rangojs/router/client`; cache APIs in `@rangojs/router/cache`;
|
|
426
|
+
host APIs in `@rangojs/router/host`.
|
|
427
|
+
|
|
428
|
+
### Type safety
|
|
429
|
+
|
|
430
|
+
The Vite plugin generates `router.named-routes.gen.ts` automatically (on dev
|
|
431
|
+
startup, HMR, and builds), registering route names, params, and search
|
|
432
|
+
schemas globally via `Rango.GeneratedRouteMap`. That powers `Handler<"name">`,
|
|
433
|
+
`ctx.reverse()`, and `RouteParams<"name">` with no manual registration.
|
|
434
|
+
|
|
435
|
+
For response-aware and path-based utilities (`href()`, `Rango.Path`,
|
|
436
|
+
`RouteResponse`), augment `Rango.RegisteredRoutes` once:
|
|
790
437
|
|
|
791
438
|
```ts
|
|
792
|
-
// Custom factory
|
|
793
|
-
rango({
|
|
794
|
-
buildEnv: async (ctx) => {
|
|
795
|
-
const { getPlatformProxy } = await import("wrangler");
|
|
796
|
-
const proxy = await getPlatformProxy();
|
|
797
|
-
return { env: proxy.env, dispose: proxy.dispose };
|
|
798
|
-
},
|
|
799
|
-
});
|
|
800
|
-
|
|
801
|
-
// Plain object (Node.js)
|
|
802
|
-
rango({ buildEnv: { DATABASE_URL: process.env.DATABASE_URL } });
|
|
803
|
-
```
|
|
804
|
-
|
|
805
|
-
Build-time env applies to both production builds and dev on-demand prerender. Without `buildEnv`, accessing `ctx.env` in a Prerender handler throws with a clear error.
|
|
806
|
-
|
|
807
|
-
## Theme
|
|
808
|
-
|
|
809
|
-
### Router Configuration
|
|
810
|
-
|
|
811
|
-
```tsx
|
|
812
|
-
export const router = createRouter({
|
|
813
|
-
document: Document,
|
|
814
|
-
theme: {
|
|
815
|
-
defaultTheme: "light",
|
|
816
|
-
themes: ["light", "dark", "system"],
|
|
817
|
-
attribute: "class",
|
|
818
|
-
enableSystem: true,
|
|
819
|
-
},
|
|
820
|
-
}).routes(urlpatterns);
|
|
821
|
-
```
|
|
822
|
-
|
|
823
|
-
### Theme Toggle
|
|
824
|
-
|
|
825
|
-
```tsx
|
|
826
|
-
"use client";
|
|
827
|
-
import { useTheme } from "@rangojs/router/theme";
|
|
828
|
-
|
|
829
|
-
function ThemeToggle() {
|
|
830
|
-
const { theme, setTheme, themes } = useTheme();
|
|
831
|
-
return (
|
|
832
|
-
<select value={theme} onChange={(e) => setTheme(e.target.value)}>
|
|
833
|
-
{themes.map((t) => (
|
|
834
|
-
<option key={t}>{t}</option>
|
|
835
|
-
))}
|
|
836
|
-
</select>
|
|
837
|
-
);
|
|
838
|
-
}
|
|
839
|
-
```
|
|
840
|
-
|
|
841
|
-
## Host Routing
|
|
842
|
-
|
|
843
|
-
Route requests to different apps based on domain/subdomain patterns using `@rangojs/router/host`:
|
|
844
|
-
|
|
845
|
-
```tsx
|
|
846
|
-
// worker.rsc.tsx
|
|
847
|
-
import { createHostRouter } from "@rangojs/router/host";
|
|
848
|
-
|
|
849
|
-
const hostRouter = createHostRouter();
|
|
850
|
-
|
|
851
|
-
hostRouter.host(["*.localhost"]).map(() => import("./apps/admin/handler.js"));
|
|
852
|
-
hostRouter.host(["localhost"]).map(() => import("./apps/site/handler.js"));
|
|
853
|
-
hostRouter.fallback().map(() => import("./apps/site/handler.js"));
|
|
854
|
-
|
|
855
|
-
export default {
|
|
856
|
-
async fetch(request, env, ctx) {
|
|
857
|
-
return hostRouter.match(request, { env, ctx });
|
|
858
|
-
},
|
|
859
|
-
};
|
|
860
|
-
```
|
|
861
|
-
|
|
862
|
-
Each sub-app has its own `createRouter()` and `urls()`. The host router lazily imports the matched app's handler. Patterns are matched in registration order — register more specific patterns (subdomains) before catch-alls.
|
|
863
|
-
|
|
864
|
-
## Meta Tags
|
|
865
|
-
|
|
866
|
-
Accumulate meta tags across route segments using the built-in `Meta` handle:
|
|
867
|
-
|
|
868
|
-
```tsx
|
|
869
|
-
import { Meta } from "@rangojs/router";
|
|
870
|
-
import type { HandlerContext } from "@rangojs/router";
|
|
871
|
-
|
|
872
|
-
export function BlogPostPage(ctx: HandlerContext) {
|
|
873
|
-
const meta = ctx.use(Meta);
|
|
874
|
-
meta({ title: "My Blog Post" });
|
|
875
|
-
meta({ name: "description", content: "A great blog post" });
|
|
876
|
-
meta({ property: "og:title", content: "My Blog Post" });
|
|
877
|
-
|
|
878
|
-
return <article>...</article>;
|
|
879
|
-
}
|
|
880
|
-
```
|
|
881
|
-
|
|
882
|
-
Render collected tags in the document with `<MetaTags />` from `@rangojs/router/client`.
|
|
883
|
-
|
|
884
|
-
## CLI: `rango generate`
|
|
885
|
-
|
|
886
|
-
Route types are generated automatically by the Vite plugin. The CLI is a manual fallback for generating types outside the dev server (e.g. in CI or for IDE support before first `pnpm dev`):
|
|
887
|
-
|
|
888
|
-
```bash
|
|
889
|
-
npx rango generate src/router.tsx
|
|
890
|
-
npx rango generate src/ # recursive scan
|
|
891
|
-
npx rango generate src/urls.tsx src/api/ # mix files and directories
|
|
892
|
-
```
|
|
893
|
-
|
|
894
|
-
Auto-detects file type:
|
|
895
|
-
|
|
896
|
-
- Files with `createRouter` → `*.named-routes.gen.ts` with global route map
|
|
897
|
-
- Files with `urls()` → `*.gen.ts` with per-module route names, params, and search types
|
|
898
|
-
|
|
899
|
-
## Type Safety
|
|
900
|
-
|
|
901
|
-
The Vite plugin automatically generates a `router.named-routes.gen.ts` file that globally registers route names, patterns, and search schemas via `RSCRouter.GeneratedRouteMap`. This powers server-side named-route typing such as `Handler<"name">`, `ctx.reverse()`, `getRequestContext().reverse()`, and `RouteParams<"name">` without any manual route registration. The gen file is updated on dev server startup, HMR, and production builds.
|
|
902
|
-
|
|
903
|
-
Use the generated map by default. Augment `RSCRouter.RegisteredRoutes` only when you need the richer `typeof router.routeMap` shape globally, especially for response-aware and path-based utilities.
|
|
904
|
-
|
|
905
|
-
```typescript
|
|
906
439
|
// router.tsx
|
|
907
440
|
const router = createRouter<AppBindings>({}).routes(urlpatterns);
|
|
908
441
|
|
|
442
|
+
// The alias is required: an interface heritage clause cannot take a `typeof`
|
|
443
|
+
// type query directly (TS1109), so extend through a named alias.
|
|
444
|
+
type AppRoutes = typeof router.routeMap;
|
|
445
|
+
|
|
909
446
|
declare global {
|
|
910
|
-
namespace
|
|
447
|
+
namespace Rango {
|
|
911
448
|
interface Env extends AppEnv {}
|
|
912
|
-
interface
|
|
913
|
-
interface RegisteredRoutes extends typeof router.routeMap {}
|
|
449
|
+
interface RegisteredRoutes extends AppRoutes {}
|
|
914
450
|
}
|
|
915
451
|
}
|
|
916
452
|
```
|
|
917
453
|
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
- `GeneratedRouteMap` (auto-generated) — use for server-side named-route typing: `Handler<"name">`, `ctx.reverse()`, `Prerender<"name">`
|
|
921
|
-
- `typeof router.routeMap` — use when you need route entries with response metadata
|
|
922
|
-
- `RegisteredRoutes` (manual augmentation) — use to expose `typeof router.routeMap` globally for `href()`, `PathResponse`, `ValidPaths`, and other path/response-aware utilities
|
|
454
|
+
See the [`/typesafety` skill](./skills/typesafety/SKILL.md) for the full
|
|
455
|
+
surface breakdown.
|
|
923
456
|
|
|
924
|
-
|
|
925
|
-
`ctx.reverse()` by default. If you want type-safe local names for a specific
|
|
926
|
-
module, use `scopedReverse<typeof localPatterns>(ctx.reverse)` or
|
|
927
|
-
`scopedReverse<routes>(ctx.reverse)` with a generated local route type.
|
|
457
|
+
### CLI
|
|
928
458
|
|
|
929
|
-
|
|
459
|
+
Route types are generated by the Vite plugin; the CLI is the manual fallback
|
|
460
|
+
for CI or pre-first-run IDE support:
|
|
930
461
|
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
| `@rangojs/router/cache` | Cache: `CFCacheStore`, `MemorySegmentCacheStore`, `createDocumentCacheMiddleware` |
|
|
936
|
-
| `@rangojs/router/theme` | Theme: `useTheme`, `ThemeProvider`, `ThemeScript` |
|
|
937
|
-
| `@rangojs/router/host` | Host routing: `createHostRouter`, `defineHosts` |
|
|
938
|
-
| `@rangojs/router/vite` | Vite plugin: `rango()` |
|
|
939
|
-
| `@rangojs/router/rsc` | Advanced server pipeline APIs: `createRSCHandler`, request-context access |
|
|
940
|
-
| `@rangojs/router/ssr` | Advanced SSR bridge APIs: `createSSRHandler` |
|
|
941
|
-
| `@rangojs/router/server` | Internal build/runtime utilities for advanced integrations |
|
|
942
|
-
| `@rangojs/router/build` | Build utilities |
|
|
462
|
+
```bash
|
|
463
|
+
npx rango generate src/router.tsx # global named-route map
|
|
464
|
+
npx rango generate src/ # recursive scan
|
|
465
|
+
```
|
|
943
466
|
|
|
944
|
-
|
|
945
|
-
or components, import from `@rangojs/router/client`; if you need cache or host
|
|
946
|
-
APIs, use their dedicated subpaths.
|
|
467
|
+
### Examples
|
|
947
468
|
|
|
948
|
-
|
|
469
|
+
- [`e2e/mini`](https://github.com/ivogt/vite-rsc/tree/main/packages/rangojs-router/e2e/mini) — single-file demo app
|
|
470
|
+
- [`cloudflare-basic`](https://github.com/ivogt/vite-rsc/tree/main/tests/cloudflare-basic) — Cloudflare Workers with caching, loaders, theme, and pre-rendering
|
|
471
|
+
- [`cloudflare-multi-router`](https://github.com/ivogt/vite-rsc/tree/main/examples/cloudflare-multi-router) — multi-app host routing
|
|
472
|
+
- [`vercel-basic`](https://github.com/ivogt/vite-rsc/tree/main/examples/vercel-basic) — Vercel deployment with `preset: "vercel"`, `VercelCacheStore`, and OTel tracing
|
|
473
|
+
- [`vercel-multi-router`](https://github.com/ivogt/vite-rsc/tree/main/examples/vercel-multi-router) — multi-app host routing on Vercel (single function, routed by Host header)
|
|
949
474
|
|
|
950
|
-
|
|
475
|
+
### Going deeper
|
|
951
476
|
|
|
952
|
-
- [
|
|
953
|
-
- [
|
|
477
|
+
- [Why Rango](https://github.com/ivogt/vite-rsc/blob/main/packages/rangojs-router/docs/why-rango.md) — the design rationale, claim by claim
|
|
478
|
+
- [Framework comparison](./skills/comparison/references/framework-comparison.md) — Rango vs Next.js App Router, TanStack Start, and Waku, capability by capability
|
|
479
|
+
- [Docs index](https://github.com/ivogt/vite-rsc/blob/main/packages/rangojs-router/docs/README.md) — architecture, caching, prerender, testing
|
|
480
|
+
- [Execution model](https://github.com/ivogt/vite-rsc/blob/main/packages/rangojs-router/docs/internal/execution-model.md) — the runtime contract
|
|
954
481
|
|
|
955
482
|
## License
|
|
956
483
|
|