@rangojs/router 0.0.0-experimental.7a20d911 → 0.0.0-experimental.7cf4e116
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 +8 -0
- package/README.md +169 -31
- package/dist/bin/rango.js +312 -93
- package/dist/testing/vitest.js +82 -0
- package/dist/vite/index.js +2974 -1019
- package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/package.json +66 -12
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +64 -2
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +224 -32
- package/skills/caching/SKILL.md +279 -17
- package/skills/composability/SKILL.md +27 -2
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +4 -2
- package/skills/document-cache/SKILL.md +78 -55
- package/skills/handler-use/SKILL.md +364 -0
- package/skills/hooks/SKILL.md +250 -30
- package/skills/host-router/SKILL.md +83 -23
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +50 -6
- package/skills/layout/SKILL.md +35 -9
- package/skills/links/SKILL.md +247 -17
- package/skills/loader/SKILL.md +225 -9
- package/skills/middleware/SKILL.md +50 -13
- package/skills/migrate-nextjs/SKILL.md +584 -0
- package/skills/migrate-react-router/SKILL.md +771 -0
- package/skills/mime-routes/SKILL.md +28 -1
- package/skills/observability/SKILL.md +172 -0
- package/skills/parallel/SKILL.md +77 -7
- package/skills/prerender/SKILL.md +45 -43
- package/skills/rango/SKILL.md +251 -22
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +123 -48
- package/skills/route/SKILL.md +70 -5
- package/skills/router-setup/SKILL.md +29 -6
- package/skills/scripts/SKILL.md +179 -0
- package/skills/server-actions/SKILL.md +775 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/tailwind/SKILL.md +27 -3
- package/skills/testing/SKILL.md +129 -0
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +127 -0
- package/skills/testing/client-components.md +124 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +129 -0
- package/skills/testing/loader.md +128 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +121 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +84 -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/typesafety/SKILL.md +322 -29
- package/skills/use-cache/SKILL.md +46 -14
- package/skills/view-transitions/SKILL.md +294 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +0 -65
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +39 -0
- package/src/browser/connection-warmup.ts +134 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/event-controller.ts +192 -150
- package/src/browser/history-state.ts +21 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/invalidate-client-cache.ts +52 -0
- package/src/browser/navigation-bridge.ts +92 -18
- package/src/browser/navigation-client.ts +146 -69
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +33 -59
- package/src/browser/navigation-transaction.ts +9 -59
- package/src/browser/network-error-handler.ts +34 -7
- package/src/browser/partial-update.ts +131 -121
- package/src/browser/prefetch/cache.ts +205 -62
- package/src/browser/prefetch/fetch.ts +321 -37
- package/src/browser/prefetch/queue.ts +42 -8
- package/src/browser/rango-state.ts +158 -76
- package/src/browser/react/Link.tsx +60 -9
- package/src/browser/react/NavigationProvider.tsx +162 -118
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/filter-segment-order.ts +66 -7
- package/src/browser/react/index.ts +0 -48
- package/src/browser/react/location-state-shared.ts +178 -8
- package/src/browser/react/location-state.ts +39 -14
- package/src/browser/react/use-action.ts +6 -15
- package/src/browser/react/use-handle.ts +17 -14
- package/src/browser/react/use-href.tsx +8 -1
- package/src/browser/react/use-link-status.ts +33 -8
- package/src/browser/react/use-navigation.ts +32 -7
- package/src/browser/react/use-params.ts +20 -10
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +25 -3
- package/src/browser/react/use-search-params.ts +0 -5
- package/src/browser/react/use-segments.ts +11 -21
- package/src/browser/response-adapter.ts +80 -5
- package/src/browser/rsc-router.tsx +91 -24
- package/src/browser/scroll-restoration.ts +30 -17
- package/src/browser/segment-reconciler.ts +36 -14
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +214 -55
- package/src/browser/types.ts +57 -8
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +60 -35
- package/src/build/generate-route-types.ts +2 -1
- package/src/build/index.ts +8 -2
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +165 -36
- package/src/build/route-types/ast-route-extraction.ts +15 -8
- package/src/build/route-types/codegen.ts +16 -5
- package/src/build/route-types/include-resolution.ts +117 -23
- package/src/build/route-types/param-extraction.ts +6 -3
- package/src/build/route-types/per-module-writer.ts +22 -6
- package/src/build/route-types/router-processing.ts +55 -28
- package/src/build/route-types/scan-filter.ts +1 -1
- package/src/build/route-types/source-scan.ts +216 -0
- package/src/build/runtime-discovery.ts +9 -20
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-key-utils.ts +29 -13
- package/src/cache/cache-policy.ts +108 -34
- package/src/cache/cache-runtime.ts +199 -37
- package/src/cache/cache-scope.ts +188 -82
- package/src/cache/cache-tag.ts +103 -0
- package/src/cache/cf/cf-base64.ts +33 -0
- package/src/cache/cf/cf-cache-constants.ts +127 -0
- package/src/cache/cf/cf-cache-store.ts +1989 -378
- package/src/cache/cf/cf-cache-types.ts +349 -0
- package/src/cache/cf/cf-kv-utils.ts +46 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
- package/src/cache/cf/index.ts +6 -16
- package/src/cache/document-cache.ts +72 -20
- package/src/cache/handle-snapshot.ts +70 -0
- package/src/cache/index.ts +10 -20
- package/src/cache/memory-segment-store.ts +136 -37
- package/src/cache/profile-registry.ts +31 -31
- package/src/cache/read-through-swr.ts +41 -11
- package/src/cache/segment-codec.ts +9 -17
- package/src/cache/tag-invalidation.ts +230 -0
- package/src/cache/types.ts +37 -100
- package/src/client.rsc.tsx +44 -21
- package/src/client.tsx +118 -235
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +109 -0
- package/src/component-utils.ts +19 -0
- package/src/components/DefaultDocument.tsx +8 -2
- package/src/context-var.ts +18 -6
- package/src/decode-loader-results.ts +52 -0
- package/src/defer.ts +196 -0
- package/src/deps/ssr.ts +0 -1
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +30 -4
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +31 -23
- package/src/handles/MetaTags.tsx +62 -19
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +37 -8
- package/src/handles/is-thenable.ts +19 -0
- package/src/handles/meta.ts +51 -40
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +9 -60
- package/src/host/errors.ts +0 -24
- package/src/host/index.ts +8 -2
- package/src/host/pattern-matcher.ts +23 -52
- package/src/host/router.ts +107 -99
- package/src/host/testing.ts +40 -27
- package/src/host/types.ts +37 -4
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +137 -22
- package/src/index.rsc.ts +90 -11
- package/src/index.ts +129 -19
- package/src/internal-debug.ts +11 -10
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +20 -13
- package/src/loader.ts +12 -11
- package/src/missing-id-error.ts +68 -0
- package/src/outlet-context.ts +1 -1
- package/src/outlet-provider.tsx +1 -5
- package/src/prerender/param-hash.ts +16 -16
- package/src/prerender/store.ts +32 -37
- package/src/prerender.ts +61 -6
- package/src/redirect-origin.ts +100 -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 +65 -36
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +7 -72
- package/src/route-definition/dsl-helpers.ts +418 -273
- package/src/route-definition/helper-factories.ts +29 -139
- package/src/route-definition/helpers-types.ts +103 -31
- package/src/route-definition/redirect.ts +44 -11
- package/src/route-definition/resolve-handler-use.ts +12 -0
- package/src/route-definition/use-item-types.ts +32 -0
- package/src/route-map-builder.ts +0 -16
- package/src/route-types.ts +26 -41
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +73 -25
- package/src/router/error-handling.ts +45 -18
- package/src/router/find-match.ts +44 -23
- package/src/router/handler-context.ts +27 -39
- package/src/router/instrument.ts +350 -0
- package/src/router/intercept-resolution.ts +39 -20
- package/src/router/lazy-includes.ts +15 -52
- package/src/router/loader-resolution.ts +198 -92
- package/src/router/logging.ts +0 -6
- package/src/router/manifest.ts +40 -42
- package/src/router/match-api.ts +4 -23
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +58 -58
- package/src/router/match-middleware/background-revalidation.ts +6 -7
- package/src/router/match-middleware/cache-lookup.ts +164 -285
- package/src/router/match-middleware/cache-store.ts +31 -34
- package/src/router/match-middleware/intercept-resolution.ts +0 -22
- package/src/router/match-middleware/segment-resolution.ts +1 -23
- package/src/router/match-pipelines.ts +1 -42
- package/src/router/match-result.ts +87 -39
- package/src/router/metrics.ts +0 -34
- package/src/router/middleware-types.ts +7 -134
- package/src/router/middleware.ts +266 -166
- package/src/router/navigation-snapshot.ts +0 -51
- package/src/router/params-util.ts +23 -0
- package/src/router/pattern-matching.ts +132 -90
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prerender-match.ts +104 -65
- package/src/router/preview-match.ts +3 -1
- package/src/router/request-classification.ts +28 -62
- package/src/router/revalidation.ts +123 -73
- package/src/router/route-snapshot.ts +0 -1
- package/src/router/router-context.ts +3 -28
- package/src/router/router-interfaces.ts +83 -35
- package/src/router/router-options.ts +136 -5
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +98 -84
- package/src/router/segment-resolution/helpers.ts +86 -6
- package/src/router/segment-resolution/loader-cache.ts +62 -37
- package/src/router/segment-resolution/revalidation.ts +274 -319
- package/src/router/segment-resolution/static-store.ts +19 -5
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution/view-transition-default.ts +36 -0
- package/src/router/segment-resolution.ts +5 -1
- package/src/router/segment-wrappers.ts +6 -5
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/substitute-pattern-params.ts +56 -0
- package/src/router/telemetry-otel.ts +161 -199
- package/src/router/telemetry.ts +96 -19
- package/src/router/timeout.ts +0 -20
- package/src/router/tracing.ts +206 -0
- package/src/router/trie-matching.ts +163 -59
- package/src/router/types.ts +9 -63
- package/src/router/url-params.ts +44 -0
- package/src/router.ts +110 -55
- package/src/rsc/handler-context.ts +3 -2
- package/src/rsc/handler.ts +279 -224
- package/src/rsc/helpers.ts +168 -46
- package/src/rsc/index.ts +2 -5
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +127 -31
- package/src/rsc/manifest-init.ts +28 -41
- package/src/rsc/origin-guard.ts +39 -25
- package/src/rsc/progressive-enhancement.ts +73 -11
- package/src/rsc/redirect-guard.ts +99 -0
- package/src/rsc/response-cache-serve.ts +238 -0
- package/src/rsc/response-error.ts +79 -12
- package/src/rsc/response-route-handler.ts +99 -189
- package/src/rsc/rsc-rendering.ts +104 -76
- package/src/rsc/runtime-warnings.ts +23 -10
- package/src/rsc/server-action.ts +262 -113
- package/src/rsc/ssr-setup.ts +16 -0
- package/src/rsc/types.ts +24 -5
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +35 -30
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-loader-promise.ts +149 -0
- package/src/segment-system.tsx +218 -202
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +175 -53
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +80 -5
- package/src/server/handle-store.ts +40 -38
- package/src/server/loader-registry.ts +21 -42
- package/src/server/request-context.ts +258 -170
- package/src/ssr/index.tsx +21 -16
- package/src/static-handler.ts +10 -13
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +40 -0
- package/src/testing/dispatch.ts +701 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +128 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +272 -0
- package/src/testing/e2e/parity.ts +387 -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 +183 -0
- package/src/testing/index.ts +99 -0
- package/src/testing/internal/context.ts +371 -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 +343 -0
- package/src/testing/render-route.tsx +581 -0
- package/src/testing/run-loader.ts +385 -0
- package/src/testing/run-middleware.ts +205 -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 +20 -58
- package/src/theme/ThemeScript.tsx +7 -9
- package/src/theme/constants.ts +52 -13
- package/src/theme/index.ts +0 -7
- package/src/theme/theme-context.ts +1 -5
- package/src/theme/theme-script.ts +22 -21
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +0 -35
- package/src/types/cache-types.ts +13 -4
- package/src/types/error-types.ts +30 -90
- package/src/types/global-namespace.ts +54 -41
- package/src/types/handler-context.ts +109 -61
- package/src/types/index.ts +1 -10
- package/src/types/loader-types.ts +11 -9
- package/src/types/request-scope.ts +112 -0
- package/src/types/route-config.ts +6 -50
- package/src/types/route-entry.ts +11 -6
- package/src/types/segments.ts +36 -15
- package/src/urls/include-helper.ts +33 -70
- package/src/urls/index.ts +1 -11
- package/src/urls/path-helper-types.ts +49 -9
- package/src/urls/path-helper.ts +17 -106
- package/src/urls/pattern-types.ts +36 -19
- package/src/urls/response-types.ts +22 -29
- package/src/urls/type-extraction.ts +58 -139
- package/src/urls/urls-function.ts +1 -18
- package/src/use-loader.tsx +295 -107
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +8 -7
- package/src/vite/discovery/discover-routers.ts +126 -85
- package/src/vite/discovery/discovery-errors.ts +194 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +211 -142
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/state.ts +44 -0
- package/src/vite/discovery/virtual-module-codegen.ts +14 -34
- package/src/vite/index.ts +2 -0
- package/src/vite/inject-client-debug.ts +36 -0
- package/src/vite/plugin-types.ts +126 -8
- package/src/vite/plugins/cjs-to-esm.ts +16 -19
- package/src/vite/plugins/client-ref-dedup.ts +16 -11
- package/src/vite/plugins/client-ref-hashing.ts +28 -15
- 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/plugins/expose-action-id.ts +48 -95
- package/src/vite/plugins/expose-id-utils.ts +96 -51
- package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
- package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
- package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
- package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
- package/src/vite/plugins/expose-internal-ids.ts +553 -317
- package/src/vite/plugins/performance-tracks.ts +26 -25
- package/src/vite/plugins/refresh-cmd.ts +1 -1
- package/src/vite/plugins/use-cache-transform.ts +73 -83
- package/src/vite/plugins/version-injector.ts +21 -25
- package/src/vite/plugins/version-plugin.ts +37 -40
- package/src/vite/plugins/virtual-entries.ts +13 -18
- package/src/vite/rango.ts +109 -118
- package/src/vite/router-discovery.ts +777 -119
- package/src/vite/utils/ast-handler-extract.ts +26 -35
- package/src/vite/utils/banner.ts +1 -1
- package/src/vite/utils/bundle-analysis.ts +10 -15
- 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 +4 -59
- package/src/vite/utils/package-resolution.ts +20 -52
- package/src/vite/utils/prerender-utils.ts +67 -38
- package/src/vite/utils/shared-utils.ts +90 -41
- 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/browser/action-response-classifier.ts +0 -99
- package/src/browser/react/use-client-cache.ts +0 -58
- package/src/browser/shallow.ts +0 -40
- package/src/handles/index.ts +0 -7
- package/src/network-error-thrower.tsx +0 -23
- package/src/router/middleware-cookies.ts +0 -55
|
@@ -11,7 +11,15 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
14
|
+
import { parseCookiesFromHeader } from "./cookie-parse.js";
|
|
15
|
+
import type { CacheErrorCategory } from "../cache/cache-error.js";
|
|
14
16
|
import type { CookieOptions } from "../router/middleware.js";
|
|
17
|
+
import {
|
|
18
|
+
KEEP_CACHE_HEADER,
|
|
19
|
+
getRawCookieValue,
|
|
20
|
+
mintStateValue,
|
|
21
|
+
serializeStateCookie,
|
|
22
|
+
} from "../browser/cookie-name.js";
|
|
15
23
|
import type { LoaderDefinition, LoaderContext } from "../types.js";
|
|
16
24
|
import type { ScopedReverseFunction } from "../reverse.js";
|
|
17
25
|
import type {
|
|
@@ -26,13 +34,27 @@ import {
|
|
|
26
34
|
contextSet,
|
|
27
35
|
isNonCacheable,
|
|
28
36
|
} from "../context-var.js";
|
|
29
|
-
import {
|
|
37
|
+
import {
|
|
38
|
+
createHandleStore,
|
|
39
|
+
buildHandleSnapshot,
|
|
40
|
+
type HandleStore,
|
|
41
|
+
type HandleData,
|
|
42
|
+
} from "./handle-store.js";
|
|
30
43
|
import { isHandle } from "../handle.js";
|
|
31
|
-
import {
|
|
44
|
+
import { withDefer } from "../defer.js";
|
|
45
|
+
import { type MetricsStore } from "./context.js";
|
|
46
|
+
import { observePhase, PHASES } from "../router/instrument.js";
|
|
32
47
|
import { getFetchableLoader } from "./fetchable-loader-store.js";
|
|
33
48
|
import type { SegmentCacheStore } from "../cache/types.js";
|
|
34
49
|
import type { Theme, ResolvedThemeConfig } from "../theme/types.js";
|
|
35
|
-
import {
|
|
50
|
+
import type { ExecutionContext, RequestScope } from "../types/request-scope.js";
|
|
51
|
+
import type { ResolvedTracing } from "../router/tracing.js";
|
|
52
|
+
import { fireAndForgetWaitUntil } from "../types/request-scope.js";
|
|
53
|
+
import {
|
|
54
|
+
THEME_COOKIE,
|
|
55
|
+
isValidTheme,
|
|
56
|
+
warnInvalidTheme,
|
|
57
|
+
} from "../theme/constants.js";
|
|
36
58
|
import type { LocationStateEntry } from "../browser/react/location-state-shared.js";
|
|
37
59
|
import { NOCACHE_SYMBOL, assertNotInsideCacheExec } from "../cache/taint.js";
|
|
38
60
|
import { isInsideCacheScope } from "./context.js";
|
|
@@ -40,7 +62,12 @@ import {
|
|
|
40
62
|
createReverseFunction,
|
|
41
63
|
stripInternalParams,
|
|
42
64
|
} from "../router/handler-context.js";
|
|
43
|
-
import {
|
|
65
|
+
import {
|
|
66
|
+
getGlobalRouteMap,
|
|
67
|
+
isRouteRootScoped,
|
|
68
|
+
getSearchSchema,
|
|
69
|
+
} from "../route-map-builder.js";
|
|
70
|
+
import { parseSearchParams } from "../search-params.js";
|
|
44
71
|
import { invariant } from "../errors.js";
|
|
45
72
|
import { isAutoGeneratedRouteName } from "../route-name.js";
|
|
46
73
|
|
|
@@ -53,22 +80,7 @@ import { isAutoGeneratedRouteName } from "../route-name.js";
|
|
|
53
80
|
export interface RequestContext<
|
|
54
81
|
TEnv = DefaultEnv,
|
|
55
82
|
TParams = Record<string, string>,
|
|
56
|
-
> {
|
|
57
|
-
/** Platform bindings (Cloudflare env, etc.) */
|
|
58
|
-
env: TEnv;
|
|
59
|
-
/** Original HTTP request */
|
|
60
|
-
request: Request;
|
|
61
|
-
/** Parsed URL (with internal `_rsc*` params stripped) */
|
|
62
|
-
url: URL;
|
|
63
|
-
/**
|
|
64
|
-
* The original request URL with all parameters intact, including
|
|
65
|
-
* internal `_rsc*` transport params.
|
|
66
|
-
*/
|
|
67
|
-
originalUrl: URL;
|
|
68
|
-
/** URL pathname */
|
|
69
|
-
pathname: string;
|
|
70
|
-
/** URL search params (with internal `_rsc*` params stripped, same as `url.searchParams`) */
|
|
71
|
-
searchParams: URLSearchParams;
|
|
83
|
+
> extends RequestScope<TEnv> {
|
|
72
84
|
/** @internal Shared variable backing store for ctx.get()/ctx.set(). */
|
|
73
85
|
_variables: Record<string, any>;
|
|
74
86
|
/** Get a variable set by middleware */
|
|
@@ -110,6 +122,10 @@ export interface RequestContext<
|
|
|
110
122
|
setStatus(status: number): void;
|
|
111
123
|
/** @internal Set status bypassing cache-exec guard (for framework error handling) */
|
|
112
124
|
_setStatus(status: number): void;
|
|
125
|
+
/** @internal Rotate the rango state cookie (server seat of invalidateClientCache). */
|
|
126
|
+
_rotateStateCookie(): void;
|
|
127
|
+
/** @internal Set the keepClientCache() directive header on the response. */
|
|
128
|
+
_setKeepCacheDirective(): void;
|
|
113
129
|
|
|
114
130
|
/**
|
|
115
131
|
* Access loader data or push handle data.
|
|
@@ -148,26 +164,31 @@ export interface RequestContext<
|
|
|
148
164
|
/** @internal Cache store for segment caching (optional, used by CacheScope) */
|
|
149
165
|
_cacheStore?: SegmentCacheStore;
|
|
150
166
|
|
|
167
|
+
/**
|
|
168
|
+
* @internal Handler-owned registry of explicit per-scope stores from
|
|
169
|
+
* cache({ store }). Created once per createRSCHandler() and threaded into
|
|
170
|
+
* every request context, so it accumulates every explicit store the handler
|
|
171
|
+
* resolves. updateTag()/revalidateTag() iterate this set plus _cacheStore to
|
|
172
|
+
* reach every store that may hold tagged entries. The app-level store is not
|
|
173
|
+
* added here (it is always reachable via _cacheStore).
|
|
174
|
+
*/
|
|
175
|
+
_explicitTaggedStores?: Set<SegmentCacheStore>;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* @internal Union of every cache tag resolved while producing this request's
|
|
179
|
+
* response (from cache({ tags }), runtime cacheTag(), and loader cache tags).
|
|
180
|
+
* Populated at the tag-resolution sites via recordRequestTags(). Read by the
|
|
181
|
+
* document cache middleware so a full-page entry is tagged with everything its
|
|
182
|
+
* content used and can therefore be invalidated by updateTag()/revalidateTag().
|
|
183
|
+
*/
|
|
184
|
+
_requestTags: Set<string>;
|
|
185
|
+
|
|
151
186
|
/** @internal Cache profiles for "use cache" profile resolution (per-router) */
|
|
152
187
|
_cacheProfiles?: Record<
|
|
153
188
|
string,
|
|
154
189
|
import("../cache/profile-registry.js").CacheProfile
|
|
155
190
|
>;
|
|
156
191
|
|
|
157
|
-
/**
|
|
158
|
-
* Schedule work to run after the response is sent.
|
|
159
|
-
* On Cloudflare Workers, uses ctx.waitUntil().
|
|
160
|
-
* On Node.js, runs as fire-and-forget.
|
|
161
|
-
*
|
|
162
|
-
* @example
|
|
163
|
-
* ```typescript
|
|
164
|
-
* ctx.waitUntil(async () => {
|
|
165
|
-
* await cacheStore.set(key, data, ttl);
|
|
166
|
-
* });
|
|
167
|
-
* ```
|
|
168
|
-
*/
|
|
169
|
-
waitUntil(fn: () => Promise<void>): void;
|
|
170
|
-
|
|
171
192
|
/**
|
|
172
193
|
* Register a callback to run when the response is created.
|
|
173
194
|
* Callbacks are sync and receive the response. They can:
|
|
@@ -295,7 +316,9 @@ export interface RequestContext<
|
|
|
295
316
|
|
|
296
317
|
/**
|
|
297
318
|
* @internal Set to true when the matched entry tree contains any `loading()`
|
|
298
|
-
* entries (streaming).
|
|
319
|
+
* entries (streaming). On a streaming tree rendered() waits for the streaming
|
|
320
|
+
* handlers to settle (via handleStore.settled) before resolving, and the
|
|
321
|
+
* deadlock guard state is kept live until that wait completes.
|
|
299
322
|
*/
|
|
300
323
|
_treeHasStreaming?: boolean;
|
|
301
324
|
|
|
@@ -306,6 +329,31 @@ export interface RequestContext<
|
|
|
306
329
|
*/
|
|
307
330
|
_renderBarrierWaiters?: Set<string>;
|
|
308
331
|
|
|
332
|
+
/**
|
|
333
|
+
* @internal Loader IDs that handlers have started awaiting via ctx.use().
|
|
334
|
+
* Used for bidirectional deadlock detection: if a loader later calls
|
|
335
|
+
* rendered() and a handler already awaits it, we can detect the deadlock.
|
|
336
|
+
*/
|
|
337
|
+
_handlerLoaderDeps?: Set<string>;
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* @internal Cached HandleData snapshot built at barrier resolution time.
|
|
341
|
+
* Avoids rebuilding the snapshot on every loader ctx.use(handle) call.
|
|
342
|
+
*/
|
|
343
|
+
_renderBarrierHandleSnapshot?: HandleData;
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* @internal The deadlock guard window is closed (no further handler-awaits-
|
|
347
|
+
* loader cycle is possible). For non-streaming trees this is set when the
|
|
348
|
+
* barrier resolves. For streaming trees the window stays open until
|
|
349
|
+
* handleStore.settled — rendered() keeps waiting past the barrier and a
|
|
350
|
+
* loading() handler can still resume and await a still-waiting loader — so it
|
|
351
|
+
* is set only after settled. The guard (loader-resolution `setupLoaderAccess`)
|
|
352
|
+
* reads this instead of `_renderBarrierSegmentOrder` so it does not go blind
|
|
353
|
+
* during the streaming settle wait.
|
|
354
|
+
*/
|
|
355
|
+
_renderBarrierGuardClosed?: boolean;
|
|
356
|
+
|
|
309
357
|
/** @internal Per-request error dedup set for onError reporting */
|
|
310
358
|
_reportedErrors: WeakSet<object>;
|
|
311
359
|
|
|
@@ -313,9 +361,13 @@ export interface RequestContext<
|
|
|
313
361
|
* @internal Report a non-fatal background error through the router's
|
|
314
362
|
* onError callback. Wired by the RSC handler / router during request
|
|
315
363
|
* creation. Cache-runtime and other subsystems call this to surface
|
|
316
|
-
* errors without failing the response.
|
|
364
|
+
* errors without failing the response. `category` is surfaced to consumers as
|
|
365
|
+
* `metadata.category` on the onError context (phase `cache`).
|
|
317
366
|
*/
|
|
318
|
-
_reportBackgroundError?: (
|
|
367
|
+
_reportBackgroundError?: (
|
|
368
|
+
error: unknown,
|
|
369
|
+
category: CacheErrorCategory,
|
|
370
|
+
) => void;
|
|
319
371
|
|
|
320
372
|
/** @internal Per-request debug performance override (set via ctx.debugPerformance()) */
|
|
321
373
|
_debugPerformance?: boolean;
|
|
@@ -323,6 +375,9 @@ export interface RequestContext<
|
|
|
323
375
|
/** @internal Request-scoped performance metrics store */
|
|
324
376
|
_metricsStore?: MetricsStore;
|
|
325
377
|
|
|
378
|
+
/** @internal Resolved platform phase-span tracing for this request (Cloudflare or OTel) */
|
|
379
|
+
_tracing?: ResolvedTracing;
|
|
380
|
+
|
|
326
381
|
/** @internal Router basename for this request (used by redirect()) */
|
|
327
382
|
_basename?: string;
|
|
328
383
|
|
|
@@ -331,6 +386,15 @@ export interface RequestContext<
|
|
|
331
386
|
* to avoid a second resolveRoute call. Cleared on HMR invalidation.
|
|
332
387
|
*/
|
|
333
388
|
_classifiedRoute?: import("../router/route-snapshot.js").RouteSnapshot;
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* @internal Coarse route-level cache signal for the X-Rango-Cache debug
|
|
392
|
+
* header. Populated by match/matchPartial only when the debug cache signal
|
|
393
|
+
* gate is enabled (debugCacheSignal option or RANGO_TEST_SIGNALS=1). Read by
|
|
394
|
+
* the response-finalization path (createResponseWithMergedHeaders). Undefined
|
|
395
|
+
* when the gate is off, so no header is emitted.
|
|
396
|
+
*/
|
|
397
|
+
_cacheSignal?: import("../router/telemetry.js").CacheSegmentSignal[];
|
|
334
398
|
}
|
|
335
399
|
|
|
336
400
|
/**
|
|
@@ -350,6 +414,8 @@ export type PublicRequestContext<
|
|
|
350
414
|
| "deleteCookie"
|
|
351
415
|
| "_handleStore"
|
|
352
416
|
| "_cacheStore"
|
|
417
|
+
| "_explicitTaggedStores"
|
|
418
|
+
| "_requestTags"
|
|
353
419
|
| "_cacheProfiles"
|
|
354
420
|
| "_onResponseCallbacks"
|
|
355
421
|
| "_themeConfig"
|
|
@@ -362,13 +428,19 @@ export type PublicRequestContext<
|
|
|
362
428
|
| "_renderBarrierSegmentOrder"
|
|
363
429
|
| "_treeHasStreaming"
|
|
364
430
|
| "_renderBarrierWaiters"
|
|
431
|
+
| "_handlerLoaderDeps"
|
|
432
|
+
| "_renderBarrierHandleSnapshot"
|
|
433
|
+
| "_renderBarrierGuardClosed"
|
|
365
434
|
| "_reportBackgroundError"
|
|
366
435
|
| "_debugPerformance"
|
|
367
436
|
| "_metricsStore"
|
|
368
437
|
| "_basename"
|
|
369
438
|
| "_setStatus"
|
|
439
|
+
| "_rotateStateCookie"
|
|
440
|
+
| "_setKeepCacheDirective"
|
|
370
441
|
| "_variables"
|
|
371
442
|
| "_classifiedRoute"
|
|
443
|
+
| "_cacheSignal"
|
|
372
444
|
| "res"
|
|
373
445
|
>;
|
|
374
446
|
|
|
@@ -420,6 +492,7 @@ export function _getRequestContext<TEnv = DefaultEnv>():
|
|
|
420
492
|
export function setRequestContextParams(
|
|
421
493
|
params: Record<string, string>,
|
|
422
494
|
routeName?: string,
|
|
495
|
+
routeMap?: Record<string, string>,
|
|
423
496
|
): void {
|
|
424
497
|
const ctx = requestContextStorage.getStore();
|
|
425
498
|
if (ctx) {
|
|
@@ -432,9 +505,13 @@ export function setRequestContextParams(
|
|
|
432
505
|
: undefined
|
|
433
506
|
) as DefaultRouteName | undefined;
|
|
434
507
|
}
|
|
435
|
-
// Update reverse with scoped resolution now that route is known
|
|
508
|
+
// Update reverse with scoped resolution now that route is known. Production
|
|
509
|
+
// omits routeMap and uses the global map (routes are registered globally);
|
|
510
|
+
// the testing primitives (renderToFlightString/renderServerTree) pass a
|
|
511
|
+
// scoped routeMap so `ctx.reverse` is not order-dependent on whatever router
|
|
512
|
+
// registered last.
|
|
436
513
|
ctx.reverse = createReverseFunction(
|
|
437
|
-
getGlobalRouteMap(),
|
|
514
|
+
routeMap ?? getGlobalRouteMap(),
|
|
438
515
|
routeName,
|
|
439
516
|
params,
|
|
440
517
|
routeName ? isRouteRootScoped(routeName) : undefined,
|
|
@@ -468,23 +545,7 @@ export function getLocationState(): LocationStateEntry[] | undefined {
|
|
|
468
545
|
return ctx?._locationState;
|
|
469
546
|
}
|
|
470
547
|
|
|
471
|
-
|
|
472
|
-
* Get the current request context, throwing if not available
|
|
473
|
-
* @deprecated Use getRequestContext() directly — it now throws if outside context
|
|
474
|
-
*/
|
|
475
|
-
export function requireRequestContext<
|
|
476
|
-
TEnv = DefaultEnv,
|
|
477
|
-
>(): RequestContext<TEnv> {
|
|
478
|
-
return getRequestContext<TEnv>();
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
/**
|
|
482
|
-
* Cloudflare Workers ExecutionContext (subset we need)
|
|
483
|
-
*/
|
|
484
|
-
export interface ExecutionContext {
|
|
485
|
-
waitUntil(promise: Promise<any>): void;
|
|
486
|
-
passThroughOnException(): void;
|
|
487
|
-
}
|
|
548
|
+
export type { ExecutionContext };
|
|
488
549
|
|
|
489
550
|
/**
|
|
490
551
|
* Options for creating a request context
|
|
@@ -498,6 +559,11 @@ export interface CreateRequestContextOptions<TEnv> {
|
|
|
498
559
|
initialResponse?: Response;
|
|
499
560
|
/** Optional cache store for segment caching (used by CacheScope) */
|
|
500
561
|
cacheStore?: SegmentCacheStore;
|
|
562
|
+
/**
|
|
563
|
+
* Handler-owned registry of explicit per-scope stores for cross-store tag
|
|
564
|
+
* invalidation. Created once per handler, reused across requests.
|
|
565
|
+
*/
|
|
566
|
+
explicitTaggedStores?: Set<SegmentCacheStore>;
|
|
501
567
|
/** Optional cache profiles for "use cache" resolution (per-router) */
|
|
502
568
|
cacheProfiles?: Record<
|
|
503
569
|
string,
|
|
@@ -507,6 +573,10 @@ export interface CreateRequestContextOptions<TEnv> {
|
|
|
507
573
|
executionContext?: ExecutionContext;
|
|
508
574
|
/** Optional theme configuration (enables ctx.theme and ctx.setTheme) */
|
|
509
575
|
themeConfig?: ResolvedThemeConfig | null;
|
|
576
|
+
/** Resolved rango state cookie name, for the server seat of invalidateClientCache(). */
|
|
577
|
+
stateCookieName?: string;
|
|
578
|
+
/** Build version, used as the prefix of a server-rotated rango state value. */
|
|
579
|
+
version?: string;
|
|
510
580
|
}
|
|
511
581
|
|
|
512
582
|
/**
|
|
@@ -527,15 +597,17 @@ export function createRequestContext<TEnv>(
|
|
|
527
597
|
variables,
|
|
528
598
|
initialResponse,
|
|
529
599
|
cacheStore,
|
|
600
|
+
explicitTaggedStores,
|
|
530
601
|
cacheProfiles,
|
|
531
602
|
executionContext,
|
|
532
603
|
themeConfig,
|
|
604
|
+
stateCookieName,
|
|
605
|
+
version: stateVersion,
|
|
533
606
|
} = options;
|
|
534
607
|
const cookieHeader = request.headers.get("Cookie");
|
|
608
|
+
let rangoStateRotated = false;
|
|
535
609
|
let parsedCookies: Record<string, string> | null = null;
|
|
536
610
|
|
|
537
|
-
// Create stub response for collecting headers/cookies.
|
|
538
|
-
// All cookie/header mutations go here; cookie reads derive from it.
|
|
539
611
|
let stubResponse = initialResponse
|
|
540
612
|
? new Response(null, {
|
|
541
613
|
status: initialResponse.status,
|
|
@@ -544,11 +616,9 @@ export function createRequestContext<TEnv>(
|
|
|
544
616
|
})
|
|
545
617
|
: new Response(null, { status: 200 });
|
|
546
618
|
|
|
547
|
-
// Create handle store and loader memoization for this request
|
|
548
619
|
const handleStore = createHandleStore();
|
|
549
620
|
const loaderPromises = new Map<string, Promise<any>>();
|
|
550
621
|
|
|
551
|
-
// Lazy parse cookies from the original Cookie header
|
|
552
622
|
const getParsedCookies = (): Record<string, string> => {
|
|
553
623
|
if (!parsedCookies) {
|
|
554
624
|
parsedCookies = parseCookiesFromHeader(cookieHeader);
|
|
@@ -556,7 +626,6 @@ export function createRequestContext<TEnv>(
|
|
|
556
626
|
return parsedCookies;
|
|
557
627
|
};
|
|
558
628
|
|
|
559
|
-
// Cached response cookie mutations — invalidated on setCookie/deleteCookie/setTheme
|
|
560
629
|
let responseCookieCache: Map<string, string | null> | null = null;
|
|
561
630
|
const getResponseCookies = (): Map<string, string | null> => {
|
|
562
631
|
if (!responseCookieCache) {
|
|
@@ -568,8 +637,6 @@ export function createRequestContext<TEnv>(
|
|
|
568
637
|
responseCookieCache = null;
|
|
569
638
|
};
|
|
570
639
|
|
|
571
|
-
// Guard: throw if a response-level side effect is called inside a cache() scope.
|
|
572
|
-
// Uses ALS to detect the scope (set during segment resolution).
|
|
573
640
|
function assertNotInsideCacheScopeALS(methodName: string): void {
|
|
574
641
|
if (isInsideCacheScope()) {
|
|
575
642
|
throw new Error(
|
|
@@ -580,8 +647,7 @@ export function createRequestContext<TEnv>(
|
|
|
580
647
|
}
|
|
581
648
|
}
|
|
582
649
|
|
|
583
|
-
//
|
|
584
|
-
// The stub IS the source of truth for same-request mutations.
|
|
650
|
+
// Response stub Set-Cookie wins, then original header (source of truth for mutations).
|
|
585
651
|
const effectiveCookie = (name: string): string | undefined => {
|
|
586
652
|
const mutations = getResponseCookies();
|
|
587
653
|
if (mutations.has(name)) {
|
|
@@ -591,14 +657,11 @@ export function createRequestContext<TEnv>(
|
|
|
591
657
|
return getParsedCookies()[name];
|
|
592
658
|
};
|
|
593
659
|
|
|
594
|
-
// Theme helpers (only used when themeConfig is provided)
|
|
595
660
|
const getTheme = (): Theme | undefined => {
|
|
596
661
|
if (!themeConfig) return undefined;
|
|
597
662
|
|
|
598
|
-
// Use overlay-aware read so setTheme() in the same request is reflected
|
|
599
663
|
const stored = effectiveCookie(themeConfig.storageKey);
|
|
600
664
|
if (stored) {
|
|
601
|
-
// Validate stored value
|
|
602
665
|
if (stored === "system" && themeConfig.enableSystem) {
|
|
603
666
|
return "system";
|
|
604
667
|
}
|
|
@@ -612,15 +675,15 @@ export function createRequestContext<TEnv>(
|
|
|
612
675
|
const setTheme = (theme: Theme): void => {
|
|
613
676
|
if (!themeConfig) return;
|
|
614
677
|
|
|
615
|
-
//
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
678
|
+
// Shared guard (isValidTheme): reject any value not in the configured theme
|
|
679
|
+
// set, AND reject "system" when system detection is off — a cookie of
|
|
680
|
+
// theme=system with enableSystem:false would re-apply a bogus class="system"
|
|
681
|
+
// on the next SSR.
|
|
682
|
+
if (!isValidTheme(theme, themeConfig)) {
|
|
683
|
+
warnInvalidTheme(theme, themeConfig);
|
|
620
684
|
return;
|
|
621
685
|
}
|
|
622
686
|
|
|
623
|
-
// Write to stub — effectiveCookie() will pick it up on next read
|
|
624
687
|
stubResponse.headers.append(
|
|
625
688
|
"Set-Cookie",
|
|
626
689
|
serializeCookieValue(themeConfig.storageKey, theme, {
|
|
@@ -632,10 +695,8 @@ export function createRequestContext<TEnv>(
|
|
|
632
695
|
invalidateResponseCookieCache();
|
|
633
696
|
};
|
|
634
697
|
|
|
635
|
-
// Strip internal _rsc* params so userland sees a clean URL.
|
|
636
698
|
const cleanUrl = stripInternalParams(url);
|
|
637
699
|
|
|
638
|
-
// Build the context object first (without use), then add use
|
|
639
700
|
const ctx: RequestContext<TEnv> = {
|
|
640
701
|
env,
|
|
641
702
|
request,
|
|
@@ -721,6 +782,45 @@ export function createRequestContext<TEnv>(
|
|
|
721
782
|
stubResponse.headers.set(name, value);
|
|
722
783
|
},
|
|
723
784
|
|
|
785
|
+
// Rotate the rango state cookie for the responding client (the server seat
|
|
786
|
+
// of invalidateClientCache). Writes ONE Set-Cookie per request with the
|
|
787
|
+
// value {version}:{timestamp}; the `:` stays raw (the cookie-name.ts
|
|
788
|
+
// serializer), not the URL-encoded form serializeCookieValue would produce.
|
|
789
|
+
// The timestamp is strictly greater than the client's current one (inbound
|
|
790
|
+
// X-Rango-State), so a same-millisecond server rotation still differs from
|
|
791
|
+
// the client value and the divergence observer fires.
|
|
792
|
+
_rotateStateCookie(): void {
|
|
793
|
+
if (rangoStateRotated) return;
|
|
794
|
+
rangoStateRotated = true;
|
|
795
|
+
if (!stateCookieName) return;
|
|
796
|
+
// The client's current value, for the monotonic guard: prefer the
|
|
797
|
+
// X-Rango-State header (router navigation/prefetch fetches send it), but
|
|
798
|
+
// fall back to the request's rango state cookie — action POSTs / plain
|
|
799
|
+
// app fetch()s carry no router header yet DO send the cookie. Without the
|
|
800
|
+
// fallback, prevTs stays 0 and a same-ms mint can equal the client value,
|
|
801
|
+
// leaving the divergence observer silent. `|| null` so an empty header
|
|
802
|
+
// ('' from proxy normalization) falls through instead of short-circuiting.
|
|
803
|
+
// getRawCookieValue reads the cookie undecoded (the wire value
|
|
804
|
+
// decodeStateValue decodes exactly once) AND is the same parser the client
|
|
805
|
+
// mirror uses, so both seats read the same jar entry.
|
|
806
|
+
const prevRaw =
|
|
807
|
+
(request.headers.get("x-rango-state") || null) ??
|
|
808
|
+
getRawCookieValue(cookieHeader, stateCookieName);
|
|
809
|
+
const value = mintStateValue(stateVersion ?? "0", prevRaw);
|
|
810
|
+
stubResponse.headers.append(
|
|
811
|
+
"Set-Cookie",
|
|
812
|
+
serializeStateCookie(stateCookieName, value, url.protocol === "https:"),
|
|
813
|
+
);
|
|
814
|
+
invalidateResponseCookieCache();
|
|
815
|
+
},
|
|
816
|
+
|
|
817
|
+
// Set the keepClientCache() directive header. The action bridge reads it on
|
|
818
|
+
// the response and suppresses its automatic invalidation. `.set` makes this
|
|
819
|
+
// idempotent (one header regardless of call count).
|
|
820
|
+
_setKeepCacheDirective(): void {
|
|
821
|
+
stubResponse.headers.set(KEEP_CACHE_HEADER, "1");
|
|
822
|
+
},
|
|
823
|
+
|
|
724
824
|
setStatus(status: number): void {
|
|
725
825
|
assertNotInsideCacheExec(ctx, "setStatus");
|
|
726
826
|
assertNotInsideCacheScopeALS("setStatus");
|
|
@@ -737,27 +837,30 @@ export function createRequestContext<TEnv>(
|
|
|
737
837
|
});
|
|
738
838
|
},
|
|
739
839
|
|
|
740
|
-
// Placeholder - will be replaced below
|
|
741
840
|
use: null as any,
|
|
742
841
|
|
|
743
842
|
method: request.method,
|
|
744
843
|
|
|
745
844
|
_handleStore: handleStore,
|
|
746
845
|
_cacheStore: cacheStore,
|
|
846
|
+
_explicitTaggedStores: explicitTaggedStores,
|
|
847
|
+
_requestTags: new Set<string>(),
|
|
747
848
|
_cacheProfiles: cacheProfiles,
|
|
748
849
|
|
|
749
850
|
waitUntil(fn: () => Promise<void>): void {
|
|
750
851
|
if (executionContext?.waitUntil) {
|
|
751
|
-
//
|
|
752
|
-
|
|
852
|
+
// Wrap in Promise.resolve().then(fn) so a SYNCHRONOUS throw in a
|
|
853
|
+
// non-async callback becomes a rejected promise handed to the host's
|
|
854
|
+
// waitUntil (logged as a background failure), instead of escaping into
|
|
855
|
+
// the request flow. Mirrors fireAndForgetWaitUntil's deferral.
|
|
856
|
+
executionContext.waitUntil(Promise.resolve().then(fn));
|
|
753
857
|
} else {
|
|
754
|
-
|
|
755
|
-
fn().catch((err) =>
|
|
756
|
-
console.error("[waitUntil] Background task failed:", err),
|
|
757
|
-
);
|
|
858
|
+
fireAndForgetWaitUntil(fn);
|
|
758
859
|
}
|
|
759
860
|
},
|
|
760
861
|
|
|
862
|
+
executionContext,
|
|
863
|
+
|
|
761
864
|
_onResponseCallbacks: [],
|
|
762
865
|
|
|
763
866
|
onResponse(callback: (response: Response) => Response): void {
|
|
@@ -766,7 +869,6 @@ export function createRequestContext<TEnv>(
|
|
|
766
869
|
this._onResponseCallbacks.push(callback);
|
|
767
870
|
},
|
|
768
871
|
|
|
769
|
-
// Theme properties (only set when themeConfig is provided)
|
|
770
872
|
get theme() {
|
|
771
873
|
return themeConfig ? getTheme() : undefined;
|
|
772
874
|
},
|
|
@@ -790,35 +892,46 @@ export function createRequestContext<TEnv>(
|
|
|
790
892
|
_reportedErrors: new WeakSet<object>(),
|
|
791
893
|
_metricsStore: undefined,
|
|
792
894
|
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
_resolveRenderBarrier: null as any, // set below
|
|
895
|
+
_renderBarrier: null as any,
|
|
896
|
+
_resolveRenderBarrier: null as any,
|
|
796
897
|
_renderBarrierSegmentOrder: undefined,
|
|
797
898
|
|
|
798
899
|
reverse: createReverseFunction(getGlobalRouteMap(), undefined, {}),
|
|
799
900
|
};
|
|
800
901
|
|
|
801
|
-
// Lazy
|
|
802
|
-
// calls rendered(). Requests that don't use rendered() pay zero cost.
|
|
902
|
+
// Lazy allocation: only create Promise when a loader calls rendered().
|
|
803
903
|
let barrierResolved = false;
|
|
804
904
|
let resolveBarrier: (() => void) | undefined;
|
|
805
|
-
ctx._renderBarrier = null as any;
|
|
905
|
+
ctx._renderBarrier = null as any;
|
|
806
906
|
ctx._resolveRenderBarrier = (
|
|
807
907
|
segments: Array<{ type: string; id: string }>,
|
|
808
908
|
) => {
|
|
809
909
|
if (barrierResolved) return;
|
|
810
910
|
barrierResolved = true;
|
|
811
|
-
|
|
911
|
+
const segOrder = segments
|
|
812
912
|
.filter((s) => s.type !== "loader")
|
|
813
913
|
.map((s) => s.id);
|
|
814
|
-
ctx.
|
|
914
|
+
ctx._renderBarrierSegmentOrder = segOrder;
|
|
915
|
+
|
|
916
|
+
const closeGuard = () => {
|
|
917
|
+
ctx._renderBarrierWaiters = undefined;
|
|
918
|
+
ctx._handlerLoaderDeps = undefined;
|
|
919
|
+
ctx._renderBarrierGuardClosed = true;
|
|
920
|
+
};
|
|
921
|
+
|
|
922
|
+
if (ctx._treeHasStreaming) {
|
|
923
|
+
handleStore.settled.then(closeGuard);
|
|
924
|
+
} else {
|
|
925
|
+
ctx._renderBarrierHandleSnapshot = buildHandleSnapshot(
|
|
926
|
+
handleStore,
|
|
927
|
+
segOrder,
|
|
928
|
+
);
|
|
929
|
+
closeGuard();
|
|
930
|
+
}
|
|
815
931
|
if (resolveBarrier) resolveBarrier();
|
|
816
932
|
};
|
|
817
933
|
Object.defineProperty(ctx, "_renderBarrier", {
|
|
818
934
|
get() {
|
|
819
|
-
// Barrier already resolved (cache/prerender hit) or first lazy access.
|
|
820
|
-
// Either way, replace the getter with a concrete value to avoid
|
|
821
|
-
// repeated Promise.resolve() allocations on subsequent reads.
|
|
822
935
|
const p = barrierResolved
|
|
823
936
|
? Promise.resolve()
|
|
824
937
|
: new Promise<void>((resolve) => {
|
|
@@ -834,32 +947,33 @@ export function createRequestContext<TEnv>(
|
|
|
834
947
|
configurable: true,
|
|
835
948
|
});
|
|
836
949
|
|
|
837
|
-
// Now create use() with access to ctx
|
|
838
950
|
ctx.use = createUseFunction({
|
|
839
951
|
handleStore,
|
|
840
952
|
loaderPromises,
|
|
841
953
|
getContext: () => ctx,
|
|
842
954
|
});
|
|
843
955
|
|
|
844
|
-
// Brand with taint symbol so "use cache" excludes ctx from cache keys
|
|
845
956
|
(ctx as any)[NOCACHE_SYMBOL] = true;
|
|
846
957
|
return ctx;
|
|
847
958
|
}
|
|
848
959
|
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
*
|
|
854
|
-
|
|
855
|
-
|
|
960
|
+
// Capture the Max-Age value so it can be parsed numerically. A leading zero
|
|
961
|
+
// (Max-Age=05) is a non-zero lifetime, not a deletion; only a value that parses
|
|
962
|
+
// to <= 0 marks a cookie for deletion. Pattern-matching a leading "0" misread
|
|
963
|
+
// zero-prefixed values like 05 / 010 as deletions.
|
|
964
|
+
const MAX_AGE_RE = /;\s*Max-Age\s*=\s*(-?\d+)/i;
|
|
965
|
+
|
|
966
|
+
function isCookieDeletion(header: string): boolean {
|
|
967
|
+
const m = MAX_AGE_RE.exec(header);
|
|
968
|
+
if (!m) return false;
|
|
969
|
+
return Number(m[1]) <= 0;
|
|
970
|
+
}
|
|
856
971
|
|
|
857
972
|
function parseResponseCookies(response: Response): Map<string, string | null> {
|
|
858
973
|
const result = new Map<string, string | null>();
|
|
859
974
|
const setCookies = response.headers.getSetCookie();
|
|
860
975
|
|
|
861
976
|
for (const header of setCookies) {
|
|
862
|
-
// First segment before ';' is the name=value pair
|
|
863
977
|
const semiIdx = header.indexOf(";");
|
|
864
978
|
const pair = semiIdx === -1 ? header : header.substring(0, semiIdx);
|
|
865
979
|
const eqIdx = pair.indexOf("=");
|
|
@@ -871,49 +985,22 @@ function parseResponseCookies(response: Response): Map<string, string | null> {
|
|
|
871
985
|
name = decodeURIComponent(pair.substring(0, eqIdx).trim());
|
|
872
986
|
value = decodeURIComponent(pair.substring(eqIdx + 1).trim());
|
|
873
987
|
} catch {
|
|
874
|
-
// Malformed encoding — skip this entry
|
|
875
988
|
continue;
|
|
876
989
|
}
|
|
877
990
|
|
|
878
|
-
|
|
879
|
-
const isDeleted = MAX_AGE_ZERO_RE.test(header);
|
|
991
|
+
const isDeleted = isCookieDeletion(header);
|
|
880
992
|
result.set(name, isDeleted ? null : value);
|
|
881
993
|
}
|
|
882
994
|
|
|
883
995
|
return result;
|
|
884
996
|
}
|
|
885
997
|
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
cookieHeader: string | null,
|
|
891
|
-
): Record<string, string> {
|
|
892
|
-
if (!cookieHeader) return {};
|
|
893
|
-
|
|
894
|
-
const cookies: Record<string, string> = {};
|
|
895
|
-
const pairs = cookieHeader.split(";");
|
|
896
|
-
|
|
897
|
-
for (const pair of pairs) {
|
|
898
|
-
const [name, ...rest] = pair.trim().split("=");
|
|
899
|
-
if (name) {
|
|
900
|
-
const raw = rest.join("=");
|
|
901
|
-
try {
|
|
902
|
-
cookies[name] = decodeURIComponent(raw);
|
|
903
|
-
} catch {
|
|
904
|
-
// Malformed percent-encoded value (e.g. %zz, %2) - fall back to raw value
|
|
905
|
-
cookies[name] = raw;
|
|
906
|
-
}
|
|
907
|
-
}
|
|
908
|
-
}
|
|
998
|
+
// Re-exported for unit tests and the existing import path. The implementation
|
|
999
|
+
// lives in the dependency-free ./cookie-parse leaf so consumers (e.g. the host
|
|
1000
|
+
// dispatcher) can share it without pulling this module's request-context graph.
|
|
1001
|
+
export { parseCookiesFromHeader };
|
|
909
1002
|
|
|
910
|
-
|
|
911
|
-
}
|
|
912
|
-
|
|
913
|
-
/**
|
|
914
|
-
* Serialize a cookie for Set-Cookie header
|
|
915
|
-
*/
|
|
916
|
-
function serializeCookieValue(
|
|
1003
|
+
export function serializeCookieValue(
|
|
917
1004
|
name: string,
|
|
918
1005
|
value: string,
|
|
919
1006
|
options: CookieOptions = {},
|
|
@@ -940,20 +1027,12 @@ export interface CreateUseFunctionOptions<TEnv> {
|
|
|
940
1027
|
getContext: () => RequestContext<TEnv>;
|
|
941
1028
|
}
|
|
942
1029
|
|
|
943
|
-
/**
|
|
944
|
-
* Create the use() function for loader and handle composition.
|
|
945
|
-
*
|
|
946
|
-
* This is the unified implementation used by both RequestContext and HandlerContext.
|
|
947
|
-
* - For loaders: executes and memoizes loader functions
|
|
948
|
-
* - For handles: returns a push function to add handle data
|
|
949
|
-
*/
|
|
950
1030
|
export function createUseFunction<TEnv>(
|
|
951
1031
|
options: CreateUseFunctionOptions<TEnv>,
|
|
952
1032
|
): RequestContext["use"] {
|
|
953
1033
|
const { handleStore, loaderPromises, getContext } = options;
|
|
954
1034
|
|
|
955
1035
|
return ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
|
|
956
|
-
// Handle case: return a push function
|
|
957
1036
|
if (isHandle(item)) {
|
|
958
1037
|
const handle = item;
|
|
959
1038
|
const ctx = getContext();
|
|
@@ -966,30 +1045,24 @@ export function createUseFunction<TEnv>(
|
|
|
966
1045
|
);
|
|
967
1046
|
}
|
|
968
1047
|
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
// Push directly - promises will be serialized by RSC and streamed
|
|
980
|
-
handleStore.push(handle.$$id, segmentId, valueOrPromise);
|
|
981
|
-
};
|
|
1048
|
+
return withDefer(
|
|
1049
|
+
(dataOrFn: unknown | Promise<unknown> | (() => Promise<unknown>)) => {
|
|
1050
|
+
const valueOrPromise =
|
|
1051
|
+
typeof dataOrFn === "function"
|
|
1052
|
+
? (dataOrFn as () => Promise<unknown>)()
|
|
1053
|
+
: dataOrFn;
|
|
1054
|
+
|
|
1055
|
+
handleStore.push(handle.$$id, segmentId, valueOrPromise);
|
|
1056
|
+
},
|
|
1057
|
+
);
|
|
982
1058
|
}
|
|
983
1059
|
|
|
984
|
-
// Loader case
|
|
985
1060
|
const loader = item as LoaderDefinition<any, any>;
|
|
986
1061
|
|
|
987
|
-
// Return cached promise if already started
|
|
988
1062
|
if (loaderPromises.has(loader.$$id)) {
|
|
989
1063
|
return loaderPromises.get(loader.$$id);
|
|
990
1064
|
}
|
|
991
1065
|
|
|
992
|
-
// Get loader function - either from loader object or fetchable registry
|
|
993
1066
|
let loaderFn = loader.fn;
|
|
994
1067
|
if (!loaderFn) {
|
|
995
1068
|
const fetchable = getFetchableLoader(loader.$$id);
|
|
@@ -1006,21 +1079,34 @@ export function createUseFunction<TEnv>(
|
|
|
1006
1079
|
|
|
1007
1080
|
const ctx = getContext();
|
|
1008
1081
|
|
|
1009
|
-
//
|
|
1082
|
+
// Build the typed ctx.search the same way the render path
|
|
1083
|
+
// (createHandlerContext) and the fetchable-loader path (loader-fetch.ts) do:
|
|
1084
|
+
// parse the route's search schema over the cleaned searchParams. The base
|
|
1085
|
+
// RequestContext carries no `search` field, so reading `(ctx as any).search`
|
|
1086
|
+
// here always yielded {} — dropping typed search for action/dispatch loaders.
|
|
1087
|
+
const searchSchema = ctx._routeName
|
|
1088
|
+
? getSearchSchema(ctx._routeName)
|
|
1089
|
+
: undefined;
|
|
1090
|
+
const loaderSearch = searchSchema
|
|
1091
|
+
? parseSearchParams(ctx.searchParams, searchSchema)
|
|
1092
|
+
: {};
|
|
1093
|
+
|
|
1010
1094
|
const loaderCtx: LoaderContext<Record<string, string | undefined>, TEnv> = {
|
|
1011
1095
|
params: ctx.params,
|
|
1012
1096
|
routeParams: (ctx.params ?? {}) as Record<string, string>,
|
|
1013
1097
|
request: ctx.request,
|
|
1014
1098
|
searchParams: ctx.searchParams,
|
|
1015
|
-
search:
|
|
1099
|
+
search: loaderSearch,
|
|
1016
1100
|
pathname: ctx.pathname,
|
|
1017
1101
|
url: ctx.url,
|
|
1102
|
+
originalUrl: ctx.originalUrl,
|
|
1018
1103
|
env: ctx.env as any,
|
|
1104
|
+
waitUntil: ctx.waitUntil.bind(ctx),
|
|
1105
|
+
executionContext: ctx.executionContext,
|
|
1019
1106
|
get: ctx.get as any,
|
|
1020
1107
|
use: (<TDep, TDepParams = any>(
|
|
1021
1108
|
dep: LoaderDefinition<TDep, TDepParams>,
|
|
1022
1109
|
): Promise<TDep> => {
|
|
1023
|
-
// Recursive call - will start dep loader if not already started
|
|
1024
1110
|
return ctx.use(dep);
|
|
1025
1111
|
}) as LoaderContext["use"],
|
|
1026
1112
|
method: "GET",
|
|
@@ -1039,12 +1125,14 @@ export function createUseFunction<TEnv>(
|
|
|
1039
1125
|
},
|
|
1040
1126
|
};
|
|
1041
1127
|
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1128
|
+
// Meter through the same unified phase API as the loader-resolution funnel
|
|
1129
|
+
// (observePhase), so a loader resolved via this base request-context ctx.use
|
|
1130
|
+
// co-emits the "loader:<id>" perf metric AND the "rango.loader" span — no
|
|
1131
|
+
// drift between the two ctx.use implementations.
|
|
1132
|
+
const promise = observePhase(PHASES.loader(loader.$$id), () =>
|
|
1133
|
+
Promise.resolve(loaderFn(loaderCtx)),
|
|
1134
|
+
);
|
|
1046
1135
|
|
|
1047
|
-
// Memoize for subsequent calls
|
|
1048
1136
|
loaderPromises.set(loader.$$id, promise);
|
|
1049
1137
|
|
|
1050
1138
|
return promise;
|