@rangojs/router 0.0.0-experimental.ce770c9a → 0.0.0-experimental.d5d3070a
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 +245 -49
- package/dist/bin/rango.js +433 -131
- package/dist/testing/vitest.js +82 -0
- package/dist/vite/index.js +3376 -1102
- 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 +247 -23
- package/skills/caching/SKILL.md +281 -11
- 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 +249 -17
- package/skills/loader/SKILL.md +279 -53
- package/skills/middleware/SKILL.md +52 -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 +144 -7
- package/skills/prerender/SKILL.md +153 -109
- 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 +101 -5
- package/skills/router-setup/SKILL.md +116 -8
- 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 +332 -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 +1 -66
- 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/app-version.ts +14 -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 +108 -21
- package/src/browser/navigation-client.ts +187 -86
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +76 -67
- package/src/browser/navigation-transaction.ts +9 -59
- package/src/browser/network-error-handler.ts +34 -7
- package/src/browser/partial-update.ts +150 -107
- package/src/browser/prefetch/cache.ts +205 -62
- package/src/browser/prefetch/fetch.ts +329 -39
- package/src/browser/prefetch/queue.ts +95 -29
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/rango-state.ts +158 -76
- package/src/browser/react/Link.tsx +102 -15
- package/src/browser/react/NavigationProvider.tsx +193 -120
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/context.ts +7 -2
- 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 +23 -69
- 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 +46 -11
- 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 +114 -24
- package/src/browser/scroll-restoration.ts +37 -22
- package/src/browser/segment-reconciler.ts +36 -14
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +222 -61
- package/src/browser/types.ts +82 -11
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +65 -40
- package/src/build/generate-route-types.ts +5 -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 +125 -24
- 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 +260 -94
- package/src/build/route-types/scan-filter.ts +9 -2
- 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 +214 -48
- package/src/cache/cache-scope.ts +234 -87
- 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/taint.ts +55 -0
- package/src/cache/types.ts +37 -100
- package/src/client.rsc.tsx +44 -21
- package/src/client.tsx +119 -290
- 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 +84 -2
- 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 +70 -22
- 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 +93 -12
- package/src/index.ts +133 -15
- 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 +37 -41
- package/src/prerender.ts +198 -82
- 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 -15
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +7 -72
- package/src/route-definition/dsl-helpers.ts +445 -277
- package/src/route-definition/helper-factories.ts +29 -139
- package/src/route-definition/helpers-types.ts +113 -37
- package/src/route-definition/index.ts +3 -0
- package/src/route-definition/redirect.ts +51 -10
- package/src/route-definition/resolve-handler-use.ts +161 -0
- package/src/route-definition/use-item-types.ts +32 -0
- package/src/route-map-builder.ts +0 -16
- package/src/route-types.ts +37 -41
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +164 -17
- package/src/router/error-handling.ts +45 -18
- package/src/router/find-match.ts +44 -23
- package/src/router/handler-context.ts +83 -39
- package/src/router/instrument.ts +350 -0
- package/src/router/intercept-resolution.ts +48 -24
- package/src/router/lazy-includes.ts +15 -52
- package/src/router/loader-resolution.ts +274 -56
- package/src/router/logging.ts +0 -6
- package/src/router/manifest.ts +40 -42
- package/src/router/match-api.ts +120 -204
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +58 -58
- package/src/router/match-middleware/background-revalidation.ts +15 -5
- package/src/router/match-middleware/cache-lookup.ts +202 -268
- package/src/router/match-middleware/cache-store.ts +42 -28
- package/src/router/match-middleware/intercept-resolution.ts +0 -22
- package/src/router/match-middleware/segment-resolution.ts +45 -14
- package/src/router/match-pipelines.ts +1 -42
- package/src/router/match-result.ts +93 -39
- package/src/router/metrics.ts +0 -34
- package/src/router/middleware-types.ts +13 -142
- package/src/router/middleware.ts +268 -171
- package/src/router/navigation-snapshot.ts +131 -0
- 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 +195 -56
- package/src/router/preview-match.ts +32 -102
- package/src/router/request-classification.ts +276 -0
- package/src/router/revalidation.ts +123 -73
- package/src/router/route-snapshot.ts +244 -0
- package/src/router/router-context.ts +3 -27
- package/src/router/router-interfaces.ts +115 -35
- package/src/router/router-options.ts +172 -15
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +190 -99
- package/src/router/segment-resolution/helpers.ts +115 -30
- package/src/router/segment-resolution/loader-cache.ts +62 -37
- package/src/router/segment-resolution/revalidation.ts +386 -341
- 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 +10 -63
- package/src/router/url-params.ts +44 -0
- package/src/router.ts +158 -54
- package/src/rsc/handler-context.ts +3 -2
- package/src/rsc/handler.ts +658 -511
- 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 +33 -42
- package/src/rsc/origin-guard.ts +39 -25
- package/src/rsc/progressive-enhancement.ts +77 -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 +105 -72
- package/src/rsc/runtime-warnings.ts +23 -10
- package/src/rsc/server-action.ts +263 -112
- package/src/rsc/ssr-setup.ts +18 -2
- package/src/rsc/types.ts +32 -6
- 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 +222 -51
- 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 +26 -46
- package/src/server/request-context.ts +390 -170
- package/src/ssr/index.tsx +24 -16
- package/src/static-handler.ts +27 -18
- 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 +17 -8
- package/src/types/error-types.ts +30 -90
- package/src/types/global-namespace.ts +54 -41
- package/src/types/handler-context.ts +233 -81
- package/src/types/index.ts +1 -10
- package/src/types/loader-types.ts +44 -15
- package/src/types/request-scope.ts +112 -0
- package/src/types/route-config.ts +6 -50
- package/src/types/route-entry.ts +12 -7
- 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 +58 -11
- package/src/urls/path-helper.ts +57 -111
- package/src/urls/pattern-types.ts +48 -19
- package/src/urls/response-types.ts +25 -22
- package/src/urls/type-extraction.ts +58 -139
- package/src/urls/urls-function.ts +1 -18
- package/src/use-loader.tsx +346 -89
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +36 -38
- package/src/vite/discovery/discover-routers.ts +130 -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 +214 -132
- 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 +57 -4
- package/src/vite/discovery/virtual-module-codegen.ts +14 -34
- package/src/vite/index.ts +6 -0
- package/src/vite/inject-client-debug.ts +36 -0
- package/src/vite/plugin-types.ts +178 -5
- 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 +89 -0
- package/src/vite/plugins/refresh-cmd.ts +89 -27
- 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 +119 -111
- package/src/vite/router-discovery.ts +941 -142
- 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 +81 -34
- package/src/vite/utils/shared-utils.ts +92 -42
- 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.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 {
|
|
@@ -20,21 +28,46 @@ import type {
|
|
|
20
28
|
DefaultRouteName,
|
|
21
29
|
} from "../types/global-namespace.js";
|
|
22
30
|
import type { Handle } from "../handle.js";
|
|
23
|
-
import {
|
|
24
|
-
|
|
31
|
+
import {
|
|
32
|
+
type ContextVar,
|
|
33
|
+
contextGet,
|
|
34
|
+
contextSet,
|
|
35
|
+
isNonCacheable,
|
|
36
|
+
} from "../context-var.js";
|
|
37
|
+
import {
|
|
38
|
+
createHandleStore,
|
|
39
|
+
buildHandleSnapshot,
|
|
40
|
+
type HandleStore,
|
|
41
|
+
type HandleData,
|
|
42
|
+
} from "./handle-store.js";
|
|
25
43
|
import { isHandle } from "../handle.js";
|
|
26
|
-
import {
|
|
44
|
+
import { withDefer } from "../defer.js";
|
|
45
|
+
import { type MetricsStore } from "./context.js";
|
|
46
|
+
import { observePhase, PHASES } from "../router/instrument.js";
|
|
27
47
|
import { getFetchableLoader } from "./fetchable-loader-store.js";
|
|
28
48
|
import type { SegmentCacheStore } from "../cache/types.js";
|
|
29
49
|
import type { Theme, ResolvedThemeConfig } from "../theme/types.js";
|
|
30
|
-
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";
|
|
31
58
|
import type { LocationStateEntry } from "../browser/react/location-state-shared.js";
|
|
32
59
|
import { NOCACHE_SYMBOL, assertNotInsideCacheExec } from "../cache/taint.js";
|
|
60
|
+
import { isInsideCacheScope } from "./context.js";
|
|
33
61
|
import {
|
|
34
62
|
createReverseFunction,
|
|
35
63
|
stripInternalParams,
|
|
36
64
|
} from "../router/handler-context.js";
|
|
37
|
-
import {
|
|
65
|
+
import {
|
|
66
|
+
getGlobalRouteMap,
|
|
67
|
+
isRouteRootScoped,
|
|
68
|
+
getSearchSchema,
|
|
69
|
+
} from "../route-map-builder.js";
|
|
70
|
+
import { parseSearchParams } from "../search-params.js";
|
|
38
71
|
import { invariant } from "../errors.js";
|
|
39
72
|
import { isAutoGeneratedRouteName } from "../route-name.js";
|
|
40
73
|
|
|
@@ -47,24 +80,9 @@ import { isAutoGeneratedRouteName } from "../route-name.js";
|
|
|
47
80
|
export interface RequestContext<
|
|
48
81
|
TEnv = DefaultEnv,
|
|
49
82
|
TParams = Record<string, string>,
|
|
50
|
-
> {
|
|
51
|
-
/**
|
|
52
|
-
|
|
53
|
-
/** Original HTTP request */
|
|
54
|
-
request: Request;
|
|
55
|
-
/** Parsed URL (with internal `_rsc*` params stripped) */
|
|
56
|
-
url: URL;
|
|
57
|
-
/**
|
|
58
|
-
* The original request URL with all parameters intact, including
|
|
59
|
-
* internal `_rsc*` transport params.
|
|
60
|
-
*/
|
|
61
|
-
originalUrl: URL;
|
|
62
|
-
/** URL pathname */
|
|
63
|
-
pathname: string;
|
|
64
|
-
/** URL search params (with internal `_rsc*` params stripped, same as `url.searchParams`) */
|
|
65
|
-
searchParams: URLSearchParams;
|
|
66
|
-
/** Variables set by middleware (same as ctx.var) */
|
|
67
|
-
var: Record<string, any>;
|
|
83
|
+
> extends RequestScope<TEnv> {
|
|
84
|
+
/** @internal Shared variable backing store for ctx.get()/ctx.set(). */
|
|
85
|
+
_variables: Record<string, any>;
|
|
68
86
|
/** Get a variable set by middleware */
|
|
69
87
|
get: {
|
|
70
88
|
<T>(contextVar: ContextVar<T>): T | undefined;
|
|
@@ -72,8 +90,12 @@ export interface RequestContext<
|
|
|
72
90
|
};
|
|
73
91
|
/** Set a variable (shared with middleware and handlers) */
|
|
74
92
|
set: {
|
|
75
|
-
<T>(
|
|
76
|
-
|
|
93
|
+
<T>(
|
|
94
|
+
contextVar: ContextVar<T>,
|
|
95
|
+
value: T,
|
|
96
|
+
options?: { cache?: boolean },
|
|
97
|
+
): void;
|
|
98
|
+
<K extends string>(key: K, value: any, options?: { cache?: boolean }): void;
|
|
77
99
|
};
|
|
78
100
|
/**
|
|
79
101
|
* Route params (populated after route matching)
|
|
@@ -100,6 +122,10 @@ export interface RequestContext<
|
|
|
100
122
|
setStatus(status: number): void;
|
|
101
123
|
/** @internal Set status bypassing cache-exec guard (for framework error handling) */
|
|
102
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;
|
|
103
129
|
|
|
104
130
|
/**
|
|
105
131
|
* Access loader data or push handle data.
|
|
@@ -138,26 +164,31 @@ export interface RequestContext<
|
|
|
138
164
|
/** @internal Cache store for segment caching (optional, used by CacheScope) */
|
|
139
165
|
_cacheStore?: SegmentCacheStore;
|
|
140
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
|
+
|
|
141
186
|
/** @internal Cache profiles for "use cache" profile resolution (per-router) */
|
|
142
187
|
_cacheProfiles?: Record<
|
|
143
188
|
string,
|
|
144
189
|
import("../cache/profile-registry.js").CacheProfile
|
|
145
190
|
>;
|
|
146
191
|
|
|
147
|
-
/**
|
|
148
|
-
* Schedule work to run after the response is sent.
|
|
149
|
-
* On Cloudflare Workers, uses ctx.waitUntil().
|
|
150
|
-
* On Node.js, runs as fire-and-forget.
|
|
151
|
-
*
|
|
152
|
-
* @example
|
|
153
|
-
* ```typescript
|
|
154
|
-
* ctx.waitUntil(async () => {
|
|
155
|
-
* await cacheStore.set(key, data, ttl);
|
|
156
|
-
* });
|
|
157
|
-
* ```
|
|
158
|
-
*/
|
|
159
|
-
waitUntil(fn: () => Promise<void>): void;
|
|
160
|
-
|
|
161
192
|
/**
|
|
162
193
|
* Register a callback to run when the response is created.
|
|
163
194
|
* Callbacks are sync and receive the response. They can:
|
|
@@ -261,6 +292,68 @@ export interface RequestContext<
|
|
|
261
292
|
/** @internal Previous route key (from the navigation source), used for revalidation */
|
|
262
293
|
_prevRouteKey?: string;
|
|
263
294
|
|
|
295
|
+
/**
|
|
296
|
+
* @internal Render barrier for experimental `rendered()` API.
|
|
297
|
+
* Resolves when all non-loader segments have settled and handle data
|
|
298
|
+
* is available. Used by DSL loaders that call `ctx.rendered()`.
|
|
299
|
+
*/
|
|
300
|
+
_renderBarrier: Promise<void>;
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* @internal Resolve the render barrier. Accepts resolved segments, filters
|
|
304
|
+
* out loaders, and captures non-loader segment IDs as the handle ordering.
|
|
305
|
+
* Called after segment resolution (fresh) or handle replay (cache/prerender).
|
|
306
|
+
*/
|
|
307
|
+
_resolveRenderBarrier: (
|
|
308
|
+
segments: Array<{ type: string; id: string }>,
|
|
309
|
+
) => void;
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* @internal Segment order at barrier resolution time, used by loader
|
|
313
|
+
* ctx.use(handle) to collect handle data in correct order.
|
|
314
|
+
*/
|
|
315
|
+
_renderBarrierSegmentOrder?: string[];
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* @internal Set to true when the matched entry tree contains any `loading()`
|
|
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.
|
|
322
|
+
*/
|
|
323
|
+
_treeHasStreaming?: boolean;
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* @internal Loader IDs that have called rendered() and are waiting for the
|
|
327
|
+
* barrier. Used to detect deadlocks when a handler tries to await the same
|
|
328
|
+
* loader via ctx.use(Loader).
|
|
329
|
+
*/
|
|
330
|
+
_renderBarrierWaiters?: Set<string>;
|
|
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
|
+
|
|
264
357
|
/** @internal Per-request error dedup set for onError reporting */
|
|
265
358
|
_reportedErrors: WeakSet<object>;
|
|
266
359
|
|
|
@@ -268,15 +361,40 @@ export interface RequestContext<
|
|
|
268
361
|
* @internal Report a non-fatal background error through the router's
|
|
269
362
|
* onError callback. Wired by the RSC handler / router during request
|
|
270
363
|
* creation. Cache-runtime and other subsystems call this to surface
|
|
271
|
-
* 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`).
|
|
272
366
|
*/
|
|
273
|
-
_reportBackgroundError?: (
|
|
367
|
+
_reportBackgroundError?: (
|
|
368
|
+
error: unknown,
|
|
369
|
+
category: CacheErrorCategory,
|
|
370
|
+
) => void;
|
|
274
371
|
|
|
275
372
|
/** @internal Per-request debug performance override (set via ctx.debugPerformance()) */
|
|
276
373
|
_debugPerformance?: boolean;
|
|
277
374
|
|
|
278
375
|
/** @internal Request-scoped performance metrics store */
|
|
279
376
|
_metricsStore?: MetricsStore;
|
|
377
|
+
|
|
378
|
+
/** @internal Resolved platform phase-span tracing for this request (Cloudflare or OTel) */
|
|
379
|
+
_tracing?: ResolvedTracing;
|
|
380
|
+
|
|
381
|
+
/** @internal Router basename for this request (used by redirect()) */
|
|
382
|
+
_basename?: string;
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* @internal RouteSnapshot from classifyRequest, reused by match/matchPartial
|
|
386
|
+
* to avoid a second resolveRoute call. Cleared on HMR invalidation.
|
|
387
|
+
*/
|
|
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[];
|
|
280
398
|
}
|
|
281
399
|
|
|
282
400
|
/**
|
|
@@ -296,6 +414,8 @@ export type PublicRequestContext<
|
|
|
296
414
|
| "deleteCookie"
|
|
297
415
|
| "_handleStore"
|
|
298
416
|
| "_cacheStore"
|
|
417
|
+
| "_explicitTaggedStores"
|
|
418
|
+
| "_requestTags"
|
|
299
419
|
| "_cacheProfiles"
|
|
300
420
|
| "_onResponseCallbacks"
|
|
301
421
|
| "_themeConfig"
|
|
@@ -303,10 +423,24 @@ export type PublicRequestContext<
|
|
|
303
423
|
| "_routeName"
|
|
304
424
|
| "_prevRouteKey"
|
|
305
425
|
| "_reportedErrors"
|
|
426
|
+
| "_renderBarrier"
|
|
427
|
+
| "_resolveRenderBarrier"
|
|
428
|
+
| "_renderBarrierSegmentOrder"
|
|
429
|
+
| "_treeHasStreaming"
|
|
430
|
+
| "_renderBarrierWaiters"
|
|
431
|
+
| "_handlerLoaderDeps"
|
|
432
|
+
| "_renderBarrierHandleSnapshot"
|
|
433
|
+
| "_renderBarrierGuardClosed"
|
|
306
434
|
| "_reportBackgroundError"
|
|
307
435
|
| "_debugPerformance"
|
|
308
436
|
| "_metricsStore"
|
|
437
|
+
| "_basename"
|
|
309
438
|
| "_setStatus"
|
|
439
|
+
| "_rotateStateCookie"
|
|
440
|
+
| "_setKeepCacheDirective"
|
|
441
|
+
| "_variables"
|
|
442
|
+
| "_classifiedRoute"
|
|
443
|
+
| "_cacheSignal"
|
|
310
444
|
| "res"
|
|
311
445
|
>;
|
|
312
446
|
|
|
@@ -358,6 +492,7 @@ export function _getRequestContext<TEnv = DefaultEnv>():
|
|
|
358
492
|
export function setRequestContextParams(
|
|
359
493
|
params: Record<string, string>,
|
|
360
494
|
routeName?: string,
|
|
495
|
+
routeMap?: Record<string, string>,
|
|
361
496
|
): void {
|
|
362
497
|
const ctx = requestContextStorage.getStore();
|
|
363
498
|
if (ctx) {
|
|
@@ -370,9 +505,13 @@ export function setRequestContextParams(
|
|
|
370
505
|
: undefined
|
|
371
506
|
) as DefaultRouteName | undefined;
|
|
372
507
|
}
|
|
373
|
-
// 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.
|
|
374
513
|
ctx.reverse = createReverseFunction(
|
|
375
|
-
getGlobalRouteMap(),
|
|
514
|
+
routeMap ?? getGlobalRouteMap(),
|
|
376
515
|
routeName,
|
|
377
516
|
params,
|
|
378
517
|
routeName ? isRouteRootScoped(routeName) : undefined,
|
|
@@ -406,23 +545,7 @@ export function getLocationState(): LocationStateEntry[] | undefined {
|
|
|
406
545
|
return ctx?._locationState;
|
|
407
546
|
}
|
|
408
547
|
|
|
409
|
-
|
|
410
|
-
* Get the current request context, throwing if not available
|
|
411
|
-
* @deprecated Use getRequestContext() directly — it now throws if outside context
|
|
412
|
-
*/
|
|
413
|
-
export function requireRequestContext<
|
|
414
|
-
TEnv = DefaultEnv,
|
|
415
|
-
>(): RequestContext<TEnv> {
|
|
416
|
-
return getRequestContext<TEnv>();
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
/**
|
|
420
|
-
* Cloudflare Workers ExecutionContext (subset we need)
|
|
421
|
-
*/
|
|
422
|
-
export interface ExecutionContext {
|
|
423
|
-
waitUntil(promise: Promise<any>): void;
|
|
424
|
-
passThroughOnException(): void;
|
|
425
|
-
}
|
|
548
|
+
export type { ExecutionContext };
|
|
426
549
|
|
|
427
550
|
/**
|
|
428
551
|
* Options for creating a request context
|
|
@@ -436,6 +559,11 @@ export interface CreateRequestContextOptions<TEnv> {
|
|
|
436
559
|
initialResponse?: Response;
|
|
437
560
|
/** Optional cache store for segment caching (used by CacheScope) */
|
|
438
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>;
|
|
439
567
|
/** Optional cache profiles for "use cache" resolution (per-router) */
|
|
440
568
|
cacheProfiles?: Record<
|
|
441
569
|
string,
|
|
@@ -445,6 +573,10 @@ export interface CreateRequestContextOptions<TEnv> {
|
|
|
445
573
|
executionContext?: ExecutionContext;
|
|
446
574
|
/** Optional theme configuration (enables ctx.theme and ctx.setTheme) */
|
|
447
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;
|
|
448
580
|
}
|
|
449
581
|
|
|
450
582
|
/**
|
|
@@ -465,15 +597,17 @@ export function createRequestContext<TEnv>(
|
|
|
465
597
|
variables,
|
|
466
598
|
initialResponse,
|
|
467
599
|
cacheStore,
|
|
600
|
+
explicitTaggedStores,
|
|
468
601
|
cacheProfiles,
|
|
469
602
|
executionContext,
|
|
470
603
|
themeConfig,
|
|
604
|
+
stateCookieName,
|
|
605
|
+
version: stateVersion,
|
|
471
606
|
} = options;
|
|
472
607
|
const cookieHeader = request.headers.get("Cookie");
|
|
608
|
+
let rangoStateRotated = false;
|
|
473
609
|
let parsedCookies: Record<string, string> | null = null;
|
|
474
610
|
|
|
475
|
-
// Create stub response for collecting headers/cookies.
|
|
476
|
-
// All cookie/header mutations go here; cookie reads derive from it.
|
|
477
611
|
let stubResponse = initialResponse
|
|
478
612
|
? new Response(null, {
|
|
479
613
|
status: initialResponse.status,
|
|
@@ -482,11 +616,9 @@ export function createRequestContext<TEnv>(
|
|
|
482
616
|
})
|
|
483
617
|
: new Response(null, { status: 200 });
|
|
484
618
|
|
|
485
|
-
// Create handle store and loader memoization for this request
|
|
486
619
|
const handleStore = createHandleStore();
|
|
487
620
|
const loaderPromises = new Map<string, Promise<any>>();
|
|
488
621
|
|
|
489
|
-
// Lazy parse cookies from the original Cookie header
|
|
490
622
|
const getParsedCookies = (): Record<string, string> => {
|
|
491
623
|
if (!parsedCookies) {
|
|
492
624
|
parsedCookies = parseCookiesFromHeader(cookieHeader);
|
|
@@ -494,7 +626,6 @@ export function createRequestContext<TEnv>(
|
|
|
494
626
|
return parsedCookies;
|
|
495
627
|
};
|
|
496
628
|
|
|
497
|
-
// Cached response cookie mutations — invalidated on setCookie/deleteCookie/setTheme
|
|
498
629
|
let responseCookieCache: Map<string, string | null> | null = null;
|
|
499
630
|
const getResponseCookies = (): Map<string, string | null> => {
|
|
500
631
|
if (!responseCookieCache) {
|
|
@@ -506,8 +637,17 @@ export function createRequestContext<TEnv>(
|
|
|
506
637
|
responseCookieCache = null;
|
|
507
638
|
};
|
|
508
639
|
|
|
509
|
-
|
|
510
|
-
|
|
640
|
+
function assertNotInsideCacheScopeALS(methodName: string): void {
|
|
641
|
+
if (isInsideCacheScope()) {
|
|
642
|
+
throw new Error(
|
|
643
|
+
`ctx.${methodName}() cannot be called inside a cache() boundary. ` +
|
|
644
|
+
`On cache hit the handler is skipped, so this side effect would be lost. ` +
|
|
645
|
+
`Move ctx.${methodName}() to a middleware or layout outside the cache() scope.`,
|
|
646
|
+
);
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
// Response stub Set-Cookie wins, then original header (source of truth for mutations).
|
|
511
651
|
const effectiveCookie = (name: string): string | undefined => {
|
|
512
652
|
const mutations = getResponseCookies();
|
|
513
653
|
if (mutations.has(name)) {
|
|
@@ -517,14 +657,11 @@ export function createRequestContext<TEnv>(
|
|
|
517
657
|
return getParsedCookies()[name];
|
|
518
658
|
};
|
|
519
659
|
|
|
520
|
-
// Theme helpers (only used when themeConfig is provided)
|
|
521
660
|
const getTheme = (): Theme | undefined => {
|
|
522
661
|
if (!themeConfig) return undefined;
|
|
523
662
|
|
|
524
|
-
// Use overlay-aware read so setTheme() in the same request is reflected
|
|
525
663
|
const stored = effectiveCookie(themeConfig.storageKey);
|
|
526
664
|
if (stored) {
|
|
527
|
-
// Validate stored value
|
|
528
665
|
if (stored === "system" && themeConfig.enableSystem) {
|
|
529
666
|
return "system";
|
|
530
667
|
}
|
|
@@ -538,15 +675,15 @@ export function createRequestContext<TEnv>(
|
|
|
538
675
|
const setTheme = (theme: Theme): void => {
|
|
539
676
|
if (!themeConfig) return;
|
|
540
677
|
|
|
541
|
-
//
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
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);
|
|
546
684
|
return;
|
|
547
685
|
}
|
|
548
686
|
|
|
549
|
-
// Write to stub — effectiveCookie() will pick it up on next read
|
|
550
687
|
stubResponse.headers.append(
|
|
551
688
|
"Set-Cookie",
|
|
552
689
|
serializeCookieValue(themeConfig.storageKey, theme, {
|
|
@@ -558,10 +695,8 @@ export function createRequestContext<TEnv>(
|
|
|
558
695
|
invalidateResponseCookieCache();
|
|
559
696
|
};
|
|
560
697
|
|
|
561
|
-
// Strip internal _rsc* params so userland sees a clean URL.
|
|
562
698
|
const cleanUrl = stripInternalParams(url);
|
|
563
699
|
|
|
564
|
-
// Build the context object first (without use), then add use
|
|
565
700
|
const ctx: RequestContext<TEnv> = {
|
|
566
701
|
env,
|
|
567
702
|
request,
|
|
@@ -569,12 +704,20 @@ export function createRequestContext<TEnv>(
|
|
|
569
704
|
originalUrl: new URL(request.url),
|
|
570
705
|
pathname: url.pathname,
|
|
571
706
|
searchParams: cleanUrl.searchParams,
|
|
572
|
-
|
|
573
|
-
get: ((keyOrVar: any) =>
|
|
574
|
-
|
|
575
|
-
|
|
707
|
+
_variables: variables,
|
|
708
|
+
get: ((keyOrVar: any) => {
|
|
709
|
+
if (isNonCacheable(variables, keyOrVar) && isInsideCacheScope()) {
|
|
710
|
+
throw new Error(
|
|
711
|
+
`ctx.get() for a non-cacheable variable cannot be called inside a cache() boundary. ` +
|
|
712
|
+
`The variable was created with { cache: false } or set with { cache: false }, ` +
|
|
713
|
+
`and its value would be stale on cache hit. Move the read outside the cached scope.`,
|
|
714
|
+
);
|
|
715
|
+
}
|
|
716
|
+
return contextGet(variables, keyOrVar);
|
|
717
|
+
}) as RequestContext<TEnv>["get"],
|
|
718
|
+
set: ((keyOrVar: any, value: any, options?: any) => {
|
|
576
719
|
assertNotInsideCacheExec(ctx, "set");
|
|
577
|
-
contextSet(variables, keyOrVar, value);
|
|
720
|
+
contextSet(variables, keyOrVar, value, options);
|
|
578
721
|
}) as RequestContext<TEnv>["set"],
|
|
579
722
|
params: {} as Record<string, string>,
|
|
580
723
|
|
|
@@ -612,6 +755,7 @@ export function createRequestContext<TEnv>(
|
|
|
612
755
|
|
|
613
756
|
setCookie(name: string, value: string, options?: CookieOptions): void {
|
|
614
757
|
assertNotInsideCacheExec(ctx, "setCookie");
|
|
758
|
+
assertNotInsideCacheScopeALS("setCookie");
|
|
615
759
|
stubResponse.headers.append(
|
|
616
760
|
"Set-Cookie",
|
|
617
761
|
serializeCookieValue(name, value, options),
|
|
@@ -624,6 +768,7 @@ export function createRequestContext<TEnv>(
|
|
|
624
768
|
options?: Pick<CookieOptions, "domain" | "path">,
|
|
625
769
|
): void {
|
|
626
770
|
assertNotInsideCacheExec(ctx, "deleteCookie");
|
|
771
|
+
assertNotInsideCacheScopeALS("deleteCookie");
|
|
627
772
|
stubResponse.headers.append(
|
|
628
773
|
"Set-Cookie",
|
|
629
774
|
serializeCookieValue(name, "", { ...options, maxAge: 0 }),
|
|
@@ -633,11 +778,52 @@ export function createRequestContext<TEnv>(
|
|
|
633
778
|
|
|
634
779
|
header(name: string, value: string): void {
|
|
635
780
|
assertNotInsideCacheExec(ctx, "header");
|
|
781
|
+
assertNotInsideCacheScopeALS("header");
|
|
636
782
|
stubResponse.headers.set(name, value);
|
|
637
783
|
},
|
|
638
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
|
+
|
|
639
824
|
setStatus(status: number): void {
|
|
640
825
|
assertNotInsideCacheExec(ctx, "setStatus");
|
|
826
|
+
assertNotInsideCacheScopeALS("setStatus");
|
|
641
827
|
stubResponse = new Response(null, {
|
|
642
828
|
status,
|
|
643
829
|
headers: stubResponse.headers,
|
|
@@ -651,35 +837,38 @@ export function createRequestContext<TEnv>(
|
|
|
651
837
|
});
|
|
652
838
|
},
|
|
653
839
|
|
|
654
|
-
// Placeholder - will be replaced below
|
|
655
840
|
use: null as any,
|
|
656
841
|
|
|
657
842
|
method: request.method,
|
|
658
843
|
|
|
659
844
|
_handleStore: handleStore,
|
|
660
845
|
_cacheStore: cacheStore,
|
|
846
|
+
_explicitTaggedStores: explicitTaggedStores,
|
|
847
|
+
_requestTags: new Set<string>(),
|
|
661
848
|
_cacheProfiles: cacheProfiles,
|
|
662
849
|
|
|
663
850
|
waitUntil(fn: () => Promise<void>): void {
|
|
664
851
|
if (executionContext?.waitUntil) {
|
|
665
|
-
//
|
|
666
|
-
|
|
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));
|
|
667
857
|
} else {
|
|
668
|
-
|
|
669
|
-
fn().catch((err) =>
|
|
670
|
-
console.error("[waitUntil] Background task failed:", err),
|
|
671
|
-
);
|
|
858
|
+
fireAndForgetWaitUntil(fn);
|
|
672
859
|
}
|
|
673
860
|
},
|
|
674
861
|
|
|
862
|
+
executionContext,
|
|
863
|
+
|
|
675
864
|
_onResponseCallbacks: [],
|
|
676
865
|
|
|
677
866
|
onResponse(callback: (response: Response) => Response): void {
|
|
678
867
|
assertNotInsideCacheExec(ctx, "onResponse");
|
|
868
|
+
assertNotInsideCacheScopeALS("onResponse");
|
|
679
869
|
this._onResponseCallbacks.push(callback);
|
|
680
870
|
},
|
|
681
871
|
|
|
682
|
-
// Theme properties (only set when themeConfig is provided)
|
|
683
872
|
get theme() {
|
|
684
873
|
return themeConfig ? getTheme() : undefined;
|
|
685
874
|
},
|
|
@@ -703,35 +892,88 @@ export function createRequestContext<TEnv>(
|
|
|
703
892
|
_reportedErrors: new WeakSet<object>(),
|
|
704
893
|
_metricsStore: undefined,
|
|
705
894
|
|
|
895
|
+
_renderBarrier: null as any,
|
|
896
|
+
_resolveRenderBarrier: null as any,
|
|
897
|
+
_renderBarrierSegmentOrder: undefined,
|
|
898
|
+
|
|
706
899
|
reverse: createReverseFunction(getGlobalRouteMap(), undefined, {}),
|
|
707
900
|
};
|
|
708
901
|
|
|
709
|
-
//
|
|
902
|
+
// Lazy allocation: only create Promise when a loader calls rendered().
|
|
903
|
+
let barrierResolved = false;
|
|
904
|
+
let resolveBarrier: (() => void) | undefined;
|
|
905
|
+
ctx._renderBarrier = null as any;
|
|
906
|
+
ctx._resolveRenderBarrier = (
|
|
907
|
+
segments: Array<{ type: string; id: string }>,
|
|
908
|
+
) => {
|
|
909
|
+
if (barrierResolved) return;
|
|
910
|
+
barrierResolved = true;
|
|
911
|
+
const segOrder = segments
|
|
912
|
+
.filter((s) => s.type !== "loader")
|
|
913
|
+
.map((s) => s.id);
|
|
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
|
+
}
|
|
931
|
+
if (resolveBarrier) resolveBarrier();
|
|
932
|
+
};
|
|
933
|
+
Object.defineProperty(ctx, "_renderBarrier", {
|
|
934
|
+
get() {
|
|
935
|
+
const p = barrierResolved
|
|
936
|
+
? Promise.resolve()
|
|
937
|
+
: new Promise<void>((resolve) => {
|
|
938
|
+
resolveBarrier = resolve;
|
|
939
|
+
});
|
|
940
|
+
Object.defineProperty(ctx, "_renderBarrier", {
|
|
941
|
+
value: p,
|
|
942
|
+
writable: false,
|
|
943
|
+
configurable: false,
|
|
944
|
+
});
|
|
945
|
+
return p;
|
|
946
|
+
},
|
|
947
|
+
configurable: true,
|
|
948
|
+
});
|
|
949
|
+
|
|
710
950
|
ctx.use = createUseFunction({
|
|
711
951
|
handleStore,
|
|
712
952
|
loaderPromises,
|
|
713
953
|
getContext: () => ctx,
|
|
714
954
|
});
|
|
715
955
|
|
|
716
|
-
// Brand with taint symbol so "use cache" excludes ctx from cache keys
|
|
717
956
|
(ctx as any)[NOCACHE_SYMBOL] = true;
|
|
718
957
|
return ctx;
|
|
719
958
|
}
|
|
720
959
|
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
*
|
|
726
|
-
|
|
727
|
-
|
|
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
|
+
}
|
|
728
971
|
|
|
729
972
|
function parseResponseCookies(response: Response): Map<string, string | null> {
|
|
730
973
|
const result = new Map<string, string | null>();
|
|
731
974
|
const setCookies = response.headers.getSetCookie();
|
|
732
975
|
|
|
733
976
|
for (const header of setCookies) {
|
|
734
|
-
// First segment before ';' is the name=value pair
|
|
735
977
|
const semiIdx = header.indexOf(";");
|
|
736
978
|
const pair = semiIdx === -1 ? header : header.substring(0, semiIdx);
|
|
737
979
|
const eqIdx = pair.indexOf("=");
|
|
@@ -743,49 +985,22 @@ function parseResponseCookies(response: Response): Map<string, string | null> {
|
|
|
743
985
|
name = decodeURIComponent(pair.substring(0, eqIdx).trim());
|
|
744
986
|
value = decodeURIComponent(pair.substring(eqIdx + 1).trim());
|
|
745
987
|
} catch {
|
|
746
|
-
// Malformed encoding — skip this entry
|
|
747
988
|
continue;
|
|
748
989
|
}
|
|
749
990
|
|
|
750
|
-
|
|
751
|
-
const isDeleted = MAX_AGE_ZERO_RE.test(header);
|
|
991
|
+
const isDeleted = isCookieDeletion(header);
|
|
752
992
|
result.set(name, isDeleted ? null : value);
|
|
753
993
|
}
|
|
754
994
|
|
|
755
995
|
return result;
|
|
756
996
|
}
|
|
757
997
|
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
cookieHeader: string | null,
|
|
763
|
-
): Record<string, string> {
|
|
764
|
-
if (!cookieHeader) return {};
|
|
765
|
-
|
|
766
|
-
const cookies: Record<string, string> = {};
|
|
767
|
-
const pairs = cookieHeader.split(";");
|
|
768
|
-
|
|
769
|
-
for (const pair of pairs) {
|
|
770
|
-
const [name, ...rest] = pair.trim().split("=");
|
|
771
|
-
if (name) {
|
|
772
|
-
const raw = rest.join("=");
|
|
773
|
-
try {
|
|
774
|
-
cookies[name] = decodeURIComponent(raw);
|
|
775
|
-
} catch {
|
|
776
|
-
// Malformed percent-encoded value (e.g. %zz, %2) - fall back to raw value
|
|
777
|
-
cookies[name] = raw;
|
|
778
|
-
}
|
|
779
|
-
}
|
|
780
|
-
}
|
|
781
|
-
|
|
782
|
-
return cookies;
|
|
783
|
-
}
|
|
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 };
|
|
784
1002
|
|
|
785
|
-
|
|
786
|
-
* Serialize a cookie for Set-Cookie header
|
|
787
|
-
*/
|
|
788
|
-
function serializeCookieValue(
|
|
1003
|
+
export function serializeCookieValue(
|
|
789
1004
|
name: string,
|
|
790
1005
|
value: string,
|
|
791
1006
|
options: CookieOptions = {},
|
|
@@ -812,20 +1027,12 @@ export interface CreateUseFunctionOptions<TEnv> {
|
|
|
812
1027
|
getContext: () => RequestContext<TEnv>;
|
|
813
1028
|
}
|
|
814
1029
|
|
|
815
|
-
/**
|
|
816
|
-
* Create the use() function for loader and handle composition.
|
|
817
|
-
*
|
|
818
|
-
* This is the unified implementation used by both RequestContext and HandlerContext.
|
|
819
|
-
* - For loaders: executes and memoizes loader functions
|
|
820
|
-
* - For handles: returns a push function to add handle data
|
|
821
|
-
*/
|
|
822
1030
|
export function createUseFunction<TEnv>(
|
|
823
1031
|
options: CreateUseFunctionOptions<TEnv>,
|
|
824
1032
|
): RequestContext["use"] {
|
|
825
1033
|
const { handleStore, loaderPromises, getContext } = options;
|
|
826
1034
|
|
|
827
1035
|
return ((item: LoaderDefinition<any, any> | Handle<any, any>) => {
|
|
828
|
-
// Handle case: return a push function
|
|
829
1036
|
if (isHandle(item)) {
|
|
830
1037
|
const handle = item;
|
|
831
1038
|
const ctx = getContext();
|
|
@@ -838,30 +1045,24 @@ export function createUseFunction<TEnv>(
|
|
|
838
1045
|
);
|
|
839
1046
|
}
|
|
840
1047
|
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
// Push directly - promises will be serialized by RSC and streamed
|
|
852
|
-
handleStore.push(handle.$$id, segmentId, valueOrPromise);
|
|
853
|
-
};
|
|
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
|
+
);
|
|
854
1058
|
}
|
|
855
1059
|
|
|
856
|
-
// Loader case
|
|
857
1060
|
const loader = item as LoaderDefinition<any, any>;
|
|
858
1061
|
|
|
859
|
-
// Return cached promise if already started
|
|
860
1062
|
if (loaderPromises.has(loader.$$id)) {
|
|
861
1063
|
return loaderPromises.get(loader.$$id);
|
|
862
1064
|
}
|
|
863
1065
|
|
|
864
|
-
// Get loader function - either from loader object or fetchable registry
|
|
865
1066
|
let loaderFn = loader.fn;
|
|
866
1067
|
if (!loaderFn) {
|
|
867
1068
|
const fetchable = getFetchableLoader(loader.$$id);
|
|
@@ -878,24 +1079,36 @@ export function createUseFunction<TEnv>(
|
|
|
878
1079
|
|
|
879
1080
|
const ctx = getContext();
|
|
880
1081
|
|
|
881
|
-
//
|
|
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
|
+
|
|
882
1094
|
const loaderCtx: LoaderContext<Record<string, string | undefined>, TEnv> = {
|
|
883
1095
|
params: ctx.params,
|
|
884
1096
|
routeParams: (ctx.params ?? {}) as Record<string, string>,
|
|
885
1097
|
request: ctx.request,
|
|
886
1098
|
searchParams: ctx.searchParams,
|
|
887
|
-
search:
|
|
1099
|
+
search: loaderSearch,
|
|
888
1100
|
pathname: ctx.pathname,
|
|
889
1101
|
url: ctx.url,
|
|
1102
|
+
originalUrl: ctx.originalUrl,
|
|
890
1103
|
env: ctx.env as any,
|
|
891
|
-
|
|
1104
|
+
waitUntil: ctx.waitUntil.bind(ctx),
|
|
1105
|
+
executionContext: ctx.executionContext,
|
|
892
1106
|
get: ctx.get as any,
|
|
893
|
-
use: <TDep, TDepParams = any>(
|
|
1107
|
+
use: (<TDep, TDepParams = any>(
|
|
894
1108
|
dep: LoaderDefinition<TDep, TDepParams>,
|
|
895
1109
|
): Promise<TDep> => {
|
|
896
|
-
// Recursive call - will start dep loader if not already started
|
|
897
1110
|
return ctx.use(dep);
|
|
898
|
-
},
|
|
1111
|
+
}) as LoaderContext["use"],
|
|
899
1112
|
method: "GET",
|
|
900
1113
|
body: undefined,
|
|
901
1114
|
reverse: createReverseFunction(
|
|
@@ -904,15 +1117,22 @@ export function createUseFunction<TEnv>(
|
|
|
904
1117
|
ctx.params as Record<string, string>,
|
|
905
1118
|
ctx._routeName ? isRouteRootScoped(ctx._routeName) : undefined,
|
|
906
1119
|
),
|
|
1120
|
+
rendered: () => {
|
|
1121
|
+
throw new Error(
|
|
1122
|
+
`ctx.rendered() is only available in DSL loaders (registered via loader() in urls()). ` +
|
|
1123
|
+
`It cannot be used from request-context loaders or server actions.`,
|
|
1124
|
+
);
|
|
1125
|
+
},
|
|
907
1126
|
};
|
|
908
1127
|
|
|
909
|
-
//
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
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
|
+
);
|
|
914
1135
|
|
|
915
|
-
// Memoize for subsequent calls
|
|
916
1136
|
loaderPromises.set(loader.$$id, promise);
|
|
917
1137
|
|
|
918
1138
|
return promise;
|