@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
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase + event instrumentation — the single internal API for observing router
|
|
3
|
+
* work.
|
|
4
|
+
*
|
|
5
|
+
* The router exposes the same work on three surfaces, and the rule is: each
|
|
6
|
+
* surface has exactly one owner here, so they cannot drift.
|
|
7
|
+
*
|
|
8
|
+
* - observePhase(): a span of work. Co-emits the `debugPerformance` perf
|
|
9
|
+
* metric (metrics store -> [RSC Perf] timeline + Server-Timing) AND the
|
|
10
|
+
* platform span (tracing runner -> Cloudflare custom spans / OTel). From one
|
|
11
|
+
* wrap site, so the span set is always a subset of the perf phases and the
|
|
12
|
+
* two can't disagree. Phases that meter their own perf metric with a finer
|
|
13
|
+
* decomposition (request, middleware) pass `metric: false` and get the span
|
|
14
|
+
* only — still co-located, still one owner per surface.
|
|
15
|
+
* - observeEvent(): a discrete fact (TelemetrySink): cache decisions,
|
|
16
|
+
* revalidation decisions, handler errors, timeouts, origin rejections.
|
|
17
|
+
* Event-shaped, not phase-shaped — derived from the same call sites but a
|
|
18
|
+
* separate surface from spans.
|
|
19
|
+
*
|
|
20
|
+
* Why phases, not events, are the parent abstraction: Cloudflare's span API is
|
|
21
|
+
* callback-bound (enterSpan wraps the actual work), so the callback boundary is
|
|
22
|
+
* the source of truth — async-context nesting (a loader's KV/D1/fetch spans
|
|
23
|
+
* landing under rango.loader) cannot be faithfully reconstructed from
|
|
24
|
+
* after-the-fact start/end events. Spans drive; events are emitted alongside.
|
|
25
|
+
*
|
|
26
|
+
* Phase identity lives in the PHASES registry below, so the raw `rango.*` span
|
|
27
|
+
* names, perf-metric labels, and span attributes have a single definition each.
|
|
28
|
+
*
|
|
29
|
+
* When neither perf surface nor tracing is active on the request, observePhase
|
|
30
|
+
* is a direct call — no wrapper, no timestamp, no allocation.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
import { _getRequestContext } from "../server/request-context.js";
|
|
34
|
+
import { isAutoGeneratedRouteName } from "../route-name.js";
|
|
35
|
+
import { getRouterContext } from "./router-context.js";
|
|
36
|
+
import { resolveSink, safeEmit, type TelemetryEvent } from "./telemetry.js";
|
|
37
|
+
import { appendMetric } from "./metrics.js";
|
|
38
|
+
import { type MetricsStore } from "../server/context.js";
|
|
39
|
+
import {
|
|
40
|
+
NOOP_TRACE_SPAN,
|
|
41
|
+
traceSpan,
|
|
42
|
+
runThenSettle,
|
|
43
|
+
type TracePhase,
|
|
44
|
+
type TraceSpan,
|
|
45
|
+
} from "./tracing.js";
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Perf-metric boundary for a phase, or `false` for span-only. `false` means the
|
|
49
|
+
* caller records its own perf metric with a finer decomposition than a single
|
|
50
|
+
* wrap (request: a grand total incl. pre-context bootstrap; middleware: pre/post
|
|
51
|
+
* own-time), so observePhase opens the span but records no metric of its own.
|
|
52
|
+
*/
|
|
53
|
+
export type PhaseMetric =
|
|
54
|
+
| { label: string | (() => string); depth?: number }
|
|
55
|
+
| false;
|
|
56
|
+
|
|
57
|
+
/** Describes one observable phase across the perf and span surfaces. */
|
|
58
|
+
export interface PhaseSpec {
|
|
59
|
+
/** Perf timeline label + Server-Timing name, or false for span-only. */
|
|
60
|
+
metric: PhaseMetric;
|
|
61
|
+
/** Span phase gate (per-phase toggle in the tracing config). */
|
|
62
|
+
tracePhase: TracePhase;
|
|
63
|
+
/** Span name (rango.*). */
|
|
64
|
+
spanName: string;
|
|
65
|
+
/** Span attributes set automatically when the span opens. */
|
|
66
|
+
attributes?: Record<string, string | number | boolean>;
|
|
67
|
+
/**
|
|
68
|
+
* Span attributes resolved AFTER the wrapped work runs (so they can read state
|
|
69
|
+
* that only exists once the work is underway, e.g. the matched route name).
|
|
70
|
+
* Applied for streaming phases once fn has constructed its value. Return
|
|
71
|
+
* undefined to add nothing.
|
|
72
|
+
*/
|
|
73
|
+
lazyAttributes?: () => Record<string, string | number | boolean> | undefined;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The matched route name for the current request, or undefined when there is no
|
|
78
|
+
* named route (unmatched / auto-generated). Shared by the render phase's metric
|
|
79
|
+
* label and its rango.route span attribute so the two can't disagree.
|
|
80
|
+
*/
|
|
81
|
+
function currentRouteName(): string | undefined {
|
|
82
|
+
const routeName = _getRequestContext()?._routeName;
|
|
83
|
+
return routeName && !isAutoGeneratedRouteName(routeName)
|
|
84
|
+
? routeName
|
|
85
|
+
: undefined;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The router's observable phases. One definition per phase keeps the `rango.*`
|
|
90
|
+
* span names, perf-metric labels, and identifying attributes from spreading
|
|
91
|
+
* across call sites.
|
|
92
|
+
*/
|
|
93
|
+
export const PHASES = {
|
|
94
|
+
/** Whole request pipeline. Span only — handler:total is metered directly. */
|
|
95
|
+
request: {
|
|
96
|
+
metric: false,
|
|
97
|
+
tracePhase: "request",
|
|
98
|
+
spanName: "rango.request",
|
|
99
|
+
} as PhaseSpec,
|
|
100
|
+
|
|
101
|
+
/** One middleware (incl. its downstream onion). Span only — the perf metric
|
|
102
|
+
* is the middleware's exclusive pre/post own-time, recorded directly.
|
|
103
|
+
* `metricLabel` is that metric's label (e.g. "middleware:auth@*"); it doubles
|
|
104
|
+
* as the rango.middleware_name span attribute. */
|
|
105
|
+
middleware: (metricLabel: string): PhaseSpec => ({
|
|
106
|
+
metric: false,
|
|
107
|
+
tracePhase: "middleware",
|
|
108
|
+
spanName: "rango.middleware",
|
|
109
|
+
attributes: { "rango.middleware_name": metricLabel },
|
|
110
|
+
}),
|
|
111
|
+
|
|
112
|
+
/** The server-action execution (decode args + run the action body), before
|
|
113
|
+
* the revalidation render. The metric label carries the action id (the
|
|
114
|
+
* _rsc_action / action $$id) so the perf timeline shows WHICH action ran, not
|
|
115
|
+
* just "an action"; the span also gets it as rango.action_id. */
|
|
116
|
+
action: (id: string): PhaseSpec => ({
|
|
117
|
+
metric: { label: `action:${id}` },
|
|
118
|
+
tracePhase: "action",
|
|
119
|
+
spanName: "rango.action",
|
|
120
|
+
attributes: { "rango.action_id": id },
|
|
121
|
+
}),
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* One loader execution. `depth` is the perf-timeline indentation: 2 (default)
|
|
125
|
+
* for render-time loaders that nest under the render phase; 1 for a standalone
|
|
126
|
+
* fetchable `_rsc_loader` request, which has no render parent.
|
|
127
|
+
*/
|
|
128
|
+
loader: (id: string, depth: number = 2): PhaseSpec => ({
|
|
129
|
+
metric: { label: `loader:${id}`, depth },
|
|
130
|
+
tracePhase: "loader",
|
|
131
|
+
spanName: "rango.loader",
|
|
132
|
+
attributes: { "rango.loader_id": id },
|
|
133
|
+
}),
|
|
134
|
+
|
|
135
|
+
/** One segment route/layout handler execution (the component/handler that
|
|
136
|
+
* produces a segment). Span only — the perf metric (handler:<id>) is owned by
|
|
137
|
+
* the legacy track() at the same call site, so observePhase here adds the
|
|
138
|
+
* rango.handler span without double-recording. `id` is the HANDLER id (the
|
|
139
|
+
* entry.id used in the handler:<id> perf row), carried as rango.handler_id —
|
|
140
|
+
* NOT the emitted segment's id (shortCode), which differs; the *_id naming
|
|
141
|
+
* mirrors rango.loader_id / rango.action_id. */
|
|
142
|
+
handler: (id: string): PhaseSpec => ({
|
|
143
|
+
metric: false,
|
|
144
|
+
tracePhase: "handler",
|
|
145
|
+
spanName: "rango.handler",
|
|
146
|
+
attributes: { "rango.handler_id": id },
|
|
147
|
+
}),
|
|
148
|
+
|
|
149
|
+
/** Whole render phase: match + serialize + SSR. The metric label is resolved
|
|
150
|
+
* lazily at record time (after match has set the route name) so the perf
|
|
151
|
+
* timeline shows WHICH route rendered: `render:total:<routeName>`, falling back
|
|
152
|
+
* to `render:total` when there is no named route (unmatched / auto-generated). */
|
|
153
|
+
render: {
|
|
154
|
+
metric: {
|
|
155
|
+
label: () => {
|
|
156
|
+
const routeName = currentRouteName();
|
|
157
|
+
return routeName ? `render:total:${routeName}` : "render:total";
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
tracePhase: "render",
|
|
161
|
+
spanName: "rango.render",
|
|
162
|
+
// Tag the render span with the matched route so the Cloudflare/OTel waterfall
|
|
163
|
+
// shows WHICH route rendered (rango.render + rango.route=index), resolved
|
|
164
|
+
// after match has run. Kept an attribute (not baked into the span name) so the
|
|
165
|
+
// span name stays low-cardinality and aggregatable across routes.
|
|
166
|
+
lazyAttributes: () => {
|
|
167
|
+
const routeName = currentRouteName();
|
|
168
|
+
return routeName ? { "rango.route": routeName } : undefined;
|
|
169
|
+
},
|
|
170
|
+
} as PhaseSpec,
|
|
171
|
+
|
|
172
|
+
/** SSR HTML render from the RSC stream. Colon-delimited like the other ssr:*
|
|
173
|
+
* setup metrics (ssr:module-load / ssr:stream-mode). */
|
|
174
|
+
ssr: {
|
|
175
|
+
metric: { label: "ssr:render-html" },
|
|
176
|
+
tracePhase: "ssr",
|
|
177
|
+
spanName: "rango.ssr",
|
|
178
|
+
} as PhaseSpec,
|
|
179
|
+
} as const;
|
|
180
|
+
|
|
181
|
+
/** Apply a phase spec's static attributes to a span (the no-op span ignores them). */
|
|
182
|
+
function applyAttributes(
|
|
183
|
+
span: TraceSpan,
|
|
184
|
+
attributes: Record<string, string | number | boolean>,
|
|
185
|
+
): void {
|
|
186
|
+
for (const key in attributes) span.setAttribute(key, attributes[key]);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Record a phase's perf metric for the interval [start, now]. The label may be
|
|
191
|
+
* lazy (resolved here, e.g. render:total needs the route name that match sets
|
|
192
|
+
* partway through the wrapped work).
|
|
193
|
+
*/
|
|
194
|
+
function recordPhaseMetric(
|
|
195
|
+
store: MetricsStore,
|
|
196
|
+
metric: Exclude<PhaseMetric, false>,
|
|
197
|
+
start: number,
|
|
198
|
+
): void {
|
|
199
|
+
const label =
|
|
200
|
+
typeof metric.label === "function" ? metric.label() : metric.label;
|
|
201
|
+
appendMetric(store, label, start, performance.now() - start, metric.depth);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Instrument one unit of work: open its span AND (unless `metric: false`) record
|
|
206
|
+
* its perf metric, from a single wrap site. fn is invoked exactly once with the
|
|
207
|
+
* span (a no-op span when tracing is off); its return value is returned
|
|
208
|
+
* unchanged and thrown errors / rejected promises propagate unchanged. When fn
|
|
209
|
+
* returns a promise both the metric duration and the span end when it settles.
|
|
210
|
+
*
|
|
211
|
+
* This is the ONLY phase primitive: every phase (request/middleware/action/
|
|
212
|
+
* loader/handler/render/ssr) is construction-bound — the span and metric settle
|
|
213
|
+
* when fn's own work completes (for the streaming phases, when the RSC/HTML
|
|
214
|
+
* stream is constructed, NOT when the body drains). Instrumentation is strictly
|
|
215
|
+
* best-effort: it never wraps or buffers the response and adds no work on the
|
|
216
|
+
* streaming path, so it cannot regress response latency or streaming. A loader
|
|
217
|
+
* that resolves while the body streams therefore keeps a rango.loader span that
|
|
218
|
+
* may extend past its render parent — overlapping spans are valid; the loader
|
|
219
|
+
* really did take that long.
|
|
220
|
+
*
|
|
221
|
+
* Reads the metrics store + tracing off the RequestContext ALS, which is active
|
|
222
|
+
* for the WHOLE request — contrast observeEvent, which reads the RouterContext
|
|
223
|
+
* ALS (entered later, during match).
|
|
224
|
+
*/
|
|
225
|
+
export function observePhase<T>(
|
|
226
|
+
spec: PhaseSpec,
|
|
227
|
+
fn: (span: TraceSpan) => T,
|
|
228
|
+
): T {
|
|
229
|
+
const reqCtx = _getRequestContext();
|
|
230
|
+
const store = reqCtx?._metricsStore;
|
|
231
|
+
const tracing = reqCtx?._tracing;
|
|
232
|
+
|
|
233
|
+
// Neither surface active: direct call, zero overhead.
|
|
234
|
+
if (!store && !tracing) return fn(NOOP_TRACE_SPAN);
|
|
235
|
+
|
|
236
|
+
// Attributes only land on a real span. Build the attribute/lazy wrapper only
|
|
237
|
+
// when this phase's span is actually enabled (not toggled off via `spans`), and
|
|
238
|
+
// short-circuit inside when the runner hands back the no-op span (tracing
|
|
239
|
+
// configured but off at runtime — e.g. no executionContext.tracing). That keeps
|
|
240
|
+
// the "configured but effectively off" path free of per-call attribute loops
|
|
241
|
+
// and lazy `.then()` allocations. `lazyAttributes` resolve AFTER fn runs (e.g.
|
|
242
|
+
// rango.route, known post-match) and apply on BOTH success and failure so an
|
|
243
|
+
// errored phase span is still tagged.
|
|
244
|
+
const attributes = spec.attributes;
|
|
245
|
+
const lazy = spec.lazyAttributes;
|
|
246
|
+
const spanEnabled =
|
|
247
|
+
tracing !== undefined && tracing.phases[spec.tracePhase] !== false;
|
|
248
|
+
const wrapped: (span: TraceSpan) => T =
|
|
249
|
+
(attributes || lazy) && spanEnabled
|
|
250
|
+
? (span) => {
|
|
251
|
+
if (span === NOOP_TRACE_SPAN) return fn(span);
|
|
252
|
+
if (attributes) applyAttributes(span, attributes);
|
|
253
|
+
// A SYNCHRONOUS throw from fn skips applyLate — fine by design: the only
|
|
254
|
+
// lazyAttributes phase (render) is always async, so any internal throw
|
|
255
|
+
// surfaces as a rejection that the onReject branch below DOES tag. If a
|
|
256
|
+
// sync lazyAttributes phase is ever added, wrap this in try/catch.
|
|
257
|
+
const out = fn(span);
|
|
258
|
+
if (!lazy) return out;
|
|
259
|
+
const applyLate = () => {
|
|
260
|
+
const late = lazy();
|
|
261
|
+
if (late) applyAttributes(span, late);
|
|
262
|
+
};
|
|
263
|
+
if (out instanceof Promise) {
|
|
264
|
+
return out.then(
|
|
265
|
+
(value) => {
|
|
266
|
+
applyLate();
|
|
267
|
+
return value;
|
|
268
|
+
},
|
|
269
|
+
(error) => {
|
|
270
|
+
applyLate();
|
|
271
|
+
throw error;
|
|
272
|
+
},
|
|
273
|
+
) as T;
|
|
274
|
+
}
|
|
275
|
+
applyLate();
|
|
276
|
+
return out;
|
|
277
|
+
}
|
|
278
|
+
: fn;
|
|
279
|
+
|
|
280
|
+
const runSpan = (): T =>
|
|
281
|
+
traceSpan(tracing, spec.tracePhase, spec.spanName, wrapped);
|
|
282
|
+
|
|
283
|
+
// Span-only — no perf metric to record (metric:false, or perf surface off).
|
|
284
|
+
const metric = spec.metric;
|
|
285
|
+
if (!store || metric === false) return runSpan();
|
|
286
|
+
|
|
287
|
+
// Record the phase duration on EVERY termination — success or failure — so a
|
|
288
|
+
// failed loader/render still shows its timing in the perf report (parity with
|
|
289
|
+
// the old track().finally() path it replaced).
|
|
290
|
+
const start = performance.now();
|
|
291
|
+
return runThenSettle(runSpan, () => recordPhaseMetric(store, metric, start));
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Open a rango.handler span around one segment route/layout handler call. The
|
|
296
|
+
* segment-resolution hot path runs this PER SEGMENT, so it gates on the SPAN
|
|
297
|
+
* surface alone and calls the handler directly otherwise — building neither the
|
|
298
|
+
* PhaseSpec (PHASES.handler allocates) nor the wrapper closure on the off path.
|
|
299
|
+
* The handler:<id> perf metric is owned by the track() at the call site, so the
|
|
300
|
+
* span is the only surface this adds (metric:false); a debugPerformance-only
|
|
301
|
+
* request (no tracing) or a disabled handler phase (spans:{handler:false}) has
|
|
302
|
+
* nothing to record here and short-circuits.
|
|
303
|
+
*/
|
|
304
|
+
export function observeHandler<C, R>(
|
|
305
|
+
id: string,
|
|
306
|
+
handler: (ctx: C) => R,
|
|
307
|
+
ctx: C,
|
|
308
|
+
): R {
|
|
309
|
+
const tracing = _getRequestContext()?._tracing;
|
|
310
|
+
if (!tracing || tracing.phases.handler === false) return handler(ctx);
|
|
311
|
+
return observePhase(PHASES.handler(id), () => handler(ctx));
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Emit one discrete telemetry event (the event-shaped counterpart to
|
|
316
|
+
* observePhase). Resolves the sink from the active router context and stamps the
|
|
317
|
+
* request id when the event omits it. No-op (and total — never throws) when no
|
|
318
|
+
* sink is configured.
|
|
319
|
+
*
|
|
320
|
+
* This is the canonical emitter for SYNCHRONOUS facts that fire inside the
|
|
321
|
+
* request's ALS scope (handler errors, timeouts, origin rejections, revalidation
|
|
322
|
+
* decisions). A few emitters deliberately stay on the lower-level
|
|
323
|
+
* resolveSink + safeEmit because observeEvent's lazy, per-call
|
|
324
|
+
* getRouterContext() read does not fit them — keep this the complete list:
|
|
325
|
+
* - router.ts wrapLoaderPromise (loader.start/end/error) and
|
|
326
|
+
* segment-resolution/streamed-handler-telemetry.ts (streamed handler.error)
|
|
327
|
+
* capture the sink + request id EAGERLY and emit from a fire-and-forget
|
|
328
|
+
* continuation that runs after the ALS scope may have unwound.
|
|
329
|
+
* - router/match-handlers.ts resolves the sink ONCE for the hot match-pipeline
|
|
330
|
+
* loop (request.start/end/error, cache.decision, ...).
|
|
331
|
+
* - segment-resolution/helpers.ts emits via a caller-provided report.telemetry
|
|
332
|
+
* sink rather than the ALS router context.
|
|
333
|
+
*/
|
|
334
|
+
export function observeEvent(event: TelemetryEvent): void {
|
|
335
|
+
// getRouterContext() either throws (real impl, outside a router context — e.g.
|
|
336
|
+
// the build-time prerender path) or returns null/undefined (e.g. mocked).
|
|
337
|
+
// Either way there is no sink to emit to, so swallow and return.
|
|
338
|
+
let routerCtx: ReturnType<typeof getRouterContext> | null | undefined;
|
|
339
|
+
try {
|
|
340
|
+
routerCtx = getRouterContext();
|
|
341
|
+
} catch {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
if (!routerCtx?.telemetry) return;
|
|
345
|
+
const stamped =
|
|
346
|
+
event.requestId === undefined && routerCtx.requestId !== undefined
|
|
347
|
+
? ({ ...event, requestId: routerCtx.requestId } as TelemetryEvent)
|
|
348
|
+
: event;
|
|
349
|
+
safeEmit(resolveSink(routerCtx.telemetry), stamped);
|
|
350
|
+
}
|
|
@@ -11,15 +11,24 @@ import type {
|
|
|
11
11
|
InterceptEntry,
|
|
12
12
|
InterceptSelectorContext,
|
|
13
13
|
} from "../server/context";
|
|
14
|
-
import type {
|
|
14
|
+
import type {
|
|
15
|
+
HandlerContext,
|
|
16
|
+
InternalHandlerContext,
|
|
17
|
+
ResolvedSegment,
|
|
18
|
+
} from "../types";
|
|
15
19
|
import { evaluateRevalidation } from "./revalidation.js";
|
|
16
20
|
import { getRequestContext } from "../server/request-context.js";
|
|
17
21
|
import { executeInterceptMiddleware } from "./middleware.js";
|
|
18
22
|
import { createReverseFunction } from "./handler-context.js";
|
|
19
23
|
import { getGlobalRouteMap } from "../route-map-builder.js";
|
|
20
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
handleHandlerResult,
|
|
26
|
+
warnOnStreamedResponse,
|
|
27
|
+
buildLoaderErrorContext,
|
|
28
|
+
} from "./segment-resolution.js";
|
|
21
29
|
import type { SegmentResolutionDeps } from "./types.js";
|
|
22
30
|
import { debugLog } from "./logging.js";
|
|
31
|
+
import { runInsideLoaderScope } from "../server/context.js";
|
|
23
32
|
|
|
24
33
|
/**
|
|
25
34
|
* Check if an intercept's when conditions are satisfied.
|
|
@@ -61,28 +70,14 @@ export function findInterceptForRoute(
|
|
|
61
70
|
let current: EntryData | null = fromEntry;
|
|
62
71
|
|
|
63
72
|
while (current) {
|
|
64
|
-
|
|
65
|
-
|
|
73
|
+
// current first, then its sibling layouts — same order as before.
|
|
74
|
+
for (const source of [current, ...current.layout]) {
|
|
75
|
+
for (const intercept of source.intercept) {
|
|
66
76
|
if (
|
|
67
77
|
intercept.routeName === targetRouteKey &&
|
|
68
78
|
evaluateInterceptWhen(intercept, selectorContext, isAction)
|
|
69
79
|
) {
|
|
70
|
-
return { intercept, entry:
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
if (current.layout && current.layout.length > 0) {
|
|
76
|
-
for (const siblingLayout of current.layout) {
|
|
77
|
-
if (siblingLayout.intercept && siblingLayout.intercept.length > 0) {
|
|
78
|
-
for (const intercept of siblingLayout.intercept) {
|
|
79
|
-
if (
|
|
80
|
-
intercept.routeName === targetRouteKey &&
|
|
81
|
-
evaluateInterceptWhen(intercept, selectorContext, isAction)
|
|
82
|
-
) {
|
|
83
|
-
return { intercept, entry: siblingLayout };
|
|
84
|
-
}
|
|
85
|
-
}
|
|
80
|
+
return { intercept, entry: source };
|
|
86
81
|
}
|
|
87
82
|
}
|
|
88
83
|
}
|
|
@@ -118,10 +113,25 @@ export async function resolveInterceptEntry<TEnv>(
|
|
|
118
113
|
};
|
|
119
114
|
stale?: boolean;
|
|
120
115
|
},
|
|
116
|
+
options?: {
|
|
117
|
+
/**
|
|
118
|
+
* Skip the intercept's middleware execution. Set ONLY by the post-response
|
|
119
|
+
* background re-render paths (proactive caching, stale background
|
|
120
|
+
* revalidation), whose sole purpose is to re-render the segment tree to
|
|
121
|
+
* populate the cache. The foreground request already ran the intercept
|
|
122
|
+
* middleware before the response was sent — it validated auth, set cookies,
|
|
123
|
+
* and wrote context vars into the request context's shared `_variables`,
|
|
124
|
+
* which the background render reuses. Re-running middleware here would fire
|
|
125
|
+
* its side effects a SECOND time, and a middleware that short-circuits with
|
|
126
|
+
* a Response would `throw` and silently abort the cache write. Never set on
|
|
127
|
+
* the foreground path.
|
|
128
|
+
*/
|
|
129
|
+
skipMiddleware?: boolean;
|
|
130
|
+
},
|
|
121
131
|
): Promise<ResolvedSegment[]> {
|
|
122
132
|
const segments: ResolvedSegment[] = [];
|
|
123
133
|
|
|
124
|
-
if (interceptEntry.middleware.length > 0) {
|
|
134
|
+
if (!options?.skipMiddleware && interceptEntry.middleware.length > 0) {
|
|
125
135
|
const requestCtx = getRequestContext();
|
|
126
136
|
if (!requestCtx?.res) {
|
|
127
137
|
throw new Error(
|
|
@@ -133,7 +143,7 @@ export async function resolveInterceptEntry<TEnv>(
|
|
|
133
143
|
context.request,
|
|
134
144
|
context.env,
|
|
135
145
|
params,
|
|
136
|
-
context
|
|
146
|
+
(context as InternalHandlerContext<any, TEnv>)._variables,
|
|
137
147
|
requestCtx.res,
|
|
138
148
|
createReverseFunction(getGlobalRouteMap()),
|
|
139
149
|
);
|
|
@@ -207,10 +217,13 @@ export async function resolveInterceptEntry<TEnv>(
|
|
|
207
217
|
loaderIds.push(loader.$$id);
|
|
208
218
|
loaderPromises.push(
|
|
209
219
|
deps.wrapLoaderPromise(
|
|
210
|
-
context.use(loader),
|
|
220
|
+
runInsideLoaderScope(() => context.use(loader)),
|
|
211
221
|
parentEntry,
|
|
212
222
|
segmentId,
|
|
213
223
|
context.pathname,
|
|
224
|
+
// Report a throwing intercept loader to onError + loader.error telemetry,
|
|
225
|
+
// matching the fresh/revalidation paths.
|
|
226
|
+
buildLoaderErrorContext(context),
|
|
214
227
|
),
|
|
215
228
|
);
|
|
216
229
|
}
|
|
@@ -237,6 +250,12 @@ export async function resolveInterceptEntry<TEnv>(
|
|
|
237
250
|
let loaderDataPromise: Promise<any[]> | any[] | undefined;
|
|
238
251
|
|
|
239
252
|
if (interceptEntry.loading && loaderPromises.length > 0) {
|
|
253
|
+
if (handlerResult instanceof Promise) {
|
|
254
|
+
warnOnStreamedResponse(
|
|
255
|
+
handlerResult,
|
|
256
|
+
`intercept ${interceptEntry.slotName}`,
|
|
257
|
+
);
|
|
258
|
+
}
|
|
240
259
|
component =
|
|
241
260
|
handlerResult instanceof Promise
|
|
242
261
|
? handlerResult
|
|
@@ -374,10 +393,15 @@ export async function resolveInterceptLoadersOnly<TEnv>(
|
|
|
374
393
|
loaderIds.push(loader.$$id);
|
|
375
394
|
loaderPromises.push(
|
|
376
395
|
deps.wrapLoaderPromise(
|
|
377
|
-
context.use(loader),
|
|
396
|
+
runInsideLoaderScope(() => context.use(loader)),
|
|
378
397
|
parentEntry,
|
|
379
398
|
segmentId,
|
|
380
399
|
context.pathname,
|
|
400
|
+
// Report a throwing intercept loader to onError + loader.error telemetry,
|
|
401
|
+
// matching the fresh/revalidation paths. resolveInterceptLoadersOnly is
|
|
402
|
+
// only called on the cache-hit partial-update path (handleCacheHitIntercept),
|
|
403
|
+
// so flag isPartial:true exactly like revalidation.ts's partial path.
|
|
404
|
+
{ ...buildLoaderErrorContext(context), isPartial: true },
|
|
381
405
|
),
|
|
382
406
|
);
|
|
383
407
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { registerRouteMap } from "../route-map-builder.js";
|
|
2
|
-
import { extractStaticPrefix } from "./pattern-matching.js";
|
|
2
|
+
import { extractStaticPrefix, joinPrefix } from "./pattern-matching.js";
|
|
3
3
|
import {
|
|
4
|
-
EntryData,
|
|
5
|
-
|
|
4
|
+
type EntryData,
|
|
5
|
+
RangoContext,
|
|
6
6
|
runWithPrefixes,
|
|
7
7
|
getIsolatedLazyParent,
|
|
8
8
|
} from "../server/context";
|
|
@@ -18,9 +18,6 @@ export interface LazyEvalDeps<TEnv = any> {
|
|
|
18
18
|
routerId?: string;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
// Detect lazy includes in handler result and create placeholder entries
|
|
22
|
-
// Lazy includes are IncludeItem with lazy: true and _lazyContext
|
|
23
|
-
// Moved to outer scope so it can be reused by evaluateLazyEntry for nested includes
|
|
24
21
|
export function findLazyIncludes<TEnv = any>(
|
|
25
22
|
items: AllUseItems[],
|
|
26
23
|
): Array<{
|
|
@@ -56,7 +53,6 @@ export function findLazyIncludes<TEnv = any>(
|
|
|
56
53
|
});
|
|
57
54
|
}
|
|
58
55
|
}
|
|
59
|
-
// Recursively check nested items (in layouts, etc.)
|
|
60
56
|
if ((item as any).uses && Array.isArray((item as any).uses)) {
|
|
61
57
|
lazyItems.push(...findLazyIncludes((item as any).uses));
|
|
62
58
|
}
|
|
@@ -78,14 +74,6 @@ export function evaluateLazyEntry<TEnv = any>(
|
|
|
78
74
|
return;
|
|
79
75
|
}
|
|
80
76
|
|
|
81
|
-
// Check for pre-computed routes from build-time data.
|
|
82
|
-
// Only leaf nodes (no nested includes) are precomputed, so entries with
|
|
83
|
-
// nested lazy includes fall through to the handler below.
|
|
84
|
-
// When multiple entries share the same staticPrefix (e.g., several
|
|
85
|
-
// include("/", ...) calls), the precomputed data merges all their routes
|
|
86
|
-
// into one entry. Assigning that merged set to the first matching entry
|
|
87
|
-
// causes findMatch to pick the wrong handler for routes belonging to a
|
|
88
|
-
// different include. Skip the shortcut when the prefix is shared.
|
|
89
77
|
const currentPrecomputed = deps.getPrecomputedByPrefix();
|
|
90
78
|
if (currentPrecomputed) {
|
|
91
79
|
const routes = currentPrecomputed.get(entry.staticPrefix);
|
|
@@ -105,34 +93,26 @@ export function evaluateLazyEntry<TEnv = any>(
|
|
|
105
93
|
}
|
|
106
94
|
}
|
|
107
95
|
|
|
108
|
-
// Mark as evaluated immediately to prevent concurrent evaluation.
|
|
109
|
-
// JS is single-threaded but handlers.handler() could theoretically yield,
|
|
110
|
-
// and the while-loop in findMatch retries after evaluation.
|
|
111
96
|
entry.lazyEvaluated = true;
|
|
112
97
|
|
|
113
98
|
const lazyPatterns = entry.lazyPatterns as UrlPatterns<TEnv>;
|
|
114
99
|
const lazyContext = entry.lazyContext;
|
|
115
100
|
|
|
116
|
-
// Create a new context for evaluating the lazy patterns
|
|
117
101
|
const manifest = new Map<string, EntryData>();
|
|
118
102
|
const patterns = new Map<string, string>();
|
|
119
103
|
const patternsByPrefix = new Map<string, Map<string, string>>();
|
|
120
104
|
const trailingSlashMap = new Map<string, TrailingSlashMode>();
|
|
121
105
|
|
|
122
|
-
// Capture the handler result to detect nested lazy includes
|
|
123
106
|
let handlerResult: AllUseItems[] = [];
|
|
124
107
|
|
|
125
|
-
// Merge captured counters from include() to maintain consistent
|
|
126
|
-
// shortCode indices with sibling entries from pattern extraction
|
|
127
108
|
const lazyCounters: Record<string, number> = {};
|
|
128
|
-
if (lazyContext
|
|
129
|
-
const
|
|
130
|
-
for (const [key, value] of Object.entries(captured)) {
|
|
109
|
+
if (lazyContext?.counters) {
|
|
110
|
+
for (const [key, value] of Object.entries(lazyContext.counters)) {
|
|
131
111
|
lazyCounters[key] = value;
|
|
132
112
|
}
|
|
133
113
|
}
|
|
134
114
|
|
|
135
|
-
|
|
115
|
+
RangoContext.run(
|
|
136
116
|
{
|
|
137
117
|
manifest,
|
|
138
118
|
patterns,
|
|
@@ -141,14 +121,13 @@ export function evaluateLazyEntry<TEnv = any>(
|
|
|
141
121
|
namespace: "lazy",
|
|
142
122
|
parent: getIsolatedLazyParent(lazyContext?.parent as EntryData | null),
|
|
143
123
|
counters: lazyCounters,
|
|
144
|
-
cacheProfiles:
|
|
145
|
-
rootScoped:
|
|
124
|
+
cacheProfiles: lazyContext?.cacheProfiles,
|
|
125
|
+
rootScoped: lazyContext?.rootScoped,
|
|
126
|
+
includeScope: lazyContext?.includeScope,
|
|
146
127
|
},
|
|
147
128
|
() => {
|
|
148
|
-
// Run the lazy patterns handler with the original context prefixes
|
|
149
|
-
// The prefix comes from the IncludeItem stored in lazyPatterns
|
|
150
129
|
const includePrefix = (entry as any)._lazyPrefix || "";
|
|
151
|
-
const fullPrefix = (lazyContext?.urlPrefix
|
|
130
|
+
const fullPrefix = joinPrefix(lazyContext?.urlPrefix, includePrefix);
|
|
152
131
|
|
|
153
132
|
if (fullPrefix || lazyContext?.namePrefix) {
|
|
154
133
|
runWithPrefixes(fullPrefix, lazyContext?.namePrefix, () => {
|
|
@@ -160,11 +139,9 @@ export function evaluateLazyEntry<TEnv = any>(
|
|
|
160
139
|
},
|
|
161
140
|
);
|
|
162
141
|
|
|
163
|
-
// Populate the entry's routes from the patterns
|
|
164
142
|
const routesObject: Record<string, string> = {};
|
|
165
143
|
for (const [name, pattern] of patterns.entries()) {
|
|
166
144
|
routesObject[name] = pattern;
|
|
167
|
-
// Also add to merged route map for reverse() support
|
|
168
145
|
const existingPattern = deps.mergedRouteMap[name];
|
|
169
146
|
if (existingPattern !== undefined && existingPattern !== pattern) {
|
|
170
147
|
console.warn(
|
|
@@ -175,46 +152,33 @@ export function evaluateLazyEntry<TEnv = any>(
|
|
|
175
152
|
deps.mergedRouteMap[name] = pattern;
|
|
176
153
|
}
|
|
177
154
|
|
|
178
|
-
// Update the entry in-place
|
|
179
155
|
entry.routes = routesObject as ResolvedRouteMap<any>;
|
|
180
156
|
|
|
181
|
-
// Note: Do NOT clear lazyPatterns/lazyContext here.
|
|
182
|
-
// loadManifest() needs them on every request to re-run the handler
|
|
183
|
-
// in the correct AsyncLocalStorage context (Store.manifest).
|
|
184
|
-
|
|
185
|
-
// Update trailing slash config if available
|
|
186
157
|
if (trailingSlashMap.size > 0) {
|
|
187
158
|
entry.trailingSlash = Object.fromEntries(trailingSlashMap);
|
|
188
159
|
}
|
|
189
160
|
|
|
190
|
-
// Detect nested lazy includes and register them as new entries
|
|
191
161
|
const nestedLazyIncludes = findLazyIncludes(handlerResult);
|
|
192
162
|
for (const lazyInclude of nestedLazyIncludes) {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
163
|
+
const fullPrefix = joinPrefix(
|
|
164
|
+
lazyInclude.context.urlPrefix,
|
|
165
|
+
lazyInclude.prefix,
|
|
166
|
+
);
|
|
197
167
|
|
|
198
168
|
const nestedEntry: RouteEntry<TEnv> & { _lazyPrefix?: string } = {
|
|
199
169
|
prefix: "",
|
|
200
170
|
staticPrefix: extractStaticPrefix(fullPrefix),
|
|
201
|
-
routes: {} as ResolvedRouteMap<any>,
|
|
171
|
+
routes: {} as ResolvedRouteMap<any>,
|
|
202
172
|
trailingSlash: entry.trailingSlash,
|
|
203
173
|
handler: (lazyInclude.patterns as UrlPatterns<TEnv>).handler,
|
|
204
174
|
mountIndex: deps.nextMountIndex(),
|
|
205
175
|
routerId: deps.routerId,
|
|
206
|
-
// Lazy evaluation fields
|
|
207
176
|
lazy: true,
|
|
208
177
|
lazyPatterns: lazyInclude.patterns,
|
|
209
178
|
lazyContext: lazyInclude.context,
|
|
210
179
|
lazyEvaluated: false,
|
|
211
|
-
// Store the include prefix for evaluation
|
|
212
180
|
_lazyPrefix: lazyInclude.prefix,
|
|
213
181
|
};
|
|
214
|
-
// Insert nested lazy entry before any entry whose staticPrefix is a
|
|
215
|
-
// prefix of (but shorter than) this lazy entry's staticPrefix.
|
|
216
|
-
// This ensures more specific lazy includes are matched before
|
|
217
|
-
// less specific eager entries (e.g., "/href/nested" before "/href/:id").
|
|
218
182
|
const nestedPrefix = nestedEntry.staticPrefix;
|
|
219
183
|
let insertIndex = deps.routesEntries.length;
|
|
220
184
|
if (nestedPrefix) {
|
|
@@ -232,6 +196,5 @@ export function evaluateLazyEntry<TEnv = any>(
|
|
|
232
196
|
deps.routesEntries.splice(insertIndex, 0, nestedEntry);
|
|
233
197
|
}
|
|
234
198
|
|
|
235
|
-
// Re-register route map for runtime reverse() usage
|
|
236
199
|
registerRouteMap(deps.mergedRouteMap);
|
|
237
200
|
}
|