@rangojs/router 0.0.0-experimental.13 → 0.0.0-experimental.135c6902
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 +9 -0
- package/README.md +884 -4
- 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 +1531 -212
- 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/{src/href-context.ts → dist/href-context.d.ts} +7 -11
- 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 +3995 -2489
- package/dist/vite/index.js.map +1 -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/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +57 -52
- package/skills/breadcrumbs/SKILL.md +250 -0
- package/skills/cache-guide/SKILL.md +262 -0
- package/skills/caching/SKILL.md +85 -23
- package/skills/composability/SKILL.md +172 -0
- package/skills/debug-manifest/SKILL.md +12 -8
- package/skills/document-cache/SKILL.md +18 -16
- package/skills/fonts/SKILL.md +6 -4
- package/skills/hooks/SKILL.md +328 -70
- package/skills/host-router/SKILL.md +218 -0
- package/skills/intercept/SKILL.md +131 -8
- package/skills/layout/SKILL.md +100 -3
- package/skills/links/SKILL.md +62 -15
- package/skills/loader/SKILL.md +368 -42
- package/skills/middleware/SKILL.md +171 -34
- package/skills/mime-routes/SKILL.md +14 -10
- package/skills/parallel/SKILL.md +137 -1
- package/skills/prerender/SKILL.md +366 -28
- package/skills/rango/SKILL.md +85 -21
- package/skills/response-routes/SKILL.md +136 -83
- package/skills/route/SKILL.md +195 -21
- package/skills/router-setup/SKILL.md +123 -30
- package/skills/theme/SKILL.md +9 -8
- package/skills/typesafety/SKILL.md +240 -102
- package/skills/use-cache/SKILL.md +324 -0
- package/src/__internal.ts +102 -4
- package/src/bin/rango.ts +312 -15
- package/src/browser/action-coordinator.ts +97 -0
- package/src/browser/action-response-classifier.ts +99 -0
- package/src/browser/event-controller.ts +92 -64
- package/src/browser/history-state.ts +80 -0
- package/src/browser/intercept-utils.ts +52 -0
- package/src/browser/link-interceptor.ts +24 -4
- package/src/browser/logging.ts +11 -0
- package/src/browser/merge-segment-loaders.ts +20 -12
- package/src/browser/navigation-bridge.ts +266 -558
- package/src/browser/navigation-client.ts +132 -75
- package/src/browser/navigation-store.ts +33 -50
- package/src/browser/navigation-transaction.ts +297 -0
- package/src/browser/network-error-handler.ts +61 -0
- package/src/browser/partial-update.ts +292 -309
- package/src/browser/prefetch/cache.ts +206 -0
- package/src/browser/prefetch/fetch.ts +144 -0
- package/src/browser/prefetch/observer.ts +65 -0
- package/src/browser/prefetch/policy.ts +48 -0
- package/src/browser/prefetch/queue.ts +128 -0
- package/src/browser/rango-state.ts +112 -0
- package/src/browser/react/Link.tsx +190 -70
- package/src/browser/react/NavigationProvider.tsx +78 -11
- package/src/browser/react/context.ts +6 -0
- package/src/browser/react/filter-segment-order.ts +11 -0
- package/src/browser/react/index.ts +12 -12
- package/src/browser/react/location-state-shared.ts +95 -53
- package/src/browser/react/location-state.ts +60 -15
- package/src/browser/react/mount-context.ts +6 -1
- package/src/browser/react/nonce-context.ts +23 -0
- package/src/browser/react/shallow-equal.ts +27 -0
- package/src/browser/react/use-action.ts +29 -51
- package/src/browser/react/use-client-cache.ts +5 -3
- package/src/browser/react/use-handle.ts +29 -70
- package/src/browser/react/use-link-status.ts +6 -5
- package/src/browser/react/use-navigation.ts +22 -63
- package/src/browser/react/use-params.ts +65 -0
- package/src/browser/react/use-pathname.ts +47 -0
- package/src/browser/react/use-router.ts +63 -0
- package/src/browser/react/use-search-params.ts +56 -0
- package/src/browser/react/use-segments.ts +80 -97
- package/src/browser/response-adapter.ts +73 -0
- package/src/browser/rsc-router.tsx +188 -57
- package/src/browser/scroll-restoration.ts +117 -44
- package/src/browser/segment-reconciler.ts +221 -0
- package/src/browser/segment-structure-assert.ts +16 -0
- package/src/browser/server-action-bridge.ts +488 -606
- package/src/browser/shallow.ts +6 -1
- package/src/browser/types.ts +116 -47
- package/src/browser/validate-redirect-origin.ts +29 -0
- package/src/build/generate-manifest.ts +63 -21
- package/src/build/generate-route-types.ts +36 -1038
- package/src/build/index.ts +2 -5
- package/src/build/route-trie.ts +38 -12
- package/src/build/route-types/ast-helpers.ts +25 -0
- package/src/build/route-types/ast-route-extraction.ts +98 -0
- package/src/build/route-types/codegen.ts +102 -0
- package/src/build/route-types/include-resolution.ts +411 -0
- package/src/build/route-types/param-extraction.ts +48 -0
- package/src/build/route-types/per-module-writer.ts +128 -0
- package/src/build/route-types/router-processing.ts +479 -0
- package/src/build/route-types/scan-filter.ts +78 -0
- package/src/build/runtime-discovery.ts +231 -0
- package/src/cache/background-task.ts +34 -0
- package/src/cache/cache-key-utils.ts +44 -0
- package/src/cache/cache-policy.ts +125 -0
- package/src/cache/cache-runtime.ts +338 -0
- package/src/cache/cache-scope.ts +122 -303
- package/src/cache/cf/cf-cache-store.ts +571 -17
- package/src/cache/cf/index.ts +13 -3
- package/src/cache/document-cache.ts +116 -77
- package/src/cache/handle-capture.ts +81 -0
- package/src/cache/handle-snapshot.ts +41 -0
- package/src/cache/index.ts +1 -15
- package/src/cache/memory-segment-store.ts +191 -13
- package/src/cache/profile-registry.ts +73 -0
- package/src/cache/read-through-swr.ts +134 -0
- package/src/cache/segment-codec.ts +256 -0
- package/src/cache/taint.ts +98 -0
- package/src/cache/types.ts +72 -122
- package/src/client.rsc.tsx +3 -1
- package/src/client.tsx +84 -126
- package/src/component-utils.ts +4 -4
- package/src/components/DefaultDocument.tsx +5 -1
- package/src/context-var.ts +86 -0
- package/src/debug.ts +19 -9
- package/src/errors.ts +77 -7
- package/src/handle.ts +12 -7
- package/src/handles/MetaTags.tsx +73 -20
- package/src/handles/breadcrumbs.ts +66 -0
- package/src/handles/index.ts +1 -0
- package/src/handles/meta.ts +30 -13
- package/src/host/cookie-handler.ts +21 -15
- package/src/host/errors.ts +8 -8
- package/src/host/index.ts +4 -7
- package/src/host/pattern-matcher.ts +27 -27
- package/src/host/router.ts +61 -39
- package/src/host/testing.ts +8 -8
- package/src/host/types.ts +15 -7
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +65 -45
- package/src/index.rsc.ts +104 -40
- package/src/index.ts +122 -67
- package/src/internal-debug.ts +9 -3
- package/src/loader.rsc.ts +18 -93
- package/src/loader.ts +26 -9
- package/src/network-error-thrower.tsx +3 -1
- package/src/outlet-provider.tsx +45 -0
- package/src/prerender/param-hash.ts +4 -2
- package/src/prerender/store.ts +121 -17
- package/src/prerender.ts +325 -20
- package/src/reverse.ts +144 -124
- package/src/root-error-boundary.tsx +41 -29
- package/src/route-content-wrapper.tsx +7 -4
- package/src/route-definition/dsl-helpers.ts +959 -0
- package/src/route-definition/helper-factories.ts +200 -0
- package/src/route-definition/helpers-types.ts +430 -0
- package/src/route-definition/index.ts +52 -0
- package/src/route-definition/redirect.ts +93 -0
- package/src/route-definition.ts +1 -1450
- package/src/route-map-builder.ts +87 -133
- package/src/route-name.ts +53 -0
- package/src/route-types.ts +41 -6
- package/src/router/content-negotiation.ts +116 -0
- package/src/router/debug-manifest.ts +72 -0
- package/src/router/error-handling.ts +9 -9
- package/src/router/find-match.ts +160 -0
- package/src/router/handler-context.ts +324 -116
- package/src/router/intercept-resolution.ts +11 -4
- package/src/router/lazy-includes.ts +237 -0
- package/src/router/loader-resolution.ts +179 -133
- package/src/router/logging.ts +112 -6
- package/src/router/manifest.ts +58 -19
- package/src/router/match-api.ts +89 -88
- package/src/router/match-context.ts +4 -2
- package/src/router/match-handlers.ts +440 -0
- package/src/router/match-middleware/background-revalidation.ts +84 -89
- package/src/router/match-middleware/cache-lookup.ts +261 -48
- package/src/router/match-middleware/cache-store.ts +54 -13
- package/src/router/match-middleware/intercept-resolution.ts +45 -22
- package/src/router/match-middleware/segment-resolution.ts +20 -9
- package/src/router/match-pipelines.ts +10 -45
- package/src/router/match-result.ts +34 -17
- package/src/router/metrics.ts +235 -15
- package/src/router/middleware-cookies.ts +55 -0
- package/src/router/middleware-types.ts +222 -0
- package/src/router/middleware.ts +327 -369
- package/src/router/pattern-matching.ts +169 -31
- package/src/router/prerender-match.ts +402 -0
- package/src/router/preview-match.ts +170 -0
- package/src/router/revalidation.ts +105 -14
- package/src/router/router-context.ts +40 -21
- package/src/router/router-interfaces.ts +452 -0
- package/src/router/router-options.ts +592 -0
- package/src/router/router-registry.ts +24 -0
- package/src/router/segment-resolution/fresh.ts +656 -0
- package/src/router/segment-resolution/helpers.ts +263 -0
- package/src/router/segment-resolution/loader-cache.ts +199 -0
- package/src/router/segment-resolution/revalidation.ts +1277 -0
- package/src/router/segment-resolution/static-store.ts +67 -0
- package/src/router/segment-resolution.ts +21 -1354
- package/src/router/segment-wrappers.ts +291 -0
- package/src/router/telemetry-otel.ts +299 -0
- package/src/router/telemetry.ts +300 -0
- package/src/router/timeout.ts +148 -0
- package/src/router/trie-matching.ts +96 -29
- package/src/router/types.ts +15 -9
- package/src/router.ts +642 -2366
- package/src/rsc/handler-context.ts +45 -0
- package/src/rsc/handler.ts +646 -1027
- package/src/rsc/helpers.ts +140 -6
- package/src/rsc/index.ts +0 -20
- package/src/rsc/loader-fetch.ts +209 -0
- package/src/rsc/manifest-init.ts +86 -0
- package/src/rsc/nonce.ts +14 -0
- package/src/rsc/origin-guard.ts +141 -0
- package/src/rsc/progressive-enhancement.ts +379 -0
- package/src/rsc/response-error.ts +37 -0
- package/src/rsc/response-route-handler.ts +347 -0
- package/src/rsc/rsc-rendering.ts +237 -0
- package/src/rsc/runtime-warnings.ts +42 -0
- package/src/rsc/server-action.ts +348 -0
- package/src/rsc/ssr-setup.ts +128 -0
- package/src/rsc/types.ts +38 -11
- package/src/search-params.ts +66 -54
- package/src/segment-system.tsx +165 -17
- package/src/server/context.ts +237 -54
- package/src/server/cookie-store.ts +190 -0
- package/src/server/fetchable-loader-store.ts +11 -6
- package/src/server/handle-store.ts +94 -15
- package/src/server/loader-registry.ts +15 -56
- package/src/server/request-context.ts +438 -71
- package/src/server.ts +26 -164
- package/src/ssr/index.tsx +101 -31
- package/src/static-handler.ts +22 -4
- package/src/theme/ThemeProvider.tsx +21 -15
- package/src/theme/ThemeScript.tsx +5 -5
- package/src/theme/constants.ts +5 -2
- package/src/theme/index.ts +4 -14
- package/src/theme/theme-context.ts +4 -30
- package/src/theme/theme-script.ts +21 -18
- package/src/types/boundaries.ts +158 -0
- package/src/types/cache-types.ts +198 -0
- package/src/types/error-types.ts +192 -0
- package/src/types/global-namespace.ts +100 -0
- package/src/types/handler-context.ts +687 -0
- package/src/types/index.ts +88 -0
- package/src/types/loader-types.ts +183 -0
- package/src/types/route-config.ts +170 -0
- package/src/types/route-entry.ts +109 -0
- package/src/types/segments.ts +150 -0
- package/src/types.ts +1 -1795
- package/src/urls/include-helper.ts +197 -0
- package/src/urls/index.ts +53 -0
- package/src/urls/path-helper-types.ts +339 -0
- package/src/urls/path-helper.ts +329 -0
- package/src/urls/pattern-types.ts +95 -0
- package/src/urls/response-types.ts +106 -0
- package/src/urls/type-extraction.ts +372 -0
- package/src/urls/urls-function.ts +98 -0
- package/src/urls.ts +1 -1323
- package/src/use-loader.tsx +85 -77
- package/src/vite/discovery/bundle-postprocess.ts +184 -0
- package/src/vite/discovery/discover-routers.ts +344 -0
- package/src/vite/discovery/prerender-collection.ts +385 -0
- package/src/vite/discovery/route-types-writer.ts +258 -0
- package/src/vite/discovery/self-gen-tracking.ts +47 -0
- package/src/vite/discovery/state.ts +108 -0
- package/src/vite/discovery/virtual-module-codegen.ts +203 -0
- package/src/vite/index.ts +11 -2259
- package/src/vite/plugin-types.ts +48 -0
- package/src/vite/plugins/cjs-to-esm.ts +93 -0
- package/src/vite/plugins/client-ref-dedup.ts +115 -0
- package/src/vite/plugins/client-ref-hashing.ts +105 -0
- package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +72 -47
- package/src/vite/{expose-id-utils.ts → plugins/expose-id-utils.ts} +8 -43
- package/src/vite/plugins/expose-ids/export-analysis.ts +296 -0
- package/src/vite/plugins/expose-ids/handler-transform.ts +179 -0
- package/src/vite/plugins/expose-ids/loader-transform.ts +74 -0
- package/src/vite/plugins/expose-ids/router-transform.ts +110 -0
- package/src/vite/plugins/expose-ids/types.ts +45 -0
- package/src/vite/plugins/expose-internal-ids.ts +569 -0
- package/src/vite/plugins/refresh-cmd.ts +65 -0
- package/src/vite/plugins/use-cache-transform.ts +323 -0
- package/src/vite/plugins/version-injector.ts +83 -0
- package/src/vite/plugins/version-plugin.ts +266 -0
- package/src/vite/plugins/virtual-entries.ts +123 -0
- package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
- package/src/vite/rango.ts +445 -0
- package/src/vite/router-discovery.ts +777 -0
- package/src/vite/{ast-handler-extract.ts → utils/ast-handler-extract.ts} +181 -9
- package/src/vite/utils/banner.ts +36 -0
- package/src/vite/utils/bundle-analysis.ts +137 -0
- package/src/vite/utils/manifest-utils.ts +70 -0
- package/src/vite/{package-resolution.ts → utils/package-resolution.ts} +25 -29
- package/src/vite/utils/prerender-utils.ts +189 -0
- package/src/vite/utils/shared-utils.ts +169 -0
- package/CLAUDE.md +0 -43
- package/src/browser/lru-cache.ts +0 -69
- package/src/browser/request-controller.ts +0 -164
- package/src/cache/memory-store.ts +0 -253
- package/src/router.gen.ts +0 -6
- package/src/static-handler.gen.ts +0 -5
- package/src/urls.gen.ts +0 -8
- package/src/vite/expose-internal-ids.ts +0 -1167
- /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
|
@@ -11,6 +11,9 @@ deserialization path, same segment system. The worker handles every request --
|
|
|
11
11
|
there are NO static .html or .rsc files served from assets. The worker reads
|
|
12
12
|
pre-computed Flight payloads instead of executing handler code.
|
|
13
13
|
|
|
14
|
+
Canonical semantics reference:
|
|
15
|
+
[docs/execution-model.md](../../docs/internal/execution-model.md)
|
|
16
|
+
|
|
14
17
|
## API: Prerender
|
|
15
18
|
|
|
16
19
|
### Static Route (no params)
|
|
@@ -61,7 +64,7 @@ export const ProductPage = Prerender(
|
|
|
61
64
|
const product = await db.query("SELECT * FROM products WHERE id = ?", ctx.params.id);
|
|
62
65
|
return <Product data={product} />;
|
|
63
66
|
},
|
|
64
|
-
{ passthrough: true }
|
|
67
|
+
{ passthrough: true, concurrency: 4 }
|
|
65
68
|
);
|
|
66
69
|
```
|
|
67
70
|
|
|
@@ -69,22 +72,25 @@ export const ProductPage = Prerender(
|
|
|
69
72
|
|
|
70
73
|
Controls whether the handler stays in the RSC server bundle after build:
|
|
71
74
|
|
|
72
|
-
|
|
|
73
|
-
|
|
74
|
-
| Known params
|
|
75
|
-
| Unknown params
|
|
76
|
-
|
|
|
77
|
-
|
|
|
78
|
-
| `
|
|
75
|
+
| | `passthrough: false` (default) | `passthrough: true` |
|
|
76
|
+
| ------------------- | --------------------------------------- | --------------------------------------- |
|
|
77
|
+
| Known params | Served from pre-rendered Flight payload | Served from pre-rendered Flight payload |
|
|
78
|
+
| Unknown params | Handler evicted, no live fallback | Handler runs live at request time |
|
|
79
|
+
| `ctx.passthrough()` | Throws (not allowed) | Skips artifact, defers to live fallback |
|
|
80
|
+
| Bundle size | Handler code + imports removed | Handler code kept in RSC bundle |
|
|
81
|
+
| `revalidate()` | Not allowed (handler gone) | Allowed (handler can re-render) |
|
|
82
|
+
| `loading()` | Ignored (segments fully resolved) | Works for live fallback renders |
|
|
79
83
|
|
|
80
84
|
### When to use passthrough
|
|
81
85
|
|
|
82
86
|
Use `passthrough: true` when:
|
|
87
|
+
|
|
83
88
|
- The route has a large or open-ended param space (e.g., user profiles, product pages)
|
|
84
89
|
- You want to pre-render popular/known params for speed but still serve unknown params live
|
|
85
90
|
- You need `revalidate()` on the route
|
|
86
91
|
|
|
87
92
|
Use `passthrough: false` (default) when:
|
|
93
|
+
|
|
88
94
|
- All possible params are known at build time (e.g., markdown files, config-driven pages)
|
|
89
95
|
- You want maximum bundle size reduction (handler code + node:fs imports removed)
|
|
90
96
|
- The route uses build-only APIs (node:fs, local files) not available at runtime
|
|
@@ -95,18 +101,56 @@ Handlers receive `BuildContext` at build time, a subset of the runtime `HandlerC
|
|
|
95
101
|
|
|
96
102
|
```typescript
|
|
97
103
|
interface BuildContext<TParams> {
|
|
98
|
-
params: TParams;
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
104
|
+
params: TParams; // From getParams
|
|
105
|
+
build: true; // Always true at build time
|
|
106
|
+
use: <T>(handle: Handle<T>) => (data: T) => void; // Push handle data
|
|
107
|
+
url: URL; // Synthetic URL from pattern + params
|
|
108
|
+
pathname: string; // Pathname from synthetic URL
|
|
109
|
+
set(key: string, value: any): void; // Set context variable (string key)
|
|
110
|
+
set<T>(contextVar: ContextVar<T>, value: T): void; // Set typed context variable
|
|
111
|
+
get(key: string): any; // Read context variable (string key)
|
|
112
|
+
get<T>(contextVar: ContextVar<T>): T | undefined; // Read typed context variable
|
|
113
|
+
reverse(
|
|
114
|
+
name: string,
|
|
115
|
+
params?: Record<string, string>,
|
|
116
|
+
search?: Record<string, unknown>,
|
|
117
|
+
): string; // URL generation
|
|
118
|
+
passthrough(): PrerenderPassthroughResult; // Skip local artifact (passthrough routes only)
|
|
102
119
|
// NOT available: req, headers, cookies, env (throws descriptive errors)
|
|
103
120
|
}
|
|
104
121
|
```
|
|
105
122
|
|
|
123
|
+
Use `createVar<T>()` to share typed data from a Prerender handler to child layouts:
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
import { Prerender, createVar } from "@rangojs/router";
|
|
127
|
+
|
|
128
|
+
interface PaginationData { current: number; total: number; }
|
|
129
|
+
export const Pagination = createVar<PaginationData>();
|
|
130
|
+
|
|
131
|
+
export const ArticleList = Prerender<{ page: string }>(
|
|
132
|
+
async () => [{ page: "1" }, { page: "2" }],
|
|
133
|
+
async (ctx) => {
|
|
134
|
+
ctx.set(Pagination, { current: Number(ctx.params.page), total: 2 });
|
|
135
|
+
return <Articles />;
|
|
136
|
+
},
|
|
137
|
+
);
|
|
138
|
+
```
|
|
139
|
+
|
|
106
140
|
All items inside the path's use() callback (child layouts, parallels) also receive
|
|
107
141
|
`BuildContext` during pre-rendering. Loaders are the exception -- they run at
|
|
108
142
|
request time with full server context.
|
|
109
143
|
|
|
144
|
+
This is one reason prerender is a good fit for handler-first composition:
|
|
145
|
+
the handler and its child layouts/parallels participate in the same full
|
|
146
|
+
render pass, so data set with `ctx.set()` is available downstream via
|
|
147
|
+
`ctx.get()`.
|
|
148
|
+
|
|
149
|
+
At runtime, partial action revalidation follows a narrower rule: only
|
|
150
|
+
revalidated segments are recomputed. If a child segment depends on data
|
|
151
|
+
established by an outer handler/layout, that outer segment must also be
|
|
152
|
+
revalidated, or the child must load/guard the data independently.
|
|
153
|
+
|
|
110
154
|
## Supported Export Patterns
|
|
111
155
|
|
|
112
156
|
All of the following are equivalent and fully supported by the Vite transform:
|
|
@@ -140,7 +184,10 @@ In production builds, `Prerender` exports are replaced with stubs:
|
|
|
140
184
|
export const BlogPost = Prerender(getParams, handler);
|
|
141
185
|
|
|
142
186
|
// Stubbed (ships to server bundle when passthrough: false)
|
|
143
|
-
export const BlogPost = {
|
|
187
|
+
export const BlogPost = {
|
|
188
|
+
__brand: "prerenderHandler",
|
|
189
|
+
$$id: "abc123#BlogPost",
|
|
190
|
+
};
|
|
144
191
|
```
|
|
145
192
|
|
|
146
193
|
The original module and its imports (node:fs, markdown libs) are excluded from
|
|
@@ -181,22 +228,36 @@ path("/blog/:slug", BlogPost, { name: "blog.post" }, () => [
|
|
|
181
228
|
|
|
182
229
|
## Interaction with DSL Items
|
|
183
230
|
|
|
184
|
-
| DSL item | Behavior with Prerender
|
|
185
|
-
|
|
186
|
-
| `loader()` | Live at runtime, bundled normally. Use `cache()` for caching.
|
|
187
|
-
| `revalidate()` | Not allowed without passthrough. Allowed with passthrough.
|
|
188
|
-
| `cache()` | Orthogonal -- use on parent layouts and loaders.
|
|
189
|
-
| `layout()` | Child layouts inside path are pre-rendered. Parent layouts are live.
|
|
190
|
-
| `parallel()` | Parallel slots inside path are pre-rendered.
|
|
191
|
-
| `middleware()`
|
|
192
|
-
| `loading()` | Ignored without passthrough. Works for live fallback with passthrough.
|
|
193
|
-
| `intercept()` |
|
|
231
|
+
| DSL item | Behavior with Prerender |
|
|
232
|
+
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
233
|
+
| `loader()` | Live at runtime, bundled normally. Use `cache()` for caching. |
|
|
234
|
+
| `revalidate()` | Not allowed without passthrough. Allowed with passthrough. |
|
|
235
|
+
| `cache()` | Orthogonal -- use on parent layouts and loaders. |
|
|
236
|
+
| `layout()` | Child layouts inside path are pre-rendered. Parent layouts are live. |
|
|
237
|
+
| `parallel()` | Parallel slots inside path are pre-rendered. |
|
|
238
|
+
| `middleware()` | Skipped during pre-render (no request). Runs at request time for loaders. |
|
|
239
|
+
| `loading()` | Ignored without passthrough. Works for live fallback with passthrough. |
|
|
240
|
+
| `intercept()` | Pre-rendered at build time. Intercept variant stored under `/i` key alongside main segments. At runtime, the correct variant is served based on `ctx.isIntercept`. `when()` conditions are skipped at build time (all intercepts are pre-rendered unconditionally). |
|
|
241
|
+
|
|
242
|
+
When passthrough revalidation is enabled, remember that revalidation is
|
|
243
|
+
still partial: opting a child segment into revalidation does not
|
|
244
|
+
implicitly re-run outer prerender-derived handlers/layouts.
|
|
194
245
|
|
|
195
246
|
## Dev Mode
|
|
196
247
|
|
|
197
|
-
In dev mode
|
|
198
|
-
|
|
199
|
-
|
|
248
|
+
In dev mode there is no production-style prerender build pass and no handler
|
|
249
|
+
stubbing.
|
|
250
|
+
|
|
251
|
+
**Node.js dev server** — `Prerender` acts as a normal handler. Routes render
|
|
252
|
+
live on every request with full runtime context (`ctx.build === false`).
|
|
253
|
+
|
|
254
|
+
**Non-Node runtimes (Cloudflare workerd, Deno workers)** — Handlers that
|
|
255
|
+
depend on Node APIs (e.g. `node:fs`) cannot run in-process. The Vite plugin
|
|
256
|
+
can intercept these requests and resolve them via the `/__rsc_prerender`
|
|
257
|
+
endpoint, which runs `matchForPrerender` in a Node.js temp server. In this
|
|
258
|
+
path the handler receives `BuildContext` (`ctx.build === true`) and segments
|
|
259
|
+
are resolved identically to production prerendering, then served on-demand.
|
|
260
|
+
This only applies when `__PRERENDER_DEV_URL` is set by the plugin.
|
|
200
261
|
|
|
201
262
|
## Storage Layout
|
|
202
263
|
|
|
@@ -212,33 +273,210 @@ dist/static/__<hash>/
|
|
|
212
273
|
_.flight # static route, no params
|
|
213
274
|
```
|
|
214
275
|
|
|
276
|
+
## Concurrency
|
|
277
|
+
|
|
278
|
+
Prerender handlers can specify how many param sets render in parallel:
|
|
279
|
+
|
|
280
|
+
```typescript
|
|
281
|
+
export const BlogPost = Prerender(
|
|
282
|
+
async () => posts.map(p => ({ slug: p.slug })),
|
|
283
|
+
async (ctx) => <PostPage slug={ctx.params.slug} />,
|
|
284
|
+
{ concurrency: 4 },
|
|
285
|
+
);
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Default is `1` (sequential). Only `Prerender` supports concurrency; `Static` handlers
|
|
289
|
+
always render sequentially.
|
|
290
|
+
|
|
291
|
+
## Skipping Entries with Skip
|
|
292
|
+
|
|
293
|
+
Throw `Skip` inside a Prerender or Static handler to skip an individual entry
|
|
294
|
+
without failing the build:
|
|
295
|
+
|
|
296
|
+
```typescript
|
|
297
|
+
import { Prerender, Skip } from "@rangojs/router";
|
|
298
|
+
|
|
299
|
+
export const BlogPost = Prerender(
|
|
300
|
+
async () => [{ slug: "published" }, { slug: "draft" }],
|
|
301
|
+
async (ctx) => {
|
|
302
|
+
if (ctx.params.slug === "draft") {
|
|
303
|
+
throw new Skip("Draft articles are not pre-rendered");
|
|
304
|
+
}
|
|
305
|
+
return <PostPage slug={ctx.params.slug} />;
|
|
306
|
+
},
|
|
307
|
+
{ passthrough: true },
|
|
308
|
+
);
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
Skipped entries are excluded from the build output. With `passthrough: true`,
|
|
312
|
+
the handler stays in the bundle and serves skipped params live at request time.
|
|
313
|
+
|
|
314
|
+
`Skip` also works in `Static` handlers:
|
|
315
|
+
|
|
316
|
+
```typescript
|
|
317
|
+
import { Static, Skip } from "@rangojs/router";
|
|
318
|
+
|
|
319
|
+
export const TocSidebar = Static(() => {
|
|
320
|
+
throw new Skip("Not ready for pre-rendering");
|
|
321
|
+
});
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### Error behavior at build time
|
|
325
|
+
|
|
326
|
+
| Handler outcome | Effect |
|
|
327
|
+
| --------------------------- | ----------------------------------------------------- |
|
|
328
|
+
| JSX / `null` | Normal prerender entry, log OK |
|
|
329
|
+
| `return ctx.passthrough()` | Skip entry, log PASS, continue (passthrough routes) |
|
|
330
|
+
| `throw new Skip("reason")` | Skip entry, log SKIP, continue with remaining entries |
|
|
331
|
+
| `throw new Error("reason")` | Log FAIL, stop ALL pre-rendering, fail the build |
|
|
332
|
+
|
|
333
|
+
Both error types propagate to the router's `onError` callback with phase
|
|
334
|
+
`"prerender"` or `"static"`.
|
|
335
|
+
|
|
336
|
+
### Build logs
|
|
337
|
+
|
|
338
|
+
The build produces per-URL timing logs:
|
|
339
|
+
|
|
340
|
+
```
|
|
341
|
+
[rsc-router] Pre-rendering 12 URL(s) (concurrency: 4)...
|
|
342
|
+
[rsc-router] OK /articles/hello (42ms)
|
|
343
|
+
[rsc-router] PASS /articles/remote-only (5ms) - live fallback
|
|
344
|
+
[rsc-router] SKIP /articles/draft-post (3ms) - Article is a draft
|
|
345
|
+
[rsc-router] Pre-render complete: 11 done, 1 skipped (1204ms total)
|
|
346
|
+
|
|
347
|
+
[rsc-router] Rendering 3 static handler(s)...
|
|
348
|
+
[rsc-router] OK DocsLayout (28ms)
|
|
349
|
+
[rsc-router] SKIP TocSidebar (1ms) - Not ready
|
|
350
|
+
[rsc-router] Static render complete: 2 done, 1 skipped (120ms total)
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
A `FAIL` line is logged per-URL when a handler throws a non-Skip error. The
|
|
354
|
+
error is re-thrown immediately, so no summary line is printed — the build
|
|
355
|
+
stops at the first failure.
|
|
356
|
+
|
|
357
|
+
### Dev mode behavior
|
|
358
|
+
|
|
359
|
+
**Node.js dev server** — `Skip` behaves like a regular runtime error because
|
|
360
|
+
the handler runs live with `ctx.build === false`.
|
|
361
|
+
|
|
362
|
+
**Non-Node runtimes using `/__rsc_prerender`** — `Skip` participates in the
|
|
363
|
+
on-demand prerender path, so build-style skip logic does run for that request.
|
|
364
|
+
The dev prerender endpoint treats it like a prerender miss and the request
|
|
365
|
+
falls back according to normal dev/runtime behavior.
|
|
366
|
+
|
|
367
|
+
## Per-Param Passthrough with ctx.passthrough()
|
|
368
|
+
|
|
369
|
+
On `{ passthrough: true }` routes, a handler can return `ctx.passthrough()`
|
|
370
|
+
to skip writing a local prerender artifact for a specific param set. At
|
|
371
|
+
runtime, the missing entry falls through to the live handler.
|
|
372
|
+
|
|
373
|
+
```typescript
|
|
374
|
+
export const BlogPost = Prerender(
|
|
375
|
+
async () => [{ slug: "a" }, { slug: "b" }, { slug: "c" }],
|
|
376
|
+
async (ctx) => {
|
|
377
|
+
const post = await getPost(ctx.params.slug);
|
|
378
|
+
if (!post) return ctx.passthrough();
|
|
379
|
+
return <article>{post.content}</article>;
|
|
380
|
+
},
|
|
381
|
+
{ passthrough: true },
|
|
382
|
+
);
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
### Semantics
|
|
386
|
+
|
|
387
|
+
- JSX or `null` from the handler produces a normal prerender entry.
|
|
388
|
+
- `ctx.passthrough()` returns a sentinel that signals "no local artifact".
|
|
389
|
+
The build skips the manifest entry for that param set.
|
|
390
|
+
- `ctx.passthrough()` on a non-passthrough route throws an invariant error.
|
|
391
|
+
- `ctx.passthrough()` at runtime (`ctx.build === false`) also throws.
|
|
392
|
+
It is a build-time-only control flow.
|
|
393
|
+
- `getParams()` still enumerates the param set; the handler decides per-param
|
|
394
|
+
whether to produce an artifact or defer to runtime.
|
|
395
|
+
|
|
396
|
+
### Difference from Skip
|
|
397
|
+
|
|
398
|
+
| Mechanism | Effect on build | Runtime behavior |
|
|
399
|
+
| ------------------- | ---------------------- | ---------------------------------------------------- |
|
|
400
|
+
| `throw new Skip()` | Skips entry, logs SKIP | No artifact, no live fallback unless passthrough |
|
|
401
|
+
| `ctx.passthrough()` | Skips entry, logs PASS | Always defers to live handler (requires passthrough) |
|
|
402
|
+
|
|
403
|
+
Use `ctx.passthrough()` when you want the handler to run live at request time
|
|
404
|
+
for specific params. Use `Skip` when you want to exclude params entirely.
|
|
405
|
+
|
|
406
|
+
### Use case: Remote storage
|
|
407
|
+
|
|
408
|
+
`ctx.passthrough()` enables a pattern where build-time data is stored in a
|
|
409
|
+
remote KV store instead of the local prerender manifest. The handler
|
|
410
|
+
pre-computes data during `getParams`, pushes it to KV, then calls
|
|
411
|
+
`ctx.passthrough()` so the local build skips the artifact. At runtime,
|
|
412
|
+
the live handler reads from KV:
|
|
413
|
+
|
|
414
|
+
```typescript
|
|
415
|
+
export const Product = Prerender(
|
|
416
|
+
async () => {
|
|
417
|
+
const products = await db.getFeaturedProducts();
|
|
418
|
+
// Pre-compute and store in remote KV during build
|
|
419
|
+
for (const p of products) {
|
|
420
|
+
await kv.put(`product:${p.id}`, await renderProduct(p));
|
|
421
|
+
}
|
|
422
|
+
return products.map(p => ({ id: p.id }));
|
|
423
|
+
},
|
|
424
|
+
async (ctx) => {
|
|
425
|
+
// At build time: skip local artifact, data is in KV
|
|
426
|
+
if (ctx.build) return ctx.passthrough();
|
|
427
|
+
// At runtime: read from KV
|
|
428
|
+
const cached = await kv.get(`product:${ctx.params.id}`);
|
|
429
|
+
if (cached) return cached;
|
|
430
|
+
return <Product data={await db.getProduct(ctx.params.id)} />;
|
|
431
|
+
},
|
|
432
|
+
{ passthrough: true },
|
|
433
|
+
);
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
### Build logs
|
|
437
|
+
|
|
438
|
+
Passthrough entries are logged distinctly:
|
|
439
|
+
|
|
440
|
+
```
|
|
441
|
+
[rsc-router] OK /blog/a (42ms)
|
|
442
|
+
[rsc-router] PASS /blog/b (3ms) - live fallback
|
|
443
|
+
[rsc-router] OK /blog/c (38ms)
|
|
444
|
+
```
|
|
445
|
+
|
|
215
446
|
## Edge Cases and Constraints
|
|
216
447
|
|
|
217
448
|
### Loaders are always live
|
|
449
|
+
|
|
218
450
|
Loaders on pre-rendered routes run at request time. They are bundled normally
|
|
219
451
|
and need `cache()` for caching. Do not use build-only APIs in loaders.
|
|
220
452
|
|
|
221
453
|
### Handle data is frozen
|
|
454
|
+
|
|
222
455
|
Handle values pushed via `ctx.use()` during pre-rendering are baked into the
|
|
223
456
|
Flight payload. They do not update at request time.
|
|
224
457
|
|
|
225
458
|
### Server actions work normally
|
|
459
|
+
|
|
226
460
|
Actions do not re-render the B segment. The pre-rendered handler output stays
|
|
227
461
|
frozen. Loaders are live and can be revalidated by actions. With `passthrough: true`
|
|
228
462
|
and `revalidate()`, the handler itself can re-render live.
|
|
229
463
|
|
|
230
464
|
### Empty getParams
|
|
465
|
+
|
|
231
466
|
If `getParams` returns an empty array, no Flight payloads are written. No error.
|
|
232
467
|
|
|
233
468
|
### Route name is required
|
|
469
|
+
|
|
234
470
|
Routes using `Prerender` must have a `name` in path options.
|
|
235
471
|
The name is used as the storage key for Flight payloads.
|
|
236
472
|
|
|
237
473
|
### No revalidate without passthrough
|
|
474
|
+
|
|
238
475
|
Using `revalidate()` with `passthrough: false` produces a build-time warning.
|
|
239
476
|
The handler is evicted -- there is nothing to re-render.
|
|
240
477
|
|
|
241
478
|
### loading() is ignored without passthrough
|
|
479
|
+
|
|
242
480
|
Pre-rendered segments are fully resolved at build time and never suspend.
|
|
243
481
|
With `passthrough: true`, `loading()` works for live fallback renders.
|
|
244
482
|
|
|
@@ -283,15 +521,68 @@ export const guidesPatterns = urls(({ path }) => [
|
|
|
283
521
|
]);
|
|
284
522
|
|
|
285
523
|
// urls.tsx
|
|
286
|
-
import { urls
|
|
524
|
+
import { urls } from "@rangojs/router";
|
|
287
525
|
import { guidesPatterns } from "./pages/guides.js";
|
|
288
526
|
|
|
289
|
-
export const urlpatterns = urls(({ path }) => [
|
|
527
|
+
export const urlpatterns = urls(({ path, include }) => [
|
|
290
528
|
path("/", HomePage, { name: "home" }),
|
|
291
529
|
include("/guides", guidesPatterns, { name: "guides" }),
|
|
292
530
|
]);
|
|
293
531
|
```
|
|
294
532
|
|
|
533
|
+
## Interaction with intercept()
|
|
534
|
+
|
|
535
|
+
When a pre-rendered route is also the target of an `intercept()`, the build system
|
|
536
|
+
resolves the intercept handler at build time and stores a combined entry (main
|
|
537
|
+
segments + intercept segments) under an `/i`-suffixed key alongside the main entry:
|
|
538
|
+
|
|
539
|
+
```
|
|
540
|
+
prerender store keys:
|
|
541
|
+
"blog.post/a1b2c3" -> main segments (full page)
|
|
542
|
+
"blog.post/a1b2c3/i" -> main segments + intercept segments (modal variant)
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
At runtime, the cache-lookup middleware checks `ctx.isIntercept`:
|
|
546
|
+
|
|
547
|
+
- **Intercept navigation**: looks up `paramHash/i` first. If found, yields
|
|
548
|
+
the combined entry. `handleCacheHitIntercept()` extracts intercept segments
|
|
549
|
+
(filtered by `namespace?.startsWith("intercept:")`) and sets up slots.
|
|
550
|
+
- **Direct navigation**: looks up `paramHash` (no suffix). Standard prerender path.
|
|
551
|
+
- **Intercept miss (no `/i` entry)**: falls through to the normal pipeline so
|
|
552
|
+
intercept-resolution middleware runs live. This handles `when()` conditions
|
|
553
|
+
that prevented pre-rendering.
|
|
554
|
+
|
|
555
|
+
The `when()` callback receives an `InterceptSelectorContext` with `from.pathname`
|
|
556
|
+
which is unknown at build time. All intercepts are pre-rendered unconditionally;
|
|
557
|
+
`when()` is evaluated at runtime by the intercept-resolution middleware.
|
|
558
|
+
|
|
559
|
+
### Example: Pre-rendered route with intercept
|
|
560
|
+
|
|
561
|
+
```typescript
|
|
562
|
+
// Route handler is pre-rendered at build time
|
|
563
|
+
export const ProductDetail = Prerender(
|
|
564
|
+
async () => [{ slug: "shoes" }, { slug: "jacket" }],
|
|
565
|
+
async (ctx) => <ProductPage slug={ctx.params.slug} />,
|
|
566
|
+
);
|
|
567
|
+
|
|
568
|
+
// urls.tsx
|
|
569
|
+
layout(ShopLayout, () => [
|
|
570
|
+
path("/:slug", ProductDetail, { name: "detail" }, () => [
|
|
571
|
+
loader(ProductLoader),
|
|
572
|
+
]),
|
|
573
|
+
|
|
574
|
+
// Intercept detail from shop index into a modal.
|
|
575
|
+
// At build time, this is resolved and stored under the /i key.
|
|
576
|
+
intercept("@modal", ".detail", <ProductModal />, () => [
|
|
577
|
+
when(({ from }) => from.pathname === "/shop"),
|
|
578
|
+
loader(ProductLoader),
|
|
579
|
+
]),
|
|
580
|
+
])
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
Both `ProductPage` (main) and `ProductModal` (intercept) are frozen at build time.
|
|
584
|
+
Loaders run fresh at request time for both variants.
|
|
585
|
+
|
|
295
586
|
## Trie Flags
|
|
296
587
|
|
|
297
588
|
Pre-rendered routes set flags on the route trie leaf at build time:
|
|
@@ -300,6 +591,53 @@ Pre-rendered routes set flags on the route trie leaf at build time:
|
|
|
300
591
|
- `pt: true` -- passthrough mode (handler available for live fallback)
|
|
301
592
|
|
|
302
593
|
At runtime, the cache-lookup middleware uses these flags:
|
|
594
|
+
|
|
303
595
|
- `pr + hit` -- serve pre-rendered Flight payload
|
|
304
596
|
- `pr + pt + miss` -- fall through to live handler (handler kept in bundle)
|
|
305
597
|
- `pr + miss` (no pt) -- fall through (handler stubbed, no live render)
|
|
598
|
+
|
|
599
|
+
## Contributor Checklist
|
|
600
|
+
|
|
601
|
+
Before changing prerender behavior, read these docs and run these tests.
|
|
602
|
+
|
|
603
|
+
### Docs to re-read
|
|
604
|
+
|
|
605
|
+
- [Prerender API design](../../docs/prerender-api-design.md) -- canonical
|
|
606
|
+
architecture: build-time flow, runtime flow, storage, passthrough, intercept
|
|
607
|
+
- [Execution model](../../docs/internal/execution-model.md) -- handler-first
|
|
608
|
+
ordering, middleware scope, context visibility rules
|
|
609
|
+
- [Semantic change checklist](../../docs/internal/semantic-change-checklist.md)
|
|
610
|
+
-- gate for any change to execution semantics
|
|
611
|
+
|
|
612
|
+
### Tests to run
|
|
613
|
+
|
|
614
|
+
```bash
|
|
615
|
+
# Core prerender e2e (passthrough, eviction, loaders, sub-use, intercept)
|
|
616
|
+
pnpm --filter @rangojs/router exec playwright test prerender
|
|
617
|
+
|
|
618
|
+
# Prerender-specific unit test
|
|
619
|
+
pnpm --filter @rangojs/router run test:unit -- prerender-passthrough
|
|
620
|
+
|
|
621
|
+
# Semantic matrix (prerender rows cover intercept + ctx propagation)
|
|
622
|
+
pnpm --filter @rangojs/router exec playwright test semantic-matrix
|
|
623
|
+
|
|
624
|
+
# Handler-first (ctx.set/get visibility with prerender handlers)
|
|
625
|
+
pnpm --filter @rangojs/router exec playwright test handler-first
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
### Dev-only vs build-parity
|
|
629
|
+
|
|
630
|
+
- Prerender e2e tests run against a real production build by default (the
|
|
631
|
+
fixture builds the test app). Dev-mode prerender behavior is tested via
|
|
632
|
+
`/__rsc_prerender` endpoint tests and node.js dev-server fallback.
|
|
633
|
+
- Log-based assertions (build output lines, debug cache logs) are inherently
|
|
634
|
+
dev/build-only and do not need a production counterpart.
|
|
635
|
+
- Behavioral assertions (rendered content, loader freshness, passthrough
|
|
636
|
+
fallback, intercept variant selection) must work in the production build.
|
|
637
|
+
|
|
638
|
+
## Maintenance References
|
|
639
|
+
|
|
640
|
+
- [Stability next steps plan](../../docs/internal/stability-next-steps-plan.md)
|
|
641
|
+
-- completed parity and cleanup pass (reference for decisions made)
|
|
642
|
+
- [Test quality baseline](../../docs/internal/test-quality-baseline.md) --
|
|
643
|
+
measured test inventory, sleep debt, production coverage gaps
|
package/skills/rango/SKILL.md
CHANGED
|
@@ -10,26 +10,28 @@ Django-inspired RSC router with composable URL patterns, type-safe href, and ser
|
|
|
10
10
|
|
|
11
11
|
## Skills
|
|
12
12
|
|
|
13
|
-
| Skill
|
|
14
|
-
|
|
15
|
-
| `/router-setup`
|
|
16
|
-
| `/route`
|
|
17
|
-
| `/layout`
|
|
18
|
-
| `/loader`
|
|
19
|
-
| `/middleware`
|
|
20
|
-
| `/intercept`
|
|
21
|
-
| `/parallel`
|
|
22
|
-
| `/caching`
|
|
23
|
-
| `/
|
|
24
|
-
| `/
|
|
25
|
-
| `/
|
|
26
|
-
| `/
|
|
27
|
-
| `/
|
|
28
|
-
| `/
|
|
29
|
-
| `/
|
|
30
|
-
| `/
|
|
31
|
-
| `/
|
|
32
|
-
| `/
|
|
13
|
+
| Skill | Description |
|
|
14
|
+
| ------------------ | -------------------------------------------------------------------------- |
|
|
15
|
+
| `/router-setup` | Create and configure the RSC router |
|
|
16
|
+
| `/route` | Define routes with `urls()` and `path()` |
|
|
17
|
+
| `/layout` | Layouts that wrap child routes |
|
|
18
|
+
| `/loader` | Data loaders with `createLoader()` |
|
|
19
|
+
| `/middleware` | Request processing and authentication |
|
|
20
|
+
| `/intercept` | Modal/slide-over patterns for soft navigation |
|
|
21
|
+
| `/parallel` | Multi-column layouts and sidebars |
|
|
22
|
+
| `/caching` | Segment caching with memory or KV stores |
|
|
23
|
+
| `/use-cache` | Function-level caching with `"use cache"` directive |
|
|
24
|
+
| `/cache-guide` | When to use `cache()` vs `"use cache"` — differences and decision guide |
|
|
25
|
+
| `/document-cache` | Edge caching with Cache-Control headers |
|
|
26
|
+
| `/theme` | Light/dark mode with FOUC prevention |
|
|
27
|
+
| `/links` | URL generation: ctx.reverse, href, useHref, useMount, scopedReverse |
|
|
28
|
+
| `/hooks` | Client-side React hooks |
|
|
29
|
+
| `/typesafety` | Type-safe routes, params, href, and environment |
|
|
30
|
+
| `/host-router` | Multi-app host routing with domain/subdomain patterns |
|
|
31
|
+
| `/tailwind` | Set up Tailwind CSS v4 with `?url` imports |
|
|
32
|
+
| `/response-routes` | JSON/text/HTML/XML/stream endpoints with `path.json()`, `path.text()` |
|
|
33
|
+
| `/mime-routes` | Content negotiation — same URL, different response types via Accept header |
|
|
34
|
+
| `/fonts` | Load web fonts with preload hints |
|
|
33
35
|
|
|
34
36
|
## Quick Start
|
|
35
37
|
|
|
@@ -48,7 +50,69 @@ export const urlpatterns = urls(({ path, layout }) => [
|
|
|
48
50
|
import { createRouter } from "@rangojs/router";
|
|
49
51
|
import { urlpatterns } from "./urls";
|
|
50
52
|
|
|
51
|
-
export default createRouter({ document: Document }).
|
|
53
|
+
export default createRouter({ document: Document }).routes(urlpatterns);
|
|
52
54
|
```
|
|
53
55
|
|
|
54
56
|
Use `/typesafety` for type-safe href and environment setup.
|
|
57
|
+
|
|
58
|
+
## CLI: `npx rango generate`
|
|
59
|
+
|
|
60
|
+
Single command to generate `.gen.ts` route type files. Auto-detects file type and
|
|
61
|
+
generates the appropriate output.
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Single file
|
|
65
|
+
npx rango generate src/urls.tsx
|
|
66
|
+
|
|
67
|
+
# Multiple files
|
|
68
|
+
npx rango generate src/router.tsx src/urls.tsx
|
|
69
|
+
|
|
70
|
+
# Directory (recursive scan)
|
|
71
|
+
npx rango generate src/
|
|
72
|
+
|
|
73
|
+
# Mix of files and directories
|
|
74
|
+
npx rango generate src/urls.tsx src/api/
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Auto-detection
|
|
78
|
+
|
|
79
|
+
Each file is classified by its contents:
|
|
80
|
+
|
|
81
|
+
| Contains | Generated output |
|
|
82
|
+
| -------------- | ---------------------------------------------------------------- |
|
|
83
|
+
| `urls(` | Per-module `*.gen.ts` with route names, patterns, params, search |
|
|
84
|
+
| `createRouter` | Per-router `*.named-routes.gen.ts` with global route map |
|
|
85
|
+
| Both | Both files |
|
|
86
|
+
|
|
87
|
+
Directories are scanned recursively for `.ts`/`.tsx` files, skipping `node_modules`,
|
|
88
|
+
dotfiles, and existing `.gen.` files.
|
|
89
|
+
|
|
90
|
+
### Recursive includes
|
|
91
|
+
|
|
92
|
+
The generator follows `include()` calls across files, resolving imports to build
|
|
93
|
+
the full route tree. Circular includes are detected and warned about.
|
|
94
|
+
|
|
95
|
+
### First-wins deduplication
|
|
96
|
+
|
|
97
|
+
When a route name appears more than once, the first definition wins and duplicates
|
|
98
|
+
are dropped with a warning. This applies only to the generated `.gen.ts` type files.
|
|
99
|
+
Define the primary route before any fallback variant that reuses the same name.
|
|
100
|
+
|
|
101
|
+
Content negotiation (see `/mime-routes`) is unaffected — negotiated routes use
|
|
102
|
+
distinct names (e.g. `"product"` and `"productJson"`) and the Accept header
|
|
103
|
+
dispatching happens at runtime in the trie, not in the type generator.
|
|
104
|
+
|
|
105
|
+
### Limitations
|
|
106
|
+
|
|
107
|
+
The CLI uses static source analysis (AST walking), not runtime execution. It cannot
|
|
108
|
+
extract routes defined dynamically:
|
|
109
|
+
|
|
110
|
+
- `Array.from()` or `.map()` generating path() calls
|
|
111
|
+
- Conditional routes behind `import.meta.env` or feature flags
|
|
112
|
+
- Routes computed from external data (databases, config files)
|
|
113
|
+
- Template literal patterns with interpolated variables
|
|
114
|
+
|
|
115
|
+
These routes are only discovered by the Vite plugin's runtime discovery during
|
|
116
|
+
`pnpm dev` or `pnpm build`. The CLI-generated `.gen.ts` may have fewer routes
|
|
117
|
+
than the runtime-generated version. During dev, the `preserveIfLarger` guard
|
|
118
|
+
prevents the static parser from overwriting a larger runtime-discovered file.
|