@rangojs/router 0.0.0-experimental.107 → 0.0.0-experimental.108
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/README.md +3 -3
- 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 +16 -16
- package/dist/bin/rango.js.map +1 -0
- package/dist/browser/event-controller.d.ts +191 -0
- package/dist/browser/event-controller.d.ts.map +1 -0
- package/dist/browser/event-controller.js +559 -0
- package/dist/browser/event-controller.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/link-interceptor.d.ts +38 -0
- package/dist/browser/link-interceptor.d.ts.map +1 -0
- package/dist/browser/link-interceptor.js +99 -0
- package/dist/browser/link-interceptor.js.map +1 -0
- package/dist/browser/logging.d.ts +10 -0
- package/dist/browser/logging.d.ts.map +1 -0
- package/dist/browser/logging.js +29 -0
- package/dist/browser/logging.js.map +1 -0
- package/dist/browser/lru-cache.d.ts +17 -0
- package/dist/browser/lru-cache.d.ts.map +1 -0
- package/dist/browser/lru-cache.js +50 -0
- package/dist/browser/lru-cache.js.map +1 -0
- package/dist/browser/merge-segment-loaders.d.ts +39 -0
- package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
- package/dist/browser/merge-segment-loaders.js +102 -0
- package/dist/browser/merge-segment-loaders.js.map +1 -0
- package/dist/browser/navigation-bridge.d.ts +102 -0
- package/dist/browser/navigation-bridge.d.ts.map +1 -0
- package/dist/browser/navigation-bridge.js +708 -0
- package/dist/browser/navigation-bridge.js.map +1 -0
- package/dist/browser/navigation-client.d.ts +25 -0
- package/dist/browser/navigation-client.d.ts.map +1 -0
- package/dist/browser/navigation-client.js +157 -0
- package/dist/browser/navigation-client.js.map +1 -0
- package/dist/browser/navigation-store.d.ts +101 -0
- package/dist/browser/navigation-store.d.ts.map +1 -0
- package/dist/browser/navigation-store.js +625 -0
- package/dist/browser/navigation-store.js.map +1 -0
- package/dist/browser/partial-update.d.ts +75 -0
- package/dist/browser/partial-update.d.ts.map +1 -0
- package/dist/browser/partial-update.js +426 -0
- package/dist/browser/partial-update.js.map +1 -0
- package/dist/browser/react/Link.d.ts +86 -0
- package/dist/browser/react/Link.d.ts.map +1 -0
- package/dist/browser/react/Link.js +128 -0
- package/dist/browser/react/Link.js.map +1 -0
- package/dist/browser/react/NavigationProvider.d.ts +63 -0
- package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
- package/dist/browser/react/NavigationProvider.js +216 -0
- package/dist/browser/react/NavigationProvider.js.map +1 -0
- package/dist/browser/react/ScrollRestoration.d.ts +75 -0
- package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
- package/dist/browser/react/ScrollRestoration.js +57 -0
- package/dist/browser/react/ScrollRestoration.js.map +1 -0
- package/dist/browser/react/context.d.ts +46 -0
- package/dist/browser/react/context.d.ts.map +1 -0
- package/dist/browser/react/context.js +10 -0
- package/dist/browser/react/context.js.map +1 -0
- package/dist/browser/react/index.d.ts +11 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/index.js +22 -0
- package/dist/browser/react/index.js.map +1 -0
- package/dist/browser/react/location-state-shared.d.ts +63 -0
- package/dist/browser/react/location-state-shared.d.ts.map +1 -0
- package/dist/browser/react/location-state-shared.js +81 -0
- package/dist/browser/react/location-state-shared.js.map +1 -0
- package/dist/browser/react/location-state.d.ts +23 -0
- package/dist/browser/react/location-state.d.ts.map +1 -0
- package/dist/browser/react/location-state.js +29 -0
- package/dist/browser/react/location-state.js.map +1 -0
- package/dist/browser/react/mount-context.d.ts +24 -0
- package/dist/browser/react/mount-context.d.ts.map +1 -0
- package/dist/browser/react/mount-context.js +24 -0
- package/dist/browser/react/mount-context.js.map +1 -0
- package/dist/browser/react/use-action.d.ts +64 -0
- package/dist/browser/react/use-action.d.ts.map +1 -0
- package/dist/browser/react/use-action.js +134 -0
- package/dist/browser/react/use-action.js.map +1 -0
- package/dist/browser/react/use-client-cache.d.ts +41 -0
- package/dist/browser/react/use-client-cache.d.ts.map +1 -0
- package/dist/browser/react/use-client-cache.js +39 -0
- package/dist/browser/react/use-client-cache.js.map +1 -0
- package/dist/browser/react/use-handle.d.ts +31 -0
- package/dist/browser/react/use-handle.d.ts.map +1 -0
- package/dist/browser/react/use-handle.js +144 -0
- package/dist/browser/react/use-handle.js.map +1 -0
- package/dist/browser/react/use-href.d.ts +33 -0
- package/dist/browser/react/use-href.d.ts.map +1 -0
- package/dist/browser/react/use-href.js +39 -0
- package/dist/browser/react/use-href.js.map +1 -0
- package/dist/browser/react/use-link-status.d.ts +37 -0
- package/dist/browser/react/use-link-status.d.ts.map +1 -0
- package/dist/browser/react/use-link-status.js +99 -0
- package/dist/browser/react/use-link-status.js.map +1 -0
- package/dist/browser/react/use-mount.d.ts +25 -0
- package/dist/browser/react/use-mount.d.ts.map +1 -0
- package/dist/browser/react/use-mount.js +30 -0
- package/dist/browser/react/use-mount.js.map +1 -0
- package/dist/browser/react/use-navigation.d.ts +27 -0
- package/dist/browser/react/use-navigation.d.ts.map +1 -0
- package/dist/browser/react/use-navigation.js +87 -0
- package/dist/browser/react/use-navigation.js.map +1 -0
- package/dist/browser/react/use-segments.d.ts +38 -0
- package/dist/browser/react/use-segments.d.ts.map +1 -0
- package/dist/browser/react/use-segments.js +130 -0
- package/dist/browser/react/use-segments.js.map +1 -0
- package/dist/browser/request-controller.d.ts +26 -0
- package/dist/browser/request-controller.d.ts.map +1 -0
- package/dist/browser/request-controller.js +147 -0
- package/dist/browser/request-controller.js.map +1 -0
- package/dist/browser/rsc-router.d.ts +129 -0
- package/dist/browser/rsc-router.d.ts.map +1 -0
- package/dist/browser/rsc-router.js +195 -0
- package/dist/browser/rsc-router.js.map +1 -0
- package/dist/browser/scroll-restoration.d.ts +93 -0
- package/dist/browser/scroll-restoration.d.ts.map +1 -0
- package/dist/browser/scroll-restoration.js +321 -0
- package/dist/browser/scroll-restoration.js.map +1 -0
- package/dist/browser/segment-structure-assert.d.ts +17 -0
- package/dist/browser/segment-structure-assert.d.ts.map +1 -0
- package/dist/browser/segment-structure-assert.js +59 -0
- package/dist/browser/segment-structure-assert.js.map +1 -0
- package/dist/browser/server-action-bridge.d.ts +26 -0
- package/dist/browser/server-action-bridge.d.ts.map +1 -0
- package/dist/browser/server-action-bridge.js +668 -0
- package/dist/browser/server-action-bridge.js.map +1 -0
- package/dist/browser/shallow.d.ts +12 -0
- package/dist/browser/shallow.d.ts.map +1 -0
- package/dist/browser/shallow.js +34 -0
- package/dist/browser/shallow.js.map +1 -0
- package/dist/browser/types.d.ts +369 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
- package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-cli.test.js +237 -0
- package/dist/build/__tests__/generate-cli.test.js.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.js +119 -0
- package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.js +620 -0
- package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.js +308 -0
- package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +81 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +276 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/build/generate-route-types.d.ts +115 -0
- package/dist/build/generate-route-types.d.ts.map +1 -0
- package/dist/build/generate-route-types.js +740 -0
- package/dist/build/generate-route-types.js.map +1 -0
- package/dist/build/index.d.ts +21 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +21 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/route-trie.d.ts +71 -0
- package/dist/build/route-trie.d.ts.map +1 -0
- package/dist/build/route-trie.js +175 -0
- package/dist/build/route-trie.js.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.js +208 -0
- package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
- package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
- package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
- package/dist/cache/__tests__/document-cache.test.js +345 -0
- package/dist/cache/__tests__/document-cache.test.js.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
- package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
- package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-store.test.js +367 -0
- package/dist/cache/__tests__/memory-store.test.js.map +1 -0
- package/dist/cache/cache-scope.d.ts +102 -0
- package/dist/cache/cache-scope.d.ts.map +1 -0
- package/dist/cache/cache-scope.js +440 -0
- package/dist/cache/cache-scope.js.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
- package/dist/cache/cf/cf-cache-store.d.ts +165 -0
- package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
- package/dist/cache/cf/cf-cache-store.js +242 -0
- package/dist/cache/cf/cf-cache-store.js.map +1 -0
- package/dist/cache/cf/index.d.ts +14 -0
- package/dist/cache/cf/index.d.ts.map +1 -0
- package/dist/cache/cf/index.js +17 -0
- package/dist/cache/cf/index.js.map +1 -0
- package/dist/cache/document-cache.d.ts +64 -0
- package/dist/cache/document-cache.d.ts.map +1 -0
- package/dist/cache/document-cache.js +228 -0
- package/dist/cache/document-cache.js.map +1 -0
- package/dist/cache/index.d.ts +19 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-segment-store.d.ts +110 -0
- package/dist/cache/memory-segment-store.d.ts.map +1 -0
- package/dist/cache/memory-segment-store.js +117 -0
- package/dist/cache/memory-segment-store.js.map +1 -0
- package/dist/cache/memory-store.d.ts +41 -0
- package/dist/cache/memory-store.d.ts.map +1 -0
- package/dist/cache/memory-store.js +191 -0
- package/dist/cache/memory-store.js.map +1 -0
- package/dist/cache/types.d.ts +317 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +12 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client.d.ts +248 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +367 -0
- package/dist/client.js.map +1 -0
- package/dist/client.rsc.d.ts +26 -0
- package/dist/client.rsc.d.ts.map +1 -0
- package/dist/client.rsc.js +46 -0
- package/dist/client.rsc.js.map +1 -0
- package/dist/component-utils.d.ts +36 -0
- package/dist/component-utils.d.ts.map +1 -0
- package/dist/component-utils.js +61 -0
- package/dist/component-utils.js.map +1 -0
- package/dist/components/DefaultDocument.d.ts +13 -0
- package/dist/components/DefaultDocument.d.ts.map +1 -0
- package/dist/components/DefaultDocument.js +15 -0
- package/dist/components/DefaultDocument.js.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +157 -0
- package/dist/debug.js.map +1 -0
- package/dist/default-error-boundary.d.ts +11 -0
- package/dist/default-error-boundary.d.ts.map +1 -0
- package/dist/default-error-boundary.js +45 -0
- package/dist/default-error-boundary.js.map +1 -0
- package/dist/deps/browser.d.ts +2 -0
- package/dist/deps/browser.d.ts.map +1 -0
- package/dist/deps/browser.js +3 -0
- package/dist/deps/browser.js.map +1 -0
- package/dist/deps/html-stream-client.d.ts +2 -0
- package/dist/deps/html-stream-client.d.ts.map +1 -0
- package/dist/deps/html-stream-client.js +3 -0
- package/dist/deps/html-stream-client.js.map +1 -0
- package/dist/deps/html-stream-server.d.ts +2 -0
- package/dist/deps/html-stream-server.d.ts.map +1 -0
- package/dist/deps/html-stream-server.js +3 -0
- package/dist/deps/html-stream-server.js.map +1 -0
- package/dist/deps/rsc.d.ts +2 -0
- package/dist/deps/rsc.d.ts.map +1 -0
- package/dist/deps/rsc.js +4 -0
- package/dist/deps/rsc.js.map +1 -0
- package/dist/deps/ssr.d.ts +2 -0
- package/dist/deps/ssr.d.ts.map +1 -0
- package/dist/deps/ssr.js +3 -0
- package/dist/deps/ssr.js.map +1 -0
- package/dist/errors.d.ts +174 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +241 -0
- package/dist/errors.js.map +1 -0
- package/dist/handle.d.ts +78 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +82 -0
- package/dist/handle.js.map +1 -0
- package/dist/handles/MetaTags.d.ts +14 -0
- package/dist/handles/MetaTags.d.ts.map +1 -0
- package/dist/handles/MetaTags.js +136 -0
- package/dist/handles/MetaTags.js.map +1 -0
- package/dist/handles/index.d.ts +6 -0
- package/dist/handles/index.d.ts.map +1 -0
- package/dist/handles/index.js +6 -0
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/dist/href-context.d.ts +29 -0
- package/dist/href-context.d.ts.map +1 -0
- package/dist/href-context.js +21 -0
- package/dist/href-context.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.rsc.d.ts +32 -0
- package/dist/index.rsc.d.ts.map +1 -0
- package/dist/index.rsc.js +40 -0
- package/dist/index.rsc.js.map +1 -0
- package/dist/internal-debug.d.ts +2 -0
- package/dist/internal-debug.d.ts.map +1 -0
- package/dist/internal-debug.js +5 -0
- package/dist/internal-debug.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/loader.rsc.d.ts +19 -0
- package/dist/loader.rsc.d.ts.map +1 -0
- package/dist/loader.rsc.js +99 -0
- package/dist/loader.rsc.js.map +1 -0
- package/dist/network-error-thrower.d.ts +17 -0
- package/dist/network-error-thrower.d.ts.map +1 -0
- package/dist/network-error-thrower.js +14 -0
- package/dist/network-error-thrower.js.map +1 -0
- package/dist/outlet-context.d.ts +13 -0
- package/dist/outlet-context.d.ts.map +1 -0
- package/dist/outlet-context.js +3 -0
- package/dist/outlet-context.js.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.js +148 -0
- package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
- package/dist/prerender/param-hash.d.ts +16 -0
- package/dist/prerender/param-hash.d.ts.map +1 -0
- package/dist/prerender/param-hash.js +36 -0
- package/dist/prerender/param-hash.js.map +1 -0
- package/dist/prerender/store.d.ts +38 -0
- package/dist/prerender/store.d.ts.map +1 -0
- package/dist/prerender/store.js +61 -0
- package/dist/prerender/store.js.map +1 -0
- package/dist/prerender.d.ts +66 -0
- package/dist/prerender.d.ts.map +1 -0
- package/dist/prerender.js +57 -0
- package/dist/prerender.js.map +1 -0
- package/dist/reverse.d.ts +196 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +78 -0
- package/dist/reverse.js.map +1 -0
- package/dist/root-error-boundary.d.ts +33 -0
- package/dist/root-error-boundary.d.ts.map +1 -0
- package/dist/root-error-boundary.js +165 -0
- package/dist/root-error-boundary.js.map +1 -0
- package/dist/route-content-wrapper.d.ts +46 -0
- package/dist/route-content-wrapper.d.ts.map +1 -0
- package/dist/route-content-wrapper.js +77 -0
- package/dist/route-content-wrapper.js.map +1 -0
- package/dist/route-definition.d.ts +421 -0
- package/dist/route-definition.d.ts.map +1 -0
- package/dist/route-definition.js +868 -0
- package/dist/route-definition.js.map +1 -0
- package/dist/route-map-builder.d.ts +155 -0
- package/dist/route-map-builder.d.ts.map +1 -0
- package/dist/route-map-builder.js +237 -0
- package/dist/route-map-builder.js.map +1 -0
- package/dist/route-types.d.ts +165 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +7 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router/__tests__/handler-context.test.d.ts +2 -0
- package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/handler-context.test.js +65 -0
- package/dist/router/__tests__/handler-context.test.js.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
- package/dist/router/__tests__/match-context.test.d.ts +2 -0
- package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-context.test.js +92 -0
- package/dist/router/__tests__/match-context.test.js.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.js +417 -0
- package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
- package/dist/router/__tests__/match-result.test.d.ts +2 -0
- package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-result.test.js +457 -0
- package/dist/router/__tests__/match-result.test.js.map +1 -0
- package/dist/router/__tests__/on-error.test.d.ts +2 -0
- package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
- package/dist/router/__tests__/on-error.test.js +678 -0
- package/dist/router/__tests__/on-error.test.js.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.js +629 -0
- package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
- package/dist/router/error-handling.d.ts +77 -0
- package/dist/router/error-handling.d.ts.map +1 -0
- package/dist/router/error-handling.js +202 -0
- package/dist/router/error-handling.js.map +1 -0
- package/dist/router/handler-context.d.ts +20 -0
- package/dist/router/handler-context.d.ts.map +1 -0
- package/dist/router/handler-context.js +198 -0
- package/dist/router/handler-context.js.map +1 -0
- package/dist/router/intercept-resolution.d.ts +66 -0
- package/dist/router/intercept-resolution.d.ts.map +1 -0
- package/dist/router/intercept-resolution.js +246 -0
- package/dist/router/intercept-resolution.js.map +1 -0
- package/dist/router/loader-resolution.d.ts +64 -0
- package/dist/router/loader-resolution.d.ts.map +1 -0
- package/dist/router/loader-resolution.js +284 -0
- package/dist/router/loader-resolution.js.map +1 -0
- package/dist/router/logging.d.ts +15 -0
- package/dist/router/logging.d.ts.map +1 -0
- package/dist/router/logging.js +99 -0
- package/dist/router/logging.js.map +1 -0
- package/dist/router/manifest.d.ts +22 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +181 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/match-api.d.ts +35 -0
- package/dist/router/match-api.d.ts.map +1 -0
- package/dist/router/match-api.js +406 -0
- package/dist/router/match-api.js.map +1 -0
- package/dist/router/match-context.d.ts +206 -0
- package/dist/router/match-context.d.ts.map +1 -0
- package/dist/router/match-context.js +17 -0
- package/dist/router/match-context.js.map +1 -0
- package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
- package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
- package/dist/router/match-middleware/background-revalidation.js +75 -0
- package/dist/router/match-middleware/background-revalidation.js.map +1 -0
- package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
- package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-lookup.js +257 -0
- package/dist/router/match-middleware/cache-lookup.js.map +1 -0
- package/dist/router/match-middleware/cache-store.d.ts +113 -0
- package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-store.js +108 -0
- package/dist/router/match-middleware/cache-store.js.map +1 -0
- package/dist/router/match-middleware/index.d.ts +81 -0
- package/dist/router/match-middleware/index.d.ts.map +1 -0
- package/dist/router/match-middleware/index.js +80 -0
- package/dist/router/match-middleware/index.js.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.js +134 -0
- package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
- package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
- package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/segment-resolution.js +53 -0
- package/dist/router/match-middleware/segment-resolution.js.map +1 -0
- package/dist/router/match-pipelines.d.ts +147 -0
- package/dist/router/match-pipelines.d.ts.map +1 -0
- package/dist/router/match-pipelines.js +82 -0
- package/dist/router/match-pipelines.js.map +1 -0
- package/dist/router/match-result.d.ts +126 -0
- package/dist/router/match-result.d.ts.map +1 -0
- package/dist/router/match-result.js +93 -0
- package/dist/router/match-result.js.map +1 -0
- package/dist/router/metrics.d.ts +20 -0
- package/dist/router/metrics.d.ts.map +1 -0
- package/dist/router/metrics.js +47 -0
- package/dist/router/metrics.js.map +1 -0
- package/dist/router/middleware.d.ts +249 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +434 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/middleware.test.d.ts +2 -0
- package/dist/router/middleware.test.d.ts.map +1 -0
- package/dist/router/middleware.test.js +816 -0
- package/dist/router/middleware.test.js.map +1 -0
- package/dist/router/pattern-matching.d.ts +149 -0
- package/dist/router/pattern-matching.d.ts.map +1 -0
- package/dist/router/pattern-matching.js +349 -0
- package/dist/router/pattern-matching.js.map +1 -0
- package/dist/router/revalidation.d.ts +44 -0
- package/dist/router/revalidation.d.ts.map +1 -0
- package/dist/router/revalidation.js +147 -0
- package/dist/router/revalidation.js.map +1 -0
- package/dist/router/router-context.d.ts +135 -0
- package/dist/router/router-context.d.ts.map +1 -0
- package/dist/router/router-context.js +36 -0
- package/dist/router/router-context.js.map +1 -0
- package/dist/router/segment-resolution.d.ts +127 -0
- package/dist/router/segment-resolution.d.ts.map +1 -0
- package/dist/router/segment-resolution.js +919 -0
- package/dist/router/segment-resolution.js.map +1 -0
- package/dist/router/trie-matching.d.ts +40 -0
- package/dist/router/trie-matching.d.ts.map +1 -0
- package/dist/router/trie-matching.js +127 -0
- package/dist/router/trie-matching.js.map +1 -0
- package/dist/router/types.d.ts +136 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router.d.ts +753 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.gen.d.ts +6 -0
- package/dist/router.gen.d.ts.map +1 -0
- package/dist/router.gen.js +6 -0
- package/dist/router.gen.js.map +1 -0
- package/dist/router.js +1304 -0
- package/dist/router.js.map +1 -0
- package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
- package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/rsc/__tests__/helpers.test.js +140 -0
- package/dist/rsc/__tests__/helpers.test.js.map +1 -0
- package/dist/rsc/handler.d.ts +45 -0
- package/dist/rsc/handler.d.ts.map +1 -0
- package/dist/rsc/handler.js +1172 -0
- package/dist/rsc/handler.js.map +1 -0
- package/dist/rsc/helpers.d.ts +16 -0
- package/dist/rsc/helpers.d.ts.map +1 -0
- package/dist/rsc/helpers.js +55 -0
- package/dist/rsc/helpers.js.map +1 -0
- package/dist/rsc/index.d.ts +22 -0
- package/dist/rsc/index.d.ts.map +1 -0
- package/dist/rsc/index.js +23 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/nonce.d.ts +9 -0
- package/dist/rsc/nonce.d.ts.map +1 -0
- package/dist/rsc/nonce.js +18 -0
- package/dist/rsc/nonce.js.map +1 -0
- package/dist/rsc/types.d.ts +206 -0
- package/dist/rsc/types.d.ts.map +1 -0
- package/dist/rsc/types.js +8 -0
- package/dist/rsc/types.js.map +1 -0
- package/dist/search-params.d.ts +103 -0
- package/dist/search-params.d.ts.map +1 -0
- package/dist/search-params.js +74 -0
- package/dist/search-params.js.map +1 -0
- package/dist/segment-system.d.ts +75 -0
- package/dist/segment-system.d.ts.map +1 -0
- package/dist/segment-system.js +336 -0
- package/dist/segment-system.js.map +1 -0
- package/dist/server/context.d.ts +245 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +197 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fetchable-loader-store.d.ts +18 -0
- package/dist/server/fetchable-loader-store.d.ts.map +1 -0
- package/dist/server/fetchable-loader-store.js +18 -0
- package/dist/server/fetchable-loader-store.js.map +1 -0
- package/dist/server/handle-store.d.ts +85 -0
- package/dist/server/handle-store.d.ts.map +1 -0
- package/dist/server/handle-store.js +142 -0
- package/dist/server/handle-store.js.map +1 -0
- package/dist/server/loader-registry.d.ts +55 -0
- package/dist/server/loader-registry.d.ts.map +1 -0
- package/dist/server/loader-registry.js +132 -0
- package/dist/server/loader-registry.js.map +1 -0
- package/dist/server/request-context.d.ts +226 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +290 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/root-layout.d.ts +4 -0
- package/dist/server/root-layout.d.ts.map +1 -0
- package/dist/server/root-layout.js +5 -0
- package/dist/server/root-layout.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
- package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
- package/dist/ssr/index.d.ts +98 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +158 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/static-handler.d.ts +50 -0
- package/dist/static-handler.d.ts.map +1 -0
- package/dist/static-handler.gen.d.ts +5 -0
- package/dist/static-handler.gen.d.ts.map +1 -0
- package/dist/static-handler.gen.js +5 -0
- package/dist/static-handler.gen.js.map +1 -0
- package/dist/static-handler.js +29 -0
- package/dist/static-handler.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +20 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +240 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/ThemeScript.d.ts +48 -0
- package/dist/theme/ThemeScript.d.ts.map +1 -0
- package/dist/theme/ThemeScript.js +13 -0
- package/dist/theme/ThemeScript.js.map +1 -0
- package/dist/theme/__tests__/theme.test.d.ts +2 -0
- package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
- package/dist/theme/__tests__/theme.test.js +103 -0
- package/dist/theme/__tests__/theme.test.js.map +1 -0
- package/dist/theme/constants.d.ts +29 -0
- package/dist/theme/constants.d.ts.map +1 -0
- package/dist/theme/constants.js +48 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +31 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +36 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-context.d.ts +40 -0
- package/dist/theme/theme-context.d.ts.map +1 -0
- package/dist/theme/theme-context.js +60 -0
- package/dist/theme/theme-context.js.map +1 -0
- package/dist/theme/theme-script.d.ts +27 -0
- package/dist/theme/theme-script.d.ts.map +1 -0
- package/dist/theme/theme-script.js +147 -0
- package/dist/theme/theme-script.js.map +1 -0
- package/dist/theme/types.d.ts +163 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +11 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/theme/use-theme.d.ts +12 -0
- package/dist/theme/use-theme.d.ts.map +1 -0
- package/dist/theme/use-theme.js +40 -0
- package/dist/theme/use-theme.js.map +1 -0
- package/dist/types.d.ts +1479 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/urls.d.ts +441 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.gen.d.ts +8 -0
- package/dist/urls.gen.d.ts.map +1 -0
- package/dist/urls.gen.js +8 -0
- package/dist/urls.gen.js.map +1 -0
- package/dist/urls.js +443 -0
- package/dist/urls.js.map +1 -0
- package/dist/use-loader.d.ts +127 -0
- package/dist/use-loader.d.ts.map +1 -0
- package/dist/use-loader.js +237 -0
- package/dist/use-loader.js.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
- package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.js +39 -0
- package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
- package/dist/vite/ast-handler-extract.d.ts +49 -0
- package/dist/vite/ast-handler-extract.d.ts.map +1 -0
- package/dist/vite/ast-handler-extract.js +249 -0
- package/dist/vite/ast-handler-extract.js.map +1 -0
- package/dist/vite/expose-action-id.d.ts +19 -0
- package/dist/vite/expose-action-id.d.ts.map +1 -0
- package/dist/vite/expose-action-id.js +250 -0
- package/dist/vite/expose-action-id.js.map +1 -0
- package/dist/vite/expose-id-utils.d.ts +69 -0
- package/dist/vite/expose-id-utils.d.ts.map +1 -0
- package/dist/vite/expose-id-utils.js +289 -0
- package/dist/vite/expose-id-utils.js.map +1 -0
- package/dist/vite/expose-internal-ids.d.ts +22 -0
- package/dist/vite/expose-internal-ids.d.ts.map +1 -0
- package/dist/vite/expose-internal-ids.js +886 -0
- package/dist/vite/expose-internal-ids.js.map +1 -0
- package/dist/vite/index.d.ts +149 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +135 -143
- package/dist/vite/index.js.bak +5448 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/index.named-routes.gen.ts +103 -0
- package/dist/vite/package-resolution.d.ts +43 -0
- package/dist/vite/package-resolution.d.ts.map +1 -0
- package/dist/vite/package-resolution.js +112 -0
- package/dist/vite/package-resolution.js.map +1 -0
- package/dist/vite/virtual-entries.d.ts +25 -0
- package/dist/vite/virtual-entries.d.ts.map +1 -0
- package/dist/vite/virtual-entries.js +110 -0
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +6 -6
- package/skills/hooks/SKILL.md +2 -0
- package/skills/links/SKILL.md +2 -0
- package/skills/loader/SKILL.md +1 -1
- package/skills/middleware/SKILL.md +3 -3
- package/skills/mime-routes/SKILL.md +27 -0
- package/skills/prerender/SKILL.md +13 -13
- package/skills/rango/SKILL.md +9 -0
- package/skills/response-routes/SKILL.md +27 -3
- package/skills/router-setup/SKILL.md +3 -3
- package/skills/typesafety/SKILL.md +186 -31
- package/src/__augment-tests__/augment.ts +37 -0
- package/src/__augment-tests__/augmented.check.ts +64 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/react/location-state-shared.ts +3 -3
- package/src/browser/rsc-router.tsx +14 -14
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/build/generate-manifest.ts +3 -3
- package/src/build/route-types/codegen.ts +4 -4
- package/src/build/route-types/include-resolution.ts +1 -1
- package/src/build/route-types/per-module-writer.ts +3 -3
- package/src/build/route-types/router-processing.ts +4 -4
- package/src/build/route-types/scan-filter.ts +1 -1
- package/src/errors.ts +1 -1
- package/src/handle.ts +2 -2
- package/src/href-client.ts +1 -1
- package/src/index.rsc.ts +2 -2
- package/src/loader.rsc.ts +1 -1
- package/src/loader.ts +1 -1
- package/src/prerender.ts +4 -4
- package/src/route-definition/dsl-helpers.ts +2 -2
- package/src/route-definition/helpers-types.ts +2 -2
- package/src/router/error-handling.ts +1 -1
- package/src/router/lazy-includes.ts +2 -2
- package/src/router/metrics.ts +1 -1
- package/src/router/middleware-types.ts +1 -1
- package/src/router/prerender-match.ts +1 -1
- package/src/router/router-interfaces.ts +34 -28
- package/src/router/router-options.ts +1 -1
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +2 -2
- package/src/router/segment-resolution/revalidation.ts +2 -2
- package/src/router.ts +13 -16
- package/src/rsc/handler-context.ts +2 -2
- package/src/rsc/index.ts +1 -1
- package/src/rsc/types.ts +2 -2
- package/src/search-params.ts +4 -4
- package/src/server/context.ts +16 -16
- package/src/static-handler.ts +1 -1
- package/src/types/global-namespace.ts +39 -26
- package/src/types/handler-context.ts +3 -3
- package/src/urls/path-helper-types.ts +2 -2
- package/src/urls/pattern-types.ts +34 -0
- package/src/vite/discovery/bundle-postprocess.ts +6 -6
- package/src/vite/discovery/discover-routers.ts +3 -3
- package/src/vite/discovery/discovery-errors.ts +1 -1
- package/src/vite/discovery/prerender-collection.ts +19 -25
- package/src/vite/discovery/route-types-writer.ts +3 -3
- package/src/vite/plugins/cloudflare-protocol-stub.ts +1 -1
- package/src/vite/plugins/expose-action-id.ts +2 -2
- package/src/vite/plugins/expose-id-utils.ts +12 -8
- package/src/vite/plugins/expose-ids/export-analysis.ts +33 -9
- package/src/vite/plugins/expose-internal-ids.ts +1 -1
- package/src/vite/plugins/performance-tracks.ts +12 -16
- package/src/vite/plugins/use-cache-transform.ts +1 -1
- package/src/vite/plugins/version-plugin.ts +2 -2
- package/src/vite/plugins/virtual-entries.ts +2 -2
- package/src/vite/rango.ts +11 -11
- package/src/vite/router-discovery.ts +15 -19
- package/src/vite/utils/ast-handler-extract.ts +15 -15
- package/src/vite/utils/bundle-analysis.ts +4 -2
- package/src/vite/utils/shared-utils.ts +26 -22
|
@@ -108,6 +108,33 @@ path.text("/api/data", () => "plain text version", { name: "dataText" }),
|
|
|
108
108
|
Without an RSC primary, there is no `text/html` candidate — the Accept header
|
|
109
109
|
picks among the response-type candidates directly.
|
|
110
110
|
|
|
111
|
+
## Type Safety For Negotiated Paths
|
|
112
|
+
|
|
113
|
+
`router.named-routes.gen.ts` validates route names, params, search, `href()`, and
|
|
114
|
+
`ValidPaths`, but it does not carry response payload metadata. For MIME or
|
|
115
|
+
response payload types, use one of these surfaces:
|
|
116
|
+
|
|
117
|
+
- `RouteResponse<typeof patterns, "routeName">` for a specific response variant
|
|
118
|
+
by route name. This is the clearest option when several MIME variants share
|
|
119
|
+
one URL pattern.
|
|
120
|
+
- `PathResponse<"/products/:id">` for global URL-pattern lookup after the app
|
|
121
|
+
registers `typeof router.routeMap`:
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
// router.tsx
|
|
125
|
+
export const router = createRouter({ document: Document }).routes(urlpatterns);
|
|
126
|
+
|
|
127
|
+
declare global {
|
|
128
|
+
namespace Rango {
|
|
129
|
+
interface RegisteredRoutes extends typeof router.routeMap {}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
`RegisteredRoutes` is what exposes the richer routeMap entries containing
|
|
135
|
+
response payload metadata. Without it, URL-pattern response lookup has paths but
|
|
136
|
+
no payloads, so response types resolve to `ResponseEnvelope<never>`.
|
|
137
|
+
|
|
111
138
|
## How It Works
|
|
112
139
|
|
|
113
140
|
1. **Build time**: `buildRouteTrie()` calls `mergeLeaves()` when multiple routes share a pattern.
|
|
@@ -358,16 +358,16 @@ Both error types propagate to the router's `onError` callback with phase
|
|
|
358
358
|
The build produces per-URL timing logs:
|
|
359
359
|
|
|
360
360
|
```
|
|
361
|
-
[
|
|
362
|
-
[
|
|
363
|
-
[
|
|
364
|
-
[
|
|
365
|
-
[
|
|
366
|
-
|
|
367
|
-
[
|
|
368
|
-
[
|
|
369
|
-
[
|
|
370
|
-
[
|
|
361
|
+
[rango] Pre-rendering 12 URL(s) (concurrency: 4)...
|
|
362
|
+
[rango] OK /articles/hello (42ms)
|
|
363
|
+
[rango] PASS /articles/remote-only (5ms) - live fallback
|
|
364
|
+
[rango] SKIP /articles/draft-post (3ms) - Article is a draft
|
|
365
|
+
[rango] Pre-render complete: 11 done, 1 skipped (1204ms total)
|
|
366
|
+
|
|
367
|
+
[rango] Rendering 3 static handler(s)...
|
|
368
|
+
[rango] OK DocsLayout (28ms)
|
|
369
|
+
[rango] SKIP TocSidebar (1ms) - Not ready
|
|
370
|
+
[rango] Static render complete: 2 done, 1 skipped (120ms total)
|
|
371
371
|
```
|
|
372
372
|
|
|
373
373
|
A `FAIL` line is logged per-URL when a handler throws a non-Skip error. The
|
|
@@ -463,9 +463,9 @@ export const Product = Passthrough(ProductDef, async (ctx) => {
|
|
|
463
463
|
Passthrough entries are logged distinctly:
|
|
464
464
|
|
|
465
465
|
```
|
|
466
|
-
[
|
|
467
|
-
[
|
|
468
|
-
[
|
|
466
|
+
[rango] OK /blog/a (42ms)
|
|
467
|
+
[rango] PASS /blog/b (3ms) - live fallback
|
|
468
|
+
[rango] OK /blog/c (38ms)
|
|
469
469
|
```
|
|
470
470
|
|
|
471
471
|
## Edge Cases and Constraints
|
package/skills/rango/SKILL.md
CHANGED
|
@@ -266,6 +266,15 @@ Each file is classified by its contents:
|
|
|
266
266
|
Directories are scanned recursively for `.ts`/`.tsx` files, skipping `node_modules`,
|
|
267
267
|
dotfiles, and existing `.gen.` files.
|
|
268
268
|
|
|
269
|
+
> The two generated files are **not interchangeable surfaces**.
|
|
270
|
+
> `router.named-routes.gen.ts` augments the global `GeneratedRouteMap` for
|
|
271
|
+
> named-route typing (`Handler<"name">`, `ctx.reverse("name")`, prerender).
|
|
272
|
+
> Per-module `*.gen.ts` exports a local `routes` map for `useReverse(routes)`
|
|
273
|
+
> and explicit local handler typing (`Handler<".name", routes>`). Neither
|
|
274
|
+
> carries response payloads — response/MIME payload inference comes from
|
|
275
|
+
> `typeof router.routeMap` via `RegisteredRoutes`, not `*.named-routes.gen.ts`.
|
|
276
|
+
> See `/typesafety` for the full surface breakdown.
|
|
277
|
+
|
|
269
278
|
### Recursive includes
|
|
270
279
|
|
|
271
280
|
The generator follows `include()` calls across files, resolving imports to build
|
|
@@ -238,7 +238,24 @@ type ProductsData = RouteResponse<typeof apiPatterns, "products">;
|
|
|
238
238
|
|
|
239
239
|
### PathResponse (global lookup by URL pattern)
|
|
240
240
|
|
|
241
|
-
|
|
241
|
+
`PathResponse` reads from `RegisteredRoutes`, which carries response payload
|
|
242
|
+
metadata. That surface is **not** auto-wired — without the augmentation below,
|
|
243
|
+
`PathResponse` falls back to the generated path/search map, or to a permissive
|
|
244
|
+
map when nothing is generated. Either way, it has no response payload metadata,
|
|
245
|
+
so response routes resolve to `ResponseEnvelope<never>`:
|
|
246
|
+
|
|
247
|
+
```typescript
|
|
248
|
+
// router.tsx
|
|
249
|
+
export const router = createRouter({ document: Document }).routes(urlpatterns);
|
|
250
|
+
|
|
251
|
+
declare global {
|
|
252
|
+
namespace Rango {
|
|
253
|
+
interface RegisteredRoutes extends typeof router.routeMap {}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
With that in place, look up the response type by URL pattern:
|
|
242
259
|
|
|
243
260
|
```typescript
|
|
244
261
|
import type { PathResponse } from "@rangojs/router/client";
|
|
@@ -252,6 +269,11 @@ type Home = PathResponse<"/">;
|
|
|
252
269
|
// = ResponseEnvelope<never>
|
|
253
270
|
```
|
|
254
271
|
|
|
272
|
+
For local/scoped response typing without global augmentation, prefer
|
|
273
|
+
`RouteResponse<typeof patterns, "routeName">` (see the section above) — it reads
|
|
274
|
+
the response payload straight from the `urls()` patterns and needs no
|
|
275
|
+
`RegisteredRoutes` wiring.
|
|
276
|
+
|
|
255
277
|
### ParamsFor with Response Routes
|
|
256
278
|
|
|
257
279
|
```typescript
|
|
@@ -363,11 +385,13 @@ export const urlpatterns = urls(({ path, include }) => [
|
|
|
363
385
|
import type { RouteResponse } from "@rangojs/router";
|
|
364
386
|
import type { PathResponse, ParamsFor } from "@rangojs/router/client";
|
|
365
387
|
|
|
366
|
-
// Scoped (before mount) -- use the module directly
|
|
388
|
+
// Scoped (before mount) -- use the module directly, no global wiring needed
|
|
367
389
|
type Stats = RouteResponse<typeof blogApiPatterns, "stats">;
|
|
368
390
|
// = ResponseEnvelope<{ views: number; visitors: number }>
|
|
369
391
|
|
|
370
|
-
// After mounting -- names get prefixed
|
|
392
|
+
// After mounting -- names get prefixed.
|
|
393
|
+
// PathResponse needs `RegisteredRoutes extends typeof router.routeMap` (see above),
|
|
394
|
+
// otherwise it resolves to ResponseEnvelope<never>.
|
|
371
395
|
type BlogStats = PathResponse<"/blog/api/stats">;
|
|
372
396
|
// = ResponseEnvelope<{ views: number; visitors: number }>
|
|
373
397
|
|
|
@@ -71,7 +71,7 @@ urls(
|
|
|
71
71
|
## Router Options
|
|
72
72
|
|
|
73
73
|
```typescript
|
|
74
|
-
interface
|
|
74
|
+
interface RangoOptions<TEnv> {
|
|
75
75
|
// URL patterns from urls() function
|
|
76
76
|
urls: UrlPatterns;
|
|
77
77
|
|
|
@@ -405,7 +405,7 @@ interface AppBindings {
|
|
|
405
405
|
KV: KVNamespace;
|
|
406
406
|
}
|
|
407
407
|
|
|
408
|
-
// Variables declared via
|
|
408
|
+
// Variables declared via global namespace augmentation
|
|
409
409
|
interface AppVariables {
|
|
410
410
|
user?: { id: string; name: string };
|
|
411
411
|
}
|
|
@@ -417,7 +417,7 @@ const router = createRouter<AppBindings>({
|
|
|
417
417
|
|
|
418
418
|
// Register types globally for implicit typing
|
|
419
419
|
declare global {
|
|
420
|
-
namespace
|
|
420
|
+
namespace Rango {
|
|
421
421
|
interface Env extends AppBindings {}
|
|
422
422
|
interface Vars extends AppVariables {}
|
|
423
423
|
}
|
|
@@ -37,7 +37,28 @@ available globally.
|
|
|
37
37
|
- `typeof router.routeMap` — the real merged route map from your router
|
|
38
38
|
instance, including response-route metadata such as `{ path, response }`.
|
|
39
39
|
- `RegisteredRoutes` — manual global hook for exposing `typeof router.routeMap`
|
|
40
|
-
to utilities
|
|
40
|
+
to global utilities that need the exact router-builder map, especially
|
|
41
|
+
`PathResponse`.
|
|
42
|
+
|
|
43
|
+
### Generated Route Type Surfaces
|
|
44
|
+
|
|
45
|
+
There are three distinct typing surfaces. They are **not** interchangeable —
|
|
46
|
+
pick the one that matches what you need to type:
|
|
47
|
+
|
|
48
|
+
| Surface | Source | Scope | Gives | Does not give |
|
|
49
|
+
| ------------------- | ---------------------------------------- | ------ | ---------------------------------------- | ------------------------------------------------------------------------------------------------ |
|
|
50
|
+
| `GeneratedRouteMap` | `router.named-routes.gen.ts` (auto) | global | route names, path params, search schemas | response/MIME payloads |
|
|
51
|
+
| `routes` | per-module `*.gen.ts` (`rango generate`) | local | local names, params, search | the global app map |
|
|
52
|
+
| `RegisteredRoutes` | manual `extends typeof router.routeMap` | global | paths, params, **response payloads** | the `Handler`/`Prerender` default (those read `GeneratedRouteMap` to avoid a `router.tsx` cycle) |
|
|
53
|
+
|
|
54
|
+
Key consequence: `href()` and `ValidPaths` are typed from whichever map is
|
|
55
|
+
present — they prefer `RegisteredRoutes` when you wire it, otherwise fall back to
|
|
56
|
+
the auto-generated `GeneratedRouteMap`, so **`rango generate` alone gives you
|
|
57
|
+
path-checked `href()`** with no manual augmentation. Response and MIME payload
|
|
58
|
+
inference is the exception: it comes only from `typeof router.routeMap` (via
|
|
59
|
+
`RegisteredRoutes`), because `GeneratedRouteMap` carries paths + search but no
|
|
60
|
+
payloads — so `PathResponse` resolves to `ResponseEnvelope<never>` until you wire
|
|
61
|
+
`RegisteredRoutes`.
|
|
41
62
|
|
|
42
63
|
Recommended setup:
|
|
43
64
|
|
|
@@ -50,7 +71,7 @@ import type { AppBindings, AppVars } from "./env";
|
|
|
50
71
|
export const router = createRouter<AppBindings>({}).routes(urlpatterns);
|
|
51
72
|
|
|
52
73
|
declare global {
|
|
53
|
-
namespace
|
|
74
|
+
namespace Rango {
|
|
54
75
|
interface Env extends AppBindings {}
|
|
55
76
|
interface Vars extends AppVars {}
|
|
56
77
|
interface RegisteredRoutes extends typeof router.routeMap {}
|
|
@@ -58,6 +79,54 @@ declare global {
|
|
|
58
79
|
}
|
|
59
80
|
```
|
|
60
81
|
|
|
82
|
+
### Single-App Setup Checklist
|
|
83
|
+
|
|
84
|
+
For one app, keep the ambient types, generated named-routes file, and router
|
|
85
|
+
instance in the same TypeScript program:
|
|
86
|
+
|
|
87
|
+
```jsonc
|
|
88
|
+
// tsconfig.json
|
|
89
|
+
{
|
|
90
|
+
"compilerOptions": {
|
|
91
|
+
"strict": true,
|
|
92
|
+
"moduleResolution": "bundler",
|
|
93
|
+
"jsx": "react-jsx",
|
|
94
|
+
"noEmit": true,
|
|
95
|
+
},
|
|
96
|
+
"include": ["src"],
|
|
97
|
+
"files": ["src/router.tsx"],
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Then generate the route types from the router file:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
npx rango generate src/router.tsx
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
This creates `src/router.named-routes.gen.ts`, which augments
|
|
108
|
+
`Rango.GeneratedRouteMap`. Keep that generated file committed with the router
|
|
109
|
+
source. The `files` entry keeps `router.tsx` in the program even when nothing
|
|
110
|
+
imports it directly, so `Rango.Env`, `Rango.Vars`, and optional
|
|
111
|
+
`Rango.RegisteredRoutes` augmentation are visible to handlers, loaders, actions,
|
|
112
|
+
and client helpers.
|
|
113
|
+
|
|
114
|
+
### Named Routes, `$$routeNames`, And `router.routeMap`
|
|
115
|
+
|
|
116
|
+
There are two runtime/type surfaces with similar names:
|
|
117
|
+
|
|
118
|
+
- `router.named-routes.gen.ts` exports `NamedRoutes` and augments
|
|
119
|
+
`Rango.GeneratedRouteMap`. The Vite plugin imports that file internally and
|
|
120
|
+
injects it as `$$routeNames` so `router.reverse` has the static route-name map.
|
|
121
|
+
App code should not pass or import `$$routeNames` directly.
|
|
122
|
+
- `router.routeMap` is the public router instance property for type extraction.
|
|
123
|
+
Use `typeof router.routeMap` when augmenting `Rango.RegisteredRoutes` for
|
|
124
|
+
global response payload helpers such as `PathResponse`.
|
|
125
|
+
|
|
126
|
+
Do not document or use a public `router.routeNames` API unless one is
|
|
127
|
+
intentionally added. Today, the public extraction surface is `router.routeMap`;
|
|
128
|
+
the generated file and `$$routeNames` are build machinery.
|
|
129
|
+
|
|
61
130
|
## Route Definition with Type-Safe Names
|
|
62
131
|
|
|
63
132
|
```typescript
|
|
@@ -127,12 +196,15 @@ function ShopNav() {
|
|
|
127
196
|
}
|
|
128
197
|
```
|
|
129
198
|
|
|
130
|
-
`href()` and
|
|
131
|
-
|
|
199
|
+
`href()` and `ValidPaths` read from `RegisteredRoutes` when you augment it,
|
|
200
|
+
otherwise from the auto-generated `GeneratedRouteMap` — so `rango generate` alone
|
|
201
|
+
type-checks `href()` paths with no manual augmentation. The augmentation below is
|
|
202
|
+
only needed for **`PathResponse`** (response-payload inference), which
|
|
203
|
+
`GeneratedRouteMap` cannot provide:
|
|
132
204
|
|
|
133
205
|
```typescript
|
|
134
206
|
declare global {
|
|
135
|
-
namespace
|
|
207
|
+
namespace Rango {
|
|
136
208
|
interface RegisteredRoutes extends typeof router.routeMap {}
|
|
137
209
|
}
|
|
138
210
|
}
|
|
@@ -155,7 +227,7 @@ export interface AppBindings {
|
|
|
155
227
|
AI: Ai;
|
|
156
228
|
}
|
|
157
229
|
|
|
158
|
-
// Variables set by middleware — declared via
|
|
230
|
+
// Variables set by middleware — declared via global namespace augmentation
|
|
159
231
|
export interface AppVariables {
|
|
160
232
|
user?: { id: string; email: string; role: string };
|
|
161
233
|
requestId?: string;
|
|
@@ -175,7 +247,7 @@ const router = createRouter<AppBindings>({
|
|
|
175
247
|
|
|
176
248
|
// Register bindings and variables globally for implicit typing
|
|
177
249
|
declare global {
|
|
178
|
-
namespace
|
|
250
|
+
namespace Rango {
|
|
179
251
|
interface Env extends AppBindings {}
|
|
180
252
|
interface Vars extends AppVariables {}
|
|
181
253
|
}
|
|
@@ -196,7 +268,7 @@ export const authMiddleware: Middleware = async (ctx, next) => {
|
|
|
196
268
|
// loaders - typed context
|
|
197
269
|
export const UserLoader = createLoader(async (ctx) => {
|
|
198
270
|
const db = ctx.env.DB; // D1Database (plain bindings)
|
|
199
|
-
const userId = ctx.get("user")?.id; // from
|
|
271
|
+
const userId = ctx.get("user")?.id; // from Rango.Vars
|
|
200
272
|
return db.prepare("SELECT * FROM users WHERE id = ?").bind(userId).first();
|
|
201
273
|
});
|
|
202
274
|
```
|
|
@@ -208,7 +280,7 @@ Register environment types globally for implicit typing:
|
|
|
208
280
|
```typescript
|
|
209
281
|
// router.tsx
|
|
210
282
|
declare global {
|
|
211
|
-
namespace
|
|
283
|
+
namespace Rango {
|
|
212
284
|
interface Env extends AppBindings {}
|
|
213
285
|
interface Vars extends AppVariables {}
|
|
214
286
|
}
|
|
@@ -220,8 +292,8 @@ Now handlers have typed context without explicit imports:
|
|
|
220
292
|
```typescript
|
|
221
293
|
// In loaders
|
|
222
294
|
export const DashboardLoader = createLoader(async (ctx) => {
|
|
223
|
-
// ctx.env.DB is typed from global
|
|
224
|
-
// ctx.get("user") is typed from global
|
|
295
|
+
// ctx.env.DB is typed from global Rango.Env
|
|
296
|
+
// ctx.get("user") is typed from global Rango.Vars
|
|
225
297
|
const user = ctx.get("user");
|
|
226
298
|
return { user };
|
|
227
299
|
});
|
|
@@ -259,15 +331,21 @@ This avoids circular references because `Handler` defaults to `GeneratedRouteMap
|
|
|
259
331
|
(from `router.named-routes.gen.ts`) instead of `RegisteredRoutes` (which depends on `router.tsx`).
|
|
260
332
|
|
|
261
333
|
You can also pass an explicit route map for per-module isolation (opt-in,
|
|
262
|
-
after running `npx rango generate`)
|
|
334
|
+
after running `npx rango generate`). With a local map, the route name is
|
|
335
|
+
**dot-prefixed** so params and search resolve from `routes`, not the global map:
|
|
263
336
|
|
|
264
337
|
```typescript
|
|
265
338
|
import type { Handler } from "@rangojs/router";
|
|
266
339
|
import type { routes } from "./urls.gen.js";
|
|
267
340
|
|
|
268
|
-
export const SearchPage: Handler<"search", routes> = (ctx) => { ... };
|
|
341
|
+
export const SearchPage: Handler<".search", routes> = (ctx) => { ... };
|
|
269
342
|
```
|
|
270
343
|
|
|
344
|
+
Note the difference: `Handler<"search">` (no dot) resolves against the global
|
|
345
|
+
`GeneratedRouteMap`; `Handler<".search", routes>` resolves against the local
|
|
346
|
+
`routes` map. Mixing them — `Handler<"search", routes>` — silently ignores
|
|
347
|
+
`routes` for param/search inference and only uses it for local `ctx.reverse(".x")`.
|
|
348
|
+
|
|
271
349
|
Supported types: `"string"`, `"number"`, `"boolean"`, with `?` suffix for optional.
|
|
272
350
|
Values are automatically coerced from query string (e.g., `"2"` becomes `2` for numbers).
|
|
273
351
|
Routes without a `search` schema keep the standard `URLSearchParams` behavior.
|
|
@@ -325,11 +403,18 @@ export const NamedRoutes = {
|
|
|
325
403
|
} as const;
|
|
326
404
|
```
|
|
327
405
|
|
|
328
|
-
You never open a `.gen.ts` by hand
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
406
|
+
You never open a `.gen.ts` by hand. Treat the generated types as call-site
|
|
407
|
+
honesty checks, not modules to read:
|
|
408
|
+
|
|
409
|
+
- **Do not import `router.named-routes.gen.ts` directly**, and don't reach for
|
|
410
|
+
`Rango.GeneratedRouteMap`. It is the whole-app manifest, auto-wired
|
|
411
|
+
globally — `Handler<"name">` and `ctx.reverse("name")` already see it.
|
|
412
|
+
- **Per-module `*.gen.ts` imports are fine** — they are the opt-in local-route
|
|
413
|
+
pattern for `useReverse(routes)` and explicit local handler typing
|
|
414
|
+
(`Handler<".name", routes>`). See `/links`.
|
|
415
|
+
|
|
416
|
+
If a type error points at a generated map instead of your call site, that's a
|
|
417
|
+
smell — fix the call site (or regenerate), never edit the generated file.
|
|
333
418
|
|
|
334
419
|
## Loader Type Safety
|
|
335
420
|
|
|
@@ -420,9 +505,9 @@ export function PaginationLayout(ctx: any) {
|
|
|
420
505
|
}
|
|
421
506
|
```
|
|
422
507
|
|
|
423
|
-
### Why not just use
|
|
508
|
+
### Why not just use Rango.Vars?
|
|
424
509
|
|
|
425
|
-
`
|
|
510
|
+
`Rango.Vars` (via global namespace augmentation) provides app-global typing for
|
|
426
511
|
`ctx.get("key")` / `ctx.set("key", value)`. It works for middleware state
|
|
427
512
|
shared app-wide. `createVar<T>()` is for route-local or feature-scoped
|
|
428
513
|
context -- the producer and consumer import the same token, creating a
|
|
@@ -570,9 +655,37 @@ function ProductHeader() {
|
|
|
570
655
|
|
|
571
656
|
## Multi-Project tsconfig Setup
|
|
572
657
|
|
|
573
|
-
For monorepos or multi-app setups,
|
|
574
|
-
|
|
575
|
-
|
|
658
|
+
For monorepos or multi-app setups, each app should have its own TypeScript
|
|
659
|
+
program. Do not typecheck two Rango apps with different `Rango.Env`,
|
|
660
|
+
`Rango.Vars`, or `Rango.RegisteredRoutes` declarations in one tsconfig, because
|
|
661
|
+
ambient global interfaces merge across the whole program.
|
|
662
|
+
|
|
663
|
+
### Multiple routers in one program
|
|
664
|
+
|
|
665
|
+
`Rango.GeneratedRouteMap` is a **single global interface**. Each router's
|
|
666
|
+
generated `router.named-routes.gen.ts` augments it, so two routers in the **same
|
|
667
|
+
TS program** that define overlapping route names (e.g. both have a `home`) make
|
|
668
|
+
the augmentations collide:
|
|
669
|
+
|
|
670
|
+
```text
|
|
671
|
+
Interface 'GeneratedRouteMap' cannot simultaneously extend ...
|
|
672
|
+
Named property 'home' ... are not identical.
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
This is the multi-router / host-router case. Resolve it by:
|
|
676
|
+
|
|
677
|
+
- **Separate TS programs** — give each router its own tsconfig (as below) so only
|
|
678
|
+
one generated map is in scope per program. Recommended.
|
|
679
|
+
- **Unique route-name prefixes** — name routes per router (`appA.home`,
|
|
680
|
+
`appB.home`) so the merged global map has no duplicate keys.
|
|
681
|
+
|
|
682
|
+
A single global generated map is a single-router convenience; global named-route
|
|
683
|
+
typing across multiple routers in one program is not supported today (it would
|
|
684
|
+
need per-router scoping in the generated map).
|
|
685
|
+
|
|
686
|
+
Use a shared base tsconfig for common compiler options, then make every app
|
|
687
|
+
tsconfig include its own source tree, its own `router.tsx`, and the generated
|
|
688
|
+
`router.named-routes.gen.ts` that lives beside that router.
|
|
576
689
|
|
|
577
690
|
```jsonc
|
|
578
691
|
// tsconfig.base.json (root)
|
|
@@ -611,10 +724,49 @@ global type declarations (like `RSCRouter.Env`).
|
|
|
611
724
|
}
|
|
612
725
|
```
|
|
613
726
|
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
727
|
+
Run generation per app:
|
|
728
|
+
|
|
729
|
+
```bash
|
|
730
|
+
npx rango generate apps/shop/src/router.tsx
|
|
731
|
+
npx rango generate apps/blog/src/router.tsx
|
|
732
|
+
```
|
|
733
|
+
|
|
734
|
+
If an app has multiple tsconfigs (`tsconfig.app.json`, `tsconfig.test.json`,
|
|
735
|
+
`tsconfig.worker.json`), every tsconfig that typechecks Rango handlers,
|
|
736
|
+
components, loaders, actions, or client navigation must see the same app-local
|
|
737
|
+
type surfaces:
|
|
738
|
+
|
|
739
|
+
```jsonc
|
|
740
|
+
// apps/shop/tsconfig.test.json
|
|
741
|
+
{
|
|
742
|
+
"extends": "./tsconfig.json",
|
|
743
|
+
"include": ["src", "tests"],
|
|
744
|
+
"files": ["src/router.tsx"],
|
|
745
|
+
}
|
|
746
|
+
```
|
|
747
|
+
|
|
748
|
+
The `files` array ensures `router.tsx` is always included even if nothing
|
|
749
|
+
directly imports it. The generated `router.named-routes.gen.ts` is normally
|
|
750
|
+
covered by `include: ["src"]`; if a tsconfig uses a narrow `include`, add the
|
|
751
|
+
generated file explicitly. Each app gets its own typed environment and named
|
|
752
|
+
route map without interfering with other apps.
|
|
753
|
+
|
|
754
|
+
For response and MIME payload lookup in each app, augment `RegisteredRoutes`
|
|
755
|
+
inside that app's router file:
|
|
756
|
+
|
|
757
|
+
```typescript
|
|
758
|
+
// apps/shop/src/router.tsx
|
|
759
|
+
export const router = createRouter<ShopEnv>({ document: Document }).routes(
|
|
760
|
+
urlpatterns,
|
|
761
|
+
);
|
|
762
|
+
|
|
763
|
+
declare global {
|
|
764
|
+
namespace Rango {
|
|
765
|
+
interface Env extends ShopEnv {}
|
|
766
|
+
interface RegisteredRoutes extends typeof router.routeMap {}
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
```
|
|
618
770
|
|
|
619
771
|
## Complete Type-Safe Setup
|
|
620
772
|
|
|
@@ -650,7 +802,7 @@ const router = createRouter<AppBindings>({
|
|
|
650
802
|
|
|
651
803
|
// Register bindings and variables globally for implicit typing
|
|
652
804
|
declare global {
|
|
653
|
-
namespace
|
|
805
|
+
namespace Rango {
|
|
654
806
|
interface Env extends AppBindings {}
|
|
655
807
|
interface Vars extends AppVariables {}
|
|
656
808
|
}
|
|
@@ -661,13 +813,16 @@ export default router;
|
|
|
661
813
|
|
|
662
814
|
// 4. Run `npx rango generate src/router.tsx` to generate
|
|
663
815
|
// router.named-routes.gen.ts (auto-registers GeneratedRouteMap globally).
|
|
664
|
-
// No manual RegisteredRoutes declaration needed
|
|
816
|
+
// No manual RegisteredRoutes declaration is needed for named-route handlers,
|
|
817
|
+
// ctx.reverse, prerender, href(), or ValidPaths. Add `RegisteredRoutes
|
|
818
|
+
// extends typeof router.routeMap` when global response payload helpers such
|
|
819
|
+
// as PathResponse need the richer router.routeMap metadata.
|
|
665
820
|
|
|
666
821
|
// 5. loaders/*.ts - Type-safe loaders
|
|
667
822
|
export const ProductLoader = createLoader(async (ctx) => {
|
|
668
823
|
// ctx.params: { slug: string }
|
|
669
|
-
// ctx.get("user"): User | undefined (from
|
|
670
|
-
// ctx.env.DB: D1Database (plain bindings from
|
|
824
|
+
// ctx.get("user"): User | undefined (from Rango.Vars)
|
|
825
|
+
// ctx.env.DB: D1Database (plain bindings from Rango.Env)
|
|
671
826
|
return { product: await fetchProduct(ctx.params.slug) };
|
|
672
827
|
});
|
|
673
828
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simulates a consumer augmenting the Rango global namespace, the way a real
|
|
3
|
+
* app does in router.tsx (Env/Vars) and via the generated router.named-routes.gen.ts
|
|
4
|
+
* (GeneratedRouteMap).
|
|
5
|
+
*
|
|
6
|
+
* This file is compiled ONLY by tsconfig.augment-check.json and is excluded from
|
|
7
|
+
* the main program, so the global augmentation here does not leak into the rest
|
|
8
|
+
* of the type tests, which assert the UNAUGMENTED fallbacks
|
|
9
|
+
* (see src/__tests__/augmentation-fallback-types.test.ts).
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export interface TestBindings {
|
|
13
|
+
DB: { query: (sql: string) => string };
|
|
14
|
+
SECRET: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface TestVars {
|
|
18
|
+
user?: { id: string; role: "admin" | "user" };
|
|
19
|
+
requestId?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
declare global {
|
|
23
|
+
namespace Rango {
|
|
24
|
+
interface Env extends TestBindings {}
|
|
25
|
+
interface Vars extends TestVars {}
|
|
26
|
+
// Mirrors the shape emitted into router.named-routes.gen.ts: plain string
|
|
27
|
+
// patterns, plus { path, search } objects for routes with a search schema.
|
|
28
|
+
interface GeneratedRouteMap {
|
|
29
|
+
readonly home: "/";
|
|
30
|
+
readonly "blog.post": "/blog/:slug";
|
|
31
|
+
readonly search: {
|
|
32
|
+
readonly path: "/search";
|
|
33
|
+
readonly search: { readonly q: "string"; readonly page: "number?" };
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compile-only assertions for the AUGMENTED Rango namespace.
|
|
3
|
+
*
|
|
4
|
+
* Pins the type-safety contract a consumer gets after augmenting Env, Vars, and
|
|
5
|
+
* GeneratedRouteMap. A regression in the fallback chains (global-namespace.ts)
|
|
6
|
+
* turns these into tsc errors. Run via tsconfig.augment-check.json.
|
|
7
|
+
*/
|
|
8
|
+
import "./augment.js";
|
|
9
|
+
import type { Handler, RouteParams, RouteSearchParams } from "../index.js";
|
|
10
|
+
import type { DefaultRouteName } from "../types/global-namespace.js";
|
|
11
|
+
import { href } from "../href-client.js";
|
|
12
|
+
import type { TestBindings } from "./augment.js";
|
|
13
|
+
|
|
14
|
+
type Expect<T extends true> = T;
|
|
15
|
+
type Equal<A, B> =
|
|
16
|
+
(<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2
|
|
17
|
+
? true
|
|
18
|
+
: false;
|
|
19
|
+
|
|
20
|
+
// Env: ctx.env resolves to the augmented bindings, not `unknown`/`any`.
|
|
21
|
+
const envHandler: Handler<"home"> = (ctx) => {
|
|
22
|
+
type _envIsBindings = Expect<Equal<typeof ctx.env, TestBindings>>;
|
|
23
|
+
ctx.env.DB.query("select 1");
|
|
24
|
+
// @ts-expect-error - unknown binding is rejected once Env is augmented
|
|
25
|
+
ctx.env.MISSING();
|
|
26
|
+
return null;
|
|
27
|
+
};
|
|
28
|
+
void envHandler;
|
|
29
|
+
|
|
30
|
+
// Vars: ctx.get is keyed by the augmented Vars.
|
|
31
|
+
const varsHandler: Handler<"home"> = (ctx) => {
|
|
32
|
+
const user = ctx.get("user");
|
|
33
|
+
type _userTyped = Expect<
|
|
34
|
+
Equal<typeof user, { id: string; role: "admin" | "user" } | undefined>
|
|
35
|
+
>;
|
|
36
|
+
// @ts-expect-error - unknown var key is rejected once Vars is augmented
|
|
37
|
+
ctx.get("nope");
|
|
38
|
+
return null;
|
|
39
|
+
};
|
|
40
|
+
void varsHandler;
|
|
41
|
+
|
|
42
|
+
// routeName narrows to the generated route names.
|
|
43
|
+
type _routeName = Expect<
|
|
44
|
+
Equal<DefaultRouteName, "home" | "blog.post" | "search">
|
|
45
|
+
>;
|
|
46
|
+
|
|
47
|
+
// RouteParams / RouteSearchParams resolve from the generated map with no
|
|
48
|
+
// explicit route map argument.
|
|
49
|
+
type _params = Expect<Equal<RouteParams<"blog.post">, { slug: string }>>;
|
|
50
|
+
type _search = Expect<
|
|
51
|
+
Equal<RouteSearchParams<"search">, { q: string | undefined; page?: number }>
|
|
52
|
+
>;
|
|
53
|
+
|
|
54
|
+
// href / ValidPaths read GeneratedRouteMap even without a manual RegisteredRoutes
|
|
55
|
+
// augmentation — this is the core of the "rango generate alone enables typed
|
|
56
|
+
// href()" guarantee. The paths below come from the generated map in augment.ts.
|
|
57
|
+
href("/");
|
|
58
|
+
href("/blog/anything");
|
|
59
|
+
href("/search");
|
|
60
|
+
// @ts-expect-error - path is not in the generated route map
|
|
61
|
+
href("/not-a-route");
|
|
62
|
+
|
|
63
|
+
// Reference the top-level assertion aliases so they are unambiguously evaluated.
|
|
64
|
+
export type _Assertions = [_routeName, _params, _search];
|
package/src/browser/index.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// ============================================================================
|
|
2
|
-
// Browser Module - Browser entry point for
|
|
2
|
+
// Browser Module - Browser entry point for Rango
|
|
3
3
|
// ============================================================================
|
|
4
4
|
//
|
|
5
5
|
// Usage:
|
|
6
|
-
// import { initBrowserApp,
|
|
6
|
+
// import { initBrowserApp, Rango } from "rsc-router/browser";
|
|
7
7
|
//
|
|
8
8
|
// For React components (Link, useNavigation, etc.):
|
|
9
9
|
// import { Link, useNavigation, useAction, href } from "rsc-router/client";
|
|
@@ -13,6 +13,6 @@
|
|
|
13
13
|
// Browser app initialization
|
|
14
14
|
export {
|
|
15
15
|
initBrowserApp,
|
|
16
|
-
|
|
16
|
+
Rango,
|
|
17
17
|
type InitBrowserAppOptions,
|
|
18
18
|
} from "./rsc-router.js";
|
|
@@ -125,7 +125,7 @@ export function createLocationState<TState>(
|
|
|
125
125
|
function getKey(): string {
|
|
126
126
|
if (!_key && process.env.NODE_ENV === "development") {
|
|
127
127
|
throw new Error(
|
|
128
|
-
"[
|
|
128
|
+
"[rango] createLocationState key not set. " +
|
|
129
129
|
"Make sure the exposeInternalIds Vite plugin is enabled and " +
|
|
130
130
|
"the state is exported with: export const MyState = createLocationState(...)",
|
|
131
131
|
);
|
|
@@ -176,7 +176,7 @@ export function createLocationState<TState>(
|
|
|
176
176
|
value: (value: TState): void => {
|
|
177
177
|
if (typeof window === "undefined") {
|
|
178
178
|
throw new Error(
|
|
179
|
-
"[
|
|
179
|
+
"[rango] LocationState.write() is client-only. " +
|
|
180
180
|
"It mutates window.history.state and cannot run on the server.",
|
|
181
181
|
);
|
|
182
182
|
}
|
|
@@ -195,7 +195,7 @@ export function createLocationState<TState>(
|
|
|
195
195
|
value: (): void => {
|
|
196
196
|
if (typeof window === "undefined") {
|
|
197
197
|
throw new Error(
|
|
198
|
-
"[
|
|
198
|
+
"[rango] LocationState.delete() is client-only. " +
|
|
199
199
|
"It mutates window.history.state and cannot run on the server.",
|
|
200
200
|
);
|
|
201
201
|
}
|