@rangojs/router 0.0.0-experimental.dfdb0387 → 0.0.0-experimental.e9c0b2f2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +8 -0
- package/README.md +184 -31
- package/dist/__internal.d.ts +83 -0
- package/dist/__internal.d.ts.map +1 -0
- package/dist/__internal.js +19 -0
- package/dist/__internal.js.map +1 -0
- package/dist/__mocks__/version.d.ts +7 -0
- package/dist/__mocks__/version.d.ts.map +1 -0
- package/dist/__mocks__/version.js +7 -0
- package/dist/__mocks__/version.js.map +1 -0
- package/dist/__tests__/client-href.test.d.ts +2 -0
- package/dist/__tests__/client-href.test.d.ts.map +1 -0
- package/dist/__tests__/client-href.test.js +74 -0
- package/dist/__tests__/client-href.test.js.map +1 -0
- package/dist/__tests__/component-utils.test.d.ts +2 -0
- package/dist/__tests__/component-utils.test.d.ts.map +1 -0
- package/dist/__tests__/component-utils.test.js +51 -0
- package/dist/__tests__/component-utils.test.js.map +1 -0
- package/dist/__tests__/event-controller.test.d.ts +2 -0
- package/dist/__tests__/event-controller.test.d.ts.map +1 -0
- package/dist/__tests__/event-controller.test.js +538 -0
- package/dist/__tests__/event-controller.test.js.map +1 -0
- package/dist/__tests__/helpers/route-tree.d.ts +118 -0
- package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
- package/dist/__tests__/helpers/route-tree.js +374 -0
- package/dist/__tests__/helpers/route-tree.js.map +1 -0
- package/dist/__tests__/match-result.test.d.ts +2 -0
- package/dist/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/__tests__/match-result.test.js +154 -0
- package/dist/__tests__/match-result.test.js.map +1 -0
- package/dist/__tests__/navigation-store.test.d.ts +2 -0
- package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
- package/dist/__tests__/navigation-store.test.js +440 -0
- package/dist/__tests__/navigation-store.test.js.map +1 -0
- package/dist/__tests__/partial-update.test.d.ts +2 -0
- package/dist/__tests__/partial-update.test.d.ts.map +1 -0
- package/dist/__tests__/partial-update.test.js +1009 -0
- package/dist/__tests__/partial-update.test.js.map +1 -0
- package/dist/__tests__/reverse-types.test.d.ts +8 -0
- package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
- package/dist/__tests__/reverse-types.test.js +656 -0
- package/dist/__tests__/reverse-types.test.js.map +1 -0
- package/dist/__tests__/route-definition.test.d.ts +2 -0
- package/dist/__tests__/route-definition.test.d.ts.map +1 -0
- package/dist/__tests__/route-definition.test.js +55 -0
- package/dist/__tests__/route-definition.test.js.map +1 -0
- package/dist/__tests__/router-helpers.test.d.ts +2 -0
- package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
- package/dist/__tests__/router-helpers.test.js +377 -0
- package/dist/__tests__/router-helpers.test.js.map +1 -0
- package/dist/__tests__/router-integration-2.test.d.ts +2 -0
- package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
- package/dist/__tests__/router-integration-2.test.js +426 -0
- package/dist/__tests__/router-integration-2.test.js.map +1 -0
- package/dist/__tests__/router-integration.test.d.ts +2 -0
- package/dist/__tests__/router-integration.test.d.ts.map +1 -0
- package/dist/__tests__/router-integration.test.js +1051 -0
- package/dist/__tests__/router-integration.test.js.map +1 -0
- package/dist/__tests__/search-params.test.d.ts +5 -0
- package/dist/__tests__/search-params.test.d.ts.map +1 -0
- package/dist/__tests__/search-params.test.js +306 -0
- package/dist/__tests__/search-params.test.js.map +1 -0
- package/dist/__tests__/segment-system.test.d.ts +2 -0
- package/dist/__tests__/segment-system.test.d.ts.map +1 -0
- package/dist/__tests__/segment-system.test.js +627 -0
- package/dist/__tests__/segment-system.test.js.map +1 -0
- package/dist/__tests__/static-handler-types.test.d.ts +8 -0
- package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
- package/dist/__tests__/static-handler-types.test.js +63 -0
- package/dist/__tests__/static-handler-types.test.js.map +1 -0
- package/dist/__tests__/urls.test.d.ts +2 -0
- package/dist/__tests__/urls.test.d.ts.map +1 -0
- package/dist/__tests__/urls.test.js +421 -0
- package/dist/__tests__/urls.test.js.map +1 -0
- package/dist/__tests__/use-mount.test.d.ts +2 -0
- package/dist/__tests__/use-mount.test.d.ts.map +1 -0
- package/dist/__tests__/use-mount.test.js +35 -0
- package/dist/__tests__/use-mount.test.js.map +1 -0
- package/dist/bin/rango.d.ts +2 -0
- package/dist/bin/rango.d.ts.map +1 -0
- package/dist/bin/rango.js +339 -106
- package/dist/bin/rango.js.map +1 -0
- package/dist/browser/event-controller.d.ts +191 -0
- package/dist/browser/event-controller.d.ts.map +1 -0
- package/dist/browser/event-controller.js +559 -0
- package/dist/browser/event-controller.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/link-interceptor.d.ts +38 -0
- package/dist/browser/link-interceptor.d.ts.map +1 -0
- package/dist/browser/link-interceptor.js +99 -0
- package/dist/browser/link-interceptor.js.map +1 -0
- package/dist/browser/logging.d.ts +10 -0
- package/dist/browser/logging.d.ts.map +1 -0
- package/dist/browser/logging.js +29 -0
- package/dist/browser/logging.js.map +1 -0
- package/dist/browser/lru-cache.d.ts +17 -0
- package/dist/browser/lru-cache.d.ts.map +1 -0
- package/dist/browser/lru-cache.js +50 -0
- package/dist/browser/lru-cache.js.map +1 -0
- package/dist/browser/merge-segment-loaders.d.ts +39 -0
- package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
- package/dist/browser/merge-segment-loaders.js +102 -0
- package/dist/browser/merge-segment-loaders.js.map +1 -0
- package/dist/browser/navigation-bridge.d.ts +102 -0
- package/dist/browser/navigation-bridge.d.ts.map +1 -0
- package/dist/browser/navigation-bridge.js +708 -0
- package/dist/browser/navigation-bridge.js.map +1 -0
- package/dist/browser/navigation-client.d.ts +25 -0
- package/dist/browser/navigation-client.d.ts.map +1 -0
- package/dist/browser/navigation-client.js +157 -0
- package/dist/browser/navigation-client.js.map +1 -0
- package/dist/browser/navigation-store.d.ts +101 -0
- package/dist/browser/navigation-store.d.ts.map +1 -0
- package/dist/browser/navigation-store.js +625 -0
- package/dist/browser/navigation-store.js.map +1 -0
- package/dist/browser/partial-update.d.ts +75 -0
- package/dist/browser/partial-update.d.ts.map +1 -0
- package/dist/browser/partial-update.js +426 -0
- package/dist/browser/partial-update.js.map +1 -0
- package/dist/browser/react/Link.d.ts +86 -0
- package/dist/browser/react/Link.d.ts.map +1 -0
- package/dist/browser/react/Link.js +128 -0
- package/dist/browser/react/Link.js.map +1 -0
- package/dist/browser/react/NavigationProvider.d.ts +63 -0
- package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
- package/dist/browser/react/NavigationProvider.js +216 -0
- package/dist/browser/react/NavigationProvider.js.map +1 -0
- package/dist/browser/react/ScrollRestoration.d.ts +75 -0
- package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
- package/dist/browser/react/ScrollRestoration.js +57 -0
- package/dist/browser/react/ScrollRestoration.js.map +1 -0
- package/dist/browser/react/context.d.ts +46 -0
- package/dist/browser/react/context.d.ts.map +1 -0
- package/dist/browser/react/context.js +10 -0
- package/dist/browser/react/context.js.map +1 -0
- package/dist/browser/react/index.d.ts +11 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/index.js +22 -0
- package/dist/browser/react/index.js.map +1 -0
- package/dist/browser/react/location-state-shared.d.ts +63 -0
- package/dist/browser/react/location-state-shared.d.ts.map +1 -0
- package/dist/browser/react/location-state-shared.js +81 -0
- package/dist/browser/react/location-state-shared.js.map +1 -0
- package/dist/browser/react/location-state.d.ts +23 -0
- package/dist/browser/react/location-state.d.ts.map +1 -0
- package/dist/browser/react/location-state.js +29 -0
- package/dist/browser/react/location-state.js.map +1 -0
- package/dist/browser/react/mount-context.d.ts +24 -0
- package/dist/browser/react/mount-context.d.ts.map +1 -0
- package/dist/browser/react/mount-context.js +24 -0
- package/dist/browser/react/mount-context.js.map +1 -0
- package/dist/browser/react/use-action.d.ts +64 -0
- package/dist/browser/react/use-action.d.ts.map +1 -0
- package/dist/browser/react/use-action.js +134 -0
- package/dist/browser/react/use-action.js.map +1 -0
- package/dist/browser/react/use-client-cache.d.ts +41 -0
- package/dist/browser/react/use-client-cache.d.ts.map +1 -0
- package/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
- package/dist/browser/react/use-client-cache.js.map +1 -0
- package/dist/browser/react/use-handle.d.ts +31 -0
- package/dist/browser/react/use-handle.d.ts.map +1 -0
- package/dist/browser/react/use-handle.js +144 -0
- package/dist/browser/react/use-handle.js.map +1 -0
- package/dist/browser/react/use-href.d.ts +33 -0
- package/dist/browser/react/use-href.d.ts.map +1 -0
- package/dist/browser/react/use-href.js +39 -0
- package/dist/browser/react/use-href.js.map +1 -0
- package/dist/browser/react/use-link-status.d.ts +37 -0
- package/dist/browser/react/use-link-status.d.ts.map +1 -0
- package/dist/browser/react/use-link-status.js +99 -0
- package/dist/browser/react/use-link-status.js.map +1 -0
- package/dist/browser/react/use-mount.d.ts +25 -0
- package/dist/browser/react/use-mount.d.ts.map +1 -0
- package/dist/browser/react/use-mount.js +30 -0
- package/dist/browser/react/use-mount.js.map +1 -0
- package/dist/browser/react/use-navigation.d.ts +27 -0
- package/dist/browser/react/use-navigation.d.ts.map +1 -0
- package/dist/browser/react/use-navigation.js +87 -0
- package/dist/browser/react/use-navigation.js.map +1 -0
- package/dist/browser/react/use-segments.d.ts +38 -0
- package/dist/browser/react/use-segments.d.ts.map +1 -0
- package/dist/browser/react/use-segments.js +130 -0
- package/dist/browser/react/use-segments.js.map +1 -0
- package/dist/browser/request-controller.d.ts +26 -0
- package/dist/browser/request-controller.d.ts.map +1 -0
- package/dist/browser/request-controller.js +147 -0
- package/dist/browser/request-controller.js.map +1 -0
- package/dist/browser/rsc-router.d.ts +129 -0
- package/dist/browser/rsc-router.d.ts.map +1 -0
- package/dist/browser/rsc-router.js +195 -0
- package/dist/browser/rsc-router.js.map +1 -0
- package/dist/browser/scroll-restoration.d.ts +93 -0
- package/dist/browser/scroll-restoration.d.ts.map +1 -0
- package/dist/browser/scroll-restoration.js +321 -0
- package/dist/browser/scroll-restoration.js.map +1 -0
- package/dist/browser/segment-structure-assert.d.ts +17 -0
- package/dist/browser/segment-structure-assert.d.ts.map +1 -0
- package/dist/browser/segment-structure-assert.js +59 -0
- package/dist/browser/segment-structure-assert.js.map +1 -0
- package/dist/browser/server-action-bridge.d.ts +26 -0
- package/dist/browser/server-action-bridge.d.ts.map +1 -0
- package/dist/browser/server-action-bridge.js +668 -0
- package/dist/browser/server-action-bridge.js.map +1 -0
- package/dist/browser/shallow.d.ts +12 -0
- package/dist/browser/shallow.d.ts.map +1 -0
- package/dist/browser/shallow.js +34 -0
- package/dist/browser/shallow.js.map +1 -0
- package/dist/browser/types.d.ts +369 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
- package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-cli.test.js +237 -0
- package/dist/build/__tests__/generate-cli.test.js.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.js +119 -0
- package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.js +620 -0
- package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.js +308 -0
- package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +81 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +276 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/build/generate-route-types.d.ts +115 -0
- package/dist/build/generate-route-types.d.ts.map +1 -0
- package/dist/build/generate-route-types.js +740 -0
- package/dist/build/generate-route-types.js.map +1 -0
- package/dist/build/index.d.ts +21 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +21 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/route-trie.d.ts +71 -0
- package/dist/build/route-trie.d.ts.map +1 -0
- package/dist/build/route-trie.js +175 -0
- package/dist/build/route-trie.js.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.js +208 -0
- package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
- package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
- package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
- package/dist/cache/__tests__/document-cache.test.js +345 -0
- package/dist/cache/__tests__/document-cache.test.js.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
- package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
- package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-store.test.js +367 -0
- package/dist/cache/__tests__/memory-store.test.js.map +1 -0
- package/dist/cache/cache-scope.d.ts +102 -0
- package/dist/cache/cache-scope.d.ts.map +1 -0
- package/dist/cache/cache-scope.js +440 -0
- package/dist/cache/cache-scope.js.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
- package/dist/cache/cf/cf-cache-store.d.ts +165 -0
- package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
- package/dist/cache/cf/cf-cache-store.js +242 -0
- package/dist/cache/cf/cf-cache-store.js.map +1 -0
- package/dist/cache/cf/index.d.ts +14 -0
- package/dist/cache/cf/index.d.ts.map +1 -0
- package/dist/cache/cf/index.js +17 -0
- package/dist/cache/cf/index.js.map +1 -0
- package/dist/cache/document-cache.d.ts +64 -0
- package/dist/cache/document-cache.d.ts.map +1 -0
- package/dist/cache/document-cache.js +228 -0
- package/dist/cache/document-cache.js.map +1 -0
- package/dist/cache/index.d.ts +19 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-segment-store.d.ts +110 -0
- package/dist/cache/memory-segment-store.d.ts.map +1 -0
- package/dist/cache/memory-segment-store.js +117 -0
- package/dist/cache/memory-segment-store.js.map +1 -0
- package/dist/cache/memory-store.d.ts +41 -0
- package/dist/cache/memory-store.d.ts.map +1 -0
- package/dist/cache/memory-store.js +191 -0
- package/dist/cache/memory-store.js.map +1 -0
- package/dist/cache/types.d.ts +317 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +12 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client.d.ts +248 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +367 -0
- package/dist/client.js.map +1 -0
- package/dist/client.rsc.d.ts +26 -0
- package/dist/client.rsc.d.ts.map +1 -0
- package/dist/client.rsc.js +46 -0
- package/dist/client.rsc.js.map +1 -0
- package/dist/component-utils.d.ts +36 -0
- package/dist/component-utils.d.ts.map +1 -0
- package/dist/component-utils.js +61 -0
- package/dist/component-utils.js.map +1 -0
- package/dist/components/DefaultDocument.d.ts +13 -0
- package/dist/components/DefaultDocument.d.ts.map +1 -0
- package/dist/components/DefaultDocument.js +15 -0
- package/dist/components/DefaultDocument.js.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +157 -0
- package/dist/debug.js.map +1 -0
- package/dist/default-error-boundary.d.ts +11 -0
- package/dist/default-error-boundary.d.ts.map +1 -0
- package/dist/default-error-boundary.js +45 -0
- package/dist/default-error-boundary.js.map +1 -0
- package/dist/deps/browser.d.ts +2 -0
- package/dist/deps/browser.d.ts.map +1 -0
- package/dist/deps/browser.js +3 -0
- package/dist/deps/browser.js.map +1 -0
- package/dist/deps/html-stream-client.d.ts +2 -0
- package/dist/deps/html-stream-client.d.ts.map +1 -0
- package/dist/deps/html-stream-client.js +3 -0
- package/dist/deps/html-stream-client.js.map +1 -0
- package/dist/deps/html-stream-server.d.ts +2 -0
- package/dist/deps/html-stream-server.d.ts.map +1 -0
- package/dist/deps/html-stream-server.js +3 -0
- package/dist/deps/html-stream-server.js.map +1 -0
- package/dist/deps/rsc.d.ts +2 -0
- package/dist/deps/rsc.d.ts.map +1 -0
- package/dist/deps/rsc.js +4 -0
- package/dist/deps/rsc.js.map +1 -0
- package/dist/deps/ssr.d.ts +2 -0
- package/dist/deps/ssr.d.ts.map +1 -0
- package/dist/deps/ssr.js +3 -0
- package/dist/deps/ssr.js.map +1 -0
- package/dist/errors.d.ts +174 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +241 -0
- package/dist/errors.js.map +1 -0
- package/dist/handle.d.ts +78 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +82 -0
- package/dist/handle.js.map +1 -0
- package/dist/handles/MetaTags.d.ts +14 -0
- package/dist/handles/MetaTags.d.ts.map +1 -0
- package/dist/handles/MetaTags.js +136 -0
- package/dist/handles/MetaTags.js.map +1 -0
- package/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
- package/dist/handles/index.d.ts.map +1 -0
- package/dist/handles/index.js +6 -0
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/dist/href-context.d.ts +29 -0
- package/dist/href-context.d.ts.map +1 -0
- package/dist/href-context.js +21 -0
- package/dist/href-context.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.rsc.d.ts +32 -0
- package/dist/index.rsc.d.ts.map +1 -0
- package/dist/index.rsc.js +40 -0
- package/dist/index.rsc.js.map +1 -0
- package/dist/internal-debug.d.ts +2 -0
- package/dist/internal-debug.d.ts.map +1 -0
- package/dist/internal-debug.js +5 -0
- package/dist/internal-debug.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/loader.rsc.d.ts +19 -0
- package/dist/loader.rsc.d.ts.map +1 -0
- package/dist/loader.rsc.js +99 -0
- package/dist/loader.rsc.js.map +1 -0
- package/dist/network-error-thrower.d.ts +17 -0
- package/dist/network-error-thrower.d.ts.map +1 -0
- package/dist/network-error-thrower.js +14 -0
- package/dist/network-error-thrower.js.map +1 -0
- package/dist/outlet-context.d.ts +13 -0
- package/dist/outlet-context.d.ts.map +1 -0
- package/dist/outlet-context.js +3 -0
- package/dist/outlet-context.js.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.js +148 -0
- package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
- package/dist/prerender/param-hash.d.ts +16 -0
- package/dist/prerender/param-hash.d.ts.map +1 -0
- package/dist/prerender/param-hash.js +36 -0
- package/dist/prerender/param-hash.js.map +1 -0
- package/dist/prerender/store.d.ts +38 -0
- package/dist/prerender/store.d.ts.map +1 -0
- package/dist/prerender/store.js +61 -0
- package/dist/prerender/store.js.map +1 -0
- package/dist/prerender.d.ts +66 -0
- package/dist/prerender.d.ts.map +1 -0
- package/dist/prerender.js +57 -0
- package/dist/prerender.js.map +1 -0
- package/dist/reverse.d.ts +196 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +78 -0
- package/dist/reverse.js.map +1 -0
- package/dist/root-error-boundary.d.ts +33 -0
- package/dist/root-error-boundary.d.ts.map +1 -0
- package/dist/root-error-boundary.js +165 -0
- package/dist/root-error-boundary.js.map +1 -0
- package/dist/route-content-wrapper.d.ts +46 -0
- package/dist/route-content-wrapper.d.ts.map +1 -0
- package/dist/route-content-wrapper.js +77 -0
- package/dist/route-content-wrapper.js.map +1 -0
- package/dist/route-definition.d.ts +421 -0
- package/dist/route-definition.d.ts.map +1 -0
- package/dist/route-definition.js +868 -0
- package/dist/route-definition.js.map +1 -0
- package/dist/route-map-builder.d.ts +155 -0
- package/dist/route-map-builder.d.ts.map +1 -0
- package/dist/route-map-builder.js +237 -0
- package/dist/route-map-builder.js.map +1 -0
- package/dist/route-types.d.ts +165 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +7 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router/__tests__/handler-context.test.d.ts +2 -0
- package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/handler-context.test.js +65 -0
- package/dist/router/__tests__/handler-context.test.js.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
- package/dist/router/__tests__/match-context.test.d.ts +2 -0
- package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-context.test.js +92 -0
- package/dist/router/__tests__/match-context.test.js.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.js +417 -0
- package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
- package/dist/router/__tests__/match-result.test.d.ts +2 -0
- package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-result.test.js +457 -0
- package/dist/router/__tests__/match-result.test.js.map +1 -0
- package/dist/router/__tests__/on-error.test.d.ts +2 -0
- package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
- package/dist/router/__tests__/on-error.test.js +678 -0
- package/dist/router/__tests__/on-error.test.js.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.js +629 -0
- package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
- package/dist/router/error-handling.d.ts +77 -0
- package/dist/router/error-handling.d.ts.map +1 -0
- package/dist/router/error-handling.js +202 -0
- package/dist/router/error-handling.js.map +1 -0
- package/dist/router/handler-context.d.ts +20 -0
- package/dist/router/handler-context.d.ts.map +1 -0
- package/dist/router/handler-context.js +198 -0
- package/dist/router/handler-context.js.map +1 -0
- package/dist/router/intercept-resolution.d.ts +66 -0
- package/dist/router/intercept-resolution.d.ts.map +1 -0
- package/dist/router/intercept-resolution.js +246 -0
- package/dist/router/intercept-resolution.js.map +1 -0
- package/dist/router/loader-resolution.d.ts +64 -0
- package/dist/router/loader-resolution.d.ts.map +1 -0
- package/dist/router/loader-resolution.js +284 -0
- package/dist/router/loader-resolution.js.map +1 -0
- package/dist/router/logging.d.ts +15 -0
- package/dist/router/logging.d.ts.map +1 -0
- package/dist/router/logging.js +99 -0
- package/dist/router/logging.js.map +1 -0
- package/dist/router/manifest.d.ts +22 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +181 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/match-api.d.ts +35 -0
- package/dist/router/match-api.d.ts.map +1 -0
- package/dist/router/match-api.js +406 -0
- package/dist/router/match-api.js.map +1 -0
- package/dist/router/match-context.d.ts +206 -0
- package/dist/router/match-context.d.ts.map +1 -0
- package/dist/router/match-context.js +17 -0
- package/dist/router/match-context.js.map +1 -0
- package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
- package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
- package/dist/router/match-middleware/background-revalidation.js +75 -0
- package/dist/router/match-middleware/background-revalidation.js.map +1 -0
- package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
- package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-lookup.js +257 -0
- package/dist/router/match-middleware/cache-lookup.js.map +1 -0
- package/dist/router/match-middleware/cache-store.d.ts +113 -0
- package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-store.js +108 -0
- package/dist/router/match-middleware/cache-store.js.map +1 -0
- package/dist/router/match-middleware/index.d.ts +81 -0
- package/dist/router/match-middleware/index.d.ts.map +1 -0
- package/dist/router/match-middleware/index.js +80 -0
- package/dist/router/match-middleware/index.js.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.js +134 -0
- package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
- package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
- package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/segment-resolution.js +53 -0
- package/dist/router/match-middleware/segment-resolution.js.map +1 -0
- package/dist/router/match-pipelines.d.ts +147 -0
- package/dist/router/match-pipelines.d.ts.map +1 -0
- package/dist/router/match-pipelines.js +82 -0
- package/dist/router/match-pipelines.js.map +1 -0
- package/dist/router/match-result.d.ts +126 -0
- package/dist/router/match-result.d.ts.map +1 -0
- package/dist/router/match-result.js +93 -0
- package/dist/router/match-result.js.map +1 -0
- package/dist/router/metrics.d.ts +20 -0
- package/dist/router/metrics.d.ts.map +1 -0
- package/dist/router/metrics.js +47 -0
- package/dist/router/metrics.js.map +1 -0
- package/dist/router/middleware.d.ts +249 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +434 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/middleware.test.d.ts +2 -0
- package/dist/router/middleware.test.d.ts.map +1 -0
- package/dist/router/middleware.test.js +816 -0
- package/dist/router/middleware.test.js.map +1 -0
- package/dist/router/pattern-matching.d.ts +149 -0
- package/dist/router/pattern-matching.d.ts.map +1 -0
- package/dist/router/pattern-matching.js +349 -0
- package/dist/router/pattern-matching.js.map +1 -0
- package/dist/router/revalidation.d.ts +44 -0
- package/dist/router/revalidation.d.ts.map +1 -0
- package/dist/router/revalidation.js +147 -0
- package/dist/router/revalidation.js.map +1 -0
- package/dist/router/router-context.d.ts +135 -0
- package/dist/router/router-context.d.ts.map +1 -0
- package/dist/router/router-context.js +36 -0
- package/dist/router/router-context.js.map +1 -0
- package/dist/router/segment-resolution.d.ts +127 -0
- package/dist/router/segment-resolution.d.ts.map +1 -0
- package/dist/router/segment-resolution.js +919 -0
- package/dist/router/segment-resolution.js.map +1 -0
- package/dist/router/trie-matching.d.ts +40 -0
- package/dist/router/trie-matching.d.ts.map +1 -0
- package/dist/router/trie-matching.js +127 -0
- package/dist/router/trie-matching.js.map +1 -0
- package/dist/router/types.d.ts +136 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router.d.ts +753 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.gen.d.ts +6 -0
- package/dist/router.gen.d.ts.map +1 -0
- package/dist/router.gen.js +6 -0
- package/dist/router.gen.js.map +1 -0
- package/dist/router.js +1304 -0
- package/dist/router.js.map +1 -0
- package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
- package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/rsc/__tests__/helpers.test.js +140 -0
- package/dist/rsc/__tests__/helpers.test.js.map +1 -0
- package/dist/rsc/handler.d.ts +45 -0
- package/dist/rsc/handler.d.ts.map +1 -0
- package/dist/rsc/handler.js +1172 -0
- package/dist/rsc/handler.js.map +1 -0
- package/dist/rsc/helpers.d.ts +16 -0
- package/dist/rsc/helpers.d.ts.map +1 -0
- package/dist/rsc/helpers.js +55 -0
- package/dist/rsc/helpers.js.map +1 -0
- package/dist/rsc/index.d.ts +22 -0
- package/dist/rsc/index.d.ts.map +1 -0
- package/dist/rsc/index.js +23 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/nonce.d.ts +9 -0
- package/dist/rsc/nonce.d.ts.map +1 -0
- package/dist/rsc/nonce.js +18 -0
- package/dist/rsc/nonce.js.map +1 -0
- package/dist/rsc/types.d.ts +206 -0
- package/dist/rsc/types.d.ts.map +1 -0
- package/dist/rsc/types.js +8 -0
- package/dist/rsc/types.js.map +1 -0
- package/dist/search-params.d.ts +103 -0
- package/dist/search-params.d.ts.map +1 -0
- package/dist/search-params.js +74 -0
- package/dist/search-params.js.map +1 -0
- package/dist/segment-system.d.ts +75 -0
- package/dist/segment-system.d.ts.map +1 -0
- package/dist/segment-system.js +336 -0
- package/dist/segment-system.js.map +1 -0
- package/dist/server/context.d.ts +245 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +197 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fetchable-loader-store.d.ts +18 -0
- package/dist/server/fetchable-loader-store.d.ts.map +1 -0
- package/dist/server/fetchable-loader-store.js +18 -0
- package/dist/server/fetchable-loader-store.js.map +1 -0
- package/dist/server/handle-store.d.ts +85 -0
- package/dist/server/handle-store.d.ts.map +1 -0
- package/dist/server/handle-store.js +142 -0
- package/dist/server/handle-store.js.map +1 -0
- package/dist/server/loader-registry.d.ts +55 -0
- package/dist/server/loader-registry.d.ts.map +1 -0
- package/dist/server/loader-registry.js +132 -0
- package/dist/server/loader-registry.js.map +1 -0
- package/dist/server/request-context.d.ts +226 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +290 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/root-layout.d.ts +4 -0
- package/dist/server/root-layout.d.ts.map +1 -0
- package/dist/server/root-layout.js +5 -0
- package/dist/server/root-layout.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
- package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
- package/dist/ssr/index.d.ts +98 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +158 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/static-handler.d.ts +50 -0
- package/dist/static-handler.d.ts.map +1 -0
- package/dist/static-handler.gen.d.ts +5 -0
- package/dist/static-handler.gen.d.ts.map +1 -0
- package/dist/static-handler.gen.js +5 -0
- package/dist/static-handler.gen.js.map +1 -0
- package/dist/static-handler.js +29 -0
- package/dist/static-handler.js.map +1 -0
- package/dist/testing/vitest.js +82 -0
- package/dist/theme/ThemeProvider.d.ts +20 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +240 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/ThemeScript.d.ts +48 -0
- package/dist/theme/ThemeScript.d.ts.map +1 -0
- package/dist/theme/ThemeScript.js +13 -0
- package/dist/theme/ThemeScript.js.map +1 -0
- package/dist/theme/__tests__/theme.test.d.ts +2 -0
- package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
- package/dist/theme/__tests__/theme.test.js +103 -0
- package/dist/theme/__tests__/theme.test.js.map +1 -0
- package/dist/theme/constants.d.ts +29 -0
- package/dist/theme/constants.d.ts.map +1 -0
- package/dist/theme/constants.js +48 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +31 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +36 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-context.d.ts +40 -0
- package/dist/theme/theme-context.d.ts.map +1 -0
- package/dist/theme/theme-context.js +60 -0
- package/dist/theme/theme-context.js.map +1 -0
- package/dist/theme/theme-script.d.ts +27 -0
- package/dist/theme/theme-script.d.ts.map +1 -0
- package/dist/theme/theme-script.js +147 -0
- package/dist/theme/theme-script.js.map +1 -0
- package/dist/theme/types.d.ts +163 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +11 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/theme/use-theme.d.ts +12 -0
- package/dist/theme/use-theme.d.ts.map +1 -0
- package/dist/theme/use-theme.js +40 -0
- package/dist/theme/use-theme.js.map +1 -0
- package/dist/types.d.ts +1479 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/urls.d.ts +441 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.gen.d.ts +8 -0
- package/dist/urls.gen.d.ts.map +1 -0
- package/dist/urls.gen.js +8 -0
- package/dist/urls.gen.js.map +1 -0
- package/dist/urls.js +443 -0
- package/dist/urls.js.map +1 -0
- package/dist/use-loader.d.ts +127 -0
- package/dist/use-loader.d.ts.map +1 -0
- package/dist/use-loader.js +237 -0
- package/dist/use-loader.js.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
- package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.js +39 -0
- package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
- package/dist/vite/ast-handler-extract.d.ts +49 -0
- package/dist/vite/ast-handler-extract.d.ts.map +1 -0
- package/dist/vite/ast-handler-extract.js +249 -0
- package/dist/vite/ast-handler-extract.js.map +1 -0
- package/dist/vite/expose-action-id.d.ts +19 -0
- package/dist/vite/expose-action-id.d.ts.map +1 -0
- package/dist/vite/expose-action-id.js +250 -0
- package/dist/vite/expose-action-id.js.map +1 -0
- package/dist/vite/expose-id-utils.d.ts +69 -0
- package/dist/vite/expose-id-utils.d.ts.map +1 -0
- package/dist/vite/expose-id-utils.js +289 -0
- package/dist/vite/expose-id-utils.js.map +1 -0
- package/dist/vite/expose-internal-ids.d.ts +22 -0
- package/dist/vite/expose-internal-ids.d.ts.map +1 -0
- package/dist/vite/expose-internal-ids.js +886 -0
- package/dist/vite/expose-internal-ids.js.map +1 -0
- package/dist/vite/index.d.ts +149 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +3247 -1128
- package/dist/vite/index.js.bak +5448 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/index.named-routes.gen.ts +103 -0
- package/dist/vite/package-resolution.d.ts +43 -0
- package/dist/vite/package-resolution.d.ts.map +1 -0
- package/dist/vite/package-resolution.js +112 -0
- package/dist/vite/package-resolution.js.map +1 -0
- package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/dist/vite/virtual-entries.d.ts +25 -0
- package/dist/vite/virtual-entries.d.ts.map +1 -0
- package/dist/vite/virtual-entries.js +110 -0
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +81 -12
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +64 -2
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +224 -32
- package/skills/caching/SKILL.md +279 -17
- package/skills/composability/SKILL.md +27 -2
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +4 -2
- package/skills/document-cache/SKILL.md +78 -55
- package/skills/handler-use/SKILL.md +364 -0
- package/skills/hooks/SKILL.md +250 -30
- package/skills/host-router/SKILL.md +125 -23
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +50 -6
- package/skills/layout/SKILL.md +35 -9
- package/skills/links/SKILL.md +247 -17
- package/skills/loader/SKILL.md +225 -9
- package/skills/middleware/SKILL.md +50 -13
- package/skills/migrate-nextjs/SKILL.md +584 -0
- package/skills/migrate-react-router/SKILL.md +771 -0
- package/skills/mime-routes/SKILL.md +28 -1
- package/skills/observability/SKILL.md +194 -0
- package/skills/parallel/SKILL.md +77 -7
- package/skills/prerender/SKILL.md +45 -43
- package/skills/rango/SKILL.md +257 -22
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +123 -48
- package/skills/route/SKILL.md +70 -5
- package/skills/router-setup/SKILL.md +30 -6
- package/skills/scripts/SKILL.md +179 -0
- package/skills/server-actions/SKILL.md +775 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/tailwind/SKILL.md +27 -3
- package/skills/testing/SKILL.md +129 -0
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +127 -0
- package/skills/testing/client-components.md +124 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +129 -0
- package/skills/testing/loader.md +128 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +121 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +84 -0
- package/skills/testing/server-actions.md +107 -0
- package/skills/testing/server-tree.md +128 -0
- package/skills/testing/setup.md +123 -0
- package/skills/typesafety/SKILL.md +322 -29
- package/skills/use-cache/SKILL.md +46 -14
- package/skills/vercel/SKILL.md +128 -0
- package/skills/view-transitions/SKILL.md +294 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +0 -65
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +39 -0
- package/src/browser/connection-warmup.ts +134 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/event-controller.ts +192 -150
- package/src/browser/history-state.ts +21 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/invalidate-client-cache.ts +52 -0
- package/src/browser/navigation-bridge.ts +50 -11
- package/src/browser/navigation-client.ts +113 -78
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +33 -59
- package/src/browser/navigation-transaction.ts +9 -59
- package/src/browser/partial-update.ts +109 -122
- package/src/browser/prefetch/cache.ts +193 -68
- package/src/browser/prefetch/fetch.ts +293 -59
- package/src/browser/prefetch/queue.ts +42 -8
- package/src/browser/rango-state.ts +158 -76
- package/src/browser/react/Link.tsx +48 -20
- package/src/browser/react/NavigationProvider.tsx +95 -117
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/filter-segment-order.ts +66 -7
- package/src/browser/react/index.ts +0 -48
- package/src/browser/react/location-state-shared.ts +178 -8
- package/src/browser/react/location-state.ts +39 -14
- package/src/browser/react/use-action.ts +6 -15
- package/src/browser/react/use-handle.ts +17 -14
- package/src/browser/react/use-href.tsx +8 -1
- package/src/browser/react/use-link-status.ts +33 -8
- package/src/browser/react/use-navigation.ts +32 -7
- package/src/browser/react/use-params.ts +20 -10
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +25 -3
- package/src/browser/react/use-search-params.ts +0 -5
- package/src/browser/react/use-segments.ts +11 -21
- package/src/browser/response-adapter.ts +66 -4
- package/src/browser/rsc-router.tsx +91 -24
- package/src/browser/scroll-restoration.ts +30 -17
- package/src/browser/segment-reconciler.ts +10 -14
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +214 -55
- package/src/browser/types.ts +48 -8
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +60 -35
- package/src/build/generate-route-types.ts +3 -1
- package/src/build/index.ts +8 -2
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +165 -36
- package/src/build/route-types/ast-route-extraction.ts +15 -8
- package/src/build/route-types/codegen.ts +16 -5
- package/src/build/route-types/include-resolution.ts +117 -23
- package/src/build/route-types/param-extraction.ts +6 -3
- package/src/build/route-types/per-module-writer.ts +22 -6
- package/src/build/route-types/router-processing.ts +128 -51
- package/src/build/route-types/scan-filter.ts +1 -1
- package/src/build/route-types/source-scan.ts +216 -0
- package/src/build/runtime-discovery.ts +9 -20
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-key-utils.ts +29 -13
- package/src/cache/cache-policy.ts +108 -34
- package/src/cache/cache-runtime.ts +199 -37
- package/src/cache/cache-scope.ts +188 -82
- package/src/cache/cache-tag.ts +103 -0
- package/src/cache/cf/cf-base64.ts +33 -0
- package/src/cache/cf/cf-cache-constants.ts +127 -0
- package/src/cache/cf/cf-cache-store.ts +1989 -378
- package/src/cache/cf/cf-cache-types.ts +349 -0
- package/src/cache/cf/cf-kv-utils.ts +46 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
- package/src/cache/cf/index.ts +6 -16
- package/src/cache/document-cache.ts +72 -20
- package/src/cache/handle-snapshot.ts +70 -0
- package/src/cache/index.ts +22 -20
- package/src/cache/memory-segment-store.ts +136 -37
- package/src/cache/profile-registry.ts +31 -31
- package/src/cache/read-through-swr.ts +41 -11
- package/src/cache/segment-codec.ts +9 -17
- package/src/cache/tag-invalidation.ts +230 -0
- package/src/cache/types.ts +37 -100
- package/src/cache/vercel/index.ts +11 -0
- package/src/cache/vercel/vercel-cache-store.ts +855 -0
- package/src/client.rsc.tsx +44 -21
- package/src/client.tsx +118 -235
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +109 -0
- package/src/component-utils.ts +19 -0
- package/src/components/DefaultDocument.tsx +8 -2
- package/src/context-var.ts +18 -6
- package/src/decode-loader-results.ts +52 -0
- package/src/defer.ts +196 -0
- package/src/deps/ssr.ts +0 -1
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +30 -4
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +31 -23
- package/src/handles/MetaTags.tsx +56 -19
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +37 -8
- package/src/handles/is-thenable.ts +19 -0
- package/src/handles/meta.ts +51 -40
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +9 -60
- package/src/host/errors.ts +0 -24
- package/src/host/index.ts +8 -2
- package/src/host/pattern-matcher.ts +23 -52
- package/src/host/router.ts +107 -99
- package/src/host/testing.ts +40 -27
- package/src/host/types.ts +37 -4
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +137 -22
- package/src/index.rsc.ts +90 -11
- package/src/index.ts +125 -19
- package/src/internal-debug.ts +2 -4
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +20 -13
- package/src/loader.ts +12 -11
- package/src/missing-id-error.ts +68 -0
- package/src/network-error-thrower.tsx +1 -6
- package/src/outlet-context.ts +1 -1
- package/src/outlet-provider.tsx +1 -5
- package/src/prerender/param-hash.ts +16 -16
- package/src/prerender/store.ts +32 -37
- package/src/prerender.ts +61 -6
- package/src/redirect-origin.ts +100 -0
- package/src/regex-escape.ts +8 -0
- package/src/response-utils.ts +62 -0
- package/src/reverse.ts +65 -36
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +7 -72
- package/src/route-definition/dsl-helpers.ts +418 -273
- package/src/route-definition/helper-factories.ts +29 -139
- package/src/route-definition/helpers-types.ts +103 -31
- package/src/route-definition/redirect.ts +44 -11
- package/src/route-definition/resolve-handler-use.ts +12 -0
- package/src/route-definition/use-item-types.ts +32 -0
- package/src/route-map-builder.ts +0 -16
- package/src/route-types.ts +26 -41
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +73 -25
- package/src/router/error-handling.ts +45 -18
- package/src/router/find-match.ts +44 -23
- package/src/router/handler-context.ts +27 -39
- package/src/router/instrument.ts +350 -0
- package/src/router/intercept-resolution.ts +39 -20
- package/src/router/lazy-includes.ts +15 -52
- package/src/router/loader-resolution.ts +155 -72
- package/src/router/logging.ts +0 -6
- package/src/router/manifest.ts +40 -42
- package/src/router/match-api.ts +4 -23
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +58 -58
- package/src/router/match-middleware/background-revalidation.ts +6 -7
- package/src/router/match-middleware/cache-lookup.ts +161 -286
- package/src/router/match-middleware/cache-store.ts +31 -34
- package/src/router/match-middleware/intercept-resolution.ts +0 -22
- package/src/router/match-middleware/segment-resolution.ts +0 -22
- package/src/router/match-pipelines.ts +1 -42
- package/src/router/match-result.ts +44 -74
- package/src/router/metrics.ts +0 -34
- package/src/router/middleware-types.ts +7 -134
- package/src/router/middleware.ts +266 -166
- package/src/router/navigation-snapshot.ts +0 -51
- package/src/router/params-util.ts +23 -0
- package/src/router/pattern-matching.ts +132 -90
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prerender-match.ts +104 -65
- package/src/router/preview-match.ts +3 -1
- package/src/router/request-classification.ts +28 -62
- package/src/router/revalidation.ts +123 -73
- package/src/router/route-snapshot.ts +0 -1
- package/src/router/router-context.ts +3 -28
- package/src/router/router-interfaces.ts +83 -35
- package/src/router/router-options.ts +136 -5
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +93 -84
- package/src/router/segment-resolution/helpers.ts +86 -6
- package/src/router/segment-resolution/loader-cache.ts +62 -37
- package/src/router/segment-resolution/revalidation.ts +269 -320
- package/src/router/segment-resolution/static-store.ts +19 -5
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution/view-transition-default.ts +36 -0
- package/src/router/segment-resolution.ts +5 -1
- package/src/router/segment-wrappers.ts +6 -5
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/substitute-pattern-params.ts +56 -0
- package/src/router/telemetry-otel.ts +161 -199
- package/src/router/telemetry.ts +96 -19
- package/src/router/timeout.ts +0 -20
- package/src/router/tracing.ts +206 -0
- package/src/router/trie-matching.ts +163 -59
- package/src/router/types.ts +9 -63
- package/src/router/url-params.ts +44 -0
- package/src/router.ts +110 -55
- package/src/rsc/handler-context.ts +3 -2
- package/src/rsc/handler.ts +266 -219
- package/src/rsc/helpers.ts +168 -46
- package/src/rsc/index.ts +2 -5
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +114 -38
- package/src/rsc/manifest-init.ts +28 -41
- package/src/rsc/origin-guard.ts +39 -25
- package/src/rsc/progressive-enhancement.ts +63 -9
- package/src/rsc/redirect-guard.ts +99 -0
- package/src/rsc/response-cache-serve.ts +238 -0
- package/src/rsc/response-error.ts +79 -12
- package/src/rsc/response-route-handler.ts +99 -189
- package/src/rsc/rsc-rendering.ts +99 -75
- package/src/rsc/runtime-warnings.ts +23 -10
- package/src/rsc/server-action.ts +258 -115
- package/src/rsc/ssr-setup.ts +16 -0
- package/src/rsc/types.ts +23 -5
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +35 -30
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-loader-promise.ts +149 -0
- package/src/segment-system.tsx +218 -202
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +175 -53
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +80 -5
- package/src/server/handle-store.ts +21 -38
- package/src/server/loader-registry.ts +21 -42
- package/src/server/request-context.ts +235 -175
- package/src/ssr/index.tsx +21 -16
- package/src/static-handler.ts +10 -13
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +40 -0
- package/src/testing/dispatch.ts +701 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +128 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +272 -0
- package/src/testing/e2e/parity.ts +387 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +257 -0
- package/src/testing/generated-routes.ts +183 -0
- package/src/testing/index.ts +99 -0
- package/src/testing/internal/context.ts +371 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +343 -0
- package/src/testing/render-route.tsx +581 -0
- package/src/testing/run-loader.ts +385 -0
- package/src/testing/run-middleware.ts +205 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +305 -0
- package/src/theme/ThemeProvider.tsx +20 -58
- package/src/theme/ThemeScript.tsx +7 -9
- package/src/theme/constants.ts +52 -13
- package/src/theme/index.ts +0 -7
- package/src/theme/theme-context.ts +1 -5
- package/src/theme/theme-script.ts +22 -21
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +0 -35
- package/src/types/cache-types.ts +13 -4
- package/src/types/error-types.ts +30 -90
- package/src/types/global-namespace.ts +54 -41
- package/src/types/handler-context.ts +109 -61
- package/src/types/index.ts +1 -10
- package/src/types/loader-types.ts +11 -9
- package/src/types/request-scope.ts +112 -0
- package/src/types/route-config.ts +6 -50
- package/src/types/route-entry.ts +11 -6
- package/src/types/segments.ts +35 -15
- package/src/urls/include-helper.ts +33 -70
- package/src/urls/index.ts +1 -11
- package/src/urls/path-helper-types.ts +49 -9
- package/src/urls/path-helper.ts +17 -106
- package/src/urls/pattern-types.ts +36 -19
- package/src/urls/response-types.ts +22 -29
- package/src/urls/type-extraction.ts +58 -139
- package/src/urls/urls-function.ts +1 -18
- package/src/use-loader.tsx +292 -107
- package/src/vercel/index.ts +11 -0
- package/src/vercel/tracing.ts +88 -0
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +8 -7
- package/src/vite/discovery/discover-routers.ts +126 -85
- package/src/vite/discovery/discovery-errors.ts +194 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +96 -68
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/state.ts +45 -1
- package/src/vite/discovery/virtual-module-codegen.ts +14 -34
- package/src/vite/index.ts +4 -0
- package/src/vite/plugin-types.ts +210 -10
- package/src/vite/plugins/cjs-to-esm.ts +16 -19
- package/src/vite/plugins/client-ref-dedup.ts +16 -11
- package/src/vite/plugins/client-ref-hashing.ts +28 -15
- package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
- package/src/vite/plugins/expose-action-id.ts +48 -95
- package/src/vite/plugins/expose-id-utils.ts +88 -55
- package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
- package/src/vite/plugins/expose-ids/handler-transform.ts +11 -90
- package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
- package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
- package/src/vite/plugins/expose-internal-ids.ts +505 -486
- package/src/vite/plugins/performance-tracks.ts +26 -25
- package/src/vite/plugins/refresh-cmd.ts +1 -1
- package/src/vite/plugins/use-cache-transform.ts +73 -83
- package/src/vite/plugins/vercel-output.ts +295 -0
- package/src/vite/plugins/version-injector.ts +21 -25
- package/src/vite/plugins/version-plugin.ts +37 -40
- package/src/vite/plugins/virtual-entries.ts +71 -18
- package/src/vite/rango.ts +225 -137
- package/src/vite/router-discovery.ts +769 -106
- package/src/vite/utils/ast-handler-extract.ts +26 -35
- package/src/vite/utils/banner.ts +1 -1
- package/src/vite/utils/bundle-analysis.ts +10 -15
- package/src/vite/utils/client-chunks.ts +184 -0
- package/src/vite/utils/directive-prologue.ts +40 -0
- package/src/vite/utils/forward-user-plugins.ts +171 -0
- package/src/vite/utils/manifest-utils.ts +4 -59
- package/src/vite/utils/package-resolution.ts +20 -52
- package/src/vite/utils/prerender-utils.ts +67 -38
- package/src/vite/utils/shared-utils.ts +95 -43
- package/src/browser/action-response-classifier.ts +0 -99
- package/src/browser/shallow.ts +0 -40
- package/src/router/middleware-cookies.ts +0 -55
|
@@ -32,12 +32,34 @@ is only needed when you want the richer `typeof router.routeMap` shape
|
|
|
32
32
|
available globally.
|
|
33
33
|
|
|
34
34
|
- `GeneratedRouteMap` — auto-registered by `router.named-routes.gen.ts`
|
|
35
|
-
Use for `Handler<"name"
|
|
36
|
-
|
|
35
|
+
Use for `Handler<"name">` (type annotation), `Prerender<"name">(...)` (function
|
|
36
|
+
call with type arg for param inference), server `ctx.reverse()`, and
|
|
37
|
+
named-route param/search inference.
|
|
37
38
|
- `typeof router.routeMap` — the real merged route map from your router
|
|
38
39
|
instance, including response-route metadata such as `{ path, response }`.
|
|
39
40
|
- `RegisteredRoutes` — manual global hook for exposing `typeof router.routeMap`
|
|
40
|
-
to utilities
|
|
41
|
+
to global utilities that need the exact router-builder map, especially
|
|
42
|
+
`Rango.PathResponse`.
|
|
43
|
+
|
|
44
|
+
### Generated Route Type Surfaces
|
|
45
|
+
|
|
46
|
+
There are three distinct typing surfaces. They are **not** interchangeable —
|
|
47
|
+
pick the one that matches what you need to type:
|
|
48
|
+
|
|
49
|
+
| Surface | Source | Scope | Gives | Does not give |
|
|
50
|
+
| ------------------- | ---------------------------------------- | ------ | ---------------------------------------- | ------------------------------------------------------------------------------------------------ |
|
|
51
|
+
| `GeneratedRouteMap` | `router.named-routes.gen.ts` (auto) | global | route names, path params, search schemas | response/MIME payloads |
|
|
52
|
+
| `routes` | per-module `*.gen.ts` (`rango generate`) | local | local names, params, search | the global app map |
|
|
53
|
+
| `RegisteredRoutes` | manual `extends typeof router.routeMap` | global | paths, params, **response payloads** | the `Handler`/`Prerender` default (those read `GeneratedRouteMap` to avoid a `router.tsx` cycle) |
|
|
54
|
+
|
|
55
|
+
Key consequence: `href()` and the ambient `Rango.Path` type are typed from
|
|
56
|
+
whichever map is present — they prefer `RegisteredRoutes` when you wire it, otherwise fall back to
|
|
57
|
+
the auto-generated `GeneratedRouteMap`, so **`rango generate` alone gives you
|
|
58
|
+
path-checked `href()`** with no manual augmentation. Response and MIME payload
|
|
59
|
+
inference is the exception: it comes only from `typeof router.routeMap` (via
|
|
60
|
+
`RegisteredRoutes`), because `GeneratedRouteMap` carries paths + search but no
|
|
61
|
+
payloads — so `Rango.PathResponse` resolves to `never` until you wire
|
|
62
|
+
`RegisteredRoutes`.
|
|
41
63
|
|
|
42
64
|
Recommended setup:
|
|
43
65
|
|
|
@@ -50,7 +72,7 @@ import type { AppBindings, AppVars } from "./env";
|
|
|
50
72
|
export const router = createRouter<AppBindings>({}).routes(urlpatterns);
|
|
51
73
|
|
|
52
74
|
declare global {
|
|
53
|
-
namespace
|
|
75
|
+
namespace Rango {
|
|
54
76
|
interface Env extends AppBindings {}
|
|
55
77
|
interface Vars extends AppVars {}
|
|
56
78
|
interface RegisteredRoutes extends typeof router.routeMap {}
|
|
@@ -58,6 +80,54 @@ declare global {
|
|
|
58
80
|
}
|
|
59
81
|
```
|
|
60
82
|
|
|
83
|
+
### Single-App Setup Checklist
|
|
84
|
+
|
|
85
|
+
For one app, keep the ambient types, generated named-routes file, and router
|
|
86
|
+
instance in the same TypeScript program:
|
|
87
|
+
|
|
88
|
+
```jsonc
|
|
89
|
+
// tsconfig.json
|
|
90
|
+
{
|
|
91
|
+
"compilerOptions": {
|
|
92
|
+
"strict": true,
|
|
93
|
+
"moduleResolution": "bundler",
|
|
94
|
+
"jsx": "react-jsx",
|
|
95
|
+
"noEmit": true,
|
|
96
|
+
},
|
|
97
|
+
"include": ["src"],
|
|
98
|
+
"files": ["src/router.tsx"],
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Then generate the route types from the router file:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
npx rango generate src/router.tsx
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
This creates `src/router.named-routes.gen.ts`, which augments
|
|
109
|
+
`Rango.GeneratedRouteMap`. Keep that generated file committed with the router
|
|
110
|
+
source. The `files` entry keeps `router.tsx` in the program even when nothing
|
|
111
|
+
imports it directly, so `Rango.Env`, `Rango.Vars`, and optional
|
|
112
|
+
`Rango.RegisteredRoutes` augmentation are visible to handlers, loaders, actions,
|
|
113
|
+
and client helpers.
|
|
114
|
+
|
|
115
|
+
### Named Routes, `$$routeNames`, And `router.routeMap`
|
|
116
|
+
|
|
117
|
+
There are two runtime/type surfaces with similar names:
|
|
118
|
+
|
|
119
|
+
- `router.named-routes.gen.ts` exports `NamedRoutes` and augments
|
|
120
|
+
`Rango.GeneratedRouteMap`. The Vite plugin imports that file internally and
|
|
121
|
+
injects it as `$$routeNames` so `router.reverse` has the static route-name map.
|
|
122
|
+
App code should not pass or import `$$routeNames` directly.
|
|
123
|
+
- `router.routeMap` is the public router instance property for type extraction.
|
|
124
|
+
Use `typeof router.routeMap` when augmenting `Rango.RegisteredRoutes` for
|
|
125
|
+
global response payload helpers such as `Rango.PathResponse`.
|
|
126
|
+
|
|
127
|
+
Do not document or use a public `router.routeNames` API unless one is
|
|
128
|
+
intentionally added. Today, the public extraction surface is `router.routeMap`;
|
|
129
|
+
the generated file and `$$routeNames` are build machinery.
|
|
130
|
+
|
|
61
131
|
## Route Definition with Type-Safe Names
|
|
62
132
|
|
|
63
133
|
```typescript
|
|
@@ -127,17 +197,107 @@ function ShopNav() {
|
|
|
127
197
|
}
|
|
128
198
|
```
|
|
129
199
|
|
|
130
|
-
`href()` and
|
|
131
|
-
|
|
200
|
+
`href()` and the `Rango.Path` type read from `RegisteredRoutes` when you augment
|
|
201
|
+
it, otherwise from the auto-generated `GeneratedRouteMap` — so `rango generate`
|
|
202
|
+
alone type-checks `href()` paths with no manual augmentation. The augmentation
|
|
203
|
+
below is only needed for **`Rango.PathResponse`** (response-payload inference), which
|
|
204
|
+
`GeneratedRouteMap` cannot provide:
|
|
132
205
|
|
|
133
206
|
```typescript
|
|
134
207
|
declare global {
|
|
135
|
-
namespace
|
|
208
|
+
namespace Rango {
|
|
136
209
|
interface RegisteredRoutes extends typeof router.routeMap {}
|
|
137
210
|
}
|
|
138
211
|
}
|
|
139
212
|
```
|
|
140
213
|
|
|
214
|
+
For wrapper helpers, type the path parameter as `Rango.Path`. It is ambient (no
|
|
215
|
+
import) and shares `href()`'s compile-time path checking, so a wrapper stays in
|
|
216
|
+
sync with your routes automatically:
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
import { href } from "@rangojs/router/client";
|
|
220
|
+
|
|
221
|
+
export const appHref = (path: Rango.Path): string => href(path);
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
For response-route payloads, `Rango.PathResponse<T>` is the ambient lookup. It
|
|
225
|
+
accepts a route _pattern_ **or** a concrete path, so it also serves as the return
|
|
226
|
+
type of a typed `fetch` wrapper. It only resolves once `RegisteredRoutes` carries
|
|
227
|
+
response metadata:
|
|
228
|
+
|
|
229
|
+
```typescript
|
|
230
|
+
import { href } from "@rangojs/router/client";
|
|
231
|
+
|
|
232
|
+
type Product = Rango.PathResponse<"/api/products/:id">; // by pattern
|
|
233
|
+
type Same = Rango.PathResponse<"/api/products/42">; // by concrete path
|
|
234
|
+
|
|
235
|
+
// Response inferred from the concrete path passed in:
|
|
236
|
+
async function get<T extends Rango.Path>(
|
|
237
|
+
path: T,
|
|
238
|
+
): Promise<Rango.PathResponse<T>> {
|
|
239
|
+
return fetch(href(path)).then((r) => r.json());
|
|
240
|
+
}
|
|
241
|
+
const product = await get("/api/products/42"); // Product (bare value)
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Pattern keys (`/:id`) match exactly; a concrete path under a _nested_ dynamic
|
|
245
|
+
route can match several patterns and union their responses.
|
|
246
|
+
|
|
247
|
+
`Rango.PathResponse` describes the JSON **wire** shape, not the handler's raw
|
|
248
|
+
return. A `path.json()` handler returning `{ createdAt: Date }` resolves here to
|
|
249
|
+
`{ createdAt: string }` (bare value), matching what `r.json()` yields. This
|
|
250
|
+
is applied via the ambient `Rango.JsonSerialize<T>` transform (`Date -> string`,
|
|
251
|
+
honors `toJSON()`, drops functions/`undefined`, `bigint -> never`). A separate
|
|
252
|
+
`Rango.FlightSerialize<T>` models the higher-fidelity RSC Flight boundary
|
|
253
|
+
(loaders / RSC props, where `Date` is preserved) — do **not** use it for
|
|
254
|
+
`path.json()`.
|
|
255
|
+
|
|
256
|
+
### Overriding serialization globally
|
|
257
|
+
|
|
258
|
+
For your own types, the zero-config way to control the JSON wire shape is a
|
|
259
|
+
`toJSON()` method — `Rango.JsonSerialize` honors it, and it matches the runtime
|
|
260
|
+
exactly (`JSON.stringify` calls `toJSON()`):
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
class Money {
|
|
264
|
+
constructor(private cents: number) {}
|
|
265
|
+
toJSON(): number {
|
|
266
|
+
return this.cents;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Rango.JsonSerialize<Money> is number; Rango.PathResponse reflects it.
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
To override a transform for types you **don't** own (or for the Flight boundary,
|
|
273
|
+
which has no `toJSON()`), augment its override slot. Because `Rango.JsonSerialize`
|
|
274
|
+
/ `Rango.FlightSerialize` are type _aliases_ (TS can't merge those), you provide a
|
|
275
|
+
single member that is your **complete** transform, delegating to the built-in for
|
|
276
|
+
the cases you don't change:
|
|
277
|
+
|
|
278
|
+
```typescript
|
|
279
|
+
declare global {
|
|
280
|
+
namespace Rango {
|
|
281
|
+
interface JsonSerializeOverride<T> {
|
|
282
|
+
app: T extends Decimal ? string : Rango.JsonSerializeBuiltin<T>;
|
|
283
|
+
}
|
|
284
|
+
interface FlightSerializeOverride<T> {
|
|
285
|
+
app: T extends Money ? number : Rango.FlightSerializeBuiltin<T>;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// Rango.JsonSerialize<Decimal> -> string; Rango.FlightSerialize<Money> -> number;
|
|
290
|
+
// everything else stays on the built-in, recursively (nested fields too).
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Rules: provide **exactly one** member (the slot is read as
|
|
294
|
+
`Override<T>[keyof Override<T>]`, so multiple members union and conflict).
|
|
295
|
+
Overrides win over `toJSON()` and apply at every nesting level. Caveat for JSON:
|
|
296
|
+
the `path.json()` runtime is plain `JSON.stringify`, which only honors `toJSON()`,
|
|
297
|
+
so a `JsonSerializeOverride` that disagrees with what the runtime emits will lie —
|
|
298
|
+
prefer `toJSON()` for your own types and use the slot only for types you can't
|
|
299
|
+
modify.
|
|
300
|
+
|
|
141
301
|
See `/links` for full URL generation guide.
|
|
142
302
|
|
|
143
303
|
## Environment Type Setup
|
|
@@ -155,7 +315,7 @@ export interface AppBindings {
|
|
|
155
315
|
AI: Ai;
|
|
156
316
|
}
|
|
157
317
|
|
|
158
|
-
// Variables set by middleware — declared via
|
|
318
|
+
// Variables set by middleware — declared via global namespace augmentation
|
|
159
319
|
export interface AppVariables {
|
|
160
320
|
user?: { id: string; email: string; role: string };
|
|
161
321
|
requestId?: string;
|
|
@@ -175,7 +335,7 @@ const router = createRouter<AppBindings>({
|
|
|
175
335
|
|
|
176
336
|
// Register bindings and variables globally for implicit typing
|
|
177
337
|
declare global {
|
|
178
|
-
namespace
|
|
338
|
+
namespace Rango {
|
|
179
339
|
interface Env extends AppBindings {}
|
|
180
340
|
interface Vars extends AppVariables {}
|
|
181
341
|
}
|
|
@@ -196,7 +356,7 @@ export const authMiddleware: Middleware = async (ctx, next) => {
|
|
|
196
356
|
// loaders - typed context
|
|
197
357
|
export const UserLoader = createLoader(async (ctx) => {
|
|
198
358
|
const db = ctx.env.DB; // D1Database (plain bindings)
|
|
199
|
-
const userId = ctx.get("user")?.id; // from
|
|
359
|
+
const userId = ctx.get("user")?.id; // from Rango.Vars
|
|
200
360
|
return db.prepare("SELECT * FROM users WHERE id = ?").bind(userId).first();
|
|
201
361
|
});
|
|
202
362
|
```
|
|
@@ -208,7 +368,7 @@ Register environment types globally for implicit typing:
|
|
|
208
368
|
```typescript
|
|
209
369
|
// router.tsx
|
|
210
370
|
declare global {
|
|
211
|
-
namespace
|
|
371
|
+
namespace Rango {
|
|
212
372
|
interface Env extends AppBindings {}
|
|
213
373
|
interface Vars extends AppVariables {}
|
|
214
374
|
}
|
|
@@ -220,8 +380,8 @@ Now handlers have typed context without explicit imports:
|
|
|
220
380
|
```typescript
|
|
221
381
|
// In loaders
|
|
222
382
|
export const DashboardLoader = createLoader(async (ctx) => {
|
|
223
|
-
// ctx.env.DB is typed from global
|
|
224
|
-
// ctx.get("user") is typed from global
|
|
383
|
+
// ctx.env.DB is typed from global Rango.Env
|
|
384
|
+
// ctx.get("user") is typed from global Rango.Vars
|
|
225
385
|
const user = ctx.get("user");
|
|
226
386
|
return { user };
|
|
227
387
|
});
|
|
@@ -259,15 +419,21 @@ This avoids circular references because `Handler` defaults to `GeneratedRouteMap
|
|
|
259
419
|
(from `router.named-routes.gen.ts`) instead of `RegisteredRoutes` (which depends on `router.tsx`).
|
|
260
420
|
|
|
261
421
|
You can also pass an explicit route map for per-module isolation (opt-in,
|
|
262
|
-
after running `npx rango generate`)
|
|
422
|
+
after running `npx rango generate`). With a local map, the route name is
|
|
423
|
+
**dot-prefixed** so params and search resolve from `routes`, not the global map:
|
|
263
424
|
|
|
264
425
|
```typescript
|
|
265
426
|
import type { Handler } from "@rangojs/router";
|
|
266
427
|
import type { routes } from "./urls.gen.js";
|
|
267
428
|
|
|
268
|
-
export const SearchPage: Handler<"search", routes> = (ctx) => { ... };
|
|
429
|
+
export const SearchPage: Handler<".search", routes> = (ctx) => { ... };
|
|
269
430
|
```
|
|
270
431
|
|
|
432
|
+
Note the difference: `Handler<"search">` (no dot) resolves against the global
|
|
433
|
+
`GeneratedRouteMap`; `Handler<".search", routes>` resolves against the local
|
|
434
|
+
`routes` map. Mixing them — `Handler<"search", routes>` — silently ignores
|
|
435
|
+
`routes` for param/search inference and only uses it for local `ctx.reverse(".x")`.
|
|
436
|
+
|
|
271
437
|
Supported types: `"string"`, `"number"`, `"boolean"`, with `?` suffix for optional.
|
|
272
438
|
Values are automatically coerced from query string (e.g., `"2"` becomes `2` for numbers).
|
|
273
439
|
Routes without a `search` schema keep the standard `URLSearchParams` behavior.
|
|
@@ -287,6 +453,12 @@ type SP = RouteSearchParams<"search">;
|
|
|
287
453
|
type P = RouteParams<"blogPost">;
|
|
288
454
|
// { slug: string }
|
|
289
455
|
|
|
456
|
+
// Optional URL params (`:slug?`) resolve to `string | undefined`
|
|
457
|
+
// because absent segments are omitted from `ctx.params` at runtime.
|
|
458
|
+
type C = RouteParams<"checkout">;
|
|
459
|
+
// { step?: string }
|
|
460
|
+
// → ctx.params.step is `string | undefined`; use `?? "default"` to coalesce.
|
|
461
|
+
|
|
290
462
|
// Use in component props
|
|
291
463
|
interface SearchResultsProps {
|
|
292
464
|
params: RouteSearchParams<"search">;
|
|
@@ -319,6 +491,19 @@ export const NamedRoutes = {
|
|
|
319
491
|
} as const;
|
|
320
492
|
```
|
|
321
493
|
|
|
494
|
+
You never open a `.gen.ts` by hand. Treat the generated types as call-site
|
|
495
|
+
honesty checks, not modules to read:
|
|
496
|
+
|
|
497
|
+
- **Do not import `router.named-routes.gen.ts` directly**, and don't reach for
|
|
498
|
+
`Rango.GeneratedRouteMap`. It is the whole-app manifest, auto-wired
|
|
499
|
+
globally — `Handler<"name">` and `ctx.reverse("name")` already see it.
|
|
500
|
+
- **Per-module `*.gen.ts` imports are fine** — they are the opt-in local-route
|
|
501
|
+
pattern for `useReverse(routes)` and explicit local handler typing
|
|
502
|
+
(`Handler<".name", routes>`). See `/links`.
|
|
503
|
+
|
|
504
|
+
If a type error points at a generated map instead of your call site, that's a
|
|
505
|
+
smell — fix the call site (or regenerate), never edit the generated file.
|
|
506
|
+
|
|
322
507
|
## Loader Type Safety
|
|
323
508
|
|
|
324
509
|
Loaders have typed return values:
|
|
@@ -408,9 +593,9 @@ export function PaginationLayout(ctx: any) {
|
|
|
408
593
|
}
|
|
409
594
|
```
|
|
410
595
|
|
|
411
|
-
### Why not just use
|
|
596
|
+
### Why not just use Rango.Vars?
|
|
412
597
|
|
|
413
|
-
`
|
|
598
|
+
`Rango.Vars` (via global namespace augmentation) provides app-global typing for
|
|
414
599
|
`ctx.get("key")` / `ctx.set("key", value)`. It works for middleware state
|
|
415
600
|
shared app-wide. `createVar<T>()` is for route-local or feature-scoped
|
|
416
601
|
context -- the producer and consumer import the same token, creating a
|
|
@@ -462,9 +647,11 @@ export const ProductLoader = createLoader(async (ctx) => {
|
|
|
462
647
|
});
|
|
463
648
|
|
|
464
649
|
// Built-in Breadcrumbs — or any custom handle created with createHandle()
|
|
650
|
+
```
|
|
465
651
|
|
|
652
|
+
```tsx
|
|
466
653
|
// Client component — typeof infers all generics
|
|
467
|
-
|
|
654
|
+
"use client";
|
|
468
655
|
import { useLoader, useHandle, type Breadcrumbs } from "@rangojs/router/client";
|
|
469
656
|
import type { ProductLoader } from "../loaders";
|
|
470
657
|
|
|
@@ -485,6 +672,42 @@ RSC Flight serialization calls `toJSON()` on both loaders and handles,
|
|
|
485
672
|
sending only `{ __brand, $$id }` to the client. The hooks recover the
|
|
486
673
|
full functionality from module-level registries.
|
|
487
674
|
|
|
675
|
+
## Stable identity: `path#export`
|
|
676
|
+
|
|
677
|
+
Loaders, handles, cached functions (`functionId`), and server actions
|
|
678
|
+
(`actionId`) all share one identity scheme: `{modulePath}#{exportName}`,
|
|
679
|
+
injected at build by the `exposeInternalIds` and `exposeActionId` Vite plugins.
|
|
680
|
+
This is also the identity React server actions carry across the Flight boundary,
|
|
681
|
+
which is why a `revalidate()` predicate sees an action as a `path#export` string:
|
|
682
|
+
|
|
683
|
+
```typescript
|
|
684
|
+
revalidate(
|
|
685
|
+
({ actionId }) => actionId === "src/actions/cart.ts#addToCart" || undefined,
|
|
686
|
+
);
|
|
687
|
+
```
|
|
688
|
+
|
|
689
|
+
`actionId` is the only stable reference React exposes across the Flight boundary,
|
|
690
|
+
so it stays as the floor and escape hatch. The hand-written-string surface
|
|
691
|
+
(`actionId?.includes("cart.ts#")`) is brittle: a renamed action or moved file
|
|
692
|
+
silently stops matching with no compile error. Prefer **`ctx.isAction()`** in a
|
|
693
|
+
revalidate predicate — it resolves the action's id from an imported reference, so
|
|
694
|
+
a rename is a type error in one place instead of silent drift:
|
|
695
|
+
|
|
696
|
+
```ts
|
|
697
|
+
import { addToCart, removeFromCart } from "./actions/cart";
|
|
698
|
+
import * as CartActions from "./actions/cart";
|
|
699
|
+
|
|
700
|
+
revalidate((ctx) => ctx.isAction(addToCart) || undefined); // one action
|
|
701
|
+
revalidate((ctx) => ctx.isAction(addToCart, removeFromCart) || undefined); // several
|
|
702
|
+
revalidate((ctx) => ctx.isAction(CartActions) || undefined); // any action in the module
|
|
703
|
+
```
|
|
704
|
+
|
|
705
|
+
`ctx.isAction()` (only available on the revalidate predicate's context) returns a
|
|
706
|
+
raw boolean — combine with `|| undefined` for the "revalidate on match, else
|
|
707
|
+
defer" intent. It resolves the reference the same way the router derives
|
|
708
|
+
`actionId` (`$id` in production, `$$id` in dev), so matching
|
|
709
|
+
works in both modes. `actionId` stays available for advanced cases.
|
|
710
|
+
|
|
488
711
|
## Location State Type Safety
|
|
489
712
|
|
|
490
713
|
```typescript
|
|
@@ -520,9 +743,37 @@ function ProductHeader() {
|
|
|
520
743
|
|
|
521
744
|
## Multi-Project tsconfig Setup
|
|
522
745
|
|
|
523
|
-
For monorepos or multi-app setups,
|
|
524
|
-
|
|
525
|
-
|
|
746
|
+
For monorepos or multi-app setups, each app should have its own TypeScript
|
|
747
|
+
program. Do not typecheck two Rango apps with different `Rango.Env`,
|
|
748
|
+
`Rango.Vars`, or `Rango.RegisteredRoutes` declarations in one tsconfig, because
|
|
749
|
+
ambient global interfaces merge across the whole program.
|
|
750
|
+
|
|
751
|
+
### Multiple routers in one program
|
|
752
|
+
|
|
753
|
+
`Rango.GeneratedRouteMap` is a **single global interface**. Each router's
|
|
754
|
+
generated `router.named-routes.gen.ts` augments it, so two routers in the **same
|
|
755
|
+
TS program** that define overlapping route names (e.g. both have a `home`) make
|
|
756
|
+
the augmentations collide:
|
|
757
|
+
|
|
758
|
+
```text
|
|
759
|
+
Interface 'GeneratedRouteMap' cannot simultaneously extend ...
|
|
760
|
+
Named property 'home' ... are not identical.
|
|
761
|
+
```
|
|
762
|
+
|
|
763
|
+
This is the multi-router / host-router case. Resolve it by:
|
|
764
|
+
|
|
765
|
+
- **Separate TS programs** — give each router its own tsconfig (as below) so only
|
|
766
|
+
one generated map is in scope per program. Recommended.
|
|
767
|
+
- **Unique route-name prefixes** — name routes per router (`appA.home`,
|
|
768
|
+
`appB.home`) so the merged global map has no duplicate keys.
|
|
769
|
+
|
|
770
|
+
A single global generated map is a single-router convenience; global named-route
|
|
771
|
+
typing across multiple routers in one program is not supported today (it would
|
|
772
|
+
need per-router scoping in the generated map).
|
|
773
|
+
|
|
774
|
+
Use a shared base tsconfig for common compiler options, then make every app
|
|
775
|
+
tsconfig include its own source tree, its own `router.tsx`, and the generated
|
|
776
|
+
`router.named-routes.gen.ts` that lives beside that router.
|
|
526
777
|
|
|
527
778
|
```jsonc
|
|
528
779
|
// tsconfig.base.json (root)
|
|
@@ -561,10 +812,49 @@ global type declarations (like `RSCRouter.Env`).
|
|
|
561
812
|
}
|
|
562
813
|
```
|
|
563
814
|
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
815
|
+
Run generation per app:
|
|
816
|
+
|
|
817
|
+
```bash
|
|
818
|
+
npx rango generate apps/shop/src/router.tsx
|
|
819
|
+
npx rango generate apps/blog/src/router.tsx
|
|
820
|
+
```
|
|
821
|
+
|
|
822
|
+
If an app has multiple tsconfigs (`tsconfig.app.json`, `tsconfig.test.json`,
|
|
823
|
+
`tsconfig.worker.json`), every tsconfig that typechecks Rango handlers,
|
|
824
|
+
components, loaders, actions, or client navigation must see the same app-local
|
|
825
|
+
type surfaces:
|
|
826
|
+
|
|
827
|
+
```jsonc
|
|
828
|
+
// apps/shop/tsconfig.test.json
|
|
829
|
+
{
|
|
830
|
+
"extends": "./tsconfig.json",
|
|
831
|
+
"include": ["src", "tests"],
|
|
832
|
+
"files": ["src/router.tsx"],
|
|
833
|
+
}
|
|
834
|
+
```
|
|
835
|
+
|
|
836
|
+
The `files` array ensures `router.tsx` is always included even if nothing
|
|
837
|
+
directly imports it. The generated `router.named-routes.gen.ts` is normally
|
|
838
|
+
covered by `include: ["src"]`; if a tsconfig uses a narrow `include`, add the
|
|
839
|
+
generated file explicitly. Each app gets its own typed environment and named
|
|
840
|
+
route map without interfering with other apps.
|
|
841
|
+
|
|
842
|
+
For response and MIME payload lookup in each app, augment `RegisteredRoutes`
|
|
843
|
+
inside that app's router file:
|
|
844
|
+
|
|
845
|
+
```typescript
|
|
846
|
+
// apps/shop/src/router.tsx
|
|
847
|
+
export const router = createRouter<ShopEnv>({ document: Document }).routes(
|
|
848
|
+
urlpatterns,
|
|
849
|
+
);
|
|
850
|
+
|
|
851
|
+
declare global {
|
|
852
|
+
namespace Rango {
|
|
853
|
+
interface Env extends ShopEnv {}
|
|
854
|
+
interface RegisteredRoutes extends typeof router.routeMap {}
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
```
|
|
568
858
|
|
|
569
859
|
## Complete Type-Safe Setup
|
|
570
860
|
|
|
@@ -600,7 +890,7 @@ const router = createRouter<AppBindings>({
|
|
|
600
890
|
|
|
601
891
|
// Register bindings and variables globally for implicit typing
|
|
602
892
|
declare global {
|
|
603
|
-
namespace
|
|
893
|
+
namespace Rango {
|
|
604
894
|
interface Env extends AppBindings {}
|
|
605
895
|
interface Vars extends AppVariables {}
|
|
606
896
|
}
|
|
@@ -611,13 +901,16 @@ export default router;
|
|
|
611
901
|
|
|
612
902
|
// 4. Run `npx rango generate src/router.tsx` to generate
|
|
613
903
|
// router.named-routes.gen.ts (auto-registers GeneratedRouteMap globally).
|
|
614
|
-
// No manual RegisteredRoutes declaration needed
|
|
904
|
+
// No manual RegisteredRoutes declaration is needed for named-route handlers,
|
|
905
|
+
// ctx.reverse, prerender, href(), or Rango.Path. Add `RegisteredRoutes
|
|
906
|
+
// extends typeof router.routeMap` when global response payload helpers such
|
|
907
|
+
// as Rango.PathResponse need the richer router.routeMap metadata.
|
|
615
908
|
|
|
616
909
|
// 5. loaders/*.ts - Type-safe loaders
|
|
617
910
|
export const ProductLoader = createLoader(async (ctx) => {
|
|
618
911
|
// ctx.params: { slug: string }
|
|
619
|
-
// ctx.get("user"): User | undefined (from
|
|
620
|
-
// ctx.env.DB: D1Database (plain bindings from
|
|
912
|
+
// ctx.get("user"): User | undefined (from Rango.Vars)
|
|
913
|
+
// ctx.env.DB: D1Database (plain bindings from Rango.Env)
|
|
621
914
|
return { product: await fetchProduct(ctx.params.slug) };
|
|
622
915
|
});
|
|
623
916
|
|
|
@@ -52,8 +52,9 @@ export async function ProductCard({ id }: { id: string }) {
|
|
|
52
52
|
|
|
53
53
|
## Named Cache Profiles
|
|
54
54
|
|
|
55
|
-
Define profiles in createRouter. Profile names map to `"use cache: <name>"`
|
|
56
|
-
`cache(
|
|
55
|
+
Define profiles in createRouter. Profile names map to `"use cache: <name>"` in
|
|
56
|
+
the directive. The DSL `cache()` does not accept a string profile name; use an
|
|
57
|
+
options object (`cache({ ttl: 60 })`) or the `"use cache: <name>"` directive.
|
|
57
58
|
|
|
58
59
|
```typescript
|
|
59
60
|
createRouter({
|
|
@@ -68,7 +69,10 @@ createRouter({
|
|
|
68
69
|
|
|
69
70
|
- `"use cache"` (no name) resolves to `default`.
|
|
70
71
|
- `"use cache: short"` resolves to the `short` profile.
|
|
71
|
-
- Unknown profile names throw at
|
|
72
|
+
- Unknown profile names throw at runtime, on the first invocation of the cached
|
|
73
|
+
function (the Vite transform does not validate names at build/boot). The error
|
|
74
|
+
is actionable -- it names the missing profile and shows the `createRouter({
|
|
75
|
+
cacheProfiles: { ... } })` entry to add.
|
|
72
76
|
|
|
73
77
|
## Cache Key
|
|
74
78
|
|
|
@@ -77,18 +81,33 @@ use-cache:{functionId}:{serializedArgs}
|
|
|
77
81
|
```
|
|
78
82
|
|
|
79
83
|
- `functionId` -- stable ID from Vite transform (module path + export name).
|
|
80
|
-
- `serializedArgs` --
|
|
84
|
+
- `serializedArgs` -- key-generating arguments serialized via RSC `encodeReply()`.
|
|
85
|
+
|
|
86
|
+
When there are no key-generating arguments, the key has no trailing colon -- it is
|
|
87
|
+
just `use-cache:{functionId}`.
|
|
81
88
|
|
|
82
89
|
Different functions always produce different cache keys, even for the same route.
|
|
83
90
|
This is important for intercepted routes -- the path handler and intercept handler
|
|
84
91
|
each have their own `functionId` and therefore their own cache entries.
|
|
85
92
|
|
|
93
|
+
### Route context is folded into the key
|
|
94
|
+
|
|
95
|
+
The tainted `ctx` object is excluded from arg serialization (see below), but
|
|
96
|
+
route-identifying fields read off it are extracted into `serializedArgs`:
|
|
97
|
+
`url.host`, route name (`_routeName`), `pathname`, `params`, response type
|
|
98
|
+
(`_responseType`), and the user-facing sorted search params (internal `_rsc*`/`__`
|
|
99
|
+
params excluded). The same cached function called with `ctx` on different routes,
|
|
100
|
+
param combinations, hosts, response types, or query variants therefore produces
|
|
101
|
+
distinct cache entries -- not one shared entry.
|
|
102
|
+
|
|
86
103
|
## Tainted Arguments (ctx, env, req)
|
|
87
104
|
|
|
88
105
|
Request-scoped objects are branded with `Symbol.for('rango:nocache')` at creation.
|
|
89
106
|
When detected:
|
|
90
107
|
|
|
91
108
|
1. **Excluded from cache key** -- request-scoped, not meaningful for keying.
|
|
109
|
+
(The route-identifying fields read off `ctx` are still folded in -- see
|
|
110
|
+
"Route context is folded into the key" above.)
|
|
92
111
|
2. **Handle data captured on miss** -- side effects via `ctx.use(Handle)` are recorded.
|
|
93
112
|
3. **Handle data replayed on hit** -- restored into the current request's HandleStore.
|
|
94
113
|
|
|
@@ -122,12 +141,16 @@ const data = await getCachedData(locale); // locale is now in the cache key
|
|
|
122
141
|
These ctx methods **throw** inside a `"use cache"` function because their effects
|
|
123
142
|
are lost on cache hit (the function body is skipped):
|
|
124
143
|
|
|
125
|
-
- `ctx.set()`
|
|
144
|
+
- `ctx.set()` for passing values to children
|
|
126
145
|
- `ctx.header()`
|
|
127
146
|
- `ctx.setTheme()`
|
|
128
147
|
- `ctx.setLocationState()`
|
|
129
148
|
- `ctx.onResponse()`
|
|
130
149
|
|
|
150
|
+
`ctx.get()` is **not** exec-guarded inside `"use cache"` -- it is a read, so it is
|
|
151
|
+
safe. (It only throws when reading a non-cacheable variable inside the separate
|
|
152
|
+
route-level `cache()` DSL boundary.)
|
|
153
|
+
|
|
131
154
|
The error message recommends two alternatives:
|
|
132
155
|
|
|
133
156
|
1. Extract the data fetch into a separate cached function and call ctx methods outside it.
|
|
@@ -304,18 +327,27 @@ export async function getProducts() {
|
|
|
304
327
|
## Backing Store
|
|
305
328
|
|
|
306
329
|
Writes to the same `SegmentCacheStore` as `cache()` DSL, `Static()`, and `Prerender()`.
|
|
307
|
-
One store, one configuration
|
|
308
|
-
|
|
330
|
+
One store, one configuration.
|
|
331
|
+
|
|
332
|
+
Cache entries (and `cacheProfiles`) can be tagged via `cache({ tags })` or, inside
|
|
333
|
+
a `"use cache"` function, runtime `cacheTag(...tags)`. The built-in
|
|
334
|
+
`MemorySegmentCacheStore` and `CFCacheStore` index by tag. Invalidate on demand
|
|
335
|
+
with `updateTag(...tags)` (awaitable, read-your-own-writes; for server actions) or
|
|
336
|
+
`revalidateTag(...tags)` (background, non-blocking; for route handlers/webhooks).
|
|
337
|
+
Both hard-purge; the difference is awaitability, not stale-serving. For
|
|
338
|
+
`CFCacheStore`, distributed invalidation needs a `kv` namespace (markers live in
|
|
339
|
+
that same namespace). The separate `revalidate()` export is the client-update axis
|
|
340
|
+
(which segments re-render on a navigation or action), not a cache bust.
|
|
309
341
|
|
|
310
342
|
## Interaction with Other Caching
|
|
311
343
|
|
|
312
|
-
| Mechanism
|
|
313
|
-
|
|
|
314
|
-
| `"use cache"`
|
|
315
|
-
| `cache()` DSL
|
|
316
|
-
| `cache(
|
|
317
|
-
| `Static()`
|
|
318
|
-
| `Prerender()`
|
|
344
|
+
| Mechanism | Granularity | When | Use case |
|
|
345
|
+
| -------------------- | ------------------ | ---------- | ----------------------------------------------- |
|
|
346
|
+
| `"use cache"` | Function/component | Runtime | Cache individual data fetches or components |
|
|
347
|
+
| `cache()` DSL | Route segment | Runtime | Cache entire route subtrees with children |
|
|
348
|
+
| `cache({ ttl })` DSL | Route segment | Runtime | Cache a route subtree with explicit options |
|
|
349
|
+
| `Static()` | Route segment | Build-time | Render once, never re-render |
|
|
350
|
+
| `Prerender()` | Route segment | Build-time | Pre-render known params, optional live fallback |
|
|
319
351
|
|
|
320
352
|
## Dev Mode
|
|
321
353
|
|