@rangojs/router 0.0.0-experimental.8 → 0.0.0-experimental.80daa23e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +13 -0
- package/README.md +472 -7
- 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 +2343 -0
- package/dist/bin/rango.js.map +1 -0
- package/dist/browser/event-controller.d.ts +191 -0
- package/dist/browser/event-controller.d.ts.map +1 -0
- package/dist/browser/event-controller.js +559 -0
- package/dist/browser/event-controller.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/link-interceptor.d.ts +38 -0
- package/dist/browser/link-interceptor.d.ts.map +1 -0
- package/dist/browser/link-interceptor.js +99 -0
- package/dist/browser/link-interceptor.js.map +1 -0
- package/dist/browser/logging.d.ts +10 -0
- package/dist/browser/logging.d.ts.map +1 -0
- package/dist/browser/logging.js +29 -0
- package/dist/browser/logging.js.map +1 -0
- package/dist/browser/lru-cache.d.ts +17 -0
- package/dist/browser/lru-cache.d.ts.map +1 -0
- package/dist/browser/lru-cache.js +50 -0
- package/dist/browser/lru-cache.js.map +1 -0
- package/dist/browser/merge-segment-loaders.d.ts +39 -0
- package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
- package/dist/browser/merge-segment-loaders.js +102 -0
- package/dist/browser/merge-segment-loaders.js.map +1 -0
- package/dist/browser/navigation-bridge.d.ts +102 -0
- package/dist/browser/navigation-bridge.d.ts.map +1 -0
- package/dist/browser/navigation-bridge.js +708 -0
- package/dist/browser/navigation-bridge.js.map +1 -0
- package/dist/browser/navigation-client.d.ts +25 -0
- package/dist/browser/navigation-client.d.ts.map +1 -0
- package/dist/browser/navigation-client.js +157 -0
- package/dist/browser/navigation-client.js.map +1 -0
- package/dist/browser/navigation-store.d.ts +101 -0
- package/dist/browser/navigation-store.d.ts.map +1 -0
- package/dist/browser/navigation-store.js +625 -0
- package/dist/browser/navigation-store.js.map +1 -0
- package/dist/browser/partial-update.d.ts +75 -0
- package/dist/browser/partial-update.d.ts.map +1 -0
- package/dist/browser/partial-update.js +426 -0
- package/dist/browser/partial-update.js.map +1 -0
- package/dist/browser/react/Link.d.ts +86 -0
- package/dist/browser/react/Link.d.ts.map +1 -0
- package/dist/browser/react/Link.js +128 -0
- package/dist/browser/react/Link.js.map +1 -0
- package/dist/browser/react/NavigationProvider.d.ts +63 -0
- package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
- package/dist/browser/react/NavigationProvider.js +216 -0
- package/dist/browser/react/NavigationProvider.js.map +1 -0
- package/dist/browser/react/ScrollRestoration.d.ts +75 -0
- package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
- package/dist/browser/react/ScrollRestoration.js +57 -0
- package/dist/browser/react/ScrollRestoration.js.map +1 -0
- package/dist/browser/react/context.d.ts +46 -0
- package/dist/browser/react/context.d.ts.map +1 -0
- package/dist/browser/react/context.js +10 -0
- package/dist/browser/react/context.js.map +1 -0
- package/dist/browser/react/index.d.ts +11 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/index.js +22 -0
- package/dist/browser/react/index.js.map +1 -0
- package/dist/browser/react/location-state-shared.d.ts +63 -0
- package/dist/browser/react/location-state-shared.d.ts.map +1 -0
- package/dist/browser/react/location-state-shared.js +81 -0
- package/dist/browser/react/location-state-shared.js.map +1 -0
- package/dist/browser/react/location-state.d.ts +23 -0
- package/dist/browser/react/location-state.d.ts.map +1 -0
- package/dist/browser/react/location-state.js +29 -0
- package/dist/browser/react/location-state.js.map +1 -0
- package/dist/browser/react/mount-context.d.ts +24 -0
- package/dist/browser/react/mount-context.d.ts.map +1 -0
- package/dist/browser/react/mount-context.js +24 -0
- package/dist/browser/react/mount-context.js.map +1 -0
- package/dist/browser/react/use-action.d.ts +64 -0
- package/dist/browser/react/use-action.d.ts.map +1 -0
- package/dist/browser/react/use-action.js +134 -0
- package/dist/browser/react/use-action.js.map +1 -0
- package/dist/browser/react/use-client-cache.d.ts +41 -0
- package/dist/browser/react/use-client-cache.d.ts.map +1 -0
- package/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -26
- 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/{src/handles/index.ts → dist/handles/index.js} +1 -1
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/{src/href-context.ts → dist/href-context.d.ts} +7 -11
- package/dist/href-context.d.ts.map +1 -0
- package/dist/href-context.js +21 -0
- package/dist/href-context.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.rsc.d.ts +32 -0
- package/dist/index.rsc.d.ts.map +1 -0
- package/dist/index.rsc.js +40 -0
- package/dist/index.rsc.js.map +1 -0
- package/dist/internal-debug.d.ts +2 -0
- package/dist/internal-debug.d.ts.map +1 -0
- package/dist/internal-debug.js +5 -0
- package/dist/internal-debug.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/loader.rsc.d.ts +19 -0
- package/dist/loader.rsc.d.ts.map +1 -0
- package/dist/loader.rsc.js +99 -0
- package/dist/loader.rsc.js.map +1 -0
- package/{src/network-error-thrower.tsx → dist/network-error-thrower.d.ts} +4 -8
- package/dist/network-error-thrower.d.ts.map +1 -0
- package/dist/network-error-thrower.js +14 -0
- package/dist/network-error-thrower.js.map +1 -0
- package/dist/outlet-context.d.ts +13 -0
- package/dist/outlet-context.d.ts.map +1 -0
- package/dist/outlet-context.js +3 -0
- package/dist/outlet-context.js.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.js +148 -0
- package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
- package/dist/prerender/param-hash.d.ts +16 -0
- package/dist/prerender/param-hash.d.ts.map +1 -0
- package/dist/prerender/param-hash.js +36 -0
- package/dist/prerender/param-hash.js.map +1 -0
- package/dist/prerender/store.d.ts +38 -0
- package/dist/prerender/store.d.ts.map +1 -0
- package/dist/prerender/store.js +61 -0
- package/dist/prerender/store.js.map +1 -0
- package/dist/prerender.d.ts +66 -0
- package/dist/prerender.d.ts.map +1 -0
- package/dist/prerender.js +57 -0
- package/dist/prerender.js.map +1 -0
- package/dist/reverse.d.ts +196 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +78 -0
- package/dist/reverse.js.map +1 -0
- package/dist/root-error-boundary.d.ts +33 -0
- package/dist/root-error-boundary.d.ts.map +1 -0
- package/dist/root-error-boundary.js +165 -0
- package/dist/root-error-boundary.js.map +1 -0
- package/dist/route-content-wrapper.d.ts +46 -0
- package/dist/route-content-wrapper.d.ts.map +1 -0
- package/dist/route-content-wrapper.js +77 -0
- package/dist/route-content-wrapper.js.map +1 -0
- package/dist/route-definition.d.ts +421 -0
- package/dist/route-definition.d.ts.map +1 -0
- package/dist/route-definition.js +868 -0
- package/dist/route-definition.js.map +1 -0
- package/dist/route-map-builder.d.ts +155 -0
- package/dist/route-map-builder.d.ts.map +1 -0
- package/dist/route-map-builder.js +237 -0
- package/dist/route-map-builder.js.map +1 -0
- package/dist/route-types.d.ts +165 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +7 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router/__tests__/handler-context.test.d.ts +2 -0
- package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/handler-context.test.js +65 -0
- package/dist/router/__tests__/handler-context.test.js.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
- package/dist/router/__tests__/match-context.test.d.ts +2 -0
- package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-context.test.js +92 -0
- package/dist/router/__tests__/match-context.test.js.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.js +417 -0
- package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
- package/dist/router/__tests__/match-result.test.d.ts +2 -0
- package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-result.test.js +457 -0
- package/dist/router/__tests__/match-result.test.js.map +1 -0
- package/dist/router/__tests__/on-error.test.d.ts +2 -0
- package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
- package/dist/router/__tests__/on-error.test.js +678 -0
- package/dist/router/__tests__/on-error.test.js.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.js +629 -0
- package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
- package/dist/router/error-handling.d.ts +77 -0
- package/dist/router/error-handling.d.ts.map +1 -0
- package/dist/router/error-handling.js +202 -0
- package/dist/router/error-handling.js.map +1 -0
- package/dist/router/handler-context.d.ts +20 -0
- package/dist/router/handler-context.d.ts.map +1 -0
- package/dist/router/handler-context.js +198 -0
- package/dist/router/handler-context.js.map +1 -0
- package/dist/router/intercept-resolution.d.ts +66 -0
- package/dist/router/intercept-resolution.d.ts.map +1 -0
- package/dist/router/intercept-resolution.js +246 -0
- package/dist/router/intercept-resolution.js.map +1 -0
- package/dist/router/loader-resolution.d.ts +64 -0
- package/dist/router/loader-resolution.d.ts.map +1 -0
- package/dist/router/loader-resolution.js +284 -0
- package/dist/router/loader-resolution.js.map +1 -0
- package/dist/router/logging.d.ts +15 -0
- package/dist/router/logging.d.ts.map +1 -0
- package/dist/router/logging.js +99 -0
- package/dist/router/logging.js.map +1 -0
- package/dist/router/manifest.d.ts +22 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +181 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/match-api.d.ts +35 -0
- package/dist/router/match-api.d.ts.map +1 -0
- package/dist/router/match-api.js +406 -0
- package/dist/router/match-api.js.map +1 -0
- package/dist/router/match-context.d.ts +206 -0
- package/dist/router/match-context.d.ts.map +1 -0
- package/dist/router/match-context.js +17 -0
- package/dist/router/match-context.js.map +1 -0
- package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
- package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
- package/dist/router/match-middleware/background-revalidation.js +75 -0
- package/dist/router/match-middleware/background-revalidation.js.map +1 -0
- package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
- package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-lookup.js +257 -0
- package/dist/router/match-middleware/cache-lookup.js.map +1 -0
- package/dist/router/match-middleware/cache-store.d.ts +113 -0
- package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-store.js +108 -0
- package/dist/router/match-middleware/cache-store.js.map +1 -0
- package/dist/router/match-middleware/index.d.ts +81 -0
- package/dist/router/match-middleware/index.d.ts.map +1 -0
- package/dist/router/match-middleware/index.js +80 -0
- package/dist/router/match-middleware/index.js.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.js +134 -0
- package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
- package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
- package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/segment-resolution.js +53 -0
- package/dist/router/match-middleware/segment-resolution.js.map +1 -0
- package/dist/router/match-pipelines.d.ts +147 -0
- package/dist/router/match-pipelines.d.ts.map +1 -0
- package/dist/router/match-pipelines.js +82 -0
- package/dist/router/match-pipelines.js.map +1 -0
- package/dist/router/match-result.d.ts +126 -0
- package/dist/router/match-result.d.ts.map +1 -0
- package/dist/router/match-result.js +93 -0
- package/dist/router/match-result.js.map +1 -0
- package/dist/router/metrics.d.ts +20 -0
- package/dist/router/metrics.d.ts.map +1 -0
- package/dist/router/metrics.js +47 -0
- package/dist/router/metrics.js.map +1 -0
- package/dist/router/middleware.d.ts +249 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +434 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/middleware.test.d.ts +2 -0
- package/dist/router/middleware.test.d.ts.map +1 -0
- package/dist/router/middleware.test.js +816 -0
- package/dist/router/middleware.test.js.map +1 -0
- package/dist/router/pattern-matching.d.ts +149 -0
- package/dist/router/pattern-matching.d.ts.map +1 -0
- package/dist/router/pattern-matching.js +349 -0
- package/dist/router/pattern-matching.js.map +1 -0
- package/dist/router/revalidation.d.ts +44 -0
- package/dist/router/revalidation.d.ts.map +1 -0
- package/dist/router/revalidation.js +147 -0
- package/dist/router/revalidation.js.map +1 -0
- package/dist/router/router-context.d.ts +135 -0
- package/dist/router/router-context.d.ts.map +1 -0
- package/dist/router/router-context.js +36 -0
- package/dist/router/router-context.js.map +1 -0
- package/dist/router/segment-resolution.d.ts +127 -0
- package/dist/router/segment-resolution.d.ts.map +1 -0
- package/dist/router/segment-resolution.js +919 -0
- package/dist/router/segment-resolution.js.map +1 -0
- package/dist/router/trie-matching.d.ts +40 -0
- package/dist/router/trie-matching.d.ts.map +1 -0
- package/dist/router/trie-matching.js +127 -0
- package/dist/router/trie-matching.js.map +1 -0
- package/dist/router/types.d.ts +136 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router.d.ts +753 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.gen.d.ts +6 -0
- package/dist/router.gen.d.ts.map +1 -0
- package/dist/router.gen.js +6 -0
- package/dist/router.gen.js.map +1 -0
- package/dist/router.js +1304 -0
- package/dist/router.js.map +1 -0
- package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
- package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/rsc/__tests__/helpers.test.js +140 -0
- package/dist/rsc/__tests__/helpers.test.js.map +1 -0
- package/dist/rsc/handler.d.ts +45 -0
- package/dist/rsc/handler.d.ts.map +1 -0
- package/dist/rsc/handler.js +1172 -0
- package/dist/rsc/handler.js.map +1 -0
- package/dist/rsc/helpers.d.ts +16 -0
- package/dist/rsc/helpers.d.ts.map +1 -0
- package/dist/rsc/helpers.js +55 -0
- package/dist/rsc/helpers.js.map +1 -0
- package/dist/rsc/index.d.ts +22 -0
- package/dist/rsc/index.d.ts.map +1 -0
- package/dist/rsc/index.js +23 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/nonce.d.ts +9 -0
- package/dist/rsc/nonce.d.ts.map +1 -0
- package/dist/rsc/nonce.js +18 -0
- package/dist/rsc/nonce.js.map +1 -0
- package/dist/rsc/types.d.ts +206 -0
- package/dist/rsc/types.d.ts.map +1 -0
- package/dist/rsc/types.js +8 -0
- package/dist/rsc/types.js.map +1 -0
- package/dist/search-params.d.ts +103 -0
- package/dist/search-params.d.ts.map +1 -0
- package/dist/search-params.js +74 -0
- package/dist/search-params.js.map +1 -0
- package/dist/segment-system.d.ts +75 -0
- package/dist/segment-system.d.ts.map +1 -0
- package/dist/segment-system.js +336 -0
- package/dist/segment-system.js.map +1 -0
- package/dist/server/context.d.ts +245 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +197 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fetchable-loader-store.d.ts +18 -0
- package/dist/server/fetchable-loader-store.d.ts.map +1 -0
- package/dist/server/fetchable-loader-store.js +18 -0
- package/dist/server/fetchable-loader-store.js.map +1 -0
- package/dist/server/handle-store.d.ts +85 -0
- package/dist/server/handle-store.d.ts.map +1 -0
- package/dist/server/handle-store.js +142 -0
- package/dist/server/handle-store.js.map +1 -0
- package/dist/server/loader-registry.d.ts +55 -0
- package/dist/server/loader-registry.d.ts.map +1 -0
- package/dist/server/loader-registry.js +132 -0
- package/dist/server/loader-registry.js.map +1 -0
- package/dist/server/request-context.d.ts +226 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +290 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/root-layout.d.ts +4 -0
- package/dist/server/root-layout.d.ts.map +1 -0
- package/dist/server/root-layout.js +5 -0
- package/dist/server/root-layout.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
- package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
- package/dist/ssr/index.d.ts +98 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +158 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/static-handler.d.ts +50 -0
- package/dist/static-handler.d.ts.map +1 -0
- package/dist/static-handler.gen.d.ts +5 -0
- package/dist/static-handler.gen.d.ts.map +1 -0
- package/dist/static-handler.gen.js +5 -0
- package/dist/static-handler.gen.js.map +1 -0
- package/dist/static-handler.js +29 -0
- package/dist/static-handler.js.map +1 -0
- package/dist/testing/vitest.js +82 -0
- package/dist/theme/ThemeProvider.d.ts +20 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +240 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/ThemeScript.d.ts +48 -0
- package/dist/theme/ThemeScript.d.ts.map +1 -0
- package/dist/theme/ThemeScript.js +13 -0
- package/dist/theme/ThemeScript.js.map +1 -0
- package/dist/theme/__tests__/theme.test.d.ts +2 -0
- package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
- package/dist/theme/__tests__/theme.test.js +103 -0
- package/dist/theme/__tests__/theme.test.js.map +1 -0
- package/dist/theme/constants.d.ts +29 -0
- package/dist/theme/constants.d.ts.map +1 -0
- package/dist/theme/constants.js +48 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +31 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +36 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-context.d.ts +40 -0
- package/dist/theme/theme-context.d.ts.map +1 -0
- package/dist/theme/theme-context.js +60 -0
- package/dist/theme/theme-context.js.map +1 -0
- package/dist/theme/theme-script.d.ts +27 -0
- package/dist/theme/theme-script.d.ts.map +1 -0
- package/dist/theme/theme-script.js +147 -0
- package/dist/theme/theme-script.js.map +1 -0
- package/dist/theme/types.d.ts +163 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +11 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/theme/use-theme.d.ts +12 -0
- package/dist/theme/use-theme.d.ts.map +1 -0
- package/dist/theme/use-theme.js +40 -0
- package/dist/theme/use-theme.js.map +1 -0
- package/dist/types/__internal.d.ts +127 -0
- package/dist/types/bin/rango.d.ts +1 -0
- package/dist/types/browser/action-coordinator.d.ts +57 -0
- package/dist/types/browser/action-fence.d.ts +33 -0
- package/dist/types/browser/app-shell.d.ts +34 -0
- package/dist/types/browser/app-version.d.ts +6 -0
- package/dist/types/browser/connection-warmup.d.ts +31 -0
- package/dist/types/browser/cookie-name.d.ts +66 -0
- package/dist/types/browser/dev-discovery.d.ts +11 -0
- package/dist/types/browser/event-controller.d.ts +231 -0
- package/dist/types/browser/history-state.d.ts +26 -0
- package/dist/types/browser/index.d.ts +1 -0
- package/dist/types/browser/intercept-utils.d.ts +30 -0
- package/dist/types/browser/invalidate-client-cache.d.ts +17 -0
- package/dist/types/browser/link-interceptor.d.ts +53 -0
- package/dist/types/browser/logging.d.ts +33 -0
- package/dist/types/browser/merge-segment-loaders.d.ts +38 -0
- package/dist/types/browser/navigation-bridge.d.ts +39 -0
- package/dist/types/browser/navigation-client.d.ts +17 -0
- package/dist/types/browser/navigation-store-handle.d.ts +25 -0
- package/dist/types/browser/navigation-store.d.ts +85 -0
- package/dist/types/browser/navigation-transaction.d.ts +75 -0
- package/dist/types/browser/network-error-handler.d.ts +35 -0
- package/dist/types/browser/notify-listeners.d.ts +2 -0
- package/dist/types/browser/partial-update.d.ts +61 -0
- package/dist/types/browser/prefetch/cache.d.ts +224 -0
- package/dist/types/browser/prefetch/default-strategy.d.ts +31 -0
- package/dist/types/browser/prefetch/fetch.d.ts +52 -0
- package/dist/types/browser/prefetch/invalidation.d.ts +6 -0
- package/dist/types/browser/prefetch/loader.d.ts +12 -0
- package/dist/types/browser/prefetch/observer.d.ts +24 -0
- package/dist/types/browser/prefetch/policy.d.ts +13 -0
- package/dist/types/browser/prefetch/queue.d.ts +48 -0
- package/dist/types/browser/prefetch/resource-ready.d.ts +28 -0
- package/dist/types/browser/prefetch/runtime.d.ts +2 -0
- package/dist/types/browser/rango-state.d.ts +56 -0
- package/dist/types/browser/react/Link.d.ts +132 -0
- package/dist/types/browser/react/NavigationProvider.d.ts +88 -0
- package/dist/types/browser/react/ScrollRestoration.d.ts +78 -0
- package/dist/types/browser/react/context.d.ts +57 -0
- package/dist/types/browser/react/filter-segment-order.d.ts +35 -0
- package/dist/types/browser/react/index.d.ts +1 -0
- package/dist/types/browser/react/location-state-shared.d.ts +162 -0
- package/dist/types/browser/react/location-state.d.ts +29 -0
- package/dist/types/browser/react/mount-context.d.ts +23 -0
- package/dist/types/browser/react/nonce-context.d.ts +14 -0
- package/dist/types/browser/react/shallow-equal.d.ts +5 -0
- package/dist/types/browser/react/use-action.d.ts +61 -0
- package/dist/types/browser/react/use-handle.d.ts +21 -0
- package/dist/types/browser/react/use-href.d.ts +32 -0
- package/dist/types/browser/react/use-link-status.d.ts +36 -0
- package/dist/types/browser/react/use-mount.d.ts +24 -0
- package/dist/types/browser/react/use-navigation.d.ts +15 -0
- package/dist/types/browser/react/use-params.d.ts +21 -0
- package/dist/types/browser/react/use-pathname.d.ts +13 -0
- package/dist/types/browser/react/use-reverse.d.ts +40 -0
- package/dist/types/browser/react/use-router.d.ts +30 -0
- package/dist/types/browser/react/use-search-params.d.ts +66 -0
- package/dist/types/browser/react/use-segments.d.ts +29 -0
- package/dist/types/browser/response-adapter.d.ts +58 -0
- package/dist/types/browser/rsc-router.d.ts +146 -0
- package/dist/types/browser/scroll-restoration.d.ts +103 -0
- package/dist/types/browser/segment-reconciler.d.ts +74 -0
- package/dist/types/browser/segment-structure-assert.d.ts +16 -0
- package/dist/types/browser/server-action-bridge.d.ts +29 -0
- package/dist/types/browser/types.d.ts +546 -0
- package/dist/types/browser/validate-redirect-origin.d.ts +28 -0
- package/dist/types/build/collect-fallback-refs.d.ts +5 -0
- package/dist/types/build/generate-manifest.d.ts +106 -0
- package/dist/types/build/generate-route-types.d.ts +8 -0
- package/dist/types/build/index.d.ts +21 -0
- package/dist/types/build/merge-full-manifests.d.ts +3 -0
- package/dist/types/build/prefix-tree-utils.d.ts +56 -0
- package/dist/types/build/route-trie.d.ts +20 -0
- package/dist/types/build/route-types/ast-helpers.d.ts +3 -0
- package/dist/types/build/route-types/ast-route-extraction.d.ts +13 -0
- package/dist/types/build/route-types/codegen.d.ts +16 -0
- package/dist/types/build/route-types/include-resolution.d.ts +74 -0
- package/dist/types/build/route-types/param-extraction.d.ts +13 -0
- package/dist/types/build/route-types/per-module-writer.d.ts +20 -0
- package/dist/types/build/route-types/router-processing.d.ts +81 -0
- package/dist/types/build/route-types/scan-filter.d.ts +17 -0
- package/dist/types/build/route-types/source-scan.d.ts +13 -0
- package/dist/types/build/runtime-discovery.d.ts +24 -0
- package/dist/types/cache/background-task.d.ts +21 -0
- package/dist/types/cache/cache-error.d.ts +71 -0
- package/dist/types/cache/cache-exec-scope.d.ts +31 -0
- package/dist/types/cache/cache-key-utils.d.ts +43 -0
- package/dist/types/cache/cache-policy.d.ts +59 -0
- package/dist/types/cache/cache-runtime.d.ts +51 -0
- package/dist/types/cache/cache-scope.d.ts +215 -0
- package/dist/types/cache/cache-tag.d.ts +79 -0
- package/dist/types/cache/cf/cf-base64.d.ts +4 -0
- package/dist/types/cache/cf/cf-cache-constants.d.ts +112 -0
- package/dist/types/cache/cf/cf-cache-store.d.ts +630 -0
- package/dist/types/cache/cf/cf-cache-types.d.ts +365 -0
- package/dist/types/cache/cf/cf-kv-utils.d.ts +43 -0
- package/dist/types/cache/cf/cf-tag-marker-memo.d.ts +15 -0
- package/dist/types/cache/cf/cf-zone-purge.d.ts +31 -0
- package/dist/types/cache/cf/index.d.ts +4 -0
- package/dist/types/cache/document-cache.d.ts +71 -0
- package/dist/types/cache/handle-capture.d.ts +23 -0
- package/dist/types/cache/handle-snapshot.d.ts +39 -0
- package/dist/types/cache/index.d.ts +9 -0
- package/dist/types/cache/memory-segment-store.d.ts +163 -0
- package/dist/types/cache/profile-registry.d.ts +40 -0
- package/dist/types/cache/read-through-swr.d.ts +61 -0
- package/dist/types/cache/search-params-filter.d.ts +64 -0
- package/dist/types/cache/segment-codec.d.ts +78 -0
- package/dist/types/cache/shell-snapshot.d.ts +186 -0
- package/dist/types/cache/tag-invalidation.d.ts +74 -0
- package/dist/types/cache/taint.d.ts +77 -0
- package/dist/types/cache/types.d.ts +522 -0
- package/dist/types/cache/vercel/index.d.ts +1 -0
- package/dist/types/cache/vercel/vercel-cache-store.d.ts +268 -0
- package/dist/types/client-urls/client-root.d.ts +38 -0
- package/dist/types/client-urls/client-urls.d.ts +5 -0
- package/dist/types/client-urls/navigation.d.ts +38 -0
- package/dist/types/client-urls/revalidation-protocol.d.ts +25 -0
- package/dist/types/client-urls/server-projection.d.ts +71 -0
- package/dist/types/client-urls/types.d.ts +148 -0
- package/dist/types/client.d.ts +192 -0
- package/dist/types/client.rsc.d.ts +42 -0
- package/dist/types/cloudflare/index.d.ts +7 -0
- package/dist/types/cloudflare/tracing.d.ts +57 -0
- package/dist/types/component-utils.d.ts +46 -0
- package/dist/types/components/DefaultDocument.d.ts +13 -0
- package/dist/types/context-var.d.ts +84 -0
- package/dist/types/debug.d.ts +57 -0
- package/dist/types/decode-loader-results.d.ts +42 -0
- package/dist/types/default-error-boundary.d.ts +10 -0
- package/dist/types/defer.d.ts +89 -0
- package/dist/types/deps/browser.d.ts +1 -0
- package/dist/types/deps/html-stream-client.d.ts +1 -0
- package/dist/types/deps/html-stream-server.d.ts +1 -0
- package/dist/types/deps/rsc.d.ts +1 -0
- package/dist/types/deps/ssr.d.ts +1 -0
- package/dist/types/dev-discovery-protocol.d.ts +5 -0
- package/dist/types/encode-kv.d.ts +35 -0
- package/dist/types/errors.d.ts +227 -0
- package/dist/types/escape-script.d.ts +44 -0
- package/dist/types/handle.d.ts +93 -0
- package/dist/types/handles/MetaTags.d.ts +17 -0
- package/dist/types/handles/Scripts.d.ts +38 -0
- package/dist/types/handles/breadcrumbs.d.ts +43 -0
- package/dist/types/handles/deferred-resolution.d.ts +53 -0
- package/dist/types/handles/is-thenable.d.ts +10 -0
- package/dist/types/handles/meta.d.ts +43 -0
- package/dist/types/handles/script.d.ts +139 -0
- package/dist/types/host/cookie-handler.d.ts +8 -0
- package/dist/types/host/errors.d.ts +40 -0
- package/dist/types/host/index.d.ts +33 -0
- package/dist/types/host/pattern-matcher.d.ts +30 -0
- package/dist/types/host/router.d.ts +12 -0
- package/dist/types/host/testing.d.ts +41 -0
- package/dist/types/host/types.d.ts +148 -0
- package/dist/types/host/utils.d.ts +20 -0
- package/dist/types/href-client.d.ts +214 -0
- package/dist/types/index.d.ts +113 -0
- package/dist/types/index.rsc.d.ts +52 -0
- package/dist/types/internal-debug.d.ts +1 -0
- package/dist/types/loader-redirect.d.ts +27 -0
- package/dist/types/loader-store.d.ts +193 -0
- package/dist/types/loader.d.ts +18 -0
- package/dist/types/loader.rsc.d.ts +18 -0
- package/dist/types/missing-id-error.d.ts +1 -0
- package/dist/types/outlet-context.d.ts +32 -0
- package/dist/types/outlet-provider.d.ts +15 -0
- package/dist/types/prerender/build-shell-capture.d.ts +104 -0
- package/dist/types/prerender/param-hash.d.ts +6 -0
- package/dist/types/prerender/shell-manifest-key.d.ts +18 -0
- package/dist/types/prerender/store.d.ts +63 -0
- package/dist/types/prerender.d.ts +292 -0
- package/dist/types/redirect-origin.d.ts +71 -0
- package/dist/types/regex-escape.d.ts +6 -0
- package/dist/types/render-error-thrower.d.ts +13 -0
- package/dist/types/response-utils.d.ts +35 -0
- package/dist/types/reverse.d.ts +206 -0
- package/dist/types/root-error-boundary.d.ts +32 -0
- package/dist/types/route-content-wrapper.d.ts +84 -0
- package/dist/types/route-definition/dsl-helpers.d.ts +130 -0
- package/dist/types/route-definition/helper-factories.d.ts +22 -0
- package/dist/types/route-definition/helpers-types.d.ts +405 -0
- package/dist/types/route-definition/index.d.ts +7 -0
- package/dist/types/route-definition/redirect.d.ts +48 -0
- package/dist/types/route-definition/resolve-handler-use.d.ts +19 -0
- package/dist/types/route-definition/use-item-types.d.ts +1 -0
- package/dist/types/route-definition.d.ts +1 -0
- package/dist/types/route-map-builder.d.ts +102 -0
- package/dist/types/route-name.d.ts +27 -0
- package/dist/types/route-types.d.ts +172 -0
- package/dist/types/router/basename.d.ts +10 -0
- package/dist/types/router/content-negotiation.d.ts +91 -0
- package/dist/types/router/debug-manifest.d.ts +7 -0
- package/dist/types/router/error-handling.d.ts +110 -0
- package/dist/types/router/find-match.d.ts +19 -0
- package/dist/types/router/handler-context.d.ts +41 -0
- package/dist/types/router/instrument.d.ts +191 -0
- package/dist/types/router/intercept-resolution.d.ts +91 -0
- package/dist/types/router/lazy-includes.d.ts +26 -0
- package/dist/types/router/loader-resolution.d.ts +85 -0
- package/dist/types/router/logging.d.ts +41 -0
- package/dist/types/router/manifest.d.ts +8 -0
- package/dist/types/router/match-api.d.ts +19 -0
- package/dist/types/router/match-context.d.ts +184 -0
- package/dist/types/router/match-handlers.d.ts +48 -0
- package/dist/types/router/match-middleware/background-revalidation.d.ts +113 -0
- package/dist/types/router/match-middleware/cache-lookup.d.ts +126 -0
- package/dist/types/router/match-middleware/cache-store.d.ts +112 -0
- package/dist/types/router/match-middleware/index.d.ts +80 -0
- package/dist/types/router/match-middleware/intercept-resolution.d.ts +116 -0
- package/dist/types/router/match-middleware/segment-resolution.d.ts +94 -0
- package/dist/types/router/match-pipelines.d.ts +103 -0
- package/dist/types/router/match-result.d.ts +114 -0
- package/dist/types/router/metrics.d.ts +6 -0
- package/dist/types/router/middleware-types.d.ts +74 -0
- package/dist/types/router/middleware.d.ts +116 -0
- package/dist/types/router/navigation-snapshot.d.ts +51 -0
- package/dist/types/router/params-util.d.ts +8 -0
- package/dist/types/router/parse-pattern.d.ts +38 -0
- package/dist/types/router/pattern-matching.d.ts +169 -0
- package/dist/types/router/prefetch-cache-ttl.d.ts +27 -0
- package/dist/types/router/prefetch-default.d.ts +28 -0
- package/dist/types/router/prefetch-limits.d.ts +20 -0
- package/dist/types/router/prerender-match.d.ts +53 -0
- package/dist/types/router/preview-match.d.ts +22 -0
- package/dist/types/router/request-classification.d.ts +104 -0
- package/dist/types/router/revalidation.d.ts +64 -0
- package/dist/types/router/route-snapshot.d.ts +112 -0
- package/dist/types/router/route-trie-builder.d.ts +77 -0
- package/dist/types/router/router-context.d.ts +137 -0
- package/dist/types/router/router-interfaces.d.ts +461 -0
- package/dist/types/router/router-options.d.ts +792 -0
- package/dist/types/router/router-registry.d.ts +15 -0
- package/dist/types/router/segment-resolution/fresh.d.ts +55 -0
- package/dist/types/router/segment-resolution/helpers.d.ts +93 -0
- package/dist/types/router/segment-resolution/loader-cache.d.ts +33 -0
- package/dist/types/router/segment-resolution/loader-mask.d.ts +44 -0
- package/dist/types/router/segment-resolution/loader-snapshot.d.ts +90 -0
- package/dist/types/router/segment-resolution/mask-nested.d.ts +53 -0
- package/dist/types/router/segment-resolution/revalidation.d.ts +85 -0
- package/dist/types/router/segment-resolution/static-store.d.ts +17 -0
- package/dist/types/router/segment-resolution/streamed-handler-telemetry.d.ts +16 -0
- package/dist/types/router/segment-resolution/view-transition-default.d.ts +27 -0
- package/dist/types/router/segment-resolution.d.ts +3 -0
- package/dist/types/router/segment-wrappers.d.ts +53 -0
- package/dist/types/router/state-cookie-name.d.ts +1 -0
- package/dist/types/router/substitute-pattern-params.d.ts +23 -0
- package/dist/types/router/telemetry-otel.d.ts +113 -0
- package/dist/types/router/telemetry.d.ts +216 -0
- package/dist/types/router/timeout.d.ts +107 -0
- package/dist/types/router/tracing.d.ts +139 -0
- package/dist/types/router/transition-when.d.ts +13 -0
- package/dist/types/router/trie-matching.d.ts +32 -0
- package/dist/types/router/types.d.ts +98 -0
- package/dist/types/router/url-params.d.ts +26 -0
- package/dist/types/router.d.ts +7 -0
- package/dist/types/rsc/capture-queue.d.ts +49 -0
- package/dist/types/rsc/full-payload.d.ts +22 -0
- package/dist/types/rsc/handler-context.d.ts +32 -0
- package/dist/types/rsc/handler.d.ts +9 -0
- package/dist/types/rsc/helpers.d.ts +127 -0
- package/dist/types/rsc/index.d.ts +17 -0
- package/dist/types/rsc/json-route-result.d.ts +20 -0
- package/dist/types/rsc/loader-fetch.d.ts +14 -0
- package/dist/types/rsc/manifest-init.d.ts +18 -0
- package/dist/types/rsc/nonce.d.ts +38 -0
- package/dist/types/rsc/origin-guard.d.ts +50 -0
- package/dist/types/rsc/progressive-enhancement.d.ts +19 -0
- package/dist/types/rsc/redirect-guard.d.ts +37 -0
- package/dist/types/rsc/render-pipeline.d.ts +148 -0
- package/dist/types/rsc/response-cache-serve.d.ts +46 -0
- package/dist/types/rsc/response-error.d.ts +19 -0
- package/dist/types/rsc/response-route-handler.d.ts +29 -0
- package/dist/types/rsc/routine-plan.d.ts +124 -0
- package/dist/types/rsc/rsc-rendering.d.ts +18 -0
- package/dist/types/rsc/runtime-warnings.d.ts +22 -0
- package/dist/types/rsc/server-action.d.ts +68 -0
- package/dist/types/rsc/shell-build-manifest.d.ts +90 -0
- package/dist/types/rsc/shell-capture-constants.d.ts +44 -0
- package/dist/types/rsc/shell-capture.d.ts +425 -0
- package/dist/types/rsc/shell-serve.d.ts +200 -0
- package/dist/types/rsc/ssr-setup.d.ts +73 -0
- package/dist/types/rsc/stream-idle.d.ts +60 -0
- package/dist/types/rsc/transition-gate.d.ts +23 -0
- package/dist/types/rsc/types.d.ts +353 -0
- package/dist/types/runtime-env.d.ts +1 -0
- package/dist/types/search-params.d.ts +125 -0
- package/dist/types/segment-content-promise.d.ts +13 -0
- package/dist/types/segment-fragments.d.ts +79 -0
- package/dist/types/segment-loader-promise.d.ts +22 -0
- package/dist/types/segment-system.d.ts +86 -0
- package/dist/types/serialize.d.ts +164 -0
- package/dist/types/server/context.d.ts +520 -0
- package/dist/types/server/cookie-parse.d.ts +10 -0
- package/dist/types/server/cookie-store.d.ts +107 -0
- package/dist/types/server/fetchable-loader-store.d.ts +20 -0
- package/dist/types/server/handle-store.d.ts +131 -0
- package/dist/types/server/loader-registry.d.ts +32 -0
- package/dist/types/server/request-context.d.ts +717 -0
- package/dist/types/server/root-layout.d.ts +3 -0
- package/dist/types/server.d.ts +16 -0
- package/dist/types/ssr/index.d.ts +271 -0
- package/dist/types/ssr/inject-rsc-eager.d.ts +3 -0
- package/dist/types/ssr/preinit-client-references.d.ts +71 -0
- package/dist/types/ssr/ssr-root.d.ts +84 -0
- package/dist/types/ssr-suspension-warning.d.ts +19 -0
- package/dist/types/static-handler.d.ts +71 -0
- package/dist/types/testing/cache-status.d.ts +63 -0
- package/dist/types/testing/collect-handle.d.ts +20 -0
- package/dist/types/testing/dispatch.d.ts +127 -0
- package/dist/types/testing/dom.entry.d.ts +15 -0
- package/dist/types/testing/e2e/fixture.d.ts +37 -0
- package/dist/types/testing/e2e/index.d.ts +31 -0
- package/dist/types/testing/e2e/matchers.d.ts +17 -0
- package/dist/types/testing/e2e/page-helpers.d.ts +86 -0
- package/dist/types/testing/e2e/parity.d.ts +111 -0
- package/dist/types/testing/e2e/server.d.ts +35 -0
- package/dist/types/testing/flight-matchers.d.ts +55 -0
- package/dist/types/testing/flight-normalize.d.ts +1 -0
- package/dist/types/testing/flight-tree.d.ts +192 -0
- package/dist/types/testing/flight.d.ts +115 -0
- package/dist/types/testing/flight.entry.d.ts +27 -0
- package/dist/types/testing/generated-routes.d.ts +66 -0
- package/dist/types/testing/index.d.ts +54 -0
- package/dist/types/testing/internal/context.d.ts +225 -0
- package/dist/types/testing/internal/flight-client-globals.d.ts +1 -0
- package/dist/types/testing/internal/seed-vars.d.ts +30 -0
- package/dist/types/testing/render-handler.d.ts +160 -0
- package/dist/types/testing/render-route.d.ts +265 -0
- package/dist/types/testing/run-loader.d.ts +195 -0
- package/dist/types/testing/run-middleware.d.ts +132 -0
- package/dist/types/testing/run-transition-when.d.ts +78 -0
- package/dist/types/testing/shell-status.d.ts +81 -0
- package/dist/types/testing/vitest-stubs/cloudflare-email.d.ts +6 -0
- package/dist/types/testing/vitest-stubs/cloudflare-workers.d.ts +13 -0
- package/dist/types/testing/vitest-stubs/plugin-rsc.d.ts +7 -0
- package/dist/types/testing/vitest-stubs/version.d.ts +1 -0
- package/dist/types/testing/vitest.d.ts +205 -0
- package/dist/types/theme/ThemeProvider.d.ts +13 -0
- package/dist/types/theme/ThemeScript.d.ts +45 -0
- package/dist/types/theme/constants.d.ts +39 -0
- package/dist/types/theme/index.d.ts +29 -0
- package/dist/types/theme/theme-context.d.ts +21 -0
- package/dist/types/theme/theme-script.d.ts +26 -0
- package/dist/types/theme/types.d.ts +162 -0
- package/dist/types/theme/use-theme.d.ts +8 -0
- package/dist/types/types/boundaries.d.ts +115 -0
- package/dist/types/types/cache-types.d.ts +191 -0
- package/dist/types/types/error-types.d.ts +114 -0
- package/dist/types/types/global-namespace.d.ts +90 -0
- package/dist/types/types/handler-context.d.ts +658 -0
- package/dist/types/types/index.d.ts +11 -0
- package/dist/types/types/loader-types.d.ts +240 -0
- package/dist/types/types/request-scope.d.ts +93 -0
- package/dist/types/types/route-config.d.ts +105 -0
- package/dist/types/types/route-entry.d.ts +98 -0
- package/dist/types/types/segments.d.ts +254 -0
- package/dist/types/types.d.ts +1 -0
- package/dist/types/urls/include-helper.d.ts +17 -0
- package/dist/types/urls/include-provider.d.ts +27 -0
- package/dist/types/urls/index.d.ts +6 -0
- package/dist/types/urls/path-helper-types.d.ts +207 -0
- package/dist/types/urls/path-helper.d.ts +12 -0
- package/dist/types/urls/pattern-types.d.ts +166 -0
- package/dist/types/urls/response-types.d.ts +67 -0
- package/dist/types/urls/type-extraction.d.ts +157 -0
- package/dist/types/urls/urls-function.d.ts +24 -0
- package/dist/types/urls.d.ts +1 -0
- package/dist/types/use-loader.d.ts +150 -0
- package/dist/types/vercel/index.d.ts +10 -0
- package/dist/types/vercel/tracing.d.ts +71 -0
- package/dist/types/vite/debug.d.ts +80 -0
- package/dist/types/vite/discovery/bundle-postprocess.d.ts +12 -0
- package/dist/types/vite/discovery/client-urls-projection.d.ts +53 -0
- package/dist/types/vite/discovery/dev-prerender-cache.d.ts +65 -0
- package/dist/types/vite/discovery/discover-routers.d.ts +17 -0
- package/dist/types/vite/discovery/discovery-errors.d.ts +113 -0
- package/dist/types/vite/discovery/gate-state.d.ts +79 -0
- package/dist/types/vite/discovery/prerender-collection.d.ts +24 -0
- package/dist/types/vite/discovery/route-types-writer.d.ts +32 -0
- package/dist/types/vite/discovery/self-gen-tracking.d.ts +22 -0
- package/dist/types/vite/discovery/shell-prerender-phase.d.ts +40 -0
- package/dist/types/vite/discovery/state.d.ts +170 -0
- package/dist/types/vite/discovery/virtual-module-codegen.d.ts +15 -0
- package/dist/types/vite/encryption-key.d.ts +2 -0
- package/dist/types/vite/index.d.ts +11 -0
- package/dist/types/vite/inject-client-debug.d.ts +56 -0
- package/dist/types/vite/plugin-types.d.ts +298 -0
- package/dist/types/vite/plugins/cjs-to-esm.d.ts +6 -0
- package/dist/types/vite/plugins/client-ref-dedup.d.ts +29 -0
- package/dist/types/vite/plugins/client-ref-hashing.d.ts +35 -0
- package/dist/types/vite/plugins/cloudflare-protocol-stub.d.ts +64 -0
- package/dist/types/vite/plugins/expose-action-id.d.ts +18 -0
- package/dist/types/vite/plugins/expose-id-utils.d.ts +37 -0
- package/dist/types/vite/plugins/expose-ids/export-analysis.d.ts +19 -0
- package/dist/types/vite/plugins/expose-ids/handler-transform.d.ts +10 -0
- package/dist/types/vite/plugins/expose-ids/loader-transform.d.ts +8 -0
- package/dist/types/vite/plugins/expose-ids/router-transform.d.ts +13 -0
- package/dist/types/vite/plugins/expose-ids/types.d.ts +29 -0
- package/dist/types/vite/plugins/expose-internal-ids.d.ts +16 -0
- package/dist/types/vite/plugins/performance-tracks.d.ts +25 -0
- package/dist/types/vite/plugins/refresh-cmd.d.ts +20 -0
- package/dist/types/vite/plugins/server-ref-hashing.d.ts +24 -0
- package/dist/types/vite/plugins/server-reference-pattern.d.ts +1 -0
- package/dist/types/vite/plugins/use-cache-transform.d.ts +20 -0
- package/dist/types/vite/plugins/vercel-output.d.ts +85 -0
- package/dist/types/vite/plugins/version-injector.d.ts +21 -0
- package/dist/types/vite/plugins/version-plugin.d.ts +19 -0
- package/dist/types/vite/plugins/virtual-entries.d.ts +36 -0
- package/dist/types/vite/plugins/virtual-stub-plugin.d.ts +7 -0
- package/dist/types/vite/rango.d.ts +29 -0
- package/dist/types/vite/router-discovery.d.ts +23 -0
- package/dist/types/vite/utils/ast-handler-extract.d.ts +64 -0
- package/dist/types/vite/utils/banner.d.ts +2 -0
- package/dist/types/vite/utils/bundle-analysis.d.ts +28 -0
- package/dist/types/vite/utils/client-chunks.d.ts +55 -0
- package/dist/types/vite/utils/directive-prologue.d.ts +16 -0
- package/dist/types/vite/utils/forward-user-plugins.d.ts +37 -0
- package/dist/types/vite/utils/manifest-utils.d.ts +7 -0
- package/dist/types/vite/utils/package-resolution.d.ts +6 -0
- package/dist/types/vite/utils/prerender-utils.d.ts +32 -0
- package/dist/types/vite/utils/shared-utils.d.ts +67 -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 +12042 -1346
- 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/{src/vite/package-resolution.ts → dist/vite/package-resolution.js} +53 -66
- 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/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +170 -77
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +359 -0
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +492 -0
- package/skills/caching/SKILL.md +452 -26
- package/skills/catalog.json +289 -0
- package/skills/client-urls/SKILL.md +339 -0
- package/skills/cloudflare/SKILL.md +153 -0
- package/skills/cloudflare/agents/openai.yaml +4 -0
- package/skills/cloudflare/references/d1-and-local-dev.md +131 -0
- package/skills/cloudflare/references/streaming-and-deploy.md +107 -0
- package/skills/cloudflare/references/webhooks-and-crypto.md +147 -0
- package/skills/comparison/SKILL.md +50 -0
- package/skills/comparison/agents/openai.yaml +4 -0
- package/skills/comparison/references/framework-comparison.md +858 -0
- package/skills/composability/SKILL.md +292 -0
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +16 -18
- package/skills/defer-hydration/SKILL.md +235 -0
- package/skills/deployment-caching/SKILL.md +176 -0
- package/skills/document-cache/SKILL.md +125 -65
- package/skills/fonts/SKILL.md +167 -0
- package/skills/handler-use/SKILL.md +364 -0
- package/skills/hooks/SKILL.md +76 -432
- package/skills/hooks/data.md +282 -0
- package/skills/hooks/handle-and-actions.md +110 -0
- package/skills/hooks/navigation.md +110 -0
- package/skills/hooks/outlets.md +62 -0
- package/skills/hooks/state.md +228 -0
- package/skills/hooks/urls.md +172 -0
- package/skills/host-router/SKILL.md +320 -0
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +215 -16
- package/skills/layout/SKILL.md +147 -7
- package/skills/links/SKILL.md +360 -33
- package/skills/loader/SKILL.md +762 -51
- package/skills/middleware/SKILL.md +251 -38
- package/skills/migrate-nextjs/SKILL.md +854 -0
- package/skills/migrate-nextjs/backend-host-swap.md +120 -0
- package/skills/migrate-react-router/SKILL.md +189 -0
- package/skills/migrate-react-router/component-migration.md +201 -0
- package/skills/migrate-react-router/data-and-actions.md +236 -0
- package/skills/migrate-react-router/route-mapping.md +284 -0
- package/skills/mime-routes/SKILL.md +165 -0
- package/skills/observability/SKILL.md +231 -0
- package/skills/parallel/SKILL.md +327 -4
- package/skills/ppr/SKILL.md +918 -0
- package/skills/prerender/SKILL.md +751 -0
- package/skills/rango/SKILL.md +387 -17
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +539 -0
- package/skills/route/SKILL.md +399 -15
- package/skills/router-setup/SKILL.md +270 -34
- package/skills/scripts/SKILL.md +189 -0
- package/skills/server-actions/SKILL.md +776 -0
- package/skills/shell-manifest/SKILL.md +194 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/tailwind/SKILL.md +153 -0
- package/skills/testing/SKILL.md +131 -0
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +172 -0
- package/skills/testing/client-components.md +131 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +153 -0
- package/skills/testing/loader.md +130 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +122 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +85 -0
- package/skills/testing/server-actions.md +107 -0
- package/skills/testing/server-tree.md +128 -0
- package/skills/testing/setup.md +123 -0
- package/skills/theme/SKILL.md +16 -12
- package/skills/typesafety/SKILL.md +45 -387
- package/skills/typesafety/env-and-bindings.md +254 -0
- package/skills/typesafety/generated-files-and-cli.md +342 -0
- package/skills/typesafety/params-and-search.md +153 -0
- package/skills/typesafety/route-types.md +213 -0
- package/skills/use-cache/SKILL.md +430 -0
- package/skills/vercel/SKILL.md +149 -0
- package/skills/view-transitions/SKILL.md +341 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +77 -44
- package/src/bin/rango.ts +325 -0
- package/src/browser/action-coordinator.ts +114 -0
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +39 -0
- package/src/browser/app-version.ts +14 -0
- package/src/browser/connection-warmup.ts +134 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/dev-discovery.ts +66 -0
- package/src/browser/event-controller.ts +477 -217
- package/src/browser/history-state.ts +101 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/intercept-utils.ts +52 -0
- package/src/browser/invalidate-client-cache.ts +52 -0
- package/src/browser/link-interceptor.ts +487 -18
- package/src/browser/logging.ts +83 -0
- package/src/browser/merge-segment-loaders.ts +23 -13
- package/src/browser/navigation-bridge.ts +471 -570
- package/src/browser/navigation-client.ts +343 -79
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +228 -366
- package/src/browser/navigation-transaction.ts +247 -0
- package/src/browser/network-error-handler.ts +88 -0
- package/src/browser/notify-listeners.ts +22 -0
- package/src/browser/partial-update.ts +491 -365
- package/src/browser/prefetch/cache.ts +457 -0
- package/src/browser/prefetch/default-strategy.ts +74 -0
- package/src/browser/prefetch/fetch.ts +548 -0
- package/src/browser/prefetch/invalidation.ts +30 -0
- package/src/browser/prefetch/loader.ts +111 -0
- package/src/browser/prefetch/observer.ts +93 -0
- package/src/browser/prefetch/policy.ts +48 -0
- package/src/browser/prefetch/queue.ts +209 -0
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/prefetch/runtime.ts +6 -0
- package/src/browser/rango-state.ts +215 -0
- package/src/browser/react/Link.tsx +332 -85
- package/src/browser/react/NavigationProvider.tsx +275 -109
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/context.ts +15 -0
- package/src/browser/react/filter-segment-order.ts +70 -0
- package/src/browser/react/index.ts +0 -48
- package/src/browser/react/location-state-shared.ts +272 -60
- package/src/browser/react/location-state.ts +90 -20
- package/src/browser/react/mount-context.ts +6 -1
- package/src/browser/react/nonce-context.ts +23 -0
- package/src/browser/react/shallow-equal.ts +27 -0
- package/src/browser/react/use-action.ts +35 -66
- package/src/browser/react/use-handle.ts +39 -132
- package/src/browser/react/use-href.tsx +9 -2
- package/src/browser/react/use-link-status.ts +39 -13
- package/src/browser/react/use-navigation.ts +53 -69
- package/src/browser/react/use-params.ts +75 -0
- package/src/browser/react/use-pathname.ts +47 -0
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +127 -0
- package/src/browser/react/use-search-params.ts +174 -0
- package/src/browser/react/use-segments.ts +72 -99
- package/src/browser/response-adapter.ts +164 -0
- package/src/browser/rsc-router.tsx +446 -74
- package/src/browser/scroll-restoration.ts +140 -50
- package/src/browser/segment-reconciler.ts +253 -0
- package/src/browser/segment-structure-assert.ts +17 -1
- package/src/browser/server-action-bridge.ts +707 -603
- package/src/browser/types.ts +266 -75
- package/src/browser/validate-redirect-origin.ts +56 -0
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +324 -84
- package/src/build/generate-route-types.ts +41 -0
- package/src/build/index.ts +22 -1
- package/src/build/merge-full-manifests.ts +161 -0
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +54 -0
- package/src/build/route-types/ast-helpers.ts +25 -0
- package/src/build/route-types/ast-route-extraction.ts +105 -0
- package/src/build/route-types/codegen.ts +113 -0
- package/src/build/route-types/include-resolution.ts +867 -0
- package/src/build/route-types/param-extraction.ts +51 -0
- package/src/build/route-types/per-module-writer.ts +149 -0
- package/src/build/route-types/router-processing.ts +726 -0
- package/src/build/route-types/scan-filter.ts +85 -0
- package/src/build/route-types/source-scan.ts +216 -0
- package/src/build/runtime-discovery.ts +234 -0
- package/src/cache/background-task.ts +34 -0
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-exec-scope.ts +47 -0
- package/src/cache/cache-key-utils.ts +102 -0
- package/src/cache/cache-policy.ts +199 -0
- package/src/cache/cache-runtime.ts +787 -0
- package/src/cache/cache-scope.ts +478 -342
- package/src/cache/cache-tag.ts +149 -0
- package/src/cache/cf/cf-base64.ts +33 -0
- package/src/cache/cf/cf-cache-constants.ts +134 -0
- package/src/cache/cf/cf-cache-store.ts +3397 -152
- package/src/cache/cf/cf-cache-types.ts +417 -0
- package/src/cache/cf/cf-kv-utils.ts +84 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +108 -0
- package/src/cache/cf/cf-zone-purge.ts +101 -0
- package/src/cache/cf/index.ts +21 -16
- package/src/cache/document-cache.ts +275 -105
- package/src/cache/handle-capture.ts +81 -0
- package/src/cache/handle-snapshot.ts +132 -0
- package/src/cache/index.ts +33 -35
- package/src/cache/memory-segment-store.ts +457 -30
- package/src/cache/profile-registry.ts +88 -0
- package/src/cache/read-through-swr.ts +184 -0
- package/src/cache/search-params-filter.ts +118 -0
- package/src/cache/segment-codec.ts +311 -0
- package/src/cache/shell-snapshot.ts +516 -0
- package/src/cache/tag-invalidation.ts +230 -0
- package/src/cache/taint.ts +172 -0
- package/src/cache/types.ts +405 -212
- package/src/cache/vercel/index.ts +11 -0
- package/src/cache/vercel/vercel-cache-store.ts +1264 -0
- package/src/client-urls/client-root.tsx +168 -0
- package/src/client-urls/client-urls.ts +779 -0
- package/src/client-urls/navigation.ts +237 -0
- package/src/client-urls/revalidation-protocol.ts +56 -0
- package/src/client-urls/server-projection.ts +670 -0
- package/src/client-urls/types.ts +202 -0
- package/src/client.rsc.tsx +55 -21
- package/src/client.tsx +179 -330
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +112 -0
- package/src/component-utils.ts +23 -4
- package/src/components/DefaultDocument.tsx +13 -3
- package/src/context-var.ts +168 -0
- package/src/debug.ts +19 -9
- package/src/decode-loader-results.ts +165 -0
- package/src/defer.ts +185 -0
- package/src/deps/ssr.ts +4 -2
- package/src/dev-discovery-protocol.ts +11 -0
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +149 -3
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +111 -55
- package/src/handles/MetaTags.tsx +83 -59
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +93 -0
- package/src/handles/deferred-resolution.ts +134 -0
- package/src/handles/is-thenable.ts +16 -0
- package/src/handles/meta.ts +44 -53
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +20 -65
- package/src/host/errors.ts +21 -30
- package/src/host/index.ts +13 -9
- package/src/host/pattern-matcher.ts +50 -79
- package/src/host/router.ts +151 -121
- package/src/host/testing.ts +45 -32
- package/src/host/types.ts +52 -11
- package/src/host/utils.ts +2 -2
- package/src/href-client.ts +236 -31
- package/src/index.rsc.ts +252 -20
- package/src/index.ts +343 -30
- package/src/internal-debug.ts +12 -0
- package/src/loader-redirect.tsx +64 -0
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +39 -163
- package/src/loader.ts +31 -13
- package/src/missing-id-error.ts +68 -0
- package/src/outlet-context.ts +21 -1
- package/src/outlet-provider.tsx +59 -0
- package/src/prerender/build-shell-capture.ts +453 -0
- package/src/prerender/param-hash.ts +37 -0
- package/src/prerender/shell-manifest-key.ts +20 -0
- package/src/prerender/store.ts +195 -0
- package/src/prerender.ts +592 -0
- package/src/redirect-origin.ts +172 -0
- package/src/regex-escape.ts +8 -0
- package/src/render-error-thrower.tsx +20 -0
- package/src/response-utils.ts +62 -0
- package/src/reverse.ts +380 -0
- package/src/root-error-boundary.tsx +42 -48
- package/src/route-content-wrapper.tsx +123 -78
- package/src/route-definition/dsl-helpers.ts +1150 -0
- package/src/route-definition/helper-factories.ts +88 -0
- package/src/route-definition/helpers-types.ts +522 -0
- package/src/route-definition/index.ts +54 -0
- package/src/route-definition/redirect.ts +133 -0
- package/src/route-definition/resolve-handler-use.ts +160 -0
- package/src/route-definition/use-item-types.ts +29 -0
- package/src/route-definition.ts +1 -1428
- package/src/route-map-builder.ts +249 -127
- package/src/route-name.ts +53 -0
- package/src/route-types.ts +87 -45
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +305 -0
- package/src/router/debug-manifest.ts +72 -0
- package/src/router/error-handling.ts +119 -38
- package/src/router/find-match.ts +259 -0
- package/src/router/handler-context.ts +439 -86
- package/src/router/instrument.ts +401 -0
- package/src/router/intercept-resolution.ts +479 -0
- package/src/router/lazy-includes.ts +261 -0
- package/src/router/loader-resolution.ts +714 -142
- package/src/router/logging.ts +245 -0
- package/src/router/manifest.ts +225 -63
- package/src/router/match-api.ts +591 -0
- package/src/router/match-context.ts +5 -25
- package/src/router/match-handlers.ts +537 -0
- package/src/router/match-middleware/background-revalidation.ts +128 -97
- package/src/router/match-middleware/cache-lookup.ts +537 -73
- package/src/router/match-middleware/cache-store.ts +214 -60
- package/src/router/match-middleware/intercept-resolution.ts +56 -38
- package/src/router/match-middleware/segment-resolution.ts +71 -19
- package/src/router/match-pipelines.ts +11 -87
- package/src/router/match-result.ts +150 -53
- package/src/router/metrics.ts +235 -29
- package/src/router/middleware-types.ts +110 -0
- package/src/router/middleware.ts +526 -441
- package/src/router/navigation-snapshot.ts +173 -0
- package/src/router/params-util.ts +23 -0
- package/src/router/parse-pattern.ts +115 -0
- package/src/router/pattern-matching.ts +348 -149
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prefetch-default.ts +59 -0
- package/src/router/prefetch-limits.ts +37 -0
- package/src/router/prerender-match.ts +592 -0
- package/src/router/preview-match.ts +102 -0
- package/src/router/request-classification.ts +291 -0
- package/src/router/revalidation.ts +252 -90
- package/src/router/route-snapshot.ts +256 -0
- package/src/router/route-trie-builder.ts +334 -0
- package/src/router/router-context.ts +45 -48
- package/src/router/router-interfaces.ts +614 -0
- package/src/router/router-options.ts +842 -0
- package/src/router/router-registry.ts +21 -0
- package/src/router/segment-resolution/fresh.ts +879 -0
- package/src/router/segment-resolution/helpers.ts +346 -0
- package/src/router/segment-resolution/loader-cache.ts +368 -0
- package/src/router/segment-resolution/loader-mask.ts +60 -0
- package/src/router/segment-resolution/loader-snapshot.ts +259 -0
- package/src/router/segment-resolution/mask-nested.ts +99 -0
- package/src/router/segment-resolution/revalidation.ts +1376 -0
- package/src/router/segment-resolution/static-store.ts +107 -0
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution/view-transition-default.ts +60 -0
- package/src/router/segment-resolution.ts +25 -0
- package/src/router/segment-wrappers.ts +292 -0
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/substitute-pattern-params.ts +75 -0
- package/src/router/telemetry-otel.ts +270 -0
- package/src/router/telemetry.ts +386 -0
- package/src/router/timeout.ts +179 -0
- package/src/router/tracing.ts +235 -0
- package/src/router/transition-when.ts +76 -0
- package/src/router/trie-matching.ts +351 -0
- package/src/router/types.ts +60 -39
- package/src/router/url-params.ts +57 -0
- package/src/router.ts +911 -4253
- package/src/rsc/capture-queue.ts +218 -0
- package/src/rsc/full-payload.ts +77 -0
- package/src/rsc/handler-context.ts +47 -0
- package/src/rsc/handler.ts +1226 -834
- package/src/rsc/helpers.ts +351 -19
- package/src/rsc/index.ts +2 -25
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +305 -0
- package/src/rsc/manifest-init.ts +89 -0
- package/src/rsc/nonce.ts +39 -0
- package/src/rsc/origin-guard.ts +155 -0
- package/src/rsc/progressive-enhancement.ts +686 -0
- package/src/rsc/redirect-guard.ts +102 -0
- package/src/rsc/render-pipeline.ts +611 -0
- package/src/rsc/response-cache-serve.ts +259 -0
- package/src/rsc/response-error.ts +104 -0
- package/src/rsc/response-route-handler.ts +221 -0
- package/src/rsc/routine-plan.ts +359 -0
- package/src/rsc/rsc-rendering.ts +1729 -0
- package/src/rsc/runtime-warnings.ts +55 -0
- package/src/rsc/server-action.ts +639 -0
- package/src/rsc/shell-build-manifest.ts +343 -0
- package/src/rsc/shell-capture-constants.ts +45 -0
- package/src/rsc/shell-capture.ts +2135 -0
- package/src/rsc/shell-serve.ts +350 -0
- package/src/rsc/ssr-setup.ts +236 -0
- package/src/rsc/stream-idle.ts +137 -0
- package/src/rsc/transition-gate.ts +86 -0
- package/src/rsc/types.ts +167 -14
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +235 -0
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-fragments.ts +165 -0
- package/src/segment-loader-promise.ts +167 -0
- package/src/segment-system.tsx +544 -136
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +741 -90
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +337 -0
- package/src/server/fetchable-loader-store.ts +37 -0
- package/src/server/handle-store.ts +278 -60
- package/src/server/loader-registry.ts +51 -100
- package/src/server/request-context.ts +1296 -161
- package/src/server.ts +38 -128
- package/src/ssr/index.tsx +716 -140
- package/src/ssr/inject-rsc-eager.ts +167 -0
- package/src/ssr/preinit-client-references.ts +106 -0
- package/src/ssr/ssr-root.tsx +305 -0
- package/src/ssr-suspension-warning.ts +67 -0
- package/src/static-handler.ts +139 -0
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +46 -0
- package/src/testing/dispatch.ts +951 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +147 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +319 -0
- package/src/testing/e2e/parity.ts +400 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +257 -0
- package/src/testing/generated-routes.ts +199 -0
- package/src/testing/index.ts +121 -0
- package/src/testing/internal/context.ts +380 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +371 -0
- package/src/testing/render-route.tsx +667 -0
- package/src/testing/run-loader.ts +423 -0
- package/src/testing/run-middleware.ts +219 -0
- package/src/testing/run-transition-when.ts +197 -0
- package/src/testing/shell-status.ts +206 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +305 -0
- package/src/theme/ThemeProvider.tsx +76 -98
- package/src/theme/ThemeScript.tsx +12 -14
- package/src/theme/constants.ts +57 -15
- package/src/theme/index.ts +3 -20
- package/src/theme/theme-context.ts +5 -35
- package/src/theme/theme-script.ts +43 -39
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +142 -0
- package/src/types/cache-types.ts +207 -0
- package/src/types/error-types.ts +132 -0
- package/src/types/global-namespace.ts +113 -0
- package/src/types/handler-context.ts +850 -0
- package/src/types/index.ts +82 -0
- package/src/types/loader-types.ts +273 -0
- package/src/types/request-scope.ts +112 -0
- package/src/types/route-config.ts +138 -0
- package/src/types/route-entry.ts +117 -0
- package/src/types/segments.ts +291 -0
- package/src/types.ts +1 -1623
- package/src/urls/include-helper.ts +181 -0
- package/src/urls/include-provider.ts +71 -0
- package/src/urls/index.ts +44 -0
- package/src/urls/path-helper-types.ts +435 -0
- package/src/urls/path-helper.ts +284 -0
- package/src/urls/pattern-types.ts +189 -0
- package/src/urls/response-types.ts +109 -0
- package/src/urls/type-extraction.ts +316 -0
- package/src/urls/urls-function.ts +80 -0
- package/src/urls.ts +1 -802
- package/src/use-loader.tsx +487 -138
- package/src/vercel/index.ts +11 -0
- package/src/vercel/tracing.ts +89 -0
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +185 -0
- package/src/vite/discovery/client-urls-projection.ts +322 -0
- package/src/vite/discovery/dev-prerender-cache.ts +117 -0
- package/src/vite/discovery/discover-routers.ts +375 -0
- package/src/vite/discovery/discovery-errors.ts +255 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +494 -0
- package/src/vite/discovery/route-types-writer.ts +214 -0
- package/src/vite/discovery/self-gen-tracking.ts +73 -0
- package/src/vite/discovery/shell-prerender-phase.ts +397 -0
- package/src/vite/discovery/state.ts +215 -0
- package/src/vite/discovery/virtual-module-codegen.ts +342 -0
- package/src/vite/encryption-key.ts +29 -0
- package/src/vite/index.ts +31 -1137
- package/src/vite/inject-client-debug.ts +88 -0
- package/src/vite/plugin-types.ts +336 -0
- package/src/vite/plugins/cjs-to-esm.ts +90 -0
- package/src/vite/plugins/client-ref-dedup.ts +382 -0
- package/src/vite/plugins/client-ref-hashing.ts +118 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
- package/src/vite/{expose-action-id.ts → plugins/expose-action-id.ts} +130 -136
- package/src/vite/plugins/expose-id-utils.ts +332 -0
- package/src/vite/plugins/expose-ids/export-analysis.ts +363 -0
- package/src/vite/plugins/expose-ids/handler-transform.ts +130 -0
- package/src/vite/plugins/expose-ids/loader-transform.ts +64 -0
- package/src/vite/plugins/expose-ids/router-transform.ts +199 -0
- package/src/vite/plugins/expose-ids/types.ts +45 -0
- package/src/vite/plugins/expose-internal-ids.ts +851 -0
- package/src/vite/plugins/performance-tracks.ts +89 -0
- package/src/vite/plugins/refresh-cmd.ts +127 -0
- package/src/vite/plugins/server-ref-hashing.ts +74 -0
- package/src/vite/plugins/server-reference-pattern.ts +10 -0
- package/src/vite/plugins/use-cache-transform.ts +313 -0
- package/src/vite/plugins/vercel-output.ts +384 -0
- package/src/vite/plugins/version-injector.ts +93 -0
- package/src/vite/plugins/version-plugin.ts +271 -0
- package/src/vite/plugins/virtual-entries.ts +286 -0
- package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
- package/src/vite/rango.ts +609 -0
- package/src/vite/router-discovery.ts +2400 -0
- package/src/vite/utils/ast-handler-extract.ts +508 -0
- package/src/vite/utils/banner.ts +36 -0
- package/src/vite/utils/bundle-analysis.ts +132 -0
- package/src/vite/utils/client-chunks.ts +184 -0
- package/src/vite/utils/directive-prologue.ts +40 -0
- package/src/vite/utils/forward-user-plugins.ts +171 -0
- package/src/vite/utils/manifest-utils.ts +12 -0
- package/src/vite/utils/package-resolution.ts +90 -0
- package/src/vite/utils/prerender-utils.ts +268 -0
- package/src/vite/utils/shared-utils.ts +283 -0
- package/CLAUDE.md +0 -43
- package/src/browser/lru-cache.ts +0 -69
- package/src/browser/request-controller.ts +0 -164
- package/src/browser/shallow.ts +0 -35
- package/src/cache/memory-store.ts +0 -253
- package/src/href.ts +0 -255
- package/src/server/route-manifest-cache.ts +0 -173
- package/src/vite/expose-handle-id.ts +0 -209
- package/src/vite/expose-loader-id.ts +0 -426
- package/src/vite/expose-location-state-id.ts +0 -177
- /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
package/src/ssr/index.tsx
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { NavigationStoreContext } from "../browser/react/context.js";
|
|
7
|
-
import type { NavigationStoreContextValue } from "../browser/react/context.js";
|
|
8
|
-
import type { HandleData } from "../browser/types.js";
|
|
2
|
+
import { createSsrRootComponent } from "./ssr-root.js";
|
|
3
|
+
import { injectRSCPayloadEager } from "./inject-rsc-eager.js";
|
|
4
|
+
import { runWithPreinitNonce } from "./preinit-client-references.js";
|
|
5
|
+
import { SHELL_CAPTURE_MAX_WAIT_MS } from "../rsc/shell-capture-constants.js";
|
|
9
6
|
import type { ErrorPhase } from "../types.js";
|
|
10
|
-
import type {
|
|
11
|
-
|
|
7
|
+
import type { HeadScriptsOption } from "../vite/plugin-types.js";
|
|
8
|
+
|
|
9
|
+
export { installClientReferencePreinit } from "./preinit-client-references.js";
|
|
12
10
|
|
|
13
11
|
/**
|
|
14
12
|
* Options for injectRSCPayload
|
|
@@ -25,10 +23,64 @@ export interface InjectRSCPayloadOptions {
|
|
|
25
23
|
*/
|
|
26
24
|
interface RenderToReadableStreamOptions {
|
|
27
25
|
bootstrapScriptContent?: string;
|
|
26
|
+
bootstrapModules?: string[];
|
|
28
27
|
nonce?: string;
|
|
29
28
|
formState?: unknown;
|
|
30
29
|
}
|
|
31
30
|
|
|
31
|
+
/**
|
|
32
|
+
* ReadableStream with the allReady promise added by react-dom/server.edge.
|
|
33
|
+
*/
|
|
34
|
+
interface ReactDOMReadableStream extends ReadableStream<Uint8Array> {
|
|
35
|
+
allReady: Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Options for prerender from react-dom/static.edge
|
|
40
|
+
*/
|
|
41
|
+
interface PrerenderOptions {
|
|
42
|
+
signal?: AbortSignal;
|
|
43
|
+
bootstrapScriptContent?: string;
|
|
44
|
+
bootstrapModules?: string[];
|
|
45
|
+
onError?: (error: unknown) => void;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Result of prerender from react-dom/static.edge. `postponed` is React's
|
|
50
|
+
* opaque resume state — non-null when the render was aborted with pending
|
|
51
|
+
* holes, null when the shell completed with nothing left to stream.
|
|
52
|
+
*/
|
|
53
|
+
interface PrerenderResult {
|
|
54
|
+
prelude: ReadableStream<Uint8Array>;
|
|
55
|
+
postponed: unknown;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* prerender from react-dom/static.edge
|
|
60
|
+
*/
|
|
61
|
+
type PrerenderFn = (
|
|
62
|
+
element: React.ReactNode,
|
|
63
|
+
options?: PrerenderOptions,
|
|
64
|
+
) => Promise<PrerenderResult>;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Options for resume from react-dom/server.edge
|
|
68
|
+
*/
|
|
69
|
+
interface ResumeOptions {
|
|
70
|
+
onError?: (error: unknown) => void;
|
|
71
|
+
nonce?: string;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* resume from react-dom/server.edge — continues a prerendered render, emitting
|
|
76
|
+
* only the postponed holes.
|
|
77
|
+
*/
|
|
78
|
+
type ResumeFn = (
|
|
79
|
+
element: React.ReactNode,
|
|
80
|
+
postponedState: unknown,
|
|
81
|
+
options?: ResumeOptions,
|
|
82
|
+
) => Promise<ReactDOMReadableStream>;
|
|
83
|
+
|
|
32
84
|
/**
|
|
33
85
|
* Options for the renderHTML function
|
|
34
86
|
*/
|
|
@@ -45,6 +97,31 @@ export interface SSRRenderOptions {
|
|
|
45
97
|
* Nonce for Content Security Policy (CSP)
|
|
46
98
|
*/
|
|
47
99
|
nonce?: string;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* SSR stream mode.
|
|
103
|
+
*
|
|
104
|
+
* - `"stream"` (default) — start flushing HTML immediately.
|
|
105
|
+
* - `"allReady"` — await `stream.allReady` before returning.
|
|
106
|
+
*/
|
|
107
|
+
streamMode?: import("../router/router-options.js").SSRStreamMode;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* The live request's query string (`?`-prefixed or empty). Seeds the SSR
|
|
111
|
+
* navigation store location so `useSearchParams` carries real values
|
|
112
|
+
* during document renders. Absent on the build-time prerender pass —
|
|
113
|
+
* build shells capture bare pathnames and serve search-less requests
|
|
114
|
+
* only (runtime captures own the search variants, seeded per key).
|
|
115
|
+
*/
|
|
116
|
+
search?: string;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* The live request's origin, seeding the SSR store location so
|
|
120
|
+
* origin-dependent markup (Link's data-external) agrees with the
|
|
121
|
+
* browser's window.location across hydration. Absent on the build-time
|
|
122
|
+
* prerender pass (host-agnostic bare captures).
|
|
123
|
+
*/
|
|
124
|
+
origin?: string;
|
|
48
125
|
}
|
|
49
126
|
|
|
50
127
|
/**
|
|
@@ -52,24 +129,26 @@ export interface SSRRenderOptions {
|
|
|
52
129
|
*/
|
|
53
130
|
export interface SSRDependencies<TEnv = unknown> {
|
|
54
131
|
/**
|
|
55
|
-
* createFromReadableStream from @
|
|
132
|
+
* createFromReadableStream from @rangojs/router/internal/deps/ssr
|
|
56
133
|
*/
|
|
57
|
-
createFromReadableStream: <T>(
|
|
134
|
+
createFromReadableStream: <T>(
|
|
135
|
+
stream: ReadableStream<Uint8Array>,
|
|
136
|
+
) => Promise<T>;
|
|
58
137
|
|
|
59
138
|
/**
|
|
60
139
|
* renderToReadableStream from react-dom/server.edge
|
|
61
140
|
*/
|
|
62
141
|
renderToReadableStream: (
|
|
63
142
|
element: React.ReactNode,
|
|
64
|
-
options?: RenderToReadableStreamOptions
|
|
65
|
-
) => Promise<
|
|
143
|
+
options?: RenderToReadableStreamOptions,
|
|
144
|
+
) => Promise<ReactDOMReadableStream>;
|
|
66
145
|
|
|
67
146
|
/**
|
|
68
|
-
* injectRSCPayload from
|
|
147
|
+
* injectRSCPayload from @rangojs/router/internal/deps/html-stream-server
|
|
69
148
|
*/
|
|
70
149
|
injectRSCPayload: (
|
|
71
150
|
rscStream: ReadableStream<Uint8Array>,
|
|
72
|
-
options?: InjectRSCPayloadOptions
|
|
151
|
+
options?: InjectRSCPayloadOptions,
|
|
73
152
|
) => TransformStream<Uint8Array, Uint8Array>;
|
|
74
153
|
|
|
75
154
|
/**
|
|
@@ -78,6 +157,29 @@ export interface SSRDependencies<TEnv = unknown> {
|
|
|
78
157
|
*/
|
|
79
158
|
loadBootstrapScriptContent: () => Promise<string>;
|
|
80
159
|
|
|
160
|
+
/**
|
|
161
|
+
* Document script strategy; the generated virtual SSR entry threads the
|
|
162
|
+
* `rango({ headScripts })` plugin option here (canonical docs on
|
|
163
|
+
* `RangoBaseOptions.headScripts` in vite/plugin-types.ts). The
|
|
164
|
+
* bootstrapModules conversion runs ONLY on an explicit `"preinit"`:
|
|
165
|
+
* undefined keeps the inline bootstrap verbatim, so a custom SSR entry that
|
|
166
|
+
* never installed the preinit hook cannot drift into the half-converted
|
|
167
|
+
* state on upgrade (the generated entry always passes an explicit value).
|
|
168
|
+
*/
|
|
169
|
+
headScripts?: HeadScriptsOption;
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* prerender from react-dom/static.edge. Optional; required only by
|
|
173
|
+
* {@link createShellCaptureHandler} for PPR shell capture.
|
|
174
|
+
*/
|
|
175
|
+
prerender?: PrerenderFn;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* resume from react-dom/server.edge. Optional; required only by
|
|
179
|
+
* {@link createShellResumeHandler} for resuming a postponed shell.
|
|
180
|
+
*/
|
|
181
|
+
resume?: ResumeFn;
|
|
182
|
+
|
|
81
183
|
/**
|
|
82
184
|
* Optional callback invoked when an error occurs during SSR rendering.
|
|
83
185
|
*
|
|
@@ -98,73 +200,255 @@ export interface SSRDependencies<TEnv = unknown> {
|
|
|
98
200
|
}
|
|
99
201
|
|
|
100
202
|
/**
|
|
101
|
-
*
|
|
203
|
+
* Fixed number of macrotask hops between `quiesce` resolving and the abort. These
|
|
204
|
+
* give React's fizz worker turns to flush the settled shell into the prelude and
|
|
205
|
+
* mark still-pending boundaries as POSTPONED (rather than errored) before
|
|
206
|
+
* controller.abort() lands. Not a wall-clock wait.
|
|
207
|
+
*
|
|
208
|
+
* Why 16 and not the original 2: under the REPLAY-ONLY capture model
|
|
209
|
+
* (docs/design/ppr-shell-resume.md), the capture Flight render serializes ring-3
|
|
210
|
+
* cached segments that are ALREADY serialized, so it emits the whole shell payload
|
|
211
|
+
* in the first tick and the gate declares quiesce almost immediately (~a few ms).
|
|
212
|
+
* On the old fresh-execution path the Flight dribbled out as handlers ran, so
|
|
213
|
+
* Flight-quiet effectively meant "the shell has rendered" and 2 hops sufficed.
|
|
214
|
+
*
|
|
215
|
+
* Hops alone are NOT render-readiness: fizz cannot emit even <html> until the
|
|
216
|
+
* payload root settles, which waits on every referenced client-module LOAD —
|
|
217
|
+
* real module-runner I/O in dev (100ms+ cold), which no fixed count of near-
|
|
218
|
+
* zero-cost task hops can buy. captureShellHTML therefore awaits the payload-
|
|
219
|
+
* settled signal (SsrRootOptions.onPayloadSettled, deadline-bounded) between
|
|
220
|
+
* quiesce and these hops; the hops then only flush the settled tree and mark
|
|
221
|
+
* pending boundaries POSTPONED. Still task-based (masked loaders never emit,
|
|
222
|
+
* so more hops never lets a hole settle). Bounded by maxWaitMs end to end.
|
|
102
223
|
*/
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
224
|
+
const POST_QUIESCE_TASK_HOPS = 16;
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Route an SSR error through the deps.onError notification callback with the
|
|
228
|
+
* "rendering" phase. Swallows callback failures so a broken reporter never
|
|
229
|
+
* masks the original error. Shared by renderHTML, capture, and resume so the
|
|
230
|
+
* onError contract is identical across all three handlers.
|
|
231
|
+
*/
|
|
232
|
+
function reportRenderError(
|
|
233
|
+
onError: SSRDependencies["onError"],
|
|
234
|
+
error: unknown,
|
|
235
|
+
): void {
|
|
236
|
+
if (onError) {
|
|
237
|
+
const errorObj = error instanceof Error ? error : new Error(String(error));
|
|
238
|
+
try {
|
|
239
|
+
onError(errorObj, { phase: "rendering" });
|
|
240
|
+
} catch (callbackError) {
|
|
241
|
+
console.error("[SSRHandler.onError] Callback error:", callbackError);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Yield one macrotask. Used by capture to let React's fizz worker flush the
|
|
248
|
+
* shell and mark still-pending boundaries as postponed before the abort.
|
|
249
|
+
*/
|
|
250
|
+
function macrotask(): Promise<void> {
|
|
251
|
+
return new Promise((resolve) => setTimeout(resolve, 0));
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* A timeout promise paired with a cancel() so the pending timer is cleared once
|
|
256
|
+
* the race is decided — otherwise the maxWait timer keeps the event loop alive
|
|
257
|
+
* for the full duration even after `quiesce` won.
|
|
258
|
+
*/
|
|
259
|
+
function createCancelableTimeout(ms: number): {
|
|
260
|
+
promise: Promise<void>;
|
|
261
|
+
cancel: () => void;
|
|
262
|
+
} {
|
|
263
|
+
let id: ReturnType<typeof setTimeout> | undefined;
|
|
264
|
+
const promise = new Promise<void>((resolve) => {
|
|
265
|
+
id = setTimeout(resolve, ms);
|
|
266
|
+
});
|
|
267
|
+
return { promise, cancel: () => clearTimeout(id) };
|
|
112
268
|
}
|
|
113
269
|
|
|
114
270
|
/**
|
|
115
|
-
*
|
|
116
|
-
*
|
|
271
|
+
* True when a debugger is attached outside a production build: a breakpoint
|
|
272
|
+
* pauses script execution but not wall-clock, so the capture deadline would
|
|
273
|
+
* expire mid-inspection and push the key into refusal/backoff while debugging.
|
|
274
|
+
* Next.js precedent (packages/next/src/export/worker.ts): its static-page
|
|
275
|
+
* timeout race is disabled when NODE_OPTIONS contains --inspect. The gate is
|
|
276
|
+
* the bare `process.env.NODE_ENV !== "production"` token — the build define
|
|
277
|
+
* folds exactly that token to a literal (same dev signal as shell-capture.ts's
|
|
278
|
+
* isDevMode), and it covers dev servers that never set NODE_ENV, the common
|
|
279
|
+
* debug case. A production worker launched with --inspect in NODE_OPTIONS
|
|
280
|
+
* keeps the capture's safety bound unconditionally. Every probe is guarded:
|
|
281
|
+
* `process` reads are optional-chained and the node:inspector import is
|
|
282
|
+
* try/caught, so non-Node runtimes (workerd) resolve to false instead of
|
|
283
|
+
* breaking.
|
|
117
284
|
*/
|
|
118
|
-
async function
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
285
|
+
export async function isDebuggerAttached(): Promise<boolean> {
|
|
286
|
+
if (process.env.NODE_ENV === "production") return false;
|
|
287
|
+
try {
|
|
288
|
+
// Substring match also catches --inspect-brk / --inspect=PORT.
|
|
289
|
+
if (globalThis.process?.env?.NODE_OPTIONS?.includes("--inspect")) {
|
|
290
|
+
return true;
|
|
291
|
+
}
|
|
292
|
+
if (globalThis.process?.execArgv?.some((a) => a.startsWith("--inspect"))) {
|
|
293
|
+
return true;
|
|
294
|
+
}
|
|
295
|
+
const inspector = await import("node:inspector");
|
|
296
|
+
return inspector.url() !== undefined;
|
|
297
|
+
} catch {
|
|
298
|
+
return false;
|
|
124
299
|
}
|
|
125
|
-
return lastData;
|
|
126
300
|
}
|
|
127
301
|
|
|
128
302
|
/**
|
|
129
|
-
*
|
|
130
|
-
*
|
|
303
|
+
* Drain a ReadableStream fully into a single Uint8Array. Capture buffers the
|
|
304
|
+
* whole prelude so it can be stored and later prepended byte-for-byte.
|
|
131
305
|
*/
|
|
132
|
-
function
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
306
|
+
async function readStreamToUint8Array(
|
|
307
|
+
stream: ReadableStream<Uint8Array>,
|
|
308
|
+
): Promise<Uint8Array> {
|
|
309
|
+
const reader = stream.getReader();
|
|
310
|
+
const chunks: Uint8Array[] = [];
|
|
311
|
+
let total = 0;
|
|
312
|
+
try {
|
|
313
|
+
while (true) {
|
|
314
|
+
const { done, value } = await reader.read();
|
|
315
|
+
if (done) break;
|
|
316
|
+
chunks.push(value);
|
|
317
|
+
total += value.length;
|
|
318
|
+
}
|
|
319
|
+
} catch (error) {
|
|
320
|
+
// Mid-read abort path (documented): the prelude stream errors with our
|
|
321
|
+
// abort reason while we are still reading it. Cancel the source before
|
|
322
|
+
// rethrowing so it is not left uncancelled; releaseLock always runs in
|
|
323
|
+
// finally. Mirrors src/rsc/rsc-rendering.ts's serve-side reader cleanup.
|
|
324
|
+
reader.cancel(error).catch(() => {});
|
|
325
|
+
throw error;
|
|
326
|
+
} finally {
|
|
327
|
+
reader.releaseLock();
|
|
328
|
+
}
|
|
329
|
+
const out = new Uint8Array(total);
|
|
330
|
+
let offset = 0;
|
|
331
|
+
for (const chunk of chunks) {
|
|
332
|
+
out.set(chunk, offset);
|
|
333
|
+
offset += chunk.length;
|
|
334
|
+
}
|
|
335
|
+
return out;
|
|
336
|
+
}
|
|
141
337
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
throw new Error("Navigation not supported during SSR");
|
|
159
|
-
},
|
|
160
|
-
abortNavigation: () => {},
|
|
161
|
-
startAction: () => {
|
|
162
|
-
throw new Error("Actions not supported during SSR");
|
|
338
|
+
/**
|
|
339
|
+
* A minimal HTML stream for the resume DATA variant: one empty chunk, then
|
|
340
|
+
* close.
|
|
341
|
+
*
|
|
342
|
+
* injectRSCPayload only resolves its internal flight-data promise (and thus
|
|
343
|
+
* only writes the Flight payload <script> pushes) from inside transform()'s
|
|
344
|
+
* scheduled callback. A stream that closes without ever emitting a chunk never
|
|
345
|
+
* runs transform, so its flush() awaits a promise that is never resolved and
|
|
346
|
+
* the output deadlocks. Emitting a single empty chunk runs transform once,
|
|
347
|
+
* which is enough for the payload to be written and the trailer appended.
|
|
348
|
+
*/
|
|
349
|
+
function createDataVariantHtmlStream(): ReadableStream<Uint8Array> {
|
|
350
|
+
return new ReadableStream({
|
|
351
|
+
start(controller) {
|
|
352
|
+
controller.enqueue(new Uint8Array(0));
|
|
353
|
+
controller.close();
|
|
163
354
|
},
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Options for the captureShellHTML function returned by
|
|
360
|
+
* {@link createShellCaptureHandler}.
|
|
361
|
+
*/
|
|
362
|
+
interface ShellCaptureOptions {
|
|
363
|
+
/** Caller-provided promise that resolves once the cached content settled. */
|
|
364
|
+
quiesce: Promise<void>;
|
|
365
|
+
/** Upper bound on how long to wait for `quiesce`. Default SHELL_CAPTURE_MAX_WAIT_MS. */
|
|
366
|
+
maxWaitMs?: number;
|
|
367
|
+
/**
|
|
368
|
+
* The SHELL KEY's search string (`?`-prefixed, sorted, cache.searchParams
|
|
369
|
+
* filter applied — shellSearchSeed in rsc/shell-serve.ts), seeding the SSR
|
|
370
|
+
* store so static-part `useSearchParams` reads bake markup consistent with
|
|
371
|
+
* the shell's own key. MUST equal the resume pass's seed for the same key.
|
|
372
|
+
*/
|
|
373
|
+
search?: string;
|
|
374
|
+
/**
|
|
375
|
+
* The capture request's origin. Shell keys are host-scoped, so the resume
|
|
376
|
+
* pass's request agrees modulo protocol drift; seeding it keeps
|
|
377
|
+
* origin-dependent static markup (Link's data-external) identical across
|
|
378
|
+
* capture, resume, and browser hydration.
|
|
379
|
+
*/
|
|
380
|
+
origin?: string;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Result of a successful shell capture. `prelude` is the raw prelude bytes;
|
|
385
|
+
* `postponed` is React's resume state serialized to JSON, or null when the
|
|
386
|
+
* shell completed with no holes (the DATA variant).
|
|
387
|
+
*/
|
|
388
|
+
interface ShellCaptureResult {
|
|
389
|
+
prelude: Uint8Array;
|
|
390
|
+
postponed: string | null;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* Options for the resumeShellHTML function returned by
|
|
395
|
+
* {@link createShellResumeHandler}.
|
|
396
|
+
*/
|
|
397
|
+
interface ShellResumeOptions {
|
|
398
|
+
/** JSON from capture; null selects the DATA variant (no fizz). */
|
|
399
|
+
postponed: string | null;
|
|
400
|
+
/** Nonce for CSP. */
|
|
401
|
+
nonce?: string;
|
|
402
|
+
/**
|
|
403
|
+
* The SHELL KEY's search string — same derivation as the capture pass
|
|
404
|
+
* (shellSearchSeed). A HIT shares the capture's key, so seeding the same
|
|
405
|
+
* string keeps the resume tree identical to the captured tree above the
|
|
406
|
+
* postponed holes.
|
|
407
|
+
*/
|
|
408
|
+
search?: string;
|
|
409
|
+
/** The HIT request's origin — same host as the capture's (key-scoped). */
|
|
410
|
+
origin?: string;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* The exact shape plugin-rsc's loadBootstrapScriptContent returns in both dev
|
|
415
|
+
* and build: a single dynamic import of the browser entry, nothing else.
|
|
416
|
+
* Escapes/other statements never appear in that generated content; anything
|
|
417
|
+
* that doesn't match falls back to inline bootstrapScriptContent unchanged.
|
|
418
|
+
*/
|
|
419
|
+
const BOOTSTRAP_IMPORT_ONLY_RE =
|
|
420
|
+
/^\s*import\(\s*(["'])([^"'\\]+)\1\s*\)\s*;?\s*$/;
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* Prefer bootstrapModules over the inline import() bootstrap. When the content
|
|
424
|
+
* is exactly `import("<entry-url>")`, hand Fizz the URL instead: React then
|
|
425
|
+
* emits a `<link rel="modulepreload" fetchpriority="low">` hint in the head
|
|
426
|
+
* plus the executing `<script type="module" src async>` at end of shell — the
|
|
427
|
+
* entry fetch starts with the first flushed bytes instead of when the parser
|
|
428
|
+
* reaches an opaque inline script that only reveals the URL once executed.
|
|
429
|
+
* Fizz stamps the request nonce on both tags (the inline form needed that
|
|
430
|
+
* too), and under PPR both land in the stored prelude; on resume React has
|
|
431
|
+
* already cleared the bootstrap fields from the postponed state, so nothing
|
|
432
|
+
* re-emits.
|
|
433
|
+
*/
|
|
434
|
+
function resolveBootstrapOptions(
|
|
435
|
+
content: string,
|
|
436
|
+
headScripts: SSRDependencies["headScripts"],
|
|
437
|
+
): Pick<
|
|
438
|
+
RenderToReadableStreamOptions,
|
|
439
|
+
"bootstrapScriptContent" | "bootstrapModules"
|
|
440
|
+
> {
|
|
441
|
+
// Explicit opt-in only: undefined (a custom SSR entry that predates the
|
|
442
|
+
// option, which also never installed the preinit hook) keeps the inline
|
|
443
|
+
// bootstrap byte-for-byte — converting by default would break CSPs that
|
|
444
|
+
// allowlist the known inline import() via a script hash.
|
|
445
|
+
if (headScripts !== "preinit") {
|
|
446
|
+
return { bootstrapScriptContent: content };
|
|
447
|
+
}
|
|
448
|
+
const match = BOOTSTRAP_IMPORT_ONLY_RE.exec(content);
|
|
449
|
+
return match
|
|
450
|
+
? { bootstrapModules: [match[2]!] }
|
|
451
|
+
: { bootstrapScriptContent: content };
|
|
168
452
|
}
|
|
169
453
|
|
|
170
454
|
/**
|
|
@@ -172,10 +456,10 @@ function createSsrEventController(pathname: string): EventController {
|
|
|
172
456
|
*
|
|
173
457
|
* @example
|
|
174
458
|
* ```tsx
|
|
175
|
-
* import { createSSRHandler } from "
|
|
176
|
-
* import { createFromReadableStream } from "@
|
|
459
|
+
* import { createSSRHandler } from "@rangojs/router/ssr";
|
|
460
|
+
* import { createFromReadableStream } from "@rangojs/router/internal/deps/ssr";
|
|
177
461
|
* import { renderToReadableStream } from "react-dom/server.edge";
|
|
178
|
-
* import { injectRSCPayload } from "
|
|
462
|
+
* import { injectRSCPayload } from "@rangojs/router/internal/deps/html-stream-server";
|
|
179
463
|
*
|
|
180
464
|
* export const renderHTML = createSSRHandler({
|
|
181
465
|
* createFromReadableStream,
|
|
@@ -203,9 +487,9 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
|
|
|
203
487
|
*/
|
|
204
488
|
return async function renderHTML(
|
|
205
489
|
rscStream: ReadableStream<Uint8Array>,
|
|
206
|
-
options?: SSRRenderOptions
|
|
490
|
+
options?: SSRRenderOptions,
|
|
207
491
|
): Promise<ReadableStream<Uint8Array>> {
|
|
208
|
-
const { nonce, formState } = options ?? {};
|
|
492
|
+
const { nonce, formState, streamMode, search, origin } = options ?? {};
|
|
209
493
|
|
|
210
494
|
try {
|
|
211
495
|
// Tee the stream:
|
|
@@ -213,83 +497,375 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
|
|
|
213
497
|
// - rscStream2: For browser hydration (inject as __FLIGHT_DATA__)
|
|
214
498
|
const [rscStream1, rscStream2] = rscStream.tee();
|
|
215
499
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
//
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
const themeConfig = resolved.metadata?.themeConfig ?? null;
|
|
229
|
-
initThemeConfigSync(themeConfig);
|
|
230
|
-
|
|
231
|
-
// Await handles and initialize state before children render
|
|
232
|
-
// The handles property is an async generator that yields on each push
|
|
233
|
-
// Memoize the promise since async generators can only be iterated once
|
|
234
|
-
if (resolved.metadata?.handles) {
|
|
235
|
-
handlesPromise ??= consumeAsyncGenerator(resolved.metadata.handles);
|
|
236
|
-
const handleData = React.use(handlesPromise);
|
|
237
|
-
initHandleDataSync(handleData, resolved.metadata.matched);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// Create SSR context with correct pathname for useNavigation
|
|
241
|
-
ssrContextValue ??= {
|
|
242
|
-
store: null as any,
|
|
243
|
-
eventController: createSsrEventController(resolved.metadata?.pathname ?? "/"),
|
|
244
|
-
navigate: async () => {},
|
|
245
|
-
refresh: async () => {},
|
|
246
|
-
};
|
|
247
|
-
|
|
248
|
-
// Build content tree with all necessary providers
|
|
249
|
-
// Order must match NavigationProvider: NavigationStoreContext > ThemeProvider > content
|
|
250
|
-
let content: React.ReactNode = resolved.root;
|
|
251
|
-
|
|
252
|
-
// Wrap content with ThemeProvider if theme is enabled
|
|
253
|
-
if (themeConfig) {
|
|
254
|
-
content = (
|
|
255
|
-
<ThemeProvider config={themeConfig} initialTheme={resolved.metadata?.initialTheme}>
|
|
256
|
-
{content}
|
|
257
|
-
</ThemeProvider>
|
|
258
|
-
);
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
// Wrap with NavigationStoreContext for useNavigation hook
|
|
262
|
-
return (
|
|
263
|
-
<NavigationStoreContext.Provider value={ssrContextValue}>
|
|
264
|
-
{content}
|
|
265
|
-
</NavigationStoreContext.Provider>
|
|
266
|
-
);
|
|
267
|
-
}
|
|
500
|
+
const SsrRoot = createSsrRootComponent({
|
|
501
|
+
createFromReadableStream,
|
|
502
|
+
rscStream: rscStream1,
|
|
503
|
+
nonce,
|
|
504
|
+
// Live fizz seeds the request's RAW search. The shell capture pass
|
|
505
|
+
// below and its resume twin seed the SHELL KEY's search instead
|
|
506
|
+
// (sorted, cache.searchParams filter applied — shellSearchSeed):
|
|
507
|
+
// same key => same seed, so the resume tree matches the captured
|
|
508
|
+
// tree while static-part search reads render what the key names.
|
|
509
|
+
search,
|
|
510
|
+
origin,
|
|
511
|
+
});
|
|
268
512
|
|
|
269
513
|
// Get bootstrap script content
|
|
270
514
|
const bootstrapScriptContent = await loadBootstrapScriptContent();
|
|
271
515
|
|
|
272
516
|
// Render React tree to HTML stream
|
|
273
517
|
// Pass formState for useActionState progressive enhancement if provided
|
|
274
|
-
// Pass nonce for CSP if provided
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
518
|
+
// Pass nonce for CSP if provided. runWithPreinitNonce makes the same
|
|
519
|
+
// nonce visible to the client-reference preinit hook (ALS — the hook is
|
|
520
|
+
// isolate-global, the nonce per request).
|
|
521
|
+
const htmlStream = await runWithPreinitNonce(nonce, () =>
|
|
522
|
+
renderToReadableStream(<SsrRoot />, {
|
|
523
|
+
...resolveBootstrapOptions(bootstrapScriptContent, deps.headScripts),
|
|
524
|
+
formState,
|
|
525
|
+
nonce,
|
|
526
|
+
}),
|
|
527
|
+
);
|
|
528
|
+
|
|
529
|
+
// Wait for all Suspense boundaries to resolve when streamMode is "allReady".
|
|
530
|
+
// This buffers the entire HTML before flushing — used for bots that
|
|
531
|
+
// cannot process streamed HTML.
|
|
532
|
+
if (streamMode === "allReady") {
|
|
533
|
+
await htmlStream.allReady;
|
|
534
|
+
}
|
|
280
535
|
|
|
281
536
|
// Inject RSC payload into HTML as <script nonce="...">__FLIGHT_DATA__</script>
|
|
282
537
|
return htmlStream.pipeThrough(injectRSCPayload(rscStream2, { nonce }));
|
|
283
538
|
} catch (error) {
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
539
|
+
reportRenderError(onError, error);
|
|
540
|
+
throw error;
|
|
541
|
+
}
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
/**
|
|
546
|
+
* Create the PPR shell capture handler.
|
|
547
|
+
*
|
|
548
|
+
* captureShellHTML prerenders the shell over the (cached, loader-masked) Flight
|
|
549
|
+
* stream, aborts once the shell settles, and returns the prelude bytes plus the
|
|
550
|
+
* postponed resume state for storage. The stored pair is later served by
|
|
551
|
+
* {@link createShellResumeHandler}. See docs/design/ppr-shell-resume.md.
|
|
552
|
+
*
|
|
553
|
+
* Throws at creation if `deps.prerender` is missing — capture cannot run
|
|
554
|
+
* without react-dom/static.edge's prerender.
|
|
555
|
+
*/
|
|
556
|
+
export function createShellCaptureHandler<TEnv = unknown>(
|
|
557
|
+
deps: SSRDependencies<TEnv>,
|
|
558
|
+
) {
|
|
559
|
+
const { createFromReadableStream, loadBootstrapScriptContent, prerender } =
|
|
560
|
+
deps;
|
|
561
|
+
const onError = deps.onError;
|
|
562
|
+
|
|
563
|
+
if (!prerender) {
|
|
564
|
+
throw new Error(
|
|
565
|
+
"[createShellCaptureHandler] Missing `prerender` dependency (react-dom/static.edge). " +
|
|
566
|
+
"PPR shell capture requires the prerender export; wire it in the SSR virtual entry.",
|
|
567
|
+
);
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
/**
|
|
571
|
+
* Prerender the shell and return the stored artifacts, or null when the
|
|
572
|
+
* shell degraded (root postpone / hung handles) and must not be cached.
|
|
573
|
+
*
|
|
574
|
+
* @param rscStream - Flight stream to render the shell over. Not teed and not
|
|
575
|
+
* piped through injectRSCPayload: the hydration payload is produced fresh
|
|
576
|
+
* per request by the resume/serve pass.
|
|
577
|
+
* @param opts - quiesce signal and maxWait guard.
|
|
578
|
+
*/
|
|
579
|
+
return async function captureShellHTML(
|
|
580
|
+
rscStream: ReadableStream<Uint8Array>,
|
|
581
|
+
opts: ShellCaptureOptions,
|
|
582
|
+
): Promise<ShellCaptureResult | null> {
|
|
583
|
+
const maxWaitMs = opts.maxWaitMs ?? SHELL_CAPTURE_MAX_WAIT_MS;
|
|
584
|
+
|
|
585
|
+
// Arm the maxWaitMs deadline BEFORE the first await so it bounds the ENTIRE
|
|
586
|
+
// capture, the bootstrap-script load included. loadBootstrapScriptContent()
|
|
587
|
+
// used to run before the timer, so a hung/slow bootstrap load hung
|
|
588
|
+
// captureShellHTML with no upper bound and held the background capture task
|
|
589
|
+
// open. One deadline, shared by the bootstrap race below and the quiesce
|
|
590
|
+
// race, keeps the whole path "bounded by maxWaitMs like every quiesce input".
|
|
591
|
+
// Debugger attached (non-production, see isDebuggerAttached): a paused process
|
|
592
|
+
// must not burn the budget, so the deadline becomes a never-resolving
|
|
593
|
+
// promise (the Next.js approach) — no timer, so it cannot hold the event
|
|
594
|
+
// loop open either.
|
|
595
|
+
const deadline = (await isDebuggerAttached())
|
|
596
|
+
? { promise: new Promise<void>(() => {}), cancel: () => {} }
|
|
597
|
+
: createCancelableTimeout(maxWaitMs);
|
|
598
|
+
try {
|
|
599
|
+
// No nonce (nonce'd requests never reach capture); no formState.
|
|
600
|
+
// payloadSettled: fires when the Flight payload root settles — i.e.
|
|
601
|
+
// every client-module load the payload references completed and fizz
|
|
602
|
+
// can actually emit the tree. The abort below gates on it (bounded by
|
|
603
|
+
// the same deadline): Flight byte-quiet alone is NOT render-readiness.
|
|
604
|
+
let settlePayload!: () => void;
|
|
605
|
+
const payloadSettled = new Promise<void>((resolve) => {
|
|
606
|
+
settlePayload = resolve;
|
|
607
|
+
});
|
|
608
|
+
const SsrRoot = createSsrRootComponent({
|
|
609
|
+
createFromReadableStream,
|
|
610
|
+
rscStream,
|
|
611
|
+
onPayloadSettled: settlePayload,
|
|
612
|
+
// The shell key's own search: static-part search reads render what
|
|
613
|
+
// the key names, and the resume pass seeds the identical string.
|
|
614
|
+
search: opts.search,
|
|
615
|
+
origin: opts.origin,
|
|
616
|
+
});
|
|
617
|
+
|
|
618
|
+
// Bootstrap load raced against the deadline. A load that never resolves
|
|
619
|
+
// within maxWaitMs is the same bounded no-shell degrade as a shell that
|
|
620
|
+
// never goes quiet: return null, do not hang. A load that REJECTS is a
|
|
621
|
+
// genuine error and still propagates (it is not the deadline). `null` is
|
|
622
|
+
// the deadline sentinel — disjoint from the load's `Promise<string>`, so
|
|
623
|
+
// the race narrows to `string | null` with no wrapper. The no-op catch
|
|
624
|
+
// keeps a late rejection off the unhandledRejection path when the deadline
|
|
625
|
+
// already won; a rejection that lands first still propagates out.
|
|
626
|
+
const load = loadBootstrapScriptContent();
|
|
627
|
+
load.catch(() => {});
|
|
628
|
+
const bootstrapScriptContent = await Promise.race([
|
|
629
|
+
load,
|
|
630
|
+
deadline.promise.then(() => null),
|
|
631
|
+
]);
|
|
632
|
+
if (bootstrapScriptContent === null) {
|
|
633
|
+
return null;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
// Start prerender first, then run the abort schedule concurrently. When
|
|
637
|
+
// holes are pending, prerender's promise settles only after abort(); when
|
|
638
|
+
// the shell completes with no holes it settles on its own and the later
|
|
639
|
+
// abort() is a harmless no-op (the DATA variant).
|
|
640
|
+
const controller = new AbortController();
|
|
641
|
+
// Private reason object: the deliberate abort is identified by object
|
|
642
|
+
// IDENTITY in both the onError below and the post-await catch. React
|
|
643
|
+
// propagates this EXACT object to onError for every still-pending boundary
|
|
644
|
+
// (verified identity-preserving), and rejects/errors the prelude with it.
|
|
645
|
+
const abortReason = { rangoShellCaptureAbort: true };
|
|
646
|
+
const prerenderPromise = prerender(<SsrRoot />, {
|
|
647
|
+
signal: controller.signal,
|
|
648
|
+
...resolveBootstrapOptions(bootstrapScriptContent, deps.headScripts),
|
|
649
|
+
// Abort is how capture WORKS: once the shell is quiet we abort() to
|
|
650
|
+
// freeze the prelude and let the still-pending holes postpone. React
|
|
651
|
+
// reports the abort reason for each pending boundary through onError.
|
|
652
|
+
// Without an onError here React falls back to console.error, so every
|
|
653
|
+
// capture that still has a live hole at abort time (the normal case)
|
|
654
|
+
// dumps a stack once per pending boundary. That is EXPECTED degradation,
|
|
655
|
+
// so swallow OUR abort — matched by IDENTITY (error === abortReason).
|
|
656
|
+
// Discriminate by identity, NOT error.name: capture aborts before
|
|
657
|
+
// awaiting, so signal.aborted is unconditionally true and a name check
|
|
658
|
+
// swallowed genuine AbortError-named throws (a component's own
|
|
659
|
+
// fetch/AbortController cancellation) as if they were our abort. Genuine
|
|
660
|
+
// render errors are NOT our sentinel and still surface through
|
|
661
|
+
// deps.onError, the same channel renderHTML uses. See
|
|
662
|
+
// docs/design/ppr-shell-resume.md.
|
|
663
|
+
onError: (error: unknown) => {
|
|
664
|
+
if (error === abortReason) {
|
|
665
|
+
return;
|
|
666
|
+
}
|
|
667
|
+
reportRenderError(onError, error);
|
|
668
|
+
},
|
|
669
|
+
});
|
|
670
|
+
// Pre-attach a no-op catch: the real await sits AFTER quiesce + the
|
|
671
|
+
// post-quiesce hops, so an early prerender rejection (e.g. a bake-lane
|
|
672
|
+
// loader tripping the identity guard within milliseconds) would otherwise
|
|
673
|
+
// spend several turns handler-less and crash the worker as an unhandled
|
|
674
|
+
// rejection. The actual rejection handling still happens at the await
|
|
675
|
+
// below; this parallel handler only keeps the gap crash-free.
|
|
676
|
+
prerenderPromise.catch(() => {});
|
|
677
|
+
|
|
678
|
+
// Wait for the caller's quiesce signal, bounded by the SAME deadline. By
|
|
679
|
+
// the time it resolves the Flight input is byte-quiet and FROZEN by the
|
|
680
|
+
// capture gate (shell-capture.ts gateFlightForCapture), so there is no
|
|
681
|
+
// wall-clock debounce here — maxWaitMs is only the pathological guard for a
|
|
682
|
+
// shell that never goes quiet (a root postpone / hung handle).
|
|
683
|
+
await Promise.race([opts.quiesce, deadline.promise]);
|
|
684
|
+
// Then wait for fizz RENDER-READINESS, bounded by the same deadline:
|
|
685
|
+
// the payload root settles only after every client-module load the
|
|
686
|
+
// payload references completed (real module-runner I/O in dev; 100ms+
|
|
687
|
+
// on a cold graph). Flight byte-quiet does NOT imply this — a fully
|
|
688
|
+
// REPLAYED (prerendered) route's Flight stream finishes in ~1-3ms and
|
|
689
|
+
// an abort taken on quiet-plus-task-hops alone landed BEFORE fizz could
|
|
690
|
+
// emit <html>, freezing a zero-byte prelude: the eternal-MISS shape
|
|
691
|
+
// this route class showed on every cold graph (dev cold boots, GH
|
|
692
|
+
// runners) while ordinary routes — whose live handler execution keeps
|
|
693
|
+
// Flight noisy long enough — never hit it. Masked-loader holes do not
|
|
694
|
+
// block payload settlement (they postpone below the root), so this
|
|
695
|
+
// await costs a genuinely hole-y shell nothing; a payload that NEVER
|
|
696
|
+
// settles (hung handles) degrades at the deadline exactly as before.
|
|
697
|
+
// A prerender that SETTLES first (early success or a hard rejection)
|
|
698
|
+
// ends the wait immediately — fizz is already done either way.
|
|
699
|
+
const prerenderSettled = prerenderPromise.then(
|
|
700
|
+
() => {},
|
|
701
|
+
() => {},
|
|
702
|
+
);
|
|
703
|
+
await Promise.race([payloadSettled, prerenderSettled, deadline.promise]);
|
|
704
|
+
// Fixed task hops before the abort: give React's fizz worker turns to flush
|
|
705
|
+
// the now-complete shell and mark the still-pending boundaries as POSTPONED
|
|
706
|
+
// rather than errored. Deterministic (the byte set is already frozen and
|
|
707
|
+
// the payload is settled), so a fixed count of turns suffices — no
|
|
708
|
+
// wall-clock. Ready-but-queued fizz render work (however large — a multi-MB
|
|
709
|
+
// outlined boundary) can never lose this race: tracked-postpones pings run
|
|
710
|
+
// on scheduleMicrotask, so every runnable task drains before the FIRST
|
|
711
|
+
// setTimeout hop fires; only tasks parked on genuinely pending promises
|
|
712
|
+
// (masked loaders, real per-request I/O) remain, and those are exactly the
|
|
713
|
+
// holes that must postpone (issue #702).
|
|
714
|
+
for (let i = 0; i < POST_QUIESCE_TASK_HOPS; i++) {
|
|
715
|
+
await macrotask();
|
|
716
|
+
}
|
|
717
|
+
controller.abort(abortReason);
|
|
718
|
+
|
|
719
|
+
// A hard prerender rejection (fatal shell error) propagates. Expected
|
|
720
|
+
// degradation surfaces three ways and all return null: a trivial prelude
|
|
721
|
+
// (sanity gate below), the prerender REJECTING with our abort reason, or
|
|
722
|
+
// the prelude STREAM erroring with our abort reason mid-read — both abort
|
|
723
|
+
// shapes happen when our own abort lands before the shell completed (seen
|
|
724
|
+
// on dev cold paths, where module transform / first-render latency
|
|
725
|
+
// outlasts flight quiesce; a later request re-captures against warm
|
|
726
|
+
// modules and succeeds).
|
|
727
|
+
let prelude: Uint8Array;
|
|
728
|
+
let postponed: unknown;
|
|
729
|
+
try {
|
|
730
|
+
const result = await prerenderPromise;
|
|
731
|
+
prelude = await readStreamToUint8Array(result.prelude);
|
|
732
|
+
postponed = result.postponed;
|
|
733
|
+
} catch (error) {
|
|
734
|
+
// Identity match: swallow ONLY our own deliberate abort
|
|
735
|
+
// (error === abortReason). Not error.name — capture aborts before this
|
|
736
|
+
// await, so signal.aborted is always true, and a name check let a
|
|
737
|
+
// genuine AbortError-named throw masquerade as our abort and degrade
|
|
738
|
+
// into a retryable no-shell, hiding real failures from reportCacheError.
|
|
739
|
+
if (error === abortReason) {
|
|
740
|
+
return null;
|
|
291
741
|
}
|
|
742
|
+
throw error;
|
|
292
743
|
}
|
|
744
|
+
|
|
745
|
+
// Sanity gate: a prelude with no `<body` is the no-shell failure mode.
|
|
746
|
+
// Return null and store nothing; the request falls back to axis 1 and a
|
|
747
|
+
// later request re-captures. The dominant real-world cause is a loader
|
|
748
|
+
// route WITHOUT a route-level loading() boundary: renderSegments' loading-
|
|
749
|
+
// less branch awaits loader data at TREE-BUILD, so the masked loader pins
|
|
750
|
+
// the whole tree above <body> (root postpone). Root-postponing layouts and
|
|
751
|
+
// hung handles degrade the same way. shell-capture.ts logs a once-per-key
|
|
752
|
+
// warning so the eternal-MISS shape is diagnosable.
|
|
753
|
+
if (!new TextDecoder().decode(prelude).includes("<body")) {
|
|
754
|
+
return null;
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
return {
|
|
758
|
+
prelude,
|
|
759
|
+
postponed: postponed == null ? null : JSON.stringify(postponed),
|
|
760
|
+
};
|
|
761
|
+
} finally {
|
|
762
|
+
deadline.cancel();
|
|
763
|
+
}
|
|
764
|
+
};
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
/**
|
|
768
|
+
* Create the PPR shell resume handler.
|
|
769
|
+
*
|
|
770
|
+
* resumeShellHTML produces the per-request live portion of the document: for a
|
|
771
|
+
* postponed shell it resumes fizz over a fresh SsrRoot to emit only the holes;
|
|
772
|
+
* for the DATA variant it emits only the fresh Flight payload scripts. The
|
|
773
|
+
* caller (shell-cache middleware) prepends the stored prelude bytes to form the
|
|
774
|
+
* composite response. See docs/design/ppr-shell-resume.md.
|
|
775
|
+
*/
|
|
776
|
+
export function createShellResumeHandler<TEnv = unknown>(
|
|
777
|
+
deps: SSRDependencies<TEnv>,
|
|
778
|
+
) {
|
|
779
|
+
const { createFromReadableStream, resume, onError } = deps;
|
|
780
|
+
|
|
781
|
+
/**
|
|
782
|
+
* @param rscStream - Fresh full Flight stream for this request.
|
|
783
|
+
* @param opts - postponed state (null = DATA variant) and optional nonce.
|
|
784
|
+
*/
|
|
785
|
+
return async function resumeShellHTML(
|
|
786
|
+
rscStream: ReadableStream<Uint8Array>,
|
|
787
|
+
opts: ShellResumeOptions,
|
|
788
|
+
): Promise<ReadableStream<Uint8Array>> {
|
|
789
|
+
const { postponed, nonce, search, origin } = opts;
|
|
790
|
+
|
|
791
|
+
try {
|
|
792
|
+
if (postponed === null) {
|
|
793
|
+
// DATA variant: the stored prelude is the complete shell. No fizz runs;
|
|
794
|
+
// the eager injector pumps the fresh Flight payload scripts without
|
|
795
|
+
// needing an HTML chunk to trigger it (the stock injector deadlocked on
|
|
796
|
+
// a chunkless stream — see createDataVariantHtmlStream, kept for the
|
|
797
|
+
// batching invariant's sake).
|
|
798
|
+
return createDataVariantHtmlStream().pipeThrough(
|
|
799
|
+
injectRSCPayloadEager(rscStream, { nonce }),
|
|
800
|
+
);
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
if (!resume) {
|
|
804
|
+
throw new Error(
|
|
805
|
+
"[createShellResumeHandler] Missing `resume` dependency (react-dom/server.edge). " +
|
|
806
|
+
"Resuming a postponed shell requires the resume export; wire it in the SSR virtual entry.",
|
|
807
|
+
);
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
// Tee: one branch deserializes into the SsrRoot VDOM that resume() replays
|
|
811
|
+
// (a fresh instance is fine — replay matches structure, not identity), the
|
|
812
|
+
// other feeds the fresh hydration payload to injectRSCPayload.
|
|
813
|
+
const [rscStream1, rscStream2] = rscStream.tee();
|
|
814
|
+
|
|
815
|
+
const SsrRoot = createSsrRootComponent({
|
|
816
|
+
createFromReadableStream,
|
|
817
|
+
rscStream: rscStream1,
|
|
818
|
+
nonce,
|
|
819
|
+
// Same seed as the capture pass for this key: the resume tree must
|
|
820
|
+
// match the captured tree above the holes, search reads included.
|
|
821
|
+
search,
|
|
822
|
+
origin,
|
|
823
|
+
});
|
|
824
|
+
|
|
825
|
+
// EAGER injection (resume-only): the stored prelude — a complete document
|
|
826
|
+
// through </body></html> — is already on the wire ahead of this stream,
|
|
827
|
+
// so a Flight <script> is valid as the first tail byte. The stock
|
|
828
|
+
// injector waits for the first fizz chunk, which only appears when the
|
|
829
|
+
// first hole's loaders resolve — parking the whole hydration payload
|
|
830
|
+
// (root row included) behind the slowest live loader. See
|
|
831
|
+
// inject-rsc-eager.ts for the measured failure mode.
|
|
832
|
+
//
|
|
833
|
+
// EAGER HANDOVER: return the injector's readable BEFORE awaiting
|
|
834
|
+
// resume(). react-dom's resume() promise resolves only when the resumed
|
|
835
|
+
// shell (everything above the postponed holes) completes — which waits
|
|
836
|
+
// on the live loaders — so `await resume(...).pipeThrough(...)` parked
|
|
837
|
+
// the already-flowing Flight bytes a second time, behind the handshake
|
|
838
|
+
// instead of the stream (measured: injector output at +9ms, first tail
|
|
839
|
+
// byte on the wire at +735ms). Piping fizz in when it materializes lets
|
|
840
|
+
// serveShellHit start draining Flight immediately; pipeTo closes the
|
|
841
|
+
// writable on completion, which runs the injector's flush (trailer). A
|
|
842
|
+
// resume() rejection aborts the writable so the response errors instead
|
|
843
|
+
// of hanging.
|
|
844
|
+
const injector = injectRSCPayloadEager(rscStream2, { nonce });
|
|
845
|
+
void (async () => {
|
|
846
|
+
try {
|
|
847
|
+
// Nonce wrap mirrors renderHTML: client references first discovered
|
|
848
|
+
// during resume (holes the shell never rendered) preinit into the
|
|
849
|
+
// resumed stream and need the per-request nonce.
|
|
850
|
+
const resumed = await runWithPreinitNonce(nonce, () =>
|
|
851
|
+
resume(<SsrRoot />, JSON.parse(postponed), {
|
|
852
|
+
onError: (error) => reportRenderError(onError, error),
|
|
853
|
+
nonce,
|
|
854
|
+
}),
|
|
855
|
+
);
|
|
856
|
+
await resumed.pipeTo(injector.writable);
|
|
857
|
+
} catch (error) {
|
|
858
|
+
reportRenderError(onError, error);
|
|
859
|
+
try {
|
|
860
|
+
await injector.writable.abort(error);
|
|
861
|
+
} catch {
|
|
862
|
+
// Writable already errored/closed; the readable side has the error.
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
})();
|
|
866
|
+
return injector.readable;
|
|
867
|
+
} catch (error) {
|
|
868
|
+
reportRenderError(onError, error);
|
|
293
869
|
throw error;
|
|
294
870
|
}
|
|
295
871
|
};
|