@rangojs/router 0.0.0-experimental.125 → 0.0.0-experimental.127
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 +6 -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 +5 -1
- 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/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
- package/dist/handles/index.d.ts.map +1 -0
- package/dist/handles/index.js +6 -0
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/dist/href-context.d.ts +29 -0
- package/dist/href-context.d.ts.map +1 -0
- package/dist/href-context.js +21 -0
- package/dist/href-context.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.rsc.d.ts +32 -0
- package/dist/index.rsc.d.ts.map +1 -0
- package/dist/index.rsc.js +40 -0
- package/dist/index.rsc.js.map +1 -0
- package/dist/internal-debug.d.ts +2 -0
- package/dist/internal-debug.d.ts.map +1 -0
- package/dist/internal-debug.js +5 -0
- package/dist/internal-debug.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/loader.rsc.d.ts +19 -0
- package/dist/loader.rsc.d.ts.map +1 -0
- package/dist/loader.rsc.js +99 -0
- package/dist/loader.rsc.js.map +1 -0
- package/dist/network-error-thrower.d.ts +17 -0
- package/dist/network-error-thrower.d.ts.map +1 -0
- package/dist/network-error-thrower.js +14 -0
- package/dist/network-error-thrower.js.map +1 -0
- package/dist/outlet-context.d.ts +13 -0
- package/dist/outlet-context.d.ts.map +1 -0
- package/dist/outlet-context.js +3 -0
- package/dist/outlet-context.js.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.js +148 -0
- package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
- package/dist/prerender/param-hash.d.ts +16 -0
- package/dist/prerender/param-hash.d.ts.map +1 -0
- package/dist/prerender/param-hash.js +36 -0
- package/dist/prerender/param-hash.js.map +1 -0
- package/dist/prerender/store.d.ts +38 -0
- package/dist/prerender/store.d.ts.map +1 -0
- package/dist/prerender/store.js +61 -0
- package/dist/prerender/store.js.map +1 -0
- package/dist/prerender.d.ts +66 -0
- package/dist/prerender.d.ts.map +1 -0
- package/dist/prerender.js +57 -0
- package/dist/prerender.js.map +1 -0
- package/dist/reverse.d.ts +196 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +78 -0
- package/dist/reverse.js.map +1 -0
- package/dist/root-error-boundary.d.ts +33 -0
- package/dist/root-error-boundary.d.ts.map +1 -0
- package/dist/root-error-boundary.js +165 -0
- package/dist/root-error-boundary.js.map +1 -0
- package/dist/route-content-wrapper.d.ts +46 -0
- package/dist/route-content-wrapper.d.ts.map +1 -0
- package/dist/route-content-wrapper.js +77 -0
- package/dist/route-content-wrapper.js.map +1 -0
- package/dist/route-definition.d.ts +421 -0
- package/dist/route-definition.d.ts.map +1 -0
- package/dist/route-definition.js +868 -0
- package/dist/route-definition.js.map +1 -0
- package/dist/route-map-builder.d.ts +155 -0
- package/dist/route-map-builder.d.ts.map +1 -0
- package/dist/route-map-builder.js +237 -0
- package/dist/route-map-builder.js.map +1 -0
- package/dist/route-types.d.ts +165 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +7 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router/__tests__/handler-context.test.d.ts +2 -0
- package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/handler-context.test.js +65 -0
- package/dist/router/__tests__/handler-context.test.js.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
- package/dist/router/__tests__/match-context.test.d.ts +2 -0
- package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-context.test.js +92 -0
- package/dist/router/__tests__/match-context.test.js.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.js +417 -0
- package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
- package/dist/router/__tests__/match-result.test.d.ts +2 -0
- package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-result.test.js +457 -0
- package/dist/router/__tests__/match-result.test.js.map +1 -0
- package/dist/router/__tests__/on-error.test.d.ts +2 -0
- package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
- package/dist/router/__tests__/on-error.test.js +678 -0
- package/dist/router/__tests__/on-error.test.js.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.js +629 -0
- package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
- package/dist/router/error-handling.d.ts +77 -0
- package/dist/router/error-handling.d.ts.map +1 -0
- package/dist/router/error-handling.js +202 -0
- package/dist/router/error-handling.js.map +1 -0
- package/dist/router/handler-context.d.ts +20 -0
- package/dist/router/handler-context.d.ts.map +1 -0
- package/dist/router/handler-context.js +198 -0
- package/dist/router/handler-context.js.map +1 -0
- package/dist/router/intercept-resolution.d.ts +66 -0
- package/dist/router/intercept-resolution.d.ts.map +1 -0
- package/dist/router/intercept-resolution.js +246 -0
- package/dist/router/intercept-resolution.js.map +1 -0
- package/dist/router/loader-resolution.d.ts +64 -0
- package/dist/router/loader-resolution.d.ts.map +1 -0
- package/dist/router/loader-resolution.js +284 -0
- package/dist/router/loader-resolution.js.map +1 -0
- package/dist/router/logging.d.ts +15 -0
- package/dist/router/logging.d.ts.map +1 -0
- package/dist/router/logging.js +99 -0
- package/dist/router/logging.js.map +1 -0
- package/dist/router/manifest.d.ts +22 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +181 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/match-api.d.ts +35 -0
- package/dist/router/match-api.d.ts.map +1 -0
- package/dist/router/match-api.js +406 -0
- package/dist/router/match-api.js.map +1 -0
- package/dist/router/match-context.d.ts +206 -0
- package/dist/router/match-context.d.ts.map +1 -0
- package/dist/router/match-context.js +17 -0
- package/dist/router/match-context.js.map +1 -0
- package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
- package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
- package/dist/router/match-middleware/background-revalidation.js +75 -0
- package/dist/router/match-middleware/background-revalidation.js.map +1 -0
- package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
- package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-lookup.js +257 -0
- package/dist/router/match-middleware/cache-lookup.js.map +1 -0
- package/dist/router/match-middleware/cache-store.d.ts +113 -0
- package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-store.js +108 -0
- package/dist/router/match-middleware/cache-store.js.map +1 -0
- package/dist/router/match-middleware/index.d.ts +81 -0
- package/dist/router/match-middleware/index.d.ts.map +1 -0
- package/dist/router/match-middleware/index.js +80 -0
- package/dist/router/match-middleware/index.js.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.js +134 -0
- package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
- package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
- package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/segment-resolution.js +53 -0
- package/dist/router/match-middleware/segment-resolution.js.map +1 -0
- package/dist/router/match-pipelines.d.ts +147 -0
- package/dist/router/match-pipelines.d.ts.map +1 -0
- package/dist/router/match-pipelines.js +82 -0
- package/dist/router/match-pipelines.js.map +1 -0
- package/dist/router/match-result.d.ts +126 -0
- package/dist/router/match-result.d.ts.map +1 -0
- package/dist/router/match-result.js +93 -0
- package/dist/router/match-result.js.map +1 -0
- package/dist/router/metrics.d.ts +20 -0
- package/dist/router/metrics.d.ts.map +1 -0
- package/dist/router/metrics.js +47 -0
- package/dist/router/metrics.js.map +1 -0
- package/dist/router/middleware.d.ts +249 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +434 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/middleware.test.d.ts +2 -0
- package/dist/router/middleware.test.d.ts.map +1 -0
- package/dist/router/middleware.test.js +816 -0
- package/dist/router/middleware.test.js.map +1 -0
- package/dist/router/pattern-matching.d.ts +149 -0
- package/dist/router/pattern-matching.d.ts.map +1 -0
- package/dist/router/pattern-matching.js +349 -0
- package/dist/router/pattern-matching.js.map +1 -0
- package/dist/router/revalidation.d.ts +44 -0
- package/dist/router/revalidation.d.ts.map +1 -0
- package/dist/router/revalidation.js +147 -0
- package/dist/router/revalidation.js.map +1 -0
- package/dist/router/router-context.d.ts +135 -0
- package/dist/router/router-context.d.ts.map +1 -0
- package/dist/router/router-context.js +36 -0
- package/dist/router/router-context.js.map +1 -0
- package/dist/router/segment-resolution.d.ts +127 -0
- package/dist/router/segment-resolution.d.ts.map +1 -0
- package/dist/router/segment-resolution.js +919 -0
- package/dist/router/segment-resolution.js.map +1 -0
- package/dist/router/trie-matching.d.ts +40 -0
- package/dist/router/trie-matching.d.ts.map +1 -0
- package/dist/router/trie-matching.js +127 -0
- package/dist/router/trie-matching.js.map +1 -0
- package/dist/router/types.d.ts +136 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router.d.ts +753 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.gen.d.ts +6 -0
- package/dist/router.gen.d.ts.map +1 -0
- package/dist/router.gen.js +6 -0
- package/dist/router.gen.js.map +1 -0
- package/dist/router.js +1304 -0
- package/dist/router.js.map +1 -0
- package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
- package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/rsc/__tests__/helpers.test.js +140 -0
- package/dist/rsc/__tests__/helpers.test.js.map +1 -0
- package/dist/rsc/handler.d.ts +45 -0
- package/dist/rsc/handler.d.ts.map +1 -0
- package/dist/rsc/handler.js +1172 -0
- package/dist/rsc/handler.js.map +1 -0
- package/dist/rsc/helpers.d.ts +16 -0
- package/dist/rsc/helpers.d.ts.map +1 -0
- package/dist/rsc/helpers.js +55 -0
- package/dist/rsc/helpers.js.map +1 -0
- package/dist/rsc/index.d.ts +22 -0
- package/dist/rsc/index.d.ts.map +1 -0
- package/dist/rsc/index.js +23 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/nonce.d.ts +9 -0
- package/dist/rsc/nonce.d.ts.map +1 -0
- package/dist/rsc/nonce.js +18 -0
- package/dist/rsc/nonce.js.map +1 -0
- package/dist/rsc/types.d.ts +206 -0
- package/dist/rsc/types.d.ts.map +1 -0
- package/dist/rsc/types.js +8 -0
- package/dist/rsc/types.js.map +1 -0
- package/dist/search-params.d.ts +103 -0
- package/dist/search-params.d.ts.map +1 -0
- package/dist/search-params.js +74 -0
- package/dist/search-params.js.map +1 -0
- package/dist/segment-system.d.ts +75 -0
- package/dist/segment-system.d.ts.map +1 -0
- package/dist/segment-system.js +336 -0
- package/dist/segment-system.js.map +1 -0
- package/dist/server/context.d.ts +245 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +197 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fetchable-loader-store.d.ts +18 -0
- package/dist/server/fetchable-loader-store.d.ts.map +1 -0
- package/dist/server/fetchable-loader-store.js +18 -0
- package/dist/server/fetchable-loader-store.js.map +1 -0
- package/dist/server/handle-store.d.ts +85 -0
- package/dist/server/handle-store.d.ts.map +1 -0
- package/dist/server/handle-store.js +142 -0
- package/dist/server/handle-store.js.map +1 -0
- package/dist/server/loader-registry.d.ts +55 -0
- package/dist/server/loader-registry.d.ts.map +1 -0
- package/dist/server/loader-registry.js +132 -0
- package/dist/server/loader-registry.js.map +1 -0
- package/dist/server/request-context.d.ts +226 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +290 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/root-layout.d.ts +4 -0
- package/dist/server/root-layout.d.ts.map +1 -0
- package/dist/server/root-layout.js +5 -0
- package/dist/server/root-layout.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
- package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
- package/dist/ssr/index.d.ts +98 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +158 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/static-handler.d.ts +50 -0
- package/dist/static-handler.d.ts.map +1 -0
- package/dist/static-handler.gen.d.ts +5 -0
- package/dist/static-handler.gen.d.ts.map +1 -0
- package/dist/static-handler.gen.js +5 -0
- package/dist/static-handler.gen.js.map +1 -0
- package/dist/static-handler.js +29 -0
- package/dist/static-handler.js.map +1 -0
- package/dist/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 +361 -65
- 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 -1
- package/skills/breadcrumbs/SKILL.md +60 -0
- package/skills/observability/SKILL.md +12 -3
- package/skills/prerender/SKILL.md +30 -11
- package/skills/router-setup/SKILL.md +11 -3
- package/skills/server-actions/SKILL.md +25 -1
- package/skills/testing/SKILL.md +17 -17
- package/skills/testing/cache-prerender.md +29 -3
- package/skills/testing/flight.md +13 -10
- package/skills/testing/render-handler.md +3 -0
- package/skills/testing/server-tree.md +1 -1
- package/skills/testing/setup.md +1 -1
- package/src/browser/partial-update.ts +22 -1
- package/src/browser/react/use-router.ts +2 -1
- package/src/browser/rsc-router.tsx +8 -1
- package/src/browser/server-action-bridge.ts +51 -3
- package/src/browser/types.ts +23 -4
- package/src/browser/validate-redirect-origin.ts +43 -15
- package/src/build/index.ts +8 -9
- package/src/build/route-trie.ts +43 -11
- package/src/build/route-types/codegen.ts +12 -1
- package/src/cache/cache-runtime.ts +21 -0
- package/src/cache/cache-scope.ts +20 -0
- package/src/cache/document-cache.ts +10 -0
- package/src/cache/profile-registry.ts +6 -34
- package/src/client.rsc.tsx +3 -0
- package/src/client.tsx +5 -0
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +109 -0
- package/src/context-var.ts +12 -0
- package/src/defer.ts +196 -0
- package/src/handles/breadcrumbs.ts +16 -5
- package/src/index.rsc.ts +26 -2
- package/src/index.ts +23 -1
- package/src/redirect-origin.ts +100 -0
- package/src/route-definition/dsl-helpers.ts +19 -0
- package/src/route-definition/redirect.ts +32 -8
- package/src/route-definition/resolve-handler-use.ts +6 -0
- package/src/router/find-match.ts +0 -1
- package/src/router/instrument.ts +230 -0
- package/src/router/loader-resolution.ts +37 -31
- package/src/router/match-middleware/cache-lookup.ts +104 -139
- package/src/router/match-middleware/cache-store.ts +12 -0
- package/src/router/match-middleware/segment-resolution.ts +0 -1
- package/src/router/middleware-types.ts +0 -1
- package/src/router/middleware.ts +94 -33
- package/src/router/pattern-matching.ts +4 -23
- package/src/router/prerender-match.ts +32 -8
- package/src/router/revalidation.ts +9 -4
- package/src/router/route-snapshot.ts +0 -1
- package/src/router/router-context.ts +2 -2
- package/src/router/router-interfaces.ts +18 -0
- package/src/router/router-options.ts +58 -4
- package/src/router/segment-resolution/fresh.ts +15 -18
- package/src/router/segment-resolution/helpers.ts +6 -0
- package/src/router/segment-resolution/loader-cache.ts +30 -10
- package/src/router/segment-resolution/revalidation.ts +194 -261
- package/src/router/segment-wrappers.ts +3 -5
- package/src/router/telemetry-otel.ts +161 -179
- package/src/router/tracing.ts +198 -0
- package/src/router/trie-matching.ts +3 -5
- package/src/router.ts +13 -9
- package/src/rsc/handler-context.ts +1 -0
- package/src/rsc/handler.ts +135 -130
- package/src/rsc/helpers.ts +56 -3
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +7 -1
- package/src/rsc/origin-guard.ts +10 -4
- package/src/rsc/progressive-enhancement.ts +17 -2
- package/src/rsc/redirect-guard.ts +99 -0
- package/src/rsc/response-route-handler.ts +23 -18
- package/src/rsc/rsc-rendering.ts +38 -14
- package/src/rsc/server-action.ts +32 -8
- package/src/rsc/types.ts +6 -2
- package/src/segment-system.tsx +4 -1
- package/src/server/request-context.ts +35 -18
- package/src/testing/cache-status.ts +44 -1
- package/src/testing/dispatch.ts +43 -6
- package/src/testing/e2e/index.ts +1 -0
- package/src/testing/flight.ts +48 -2
- package/src/testing/index.ts +1 -0
- package/src/testing/render-handler.ts +31 -12
- package/src/testing/render-route.tsx +75 -13
- package/src/types/handler-context.ts +28 -1
- package/src/vite/discovery/discover-routers.ts +22 -11
- package/src/vite/discovery/prerender-collection.ts +28 -41
- package/src/vite/discovery/state.ts +11 -0
- package/src/vite/plugin-types.ts +56 -7
- package/src/vite/plugins/expose-ids/router-transform.ts +10 -0
- package/src/vite/plugins/refresh-cmd.ts +1 -1
- package/src/vite/plugins/use-cache-transform.ts +21 -10
- package/src/vite/rango.ts +2 -0
- package/src/vite/router-discovery.ts +16 -3
- package/src/vite/utils/prerender-utils.ts +36 -0
- package/src/router/middleware-cookies.ts +0 -42
package/src/router/middleware.ts
CHANGED
|
@@ -12,20 +12,24 @@ import type {
|
|
|
12
12
|
ResponseHolder,
|
|
13
13
|
} from "./middleware-types.js";
|
|
14
14
|
import { _getRequestContext } from "../server/request-context.js";
|
|
15
|
+
import {
|
|
16
|
+
EXTERNAL_REDIRECT_MARKER,
|
|
17
|
+
isExternalRedirect,
|
|
18
|
+
markExternalRedirect,
|
|
19
|
+
} from "../redirect-origin.js";
|
|
15
20
|
import { isAutoGeneratedRouteName } from "../route-name.js";
|
|
16
21
|
import { appendMetric, createMetricsStore } from "./metrics.js";
|
|
22
|
+
import { observePhase, PHASES } from "./instrument.js";
|
|
17
23
|
import { stripInternalParams } from "./handler-context.js";
|
|
18
24
|
import { isWebSocketUpgradeResponse } from "../response-utils.js";
|
|
19
25
|
|
|
20
|
-
// Re-export types
|
|
26
|
+
// Re-export types consumed through this module's path.
|
|
21
27
|
export type {
|
|
22
28
|
CookieOptions,
|
|
23
|
-
MiddlewareCollectableEntry,
|
|
24
29
|
MiddlewareContext,
|
|
25
30
|
MiddlewareEntry,
|
|
26
31
|
MiddlewareFn,
|
|
27
32
|
} from "./middleware-types.js";
|
|
28
|
-
export { parseCookies, serializeCookie } from "./middleware-cookies.js";
|
|
29
33
|
|
|
30
34
|
const MIDDLEWARE_METRIC_DEPTH = 1;
|
|
31
35
|
const POST_METRIC_MIN_DURATION_MS = 0.01;
|
|
@@ -238,9 +242,13 @@ export function createMiddlewareContext<TEnv>(
|
|
|
238
242
|
|
|
239
243
|
reverse:
|
|
240
244
|
reverse ??
|
|
241
|
-
((
|
|
245
|
+
((
|
|
246
|
+
name: string,
|
|
247
|
+
_params?: Record<string, string>,
|
|
248
|
+
_search?: Record<string, unknown>,
|
|
249
|
+
) => {
|
|
242
250
|
throw new Error(
|
|
243
|
-
`ctx.reverse() is not available
|
|
251
|
+
`ctx.reverse(${JSON.stringify(name)}) is not available: no route map is bound to this middleware context.`,
|
|
244
252
|
);
|
|
245
253
|
}),
|
|
246
254
|
|
|
@@ -293,6 +301,10 @@ function mergeStubHeaders(
|
|
|
293
301
|
stubOverridesNonCookie: boolean,
|
|
294
302
|
): void {
|
|
295
303
|
stub.forEach((value, name) => {
|
|
304
|
+
// The reserved external-redirect marker is internal and never a trust
|
|
305
|
+
// signal; never copy a stub value (e.g. a stray ctx.header() call) onto a
|
|
306
|
+
// browser-facing response. The opt-in is the out-of-band brand.
|
|
307
|
+
if (name.toLowerCase() === EXTERNAL_REDIRECT_MARKER) return;
|
|
296
308
|
if (name.toLowerCase() === "set-cookie") {
|
|
297
309
|
target.append(name, value);
|
|
298
310
|
} else if (stubOverridesNonCookie || !target.has(name)) {
|
|
@@ -318,12 +330,50 @@ function mergeReqCtxStub(
|
|
|
318
330
|
}
|
|
319
331
|
}
|
|
320
332
|
reqCtx.res.headers.forEach((value, name) => {
|
|
333
|
+
// Never propagate the reserved external-redirect marker (see mergeStubHeaders).
|
|
334
|
+
if (name.toLowerCase() === EXTERNAL_REDIRECT_MARKER) return;
|
|
321
335
|
if (name !== "set-cookie" && !target.has(name)) {
|
|
322
336
|
target.set(name, value);
|
|
323
337
|
}
|
|
324
338
|
});
|
|
325
339
|
}
|
|
326
340
|
|
|
341
|
+
// Clone `base` with stub headers merged into a fresh Headers (the clone keeps
|
|
342
|
+
// the body mutable for post-next() modifications). Set-Cookie is always
|
|
343
|
+
// appended; other headers obey stubOverridesNonCookie (see mergeStubHeaders).
|
|
344
|
+
// mergeReqCtx folds in RequestContext stub cookies/headers; the intercept
|
|
345
|
+
// short-circuit path passes false (its reqCtx headers are not merged here),
|
|
346
|
+
// which is the one deliberate divergence between the call sites.
|
|
347
|
+
function mergeResponse(
|
|
348
|
+
base: Response,
|
|
349
|
+
stub: Headers,
|
|
350
|
+
opts: { stubOverridesNonCookie: boolean; mergeReqCtx: boolean },
|
|
351
|
+
): Response {
|
|
352
|
+
const mergedHeaders = new Headers(base.headers);
|
|
353
|
+
// The reserved external-redirect marker is never a trust signal and must never
|
|
354
|
+
// reach the browser. The guard strips it on 3xx redirects; strip it here too so
|
|
355
|
+
// a forged value cannot ride a non-3xx middleware response (which the 3xx-only
|
|
356
|
+
// guard would not touch) to the client. The opt-in is the out-of-band brand.
|
|
357
|
+
mergedHeaders.delete(EXTERNAL_REDIRECT_MARKER);
|
|
358
|
+
mergeStubHeaders(mergedHeaders, stub, opts.stubOverridesNonCookie);
|
|
359
|
+
if (opts.mergeReqCtx) {
|
|
360
|
+
mergeReqCtxStub(mergedHeaders, _getRequestContext());
|
|
361
|
+
}
|
|
362
|
+
const merged = new Response(base.body, {
|
|
363
|
+
status: base.status,
|
|
364
|
+
statusText: base.statusText,
|
|
365
|
+
headers: mergedHeaders,
|
|
366
|
+
});
|
|
367
|
+
// Transfer the out-of-band external-redirect brand across this rebuild: a
|
|
368
|
+
// middleware short-circuit `return redirect(url, { external: true })` reaches
|
|
369
|
+
// the open-redirect guard only after this merge, and the brand lives on the
|
|
370
|
+
// Response object, not in its headers.
|
|
371
|
+
if (isExternalRedirect(base)) {
|
|
372
|
+
markExternalRedirect(merged);
|
|
373
|
+
}
|
|
374
|
+
return merged;
|
|
375
|
+
}
|
|
376
|
+
|
|
327
377
|
/**
|
|
328
378
|
* Execute middleware chain
|
|
329
379
|
*
|
|
@@ -362,20 +412,16 @@ export async function executeMiddleware<TEnv>(
|
|
|
362
412
|
// End of chain - call actual RSC handler
|
|
363
413
|
const response = await finalHandler();
|
|
364
414
|
|
|
365
|
-
const mergedHeaders = new Headers(response.headers);
|
|
366
|
-
mergeStubHeaders(mergedHeaders, stubResponse.headers, true);
|
|
367
|
-
mergeReqCtxStub(mergedHeaders, _getRequestContext());
|
|
368
|
-
|
|
369
415
|
if (isWebSocketUpgradeResponse(response)) {
|
|
370
416
|
responseHolder.response = response;
|
|
371
417
|
return response;
|
|
372
418
|
}
|
|
373
419
|
|
|
374
|
-
//
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
420
|
+
// Chain ran to completion: stub headers overwrite (stubOverridesNonCookie)
|
|
421
|
+
// and reqCtx stub headers are merged in.
|
|
422
|
+
responseHolder.response = mergeResponse(response, stubResponse.headers, {
|
|
423
|
+
stubOverridesNonCookie: true,
|
|
424
|
+
mergeReqCtx: true,
|
|
379
425
|
});
|
|
380
426
|
|
|
381
427
|
return responseHolder.response;
|
|
@@ -433,9 +479,17 @@ export async function executeMiddleware<TEnv>(
|
|
|
433
479
|
return nextPromise;
|
|
434
480
|
};
|
|
435
481
|
|
|
482
|
+
// Wrap the middleware (including its downstream next() chain) in its span
|
|
483
|
+
// via the unified phase API. metric:false — the middleware's perf metric is
|
|
484
|
+
// its exclusive pre/post own-time, recorded directly above and below, finer
|
|
485
|
+
// than a single wrap. Spans nest by async context, so this onions
|
|
486
|
+
// middleware-over-middleware and the core handler underneath. Pass-through
|
|
487
|
+
// when neither surface is active.
|
|
436
488
|
let result: Response | void;
|
|
437
489
|
try {
|
|
438
|
-
result = await
|
|
490
|
+
result = await observePhase(PHASES.middleware(metricLabel), () =>
|
|
491
|
+
entry.handler(ctx, wrappedNext),
|
|
492
|
+
);
|
|
439
493
|
} catch (error) {
|
|
440
494
|
// Thrown Response is short-circuit control flow, not an error.
|
|
441
495
|
// Fall through to the `if (result instanceof Response)` branch below
|
|
@@ -474,13 +528,11 @@ export async function executeMiddleware<TEnv>(
|
|
|
474
528
|
responseHolder.response = result;
|
|
475
529
|
return result;
|
|
476
530
|
}
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
statusText: result.statusText,
|
|
483
|
-
headers: mergedHeaders,
|
|
531
|
+
// Explicit short-circuit: the returned Response's own headers win
|
|
532
|
+
// (stubOverridesNonCookie=false); reqCtx stub headers still merge in.
|
|
533
|
+
const merged = mergeResponse(result, stubResponse.headers, {
|
|
534
|
+
stubOverridesNonCookie: false,
|
|
535
|
+
mergeReqCtx: true,
|
|
484
536
|
});
|
|
485
537
|
responseHolder.response = merged;
|
|
486
538
|
return merged;
|
|
@@ -579,6 +631,7 @@ export async function executeInterceptMiddleware<TEnv>(
|
|
|
579
631
|
return stubResponse;
|
|
580
632
|
}
|
|
581
633
|
|
|
634
|
+
const ordinal = index;
|
|
582
635
|
const middleware = middlewares[index++];
|
|
583
636
|
const ctx = createMiddlewareContext(
|
|
584
637
|
request,
|
|
@@ -600,9 +653,20 @@ export async function executeInterceptMiddleware<TEnv>(
|
|
|
600
653
|
return next();
|
|
601
654
|
};
|
|
602
655
|
|
|
656
|
+
// Span-wrap each intercept middleware as rango.middleware (metric:false —
|
|
657
|
+
// intercept runs inside the render phase already metered by render:total, so
|
|
658
|
+
// it contributes a span but no separate perf metric). Bare MiddlewareFns
|
|
659
|
+
// have no pattern, so the label is scoped to "*" like a pattern-less entry.
|
|
660
|
+
const label = getMiddlewareMetricLabel(
|
|
661
|
+
{ handler: middleware, pattern: null } as MiddlewareEntry<TEnv>,
|
|
662
|
+
ordinal,
|
|
663
|
+
);
|
|
664
|
+
|
|
603
665
|
let result: Response | void;
|
|
604
666
|
try {
|
|
605
|
-
result = await middleware(
|
|
667
|
+
result = await observePhase(PHASES.middleware(label), () =>
|
|
668
|
+
middleware(ctx, guardedNext),
|
|
669
|
+
);
|
|
606
670
|
} catch (error) {
|
|
607
671
|
// Thrown Response is short-circuit control flow, parity with the
|
|
608
672
|
// explicit-return path below. Real errors propagate.
|
|
@@ -635,15 +699,13 @@ export async function executeInterceptMiddleware<TEnv>(
|
|
|
635
699
|
});
|
|
636
700
|
|
|
637
701
|
if (hasStubHeaders) {
|
|
638
|
-
//
|
|
639
|
-
//
|
|
640
|
-
//
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
statusText: response.statusText,
|
|
646
|
-
headers: mergedHeaders,
|
|
702
|
+
// Only fill in missing headers — the returned Response's explicit headers
|
|
703
|
+
// take precedence (stubOverridesNonCookie=false), matching executeMiddleware.
|
|
704
|
+
// mergeReqCtx=false: the intercept path deliberately does NOT merge reqCtx
|
|
705
|
+
// stub headers here (pinned by intercept-middleware-headers.test.ts).
|
|
706
|
+
return mergeResponse(response, stubResponse.headers, {
|
|
707
|
+
stubOverridesNonCookie: false,
|
|
708
|
+
mergeReqCtx: false,
|
|
647
709
|
});
|
|
648
710
|
}
|
|
649
711
|
return response;
|
|
@@ -684,7 +746,6 @@ export async function executeLoaderMiddleware<TEnv>(
|
|
|
684
746
|
regex: null,
|
|
685
747
|
paramNames: [],
|
|
686
748
|
handler,
|
|
687
|
-
mountPrefix: null,
|
|
688
749
|
} as MiddlewareEntry<TEnv>,
|
|
689
750
|
params,
|
|
690
751
|
}));
|
|
@@ -74,7 +74,6 @@ export function parsePattern(pattern: string): ParsedSegment[] {
|
|
|
74
74
|
export interface CompiledPattern {
|
|
75
75
|
regex: RegExp;
|
|
76
76
|
paramNames: string[];
|
|
77
|
-
optionalParams: Set<string>;
|
|
78
77
|
hasTrailingSlash: boolean;
|
|
79
78
|
/**
|
|
80
79
|
* Param-name → allowed values for constrained params (e.g. `:lang(en|gb)`).
|
|
@@ -142,7 +141,6 @@ export function compilePattern(pattern: string): CompiledPattern {
|
|
|
142
141
|
|
|
143
142
|
const segments = parsePattern(normalizedPattern);
|
|
144
143
|
const paramNames: string[] = [];
|
|
145
|
-
const optionalParams = new Set<string>();
|
|
146
144
|
let constraints: Record<string, string[]> | undefined;
|
|
147
145
|
|
|
148
146
|
let regexPattern = "";
|
|
@@ -164,7 +162,6 @@ export function compilePattern(pattern: string): CompiledPattern {
|
|
|
164
162
|
}
|
|
165
163
|
|
|
166
164
|
if (segment.optional) {
|
|
167
|
-
optionalParams.add(segment.value);
|
|
168
165
|
// Optional: make the whole /segment optional
|
|
169
166
|
regexPattern += `(?:/${valuePattern}${suffixPattern})?`;
|
|
170
167
|
} else {
|
|
@@ -202,7 +199,6 @@ export function compilePattern(pattern: string): CompiledPattern {
|
|
|
202
199
|
return {
|
|
203
200
|
regex: new RegExp(`^${regexPattern}$`),
|
|
204
201
|
paramNames,
|
|
205
|
-
optionalParams,
|
|
206
202
|
hasTrailingSlash,
|
|
207
203
|
...(constraints ? { constraints } : {}),
|
|
208
204
|
};
|
|
@@ -325,8 +321,8 @@ export function joinPrefix(base: string | undefined, prefix: string): string {
|
|
|
325
321
|
*
|
|
326
322
|
* Note: Optional params that are absent in the path are omitted from the
|
|
327
323
|
* returned `params` (read as `undefined`), matching the trie matcher and
|
|
328
|
-
* the `ExtractParams<"/:locale?/...">` type. Use the pattern definition
|
|
329
|
-
*
|
|
324
|
+
* the `ExtractParams<"/:locale?/...">` type. Use the pattern definition to
|
|
325
|
+
* determine which keys are optional.
|
|
330
326
|
*
|
|
331
327
|
* Trailing slash handling (priority order):
|
|
332
328
|
* 1. Per-route `trailingSlash` config from route()
|
|
@@ -344,7 +340,6 @@ export interface RouteMatchResult<TEnv = any> {
|
|
|
344
340
|
entry: RouteEntry<TEnv>;
|
|
345
341
|
routeKey: string;
|
|
346
342
|
params: Record<string, string>;
|
|
347
|
-
optionalParams: Set<string>;
|
|
348
343
|
redirectTo?: string;
|
|
349
344
|
/** Route has pre-rendered data available (from trie) */
|
|
350
345
|
pr?: true;
|
|
@@ -463,13 +458,8 @@ export function findMatch<TEnv>(
|
|
|
463
458
|
fullPattern = entry.prefix + pattern;
|
|
464
459
|
}
|
|
465
460
|
|
|
466
|
-
const {
|
|
467
|
-
|
|
468
|
-
paramNames,
|
|
469
|
-
optionalParams,
|
|
470
|
-
hasTrailingSlash,
|
|
471
|
-
constraints,
|
|
472
|
-
} = getCompiledPattern(fullPattern);
|
|
461
|
+
const { regex, paramNames, hasTrailingSlash, constraints } =
|
|
462
|
+
getCompiledPattern(fullPattern);
|
|
473
463
|
|
|
474
464
|
const trailingSlashMode: TrailingSlashMode | undefined =
|
|
475
465
|
entry.trailingSlash?.[routeKey];
|
|
@@ -506,7 +496,6 @@ export function findMatch<TEnv>(
|
|
|
506
496
|
entry,
|
|
507
497
|
routeKey,
|
|
508
498
|
params,
|
|
509
|
-
optionalParams,
|
|
510
499
|
redirectTo: pathname + "/",
|
|
511
500
|
...prFlag,
|
|
512
501
|
...ptFlag,
|
|
@@ -516,7 +505,6 @@ export function findMatch<TEnv>(
|
|
|
516
505
|
entry,
|
|
517
506
|
routeKey,
|
|
518
507
|
params,
|
|
519
|
-
optionalParams,
|
|
520
508
|
redirectTo: pathname.slice(0, -1),
|
|
521
509
|
...prFlag,
|
|
522
510
|
...ptFlag,
|
|
@@ -527,7 +515,6 @@ export function findMatch<TEnv>(
|
|
|
527
515
|
entry,
|
|
528
516
|
routeKey,
|
|
529
517
|
params,
|
|
530
|
-
optionalParams,
|
|
531
518
|
...prFlag,
|
|
532
519
|
...ptFlag,
|
|
533
520
|
};
|
|
@@ -546,7 +533,6 @@ export function findMatch<TEnv>(
|
|
|
546
533
|
entry,
|
|
547
534
|
routeKey,
|
|
548
535
|
params,
|
|
549
|
-
optionalParams,
|
|
550
536
|
...prFlag,
|
|
551
537
|
...ptFlag,
|
|
552
538
|
};
|
|
@@ -556,7 +542,6 @@ export function findMatch<TEnv>(
|
|
|
556
542
|
entry,
|
|
557
543
|
routeKey,
|
|
558
544
|
params,
|
|
559
|
-
optionalParams,
|
|
560
545
|
redirectTo: alternatePathname,
|
|
561
546
|
...prFlag,
|
|
562
547
|
...ptFlag,
|
|
@@ -566,7 +551,6 @@ export function findMatch<TEnv>(
|
|
|
566
551
|
entry,
|
|
567
552
|
routeKey,
|
|
568
553
|
params,
|
|
569
|
-
optionalParams,
|
|
570
554
|
...prFlag,
|
|
571
555
|
...ptFlag,
|
|
572
556
|
};
|
|
@@ -576,7 +560,6 @@ export function findMatch<TEnv>(
|
|
|
576
560
|
entry,
|
|
577
561
|
routeKey,
|
|
578
562
|
params,
|
|
579
|
-
optionalParams,
|
|
580
563
|
redirectTo: alternatePathname,
|
|
581
564
|
...prFlag,
|
|
582
565
|
...ptFlag,
|
|
@@ -586,7 +569,6 @@ export function findMatch<TEnv>(
|
|
|
586
569
|
entry,
|
|
587
570
|
routeKey,
|
|
588
571
|
params,
|
|
589
|
-
optionalParams,
|
|
590
572
|
...prFlag,
|
|
591
573
|
...ptFlag,
|
|
592
574
|
};
|
|
@@ -598,7 +580,6 @@ export function findMatch<TEnv>(
|
|
|
598
580
|
entry,
|
|
599
581
|
routeKey,
|
|
600
582
|
params,
|
|
601
|
-
optionalParams,
|
|
602
583
|
redirectTo: canonicalPath,
|
|
603
584
|
...prFlag,
|
|
604
585
|
...ptFlag,
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
runWithRequestContext,
|
|
6
6
|
type RequestContext,
|
|
7
7
|
} from "../server/request-context.js";
|
|
8
|
-
import { contextGet, contextSet } from "../context-var.js";
|
|
8
|
+
import { contextGet, contextSet, hasContextVars } from "../context-var.js";
|
|
9
9
|
import {
|
|
10
10
|
createPrerenderContext,
|
|
11
11
|
createStaticContext,
|
|
@@ -17,6 +17,7 @@ import { setupBuildUse } from "./loader-resolution.js";
|
|
|
17
17
|
import { loadManifest } from "./manifest.js";
|
|
18
18
|
import { traverseBack } from "./pattern-matching.js";
|
|
19
19
|
import type { RouterContext } from "./router-context.js";
|
|
20
|
+
import type { ResolveSegmentOptions } from "./segment-resolution.js";
|
|
20
21
|
import { runWithRouterContext } from "./router-context.js";
|
|
21
22
|
import type { EntryData, InterceptEntry } from "../server/context";
|
|
22
23
|
import type {
|
|
@@ -40,7 +41,7 @@ export interface PrerenderMatchDeps<TEnv = any> {
|
|
|
40
41
|
params: Record<string, string>,
|
|
41
42
|
context: HandlerContext<any, TEnv>,
|
|
42
43
|
loaderPromises: Map<string, Promise<any>>,
|
|
43
|
-
options?:
|
|
44
|
+
options?: ResolveSegmentOptions,
|
|
44
45
|
) => Promise<ResolvedSegment[]>;
|
|
45
46
|
}
|
|
46
47
|
|
|
@@ -159,10 +160,7 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
159
160
|
return passthroughResult();
|
|
160
161
|
}
|
|
161
162
|
// Preserve vars set by getParams() for the render context
|
|
162
|
-
if (
|
|
163
|
-
Object.keys(probeBuildVars).length > 0 ||
|
|
164
|
-
Object.getOwnPropertySymbols(probeBuildVars).length > 0
|
|
165
|
-
) {
|
|
163
|
+
if (hasContextVars(probeBuildVars)) {
|
|
166
164
|
devProbeBuildVars = probeBuildVars;
|
|
167
165
|
}
|
|
168
166
|
} catch (err: any) {
|
|
@@ -260,7 +258,9 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
260
258
|
matchedParams,
|
|
261
259
|
buildCtx,
|
|
262
260
|
loaderPromises,
|
|
263
|
-
|
|
261
|
+
// throwOnError: a render failure (or `throw new Skip()`) must reach the
|
|
262
|
+
// build/dev caller, not be baked into a frozen error page (issue #587).
|
|
263
|
+
{ skipLoaders: true, throwOnError: true },
|
|
264
264
|
);
|
|
265
265
|
|
|
266
266
|
// 9. Detect passthrough sentinel: handler returned ctx.passthrough().
|
|
@@ -332,6 +332,18 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
332
332
|
const interceptResolvedSegments: typeof nonLoaderSegments = [];
|
|
333
333
|
|
|
334
334
|
for (const { intercept, entry: parentEntry } of foundIntercepts) {
|
|
335
|
+
// setupBuildUse keys handle pushes by ctx._currentSegmentId. The main
|
|
336
|
+
// resolveAllSegments pass left it on the route's segment id, so pin it
|
|
337
|
+
// to THIS intercept's slot id before resolving the handler/layout --
|
|
338
|
+
// otherwise the intercept's ctx.use() handle pushes land in the wrong
|
|
339
|
+
// bucket and getDataForSegment(seg.id) below drops them from the baked
|
|
340
|
+
// artifact. Re-pinned per iteration so multiple intercepts targeting
|
|
341
|
+
// the same route each get their own id (mirrors fresh.ts parallel-slot
|
|
342
|
+
// pinning).
|
|
343
|
+
const interceptSegmentId = `${parentEntry.shortCode}.${intercept.slotName}`;
|
|
344
|
+
(buildCtx as InternalHandlerContext<any, TEnv>)._currentSegmentId =
|
|
345
|
+
interceptSegmentId;
|
|
346
|
+
|
|
335
347
|
// Resolve handler
|
|
336
348
|
const handlerRaw =
|
|
337
349
|
typeof intercept.handler === "function"
|
|
@@ -358,7 +370,7 @@ export async function matchForPrerender<TEnv = any>(
|
|
|
358
370
|
}
|
|
359
371
|
|
|
360
372
|
interceptResolvedSegments.push({
|
|
361
|
-
id:
|
|
373
|
+
id: interceptSegmentId,
|
|
362
374
|
namespace: `intercept:${intercept.routeName}`,
|
|
363
375
|
type: "parallel" as const,
|
|
364
376
|
index: 0,
|
|
@@ -489,6 +501,18 @@ export async function renderStaticSegment<TEnv = any>(
|
|
|
489
501
|
|
|
490
502
|
const raw = await handler(buildCtx);
|
|
491
503
|
|
|
504
|
+
// Static handlers must return a ReactNode. A returned Response (e.g. an
|
|
505
|
+
// accidental redirect()) would otherwise be serialized as a corrupt build
|
|
506
|
+
// artifact; fail loudly instead. The fresh/revalidation paths route handler
|
|
507
|
+
// results through handleHandlerResult, which throws Responses; the static
|
|
508
|
+
// build path bypasses that, so guard here.
|
|
509
|
+
if (raw instanceof Response) {
|
|
510
|
+
throw new TypeError(
|
|
511
|
+
`Static handler "${routeName}" returned a Response. Static handlers must return a ReactNode; ` +
|
|
512
|
+
`Responses (redirects, file responses) are not supported during static pre-rendering.`,
|
|
513
|
+
);
|
|
514
|
+
}
|
|
515
|
+
|
|
492
516
|
const segment: ResolvedSegment = {
|
|
493
517
|
id: handlerId,
|
|
494
518
|
namespace: handlerId,
|
|
@@ -33,16 +33,21 @@ function resolveActionRefId(ref: unknown): string | undefined {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
/**
|
|
36
|
-
* Build the `isAction()` helper bound to the current action's id.
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
36
|
+
* Build the `isAction()` helper bound to the current action's id. Called with no
|
|
37
|
+
* arguments it answers "is this request an action at all?" (any action) — `true`
|
|
38
|
+
* during action handling, `false` on plain navigation. Called with one or more
|
|
39
|
+
* action references it narrows to those: a single imported action, several
|
|
40
|
+
* (variadic), or any export of a namespace import (`import * as Mod`). Returns
|
|
41
|
+
* `false` when there is no action (plain navigation) or nothing matches.
|
|
40
42
|
*/
|
|
41
43
|
function makeIsAction(
|
|
42
44
|
currentActionId: string | undefined,
|
|
43
45
|
): (...actions: ActionRef[]) => boolean {
|
|
44
46
|
return (...actions: ActionRef[]): boolean => {
|
|
45
47
|
if (!currentActionId) return false;
|
|
48
|
+
// Bare isAction(): an action is in flight (currentActionId is set) and the
|
|
49
|
+
// caller did not narrow to a specific action, so this is "any action".
|
|
50
|
+
if (actions.length === 0) return true;
|
|
46
51
|
for (const action of actions) {
|
|
47
52
|
if (typeof action === "function") {
|
|
48
53
|
if (resolveActionRefId(action) === currentActionId) return true;
|
|
@@ -230,7 +230,6 @@ export function createRouteSnapshot<TEnv = any>(
|
|
|
230
230
|
entry: {} as any,
|
|
231
231
|
routeKey: "test",
|
|
232
232
|
params: {},
|
|
233
|
-
optionalParams: new Set(),
|
|
234
233
|
} as RouteMatchResult<TEnv>,
|
|
235
234
|
manifestEntry: { type: "route", shortCode: "R0", parent: null } as any,
|
|
236
235
|
entries: [],
|
|
@@ -19,6 +19,7 @@ import type {
|
|
|
19
19
|
} from "../types.js";
|
|
20
20
|
import type { RouteMatchResult } from "./pattern-matching.js";
|
|
21
21
|
import type { TelemetrySink } from "./telemetry.js";
|
|
22
|
+
import type { ResolveSegmentOptions } from "./segment-resolution.js";
|
|
22
23
|
|
|
23
24
|
/**
|
|
24
25
|
* Revalidation context passed to segment resolution
|
|
@@ -123,7 +124,6 @@ export interface RouterContext<TEnv = any> {
|
|
|
123
124
|
request: Request,
|
|
124
125
|
prevUrl: URL,
|
|
125
126
|
nextUrl: URL,
|
|
126
|
-
loaderPromises: Map<string, Promise<any>>,
|
|
127
127
|
actionContext: any | undefined,
|
|
128
128
|
interceptResult: InterceptResult | null,
|
|
129
129
|
localRouteName: string,
|
|
@@ -196,7 +196,7 @@ export interface RouterContext<TEnv = any> {
|
|
|
196
196
|
params: Record<string, string>,
|
|
197
197
|
handlerContext: HandlerContext<any, TEnv>,
|
|
198
198
|
loaderPromises: Map<string, Promise<any>>,
|
|
199
|
-
options?:
|
|
199
|
+
options?: ResolveSegmentOptions,
|
|
200
200
|
) => Promise<ResolvedSegment[]>;
|
|
201
201
|
|
|
202
202
|
resolveAllSegmentsGenerator?: (
|
|
@@ -9,10 +9,12 @@ import type { NonceProvider } from "../rsc/types.js";
|
|
|
9
9
|
import type { ExecutionContext } from "../server/request-context.js";
|
|
10
10
|
import type { SerializedSegmentData } from "../cache/types.js";
|
|
11
11
|
import type { MiddlewareEntry, MiddlewareFn } from "./middleware.js";
|
|
12
|
+
import type { ExtractParams } from "../types/route-config.js";
|
|
12
13
|
import { RSC_ROUTER_BRAND } from "./router-registry.js";
|
|
13
14
|
import type { RangoOptions, RootLayoutProps } from "./router-options.js";
|
|
14
15
|
import type { DefaultVars } from "../types/global-namespace.js";
|
|
15
16
|
import type { ResolvedTimeouts, OnTimeoutCallback } from "./timeout.js";
|
|
17
|
+
import type { ResolvedTracing } from "./tracing.js";
|
|
16
18
|
|
|
17
19
|
/**
|
|
18
20
|
* Options passed to router.fetch(), router.match(), and other request entrypoints.
|
|
@@ -105,9 +107,14 @@ export interface Rango<
|
|
|
105
107
|
* createRouter({ document: RootLayout })
|
|
106
108
|
* .use(loggerMiddleware) // All routes
|
|
107
109
|
* .use("/api/*", rateLimiter) // Pattern match
|
|
110
|
+
* .use("/users/:id", (ctx) => {}) // ctx.params.id is typed
|
|
108
111
|
* .routes(urlpatterns)
|
|
109
112
|
* ```
|
|
110
113
|
*/
|
|
114
|
+
use<Pattern extends string>(
|
|
115
|
+
pattern: Pattern,
|
|
116
|
+
middleware: MiddlewareFn<TEnv, ExtractParams<Pattern>>,
|
|
117
|
+
): Rango<TEnv, TRoutes>;
|
|
111
118
|
use(
|
|
112
119
|
patternOrMiddleware: string | MiddlewareFn<TEnv>,
|
|
113
120
|
middleware?: MiddlewareFn<TEnv>,
|
|
@@ -225,6 +232,10 @@ export interface RangoInternal<
|
|
|
225
232
|
/**
|
|
226
233
|
* Add global middleware that runs on all routes
|
|
227
234
|
*/
|
|
235
|
+
use<Pattern extends string>(
|
|
236
|
+
pattern: Pattern,
|
|
237
|
+
middleware: MiddlewareFn<TEnv, ExtractParams<Pattern>>,
|
|
238
|
+
): Rango<TEnv, TRoutes>;
|
|
228
239
|
use(
|
|
229
240
|
patternOrMiddleware: string | MiddlewareFn<TEnv>,
|
|
230
241
|
middleware?: MiddlewareFn<TEnv>,
|
|
@@ -310,6 +321,13 @@ export interface RangoInternal<
|
|
|
310
321
|
*/
|
|
311
322
|
readonly debugPerformance?: boolean;
|
|
312
323
|
|
|
324
|
+
/**
|
|
325
|
+
* Resolved platform phase-span tracing (Cloudflare custom spans or OTel), or
|
|
326
|
+
* undefined when off. Threaded onto the request context and read at each
|
|
327
|
+
* traced phase.
|
|
328
|
+
*/
|
|
329
|
+
readonly tracing?: ResolvedTracing;
|
|
330
|
+
|
|
313
331
|
/**
|
|
314
332
|
* Whether ?__debug_manifest is allowed in production.
|
|
315
333
|
* Always enabled in development.
|
|
@@ -11,6 +11,7 @@ import type { UrlPatterns } from "../urls.js";
|
|
|
11
11
|
import type { UrlBuilder } from "../urls/pattern-types.js";
|
|
12
12
|
import type { NamedRouteEntry } from "./content-negotiation.js";
|
|
13
13
|
import type { TelemetrySink } from "./telemetry.js";
|
|
14
|
+
import type { RouterTracingConfig } from "./tracing.js";
|
|
14
15
|
import type { RouterTimeouts, OnTimeoutCallback } from "./timeout.js";
|
|
15
16
|
|
|
16
17
|
/**
|
|
@@ -574,11 +575,14 @@ export interface RangoOptions<TEnv = any> {
|
|
|
574
575
|
onTimeout?: OnTimeoutCallback<TEnv>;
|
|
575
576
|
|
|
576
577
|
/**
|
|
577
|
-
* Telemetry sink for structured lifecycle
|
|
578
|
+
* Telemetry sink for structured, discrete lifecycle EVENTS: request
|
|
579
|
+
* start/end/error, loader start/end/error, handler errors, cache decisions,
|
|
580
|
+
* revalidation decisions, timeouts, origin rejections.
|
|
578
581
|
*
|
|
579
|
-
*
|
|
580
|
-
*
|
|
581
|
-
*
|
|
582
|
+
* This is the EVENT surface. Phase-duration SPANS (request/loader/render/ssr
|
|
583
|
+
* timing wired into a tracing backend) come from the separate `tracing`
|
|
584
|
+
* option below — a sink does not emit them, because async-context nesting
|
|
585
|
+
* cannot be faithfully reconstructed from after-the-fact start/end events.
|
|
582
586
|
*
|
|
583
587
|
* No-op when not configured (zero overhead).
|
|
584
588
|
*
|
|
@@ -591,6 +595,18 @@ export interface RangoOptions<TEnv = any> {
|
|
|
591
595
|
* });
|
|
592
596
|
* ```
|
|
593
597
|
*
|
|
598
|
+
* @example OpenTelemetry — pair the event sink with the tracing slot
|
|
599
|
+
* ```typescript
|
|
600
|
+
* import { createOTelTracing, createOTelSink } from "@rangojs/router";
|
|
601
|
+
* import { trace } from "@opentelemetry/api";
|
|
602
|
+
*
|
|
603
|
+
* const tracer = trace.getTracer("my-app");
|
|
604
|
+
* const router = createRouter({
|
|
605
|
+
* tracing: createOTelTracing(tracer), // phase spans
|
|
606
|
+
* telemetry: createOTelSink(tracer), // discrete-fact events
|
|
607
|
+
* });
|
|
608
|
+
* ```
|
|
609
|
+
*
|
|
594
610
|
* @example Custom sink
|
|
595
611
|
* ```typescript
|
|
596
612
|
* const router = createRouter({
|
|
@@ -604,6 +620,44 @@ export interface RangoOptions<TEnv = any> {
|
|
|
604
620
|
*/
|
|
605
621
|
telemetry?: TelemetrySink;
|
|
606
622
|
|
|
623
|
+
/**
|
|
624
|
+
* Span tracing for the router's performance phases (request, middleware, action,
|
|
625
|
+
* loaders, render, ssr). Connects the same phases shown in the
|
|
626
|
+
* `debugPerformance` timeline to the host platform's tracing system. This is
|
|
627
|
+
* the SPAN surface (the `telemetry` option above is the event surface).
|
|
628
|
+
*
|
|
629
|
+
* Two factories produce a config, both for this slot:
|
|
630
|
+
* - `createOTelTracing(tracer)` from `@rangojs/router` — any platform with an
|
|
631
|
+
* OpenTelemetry SDK (including Node). Bridges the phases onto
|
|
632
|
+
* `tracer.startActiveSpan`.
|
|
633
|
+
* - `createCloudflareTracing()` from `@rangojs/router/cloudflare` — Cloudflare
|
|
634
|
+
* Workers native custom spans, alongside the automatic KV/D1/fetch spans.
|
|
635
|
+
*
|
|
636
|
+
* When tracing is unset — or off-platform (no OTel SDK / no Cloudflare tracing
|
|
637
|
+
* destination) — every span call falls through to the work directly, so the
|
|
638
|
+
* request behaves exactly as if tracing were off.
|
|
639
|
+
*
|
|
640
|
+
* @example OpenTelemetry
|
|
641
|
+
* ```typescript
|
|
642
|
+
* import { createOTelTracing } from "@rangojs/router";
|
|
643
|
+
* import { trace } from "@opentelemetry/api";
|
|
644
|
+
*
|
|
645
|
+
* const router = createRouter({
|
|
646
|
+
* tracing: createOTelTracing(trace.getTracer("my-app")),
|
|
647
|
+
* });
|
|
648
|
+
* ```
|
|
649
|
+
*
|
|
650
|
+
* @example Cloudflare
|
|
651
|
+
* ```typescript
|
|
652
|
+
* import { createCloudflareTracing } from "@rangojs/router/cloudflare";
|
|
653
|
+
*
|
|
654
|
+
* const router = createRouter({
|
|
655
|
+
* tracing: createCloudflareTracing({ spans: { ssr: false } }),
|
|
656
|
+
* });
|
|
657
|
+
* ```
|
|
658
|
+
*/
|
|
659
|
+
tracing?: RouterTracingConfig;
|
|
660
|
+
|
|
607
661
|
/**
|
|
608
662
|
* SSR configuration options.
|
|
609
663
|
*
|