@rangojs/router 0.0.0-experimental.ce770c9a → 0.0.0-experimental.d5d3070a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +8 -0
- package/README.md +245 -49
- package/dist/bin/rango.js +433 -131
- package/dist/testing/vitest.js +82 -0
- package/dist/vite/index.js +3376 -1102
- package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/package.json +66 -12
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +64 -2
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +247 -23
- package/skills/caching/SKILL.md +281 -11
- package/skills/composability/SKILL.md +27 -2
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +4 -2
- package/skills/document-cache/SKILL.md +78 -55
- package/skills/handler-use/SKILL.md +364 -0
- package/skills/hooks/SKILL.md +250 -30
- package/skills/host-router/SKILL.md +83 -23
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +50 -6
- package/skills/layout/SKILL.md +35 -9
- package/skills/links/SKILL.md +249 -17
- package/skills/loader/SKILL.md +279 -53
- package/skills/middleware/SKILL.md +52 -13
- package/skills/migrate-nextjs/SKILL.md +584 -0
- package/skills/migrate-react-router/SKILL.md +771 -0
- package/skills/mime-routes/SKILL.md +28 -1
- package/skills/observability/SKILL.md +172 -0
- package/skills/parallel/SKILL.md +144 -7
- package/skills/prerender/SKILL.md +153 -109
- package/skills/rango/SKILL.md +251 -22
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +123 -48
- package/skills/route/SKILL.md +101 -5
- package/skills/router-setup/SKILL.md +116 -8
- package/skills/scripts/SKILL.md +179 -0
- package/skills/server-actions/SKILL.md +775 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/tailwind/SKILL.md +27 -3
- package/skills/testing/SKILL.md +129 -0
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +127 -0
- package/skills/testing/client-components.md +124 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +129 -0
- package/skills/testing/loader.md +128 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +121 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +84 -0
- package/skills/testing/server-actions.md +107 -0
- package/skills/testing/server-tree.md +128 -0
- package/skills/testing/setup.md +123 -0
- package/skills/typesafety/SKILL.md +332 -29
- package/skills/use-cache/SKILL.md +46 -14
- package/skills/view-transitions/SKILL.md +294 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +1 -66
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +39 -0
- package/src/browser/app-version.ts +14 -0
- package/src/browser/connection-warmup.ts +134 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/event-controller.ts +192 -150
- package/src/browser/history-state.ts +21 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/invalidate-client-cache.ts +52 -0
- package/src/browser/navigation-bridge.ts +108 -21
- package/src/browser/navigation-client.ts +187 -86
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +76 -67
- package/src/browser/navigation-transaction.ts +9 -59
- package/src/browser/network-error-handler.ts +34 -7
- package/src/browser/partial-update.ts +150 -107
- package/src/browser/prefetch/cache.ts +205 -62
- package/src/browser/prefetch/fetch.ts +329 -39
- package/src/browser/prefetch/queue.ts +95 -29
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/rango-state.ts +158 -76
- package/src/browser/react/Link.tsx +102 -15
- package/src/browser/react/NavigationProvider.tsx +193 -120
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/context.ts +7 -2
- package/src/browser/react/filter-segment-order.ts +66 -7
- package/src/browser/react/index.ts +0 -48
- package/src/browser/react/location-state-shared.ts +178 -8
- package/src/browser/react/location-state.ts +39 -14
- package/src/browser/react/use-action.ts +6 -15
- package/src/browser/react/use-handle.ts +23 -69
- package/src/browser/react/use-href.tsx +8 -1
- package/src/browser/react/use-link-status.ts +33 -8
- package/src/browser/react/use-navigation.ts +32 -7
- package/src/browser/react/use-params.ts +20 -10
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +46 -11
- package/src/browser/react/use-search-params.ts +0 -5
- package/src/browser/react/use-segments.ts +11 -21
- package/src/browser/response-adapter.ts +80 -5
- package/src/browser/rsc-router.tsx +114 -24
- package/src/browser/scroll-restoration.ts +37 -22
- package/src/browser/segment-reconciler.ts +36 -14
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +222 -61
- package/src/browser/types.ts +82 -11
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +65 -40
- package/src/build/generate-route-types.ts +5 -1
- package/src/build/index.ts +8 -2
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +165 -36
- package/src/build/route-types/ast-route-extraction.ts +15 -8
- package/src/build/route-types/codegen.ts +16 -5
- package/src/build/route-types/include-resolution.ts +125 -24
- package/src/build/route-types/param-extraction.ts +6 -3
- package/src/build/route-types/per-module-writer.ts +22 -6
- package/src/build/route-types/router-processing.ts +260 -94
- package/src/build/route-types/scan-filter.ts +9 -2
- package/src/build/route-types/source-scan.ts +216 -0
- package/src/build/runtime-discovery.ts +9 -20
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-key-utils.ts +29 -13
- package/src/cache/cache-policy.ts +108 -34
- package/src/cache/cache-runtime.ts +214 -48
- package/src/cache/cache-scope.ts +234 -87
- package/src/cache/cache-tag.ts +103 -0
- package/src/cache/cf/cf-base64.ts +33 -0
- package/src/cache/cf/cf-cache-constants.ts +127 -0
- package/src/cache/cf/cf-cache-store.ts +1989 -378
- package/src/cache/cf/cf-cache-types.ts +349 -0
- package/src/cache/cf/cf-kv-utils.ts +46 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
- package/src/cache/cf/index.ts +6 -16
- package/src/cache/document-cache.ts +72 -20
- package/src/cache/handle-snapshot.ts +70 -0
- package/src/cache/index.ts +10 -20
- package/src/cache/memory-segment-store.ts +136 -37
- package/src/cache/profile-registry.ts +31 -31
- package/src/cache/read-through-swr.ts +41 -11
- package/src/cache/segment-codec.ts +9 -17
- package/src/cache/tag-invalidation.ts +230 -0
- package/src/cache/taint.ts +55 -0
- package/src/cache/types.ts +37 -100
- package/src/client.rsc.tsx +44 -21
- package/src/client.tsx +119 -290
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +109 -0
- package/src/component-utils.ts +19 -0
- package/src/components/DefaultDocument.tsx +8 -2
- package/src/context-var.ts +84 -2
- package/src/decode-loader-results.ts +52 -0
- package/src/defer.ts +196 -0
- package/src/deps/ssr.ts +0 -1
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +30 -4
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +70 -22
- package/src/handles/MetaTags.tsx +62 -19
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +37 -8
- package/src/handles/is-thenable.ts +19 -0
- package/src/handles/meta.ts +51 -40
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +9 -60
- package/src/host/errors.ts +0 -24
- package/src/host/index.ts +8 -2
- package/src/host/pattern-matcher.ts +23 -52
- package/src/host/router.ts +107 -99
- package/src/host/testing.ts +40 -27
- package/src/host/types.ts +37 -4
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +137 -22
- package/src/index.rsc.ts +93 -12
- package/src/index.ts +133 -15
- package/src/internal-debug.ts +11 -10
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +20 -13
- package/src/loader.ts +12 -11
- package/src/missing-id-error.ts +68 -0
- package/src/outlet-context.ts +1 -1
- package/src/outlet-provider.tsx +1 -5
- package/src/prerender/param-hash.ts +16 -16
- package/src/prerender/store.ts +37 -41
- package/src/prerender.ts +198 -82
- package/src/redirect-origin.ts +100 -0
- package/src/regex-escape.ts +8 -0
- package/src/render-error-thrower.tsx +20 -0
- package/src/response-utils.ts +62 -0
- package/src/reverse.ts +65 -15
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +7 -72
- package/src/route-definition/dsl-helpers.ts +445 -277
- package/src/route-definition/helper-factories.ts +29 -139
- package/src/route-definition/helpers-types.ts +113 -37
- package/src/route-definition/index.ts +3 -0
- package/src/route-definition/redirect.ts +51 -10
- package/src/route-definition/resolve-handler-use.ts +161 -0
- package/src/route-definition/use-item-types.ts +32 -0
- package/src/route-map-builder.ts +0 -16
- package/src/route-types.ts +37 -41
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +164 -17
- package/src/router/error-handling.ts +45 -18
- package/src/router/find-match.ts +44 -23
- package/src/router/handler-context.ts +83 -39
- package/src/router/instrument.ts +350 -0
- package/src/router/intercept-resolution.ts +48 -24
- package/src/router/lazy-includes.ts +15 -52
- package/src/router/loader-resolution.ts +274 -56
- package/src/router/logging.ts +0 -6
- package/src/router/manifest.ts +40 -42
- package/src/router/match-api.ts +120 -204
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +58 -58
- package/src/router/match-middleware/background-revalidation.ts +15 -5
- package/src/router/match-middleware/cache-lookup.ts +202 -268
- package/src/router/match-middleware/cache-store.ts +42 -28
- package/src/router/match-middleware/intercept-resolution.ts +0 -22
- package/src/router/match-middleware/segment-resolution.ts +45 -14
- package/src/router/match-pipelines.ts +1 -42
- package/src/router/match-result.ts +93 -39
- package/src/router/metrics.ts +0 -34
- package/src/router/middleware-types.ts +13 -142
- package/src/router/middleware.ts +268 -171
- package/src/router/navigation-snapshot.ts +131 -0
- package/src/router/params-util.ts +23 -0
- package/src/router/pattern-matching.ts +132 -90
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prerender-match.ts +195 -56
- package/src/router/preview-match.ts +32 -102
- package/src/router/request-classification.ts +276 -0
- package/src/router/revalidation.ts +123 -73
- package/src/router/route-snapshot.ts +244 -0
- package/src/router/router-context.ts +3 -27
- package/src/router/router-interfaces.ts +115 -35
- package/src/router/router-options.ts +172 -15
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +190 -99
- package/src/router/segment-resolution/helpers.ts +115 -30
- package/src/router/segment-resolution/loader-cache.ts +62 -37
- package/src/router/segment-resolution/revalidation.ts +386 -341
- package/src/router/segment-resolution/static-store.ts +19 -5
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution/view-transition-default.ts +36 -0
- package/src/router/segment-resolution.ts +5 -1
- package/src/router/segment-wrappers.ts +6 -5
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/substitute-pattern-params.ts +56 -0
- package/src/router/telemetry-otel.ts +161 -199
- package/src/router/telemetry.ts +96 -19
- package/src/router/timeout.ts +0 -20
- package/src/router/tracing.ts +206 -0
- package/src/router/trie-matching.ts +163 -59
- package/src/router/types.ts +10 -63
- package/src/router/url-params.ts +44 -0
- package/src/router.ts +158 -54
- package/src/rsc/handler-context.ts +3 -2
- package/src/rsc/handler.ts +658 -511
- package/src/rsc/helpers.ts +168 -46
- package/src/rsc/index.ts +2 -5
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +127 -31
- package/src/rsc/manifest-init.ts +33 -42
- package/src/rsc/origin-guard.ts +39 -25
- package/src/rsc/progressive-enhancement.ts +77 -11
- package/src/rsc/redirect-guard.ts +99 -0
- package/src/rsc/response-cache-serve.ts +238 -0
- package/src/rsc/response-error.ts +79 -12
- package/src/rsc/response-route-handler.ts +99 -189
- package/src/rsc/rsc-rendering.ts +105 -72
- package/src/rsc/runtime-warnings.ts +23 -10
- package/src/rsc/server-action.ts +263 -112
- package/src/rsc/ssr-setup.ts +18 -2
- package/src/rsc/types.ts +32 -6
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +35 -30
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-loader-promise.ts +149 -0
- package/src/segment-system.tsx +218 -202
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +222 -51
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +80 -5
- package/src/server/handle-store.ts +40 -38
- package/src/server/loader-registry.ts +26 -46
- package/src/server/request-context.ts +390 -170
- package/src/ssr/index.tsx +24 -16
- package/src/static-handler.ts +27 -18
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +40 -0
- package/src/testing/dispatch.ts +701 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +128 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +272 -0
- package/src/testing/e2e/parity.ts +387 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +257 -0
- package/src/testing/generated-routes.ts +183 -0
- package/src/testing/index.ts +99 -0
- package/src/testing/internal/context.ts +371 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +343 -0
- package/src/testing/render-route.tsx +581 -0
- package/src/testing/run-loader.ts +385 -0
- package/src/testing/run-middleware.ts +205 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +305 -0
- package/src/theme/ThemeProvider.tsx +20 -58
- package/src/theme/ThemeScript.tsx +7 -9
- package/src/theme/constants.ts +52 -13
- package/src/theme/index.ts +0 -7
- package/src/theme/theme-context.ts +1 -5
- package/src/theme/theme-script.ts +22 -21
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +0 -35
- package/src/types/cache-types.ts +17 -8
- package/src/types/error-types.ts +30 -90
- package/src/types/global-namespace.ts +54 -41
- package/src/types/handler-context.ts +233 -81
- package/src/types/index.ts +1 -10
- package/src/types/loader-types.ts +44 -15
- package/src/types/request-scope.ts +112 -0
- package/src/types/route-config.ts +6 -50
- package/src/types/route-entry.ts +12 -7
- package/src/types/segments.ts +36 -15
- package/src/urls/include-helper.ts +33 -70
- package/src/urls/index.ts +1 -11
- package/src/urls/path-helper-types.ts +58 -11
- package/src/urls/path-helper.ts +57 -111
- package/src/urls/pattern-types.ts +48 -19
- package/src/urls/response-types.ts +25 -22
- package/src/urls/type-extraction.ts +58 -139
- package/src/urls/urls-function.ts +1 -18
- package/src/use-loader.tsx +346 -89
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +36 -38
- package/src/vite/discovery/discover-routers.ts +130 -85
- package/src/vite/discovery/discovery-errors.ts +194 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +214 -132
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/state.ts +57 -4
- package/src/vite/discovery/virtual-module-codegen.ts +14 -34
- package/src/vite/index.ts +6 -0
- package/src/vite/inject-client-debug.ts +36 -0
- package/src/vite/plugin-types.ts +178 -5
- package/src/vite/plugins/cjs-to-esm.ts +16 -19
- package/src/vite/plugins/client-ref-dedup.ts +16 -11
- package/src/vite/plugins/client-ref-hashing.ts +28 -15
- package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/src/vite/plugins/cloudflare-protocol-stub.ts +194 -0
- package/src/vite/plugins/expose-action-id.ts +48 -95
- package/src/vite/plugins/expose-id-utils.ts +96 -51
- package/src/vite/plugins/expose-ids/export-analysis.ts +101 -34
- package/src/vite/plugins/expose-ids/handler-transform.ts +15 -64
- package/src/vite/plugins/expose-ids/loader-transform.ts +14 -24
- package/src/vite/plugins/expose-ids/router-transform.ts +118 -29
- package/src/vite/plugins/expose-internal-ids.ts +553 -317
- package/src/vite/plugins/performance-tracks.ts +89 -0
- package/src/vite/plugins/refresh-cmd.ts +89 -27
- package/src/vite/plugins/use-cache-transform.ts +73 -83
- package/src/vite/plugins/version-injector.ts +21 -25
- package/src/vite/plugins/version-plugin.ts +37 -40
- package/src/vite/plugins/virtual-entries.ts +13 -18
- package/src/vite/rango.ts +119 -111
- package/src/vite/router-discovery.ts +941 -142
- package/src/vite/utils/ast-handler-extract.ts +26 -35
- package/src/vite/utils/banner.ts +1 -1
- package/src/vite/utils/bundle-analysis.ts +10 -15
- package/src/vite/utils/client-chunks.ts +184 -0
- package/src/vite/utils/directive-prologue.ts +40 -0
- package/src/vite/utils/forward-user-plugins.ts +171 -0
- package/src/vite/utils/manifest-utils.ts +4 -59
- package/src/vite/utils/package-resolution.ts +20 -52
- package/src/vite/utils/prerender-utils.ts +81 -34
- package/src/vite/utils/shared-utils.ts +92 -42
- package/dist/__internal.d.ts +0 -83
- package/dist/__internal.d.ts.map +0 -1
- package/dist/__internal.js +0 -19
- package/dist/__internal.js.map +0 -1
- package/dist/__mocks__/version.d.ts +0 -7
- package/dist/__mocks__/version.d.ts.map +0 -1
- package/dist/__mocks__/version.js +0 -7
- package/dist/__mocks__/version.js.map +0 -1
- package/dist/__tests__/client-href.test.d.ts +0 -2
- package/dist/__tests__/client-href.test.d.ts.map +0 -1
- package/dist/__tests__/client-href.test.js +0 -74
- package/dist/__tests__/client-href.test.js.map +0 -1
- package/dist/__tests__/component-utils.test.d.ts +0 -2
- package/dist/__tests__/component-utils.test.d.ts.map +0 -1
- package/dist/__tests__/component-utils.test.js +0 -51
- package/dist/__tests__/component-utils.test.js.map +0 -1
- package/dist/__tests__/event-controller.test.d.ts +0 -2
- package/dist/__tests__/event-controller.test.d.ts.map +0 -1
- package/dist/__tests__/event-controller.test.js +0 -538
- package/dist/__tests__/event-controller.test.js.map +0 -1
- package/dist/__tests__/helpers/route-tree.d.ts +0 -118
- package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
- package/dist/__tests__/helpers/route-tree.js +0 -374
- package/dist/__tests__/helpers/route-tree.js.map +0 -1
- package/dist/__tests__/match-result.test.d.ts +0 -2
- package/dist/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/__tests__/match-result.test.js +0 -154
- package/dist/__tests__/match-result.test.js.map +0 -1
- package/dist/__tests__/navigation-store.test.d.ts +0 -2
- package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
- package/dist/__tests__/navigation-store.test.js +0 -440
- package/dist/__tests__/navigation-store.test.js.map +0 -1
- package/dist/__tests__/partial-update.test.d.ts +0 -2
- package/dist/__tests__/partial-update.test.d.ts.map +0 -1
- package/dist/__tests__/partial-update.test.js +0 -1009
- package/dist/__tests__/partial-update.test.js.map +0 -1
- package/dist/__tests__/reverse-types.test.d.ts +0 -8
- package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
- package/dist/__tests__/reverse-types.test.js +0 -656
- package/dist/__tests__/reverse-types.test.js.map +0 -1
- package/dist/__tests__/route-definition.test.d.ts +0 -2
- package/dist/__tests__/route-definition.test.d.ts.map +0 -1
- package/dist/__tests__/route-definition.test.js +0 -55
- package/dist/__tests__/route-definition.test.js.map +0 -1
- package/dist/__tests__/router-helpers.test.d.ts +0 -2
- package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
- package/dist/__tests__/router-helpers.test.js +0 -377
- package/dist/__tests__/router-helpers.test.js.map +0 -1
- package/dist/__tests__/router-integration-2.test.d.ts +0 -2
- package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration-2.test.js +0 -426
- package/dist/__tests__/router-integration-2.test.js.map +0 -1
- package/dist/__tests__/router-integration.test.d.ts +0 -2
- package/dist/__tests__/router-integration.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration.test.js +0 -1051
- package/dist/__tests__/router-integration.test.js.map +0 -1
- package/dist/__tests__/search-params.test.d.ts +0 -5
- package/dist/__tests__/search-params.test.d.ts.map +0 -1
- package/dist/__tests__/search-params.test.js +0 -306
- package/dist/__tests__/search-params.test.js.map +0 -1
- package/dist/__tests__/segment-system.test.d.ts +0 -2
- package/dist/__tests__/segment-system.test.d.ts.map +0 -1
- package/dist/__tests__/segment-system.test.js +0 -627
- package/dist/__tests__/segment-system.test.js.map +0 -1
- package/dist/__tests__/static-handler-types.test.d.ts +0 -8
- package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
- package/dist/__tests__/static-handler-types.test.js +0 -63
- package/dist/__tests__/static-handler-types.test.js.map +0 -1
- package/dist/__tests__/urls.test.d.ts +0 -2
- package/dist/__tests__/urls.test.d.ts.map +0 -1
- package/dist/__tests__/urls.test.js +0 -421
- package/dist/__tests__/urls.test.js.map +0 -1
- package/dist/__tests__/use-mount.test.d.ts +0 -2
- package/dist/__tests__/use-mount.test.d.ts.map +0 -1
- package/dist/__tests__/use-mount.test.js +0 -35
- package/dist/__tests__/use-mount.test.js.map +0 -1
- package/dist/bin/rango.d.ts +0 -2
- package/dist/bin/rango.d.ts.map +0 -1
- package/dist/bin/rango.js.map +0 -1
- package/dist/browser/event-controller.d.ts +0 -191
- package/dist/browser/event-controller.d.ts.map +0 -1
- package/dist/browser/event-controller.js +0 -559
- package/dist/browser/event-controller.js.map +0 -1
- package/dist/browser/index.d.ts +0 -2
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -14
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/link-interceptor.d.ts +0 -38
- package/dist/browser/link-interceptor.d.ts.map +0 -1
- package/dist/browser/link-interceptor.js +0 -99
- package/dist/browser/link-interceptor.js.map +0 -1
- package/dist/browser/logging.d.ts +0 -10
- package/dist/browser/logging.d.ts.map +0 -1
- package/dist/browser/logging.js +0 -29
- package/dist/browser/logging.js.map +0 -1
- package/dist/browser/lru-cache.d.ts +0 -17
- package/dist/browser/lru-cache.d.ts.map +0 -1
- package/dist/browser/lru-cache.js +0 -50
- package/dist/browser/lru-cache.js.map +0 -1
- package/dist/browser/merge-segment-loaders.d.ts +0 -39
- package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
- package/dist/browser/merge-segment-loaders.js +0 -102
- package/dist/browser/merge-segment-loaders.js.map +0 -1
- package/dist/browser/navigation-bridge.d.ts +0 -102
- package/dist/browser/navigation-bridge.d.ts.map +0 -1
- package/dist/browser/navigation-bridge.js +0 -708
- package/dist/browser/navigation-bridge.js.map +0 -1
- package/dist/browser/navigation-client.d.ts +0 -25
- package/dist/browser/navigation-client.d.ts.map +0 -1
- package/dist/browser/navigation-client.js +0 -157
- package/dist/browser/navigation-client.js.map +0 -1
- package/dist/browser/navigation-store.d.ts +0 -101
- package/dist/browser/navigation-store.d.ts.map +0 -1
- package/dist/browser/navigation-store.js +0 -625
- package/dist/browser/navigation-store.js.map +0 -1
- package/dist/browser/partial-update.d.ts +0 -75
- package/dist/browser/partial-update.d.ts.map +0 -1
- package/dist/browser/partial-update.js +0 -426
- package/dist/browser/partial-update.js.map +0 -1
- package/dist/browser/react/Link.d.ts +0 -86
- package/dist/browser/react/Link.d.ts.map +0 -1
- package/dist/browser/react/Link.js +0 -128
- package/dist/browser/react/Link.js.map +0 -1
- package/dist/browser/react/NavigationProvider.d.ts +0 -63
- package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
- package/dist/browser/react/NavigationProvider.js +0 -216
- package/dist/browser/react/NavigationProvider.js.map +0 -1
- package/dist/browser/react/ScrollRestoration.d.ts +0 -75
- package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
- package/dist/browser/react/ScrollRestoration.js +0 -57
- package/dist/browser/react/ScrollRestoration.js.map +0 -1
- package/dist/browser/react/context.d.ts +0 -46
- package/dist/browser/react/context.d.ts.map +0 -1
- package/dist/browser/react/context.js +0 -10
- package/dist/browser/react/context.js.map +0 -1
- package/dist/browser/react/index.d.ts +0 -11
- package/dist/browser/react/index.d.ts.map +0 -1
- package/dist/browser/react/index.js +0 -22
- package/dist/browser/react/index.js.map +0 -1
- package/dist/browser/react/location-state-shared.d.ts +0 -63
- package/dist/browser/react/location-state-shared.d.ts.map +0 -1
- package/dist/browser/react/location-state-shared.js +0 -81
- package/dist/browser/react/location-state-shared.js.map +0 -1
- package/dist/browser/react/location-state.d.ts +0 -23
- package/dist/browser/react/location-state.d.ts.map +0 -1
- package/dist/browser/react/location-state.js +0 -29
- package/dist/browser/react/location-state.js.map +0 -1
- package/dist/browser/react/mount-context.d.ts +0 -24
- package/dist/browser/react/mount-context.d.ts.map +0 -1
- package/dist/browser/react/mount-context.js +0 -24
- package/dist/browser/react/mount-context.js.map +0 -1
- package/dist/browser/react/use-action.d.ts +0 -64
- package/dist/browser/react/use-action.d.ts.map +0 -1
- package/dist/browser/react/use-action.js +0 -134
- package/dist/browser/react/use-action.js.map +0 -1
- package/dist/browser/react/use-client-cache.d.ts +0 -41
- package/dist/browser/react/use-client-cache.d.ts.map +0 -1
- package/dist/browser/react/use-client-cache.js +0 -39
- package/dist/browser/react/use-client-cache.js.map +0 -1
- package/dist/browser/react/use-handle.d.ts +0 -31
- package/dist/browser/react/use-handle.d.ts.map +0 -1
- package/dist/browser/react/use-handle.js +0 -144
- package/dist/browser/react/use-handle.js.map +0 -1
- package/dist/browser/react/use-href.d.ts +0 -33
- package/dist/browser/react/use-href.d.ts.map +0 -1
- package/dist/browser/react/use-href.js +0 -39
- package/dist/browser/react/use-href.js.map +0 -1
- package/dist/browser/react/use-link-status.d.ts +0 -37
- package/dist/browser/react/use-link-status.d.ts.map +0 -1
- package/dist/browser/react/use-link-status.js +0 -99
- package/dist/browser/react/use-link-status.js.map +0 -1
- package/dist/browser/react/use-mount.d.ts +0 -25
- package/dist/browser/react/use-mount.d.ts.map +0 -1
- package/dist/browser/react/use-mount.js +0 -30
- package/dist/browser/react/use-mount.js.map +0 -1
- package/dist/browser/react/use-navigation.d.ts +0 -27
- package/dist/browser/react/use-navigation.d.ts.map +0 -1
- package/dist/browser/react/use-navigation.js +0 -87
- package/dist/browser/react/use-navigation.js.map +0 -1
- package/dist/browser/react/use-segments.d.ts +0 -38
- package/dist/browser/react/use-segments.d.ts.map +0 -1
- package/dist/browser/react/use-segments.js +0 -130
- package/dist/browser/react/use-segments.js.map +0 -1
- package/dist/browser/request-controller.d.ts +0 -26
- package/dist/browser/request-controller.d.ts.map +0 -1
- package/dist/browser/request-controller.js +0 -147
- package/dist/browser/request-controller.js.map +0 -1
- package/dist/browser/rsc-router.d.ts +0 -129
- package/dist/browser/rsc-router.d.ts.map +0 -1
- package/dist/browser/rsc-router.js +0 -195
- package/dist/browser/rsc-router.js.map +0 -1
- package/dist/browser/scroll-restoration.d.ts +0 -93
- package/dist/browser/scroll-restoration.d.ts.map +0 -1
- package/dist/browser/scroll-restoration.js +0 -321
- package/dist/browser/scroll-restoration.js.map +0 -1
- package/dist/browser/segment-structure-assert.d.ts +0 -17
- package/dist/browser/segment-structure-assert.d.ts.map +0 -1
- package/dist/browser/segment-structure-assert.js +0 -59
- package/dist/browser/segment-structure-assert.js.map +0 -1
- package/dist/browser/server-action-bridge.d.ts +0 -26
- package/dist/browser/server-action-bridge.d.ts.map +0 -1
- package/dist/browser/server-action-bridge.js +0 -668
- package/dist/browser/server-action-bridge.js.map +0 -1
- package/dist/browser/shallow.d.ts +0 -12
- package/dist/browser/shallow.d.ts.map +0 -1
- package/dist/browser/shallow.js +0 -34
- package/dist/browser/shallow.js.map +0 -1
- package/dist/browser/types.d.ts +0 -369
- package/dist/browser/types.d.ts.map +0 -1
- package/dist/browser/types.js +0 -2
- package/dist/browser/types.js.map +0 -1
- package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
- package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-cli.test.js +0 -237
- package/dist/build/__tests__/generate-cli.test.js.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.js +0 -119
- package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.js +0 -620
- package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.js +0 -308
- package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
- package/dist/build/generate-manifest.d.ts +0 -81
- package/dist/build/generate-manifest.d.ts.map +0 -1
- package/dist/build/generate-manifest.js +0 -276
- package/dist/build/generate-manifest.js.map +0 -1
- package/dist/build/generate-route-types.d.ts +0 -115
- package/dist/build/generate-route-types.d.ts.map +0 -1
- package/dist/build/generate-route-types.js +0 -740
- package/dist/build/generate-route-types.js.map +0 -1
- package/dist/build/index.d.ts +0 -21
- package/dist/build/index.d.ts.map +0 -1
- package/dist/build/index.js +0 -21
- package/dist/build/index.js.map +0 -1
- package/dist/build/route-trie.d.ts +0 -71
- package/dist/build/route-trie.d.ts.map +0 -1
- package/dist/build/route-trie.js +0 -175
- package/dist/build/route-trie.js.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.js +0 -208
- package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
- package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
- package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
- package/dist/cache/__tests__/document-cache.test.js +0 -345
- package/dist/cache/__tests__/document-cache.test.js.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
- package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
- package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-store.test.js +0 -367
- package/dist/cache/__tests__/memory-store.test.js.map +0 -1
- package/dist/cache/cache-scope.d.ts +0 -102
- package/dist/cache/cache-scope.d.ts.map +0 -1
- package/dist/cache/cache-scope.js +0 -440
- package/dist/cache/cache-scope.js.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
- package/dist/cache/cf/cf-cache-store.d.ts +0 -165
- package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
- package/dist/cache/cf/cf-cache-store.js +0 -242
- package/dist/cache/cf/cf-cache-store.js.map +0 -1
- package/dist/cache/cf/index.d.ts +0 -14
- package/dist/cache/cf/index.d.ts.map +0 -1
- package/dist/cache/cf/index.js +0 -17
- package/dist/cache/cf/index.js.map +0 -1
- package/dist/cache/document-cache.d.ts +0 -64
- package/dist/cache/document-cache.d.ts.map +0 -1
- package/dist/cache/document-cache.js +0 -228
- package/dist/cache/document-cache.js.map +0 -1
- package/dist/cache/index.d.ts +0 -19
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/index.js +0 -21
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/memory-segment-store.d.ts +0 -110
- package/dist/cache/memory-segment-store.d.ts.map +0 -1
- package/dist/cache/memory-segment-store.js +0 -117
- package/dist/cache/memory-segment-store.js.map +0 -1
- package/dist/cache/memory-store.d.ts +0 -41
- package/dist/cache/memory-store.d.ts.map +0 -1
- package/dist/cache/memory-store.js +0 -191
- package/dist/cache/memory-store.js.map +0 -1
- package/dist/cache/types.d.ts +0 -317
- package/dist/cache/types.d.ts.map +0 -1
- package/dist/cache/types.js +0 -12
- package/dist/cache/types.js.map +0 -1
- package/dist/client.d.ts +0 -248
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -367
- package/dist/client.js.map +0 -1
- package/dist/client.rsc.d.ts +0 -26
- package/dist/client.rsc.d.ts.map +0 -1
- package/dist/client.rsc.js +0 -46
- package/dist/client.rsc.js.map +0 -1
- package/dist/component-utils.d.ts +0 -36
- package/dist/component-utils.d.ts.map +0 -1
- package/dist/component-utils.js +0 -61
- package/dist/component-utils.js.map +0 -1
- package/dist/components/DefaultDocument.d.ts +0 -13
- package/dist/components/DefaultDocument.d.ts.map +0 -1
- package/dist/components/DefaultDocument.js +0 -15
- package/dist/components/DefaultDocument.js.map +0 -1
- package/dist/debug.d.ts +0 -58
- package/dist/debug.d.ts.map +0 -1
- package/dist/debug.js +0 -157
- package/dist/debug.js.map +0 -1
- package/dist/default-error-boundary.d.ts +0 -11
- package/dist/default-error-boundary.d.ts.map +0 -1
- package/dist/default-error-boundary.js +0 -45
- package/dist/default-error-boundary.js.map +0 -1
- package/dist/deps/browser.d.ts +0 -2
- package/dist/deps/browser.d.ts.map +0 -1
- package/dist/deps/browser.js +0 -3
- package/dist/deps/browser.js.map +0 -1
- package/dist/deps/html-stream-client.d.ts +0 -2
- package/dist/deps/html-stream-client.d.ts.map +0 -1
- package/dist/deps/html-stream-client.js +0 -3
- package/dist/deps/html-stream-client.js.map +0 -1
- package/dist/deps/html-stream-server.d.ts +0 -2
- package/dist/deps/html-stream-server.d.ts.map +0 -1
- package/dist/deps/html-stream-server.js +0 -3
- package/dist/deps/html-stream-server.js.map +0 -1
- package/dist/deps/rsc.d.ts +0 -2
- package/dist/deps/rsc.d.ts.map +0 -1
- package/dist/deps/rsc.js +0 -4
- package/dist/deps/rsc.js.map +0 -1
- package/dist/deps/ssr.d.ts +0 -2
- package/dist/deps/ssr.d.ts.map +0 -1
- package/dist/deps/ssr.js +0 -3
- package/dist/deps/ssr.js.map +0 -1
- package/dist/errors.d.ts +0 -174
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -241
- package/dist/errors.js.map +0 -1
- package/dist/handle.d.ts +0 -78
- package/dist/handle.d.ts.map +0 -1
- package/dist/handle.js +0 -82
- package/dist/handle.js.map +0 -1
- package/dist/handles/MetaTags.d.ts +0 -14
- package/dist/handles/MetaTags.d.ts.map +0 -1
- package/dist/handles/MetaTags.js +0 -136
- package/dist/handles/MetaTags.js.map +0 -1
- package/dist/handles/index.d.ts +0 -6
- package/dist/handles/index.d.ts.map +0 -1
- package/dist/handles/index.js +0 -6
- package/dist/handles/index.js.map +0 -1
- package/dist/handles/meta.d.ts +0 -39
- package/dist/handles/meta.d.ts.map +0 -1
- package/dist/handles/meta.js +0 -202
- package/dist/handles/meta.js.map +0 -1
- package/dist/host/__tests__/errors.test.d.ts +0 -2
- package/dist/host/__tests__/errors.test.d.ts.map +0 -1
- package/dist/host/__tests__/errors.test.js +0 -76
- package/dist/host/__tests__/errors.test.js.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.js +0 -251
- package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
- package/dist/host/__tests__/router.test.d.ts +0 -2
- package/dist/host/__tests__/router.test.d.ts.map +0 -1
- package/dist/host/__tests__/router.test.js +0 -241
- package/dist/host/__tests__/router.test.js.map +0 -1
- package/dist/host/__tests__/testing.test.d.ts +0 -2
- package/dist/host/__tests__/testing.test.d.ts.map +0 -1
- package/dist/host/__tests__/testing.test.js +0 -64
- package/dist/host/__tests__/testing.test.js.map +0 -1
- package/dist/host/__tests__/utils.test.d.ts +0 -2
- package/dist/host/__tests__/utils.test.d.ts.map +0 -1
- package/dist/host/__tests__/utils.test.js +0 -29
- package/dist/host/__tests__/utils.test.js.map +0 -1
- package/dist/host/cookie-handler.d.ts +0 -34
- package/dist/host/cookie-handler.d.ts.map +0 -1
- package/dist/host/cookie-handler.js +0 -124
- package/dist/host/cookie-handler.js.map +0 -1
- package/dist/host/errors.d.ts +0 -56
- package/dist/host/errors.d.ts.map +0 -1
- package/dist/host/errors.js +0 -79
- package/dist/host/errors.js.map +0 -1
- package/dist/host/index.d.ts +0 -29
- package/dist/host/index.d.ts.map +0 -1
- package/dist/host/index.js +0 -32
- package/dist/host/index.js.map +0 -1
- package/dist/host/pattern-matcher.d.ts +0 -36
- package/dist/host/pattern-matcher.d.ts.map +0 -1
- package/dist/host/pattern-matcher.js +0 -172
- package/dist/host/pattern-matcher.js.map +0 -1
- package/dist/host/router.d.ts +0 -26
- package/dist/host/router.d.ts.map +0 -1
- package/dist/host/router.js +0 -218
- package/dist/host/router.js.map +0 -1
- package/dist/host/testing.d.ts +0 -36
- package/dist/host/testing.d.ts.map +0 -1
- package/dist/host/testing.js +0 -55
- package/dist/host/testing.js.map +0 -1
- package/dist/host/types.d.ts +0 -115
- package/dist/host/types.d.ts.map +0 -1
- package/dist/host/types.js +0 -7
- package/dist/host/types.js.map +0 -1
- package/dist/host/utils.d.ts +0 -21
- package/dist/host/utils.d.ts.map +0 -1
- package/dist/host/utils.js +0 -23
- package/dist/host/utils.js.map +0 -1
- package/dist/href-client.d.ts +0 -131
- package/dist/href-client.d.ts.map +0 -1
- package/dist/href-client.js +0 -64
- package/dist/href-client.js.map +0 -1
- package/dist/href-context.d.ts +0 -29
- package/dist/href-context.d.ts.map +0 -1
- package/dist/href-context.js +0 -21
- package/dist/href-context.js.map +0 -1
- package/dist/index.d.ts +0 -73
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -91
- package/dist/index.js.map +0 -1
- package/dist/index.rsc.d.ts +0 -32
- package/dist/index.rsc.d.ts.map +0 -1
- package/dist/index.rsc.js +0 -40
- package/dist/index.rsc.js.map +0 -1
- package/dist/internal-debug.d.ts +0 -2
- package/dist/internal-debug.d.ts.map +0 -1
- package/dist/internal-debug.js +0 -5
- package/dist/internal-debug.js.map +0 -1
- package/dist/loader.d.ts +0 -14
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -20
- package/dist/loader.js.map +0 -1
- package/dist/loader.rsc.d.ts +0 -19
- package/dist/loader.rsc.d.ts.map +0 -1
- package/dist/loader.rsc.js +0 -99
- package/dist/loader.rsc.js.map +0 -1
- package/dist/network-error-thrower.d.ts +0 -17
- package/dist/network-error-thrower.d.ts.map +0 -1
- package/dist/network-error-thrower.js +0 -14
- package/dist/network-error-thrower.js.map +0 -1
- package/dist/outlet-context.d.ts +0 -13
- package/dist/outlet-context.d.ts.map +0 -1
- package/dist/outlet-context.js +0 -3
- package/dist/outlet-context.js.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.js +0 -148
- package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
- package/dist/prerender/param-hash.d.ts +0 -16
- package/dist/prerender/param-hash.d.ts.map +0 -1
- package/dist/prerender/param-hash.js +0 -36
- package/dist/prerender/param-hash.js.map +0 -1
- package/dist/prerender/store.d.ts +0 -38
- package/dist/prerender/store.d.ts.map +0 -1
- package/dist/prerender/store.js +0 -61
- package/dist/prerender/store.js.map +0 -1
- package/dist/prerender.d.ts +0 -66
- package/dist/prerender.d.ts.map +0 -1
- package/dist/prerender.js +0 -57
- package/dist/prerender.js.map +0 -1
- package/dist/reverse.d.ts +0 -196
- package/dist/reverse.d.ts.map +0 -1
- package/dist/reverse.js +0 -78
- package/dist/reverse.js.map +0 -1
- package/dist/root-error-boundary.d.ts +0 -33
- package/dist/root-error-boundary.d.ts.map +0 -1
- package/dist/root-error-boundary.js +0 -165
- package/dist/root-error-boundary.js.map +0 -1
- package/dist/route-content-wrapper.d.ts +0 -46
- package/dist/route-content-wrapper.d.ts.map +0 -1
- package/dist/route-content-wrapper.js +0 -77
- package/dist/route-content-wrapper.js.map +0 -1
- package/dist/route-definition.d.ts +0 -421
- package/dist/route-definition.d.ts.map +0 -1
- package/dist/route-definition.js +0 -868
- package/dist/route-definition.js.map +0 -1
- package/dist/route-map-builder.d.ts +0 -155
- package/dist/route-map-builder.d.ts.map +0 -1
- package/dist/route-map-builder.js +0 -237
- package/dist/route-map-builder.js.map +0 -1
- package/dist/route-types.d.ts +0 -165
- package/dist/route-types.d.ts.map +0 -1
- package/dist/route-types.js +0 -7
- package/dist/route-types.js.map +0 -1
- package/dist/router/__tests__/handler-context.test.d.ts +0 -2
- package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/handler-context.test.js +0 -65
- package/dist/router/__tests__/handler-context.test.js.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
- package/dist/router/__tests__/match-context.test.d.ts +0 -2
- package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-context.test.js +0 -92
- package/dist/router/__tests__/match-context.test.js.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.js +0 -417
- package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
- package/dist/router/__tests__/match-result.test.d.ts +0 -2
- package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-result.test.js +0 -457
- package/dist/router/__tests__/match-result.test.js.map +0 -1
- package/dist/router/__tests__/on-error.test.d.ts +0 -2
- package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
- package/dist/router/__tests__/on-error.test.js +0 -678
- package/dist/router/__tests__/on-error.test.js.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.js +0 -629
- package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
- package/dist/router/error-handling.d.ts +0 -77
- package/dist/router/error-handling.d.ts.map +0 -1
- package/dist/router/error-handling.js +0 -202
- package/dist/router/error-handling.js.map +0 -1
- package/dist/router/handler-context.d.ts +0 -20
- package/dist/router/handler-context.d.ts.map +0 -1
- package/dist/router/handler-context.js +0 -198
- package/dist/router/handler-context.js.map +0 -1
- package/dist/router/intercept-resolution.d.ts +0 -66
- package/dist/router/intercept-resolution.d.ts.map +0 -1
- package/dist/router/intercept-resolution.js +0 -246
- package/dist/router/intercept-resolution.js.map +0 -1
- package/dist/router/loader-resolution.d.ts +0 -64
- package/dist/router/loader-resolution.d.ts.map +0 -1
- package/dist/router/loader-resolution.js +0 -284
- package/dist/router/loader-resolution.js.map +0 -1
- package/dist/router/logging.d.ts +0 -15
- package/dist/router/logging.d.ts.map +0 -1
- package/dist/router/logging.js +0 -99
- package/dist/router/logging.js.map +0 -1
- package/dist/router/manifest.d.ts +0 -22
- package/dist/router/manifest.d.ts.map +0 -1
- package/dist/router/manifest.js +0 -181
- package/dist/router/manifest.js.map +0 -1
- package/dist/router/match-api.d.ts +0 -35
- package/dist/router/match-api.d.ts.map +0 -1
- package/dist/router/match-api.js +0 -406
- package/dist/router/match-api.js.map +0 -1
- package/dist/router/match-context.d.ts +0 -206
- package/dist/router/match-context.d.ts.map +0 -1
- package/dist/router/match-context.js +0 -17
- package/dist/router/match-context.js.map +0 -1
- package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
- package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
- package/dist/router/match-middleware/background-revalidation.js +0 -75
- package/dist/router/match-middleware/background-revalidation.js.map +0 -1
- package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
- package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-lookup.js +0 -257
- package/dist/router/match-middleware/cache-lookup.js.map +0 -1
- package/dist/router/match-middleware/cache-store.d.ts +0 -113
- package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-store.js +0 -108
- package/dist/router/match-middleware/cache-store.js.map +0 -1
- package/dist/router/match-middleware/index.d.ts +0 -81
- package/dist/router/match-middleware/index.d.ts.map +0 -1
- package/dist/router/match-middleware/index.js +0 -80
- package/dist/router/match-middleware/index.js.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.js +0 -134
- package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
- package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
- package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/segment-resolution.js +0 -53
- package/dist/router/match-middleware/segment-resolution.js.map +0 -1
- package/dist/router/match-pipelines.d.ts +0 -147
- package/dist/router/match-pipelines.d.ts.map +0 -1
- package/dist/router/match-pipelines.js +0 -82
- package/dist/router/match-pipelines.js.map +0 -1
- package/dist/router/match-result.d.ts +0 -126
- package/dist/router/match-result.d.ts.map +0 -1
- package/dist/router/match-result.js +0 -93
- package/dist/router/match-result.js.map +0 -1
- package/dist/router/metrics.d.ts +0 -20
- package/dist/router/metrics.d.ts.map +0 -1
- package/dist/router/metrics.js +0 -47
- package/dist/router/metrics.js.map +0 -1
- package/dist/router/middleware.d.ts +0 -249
- package/dist/router/middleware.d.ts.map +0 -1
- package/dist/router/middleware.js +0 -434
- package/dist/router/middleware.js.map +0 -1
- package/dist/router/middleware.test.d.ts +0 -2
- package/dist/router/middleware.test.d.ts.map +0 -1
- package/dist/router/middleware.test.js +0 -816
- package/dist/router/middleware.test.js.map +0 -1
- package/dist/router/pattern-matching.d.ts +0 -149
- package/dist/router/pattern-matching.d.ts.map +0 -1
- package/dist/router/pattern-matching.js +0 -349
- package/dist/router/pattern-matching.js.map +0 -1
- package/dist/router/revalidation.d.ts +0 -44
- package/dist/router/revalidation.d.ts.map +0 -1
- package/dist/router/revalidation.js +0 -147
- package/dist/router/revalidation.js.map +0 -1
- package/dist/router/router-context.d.ts +0 -135
- package/dist/router/router-context.d.ts.map +0 -1
- package/dist/router/router-context.js +0 -36
- package/dist/router/router-context.js.map +0 -1
- package/dist/router/segment-resolution.d.ts +0 -127
- package/dist/router/segment-resolution.d.ts.map +0 -1
- package/dist/router/segment-resolution.js +0 -919
- package/dist/router/segment-resolution.js.map +0 -1
- package/dist/router/trie-matching.d.ts +0 -40
- package/dist/router/trie-matching.d.ts.map +0 -1
- package/dist/router/trie-matching.js +0 -127
- package/dist/router/trie-matching.js.map +0 -1
- package/dist/router/types.d.ts +0 -136
- package/dist/router/types.d.ts.map +0 -1
- package/dist/router/types.js +0 -7
- package/dist/router/types.js.map +0 -1
- package/dist/router.d.ts +0 -753
- package/dist/router.d.ts.map +0 -1
- package/dist/router.gen.d.ts +0 -6
- package/dist/router.gen.d.ts.map +0 -1
- package/dist/router.gen.js +0 -6
- package/dist/router.gen.js.map +0 -1
- package/dist/router.js +0 -1304
- package/dist/router.js.map +0 -1
- package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
- package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
- package/dist/rsc/__tests__/helpers.test.js +0 -140
- package/dist/rsc/__tests__/helpers.test.js.map +0 -1
- package/dist/rsc/handler.d.ts +0 -45
- package/dist/rsc/handler.d.ts.map +0 -1
- package/dist/rsc/handler.js +0 -1172
- package/dist/rsc/handler.js.map +0 -1
- package/dist/rsc/helpers.d.ts +0 -16
- package/dist/rsc/helpers.d.ts.map +0 -1
- package/dist/rsc/helpers.js +0 -55
- package/dist/rsc/helpers.js.map +0 -1
- package/dist/rsc/index.d.ts +0 -22
- package/dist/rsc/index.d.ts.map +0 -1
- package/dist/rsc/index.js +0 -23
- package/dist/rsc/index.js.map +0 -1
- package/dist/rsc/nonce.d.ts +0 -9
- package/dist/rsc/nonce.d.ts.map +0 -1
- package/dist/rsc/nonce.js +0 -18
- package/dist/rsc/nonce.js.map +0 -1
- package/dist/rsc/types.d.ts +0 -206
- package/dist/rsc/types.d.ts.map +0 -1
- package/dist/rsc/types.js +0 -8
- package/dist/rsc/types.js.map +0 -1
- package/dist/search-params.d.ts +0 -103
- package/dist/search-params.d.ts.map +0 -1
- package/dist/search-params.js +0 -74
- package/dist/search-params.js.map +0 -1
- package/dist/segment-system.d.ts +0 -75
- package/dist/segment-system.d.ts.map +0 -1
- package/dist/segment-system.js +0 -336
- package/dist/segment-system.js.map +0 -1
- package/dist/server/context.d.ts +0 -245
- package/dist/server/context.d.ts.map +0 -1
- package/dist/server/context.js +0 -197
- package/dist/server/context.js.map +0 -1
- package/dist/server/fetchable-loader-store.d.ts +0 -18
- package/dist/server/fetchable-loader-store.d.ts.map +0 -1
- package/dist/server/fetchable-loader-store.js +0 -18
- package/dist/server/fetchable-loader-store.js.map +0 -1
- package/dist/server/handle-store.d.ts +0 -85
- package/dist/server/handle-store.d.ts.map +0 -1
- package/dist/server/handle-store.js +0 -142
- package/dist/server/handle-store.js.map +0 -1
- package/dist/server/loader-registry.d.ts +0 -55
- package/dist/server/loader-registry.d.ts.map +0 -1
- package/dist/server/loader-registry.js +0 -132
- package/dist/server/loader-registry.js.map +0 -1
- package/dist/server/request-context.d.ts +0 -226
- package/dist/server/request-context.d.ts.map +0 -1
- package/dist/server/request-context.js +0 -290
- package/dist/server/request-context.js.map +0 -1
- package/dist/server/root-layout.d.ts +0 -4
- package/dist/server/root-layout.d.ts.map +0 -1
- package/dist/server/root-layout.js +0 -5
- package/dist/server/root-layout.js.map +0 -1
- package/dist/server.d.ts +0 -15
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -20
- package/dist/server.js.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
- package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
- package/dist/ssr/index.d.ts +0 -98
- package/dist/ssr/index.d.ts.map +0 -1
- package/dist/ssr/index.js +0 -158
- package/dist/ssr/index.js.map +0 -1
- package/dist/static-handler.d.ts +0 -50
- package/dist/static-handler.d.ts.map +0 -1
- package/dist/static-handler.gen.d.ts +0 -5
- package/dist/static-handler.gen.d.ts.map +0 -1
- package/dist/static-handler.gen.js +0 -5
- package/dist/static-handler.gen.js.map +0 -1
- package/dist/static-handler.js +0 -29
- package/dist/static-handler.js.map +0 -1
- package/dist/theme/ThemeProvider.d.ts +0 -20
- package/dist/theme/ThemeProvider.d.ts.map +0 -1
- package/dist/theme/ThemeProvider.js +0 -240
- package/dist/theme/ThemeProvider.js.map +0 -1
- package/dist/theme/ThemeScript.d.ts +0 -48
- package/dist/theme/ThemeScript.d.ts.map +0 -1
- package/dist/theme/ThemeScript.js +0 -13
- package/dist/theme/ThemeScript.js.map +0 -1
- package/dist/theme/__tests__/theme.test.d.ts +0 -2
- package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
- package/dist/theme/__tests__/theme.test.js +0 -103
- package/dist/theme/__tests__/theme.test.js.map +0 -1
- package/dist/theme/constants.d.ts +0 -29
- package/dist/theme/constants.d.ts.map +0 -1
- package/dist/theme/constants.js +0 -48
- package/dist/theme/constants.js.map +0 -1
- package/dist/theme/index.d.ts +0 -31
- package/dist/theme/index.d.ts.map +0 -1
- package/dist/theme/index.js +0 -36
- package/dist/theme/index.js.map +0 -1
- package/dist/theme/theme-context.d.ts +0 -40
- package/dist/theme/theme-context.d.ts.map +0 -1
- package/dist/theme/theme-context.js +0 -60
- package/dist/theme/theme-context.js.map +0 -1
- package/dist/theme/theme-script.d.ts +0 -27
- package/dist/theme/theme-script.d.ts.map +0 -1
- package/dist/theme/theme-script.js +0 -147
- package/dist/theme/theme-script.js.map +0 -1
- package/dist/theme/types.d.ts +0 -163
- package/dist/theme/types.d.ts.map +0 -1
- package/dist/theme/types.js +0 -11
- package/dist/theme/types.js.map +0 -1
- package/dist/theme/use-theme.d.ts +0 -12
- package/dist/theme/use-theme.d.ts.map +0 -1
- package/dist/theme/use-theme.js +0 -40
- package/dist/theme/use-theme.js.map +0 -1
- package/dist/types.d.ts +0 -1479
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -10
- package/dist/types.js.map +0 -1
- package/dist/urls.d.ts +0 -441
- package/dist/urls.d.ts.map +0 -1
- package/dist/urls.gen.d.ts +0 -8
- package/dist/urls.gen.d.ts.map +0 -1
- package/dist/urls.gen.js +0 -8
- package/dist/urls.gen.js.map +0 -1
- package/dist/urls.js +0 -443
- package/dist/urls.js.map +0 -1
- package/dist/use-loader.d.ts +0 -127
- package/dist/use-loader.d.ts.map +0 -1
- package/dist/use-loader.js +0 -237
- package/dist/use-loader.js.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
- package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.js +0 -39
- package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
- package/dist/vite/ast-handler-extract.d.ts +0 -49
- package/dist/vite/ast-handler-extract.d.ts.map +0 -1
- package/dist/vite/ast-handler-extract.js +0 -249
- package/dist/vite/ast-handler-extract.js.map +0 -1
- package/dist/vite/expose-action-id.d.ts +0 -19
- package/dist/vite/expose-action-id.d.ts.map +0 -1
- package/dist/vite/expose-action-id.js +0 -250
- package/dist/vite/expose-action-id.js.map +0 -1
- package/dist/vite/expose-id-utils.d.ts +0 -69
- package/dist/vite/expose-id-utils.d.ts.map +0 -1
- package/dist/vite/expose-id-utils.js +0 -289
- package/dist/vite/expose-id-utils.js.map +0 -1
- package/dist/vite/expose-internal-ids.d.ts +0 -22
- package/dist/vite/expose-internal-ids.d.ts.map +0 -1
- package/dist/vite/expose-internal-ids.js +0 -886
- package/dist/vite/expose-internal-ids.js.map +0 -1
- package/dist/vite/index.d.ts +0 -149
- package/dist/vite/index.d.ts.map +0 -1
- package/dist/vite/index.js.map +0 -1
- package/dist/vite/index.named-routes.gen.ts +0 -103
- package/dist/vite/package-resolution.d.ts +0 -43
- package/dist/vite/package-resolution.d.ts.map +0 -1
- package/dist/vite/package-resolution.js +0 -112
- package/dist/vite/package-resolution.js.map +0 -1
- package/dist/vite/virtual-entries.d.ts +0 -25
- package/dist/vite/virtual-entries.d.ts.map +0 -1
- package/dist/vite/virtual-entries.js +0 -110
- package/dist/vite/virtual-entries.js.map +0 -1
- package/src/browser/action-response-classifier.ts +0 -99
- package/src/browser/react/use-client-cache.ts +0 -58
- package/src/browser/shallow.ts +0 -40
- package/src/handles/index.ts +0 -7
- package/src/network-error-thrower.tsx +0 -23
- package/src/router/middleware-cookies.ts +0 -55
|
@@ -11,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 {
|
|
@@ -37,6 +42,8 @@ import type {
|
|
|
37
42
|
UseItems,
|
|
38
43
|
} from "../route-types.js";
|
|
39
44
|
import type { RouteHelpers } from "./helpers-types.js";
|
|
45
|
+
import { resolveHandlerUse, mergeHandlerUse } from "./resolve-handler-use.js";
|
|
46
|
+
import { ALL_USE_ITEM_TYPES } from "./use-item-types.js";
|
|
40
47
|
|
|
41
48
|
/**
|
|
42
49
|
* Check if an item contains routes (directly or inside nested structures like cache).
|
|
@@ -54,19 +61,111 @@ const hasRoutesInItem = (item: AllUseItems): boolean => {
|
|
|
54
61
|
if (item.type === "layout" && item.uses) {
|
|
55
62
|
return item.uses.some((child) => hasRoutesInItem(child));
|
|
56
63
|
}
|
|
64
|
+
if (item.type === "middleware" && item.uses) {
|
|
65
|
+
return item.uses.some((child) => hasRoutesInItem(child));
|
|
66
|
+
}
|
|
57
67
|
return false;
|
|
58
68
|
};
|
|
59
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
|
+
|
|
60
158
|
const revalidate: RouteHelpers<any, any>["revalidate"] = (fn) => {
|
|
61
|
-
const ctx =
|
|
62
|
-
|
|
159
|
+
const { store, ctx } = requireDslContext(
|
|
160
|
+
"revalidate() must be called inside urls()",
|
|
161
|
+
);
|
|
63
162
|
|
|
64
163
|
// Attach to last entry in stack
|
|
65
164
|
const parent = ctx.parent;
|
|
66
165
|
if (!parent || !("revalidate" in parent)) {
|
|
67
166
|
invariant(false, "No parent entry available for revalidate()");
|
|
68
167
|
}
|
|
69
|
-
const name = `$${
|
|
168
|
+
const name = `$${store.getNextIndex("revalidate")}`;
|
|
70
169
|
parent.revalidate.push(fn);
|
|
71
170
|
return { name, type: "revalidate" } as RevalidateItem;
|
|
72
171
|
};
|
|
@@ -104,15 +203,16 @@ const revalidate: RouteHelpers<any, any>["revalidate"] = (fn) => {
|
|
|
104
203
|
* ```
|
|
105
204
|
*/
|
|
106
205
|
const errorBoundary: RouteHelpers<any, any>["errorBoundary"] = (fallback) => {
|
|
107
|
-
const ctx =
|
|
108
|
-
|
|
206
|
+
const { store, ctx } = requireDslContext(
|
|
207
|
+
"errorBoundary() must be called inside urls()",
|
|
208
|
+
);
|
|
109
209
|
|
|
110
210
|
// Attach to parent entry in stack
|
|
111
211
|
const parent = ctx.parent;
|
|
112
212
|
if (!parent || !("errorBoundary" in parent)) {
|
|
113
213
|
invariant(false, "No parent entry available for errorBoundary()");
|
|
114
214
|
}
|
|
115
|
-
const name = `$${
|
|
215
|
+
const name = `$${store.getNextIndex("errorBoundary")}`;
|
|
116
216
|
parent.errorBoundary.push(fallback);
|
|
117
217
|
return { name, type: "errorBoundary" } as ErrorBoundaryItem;
|
|
118
218
|
};
|
|
@@ -151,15 +251,16 @@ const errorBoundary: RouteHelpers<any, any>["errorBoundary"] = (fallback) => {
|
|
|
151
251
|
const notFoundBoundary: RouteHelpers<any, any>["notFoundBoundary"] = (
|
|
152
252
|
fallback,
|
|
153
253
|
) => {
|
|
154
|
-
const ctx =
|
|
155
|
-
|
|
254
|
+
const { store, ctx } = requireDslContext(
|
|
255
|
+
"notFoundBoundary() must be called inside urls()",
|
|
256
|
+
);
|
|
156
257
|
|
|
157
258
|
// Attach to parent entry in stack
|
|
158
259
|
const parent = ctx.parent;
|
|
159
260
|
if (!parent || !("notFoundBoundary" in parent)) {
|
|
160
261
|
invariant(false, "No parent entry available for notFoundBoundary()");
|
|
161
262
|
}
|
|
162
|
-
const name = `$${
|
|
263
|
+
const name = `$${store.getNextIndex("notFoundBoundary")}`;
|
|
163
264
|
parent.notFoundBoundary.push(fallback);
|
|
164
265
|
return { name, type: "notFoundBoundary" } as NotFoundBoundaryItem;
|
|
165
266
|
};
|
|
@@ -173,8 +274,9 @@ const notFoundBoundary: RouteHelpers<any, any>["notFoundBoundary"] = (
|
|
|
173
274
|
* for the intercept to activate.
|
|
174
275
|
*/
|
|
175
276
|
const when: RouteHelpers<any, any>["when"] = (fn) => {
|
|
176
|
-
const ctx =
|
|
177
|
-
|
|
277
|
+
const { store, ctx } = requireDslContext(
|
|
278
|
+
"when() must be called inside intercept()",
|
|
279
|
+
);
|
|
178
280
|
|
|
179
281
|
// The when() function needs to be captured by the intercept's tempParent
|
|
180
282
|
// which should have a `when` array. If not present, we're not inside intercept()
|
|
@@ -186,7 +288,7 @@ const when: RouteHelpers<any, any>["when"] = (fn) => {
|
|
|
186
288
|
);
|
|
187
289
|
}
|
|
188
290
|
|
|
189
|
-
const name = `$${
|
|
291
|
+
const name = `$${store.getNextIndex("when")}`;
|
|
190
292
|
parent.when.push(fn);
|
|
191
293
|
return { name, type: "when" } as WhenItem;
|
|
192
294
|
};
|
|
@@ -201,21 +303,21 @@ const when: RouteHelpers<any, any>["when"] = (fn) => {
|
|
|
201
303
|
* Supports these call signatures:
|
|
202
304
|
* - cache() - no args, uses app-level defaults (for loader caching)
|
|
203
305
|
* - cache(() => [...]) - wraps children with app-level defaults
|
|
204
|
-
* - cache('profileName') - uses a named cache profile
|
|
205
|
-
* - cache('profileName', () => [...]) - named profile with children
|
|
206
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.
|
|
207
310
|
*/
|
|
208
311
|
const cache: RouteHelpers<any, any>["cache"] = (
|
|
209
312
|
optionsOrChildren?:
|
|
210
313
|
| PartialCacheOptions
|
|
211
314
|
| false
|
|
212
|
-
| string
|
|
213
315
|
| (() => UseItems<AllUseItems>),
|
|
214
316
|
maybeChildren?: () => UseItems<AllUseItems>,
|
|
215
317
|
) => {
|
|
216
|
-
const store =
|
|
217
|
-
|
|
218
|
-
|
|
318
|
+
const { store, ctx } = requireDslContext(
|
|
319
|
+
"cache() must be called inside urls()",
|
|
320
|
+
);
|
|
219
321
|
|
|
220
322
|
// Handle overloaded signature
|
|
221
323
|
let options: PartialCacheOptions | false;
|
|
@@ -225,18 +327,6 @@ const cache: RouteHelpers<any, any>["cache"] = (
|
|
|
225
327
|
// cache() - no args, use defaults
|
|
226
328
|
options = {};
|
|
227
329
|
children = undefined;
|
|
228
|
-
} else if (typeof optionsOrChildren === "string") {
|
|
229
|
-
// cache('profileName') or cache('profileName', () => [...])
|
|
230
|
-
// Resolve from context-scoped profiles (set per-router via HelperContext).
|
|
231
|
-
const ctxStore = RSCRouterContext.getStore();
|
|
232
|
-
const profile = ctxStore?.cacheProfiles?.[optionsOrChildren];
|
|
233
|
-
invariant(
|
|
234
|
-
profile,
|
|
235
|
-
`cache("${optionsOrChildren}"): unknown cache profile. ` +
|
|
236
|
-
`Define it in createRouter({ cacheProfiles: { "${optionsOrChildren}": { ttl: ... } } }).`,
|
|
237
|
-
);
|
|
238
|
-
options = { ttl: profile.ttl, swr: profile.swr, tags: profile.tags };
|
|
239
|
-
children = maybeChildren;
|
|
240
330
|
} else if (typeof optionsOrChildren === "function") {
|
|
241
331
|
// cache(() => [...]) - use empty options (will use defaults)
|
|
242
332
|
options = {};
|
|
@@ -267,26 +357,18 @@ const cache: RouteHelpers<any, any>["cache"] = (
|
|
|
267
357
|
// Create orphan cache entry (like orphan layout)
|
|
268
358
|
// Subsequent siblings in the same array will attach to this entry
|
|
269
359
|
const namespace = `${ctx.namespace}.${cacheIndex}`;
|
|
270
|
-
const
|
|
360
|
+
const urlPrefix = getUrlPrefix();
|
|
271
361
|
|
|
272
362
|
const entry = {
|
|
363
|
+
...emptySegmentBase(),
|
|
273
364
|
id: namespace,
|
|
274
365
|
shortCode: store.getShortCode("cache"),
|
|
275
366
|
type: "cache",
|
|
276
367
|
parent: parent, // link to current parent for hierarchy
|
|
277
368
|
cache: cacheConfig,
|
|
278
369
|
handler: RootLayout,
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
revalidate: [],
|
|
282
|
-
errorBoundary: [],
|
|
283
|
-
notFoundBoundary: [],
|
|
284
|
-
layout: [],
|
|
285
|
-
parallel: {},
|
|
286
|
-
intercept: [],
|
|
287
|
-
loader: [],
|
|
288
|
-
...(cacheUrlPrefix ? { mountPath: cacheUrlPrefix } : {}),
|
|
289
|
-
} as EntryData;
|
|
370
|
+
...(urlPrefix ? { mountPath: urlPrefix } : {}),
|
|
371
|
+
} satisfies EntryData;
|
|
290
372
|
|
|
291
373
|
// Attach to parent's layout array (cache entries are structural like layouts)
|
|
292
374
|
if (parent && "layout" in parent) {
|
|
@@ -300,13 +382,23 @@ const cache: RouteHelpers<any, any>["cache"] = (
|
|
|
300
382
|
return { name: namespace, type: "cache" } as CacheItem;
|
|
301
383
|
}
|
|
302
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
|
+
|
|
303
394
|
// With children: create a cache entry (like layout with caching semantics)
|
|
304
395
|
const namespace = `${ctx.namespace}.${cacheIndex}`;
|
|
305
396
|
const cacheShortCode = store.getShortCode("cache");
|
|
306
397
|
|
|
307
|
-
const
|
|
398
|
+
const urlPrefix = getUrlPrefix();
|
|
308
399
|
|
|
309
400
|
const entry = {
|
|
401
|
+
...emptySegmentBase(),
|
|
310
402
|
id: namespace,
|
|
311
403
|
shortCode: cacheShortCode,
|
|
312
404
|
type: "cache",
|
|
@@ -314,48 +406,57 @@ const cache: RouteHelpers<any, any>["cache"] = (
|
|
|
314
406
|
cache: cacheConfig,
|
|
315
407
|
// Cache entries render like layouts (with Outlet as default handler)
|
|
316
408
|
handler: RootLayout, // RootLayout just renders <Outlet />
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
revalidate: [],
|
|
320
|
-
errorBoundary: [],
|
|
321
|
-
notFoundBoundary: [],
|
|
322
|
-
layout: [],
|
|
323
|
-
parallel: {},
|
|
324
|
-
intercept: [],
|
|
325
|
-
loader: [],
|
|
326
|
-
...(cacheUrlPrefix2 ? { mountPath: cacheUrlPrefix2 } : {}),
|
|
327
|
-
} as EntryData;
|
|
409
|
+
...(urlPrefix ? { mountPath: urlPrefix } : {}),
|
|
410
|
+
} satisfies EntryData;
|
|
328
411
|
|
|
329
412
|
// Run children with cache entry as parent
|
|
330
|
-
const result =
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
413
|
+
const result = runAndValidateUseItems(
|
|
414
|
+
store,
|
|
415
|
+
namespace,
|
|
416
|
+
entry,
|
|
417
|
+
children,
|
|
418
|
+
"cache",
|
|
419
|
+
"children",
|
|
335
420
|
);
|
|
336
421
|
|
|
337
|
-
//
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
Array.isArray(result) &&
|
|
341
|
-
result.some((item) => hasRoutesInItem(item));
|
|
342
|
-
|
|
343
|
-
if (!hasRoutes) {
|
|
344
|
-
const parent = ctx.parent;
|
|
345
|
-
if (parent && "layout" in parent) {
|
|
346
|
-
// Attach to parent's layout array (cache entries are structural like layouts)
|
|
347
|
-
entry.parent = null;
|
|
348
|
-
parent.layout.push(entry);
|
|
349
|
-
}
|
|
350
|
-
}
|
|
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);
|
|
351
425
|
|
|
352
426
|
return { name: namespace, type: "cache", uses: result } as CacheItem;
|
|
353
427
|
};
|
|
354
428
|
|
|
355
|
-
const middleware: RouteHelpers<any, any>["middleware"] = (...
|
|
429
|
+
const middleware: RouteHelpers<any, any>["middleware"] = (...args: any[]) => {
|
|
430
|
+
// Four call forms:
|
|
431
|
+
// middleware(fn) — single fn, sibling
|
|
432
|
+
// middleware(fn, () => [...]) — single fn, wrapping
|
|
433
|
+
// middleware([fn1, fn2]) — array, sibling
|
|
434
|
+
// middleware([fn1, fn2], () => [...]) — array, wrapping
|
|
435
|
+
const isArray = Array.isArray(args[0]);
|
|
436
|
+
|
|
437
|
+
// Reject the removed variadic form before executing anything.
|
|
438
|
+
// middleware(fn1, fn2, fn3) — 3+ args, always wrong.
|
|
439
|
+
// middleware(fn1, fn2) where fn2 is a middleware fn (length >= 1), not a
|
|
440
|
+
// children callback (length === 0) — legacy two-fn form, reject early.
|
|
441
|
+
if (
|
|
442
|
+
args.length > 2 ||
|
|
443
|
+
(!isArray &&
|
|
444
|
+
args.length === 2 &&
|
|
445
|
+
typeof args[1] === "function" &&
|
|
446
|
+
args[1].length > 0)
|
|
447
|
+
) {
|
|
448
|
+
throw new Error(
|
|
449
|
+
"middleware() no longer accepts variadic arguments. " +
|
|
450
|
+
"Use middleware([fn1, fn2, ...]) instead of middleware(fn1, fn2, ...).",
|
|
451
|
+
);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
const fns: MiddlewareFn<any>[] = isArray ? args[0] : [args[0]];
|
|
455
|
+
const children: (() => any[]) | undefined =
|
|
456
|
+
typeof args[1] === "function" ? args[1] : undefined;
|
|
457
|
+
|
|
356
458
|
// Prevent "use cache" functions from being used as middleware.
|
|
357
|
-
|
|
358
|
-
for (const f of fn) {
|
|
459
|
+
for (const f of fns) {
|
|
359
460
|
if (isCachedFunction(f)) {
|
|
360
461
|
throw new Error(
|
|
361
462
|
`A "use cache" function cannot be used as middleware. ` +
|
|
@@ -366,23 +467,84 @@ const middleware: RouteHelpers<any, any>["middleware"] = (...fn) => {
|
|
|
366
467
|
}
|
|
367
468
|
}
|
|
368
469
|
|
|
369
|
-
const ctx =
|
|
370
|
-
|
|
470
|
+
const { store, ctx } = requireDslContext(
|
|
471
|
+
"middleware() must be called inside urls()",
|
|
472
|
+
);
|
|
371
473
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
474
|
+
if (!children) {
|
|
475
|
+
// Sibling mode: attach to parent entry
|
|
476
|
+
const parent = ctx.parent;
|
|
477
|
+
if (!parent || !("middleware" in parent)) {
|
|
478
|
+
invariant(false, "No parent entry available for middleware()");
|
|
479
|
+
}
|
|
480
|
+
const name = `$${store.getNextIndex("middleware")}`;
|
|
481
|
+
parent.middleware.push(...fns);
|
|
482
|
+
return { name, type: "middleware" } as MiddlewareItem;
|
|
376
483
|
}
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
484
|
+
|
|
485
|
+
// Wrapping mode: create a transparent layout that carries the middleware
|
|
486
|
+
const mwIndex = store.getNextIndex("middleware");
|
|
487
|
+
const namespace = `${ctx.namespace}.${mwIndex}`;
|
|
488
|
+
|
|
489
|
+
const urlPrefix = getUrlPrefix();
|
|
490
|
+
const entry = {
|
|
491
|
+
...emptySegmentBase(),
|
|
492
|
+
id: namespace,
|
|
493
|
+
shortCode: store.getShortCode("layout"),
|
|
494
|
+
type: "layout",
|
|
495
|
+
parent: ctx.parent,
|
|
496
|
+
handler: RootLayout,
|
|
497
|
+
middleware: [...fns],
|
|
498
|
+
...(urlPrefix ? { mountPath: urlPrefix } : {}),
|
|
499
|
+
} satisfies EntryData;
|
|
500
|
+
|
|
501
|
+
// Run children callback. If the second arg was actually a middleware fn
|
|
502
|
+
// (old variadic form: middleware(mw1, mw2)), this will return a non-array
|
|
503
|
+
// and the invariant below gives a clear migration error.
|
|
504
|
+
const rawResult = store.run(namespace, entry, children);
|
|
505
|
+
|
|
506
|
+
invariant(
|
|
507
|
+
Array.isArray(rawResult),
|
|
508
|
+
"middleware(fn, children) expects the second argument to return an array of use items. " +
|
|
509
|
+
"To pass multiple middleware, use middleware([fn1, fn2]).",
|
|
510
|
+
);
|
|
511
|
+
|
|
512
|
+
const result = validateUseItems(
|
|
513
|
+
rawResult.flat(3),
|
|
514
|
+
namespace,
|
|
515
|
+
"middleware",
|
|
516
|
+
"children",
|
|
517
|
+
);
|
|
518
|
+
|
|
519
|
+
if (isOrphan(result)) attachOrphanSibling(ctx.parent, entry);
|
|
520
|
+
|
|
521
|
+
return {
|
|
522
|
+
name: namespace,
|
|
523
|
+
type: "middleware",
|
|
524
|
+
uses: result,
|
|
525
|
+
} as MiddlewareItem;
|
|
380
526
|
};
|
|
381
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
|
+
|
|
382
544
|
const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
383
|
-
const store =
|
|
384
|
-
|
|
385
|
-
|
|
545
|
+
const { store, ctx } = requireDslContext(
|
|
546
|
+
"parallel() must be called inside urls()",
|
|
547
|
+
);
|
|
386
548
|
|
|
387
549
|
if (!ctx.parent || !ctx.parent?.parallel) {
|
|
388
550
|
invariant(false, "No parent entry available for parallel()");
|
|
@@ -394,16 +556,29 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
|
394
556
|
);
|
|
395
557
|
|
|
396
558
|
const slotNames = Object.keys(slots as Record<string, any>) as `@${string}`[];
|
|
559
|
+
for (const slotName of slotNames) assertValidSlotName(slotName);
|
|
397
560
|
|
|
398
561
|
const namespace = `${ctx.namespace}.$${store.getNextIndex("parallel")}`;
|
|
399
562
|
|
|
400
|
-
// Unwrap
|
|
563
|
+
// Unwrap slot values. A slot value can be:
|
|
564
|
+
// - a Handler / ReactNode (legacy form)
|
|
565
|
+
// - a Static() definition (build-time only)
|
|
566
|
+
// - a slot descriptor `{ handler, use? }` for slot-local overrides
|
|
567
|
+
// The descriptor's `use` runs after the broadcast `use` for that slot,
|
|
568
|
+
// so single-assignment items like `loading()` placed there win without
|
|
569
|
+
// affecting siblings.
|
|
401
570
|
const unwrappedSlots: Record<string, any> = {};
|
|
571
|
+
const slotLocalUses: Record<string, (() => any[]) | undefined> = {};
|
|
402
572
|
let hasStaticSlot = false;
|
|
403
573
|
const staticSlotIds: Record<string, string> = {};
|
|
404
|
-
for (const [slotName,
|
|
574
|
+
for (const [slotName, rawSlot] of Object.entries(
|
|
405
575
|
slots as Record<string, any>,
|
|
406
576
|
)) {
|
|
577
|
+
let slotHandler: any = rawSlot;
|
|
578
|
+
if (isSlotDescriptor(rawSlot)) {
|
|
579
|
+
slotHandler = rawSlot.handler;
|
|
580
|
+
slotLocalUses[slotName] = rawSlot.use;
|
|
581
|
+
}
|
|
407
582
|
if (isStaticHandler(slotHandler)) {
|
|
408
583
|
hasStaticSlot = true;
|
|
409
584
|
unwrappedSlots[slotName] = slotHandler.handler;
|
|
@@ -422,20 +597,12 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
|
422
597
|
// Create full EntryData for parallel with its own loaders/revalidate/loading
|
|
423
598
|
const parallelUrlPrefix = getUrlPrefix();
|
|
424
599
|
const entry = {
|
|
600
|
+
...emptySegmentBase(),
|
|
425
601
|
id: namespace,
|
|
426
602
|
shortCode: store.getShortCode("parallel"),
|
|
427
603
|
type: "parallel",
|
|
428
604
|
parent: null, // Parallels don't participate in parent chain traversal
|
|
429
605
|
handler: unwrappedSlots,
|
|
430
|
-
loading: undefined, // Allow loading() to attach loading state
|
|
431
|
-
middleware: [],
|
|
432
|
-
revalidate: [],
|
|
433
|
-
errorBoundary: [],
|
|
434
|
-
notFoundBoundary: [],
|
|
435
|
-
layout: [],
|
|
436
|
-
parallel: {},
|
|
437
|
-
intercept: [],
|
|
438
|
-
loader: [],
|
|
439
606
|
...(parallelUrlPrefix ? { mountPath: parallelUrlPrefix } : {}),
|
|
440
607
|
...(hasStaticSlot
|
|
441
608
|
? {
|
|
@@ -447,15 +614,6 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
|
447
614
|
: {}),
|
|
448
615
|
} satisfies EntryData;
|
|
449
616
|
|
|
450
|
-
// Run use callback if provided to collect loaders, revalidate, loading
|
|
451
|
-
if (use && typeof use === "function") {
|
|
452
|
-
const result = store.run(namespace, entry, use)?.flat(3);
|
|
453
|
-
invariant(
|
|
454
|
-
Array.isArray(result) && result.every((item) => isValidUseItem(item)),
|
|
455
|
-
`parallel() use() callback must return an array of use items [${namespace}]`,
|
|
456
|
-
);
|
|
457
|
-
}
|
|
458
|
-
|
|
459
617
|
for (const slotName of slotNames) {
|
|
460
618
|
const slotEntry = {
|
|
461
619
|
...entry,
|
|
@@ -478,11 +636,64 @@ const parallel: RouteHelpers<any, any>["parallel"] = (slots, use) => {
|
|
|
478
636
|
staticHandlerIds: undefined,
|
|
479
637
|
}),
|
|
480
638
|
} satisfies EntryData;
|
|
639
|
+
|
|
640
|
+
// Per-slot merge order (narrowest-scope-wins for single-assignment items
|
|
641
|
+
// like loading()):
|
|
642
|
+
// 1. handler.use — defaults baked into the handler
|
|
643
|
+
// 2. shared `use` — broadcast at the parallel() call site
|
|
644
|
+
// 3. slot-local `use` — per-slot override via `{ handler, use }` descriptor
|
|
645
|
+
// Items that accumulate (loader, middleware, revalidate, …) compose
|
|
646
|
+
// across all three layers regardless of order.
|
|
647
|
+
const rawSlot = (slots as Record<string, any>)[slotName];
|
|
648
|
+
const slotHandlerForUse = isSlotDescriptor(rawSlot)
|
|
649
|
+
? rawSlot.handler
|
|
650
|
+
: rawSlot;
|
|
651
|
+
const slotHandlerUse = resolveHandlerUse(slotHandlerForUse);
|
|
652
|
+
const slotLocalUse = slotLocalUses[slotName];
|
|
653
|
+
const explicitUse = combineExplicitUses(use, slotLocalUse);
|
|
654
|
+
const slotMergedUse = mergeHandlerUse(
|
|
655
|
+
slotHandlerUse,
|
|
656
|
+
explicitUse,
|
|
657
|
+
"parallel",
|
|
658
|
+
);
|
|
659
|
+
if (slotMergedUse) {
|
|
660
|
+
runAndValidateUseItems(
|
|
661
|
+
store,
|
|
662
|
+
namespace,
|
|
663
|
+
slotEntry,
|
|
664
|
+
slotMergedUse,
|
|
665
|
+
"parallel",
|
|
666
|
+
"use",
|
|
667
|
+
);
|
|
668
|
+
}
|
|
669
|
+
|
|
481
670
|
ctx.parent.parallel[slotName] = slotEntry;
|
|
482
671
|
}
|
|
483
672
|
return { name: namespace, type: "parallel" } as ParallelItem;
|
|
484
673
|
};
|
|
485
674
|
|
|
675
|
+
function isSlotDescriptor(
|
|
676
|
+
value: unknown,
|
|
677
|
+
): value is { handler: unknown; use?: () => any[] } {
|
|
678
|
+
return (
|
|
679
|
+
typeof value === "object" &&
|
|
680
|
+
value !== null &&
|
|
681
|
+
!("__brand" in value) &&
|
|
682
|
+
"handler" in value &&
|
|
683
|
+
typeof (value as any).handler !== "undefined"
|
|
684
|
+
);
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
function combineExplicitUses(
|
|
688
|
+
sharedUse: (() => any[]) | undefined,
|
|
689
|
+
slotLocalUse: (() => any[]) | undefined,
|
|
690
|
+
): (() => any[]) | undefined {
|
|
691
|
+
if (!sharedUse && !slotLocalUse) return undefined;
|
|
692
|
+
if (!slotLocalUse) return sharedUse;
|
|
693
|
+
if (!sharedUse) return slotLocalUse;
|
|
694
|
+
return () => [...sharedUse(), ...slotLocalUse()];
|
|
695
|
+
}
|
|
696
|
+
|
|
486
697
|
/**
|
|
487
698
|
* Intercept helper - defines an intercepting route for soft navigation
|
|
488
699
|
*/
|
|
@@ -492,9 +703,9 @@ const intercept = (
|
|
|
492
703
|
handler: any,
|
|
493
704
|
use?: () => any[],
|
|
494
705
|
) => {
|
|
495
|
-
const store =
|
|
496
|
-
|
|
497
|
-
|
|
706
|
+
const { store, ctx } = requireDslContext(
|
|
707
|
+
"intercept() must be called inside urls()",
|
|
708
|
+
);
|
|
498
709
|
|
|
499
710
|
if (!ctx.parent || !ctx.parent?.intercept) {
|
|
500
711
|
invariant(false, "No parent entry available for intercept()");
|
|
@@ -505,6 +716,8 @@ const intercept = (
|
|
|
505
716
|
"intercept() cannot be used inside parallel()",
|
|
506
717
|
);
|
|
507
718
|
|
|
719
|
+
assertValidSlotName(slotName);
|
|
720
|
+
|
|
508
721
|
const namespace = `${ctx.namespace}.$${store.getNextIndex("intercept")}.${slotName}`;
|
|
509
722
|
|
|
510
723
|
// Dot-prefixed = local (add include prefix), unprefixed = global (use as-is)
|
|
@@ -527,17 +740,19 @@ const intercept = (
|
|
|
527
740
|
when: [], // Selector conditions for conditional interception
|
|
528
741
|
};
|
|
529
742
|
|
|
530
|
-
//
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
// so that middleware, loader, revalidate attach to the intercept entry
|
|
534
|
-
const originalParent = ctx.parent;
|
|
743
|
+
// Merge handler.use defaults with explicit use
|
|
744
|
+
const handlerUseFn = resolveHandlerUse(handler);
|
|
745
|
+
const mergedUse = mergeHandlerUse(handlerUseFn, use, "intercept");
|
|
535
746
|
|
|
536
|
-
|
|
747
|
+
// Run merged use callback to collect loaders, revalidate, middleware, etc.
|
|
748
|
+
if (mergedUse) {
|
|
749
|
+
// Capture layout() calls into a temporary array
|
|
537
750
|
const capturedLayouts: EntryData[] = [];
|
|
538
751
|
|
|
752
|
+
// Temporary parent so middleware/loader/revalidate/when attach to the
|
|
753
|
+
// intercept entry; the loading get/set accessor mirrors writes onto `entry`.
|
|
539
754
|
const tempParent = {
|
|
540
|
-
...
|
|
755
|
+
...ctx.parent,
|
|
541
756
|
middleware: entry.middleware,
|
|
542
757
|
revalidate: entry.revalidate,
|
|
543
758
|
errorBoundary: entry.errorBoundary,
|
|
@@ -545,7 +760,6 @@ const intercept = (
|
|
|
545
760
|
loader: entry.loader,
|
|
546
761
|
layout: capturedLayouts, // Capture layout() calls
|
|
547
762
|
when: entry.when, // Capture when() conditions
|
|
548
|
-
// Use getter/setter to capture loading on the entry
|
|
549
763
|
get loading() {
|
|
550
764
|
return entry.loading;
|
|
551
765
|
},
|
|
@@ -553,12 +767,10 @@ const intercept = (
|
|
|
553
767
|
entry.loading = value;
|
|
554
768
|
},
|
|
555
769
|
};
|
|
556
|
-
ctx.parent = tempParent as EntryData;
|
|
557
|
-
|
|
558
|
-
const result = use()?.flat(3);
|
|
559
770
|
|
|
560
|
-
|
|
561
|
-
|
|
771
|
+
const result = withParent(ctx, tempParent as EntryData, () =>
|
|
772
|
+
mergedUse()?.flat(3),
|
|
773
|
+
);
|
|
562
774
|
|
|
563
775
|
// Extract layout from captured layouts (use first one if multiple)
|
|
564
776
|
// Layout inside intercept should always be ReactNode or Handler, not Record slots
|
|
@@ -568,10 +780,7 @@ const intercept = (
|
|
|
568
780
|
| Handler<any, any, any>;
|
|
569
781
|
}
|
|
570
782
|
|
|
571
|
-
|
|
572
|
-
Array.isArray(result) && result.every((item) => isValidUseItem(item)),
|
|
573
|
-
`intercept() use() callback must return an array of use items [${namespace}]`,
|
|
574
|
-
);
|
|
783
|
+
validateUseItems(result, namespace, "intercept", "use");
|
|
575
784
|
}
|
|
576
785
|
|
|
577
786
|
ctx.parent.intercept.push(entry);
|
|
@@ -581,10 +790,10 @@ const intercept = (
|
|
|
581
790
|
/**
|
|
582
791
|
* Loader helper - attaches a loader to the current entry
|
|
583
792
|
*/
|
|
584
|
-
const
|
|
585
|
-
const store =
|
|
586
|
-
|
|
587
|
-
|
|
793
|
+
const loader: RouteHelpers<any, any>["loader"] = (loaderDef, use) => {
|
|
794
|
+
const { store, ctx } = requireDslContext(
|
|
795
|
+
"loader() must be called inside urls()",
|
|
796
|
+
);
|
|
588
797
|
|
|
589
798
|
// Attach to last entry in stack
|
|
590
799
|
if (!ctx.parent || !ctx.parent?.loader) {
|
|
@@ -599,25 +808,28 @@ const loaderFn: RouteHelpers<any, any>["loader"] = (loaderDef, use) => {
|
|
|
599
808
|
revalidate: [] as ShouldRevalidateFn<any, any>[],
|
|
600
809
|
};
|
|
601
810
|
|
|
602
|
-
//
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
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) {
|
|
606
817
|
// Create a temporary "parent" with type "loader" so cache() can detect it.
|
|
607
818
|
// Save existing .cache to distinguish inherited config from newly set config.
|
|
608
|
-
const parentCache = (
|
|
819
|
+
const parentCache = (ctx.parent as any).cache;
|
|
609
820
|
const tempParent = {
|
|
610
|
-
...
|
|
821
|
+
...ctx.parent,
|
|
611
822
|
type: "loader",
|
|
612
823
|
revalidate: loaderEntry.revalidate,
|
|
613
824
|
};
|
|
614
|
-
ctx.parent = tempParent as EntryData;
|
|
615
825
|
|
|
616
|
-
const result =
|
|
826
|
+
const result = withParent(ctx, tempParent as EntryData, () =>
|
|
827
|
+
mergedUse()?.flat(3),
|
|
828
|
+
);
|
|
617
829
|
|
|
618
830
|
// Copy cache config only if cache() was called during the use() callback.
|
|
619
|
-
// The spread
|
|
620
|
-
//
|
|
831
|
+
// The spread may carry an inherited .cache from a parent cache() boundary —
|
|
832
|
+
// only copy if it was newly set.
|
|
621
833
|
if (
|
|
622
834
|
(tempParent as any).cache &&
|
|
623
835
|
(tempParent as any).cache !== parentCache
|
|
@@ -625,13 +837,7 @@ const loaderFn: RouteHelpers<any, any>["loader"] = (loaderDef, use) => {
|
|
|
625
837
|
(loaderEntry as any).cache = (tempParent as any).cache;
|
|
626
838
|
}
|
|
627
839
|
|
|
628
|
-
|
|
629
|
-
ctx.parent = originalParent;
|
|
630
|
-
|
|
631
|
-
invariant(
|
|
632
|
-
Array.isArray(result) && result.every((item) => isValidUseItem(item)),
|
|
633
|
-
`loader() use() callback must return an array of use items [${name}]`,
|
|
634
|
-
);
|
|
840
|
+
validateUseItems(result, name, "loader", "use");
|
|
635
841
|
}
|
|
636
842
|
|
|
637
843
|
ctx.parent.loader.push(loaderEntry);
|
|
@@ -642,21 +848,25 @@ const loaderFn: RouteHelpers<any, any>["loader"] = (loaderDef, use) => {
|
|
|
642
848
|
* Loading helper - attaches a loading component to the current entry
|
|
643
849
|
* Loading components are static (no context) and shown during navigation
|
|
644
850
|
*/
|
|
645
|
-
const
|
|
646
|
-
const store =
|
|
647
|
-
|
|
648
|
-
|
|
851
|
+
const loading: RouteHelpers<any, any>["loading"] = (component, options) => {
|
|
852
|
+
const { store, ctx } = requireDslContext(
|
|
853
|
+
"loading() must be called inside urls()",
|
|
854
|
+
);
|
|
649
855
|
|
|
650
856
|
const parent = ctx.parent;
|
|
651
857
|
if (!parent || !("loading" in parent)) {
|
|
652
858
|
invariant(false, "No parent entry available for loading()");
|
|
653
859
|
}
|
|
654
860
|
|
|
861
|
+
// Unwrap function form: loading(() => <Skeleton />) → loading(<Skeleton />)
|
|
862
|
+
const resolved =
|
|
863
|
+
typeof component === "function" ? (component as () => any)() : component;
|
|
864
|
+
|
|
655
865
|
// If ssr: false and we're in SSR, set loading to false
|
|
656
866
|
if (options?.ssr === false && ctx.isSSR) {
|
|
657
867
|
parent.loading = false;
|
|
658
868
|
} else {
|
|
659
|
-
parent.loading =
|
|
869
|
+
parent.loading = resolved;
|
|
660
870
|
}
|
|
661
871
|
|
|
662
872
|
const name = `$${store.getNextIndex("loading")}`;
|
|
@@ -664,10 +874,13 @@ const loadingFn: RouteHelpers<any, any>["loading"] = (component, options) => {
|
|
|
664
874
|
};
|
|
665
875
|
|
|
666
876
|
/**
|
|
667
|
-
* Transition helper -
|
|
668
|
-
*
|
|
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.
|
|
669
882
|
*/
|
|
670
|
-
const
|
|
883
|
+
const transition = (
|
|
671
884
|
configOrChildren?: TransitionConfig | (() => UseItems<AllUseItems>),
|
|
672
885
|
maybeChildren?: () => UseItems<AllUseItems>,
|
|
673
886
|
): TransitionItem => {
|
|
@@ -681,11 +894,15 @@ const transitionFn = (
|
|
|
681
894
|
const children: (() => UseItems<AllUseItems>) | undefined =
|
|
682
895
|
typeof configOrChildren === "function" ? configOrChildren : maybeChildren;
|
|
683
896
|
|
|
684
|
-
const store =
|
|
685
|
-
|
|
686
|
-
|
|
897
|
+
const { store, ctx } = requireDslContext(
|
|
898
|
+
"transition() must be called inside urls()",
|
|
899
|
+
);
|
|
687
900
|
|
|
688
|
-
|
|
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}`;
|
|
689
906
|
|
|
690
907
|
if (!children) {
|
|
691
908
|
// Position 1: child of path() — attach to parent entry
|
|
@@ -698,70 +915,51 @@ const transitionFn = (
|
|
|
698
915
|
}
|
|
699
916
|
|
|
700
917
|
// Position 2: wrapper — create a transparent layout with transition config
|
|
701
|
-
const namespace = `${ctx.namespace}.${
|
|
918
|
+
const namespace = `${ctx.namespace}.${transitionIndex}`;
|
|
702
919
|
const entry = {
|
|
920
|
+
...emptySegmentBase(),
|
|
703
921
|
id: namespace,
|
|
704
922
|
shortCode: store.getShortCode("layout"),
|
|
705
923
|
type: "layout",
|
|
706
924
|
parent: ctx.parent,
|
|
707
925
|
handler: RootLayout,
|
|
708
|
-
loading: undefined,
|
|
709
926
|
transition: config,
|
|
710
|
-
|
|
711
|
-
revalidate: [],
|
|
712
|
-
errorBoundary: [],
|
|
713
|
-
notFoundBoundary: [],
|
|
714
|
-
layout: [],
|
|
715
|
-
parallel: {},
|
|
716
|
-
intercept: [],
|
|
717
|
-
loader: [],
|
|
718
|
-
} as EntryData;
|
|
719
|
-
|
|
720
|
-
const result = store.run(namespace, entry, children)?.flat(3);
|
|
927
|
+
} satisfies EntryData;
|
|
721
928
|
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
929
|
+
const result = runAndValidateUseItems(
|
|
930
|
+
store,
|
|
931
|
+
namespace,
|
|
932
|
+
entry,
|
|
933
|
+
children,
|
|
934
|
+
"transition",
|
|
935
|
+
"children",
|
|
725
936
|
);
|
|
726
937
|
|
|
727
|
-
|
|
728
|
-
result &&
|
|
729
|
-
Array.isArray(result) &&
|
|
730
|
-
result.some((item) => hasRoutesInItem(item));
|
|
731
|
-
|
|
732
|
-
if (!hasRoutes) {
|
|
733
|
-
const parent = ctx.parent;
|
|
734
|
-
if (parent && "layout" in parent) {
|
|
735
|
-
entry.parent = null;
|
|
736
|
-
parent.layout.push(entry);
|
|
737
|
-
}
|
|
738
|
-
}
|
|
938
|
+
if (isOrphan(result)) attachOrphanSibling(ctx.parent, entry);
|
|
739
939
|
|
|
740
940
|
return { name: namespace, type: "transition" } as TransitionItem;
|
|
741
941
|
};
|
|
742
942
|
|
|
743
|
-
const
|
|
744
|
-
const store =
|
|
745
|
-
|
|
746
|
-
|
|
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);
|
|
747
953
|
|
|
748
954
|
const namespace = `${ctx.namespace}.${store.getNextIndex("route")}.${name}`;
|
|
749
955
|
|
|
750
956
|
const entry = {
|
|
957
|
+
...emptySegmentBase(),
|
|
751
958
|
id: namespace,
|
|
752
959
|
shortCode: store.getShortCode("route"),
|
|
753
960
|
type: "route",
|
|
754
961
|
parent: ctx.parent,
|
|
755
|
-
handler,
|
|
756
|
-
loading: undefined, // Allow loading() to attach loading state
|
|
757
|
-
middleware: [],
|
|
758
|
-
revalidate: [],
|
|
759
|
-
errorBoundary: [],
|
|
760
|
-
notFoundBoundary: [],
|
|
761
|
-
layout: [],
|
|
762
|
-
parallel: {},
|
|
763
|
-
intercept: [],
|
|
764
|
-
loader: [],
|
|
962
|
+
handler: handler as unknown as Handler<any, any, any>,
|
|
765
963
|
} satisfies EntryData;
|
|
766
964
|
|
|
767
965
|
/* We will throw if user is registring same route name twice */
|
|
@@ -771,12 +969,18 @@ const routeFn: RouteHelpers<any, any>["route"] = (name, handler, use) => {
|
|
|
771
969
|
);
|
|
772
970
|
/* Register route entry */
|
|
773
971
|
ctx.manifest.set(name, entry);
|
|
972
|
+
/* Merge handler.use defaults with explicit use */
|
|
973
|
+
const handlerUseFn = resolveHandlerUse(handler);
|
|
974
|
+
const mergedUse = mergeHandlerUse(handlerUseFn, use, "route");
|
|
774
975
|
/* Run use and attach handlers */
|
|
775
|
-
if (
|
|
776
|
-
const result =
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
976
|
+
if (mergedUse) {
|
|
977
|
+
const result = runAndValidateUseItems(
|
|
978
|
+
store,
|
|
979
|
+
namespace,
|
|
980
|
+
entry,
|
|
981
|
+
mergedUse,
|
|
982
|
+
"route",
|
|
983
|
+
"use",
|
|
780
984
|
);
|
|
781
985
|
return { name: namespace, type: "route", uses: result } as RouteItem;
|
|
782
986
|
}
|
|
@@ -786,9 +990,9 @@ const routeFn: RouteHelpers<any, any>["route"] = (name, handler, use) => {
|
|
|
786
990
|
};
|
|
787
991
|
|
|
788
992
|
const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
789
|
-
const store =
|
|
790
|
-
|
|
791
|
-
|
|
993
|
+
const { store, ctx } = requireDslContext(
|
|
994
|
+
"layout() must be called inside urls()",
|
|
995
|
+
);
|
|
792
996
|
|
|
793
997
|
invariant(
|
|
794
998
|
!ctx.parent || ctx.parent.type !== "parallel",
|
|
@@ -806,20 +1010,12 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
|
806
1010
|
|
|
807
1011
|
const urlPrefix = getUrlPrefix();
|
|
808
1012
|
const entry = {
|
|
1013
|
+
...emptySegmentBase(),
|
|
809
1014
|
id: namespace,
|
|
810
1015
|
shortCode,
|
|
811
1016
|
type: "layout",
|
|
812
1017
|
parent: ctx.parent,
|
|
813
1018
|
handler: unwrappedHandler,
|
|
814
|
-
loading: undefined, // Allow loading() to attach loading state
|
|
815
|
-
middleware: [],
|
|
816
|
-
revalidate: [],
|
|
817
|
-
errorBoundary: [],
|
|
818
|
-
notFoundBoundary: [],
|
|
819
|
-
parallel: {},
|
|
820
|
-
intercept: [],
|
|
821
|
-
layout: [],
|
|
822
|
-
loader: [],
|
|
823
1019
|
...(urlPrefix ? { mountPath: urlPrefix } : {}),
|
|
824
1020
|
...(isStatic
|
|
825
1021
|
? {
|
|
@@ -834,14 +1030,20 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
|
834
1030
|
(handler as any).$$routePrefix = ctx.namePrefix;
|
|
835
1031
|
}
|
|
836
1032
|
|
|
837
|
-
//
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
result = store.run(namespace, entry, use)?.flat(3);
|
|
1033
|
+
// Merge handler.use defaults with explicit use
|
|
1034
|
+
const handlerUseFn = resolveHandlerUse(handler);
|
|
1035
|
+
const mergedUse = mergeHandlerUse(handlerUseFn, use, "layout");
|
|
841
1036
|
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
1037
|
+
// Run merged use callback if present
|
|
1038
|
+
let result: AllUseItems[] | undefined;
|
|
1039
|
+
if (mergedUse) {
|
|
1040
|
+
result = runAndValidateUseItems(
|
|
1041
|
+
store,
|
|
1042
|
+
namespace,
|
|
1043
|
+
entry,
|
|
1044
|
+
mergedUse,
|
|
1045
|
+
"layout",
|
|
1046
|
+
"use",
|
|
845
1047
|
);
|
|
846
1048
|
}
|
|
847
1049
|
|
|
@@ -883,9 +1085,7 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
|
883
1085
|
`Orphan layouts can only be defined inside route or layout > check [${namespace}]`,
|
|
884
1086
|
);
|
|
885
1087
|
|
|
886
|
-
|
|
887
|
-
entry.parent = null;
|
|
888
|
-
parent.layout.push(entry);
|
|
1088
|
+
attachOrphanSibling(parent, entry);
|
|
889
1089
|
}
|
|
890
1090
|
}
|
|
891
1091
|
|
|
@@ -898,33 +1098,15 @@ const layout: RouteHelpers<any, any>["layout"] = (handler, use) => {
|
|
|
898
1098
|
} as LayoutItem;
|
|
899
1099
|
};
|
|
900
1100
|
|
|
901
|
-
const isValidUseItem = (item: any): item is AllUseItems | undefined | null =>
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
(item
|
|
906
|
-
typeof item === "object" &&
|
|
907
|
-
"type" in item &&
|
|
908
|
-
[
|
|
909
|
-
"layout",
|
|
910
|
-
"route",
|
|
911
|
-
"middleware",
|
|
912
|
-
"revalidate",
|
|
913
|
-
"parallel",
|
|
914
|
-
"intercept",
|
|
915
|
-
"loader",
|
|
916
|
-
"loading",
|
|
917
|
-
"errorBoundary",
|
|
918
|
-
"notFoundBoundary",
|
|
919
|
-
"when",
|
|
920
|
-
"cache",
|
|
921
|
-
"transition",
|
|
922
|
-
"include", // For urls() include() helper
|
|
923
|
-
].includes(item.type))
|
|
924
|
-
);
|
|
925
|
-
};
|
|
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));
|
|
926
1106
|
|
|
927
|
-
//
|
|
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.
|
|
928
1110
|
export {
|
|
929
1111
|
layout,
|
|
930
1112
|
cache,
|
|
@@ -935,25 +1117,11 @@ export {
|
|
|
935
1117
|
when,
|
|
936
1118
|
errorBoundary,
|
|
937
1119
|
notFoundBoundary,
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
const isOrphanLayout = (item: AllUseItems): boolean => {
|
|
944
|
-
return (
|
|
945
|
-
item.type === "layout" &&
|
|
946
|
-
!item.uses?.some((child) => hasRoutesInItem(child))
|
|
947
|
-
);
|
|
948
|
-
};
|
|
949
|
-
|
|
950
|
-
// Internal exports used by helper-factories.ts
|
|
951
|
-
export {
|
|
952
|
-
routeFn,
|
|
953
|
-
loaderFn,
|
|
954
|
-
loadingFn,
|
|
955
|
-
transitionFn,
|
|
956
|
-
hasRoutesInItem,
|
|
1120
|
+
route,
|
|
1121
|
+
loader,
|
|
1122
|
+
loading,
|
|
1123
|
+
transition,
|
|
957
1124
|
isValidUseItem,
|
|
958
|
-
|
|
1125
|
+
emptySegmentBase,
|
|
1126
|
+
runAndValidateUseItems,
|
|
959
1127
|
};
|