@rangojs/router 0.8.0 → 0.10.0
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/__internal.d.ts +83 -0
- package/dist/__internal.d.ts.map +1 -0
- package/dist/__internal.js +19 -0
- package/dist/__internal.js.map +1 -0
- package/dist/__mocks__/version.d.ts +7 -0
- package/dist/__mocks__/version.d.ts.map +1 -0
- package/dist/__mocks__/version.js +7 -0
- package/dist/__mocks__/version.js.map +1 -0
- package/dist/__tests__/client-href.test.d.ts +2 -0
- package/dist/__tests__/client-href.test.d.ts.map +1 -0
- package/dist/__tests__/client-href.test.js +74 -0
- package/dist/__tests__/client-href.test.js.map +1 -0
- package/dist/__tests__/component-utils.test.d.ts +2 -0
- package/dist/__tests__/component-utils.test.d.ts.map +1 -0
- package/dist/__tests__/component-utils.test.js +51 -0
- package/dist/__tests__/component-utils.test.js.map +1 -0
- package/dist/__tests__/event-controller.test.d.ts +2 -0
- package/dist/__tests__/event-controller.test.d.ts.map +1 -0
- package/dist/__tests__/event-controller.test.js +538 -0
- package/dist/__tests__/event-controller.test.js.map +1 -0
- package/dist/__tests__/helpers/route-tree.d.ts +118 -0
- package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
- package/dist/__tests__/helpers/route-tree.js +374 -0
- package/dist/__tests__/helpers/route-tree.js.map +1 -0
- package/dist/__tests__/match-result.test.d.ts +2 -0
- package/dist/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/__tests__/match-result.test.js +154 -0
- package/dist/__tests__/match-result.test.js.map +1 -0
- package/dist/__tests__/navigation-store.test.d.ts +2 -0
- package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
- package/dist/__tests__/navigation-store.test.js +440 -0
- package/dist/__tests__/navigation-store.test.js.map +1 -0
- package/dist/__tests__/partial-update.test.d.ts +2 -0
- package/dist/__tests__/partial-update.test.d.ts.map +1 -0
- package/dist/__tests__/partial-update.test.js +1009 -0
- package/dist/__tests__/partial-update.test.js.map +1 -0
- package/dist/__tests__/reverse-types.test.d.ts +8 -0
- package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
- package/dist/__tests__/reverse-types.test.js +656 -0
- package/dist/__tests__/reverse-types.test.js.map +1 -0
- package/dist/__tests__/route-definition.test.d.ts +2 -0
- package/dist/__tests__/route-definition.test.d.ts.map +1 -0
- package/dist/__tests__/route-definition.test.js +55 -0
- package/dist/__tests__/route-definition.test.js.map +1 -0
- package/dist/__tests__/router-helpers.test.d.ts +2 -0
- package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
- package/dist/__tests__/router-helpers.test.js +377 -0
- package/dist/__tests__/router-helpers.test.js.map +1 -0
- package/dist/__tests__/router-integration-2.test.d.ts +2 -0
- package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
- package/dist/__tests__/router-integration-2.test.js +426 -0
- package/dist/__tests__/router-integration-2.test.js.map +1 -0
- package/dist/__tests__/router-integration.test.d.ts +2 -0
- package/dist/__tests__/router-integration.test.d.ts.map +1 -0
- package/dist/__tests__/router-integration.test.js +1051 -0
- package/dist/__tests__/router-integration.test.js.map +1 -0
- package/dist/__tests__/search-params.test.d.ts +5 -0
- package/dist/__tests__/search-params.test.d.ts.map +1 -0
- package/dist/__tests__/search-params.test.js +306 -0
- package/dist/__tests__/search-params.test.js.map +1 -0
- package/dist/__tests__/segment-system.test.d.ts +2 -0
- package/dist/__tests__/segment-system.test.d.ts.map +1 -0
- package/dist/__tests__/segment-system.test.js +627 -0
- package/dist/__tests__/segment-system.test.js.map +1 -0
- package/dist/__tests__/static-handler-types.test.d.ts +8 -0
- package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
- package/dist/__tests__/static-handler-types.test.js +63 -0
- package/dist/__tests__/static-handler-types.test.js.map +1 -0
- package/dist/__tests__/urls.test.d.ts +2 -0
- package/dist/__tests__/urls.test.d.ts.map +1 -0
- package/dist/__tests__/urls.test.js +421 -0
- package/dist/__tests__/urls.test.js.map +1 -0
- package/dist/__tests__/use-mount.test.d.ts +2 -0
- package/dist/__tests__/use-mount.test.d.ts.map +1 -0
- package/dist/__tests__/use-mount.test.js +35 -0
- package/dist/__tests__/use-mount.test.js.map +1 -0
- package/dist/bin/rango.d.ts +2 -0
- package/dist/bin/rango.d.ts.map +1 -0
- package/dist/bin/rango.js.map +1 -0
- package/dist/browser/event-controller.d.ts +191 -0
- package/dist/browser/event-controller.d.ts.map +1 -0
- package/dist/browser/event-controller.js +559 -0
- package/dist/browser/event-controller.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/link-interceptor.d.ts +38 -0
- package/dist/browser/link-interceptor.d.ts.map +1 -0
- package/dist/browser/link-interceptor.js +99 -0
- package/dist/browser/link-interceptor.js.map +1 -0
- package/dist/browser/logging.d.ts +10 -0
- package/dist/browser/logging.d.ts.map +1 -0
- package/dist/browser/logging.js +29 -0
- package/dist/browser/logging.js.map +1 -0
- package/dist/browser/lru-cache.d.ts +17 -0
- package/dist/browser/lru-cache.d.ts.map +1 -0
- package/dist/browser/lru-cache.js +50 -0
- package/dist/browser/lru-cache.js.map +1 -0
- package/dist/browser/merge-segment-loaders.d.ts +39 -0
- package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
- package/dist/browser/merge-segment-loaders.js +102 -0
- package/dist/browser/merge-segment-loaders.js.map +1 -0
- package/dist/browser/navigation-bridge.d.ts +102 -0
- package/dist/browser/navigation-bridge.d.ts.map +1 -0
- package/dist/browser/navigation-bridge.js +708 -0
- package/dist/browser/navigation-bridge.js.map +1 -0
- package/dist/browser/navigation-client.d.ts +25 -0
- package/dist/browser/navigation-client.d.ts.map +1 -0
- package/dist/browser/navigation-client.js +157 -0
- package/dist/browser/navigation-client.js.map +1 -0
- package/dist/browser/navigation-store.d.ts +101 -0
- package/dist/browser/navigation-store.d.ts.map +1 -0
- package/dist/browser/navigation-store.js +625 -0
- package/dist/browser/navigation-store.js.map +1 -0
- package/dist/browser/partial-update.d.ts +75 -0
- package/dist/browser/partial-update.d.ts.map +1 -0
- package/dist/browser/partial-update.js +426 -0
- package/dist/browser/partial-update.js.map +1 -0
- package/dist/browser/react/Link.d.ts +86 -0
- package/dist/browser/react/Link.d.ts.map +1 -0
- package/dist/browser/react/Link.js +128 -0
- package/dist/browser/react/Link.js.map +1 -0
- package/dist/browser/react/NavigationProvider.d.ts +63 -0
- package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
- package/dist/browser/react/NavigationProvider.js +216 -0
- package/dist/browser/react/NavigationProvider.js.map +1 -0
- package/dist/browser/react/ScrollRestoration.d.ts +75 -0
- package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
- package/dist/browser/react/ScrollRestoration.js +57 -0
- package/dist/browser/react/ScrollRestoration.js.map +1 -0
- package/dist/browser/react/context.d.ts +46 -0
- package/dist/browser/react/context.d.ts.map +1 -0
- package/dist/browser/react/context.js +10 -0
- package/dist/browser/react/context.js.map +1 -0
- package/dist/browser/react/index.d.ts +11 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/index.js +22 -0
- package/dist/browser/react/index.js.map +1 -0
- package/dist/browser/react/location-state-shared.d.ts +63 -0
- package/dist/browser/react/location-state-shared.d.ts.map +1 -0
- package/dist/browser/react/location-state-shared.js +81 -0
- package/dist/browser/react/location-state-shared.js.map +1 -0
- package/dist/browser/react/location-state.d.ts +23 -0
- package/dist/browser/react/location-state.d.ts.map +1 -0
- package/dist/browser/react/location-state.js +29 -0
- package/dist/browser/react/location-state.js.map +1 -0
- package/dist/browser/react/mount-context.d.ts +24 -0
- package/dist/browser/react/mount-context.d.ts.map +1 -0
- package/dist/browser/react/mount-context.js +24 -0
- package/dist/browser/react/mount-context.js.map +1 -0
- package/dist/browser/react/use-action.d.ts +64 -0
- package/dist/browser/react/use-action.d.ts.map +1 -0
- package/dist/browser/react/use-action.js +134 -0
- package/dist/browser/react/use-action.js.map +1 -0
- package/dist/browser/react/use-client-cache.d.ts +41 -0
- package/dist/browser/react/use-client-cache.d.ts.map +1 -0
- package/dist/browser/react/use-client-cache.js +39 -0
- package/dist/browser/react/use-client-cache.js.map +1 -0
- package/dist/browser/react/use-handle.d.ts +31 -0
- package/dist/browser/react/use-handle.d.ts.map +1 -0
- package/dist/browser/react/use-handle.js +144 -0
- package/dist/browser/react/use-handle.js.map +1 -0
- package/dist/browser/react/use-href.d.ts +33 -0
- package/dist/browser/react/use-href.d.ts.map +1 -0
- package/dist/browser/react/use-href.js +39 -0
- package/dist/browser/react/use-href.js.map +1 -0
- package/dist/browser/react/use-link-status.d.ts +37 -0
- package/dist/browser/react/use-link-status.d.ts.map +1 -0
- package/dist/browser/react/use-link-status.js +99 -0
- package/dist/browser/react/use-link-status.js.map +1 -0
- package/dist/browser/react/use-mount.d.ts +25 -0
- package/dist/browser/react/use-mount.d.ts.map +1 -0
- package/dist/browser/react/use-mount.js +30 -0
- package/dist/browser/react/use-mount.js.map +1 -0
- package/dist/browser/react/use-navigation.d.ts +27 -0
- package/dist/browser/react/use-navigation.d.ts.map +1 -0
- package/dist/browser/react/use-navigation.js +87 -0
- package/dist/browser/react/use-navigation.js.map +1 -0
- package/dist/browser/react/use-segments.d.ts +38 -0
- package/dist/browser/react/use-segments.d.ts.map +1 -0
- package/dist/browser/react/use-segments.js +130 -0
- package/dist/browser/react/use-segments.js.map +1 -0
- package/dist/browser/request-controller.d.ts +26 -0
- package/dist/browser/request-controller.d.ts.map +1 -0
- package/dist/browser/request-controller.js +147 -0
- package/dist/browser/request-controller.js.map +1 -0
- package/dist/browser/rsc-router.d.ts +129 -0
- package/dist/browser/rsc-router.d.ts.map +1 -0
- package/dist/browser/rsc-router.js +195 -0
- package/dist/browser/rsc-router.js.map +1 -0
- package/dist/browser/scroll-restoration.d.ts +93 -0
- package/dist/browser/scroll-restoration.d.ts.map +1 -0
- package/dist/browser/scroll-restoration.js +321 -0
- package/dist/browser/scroll-restoration.js.map +1 -0
- package/dist/browser/segment-structure-assert.d.ts +17 -0
- package/dist/browser/segment-structure-assert.d.ts.map +1 -0
- package/dist/browser/segment-structure-assert.js +59 -0
- package/dist/browser/segment-structure-assert.js.map +1 -0
- package/dist/browser/server-action-bridge.d.ts +26 -0
- package/dist/browser/server-action-bridge.d.ts.map +1 -0
- package/dist/browser/server-action-bridge.js +668 -0
- package/dist/browser/server-action-bridge.js.map +1 -0
- package/dist/browser/shallow.d.ts +12 -0
- package/dist/browser/shallow.d.ts.map +1 -0
- package/dist/browser/shallow.js +34 -0
- package/dist/browser/shallow.js.map +1 -0
- package/dist/browser/types.d.ts +369 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
- package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-cli.test.js +237 -0
- package/dist/build/__tests__/generate-cli.test.js.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.js +119 -0
- package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.js +620 -0
- package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.js +308 -0
- package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +81 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +276 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/build/generate-route-types.d.ts +115 -0
- package/dist/build/generate-route-types.d.ts.map +1 -0
- package/dist/build/generate-route-types.js +740 -0
- package/dist/build/generate-route-types.js.map +1 -0
- package/dist/build/index.d.ts +21 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +21 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/route-trie.d.ts +71 -0
- package/dist/build/route-trie.d.ts.map +1 -0
- package/dist/build/route-trie.js +175 -0
- package/dist/build/route-trie.js.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.js +208 -0
- package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
- package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
- package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
- package/dist/cache/__tests__/document-cache.test.js +345 -0
- package/dist/cache/__tests__/document-cache.test.js.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
- package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
- package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-store.test.js +367 -0
- package/dist/cache/__tests__/memory-store.test.js.map +1 -0
- package/dist/cache/cache-scope.d.ts +102 -0
- package/dist/cache/cache-scope.d.ts.map +1 -0
- package/dist/cache/cache-scope.js +440 -0
- package/dist/cache/cache-scope.js.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
- package/dist/cache/cf/cf-cache-store.d.ts +165 -0
- package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
- package/dist/cache/cf/cf-cache-store.js +242 -0
- package/dist/cache/cf/cf-cache-store.js.map +1 -0
- package/dist/cache/cf/index.d.ts +14 -0
- package/dist/cache/cf/index.d.ts.map +1 -0
- package/dist/cache/cf/index.js +17 -0
- package/dist/cache/cf/index.js.map +1 -0
- package/dist/cache/document-cache.d.ts +64 -0
- package/dist/cache/document-cache.d.ts.map +1 -0
- package/dist/cache/document-cache.js +228 -0
- package/dist/cache/document-cache.js.map +1 -0
- package/dist/cache/index.d.ts +19 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-segment-store.d.ts +110 -0
- package/dist/cache/memory-segment-store.d.ts.map +1 -0
- package/dist/cache/memory-segment-store.js +117 -0
- package/dist/cache/memory-segment-store.js.map +1 -0
- package/dist/cache/memory-store.d.ts +41 -0
- package/dist/cache/memory-store.d.ts.map +1 -0
- package/dist/cache/memory-store.js +191 -0
- package/dist/cache/memory-store.js.map +1 -0
- package/dist/cache/types.d.ts +317 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +12 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client.d.ts +248 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +367 -0
- package/dist/client.js.map +1 -0
- package/dist/client.rsc.d.ts +26 -0
- package/dist/client.rsc.d.ts.map +1 -0
- package/dist/client.rsc.js +46 -0
- package/dist/client.rsc.js.map +1 -0
- package/dist/component-utils.d.ts +36 -0
- package/dist/component-utils.d.ts.map +1 -0
- package/dist/component-utils.js +61 -0
- package/dist/component-utils.js.map +1 -0
- package/dist/components/DefaultDocument.d.ts +13 -0
- package/dist/components/DefaultDocument.d.ts.map +1 -0
- package/dist/components/DefaultDocument.js +15 -0
- package/dist/components/DefaultDocument.js.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +157 -0
- package/dist/debug.js.map +1 -0
- package/dist/default-error-boundary.d.ts +11 -0
- package/dist/default-error-boundary.d.ts.map +1 -0
- package/dist/default-error-boundary.js +45 -0
- package/dist/default-error-boundary.js.map +1 -0
- package/dist/deps/browser.d.ts +2 -0
- package/dist/deps/browser.d.ts.map +1 -0
- package/dist/deps/browser.js +3 -0
- package/dist/deps/browser.js.map +1 -0
- package/dist/deps/html-stream-client.d.ts +2 -0
- package/dist/deps/html-stream-client.d.ts.map +1 -0
- package/dist/deps/html-stream-client.js +3 -0
- package/dist/deps/html-stream-client.js.map +1 -0
- package/dist/deps/html-stream-server.d.ts +2 -0
- package/dist/deps/html-stream-server.d.ts.map +1 -0
- package/dist/deps/html-stream-server.js +3 -0
- package/dist/deps/html-stream-server.js.map +1 -0
- package/dist/deps/rsc.d.ts +2 -0
- package/dist/deps/rsc.d.ts.map +1 -0
- package/dist/deps/rsc.js +4 -0
- package/dist/deps/rsc.js.map +1 -0
- package/dist/deps/ssr.d.ts +2 -0
- package/dist/deps/ssr.d.ts.map +1 -0
- package/dist/deps/ssr.js +3 -0
- package/dist/deps/ssr.js.map +1 -0
- package/dist/errors.d.ts +174 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +241 -0
- package/dist/errors.js.map +1 -0
- package/dist/handle.d.ts +78 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +82 -0
- package/dist/handle.js.map +1 -0
- package/dist/handles/MetaTags.d.ts +14 -0
- package/dist/handles/MetaTags.d.ts.map +1 -0
- package/dist/handles/MetaTags.js +136 -0
- package/dist/handles/MetaTags.js.map +1 -0
- package/dist/handles/index.d.ts +6 -0
- package/dist/handles/index.d.ts.map +1 -0
- package/dist/handles/index.js +6 -0
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/dist/href-context.d.ts +29 -0
- package/dist/href-context.d.ts.map +1 -0
- package/dist/href-context.js +21 -0
- package/dist/href-context.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.rsc.d.ts +32 -0
- package/dist/index.rsc.d.ts.map +1 -0
- package/dist/index.rsc.js +40 -0
- package/dist/index.rsc.js.map +1 -0
- package/dist/internal-debug.d.ts +2 -0
- package/dist/internal-debug.d.ts.map +1 -0
- package/dist/internal-debug.js +5 -0
- package/dist/internal-debug.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/loader.rsc.d.ts +19 -0
- package/dist/loader.rsc.d.ts.map +1 -0
- package/dist/loader.rsc.js +99 -0
- package/dist/loader.rsc.js.map +1 -0
- package/dist/network-error-thrower.d.ts +17 -0
- package/dist/network-error-thrower.d.ts.map +1 -0
- package/dist/network-error-thrower.js +14 -0
- package/dist/network-error-thrower.js.map +1 -0
- package/dist/outlet-context.d.ts +13 -0
- package/dist/outlet-context.d.ts.map +1 -0
- package/dist/outlet-context.js +3 -0
- package/dist/outlet-context.js.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.js +148 -0
- package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
- package/dist/prerender/param-hash.d.ts +16 -0
- package/dist/prerender/param-hash.d.ts.map +1 -0
- package/dist/prerender/param-hash.js +36 -0
- package/dist/prerender/param-hash.js.map +1 -0
- package/dist/prerender/store.d.ts +38 -0
- package/dist/prerender/store.d.ts.map +1 -0
- package/dist/prerender/store.js +61 -0
- package/dist/prerender/store.js.map +1 -0
- package/dist/prerender.d.ts +66 -0
- package/dist/prerender.d.ts.map +1 -0
- package/dist/prerender.js +57 -0
- package/dist/prerender.js.map +1 -0
- package/dist/reverse.d.ts +196 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +78 -0
- package/dist/reverse.js.map +1 -0
- package/dist/root-error-boundary.d.ts +33 -0
- package/dist/root-error-boundary.d.ts.map +1 -0
- package/dist/root-error-boundary.js +165 -0
- package/dist/root-error-boundary.js.map +1 -0
- package/dist/route-content-wrapper.d.ts +46 -0
- package/dist/route-content-wrapper.d.ts.map +1 -0
- package/dist/route-content-wrapper.js +77 -0
- package/dist/route-content-wrapper.js.map +1 -0
- package/dist/route-definition.d.ts +421 -0
- package/dist/route-definition.d.ts.map +1 -0
- package/dist/route-definition.js +868 -0
- package/dist/route-definition.js.map +1 -0
- package/dist/route-map-builder.d.ts +155 -0
- package/dist/route-map-builder.d.ts.map +1 -0
- package/dist/route-map-builder.js +237 -0
- package/dist/route-map-builder.js.map +1 -0
- package/dist/route-types.d.ts +165 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +7 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router/__tests__/handler-context.test.d.ts +2 -0
- package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/handler-context.test.js +65 -0
- package/dist/router/__tests__/handler-context.test.js.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
- package/dist/router/__tests__/match-context.test.d.ts +2 -0
- package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-context.test.js +92 -0
- package/dist/router/__tests__/match-context.test.js.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.js +417 -0
- package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
- package/dist/router/__tests__/match-result.test.d.ts +2 -0
- package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-result.test.js +457 -0
- package/dist/router/__tests__/match-result.test.js.map +1 -0
- package/dist/router/__tests__/on-error.test.d.ts +2 -0
- package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
- package/dist/router/__tests__/on-error.test.js +678 -0
- package/dist/router/__tests__/on-error.test.js.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.js +629 -0
- package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
- package/dist/router/error-handling.d.ts +77 -0
- package/dist/router/error-handling.d.ts.map +1 -0
- package/dist/router/error-handling.js +202 -0
- package/dist/router/error-handling.js.map +1 -0
- package/dist/router/handler-context.d.ts +20 -0
- package/dist/router/handler-context.d.ts.map +1 -0
- package/dist/router/handler-context.js +198 -0
- package/dist/router/handler-context.js.map +1 -0
- package/dist/router/intercept-resolution.d.ts +66 -0
- package/dist/router/intercept-resolution.d.ts.map +1 -0
- package/dist/router/intercept-resolution.js +246 -0
- package/dist/router/intercept-resolution.js.map +1 -0
- package/dist/router/loader-resolution.d.ts +64 -0
- package/dist/router/loader-resolution.d.ts.map +1 -0
- package/dist/router/loader-resolution.js +284 -0
- package/dist/router/loader-resolution.js.map +1 -0
- package/dist/router/logging.d.ts +15 -0
- package/dist/router/logging.d.ts.map +1 -0
- package/dist/router/logging.js +99 -0
- package/dist/router/logging.js.map +1 -0
- package/dist/router/manifest.d.ts +22 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +181 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/match-api.d.ts +35 -0
- package/dist/router/match-api.d.ts.map +1 -0
- package/dist/router/match-api.js +406 -0
- package/dist/router/match-api.js.map +1 -0
- package/dist/router/match-context.d.ts +206 -0
- package/dist/router/match-context.d.ts.map +1 -0
- package/dist/router/match-context.js +17 -0
- package/dist/router/match-context.js.map +1 -0
- package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
- package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
- package/dist/router/match-middleware/background-revalidation.js +75 -0
- package/dist/router/match-middleware/background-revalidation.js.map +1 -0
- package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
- package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-lookup.js +257 -0
- package/dist/router/match-middleware/cache-lookup.js.map +1 -0
- package/dist/router/match-middleware/cache-store.d.ts +113 -0
- package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-store.js +108 -0
- package/dist/router/match-middleware/cache-store.js.map +1 -0
- package/dist/router/match-middleware/index.d.ts +81 -0
- package/dist/router/match-middleware/index.d.ts.map +1 -0
- package/dist/router/match-middleware/index.js +80 -0
- package/dist/router/match-middleware/index.js.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.js +134 -0
- package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
- package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
- package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/segment-resolution.js +53 -0
- package/dist/router/match-middleware/segment-resolution.js.map +1 -0
- package/dist/router/match-pipelines.d.ts +147 -0
- package/dist/router/match-pipelines.d.ts.map +1 -0
- package/dist/router/match-pipelines.js +82 -0
- package/dist/router/match-pipelines.js.map +1 -0
- package/dist/router/match-result.d.ts +126 -0
- package/dist/router/match-result.d.ts.map +1 -0
- package/dist/router/match-result.js +93 -0
- package/dist/router/match-result.js.map +1 -0
- package/dist/router/metrics.d.ts +20 -0
- package/dist/router/metrics.d.ts.map +1 -0
- package/dist/router/metrics.js +47 -0
- package/dist/router/metrics.js.map +1 -0
- package/dist/router/middleware.d.ts +249 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +434 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/middleware.test.d.ts +2 -0
- package/dist/router/middleware.test.d.ts.map +1 -0
- package/dist/router/middleware.test.js +816 -0
- package/dist/router/middleware.test.js.map +1 -0
- package/dist/router/pattern-matching.d.ts +149 -0
- package/dist/router/pattern-matching.d.ts.map +1 -0
- package/dist/router/pattern-matching.js +349 -0
- package/dist/router/pattern-matching.js.map +1 -0
- package/dist/router/revalidation.d.ts +44 -0
- package/dist/router/revalidation.d.ts.map +1 -0
- package/dist/router/revalidation.js +147 -0
- package/dist/router/revalidation.js.map +1 -0
- package/dist/router/router-context.d.ts +135 -0
- package/dist/router/router-context.d.ts.map +1 -0
- package/dist/router/router-context.js +36 -0
- package/dist/router/router-context.js.map +1 -0
- package/dist/router/segment-resolution.d.ts +127 -0
- package/dist/router/segment-resolution.d.ts.map +1 -0
- package/dist/router/segment-resolution.js +919 -0
- package/dist/router/segment-resolution.js.map +1 -0
- package/dist/router/trie-matching.d.ts +40 -0
- package/dist/router/trie-matching.d.ts.map +1 -0
- package/dist/router/trie-matching.js +127 -0
- package/dist/router/trie-matching.js.map +1 -0
- package/dist/router/types.d.ts +136 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router.d.ts +753 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.gen.d.ts +6 -0
- package/dist/router.gen.d.ts.map +1 -0
- package/dist/router.gen.js +6 -0
- package/dist/router.gen.js.map +1 -0
- package/dist/router.js +1304 -0
- package/dist/router.js.map +1 -0
- package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
- package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/rsc/__tests__/helpers.test.js +140 -0
- package/dist/rsc/__tests__/helpers.test.js.map +1 -0
- package/dist/rsc/handler.d.ts +45 -0
- package/dist/rsc/handler.d.ts.map +1 -0
- package/dist/rsc/handler.js +1172 -0
- package/dist/rsc/handler.js.map +1 -0
- package/dist/rsc/helpers.d.ts +16 -0
- package/dist/rsc/helpers.d.ts.map +1 -0
- package/dist/rsc/helpers.js +55 -0
- package/dist/rsc/helpers.js.map +1 -0
- package/dist/rsc/index.d.ts +22 -0
- package/dist/rsc/index.d.ts.map +1 -0
- package/dist/rsc/index.js +23 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/nonce.d.ts +9 -0
- package/dist/rsc/nonce.d.ts.map +1 -0
- package/dist/rsc/nonce.js +18 -0
- package/dist/rsc/nonce.js.map +1 -0
- package/dist/rsc/types.d.ts +206 -0
- package/dist/rsc/types.d.ts.map +1 -0
- package/dist/rsc/types.js +8 -0
- package/dist/rsc/types.js.map +1 -0
- package/dist/search-params.d.ts +103 -0
- package/dist/search-params.d.ts.map +1 -0
- package/dist/search-params.js +74 -0
- package/dist/search-params.js.map +1 -0
- package/dist/segment-system.d.ts +75 -0
- package/dist/segment-system.d.ts.map +1 -0
- package/dist/segment-system.js +336 -0
- package/dist/segment-system.js.map +1 -0
- package/dist/server/context.d.ts +245 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +197 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fetchable-loader-store.d.ts +18 -0
- package/dist/server/fetchable-loader-store.d.ts.map +1 -0
- package/dist/server/fetchable-loader-store.js +18 -0
- package/dist/server/fetchable-loader-store.js.map +1 -0
- package/dist/server/handle-store.d.ts +85 -0
- package/dist/server/handle-store.d.ts.map +1 -0
- package/dist/server/handle-store.js +142 -0
- package/dist/server/handle-store.js.map +1 -0
- package/dist/server/loader-registry.d.ts +55 -0
- package/dist/server/loader-registry.d.ts.map +1 -0
- package/dist/server/loader-registry.js +132 -0
- package/dist/server/loader-registry.js.map +1 -0
- package/dist/server/request-context.d.ts +226 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +290 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/root-layout.d.ts +4 -0
- package/dist/server/root-layout.d.ts.map +1 -0
- package/dist/server/root-layout.js +5 -0
- package/dist/server/root-layout.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
- package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
- package/dist/ssr/index.d.ts +98 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +158 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/static-handler.d.ts +50 -0
- package/dist/static-handler.d.ts.map +1 -0
- package/dist/static-handler.gen.d.ts +5 -0
- package/dist/static-handler.gen.d.ts.map +1 -0
- package/dist/static-handler.gen.js +5 -0
- package/dist/static-handler.gen.js.map +1 -0
- package/dist/static-handler.js +29 -0
- package/dist/static-handler.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +20 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +240 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/ThemeScript.d.ts +48 -0
- package/dist/theme/ThemeScript.d.ts.map +1 -0
- package/dist/theme/ThemeScript.js +13 -0
- package/dist/theme/ThemeScript.js.map +1 -0
- package/dist/theme/__tests__/theme.test.d.ts +2 -0
- package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
- package/dist/theme/__tests__/theme.test.js +103 -0
- package/dist/theme/__tests__/theme.test.js.map +1 -0
- package/dist/theme/constants.d.ts +29 -0
- package/dist/theme/constants.d.ts.map +1 -0
- package/dist/theme/constants.js +48 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +31 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +36 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-context.d.ts +40 -0
- package/dist/theme/theme-context.d.ts.map +1 -0
- package/dist/theme/theme-context.js +60 -0
- package/dist/theme/theme-context.js.map +1 -0
- package/dist/theme/theme-script.d.ts +27 -0
- package/dist/theme/theme-script.d.ts.map +1 -0
- package/dist/theme/theme-script.js +147 -0
- package/dist/theme/theme-script.js.map +1 -0
- package/dist/theme/types.d.ts +163 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +11 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/theme/use-theme.d.ts +12 -0
- package/dist/theme/use-theme.d.ts.map +1 -0
- package/dist/theme/use-theme.js +40 -0
- package/dist/theme/use-theme.js.map +1 -0
- package/dist/types/client-urls/server-projection.d.ts +4 -4
- package/dist/types/client-urls/types.d.ts +13 -12
- package/dist/types/outlet-context.d.ts +9 -0
- package/dist/types/outlet-provider.d.ts +2 -1
- package/dist/types/route-content-wrapper.d.ts +4 -1
- package/dist/types/route-definition/helpers-types.d.ts +6 -5
- package/dist/types/router/segment-resolution/loader-mask.d.ts +1 -1
- package/dist/types/rsc/nonce.d.ts +10 -0
- package/dist/types/rsc/shell-capture.d.ts +9 -0
- package/dist/types/rsc/types.d.ts +14 -2
- package/dist/types/server/context.d.ts +1 -1
- package/dist/types/server/request-context.d.ts +1 -1
- package/dist/types/ssr/index.d.ts +34 -0
- package/dist/types/ssr/ssr-root.d.ts +21 -0
- package/dist/types/ssr-suspension-warning.d.ts +20 -0
- package/dist/types/types/loader-types.d.ts +28 -22
- package/dist/types/types/segments.d.ts +17 -0
- package/dist/types/urls/path-helper-types.d.ts +8 -7
- package/dist/types/vite/discovery/state.d.ts +6 -0
- package/dist/types/vite/plugin-types.d.ts +27 -0
- package/dist/types/vite/plugins/virtual-entries.d.ts +1 -1
- package/dist/types/vite/utils/shared-utils.d.ts +1 -0
- package/dist/types.d.ts +1479 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/urls.d.ts +441 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.gen.d.ts +8 -0
- package/dist/urls.gen.d.ts.map +1 -0
- package/dist/urls.gen.js +8 -0
- package/dist/urls.gen.js.map +1 -0
- package/dist/urls.js +443 -0
- package/dist/urls.js.map +1 -0
- package/dist/use-loader.d.ts +127 -0
- package/dist/use-loader.d.ts.map +1 -0
- package/dist/use-loader.js +237 -0
- package/dist/use-loader.js.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
- package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.js +39 -0
- package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
- package/dist/vite/ast-handler-extract.d.ts +49 -0
- package/dist/vite/ast-handler-extract.d.ts.map +1 -0
- package/dist/vite/ast-handler-extract.js +249 -0
- package/dist/vite/ast-handler-extract.js.map +1 -0
- package/dist/vite/expose-action-id.d.ts +19 -0
- package/dist/vite/expose-action-id.d.ts.map +1 -0
- package/dist/vite/expose-action-id.js +250 -0
- package/dist/vite/expose-action-id.js.map +1 -0
- package/dist/vite/expose-id-utils.d.ts +69 -0
- package/dist/vite/expose-id-utils.d.ts.map +1 -0
- package/dist/vite/expose-id-utils.js +289 -0
- package/dist/vite/expose-id-utils.js.map +1 -0
- package/dist/vite/expose-internal-ids.d.ts +22 -0
- package/dist/vite/expose-internal-ids.d.ts.map +1 -0
- package/dist/vite/expose-internal-ids.js +886 -0
- package/dist/vite/expose-internal-ids.js.map +1 -0
- package/dist/vite/index.d.ts +149 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +58 -26
- package/dist/vite/index.js.bak +5448 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/index.named-routes.gen.ts +103 -0
- package/dist/vite/package-resolution.d.ts +43 -0
- package/dist/vite/package-resolution.d.ts.map +1 -0
- package/dist/vite/package-resolution.js +112 -0
- package/dist/vite/package-resolution.js.map +1 -0
- package/dist/vite/virtual-entries.d.ts +25 -0
- package/dist/vite/virtual-entries.d.ts.map +1 -0
- package/dist/vite/virtual-entries.js +110 -0
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +1 -1
- package/skills/breadcrumbs/SKILL.md +2 -2
- package/skills/catalog.json +2 -2
- package/skills/client-urls/SKILL.md +9 -8
- package/skills/comparison/references/framework-comparison.md +2 -2
- package/skills/hooks/data.md +1 -1
- package/skills/hooks/handle-and-actions.md +1 -1
- package/skills/loader/SKILL.md +46 -30
- package/skills/migrate-nextjs/SKILL.md +3 -3
- package/skills/migrate-react-router/component-migration.md +1 -1
- package/skills/migrate-react-router/data-and-actions.md +1 -1
- package/skills/migrate-react-router/route-mapping.md +1 -1
- package/skills/parallel/SKILL.md +1 -1
- package/skills/ppr/SKILL.md +1 -1
- package/skills/rango/SKILL.md +20 -20
- package/skills/router-setup/SKILL.md +1 -1
- package/skills/scripts/SKILL.md +1 -1
- package/skills/shell-manifest/SKILL.md +1 -1
- package/src/browser/merge-segment-loaders.ts +4 -0
- package/src/browser/react/Link.tsx +27 -4
- package/src/client-urls/client-urls.ts +12 -9
- package/src/client-urls/server-projection.ts +6 -6
- package/src/client-urls/types.ts +13 -12
- package/src/client.tsx +2 -0
- package/src/outlet-context.ts +9 -0
- package/src/outlet-provider.tsx +4 -0
- package/src/route-content-wrapper.tsx +7 -0
- package/src/route-definition/dsl-helpers.ts +7 -3
- package/src/route-definition/helpers-types.ts +6 -5
- package/src/router/loader-resolution.ts +3 -3
- package/src/router/segment-resolution/fresh.ts +50 -19
- package/src/router/segment-resolution/loader-cache.ts +1 -1
- package/src/router/segment-resolution/loader-mask.ts +1 -1
- package/src/router.ts +7 -2
- package/src/rsc/handler.ts +4 -4
- package/src/rsc/nonce.ts +16 -0
- package/src/rsc/rsc-rendering.ts +10 -0
- package/src/rsc/shell-capture.ts +49 -6
- package/src/rsc/ssr-setup.ts +4 -0
- package/src/rsc/types.ts +24 -4
- package/src/segment-system.tsx +57 -12
- package/src/server/context.ts +1 -1
- package/src/server/request-context.ts +1 -1
- package/src/ssr/index.tsx +75 -3
- package/src/ssr/ssr-root.tsx +67 -23
- package/src/ssr-suspension-warning.ts +68 -0
- package/src/types/loader-types.ts +25 -19
- package/src/types/segments.ts +17 -0
- package/src/urls/path-helper-types.ts +8 -7
- package/src/use-loader.tsx +24 -1
- package/src/vite/discovery/shell-prerender-phase.ts +5 -0
- package/src/vite/discovery/state.ts +6 -0
- package/src/vite/plugin-types.ts +28 -0
- package/src/vite/plugins/virtual-entries.ts +26 -3
- package/src/vite/rango.ts +3 -0
- package/src/vite/router-discovery.ts +31 -19
- package/src/vite/utils/shared-utils.ts +8 -2
package/src/segment-system.tsx
CHANGED
|
@@ -179,6 +179,30 @@ function wrapDefaultOutletContent(
|
|
|
179
179
|
return createViewTransitionBoundary(transition, content);
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
+
/**
|
|
183
|
+
* Per-loader stream map for read-site suspension. { ssr: false } loaders were
|
|
184
|
+
* awaited before flush (fresh.ts), so deliver the SETTLED result, not the
|
|
185
|
+
* settled promise: the read site decodes synchronously instead of use()ing a
|
|
186
|
+
* Flight chunk whose fulfilled-at-read-time status is a scheduling race the
|
|
187
|
+
* SSR-completeness contract must not depend on. Unflagged siblings keep the
|
|
188
|
+
* promise (deliberate streaming). Flagged ids are collected as input for the
|
|
189
|
+
* dev SSR-suspension diagnostic (ssr-suspension-warning.ts).
|
|
190
|
+
*/
|
|
191
|
+
async function buildLoaderStreams(loaders: ResolvedSegment[]): Promise<{
|
|
192
|
+
streams: Record<string, unknown>;
|
|
193
|
+
awaitedIds: string[] | undefined;
|
|
194
|
+
}> {
|
|
195
|
+
const streams: Record<string, unknown> = {};
|
|
196
|
+
let awaitedIds: string[] | undefined;
|
|
197
|
+
for (const l of loaders) {
|
|
198
|
+
streams[l.loaderId!] = l.awaitBeforeFlush
|
|
199
|
+
? await l.loaderData
|
|
200
|
+
: l.loaderData;
|
|
201
|
+
if (l.awaitBeforeFlush) (awaitedIds ??= []).push(l.loaderId!);
|
|
202
|
+
}
|
|
203
|
+
return { streams, awaitedIds };
|
|
204
|
+
}
|
|
205
|
+
|
|
182
206
|
/**
|
|
183
207
|
* Render segments into a React tree with proper layout nesting
|
|
184
208
|
*
|
|
@@ -477,6 +501,7 @@ export async function renderSegments(
|
|
|
477
501
|
// microtask suspension is what makes SSR emit the loading() fallback
|
|
478
502
|
// for content-suspending routes (segment-loader-promise.ts).
|
|
479
503
|
let boundaryLoaderStreams: Record<string, unknown> | undefined;
|
|
504
|
+
let boundaryAwaitedLoaderIds: string[] | undefined;
|
|
480
505
|
if (forceAwait || isAction) {
|
|
481
506
|
const awaitStart = segDebug ? performance.now() : 0;
|
|
482
507
|
boundaryLoaderData = await loaderDataPromise;
|
|
@@ -487,10 +512,10 @@ export async function renderSegments(
|
|
|
487
512
|
});
|
|
488
513
|
}
|
|
489
514
|
} else if (loaderEntries.length > 0) {
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
}
|
|
515
|
+
({
|
|
516
|
+
streams: boundaryLoaderStreams,
|
|
517
|
+
awaitedIds: boundaryAwaitedLoaderIds,
|
|
518
|
+
} = await buildLoaderStreams(loaderEntries));
|
|
494
519
|
if (segDebug) {
|
|
495
520
|
segDebugLog(
|
|
496
521
|
`segment ${id}: per-loader streams via LoaderBoundary (read-site suspense)`,
|
|
@@ -503,6 +528,7 @@ export async function renderSegments(
|
|
|
503
528
|
loaderDataPromise: boundaryLoaderData,
|
|
504
529
|
loaderIds,
|
|
505
530
|
loaderStreams: boundaryLoaderStreams,
|
|
531
|
+
awaitedLoaderIds: boundaryAwaitedLoaderIds,
|
|
506
532
|
fallback: loading,
|
|
507
533
|
outletKey: key,
|
|
508
534
|
outletContent,
|
|
@@ -537,6 +563,7 @@ export async function renderSegments(
|
|
|
537
563
|
let loaderData: Record<string, any> = {};
|
|
538
564
|
let errorFallback: ReactNode = null;
|
|
539
565
|
let loaderStreams: Record<string, unknown> | undefined;
|
|
566
|
+
let awaitedLoaderIds: string[] | undefined;
|
|
540
567
|
if (forceAwait || isAction) {
|
|
541
568
|
const layoutAwaitStart = segDebug ? performance.now() : 0;
|
|
542
569
|
const resolvedData = await buildLoaderPromise(layoutLoaders);
|
|
@@ -560,10 +587,8 @@ export async function renderSegments(
|
|
|
560
587
|
}
|
|
561
588
|
}
|
|
562
589
|
} else if (layoutLoaders.length > 0) {
|
|
563
|
-
loaderStreams
|
|
564
|
-
|
|
565
|
-
loaderStreams[l.loaderId!] = l.loaderData;
|
|
566
|
-
}
|
|
590
|
+
({ streams: loaderStreams, awaitedIds: awaitedLoaderIds } =
|
|
591
|
+
await buildLoaderStreams(layoutLoaders));
|
|
567
592
|
if (segDebug) {
|
|
568
593
|
segDebugLog(
|
|
569
594
|
`segment ${id}: layout loaders streaming to read sites (no loading())`,
|
|
@@ -599,12 +624,29 @@ export async function renderSegments(
|
|
|
599
624
|
|
|
600
625
|
p.loaderIds = ownedLoaders.map((l) => l.loaderId!);
|
|
601
626
|
const aggregated = getMemoizedLoaderPromise(ownedLoaders);
|
|
602
|
-
|
|
627
|
+
// Parallel slots must NOT take the loaderStreams path.
|
|
628
|
+
// LoaderResolver skips use(aggregate) when streams are set, so
|
|
629
|
+
// the already-rendered slot handler commits immediately. That
|
|
630
|
+
// bakes a live-lane hole into the shell (semantic-matrix PPR3 /
|
|
631
|
+
// shell-cache slot-use: masked loaderData is what pins
|
|
632
|
+
// "srv badge pending...") and, on reuse, leaves a stale stream
|
|
633
|
+
// map that ignores the post-action aggregate (mini @cart).
|
|
634
|
+
// Flagged (ssr:false) delivery still holds: when every owned
|
|
635
|
+
// loader paid the pre-flush await, settle the aggregate so
|
|
636
|
+
// LoaderResolver decodes the array without a Flight-chunk use().
|
|
637
|
+
const settleParallelAggregate =
|
|
638
|
+
forceAwait ||
|
|
639
|
+
isAction ||
|
|
640
|
+
ownedLoaders.every((l) => l.awaitBeforeFlush === true);
|
|
641
|
+
if (settleParallelAggregate) {
|
|
603
642
|
const parallelAwaitStart = segDebug ? performance.now() : 0;
|
|
604
|
-
p.loaderDataPromise =
|
|
643
|
+
p.loaderDataPromise =
|
|
644
|
+
aggregated instanceof Promise ? await aggregated : aggregated;
|
|
645
|
+
p.loaderStreams = undefined;
|
|
646
|
+
p.awaitedLoaderIds = undefined;
|
|
605
647
|
if (segDebug) {
|
|
606
648
|
segDebugLog(
|
|
607
|
-
`segment ${id}: parallel ${p.id} loaders awaited (forceAwait/action)`,
|
|
649
|
+
`segment ${id}: parallel ${p.id} loaders awaited (forceAwait/action/ssr:false)`,
|
|
608
650
|
{
|
|
609
651
|
loaderIds: p.loaderIds,
|
|
610
652
|
ms: Math.round(performance.now() - parallelAwaitStart),
|
|
@@ -613,9 +655,11 @@ export async function renderSegments(
|
|
|
613
655
|
}
|
|
614
656
|
} else {
|
|
615
657
|
p.loaderDataPromise = aggregated;
|
|
658
|
+
p.loaderStreams = undefined;
|
|
659
|
+
p.awaitedLoaderIds = undefined;
|
|
616
660
|
if (segDebug) {
|
|
617
661
|
segDebugLog(
|
|
618
|
-
`segment ${id}: parallel ${p.id} loaders
|
|
662
|
+
`segment ${id}: parallel ${p.id} loaders via aggregate (suspense)`,
|
|
619
663
|
{ loaderIds: p.loaderIds },
|
|
620
664
|
);
|
|
621
665
|
}
|
|
@@ -630,6 +674,7 @@ export async function renderSegments(
|
|
|
630
674
|
parallel: node.parallel,
|
|
631
675
|
loaderData: Object.keys(loaderData).length > 0 ? loaderData : undefined,
|
|
632
676
|
loaderStreams,
|
|
677
|
+
awaitedLoaderIds,
|
|
633
678
|
pending: outletPending,
|
|
634
679
|
children: errorFallback ?? nodeContent,
|
|
635
680
|
});
|
package/src/server/context.ts
CHANGED
|
@@ -108,7 +108,7 @@ export type LoaderEntry = {
|
|
|
108
108
|
cache?: EntryCacheConfig;
|
|
109
109
|
/**
|
|
110
110
|
* Document renders await this loader before segment resolution returns
|
|
111
|
-
* (loader(Def, {
|
|
111
|
+
* (loader(Def, { ssr: false })), so its data, handle pushes, and
|
|
112
112
|
* thrown notFound()/redirect() deterministically precede first flush.
|
|
113
113
|
* Resolved at DSL-evaluation time from ctx.isSSR — entries are cached
|
|
114
114
|
* per-isSSR (router/manifest.ts cache key), so the flag is already
|
|
@@ -620,7 +620,7 @@ export interface RequestContext<
|
|
|
620
620
|
|
|
621
621
|
/**
|
|
622
622
|
* @internal Loader IDs ($$id) whose entries carry `awaitBeforeFlush`
|
|
623
|
-
* (loader(Def, {
|
|
623
|
+
* (loader(Def, { ssr: false })): segment resolution awaits these
|
|
624
624
|
* before returning, so the render barrier cannot resolve until they settle.
|
|
625
625
|
* rendered() checks this set to fail fast — a flagged loader awaiting the
|
|
626
626
|
* barrier is a guaranteed cycle, not a race. Registered by resolveLoaders
|
package/src/ssr/index.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { createSsrRootComponent } from "./ssr-root.js";
|
|
2
|
+
import { createSsrRootComponent, deserializeSsrPayload } from "./ssr-root.js";
|
|
3
3
|
import { injectRSCPayloadEager } from "./inject-rsc-eager.js";
|
|
4
4
|
import { runWithPreinitNonce } from "./preinit-client-references.js";
|
|
5
5
|
import { SHELL_CAPTURE_MAX_WAIT_MS } from "../rsc/shell-capture-constants.js";
|
|
@@ -26,6 +26,7 @@ interface RenderToReadableStreamOptions {
|
|
|
26
26
|
bootstrapModules?: string[];
|
|
27
27
|
nonce?: string;
|
|
28
28
|
formState?: unknown;
|
|
29
|
+
progressiveChunkSize?: number;
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
/**
|
|
@@ -43,6 +44,7 @@ interface PrerenderOptions {
|
|
|
43
44
|
bootstrapScriptContent?: string;
|
|
44
45
|
bootstrapModules?: string[];
|
|
45
46
|
onError?: (error: unknown) => void;
|
|
47
|
+
progressiveChunkSize?: number;
|
|
46
48
|
}
|
|
47
49
|
|
|
48
50
|
/**
|
|
@@ -114,6 +116,14 @@ export interface SSRRenderOptions {
|
|
|
114
116
|
* only (runtime captures own the search variants, seeded per key).
|
|
115
117
|
*/
|
|
116
118
|
search?: string;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* The live request's origin, seeding the SSR store location so
|
|
122
|
+
* origin-dependent markup (Link's data-external) agrees with the
|
|
123
|
+
* browser's window.location across hydration. Absent on the build-time
|
|
124
|
+
* prerender pass (host-agnostic bare captures).
|
|
125
|
+
*/
|
|
126
|
+
origin?: string;
|
|
117
127
|
}
|
|
118
128
|
|
|
119
129
|
/**
|
|
@@ -160,6 +170,23 @@ export interface SSRDependencies<TEnv = unknown> {
|
|
|
160
170
|
*/
|
|
161
171
|
headScripts?: HeadScriptsOption;
|
|
162
172
|
|
|
173
|
+
/**
|
|
174
|
+
* Fizz `progressiveChunkSize`, forwarded verbatim to renderToReadableStream
|
|
175
|
+
* (live SSR) and prerender (shell capture); resume() inherits the capture
|
|
176
|
+
* value from the postponed state. The generated virtual SSR entry threads
|
|
177
|
+
* the `rango({ progressiveChunkSize })` plugin option here (canonical docs
|
|
178
|
+
* on `RangoBaseOptions.progressiveChunkSize` in vite/plugin-types.ts).
|
|
179
|
+
*
|
|
180
|
+
* When UNSET, createSSRHandler auto-raises to Number.MAX_SAFE_INTEGER for
|
|
181
|
+
* document renders whose matched chain has a `loader(Def, { ssr: false })`
|
|
182
|
+
* entry (payload segments carry `awaitBeforeFlush`): the loader was awaited
|
|
183
|
+
* before first flush precisely so its content ships in-place, and React
|
|
184
|
+
* 19.2's Fizz would otherwise move any completed boundary over ~500 bytes
|
|
185
|
+
* to an end-of-stream `<div hidden>` + $RC reveal once the shell saturates
|
|
186
|
+
* the default 12800 budget. An explicit value disables the auto-raise.
|
|
187
|
+
*/
|
|
188
|
+
progressiveChunkSize?: number;
|
|
189
|
+
|
|
163
190
|
/**
|
|
164
191
|
* prerender from react-dom/static.edge. Optional; required only by
|
|
165
192
|
* {@link createShellCaptureHandler} for PPR shell capture.
|
|
@@ -363,6 +390,13 @@ interface ShellCaptureOptions {
|
|
|
363
390
|
* the shell's own key. MUST equal the resume pass's seed for the same key.
|
|
364
391
|
*/
|
|
365
392
|
search?: string;
|
|
393
|
+
/**
|
|
394
|
+
* The capture request's origin. Shell keys are host-scoped, so the resume
|
|
395
|
+
* pass's request agrees modulo protocol drift; seeding it keeps
|
|
396
|
+
* origin-dependent static markup (Link's data-external) identical across
|
|
397
|
+
* capture, resume, and browser hydration.
|
|
398
|
+
*/
|
|
399
|
+
origin?: string;
|
|
366
400
|
}
|
|
367
401
|
|
|
368
402
|
/**
|
|
@@ -391,6 +425,8 @@ interface ShellResumeOptions {
|
|
|
391
425
|
* postponed holes.
|
|
392
426
|
*/
|
|
393
427
|
search?: string;
|
|
428
|
+
/** The HIT request's origin — same host as the capture's (key-scoped). */
|
|
429
|
+
origin?: string;
|
|
394
430
|
}
|
|
395
431
|
|
|
396
432
|
/**
|
|
@@ -472,7 +508,7 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
|
|
|
472
508
|
rscStream: ReadableStream<Uint8Array>,
|
|
473
509
|
options?: SSRRenderOptions,
|
|
474
510
|
): Promise<ReadableStream<Uint8Array>> {
|
|
475
|
-
const { nonce, formState, streamMode, search } = options ?? {};
|
|
511
|
+
const { nonce, formState, streamMode, search, origin } = options ?? {};
|
|
476
512
|
|
|
477
513
|
try {
|
|
478
514
|
// Tee the stream:
|
|
@@ -480,9 +516,21 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
|
|
|
480
516
|
// - rscStream2: For browser hydration (inject as __FLIGHT_DATA__)
|
|
481
517
|
const [rscStream1, rscStream2] = rscStream.tee();
|
|
482
518
|
|
|
519
|
+
// Deserialization starts here (not lazily on SsrRoot's first render) so
|
|
520
|
+
// the auto-raise below can read payload metadata before the fizz call.
|
|
521
|
+
// The parallel no-op catch keeps a payload rejection off the
|
|
522
|
+
// unhandledRejection path if fizz errors before consuming the promise;
|
|
523
|
+
// SsrRoot's React.use() on the SAME promise still observes the rejection.
|
|
524
|
+
const payload = deserializeSsrPayload(
|
|
525
|
+
createFromReadableStream,
|
|
526
|
+
rscStream1,
|
|
527
|
+
);
|
|
528
|
+
payload.catch(() => {});
|
|
529
|
+
|
|
483
530
|
const SsrRoot = createSsrRootComponent({
|
|
484
531
|
createFromReadableStream,
|
|
485
532
|
rscStream: rscStream1,
|
|
533
|
+
payload,
|
|
486
534
|
nonce,
|
|
487
535
|
// Live fizz seeds the request's RAW search. The shell capture pass
|
|
488
536
|
// below and its resume twin seed the SHELL KEY's search instead
|
|
@@ -490,11 +538,24 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
|
|
|
490
538
|
// same key => same seed, so the resume tree matches the captured
|
|
491
539
|
// tree while static-part search reads render what the key names.
|
|
492
540
|
search,
|
|
541
|
+
origin,
|
|
493
542
|
});
|
|
494
543
|
|
|
495
544
|
// Get bootstrap script content
|
|
496
545
|
const bootstrapScriptContent = await loadBootstrapScriptContent();
|
|
497
546
|
|
|
547
|
+
// ssr:false auto-raise (see SSRDependencies.progressiveChunkSize).
|
|
548
|
+
// Awaiting the payload here is latency-neutral: fizz cannot emit even
|
|
549
|
+
// <html> until this same promise settles. A rejection lands in the
|
|
550
|
+
// catch below — the same reportRenderError path a shell error takes.
|
|
551
|
+
let progressiveChunkSize = deps.progressiveChunkSize;
|
|
552
|
+
if (progressiveChunkSize === undefined) {
|
|
553
|
+
const resolved = await payload;
|
|
554
|
+
if (resolved.metadata?.segments?.some((s) => s.awaitBeforeFlush)) {
|
|
555
|
+
progressiveChunkSize = Number.MAX_SAFE_INTEGER;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
|
|
498
559
|
// Render React tree to HTML stream
|
|
499
560
|
// Pass formState for useActionState progressive enhancement if provided
|
|
500
561
|
// Pass nonce for CSP if provided. runWithPreinitNonce makes the same
|
|
@@ -505,6 +566,7 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
|
|
|
505
566
|
...resolveBootstrapOptions(bootstrapScriptContent, deps.headScripts),
|
|
506
567
|
formState,
|
|
507
568
|
nonce,
|
|
569
|
+
...(progressiveChunkSize !== undefined && { progressiveChunkSize }),
|
|
508
570
|
}),
|
|
509
571
|
);
|
|
510
572
|
|
|
@@ -594,6 +656,7 @@ export function createShellCaptureHandler<TEnv = unknown>(
|
|
|
594
656
|
// The shell key's own search: static-part search reads render what
|
|
595
657
|
// the key names, and the resume pass seeds the identical string.
|
|
596
658
|
search: opts.search,
|
|
659
|
+
origin: opts.origin,
|
|
597
660
|
});
|
|
598
661
|
|
|
599
662
|
// Bootstrap load raced against the deadline. A load that never resolves
|
|
@@ -627,6 +690,14 @@ export function createShellCaptureHandler<TEnv = unknown>(
|
|
|
627
690
|
const prerenderPromise = prerender(<SsrRoot />, {
|
|
628
691
|
signal: controller.signal,
|
|
629
692
|
...resolveBootstrapOptions(bootstrapScriptContent, deps.headScripts),
|
|
693
|
+
// Explicit option only — the ssr:false auto-raise is live-SSR scoped
|
|
694
|
+
// (RangoBaseOptions.progressiveChunkSize documents the contract); the
|
|
695
|
+
// capture handler starts prerender without deserializing the payload,
|
|
696
|
+
// so segment metadata is not read here. The captured value rides the
|
|
697
|
+
// postponed state into every later resume().
|
|
698
|
+
...(deps.progressiveChunkSize !== undefined && {
|
|
699
|
+
progressiveChunkSize: deps.progressiveChunkSize,
|
|
700
|
+
}),
|
|
630
701
|
// Abort is how capture WORKS: once the shell is quiet we abort() to
|
|
631
702
|
// freeze the prelude and let the still-pending holes postpone. React
|
|
632
703
|
// reports the abort reason for each pending boundary through onError.
|
|
@@ -767,7 +838,7 @@ export function createShellResumeHandler<TEnv = unknown>(
|
|
|
767
838
|
rscStream: ReadableStream<Uint8Array>,
|
|
768
839
|
opts: ShellResumeOptions,
|
|
769
840
|
): Promise<ReadableStream<Uint8Array>> {
|
|
770
|
-
const { postponed, nonce, search } = opts;
|
|
841
|
+
const { postponed, nonce, search, origin } = opts;
|
|
771
842
|
|
|
772
843
|
try {
|
|
773
844
|
if (postponed === null) {
|
|
@@ -800,6 +871,7 @@ export function createShellResumeHandler<TEnv = unknown>(
|
|
|
800
871
|
// Same seed as the capture pass for this key: the resume tree must
|
|
801
872
|
// match the captured tree above the holes, search reads included.
|
|
802
873
|
search,
|
|
874
|
+
origin,
|
|
803
875
|
});
|
|
804
876
|
|
|
805
877
|
// EAGER injection (resume-only): the stored prelude — a complete document
|
package/src/ssr/ssr-root.tsx
CHANGED
|
@@ -70,13 +70,22 @@ function createSsrEventController(opts: {
|
|
|
70
70
|
* names and both passes agree byte-for-byte.
|
|
71
71
|
*/
|
|
72
72
|
search?: string;
|
|
73
|
+
/**
|
|
74
|
+
* Origin seeding the store location. Live fizz passes the request's real
|
|
75
|
+
* origin so origin-dependent markup (Link's data-external compares link
|
|
76
|
+
* origins against it) agrees with the browser's window.location; ppr
|
|
77
|
+
* capture/resume pass their request's origin (shell keys are host-scoped,
|
|
78
|
+
* so the two agree modulo protocol drift). Absent (build-time bare
|
|
79
|
+
* captures, tests) falls back to the historical internal host.
|
|
80
|
+
*/
|
|
81
|
+
origin?: string;
|
|
73
82
|
params?: Record<string, string>;
|
|
74
83
|
handleData?: HandleData;
|
|
75
84
|
matched?: string[];
|
|
76
85
|
}): EventController {
|
|
77
86
|
const location = new URL(
|
|
78
87
|
`${opts.pathname}${opts.search ?? ""}`,
|
|
79
|
-
"http://localhost",
|
|
88
|
+
opts.origin ?? "http://localhost",
|
|
80
89
|
);
|
|
81
90
|
let params = opts.params ?? {};
|
|
82
91
|
const rawMatched = opts.matched ?? [];
|
|
@@ -130,6 +139,37 @@ function createSsrEventController(opts: {
|
|
|
130
139
|
};
|
|
131
140
|
}
|
|
132
141
|
|
|
142
|
+
/**
|
|
143
|
+
* Deserialize the Flight stream branch into the payload SsrRoot renders,
|
|
144
|
+
* fragment expansion included. Factored out of SsrRoot so createSSRHandler can
|
|
145
|
+
* create the promise BEFORE fizz starts and read metadata that must influence
|
|
146
|
+
* the fizz call itself (the ssr:false progressiveChunkSize auto-raise) —
|
|
147
|
+
* awaiting it there is latency-neutral because fizz cannot emit even <html>
|
|
148
|
+
* until this same promise settles.
|
|
149
|
+
*/
|
|
150
|
+
export function deserializeSsrPayload(
|
|
151
|
+
createFromReadableStream: CreateFromReadableStream,
|
|
152
|
+
rscStream: ReadableStream<Uint8Array>,
|
|
153
|
+
): Promise<RscPayload> {
|
|
154
|
+
// Shell-HIT tails carry replayed segments as VERBATIM stored fragments
|
|
155
|
+
// (segment-fragments.ts, issue #700); expand them through this
|
|
156
|
+
// environment's deserializer before anything reads the segments. Every
|
|
157
|
+
// other payload (full render, capture, actions) has no envelopes and
|
|
158
|
+
// pays one field scan.
|
|
159
|
+
// Promise.resolve() adoption is load-bearing: some wirings (the build
|
|
160
|
+
// temp server's vendored Flight client) return a THENABLE Chunk whose
|
|
161
|
+
// .then returns undefined — chaining on it directly yields undefined.
|
|
162
|
+
return Promise.resolve(createFromReadableStream<RscPayload>(rscStream)).then(
|
|
163
|
+
async (resolvedPayload) => {
|
|
164
|
+
await expandSegmentFragments(
|
|
165
|
+
resolvedPayload.metadata?.segments,
|
|
166
|
+
createFromReadableStream,
|
|
167
|
+
);
|
|
168
|
+
return resolvedPayload;
|
|
169
|
+
},
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
133
173
|
/**
|
|
134
174
|
* Options for {@link createSsrRootComponent}.
|
|
135
175
|
*/
|
|
@@ -138,6 +178,13 @@ export interface SsrRootOptions {
|
|
|
138
178
|
createFromReadableStream: CreateFromReadableStream;
|
|
139
179
|
/** The Flight stream branch to deserialize into the SSR VDOM. */
|
|
140
180
|
rscStream: ReadableStream<Uint8Array>;
|
|
181
|
+
/**
|
|
182
|
+
* Pre-created payload promise (deserializeSsrPayload over the SAME
|
|
183
|
+
* rscStream). When present SsrRoot adopts it instead of deserializing
|
|
184
|
+
* lazily on first render — the stream can only be consumed once, so the
|
|
185
|
+
* caller that already started deserialization MUST pass the promise in.
|
|
186
|
+
*/
|
|
187
|
+
payload?: Promise<RscPayload>;
|
|
141
188
|
/** Nonce for CSP; propagated to NonceContext. */
|
|
142
189
|
nonce?: string;
|
|
143
190
|
/**
|
|
@@ -162,6 +209,11 @@ export interface SsrRootOptions {
|
|
|
162
209
|
* the resume tree matches the captured tree above the postponed holes.
|
|
163
210
|
*/
|
|
164
211
|
search?: string;
|
|
212
|
+
/**
|
|
213
|
+
* Origin seeding the SSR store location (see createSsrEventController):
|
|
214
|
+
* live fizz passes the request's origin; capture/resume pass theirs.
|
|
215
|
+
*/
|
|
216
|
+
origin?: string;
|
|
165
217
|
}
|
|
166
218
|
|
|
167
219
|
/**
|
|
@@ -188,35 +240,26 @@ export function createSsrRootComponent(opts: SsrRootOptions): React.FC {
|
|
|
188
240
|
nonce,
|
|
189
241
|
onPayloadSettled,
|
|
190
242
|
search,
|
|
243
|
+
origin,
|
|
191
244
|
} = opts;
|
|
192
245
|
|
|
193
|
-
|
|
246
|
+
// onPayloadSettled fires AFTER fragment expansion (inside
|
|
247
|
+
// deserializeSsrPayload): the capture's fizz-readiness gate must include
|
|
248
|
+
// fragment module loads.
|
|
249
|
+
const adoptPayload = (p: Promise<RscPayload>): Promise<RscPayload> => {
|
|
250
|
+
if (onPayloadSettled) p.then(onPayloadSettled, onPayloadSettled);
|
|
251
|
+
return p;
|
|
252
|
+
};
|
|
253
|
+
let payload: Promise<RscPayload> | undefined =
|
|
254
|
+
opts.payload && adoptPayload(opts.payload);
|
|
194
255
|
let handlesPromise: Promise<HandleData> | undefined;
|
|
195
256
|
let ssrContextValue: NavigationStoreContextValue | undefined;
|
|
196
257
|
let rootPromise: Promise<React.ReactNode> | undefined;
|
|
197
258
|
|
|
198
259
|
return function SsrRoot() {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
// environment's deserializer before anything reads the segments. Every
|
|
203
|
-
// other payload (full render, capture, actions) has no envelopes and
|
|
204
|
-
// pays one field scan. onPayloadSettled fires AFTER expansion: the
|
|
205
|
-
// capture's fizz-readiness gate must include fragment module loads.
|
|
206
|
-
// Promise.resolve() adoption is load-bearing: some wirings (the build
|
|
207
|
-
// temp server's vendored Flight client) return a THENABLE Chunk whose
|
|
208
|
-
// .then returns undefined — chaining on it directly yields undefined.
|
|
209
|
-
payload = Promise.resolve(
|
|
210
|
-
createFromReadableStream<RscPayload>(rscStream),
|
|
211
|
-
).then(async (resolvedPayload) => {
|
|
212
|
-
await expandSegmentFragments(
|
|
213
|
-
resolvedPayload.metadata?.segments,
|
|
214
|
-
createFromReadableStream,
|
|
215
|
-
);
|
|
216
|
-
return resolvedPayload;
|
|
217
|
-
});
|
|
218
|
-
if (onPayloadSettled) payload.then(onPayloadSettled, onPayloadSettled);
|
|
219
|
-
}
|
|
260
|
+
payload ??= adoptPayload(
|
|
261
|
+
deserializeSsrPayload(createFromReadableStream, rscStream),
|
|
262
|
+
);
|
|
220
263
|
const resolved = React.use(payload);
|
|
221
264
|
|
|
222
265
|
const themeConfig = resolved.metadata?.themeConfig ?? null;
|
|
@@ -238,6 +281,7 @@ export function createSsrRootComponent(opts: SsrRootOptions): React.FC {
|
|
|
238
281
|
eventController: createSsrEventController({
|
|
239
282
|
pathname,
|
|
240
283
|
search,
|
|
284
|
+
origin,
|
|
241
285
|
params: resolved.metadata?.params,
|
|
242
286
|
handleData,
|
|
243
287
|
matched: resolved.metadata?.matched,
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev-only diagnostic for the { ssr: false } SSR-completeness opt-in.
|
|
3
|
+
*
|
|
4
|
+
* A document render that awaits flagged loaders before first flush is usually
|
|
5
|
+
* expected to produce an SSR-complete boundary — but the await is scoped per
|
|
6
|
+
* LOADER (see LoaderOptions in types/loader-types.ts), so one unflagged read
|
|
7
|
+
* under the same Suspense boundary still suspends it and the boundary streams
|
|
8
|
+
* as its fallback, invisible without JS. That failure mode looks exactly like
|
|
9
|
+
* the flag not working; a consumer app burned hours on byte-level archaeology
|
|
10
|
+
* before the unflagged sibling read was identified. This warning names the
|
|
11
|
+
* culprit at the suspension site instead.
|
|
12
|
+
*
|
|
13
|
+
* Fires at most once per loader id per process, only during the SSR pass
|
|
14
|
+
* (`window` undefined), only in dev, and only when the render actually awaited
|
|
15
|
+
* flagged loaders (`awaitedLoaderIds`, stamped by segment resolution on
|
|
16
|
+
* document AND shell-capture renders — capture awaits the same flagged lane;
|
|
17
|
+
* its masked live-lane reads suspend by design and dedupe against the live
|
|
18
|
+
* render's warnings through the once-per-id set).
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
const warned = new Set<string>();
|
|
22
|
+
|
|
23
|
+
/** Thenable statuses `use()` unwraps without suspending: React's re-check
|
|
24
|
+
* after `.then()` handles "fulfilled", and Flight chunks in the resolved_*
|
|
25
|
+
* states initialize synchronously inside that same call. Anything else
|
|
26
|
+
* (pending, blocked, an unstamped native promise) suspends at least once. */
|
|
27
|
+
function unwrapsSynchronously(stream: Promise<unknown>): boolean {
|
|
28
|
+
const status = (stream as { status?: string }).status;
|
|
29
|
+
return (
|
|
30
|
+
status === "fulfilled" ||
|
|
31
|
+
status === "resolved_model" ||
|
|
32
|
+
status === "resolved_module"
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function warnAwaitedSsrSuspension(
|
|
37
|
+
loaderId: string,
|
|
38
|
+
awaitedLoaderIds: readonly string[] | undefined,
|
|
39
|
+
stream: Promise<unknown>,
|
|
40
|
+
isServer: boolean = typeof window === "undefined",
|
|
41
|
+
): void {
|
|
42
|
+
if (process.env.NODE_ENV === "production") return;
|
|
43
|
+
if (!isServer) return;
|
|
44
|
+
if (!awaitedLoaderIds || awaitedLoaderIds.length === 0) return;
|
|
45
|
+
if (unwrapsSynchronously(stream)) return;
|
|
46
|
+
if (warned.has(loaderId)) return;
|
|
47
|
+
warned.add(loaderId);
|
|
48
|
+
|
|
49
|
+
if (awaitedLoaderIds.includes(loaderId)) {
|
|
50
|
+
console.error(
|
|
51
|
+
`[rango] Loader "${loaderId}" is flagged { ssr: false } and was awaited ` +
|
|
52
|
+
`before first flush, but its useLoader read observed a still-pending ` +
|
|
53
|
+
`promise during SSR. If its Suspense fallback appears in the SSR'd HTML, ` +
|
|
54
|
+
`please report it to @rangojs/router with a reproduction.`,
|
|
55
|
+
);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
console.warn(
|
|
60
|
+
`[rango] The document render awaited { ssr: false } loader(s) ` +
|
|
61
|
+
`${JSON.stringify(awaitedLoaderIds)} before first flush, but ` +
|
|
62
|
+
`useLoader("${loaderId}") still suspended during SSR. "${loaderId}" is not ` +
|
|
63
|
+
`flagged, so the Suspense boundary above that read streams as its fallback ` +
|
|
64
|
+
`and the content under it stays hidden until JS runs. If the boundary must ` +
|
|
65
|
+
`be SSR-complete, flag "${loaderId}" with { ssr: false } too, or move its ` +
|
|
66
|
+
`read behind its own boundary. If it streams deliberately, ignore this.`,
|
|
67
|
+
);
|
|
68
|
+
}
|
|
@@ -75,7 +75,7 @@ export type LoaderContext<
|
|
|
75
75
|
* later ones stream to the client and apply post-hydration (document lane)
|
|
76
76
|
* or progressively (navigation/action lanes). To guarantee a loader's
|
|
77
77
|
* handles are in the SSR'd document, register it as
|
|
78
|
-
* `loader(Def, {
|
|
78
|
+
* `loader(Def, { ssr: false })` so the document render awaits it
|
|
79
79
|
* (see {@link LoaderOptions}).
|
|
80
80
|
*
|
|
81
81
|
* @example
|
|
@@ -174,29 +174,35 @@ export type LoaderFn<
|
|
|
174
174
|
> = (ctx: LoaderContext<TParams, TEnv>) => Promise<T> | T;
|
|
175
175
|
|
|
176
176
|
/**
|
|
177
|
-
*
|
|
177
|
+
* SSR delivery for a DSL-registered loader: `loader(Def, { ssr })`.
|
|
178
178
|
*
|
|
179
|
-
* Default (omitted): the loader streams on every render. Its data,
|
|
180
|
-
* `ctx.use(Handle)` pushes, and any `notFound()`/`redirect()` it throws
|
|
181
|
-
* AFTER the document Response is constructed, so none of them are
|
|
182
|
-
* be in the SSR'd HTML.
|
|
179
|
+
* Default (omitted / `true`): the loader streams on every render. Its data,
|
|
180
|
+
* its `ctx.use(Handle)` pushes, and any `notFound()`/`redirect()` it throws
|
|
181
|
+
* may land AFTER the document Response is constructed, so none of them are
|
|
182
|
+
* guaranteed to be in the SSR'd HTML.
|
|
183
183
|
*
|
|
184
|
-
* `
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
*
|
|
192
|
-
*
|
|
184
|
+
* `ssr: false` turns SSR streaming off for this loader — the same knob
|
|
185
|
+
* `loading(fallback, { ssr: false })` is for the fallback: on a DOCUMENT
|
|
186
|
+
* request the loader is awaited before first flush, so no fallback paints for
|
|
187
|
+
* it (`useLoader` still suspends, but on an already-settled promise). Client
|
|
188
|
+
* navigations keep streaming it. This is the SSR-completeness opt-in. Choose
|
|
189
|
+
* it when the loader feeds something that must exist in the document:
|
|
190
|
+
* `<head>` meta via a handle, or a real 404 status (an awaited `notFound()`
|
|
191
|
+
* deterministically precedes Response construction, where the streamed
|
|
192
|
+
* default only wins that race opportunistically). Under ppr it is also the
|
|
193
|
+
* BAKE lane: the loader executes at shell capture and its settled return is
|
|
194
|
+
* shell material (nested promises stay live holes) — see the ppr docs.
|
|
193
195
|
*
|
|
194
|
-
* Scoped per LOADER, not per segment:
|
|
195
|
-
*
|
|
196
|
-
* `loading()`/Suspense boundary.
|
|
196
|
+
* Scoped per LOADER, not per segment: an `ssr: false` loader alongside a
|
|
197
|
+
* deliberately streaming sibling awaits only itself, and the sibling keeps
|
|
198
|
+
* streaming behind its `loading()`/Suspense boundary. Watch the scoping when
|
|
199
|
+
* the boundary must be SSR-complete: ONE unflagged read under it still
|
|
200
|
+
* suspends the whole boundary, which then streams as its fallback — looking
|
|
201
|
+
* exactly like the flag not working. In dev the router warns at the read
|
|
202
|
+
* site naming the unflagged loader (ssr-suspension-warning.ts).
|
|
197
203
|
*/
|
|
198
204
|
export type LoaderOptions = {
|
|
199
|
-
|
|
205
|
+
ssr?: boolean;
|
|
200
206
|
};
|
|
201
207
|
|
|
202
208
|
/**
|
package/src/types/segments.ts
CHANGED
|
@@ -166,10 +166,27 @@ export interface ResolvedSegment {
|
|
|
166
166
|
loaderId?: string; // For loaders: the loader $$id identifier
|
|
167
167
|
_inherited?: boolean; // For inherited loaders: dedup marker for buildMatchResult
|
|
168
168
|
loaderData?: any; // For loaders: the resolved data from loader execution
|
|
169
|
+
/**
|
|
170
|
+
* True when this loader was awaited before first flush
|
|
171
|
+
* (loader(Def, { ssr: false })). Stamped by resolveLoaders (fresh.ts) on
|
|
172
|
+
* document AND shell-capture renders — capture bakes flagged loaders and
|
|
173
|
+
* awaits the same lane. Feeds segment-system's settled-value delivery and
|
|
174
|
+
* the dev SSR suspension warning (ssr-suspension-warning.ts).
|
|
175
|
+
*/
|
|
176
|
+
awaitBeforeFlush?: true;
|
|
169
177
|
parallelLoading?: ReactNode; // For parallel-owned loaders: the parallel's loading fallback
|
|
170
178
|
// Intercept loader fields (for streaming loader data in parallel segments)
|
|
171
179
|
loaderDataPromise?: Promise<any[]> | any[]; // Loader data promise or resolved array
|
|
172
180
|
loaderIds?: string[]; // IDs ($$id) of loaders for this segment
|
|
181
|
+
/**
|
|
182
|
+
* Per-loader UNDECODED results for a layout/route stream map.
|
|
183
|
+
* Flagged (ssr:false) entries are settled values; unflagged siblings
|
|
184
|
+
* stay promises. Parallel slots do not use this channel — they pin
|
|
185
|
+
* loading() / live-lane holes via use(loaderDataPromise).
|
|
186
|
+
*/
|
|
187
|
+
loaderStreams?: Record<string, unknown>;
|
|
188
|
+
/** $$ids of loaders this segment awaited before flush. Dev diagnostic. */
|
|
189
|
+
awaitedLoaderIds?: string[];
|
|
173
190
|
// Error-specific fields
|
|
174
191
|
error?: ErrorInfo; // For error segments: the error information
|
|
175
192
|
// NotFound-specific fields
|