@rangojs/router 0.0.0-experimental.79 → 0.0.0-experimental.7cf4e116
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +8 -0
- package/README.md +169 -31
- package/dist/bin/rango.js +312 -93
- package/dist/testing/vitest.js +82 -0
- package/dist/vite/index.js +2827 -1032
- package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/package.json +76 -21
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +64 -2
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +224 -32
- package/skills/caching/SKILL.md +279 -17
- package/skills/composability/SKILL.md +27 -2
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +4 -2
- package/skills/document-cache/SKILL.md +78 -55
- package/skills/handler-use/SKILL.md +4 -2
- 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 +30 -6
- package/skills/layout/SKILL.md +13 -9
- package/skills/links/SKILL.md +247 -17
- package/skills/loader/SKILL.md +225 -9
- package/skills/middleware/SKILL.md +18 -10
- package/skills/migrate-nextjs/SKILL.md +40 -16
- package/skills/migrate-react-router/SKILL.md +9 -2
- package/skills/mime-routes/SKILL.md +28 -1
- package/skills/observability/SKILL.md +172 -0
- package/skills/parallel/SKILL.md +18 -7
- package/skills/prerender/SKILL.md +45 -43
- package/skills/rango/SKILL.md +251 -24
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +123 -48
- package/skills/route/SKILL.md +46 -5
- package/skills/router-setup/SKILL.md +29 -6
- package/skills/scripts/SKILL.md +179 -0
- package/skills/server-actions/SKILL.md +775 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/tailwind/SKILL.md +27 -3
- package/skills/testing/SKILL.md +129 -0
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +127 -0
- package/skills/testing/client-components.md +124 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +129 -0
- package/skills/testing/loader.md +128 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +121 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +84 -0
- package/skills/testing/server-actions.md +107 -0
- package/skills/testing/server-tree.md +128 -0
- package/skills/testing/setup.md +123 -0
- package/skills/typesafety/SKILL.md +322 -29
- package/skills/use-cache/SKILL.md +46 -14
- package/skills/view-transitions/SKILL.md +294 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +0 -65
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +39 -0
- package/src/browser/connection-warmup.ts +134 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/event-controller.ts +192 -150
- package/src/browser/history-state.ts +21 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/invalidate-client-cache.ts +52 -0
- package/src/browser/navigation-bridge.ts +71 -16
- package/src/browser/navigation-client.ts +127 -78
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +33 -59
- package/src/browser/navigation-transaction.ts +9 -59
- package/src/browser/network-error-handler.ts +34 -7
- package/src/browser/partial-update.ts +125 -127
- package/src/browser/prefetch/cache.ts +201 -68
- package/src/browser/prefetch/fetch.ts +287 -59
- package/src/browser/prefetch/queue.ts +42 -8
- package/src/browser/rango-state.ts +158 -76
- package/src/browser/react/Link.tsx +48 -20
- package/src/browser/react/NavigationProvider.tsx +162 -118
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/filter-segment-order.ts +66 -7
- package/src/browser/react/index.ts +0 -48
- package/src/browser/react/location-state-shared.ts +178 -8
- package/src/browser/react/location-state.ts +39 -14
- package/src/browser/react/use-action.ts +6 -15
- package/src/browser/react/use-handle.ts +17 -14
- package/src/browser/react/use-href.tsx +8 -1
- package/src/browser/react/use-link-status.ts +33 -8
- package/src/browser/react/use-navigation.ts +32 -7
- package/src/browser/react/use-params.ts +20 -10
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +25 -3
- package/src/browser/react/use-search-params.ts +0 -5
- package/src/browser/react/use-segments.ts +11 -21
- package/src/browser/response-adapter.ts +80 -5
- package/src/browser/rsc-router.tsx +91 -24
- package/src/browser/scroll-restoration.ts +30 -17
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +214 -55
- package/src/browser/types.ts +57 -8
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +60 -35
- package/src/build/generate-route-types.ts +2 -1
- package/src/build/index.ts +8 -2
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +117 -14
- package/src/build/route-types/ast-route-extraction.ts +15 -8
- package/src/build/route-types/codegen.ts +16 -5
- package/src/build/route-types/include-resolution.ts +117 -23
- package/src/build/route-types/param-extraction.ts +6 -3
- package/src/build/route-types/per-module-writer.ts +22 -6
- package/src/build/route-types/router-processing.ts +55 -28
- package/src/build/route-types/scan-filter.ts +1 -1
- package/src/build/route-types/source-scan.ts +216 -0
- package/src/build/runtime-discovery.ts +9 -20
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-key-utils.ts +29 -13
- package/src/cache/cache-policy.ts +108 -34
- package/src/cache/cache-runtime.ts +199 -37
- package/src/cache/cache-scope.ts +188 -82
- package/src/cache/cache-tag.ts +103 -0
- package/src/cache/cf/cf-base64.ts +33 -0
- package/src/cache/cf/cf-cache-constants.ts +127 -0
- package/src/cache/cf/cf-cache-store.ts +1989 -378
- package/src/cache/cf/cf-cache-types.ts +349 -0
- package/src/cache/cf/cf-kv-utils.ts +46 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
- package/src/cache/cf/index.ts +6 -16
- package/src/cache/document-cache.ts +72 -20
- package/src/cache/handle-snapshot.ts +70 -0
- package/src/cache/index.ts +10 -20
- package/src/cache/memory-segment-store.ts +136 -37
- package/src/cache/profile-registry.ts +31 -31
- package/src/cache/read-through-swr.ts +41 -11
- package/src/cache/segment-codec.ts +9 -17
- package/src/cache/tag-invalidation.ts +230 -0
- package/src/cache/types.ts +37 -100
- package/src/client.rsc.tsx +44 -21
- package/src/client.tsx +36 -61
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +109 -0
- package/src/component-utils.ts +19 -0
- package/src/components/DefaultDocument.tsx +8 -2
- package/src/context-var.ts +18 -6
- package/src/decode-loader-results.ts +52 -0
- package/src/defer.ts +196 -0
- package/src/deps/ssr.ts +0 -1
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +30 -4
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +31 -23
- package/src/handles/MetaTags.tsx +62 -19
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +37 -8
- package/src/handles/is-thenable.ts +19 -0
- package/src/handles/meta.ts +51 -40
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +9 -60
- package/src/host/errors.ts +0 -24
- package/src/host/index.ts +8 -2
- package/src/host/pattern-matcher.ts +23 -52
- package/src/host/router.ts +107 -99
- package/src/host/testing.ts +40 -27
- package/src/host/types.ts +37 -4
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +137 -22
- package/src/index.rsc.ts +90 -11
- package/src/index.ts +88 -10
- package/src/internal-debug.ts +11 -10
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +20 -13
- package/src/loader.ts +12 -11
- package/src/missing-id-error.ts +68 -0
- package/src/outlet-context.ts +1 -1
- package/src/outlet-provider.tsx +1 -5
- package/src/prerender/param-hash.ts +16 -16
- package/src/prerender/store.ts +32 -37
- package/src/prerender.ts +61 -6
- package/src/redirect-origin.ts +100 -0
- package/src/regex-escape.ts +8 -0
- package/src/render-error-thrower.tsx +20 -0
- package/src/response-utils.ts +62 -0
- package/src/reverse.ts +65 -39
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +7 -72
- package/src/route-definition/dsl-helpers.ts +287 -281
- package/src/route-definition/helper-factories.ts +29 -139
- package/src/route-definition/helpers-types.ts +46 -18
- package/src/route-definition/redirect.ts +44 -11
- package/src/route-definition/resolve-handler-use.ts +12 -0
- package/src/route-definition/use-item-types.ts +32 -0
- package/src/route-map-builder.ts +0 -16
- package/src/route-types.ts +19 -41
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +73 -25
- package/src/router/error-handling.ts +45 -18
- package/src/router/find-match.ts +44 -23
- package/src/router/handler-context.ts +27 -42
- package/src/router/instrument.ts +350 -0
- package/src/router/intercept-resolution.ts +39 -20
- package/src/router/lazy-includes.ts +10 -47
- package/src/router/loader-resolution.ts +155 -72
- package/src/router/logging.ts +0 -6
- package/src/router/manifest.ts +18 -29
- package/src/router/match-api.ts +4 -23
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +58 -58
- package/src/router/match-middleware/background-revalidation.ts +6 -7
- package/src/router/match-middleware/cache-lookup.ts +159 -285
- package/src/router/match-middleware/cache-store.ts +31 -34
- package/src/router/match-middleware/intercept-resolution.ts +0 -22
- package/src/router/match-middleware/segment-resolution.ts +0 -22
- package/src/router/match-pipelines.ts +1 -42
- package/src/router/match-result.ts +44 -74
- package/src/router/metrics.ts +0 -34
- package/src/router/middleware-types.ts +7 -134
- package/src/router/middleware.ts +266 -166
- package/src/router/navigation-snapshot.ts +0 -51
- package/src/router/params-util.ts +23 -0
- package/src/router/pattern-matching.ts +132 -90
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prerender-match.ts +104 -65
- package/src/router/preview-match.ts +3 -1
- package/src/router/request-classification.ts +28 -62
- package/src/router/revalidation.ts +123 -73
- package/src/router/route-snapshot.ts +0 -1
- package/src/router/router-context.ts +3 -28
- package/src/router/router-interfaces.ts +83 -35
- package/src/router/router-options.ts +136 -5
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +93 -84
- package/src/router/segment-resolution/helpers.ts +86 -6
- package/src/router/segment-resolution/loader-cache.ts +62 -37
- package/src/router/segment-resolution/revalidation.ts +269 -320
- package/src/router/segment-resolution/static-store.ts +19 -5
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution/view-transition-default.ts +36 -0
- package/src/router/segment-resolution.ts +5 -1
- package/src/router/segment-wrappers.ts +6 -5
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/substitute-pattern-params.ts +56 -0
- package/src/router/telemetry-otel.ts +161 -199
- package/src/router/telemetry.ts +96 -19
- package/src/router/timeout.ts +0 -20
- package/src/router/tracing.ts +206 -0
- package/src/router/trie-matching.ts +163 -59
- package/src/router/types.ts +9 -63
- package/src/router/url-params.ts +44 -0
- package/src/router.ts +110 -55
- package/src/rsc/handler-context.ts +3 -2
- package/src/rsc/handler.ts +266 -219
- 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 +114 -38
- package/src/rsc/manifest-init.ts +28 -41
- package/src/rsc/origin-guard.ts +39 -25
- package/src/rsc/progressive-enhancement.ts +63 -9
- 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 +99 -75
- package/src/rsc/runtime-warnings.ts +23 -10
- package/src/rsc/server-action.ts +258 -115
- package/src/rsc/ssr-setup.ts +16 -0
- package/src/rsc/types.ts +23 -5
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +35 -30
- package/src/segment-loader-promise.ts +31 -4
- package/src/segment-system.tsx +209 -143
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +150 -51
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +80 -5
- package/src/server/handle-store.ts +21 -38
- package/src/server/loader-registry.ts +21 -42
- package/src/server/request-context.ts +235 -175
- package/src/ssr/index.tsx +21 -16
- package/src/static-handler.ts +10 -13
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +40 -0
- package/src/testing/dispatch.ts +701 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +128 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +272 -0
- package/src/testing/e2e/parity.ts +387 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +257 -0
- package/src/testing/generated-routes.ts +183 -0
- package/src/testing/index.ts +99 -0
- package/src/testing/internal/context.ts +371 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +343 -0
- package/src/testing/render-route.tsx +581 -0
- package/src/testing/run-loader.ts +385 -0
- package/src/testing/run-middleware.ts +205 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +305 -0
- package/src/theme/ThemeProvider.tsx +20 -58
- package/src/theme/ThemeScript.tsx +7 -9
- package/src/theme/constants.ts +52 -13
- package/src/theme/index.ts +0 -7
- package/src/theme/theme-context.ts +1 -5
- package/src/theme/theme-script.ts +22 -21
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +0 -35
- package/src/types/cache-types.ts +13 -4
- package/src/types/error-types.ts +30 -90
- package/src/types/global-namespace.ts +54 -41
- package/src/types/handler-context.ts +109 -61
- package/src/types/index.ts +1 -10
- package/src/types/loader-types.ts +11 -9
- package/src/types/request-scope.ts +112 -0
- package/src/types/route-config.ts +6 -50
- package/src/types/route-entry.ts +0 -6
- package/src/types/segments.ts +35 -14
- package/src/urls/include-helper.ts +9 -56
- package/src/urls/index.ts +1 -11
- package/src/urls/path-helper-types.ts +19 -5
- package/src/urls/path-helper.ts +17 -106
- package/src/urls/pattern-types.ts +36 -19
- package/src/urls/response-types.ts +22 -29
- package/src/urls/type-extraction.ts +58 -139
- package/src/urls/urls-function.ts +1 -18
- package/src/use-loader.tsx +292 -107
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +8 -7
- package/src/vite/discovery/discover-routers.ts +126 -85
- package/src/vite/discovery/discovery-errors.ts +194 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +96 -68
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/state.ts +44 -0
- package/src/vite/discovery/virtual-module-codegen.ts +14 -34
- package/src/vite/index.ts +2 -0
- package/src/vite/inject-client-debug.ts +36 -0
- package/src/vite/plugin-types.ts +126 -8
- package/src/vite/plugins/cjs-to-esm.ts +16 -19
- package/src/vite/plugins/client-ref-dedup.ts +16 -11
- package/src/vite/plugins/client-ref-hashing.ts +28 -15
- package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
- package/src/vite/plugins/expose-action-id.ts +48 -95
- package/src/vite/plugins/expose-id-utils.ts +88 -55
- package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
- package/src/vite/plugins/expose-ids/handler-transform.ts +11 -90
- 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 +505 -486
- package/src/vite/plugins/performance-tracks.ts +26 -25
- package/src/vite/plugins/refresh-cmd.ts +1 -1
- package/src/vite/plugins/use-cache-transform.ts +73 -83
- package/src/vite/plugins/version-injector.ts +21 -25
- package/src/vite/plugins/version-plugin.ts +37 -40
- package/src/vite/plugins/virtual-entries.ts +13 -18
- package/src/vite/rango.ts +109 -118
- package/src/vite/router-discovery.ts +777 -119
- package/src/vite/utils/ast-handler-extract.ts +26 -35
- package/src/vite/utils/banner.ts +1 -1
- package/src/vite/utils/bundle-analysis.ts +10 -15
- package/src/vite/utils/client-chunks.ts +184 -0
- package/src/vite/utils/directive-prologue.ts +40 -0
- package/src/vite/utils/forward-user-plugins.ts +171 -0
- package/src/vite/utils/manifest-utils.ts +4 -59
- package/src/vite/utils/package-resolution.ts +20 -52
- package/src/vite/utils/prerender-utils.ts +54 -39
- package/src/vite/utils/shared-utils.ts +90 -41
- package/dist/__internal.d.ts +0 -83
- package/dist/__internal.d.ts.map +0 -1
- package/dist/__internal.js +0 -19
- package/dist/__internal.js.map +0 -1
- package/dist/__mocks__/version.d.ts +0 -7
- package/dist/__mocks__/version.d.ts.map +0 -1
- package/dist/__mocks__/version.js +0 -7
- package/dist/__mocks__/version.js.map +0 -1
- package/dist/__tests__/client-href.test.d.ts +0 -2
- package/dist/__tests__/client-href.test.d.ts.map +0 -1
- package/dist/__tests__/client-href.test.js +0 -74
- package/dist/__tests__/client-href.test.js.map +0 -1
- package/dist/__tests__/component-utils.test.d.ts +0 -2
- package/dist/__tests__/component-utils.test.d.ts.map +0 -1
- package/dist/__tests__/component-utils.test.js +0 -51
- package/dist/__tests__/component-utils.test.js.map +0 -1
- package/dist/__tests__/event-controller.test.d.ts +0 -2
- package/dist/__tests__/event-controller.test.d.ts.map +0 -1
- package/dist/__tests__/event-controller.test.js +0 -538
- package/dist/__tests__/event-controller.test.js.map +0 -1
- package/dist/__tests__/helpers/route-tree.d.ts +0 -118
- package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
- package/dist/__tests__/helpers/route-tree.js +0 -374
- package/dist/__tests__/helpers/route-tree.js.map +0 -1
- package/dist/__tests__/match-result.test.d.ts +0 -2
- package/dist/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/__tests__/match-result.test.js +0 -154
- package/dist/__tests__/match-result.test.js.map +0 -1
- package/dist/__tests__/navigation-store.test.d.ts +0 -2
- package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
- package/dist/__tests__/navigation-store.test.js +0 -440
- package/dist/__tests__/navigation-store.test.js.map +0 -1
- package/dist/__tests__/partial-update.test.d.ts +0 -2
- package/dist/__tests__/partial-update.test.d.ts.map +0 -1
- package/dist/__tests__/partial-update.test.js +0 -1009
- package/dist/__tests__/partial-update.test.js.map +0 -1
- package/dist/__tests__/reverse-types.test.d.ts +0 -8
- package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
- package/dist/__tests__/reverse-types.test.js +0 -656
- package/dist/__tests__/reverse-types.test.js.map +0 -1
- package/dist/__tests__/route-definition.test.d.ts +0 -2
- package/dist/__tests__/route-definition.test.d.ts.map +0 -1
- package/dist/__tests__/route-definition.test.js +0 -55
- package/dist/__tests__/route-definition.test.js.map +0 -1
- package/dist/__tests__/router-helpers.test.d.ts +0 -2
- package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
- package/dist/__tests__/router-helpers.test.js +0 -377
- package/dist/__tests__/router-helpers.test.js.map +0 -1
- package/dist/__tests__/router-integration-2.test.d.ts +0 -2
- package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration-2.test.js +0 -426
- package/dist/__tests__/router-integration-2.test.js.map +0 -1
- package/dist/__tests__/router-integration.test.d.ts +0 -2
- package/dist/__tests__/router-integration.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration.test.js +0 -1051
- package/dist/__tests__/router-integration.test.js.map +0 -1
- package/dist/__tests__/search-params.test.d.ts +0 -5
- package/dist/__tests__/search-params.test.d.ts.map +0 -1
- package/dist/__tests__/search-params.test.js +0 -306
- package/dist/__tests__/search-params.test.js.map +0 -1
- package/dist/__tests__/segment-system.test.d.ts +0 -2
- package/dist/__tests__/segment-system.test.d.ts.map +0 -1
- package/dist/__tests__/segment-system.test.js +0 -627
- package/dist/__tests__/segment-system.test.js.map +0 -1
- package/dist/__tests__/static-handler-types.test.d.ts +0 -8
- package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
- package/dist/__tests__/static-handler-types.test.js +0 -63
- package/dist/__tests__/static-handler-types.test.js.map +0 -1
- package/dist/__tests__/urls.test.d.ts +0 -2
- package/dist/__tests__/urls.test.d.ts.map +0 -1
- package/dist/__tests__/urls.test.js +0 -421
- package/dist/__tests__/urls.test.js.map +0 -1
- package/dist/__tests__/use-mount.test.d.ts +0 -2
- package/dist/__tests__/use-mount.test.d.ts.map +0 -1
- package/dist/__tests__/use-mount.test.js +0 -35
- package/dist/__tests__/use-mount.test.js.map +0 -1
- package/dist/bin/rango.d.ts +0 -2
- package/dist/bin/rango.d.ts.map +0 -1
- package/dist/bin/rango.js.map +0 -1
- package/dist/browser/event-controller.d.ts +0 -191
- package/dist/browser/event-controller.d.ts.map +0 -1
- package/dist/browser/event-controller.js +0 -559
- package/dist/browser/event-controller.js.map +0 -1
- package/dist/browser/index.d.ts +0 -2
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -14
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/link-interceptor.d.ts +0 -38
- package/dist/browser/link-interceptor.d.ts.map +0 -1
- package/dist/browser/link-interceptor.js +0 -99
- package/dist/browser/link-interceptor.js.map +0 -1
- package/dist/browser/logging.d.ts +0 -10
- package/dist/browser/logging.d.ts.map +0 -1
- package/dist/browser/logging.js +0 -29
- package/dist/browser/logging.js.map +0 -1
- package/dist/browser/lru-cache.d.ts +0 -17
- package/dist/browser/lru-cache.d.ts.map +0 -1
- package/dist/browser/lru-cache.js +0 -50
- package/dist/browser/lru-cache.js.map +0 -1
- package/dist/browser/merge-segment-loaders.d.ts +0 -39
- package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
- package/dist/browser/merge-segment-loaders.js +0 -102
- package/dist/browser/merge-segment-loaders.js.map +0 -1
- package/dist/browser/navigation-bridge.d.ts +0 -102
- package/dist/browser/navigation-bridge.d.ts.map +0 -1
- package/dist/browser/navigation-bridge.js +0 -708
- package/dist/browser/navigation-bridge.js.map +0 -1
- package/dist/browser/navigation-client.d.ts +0 -25
- package/dist/browser/navigation-client.d.ts.map +0 -1
- package/dist/browser/navigation-client.js +0 -157
- package/dist/browser/navigation-client.js.map +0 -1
- package/dist/browser/navigation-store.d.ts +0 -101
- package/dist/browser/navigation-store.d.ts.map +0 -1
- package/dist/browser/navigation-store.js +0 -625
- package/dist/browser/navigation-store.js.map +0 -1
- package/dist/browser/partial-update.d.ts +0 -75
- package/dist/browser/partial-update.d.ts.map +0 -1
- package/dist/browser/partial-update.js +0 -426
- package/dist/browser/partial-update.js.map +0 -1
- package/dist/browser/react/Link.d.ts +0 -86
- package/dist/browser/react/Link.d.ts.map +0 -1
- package/dist/browser/react/Link.js +0 -128
- package/dist/browser/react/Link.js.map +0 -1
- package/dist/browser/react/NavigationProvider.d.ts +0 -63
- package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
- package/dist/browser/react/NavigationProvider.js +0 -216
- package/dist/browser/react/NavigationProvider.js.map +0 -1
- package/dist/browser/react/ScrollRestoration.d.ts +0 -75
- package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
- package/dist/browser/react/ScrollRestoration.js +0 -57
- package/dist/browser/react/ScrollRestoration.js.map +0 -1
- package/dist/browser/react/context.d.ts +0 -46
- package/dist/browser/react/context.d.ts.map +0 -1
- package/dist/browser/react/context.js +0 -10
- package/dist/browser/react/context.js.map +0 -1
- package/dist/browser/react/index.d.ts +0 -11
- package/dist/browser/react/index.d.ts.map +0 -1
- package/dist/browser/react/index.js +0 -22
- package/dist/browser/react/index.js.map +0 -1
- package/dist/browser/react/location-state-shared.d.ts +0 -63
- package/dist/browser/react/location-state-shared.d.ts.map +0 -1
- package/dist/browser/react/location-state-shared.js +0 -81
- package/dist/browser/react/location-state-shared.js.map +0 -1
- package/dist/browser/react/location-state.d.ts +0 -23
- package/dist/browser/react/location-state.d.ts.map +0 -1
- package/dist/browser/react/location-state.js +0 -29
- package/dist/browser/react/location-state.js.map +0 -1
- package/dist/browser/react/mount-context.d.ts +0 -24
- package/dist/browser/react/mount-context.d.ts.map +0 -1
- package/dist/browser/react/mount-context.js +0 -24
- package/dist/browser/react/mount-context.js.map +0 -1
- package/dist/browser/react/use-action.d.ts +0 -64
- package/dist/browser/react/use-action.d.ts.map +0 -1
- package/dist/browser/react/use-action.js +0 -134
- package/dist/browser/react/use-action.js.map +0 -1
- package/dist/browser/react/use-client-cache.d.ts +0 -41
- package/dist/browser/react/use-client-cache.d.ts.map +0 -1
- package/dist/browser/react/use-client-cache.js +0 -39
- package/dist/browser/react/use-client-cache.js.map +0 -1
- package/dist/browser/react/use-handle.d.ts +0 -31
- package/dist/browser/react/use-handle.d.ts.map +0 -1
- package/dist/browser/react/use-handle.js +0 -144
- package/dist/browser/react/use-handle.js.map +0 -1
- package/dist/browser/react/use-href.d.ts +0 -33
- package/dist/browser/react/use-href.d.ts.map +0 -1
- package/dist/browser/react/use-href.js +0 -39
- package/dist/browser/react/use-href.js.map +0 -1
- package/dist/browser/react/use-link-status.d.ts +0 -37
- package/dist/browser/react/use-link-status.d.ts.map +0 -1
- package/dist/browser/react/use-link-status.js +0 -99
- package/dist/browser/react/use-link-status.js.map +0 -1
- package/dist/browser/react/use-mount.d.ts +0 -25
- package/dist/browser/react/use-mount.d.ts.map +0 -1
- package/dist/browser/react/use-mount.js +0 -30
- package/dist/browser/react/use-mount.js.map +0 -1
- package/dist/browser/react/use-navigation.d.ts +0 -27
- package/dist/browser/react/use-navigation.d.ts.map +0 -1
- package/dist/browser/react/use-navigation.js +0 -87
- package/dist/browser/react/use-navigation.js.map +0 -1
- package/dist/browser/react/use-segments.d.ts +0 -38
- package/dist/browser/react/use-segments.d.ts.map +0 -1
- package/dist/browser/react/use-segments.js +0 -130
- package/dist/browser/react/use-segments.js.map +0 -1
- package/dist/browser/request-controller.d.ts +0 -26
- package/dist/browser/request-controller.d.ts.map +0 -1
- package/dist/browser/request-controller.js +0 -147
- package/dist/browser/request-controller.js.map +0 -1
- package/dist/browser/rsc-router.d.ts +0 -129
- package/dist/browser/rsc-router.d.ts.map +0 -1
- package/dist/browser/rsc-router.js +0 -195
- package/dist/browser/rsc-router.js.map +0 -1
- package/dist/browser/scroll-restoration.d.ts +0 -93
- package/dist/browser/scroll-restoration.d.ts.map +0 -1
- package/dist/browser/scroll-restoration.js +0 -321
- package/dist/browser/scroll-restoration.js.map +0 -1
- package/dist/browser/segment-structure-assert.d.ts +0 -17
- package/dist/browser/segment-structure-assert.d.ts.map +0 -1
- package/dist/browser/segment-structure-assert.js +0 -59
- package/dist/browser/segment-structure-assert.js.map +0 -1
- package/dist/browser/server-action-bridge.d.ts +0 -26
- package/dist/browser/server-action-bridge.d.ts.map +0 -1
- package/dist/browser/server-action-bridge.js +0 -668
- package/dist/browser/server-action-bridge.js.map +0 -1
- package/dist/browser/shallow.d.ts +0 -12
- package/dist/browser/shallow.d.ts.map +0 -1
- package/dist/browser/shallow.js +0 -34
- package/dist/browser/shallow.js.map +0 -1
- package/dist/browser/types.d.ts +0 -369
- package/dist/browser/types.d.ts.map +0 -1
- package/dist/browser/types.js +0 -2
- package/dist/browser/types.js.map +0 -1
- package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
- package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-cli.test.js +0 -237
- package/dist/build/__tests__/generate-cli.test.js.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.js +0 -119
- package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.js +0 -620
- package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.js +0 -308
- package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
- package/dist/build/generate-manifest.d.ts +0 -81
- package/dist/build/generate-manifest.d.ts.map +0 -1
- package/dist/build/generate-manifest.js +0 -276
- package/dist/build/generate-manifest.js.map +0 -1
- package/dist/build/generate-route-types.d.ts +0 -115
- package/dist/build/generate-route-types.d.ts.map +0 -1
- package/dist/build/generate-route-types.js +0 -740
- package/dist/build/generate-route-types.js.map +0 -1
- package/dist/build/index.d.ts +0 -21
- package/dist/build/index.d.ts.map +0 -1
- package/dist/build/index.js +0 -21
- package/dist/build/index.js.map +0 -1
- package/dist/build/route-trie.d.ts +0 -71
- package/dist/build/route-trie.d.ts.map +0 -1
- package/dist/build/route-trie.js +0 -175
- package/dist/build/route-trie.js.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.js +0 -208
- package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
- package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
- package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
- package/dist/cache/__tests__/document-cache.test.js +0 -345
- package/dist/cache/__tests__/document-cache.test.js.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
- package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
- package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-store.test.js +0 -367
- package/dist/cache/__tests__/memory-store.test.js.map +0 -1
- package/dist/cache/cache-scope.d.ts +0 -102
- package/dist/cache/cache-scope.d.ts.map +0 -1
- package/dist/cache/cache-scope.js +0 -440
- package/dist/cache/cache-scope.js.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
- package/dist/cache/cf/cf-cache-store.d.ts +0 -165
- package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
- package/dist/cache/cf/cf-cache-store.js +0 -242
- package/dist/cache/cf/cf-cache-store.js.map +0 -1
- package/dist/cache/cf/index.d.ts +0 -14
- package/dist/cache/cf/index.d.ts.map +0 -1
- package/dist/cache/cf/index.js +0 -17
- package/dist/cache/cf/index.js.map +0 -1
- package/dist/cache/document-cache.d.ts +0 -64
- package/dist/cache/document-cache.d.ts.map +0 -1
- package/dist/cache/document-cache.js +0 -228
- package/dist/cache/document-cache.js.map +0 -1
- package/dist/cache/index.d.ts +0 -19
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/index.js +0 -21
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/memory-segment-store.d.ts +0 -110
- package/dist/cache/memory-segment-store.d.ts.map +0 -1
- package/dist/cache/memory-segment-store.js +0 -117
- package/dist/cache/memory-segment-store.js.map +0 -1
- package/dist/cache/memory-store.d.ts +0 -41
- package/dist/cache/memory-store.d.ts.map +0 -1
- package/dist/cache/memory-store.js +0 -191
- package/dist/cache/memory-store.js.map +0 -1
- package/dist/cache/types.d.ts +0 -317
- package/dist/cache/types.d.ts.map +0 -1
- package/dist/cache/types.js +0 -12
- package/dist/cache/types.js.map +0 -1
- package/dist/client.d.ts +0 -248
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -367
- package/dist/client.js.map +0 -1
- package/dist/client.rsc.d.ts +0 -26
- package/dist/client.rsc.d.ts.map +0 -1
- package/dist/client.rsc.js +0 -46
- package/dist/client.rsc.js.map +0 -1
- package/dist/component-utils.d.ts +0 -36
- package/dist/component-utils.d.ts.map +0 -1
- package/dist/component-utils.js +0 -61
- package/dist/component-utils.js.map +0 -1
- package/dist/components/DefaultDocument.d.ts +0 -13
- package/dist/components/DefaultDocument.d.ts.map +0 -1
- package/dist/components/DefaultDocument.js +0 -15
- package/dist/components/DefaultDocument.js.map +0 -1
- package/dist/debug.d.ts +0 -58
- package/dist/debug.d.ts.map +0 -1
- package/dist/debug.js +0 -157
- package/dist/debug.js.map +0 -1
- package/dist/default-error-boundary.d.ts +0 -11
- package/dist/default-error-boundary.d.ts.map +0 -1
- package/dist/default-error-boundary.js +0 -45
- package/dist/default-error-boundary.js.map +0 -1
- package/dist/deps/browser.d.ts +0 -2
- package/dist/deps/browser.d.ts.map +0 -1
- package/dist/deps/browser.js +0 -3
- package/dist/deps/browser.js.map +0 -1
- package/dist/deps/html-stream-client.d.ts +0 -2
- package/dist/deps/html-stream-client.d.ts.map +0 -1
- package/dist/deps/html-stream-client.js +0 -3
- package/dist/deps/html-stream-client.js.map +0 -1
- package/dist/deps/html-stream-server.d.ts +0 -2
- package/dist/deps/html-stream-server.d.ts.map +0 -1
- package/dist/deps/html-stream-server.js +0 -3
- package/dist/deps/html-stream-server.js.map +0 -1
- package/dist/deps/rsc.d.ts +0 -2
- package/dist/deps/rsc.d.ts.map +0 -1
- package/dist/deps/rsc.js +0 -4
- package/dist/deps/rsc.js.map +0 -1
- package/dist/deps/ssr.d.ts +0 -2
- package/dist/deps/ssr.d.ts.map +0 -1
- package/dist/deps/ssr.js +0 -3
- package/dist/deps/ssr.js.map +0 -1
- package/dist/errors.d.ts +0 -174
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -241
- package/dist/errors.js.map +0 -1
- package/dist/handle.d.ts +0 -78
- package/dist/handle.d.ts.map +0 -1
- package/dist/handle.js +0 -82
- package/dist/handle.js.map +0 -1
- package/dist/handles/MetaTags.d.ts +0 -14
- package/dist/handles/MetaTags.d.ts.map +0 -1
- package/dist/handles/MetaTags.js +0 -136
- package/dist/handles/MetaTags.js.map +0 -1
- package/dist/handles/index.d.ts +0 -6
- package/dist/handles/index.d.ts.map +0 -1
- package/dist/handles/index.js +0 -6
- package/dist/handles/index.js.map +0 -1
- package/dist/handles/meta.d.ts +0 -39
- package/dist/handles/meta.d.ts.map +0 -1
- package/dist/handles/meta.js +0 -202
- package/dist/handles/meta.js.map +0 -1
- package/dist/host/__tests__/errors.test.d.ts +0 -2
- package/dist/host/__tests__/errors.test.d.ts.map +0 -1
- package/dist/host/__tests__/errors.test.js +0 -76
- package/dist/host/__tests__/errors.test.js.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.js +0 -251
- package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
- package/dist/host/__tests__/router.test.d.ts +0 -2
- package/dist/host/__tests__/router.test.d.ts.map +0 -1
- package/dist/host/__tests__/router.test.js +0 -241
- package/dist/host/__tests__/router.test.js.map +0 -1
- package/dist/host/__tests__/testing.test.d.ts +0 -2
- package/dist/host/__tests__/testing.test.d.ts.map +0 -1
- package/dist/host/__tests__/testing.test.js +0 -64
- package/dist/host/__tests__/testing.test.js.map +0 -1
- package/dist/host/__tests__/utils.test.d.ts +0 -2
- package/dist/host/__tests__/utils.test.d.ts.map +0 -1
- package/dist/host/__tests__/utils.test.js +0 -29
- package/dist/host/__tests__/utils.test.js.map +0 -1
- package/dist/host/cookie-handler.d.ts +0 -34
- package/dist/host/cookie-handler.d.ts.map +0 -1
- package/dist/host/cookie-handler.js +0 -124
- package/dist/host/cookie-handler.js.map +0 -1
- package/dist/host/errors.d.ts +0 -56
- package/dist/host/errors.d.ts.map +0 -1
- package/dist/host/errors.js +0 -79
- package/dist/host/errors.js.map +0 -1
- package/dist/host/index.d.ts +0 -29
- package/dist/host/index.d.ts.map +0 -1
- package/dist/host/index.js +0 -32
- package/dist/host/index.js.map +0 -1
- package/dist/host/pattern-matcher.d.ts +0 -36
- package/dist/host/pattern-matcher.d.ts.map +0 -1
- package/dist/host/pattern-matcher.js +0 -172
- package/dist/host/pattern-matcher.js.map +0 -1
- package/dist/host/router.d.ts +0 -26
- package/dist/host/router.d.ts.map +0 -1
- package/dist/host/router.js +0 -218
- package/dist/host/router.js.map +0 -1
- package/dist/host/testing.d.ts +0 -36
- package/dist/host/testing.d.ts.map +0 -1
- package/dist/host/testing.js +0 -55
- package/dist/host/testing.js.map +0 -1
- package/dist/host/types.d.ts +0 -115
- package/dist/host/types.d.ts.map +0 -1
- package/dist/host/types.js +0 -7
- package/dist/host/types.js.map +0 -1
- package/dist/host/utils.d.ts +0 -21
- package/dist/host/utils.d.ts.map +0 -1
- package/dist/host/utils.js +0 -23
- package/dist/host/utils.js.map +0 -1
- package/dist/href-client.d.ts +0 -131
- package/dist/href-client.d.ts.map +0 -1
- package/dist/href-client.js +0 -64
- package/dist/href-client.js.map +0 -1
- package/dist/href-context.d.ts +0 -29
- package/dist/href-context.d.ts.map +0 -1
- package/dist/href-context.js +0 -21
- package/dist/href-context.js.map +0 -1
- package/dist/index.d.ts +0 -73
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -91
- package/dist/index.js.map +0 -1
- package/dist/index.rsc.d.ts +0 -32
- package/dist/index.rsc.d.ts.map +0 -1
- package/dist/index.rsc.js +0 -40
- package/dist/index.rsc.js.map +0 -1
- package/dist/internal-debug.d.ts +0 -2
- package/dist/internal-debug.d.ts.map +0 -1
- package/dist/internal-debug.js +0 -5
- package/dist/internal-debug.js.map +0 -1
- package/dist/loader.d.ts +0 -14
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -20
- package/dist/loader.js.map +0 -1
- package/dist/loader.rsc.d.ts +0 -19
- package/dist/loader.rsc.d.ts.map +0 -1
- package/dist/loader.rsc.js +0 -99
- package/dist/loader.rsc.js.map +0 -1
- package/dist/network-error-thrower.d.ts +0 -17
- package/dist/network-error-thrower.d.ts.map +0 -1
- package/dist/network-error-thrower.js +0 -14
- package/dist/network-error-thrower.js.map +0 -1
- package/dist/outlet-context.d.ts +0 -13
- package/dist/outlet-context.d.ts.map +0 -1
- package/dist/outlet-context.js +0 -3
- package/dist/outlet-context.js.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.js +0 -148
- package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
- package/dist/prerender/param-hash.d.ts +0 -16
- package/dist/prerender/param-hash.d.ts.map +0 -1
- package/dist/prerender/param-hash.js +0 -36
- package/dist/prerender/param-hash.js.map +0 -1
- package/dist/prerender/store.d.ts +0 -38
- package/dist/prerender/store.d.ts.map +0 -1
- package/dist/prerender/store.js +0 -61
- package/dist/prerender/store.js.map +0 -1
- package/dist/prerender.d.ts +0 -66
- package/dist/prerender.d.ts.map +0 -1
- package/dist/prerender.js +0 -57
- package/dist/prerender.js.map +0 -1
- package/dist/reverse.d.ts +0 -196
- package/dist/reverse.d.ts.map +0 -1
- package/dist/reverse.js +0 -78
- package/dist/reverse.js.map +0 -1
- package/dist/root-error-boundary.d.ts +0 -33
- package/dist/root-error-boundary.d.ts.map +0 -1
- package/dist/root-error-boundary.js +0 -165
- package/dist/root-error-boundary.js.map +0 -1
- package/dist/route-content-wrapper.d.ts +0 -46
- package/dist/route-content-wrapper.d.ts.map +0 -1
- package/dist/route-content-wrapper.js +0 -77
- package/dist/route-content-wrapper.js.map +0 -1
- package/dist/route-definition.d.ts +0 -421
- package/dist/route-definition.d.ts.map +0 -1
- package/dist/route-definition.js +0 -868
- package/dist/route-definition.js.map +0 -1
- package/dist/route-map-builder.d.ts +0 -155
- package/dist/route-map-builder.d.ts.map +0 -1
- package/dist/route-map-builder.js +0 -237
- package/dist/route-map-builder.js.map +0 -1
- package/dist/route-types.d.ts +0 -165
- package/dist/route-types.d.ts.map +0 -1
- package/dist/route-types.js +0 -7
- package/dist/route-types.js.map +0 -1
- package/dist/router/__tests__/handler-context.test.d.ts +0 -2
- package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/handler-context.test.js +0 -65
- package/dist/router/__tests__/handler-context.test.js.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
- package/dist/router/__tests__/match-context.test.d.ts +0 -2
- package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-context.test.js +0 -92
- package/dist/router/__tests__/match-context.test.js.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.js +0 -417
- package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
- package/dist/router/__tests__/match-result.test.d.ts +0 -2
- package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-result.test.js +0 -457
- package/dist/router/__tests__/match-result.test.js.map +0 -1
- package/dist/router/__tests__/on-error.test.d.ts +0 -2
- package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
- package/dist/router/__tests__/on-error.test.js +0 -678
- package/dist/router/__tests__/on-error.test.js.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.js +0 -629
- package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
- package/dist/router/error-handling.d.ts +0 -77
- package/dist/router/error-handling.d.ts.map +0 -1
- package/dist/router/error-handling.js +0 -202
- package/dist/router/error-handling.js.map +0 -1
- package/dist/router/handler-context.d.ts +0 -20
- package/dist/router/handler-context.d.ts.map +0 -1
- package/dist/router/handler-context.js +0 -198
- package/dist/router/handler-context.js.map +0 -1
- package/dist/router/intercept-resolution.d.ts +0 -66
- package/dist/router/intercept-resolution.d.ts.map +0 -1
- package/dist/router/intercept-resolution.js +0 -246
- package/dist/router/intercept-resolution.js.map +0 -1
- package/dist/router/loader-resolution.d.ts +0 -64
- package/dist/router/loader-resolution.d.ts.map +0 -1
- package/dist/router/loader-resolution.js +0 -284
- package/dist/router/loader-resolution.js.map +0 -1
- package/dist/router/logging.d.ts +0 -15
- package/dist/router/logging.d.ts.map +0 -1
- package/dist/router/logging.js +0 -99
- package/dist/router/logging.js.map +0 -1
- package/dist/router/manifest.d.ts +0 -22
- package/dist/router/manifest.d.ts.map +0 -1
- package/dist/router/manifest.js +0 -181
- package/dist/router/manifest.js.map +0 -1
- package/dist/router/match-api.d.ts +0 -35
- package/dist/router/match-api.d.ts.map +0 -1
- package/dist/router/match-api.js +0 -406
- package/dist/router/match-api.js.map +0 -1
- package/dist/router/match-context.d.ts +0 -206
- package/dist/router/match-context.d.ts.map +0 -1
- package/dist/router/match-context.js +0 -17
- package/dist/router/match-context.js.map +0 -1
- package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
- package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
- package/dist/router/match-middleware/background-revalidation.js +0 -75
- package/dist/router/match-middleware/background-revalidation.js.map +0 -1
- package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
- package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-lookup.js +0 -257
- package/dist/router/match-middleware/cache-lookup.js.map +0 -1
- package/dist/router/match-middleware/cache-store.d.ts +0 -113
- package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-store.js +0 -108
- package/dist/router/match-middleware/cache-store.js.map +0 -1
- package/dist/router/match-middleware/index.d.ts +0 -81
- package/dist/router/match-middleware/index.d.ts.map +0 -1
- package/dist/router/match-middleware/index.js +0 -80
- package/dist/router/match-middleware/index.js.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.js +0 -134
- package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
- package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
- package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/segment-resolution.js +0 -53
- package/dist/router/match-middleware/segment-resolution.js.map +0 -1
- package/dist/router/match-pipelines.d.ts +0 -147
- package/dist/router/match-pipelines.d.ts.map +0 -1
- package/dist/router/match-pipelines.js +0 -82
- package/dist/router/match-pipelines.js.map +0 -1
- package/dist/router/match-result.d.ts +0 -126
- package/dist/router/match-result.d.ts.map +0 -1
- package/dist/router/match-result.js +0 -93
- package/dist/router/match-result.js.map +0 -1
- package/dist/router/metrics.d.ts +0 -20
- package/dist/router/metrics.d.ts.map +0 -1
- package/dist/router/metrics.js +0 -47
- package/dist/router/metrics.js.map +0 -1
- package/dist/router/middleware.d.ts +0 -249
- package/dist/router/middleware.d.ts.map +0 -1
- package/dist/router/middleware.js +0 -434
- package/dist/router/middleware.js.map +0 -1
- package/dist/router/middleware.test.d.ts +0 -2
- package/dist/router/middleware.test.d.ts.map +0 -1
- package/dist/router/middleware.test.js +0 -816
- package/dist/router/middleware.test.js.map +0 -1
- package/dist/router/pattern-matching.d.ts +0 -149
- package/dist/router/pattern-matching.d.ts.map +0 -1
- package/dist/router/pattern-matching.js +0 -349
- package/dist/router/pattern-matching.js.map +0 -1
- package/dist/router/revalidation.d.ts +0 -44
- package/dist/router/revalidation.d.ts.map +0 -1
- package/dist/router/revalidation.js +0 -147
- package/dist/router/revalidation.js.map +0 -1
- package/dist/router/router-context.d.ts +0 -135
- package/dist/router/router-context.d.ts.map +0 -1
- package/dist/router/router-context.js +0 -36
- package/dist/router/router-context.js.map +0 -1
- package/dist/router/segment-resolution.d.ts +0 -127
- package/dist/router/segment-resolution.d.ts.map +0 -1
- package/dist/router/segment-resolution.js +0 -919
- package/dist/router/segment-resolution.js.map +0 -1
- package/dist/router/trie-matching.d.ts +0 -40
- package/dist/router/trie-matching.d.ts.map +0 -1
- package/dist/router/trie-matching.js +0 -127
- package/dist/router/trie-matching.js.map +0 -1
- package/dist/router/types.d.ts +0 -136
- package/dist/router/types.d.ts.map +0 -1
- package/dist/router/types.js +0 -7
- package/dist/router/types.js.map +0 -1
- package/dist/router.d.ts +0 -753
- package/dist/router.d.ts.map +0 -1
- package/dist/router.gen.d.ts +0 -6
- package/dist/router.gen.d.ts.map +0 -1
- package/dist/router.gen.js +0 -6
- package/dist/router.gen.js.map +0 -1
- package/dist/router.js +0 -1304
- package/dist/router.js.map +0 -1
- package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
- package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
- package/dist/rsc/__tests__/helpers.test.js +0 -140
- package/dist/rsc/__tests__/helpers.test.js.map +0 -1
- package/dist/rsc/handler.d.ts +0 -45
- package/dist/rsc/handler.d.ts.map +0 -1
- package/dist/rsc/handler.js +0 -1172
- package/dist/rsc/handler.js.map +0 -1
- package/dist/rsc/helpers.d.ts +0 -16
- package/dist/rsc/helpers.d.ts.map +0 -1
- package/dist/rsc/helpers.js +0 -55
- package/dist/rsc/helpers.js.map +0 -1
- package/dist/rsc/index.d.ts +0 -22
- package/dist/rsc/index.d.ts.map +0 -1
- package/dist/rsc/index.js +0 -23
- package/dist/rsc/index.js.map +0 -1
- package/dist/rsc/nonce.d.ts +0 -9
- package/dist/rsc/nonce.d.ts.map +0 -1
- package/dist/rsc/nonce.js +0 -18
- package/dist/rsc/nonce.js.map +0 -1
- package/dist/rsc/types.d.ts +0 -206
- package/dist/rsc/types.d.ts.map +0 -1
- package/dist/rsc/types.js +0 -8
- package/dist/rsc/types.js.map +0 -1
- package/dist/search-params.d.ts +0 -103
- package/dist/search-params.d.ts.map +0 -1
- package/dist/search-params.js +0 -74
- package/dist/search-params.js.map +0 -1
- package/dist/segment-system.d.ts +0 -75
- package/dist/segment-system.d.ts.map +0 -1
- package/dist/segment-system.js +0 -336
- package/dist/segment-system.js.map +0 -1
- package/dist/server/context.d.ts +0 -245
- package/dist/server/context.d.ts.map +0 -1
- package/dist/server/context.js +0 -197
- package/dist/server/context.js.map +0 -1
- package/dist/server/fetchable-loader-store.d.ts +0 -18
- package/dist/server/fetchable-loader-store.d.ts.map +0 -1
- package/dist/server/fetchable-loader-store.js +0 -18
- package/dist/server/fetchable-loader-store.js.map +0 -1
- package/dist/server/handle-store.d.ts +0 -85
- package/dist/server/handle-store.d.ts.map +0 -1
- package/dist/server/handle-store.js +0 -142
- package/dist/server/handle-store.js.map +0 -1
- package/dist/server/loader-registry.d.ts +0 -55
- package/dist/server/loader-registry.d.ts.map +0 -1
- package/dist/server/loader-registry.js +0 -132
- package/dist/server/loader-registry.js.map +0 -1
- package/dist/server/request-context.d.ts +0 -226
- package/dist/server/request-context.d.ts.map +0 -1
- package/dist/server/request-context.js +0 -290
- package/dist/server/request-context.js.map +0 -1
- package/dist/server/root-layout.d.ts +0 -4
- package/dist/server/root-layout.d.ts.map +0 -1
- package/dist/server/root-layout.js +0 -5
- package/dist/server/root-layout.js.map +0 -1
- package/dist/server.d.ts +0 -15
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -20
- package/dist/server.js.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
- package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
- package/dist/ssr/index.d.ts +0 -98
- package/dist/ssr/index.d.ts.map +0 -1
- package/dist/ssr/index.js +0 -158
- package/dist/ssr/index.js.map +0 -1
- package/dist/static-handler.d.ts +0 -50
- package/dist/static-handler.d.ts.map +0 -1
- package/dist/static-handler.gen.d.ts +0 -5
- package/dist/static-handler.gen.d.ts.map +0 -1
- package/dist/static-handler.gen.js +0 -5
- package/dist/static-handler.gen.js.map +0 -1
- package/dist/static-handler.js +0 -29
- package/dist/static-handler.js.map +0 -1
- package/dist/theme/ThemeProvider.d.ts +0 -20
- package/dist/theme/ThemeProvider.d.ts.map +0 -1
- package/dist/theme/ThemeProvider.js +0 -240
- package/dist/theme/ThemeProvider.js.map +0 -1
- package/dist/theme/ThemeScript.d.ts +0 -48
- package/dist/theme/ThemeScript.d.ts.map +0 -1
- package/dist/theme/ThemeScript.js +0 -13
- package/dist/theme/ThemeScript.js.map +0 -1
- package/dist/theme/__tests__/theme.test.d.ts +0 -2
- package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
- package/dist/theme/__tests__/theme.test.js +0 -103
- package/dist/theme/__tests__/theme.test.js.map +0 -1
- package/dist/theme/constants.d.ts +0 -29
- package/dist/theme/constants.d.ts.map +0 -1
- package/dist/theme/constants.js +0 -48
- package/dist/theme/constants.js.map +0 -1
- package/dist/theme/index.d.ts +0 -31
- package/dist/theme/index.d.ts.map +0 -1
- package/dist/theme/index.js +0 -36
- package/dist/theme/index.js.map +0 -1
- package/dist/theme/theme-context.d.ts +0 -40
- package/dist/theme/theme-context.d.ts.map +0 -1
- package/dist/theme/theme-context.js +0 -60
- package/dist/theme/theme-context.js.map +0 -1
- package/dist/theme/theme-script.d.ts +0 -27
- package/dist/theme/theme-script.d.ts.map +0 -1
- package/dist/theme/theme-script.js +0 -147
- package/dist/theme/theme-script.js.map +0 -1
- package/dist/theme/types.d.ts +0 -163
- package/dist/theme/types.d.ts.map +0 -1
- package/dist/theme/types.js +0 -11
- package/dist/theme/types.js.map +0 -1
- package/dist/theme/use-theme.d.ts +0 -12
- package/dist/theme/use-theme.d.ts.map +0 -1
- package/dist/theme/use-theme.js +0 -40
- package/dist/theme/use-theme.js.map +0 -1
- package/dist/types.d.ts +0 -1479
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -10
- package/dist/types.js.map +0 -1
- package/dist/urls.d.ts +0 -441
- package/dist/urls.d.ts.map +0 -1
- package/dist/urls.gen.d.ts +0 -8
- package/dist/urls.gen.d.ts.map +0 -1
- package/dist/urls.gen.js +0 -8
- package/dist/urls.gen.js.map +0 -1
- package/dist/urls.js +0 -443
- package/dist/urls.js.map +0 -1
- package/dist/use-loader.d.ts +0 -127
- package/dist/use-loader.d.ts.map +0 -1
- package/dist/use-loader.js +0 -237
- package/dist/use-loader.js.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
- package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.js +0 -39
- package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
- package/dist/vite/ast-handler-extract.d.ts +0 -49
- package/dist/vite/ast-handler-extract.d.ts.map +0 -1
- package/dist/vite/ast-handler-extract.js +0 -249
- package/dist/vite/ast-handler-extract.js.map +0 -1
- package/dist/vite/expose-action-id.d.ts +0 -19
- package/dist/vite/expose-action-id.d.ts.map +0 -1
- package/dist/vite/expose-action-id.js +0 -250
- package/dist/vite/expose-action-id.js.map +0 -1
- package/dist/vite/expose-id-utils.d.ts +0 -69
- package/dist/vite/expose-id-utils.d.ts.map +0 -1
- package/dist/vite/expose-id-utils.js +0 -289
- package/dist/vite/expose-id-utils.js.map +0 -1
- package/dist/vite/expose-internal-ids.d.ts +0 -22
- package/dist/vite/expose-internal-ids.d.ts.map +0 -1
- package/dist/vite/expose-internal-ids.js +0 -886
- package/dist/vite/expose-internal-ids.js.map +0 -1
- package/dist/vite/index.d.ts +0 -149
- package/dist/vite/index.d.ts.map +0 -1
- package/dist/vite/index.js.bak +0 -5448
- package/dist/vite/index.js.map +0 -1
- package/dist/vite/index.named-routes.gen.ts +0 -103
- package/dist/vite/package-resolution.d.ts +0 -43
- package/dist/vite/package-resolution.d.ts.map +0 -1
- package/dist/vite/package-resolution.js +0 -112
- package/dist/vite/package-resolution.js.map +0 -1
- package/dist/vite/virtual-entries.d.ts +0 -25
- package/dist/vite/virtual-entries.d.ts.map +0 -1
- package/dist/vite/virtual-entries.js +0 -110
- package/dist/vite/virtual-entries.js.map +0 -1
- package/src/browser/action-response-classifier.ts +0 -99
- package/src/browser/react/use-client-cache.ts +0 -58
- package/src/browser/shallow.ts +0 -40
- package/src/handles/index.ts +0 -7
- package/src/network-error-thrower.tsx +0 -23
- package/src/router/middleware-cookies.ts +0 -55
|
@@ -11,12 +11,17 @@ import {
|
|
|
11
11
|
getContext,
|
|
12
12
|
getNamePrefix,
|
|
13
13
|
getUrlPrefix,
|
|
14
|
+
requireDslContext,
|
|
14
15
|
type EntryData,
|
|
16
|
+
type EntryPropDatas,
|
|
17
|
+
type EntryPropSegments,
|
|
18
|
+
type HelperContext,
|
|
15
19
|
type InterceptEntry,
|
|
16
20
|
} from "../server/context";
|
|
17
21
|
import { invariant } from "../errors";
|
|
22
|
+
import { validateUserRouteName } from "../route-name.js";
|
|
18
23
|
import { isCachedFunction } from "../cache/taint.js";
|
|
19
|
-
import {
|
|
24
|
+
import { RangoContext } from "../server/context";
|
|
20
25
|
import { isStaticHandler } from "../static-handler.js";
|
|
21
26
|
import RootLayout from "../server/root-layout";
|
|
22
27
|
import type {
|
|
@@ -38,6 +43,7 @@ import type {
|
|
|
38
43
|
} from "../route-types.js";
|
|
39
44
|
import type { RouteHelpers } from "./helpers-types.js";
|
|
40
45
|
import { resolveHandlerUse, mergeHandlerUse } from "./resolve-handler-use.js";
|
|
46
|
+
import { ALL_USE_ITEM_TYPES } from "./use-item-types.js";
|
|
41
47
|
|
|
42
48
|
/**
|
|
43
49
|
* Check if an item contains routes (directly or inside nested structures like cache).
|
|
@@ -61,16 +67,105 @@ const hasRoutesInItem = (item: AllUseItems): boolean => {
|
|
|
61
67
|
return false;
|
|
62
68
|
};
|
|
63
69
|
|
|
70
|
+
/**
|
|
71
|
+
* Fresh empty collections shared by every from-scratch segment entry. Returns
|
|
72
|
+
* new arrays/objects per call so no two entries share mutable references.
|
|
73
|
+
* mountPath is intentionally NOT included here — each call site adds it from
|
|
74
|
+
* getUrlPrefix() where applicable: the route() and transition() helpers add
|
|
75
|
+
* none, while path() (which also builds a `type: "route"` entry) and the
|
|
76
|
+
* structural helpers (layout/cache/middleware/parallel) do.
|
|
77
|
+
*/
|
|
78
|
+
const emptySegmentBase = (): EntryPropDatas &
|
|
79
|
+
EntryPropSegments & { loading: undefined } => ({
|
|
80
|
+
loading: undefined,
|
|
81
|
+
middleware: [],
|
|
82
|
+
revalidate: [],
|
|
83
|
+
errorBoundary: [],
|
|
84
|
+
notFoundBoundary: [],
|
|
85
|
+
layout: [],
|
|
86
|
+
parallel: {},
|
|
87
|
+
intercept: [],
|
|
88
|
+
loader: [],
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Run a children/use callback as a nested scope, flatten the result, and assert
|
|
93
|
+
* every item is a valid use item. `kind` preserves the existing error wording
|
|
94
|
+
* ("use()" vs "children" callback).
|
|
95
|
+
*/
|
|
96
|
+
function runAndValidateUseItems(
|
|
97
|
+
store: ReturnType<typeof getContext>,
|
|
98
|
+
namespace: string,
|
|
99
|
+
entry: EntryData,
|
|
100
|
+
cb: () => any,
|
|
101
|
+
label: string,
|
|
102
|
+
kind: "use" | "children",
|
|
103
|
+
): AllUseItems[] {
|
|
104
|
+
const result = store.run(namespace, entry, cb)?.flat(3);
|
|
105
|
+
return validateUseItems(result, namespace, label, kind);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** Assert an already-invoked, flattened callback result is a use-item array. */
|
|
109
|
+
function validateUseItems(
|
|
110
|
+
result: any,
|
|
111
|
+
namespace: string,
|
|
112
|
+
label: string,
|
|
113
|
+
kind: "use" | "children",
|
|
114
|
+
): AllUseItems[] {
|
|
115
|
+
invariant(
|
|
116
|
+
Array.isArray(result) && result.every((item) => isValidUseItem(item)),
|
|
117
|
+
`${label}() ${kind === "use" ? "use()" : "children"} callback must return an array of use items [${namespace}]`,
|
|
118
|
+
);
|
|
119
|
+
return result as AllUseItems[];
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** True when a children/use result contains no routes (directly or nested). */
|
|
123
|
+
const isOrphan = (result: AllUseItems[]): boolean =>
|
|
124
|
+
!result.some((item) => item != null && hasRoutesInItem(item));
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Register a routeless structural entry as an orphan sibling: clear its parent
|
|
128
|
+
* pointer so it leaves the middleware/parent-pointer chain (LOAD-BEARING — see
|
|
129
|
+
* docs/tree-structure.md) and push it onto the parent's layout[] so it renders
|
|
130
|
+
* as a wrapper. Used by cache()/middleware()/transition(); layout() runs extra
|
|
131
|
+
* validation and registers inline.
|
|
132
|
+
*/
|
|
133
|
+
const attachOrphanSibling = (
|
|
134
|
+
parent: EntryData | null,
|
|
135
|
+
entry: EntryData,
|
|
136
|
+
): void => {
|
|
137
|
+
entry.parent = null;
|
|
138
|
+
if (parent && "layout" in parent) parent.layout.push(entry);
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Run `fn` with `ctx.parent` temporarily redirected to `temp` — a satellite
|
|
143
|
+
* entry that captures the attachments declared by a use() callback — restoring
|
|
144
|
+
* the original parent afterward, including on throw. loader()/intercept() each
|
|
145
|
+
* build their own tempParent shape (intercept keeps a loading get/set accessor
|
|
146
|
+
* and a captured-layouts array); this only centralizes the save/restore.
|
|
147
|
+
*/
|
|
148
|
+
function withParent<T>(ctx: HelperContext, temp: EntryData, fn: () => T): T {
|
|
149
|
+
const original = ctx.parent;
|
|
150
|
+
ctx.parent = temp;
|
|
151
|
+
try {
|
|
152
|
+
return fn();
|
|
153
|
+
} finally {
|
|
154
|
+
ctx.parent = original;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
64
158
|
const revalidate: RouteHelpers<any, any>["revalidate"] = (fn) => {
|
|
65
|
-
const ctx =
|
|
66
|
-
|
|
159
|
+
const { store, ctx } = requireDslContext(
|
|
160
|
+
"revalidate() must be called inside urls()",
|
|
161
|
+
);
|
|
67
162
|
|
|
68
163
|
// Attach to last entry in stack
|
|
69
164
|
const parent = ctx.parent;
|
|
70
165
|
if (!parent || !("revalidate" in parent)) {
|
|
71
166
|
invariant(false, "No parent entry available for revalidate()");
|
|
72
167
|
}
|
|
73
|
-
const name = `$${
|
|
168
|
+
const name = `$${store.getNextIndex("revalidate")}`;
|
|
74
169
|
parent.revalidate.push(fn);
|
|
75
170
|
return { name, type: "revalidate" } as RevalidateItem;
|
|
76
171
|
};
|
|
@@ -108,15 +203,16 @@ const revalidate: RouteHelpers<any, any>["revalidate"] = (fn) => {
|
|
|
108
203
|
* ```
|
|
109
204
|
*/
|
|
110
205
|
const errorBoundary: RouteHelpers<any, any>["errorBoundary"] = (fallback) => {
|
|
111
|
-
const ctx =
|
|
112
|
-
|
|
206
|
+
const { store, ctx } = requireDslContext(
|
|
207
|
+
"errorBoundary() must be called inside urls()",
|
|
208
|
+
);
|
|
113
209
|
|
|
114
210
|
// Attach to parent entry in stack
|
|
115
211
|
const parent = ctx.parent;
|
|
116
212
|
if (!parent || !("errorBoundary" in parent)) {
|
|
117
213
|
invariant(false, "No parent entry available for errorBoundary()");
|
|
118
214
|
}
|
|
119
|
-
const name = `$${
|
|
215
|
+
const name = `$${store.getNextIndex("errorBoundary")}`;
|
|
120
216
|
parent.errorBoundary.push(fallback);
|
|
121
217
|
return { name, type: "errorBoundary" } as ErrorBoundaryItem;
|
|
122
218
|
};
|
|
@@ -155,15 +251,16 @@ const errorBoundary: RouteHelpers<any, any>["errorBoundary"] = (fallback) => {
|
|
|
155
251
|
const notFoundBoundary: RouteHelpers<any, any>["notFoundBoundary"] = (
|
|
156
252
|
fallback,
|
|
157
253
|
) => {
|
|
158
|
-
const ctx =
|
|
159
|
-
|
|
254
|
+
const { store, ctx } = requireDslContext(
|
|
255
|
+
"notFoundBoundary() must be called inside urls()",
|
|
256
|
+
);
|
|
160
257
|
|
|
161
258
|
// Attach to parent entry in stack
|
|
162
259
|
const parent = ctx.parent;
|
|
163
260
|
if (!parent || !("notFoundBoundary" in parent)) {
|
|
164
261
|
invariant(false, "No parent entry available for notFoundBoundary()");
|
|
165
262
|
}
|
|
166
|
-
const name = `$${
|
|
263
|
+
const name = `$${store.getNextIndex("notFoundBoundary")}`;
|
|
167
264
|
parent.notFoundBoundary.push(fallback);
|
|
168
265
|
return { name, type: "notFoundBoundary" } as NotFoundBoundaryItem;
|
|
169
266
|
};
|
|
@@ -177,8 +274,9 @@ const notFoundBoundary: RouteHelpers<any, any>["notFoundBoundary"] = (
|
|
|
177
274
|
* for the intercept to activate.
|
|
178
275
|
*/
|
|
179
276
|
const when: RouteHelpers<any, any>["when"] = (fn) => {
|
|
180
|
-
const ctx =
|
|
181
|
-
|
|
277
|
+
const { store, ctx } = requireDslContext(
|
|
278
|
+
"when() must be called inside intercept()",
|
|
279
|
+
);
|
|
182
280
|
|
|
183
281
|
// The when() function needs to be captured by the intercept's tempParent
|
|
184
282
|
// which should have a `when` array. If not present, we're not inside intercept()
|
|
@@ -190,7 +288,7 @@ const when: RouteHelpers<any, any>["when"] = (fn) => {
|
|
|
190
288
|
);
|
|
191
289
|
}
|
|
192
290
|
|
|
193
|
-
const name = `$${
|
|
291
|
+
const name = `$${store.getNextIndex("when")}`;
|
|
194
292
|
parent.when.push(fn);
|
|
195
293
|
return { name, type: "when" } as WhenItem;
|
|
196
294
|
};
|
|
@@ -205,21 +303,21 @@ const when: RouteHelpers<any, any>["when"] = (fn) => {
|
|
|
205
303
|
* Supports these call signatures:
|
|
206
304
|
* - cache() - no args, uses app-level defaults (for loader caching)
|
|
207
305
|
* - cache(() => [...]) - wraps children with app-level defaults
|
|
208
|
-
* - cache('profileName') - uses a named cache profile
|
|
209
|
-
* - cache('profileName', () => [...]) - named profile with children
|
|
210
306
|
* - cache({ ttl: 60 }, () => [...]) - with explicit options
|
|
307
|
+
*
|
|
308
|
+
* Named cache profiles are applied via the `"use cache: <profile>"` directive,
|
|
309
|
+
* not a `cache("profileName")` form in the route tree.
|
|
211
310
|
*/
|
|
212
311
|
const cache: RouteHelpers<any, any>["cache"] = (
|
|
213
312
|
optionsOrChildren?:
|
|
214
313
|
| PartialCacheOptions
|
|
215
314
|
| false
|
|
216
|
-
| string
|
|
217
315
|
| (() => UseItems<AllUseItems>),
|
|
218
316
|
maybeChildren?: () => UseItems<AllUseItems>,
|
|
219
317
|
) => {
|
|
220
|
-
const store =
|
|
221
|
-
|
|
222
|
-
|
|
318
|
+
const { store, ctx } = requireDslContext(
|
|
319
|
+
"cache() must be called inside urls()",
|
|
320
|
+
);
|
|
223
321
|
|
|
224
322
|
// Handle overloaded signature
|
|
225
323
|
let options: PartialCacheOptions | false;
|
|
@@ -229,18 +327,6 @@ const cache: RouteHelpers<any, any>["cache"] = (
|
|
|
229
327
|
// cache() - no args, use defaults
|
|
230
328
|
options = {};
|
|
231
329
|
children = undefined;
|
|
232
|
-
} else if (typeof optionsOrChildren === "string") {
|
|
233
|
-
// cache('profileName') or cache('profileName', () => [...])
|
|
234
|
-
// Resolve from context-scoped profiles (set per-router via HelperContext).
|
|
235
|
-
const ctxStore = RSCRouterContext.getStore();
|
|
236
|
-
const profile = ctxStore?.cacheProfiles?.[optionsOrChildren];
|
|
237
|
-
invariant(
|
|
238
|
-
profile,
|
|
239
|
-
`cache("${optionsOrChildren}"): unknown cache profile. ` +
|
|
240
|
-
`Define it in createRouter({ cacheProfiles: { "${optionsOrChildren}": { ttl: ... } } }).`,
|
|
241
|
-
);
|
|
242
|
-
options = { ttl: profile.ttl, swr: profile.swr, tags: profile.tags };
|
|
243
|
-
children = maybeChildren;
|
|
244
330
|
} else if (typeof optionsOrChildren === "function") {
|
|
245
331
|
// cache(() => [...]) - use empty options (will use defaults)
|
|
246
332
|
options = {};
|
|
@@ -271,26 +357,18 @@ const cache: RouteHelpers<any, any>["cache"] = (
|
|
|
271
357
|
// Create orphan cache entry (like orphan layout)
|
|
272
358
|
// Subsequent siblings in the same array will attach to this entry
|
|
273
359
|
const namespace = `${ctx.namespace}.${cacheIndex}`;
|
|
274
|
-
const
|
|
360
|
+
const urlPrefix = getUrlPrefix();
|
|
275
361
|
|
|
276
362
|
const entry = {
|
|
363
|
+
...emptySegmentBase(),
|
|
277
364
|
id: namespace,
|
|
278
365
|
shortCode: store.getShortCode("cache"),
|
|
279
366
|
type: "cache",
|
|
280
367
|
parent: parent, // link to current parent for hierarchy
|
|
281
368
|
cache: cacheConfig,
|
|
282
369
|
handler: RootLayout,
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
revalidate: [],
|
|
286
|
-
errorBoundary: [],
|
|
287
|
-
notFoundBoundary: [],
|
|
288
|
-
layout: [],
|
|
289
|
-
parallel: {},
|
|
290
|
-
intercept: [],
|
|
291
|
-
loader: [],
|
|
292
|
-
...(cacheUrlPrefix ? { mountPath: cacheUrlPrefix } : {}),
|
|
293
|
-
} as EntryData;
|
|
370
|
+
...(urlPrefix ? { mountPath: urlPrefix } : {}),
|
|
371
|
+
} satisfies EntryData;
|
|
294
372
|
|
|
295
373
|
// Attach to parent's layout array (cache entries are structural like layouts)
|
|
296
374
|
if (parent && "layout" in parent) {
|
|
@@ -304,13 +382,23 @@ const cache: RouteHelpers<any, any>["cache"] = (
|
|
|
304
382
|
return { name: namespace, type: "cache" } as CacheItem;
|
|
305
383
|
}
|
|
306
384
|
|
|
385
|
+
// Inside a loader() use() callback, only the direct form — cache()/cache(opts)
|
|
386
|
+
// — writes cache config to the loader entry. The wrapper form creates a
|
|
387
|
+
// structural cache boundary with its own children scope, which has no effect
|
|
388
|
+
// on the loader and would silently no-op.
|
|
389
|
+
invariant(
|
|
390
|
+
!(ctx.parent && (ctx.parent as any).type === "loader"),
|
|
391
|
+
"cache() wrapper form is not valid inside loader() use(). Use cache({...}) without children to configure the loader's cache.",
|
|
392
|
+
);
|
|
393
|
+
|
|
307
394
|
// With children: create a cache entry (like layout with caching semantics)
|
|
308
395
|
const namespace = `${ctx.namespace}.${cacheIndex}`;
|
|
309
396
|
const cacheShortCode = store.getShortCode("cache");
|
|
310
397
|
|
|
311
|
-
const
|
|
398
|
+
const urlPrefix = getUrlPrefix();
|
|
312
399
|
|
|
313
400
|
const entry = {
|
|
401
|
+
...emptySegmentBase(),
|
|
314
402
|
id: namespace,
|
|
315
403
|
shortCode: cacheShortCode,
|
|
316
404
|
type: "cache",
|
|
@@ -318,40 +406,22 @@ const cache: RouteHelpers<any, any>["cache"] = (
|
|
|
318
406
|
cache: cacheConfig,
|
|
319
407
|
// Cache entries render like layouts (with Outlet as default handler)
|
|
320
408
|
handler: RootLayout, // RootLayout just renders <Outlet />
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
revalidate: [],
|
|
324
|
-
errorBoundary: [],
|
|
325
|
-
notFoundBoundary: [],
|
|
326
|
-
layout: [],
|
|
327
|
-
parallel: {},
|
|
328
|
-
intercept: [],
|
|
329
|
-
loader: [],
|
|
330
|
-
...(cacheUrlPrefix2 ? { mountPath: cacheUrlPrefix2 } : {}),
|
|
331
|
-
} as EntryData;
|
|
409
|
+
...(urlPrefix ? { mountPath: urlPrefix } : {}),
|
|
410
|
+
} satisfies EntryData;
|
|
332
411
|
|
|
333
412
|
// Run children with cache entry as parent
|
|
334
|
-
const result =
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
413
|
+
const result = runAndValidateUseItems(
|
|
414
|
+
store,
|
|
415
|
+
namespace,
|
|
416
|
+
entry,
|
|
417
|
+
children,
|
|
418
|
+
"cache",
|
|
419
|
+
"children",
|
|
339
420
|
);
|
|
340
421
|
|
|
341
|
-
//
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
Array.isArray(result) &&
|
|
345
|
-
result.some((item) => hasRoutesInItem(item));
|
|
346
|
-
|
|
347
|
-
if (!hasRoutes) {
|
|
348
|
-
const parent = ctx.parent;
|
|
349
|
-
if (parent && "layout" in parent) {
|
|
350
|
-
// Attach to parent's layout array (cache entries are structural like layouts)
|
|
351
|
-
entry.parent = null;
|
|
352
|
-
parent.layout.push(entry);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
422
|
+
// Cache entries are structural like layouts: with no routes inside, register
|
|
423
|
+
// as an orphan sibling.
|
|
424
|
+
if (isOrphan(result)) attachOrphanSibling(ctx.parent, entry);
|
|
355
425
|
|
|
356
426
|
return { name: namespace, type: "cache", uses: result } as CacheItem;
|
|
357
427
|
};
|
|
@@ -397,9 +467,9 @@ const middleware: RouteHelpers<any, any>["middleware"] = (...args: any[]) => {
|
|
|
397
467
|
}
|
|
398
468
|
}
|
|
399
469
|
|
|
400
|
-
const store =
|
|
401
|
-
|
|
402
|
-
|
|
470
|
+
const { store, ctx } = requireDslContext(
|
|
471
|
+
"middleware() must be called inside urls()",
|
|
472
|
+
);
|
|
403
473
|
|
|
404
474
|
if (!children) {
|
|
405
475
|
// Sibling mode: attach to parent entry
|
|
@@ -418,22 +488,15 @@ const middleware: RouteHelpers<any, any>["middleware"] = (...args: any[]) => {
|
|
|
418
488
|
|
|
419
489
|
const urlPrefix = getUrlPrefix();
|
|
420
490
|
const entry = {
|
|
491
|
+
...emptySegmentBase(),
|
|
421
492
|
id: namespace,
|
|
422
493
|
shortCode: store.getShortCode("layout"),
|
|
423
494
|
type: "layout",
|
|
424
495
|
parent: ctx.parent,
|
|
425
496
|
handler: RootLayout,
|
|
426
|
-
loading: undefined,
|
|
427
497
|
middleware: [...fns],
|
|
428
|
-
revalidate: [],
|
|
429
|
-
errorBoundary: [],
|
|
430
|
-
notFoundBoundary: [],
|
|
431
|
-
layout: [],
|
|
432
|
-
parallel: {},
|
|
433
|
-
intercept: [],
|
|
434
|
-
loader: [],
|
|
435
498
|
...(urlPrefix ? { mountPath: urlPrefix } : {}),
|
|
436
|
-
}
|
|
499
|
+
} satisfies EntryData;
|
|
437
500
|
|
|
438
501
|
// Run children callback. If the second arg was actually a middleware fn
|
|
439
502
|
// (old variadic form: middleware(mw1, mw2)), this will return a non-array
|
|
@@ -446,25 +509,14 @@ const middleware: RouteHelpers<any, any>["middleware"] = (...args: any[]) => {
|
|
|
446
509
|
"To pass multiple middleware, use middleware([fn1, fn2]).",
|
|
447
510
|
);
|
|
448
511
|
|
|
449
|
-
const result =
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
512
|
+
const result = validateUseItems(
|
|
513
|
+
rawResult.flat(3),
|
|
514
|
+
namespace,
|
|
515
|
+
"middleware",
|
|
516
|
+
"children",
|
|
454
517
|
);
|
|
455
518
|
|
|
456
|
-
|
|
457
|
-
result &&
|
|
458
|
-
Array.isArray(result) &&
|
|
459
|
-
result.some((item) => item != null && hasRoutesInItem(item));
|
|
460
|
-
|
|
461
|
-
if (!hasRoutes) {
|
|
462
|
-
const parent = ctx.parent;
|
|
463
|
-
if (parent && "layout" in parent) {
|
|
464
|
-
entry.parent = null;
|
|
465
|
-
parent.layout.push(entry);
|
|
466
|
-
}
|
|
467
|
-
}
|
|
519
|
+
if (isOrphan(result)) attachOrphanSibling(ctx.parent, entry);
|
|
468
520
|
|
|
469
521
|
return {
|
|
470
522
|
name: namespace,
|
|
@@ -473,10 +525,26 @@ const middleware: RouteHelpers<any, any>["middleware"] = (...args: any[]) => {
|
|
|
473
525
|
} as MiddlewareItem;
|
|
474
526
|
};
|
|
475
527
|
|
|
528
|
+
// Slot names become part of segment ids: a parallel/intercept slot is encoded
|
|
529
|
+
// as `${shortCode}.${slotName}`, and loader segments append `D${index}.${loaderId}`.
|
|
530
|
+
// A "." in the slot name collides with that separator -- loaderParentId
|
|
531
|
+
// (segment-system.tsx) strips from the FIRST `D<index>.`, so a name like
|
|
532
|
+
// "@D3.foo" is mis-cut to "@" and the loader's data is silently dropped. Reject
|
|
533
|
+
// the dot at definition time so the failure is loud, not a corrupted tree at
|
|
534
|
+
// runtime. (A bare "D" without a trailing dot -- e.g. "@Detail" -- is fine.)
|
|
535
|
+
function assertValidSlotName(slotName: string): void {
|
|
536
|
+
invariant(
|
|
537
|
+
!slotName.includes("."),
|
|
538
|
+
`Slot name "${slotName}" must not contain ".". The dot is a reserved ` +
|
|
539
|
+
`segment-id separator; a name like "@D3.foo" corrupts loader segment-id ` +
|
|
540
|
+
`parsing and silently drops the loader's data. Rename the slot.`,
|
|
541
|
+
);
|
|
542
|
+
}
|
|
543
|
+
|
|
476
544
|
const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
477
|
-
const store =
|
|
478
|
-
|
|
479
|
-
|
|
545
|
+
const { store, ctx } = requireDslContext(
|
|
546
|
+
"parallel() must be called inside urls()",
|
|
547
|
+
);
|
|
480
548
|
|
|
481
549
|
if (!ctx.parent || !ctx.parent?.parallel) {
|
|
482
550
|
invariant(false, "No parent entry available for parallel()");
|
|
@@ -488,6 +556,7 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
|
488
556
|
);
|
|
489
557
|
|
|
490
558
|
const slotNames = Object.keys(slots as Record<string, any>) as `@${string}`[];
|
|
559
|
+
for (const slotName of slotNames) assertValidSlotName(slotName);
|
|
491
560
|
|
|
492
561
|
const namespace = `${ctx.namespace}.$${store.getNextIndex("parallel")}`;
|
|
493
562
|
|
|
@@ -528,20 +597,12 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
|
528
597
|
// Create full EntryData for parallel with its own loaders/revalidate/loading
|
|
529
598
|
const parallelUrlPrefix = getUrlPrefix();
|
|
530
599
|
const entry = {
|
|
600
|
+
...emptySegmentBase(),
|
|
531
601
|
id: namespace,
|
|
532
602
|
shortCode: store.getShortCode("parallel"),
|
|
533
603
|
type: "parallel",
|
|
534
604
|
parent: null, // Parallels don't participate in parent chain traversal
|
|
535
605
|
handler: unwrappedSlots,
|
|
536
|
-
loading: undefined, // Allow loading() to attach loading state
|
|
537
|
-
middleware: [],
|
|
538
|
-
revalidate: [],
|
|
539
|
-
errorBoundary: [],
|
|
540
|
-
notFoundBoundary: [],
|
|
541
|
-
layout: [],
|
|
542
|
-
parallel: {},
|
|
543
|
-
intercept: [],
|
|
544
|
-
loader: [],
|
|
545
606
|
...(parallelUrlPrefix ? { mountPath: parallelUrlPrefix } : {}),
|
|
546
607
|
...(hasStaticSlot
|
|
547
608
|
? {
|
|
@@ -596,10 +657,13 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
|
596
657
|
"parallel",
|
|
597
658
|
);
|
|
598
659
|
if (slotMergedUse) {
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
660
|
+
runAndValidateUseItems(
|
|
661
|
+
store,
|
|
662
|
+
namespace,
|
|
663
|
+
slotEntry,
|
|
664
|
+
slotMergedUse,
|
|
665
|
+
"parallel",
|
|
666
|
+
"use",
|
|
603
667
|
);
|
|
604
668
|
}
|
|
605
669
|
|
|
@@ -639,9 +703,9 @@ const intercept = (
|
|
|
639
703
|
handler: any,
|
|
640
704
|
use?: () => any[],
|
|
641
705
|
) => {
|
|
642
|
-
const store =
|
|
643
|
-
|
|
644
|
-
|
|
706
|
+
const { store, ctx } = requireDslContext(
|
|
707
|
+
"intercept() must be called inside urls()",
|
|
708
|
+
);
|
|
645
709
|
|
|
646
710
|
if (!ctx.parent || !ctx.parent?.intercept) {
|
|
647
711
|
invariant(false, "No parent entry available for intercept()");
|
|
@@ -652,6 +716,8 @@ const intercept = (
|
|
|
652
716
|
"intercept() cannot be used inside parallel()",
|
|
653
717
|
);
|
|
654
718
|
|
|
719
|
+
assertValidSlotName(slotName);
|
|
720
|
+
|
|
655
721
|
const namespace = `${ctx.namespace}.$${store.getNextIndex("intercept")}.${slotName}`;
|
|
656
722
|
|
|
657
723
|
// Dot-prefixed = local (add include prefix), unprefixed = global (use as-is)
|
|
@@ -680,15 +746,13 @@ const intercept = (
|
|
|
680
746
|
|
|
681
747
|
// Run merged use callback to collect loaders, revalidate, middleware, etc.
|
|
682
748
|
if (mergedUse) {
|
|
683
|
-
//
|
|
684
|
-
// so that middleware, loader, revalidate attach to the intercept entry
|
|
685
|
-
const originalParent = ctx.parent;
|
|
686
|
-
|
|
687
|
-
// Capture layouts in a temporary array
|
|
749
|
+
// Capture layout() calls into a temporary array
|
|
688
750
|
const capturedLayouts: EntryData[] = [];
|
|
689
751
|
|
|
752
|
+
// Temporary parent so middleware/loader/revalidate/when attach to the
|
|
753
|
+
// intercept entry; the loading get/set accessor mirrors writes onto `entry`.
|
|
690
754
|
const tempParent = {
|
|
691
|
-
...
|
|
755
|
+
...ctx.parent,
|
|
692
756
|
middleware: entry.middleware,
|
|
693
757
|
revalidate: entry.revalidate,
|
|
694
758
|
errorBoundary: entry.errorBoundary,
|
|
@@ -696,7 +760,6 @@ const intercept = (
|
|
|
696
760
|
loader: entry.loader,
|
|
697
761
|
layout: capturedLayouts, // Capture layout() calls
|
|
698
762
|
when: entry.when, // Capture when() conditions
|
|
699
|
-
// Use getter/setter to capture loading on the entry
|
|
700
763
|
get loading() {
|
|
701
764
|
return entry.loading;
|
|
702
765
|
},
|
|
@@ -704,12 +767,10 @@ const intercept = (
|
|
|
704
767
|
entry.loading = value;
|
|
705
768
|
},
|
|
706
769
|
};
|
|
707
|
-
ctx.parent = tempParent as EntryData;
|
|
708
|
-
|
|
709
|
-
const result = mergedUse()?.flat(3);
|
|
710
770
|
|
|
711
|
-
|
|
712
|
-
|
|
771
|
+
const result = withParent(ctx, tempParent as EntryData, () =>
|
|
772
|
+
mergedUse()?.flat(3),
|
|
773
|
+
);
|
|
713
774
|
|
|
714
775
|
// Extract layout from captured layouts (use first one if multiple)
|
|
715
776
|
// Layout inside intercept should always be ReactNode or Handler, not Record slots
|
|
@@ -719,10 +780,7 @@ const intercept = (
|
|
|
719
780
|
| Handler<any, any, any>;
|
|
720
781
|
}
|
|
721
782
|
|
|
722
|
-
|
|
723
|
-
Array.isArray(result) && result.every((item) => isValidUseItem(item)),
|
|
724
|
-
`intercept() use() callback must return an array of use items [${namespace}]`,
|
|
725
|
-
);
|
|
783
|
+
validateUseItems(result, namespace, "intercept", "use");
|
|
726
784
|
}
|
|
727
785
|
|
|
728
786
|
ctx.parent.intercept.push(entry);
|
|
@@ -732,10 +790,10 @@ const intercept = (
|
|
|
732
790
|
/**
|
|
733
791
|
* Loader helper - attaches a loader to the current entry
|
|
734
792
|
*/
|
|
735
|
-
const
|
|
736
|
-
const store =
|
|
737
|
-
|
|
738
|
-
|
|
793
|
+
const loader: RouteHelpers<any, any>["loader"] = (loaderDef, use) => {
|
|
794
|
+
const { store, ctx } = requireDslContext(
|
|
795
|
+
"loader() must be called inside urls()",
|
|
796
|
+
);
|
|
739
797
|
|
|
740
798
|
// Attach to last entry in stack
|
|
741
799
|
if (!ctx.parent || !ctx.parent?.loader) {
|
|
@@ -750,25 +808,28 @@ const loaderFn: RouteHelpers<any, any>["loader"] = (loaderDef, use) => {
|
|
|
750
808
|
revalidate: [] as ShouldRevalidateFn<any, any>[],
|
|
751
809
|
};
|
|
752
810
|
|
|
753
|
-
//
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
811
|
+
// Merge handler.use defaults (attached to the loader definition) with explicit use
|
|
812
|
+
const handlerUseFn = resolveHandlerUse(loaderDef);
|
|
813
|
+
const mergedUse = mergeHandlerUse(handlerUseFn, use, "loader");
|
|
814
|
+
|
|
815
|
+
// If any use callback is in effect, run it to collect revalidation rules and cache config
|
|
816
|
+
if (mergedUse) {
|
|
757
817
|
// Create a temporary "parent" with type "loader" so cache() can detect it.
|
|
758
818
|
// Save existing .cache to distinguish inherited config from newly set config.
|
|
759
|
-
const parentCache = (
|
|
819
|
+
const parentCache = (ctx.parent as any).cache;
|
|
760
820
|
const tempParent = {
|
|
761
|
-
...
|
|
821
|
+
...ctx.parent,
|
|
762
822
|
type: "loader",
|
|
763
823
|
revalidate: loaderEntry.revalidate,
|
|
764
824
|
};
|
|
765
|
-
ctx.parent = tempParent as EntryData;
|
|
766
825
|
|
|
767
|
-
const result =
|
|
826
|
+
const result = withParent(ctx, tempParent as EntryData, () =>
|
|
827
|
+
mergedUse()?.flat(3),
|
|
828
|
+
);
|
|
768
829
|
|
|
769
830
|
// Copy cache config only if cache() was called during the use() callback.
|
|
770
|
-
// The spread
|
|
771
|
-
//
|
|
831
|
+
// The spread may carry an inherited .cache from a parent cache() boundary —
|
|
832
|
+
// only copy if it was newly set.
|
|
772
833
|
if (
|
|
773
834
|
(tempParent as any).cache &&
|
|
774
835
|
(tempParent as any).cache !== parentCache
|
|
@@ -776,13 +837,7 @@ const loaderFn: RouteHelpers<any, any>["loader"] = (loaderDef, use) => {
|
|
|
776
837
|
(loaderEntry as any).cache = (tempParent as any).cache;
|
|
777
838
|
}
|
|
778
839
|
|
|
779
|
-
|
|
780
|
-
ctx.parent = originalParent;
|
|
781
|
-
|
|
782
|
-
invariant(
|
|
783
|
-
Array.isArray(result) && result.every((item) => isValidUseItem(item)),
|
|
784
|
-
`loader() use() callback must return an array of use items [${name}]`,
|
|
785
|
-
);
|
|
840
|
+
validateUseItems(result, name, "loader", "use");
|
|
786
841
|
}
|
|
787
842
|
|
|
788
843
|
ctx.parent.loader.push(loaderEntry);
|
|
@@ -793,10 +848,10 @@ const loaderFn: RouteHelpers<any, any>["loader"] = (loaderDef, use) => {
|
|
|
793
848
|
* Loading helper - attaches a loading component to the current entry
|
|
794
849
|
* Loading components are static (no context) and shown during navigation
|
|
795
850
|
*/
|
|
796
|
-
const
|
|
797
|
-
const store =
|
|
798
|
-
|
|
799
|
-
|
|
851
|
+
const loading: RouteHelpers<any, any>["loading"] = (component, options) => {
|
|
852
|
+
const { store, ctx } = requireDslContext(
|
|
853
|
+
"loading() must be called inside urls()",
|
|
854
|
+
);
|
|
800
855
|
|
|
801
856
|
const parent = ctx.parent;
|
|
802
857
|
if (!parent || !("loading" in parent)) {
|
|
@@ -819,10 +874,13 @@ const loadingFn: RouteHelpers<any, any>["loading"] = (component, options) => {
|
|
|
819
874
|
};
|
|
820
875
|
|
|
821
876
|
/**
|
|
822
|
-
* Transition helper -
|
|
823
|
-
*
|
|
877
|
+
* Transition helper - opts the entry (or a wrapped group of routes) into
|
|
878
|
+
* transition-driven navigation by attaching a TransitionConfig. This drives the
|
|
879
|
+
* commit through startTransition (content hold on all React versions) and, on
|
|
880
|
+
* experimental React, places a `<ViewTransition>` boundary unless
|
|
881
|
+
* `viewTransition: false`. See skills/view-transitions for the matrix.
|
|
824
882
|
*/
|
|
825
|
-
const
|
|
883
|
+
const transition = (
|
|
826
884
|
configOrChildren?: TransitionConfig | (() => UseItems<AllUseItems>),
|
|
827
885
|
maybeChildren?: () => UseItems<AllUseItems>,
|
|
828
886
|
): TransitionItem => {
|
|
@@ -836,11 +894,15 @@ const transitionFn = (
|
|
|
836
894
|
const children: (() => UseItems<AllUseItems>) | undefined =
|
|
837
895
|
typeof configOrChildren === "function" ? configOrChildren : maybeChildren;
|
|
838
896
|
|
|
839
|
-
const store =
|
|
840
|
-
|
|
841
|
-
|
|
897
|
+
const { store, ctx } = requireDslContext(
|
|
898
|
+
"transition() must be called inside urls()",
|
|
899
|
+
);
|
|
842
900
|
|
|
843
|
-
|
|
901
|
+
// Allocate a single index for this transition() call (used in all paths),
|
|
902
|
+
// mirroring cache() — the child form uses it for the name, the wrapper form
|
|
903
|
+
// reuses it for the namespace, so no index is burned.
|
|
904
|
+
const transitionIndex = store.getNextIndex("transition");
|
|
905
|
+
const name = `$${transitionIndex}`;
|
|
844
906
|
|
|
845
907
|
if (!children) {
|
|
846
908
|
// Position 1: child of path() — attach to parent entry
|
|
@@ -853,70 +915,51 @@ const transitionFn = (
|
|
|
853
915
|
}
|
|
854
916
|
|
|
855
917
|
// Position 2: wrapper — create a transparent layout with transition config
|
|
856
|
-
const namespace = `${ctx.namespace}.${
|
|
918
|
+
const namespace = `${ctx.namespace}.${transitionIndex}`;
|
|
857
919
|
const entry = {
|
|
920
|
+
...emptySegmentBase(),
|
|
858
921
|
id: namespace,
|
|
859
922
|
shortCode: store.getShortCode("layout"),
|
|
860
923
|
type: "layout",
|
|
861
924
|
parent: ctx.parent,
|
|
862
925
|
handler: RootLayout,
|
|
863
|
-
loading: undefined,
|
|
864
926
|
transition: config,
|
|
865
|
-
|
|
866
|
-
revalidate: [],
|
|
867
|
-
errorBoundary: [],
|
|
868
|
-
notFoundBoundary: [],
|
|
869
|
-
layout: [],
|
|
870
|
-
parallel: {},
|
|
871
|
-
intercept: [],
|
|
872
|
-
loader: [],
|
|
873
|
-
} as EntryData;
|
|
874
|
-
|
|
875
|
-
const result = store.run(namespace, entry, children)?.flat(3);
|
|
927
|
+
} satisfies EntryData;
|
|
876
928
|
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
929
|
+
const result = runAndValidateUseItems(
|
|
930
|
+
store,
|
|
931
|
+
namespace,
|
|
932
|
+
entry,
|
|
933
|
+
children,
|
|
934
|
+
"transition",
|
|
935
|
+
"children",
|
|
880
936
|
);
|
|
881
937
|
|
|
882
|
-
|
|
883
|
-
result &&
|
|
884
|
-
Array.isArray(result) &&
|
|
885
|
-
result.some((item) => hasRoutesInItem(item));
|
|
886
|
-
|
|
887
|
-
if (!hasRoutes) {
|
|
888
|
-
const parent = ctx.parent;
|
|
889
|
-
if (parent && "layout" in parent) {
|
|
890
|
-
entry.parent = null;
|
|
891
|
-
parent.layout.push(entry);
|
|
892
|
-
}
|
|
893
|
-
}
|
|
938
|
+
if (isOrphan(result)) attachOrphanSibling(ctx.parent, entry);
|
|
894
939
|
|
|
895
940
|
return { name: namespace, type: "transition" } as TransitionItem;
|
|
896
941
|
};
|
|
897
942
|
|
|
898
|
-
const
|
|
899
|
-
const store =
|
|
900
|
-
|
|
901
|
-
|
|
943
|
+
const route: RouteHelpers<any, any>["route"] = (name, handler, use) => {
|
|
944
|
+
const { store, ctx } = requireDslContext(
|
|
945
|
+
"route() must be called inside urls()",
|
|
946
|
+
);
|
|
947
|
+
|
|
948
|
+
// Reject names colliding with reserved internal prefixes ($path_, $prefix_),
|
|
949
|
+
// the same guard path() and include() enforce. Without it such a name
|
|
950
|
+
// type-checks on an untyped router, then silently vanishes from generated
|
|
951
|
+
// route-types and public reverse() (isAutoGeneratedRouteName filters it out).
|
|
952
|
+
validateUserRouteName(name);
|
|
902
953
|
|
|
903
954
|
const namespace = `${ctx.namespace}.${store.getNextIndex("route")}.${name}`;
|
|
904
955
|
|
|
905
956
|
const entry = {
|
|
957
|
+
...emptySegmentBase(),
|
|
906
958
|
id: namespace,
|
|
907
959
|
shortCode: store.getShortCode("route"),
|
|
908
960
|
type: "route",
|
|
909
961
|
parent: ctx.parent,
|
|
910
962
|
handler: handler as unknown as Handler<any, any, any>,
|
|
911
|
-
loading: undefined, // Allow loading() to attach loading state
|
|
912
|
-
middleware: [],
|
|
913
|
-
revalidate: [],
|
|
914
|
-
errorBoundary: [],
|
|
915
|
-
notFoundBoundary: [],
|
|
916
|
-
layout: [],
|
|
917
|
-
parallel: {},
|
|
918
|
-
intercept: [],
|
|
919
|
-
loader: [],
|
|
920
963
|
} satisfies EntryData;
|
|
921
964
|
|
|
922
965
|
/* We will throw if user is registring same route name twice */
|
|
@@ -931,10 +974,13 @@ const routeFn: RouteHelpers<any, any>["route"] = (name, handler, use) => {
|
|
|
931
974
|
const mergedUse = mergeHandlerUse(handlerUseFn, use, "route");
|
|
932
975
|
/* Run use and attach handlers */
|
|
933
976
|
if (mergedUse) {
|
|
934
|
-
const result =
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
977
|
+
const result = runAndValidateUseItems(
|
|
978
|
+
store,
|
|
979
|
+
namespace,
|
|
980
|
+
entry,
|
|
981
|
+
mergedUse,
|
|
982
|
+
"route",
|
|
983
|
+
"use",
|
|
938
984
|
);
|
|
939
985
|
return { name: namespace, type: "route", uses: result } as RouteItem;
|
|
940
986
|
}
|
|
@@ -944,9 +990,9 @@ const routeFn: RouteHelpers<any, any>["route"] = (name, handler, use) => {
|
|
|
944
990
|
};
|
|
945
991
|
|
|
946
992
|
const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
947
|
-
const store =
|
|
948
|
-
|
|
949
|
-
|
|
993
|
+
const { store, ctx } = requireDslContext(
|
|
994
|
+
"layout() must be called inside urls()",
|
|
995
|
+
);
|
|
950
996
|
|
|
951
997
|
invariant(
|
|
952
998
|
!ctx.parent || ctx.parent.type !== "parallel",
|
|
@@ -964,20 +1010,12 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
|
964
1010
|
|
|
965
1011
|
const urlPrefix = getUrlPrefix();
|
|
966
1012
|
const entry = {
|
|
1013
|
+
...emptySegmentBase(),
|
|
967
1014
|
id: namespace,
|
|
968
1015
|
shortCode,
|
|
969
1016
|
type: "layout",
|
|
970
1017
|
parent: ctx.parent,
|
|
971
1018
|
handler: unwrappedHandler,
|
|
972
|
-
loading: undefined, // Allow loading() to attach loading state
|
|
973
|
-
middleware: [],
|
|
974
|
-
revalidate: [],
|
|
975
|
-
errorBoundary: [],
|
|
976
|
-
notFoundBoundary: [],
|
|
977
|
-
parallel: {},
|
|
978
|
-
intercept: [],
|
|
979
|
-
layout: [],
|
|
980
|
-
loader: [],
|
|
981
1019
|
...(urlPrefix ? { mountPath: urlPrefix } : {}),
|
|
982
1020
|
...(isStatic
|
|
983
1021
|
? {
|
|
@@ -999,11 +1037,13 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
|
999
1037
|
// Run merged use callback if present
|
|
1000
1038
|
let result: AllUseItems[] | undefined;
|
|
1001
1039
|
if (mergedUse) {
|
|
1002
|
-
result =
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1040
|
+
result = runAndValidateUseItems(
|
|
1041
|
+
store,
|
|
1042
|
+
namespace,
|
|
1043
|
+
entry,
|
|
1044
|
+
mergedUse,
|
|
1045
|
+
"layout",
|
|
1046
|
+
"use",
|
|
1007
1047
|
);
|
|
1008
1048
|
}
|
|
1009
1049
|
|
|
@@ -1045,9 +1085,7 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
|
1045
1085
|
`Orphan layouts can only be defined inside route or layout > check [${namespace}]`,
|
|
1046
1086
|
);
|
|
1047
1087
|
|
|
1048
|
-
|
|
1049
|
-
entry.parent = null;
|
|
1050
|
-
parent.layout.push(entry);
|
|
1088
|
+
attachOrphanSibling(parent, entry);
|
|
1051
1089
|
}
|
|
1052
1090
|
}
|
|
1053
1091
|
|
|
@@ -1060,33 +1098,15 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
|
1060
1098
|
} as LayoutItem;
|
|
1061
1099
|
};
|
|
1062
1100
|
|
|
1063
|
-
const isValidUseItem = (item: any): item is AllUseItems | undefined | null =>
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
(item
|
|
1068
|
-
typeof item === "object" &&
|
|
1069
|
-
"type" in item &&
|
|
1070
|
-
[
|
|
1071
|
-
"layout",
|
|
1072
|
-
"route",
|
|
1073
|
-
"middleware",
|
|
1074
|
-
"revalidate",
|
|
1075
|
-
"parallel",
|
|
1076
|
-
"intercept",
|
|
1077
|
-
"loader",
|
|
1078
|
-
"loading",
|
|
1079
|
-
"errorBoundary",
|
|
1080
|
-
"notFoundBoundary",
|
|
1081
|
-
"when",
|
|
1082
|
-
"cache",
|
|
1083
|
-
"transition",
|
|
1084
|
-
"include", // For urls() include() helper
|
|
1085
|
-
].includes(item.type))
|
|
1086
|
-
);
|
|
1087
|
-
};
|
|
1101
|
+
const isValidUseItem = (item: any): item is AllUseItems | undefined | null =>
|
|
1102
|
+
item == null ||
|
|
1103
|
+
(typeof item === "object" &&
|
|
1104
|
+
"type" in item &&
|
|
1105
|
+
ALL_USE_ITEM_TYPES.has(item.type));
|
|
1088
1106
|
|
|
1089
|
-
//
|
|
1107
|
+
// DSL helpers exported for direct import from @rangojs/router and for
|
|
1108
|
+
// assembly into the RouteHelpers object in helper-factories.ts. The route-item
|
|
1109
|
+
// types are discriminated by their `type` literal, so the helpers carry no brand.
|
|
1090
1110
|
export {
|
|
1091
1111
|
layout,
|
|
1092
1112
|
cache,
|
|
@@ -1097,25 +1117,11 @@ export {
|
|
|
1097
1117
|
when,
|
|
1098
1118
|
errorBoundary,
|
|
1099
1119
|
notFoundBoundary,
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
const isOrphanLayout = (item: AllUseItems): boolean => {
|
|
1106
|
-
return (
|
|
1107
|
-
item.type === "layout" &&
|
|
1108
|
-
!item.uses?.some((child) => hasRoutesInItem(child))
|
|
1109
|
-
);
|
|
1110
|
-
};
|
|
1111
|
-
|
|
1112
|
-
// Internal exports used by helper-factories.ts
|
|
1113
|
-
export {
|
|
1114
|
-
routeFn,
|
|
1115
|
-
loaderFn,
|
|
1116
|
-
loadingFn,
|
|
1117
|
-
transitionFn,
|
|
1118
|
-
hasRoutesInItem,
|
|
1120
|
+
route,
|
|
1121
|
+
loader,
|
|
1122
|
+
loading,
|
|
1123
|
+
transition,
|
|
1119
1124
|
isValidUseItem,
|
|
1120
|
-
|
|
1125
|
+
emptySegmentBase,
|
|
1126
|
+
runAndValidateUseItems,
|
|
1121
1127
|
};
|