@rangojs/router 0.0.0-experimental.ea6d5eec → 0.0.0-experimental.eb0645d3
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 +124 -38
- 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 +130 -47
- package/dist/bin/rango.js.map +1 -0
- package/dist/browser/event-controller.d.ts +191 -0
- package/dist/browser/event-controller.d.ts.map +1 -0
- package/dist/browser/event-controller.js +559 -0
- package/dist/browser/event-controller.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/link-interceptor.d.ts +38 -0
- package/dist/browser/link-interceptor.d.ts.map +1 -0
- package/dist/browser/link-interceptor.js +99 -0
- package/dist/browser/link-interceptor.js.map +1 -0
- package/dist/browser/logging.d.ts +10 -0
- package/dist/browser/logging.d.ts.map +1 -0
- package/dist/browser/logging.js +29 -0
- package/dist/browser/logging.js.map +1 -0
- package/dist/browser/lru-cache.d.ts +17 -0
- package/dist/browser/lru-cache.d.ts.map +1 -0
- package/dist/browser/lru-cache.js +50 -0
- package/dist/browser/lru-cache.js.map +1 -0
- package/dist/browser/merge-segment-loaders.d.ts +39 -0
- package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
- package/dist/browser/merge-segment-loaders.js +102 -0
- package/dist/browser/merge-segment-loaders.js.map +1 -0
- package/dist/browser/navigation-bridge.d.ts +102 -0
- package/dist/browser/navigation-bridge.d.ts.map +1 -0
- package/dist/browser/navigation-bridge.js +708 -0
- package/dist/browser/navigation-bridge.js.map +1 -0
- package/dist/browser/navigation-client.d.ts +25 -0
- package/dist/browser/navigation-client.d.ts.map +1 -0
- package/dist/browser/navigation-client.js +157 -0
- package/dist/browser/navigation-client.js.map +1 -0
- package/dist/browser/navigation-store.d.ts +101 -0
- package/dist/browser/navigation-store.d.ts.map +1 -0
- package/dist/browser/navigation-store.js +625 -0
- package/dist/browser/navigation-store.js.map +1 -0
- package/dist/browser/partial-update.d.ts +75 -0
- package/dist/browser/partial-update.d.ts.map +1 -0
- package/dist/browser/partial-update.js +426 -0
- package/dist/browser/partial-update.js.map +1 -0
- package/dist/browser/react/Link.d.ts +86 -0
- package/dist/browser/react/Link.d.ts.map +1 -0
- package/dist/browser/react/Link.js +128 -0
- package/dist/browser/react/Link.js.map +1 -0
- package/dist/browser/react/NavigationProvider.d.ts +63 -0
- package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
- package/dist/browser/react/NavigationProvider.js +216 -0
- package/dist/browser/react/NavigationProvider.js.map +1 -0
- package/dist/browser/react/ScrollRestoration.d.ts +75 -0
- package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
- package/dist/browser/react/ScrollRestoration.js +57 -0
- package/dist/browser/react/ScrollRestoration.js.map +1 -0
- package/dist/browser/react/context.d.ts +46 -0
- package/dist/browser/react/context.d.ts.map +1 -0
- package/dist/browser/react/context.js +10 -0
- package/dist/browser/react/context.js.map +1 -0
- package/dist/browser/react/index.d.ts +11 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/index.js +22 -0
- package/dist/browser/react/index.js.map +1 -0
- package/dist/browser/react/location-state-shared.d.ts +63 -0
- package/dist/browser/react/location-state-shared.d.ts.map +1 -0
- package/dist/browser/react/location-state-shared.js +81 -0
- package/dist/browser/react/location-state-shared.js.map +1 -0
- package/dist/browser/react/location-state.d.ts +23 -0
- package/dist/browser/react/location-state.d.ts.map +1 -0
- package/dist/browser/react/location-state.js +29 -0
- package/dist/browser/react/location-state.js.map +1 -0
- package/dist/browser/react/mount-context.d.ts +24 -0
- package/dist/browser/react/mount-context.d.ts.map +1 -0
- package/dist/browser/react/mount-context.js +24 -0
- package/dist/browser/react/mount-context.js.map +1 -0
- package/dist/browser/react/use-action.d.ts +64 -0
- package/dist/browser/react/use-action.d.ts.map +1 -0
- package/dist/browser/react/use-action.js +134 -0
- package/dist/browser/react/use-action.js.map +1 -0
- package/dist/browser/react/use-client-cache.d.ts +41 -0
- package/dist/browser/react/use-client-cache.d.ts.map +1 -0
- package/dist/browser/react/use-client-cache.js +39 -0
- package/dist/browser/react/use-client-cache.js.map +1 -0
- package/dist/browser/react/use-handle.d.ts +31 -0
- package/dist/browser/react/use-handle.d.ts.map +1 -0
- package/dist/browser/react/use-handle.js +144 -0
- package/dist/browser/react/use-handle.js.map +1 -0
- package/dist/browser/react/use-href.d.ts +33 -0
- package/dist/browser/react/use-href.d.ts.map +1 -0
- package/dist/browser/react/use-href.js +39 -0
- package/dist/browser/react/use-href.js.map +1 -0
- package/dist/browser/react/use-link-status.d.ts +37 -0
- package/dist/browser/react/use-link-status.d.ts.map +1 -0
- package/dist/browser/react/use-link-status.js +99 -0
- package/dist/browser/react/use-link-status.js.map +1 -0
- package/dist/browser/react/use-mount.d.ts +25 -0
- package/dist/browser/react/use-mount.d.ts.map +1 -0
- package/dist/browser/react/use-mount.js +30 -0
- package/dist/browser/react/use-mount.js.map +1 -0
- package/dist/browser/react/use-navigation.d.ts +27 -0
- package/dist/browser/react/use-navigation.d.ts.map +1 -0
- package/dist/browser/react/use-navigation.js +87 -0
- package/dist/browser/react/use-navigation.js.map +1 -0
- package/dist/browser/react/use-segments.d.ts +38 -0
- package/dist/browser/react/use-segments.d.ts.map +1 -0
- package/dist/browser/react/use-segments.js +130 -0
- package/dist/browser/react/use-segments.js.map +1 -0
- package/dist/browser/request-controller.d.ts +26 -0
- package/dist/browser/request-controller.d.ts.map +1 -0
- package/dist/browser/request-controller.js +147 -0
- package/dist/browser/request-controller.js.map +1 -0
- package/dist/browser/rsc-router.d.ts +129 -0
- package/dist/browser/rsc-router.d.ts.map +1 -0
- package/dist/browser/rsc-router.js +195 -0
- package/dist/browser/rsc-router.js.map +1 -0
- package/dist/browser/scroll-restoration.d.ts +93 -0
- package/dist/browser/scroll-restoration.d.ts.map +1 -0
- package/dist/browser/scroll-restoration.js +321 -0
- package/dist/browser/scroll-restoration.js.map +1 -0
- package/dist/browser/segment-structure-assert.d.ts +17 -0
- package/dist/browser/segment-structure-assert.d.ts.map +1 -0
- package/dist/browser/segment-structure-assert.js +59 -0
- package/dist/browser/segment-structure-assert.js.map +1 -0
- package/dist/browser/server-action-bridge.d.ts +26 -0
- package/dist/browser/server-action-bridge.d.ts.map +1 -0
- package/dist/browser/server-action-bridge.js +668 -0
- package/dist/browser/server-action-bridge.js.map +1 -0
- package/dist/browser/shallow.d.ts +12 -0
- package/dist/browser/shallow.d.ts.map +1 -0
- package/dist/browser/shallow.js +34 -0
- package/dist/browser/shallow.js.map +1 -0
- package/dist/browser/types.d.ts +369 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
- package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-cli.test.js +237 -0
- package/dist/build/__tests__/generate-cli.test.js.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.js +119 -0
- package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.js +620 -0
- package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.js +308 -0
- package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +81 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +276 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/build/generate-route-types.d.ts +115 -0
- package/dist/build/generate-route-types.d.ts.map +1 -0
- package/dist/build/generate-route-types.js +740 -0
- package/dist/build/generate-route-types.js.map +1 -0
- package/dist/build/index.d.ts +21 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +21 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/route-trie.d.ts +71 -0
- package/dist/build/route-trie.d.ts.map +1 -0
- package/dist/build/route-trie.js +175 -0
- package/dist/build/route-trie.js.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.js +208 -0
- package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
- package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
- package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
- package/dist/cache/__tests__/document-cache.test.js +345 -0
- package/dist/cache/__tests__/document-cache.test.js.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
- package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
- package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-store.test.js +367 -0
- package/dist/cache/__tests__/memory-store.test.js.map +1 -0
- package/dist/cache/cache-scope.d.ts +102 -0
- package/dist/cache/cache-scope.d.ts.map +1 -0
- package/dist/cache/cache-scope.js +440 -0
- package/dist/cache/cache-scope.js.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
- package/dist/cache/cf/cf-cache-store.d.ts +165 -0
- package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
- package/dist/cache/cf/cf-cache-store.js +242 -0
- package/dist/cache/cf/cf-cache-store.js.map +1 -0
- package/dist/cache/cf/index.d.ts +14 -0
- package/dist/cache/cf/index.d.ts.map +1 -0
- package/dist/cache/cf/index.js +17 -0
- package/dist/cache/cf/index.js.map +1 -0
- package/dist/cache/document-cache.d.ts +64 -0
- package/dist/cache/document-cache.d.ts.map +1 -0
- package/dist/cache/document-cache.js +228 -0
- package/dist/cache/document-cache.js.map +1 -0
- package/dist/cache/index.d.ts +19 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-segment-store.d.ts +110 -0
- package/dist/cache/memory-segment-store.d.ts.map +1 -0
- package/dist/cache/memory-segment-store.js +117 -0
- package/dist/cache/memory-segment-store.js.map +1 -0
- package/dist/cache/memory-store.d.ts +41 -0
- package/dist/cache/memory-store.d.ts.map +1 -0
- package/dist/cache/memory-store.js +191 -0
- package/dist/cache/memory-store.js.map +1 -0
- package/dist/cache/types.d.ts +317 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +12 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client.d.ts +248 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +367 -0
- package/dist/client.js.map +1 -0
- package/dist/client.rsc.d.ts +26 -0
- package/dist/client.rsc.d.ts.map +1 -0
- package/dist/client.rsc.js +46 -0
- package/dist/client.rsc.js.map +1 -0
- package/dist/component-utils.d.ts +36 -0
- package/dist/component-utils.d.ts.map +1 -0
- package/dist/component-utils.js +61 -0
- package/dist/component-utils.js.map +1 -0
- package/dist/components/DefaultDocument.d.ts +13 -0
- package/dist/components/DefaultDocument.d.ts.map +1 -0
- package/dist/components/DefaultDocument.js +15 -0
- package/dist/components/DefaultDocument.js.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +157 -0
- package/dist/debug.js.map +1 -0
- package/dist/default-error-boundary.d.ts +11 -0
- package/dist/default-error-boundary.d.ts.map +1 -0
- package/dist/default-error-boundary.js +45 -0
- package/dist/default-error-boundary.js.map +1 -0
- package/dist/deps/browser.d.ts +2 -0
- package/dist/deps/browser.d.ts.map +1 -0
- package/dist/deps/browser.js +3 -0
- package/dist/deps/browser.js.map +1 -0
- package/dist/deps/html-stream-client.d.ts +2 -0
- package/dist/deps/html-stream-client.d.ts.map +1 -0
- package/dist/deps/html-stream-client.js +3 -0
- package/dist/deps/html-stream-client.js.map +1 -0
- package/dist/deps/html-stream-server.d.ts +2 -0
- package/dist/deps/html-stream-server.d.ts.map +1 -0
- package/dist/deps/html-stream-server.js +3 -0
- package/dist/deps/html-stream-server.js.map +1 -0
- package/dist/deps/rsc.d.ts +2 -0
- package/dist/deps/rsc.d.ts.map +1 -0
- package/dist/deps/rsc.js +4 -0
- package/dist/deps/rsc.js.map +1 -0
- package/dist/deps/ssr.d.ts +2 -0
- package/dist/deps/ssr.d.ts.map +1 -0
- package/dist/deps/ssr.js +3 -0
- package/dist/deps/ssr.js.map +1 -0
- package/dist/errors.d.ts +174 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +241 -0
- package/dist/errors.js.map +1 -0
- package/dist/handle.d.ts +78 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +82 -0
- package/dist/handle.js.map +1 -0
- package/dist/handles/MetaTags.d.ts +14 -0
- package/dist/handles/MetaTags.d.ts.map +1 -0
- package/dist/handles/MetaTags.js +136 -0
- package/dist/handles/MetaTags.js.map +1 -0
- package/dist/handles/index.d.ts +6 -0
- package/dist/handles/index.d.ts.map +1 -0
- package/dist/handles/index.js +6 -0
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/dist/href-context.d.ts +29 -0
- package/dist/href-context.d.ts.map +1 -0
- package/dist/href-context.js +21 -0
- package/dist/href-context.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.rsc.d.ts +32 -0
- package/dist/index.rsc.d.ts.map +1 -0
- package/dist/index.rsc.js +40 -0
- package/dist/index.rsc.js.map +1 -0
- package/dist/internal-debug.d.ts +2 -0
- package/dist/internal-debug.d.ts.map +1 -0
- package/dist/internal-debug.js +5 -0
- package/dist/internal-debug.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/loader.rsc.d.ts +19 -0
- package/dist/loader.rsc.d.ts.map +1 -0
- package/dist/loader.rsc.js +99 -0
- package/dist/loader.rsc.js.map +1 -0
- package/dist/network-error-thrower.d.ts +17 -0
- package/dist/network-error-thrower.d.ts.map +1 -0
- package/dist/network-error-thrower.js +14 -0
- package/dist/network-error-thrower.js.map +1 -0
- package/dist/outlet-context.d.ts +13 -0
- package/dist/outlet-context.d.ts.map +1 -0
- package/dist/outlet-context.js +3 -0
- package/dist/outlet-context.js.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.js +148 -0
- package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
- package/dist/prerender/param-hash.d.ts +16 -0
- package/dist/prerender/param-hash.d.ts.map +1 -0
- package/dist/prerender/param-hash.js +36 -0
- package/dist/prerender/param-hash.js.map +1 -0
- package/dist/prerender/store.d.ts +38 -0
- package/dist/prerender/store.d.ts.map +1 -0
- package/dist/prerender/store.js +61 -0
- package/dist/prerender/store.js.map +1 -0
- package/dist/prerender.d.ts +66 -0
- package/dist/prerender.d.ts.map +1 -0
- package/dist/prerender.js +57 -0
- package/dist/prerender.js.map +1 -0
- package/dist/reverse.d.ts +196 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +78 -0
- package/dist/reverse.js.map +1 -0
- package/dist/root-error-boundary.d.ts +33 -0
- package/dist/root-error-boundary.d.ts.map +1 -0
- package/dist/root-error-boundary.js +165 -0
- package/dist/root-error-boundary.js.map +1 -0
- package/dist/route-content-wrapper.d.ts +46 -0
- package/dist/route-content-wrapper.d.ts.map +1 -0
- package/dist/route-content-wrapper.js +77 -0
- package/dist/route-content-wrapper.js.map +1 -0
- package/dist/route-definition.d.ts +421 -0
- package/dist/route-definition.d.ts.map +1 -0
- package/dist/route-definition.js +868 -0
- package/dist/route-definition.js.map +1 -0
- package/dist/route-map-builder.d.ts +155 -0
- package/dist/route-map-builder.d.ts.map +1 -0
- package/dist/route-map-builder.js +237 -0
- package/dist/route-map-builder.js.map +1 -0
- package/dist/route-types.d.ts +165 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +7 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router/__tests__/handler-context.test.d.ts +2 -0
- package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/handler-context.test.js +65 -0
- package/dist/router/__tests__/handler-context.test.js.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
- package/dist/router/__tests__/match-context.test.d.ts +2 -0
- package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-context.test.js +92 -0
- package/dist/router/__tests__/match-context.test.js.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.js +417 -0
- package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
- package/dist/router/__tests__/match-result.test.d.ts +2 -0
- package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-result.test.js +457 -0
- package/dist/router/__tests__/match-result.test.js.map +1 -0
- package/dist/router/__tests__/on-error.test.d.ts +2 -0
- package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
- package/dist/router/__tests__/on-error.test.js +678 -0
- package/dist/router/__tests__/on-error.test.js.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.js +629 -0
- package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
- package/dist/router/error-handling.d.ts +77 -0
- package/dist/router/error-handling.d.ts.map +1 -0
- package/dist/router/error-handling.js +202 -0
- package/dist/router/error-handling.js.map +1 -0
- package/dist/router/handler-context.d.ts +20 -0
- package/dist/router/handler-context.d.ts.map +1 -0
- package/dist/router/handler-context.js +198 -0
- package/dist/router/handler-context.js.map +1 -0
- package/dist/router/intercept-resolution.d.ts +66 -0
- package/dist/router/intercept-resolution.d.ts.map +1 -0
- package/dist/router/intercept-resolution.js +246 -0
- package/dist/router/intercept-resolution.js.map +1 -0
- package/dist/router/loader-resolution.d.ts +64 -0
- package/dist/router/loader-resolution.d.ts.map +1 -0
- package/dist/router/loader-resolution.js +284 -0
- package/dist/router/loader-resolution.js.map +1 -0
- package/dist/router/logging.d.ts +15 -0
- package/dist/router/logging.d.ts.map +1 -0
- package/dist/router/logging.js +99 -0
- package/dist/router/logging.js.map +1 -0
- package/dist/router/manifest.d.ts +22 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +181 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/match-api.d.ts +35 -0
- package/dist/router/match-api.d.ts.map +1 -0
- package/dist/router/match-api.js +406 -0
- package/dist/router/match-api.js.map +1 -0
- package/dist/router/match-context.d.ts +206 -0
- package/dist/router/match-context.d.ts.map +1 -0
- package/dist/router/match-context.js +17 -0
- package/dist/router/match-context.js.map +1 -0
- package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
- package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
- package/dist/router/match-middleware/background-revalidation.js +75 -0
- package/dist/router/match-middleware/background-revalidation.js.map +1 -0
- package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
- package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-lookup.js +257 -0
- package/dist/router/match-middleware/cache-lookup.js.map +1 -0
- package/dist/router/match-middleware/cache-store.d.ts +113 -0
- package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-store.js +108 -0
- package/dist/router/match-middleware/cache-store.js.map +1 -0
- package/dist/router/match-middleware/index.d.ts +81 -0
- package/dist/router/match-middleware/index.d.ts.map +1 -0
- package/dist/router/match-middleware/index.js +80 -0
- package/dist/router/match-middleware/index.js.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.js +134 -0
- package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
- package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
- package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/segment-resolution.js +53 -0
- package/dist/router/match-middleware/segment-resolution.js.map +1 -0
- package/dist/router/match-pipelines.d.ts +147 -0
- package/dist/router/match-pipelines.d.ts.map +1 -0
- package/dist/router/match-pipelines.js +82 -0
- package/dist/router/match-pipelines.js.map +1 -0
- package/dist/router/match-result.d.ts +126 -0
- package/dist/router/match-result.d.ts.map +1 -0
- package/dist/router/match-result.js +93 -0
- package/dist/router/match-result.js.map +1 -0
- package/dist/router/metrics.d.ts +20 -0
- package/dist/router/metrics.d.ts.map +1 -0
- package/dist/router/metrics.js +47 -0
- package/dist/router/metrics.js.map +1 -0
- package/dist/router/middleware.d.ts +249 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +434 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/middleware.test.d.ts +2 -0
- package/dist/router/middleware.test.d.ts.map +1 -0
- package/dist/router/middleware.test.js +816 -0
- package/dist/router/middleware.test.js.map +1 -0
- package/dist/router/pattern-matching.d.ts +149 -0
- package/dist/router/pattern-matching.d.ts.map +1 -0
- package/dist/router/pattern-matching.js +349 -0
- package/dist/router/pattern-matching.js.map +1 -0
- package/dist/router/revalidation.d.ts +44 -0
- package/dist/router/revalidation.d.ts.map +1 -0
- package/dist/router/revalidation.js +147 -0
- package/dist/router/revalidation.js.map +1 -0
- package/dist/router/router-context.d.ts +135 -0
- package/dist/router/router-context.d.ts.map +1 -0
- package/dist/router/router-context.js +36 -0
- package/dist/router/router-context.js.map +1 -0
- package/dist/router/segment-resolution.d.ts +127 -0
- package/dist/router/segment-resolution.d.ts.map +1 -0
- package/dist/router/segment-resolution.js +919 -0
- package/dist/router/segment-resolution.js.map +1 -0
- package/dist/router/trie-matching.d.ts +40 -0
- package/dist/router/trie-matching.d.ts.map +1 -0
- package/dist/router/trie-matching.js +127 -0
- package/dist/router/trie-matching.js.map +1 -0
- package/dist/router/types.d.ts +136 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router.d.ts +753 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.gen.d.ts +6 -0
- package/dist/router.gen.d.ts.map +1 -0
- package/dist/router.gen.js +6 -0
- package/dist/router.gen.js.map +1 -0
- package/dist/router.js +1304 -0
- package/dist/router.js.map +1 -0
- package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
- package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/rsc/__tests__/helpers.test.js +140 -0
- package/dist/rsc/__tests__/helpers.test.js.map +1 -0
- package/dist/rsc/handler.d.ts +45 -0
- package/dist/rsc/handler.d.ts.map +1 -0
- package/dist/rsc/handler.js +1172 -0
- package/dist/rsc/handler.js.map +1 -0
- package/dist/rsc/helpers.d.ts +16 -0
- package/dist/rsc/helpers.d.ts.map +1 -0
- package/dist/rsc/helpers.js +55 -0
- package/dist/rsc/helpers.js.map +1 -0
- package/dist/rsc/index.d.ts +22 -0
- package/dist/rsc/index.d.ts.map +1 -0
- package/dist/rsc/index.js +23 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/nonce.d.ts +9 -0
- package/dist/rsc/nonce.d.ts.map +1 -0
- package/dist/rsc/nonce.js +18 -0
- package/dist/rsc/nonce.js.map +1 -0
- package/dist/rsc/types.d.ts +206 -0
- package/dist/rsc/types.d.ts.map +1 -0
- package/dist/rsc/types.js +8 -0
- package/dist/rsc/types.js.map +1 -0
- package/dist/search-params.d.ts +103 -0
- package/dist/search-params.d.ts.map +1 -0
- package/dist/search-params.js +74 -0
- package/dist/search-params.js.map +1 -0
- package/dist/segment-system.d.ts +75 -0
- package/dist/segment-system.d.ts.map +1 -0
- package/dist/segment-system.js +336 -0
- package/dist/segment-system.js.map +1 -0
- package/dist/server/context.d.ts +245 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +197 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fetchable-loader-store.d.ts +18 -0
- package/dist/server/fetchable-loader-store.d.ts.map +1 -0
- package/dist/server/fetchable-loader-store.js +18 -0
- package/dist/server/fetchable-loader-store.js.map +1 -0
- package/dist/server/handle-store.d.ts +85 -0
- package/dist/server/handle-store.d.ts.map +1 -0
- package/dist/server/handle-store.js +142 -0
- package/dist/server/handle-store.js.map +1 -0
- package/dist/server/loader-registry.d.ts +55 -0
- package/dist/server/loader-registry.d.ts.map +1 -0
- package/dist/server/loader-registry.js +132 -0
- package/dist/server/loader-registry.js.map +1 -0
- package/dist/server/request-context.d.ts +226 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +290 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/root-layout.d.ts +4 -0
- package/dist/server/root-layout.d.ts.map +1 -0
- package/dist/server/root-layout.js +5 -0
- package/dist/server/root-layout.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
- package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
- package/dist/ssr/index.d.ts +98 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +158 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/static-handler.d.ts +50 -0
- package/dist/static-handler.d.ts.map +1 -0
- package/dist/static-handler.gen.d.ts +5 -0
- package/dist/static-handler.gen.d.ts.map +1 -0
- package/dist/static-handler.gen.js +5 -0
- package/dist/static-handler.gen.js.map +1 -0
- package/dist/static-handler.js +29 -0
- package/dist/static-handler.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +20 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +240 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/ThemeScript.d.ts +48 -0
- package/dist/theme/ThemeScript.d.ts.map +1 -0
- package/dist/theme/ThemeScript.js +13 -0
- package/dist/theme/ThemeScript.js.map +1 -0
- package/dist/theme/__tests__/theme.test.d.ts +2 -0
- package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
- package/dist/theme/__tests__/theme.test.js +103 -0
- package/dist/theme/__tests__/theme.test.js.map +1 -0
- package/dist/theme/constants.d.ts +29 -0
- package/dist/theme/constants.d.ts.map +1 -0
- package/dist/theme/constants.js +48 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +31 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +36 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-context.d.ts +40 -0
- package/dist/theme/theme-context.d.ts.map +1 -0
- package/dist/theme/theme-context.js +60 -0
- package/dist/theme/theme-context.js.map +1 -0
- package/dist/theme/theme-script.d.ts +27 -0
- package/dist/theme/theme-script.d.ts.map +1 -0
- package/dist/theme/theme-script.js +147 -0
- package/dist/theme/theme-script.js.map +1 -0
- package/dist/theme/types.d.ts +163 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +11 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/theme/use-theme.d.ts +12 -0
- package/dist/theme/use-theme.d.ts.map +1 -0
- package/dist/theme/use-theme.js +40 -0
- package/dist/theme/use-theme.js.map +1 -0
- package/dist/types.d.ts +1479 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/urls.d.ts +441 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.gen.d.ts +8 -0
- package/dist/urls.gen.d.ts.map +1 -0
- package/dist/urls.gen.js +8 -0
- package/dist/urls.gen.js.map +1 -0
- package/dist/urls.js +443 -0
- package/dist/urls.js.map +1 -0
- package/dist/use-loader.d.ts +127 -0
- package/dist/use-loader.d.ts.map +1 -0
- package/dist/use-loader.js +237 -0
- package/dist/use-loader.js.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
- package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.js +39 -0
- package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
- package/dist/vite/ast-handler-extract.d.ts +49 -0
- package/dist/vite/ast-handler-extract.d.ts.map +1 -0
- package/dist/vite/ast-handler-extract.js +249 -0
- package/dist/vite/ast-handler-extract.js.map +1 -0
- package/dist/vite/expose-action-id.d.ts +19 -0
- package/dist/vite/expose-action-id.d.ts.map +1 -0
- package/dist/vite/expose-action-id.js +250 -0
- package/dist/vite/expose-action-id.js.map +1 -0
- package/dist/vite/expose-id-utils.d.ts +69 -0
- package/dist/vite/expose-id-utils.d.ts.map +1 -0
- package/dist/vite/expose-id-utils.js +289 -0
- package/dist/vite/expose-id-utils.js.map +1 -0
- package/dist/vite/expose-internal-ids.d.ts +22 -0
- package/dist/vite/expose-internal-ids.d.ts.map +1 -0
- package/dist/vite/expose-internal-ids.js +886 -0
- package/dist/vite/expose-internal-ids.js.map +1 -0
- package/dist/vite/index.d.ts +149 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +845 -241
- package/dist/vite/index.js.bak +5448 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/index.named-routes.gen.ts +103 -0
- package/dist/vite/package-resolution.d.ts +43 -0
- package/dist/vite/package-resolution.d.ts.map +1 -0
- package/dist/vite/package-resolution.js +112 -0
- package/dist/vite/package-resolution.js.map +1 -0
- package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/dist/vite/virtual-entries.d.ts +25 -0
- package/dist/vite/virtual-entries.d.ts.map +1 -0
- package/dist/vite/virtual-entries.js +110 -0
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +4 -4
- package/skills/cache-guide/SKILL.md +32 -0
- package/skills/caching/SKILL.md +8 -0
- package/skills/handler-use/SKILL.md +362 -0
- package/skills/hooks/SKILL.md +25 -19
- package/skills/intercept/SKILL.md +20 -0
- package/skills/layout/SKILL.md +22 -0
- package/skills/links/SKILL.md +77 -12
- package/skills/loader/SKILL.md +53 -43
- package/skills/middleware/SKILL.md +34 -3
- package/skills/migrate-nextjs/SKILL.md +560 -0
- package/skills/migrate-react-router/SKILL.md +765 -0
- package/skills/parallel/SKILL.md +185 -0
- package/skills/prerender/SKILL.md +110 -68
- package/skills/rango/SKILL.md +24 -22
- package/skills/response-routes/SKILL.md +8 -0
- package/skills/route/SKILL.md +55 -0
- package/skills/router-setup/SKILL.md +87 -2
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/typesafety/SKILL.md +10 -0
- package/src/__internal.ts +1 -1
- package/src/browser/app-version.ts +14 -0
- package/src/browser/event-controller.ts +5 -0
- package/src/browser/navigation-bridge.ts +37 -5
- package/src/browser/navigation-client.ts +132 -77
- package/src/browser/navigation-store.ts +43 -8
- package/src/browser/partial-update.ts +51 -6
- package/src/browser/prefetch/cache.ts +118 -26
- package/src/browser/prefetch/fetch.ts +168 -31
- package/src/browser/prefetch/queue.ts +92 -29
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/react/Link.tsx +72 -8
- package/src/browser/react/NavigationProvider.tsx +19 -6
- package/src/browser/react/context.ts +7 -2
- package/src/browser/react/use-handle.ts +9 -58
- package/src/browser/react/use-navigation.ts +22 -2
- package/src/browser/react/use-params.ts +11 -1
- package/src/browser/react/use-router.ts +21 -8
- package/src/browser/rsc-router.tsx +45 -3
- package/src/browser/scroll-restoration.ts +10 -8
- package/src/browser/segment-reconciler.ts +36 -9
- package/src/browser/server-action-bridge.ts +8 -6
- package/src/browser/types.ts +27 -5
- package/src/build/generate-manifest.ts +6 -6
- package/src/build/generate-route-types.ts +3 -0
- package/src/build/route-trie.ts +50 -24
- package/src/build/route-types/include-resolution.ts +8 -1
- package/src/build/route-types/router-processing.ts +211 -72
- package/src/build/route-types/scan-filter.ts +8 -1
- package/src/cache/cache-runtime.ts +15 -11
- package/src/cache/cache-scope.ts +46 -5
- package/src/cache/document-cache.ts +17 -7
- package/src/cache/taint.ts +55 -0
- package/src/client.tsx +84 -230
- package/src/context-var.ts +72 -2
- package/src/debug.ts +2 -2
- package/src/handle.ts +40 -0
- package/src/index.rsc.ts +3 -1
- package/src/index.ts +46 -6
- package/src/prerender/store.ts +5 -4
- package/src/prerender.ts +138 -77
- package/src/response-utils.ts +28 -0
- package/src/reverse.ts +27 -2
- package/src/route-definition/dsl-helpers.ts +224 -37
- package/src/route-definition/helpers-types.ts +67 -19
- package/src/route-definition/index.ts +3 -0
- package/src/route-definition/redirect.ts +9 -1
- package/src/route-definition/resolve-handler-use.ts +149 -0
- package/src/route-types.ts +18 -0
- package/src/router/content-negotiation.ts +100 -1
- package/src/router/handler-context.ts +84 -24
- package/src/router/intercept-resolution.ts +9 -4
- package/src/router/lazy-includes.ts +7 -6
- package/src/router/loader-resolution.ts +156 -21
- package/src/router/logging.ts +1 -1
- package/src/router/manifest.ts +28 -15
- package/src/router/match-api.ts +124 -189
- package/src/router/match-middleware/background-revalidation.ts +30 -2
- package/src/router/match-middleware/cache-lookup.ts +94 -17
- package/src/router/match-middleware/cache-store.ts +53 -10
- package/src/router/match-middleware/intercept-resolution.ts +9 -7
- package/src/router/match-middleware/segment-resolution.ts +60 -5
- package/src/router/match-result.ts +104 -10
- package/src/router/metrics.ts +6 -1
- package/src/router/middleware-types.ts +6 -8
- package/src/router/middleware.ts +24 -8
- package/src/router/navigation-snapshot.ts +182 -0
- package/src/router/pattern-matching.ts +60 -9
- package/src/router/prerender-match.ts +110 -10
- package/src/router/preview-match.ts +30 -102
- package/src/router/request-classification.ts +310 -0
- package/src/router/route-snapshot.ts +245 -0
- package/src/router/router-context.ts +1 -0
- package/src/router/router-interfaces.ts +36 -4
- package/src/router/router-options.ts +37 -11
- package/src/router/segment-resolution/fresh.ts +198 -20
- package/src/router/segment-resolution/helpers.ts +29 -24
- package/src/router/segment-resolution/loader-cache.ts +1 -0
- package/src/router/segment-resolution/revalidation.ts +433 -296
- package/src/router/trie-matching.ts +10 -4
- package/src/router/types.ts +1 -0
- package/src/router/url-params.ts +49 -0
- package/src/router.ts +55 -6
- package/src/rsc/handler.ts +476 -373
- package/src/rsc/helpers.ts +69 -41
- package/src/rsc/loader-fetch.ts +23 -3
- package/src/rsc/manifest-init.ts +5 -1
- package/src/rsc/progressive-enhancement.ts +16 -2
- package/src/rsc/response-route-handler.ts +11 -1
- package/src/rsc/rsc-rendering.ts +17 -1
- package/src/rsc/server-action.ts +10 -0
- package/src/rsc/ssr-setup.ts +2 -2
- package/src/rsc/types.ts +9 -1
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-loader-promise.ts +122 -0
- package/src/segment-system.tsx +109 -23
- package/src/server/context.ts +166 -17
- package/src/server/handle-store.ts +19 -0
- package/src/server/loader-registry.ts +9 -8
- package/src/server/request-context.ts +175 -15
- package/src/ssr/index.tsx +4 -0
- package/src/static-handler.ts +18 -6
- package/src/types/cache-types.ts +4 -4
- package/src/types/handler-context.ts +137 -33
- package/src/types/loader-types.ts +36 -9
- package/src/types/route-entry.ts +12 -1
- package/src/types/segments.ts +2 -0
- package/src/urls/include-helper.ts +24 -14
- package/src/urls/path-helper-types.ts +39 -6
- package/src/urls/path-helper.ts +48 -13
- package/src/urls/pattern-types.ts +12 -0
- package/src/urls/response-types.ts +16 -6
- package/src/use-loader.tsx +77 -5
- package/src/vite/discovery/bundle-postprocess.ts +30 -33
- package/src/vite/discovery/discover-routers.ts +5 -1
- package/src/vite/discovery/prerender-collection.ts +128 -74
- package/src/vite/discovery/state.ts +13 -4
- package/src/vite/index.ts +4 -0
- package/src/vite/plugin-types.ts +60 -5
- package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
- package/src/vite/plugins/expose-id-utils.ts +12 -0
- package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
- package/src/vite/plugins/expose-internal-ids.ts +257 -40
- package/src/vite/plugins/performance-tracks.ts +88 -0
- package/src/vite/plugins/refresh-cmd.ts +88 -26
- package/src/vite/rango.ts +19 -2
- package/src/vite/router-discovery.ts +237 -37
- package/src/vite/utils/banner.ts +3 -3
- package/src/vite/utils/prerender-utils.ts +37 -5
- package/src/vite/utils/shared-utils.ts +3 -2
package/src/rsc/handler.ts
CHANGED
|
@@ -14,10 +14,11 @@ import {
|
|
|
14
14
|
runWithRequestContext,
|
|
15
15
|
setRequestContextParams,
|
|
16
16
|
requireRequestContext,
|
|
17
|
+
getRequestContext,
|
|
18
|
+
_getRequestContext,
|
|
17
19
|
createRequestContext,
|
|
18
20
|
} from "../server/request-context.js";
|
|
19
21
|
import * as rscDeps from "@vitejs/plugin-rsc/rsc";
|
|
20
|
-
|
|
21
22
|
import type {
|
|
22
23
|
RscPayload,
|
|
23
24
|
CreateRSCHandlerOptions,
|
|
@@ -30,6 +31,7 @@ import {
|
|
|
30
31
|
interceptRedirectForPartial,
|
|
31
32
|
buildRouteMiddlewareEntries,
|
|
32
33
|
} from "./helpers.js";
|
|
34
|
+
import { isWebSocketUpgradeResponse } from "../response-utils.js";
|
|
33
35
|
import {
|
|
34
36
|
handleResponseRoute,
|
|
35
37
|
type ResponseRouteMatch,
|
|
@@ -82,6 +84,11 @@ import {
|
|
|
82
84
|
mayNeedSSR,
|
|
83
85
|
SSR_SETUP_VAR,
|
|
84
86
|
} from "./ssr-setup.js";
|
|
87
|
+
import {
|
|
88
|
+
classifyRequest,
|
|
89
|
+
type RequestPlan,
|
|
90
|
+
type ExecutableRequestPlan,
|
|
91
|
+
} from "../router/request-classification.js";
|
|
85
92
|
|
|
86
93
|
/**
|
|
87
94
|
* Create an RSC request handler.
|
|
@@ -161,10 +168,13 @@ export function createRSCHandler<
|
|
|
161
168
|
phase: ErrorPhase,
|
|
162
169
|
context: Parameters<typeof invokeOnError<TEnv>>[3],
|
|
163
170
|
): void {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
171
|
+
// Guard: abort signal handlers fire asynchronously outside the ALS
|
|
172
|
+
// request scope, so the context may be gone. Skip dedup in that
|
|
173
|
+
// case — the error is from a cancelled stream, not a real failure.
|
|
174
|
+
const reqCtx = _getRequestContext();
|
|
175
|
+
if (error != null && typeof error === "object" && reqCtx) {
|
|
176
|
+
if (reqCtx._reportedErrors.has(error)) return;
|
|
177
|
+
reqCtx._reportedErrors.add(error);
|
|
168
178
|
}
|
|
169
179
|
invokeOnError(router.onError, error, phase, context, "RSC");
|
|
170
180
|
}
|
|
@@ -452,6 +462,9 @@ export function createRSCHandler<
|
|
|
452
462
|
// - Server components during rendering
|
|
453
463
|
// - Error boundaries
|
|
454
464
|
// - Streaming
|
|
465
|
+
// Store basename on request context (scoped per-request via existing ALS)
|
|
466
|
+
requestContext._basename = router.basename;
|
|
467
|
+
|
|
455
468
|
return runWithRequestContext(requestContext, async () => {
|
|
456
469
|
// Core handler logic (wrapped by middleware)
|
|
457
470
|
const coreHandler = async (): Promise<Response> => {
|
|
@@ -521,13 +534,17 @@ export function createRSCHandler<
|
|
|
521
534
|
}
|
|
522
535
|
|
|
523
536
|
const fullTiming = timingParts.join(", ");
|
|
524
|
-
if (fullTiming
|
|
537
|
+
if (fullTiming && !isWebSocketUpgradeResponse(response)) {
|
|
538
|
+
response.headers.set("Server-Timing", fullTiming);
|
|
539
|
+
}
|
|
525
540
|
|
|
526
541
|
return response;
|
|
527
542
|
});
|
|
528
543
|
};
|
|
529
544
|
|
|
530
|
-
// Core request handling logic (separated for middleware wrapping)
|
|
545
|
+
// Core request handling logic (separated for middleware wrapping).
|
|
546
|
+
// Uses the classify → execute model: classifyRequest produces a RequestPlan,
|
|
547
|
+
// then execution dispatches on the plan mode.
|
|
531
548
|
async function coreRequestHandler(
|
|
532
549
|
request: Request,
|
|
533
550
|
env: TEnv,
|
|
@@ -535,71 +552,112 @@ export function createRSCHandler<
|
|
|
535
552
|
variables: Record<string, any>,
|
|
536
553
|
nonce: string | undefined,
|
|
537
554
|
): Promise<Response> {
|
|
538
|
-
const previewStart = performance.now();
|
|
539
|
-
const preview = await router.previewMatch(request, { env });
|
|
540
|
-
const previewDur = performance.now() - previewStart;
|
|
541
555
|
const handlerTiming: string[] = variables.__handlerTiming || [];
|
|
542
|
-
|
|
543
|
-
//
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
556
|
+
|
|
557
|
+
// Debug manifest endpoint: handled before classification since it
|
|
558
|
+
// doesn't need a route match and needs trie access from the closure.
|
|
559
|
+
const isDev = process.env.NODE_ENV !== "production";
|
|
560
|
+
if (
|
|
561
|
+
url.searchParams.has("__debug_manifest") &&
|
|
562
|
+
(isDev || router.allowDebugManifest)
|
|
563
|
+
) {
|
|
564
|
+
const trie = getRouterTrie(router.id) ?? getRouteTrie();
|
|
565
|
+
const routeManifest = getRequiredRouteMap();
|
|
566
|
+
const { extractAncestryFromTrie } =
|
|
567
|
+
await import("../build/route-trie.js");
|
|
568
|
+
return new Response(
|
|
569
|
+
JSON.stringify(
|
|
570
|
+
{
|
|
571
|
+
routerId: router.id,
|
|
572
|
+
routeManifest,
|
|
573
|
+
routeAncestry: trie ? extractAncestryFromTrie(trie) : {},
|
|
574
|
+
routeTrie: trie,
|
|
575
|
+
precomputedEntries: getPrecomputedEntries(),
|
|
576
|
+
},
|
|
577
|
+
null,
|
|
578
|
+
2,
|
|
553
579
|
),
|
|
554
|
-
|
|
555
|
-
|
|
580
|
+
{
|
|
581
|
+
headers: { "Content-Type": "application/json" },
|
|
582
|
+
},
|
|
556
583
|
);
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
// ---- 1. Classify ----
|
|
587
|
+
// classifyRequest may throw RouteNotFoundError for unknown routes.
|
|
588
|
+
// In that case, fall through to a full-render plan so the pipeline
|
|
589
|
+
// can render the 404 page via the existing error handling path.
|
|
590
|
+
const classifyStart = performance.now();
|
|
591
|
+
let plan: RequestPlan<TEnv>;
|
|
592
|
+
try {
|
|
593
|
+
plan = await classifyRequest<TEnv>(request, url, {
|
|
594
|
+
findMatch: router.findMatch,
|
|
595
|
+
routerVersion: version,
|
|
596
|
+
routerId: router.id,
|
|
597
|
+
});
|
|
598
|
+
} catch (error) {
|
|
599
|
+
if (
|
|
600
|
+
error instanceof RouteNotFoundError ||
|
|
601
|
+
(error instanceof Error && error.name === "RouteNotFoundError")
|
|
602
|
+
) {
|
|
603
|
+
// Let the render path handle 404 — match()/matchPartial() will
|
|
604
|
+
// re-throw RouteNotFoundError and the catch block in
|
|
605
|
+
// executeRenderWithMiddleware renders the not-found page.
|
|
606
|
+
plan = {
|
|
607
|
+
mode: "full-render",
|
|
608
|
+
route: {
|
|
609
|
+
matched: null as any,
|
|
610
|
+
manifestEntry: null as any,
|
|
611
|
+
entries: [],
|
|
612
|
+
routeKey: "",
|
|
613
|
+
localRouteName: "",
|
|
614
|
+
params: {},
|
|
615
|
+
routeMiddleware: [],
|
|
616
|
+
cacheScope: null,
|
|
617
|
+
isPassthrough: false,
|
|
618
|
+
},
|
|
619
|
+
negotiated: false,
|
|
620
|
+
};
|
|
621
|
+
} else {
|
|
622
|
+
throw error;
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
const classifyDur = performance.now() - classifyStart;
|
|
626
|
+
handlerTiming.push(`handler-classify;dur=${classifyDur.toFixed(2)}`);
|
|
627
|
+
|
|
628
|
+
// ---- 2. Terminal plans (no execution needed) ----
|
|
629
|
+
if (plan.mode === "redirect") {
|
|
630
|
+
// Redirects are handled by the pipeline (match/matchPartial),
|
|
631
|
+
// but for partial requests we short-circuit with a Flight redirect.
|
|
632
|
+
if (url.searchParams.has("_rsc_partial")) {
|
|
633
|
+
return createRedirectFlightResponse(plan.redirectUrl);
|
|
566
634
|
}
|
|
567
|
-
|
|
635
|
+
// Full requests: let the pipeline handle the redirect via match()
|
|
636
|
+
// which returns { redirect: url }. Fall through to full-render.
|
|
568
637
|
}
|
|
569
638
|
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
if (mayNeedSSR(request, url)) {
|
|
574
|
-
variables[SSR_SETUP_VAR] = startSSRSetup(
|
|
575
|
-
handlerCtx,
|
|
576
|
-
request,
|
|
577
|
-
env,
|
|
578
|
-
url,
|
|
579
|
-
router.debugPerformance
|
|
580
|
-
? () => requireRequestContext()._metricsStore
|
|
581
|
-
: undefined,
|
|
639
|
+
if (plan.mode === "version-mismatch") {
|
|
640
|
+
console.log(
|
|
641
|
+
`[RSC] Version mismatch: client=${url.searchParams.get("_rsc_v")}, server=${version}. Forcing reload.`,
|
|
582
642
|
);
|
|
643
|
+
return createResponseWithMergedHeaders(null, {
|
|
644
|
+
status: 200,
|
|
645
|
+
headers: {
|
|
646
|
+
"X-RSC-Reload": plan.reloadUrl,
|
|
647
|
+
"content-type": "text/x-component;charset=utf-8",
|
|
648
|
+
},
|
|
649
|
+
});
|
|
583
650
|
}
|
|
584
651
|
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
// PE form submissions before any execution. Regular page navigations
|
|
595
|
-
// (GET without _rsc_loader/_rsc_action) are not affected.
|
|
596
|
-
const originPhase: OriginCheckPhase | null = isAction
|
|
597
|
-
? "action"
|
|
598
|
-
: isLoaderFetch
|
|
599
|
-
? "loader"
|
|
600
|
-
: request.method === "POST"
|
|
601
|
-
? "pe-form"
|
|
602
|
-
: null;
|
|
652
|
+
// ---- 3. Origin guard (gate for action/loader/PE modes) ----
|
|
653
|
+
const originPhase: OriginCheckPhase | null =
|
|
654
|
+
plan.mode === "action"
|
|
655
|
+
? "action"
|
|
656
|
+
: plan.mode === "loader"
|
|
657
|
+
? "loader"
|
|
658
|
+
: plan.mode === "pe-render"
|
|
659
|
+
? "pe-form"
|
|
660
|
+
: null;
|
|
603
661
|
if (originPhase) {
|
|
604
662
|
const originResult = await checkRequestOrigin(
|
|
605
663
|
request,
|
|
@@ -649,13 +707,33 @@ export function createRSCHandler<
|
|
|
649
707
|
}
|
|
650
708
|
}
|
|
651
709
|
|
|
652
|
-
//
|
|
710
|
+
// ---- 4. Execute ----
|
|
711
|
+
return executeRequest(
|
|
712
|
+
plan as ExecutableRequestPlan<TEnv>,
|
|
713
|
+
request,
|
|
714
|
+
env,
|
|
715
|
+
url,
|
|
716
|
+
variables,
|
|
717
|
+
nonce,
|
|
718
|
+
);
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
// Execute a classified request plan. Dispatches to the appropriate handler
|
|
722
|
+
// based on plan.mode. Lives in the createRSCHandler closure for access to
|
|
723
|
+
// handlerCtx, router, callOnError, etc.
|
|
724
|
+
// Only receives executable plans (version-mismatch is handled above).
|
|
725
|
+
async function executeRequest(
|
|
726
|
+
plan: ExecutableRequestPlan<TEnv>,
|
|
727
|
+
request: Request,
|
|
728
|
+
env: TEnv,
|
|
729
|
+
url: URL,
|
|
730
|
+
variables: Record<string, any>,
|
|
731
|
+
nonce: string | undefined,
|
|
732
|
+
): Promise<Response> {
|
|
733
|
+
// Common setup
|
|
653
734
|
const handleStore = requireRequestContext()._handleStore;
|
|
654
735
|
|
|
655
736
|
// Wire up error reporting for late streaming-handle failures
|
|
656
|
-
// (LateHandlePushError: handle pushed after stream completion).
|
|
657
|
-
// Without this, these errors are only caught by React's error boundary
|
|
658
|
-
// and never reach the router's onError callback or telemetry.
|
|
659
737
|
handleStore.onError = (error: Error) => {
|
|
660
738
|
const reqCtx = requireRequestContext();
|
|
661
739
|
callOnError(error, "handler", {
|
|
@@ -685,37 +763,106 @@ export function createRSCHandler<
|
|
|
685
763
|
};
|
|
686
764
|
|
|
687
765
|
// Set route params early so all execution paths can access ctx.params.
|
|
688
|
-
|
|
689
|
-
|
|
766
|
+
// Also store the classified snapshot so match/matchPartial can reuse it
|
|
767
|
+
// instead of calling resolveRoute again.
|
|
768
|
+
if (plan.mode !== "redirect") {
|
|
769
|
+
setRequestContextParams(plan.route.params, plan.route.routeKey);
|
|
770
|
+
requireRequestContext()._classifiedRoute = plan.route;
|
|
690
771
|
}
|
|
691
772
|
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
//
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
routeMiddleware:
|
|
773
|
+
const routeReverse = createReverseFunction(getRequiredRouteMap());
|
|
774
|
+
|
|
775
|
+
// ---- Response route: skip entire RSC pipeline ----
|
|
776
|
+
if (plan.mode === "response") {
|
|
777
|
+
// Build ResponseRouteMatch from plan fields. handleResponseRoute
|
|
778
|
+
// expects a flat object with params at the top level.
|
|
779
|
+
const responseMatch: ResponseRouteMatch = {
|
|
780
|
+
responseType: plan.responseType,
|
|
781
|
+
handler: plan.handler,
|
|
782
|
+
params: plan.route.params,
|
|
783
|
+
negotiated: plan.negotiated,
|
|
784
|
+
manifestEntry: plan.manifestEntry,
|
|
785
|
+
routeMiddleware: plan.routeMiddleware,
|
|
786
|
+
};
|
|
787
|
+
const responseOutcome = await withTimeout(
|
|
788
|
+
handleResponseRoute(
|
|
789
|
+
handlerCtx,
|
|
790
|
+
responseMatch,
|
|
791
|
+
request,
|
|
792
|
+
env,
|
|
793
|
+
url,
|
|
794
|
+
variables,
|
|
795
|
+
),
|
|
796
|
+
router.timeouts.renderStartMs,
|
|
797
|
+
"render-start",
|
|
798
|
+
);
|
|
799
|
+
if (responseOutcome.timedOut) {
|
|
800
|
+
return handleTimeoutResponse(
|
|
801
|
+
request,
|
|
802
|
+
env,
|
|
803
|
+
url,
|
|
804
|
+
"render-start",
|
|
805
|
+
responseOutcome.durationMs,
|
|
806
|
+
plan.route.routeKey,
|
|
807
|
+
);
|
|
808
|
+
}
|
|
809
|
+
const response = responseOutcome.result;
|
|
810
|
+
if (plan.negotiated && !isWebSocketUpgradeResponse(response)) {
|
|
811
|
+
response.headers.append("Vary", "Accept");
|
|
812
|
+
}
|
|
813
|
+
return response;
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
// SSR setup: kick off in parallel for modes that need HTML rendering.
|
|
817
|
+
// Placed after response-route short-circuit so response/mime routes
|
|
818
|
+
// never pay for SSR work.
|
|
819
|
+
if (plan.mode !== "loader" && mayNeedSSR(request, url)) {
|
|
820
|
+
variables[SSR_SETUP_VAR] = startSSRSetup(
|
|
821
|
+
handlerCtx,
|
|
822
|
+
request,
|
|
823
|
+
env,
|
|
824
|
+
url,
|
|
825
|
+
router.debugPerformance
|
|
826
|
+
? () => requireRequestContext()._metricsStore
|
|
827
|
+
: undefined,
|
|
828
|
+
);
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
// ---- Loader fetch ----
|
|
832
|
+
if (plan.mode === "loader") {
|
|
833
|
+
return handleLoaderFetch(
|
|
834
|
+
handlerCtx,
|
|
835
|
+
request,
|
|
836
|
+
env,
|
|
837
|
+
url,
|
|
705
838
|
variables,
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
839
|
+
plan.route.params,
|
|
840
|
+
);
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
// ---- Progressive enhancement ----
|
|
844
|
+
if (plan.mode === "pe-render") {
|
|
845
|
+
const peResult = await handleProgressiveEnhancement(
|
|
846
|
+
handlerCtx,
|
|
847
|
+
request,
|
|
848
|
+
env,
|
|
849
|
+
url,
|
|
850
|
+
false, // isAction = false for PE
|
|
851
|
+
handleStore,
|
|
852
|
+
nonce,
|
|
853
|
+
{
|
|
854
|
+
routeMiddleware: plan.route.routeMiddleware,
|
|
855
|
+
variables,
|
|
856
|
+
routeReverse,
|
|
857
|
+
},
|
|
858
|
+
);
|
|
859
|
+
if (peResult) return peResult;
|
|
860
|
+
// PE handler returned null (not a PE form) — fall through to render
|
|
711
861
|
}
|
|
712
862
|
|
|
713
|
-
//
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
// the revalidation pass (identical to a normal render).
|
|
717
|
-
let actionContinuation: ActionContinuation | undefined;
|
|
718
|
-
if (isAction && actionId) {
|
|
863
|
+
// ---- Action: execute action, then revalidate wrapped in route middleware ----
|
|
864
|
+
if (plan.mode === "action") {
|
|
865
|
+
let actionContinuation: ActionContinuation | undefined;
|
|
719
866
|
try {
|
|
720
867
|
const actionOutcome = await withTimeout(
|
|
721
868
|
executeServerAction(
|
|
@@ -723,7 +870,7 @@ export function createRSCHandler<
|
|
|
723
870
|
request,
|
|
724
871
|
env,
|
|
725
872
|
url,
|
|
726
|
-
actionId,
|
|
873
|
+
plan.actionId,
|
|
727
874
|
handleStore,
|
|
728
875
|
),
|
|
729
876
|
router.timeouts.actionMs,
|
|
@@ -736,8 +883,8 @@ export function createRSCHandler<
|
|
|
736
883
|
url,
|
|
737
884
|
"action",
|
|
738
885
|
actionOutcome.durationMs,
|
|
739
|
-
|
|
740
|
-
actionId,
|
|
886
|
+
plan.route.routeKey,
|
|
887
|
+
plan.actionId,
|
|
741
888
|
);
|
|
742
889
|
}
|
|
743
890
|
const result = actionOutcome.result;
|
|
@@ -749,341 +896,297 @@ export function createRSCHandler<
|
|
|
749
896
|
request,
|
|
750
897
|
url,
|
|
751
898
|
env,
|
|
752
|
-
actionId,
|
|
899
|
+
actionId: plan.actionId,
|
|
753
900
|
handledByBoundary: false,
|
|
754
901
|
});
|
|
755
902
|
console.error(`[RSC] Action error:`, error);
|
|
756
903
|
throw error;
|
|
757
904
|
}
|
|
758
|
-
}
|
|
759
905
|
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
906
|
+
// Revalidation render wrapped in route middleware.
|
|
907
|
+
// Actions from client-side navigation include _rsc_partial — preserve
|
|
908
|
+
// the partial flag so the revalidation returns a Flight stream, not HTML.
|
|
909
|
+
// App-switch is already excluded by classifyRequest (would be full-render).
|
|
910
|
+
const isPartialAction = url.searchParams.has("_rsc_partial");
|
|
911
|
+
return executeRenderWithMiddleware(
|
|
912
|
+
plan.route.routeMiddleware,
|
|
913
|
+
plan.negotiated,
|
|
914
|
+
plan.route.routeKey,
|
|
915
|
+
routeReverse,
|
|
764
916
|
request,
|
|
765
917
|
env,
|
|
766
918
|
url,
|
|
767
919
|
variables,
|
|
768
920
|
nonce,
|
|
769
|
-
preview?.params,
|
|
770
|
-
preview?.routeKey,
|
|
771
921
|
handleStore,
|
|
922
|
+
isPartialAction,
|
|
772
923
|
actionContinuation,
|
|
773
924
|
);
|
|
774
|
-
|
|
775
|
-
response.headers.append("Vary", "Accept");
|
|
776
|
-
}
|
|
777
|
-
return response;
|
|
778
|
-
};
|
|
779
|
-
|
|
780
|
-
// Wrap the render path (with or without route middleware) in a
|
|
781
|
-
// renderStartMs timeout so slow renders are caught before output.
|
|
782
|
-
const executeRender = async (): Promise<Response> => {
|
|
783
|
-
if (preview?.routeMiddleware && preview.routeMiddleware.length > 0) {
|
|
784
|
-
const mwResponse = await executeMiddleware(
|
|
785
|
-
buildRouteMiddlewareEntries<TEnv>(preview.routeMiddleware),
|
|
786
|
-
request,
|
|
787
|
-
env,
|
|
788
|
-
variables,
|
|
789
|
-
renderHandler,
|
|
790
|
-
routeReverse,
|
|
791
|
-
);
|
|
792
|
-
|
|
793
|
-
if (
|
|
794
|
-
url.searchParams.has("_rsc_partial") ||
|
|
795
|
-
url.searchParams.has("_rsc_action")
|
|
796
|
-
) {
|
|
797
|
-
const intercepted = interceptRedirectForPartial(
|
|
798
|
-
mwResponse,
|
|
799
|
-
createRedirectFlightResponse,
|
|
800
|
-
);
|
|
801
|
-
if (intercepted) return intercepted;
|
|
802
|
-
}
|
|
803
|
-
|
|
804
|
-
return finalizeResponse(mwResponse);
|
|
805
|
-
}
|
|
925
|
+
}
|
|
806
926
|
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
927
|
+
// ---- Full render / Partial render (or PE that fell through) ----
|
|
928
|
+
if (plan.mode === "full-render" || plan.mode === "partial-render") {
|
|
929
|
+
const isPartial = plan.mode === "partial-render";
|
|
930
|
+
return executeRenderWithMiddleware(
|
|
931
|
+
plan.route.routeMiddleware,
|
|
932
|
+
plan.negotiated,
|
|
933
|
+
plan.route.routeKey,
|
|
934
|
+
routeReverse,
|
|
935
|
+
request,
|
|
936
|
+
env,
|
|
937
|
+
url,
|
|
938
|
+
variables,
|
|
939
|
+
nonce,
|
|
940
|
+
handleStore,
|
|
941
|
+
isPartial,
|
|
942
|
+
);
|
|
943
|
+
}
|
|
810
944
|
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
945
|
+
// PE that fell through (handleProgressiveEnhancement returned null)
|
|
946
|
+
// falls back to full render
|
|
947
|
+
if (plan.mode === "pe-render") {
|
|
948
|
+
return executeRenderWithMiddleware(
|
|
949
|
+
plan.route.routeMiddleware,
|
|
950
|
+
false,
|
|
951
|
+
plan.route.routeKey,
|
|
952
|
+
routeReverse,
|
|
818
953
|
request,
|
|
819
954
|
env,
|
|
820
955
|
url,
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
956
|
+
variables,
|
|
957
|
+
nonce,
|
|
958
|
+
handleStore,
|
|
959
|
+
false,
|
|
824
960
|
);
|
|
825
961
|
}
|
|
826
|
-
|
|
962
|
+
|
|
963
|
+
// Redirect plan that wasn't handled above (full-page redirect — let
|
|
964
|
+
// the pipeline handle it via match() which returns { redirect: url })
|
|
965
|
+
return executeRenderWithMiddleware(
|
|
966
|
+
plan.route.routeMiddleware,
|
|
967
|
+
false,
|
|
968
|
+
plan.route.routeKey,
|
|
969
|
+
routeReverse,
|
|
970
|
+
request,
|
|
971
|
+
env,
|
|
972
|
+
url,
|
|
973
|
+
variables,
|
|
974
|
+
nonce,
|
|
975
|
+
handleStore,
|
|
976
|
+
false,
|
|
977
|
+
);
|
|
827
978
|
}
|
|
828
979
|
|
|
829
|
-
//
|
|
830
|
-
//
|
|
831
|
-
//
|
|
832
|
-
async function
|
|
980
|
+
// Shared render execution: wraps handleRscRendering (or revalidateAfterAction)
|
|
981
|
+
// in route middleware and timeout handling. Consolidates the pattern used by
|
|
982
|
+
// action-revalidate, full-render, and partial-render modes.
|
|
983
|
+
async function executeRenderWithMiddleware(
|
|
984
|
+
routeMiddleware: import("../router/middleware-types.js").CollectedMiddleware[],
|
|
985
|
+
negotiated: boolean,
|
|
986
|
+
routeKey: string,
|
|
987
|
+
routeReverse: ReturnType<typeof createReverseFunction>,
|
|
833
988
|
request: Request,
|
|
834
989
|
env: TEnv,
|
|
835
990
|
url: URL,
|
|
836
991
|
variables: Record<string, any>,
|
|
837
992
|
nonce: string | undefined,
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
handleStore?: ReturnType<typeof requireRequestContext>["_handleStore"],
|
|
993
|
+
handleStore: ReturnType<typeof requireRequestContext>["_handleStore"],
|
|
994
|
+
isPartial: boolean,
|
|
841
995
|
actionContinuation?: ActionContinuation,
|
|
842
996
|
): Promise<Response> {
|
|
843
|
-
const
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
997
|
+
const renderHandler = async (): Promise<Response> => {
|
|
998
|
+
try {
|
|
999
|
+
let response: Response;
|
|
1000
|
+
if (actionContinuation) {
|
|
1001
|
+
response = await revalidateAfterAction(
|
|
1002
|
+
handlerCtx,
|
|
1003
|
+
request,
|
|
1004
|
+
env,
|
|
1005
|
+
url,
|
|
1006
|
+
handleStore,
|
|
1007
|
+
actionContinuation,
|
|
1008
|
+
);
|
|
1009
|
+
} else {
|
|
1010
|
+
response = await handleRscRendering(
|
|
1011
|
+
handlerCtx,
|
|
1012
|
+
request,
|
|
1013
|
+
env,
|
|
1014
|
+
url,
|
|
1015
|
+
isPartial,
|
|
1016
|
+
handleStore,
|
|
1017
|
+
nonce,
|
|
1018
|
+
);
|
|
1019
|
+
}
|
|
1020
|
+
if (negotiated && !isWebSocketUpgradeResponse(response)) {
|
|
1021
|
+
response.headers.append("Vary", "Accept");
|
|
1022
|
+
}
|
|
1023
|
+
return response;
|
|
1024
|
+
} catch (error) {
|
|
1025
|
+
// Check if middleware/handler returned Response
|
|
1026
|
+
if (error instanceof Response) {
|
|
1027
|
+
// During partial (client-side navigation), a 200 Response from a handler
|
|
1028
|
+
// means the route serves raw content (JSON, text, etc.), not JSX.
|
|
1029
|
+
// Signal the browser to hard-navigate so it renders the raw response.
|
|
1030
|
+
if (isPartial && error.status === 200) {
|
|
1031
|
+
console.warn(
|
|
1032
|
+
`[RSC] Route handler at ${url.pathname} returned a Response during client-side navigation. ` +
|
|
1033
|
+
`Falling back to hard navigation. Use data-external on the <Link> to avoid the extra round-trip.`,
|
|
1034
|
+
);
|
|
1035
|
+
return createResponseWithMergedHeaders(null, {
|
|
1036
|
+
status: 200,
|
|
1037
|
+
headers: {
|
|
1038
|
+
"X-RSC-Reload": stripInternalParams(url).toString(),
|
|
1039
|
+
"content-type": "text/x-component;charset=utf-8",
|
|
1040
|
+
},
|
|
1041
|
+
});
|
|
1042
|
+
}
|
|
854
1043
|
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
if (referer) {
|
|
862
|
-
try {
|
|
863
|
-
const refererUrl = new URL(referer);
|
|
864
|
-
if (refererUrl.origin === url.origin) {
|
|
865
|
-
reloadUrl = referer;
|
|
866
|
-
}
|
|
867
|
-
} catch {
|
|
868
|
-
// Malformed referer, fall back to cleanUrl
|
|
1044
|
+
if (isPartial) {
|
|
1045
|
+
const intercepted = interceptRedirectForPartial(
|
|
1046
|
+
error,
|
|
1047
|
+
createRedirectFlightResponse,
|
|
1048
|
+
);
|
|
1049
|
+
if (intercepted) return intercepted;
|
|
869
1050
|
}
|
|
1051
|
+
|
|
1052
|
+
return error;
|
|
870
1053
|
}
|
|
871
|
-
}
|
|
872
1054
|
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
const isDev = process.env.NODE_ENV !== "production";
|
|
885
|
-
if (
|
|
886
|
-
url.searchParams.has("__debug_manifest") &&
|
|
887
|
-
(isDev || router.allowDebugManifest)
|
|
888
|
-
) {
|
|
889
|
-
const trie = getRouterTrie(router.id) ?? getRouteTrie();
|
|
890
|
-
const routeManifest = getRequiredRouteMap();
|
|
891
|
-
const { extractAncestryFromTrie } =
|
|
892
|
-
await import("../build/route-trie.js");
|
|
893
|
-
return new Response(
|
|
894
|
-
JSON.stringify(
|
|
895
|
-
{
|
|
896
|
-
routerId: router.id,
|
|
897
|
-
routeManifest,
|
|
898
|
-
routeAncestry: trie ? extractAncestryFromTrie(trie) : {},
|
|
899
|
-
routeTrie: trie,
|
|
900
|
-
precomputedEntries: getPrecomputedEntries(),
|
|
901
|
-
},
|
|
902
|
-
null,
|
|
903
|
-
2,
|
|
904
|
-
),
|
|
905
|
-
{
|
|
906
|
-
headers: { "Content-Type": "application/json" },
|
|
907
|
-
},
|
|
908
|
-
);
|
|
909
|
-
}
|
|
1055
|
+
// Render 404 page for unmatched routes
|
|
1056
|
+
const isRouteNotFound =
|
|
1057
|
+
error instanceof RouteNotFoundError ||
|
|
1058
|
+
(error instanceof Error && error.name === "RouteNotFoundError");
|
|
1059
|
+
if (isRouteNotFound) {
|
|
1060
|
+
callOnError(error, "routing", {
|
|
1061
|
+
request,
|
|
1062
|
+
url,
|
|
1063
|
+
env,
|
|
1064
|
+
handledByBoundary: true,
|
|
1065
|
+
});
|
|
910
1066
|
|
|
911
|
-
|
|
1067
|
+
const notFoundOption = router.notFound;
|
|
1068
|
+
const notFoundComponent =
|
|
1069
|
+
typeof notFoundOption === "function"
|
|
1070
|
+
? notFoundOption({ pathname: url.pathname })
|
|
1071
|
+
: (notFoundOption ?? createElement("h1", null, "Not Found"));
|
|
1072
|
+
|
|
1073
|
+
const notFoundSegment = {
|
|
1074
|
+
id: "notFound",
|
|
1075
|
+
namespace: "notFound",
|
|
1076
|
+
type: "route" as const,
|
|
1077
|
+
index: 0,
|
|
1078
|
+
component: notFoundComponent,
|
|
1079
|
+
params: {},
|
|
1080
|
+
};
|
|
1081
|
+
|
|
1082
|
+
const payload: RscPayload = {
|
|
1083
|
+
metadata: {
|
|
1084
|
+
pathname: url.pathname,
|
|
1085
|
+
routerId: router.id,
|
|
1086
|
+
basename: router.basename,
|
|
1087
|
+
segments: [notFoundSegment],
|
|
1088
|
+
matched: [],
|
|
1089
|
+
diff: [],
|
|
1090
|
+
isPartial: false,
|
|
1091
|
+
rootLayout: router.rootLayout,
|
|
1092
|
+
handles: handleStore.stream(),
|
|
1093
|
+
version,
|
|
1094
|
+
themeConfig: router.themeConfig,
|
|
1095
|
+
warmupEnabled: router.warmupEnabled,
|
|
1096
|
+
initialTheme: requireRequestContext().theme,
|
|
1097
|
+
},
|
|
1098
|
+
};
|
|
912
1099
|
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
}
|
|
1100
|
+
const rscStream = renderToReadableStream(payload, {
|
|
1101
|
+
onError: (error: unknown) => {
|
|
1102
|
+
callOnError(error, "rendering", { request, url, env });
|
|
1103
|
+
},
|
|
1104
|
+
});
|
|
919
1105
|
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
handlerCtx,
|
|
926
|
-
request,
|
|
927
|
-
env,
|
|
928
|
-
url,
|
|
929
|
-
store,
|
|
930
|
-
actionContinuation,
|
|
931
|
-
);
|
|
932
|
-
}
|
|
1106
|
+
const isRscRequest =
|
|
1107
|
+
isPartial ||
|
|
1108
|
+
(!request.headers.get("accept")?.includes("text/html") &&
|
|
1109
|
+
!url.searchParams.has("__html")) ||
|
|
1110
|
+
url.searchParams.has("__rsc");
|
|
933
1111
|
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
handlerCtx,
|
|
941
|
-
request,
|
|
942
|
-
env,
|
|
943
|
-
url,
|
|
944
|
-
variables,
|
|
945
|
-
routeParams,
|
|
946
|
-
);
|
|
947
|
-
}
|
|
1112
|
+
if (isRscRequest) {
|
|
1113
|
+
return createResponseWithMergedHeaders(rscStream, {
|
|
1114
|
+
status: 404,
|
|
1115
|
+
headers: { "content-type": "text/x-component;charset=utf-8" },
|
|
1116
|
+
});
|
|
1117
|
+
}
|
|
948
1118
|
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
request,
|
|
956
|
-
env,
|
|
957
|
-
url,
|
|
958
|
-
isPartial,
|
|
959
|
-
store,
|
|
960
|
-
nonce,
|
|
961
|
-
);
|
|
962
|
-
} catch (error) {
|
|
963
|
-
// Check if middleware/handler returned Response
|
|
964
|
-
if (error instanceof Response) {
|
|
965
|
-
// During partial (client-side navigation), a 200 Response from a handler
|
|
966
|
-
// means the route serves raw content (JSON, text, etc.), not JSX.
|
|
967
|
-
// Signal the browser to hard-navigate so it renders the raw response.
|
|
968
|
-
// Only for 200 — redirects (3xx) work already because the browser follows
|
|
969
|
-
// them automatically to a URL that serves Flight data.
|
|
970
|
-
if (isPartial && error.status === 200) {
|
|
971
|
-
console.warn(
|
|
972
|
-
`[RSC] Route handler at ${url.pathname} returned a Response during client-side navigation. ` +
|
|
973
|
-
`Falling back to hard navigation. Use data-external on the <Link> to avoid the extra round-trip.`,
|
|
1119
|
+
const [ssrModule, streamMode] = await getSSRSetup(
|
|
1120
|
+
handlerCtx,
|
|
1121
|
+
request,
|
|
1122
|
+
env,
|
|
1123
|
+
url,
|
|
1124
|
+
requireRequestContext()._metricsStore,
|
|
974
1125
|
);
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
"X-RSC-Reload": stripInternalParams(url).toString(),
|
|
979
|
-
"content-type": "text/x-component;charset=utf-8",
|
|
980
|
-
},
|
|
1126
|
+
const htmlStream = await ssrModule.renderHTML(rscStream, {
|
|
1127
|
+
nonce,
|
|
1128
|
+
streamMode,
|
|
981
1129
|
});
|
|
982
|
-
}
|
|
983
1130
|
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
);
|
|
989
|
-
if (intercepted) return intercepted;
|
|
1131
|
+
return createResponseWithMergedHeaders(htmlStream, {
|
|
1132
|
+
status: 404,
|
|
1133
|
+
headers: { "content-type": "text/html;charset=utf-8" },
|
|
1134
|
+
});
|
|
990
1135
|
}
|
|
991
1136
|
|
|
992
|
-
|
|
993
|
-
}
|
|
994
|
-
|
|
995
|
-
// Render 404 page for unmatched routes
|
|
996
|
-
// Check both instanceof and error.name for cross-bundle compatibility
|
|
997
|
-
const isRouteNotFound =
|
|
998
|
-
error instanceof RouteNotFoundError ||
|
|
999
|
-
(error instanceof Error && error.name === "RouteNotFoundError");
|
|
1000
|
-
if (isRouteNotFound) {
|
|
1137
|
+
// Report unhandled errors
|
|
1001
1138
|
callOnError(error, "routing", {
|
|
1002
1139
|
request,
|
|
1003
1140
|
url,
|
|
1004
1141
|
env,
|
|
1005
|
-
handledByBoundary:
|
|
1142
|
+
handledByBoundary: false,
|
|
1006
1143
|
});
|
|
1144
|
+
console.error(`[RSC] Error:`, error);
|
|
1145
|
+
throw error;
|
|
1146
|
+
}
|
|
1147
|
+
};
|
|
1007
1148
|
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
: (notFoundOption ?? createElement("h1", null, "Not Found"));
|
|
1014
|
-
|
|
1015
|
-
// Create a simple segment for the 404 page
|
|
1016
|
-
const notFoundSegment = {
|
|
1017
|
-
id: "notFound",
|
|
1018
|
-
namespace: "notFound",
|
|
1019
|
-
type: "route" as const,
|
|
1020
|
-
index: 0,
|
|
1021
|
-
component: notFoundComponent,
|
|
1022
|
-
params: {},
|
|
1023
|
-
};
|
|
1024
|
-
|
|
1025
|
-
const payload: RscPayload = {
|
|
1026
|
-
metadata: {
|
|
1027
|
-
pathname: url.pathname,
|
|
1028
|
-
segments: [notFoundSegment],
|
|
1029
|
-
matched: [],
|
|
1030
|
-
diff: [],
|
|
1031
|
-
isPartial: false,
|
|
1032
|
-
rootLayout: router.rootLayout,
|
|
1033
|
-
handles: store.stream(),
|
|
1034
|
-
version,
|
|
1035
|
-
themeConfig: router.themeConfig,
|
|
1036
|
-
warmupEnabled: router.warmupEnabled,
|
|
1037
|
-
initialTheme: requireRequestContext().theme,
|
|
1038
|
-
// No routeName for not-found routes
|
|
1039
|
-
},
|
|
1040
|
-
};
|
|
1041
|
-
|
|
1042
|
-
const rscStream = renderToReadableStream(payload);
|
|
1043
|
-
|
|
1044
|
-
// Determine if this is an RSC request or HTML request.
|
|
1045
|
-
// Partial requests are always RSC (see main isRscRequest comment).
|
|
1046
|
-
const isRscRequest =
|
|
1047
|
-
isPartial ||
|
|
1048
|
-
(!request.headers.get("accept")?.includes("text/html") &&
|
|
1049
|
-
!url.searchParams.has("__html")) ||
|
|
1050
|
-
url.searchParams.has("__rsc");
|
|
1051
|
-
|
|
1052
|
-
if (isRscRequest) {
|
|
1053
|
-
return createResponseWithMergedHeaders(rscStream, {
|
|
1054
|
-
status: 404,
|
|
1055
|
-
headers: { "content-type": "text/x-component;charset=utf-8" },
|
|
1056
|
-
});
|
|
1057
|
-
}
|
|
1058
|
-
|
|
1059
|
-
// Delegate to SSR for HTML response (reuse early setup if available)
|
|
1060
|
-
const [ssrModule, streamMode] = await getSSRSetup(
|
|
1061
|
-
handlerCtx,
|
|
1149
|
+
// Wrap the render path in a renderStartMs timeout
|
|
1150
|
+
const executeRender = async (): Promise<Response> => {
|
|
1151
|
+
if (routeMiddleware.length > 0) {
|
|
1152
|
+
const mwResponse = await executeMiddleware(
|
|
1153
|
+
buildRouteMiddlewareEntries<TEnv>(routeMiddleware),
|
|
1062
1154
|
request,
|
|
1063
1155
|
env,
|
|
1064
|
-
|
|
1065
|
-
|
|
1156
|
+
variables,
|
|
1157
|
+
renderHandler,
|
|
1158
|
+
routeReverse,
|
|
1066
1159
|
);
|
|
1067
|
-
const htmlStream = await ssrModule.renderHTML(rscStream, {
|
|
1068
|
-
nonce,
|
|
1069
|
-
streamMode,
|
|
1070
|
-
});
|
|
1071
1160
|
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1161
|
+
if (isPartial || actionContinuation) {
|
|
1162
|
+
const intercepted = interceptRedirectForPartial(
|
|
1163
|
+
mwResponse,
|
|
1164
|
+
createRedirectFlightResponse,
|
|
1165
|
+
);
|
|
1166
|
+
if (intercepted) return intercepted;
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1169
|
+
return finalizeResponse(mwResponse);
|
|
1076
1170
|
}
|
|
1077
1171
|
|
|
1078
|
-
|
|
1079
|
-
|
|
1172
|
+
return renderHandler();
|
|
1173
|
+
};
|
|
1174
|
+
|
|
1175
|
+
const renderOutcome = await withTimeout(
|
|
1176
|
+
executeRender(),
|
|
1177
|
+
router.timeouts.renderStartMs,
|
|
1178
|
+
"render-start",
|
|
1179
|
+
);
|
|
1180
|
+
if (renderOutcome.timedOut) {
|
|
1181
|
+
return handleTimeoutResponse(
|
|
1080
1182
|
request,
|
|
1081
|
-
url,
|
|
1082
1183
|
env,
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1184
|
+
url,
|
|
1185
|
+
"render-start",
|
|
1186
|
+
renderOutcome.durationMs,
|
|
1187
|
+
routeKey,
|
|
1188
|
+
);
|
|
1087
1189
|
}
|
|
1190
|
+
return renderOutcome.result;
|
|
1088
1191
|
}
|
|
1089
1192
|
}
|