@rangojs/router 0.4.2 → 0.5.0
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/dist/types/browser/prefetch/cache.d.ts +11 -8
- package/dist/types/cache/cf/cf-cache-store.d.ts +2 -0
- package/dist/types/cache/read-through-swr.d.ts +7 -6
- package/dist/types/cache/types.d.ts +39 -6
- package/dist/types/cloudflare/tracing.d.ts +16 -12
- package/dist/types/router/instrument.d.ts +45 -15
- package/dist/types/router/telemetry-otel.d.ts +4 -4
- package/dist/types/router/timeout.d.ts +12 -1
- package/dist/types/router/tracing.d.ts +31 -17
- package/dist/types/rsc/capture-queue.d.ts +41 -4
- package/dist/types/rsc/shell-build-manifest.d.ts +2 -2
- package/dist/types/rsc/shell-capture.d.ts +28 -2
- package/dist/types/rsc/shell-serve.d.ts +18 -12
- package/dist/types/rsc/stream-idle.d.ts +60 -0
- package/dist/types/server/request-context.d.ts +7 -1
- package/dist/types/vercel/tracing.d.ts +9 -8
- package/dist/vite/index.js +1 -1
- package/package.json +1 -1
- package/skills/observability/SKILL.md +33 -4
- package/skills/ppr/SKILL.md +44 -3
- package/src/browser/prefetch/cache.ts +22 -10
- package/src/cache/cache-runtime.ts +39 -25
- package/src/cache/cf/cf-cache-store.ts +27 -8
- package/src/cache/document-cache.ts +39 -23
- package/src/cache/read-through-swr.ts +22 -16
- package/src/cache/types.ts +41 -6
- package/src/cache/vercel/vercel-cache-store.ts +24 -10
- package/src/cloudflare/tracing.ts +16 -12
- package/src/router/instrument.ts +61 -15
- package/src/router/segment-resolution/loader-cache.ts +12 -1
- package/src/router/segment-resolution/revalidation.ts +16 -1
- package/src/router/telemetry-otel.ts +4 -4
- package/src/router/timeout.ts +12 -1
- package/src/router/tracing.ts +37 -17
- package/src/rsc/capture-queue.ts +150 -22
- package/src/rsc/handler.ts +171 -73
- package/src/rsc/rsc-rendering.ts +11 -3
- package/src/rsc/shell-build-manifest.ts +20 -7
- package/src/rsc/shell-capture.ts +222 -18
- package/src/rsc/shell-serve.ts +27 -12
- package/src/rsc/stream-idle.ts +137 -0
- package/src/server/request-context.ts +8 -0
- package/src/testing/dispatch.ts +55 -1
- package/src/vercel/tracing.ts +9 -8
- package/dist/__internal.d.ts +0 -83
- package/dist/__internal.d.ts.map +0 -1
- package/dist/__internal.js +0 -19
- package/dist/__internal.js.map +0 -1
- package/dist/__mocks__/version.d.ts +0 -7
- package/dist/__mocks__/version.d.ts.map +0 -1
- package/dist/__mocks__/version.js +0 -7
- package/dist/__mocks__/version.js.map +0 -1
- package/dist/__tests__/client-href.test.d.ts +0 -2
- package/dist/__tests__/client-href.test.d.ts.map +0 -1
- package/dist/__tests__/client-href.test.js +0 -74
- package/dist/__tests__/client-href.test.js.map +0 -1
- package/dist/__tests__/component-utils.test.d.ts +0 -2
- package/dist/__tests__/component-utils.test.d.ts.map +0 -1
- package/dist/__tests__/component-utils.test.js +0 -51
- package/dist/__tests__/component-utils.test.js.map +0 -1
- package/dist/__tests__/event-controller.test.d.ts +0 -2
- package/dist/__tests__/event-controller.test.d.ts.map +0 -1
- package/dist/__tests__/event-controller.test.js +0 -538
- package/dist/__tests__/event-controller.test.js.map +0 -1
- package/dist/__tests__/helpers/route-tree.d.ts +0 -118
- package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
- package/dist/__tests__/helpers/route-tree.js +0 -374
- package/dist/__tests__/helpers/route-tree.js.map +0 -1
- package/dist/__tests__/match-result.test.d.ts +0 -2
- package/dist/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/__tests__/match-result.test.js +0 -154
- package/dist/__tests__/match-result.test.js.map +0 -1
- package/dist/__tests__/navigation-store.test.d.ts +0 -2
- package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
- package/dist/__tests__/navigation-store.test.js +0 -440
- package/dist/__tests__/navigation-store.test.js.map +0 -1
- package/dist/__tests__/partial-update.test.d.ts +0 -2
- package/dist/__tests__/partial-update.test.d.ts.map +0 -1
- package/dist/__tests__/partial-update.test.js +0 -1009
- package/dist/__tests__/partial-update.test.js.map +0 -1
- package/dist/__tests__/reverse-types.test.d.ts +0 -8
- package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
- package/dist/__tests__/reverse-types.test.js +0 -656
- package/dist/__tests__/reverse-types.test.js.map +0 -1
- package/dist/__tests__/route-definition.test.d.ts +0 -2
- package/dist/__tests__/route-definition.test.d.ts.map +0 -1
- package/dist/__tests__/route-definition.test.js +0 -55
- package/dist/__tests__/route-definition.test.js.map +0 -1
- package/dist/__tests__/router-helpers.test.d.ts +0 -2
- package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
- package/dist/__tests__/router-helpers.test.js +0 -377
- package/dist/__tests__/router-helpers.test.js.map +0 -1
- package/dist/__tests__/router-integration-2.test.d.ts +0 -2
- package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration-2.test.js +0 -426
- package/dist/__tests__/router-integration-2.test.js.map +0 -1
- package/dist/__tests__/router-integration.test.d.ts +0 -2
- package/dist/__tests__/router-integration.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration.test.js +0 -1051
- package/dist/__tests__/router-integration.test.js.map +0 -1
- package/dist/__tests__/search-params.test.d.ts +0 -5
- package/dist/__tests__/search-params.test.d.ts.map +0 -1
- package/dist/__tests__/search-params.test.js +0 -306
- package/dist/__tests__/search-params.test.js.map +0 -1
- package/dist/__tests__/segment-system.test.d.ts +0 -2
- package/dist/__tests__/segment-system.test.d.ts.map +0 -1
- package/dist/__tests__/segment-system.test.js +0 -627
- package/dist/__tests__/segment-system.test.js.map +0 -1
- package/dist/__tests__/static-handler-types.test.d.ts +0 -8
- package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
- package/dist/__tests__/static-handler-types.test.js +0 -63
- package/dist/__tests__/static-handler-types.test.js.map +0 -1
- package/dist/__tests__/urls.test.d.ts +0 -2
- package/dist/__tests__/urls.test.d.ts.map +0 -1
- package/dist/__tests__/urls.test.js +0 -421
- package/dist/__tests__/urls.test.js.map +0 -1
- package/dist/__tests__/use-mount.test.d.ts +0 -2
- package/dist/__tests__/use-mount.test.d.ts.map +0 -1
- package/dist/__tests__/use-mount.test.js +0 -35
- package/dist/__tests__/use-mount.test.js.map +0 -1
- package/dist/bin/rango.d.ts +0 -2
- package/dist/bin/rango.d.ts.map +0 -1
- package/dist/bin/rango.js.map +0 -1
- package/dist/browser/event-controller.d.ts +0 -191
- package/dist/browser/event-controller.d.ts.map +0 -1
- package/dist/browser/event-controller.js +0 -559
- package/dist/browser/event-controller.js.map +0 -1
- package/dist/browser/index.d.ts +0 -2
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -14
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/link-interceptor.d.ts +0 -38
- package/dist/browser/link-interceptor.d.ts.map +0 -1
- package/dist/browser/link-interceptor.js +0 -99
- package/dist/browser/link-interceptor.js.map +0 -1
- package/dist/browser/logging.d.ts +0 -10
- package/dist/browser/logging.d.ts.map +0 -1
- package/dist/browser/logging.js +0 -29
- package/dist/browser/logging.js.map +0 -1
- package/dist/browser/lru-cache.d.ts +0 -17
- package/dist/browser/lru-cache.d.ts.map +0 -1
- package/dist/browser/lru-cache.js +0 -50
- package/dist/browser/lru-cache.js.map +0 -1
- package/dist/browser/merge-segment-loaders.d.ts +0 -39
- package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
- package/dist/browser/merge-segment-loaders.js +0 -102
- package/dist/browser/merge-segment-loaders.js.map +0 -1
- package/dist/browser/navigation-bridge.d.ts +0 -102
- package/dist/browser/navigation-bridge.d.ts.map +0 -1
- package/dist/browser/navigation-bridge.js +0 -708
- package/dist/browser/navigation-bridge.js.map +0 -1
- package/dist/browser/navigation-client.d.ts +0 -25
- package/dist/browser/navigation-client.d.ts.map +0 -1
- package/dist/browser/navigation-client.js +0 -157
- package/dist/browser/navigation-client.js.map +0 -1
- package/dist/browser/navigation-store.d.ts +0 -101
- package/dist/browser/navigation-store.d.ts.map +0 -1
- package/dist/browser/navigation-store.js +0 -625
- package/dist/browser/navigation-store.js.map +0 -1
- package/dist/browser/partial-update.d.ts +0 -75
- package/dist/browser/partial-update.d.ts.map +0 -1
- package/dist/browser/partial-update.js +0 -426
- package/dist/browser/partial-update.js.map +0 -1
- package/dist/browser/react/Link.d.ts +0 -86
- package/dist/browser/react/Link.d.ts.map +0 -1
- package/dist/browser/react/Link.js +0 -128
- package/dist/browser/react/Link.js.map +0 -1
- package/dist/browser/react/NavigationProvider.d.ts +0 -63
- package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
- package/dist/browser/react/NavigationProvider.js +0 -216
- package/dist/browser/react/NavigationProvider.js.map +0 -1
- package/dist/browser/react/ScrollRestoration.d.ts +0 -75
- package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
- package/dist/browser/react/ScrollRestoration.js +0 -57
- package/dist/browser/react/ScrollRestoration.js.map +0 -1
- package/dist/browser/react/context.d.ts +0 -46
- package/dist/browser/react/context.d.ts.map +0 -1
- package/dist/browser/react/context.js +0 -10
- package/dist/browser/react/context.js.map +0 -1
- package/dist/browser/react/index.d.ts +0 -11
- package/dist/browser/react/index.d.ts.map +0 -1
- package/dist/browser/react/index.js +0 -22
- package/dist/browser/react/index.js.map +0 -1
- package/dist/browser/react/location-state-shared.d.ts +0 -63
- package/dist/browser/react/location-state-shared.d.ts.map +0 -1
- package/dist/browser/react/location-state-shared.js +0 -81
- package/dist/browser/react/location-state-shared.js.map +0 -1
- package/dist/browser/react/location-state.d.ts +0 -23
- package/dist/browser/react/location-state.d.ts.map +0 -1
- package/dist/browser/react/location-state.js +0 -29
- package/dist/browser/react/location-state.js.map +0 -1
- package/dist/browser/react/mount-context.d.ts +0 -24
- package/dist/browser/react/mount-context.d.ts.map +0 -1
- package/dist/browser/react/mount-context.js +0 -24
- package/dist/browser/react/mount-context.js.map +0 -1
- package/dist/browser/react/use-action.d.ts +0 -64
- package/dist/browser/react/use-action.d.ts.map +0 -1
- package/dist/browser/react/use-action.js +0 -134
- package/dist/browser/react/use-action.js.map +0 -1
- package/dist/browser/react/use-client-cache.d.ts +0 -41
- package/dist/browser/react/use-client-cache.d.ts.map +0 -1
- package/dist/browser/react/use-client-cache.js +0 -39
- package/dist/browser/react/use-client-cache.js.map +0 -1
- package/dist/browser/react/use-handle.d.ts +0 -31
- package/dist/browser/react/use-handle.d.ts.map +0 -1
- package/dist/browser/react/use-handle.js +0 -144
- package/dist/browser/react/use-handle.js.map +0 -1
- package/dist/browser/react/use-href.d.ts +0 -33
- package/dist/browser/react/use-href.d.ts.map +0 -1
- package/dist/browser/react/use-href.js +0 -39
- package/dist/browser/react/use-href.js.map +0 -1
- package/dist/browser/react/use-link-status.d.ts +0 -37
- package/dist/browser/react/use-link-status.d.ts.map +0 -1
- package/dist/browser/react/use-link-status.js +0 -99
- package/dist/browser/react/use-link-status.js.map +0 -1
- package/dist/browser/react/use-mount.d.ts +0 -25
- package/dist/browser/react/use-mount.d.ts.map +0 -1
- package/dist/browser/react/use-mount.js +0 -30
- package/dist/browser/react/use-mount.js.map +0 -1
- package/dist/browser/react/use-navigation.d.ts +0 -27
- package/dist/browser/react/use-navigation.d.ts.map +0 -1
- package/dist/browser/react/use-navigation.js +0 -87
- package/dist/browser/react/use-navigation.js.map +0 -1
- package/dist/browser/react/use-segments.d.ts +0 -38
- package/dist/browser/react/use-segments.d.ts.map +0 -1
- package/dist/browser/react/use-segments.js +0 -130
- package/dist/browser/react/use-segments.js.map +0 -1
- package/dist/browser/request-controller.d.ts +0 -26
- package/dist/browser/request-controller.d.ts.map +0 -1
- package/dist/browser/request-controller.js +0 -147
- package/dist/browser/request-controller.js.map +0 -1
- package/dist/browser/rsc-router.d.ts +0 -129
- package/dist/browser/rsc-router.d.ts.map +0 -1
- package/dist/browser/rsc-router.js +0 -195
- package/dist/browser/rsc-router.js.map +0 -1
- package/dist/browser/scroll-restoration.d.ts +0 -93
- package/dist/browser/scroll-restoration.d.ts.map +0 -1
- package/dist/browser/scroll-restoration.js +0 -321
- package/dist/browser/scroll-restoration.js.map +0 -1
- package/dist/browser/segment-structure-assert.d.ts +0 -17
- package/dist/browser/segment-structure-assert.d.ts.map +0 -1
- package/dist/browser/segment-structure-assert.js +0 -59
- package/dist/browser/segment-structure-assert.js.map +0 -1
- package/dist/browser/server-action-bridge.d.ts +0 -26
- package/dist/browser/server-action-bridge.d.ts.map +0 -1
- package/dist/browser/server-action-bridge.js +0 -668
- package/dist/browser/server-action-bridge.js.map +0 -1
- package/dist/browser/shallow.d.ts +0 -12
- package/dist/browser/shallow.d.ts.map +0 -1
- package/dist/browser/shallow.js +0 -34
- package/dist/browser/shallow.js.map +0 -1
- package/dist/browser/types.d.ts +0 -369
- package/dist/browser/types.d.ts.map +0 -1
- package/dist/browser/types.js +0 -2
- package/dist/browser/types.js.map +0 -1
- package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
- package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-cli.test.js +0 -237
- package/dist/build/__tests__/generate-cli.test.js.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.js +0 -119
- package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.js +0 -620
- package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.js +0 -308
- package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
- package/dist/build/generate-manifest.d.ts +0 -81
- package/dist/build/generate-manifest.d.ts.map +0 -1
- package/dist/build/generate-manifest.js +0 -276
- package/dist/build/generate-manifest.js.map +0 -1
- package/dist/build/generate-route-types.d.ts +0 -115
- package/dist/build/generate-route-types.d.ts.map +0 -1
- package/dist/build/generate-route-types.js +0 -740
- package/dist/build/generate-route-types.js.map +0 -1
- package/dist/build/index.d.ts +0 -21
- package/dist/build/index.d.ts.map +0 -1
- package/dist/build/index.js +0 -21
- package/dist/build/index.js.map +0 -1
- package/dist/build/route-trie.d.ts +0 -71
- package/dist/build/route-trie.d.ts.map +0 -1
- package/dist/build/route-trie.js +0 -175
- package/dist/build/route-trie.js.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.js +0 -208
- package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
- package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
- package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
- package/dist/cache/__tests__/document-cache.test.js +0 -345
- package/dist/cache/__tests__/document-cache.test.js.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
- package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
- package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-store.test.js +0 -367
- package/dist/cache/__tests__/memory-store.test.js.map +0 -1
- package/dist/cache/cache-scope.d.ts +0 -102
- package/dist/cache/cache-scope.d.ts.map +0 -1
- package/dist/cache/cache-scope.js +0 -440
- package/dist/cache/cache-scope.js.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
- package/dist/cache/cf/cf-cache-store.d.ts +0 -165
- package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
- package/dist/cache/cf/cf-cache-store.js +0 -242
- package/dist/cache/cf/cf-cache-store.js.map +0 -1
- package/dist/cache/cf/index.d.ts +0 -14
- package/dist/cache/cf/index.d.ts.map +0 -1
- package/dist/cache/cf/index.js +0 -17
- package/dist/cache/cf/index.js.map +0 -1
- package/dist/cache/document-cache.d.ts +0 -64
- package/dist/cache/document-cache.d.ts.map +0 -1
- package/dist/cache/document-cache.js +0 -228
- package/dist/cache/document-cache.js.map +0 -1
- package/dist/cache/index.d.ts +0 -19
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/index.js +0 -21
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/memory-segment-store.d.ts +0 -110
- package/dist/cache/memory-segment-store.d.ts.map +0 -1
- package/dist/cache/memory-segment-store.js +0 -117
- package/dist/cache/memory-segment-store.js.map +0 -1
- package/dist/cache/memory-store.d.ts +0 -41
- package/dist/cache/memory-store.d.ts.map +0 -1
- package/dist/cache/memory-store.js +0 -191
- package/dist/cache/memory-store.js.map +0 -1
- package/dist/cache/types.d.ts +0 -317
- package/dist/cache/types.d.ts.map +0 -1
- package/dist/cache/types.js +0 -12
- package/dist/cache/types.js.map +0 -1
- package/dist/client.d.ts +0 -248
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -367
- package/dist/client.js.map +0 -1
- package/dist/client.rsc.d.ts +0 -26
- package/dist/client.rsc.d.ts.map +0 -1
- package/dist/client.rsc.js +0 -46
- package/dist/client.rsc.js.map +0 -1
- package/dist/component-utils.d.ts +0 -36
- package/dist/component-utils.d.ts.map +0 -1
- package/dist/component-utils.js +0 -61
- package/dist/component-utils.js.map +0 -1
- package/dist/components/DefaultDocument.d.ts +0 -13
- package/dist/components/DefaultDocument.d.ts.map +0 -1
- package/dist/components/DefaultDocument.js +0 -15
- package/dist/components/DefaultDocument.js.map +0 -1
- package/dist/debug.d.ts +0 -58
- package/dist/debug.d.ts.map +0 -1
- package/dist/debug.js +0 -157
- package/dist/debug.js.map +0 -1
- package/dist/default-error-boundary.d.ts +0 -11
- package/dist/default-error-boundary.d.ts.map +0 -1
- package/dist/default-error-boundary.js +0 -45
- package/dist/default-error-boundary.js.map +0 -1
- package/dist/deps/browser.d.ts +0 -2
- package/dist/deps/browser.d.ts.map +0 -1
- package/dist/deps/browser.js +0 -3
- package/dist/deps/browser.js.map +0 -1
- package/dist/deps/html-stream-client.d.ts +0 -2
- package/dist/deps/html-stream-client.d.ts.map +0 -1
- package/dist/deps/html-stream-client.js +0 -3
- package/dist/deps/html-stream-client.js.map +0 -1
- package/dist/deps/html-stream-server.d.ts +0 -2
- package/dist/deps/html-stream-server.d.ts.map +0 -1
- package/dist/deps/html-stream-server.js +0 -3
- package/dist/deps/html-stream-server.js.map +0 -1
- package/dist/deps/rsc.d.ts +0 -2
- package/dist/deps/rsc.d.ts.map +0 -1
- package/dist/deps/rsc.js +0 -4
- package/dist/deps/rsc.js.map +0 -1
- package/dist/deps/ssr.d.ts +0 -2
- package/dist/deps/ssr.d.ts.map +0 -1
- package/dist/deps/ssr.js +0 -3
- package/dist/deps/ssr.js.map +0 -1
- package/dist/errors.d.ts +0 -174
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -241
- package/dist/errors.js.map +0 -1
- package/dist/handle.d.ts +0 -78
- package/dist/handle.d.ts.map +0 -1
- package/dist/handle.js +0 -82
- package/dist/handle.js.map +0 -1
- package/dist/handles/MetaTags.d.ts +0 -14
- package/dist/handles/MetaTags.d.ts.map +0 -1
- package/dist/handles/MetaTags.js +0 -136
- package/dist/handles/MetaTags.js.map +0 -1
- package/dist/handles/index.d.ts +0 -6
- package/dist/handles/index.d.ts.map +0 -1
- package/dist/handles/index.js +0 -6
- package/dist/handles/index.js.map +0 -1
- package/dist/handles/meta.d.ts +0 -39
- package/dist/handles/meta.d.ts.map +0 -1
- package/dist/handles/meta.js +0 -202
- package/dist/handles/meta.js.map +0 -1
- package/dist/host/__tests__/errors.test.d.ts +0 -2
- package/dist/host/__tests__/errors.test.d.ts.map +0 -1
- package/dist/host/__tests__/errors.test.js +0 -76
- package/dist/host/__tests__/errors.test.js.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.js +0 -251
- package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
- package/dist/host/__tests__/router.test.d.ts +0 -2
- package/dist/host/__tests__/router.test.d.ts.map +0 -1
- package/dist/host/__tests__/router.test.js +0 -241
- package/dist/host/__tests__/router.test.js.map +0 -1
- package/dist/host/__tests__/testing.test.d.ts +0 -2
- package/dist/host/__tests__/testing.test.d.ts.map +0 -1
- package/dist/host/__tests__/testing.test.js +0 -64
- package/dist/host/__tests__/testing.test.js.map +0 -1
- package/dist/host/__tests__/utils.test.d.ts +0 -2
- package/dist/host/__tests__/utils.test.d.ts.map +0 -1
- package/dist/host/__tests__/utils.test.js +0 -29
- package/dist/host/__tests__/utils.test.js.map +0 -1
- package/dist/host/cookie-handler.d.ts +0 -34
- package/dist/host/cookie-handler.d.ts.map +0 -1
- package/dist/host/cookie-handler.js +0 -124
- package/dist/host/cookie-handler.js.map +0 -1
- package/dist/host/errors.d.ts +0 -56
- package/dist/host/errors.d.ts.map +0 -1
- package/dist/host/errors.js +0 -79
- package/dist/host/errors.js.map +0 -1
- package/dist/host/index.d.ts +0 -29
- package/dist/host/index.d.ts.map +0 -1
- package/dist/host/index.js +0 -32
- package/dist/host/index.js.map +0 -1
- package/dist/host/pattern-matcher.d.ts +0 -36
- package/dist/host/pattern-matcher.d.ts.map +0 -1
- package/dist/host/pattern-matcher.js +0 -172
- package/dist/host/pattern-matcher.js.map +0 -1
- package/dist/host/router.d.ts +0 -26
- package/dist/host/router.d.ts.map +0 -1
- package/dist/host/router.js +0 -218
- package/dist/host/router.js.map +0 -1
- package/dist/host/testing.d.ts +0 -36
- package/dist/host/testing.d.ts.map +0 -1
- package/dist/host/testing.js +0 -55
- package/dist/host/testing.js.map +0 -1
- package/dist/host/types.d.ts +0 -115
- package/dist/host/types.d.ts.map +0 -1
- package/dist/host/types.js +0 -7
- package/dist/host/types.js.map +0 -1
- package/dist/host/utils.d.ts +0 -21
- package/dist/host/utils.d.ts.map +0 -1
- package/dist/host/utils.js +0 -23
- package/dist/host/utils.js.map +0 -1
- package/dist/href-client.d.ts +0 -131
- package/dist/href-client.d.ts.map +0 -1
- package/dist/href-client.js +0 -64
- package/dist/href-client.js.map +0 -1
- package/dist/href-context.d.ts +0 -29
- package/dist/href-context.d.ts.map +0 -1
- package/dist/href-context.js +0 -21
- package/dist/href-context.js.map +0 -1
- package/dist/index.d.ts +0 -73
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -91
- package/dist/index.js.map +0 -1
- package/dist/index.rsc.d.ts +0 -32
- package/dist/index.rsc.d.ts.map +0 -1
- package/dist/index.rsc.js +0 -40
- package/dist/index.rsc.js.map +0 -1
- package/dist/internal-debug.d.ts +0 -2
- package/dist/internal-debug.d.ts.map +0 -1
- package/dist/internal-debug.js +0 -5
- package/dist/internal-debug.js.map +0 -1
- package/dist/loader.d.ts +0 -14
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -20
- package/dist/loader.js.map +0 -1
- package/dist/loader.rsc.d.ts +0 -19
- package/dist/loader.rsc.d.ts.map +0 -1
- package/dist/loader.rsc.js +0 -99
- package/dist/loader.rsc.js.map +0 -1
- package/dist/network-error-thrower.d.ts +0 -17
- package/dist/network-error-thrower.d.ts.map +0 -1
- package/dist/network-error-thrower.js +0 -14
- package/dist/network-error-thrower.js.map +0 -1
- package/dist/outlet-context.d.ts +0 -13
- package/dist/outlet-context.d.ts.map +0 -1
- package/dist/outlet-context.js +0 -3
- package/dist/outlet-context.js.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.js +0 -148
- package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
- package/dist/prerender/param-hash.d.ts +0 -16
- package/dist/prerender/param-hash.d.ts.map +0 -1
- package/dist/prerender/param-hash.js +0 -36
- package/dist/prerender/param-hash.js.map +0 -1
- package/dist/prerender/store.d.ts +0 -38
- package/dist/prerender/store.d.ts.map +0 -1
- package/dist/prerender/store.js +0 -61
- package/dist/prerender/store.js.map +0 -1
- package/dist/prerender.d.ts +0 -66
- package/dist/prerender.d.ts.map +0 -1
- package/dist/prerender.js +0 -57
- package/dist/prerender.js.map +0 -1
- package/dist/reverse.d.ts +0 -196
- package/dist/reverse.d.ts.map +0 -1
- package/dist/reverse.js +0 -78
- package/dist/reverse.js.map +0 -1
- package/dist/root-error-boundary.d.ts +0 -33
- package/dist/root-error-boundary.d.ts.map +0 -1
- package/dist/root-error-boundary.js +0 -165
- package/dist/root-error-boundary.js.map +0 -1
- package/dist/route-content-wrapper.d.ts +0 -46
- package/dist/route-content-wrapper.d.ts.map +0 -1
- package/dist/route-content-wrapper.js +0 -77
- package/dist/route-content-wrapper.js.map +0 -1
- package/dist/route-definition.d.ts +0 -421
- package/dist/route-definition.d.ts.map +0 -1
- package/dist/route-definition.js +0 -868
- package/dist/route-definition.js.map +0 -1
- package/dist/route-map-builder.d.ts +0 -155
- package/dist/route-map-builder.d.ts.map +0 -1
- package/dist/route-map-builder.js +0 -237
- package/dist/route-map-builder.js.map +0 -1
- package/dist/route-types.d.ts +0 -165
- package/dist/route-types.d.ts.map +0 -1
- package/dist/route-types.js +0 -7
- package/dist/route-types.js.map +0 -1
- package/dist/router/__tests__/handler-context.test.d.ts +0 -2
- package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/handler-context.test.js +0 -65
- package/dist/router/__tests__/handler-context.test.js.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
- package/dist/router/__tests__/match-context.test.d.ts +0 -2
- package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-context.test.js +0 -92
- package/dist/router/__tests__/match-context.test.js.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.js +0 -417
- package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
- package/dist/router/__tests__/match-result.test.d.ts +0 -2
- package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-result.test.js +0 -457
- package/dist/router/__tests__/match-result.test.js.map +0 -1
- package/dist/router/__tests__/on-error.test.d.ts +0 -2
- package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
- package/dist/router/__tests__/on-error.test.js +0 -678
- package/dist/router/__tests__/on-error.test.js.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.js +0 -629
- package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
- package/dist/router/error-handling.d.ts +0 -77
- package/dist/router/error-handling.d.ts.map +0 -1
- package/dist/router/error-handling.js +0 -202
- package/dist/router/error-handling.js.map +0 -1
- package/dist/router/handler-context.d.ts +0 -20
- package/dist/router/handler-context.d.ts.map +0 -1
- package/dist/router/handler-context.js +0 -198
- package/dist/router/handler-context.js.map +0 -1
- package/dist/router/intercept-resolution.d.ts +0 -66
- package/dist/router/intercept-resolution.d.ts.map +0 -1
- package/dist/router/intercept-resolution.js +0 -246
- package/dist/router/intercept-resolution.js.map +0 -1
- package/dist/router/loader-resolution.d.ts +0 -64
- package/dist/router/loader-resolution.d.ts.map +0 -1
- package/dist/router/loader-resolution.js +0 -284
- package/dist/router/loader-resolution.js.map +0 -1
- package/dist/router/logging.d.ts +0 -15
- package/dist/router/logging.d.ts.map +0 -1
- package/dist/router/logging.js +0 -99
- package/dist/router/logging.js.map +0 -1
- package/dist/router/manifest.d.ts +0 -22
- package/dist/router/manifest.d.ts.map +0 -1
- package/dist/router/manifest.js +0 -181
- package/dist/router/manifest.js.map +0 -1
- package/dist/router/match-api.d.ts +0 -35
- package/dist/router/match-api.d.ts.map +0 -1
- package/dist/router/match-api.js +0 -406
- package/dist/router/match-api.js.map +0 -1
- package/dist/router/match-context.d.ts +0 -206
- package/dist/router/match-context.d.ts.map +0 -1
- package/dist/router/match-context.js +0 -17
- package/dist/router/match-context.js.map +0 -1
- package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
- package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
- package/dist/router/match-middleware/background-revalidation.js +0 -75
- package/dist/router/match-middleware/background-revalidation.js.map +0 -1
- package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
- package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-lookup.js +0 -257
- package/dist/router/match-middleware/cache-lookup.js.map +0 -1
- package/dist/router/match-middleware/cache-store.d.ts +0 -113
- package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-store.js +0 -108
- package/dist/router/match-middleware/cache-store.js.map +0 -1
- package/dist/router/match-middleware/index.d.ts +0 -81
- package/dist/router/match-middleware/index.d.ts.map +0 -1
- package/dist/router/match-middleware/index.js +0 -80
- package/dist/router/match-middleware/index.js.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.js +0 -134
- package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
- package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
- package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/segment-resolution.js +0 -53
- package/dist/router/match-middleware/segment-resolution.js.map +0 -1
- package/dist/router/match-pipelines.d.ts +0 -147
- package/dist/router/match-pipelines.d.ts.map +0 -1
- package/dist/router/match-pipelines.js +0 -82
- package/dist/router/match-pipelines.js.map +0 -1
- package/dist/router/match-result.d.ts +0 -126
- package/dist/router/match-result.d.ts.map +0 -1
- package/dist/router/match-result.js +0 -93
- package/dist/router/match-result.js.map +0 -1
- package/dist/router/metrics.d.ts +0 -20
- package/dist/router/metrics.d.ts.map +0 -1
- package/dist/router/metrics.js +0 -47
- package/dist/router/metrics.js.map +0 -1
- package/dist/router/middleware.d.ts +0 -249
- package/dist/router/middleware.d.ts.map +0 -1
- package/dist/router/middleware.js +0 -434
- package/dist/router/middleware.js.map +0 -1
- package/dist/router/middleware.test.d.ts +0 -2
- package/dist/router/middleware.test.d.ts.map +0 -1
- package/dist/router/middleware.test.js +0 -816
- package/dist/router/middleware.test.js.map +0 -1
- package/dist/router/pattern-matching.d.ts +0 -149
- package/dist/router/pattern-matching.d.ts.map +0 -1
- package/dist/router/pattern-matching.js +0 -349
- package/dist/router/pattern-matching.js.map +0 -1
- package/dist/router/revalidation.d.ts +0 -44
- package/dist/router/revalidation.d.ts.map +0 -1
- package/dist/router/revalidation.js +0 -147
- package/dist/router/revalidation.js.map +0 -1
- package/dist/router/router-context.d.ts +0 -135
- package/dist/router/router-context.d.ts.map +0 -1
- package/dist/router/router-context.js +0 -36
- package/dist/router/router-context.js.map +0 -1
- package/dist/router/segment-resolution.d.ts +0 -127
- package/dist/router/segment-resolution.d.ts.map +0 -1
- package/dist/router/segment-resolution.js +0 -919
- package/dist/router/segment-resolution.js.map +0 -1
- package/dist/router/trie-matching.d.ts +0 -40
- package/dist/router/trie-matching.d.ts.map +0 -1
- package/dist/router/trie-matching.js +0 -127
- package/dist/router/trie-matching.js.map +0 -1
- package/dist/router/types.d.ts +0 -136
- package/dist/router/types.d.ts.map +0 -1
- package/dist/router/types.js +0 -7
- package/dist/router/types.js.map +0 -1
- package/dist/router.d.ts +0 -753
- package/dist/router.d.ts.map +0 -1
- package/dist/router.gen.d.ts +0 -6
- package/dist/router.gen.d.ts.map +0 -1
- package/dist/router.gen.js +0 -6
- package/dist/router.gen.js.map +0 -1
- package/dist/router.js +0 -1304
- package/dist/router.js.map +0 -1
- package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
- package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
- package/dist/rsc/__tests__/helpers.test.js +0 -140
- package/dist/rsc/__tests__/helpers.test.js.map +0 -1
- package/dist/rsc/handler.d.ts +0 -45
- package/dist/rsc/handler.d.ts.map +0 -1
- package/dist/rsc/handler.js +0 -1172
- package/dist/rsc/handler.js.map +0 -1
- package/dist/rsc/helpers.d.ts +0 -16
- package/dist/rsc/helpers.d.ts.map +0 -1
- package/dist/rsc/helpers.js +0 -55
- package/dist/rsc/helpers.js.map +0 -1
- package/dist/rsc/index.d.ts +0 -22
- package/dist/rsc/index.d.ts.map +0 -1
- package/dist/rsc/index.js +0 -23
- package/dist/rsc/index.js.map +0 -1
- package/dist/rsc/nonce.d.ts +0 -9
- package/dist/rsc/nonce.d.ts.map +0 -1
- package/dist/rsc/nonce.js +0 -18
- package/dist/rsc/nonce.js.map +0 -1
- package/dist/rsc/types.d.ts +0 -206
- package/dist/rsc/types.d.ts.map +0 -1
- package/dist/rsc/types.js +0 -8
- package/dist/rsc/types.js.map +0 -1
- package/dist/search-params.d.ts +0 -103
- package/dist/search-params.d.ts.map +0 -1
- package/dist/search-params.js +0 -74
- package/dist/search-params.js.map +0 -1
- package/dist/segment-system.d.ts +0 -75
- package/dist/segment-system.d.ts.map +0 -1
- package/dist/segment-system.js +0 -336
- package/dist/segment-system.js.map +0 -1
- package/dist/server/context.d.ts +0 -245
- package/dist/server/context.d.ts.map +0 -1
- package/dist/server/context.js +0 -197
- package/dist/server/context.js.map +0 -1
- package/dist/server/fetchable-loader-store.d.ts +0 -18
- package/dist/server/fetchable-loader-store.d.ts.map +0 -1
- package/dist/server/fetchable-loader-store.js +0 -18
- package/dist/server/fetchable-loader-store.js.map +0 -1
- package/dist/server/handle-store.d.ts +0 -85
- package/dist/server/handle-store.d.ts.map +0 -1
- package/dist/server/handle-store.js +0 -142
- package/dist/server/handle-store.js.map +0 -1
- package/dist/server/loader-registry.d.ts +0 -55
- package/dist/server/loader-registry.d.ts.map +0 -1
- package/dist/server/loader-registry.js +0 -132
- package/dist/server/loader-registry.js.map +0 -1
- package/dist/server/request-context.d.ts +0 -226
- package/dist/server/request-context.d.ts.map +0 -1
- package/dist/server/request-context.js +0 -290
- package/dist/server/request-context.js.map +0 -1
- package/dist/server/root-layout.d.ts +0 -4
- package/dist/server/root-layout.d.ts.map +0 -1
- package/dist/server/root-layout.js +0 -5
- package/dist/server/root-layout.js.map +0 -1
- package/dist/server.d.ts +0 -15
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -20
- package/dist/server.js.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
- package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
- package/dist/ssr/index.d.ts +0 -98
- package/dist/ssr/index.d.ts.map +0 -1
- package/dist/ssr/index.js +0 -158
- package/dist/ssr/index.js.map +0 -1
- package/dist/static-handler.d.ts +0 -50
- package/dist/static-handler.d.ts.map +0 -1
- package/dist/static-handler.gen.d.ts +0 -5
- package/dist/static-handler.gen.d.ts.map +0 -1
- package/dist/static-handler.gen.js +0 -5
- package/dist/static-handler.gen.js.map +0 -1
- package/dist/static-handler.js +0 -29
- package/dist/static-handler.js.map +0 -1
- package/dist/theme/ThemeProvider.d.ts +0 -20
- package/dist/theme/ThemeProvider.d.ts.map +0 -1
- package/dist/theme/ThemeProvider.js +0 -240
- package/dist/theme/ThemeProvider.js.map +0 -1
- package/dist/theme/ThemeScript.d.ts +0 -48
- package/dist/theme/ThemeScript.d.ts.map +0 -1
- package/dist/theme/ThemeScript.js +0 -13
- package/dist/theme/ThemeScript.js.map +0 -1
- package/dist/theme/__tests__/theme.test.d.ts +0 -2
- package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
- package/dist/theme/__tests__/theme.test.js +0 -103
- package/dist/theme/__tests__/theme.test.js.map +0 -1
- package/dist/theme/constants.d.ts +0 -29
- package/dist/theme/constants.d.ts.map +0 -1
- package/dist/theme/constants.js +0 -48
- package/dist/theme/constants.js.map +0 -1
- package/dist/theme/index.d.ts +0 -31
- package/dist/theme/index.d.ts.map +0 -1
- package/dist/theme/index.js +0 -36
- package/dist/theme/index.js.map +0 -1
- package/dist/theme/theme-context.d.ts +0 -40
- package/dist/theme/theme-context.d.ts.map +0 -1
- package/dist/theme/theme-context.js +0 -60
- package/dist/theme/theme-context.js.map +0 -1
- package/dist/theme/theme-script.d.ts +0 -27
- package/dist/theme/theme-script.d.ts.map +0 -1
- package/dist/theme/theme-script.js +0 -147
- package/dist/theme/theme-script.js.map +0 -1
- package/dist/theme/types.d.ts +0 -163
- package/dist/theme/types.d.ts.map +0 -1
- package/dist/theme/types.js +0 -11
- package/dist/theme/types.js.map +0 -1
- package/dist/theme/use-theme.d.ts +0 -12
- package/dist/theme/use-theme.d.ts.map +0 -1
- package/dist/theme/use-theme.js +0 -40
- package/dist/theme/use-theme.js.map +0 -1
- package/dist/types.d.ts +0 -1479
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -10
- package/dist/types.js.map +0 -1
- package/dist/urls.d.ts +0 -441
- package/dist/urls.d.ts.map +0 -1
- package/dist/urls.gen.d.ts +0 -8
- package/dist/urls.gen.d.ts.map +0 -1
- package/dist/urls.gen.js +0 -8
- package/dist/urls.gen.js.map +0 -1
- package/dist/urls.js +0 -443
- package/dist/urls.js.map +0 -1
- package/dist/use-loader.d.ts +0 -127
- package/dist/use-loader.d.ts.map +0 -1
- package/dist/use-loader.js +0 -237
- package/dist/use-loader.js.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
- package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.js +0 -39
- package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
- package/dist/vite/ast-handler-extract.d.ts +0 -49
- package/dist/vite/ast-handler-extract.d.ts.map +0 -1
- package/dist/vite/ast-handler-extract.js +0 -249
- package/dist/vite/ast-handler-extract.js.map +0 -1
- package/dist/vite/expose-action-id.d.ts +0 -19
- package/dist/vite/expose-action-id.d.ts.map +0 -1
- package/dist/vite/expose-action-id.js +0 -250
- package/dist/vite/expose-action-id.js.map +0 -1
- package/dist/vite/expose-id-utils.d.ts +0 -69
- package/dist/vite/expose-id-utils.d.ts.map +0 -1
- package/dist/vite/expose-id-utils.js +0 -289
- package/dist/vite/expose-id-utils.js.map +0 -1
- package/dist/vite/expose-internal-ids.d.ts +0 -22
- package/dist/vite/expose-internal-ids.d.ts.map +0 -1
- package/dist/vite/expose-internal-ids.js +0 -886
- package/dist/vite/expose-internal-ids.js.map +0 -1
- package/dist/vite/index.d.ts +0 -149
- package/dist/vite/index.d.ts.map +0 -1
- package/dist/vite/index.js.bak +0 -5448
- package/dist/vite/index.js.map +0 -1
- package/dist/vite/index.named-routes.gen.ts +0 -103
- package/dist/vite/package-resolution.d.ts +0 -43
- package/dist/vite/package-resolution.d.ts.map +0 -1
- package/dist/vite/package-resolution.js +0 -112
- package/dist/vite/package-resolution.js.map +0 -1
- package/dist/vite/virtual-entries.d.ts +0 -25
- package/dist/vite/virtual-entries.d.ts.map +0 -1
- package/dist/vite/virtual-entries.js +0 -110
- package/dist/vite/virtual-entries.js.map +0 -1
package/src/rsc/capture-queue.ts
CHANGED
|
@@ -19,15 +19,55 @@
|
|
|
19
19
|
* is bounded; a capture killed mid-queue by that bound simply recaptures on a
|
|
20
20
|
* later request (the existing best-effort contract).
|
|
21
21
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
22
|
+
* Document shells outrank queued navigation-only snapshots. Production Link
|
|
23
|
+
* prefetching can enqueue several expensive navigation captures at once; a
|
|
24
|
+
* strict FIFO made the requesting page's document capture wait
|
|
25
|
+
* behind speculative work until its queue budget expired. The active capture
|
|
26
|
+
* is never interrupted, and each priority remains FIFO.
|
|
24
27
|
*/
|
|
25
|
-
let captureQueue: Promise<void> = Promise.resolve();
|
|
26
28
|
let admittedCaptures = 0;
|
|
29
|
+
let captureRunning = false;
|
|
30
|
+
|
|
31
|
+
interface QueuedCapture {
|
|
32
|
+
waitStart: number;
|
|
33
|
+
state: "waiting" | "running" | "settled";
|
|
34
|
+
signalStart: () => void;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const documentCaptures: QueuedCapture[] = [];
|
|
38
|
+
const navigationCaptures: QueuedCapture[] = [];
|
|
27
39
|
|
|
28
40
|
/** Bound queued/running capture closures retained by one isolate. */
|
|
29
41
|
export const MAX_ADMITTED_CAPTURES: number = 32;
|
|
30
42
|
|
|
43
|
+
/** Point-in-time queue occupancy, for capture-scheduling telemetry. */
|
|
44
|
+
export interface CaptureQueueDepths {
|
|
45
|
+
/** A capture is currently executing (never preempted). */
|
|
46
|
+
running: boolean;
|
|
47
|
+
/** Waiting document-priority captures (run before every navigation capture). */
|
|
48
|
+
document: number;
|
|
49
|
+
/** Waiting navigation-priority captures. */
|
|
50
|
+
navigation: number;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Snapshot the queue's waiting/running state. Wait-timed-out entries still
|
|
55
|
+
* sitting in the arrays (pruned lazily by takeNextCapture) are excluded — they
|
|
56
|
+
* will never run, so counting them would overstate the backlog.
|
|
57
|
+
*/
|
|
58
|
+
export function captureQueueDepths(): CaptureQueueDepths {
|
|
59
|
+
const waiting = (queue: QueuedCapture[]): number => {
|
|
60
|
+
let count = 0;
|
|
61
|
+
for (const queued of queue) if (queued.state === "waiting") count++;
|
|
62
|
+
return count;
|
|
63
|
+
};
|
|
64
|
+
return {
|
|
65
|
+
running: captureRunning,
|
|
66
|
+
document: waiting(documentCaptures),
|
|
67
|
+
navigation: waiting(navigationCaptures),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
31
71
|
/** The caller may drop this best-effort capture and retry on a later request. */
|
|
32
72
|
export class CaptureQueueFullError extends Error {
|
|
33
73
|
constructor() {
|
|
@@ -37,7 +77,35 @@ export class CaptureQueueFullError extends Error {
|
|
|
37
77
|
}
|
|
38
78
|
|
|
39
79
|
/**
|
|
40
|
-
*
|
|
80
|
+
* Budget on how long a capture may WAIT in the queue before it is dropped
|
|
81
|
+
* instead of run. On workerd a queued capture rides the scheduling request's
|
|
82
|
+
* waitUntil, whose post-response lifetime is bounded (~30s): a capture that
|
|
83
|
+
* already burned 15s+ parked behind a slow predecessor would start its own
|
|
84
|
+
* up-to-15s attempt (captureTimeout) with no budget left and risk being
|
|
85
|
+
* killed mid-store-write. Dropping at the budget is safe — captures are
|
|
86
|
+
* best-effort by contract, and a later request re-probes the key (the drop
|
|
87
|
+
* does NOT mark backoff: the route is not doomed, the isolate was busy).
|
|
88
|
+
* Matches one attempt's SHELL_CAPTURE_MAX_WAIT_MS so wait + attempt fits the
|
|
89
|
+
* platform budget. Field-observed: a navigation-shell capture parked ~24s
|
|
90
|
+
* behind a predecessor's two-attempt cycle.
|
|
91
|
+
*/
|
|
92
|
+
export const CAPTURE_QUEUE_WAIT_BUDGET_MS: number = 15_000;
|
|
93
|
+
|
|
94
|
+
/** Thrown (async) when the queue wait exceeded the budget; the task never ran. */
|
|
95
|
+
export class CaptureQueueWaitTimeoutError extends Error {
|
|
96
|
+
readonly waitedMs: number;
|
|
97
|
+
constructor(waitedMs: number) {
|
|
98
|
+
super(
|
|
99
|
+
`shell capture waited ${Math.round(waitedMs)}ms in the queue ` +
|
|
100
|
+
`(budget ${CAPTURE_QUEUE_WAIT_BUDGET_MS}ms)`,
|
|
101
|
+
);
|
|
102
|
+
this.name = "CaptureQueueWaitTimeoutError";
|
|
103
|
+
this.waitedMs = waitedMs;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Upper bound on how long one running capture may hold the queue. A capture task
|
|
41
109
|
* normally settles well inside this (attempt + in-place retry + writes), but
|
|
42
110
|
* a task wedged on never-settling I/O — a workerd waitUntil fetch that pends
|
|
43
111
|
* instead of rejecting (seen on GH runners with the dev prerender store
|
|
@@ -48,43 +116,103 @@ export class CaptureQueueFullError extends Error {
|
|
|
48
116
|
const QUEUE_LINK_CAP_MS = 60_000;
|
|
49
117
|
|
|
50
118
|
/**
|
|
51
|
-
* Run `task` after
|
|
52
|
-
* promise for THIS task's completion
|
|
53
|
-
* the queue itself is insulated).
|
|
119
|
+
* Run `task` after the active capture and every higher/equal-priority capture
|
|
120
|
+
* ahead of it have settled. Returns a promise for THIS task's completion
|
|
121
|
+
* (rejections propagate to the caller — the queue itself is insulated).
|
|
54
122
|
*/
|
|
55
123
|
export function enqueueSerializedCapture(
|
|
56
124
|
task: () => Promise<void>,
|
|
125
|
+
opts?: {
|
|
126
|
+
maxQueueWaitMs?: number;
|
|
127
|
+
priority?: "document" | "navigation";
|
|
128
|
+
},
|
|
57
129
|
): Promise<void> {
|
|
58
130
|
if (admittedCaptures >= MAX_ADMITTED_CAPTURES) {
|
|
59
131
|
return Promise.reject(new CaptureQueueFullError());
|
|
60
132
|
}
|
|
61
133
|
admittedCaptures++;
|
|
62
|
-
|
|
63
|
-
let
|
|
64
|
-
|
|
65
|
-
|
|
134
|
+
|
|
135
|
+
let signalStart!: () => void;
|
|
136
|
+
const startGate = new Promise<void>((resolve) => {
|
|
137
|
+
signalStart = resolve;
|
|
66
138
|
});
|
|
67
|
-
|
|
68
|
-
|
|
139
|
+
const queued: QueuedCapture = {
|
|
140
|
+
waitStart: performance.now(),
|
|
141
|
+
state: "waiting",
|
|
142
|
+
signalStart,
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
const completion = (async () => {
|
|
146
|
+
const budget = opts?.maxQueueWaitMs ?? CAPTURE_QUEUE_WAIT_BUDGET_MS;
|
|
147
|
+
let waitTimer: ReturnType<typeof setTimeout> | undefined;
|
|
148
|
+
const waitTimedOut = await Promise.race([
|
|
149
|
+
startGate.then(() => false),
|
|
150
|
+
new Promise<boolean>((resolve) => {
|
|
151
|
+
waitTimer = setTimeout(() => {
|
|
152
|
+
if (queued.state !== "waiting") return;
|
|
153
|
+
queued.state = "settled";
|
|
154
|
+
admittedCaptures--;
|
|
155
|
+
resolve(true);
|
|
156
|
+
}, budget);
|
|
157
|
+
(waitTimer as { unref?: () => void }).unref?.();
|
|
158
|
+
}),
|
|
159
|
+
]);
|
|
160
|
+
if (waitTimer) clearTimeout(waitTimer);
|
|
161
|
+
if (waitTimedOut) {
|
|
162
|
+
throw new CaptureQueueWaitTimeoutError(
|
|
163
|
+
performance.now() - queued.waitStart,
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
|
|
69
167
|
let capTimer: ReturnType<typeof setTimeout> | undefined;
|
|
70
168
|
const taskPromise = Promise.resolve()
|
|
71
169
|
.then(task)
|
|
72
170
|
.finally(() => {
|
|
73
|
-
// A
|
|
171
|
+
// A capped capture releases serialization, but its detached task still
|
|
74
172
|
// counts against admission until it actually settles.
|
|
75
173
|
admittedCaptures--;
|
|
76
174
|
});
|
|
175
|
+
const cap = new Promise<void>((resolve) => {
|
|
176
|
+
capTimer = setTimeout(resolve, QUEUE_LINK_CAP_MS);
|
|
177
|
+
(capTimer as { unref?: () => void }).unref?.();
|
|
178
|
+
});
|
|
179
|
+
|
|
77
180
|
try {
|
|
78
|
-
await Promise.race([
|
|
79
|
-
taskPromise,
|
|
80
|
-
new Promise<void>((resolve) => {
|
|
81
|
-
capTimer = setTimeout(resolve, QUEUE_LINK_CAP_MS);
|
|
82
|
-
(capTimer as { unref?: () => void }).unref?.();
|
|
83
|
-
}),
|
|
84
|
-
]);
|
|
181
|
+
await Promise.race([taskPromise, cap]);
|
|
85
182
|
} finally {
|
|
86
183
|
if (capTimer) clearTimeout(capTimer);
|
|
87
|
-
|
|
184
|
+
queued.state = "settled";
|
|
185
|
+
captureRunning = false;
|
|
186
|
+
// Handoff must happen before this caller's waitUntil promise settles.
|
|
187
|
+
// Resolving first lets workerd terminate the context with the queue lock
|
|
188
|
+
// still held, permanently parking later captures in the isolate.
|
|
189
|
+
startNextCapture();
|
|
88
190
|
}
|
|
89
191
|
})();
|
|
192
|
+
|
|
193
|
+
const queue =
|
|
194
|
+
opts?.priority === "document" ? documentCaptures : navigationCaptures;
|
|
195
|
+
queue.push(queued);
|
|
196
|
+
startNextCapture();
|
|
197
|
+
return completion;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
function takeNextCapture(): QueuedCapture | undefined {
|
|
201
|
+
for (const queue of [documentCaptures, navigationCaptures]) {
|
|
202
|
+
let queued: QueuedCapture | undefined;
|
|
203
|
+
while ((queued = queue.shift())) {
|
|
204
|
+
if (queued.state === "waiting") return queued;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return undefined;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function startNextCapture(): void {
|
|
211
|
+
if (captureRunning) return;
|
|
212
|
+
const queued = takeNextCapture();
|
|
213
|
+
if (!queued) return;
|
|
214
|
+
|
|
215
|
+
captureRunning = true;
|
|
216
|
+
queued.state = "running";
|
|
217
|
+
queued.signalStart();
|
|
90
218
|
}
|
package/src/rsc/handler.ts
CHANGED
|
@@ -77,6 +77,7 @@ import {
|
|
|
77
77
|
type ActionContinuation,
|
|
78
78
|
} from "./server-action.js";
|
|
79
79
|
import { handleLoaderFetch } from "./loader-fetch.js";
|
|
80
|
+
import { applyStreamIdleTimeout } from "./stream-idle.js";
|
|
80
81
|
import {
|
|
81
82
|
checkRequestOrigin,
|
|
82
83
|
ORIGIN_CHECK_PHASE_BY_MODE,
|
|
@@ -618,88 +619,179 @@ export function createRSCHandler<
|
|
|
618
619
|
return coreRequestHandler(request, env, url, variables, nonce);
|
|
619
620
|
};
|
|
620
621
|
|
|
621
|
-
// Execute middleware chain if any, otherwise call core handler
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
622
|
+
// Execute middleware chain if any, otherwise call core handler
|
|
623
|
+
// directly; the response is finalized below, inside the response span.
|
|
624
|
+
const hasMiddleware = matchedMiddleware.length > 0;
|
|
625
|
+
const downstream = hasMiddleware
|
|
626
|
+
? await executeMiddleware(
|
|
627
|
+
matchedMiddleware,
|
|
628
|
+
request,
|
|
629
|
+
env,
|
|
630
|
+
variables,
|
|
631
|
+
coreHandler,
|
|
632
|
+
createReverseFunction(getRequiredRouteMap()),
|
|
633
|
+
)
|
|
634
|
+
: await coreHandler();
|
|
635
|
+
|
|
636
|
+
// Final response construction + host handoff, wrapped in rango.response
|
|
637
|
+
// — the explicit stream-handoff marker. The callback is synchronous, so
|
|
638
|
+
// the span ends immediately before the handler returns the response to
|
|
639
|
+
// the host; it never reads or wraps response.body. A downstream throw
|
|
640
|
+
// skips it entirely (no response exists to hand off).
|
|
641
|
+
return observePhase(PHASES.response, (responseSpan) => {
|
|
642
|
+
let response: Response;
|
|
643
|
+
if (hasMiddleware) {
|
|
644
|
+
if (
|
|
645
|
+
url.searchParams.has("_rsc_partial") ||
|
|
646
|
+
url.searchParams.has("_rsc_action")
|
|
647
|
+
) {
|
|
648
|
+
const intercepted = interceptRedirectForPartial(
|
|
649
|
+
downstream,
|
|
650
|
+
createRedirectFlightResponse,
|
|
651
|
+
{ requestOrigin: url.origin, basename: router.basename },
|
|
652
|
+
);
|
|
653
|
+
response = intercepted ?? finalizeResponse(downstream);
|
|
654
|
+
} else {
|
|
655
|
+
response = finalizeResponse(downstream);
|
|
656
|
+
}
|
|
657
|
+
} else {
|
|
658
|
+
response = downstream;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
// Finalize metrics after all middleware (including post-next work)
|
|
662
|
+
// has completed so :post spans are captured in the timeline.
|
|
663
|
+
// Handler timing parts are always emitted (even without debug metrics)
|
|
664
|
+
// so non-debug requests still get bootstrap Server-Timing entries.
|
|
665
|
+
const handlerTimingArr: string[] = variables.__handlerTiming || [];
|
|
666
|
+
// Preserve any existing Server-Timing set by response routes or middleware
|
|
667
|
+
const existingTiming = response.headers.get("Server-Timing");
|
|
668
|
+
const timingParts = existingTiming
|
|
669
|
+
? [existingTiming, ...handlerTimingArr]
|
|
670
|
+
: [...handlerTimingArr];
|
|
671
|
+
|
|
672
|
+
const metricsStore = requestContext._metricsStore;
|
|
673
|
+
if (metricsStore) {
|
|
674
|
+
// When the store was created at handler start (earlyMetricsStore),
|
|
675
|
+
// handler:total covers the full request. When ctx.debugPerformance()
|
|
676
|
+
// created the store mid-request its requestStart is now the threaded
|
|
677
|
+
// _handlerStart (== handlerStart), so both branches yield the true
|
|
678
|
+
// request entry; reading the store's own anchor keeps this correct even
|
|
679
|
+
// if a store ever lands without the threading (falls back to its start).
|
|
680
|
+
const totalStart = earlyMetricsStore
|
|
681
|
+
? handlerStart
|
|
682
|
+
: metricsStore.requestStart;
|
|
683
|
+
appendMetric(
|
|
684
|
+
metricsStore,
|
|
685
|
+
"handler:total",
|
|
686
|
+
totalStart,
|
|
687
|
+
performance.now() - totalStart,
|
|
688
|
+
);
|
|
689
|
+
const metricsTiming = buildMetricsTiming(
|
|
690
|
+
request.method,
|
|
691
|
+
url.pathname,
|
|
692
|
+
metricsStore,
|
|
693
|
+
);
|
|
694
|
+
if (metricsTiming) timingParts.push(metricsTiming);
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
const fullTiming = timingParts.join(", ");
|
|
698
|
+
if (fullTiming && !isWebSocketUpgradeResponse(response)) {
|
|
699
|
+
try {
|
|
700
|
+
response.headers.set("Server-Timing", fullTiming);
|
|
701
|
+
} catch {
|
|
702
|
+
// Immutable headers (e.g. a passed-through platform Response) — drop
|
|
703
|
+
// the timing header, never the response. Instrumentation must not
|
|
704
|
+
// 500 a request.
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
// Single open-redirect chokepoint: every response (PE, full-page,
|
|
709
|
+
// middleware short-circuit, response-route) funnels through here, so
|
|
710
|
+
// guarding browser-followed (3xx) redirects once covers them all and any
|
|
711
|
+
// future redirect exit. Soft SPA/Flight redirects are 200/204 and pass
|
|
712
|
+
// through untouched (validated client-side instead).
|
|
713
|
+
const guarded = guardOutgoingRedirect(
|
|
714
|
+
response,
|
|
715
|
+
url.origin,
|
|
716
|
+
router.basename,
|
|
631
717
|
);
|
|
632
718
|
|
|
719
|
+
// Stream-idle watchdog (opt-in via timeouts.streamIdleMs): bounds
|
|
720
|
+
// end-to-end idle flow on the streamed body — see rsc/stream-idle.ts
|
|
721
|
+
// for the semantics. Applied at this finalization chokepoint so every
|
|
722
|
+
// streaming exit is covered; websocket upgrades must never be
|
|
723
|
+
// reconstructed and bodiless responses have nothing to bound. The
|
|
724
|
+
// trip fires POST-handoff (the request ALS may be gone), so it
|
|
725
|
+
// reports via the eagerly captured surfaces — callOnError +
|
|
726
|
+
// router.telemetry directly — mirroring handleStore.onError.
|
|
727
|
+
// onTimeout does NOT apply: the response already left the handler,
|
|
728
|
+
// so no replacement Response can be served mid-stream.
|
|
729
|
+
let finalResponse = guarded;
|
|
730
|
+
const streamIdleMs = router.timeouts.streamIdleMs;
|
|
731
|
+
// Websocket check FIRST: a workerd upgrade response must never have
|
|
732
|
+
// its body getter poked (same invariant as the body_kind attribute
|
|
733
|
+
// below).
|
|
633
734
|
if (
|
|
634
|
-
|
|
635
|
-
|
|
735
|
+
isTimeoutEnabled(streamIdleMs) &&
|
|
736
|
+
!isWebSocketUpgradeResponse(guarded) &&
|
|
737
|
+
guarded.body
|
|
636
738
|
) {
|
|
637
|
-
const
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
739
|
+
const routeKey = requestContext._routeName;
|
|
740
|
+
finalResponse = applyStreamIdleTimeout(
|
|
741
|
+
guarded,
|
|
742
|
+
streamIdleMs!,
|
|
743
|
+
(tripInfo) => {
|
|
744
|
+
callOnError(tripInfo.error, "handler", {
|
|
745
|
+
request,
|
|
746
|
+
url,
|
|
747
|
+
env,
|
|
748
|
+
routeKey,
|
|
749
|
+
handledByBoundary: false,
|
|
750
|
+
metadata: {
|
|
751
|
+
timeout: true,
|
|
752
|
+
phase: "stream-idle",
|
|
753
|
+
durationMs: tripInfo.totalMs,
|
|
754
|
+
},
|
|
755
|
+
});
|
|
756
|
+
if (router.telemetry) {
|
|
757
|
+
safeEmit(resolveSink(router.telemetry), {
|
|
758
|
+
type: "request.timeout",
|
|
759
|
+
timestamp: performance.now(),
|
|
760
|
+
requestId: getRequestId(request),
|
|
761
|
+
phase: "stream-idle",
|
|
762
|
+
pathname: url.pathname,
|
|
763
|
+
routeKey,
|
|
764
|
+
durationMs: tripInfo.totalMs,
|
|
765
|
+
customHandler: false,
|
|
766
|
+
});
|
|
767
|
+
}
|
|
768
|
+
},
|
|
641
769
|
);
|
|
642
|
-
response = intercepted ?? finalizeResponse(mwResponse);
|
|
643
|
-
} else {
|
|
644
|
-
response = finalizeResponse(mwResponse);
|
|
645
770
|
}
|
|
646
|
-
} else {
|
|
647
|
-
response = await coreHandler();
|
|
648
|
-
}
|
|
649
771
|
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
? [existingTiming, ...handlerTimingArr]
|
|
659
|
-
: [...handlerTimingArr];
|
|
660
|
-
|
|
661
|
-
const metricsStore = requestContext._metricsStore;
|
|
662
|
-
if (metricsStore) {
|
|
663
|
-
// When the store was created at handler start (earlyMetricsStore),
|
|
664
|
-
// handler:total covers the full request. When ctx.debugPerformance()
|
|
665
|
-
// created the store mid-request its requestStart is now the threaded
|
|
666
|
-
// _handlerStart (== handlerStart), so both branches yield the true
|
|
667
|
-
// request entry; reading the store's own anchor keeps this correct even
|
|
668
|
-
// if a store ever lands without the threading (falls back to its start).
|
|
669
|
-
const totalStart = earlyMetricsStore
|
|
670
|
-
? handlerStart
|
|
671
|
-
: metricsStore.requestStart;
|
|
672
|
-
appendMetric(
|
|
673
|
-
metricsStore,
|
|
674
|
-
"handler:total",
|
|
675
|
-
totalStart,
|
|
676
|
-
performance.now() - totalStart,
|
|
772
|
+
// Attributes describe the response actually handed to the host (after
|
|
773
|
+
// unsafe-redirect replacement), low-cardinality only. body_kind checks
|
|
774
|
+
// the websocket marker before the body getter so a workerd upgrade
|
|
775
|
+
// Response is never poked; `.body` is a getter access, not a read of
|
|
776
|
+
// the stream.
|
|
777
|
+
responseSpan.setAttribute(
|
|
778
|
+
"http.response.status_code",
|
|
779
|
+
finalResponse.status,
|
|
677
780
|
);
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
metricsStore,
|
|
781
|
+
responseSpan.setAttribute(
|
|
782
|
+
"rango.response.mode",
|
|
783
|
+
requestContext._requestMode ?? "middleware-short-circuit",
|
|
682
784
|
);
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
// 500 a request.
|
|
694
|
-
}
|
|
695
|
-
}
|
|
696
|
-
|
|
697
|
-
// Single open-redirect chokepoint: every response (PE, full-page,
|
|
698
|
-
// middleware short-circuit, response-route) funnels through here, so
|
|
699
|
-
// guarding browser-followed (3xx) redirects once covers them all and any
|
|
700
|
-
// future redirect exit. Soft SPA/Flight redirects are 200/204 and pass
|
|
701
|
-
// through untouched (validated client-side instead).
|
|
702
|
-
return guardOutgoingRedirect(response, url.origin, router.basename);
|
|
785
|
+
responseSpan.setAttribute(
|
|
786
|
+
"rango.response.body_kind",
|
|
787
|
+
isWebSocketUpgradeResponse(finalResponse)
|
|
788
|
+
? "websocket"
|
|
789
|
+
: finalResponse.body === null
|
|
790
|
+
? "empty"
|
|
791
|
+
: "stream",
|
|
792
|
+
);
|
|
793
|
+
return finalResponse;
|
|
794
|
+
});
|
|
703
795
|
}),
|
|
704
796
|
);
|
|
705
797
|
};
|
|
@@ -755,6 +847,12 @@ export function createRSCHandler<
|
|
|
755
847
|
const classifyDur = performance.now() - classifyStart;
|
|
756
848
|
handlerTiming.push(`handler-classify;dur=${classifyDur.toFixed(2)}`);
|
|
757
849
|
|
|
850
|
+
// Stash the classified mode for the rango.response span (rango.response.mode)
|
|
851
|
+
// — the outer handler tail cannot see the plan. Stays unset when middleware
|
|
852
|
+
// short-circuits before core execution runs (reported as
|
|
853
|
+
// "middleware-short-circuit").
|
|
854
|
+
getRequestContext()._requestMode = plan.mode;
|
|
855
|
+
|
|
758
856
|
// ---- 2. Terminal plans (no execution needed) ----
|
|
759
857
|
if (plan.mode === "redirect") {
|
|
760
858
|
// Redirects are handled by the pipeline (match/matchPartial),
|
package/src/rsc/rsc-rendering.ts
CHANGED
|
@@ -79,6 +79,7 @@ import { reportCacheError } from "../cache/cache-error.js";
|
|
|
79
79
|
import type { SearchParamsFilter } from "../cache/search-params-filter.js";
|
|
80
80
|
import { INTERNAL_RANGO_DEBUG } from "../internal-debug.js";
|
|
81
81
|
import type {
|
|
82
|
+
DocumentShellCacheEntry,
|
|
82
83
|
SegmentCacheStore,
|
|
83
84
|
ShellCacheEntry,
|
|
84
85
|
ShellSnapshotRecord,
|
|
@@ -212,7 +213,14 @@ function replayableShellSnapshot(
|
|
|
212
213
|
if (!isValidShellHit(entry, buildVersion)) {
|
|
213
214
|
return { reason: "invalid-version" };
|
|
214
215
|
}
|
|
215
|
-
|
|
216
|
+
// navigationOnly entries store no document half (prelude/postponed absent),
|
|
217
|
+
// so the payload gate applies to document-snapshot entries alone. Replay
|
|
218
|
+
// consumes only the snapshot; fragment corruption inside it is caught by the
|
|
219
|
+
// consumer-side Flight decoders (SegmentFragmentDecodeError →
|
|
220
|
+
// segmentReplayCorrupt → healing capture at the document key).
|
|
221
|
+
if (!entry.navigationOnly && !hasIntactShellPayload(entry)) {
|
|
222
|
+
return { reason: "corrupt-entry" };
|
|
223
|
+
}
|
|
216
224
|
if (entry.handlerLiveHoles) return { reason: "handler-live-holes" };
|
|
217
225
|
if (entry.transitionWhen) return { reason: "transition-when" };
|
|
218
226
|
// Eligibility requires the CANONICAL doc segment record (`docKey`), not just
|
|
@@ -386,7 +394,7 @@ async function handleRscRenderingInner<TEnv>(
|
|
|
386
394
|
// build-manifest hit further down): schedule the background
|
|
387
395
|
// recapture when asked, then commit the composed response.
|
|
388
396
|
const serveHit = (
|
|
389
|
-
entry:
|
|
397
|
+
entry: DocumentShellCacheEntry,
|
|
390
398
|
revalidate: boolean | undefined,
|
|
391
399
|
): Response => {
|
|
392
400
|
if (revalidate) {
|
|
@@ -1159,7 +1167,7 @@ function serveShellHit(
|
|
|
1159
1167
|
reqCtx: RequestContext<any>,
|
|
1160
1168
|
handleStore: ReturnType<typeof getRequestContext>["_handleStore"],
|
|
1161
1169
|
ssrModule: SSRModule,
|
|
1162
|
-
entry:
|
|
1170
|
+
entry: DocumentShellCacheEntry,
|
|
1163
1171
|
descriptor: ShellCaptureDescriptor,
|
|
1164
1172
|
): Response {
|
|
1165
1173
|
const preludeBytes = base64ToBytes(entry.prelude);
|
|
@@ -25,7 +25,11 @@
|
|
|
25
25
|
* markers say whether it is still current.
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
|
-
import type {
|
|
28
|
+
import type {
|
|
29
|
+
DocumentShellCacheEntry,
|
|
30
|
+
SegmentCacheStore,
|
|
31
|
+
ShellCacheEntry,
|
|
32
|
+
} from "../cache/types.js";
|
|
29
33
|
import { sortedSearchString } from "../cache/cache-key-utils.js";
|
|
30
34
|
import type { SearchParamsFilter } from "../cache/search-params-filter.js";
|
|
31
35
|
import {
|
|
@@ -88,20 +92,29 @@ function loadManifest(): Promise<ShellManifestModule | null> {
|
|
|
88
92
|
* Spec-only keying is sound because buildVersion is process-constant on the
|
|
89
93
|
* manifest path (folded into the shipped worker; dev never loads a manifest).
|
|
90
94
|
*/
|
|
91
|
-
const validatedSpecs = new Map<string,
|
|
95
|
+
const validatedSpecs = new Map<string, ValidatedBuildShellEntry | null>();
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* A manifest record whose document half passed hasIntactShellPayload — the
|
|
99
|
+
* casts below sit directly on that runtime gate (build entries are always
|
|
100
|
+
* document-shaped; the predicate narrows entry, not the record around it).
|
|
101
|
+
*/
|
|
102
|
+
type ValidatedBuildShellEntry = BuildShellEntry & {
|
|
103
|
+
entry: DocumentShellCacheEntry;
|
|
104
|
+
};
|
|
92
105
|
|
|
93
106
|
async function validatedManifestRecord(
|
|
94
107
|
mod: ShellManifestModule,
|
|
95
108
|
spec: string,
|
|
96
109
|
buildVersion: string,
|
|
97
|
-
): Promise<
|
|
110
|
+
): Promise<ValidatedBuildShellEntry | undefined> {
|
|
98
111
|
let verdict = validatedSpecs.get(spec);
|
|
99
112
|
if (verdict === undefined) {
|
|
100
113
|
const record = (await mod.loadShellAsset(spec)).default;
|
|
101
114
|
verdict =
|
|
102
115
|
isValidShellHit(record.entry, buildVersion) &&
|
|
103
116
|
hasIntactShellPayload(record.entry)
|
|
104
|
-
? record
|
|
117
|
+
? (record as ValidatedBuildShellEntry)
|
|
105
118
|
: null;
|
|
106
119
|
validatedSpecs.set(spec, verdict);
|
|
107
120
|
}
|
|
@@ -118,7 +131,7 @@ export function resetBuildShellManifestForTests(): void {
|
|
|
118
131
|
const warnedTagCheckUnsupported = new Set<string>();
|
|
119
132
|
|
|
120
133
|
export interface BuildShellHit {
|
|
121
|
-
entry:
|
|
134
|
+
entry: DocumentShellCacheEntry;
|
|
122
135
|
/** Past createdAt + ttl: serve, but schedule the runtime recapture. */
|
|
123
136
|
stale: boolean;
|
|
124
137
|
}
|
|
@@ -273,7 +286,7 @@ export async function lookupBuildShell(
|
|
|
273
286
|
const hasManifest = globalThis.__loadShellManifestModule !== undefined;
|
|
274
287
|
if (!hasManifest && !dev) return null;
|
|
275
288
|
if (sortedSearchString(url.searchParams, filter) !== "") return null;
|
|
276
|
-
let record:
|
|
289
|
+
let record: ValidatedBuildShellEntry | undefined;
|
|
277
290
|
if (hasManifest) {
|
|
278
291
|
const mod = await loadManifest();
|
|
279
292
|
if (!mod) return null;
|
|
@@ -286,7 +299,7 @@ export async function lookupBuildShell(
|
|
|
286
299
|
fetched !== undefined &&
|
|
287
300
|
isValidShellHit(fetched.entry, buildVersion) &&
|
|
288
301
|
hasIntactShellPayload(fetched.entry)
|
|
289
|
-
? fetched
|
|
302
|
+
? (fetched as ValidatedBuildShellEntry)
|
|
290
303
|
: undefined;
|
|
291
304
|
}
|
|
292
305
|
if (!record) return null;
|