@rangojs/router 0.0.0-experimental.136 → 0.0.0-experimental.138
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/dist/bin/rango.js +237 -42
- package/dist/vite/index.js +239 -43
- package/package.json +19 -18
- package/skills/breadcrumbs/SKILL.md +29 -12
- package/skills/composability/SKILL.md +50 -0
- package/skills/migrate-nextjs/SKILL.md +12 -0
- package/skills/rango/SKILL.md +5 -1
- package/skills/response-routes/SKILL.md +14 -0
- package/skills/router-setup/SKILL.md +12 -0
- package/skills/testing/handles.md +4 -2
- package/skills/testing/reverse-and-types.md +8 -7
- package/src/browser/event-controller.ts +21 -0
- package/src/browser/react/NavigationProvider.tsx +68 -157
- package/src/browser/server-action-bridge.ts +22 -10
- package/src/build/generate-manifest.ts +155 -131
- package/src/build/index.ts +3 -1
- package/src/build/route-types/include-resolution.ts +347 -47
- package/src/build/runtime-discovery.ts +4 -1
- package/src/cache/cf/cf-cache-store.ts +22 -0
- package/src/client.rsc.tsx +0 -3
- package/src/client.tsx +0 -3
- package/src/defer.ts +11 -22
- package/src/handle.ts +37 -15
- package/src/handles/MetaTags.tsx +16 -88
- package/src/handles/breadcrumbs.ts +12 -14
- package/src/handles/deferred-resolution.ts +127 -0
- package/src/handles/is-thenable.ts +7 -8
- package/src/handles/meta.ts +7 -44
- package/src/index.rsc.ts +0 -1
- package/src/index.ts +0 -1
- package/src/prerender.ts +17 -4
- package/src/router/find-match.ts +71 -7
- package/src/router/lazy-includes.ts +64 -10
- package/src/router/manifest.ts +43 -6
- package/src/router/match-api.ts +2 -2
- package/src/router/navigation-snapshot.ts +7 -5
- package/src/router/prerender-match.ts +11 -5
- package/src/router/preview-match.ts +3 -1
- package/src/router/request-classification.ts +3 -1
- package/src/router/route-snapshot.ts +4 -2
- package/src/router/router-context.ts +3 -1
- package/src/router/router-interfaces.ts +9 -1
- package/src/router.ts +9 -2
- package/src/rsc/handler.ts +3 -1
- package/src/rsc/manifest-init.ts +1 -1
- package/src/rsc/progressive-enhancement.ts +5 -2
- package/src/rsc/rsc-rendering.ts +5 -1
- package/src/ssr/index.tsx +1 -0
- package/src/testing/collect-handle.ts +14 -8
- package/src/testing/dispatch.ts +3 -3
- package/src/testing/generated-routes.ts +27 -11
- package/src/testing/render-route.tsx +6 -1
- package/src/urls/include-helper.ts +10 -8
- package/src/urls/include-provider.ts +71 -0
- package/src/urls/path-helper-types.ts +25 -1
- package/src/vite/discovery/discover-routers.ts +1 -1
- package/src/vite/router-discovery.ts +8 -0
- package/dist/__internal.d.ts +0 -83
- package/dist/__internal.d.ts.map +0 -1
- package/dist/__internal.js +0 -19
- package/dist/__internal.js.map +0 -1
- package/dist/__mocks__/version.d.ts +0 -7
- package/dist/__mocks__/version.d.ts.map +0 -1
- package/dist/__mocks__/version.js +0 -7
- package/dist/__mocks__/version.js.map +0 -1
- package/dist/__tests__/client-href.test.d.ts +0 -2
- package/dist/__tests__/client-href.test.d.ts.map +0 -1
- package/dist/__tests__/client-href.test.js +0 -74
- package/dist/__tests__/client-href.test.js.map +0 -1
- package/dist/__tests__/component-utils.test.d.ts +0 -2
- package/dist/__tests__/component-utils.test.d.ts.map +0 -1
- package/dist/__tests__/component-utils.test.js +0 -51
- package/dist/__tests__/component-utils.test.js.map +0 -1
- package/dist/__tests__/event-controller.test.d.ts +0 -2
- package/dist/__tests__/event-controller.test.d.ts.map +0 -1
- package/dist/__tests__/event-controller.test.js +0 -538
- package/dist/__tests__/event-controller.test.js.map +0 -1
- package/dist/__tests__/helpers/route-tree.d.ts +0 -118
- package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
- package/dist/__tests__/helpers/route-tree.js +0 -374
- package/dist/__tests__/helpers/route-tree.js.map +0 -1
- package/dist/__tests__/match-result.test.d.ts +0 -2
- package/dist/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/__tests__/match-result.test.js +0 -154
- package/dist/__tests__/match-result.test.js.map +0 -1
- package/dist/__tests__/navigation-store.test.d.ts +0 -2
- package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
- package/dist/__tests__/navigation-store.test.js +0 -440
- package/dist/__tests__/navigation-store.test.js.map +0 -1
- package/dist/__tests__/partial-update.test.d.ts +0 -2
- package/dist/__tests__/partial-update.test.d.ts.map +0 -1
- package/dist/__tests__/partial-update.test.js +0 -1009
- package/dist/__tests__/partial-update.test.js.map +0 -1
- package/dist/__tests__/reverse-types.test.d.ts +0 -8
- package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
- package/dist/__tests__/reverse-types.test.js +0 -656
- package/dist/__tests__/reverse-types.test.js.map +0 -1
- package/dist/__tests__/route-definition.test.d.ts +0 -2
- package/dist/__tests__/route-definition.test.d.ts.map +0 -1
- package/dist/__tests__/route-definition.test.js +0 -55
- package/dist/__tests__/route-definition.test.js.map +0 -1
- package/dist/__tests__/router-helpers.test.d.ts +0 -2
- package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
- package/dist/__tests__/router-helpers.test.js +0 -377
- package/dist/__tests__/router-helpers.test.js.map +0 -1
- package/dist/__tests__/router-integration-2.test.d.ts +0 -2
- package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration-2.test.js +0 -426
- package/dist/__tests__/router-integration-2.test.js.map +0 -1
- package/dist/__tests__/router-integration.test.d.ts +0 -2
- package/dist/__tests__/router-integration.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration.test.js +0 -1051
- package/dist/__tests__/router-integration.test.js.map +0 -1
- package/dist/__tests__/search-params.test.d.ts +0 -5
- package/dist/__tests__/search-params.test.d.ts.map +0 -1
- package/dist/__tests__/search-params.test.js +0 -306
- package/dist/__tests__/search-params.test.js.map +0 -1
- package/dist/__tests__/segment-system.test.d.ts +0 -2
- package/dist/__tests__/segment-system.test.d.ts.map +0 -1
- package/dist/__tests__/segment-system.test.js +0 -627
- package/dist/__tests__/segment-system.test.js.map +0 -1
- package/dist/__tests__/static-handler-types.test.d.ts +0 -8
- package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
- package/dist/__tests__/static-handler-types.test.js +0 -63
- package/dist/__tests__/static-handler-types.test.js.map +0 -1
- package/dist/__tests__/urls.test.d.ts +0 -2
- package/dist/__tests__/urls.test.d.ts.map +0 -1
- package/dist/__tests__/urls.test.js +0 -421
- package/dist/__tests__/urls.test.js.map +0 -1
- package/dist/__tests__/use-mount.test.d.ts +0 -2
- package/dist/__tests__/use-mount.test.d.ts.map +0 -1
- package/dist/__tests__/use-mount.test.js +0 -35
- package/dist/__tests__/use-mount.test.js.map +0 -1
- package/dist/bin/rango.d.ts +0 -2
- package/dist/bin/rango.d.ts.map +0 -1
- package/dist/bin/rango.js.map +0 -1
- package/dist/browser/event-controller.d.ts +0 -191
- package/dist/browser/event-controller.d.ts.map +0 -1
- package/dist/browser/event-controller.js +0 -559
- package/dist/browser/event-controller.js.map +0 -1
- package/dist/browser/index.d.ts +0 -2
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -14
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/link-interceptor.d.ts +0 -38
- package/dist/browser/link-interceptor.d.ts.map +0 -1
- package/dist/browser/link-interceptor.js +0 -99
- package/dist/browser/link-interceptor.js.map +0 -1
- package/dist/browser/logging.d.ts +0 -10
- package/dist/browser/logging.d.ts.map +0 -1
- package/dist/browser/logging.js +0 -29
- package/dist/browser/logging.js.map +0 -1
- package/dist/browser/lru-cache.d.ts +0 -17
- package/dist/browser/lru-cache.d.ts.map +0 -1
- package/dist/browser/lru-cache.js +0 -50
- package/dist/browser/lru-cache.js.map +0 -1
- package/dist/browser/merge-segment-loaders.d.ts +0 -39
- package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
- package/dist/browser/merge-segment-loaders.js +0 -102
- package/dist/browser/merge-segment-loaders.js.map +0 -1
- package/dist/browser/navigation-bridge.d.ts +0 -102
- package/dist/browser/navigation-bridge.d.ts.map +0 -1
- package/dist/browser/navigation-bridge.js +0 -708
- package/dist/browser/navigation-bridge.js.map +0 -1
- package/dist/browser/navigation-client.d.ts +0 -25
- package/dist/browser/navigation-client.d.ts.map +0 -1
- package/dist/browser/navigation-client.js +0 -157
- package/dist/browser/navigation-client.js.map +0 -1
- package/dist/browser/navigation-store.d.ts +0 -101
- package/dist/browser/navigation-store.d.ts.map +0 -1
- package/dist/browser/navigation-store.js +0 -625
- package/dist/browser/navigation-store.js.map +0 -1
- package/dist/browser/partial-update.d.ts +0 -75
- package/dist/browser/partial-update.d.ts.map +0 -1
- package/dist/browser/partial-update.js +0 -426
- package/dist/browser/partial-update.js.map +0 -1
- package/dist/browser/react/Link.d.ts +0 -86
- package/dist/browser/react/Link.d.ts.map +0 -1
- package/dist/browser/react/Link.js +0 -128
- package/dist/browser/react/Link.js.map +0 -1
- package/dist/browser/react/NavigationProvider.d.ts +0 -63
- package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
- package/dist/browser/react/NavigationProvider.js +0 -216
- package/dist/browser/react/NavigationProvider.js.map +0 -1
- package/dist/browser/react/ScrollRestoration.d.ts +0 -75
- package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
- package/dist/browser/react/ScrollRestoration.js +0 -57
- package/dist/browser/react/ScrollRestoration.js.map +0 -1
- package/dist/browser/react/context.d.ts +0 -46
- package/dist/browser/react/context.d.ts.map +0 -1
- package/dist/browser/react/context.js +0 -10
- package/dist/browser/react/context.js.map +0 -1
- package/dist/browser/react/index.d.ts +0 -11
- package/dist/browser/react/index.d.ts.map +0 -1
- package/dist/browser/react/index.js +0 -22
- package/dist/browser/react/index.js.map +0 -1
- package/dist/browser/react/location-state-shared.d.ts +0 -63
- package/dist/browser/react/location-state-shared.d.ts.map +0 -1
- package/dist/browser/react/location-state-shared.js +0 -81
- package/dist/browser/react/location-state-shared.js.map +0 -1
- package/dist/browser/react/location-state.d.ts +0 -23
- package/dist/browser/react/location-state.d.ts.map +0 -1
- package/dist/browser/react/location-state.js +0 -29
- package/dist/browser/react/location-state.js.map +0 -1
- package/dist/browser/react/mount-context.d.ts +0 -24
- package/dist/browser/react/mount-context.d.ts.map +0 -1
- package/dist/browser/react/mount-context.js +0 -24
- package/dist/browser/react/mount-context.js.map +0 -1
- package/dist/browser/react/use-action.d.ts +0 -64
- package/dist/browser/react/use-action.d.ts.map +0 -1
- package/dist/browser/react/use-action.js +0 -134
- package/dist/browser/react/use-action.js.map +0 -1
- package/dist/browser/react/use-client-cache.d.ts +0 -41
- package/dist/browser/react/use-client-cache.d.ts.map +0 -1
- package/dist/browser/react/use-client-cache.js +0 -39
- package/dist/browser/react/use-client-cache.js.map +0 -1
- package/dist/browser/react/use-handle.d.ts +0 -31
- package/dist/browser/react/use-handle.d.ts.map +0 -1
- package/dist/browser/react/use-handle.js +0 -144
- package/dist/browser/react/use-handle.js.map +0 -1
- package/dist/browser/react/use-href.d.ts +0 -33
- package/dist/browser/react/use-href.d.ts.map +0 -1
- package/dist/browser/react/use-href.js +0 -39
- package/dist/browser/react/use-href.js.map +0 -1
- package/dist/browser/react/use-link-status.d.ts +0 -37
- package/dist/browser/react/use-link-status.d.ts.map +0 -1
- package/dist/browser/react/use-link-status.js +0 -99
- package/dist/browser/react/use-link-status.js.map +0 -1
- package/dist/browser/react/use-mount.d.ts +0 -25
- package/dist/browser/react/use-mount.d.ts.map +0 -1
- package/dist/browser/react/use-mount.js +0 -30
- package/dist/browser/react/use-mount.js.map +0 -1
- package/dist/browser/react/use-navigation.d.ts +0 -27
- package/dist/browser/react/use-navigation.d.ts.map +0 -1
- package/dist/browser/react/use-navigation.js +0 -87
- package/dist/browser/react/use-navigation.js.map +0 -1
- package/dist/browser/react/use-segments.d.ts +0 -38
- package/dist/browser/react/use-segments.d.ts.map +0 -1
- package/dist/browser/react/use-segments.js +0 -130
- package/dist/browser/react/use-segments.js.map +0 -1
- package/dist/browser/request-controller.d.ts +0 -26
- package/dist/browser/request-controller.d.ts.map +0 -1
- package/dist/browser/request-controller.js +0 -147
- package/dist/browser/request-controller.js.map +0 -1
- package/dist/browser/rsc-router.d.ts +0 -129
- package/dist/browser/rsc-router.d.ts.map +0 -1
- package/dist/browser/rsc-router.js +0 -195
- package/dist/browser/rsc-router.js.map +0 -1
- package/dist/browser/scroll-restoration.d.ts +0 -93
- package/dist/browser/scroll-restoration.d.ts.map +0 -1
- package/dist/browser/scroll-restoration.js +0 -321
- package/dist/browser/scroll-restoration.js.map +0 -1
- package/dist/browser/segment-structure-assert.d.ts +0 -17
- package/dist/browser/segment-structure-assert.d.ts.map +0 -1
- package/dist/browser/segment-structure-assert.js +0 -59
- package/dist/browser/segment-structure-assert.js.map +0 -1
- package/dist/browser/server-action-bridge.d.ts +0 -26
- package/dist/browser/server-action-bridge.d.ts.map +0 -1
- package/dist/browser/server-action-bridge.js +0 -668
- package/dist/browser/server-action-bridge.js.map +0 -1
- package/dist/browser/shallow.d.ts +0 -12
- package/dist/browser/shallow.d.ts.map +0 -1
- package/dist/browser/shallow.js +0 -34
- package/dist/browser/shallow.js.map +0 -1
- package/dist/browser/types.d.ts +0 -369
- package/dist/browser/types.d.ts.map +0 -1
- package/dist/browser/types.js +0 -2
- package/dist/browser/types.js.map +0 -1
- package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
- package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-cli.test.js +0 -237
- package/dist/build/__tests__/generate-cli.test.js.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.js +0 -119
- package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.js +0 -620
- package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.js +0 -308
- package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
- package/dist/build/generate-manifest.d.ts +0 -81
- package/dist/build/generate-manifest.d.ts.map +0 -1
- package/dist/build/generate-manifest.js +0 -276
- package/dist/build/generate-manifest.js.map +0 -1
- package/dist/build/generate-route-types.d.ts +0 -115
- package/dist/build/generate-route-types.d.ts.map +0 -1
- package/dist/build/generate-route-types.js +0 -740
- package/dist/build/generate-route-types.js.map +0 -1
- package/dist/build/index.d.ts +0 -21
- package/dist/build/index.d.ts.map +0 -1
- package/dist/build/index.js +0 -21
- package/dist/build/index.js.map +0 -1
- package/dist/build/route-trie.d.ts +0 -71
- package/dist/build/route-trie.d.ts.map +0 -1
- package/dist/build/route-trie.js +0 -175
- package/dist/build/route-trie.js.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.js +0 -208
- package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
- package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
- package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
- package/dist/cache/__tests__/document-cache.test.js +0 -345
- package/dist/cache/__tests__/document-cache.test.js.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
- package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
- package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-store.test.js +0 -367
- package/dist/cache/__tests__/memory-store.test.js.map +0 -1
- package/dist/cache/cache-scope.d.ts +0 -102
- package/dist/cache/cache-scope.d.ts.map +0 -1
- package/dist/cache/cache-scope.js +0 -440
- package/dist/cache/cache-scope.js.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
- package/dist/cache/cf/cf-cache-store.d.ts +0 -165
- package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
- package/dist/cache/cf/cf-cache-store.js +0 -242
- package/dist/cache/cf/cf-cache-store.js.map +0 -1
- package/dist/cache/cf/index.d.ts +0 -14
- package/dist/cache/cf/index.d.ts.map +0 -1
- package/dist/cache/cf/index.js +0 -17
- package/dist/cache/cf/index.js.map +0 -1
- package/dist/cache/document-cache.d.ts +0 -64
- package/dist/cache/document-cache.d.ts.map +0 -1
- package/dist/cache/document-cache.js +0 -228
- package/dist/cache/document-cache.js.map +0 -1
- package/dist/cache/index.d.ts +0 -19
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/index.js +0 -21
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/memory-segment-store.d.ts +0 -110
- package/dist/cache/memory-segment-store.d.ts.map +0 -1
- package/dist/cache/memory-segment-store.js +0 -117
- package/dist/cache/memory-segment-store.js.map +0 -1
- package/dist/cache/memory-store.d.ts +0 -41
- package/dist/cache/memory-store.d.ts.map +0 -1
- package/dist/cache/memory-store.js +0 -191
- package/dist/cache/memory-store.js.map +0 -1
- package/dist/cache/types.d.ts +0 -317
- package/dist/cache/types.d.ts.map +0 -1
- package/dist/cache/types.js +0 -12
- package/dist/cache/types.js.map +0 -1
- package/dist/client.d.ts +0 -248
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -367
- package/dist/client.js.map +0 -1
- package/dist/client.rsc.d.ts +0 -26
- package/dist/client.rsc.d.ts.map +0 -1
- package/dist/client.rsc.js +0 -46
- package/dist/client.rsc.js.map +0 -1
- package/dist/component-utils.d.ts +0 -36
- package/dist/component-utils.d.ts.map +0 -1
- package/dist/component-utils.js +0 -61
- package/dist/component-utils.js.map +0 -1
- package/dist/components/DefaultDocument.d.ts +0 -13
- package/dist/components/DefaultDocument.d.ts.map +0 -1
- package/dist/components/DefaultDocument.js +0 -15
- package/dist/components/DefaultDocument.js.map +0 -1
- package/dist/debug.d.ts +0 -58
- package/dist/debug.d.ts.map +0 -1
- package/dist/debug.js +0 -157
- package/dist/debug.js.map +0 -1
- package/dist/default-error-boundary.d.ts +0 -11
- package/dist/default-error-boundary.d.ts.map +0 -1
- package/dist/default-error-boundary.js +0 -45
- package/dist/default-error-boundary.js.map +0 -1
- package/dist/deps/browser.d.ts +0 -2
- package/dist/deps/browser.d.ts.map +0 -1
- package/dist/deps/browser.js +0 -3
- package/dist/deps/browser.js.map +0 -1
- package/dist/deps/html-stream-client.d.ts +0 -2
- package/dist/deps/html-stream-client.d.ts.map +0 -1
- package/dist/deps/html-stream-client.js +0 -3
- package/dist/deps/html-stream-client.js.map +0 -1
- package/dist/deps/html-stream-server.d.ts +0 -2
- package/dist/deps/html-stream-server.d.ts.map +0 -1
- package/dist/deps/html-stream-server.js +0 -3
- package/dist/deps/html-stream-server.js.map +0 -1
- package/dist/deps/rsc.d.ts +0 -2
- package/dist/deps/rsc.d.ts.map +0 -1
- package/dist/deps/rsc.js +0 -4
- package/dist/deps/rsc.js.map +0 -1
- package/dist/deps/ssr.d.ts +0 -2
- package/dist/deps/ssr.d.ts.map +0 -1
- package/dist/deps/ssr.js +0 -3
- package/dist/deps/ssr.js.map +0 -1
- package/dist/errors.d.ts +0 -174
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -241
- package/dist/errors.js.map +0 -1
- package/dist/handle.d.ts +0 -78
- package/dist/handle.d.ts.map +0 -1
- package/dist/handle.js +0 -82
- package/dist/handle.js.map +0 -1
- package/dist/handles/MetaTags.d.ts +0 -14
- package/dist/handles/MetaTags.d.ts.map +0 -1
- package/dist/handles/MetaTags.js +0 -136
- package/dist/handles/MetaTags.js.map +0 -1
- package/dist/handles/index.d.ts +0 -6
- package/dist/handles/index.d.ts.map +0 -1
- package/dist/handles/index.js +0 -6
- package/dist/handles/index.js.map +0 -1
- package/dist/handles/meta.d.ts +0 -39
- package/dist/handles/meta.d.ts.map +0 -1
- package/dist/handles/meta.js +0 -202
- package/dist/handles/meta.js.map +0 -1
- package/dist/host/__tests__/errors.test.d.ts +0 -2
- package/dist/host/__tests__/errors.test.d.ts.map +0 -1
- package/dist/host/__tests__/errors.test.js +0 -76
- package/dist/host/__tests__/errors.test.js.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.js +0 -251
- package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
- package/dist/host/__tests__/router.test.d.ts +0 -2
- package/dist/host/__tests__/router.test.d.ts.map +0 -1
- package/dist/host/__tests__/router.test.js +0 -241
- package/dist/host/__tests__/router.test.js.map +0 -1
- package/dist/host/__tests__/testing.test.d.ts +0 -2
- package/dist/host/__tests__/testing.test.d.ts.map +0 -1
- package/dist/host/__tests__/testing.test.js +0 -64
- package/dist/host/__tests__/testing.test.js.map +0 -1
- package/dist/host/__tests__/utils.test.d.ts +0 -2
- package/dist/host/__tests__/utils.test.d.ts.map +0 -1
- package/dist/host/__tests__/utils.test.js +0 -29
- package/dist/host/__tests__/utils.test.js.map +0 -1
- package/dist/host/cookie-handler.d.ts +0 -34
- package/dist/host/cookie-handler.d.ts.map +0 -1
- package/dist/host/cookie-handler.js +0 -124
- package/dist/host/cookie-handler.js.map +0 -1
- package/dist/host/errors.d.ts +0 -56
- package/dist/host/errors.d.ts.map +0 -1
- package/dist/host/errors.js +0 -79
- package/dist/host/errors.js.map +0 -1
- package/dist/host/index.d.ts +0 -29
- package/dist/host/index.d.ts.map +0 -1
- package/dist/host/index.js +0 -32
- package/dist/host/index.js.map +0 -1
- package/dist/host/pattern-matcher.d.ts +0 -36
- package/dist/host/pattern-matcher.d.ts.map +0 -1
- package/dist/host/pattern-matcher.js +0 -172
- package/dist/host/pattern-matcher.js.map +0 -1
- package/dist/host/router.d.ts +0 -26
- package/dist/host/router.d.ts.map +0 -1
- package/dist/host/router.js +0 -218
- package/dist/host/router.js.map +0 -1
- package/dist/host/testing.d.ts +0 -36
- package/dist/host/testing.d.ts.map +0 -1
- package/dist/host/testing.js +0 -55
- package/dist/host/testing.js.map +0 -1
- package/dist/host/types.d.ts +0 -115
- package/dist/host/types.d.ts.map +0 -1
- package/dist/host/types.js +0 -7
- package/dist/host/types.js.map +0 -1
- package/dist/host/utils.d.ts +0 -21
- package/dist/host/utils.d.ts.map +0 -1
- package/dist/host/utils.js +0 -23
- package/dist/host/utils.js.map +0 -1
- package/dist/href-client.d.ts +0 -131
- package/dist/href-client.d.ts.map +0 -1
- package/dist/href-client.js +0 -64
- package/dist/href-client.js.map +0 -1
- package/dist/href-context.d.ts +0 -29
- package/dist/href-context.d.ts.map +0 -1
- package/dist/href-context.js +0 -21
- package/dist/href-context.js.map +0 -1
- package/dist/index.d.ts +0 -73
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -91
- package/dist/index.js.map +0 -1
- package/dist/index.rsc.d.ts +0 -32
- package/dist/index.rsc.d.ts.map +0 -1
- package/dist/index.rsc.js +0 -40
- package/dist/index.rsc.js.map +0 -1
- package/dist/internal-debug.d.ts +0 -2
- package/dist/internal-debug.d.ts.map +0 -1
- package/dist/internal-debug.js +0 -5
- package/dist/internal-debug.js.map +0 -1
- package/dist/loader.d.ts +0 -14
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -20
- package/dist/loader.js.map +0 -1
- package/dist/loader.rsc.d.ts +0 -19
- package/dist/loader.rsc.d.ts.map +0 -1
- package/dist/loader.rsc.js +0 -99
- package/dist/loader.rsc.js.map +0 -1
- package/dist/network-error-thrower.d.ts +0 -17
- package/dist/network-error-thrower.d.ts.map +0 -1
- package/dist/network-error-thrower.js +0 -14
- package/dist/network-error-thrower.js.map +0 -1
- package/dist/outlet-context.d.ts +0 -13
- package/dist/outlet-context.d.ts.map +0 -1
- package/dist/outlet-context.js +0 -3
- package/dist/outlet-context.js.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.js +0 -148
- package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
- package/dist/prerender/param-hash.d.ts +0 -16
- package/dist/prerender/param-hash.d.ts.map +0 -1
- package/dist/prerender/param-hash.js +0 -36
- package/dist/prerender/param-hash.js.map +0 -1
- package/dist/prerender/store.d.ts +0 -38
- package/dist/prerender/store.d.ts.map +0 -1
- package/dist/prerender/store.js +0 -61
- package/dist/prerender/store.js.map +0 -1
- package/dist/prerender.d.ts +0 -66
- package/dist/prerender.d.ts.map +0 -1
- package/dist/prerender.js +0 -57
- package/dist/prerender.js.map +0 -1
- package/dist/reverse.d.ts +0 -196
- package/dist/reverse.d.ts.map +0 -1
- package/dist/reverse.js +0 -78
- package/dist/reverse.js.map +0 -1
- package/dist/root-error-boundary.d.ts +0 -33
- package/dist/root-error-boundary.d.ts.map +0 -1
- package/dist/root-error-boundary.js +0 -165
- package/dist/root-error-boundary.js.map +0 -1
- package/dist/route-content-wrapper.d.ts +0 -46
- package/dist/route-content-wrapper.d.ts.map +0 -1
- package/dist/route-content-wrapper.js +0 -77
- package/dist/route-content-wrapper.js.map +0 -1
- package/dist/route-definition.d.ts +0 -421
- package/dist/route-definition.d.ts.map +0 -1
- package/dist/route-definition.js +0 -868
- package/dist/route-definition.js.map +0 -1
- package/dist/route-map-builder.d.ts +0 -155
- package/dist/route-map-builder.d.ts.map +0 -1
- package/dist/route-map-builder.js +0 -237
- package/dist/route-map-builder.js.map +0 -1
- package/dist/route-types.d.ts +0 -165
- package/dist/route-types.d.ts.map +0 -1
- package/dist/route-types.js +0 -7
- package/dist/route-types.js.map +0 -1
- package/dist/router/__tests__/handler-context.test.d.ts +0 -2
- package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/handler-context.test.js +0 -65
- package/dist/router/__tests__/handler-context.test.js.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
- package/dist/router/__tests__/match-context.test.d.ts +0 -2
- package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-context.test.js +0 -92
- package/dist/router/__tests__/match-context.test.js.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.js +0 -417
- package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
- package/dist/router/__tests__/match-result.test.d.ts +0 -2
- package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-result.test.js +0 -457
- package/dist/router/__tests__/match-result.test.js.map +0 -1
- package/dist/router/__tests__/on-error.test.d.ts +0 -2
- package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
- package/dist/router/__tests__/on-error.test.js +0 -678
- package/dist/router/__tests__/on-error.test.js.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.js +0 -629
- package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
- package/dist/router/error-handling.d.ts +0 -77
- package/dist/router/error-handling.d.ts.map +0 -1
- package/dist/router/error-handling.js +0 -202
- package/dist/router/error-handling.js.map +0 -1
- package/dist/router/handler-context.d.ts +0 -20
- package/dist/router/handler-context.d.ts.map +0 -1
- package/dist/router/handler-context.js +0 -198
- package/dist/router/handler-context.js.map +0 -1
- package/dist/router/intercept-resolution.d.ts +0 -66
- package/dist/router/intercept-resolution.d.ts.map +0 -1
- package/dist/router/intercept-resolution.js +0 -246
- package/dist/router/intercept-resolution.js.map +0 -1
- package/dist/router/loader-resolution.d.ts +0 -64
- package/dist/router/loader-resolution.d.ts.map +0 -1
- package/dist/router/loader-resolution.js +0 -284
- package/dist/router/loader-resolution.js.map +0 -1
- package/dist/router/logging.d.ts +0 -15
- package/dist/router/logging.d.ts.map +0 -1
- package/dist/router/logging.js +0 -99
- package/dist/router/logging.js.map +0 -1
- package/dist/router/manifest.d.ts +0 -22
- package/dist/router/manifest.d.ts.map +0 -1
- package/dist/router/manifest.js +0 -181
- package/dist/router/manifest.js.map +0 -1
- package/dist/router/match-api.d.ts +0 -35
- package/dist/router/match-api.d.ts.map +0 -1
- package/dist/router/match-api.js +0 -406
- package/dist/router/match-api.js.map +0 -1
- package/dist/router/match-context.d.ts +0 -206
- package/dist/router/match-context.d.ts.map +0 -1
- package/dist/router/match-context.js +0 -17
- package/dist/router/match-context.js.map +0 -1
- package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
- package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
- package/dist/router/match-middleware/background-revalidation.js +0 -75
- package/dist/router/match-middleware/background-revalidation.js.map +0 -1
- package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
- package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-lookup.js +0 -257
- package/dist/router/match-middleware/cache-lookup.js.map +0 -1
- package/dist/router/match-middleware/cache-store.d.ts +0 -113
- package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-store.js +0 -108
- package/dist/router/match-middleware/cache-store.js.map +0 -1
- package/dist/router/match-middleware/index.d.ts +0 -81
- package/dist/router/match-middleware/index.d.ts.map +0 -1
- package/dist/router/match-middleware/index.js +0 -80
- package/dist/router/match-middleware/index.js.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.js +0 -134
- package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
- package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
- package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/segment-resolution.js +0 -53
- package/dist/router/match-middleware/segment-resolution.js.map +0 -1
- package/dist/router/match-pipelines.d.ts +0 -147
- package/dist/router/match-pipelines.d.ts.map +0 -1
- package/dist/router/match-pipelines.js +0 -82
- package/dist/router/match-pipelines.js.map +0 -1
- package/dist/router/match-result.d.ts +0 -126
- package/dist/router/match-result.d.ts.map +0 -1
- package/dist/router/match-result.js +0 -93
- package/dist/router/match-result.js.map +0 -1
- package/dist/router/metrics.d.ts +0 -20
- package/dist/router/metrics.d.ts.map +0 -1
- package/dist/router/metrics.js +0 -47
- package/dist/router/metrics.js.map +0 -1
- package/dist/router/middleware.d.ts +0 -249
- package/dist/router/middleware.d.ts.map +0 -1
- package/dist/router/middleware.js +0 -434
- package/dist/router/middleware.js.map +0 -1
- package/dist/router/middleware.test.d.ts +0 -2
- package/dist/router/middleware.test.d.ts.map +0 -1
- package/dist/router/middleware.test.js +0 -816
- package/dist/router/middleware.test.js.map +0 -1
- package/dist/router/pattern-matching.d.ts +0 -149
- package/dist/router/pattern-matching.d.ts.map +0 -1
- package/dist/router/pattern-matching.js +0 -349
- package/dist/router/pattern-matching.js.map +0 -1
- package/dist/router/revalidation.d.ts +0 -44
- package/dist/router/revalidation.d.ts.map +0 -1
- package/dist/router/revalidation.js +0 -147
- package/dist/router/revalidation.js.map +0 -1
- package/dist/router/router-context.d.ts +0 -135
- package/dist/router/router-context.d.ts.map +0 -1
- package/dist/router/router-context.js +0 -36
- package/dist/router/router-context.js.map +0 -1
- package/dist/router/segment-resolution.d.ts +0 -127
- package/dist/router/segment-resolution.d.ts.map +0 -1
- package/dist/router/segment-resolution.js +0 -919
- package/dist/router/segment-resolution.js.map +0 -1
- package/dist/router/trie-matching.d.ts +0 -40
- package/dist/router/trie-matching.d.ts.map +0 -1
- package/dist/router/trie-matching.js +0 -127
- package/dist/router/trie-matching.js.map +0 -1
- package/dist/router/types.d.ts +0 -136
- package/dist/router/types.d.ts.map +0 -1
- package/dist/router/types.js +0 -7
- package/dist/router/types.js.map +0 -1
- package/dist/router.d.ts +0 -753
- package/dist/router.d.ts.map +0 -1
- package/dist/router.gen.d.ts +0 -6
- package/dist/router.gen.d.ts.map +0 -1
- package/dist/router.gen.js +0 -6
- package/dist/router.gen.js.map +0 -1
- package/dist/router.js +0 -1304
- package/dist/router.js.map +0 -1
- package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
- package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
- package/dist/rsc/__tests__/helpers.test.js +0 -140
- package/dist/rsc/__tests__/helpers.test.js.map +0 -1
- package/dist/rsc/handler.d.ts +0 -45
- package/dist/rsc/handler.d.ts.map +0 -1
- package/dist/rsc/handler.js +0 -1172
- package/dist/rsc/handler.js.map +0 -1
- package/dist/rsc/helpers.d.ts +0 -16
- package/dist/rsc/helpers.d.ts.map +0 -1
- package/dist/rsc/helpers.js +0 -55
- package/dist/rsc/helpers.js.map +0 -1
- package/dist/rsc/index.d.ts +0 -22
- package/dist/rsc/index.d.ts.map +0 -1
- package/dist/rsc/index.js +0 -23
- package/dist/rsc/index.js.map +0 -1
- package/dist/rsc/nonce.d.ts +0 -9
- package/dist/rsc/nonce.d.ts.map +0 -1
- package/dist/rsc/nonce.js +0 -18
- package/dist/rsc/nonce.js.map +0 -1
- package/dist/rsc/types.d.ts +0 -206
- package/dist/rsc/types.d.ts.map +0 -1
- package/dist/rsc/types.js +0 -8
- package/dist/rsc/types.js.map +0 -1
- package/dist/search-params.d.ts +0 -103
- package/dist/search-params.d.ts.map +0 -1
- package/dist/search-params.js +0 -74
- package/dist/search-params.js.map +0 -1
- package/dist/segment-system.d.ts +0 -75
- package/dist/segment-system.d.ts.map +0 -1
- package/dist/segment-system.js +0 -336
- package/dist/segment-system.js.map +0 -1
- package/dist/server/context.d.ts +0 -245
- package/dist/server/context.d.ts.map +0 -1
- package/dist/server/context.js +0 -197
- package/dist/server/context.js.map +0 -1
- package/dist/server/fetchable-loader-store.d.ts +0 -18
- package/dist/server/fetchable-loader-store.d.ts.map +0 -1
- package/dist/server/fetchable-loader-store.js +0 -18
- package/dist/server/fetchable-loader-store.js.map +0 -1
- package/dist/server/handle-store.d.ts +0 -85
- package/dist/server/handle-store.d.ts.map +0 -1
- package/dist/server/handle-store.js +0 -142
- package/dist/server/handle-store.js.map +0 -1
- package/dist/server/loader-registry.d.ts +0 -55
- package/dist/server/loader-registry.d.ts.map +0 -1
- package/dist/server/loader-registry.js +0 -132
- package/dist/server/loader-registry.js.map +0 -1
- package/dist/server/request-context.d.ts +0 -226
- package/dist/server/request-context.d.ts.map +0 -1
- package/dist/server/request-context.js +0 -290
- package/dist/server/request-context.js.map +0 -1
- package/dist/server/root-layout.d.ts +0 -4
- package/dist/server/root-layout.d.ts.map +0 -1
- package/dist/server/root-layout.js +0 -5
- package/dist/server/root-layout.js.map +0 -1
- package/dist/server.d.ts +0 -15
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -20
- package/dist/server.js.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
- package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
- package/dist/ssr/index.d.ts +0 -98
- package/dist/ssr/index.d.ts.map +0 -1
- package/dist/ssr/index.js +0 -158
- package/dist/ssr/index.js.map +0 -1
- package/dist/static-handler.d.ts +0 -50
- package/dist/static-handler.d.ts.map +0 -1
- package/dist/static-handler.gen.d.ts +0 -5
- package/dist/static-handler.gen.d.ts.map +0 -1
- package/dist/static-handler.gen.js +0 -5
- package/dist/static-handler.gen.js.map +0 -1
- package/dist/static-handler.js +0 -29
- package/dist/static-handler.js.map +0 -1
- package/dist/theme/ThemeProvider.d.ts +0 -20
- package/dist/theme/ThemeProvider.d.ts.map +0 -1
- package/dist/theme/ThemeProvider.js +0 -240
- package/dist/theme/ThemeProvider.js.map +0 -1
- package/dist/theme/ThemeScript.d.ts +0 -48
- package/dist/theme/ThemeScript.d.ts.map +0 -1
- package/dist/theme/ThemeScript.js +0 -13
- package/dist/theme/ThemeScript.js.map +0 -1
- package/dist/theme/__tests__/theme.test.d.ts +0 -2
- package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
- package/dist/theme/__tests__/theme.test.js +0 -103
- package/dist/theme/__tests__/theme.test.js.map +0 -1
- package/dist/theme/constants.d.ts +0 -29
- package/dist/theme/constants.d.ts.map +0 -1
- package/dist/theme/constants.js +0 -48
- package/dist/theme/constants.js.map +0 -1
- package/dist/theme/index.d.ts +0 -31
- package/dist/theme/index.d.ts.map +0 -1
- package/dist/theme/index.js +0 -36
- package/dist/theme/index.js.map +0 -1
- package/dist/theme/theme-context.d.ts +0 -40
- package/dist/theme/theme-context.d.ts.map +0 -1
- package/dist/theme/theme-context.js +0 -60
- package/dist/theme/theme-context.js.map +0 -1
- package/dist/theme/theme-script.d.ts +0 -27
- package/dist/theme/theme-script.d.ts.map +0 -1
- package/dist/theme/theme-script.js +0 -147
- package/dist/theme/theme-script.js.map +0 -1
- package/dist/theme/types.d.ts +0 -163
- package/dist/theme/types.d.ts.map +0 -1
- package/dist/theme/types.js +0 -11
- package/dist/theme/types.js.map +0 -1
- package/dist/theme/use-theme.d.ts +0 -12
- package/dist/theme/use-theme.d.ts.map +0 -1
- package/dist/theme/use-theme.js +0 -40
- package/dist/theme/use-theme.js.map +0 -1
- package/dist/types.d.ts +0 -1479
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -10
- package/dist/types.js.map +0 -1
- package/dist/urls.d.ts +0 -441
- package/dist/urls.d.ts.map +0 -1
- package/dist/urls.gen.d.ts +0 -8
- package/dist/urls.gen.d.ts.map +0 -1
- package/dist/urls.gen.js +0 -8
- package/dist/urls.gen.js.map +0 -1
- package/dist/urls.js +0 -443
- package/dist/urls.js.map +0 -1
- package/dist/use-loader.d.ts +0 -127
- package/dist/use-loader.d.ts.map +0 -1
- package/dist/use-loader.js +0 -237
- package/dist/use-loader.js.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
- package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.js +0 -39
- package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
- package/dist/vite/ast-handler-extract.d.ts +0 -49
- package/dist/vite/ast-handler-extract.d.ts.map +0 -1
- package/dist/vite/ast-handler-extract.js +0 -249
- package/dist/vite/ast-handler-extract.js.map +0 -1
- package/dist/vite/expose-action-id.d.ts +0 -19
- package/dist/vite/expose-action-id.d.ts.map +0 -1
- package/dist/vite/expose-action-id.js +0 -250
- package/dist/vite/expose-action-id.js.map +0 -1
- package/dist/vite/expose-id-utils.d.ts +0 -69
- package/dist/vite/expose-id-utils.d.ts.map +0 -1
- package/dist/vite/expose-id-utils.js +0 -289
- package/dist/vite/expose-id-utils.js.map +0 -1
- package/dist/vite/expose-internal-ids.d.ts +0 -22
- package/dist/vite/expose-internal-ids.d.ts.map +0 -1
- package/dist/vite/expose-internal-ids.js +0 -886
- package/dist/vite/expose-internal-ids.js.map +0 -1
- package/dist/vite/index.d.ts +0 -149
- package/dist/vite/index.d.ts.map +0 -1
- package/dist/vite/index.js.bak +0 -5448
- package/dist/vite/index.js.map +0 -1
- package/dist/vite/index.named-routes.gen.ts +0 -103
- package/dist/vite/package-resolution.d.ts +0 -43
- package/dist/vite/package-resolution.d.ts.map +0 -1
- package/dist/vite/package-resolution.js +0 -112
- package/dist/vite/package-resolution.js.map +0 -1
- package/dist/vite/virtual-entries.d.ts +0 -25
- package/dist/vite/virtual-entries.d.ts.map +0 -1
- package/dist/vite/virtual-entries.js +0 -110
- package/dist/vite/virtual-entries.js.map +0 -1
- package/src/browser/react/deferred-handle-resolution.ts +0 -75
package/src/handles/MetaTags.tsx
CHANGED
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* Component to render collected meta descriptors in the document head.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* (
|
|
6
|
+
* Deferred (Promise) meta descriptors are resolved before MetaTags renders
|
|
7
|
+
* (server-side on the full render, client-side before apply on navigation), so
|
|
8
|
+
* it only ever receives resolved descriptors and never suspends.
|
|
8
9
|
*
|
|
9
10
|
* When theme is enabled in the router config, MetaTags also renders
|
|
10
11
|
* the theme initialization script to prevent FOUC (flash of unstyled content).
|
|
@@ -28,11 +29,9 @@
|
|
|
28
29
|
* ```
|
|
29
30
|
*/
|
|
30
31
|
|
|
31
|
-
import { use } from "react";
|
|
32
32
|
import { useHandle } from "../browser/react/use-handle.js";
|
|
33
33
|
import { Meta } from "./meta.js";
|
|
34
|
-
import {
|
|
35
|
-
import type { MetaDescriptor, MetaDescriptorBase } from "../router/types.js";
|
|
34
|
+
import type { MetaDescriptorBase } from "../router/types.js";
|
|
36
35
|
import { useThemeContext } from "../theme/theme-context.js";
|
|
37
36
|
import { generateThemeScript } from "../theme/theme-script.js";
|
|
38
37
|
import { useNonce } from "../browser/react/nonce-context.js";
|
|
@@ -96,17 +95,7 @@ function hasTagName(
|
|
|
96
95
|
);
|
|
97
96
|
}
|
|
98
97
|
|
|
99
|
-
|
|
100
|
-
* Check if a value is a Promise. Uses the shared thenable predicate (callable
|
|
101
|
-
* `then`) so collect (meta.ts) and render never disagree: an object carrying a
|
|
102
|
-
* non-callable `then` (e.g. `{ then: 5 }`) is a SYNC descriptor on both sides,
|
|
103
|
-
* not a Promise that would crash React's `use()`.
|
|
104
|
-
*/
|
|
105
|
-
function isPromise(value: unknown): value is Promise<unknown> {
|
|
106
|
-
return isThenable(value);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
function renderMetaDescriptor(
|
|
98
|
+
export function renderMetaDescriptor(
|
|
110
99
|
descriptor: MetaDescriptorBase,
|
|
111
100
|
index: number,
|
|
112
101
|
): React.ReactNode {
|
|
@@ -189,57 +178,6 @@ function renderMetaDescriptor(
|
|
|
189
178
|
);
|
|
190
179
|
}
|
|
191
180
|
|
|
192
|
-
// Sentinel a rejected async descriptor resolves to: renderMetaDescriptor sees
|
|
193
|
-
// no recognized fields and returns nothing renderable (see renderRejected).
|
|
194
|
-
const REJECTED_META: unique symbol = Symbol("rango.rejectedMeta");
|
|
195
|
-
|
|
196
|
-
// Cache the rejection-swallowing wrapper per source promise so use() gets a
|
|
197
|
-
// stable reference across re-renders (a fresh .then() each render would make
|
|
198
|
-
// React treat it as a new pending promise and never settle). WeakMap keys on
|
|
199
|
-
// the original promise so entries are collected with it.
|
|
200
|
-
const safeMetaPromises = new WeakMap<
|
|
201
|
-
Promise<MetaDescriptorBase>,
|
|
202
|
-
Promise<MetaDescriptorBase | typeof REJECTED_META>
|
|
203
|
-
>();
|
|
204
|
-
|
|
205
|
-
function toSafeMetaPromise(
|
|
206
|
-
promise: Promise<MetaDescriptorBase>,
|
|
207
|
-
): Promise<MetaDescriptorBase | typeof REJECTED_META> {
|
|
208
|
-
let safe = safeMetaPromises.get(promise);
|
|
209
|
-
if (!safe) {
|
|
210
|
-
// Swallow the rejection at the promise boundary, not via an error boundary:
|
|
211
|
-
// an error boundary above a suspended use() makes React abandon the whole
|
|
212
|
-
// Suspense subtree (and on the server switch it to client rendering). A
|
|
213
|
-
// settled-to-sentinel promise degrades the single bad descriptor to nothing
|
|
214
|
-
// while every sibling descriptor still renders.
|
|
215
|
-
//
|
|
216
|
-
// Normalize via Promise.resolve first: a collected async descriptor may be a
|
|
217
|
-
// non-native thenable (a React wakeable in SSR/RSC) whose .then() returns
|
|
218
|
-
// void rather than a Promise. Calling .then directly would leave `safe`
|
|
219
|
-
// undefined and use(undefined) would throw ("unsupported type passed to
|
|
220
|
-
// use()"), 500-ing the page. Promise.resolve adopts the thenable into a
|
|
221
|
-
// native Promise whose .then always returns one.
|
|
222
|
-
safe = Promise.resolve(promise).then(
|
|
223
|
-
(value) => value,
|
|
224
|
-
() => REJECTED_META,
|
|
225
|
-
);
|
|
226
|
-
safeMetaPromises.set(promise, safe);
|
|
227
|
-
}
|
|
228
|
-
return safe;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
export function AsyncMetaTag({
|
|
232
|
-
promise,
|
|
233
|
-
index,
|
|
234
|
-
}: {
|
|
235
|
-
promise: Promise<MetaDescriptorBase>;
|
|
236
|
-
index: number;
|
|
237
|
-
}): React.ReactNode {
|
|
238
|
-
const resolved = use(toSafeMetaPromise(promise));
|
|
239
|
-
if (resolved === REJECTED_META) return null;
|
|
240
|
-
return renderMetaDescriptor(resolved, index);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
181
|
/**
|
|
244
182
|
* Renders all collected meta descriptors from route handlers.
|
|
245
183
|
*
|
|
@@ -249,11 +187,16 @@ export function AsyncMetaTag({
|
|
|
249
187
|
* When theme is enabled in router config, also renders the theme initialization
|
|
250
188
|
* script to prevent FOUC (flash of unstyled content).
|
|
251
189
|
*
|
|
252
|
-
*
|
|
253
|
-
*
|
|
190
|
+
* Deferred (Promise) meta descriptors are resolved BEFORE MetaTags renders —
|
|
191
|
+
* server-side on the full/SSR render, client-side before apply on navigation
|
|
192
|
+
* (resolve-by-default) — so MetaTags only ever receives resolved descriptors and
|
|
193
|
+
* never suspends.
|
|
254
194
|
*/
|
|
255
195
|
export function MetaTags(): React.ReactNode {
|
|
256
|
-
|
|
196
|
+
// Deferred descriptors are resolved BEFORE collect runs (resolve-by-default),
|
|
197
|
+
// and collectMeta strips unset markers, so the collected output is always
|
|
198
|
+
// resolved base descriptors (never a Promise).
|
|
199
|
+
const descriptors = useHandle(Meta) as MetaDescriptorBase[];
|
|
257
200
|
const themeConfig = useThemeContext()?.config ?? null;
|
|
258
201
|
const nonce = useNonce();
|
|
259
202
|
|
|
@@ -266,24 +209,9 @@ export function MetaTags(): React.ReactNode {
|
|
|
266
209
|
dangerouslySetInnerHTML={{ __html: generateThemeScript(themeConfig) }}
|
|
267
210
|
/>
|
|
268
211
|
)}
|
|
269
|
-
{descriptors.map((descriptor, index) =>
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
// store resolves deferred handle values before applying them (see
|
|
273
|
-
// processHandles), so MetaTags only ever receives resolved descriptors
|
|
274
|
-
// there and never suspends — which would otherwise revert the committed
|
|
275
|
-
// route (MetaTags lives in <head>, above the route's <Suspense>).
|
|
276
|
-
if (isPromise(descriptor)) {
|
|
277
|
-
return (
|
|
278
|
-
<AsyncMetaTag
|
|
279
|
-
key={`async-${index}`}
|
|
280
|
-
promise={descriptor}
|
|
281
|
-
index={index}
|
|
282
|
-
/>
|
|
283
|
-
);
|
|
284
|
-
}
|
|
285
|
-
return renderMetaDescriptor(descriptor, index);
|
|
286
|
-
})}
|
|
212
|
+
{descriptors.map((descriptor, index) =>
|
|
213
|
+
renderMetaDescriptor(descriptor, index),
|
|
214
|
+
)}
|
|
287
215
|
</>
|
|
288
216
|
);
|
|
289
217
|
}
|
|
@@ -23,7 +23,6 @@
|
|
|
23
23
|
|
|
24
24
|
import type { ReactNode } from "react";
|
|
25
25
|
import { createHandle, type Handle } from "../handle.js";
|
|
26
|
-
import { isThenable } from "./is-thenable.js";
|
|
27
26
|
|
|
28
27
|
/**
|
|
29
28
|
* A single breadcrumb item.
|
|
@@ -42,34 +41,33 @@ export interface BreadcrumbItem {
|
|
|
42
41
|
* Collect function for Breadcrumbs handle.
|
|
43
42
|
* Flattens segments in parent-to-child order with deduplication by href: each
|
|
44
43
|
* href keeps its FIRST position but takes the LAST value (re-pushing a parent
|
|
45
|
-
* href refreshes the label in place without reordering the trail).
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
44
|
+
* href refreshes the label in place without reordering the trail). Deferred
|
|
45
|
+
* crumbs (a pushed Promise or `ctx.use(Breadcrumbs).defer()`) are resolved
|
|
46
|
+
* BEFORE collect runs (resolve-by-default), so collect only ever sees resolved
|
|
47
|
+
* items. An item without a string `href` is passed through by identity and
|
|
48
|
+
* excluded from the href dedup.
|
|
50
49
|
*/
|
|
51
50
|
function collectBreadcrumbs(segments: BreadcrumbItem[][]): BreadcrumbItem[] {
|
|
52
51
|
const all = segments.flat();
|
|
53
52
|
|
|
54
|
-
const
|
|
53
|
+
const hasHref = (item: unknown): item is BreadcrumbItem =>
|
|
55
54
|
item != null &&
|
|
56
55
|
typeof item === "object" &&
|
|
57
|
-
!isThenable(item) &&
|
|
58
56
|
typeof (item as { href?: unknown }).href === "string";
|
|
59
57
|
|
|
60
|
-
// Dedup
|
|
61
|
-
//
|
|
62
|
-
//
|
|
63
|
-
//
|
|
58
|
+
// Dedup crumbs by href: keep the FIRST position (preserving parent->child
|
|
59
|
+
// order) but the LAST value (a child re-pushing a parent's href can refresh
|
|
60
|
+
// its label). Items without an href pass through by identity at their original
|
|
61
|
+
// position.
|
|
64
62
|
const valueByHref = new Map<string, BreadcrumbItem>();
|
|
65
63
|
for (const item of all) {
|
|
66
|
-
if (
|
|
64
|
+
if (hasHref(item)) valueByHref.set(item.href, item);
|
|
67
65
|
}
|
|
68
66
|
|
|
69
67
|
const result: BreadcrumbItem[] = [];
|
|
70
68
|
const emitted = new Set<string>();
|
|
71
69
|
for (const item of all) {
|
|
72
|
-
if (!
|
|
70
|
+
if (!hasHref(item)) {
|
|
73
71
|
result.push(item);
|
|
74
72
|
continue;
|
|
75
73
|
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { HandleData, HandleStore } from "../server/handle-store.js";
|
|
2
|
+
import { isThenable } from "./is-thenable.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Runtime-neutral resolution of deferred (Promise) handle values. Shared by the
|
|
6
|
+
* server full-render path (resolve before the payload is finalized so SSR sees
|
|
7
|
+
* resolved values) and the client soft-nav path (NavigationProvider resolves
|
|
8
|
+
* each yield before applying it). Pure — imports only `isThenable` — so it is
|
|
9
|
+
* safe in both the RSC server environment AND the browser.
|
|
10
|
+
*
|
|
11
|
+
* Resolution is SHALLOW: only an entry that is ITSELF a thenable is awaited. A
|
|
12
|
+
* value that merely contains a promise (e.g. `{ data: somePromise }`) is a
|
|
13
|
+
* non-thenable, so the `isThenable` check skips it and it passes through verbatim
|
|
14
|
+
* — the nested promise is the consumer's responsibility. Resolution runs each
|
|
15
|
+
* entry through `Promise.all` with a per-entry `try/catch` (NOT `allSettled`), so
|
|
16
|
+
* one rejecting entry is dropped without rejecting the batch or aborting siblings.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Handle names ($$id) whose snapshot carries a deferred (top-level Promise)
|
|
21
|
+
* value. Used by the client to decide which buckets to hold-and-resolve, and
|
|
22
|
+
* `.size > 0` answers "does this snapshot have any deferred value".
|
|
23
|
+
*/
|
|
24
|
+
export function deferredHandleNames(data: HandleData): Set<string> {
|
|
25
|
+
const names = new Set<string>();
|
|
26
|
+
for (const [handleName, segments] of Object.entries(data)) {
|
|
27
|
+
for (const values of Object.values(segments)) {
|
|
28
|
+
if (values.some(isThenable)) {
|
|
29
|
+
names.add(handleName);
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return names;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Snapshot with deferred (Promise) values awaited (shallow — only top-level
|
|
39
|
+
* thenables). A rejected deferred is dropped, and a deferred that resolves to
|
|
40
|
+
* `null`/`undefined` is dropped (the `.defer({ else })` skip semantics), so a
|
|
41
|
+
* nullish deferred slot never reaches a collector. Sync (non-thenable) values —
|
|
42
|
+
* including a legitimate sync `null` push — pass through unchanged.
|
|
43
|
+
*/
|
|
44
|
+
export async function resolveDeferredHandleValues(
|
|
45
|
+
data: HandleData,
|
|
46
|
+
): Promise<HandleData> {
|
|
47
|
+
const out: HandleData = {};
|
|
48
|
+
await Promise.all(
|
|
49
|
+
Object.entries(data).flatMap(([handleName, segments]) => {
|
|
50
|
+
out[handleName] = {};
|
|
51
|
+
return Object.entries(segments).map(async ([segmentId, values]) => {
|
|
52
|
+
out[handleName][segmentId] = await resolveValues(values);
|
|
53
|
+
});
|
|
54
|
+
}),
|
|
55
|
+
);
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Resolve each entry IN ORDER. A non-thenable passes through verbatim (including
|
|
60
|
+
// a legitimate sync `null`/`undefined` push — the "await iff thenable" contract).
|
|
61
|
+
// A thenable is awaited and dropped when it rejects OR resolves to null/undefined
|
|
62
|
+
// (the `.defer({ else })` skip semantics: a forgotten resolver times out to
|
|
63
|
+
// `else ?? undefined`), so a nullish deferred slot never reaches a collector.
|
|
64
|
+
async function resolveValues(values: unknown[]): Promise<unknown[]> {
|
|
65
|
+
const resolved = await Promise.all(
|
|
66
|
+
values.map(async (v) => {
|
|
67
|
+
if (!isThenable(v)) return { keep: true, value: v };
|
|
68
|
+
try {
|
|
69
|
+
const value = await v;
|
|
70
|
+
return { keep: value != null, value };
|
|
71
|
+
} catch {
|
|
72
|
+
return { keep: false, value: undefined };
|
|
73
|
+
}
|
|
74
|
+
}),
|
|
75
|
+
);
|
|
76
|
+
return resolved.filter((r) => r.keep).map((r) => r.value);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Full-render handle stream: a one-shot async generator that yields the FINAL
|
|
81
|
+
* handle snapshot with every top-level deferred value resolved. Drop-in for
|
|
82
|
+
* `handleStore.stream()` on full / HTML renders (initial load, 404, progressive
|
|
83
|
+
* enhancement), where the consumer drains the generator to completion before
|
|
84
|
+
* rendering anyway — so the single final yield is equivalent to the streamed
|
|
85
|
+
* yields' converged state, and the SSR markup plus the first sync `useHandle`
|
|
86
|
+
* read see resolved values. `getData()` seals the store and awaits the handler
|
|
87
|
+
* barrier; `resolveDeferredHandleValues` then awaits the pushed-value promises.
|
|
88
|
+
* A hung handle promise blocks the full render like any unresolved await (no
|
|
89
|
+
* handle-specific timeout). Partial / action payloads keep streaming via
|
|
90
|
+
* `handleStore.stream()`.
|
|
91
|
+
*/
|
|
92
|
+
export async function* resolvedHandleStream(
|
|
93
|
+
handleStore: HandleStore,
|
|
94
|
+
): AsyncGenerator<HandleData, void, unknown> {
|
|
95
|
+
// Drain stream() (NOT getData()) for the converged snapshot: stream() sets the
|
|
96
|
+
// store's `completed` flag on seal+settle, and that flag is what makes a LATE
|
|
97
|
+
// push throw LateHandlePushError — an async JSX subtree that suspended and later
|
|
98
|
+
// calls ctx.use(Handle)(...) after collection. getData() never sets `completed`,
|
|
99
|
+
// so the late push would silently land. Both wait for the same settle barrier, so
|
|
100
|
+
// the final yielded value is identical; we just keep the late-push guard.
|
|
101
|
+
let snapshot: HandleData = {};
|
|
102
|
+
for await (const data of handleStore.stream()) {
|
|
103
|
+
snapshot = data;
|
|
104
|
+
}
|
|
105
|
+
yield await resolveDeferredHandleValues(snapshot);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Resolve the deferred (Promise) values in ONE segment's handle bucket
|
|
110
|
+
* (`handleName -> entries[]`). Same shallow + drop-rejections rule as
|
|
111
|
+
* {@link resolveDeferredHandleValues}, but for the segment-keyed shape the
|
|
112
|
+
* prerender/static collection paths use (`getDataForSegment`). Prerender is a
|
|
113
|
+
* build-time cache, so the baked artifact must hold resolved values — a hit
|
|
114
|
+
* replays them into the segment system, where collect/useHandle expect resolved
|
|
115
|
+
* data.
|
|
116
|
+
*/
|
|
117
|
+
export async function resolveSegmentHandleValues(
|
|
118
|
+
segHandles: Record<string, unknown[]>,
|
|
119
|
+
): Promise<Record<string, unknown[]>> {
|
|
120
|
+
const out: Record<string, unknown[]> = {};
|
|
121
|
+
await Promise.all(
|
|
122
|
+
Object.entries(segHandles).map(async ([handleName, values]) => {
|
|
123
|
+
out[handleName] = await resolveValues(values);
|
|
124
|
+
}),
|
|
125
|
+
);
|
|
126
|
+
return out;
|
|
127
|
+
}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Single thenable predicate
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Single thenable predicate for the resolve-by-default handle machinery
|
|
3
|
+
* (`handles/deferred-resolution.ts`, its sole owner) — it decides which top-level
|
|
4
|
+
* handle entries are deferred (`Promise`) values to await before any consumer
|
|
5
|
+
* sees them, and which pass through verbatim.
|
|
5
6
|
*
|
|
6
7
|
* Requires a CALLABLE `then` (`typeof obj.then === "function"`), not merely a
|
|
7
|
-
* `"then" in obj` membership check
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* React's `use()` on a non-thenable and throw. One owner keeps the collect and
|
|
11
|
-
* render sides from ever disagreeing.
|
|
8
|
+
* `"then" in obj` membership check, so a non-promise carrying a `then` field
|
|
9
|
+
* (e.g. a serialized shape `{ then: 5 }`) is treated as a plain sync value rather
|
|
10
|
+
* than awaited. A single predicate keeps that classification consistent.
|
|
12
11
|
*/
|
|
13
12
|
export function isThenable(value: unknown): value is PromiseLike<unknown> {
|
|
14
13
|
return (
|
package/src/handles/meta.ts
CHANGED
|
@@ -29,7 +29,6 @@
|
|
|
29
29
|
*/
|
|
30
30
|
|
|
31
31
|
import { createHandle, type Handle } from "../handle.js";
|
|
32
|
-
import { isThenable } from "./is-thenable.js";
|
|
33
32
|
import type {
|
|
34
33
|
MetaDescriptor,
|
|
35
34
|
MetaDescriptorBase,
|
|
@@ -37,12 +36,6 @@ import type {
|
|
|
37
36
|
UnsetDescriptor,
|
|
38
37
|
} from "../router/types.js";
|
|
39
38
|
|
|
40
|
-
function isPromiseDescriptor(
|
|
41
|
-
descriptor: MetaDescriptor,
|
|
42
|
-
): descriptor is Promise<MetaDescriptorBase> {
|
|
43
|
-
return isThenable(descriptor);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
39
|
function isUnsetDescriptor(
|
|
47
40
|
descriptor: MetaDescriptor,
|
|
48
41
|
): descriptor is UnsetDescriptor {
|
|
@@ -166,37 +159,9 @@ function collectMeta(segments: MetaDescriptor[][]): MetaDescriptor[] {
|
|
|
166
159
|
|
|
167
160
|
for (const descriptors of segments) {
|
|
168
161
|
for (const descriptor of descriptors) {
|
|
169
|
-
// Promise descriptors
|
|
170
|
-
//
|
|
171
|
-
// key-based dedup
|
|
172
|
-
// dev when a title template is active so the author knows an async
|
|
173
|
-
// descriptor will NOT participate in the template/dedup.
|
|
174
|
-
//
|
|
175
|
-
// The warning is deliberately a GENERAL note, not a duplicate-<title>
|
|
176
|
-
// prediction: collectMeta cannot tell whether this Promise resolves to a
|
|
177
|
-
// title (which would indeed yield a 2nd <title>) or to an ordinary
|
|
178
|
-
// descriptor like an async og:image (which would not). Asserting a
|
|
179
|
-
// duplicate <title> here is a false positive for the common og:image case,
|
|
180
|
-
// so the message states only that async descriptors bypass templating —
|
|
181
|
-
// not that a duplicate <title> WILL occur.
|
|
182
|
-
if (isPromiseDescriptor(descriptor)) {
|
|
183
|
-
if (
|
|
184
|
-
titleTemplate !== undefined &&
|
|
185
|
-
process.env.NODE_ENV !== "production"
|
|
186
|
-
) {
|
|
187
|
-
console.warn(
|
|
188
|
-
`[Meta] A Promise meta descriptor was pushed while a title template is active. ` +
|
|
189
|
-
`Async descriptors bypass deduplication and title-templating: the template is ` +
|
|
190
|
-
`not applied to them. If this Promise resolves to a title, resolve the value ` +
|
|
191
|
-
`before pushing (or push a synchronous descriptor) so it participates in the ` +
|
|
192
|
-
`template; if it resolves to a non-title descriptor (e.g. og:image), this ` +
|
|
193
|
-
`note does not apply.`,
|
|
194
|
-
);
|
|
195
|
-
}
|
|
196
|
-
result.push(descriptor);
|
|
197
|
-
continue;
|
|
198
|
-
}
|
|
199
|
-
|
|
162
|
+
// Deferred (Promise) descriptors are resolved BEFORE collectMeta runs
|
|
163
|
+
// (resolve-by-default), so every descriptor here is synchronous and
|
|
164
|
+
// participates in key-based dedup + title-templating like any other.
|
|
200
165
|
if (isUnsetDescriptor(descriptor)) {
|
|
201
166
|
const keyToRemove = descriptor.unset;
|
|
202
167
|
if (keyToIndex.has(keyToRemove)) {
|
|
@@ -262,12 +227,10 @@ function collectMeta(segments: MetaDescriptor[][]): MetaDescriptor[] {
|
|
|
262
227
|
* Use `ctx.use(Meta)` in route handlers to push meta descriptors.
|
|
263
228
|
* Use `<MetaTags />` component to render them in the document head.
|
|
264
229
|
*
|
|
265
|
-
*
|
|
266
|
-
*
|
|
267
|
-
*
|
|
268
|
-
*
|
|
269
|
-
* to participate in a layout's `%s` template, push the resolved string title
|
|
270
|
-
* synchronously rather than a `Promise<{ title }>`.
|
|
230
|
+
* Deferred (Promise) descriptors are resolved before collectMeta runs
|
|
231
|
+
* (resolve-by-default), so they participate in deduplication and `%s`
|
|
232
|
+
* title-templating identically to synchronous descriptors. A descriptor that
|
|
233
|
+
* resolves to `null`/`undefined` (or rejects) is dropped.
|
|
271
234
|
*/
|
|
272
235
|
export const Meta: Handle<MetaDescriptor, MetaDescriptor[]> = createHandle<
|
|
273
236
|
MetaDescriptor,
|
package/src/index.rsc.ts
CHANGED
package/src/index.ts
CHANGED
package/src/prerender.ts
CHANGED
|
@@ -33,6 +33,7 @@ import type {
|
|
|
33
33
|
ExtractParams,
|
|
34
34
|
} from "./types.js";
|
|
35
35
|
import type { Handle } from "./handle.js";
|
|
36
|
+
import type { HandlePush } from "./defer.js";
|
|
36
37
|
import type { ContextVar } from "./context-var.js";
|
|
37
38
|
import type { ReverseFunction } from "./reverse.js";
|
|
38
39
|
import type { DefaultReverseRouteMap } from "./types/global-namespace.js";
|
|
@@ -165,8 +166,14 @@ export interface BuildContext<TParams> {
|
|
|
165
166
|
(key: string, value: any): void;
|
|
166
167
|
};
|
|
167
168
|
|
|
168
|
-
/**
|
|
169
|
-
|
|
169
|
+
/**
|
|
170
|
+
* Push handle data (frozen into pre-rendered output at build time). Returns
|
|
171
|
+
* the full push function, including `.defer()` — a deferred slot resolved by
|
|
172
|
+
* a deep async component during the prerender render is awaited before the
|
|
173
|
+
* artifact is baked (resolve-by-default), so the baked output holds the
|
|
174
|
+
* resolved value.
|
|
175
|
+
*/
|
|
176
|
+
use: <T>(handle: Handle<T>) => HandlePush<T>;
|
|
170
177
|
|
|
171
178
|
/** Synthetic URL built from pattern + params (no real request). */
|
|
172
179
|
url: URL;
|
|
@@ -222,8 +229,14 @@ export interface StaticBuildContext {
|
|
|
222
229
|
(key: string, value: any): void;
|
|
223
230
|
};
|
|
224
231
|
|
|
225
|
-
/**
|
|
226
|
-
|
|
232
|
+
/**
|
|
233
|
+
* Push handle data (frozen into pre-rendered output at build time). Returns
|
|
234
|
+
* the full push function, including `.defer()` — a deferred slot resolved by
|
|
235
|
+
* a deep async component during the prerender render is awaited before the
|
|
236
|
+
* artifact is baked (resolve-by-default), so the baked output holds the
|
|
237
|
+
* resolved value.
|
|
238
|
+
*/
|
|
239
|
+
use: <T>(handle: Handle<T>) => HandlePush<T>;
|
|
227
240
|
|
|
228
241
|
/** URL generation by route name. */
|
|
229
242
|
reverse: BuildReverseFunction;
|
package/src/router/find-match.ts
CHANGED
|
@@ -20,27 +20,39 @@ function cloneMatchResult<TEnv>(
|
|
|
20
20
|
|
|
21
21
|
export interface FindMatchDeps<TEnv = any> {
|
|
22
22
|
routesEntries: RouteEntry<TEnv>[];
|
|
23
|
-
|
|
23
|
+
// Returns a Promise only when it had to resolve an async include provider
|
|
24
|
+
// (`() => import()`); void for eager/precomputed includes, so the per-entry
|
|
25
|
+
// match loop pays no microtask in the common case.
|
|
26
|
+
evaluateLazyEntry: (entry: RouteEntry<TEnv>) => void | Promise<void>;
|
|
24
27
|
routerId: string;
|
|
25
28
|
}
|
|
26
29
|
|
|
27
30
|
/**
|
|
28
31
|
* Create a findMatch function bound to router state.
|
|
29
32
|
* Includes single-entry cache to avoid redundant matching within the same request.
|
|
33
|
+
*
|
|
34
|
+
* Async because a lazy include may be backed by an async provider
|
|
35
|
+
* (`() => import("./routes")`) that must be resolved before its routes can be
|
|
36
|
+
* matched. The hot path is unaffected: `await` only suspends on the first
|
|
37
|
+
* request to a not-yet-loaded dynamic include; eager routes resolve in the same
|
|
38
|
+
* microtask. Every caller already runs inside an async match pipeline.
|
|
30
39
|
*/
|
|
31
40
|
export function createFindMatch<TEnv = any>(
|
|
32
41
|
deps: FindMatchDeps<TEnv>,
|
|
33
|
-
): (
|
|
42
|
+
): (
|
|
43
|
+
pathname: string,
|
|
44
|
+
ms?: MetricsStore,
|
|
45
|
+
) => Promise<RouteMatchResult<TEnv> | null> {
|
|
34
46
|
// Single-entry cache for findMatch to avoid redundant matching within the same request.
|
|
35
47
|
// previewMatch and match both call findMatch with the same pathname — this ensures
|
|
36
48
|
// the route matching work (which may check thousands of routes) only happens once.
|
|
37
49
|
let lastFindMatchPathname: string | null = null;
|
|
38
50
|
let lastFindMatchResult: RouteMatchResult<TEnv> | null = null;
|
|
39
51
|
|
|
40
|
-
return function findMatch(
|
|
52
|
+
return async function findMatch(
|
|
41
53
|
pathname: string,
|
|
42
54
|
ms?: MetricsStore,
|
|
43
|
-
): RouteMatchResult<TEnv> | null {
|
|
55
|
+
): Promise<RouteMatchResult<TEnv> | null> {
|
|
44
56
|
if (lastFindMatchPathname === pathname) {
|
|
45
57
|
return cloneMatchResult(lastFindMatchResult);
|
|
46
58
|
}
|
|
@@ -71,11 +83,33 @@ export function createFindMatch<TEnv = any>(
|
|
|
71
83
|
const entryStart = performance.now();
|
|
72
84
|
let entry: RouteEntry<TEnv> | undefined;
|
|
73
85
|
let fallbackEntry: RouteEntry<TEnv> | undefined;
|
|
86
|
+
let candidateError: unknown;
|
|
87
|
+
let candidateFailed = false;
|
|
74
88
|
|
|
75
89
|
for (const e of deps.routesEntries) {
|
|
76
90
|
if (e.staticPrefix !== trieResult.sp) continue;
|
|
77
91
|
if (!fallbackEntry) fallbackEntry = e;
|
|
78
|
-
|
|
92
|
+
try {
|
|
93
|
+
const ev = deps.evaluateLazyEntry(e);
|
|
94
|
+
if (ev) await ev;
|
|
95
|
+
} catch (err) {
|
|
96
|
+
// Multiple async includes can share one collapsed static prefix, so
|
|
97
|
+
// this loop may evaluate a candidate that is NOT the route's owner.
|
|
98
|
+
// Remember the failure and keep scanning: if another candidate owns
|
|
99
|
+
// the route, this sibling's failure is correctly isolated (its
|
|
100
|
+
// _lazyInflight was cleared, so a later request retries). But if NO
|
|
101
|
+
// candidate ends up owning it, the failing one WAS the owner — a
|
|
102
|
+
// real, trie-matched route whose module failed to import — and we
|
|
103
|
+
// rethrow below as a 5xx rather than silently 404ing (see finding 3:
|
|
104
|
+
// owner failure must stay loud).
|
|
105
|
+
candidateError = err;
|
|
106
|
+
candidateFailed = true;
|
|
107
|
+
console.error(
|
|
108
|
+
`[@rangojs/router] include at "${e.staticPrefix}" failed to load: ` +
|
|
109
|
+
`${(err as Error)?.message ?? String(err)}`,
|
|
110
|
+
);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
79
113
|
if (
|
|
80
114
|
e.routes &&
|
|
81
115
|
trieResult.routeKey in (e.routes as Record<string, unknown>)
|
|
@@ -85,6 +119,14 @@ export function createFindMatch<TEnv = any>(
|
|
|
85
119
|
}
|
|
86
120
|
}
|
|
87
121
|
|
|
122
|
+
// The trie matched this route, so it EXISTS. If no same-prefix candidate
|
|
123
|
+
// could own it AND one failed to load, the owning module is the one that
|
|
124
|
+
// threw — surface the module failure as a 5xx, not the misleading 404 a
|
|
125
|
+
// fallthrough would give.
|
|
126
|
+
if (!entry && candidateFailed) {
|
|
127
|
+
throw candidateError;
|
|
128
|
+
}
|
|
129
|
+
|
|
88
130
|
if (!entry) entry = fallbackEntry;
|
|
89
131
|
|
|
90
132
|
if (!entry) {
|
|
@@ -95,7 +137,8 @@ export function createFindMatch<TEnv = any>(
|
|
|
95
137
|
);
|
|
96
138
|
if (parent) {
|
|
97
139
|
const lazyStart = performance.now();
|
|
98
|
-
deps.evaluateLazyEntry(parent);
|
|
140
|
+
const ev = deps.evaluateLazyEntry(parent);
|
|
141
|
+
if (ev) await ev;
|
|
99
142
|
pushMetric?.("match:lazy-eval", lazyStart);
|
|
100
143
|
}
|
|
101
144
|
entry = deps.routesEntries.find(
|
|
@@ -141,7 +184,28 @@ export function createFindMatch<TEnv = any>(
|
|
|
141
184
|
lastFindMatchResult = null;
|
|
142
185
|
return null;
|
|
143
186
|
}
|
|
144
|
-
|
|
187
|
+
try {
|
|
188
|
+
const ev = deps.evaluateLazyEntry(result.lazyEntry);
|
|
189
|
+
if (ev) await ev;
|
|
190
|
+
} catch (err) {
|
|
191
|
+
// If the trie matched this pathname, the route is REAL and this lazy
|
|
192
|
+
// entry owns (part of) it — a module-load failure is a genuine error, so
|
|
193
|
+
// propagate it as a 5xx. If the trie did NOT match, this is a
|
|
194
|
+
// genuinely-unmatched pathname (a typo, a bot probe): its 404 must not be
|
|
195
|
+
// upgraded to a 500 just because some lazy include — e.g. a failing root
|
|
196
|
+
// `include("/")` — happened to need evaluating while we probed. Isolate
|
|
197
|
+
// and fall through to the 404 (finding 4: the two match phases agree —
|
|
198
|
+
// owner failure is loud, unmatched stays 404).
|
|
199
|
+
if (trieMatched) throw err;
|
|
200
|
+
console.error(
|
|
201
|
+
`[@rangojs/router] include at "${result.lazyEntry.staticPrefix}" ` +
|
|
202
|
+
`failed to load while resolving unmatched path "${pathname}": ` +
|
|
203
|
+
`${(err as Error)?.message ?? String(err)}`,
|
|
204
|
+
);
|
|
205
|
+
lastFindMatchPathname = pathname;
|
|
206
|
+
lastFindMatchResult = null;
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
145
209
|
result = findRouteMatch(pathname, deps.routesEntries);
|
|
146
210
|
}
|
|
147
211
|
pushMetric?.("match:regex-fallback", regexStart);
|