@rangojs/router 0.9.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/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/rsc/nonce.d.ts +10 -0
- package/dist/types/rsc/types.d.ts +6 -2
- package/dist/types/ssr/index.d.ts +18 -0
- package/dist/types/ssr/ssr-root.d.ts +16 -0
- package/dist/types/ssr-suspension-warning.d.ts +20 -0
- package/dist/types/types/loader-types.d.ts +5 -1
- package/dist/types/types/segments.d.ts +17 -0
- 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 +51 -22
- 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 +21 -22
- package/skills/loader/SKILL.md +17 -2
- package/src/browser/merge-segment-loaders.ts +4 -0
- 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/router/segment-resolution/fresh.ts +48 -17
- package/src/router.ts +7 -2
- package/src/rsc/handler.ts +4 -4
- package/src/rsc/nonce.ts +16 -0
- package/src/rsc/shell-capture.ts +39 -6
- package/src/rsc/types.ts +6 -2
- package/src/segment-system.tsx +57 -12
- package/src/ssr/index.tsx +53 -1
- package/src/ssr/ssr-root.tsx +50 -22
- package/src/ssr-suspension-warning.ts +68 -0
- package/src/types/loader-types.ts +5 -1
- package/src/types/segments.ts +17 -0
- 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/skills/loader/SKILL.md
CHANGED
|
@@ -757,6 +757,18 @@ Response construction (real 404, no warm-up race). Client navigations stream
|
|
|
757
757
|
exactly as before. Scoped per LOADER: the flagged loader awaits only itself;
|
|
758
758
|
siblings keep streaming.
|
|
759
759
|
|
|
760
|
+
Delivery is in-place, not merely in-document. React's Fizz outlines any
|
|
761
|
+
COMPLETED Suspense boundary over ~500 bytes to an end-of-stream
|
|
762
|
+
`<div hidden>` + `$RC()` reveal once the shell saturates its 12800-byte
|
|
763
|
+
`progressiveChunkSize` budget — the bytes are in the HTML, but not at their
|
|
764
|
+
document position, and a consumer that doesn't execute scripts never sees
|
|
765
|
+
them revealed. When the matched chain has a flagged loader, the document
|
|
766
|
+
render raises the budget to `MAX_SAFE_INTEGER` automatically, so the awaited
|
|
767
|
+
content renders where it belongs. Pin the budget yourself (in either
|
|
768
|
+
direction) with `rango({ progressiveChunkSize })` in the Vite config — an
|
|
769
|
+
explicit value disables the auto-raise. Boundaries hoisting stylesheets
|
|
770
|
+
still outline; their reveal must wait for the CSS.
|
|
771
|
+
|
|
760
772
|
The costs and constraints:
|
|
761
773
|
|
|
762
774
|
- Every document load pays the flagged loader's latency before first byte.
|
|
@@ -766,8 +778,11 @@ The costs and constraints:
|
|
|
766
778
|
document render awaits the loader before the render barrier resolves, so
|
|
767
779
|
that wait is a cycle by construction; it throws a deadlock error naming the
|
|
768
780
|
fix.
|
|
769
|
-
- PPR capture
|
|
770
|
-
|
|
781
|
+
- PPR capture is the BAKE lane for flagged loaders (`/ppr`): the capture
|
|
782
|
+
render awaits them too, and the settled result — handle pushes included —
|
|
783
|
+
freezes into the stored shell. Unflagged loaders stay masked as live
|
|
784
|
+
holes. The `progressiveChunkSize` auto-raise is live-document only;
|
|
785
|
+
captured shells outline per the explicit option or React's default.
|
|
771
786
|
|
|
772
787
|
Also available in `clientUrls()` route groups (`/client-urls`), where the
|
|
773
788
|
loader-heavy shape makes it most useful. `LoaderOptions` is exported from the
|
|
@@ -45,6 +45,10 @@ export function mergeSegmentLoaders(
|
|
|
45
45
|
}),
|
|
46
46
|
// Keep all loader IDs from cache
|
|
47
47
|
loaderIds: fromCache.loaderIds,
|
|
48
|
+
// The rebuilt aggregate is the source of truth. Cached per-loader
|
|
49
|
+
// streams would make LoaderResolver ignore loaderDataPromise.
|
|
50
|
+
loaderStreams: undefined,
|
|
51
|
+
awaitedLoaderIds: undefined,
|
|
48
52
|
};
|
|
49
53
|
}
|
|
50
54
|
|
package/src/client.tsx
CHANGED
|
@@ -49,6 +49,8 @@ function renderSlotContent(segment: ResolvedSegment | null): ReactNode {
|
|
|
49
49
|
<LoaderBoundary
|
|
50
50
|
loaderDataPromise={segment.loaderDataPromise!}
|
|
51
51
|
loaderIds={segment.loaderIds!}
|
|
52
|
+
loaderStreams={segment.loaderStreams}
|
|
53
|
+
awaitedLoaderIds={segment.awaitedLoaderIds}
|
|
52
54
|
fallback={segment.loading}
|
|
53
55
|
outletKey={segment.id + "-loader"}
|
|
54
56
|
outletContent={null}
|
package/src/outlet-context.ts
CHANGED
|
@@ -18,6 +18,15 @@ export interface OutletContextValue {
|
|
|
18
18
|
* the resolved `loaderData` record.
|
|
19
19
|
*/
|
|
20
20
|
loaderStreams?: Record<string, unknown>;
|
|
21
|
+
/**
|
|
22
|
+
* Loader $$ids on this segment that the render awaited before first flush
|
|
23
|
+
* (loader(Def, { ssr: false })). Dev-diagnostic input only: useLoader uses
|
|
24
|
+
* it to warn when a read still suspends during SSR on a render that awaited
|
|
25
|
+
* flagged loaders (ssr-suspension-warning.ts). Present only on streaming
|
|
26
|
+
* lanes with flagged loaders (document and shell-capture renders); absent
|
|
27
|
+
* on forceAwait/action lanes.
|
|
28
|
+
*/
|
|
29
|
+
awaitedLoaderIds?: readonly string[];
|
|
21
30
|
parent?: OutletContextValue | null;
|
|
22
31
|
/** Loading component for Suspense fallback (from segment's loading() definition) */
|
|
23
32
|
loading?: ReactNode;
|
package/src/outlet-provider.tsx
CHANGED
|
@@ -13,6 +13,7 @@ export function OutletProvider({
|
|
|
13
13
|
segment,
|
|
14
14
|
loaderData,
|
|
15
15
|
loaderStreams,
|
|
16
|
+
awaitedLoaderIds,
|
|
16
17
|
pending = false,
|
|
17
18
|
children,
|
|
18
19
|
}: {
|
|
@@ -21,6 +22,7 @@ export function OutletProvider({
|
|
|
21
22
|
segment?: ResolvedSegment;
|
|
22
23
|
loaderData?: Record<string, any>;
|
|
23
24
|
loaderStreams?: Record<string, unknown>;
|
|
25
|
+
awaitedLoaderIds?: readonly string[];
|
|
24
26
|
pending?: boolean;
|
|
25
27
|
children: ReactNode;
|
|
26
28
|
}): ReactNode {
|
|
@@ -34,6 +36,7 @@ export function OutletProvider({
|
|
|
34
36
|
segment,
|
|
35
37
|
loaderData,
|
|
36
38
|
loaderStreams,
|
|
39
|
+
awaitedLoaderIds,
|
|
37
40
|
pending,
|
|
38
41
|
parent: parentContext,
|
|
39
42
|
loading: segment?.loading,
|
|
@@ -44,6 +47,7 @@ export function OutletProvider({
|
|
|
44
47
|
segment,
|
|
45
48
|
loaderData,
|
|
46
49
|
loaderStreams,
|
|
50
|
+
awaitedLoaderIds,
|
|
47
51
|
pending,
|
|
48
52
|
parentContext,
|
|
49
53
|
],
|
|
@@ -129,6 +129,9 @@ export interface LoaderBoundaryProps {
|
|
|
129
129
|
* the children; useLoader suspends per loader at the read site.
|
|
130
130
|
*/
|
|
131
131
|
loaderStreams?: Record<string, unknown>;
|
|
132
|
+
/** Dev-diagnostic input for the SSR suspension warning — see
|
|
133
|
+
* OutletContextValue.awaitedLoaderIds. Rides the streams lane only. */
|
|
134
|
+
awaitedLoaderIds?: readonly string[];
|
|
132
135
|
fallback?: ReactNode;
|
|
133
136
|
outletKey: string;
|
|
134
137
|
outletContent: ReactNode;
|
|
@@ -141,6 +144,7 @@ export function LoaderBoundary({
|
|
|
141
144
|
loaderDataPromise,
|
|
142
145
|
loaderIds,
|
|
143
146
|
loaderStreams,
|
|
147
|
+
awaitedLoaderIds,
|
|
144
148
|
fallback,
|
|
145
149
|
outletKey,
|
|
146
150
|
outletContent,
|
|
@@ -154,6 +158,7 @@ export function LoaderBoundary({
|
|
|
154
158
|
loaderDataPromise={loaderDataPromise}
|
|
155
159
|
loaderIds={loaderIds}
|
|
156
160
|
loaderStreams={loaderStreams}
|
|
161
|
+
awaitedLoaderIds={awaitedLoaderIds}
|
|
157
162
|
outletKey={outletKey}
|
|
158
163
|
outletContent={outletContent}
|
|
159
164
|
segment={segment}
|
|
@@ -187,6 +192,7 @@ function LoaderResolver({
|
|
|
187
192
|
loaderDataPromise,
|
|
188
193
|
loaderIds,
|
|
189
194
|
loaderStreams,
|
|
195
|
+
awaitedLoaderIds,
|
|
190
196
|
outletKey,
|
|
191
197
|
outletContent,
|
|
192
198
|
segment,
|
|
@@ -201,6 +207,7 @@ function LoaderResolver({
|
|
|
201
207
|
segment={segment}
|
|
202
208
|
parallel={parallel}
|
|
203
209
|
loaderStreams={loaderStreams}
|
|
210
|
+
awaitedLoaderIds={awaitedLoaderIds}
|
|
204
211
|
>
|
|
205
212
|
{children}
|
|
206
213
|
</OutletProvider>
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
getParallelEntries,
|
|
12
12
|
getParallelSlotEntries,
|
|
13
13
|
type EntryData,
|
|
14
|
+
type LoaderEntry,
|
|
14
15
|
} from "../../server/context";
|
|
15
16
|
import type {
|
|
16
17
|
HandlerContext,
|
|
@@ -45,6 +46,37 @@ import {
|
|
|
45
46
|
latchPprHeaderScopeForEntries,
|
|
46
47
|
} from "../../server/context.js";
|
|
47
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Register flagged loader $$ids on the request context and return their
|
|
51
|
+
* indices. Must run BEFORE kickoff: rendered() checks the set to fail
|
|
52
|
+
* fast on the barrier cycle (resolution awaits the loader, the barrier
|
|
53
|
+
* awaits resolution).
|
|
54
|
+
*/
|
|
55
|
+
function registerAwaitBeforeFlushIds(loaderEntries: LoaderEntry[]): number[] {
|
|
56
|
+
const awaitedIndices: number[] = [];
|
|
57
|
+
for (let i = 0; i < loaderEntries.length; i++) {
|
|
58
|
+
if (loaderEntries[i]!.awaitBeforeFlush) awaitedIndices.push(i);
|
|
59
|
+
}
|
|
60
|
+
if (awaitedIndices.length > 0) {
|
|
61
|
+
const reqCtx = _getRequestContext();
|
|
62
|
+
if (reqCtx) {
|
|
63
|
+
reqCtx._awaitBeforeFlushLoaderIds ??= new Set();
|
|
64
|
+
for (const i of awaitedIndices) {
|
|
65
|
+
reqCtx._awaitBeforeFlushLoaderIds.add(loaderEntries[i]!.loader.$$id);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return awaitedIndices;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function stampAwaitBeforeFlush(
|
|
73
|
+
loaderEntry: LoaderEntry,
|
|
74
|
+
): { awaitBeforeFlush: true } | Record<string, never> {
|
|
75
|
+
return loaderEntry.awaitBeforeFlush === true
|
|
76
|
+
? { awaitBeforeFlush: true as const }
|
|
77
|
+
: {};
|
|
78
|
+
}
|
|
79
|
+
|
|
48
80
|
// ---------------------------------------------------------------------------
|
|
49
81
|
// Fresh path (full match, no revalidation)
|
|
50
82
|
// ---------------------------------------------------------------------------
|
|
@@ -112,23 +144,12 @@ export async function resolveLoaders<TEnv>(
|
|
|
112
144
|
// the set to fail fast on the barrier cycle (segment resolution awaits the
|
|
113
145
|
// loader, the barrier awaits segment resolution, rendered() awaits the
|
|
114
146
|
// barrier), and the loader body can call rendered() before the await below
|
|
115
|
-
// is reached.
|
|
116
|
-
//
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
if (awaitedIndices.length > 0) {
|
|
124
|
-
const reqCtx = _getRequestContext();
|
|
125
|
-
if (reqCtx) {
|
|
126
|
-
reqCtx._awaitBeforeFlushLoaderIds ??= new Set();
|
|
127
|
-
for (const i of awaitedIndices) {
|
|
128
|
-
reqCtx._awaitBeforeFlushLoaderIds.add(loaderEntries[i]!.loader.$$id);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
147
|
+
// is reached.
|
|
148
|
+
//
|
|
149
|
+
// Shell-capture renders await too: flagged loaders BAKE at capture
|
|
150
|
+
// (loader-mask masks only LIVE-lane loaders). Capture must await them so
|
|
151
|
+
// bake-lane handle pushes land in the prelude.
|
|
152
|
+
const awaitedIndices = registerAwaitBeforeFlushIds(loaderEntries);
|
|
132
153
|
|
|
133
154
|
// Streaming loaders: promises kick off now, settle during RSC serialization.
|
|
134
155
|
const segments = loaderEntries.map((loaderEntry, i) => {
|
|
@@ -142,6 +163,10 @@ export async function resolveLoaders<TEnv>(
|
|
|
142
163
|
component: null,
|
|
143
164
|
params: ctx.params,
|
|
144
165
|
loaderId: loader.$$id,
|
|
166
|
+
// Stamped on document AND capture renders: segment-system's
|
|
167
|
+
// value-delivery await and the dev SSR-suspension diagnostic both
|
|
168
|
+
// key off it.
|
|
169
|
+
...stampAwaitBeforeFlush(loaderEntry),
|
|
145
170
|
loaderData: deps.wrapLoaderPromise(
|
|
146
171
|
runInsideLoaderScope(() =>
|
|
147
172
|
resolveLoaderData(
|
|
@@ -188,6 +213,11 @@ export async function resolveLoaders<TEnv>(
|
|
|
188
213
|
// collapsing the whole entry and discarding successful sibling data, and
|
|
189
214
|
// (2) leave the other in-flight raw promises without a .catch, producing
|
|
190
215
|
// unhandled rejections. Mirrors the loading path and intercept-resolution.
|
|
216
|
+
//
|
|
217
|
+
// Flagged loaders still get awaitBeforeFlush stamped: auto-raise and
|
|
218
|
+
// settled-value delivery key off the field, and this path already paid
|
|
219
|
+
// the pre-flush await.
|
|
220
|
+
registerAwaitBeforeFlushIds(loaderEntries);
|
|
191
221
|
const pendingLoaderData = loaderEntries.map((loaderEntry, i) => {
|
|
192
222
|
const { loader } = loaderEntry;
|
|
193
223
|
const segmentId = `${shortCode}D${i}.${loader.$$id}`;
|
|
@@ -224,6 +254,7 @@ export async function resolveLoaders<TEnv>(
|
|
|
224
254
|
component: null,
|
|
225
255
|
params: ctx.params,
|
|
226
256
|
loaderId: loader.$$id,
|
|
257
|
+
...stampAwaitBeforeFlush(loaderEntry),
|
|
227
258
|
loaderData: pending.wrapped,
|
|
228
259
|
belongsToRoute,
|
|
229
260
|
};
|
package/src/router.ts
CHANGED
|
@@ -1167,11 +1167,16 @@ export function createRouter<TEnv = any>(
|
|
|
1167
1167
|
| null = null;
|
|
1168
1168
|
|
|
1169
1169
|
return async (request: Request, input: RouterRequestInput<TEnv> = {}) => {
|
|
1170
|
+
const requestedDiscoveryEpoch = request.headers.get(
|
|
1171
|
+
DEV_DISCOVERY_PROBE_HEADER,
|
|
1172
|
+
);
|
|
1170
1173
|
if (
|
|
1171
1174
|
devDiscoveryEpoch !== undefined &&
|
|
1172
|
-
|
|
1173
|
-
String(devDiscoveryEpoch)
|
|
1175
|
+
requestedDiscoveryEpoch !== null
|
|
1174
1176
|
) {
|
|
1177
|
+
// A stale generation must still answer as a probe. Rendering the app
|
|
1178
|
+
// on an epoch mismatch makes the readiness loop overlap full renders
|
|
1179
|
+
// with workerd reloads and can exhaust the dev server heap.
|
|
1175
1180
|
return new Response(null, {
|
|
1176
1181
|
headers: {
|
|
1177
1182
|
[DEV_DISCOVERY_EPOCH_HEADER]: String(devDiscoveryEpoch),
|
package/src/rsc/handler.ts
CHANGED
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
handleResponseRoute,
|
|
46
46
|
type ResponseRouteMatch,
|
|
47
47
|
} from "./response-route-handler.js";
|
|
48
|
-
import {
|
|
48
|
+
import { nonce as nonceToken, resolveProviderNonce } from "./nonce.js";
|
|
49
49
|
import { VERSION } from "@rangojs/router:version";
|
|
50
50
|
import type { ErrorPhase } from "../types.js";
|
|
51
51
|
import type { RouterRequestInput } from "../router/router-interfaces.js";
|
|
@@ -456,12 +456,12 @@ export function createRSCHandler<
|
|
|
456
456
|
}
|
|
457
457
|
}
|
|
458
458
|
|
|
459
|
-
// Resolve nonce if provider is set
|
|
459
|
+
// Resolve nonce if provider is set. false/"" normalize to undefined —
|
|
460
|
+
// the per-request opt-out (resolveProviderNonce).
|
|
460
461
|
const nonceStart = performance.now();
|
|
461
462
|
let nonce: string | undefined;
|
|
462
463
|
if (nonceProvider) {
|
|
463
|
-
|
|
464
|
-
nonce = result === true ? generateNonce() : result;
|
|
464
|
+
nonce = resolveProviderNonce(await nonceProvider(request, env));
|
|
465
465
|
}
|
|
466
466
|
const nonceDur = performance.now() - nonceStart;
|
|
467
467
|
|
package/src/rsc/nonce.ts
CHANGED
|
@@ -25,6 +25,22 @@ import { createVar } from "../context-var.js";
|
|
|
25
25
|
*/
|
|
26
26
|
export const nonce: ContextVar<string> = createVar<string>();
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Normalize a NonceProvider return value to the nonce the request runs with.
|
|
30
|
+
* `true` auto-generates; `false` and the empty string are the per-request
|
|
31
|
+
* opt-out and normalize to undefined — without this, a falsy string would be
|
|
32
|
+
* threaded as-is into the render: never written to the token (`if (nonce)`)
|
|
33
|
+
* yet still `!== undefined` for the ppr shell gate (rsc-rendering.ts
|
|
34
|
+
* activeNonce), pinning a ppr route to axis 1 with no way to opt a request
|
|
35
|
+
* out while keeping the provider for the rest of the app.
|
|
36
|
+
*/
|
|
37
|
+
export function resolveProviderNonce(
|
|
38
|
+
result: string | boolean,
|
|
39
|
+
): string | undefined {
|
|
40
|
+
if (result === true) return generateNonce();
|
|
41
|
+
return result === false || result === "" ? undefined : result;
|
|
42
|
+
}
|
|
43
|
+
|
|
28
44
|
/**
|
|
29
45
|
* Generate a cryptographic nonce for CSP.
|
|
30
46
|
* Returns a 16-byte random value encoded as base64.
|
package/src/rsc/shell-capture.ts
CHANGED
|
@@ -45,7 +45,10 @@ import {
|
|
|
45
45
|
maskNestedContainerThenables,
|
|
46
46
|
type MaskReport,
|
|
47
47
|
} from "../router/segment-resolution/mask-nested.js";
|
|
48
|
-
import {
|
|
48
|
+
import {
|
|
49
|
+
getCurrentLoaderBodyId,
|
|
50
|
+
isInsideLoaderScope,
|
|
51
|
+
} from "../server/context.js";
|
|
49
52
|
import { isThenable } from "../handles/is-thenable.js";
|
|
50
53
|
import type {
|
|
51
54
|
ShellCacheEntry,
|
|
@@ -1503,6 +1506,15 @@ export function deriveShellCaptureContext(
|
|
|
1503
1506
|
// applied ONLY at the captureHandles cache-write call site — every other
|
|
1504
1507
|
// getDataForSegment consumer (the render-barrier snapshot, prerender)
|
|
1505
1508
|
// sees every push.
|
|
1509
|
+
// EXCEPTION — bake-lane { ssr: false } loaders: they execute at capture
|
|
1510
|
+
// and never re-run on a HIT, so neither exclusion rationale applies. The
|
|
1511
|
+
// capture awaits them (fresh.ts), their pushes are in the captured HTML
|
|
1512
|
+
// (<head> title/meta, useHandle echoes), and the stored snapshot MUST
|
|
1513
|
+
// carry the same values or HIT hydration mismatches against its own
|
|
1514
|
+
// prelude (server text present, client handle empty). Only their
|
|
1515
|
+
// settled, thenable-free pushes qualify — a deferred (thenable) push or
|
|
1516
|
+
// one with masked nested promises keeps the exclusion so the handle
|
|
1517
|
+
// encode cannot stall on a never-resolving mask.
|
|
1506
1518
|
const handleLiveness = {
|
|
1507
1519
|
holes: false,
|
|
1508
1520
|
pendingPushes: 0,
|
|
@@ -1518,11 +1530,13 @@ export function deriveShellCaptureContext(
|
|
|
1518
1530
|
const pushedInLoaderScope = isInsideLoaderScope();
|
|
1519
1531
|
// Single walk: the mask reports whether it masked any nested thenable
|
|
1520
1532
|
// (the liveness declaration) while building the capture copy.
|
|
1533
|
+
let maskedNestedThenable = false;
|
|
1521
1534
|
const maskWithLiveness = (v: unknown): unknown => {
|
|
1522
1535
|
const report: MaskReport = { thenable: false };
|
|
1523
1536
|
const masked = maskNestedContainerThenables(v, undefined, report);
|
|
1524
|
-
if (
|
|
1525
|
-
|
|
1537
|
+
if (report.thenable) {
|
|
1538
|
+
maskedNestedThenable = true;
|
|
1539
|
+
if (!pushedInLoaderScope) handleLiveness.holes = true;
|
|
1526
1540
|
}
|
|
1527
1541
|
return masked;
|
|
1528
1542
|
};
|
|
@@ -1534,11 +1548,30 @@ export function deriveShellCaptureContext(
|
|
|
1534
1548
|
value.then(settle, settle);
|
|
1535
1549
|
}
|
|
1536
1550
|
masked = value.then(maskWithLiveness);
|
|
1551
|
+
// Deferred (thenable) loader pushes always keep the exclusion — the
|
|
1552
|
+
// bake-lane carve-out below is for settled values only.
|
|
1553
|
+
if (pushedInLoaderScope) {
|
|
1554
|
+
loaderScopedPushValues.add(masked as object);
|
|
1555
|
+
}
|
|
1537
1556
|
} else {
|
|
1538
1557
|
masked = maskWithLiveness(value);
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1558
|
+
if (
|
|
1559
|
+
pushedInLoaderScope &&
|
|
1560
|
+
typeof masked === "object" &&
|
|
1561
|
+
masked !== null
|
|
1562
|
+
) {
|
|
1563
|
+
// Bake-lane { ssr: false } loader pushes are shell material (see the
|
|
1564
|
+
// funnel comment above): keep them IN the stored snapshot when
|
|
1565
|
+
// settled and thenable-free; everything else stays excluded.
|
|
1566
|
+
const bodyLoaderId = getCurrentLoaderBodyId();
|
|
1567
|
+
const baked =
|
|
1568
|
+
bodyLoaderId !== undefined &&
|
|
1569
|
+
!maskedNestedThenable &&
|
|
1570
|
+
derivedCtx._awaitBeforeFlushLoaderIds?.has(bodyLoaderId) === true;
|
|
1571
|
+
if (!baked) {
|
|
1572
|
+
loaderScopedPushValues.add(masked);
|
|
1573
|
+
}
|
|
1574
|
+
}
|
|
1542
1575
|
}
|
|
1543
1576
|
rawCapturePush(handleName, segmentId, masked);
|
|
1544
1577
|
};
|
package/src/rsc/types.ts
CHANGED
|
@@ -276,12 +276,16 @@ export interface HandlerCacheConfig {
|
|
|
276
276
|
|
|
277
277
|
/**
|
|
278
278
|
* Nonce provider function type.
|
|
279
|
-
*
|
|
279
|
+
* Return a nonce string to use verbatim, `true` to auto-generate one, or
|
|
280
|
+
* `false` (or an empty string) to serve THIS request without a nonce — the
|
|
281
|
+
* per-request opt-out for apps that nonce globally but declare `ppr` on some
|
|
282
|
+
* routes: a shell is shared per host+URL and can never bake a per-request
|
|
283
|
+
* nonce, so a ppr route only captures when its requests opt out here.
|
|
280
284
|
*/
|
|
281
285
|
export type NonceProvider<TEnv = unknown> = (
|
|
282
286
|
request: Request,
|
|
283
287
|
env: TEnv,
|
|
284
|
-
) => string |
|
|
288
|
+
) => string | boolean | Promise<string | boolean>;
|
|
285
289
|
|
|
286
290
|
/**
|
|
287
291
|
* Options for creating an RSC handler
|
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/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
|
/**
|
|
@@ -168,6 +170,23 @@ export interface SSRDependencies<TEnv = unknown> {
|
|
|
168
170
|
*/
|
|
169
171
|
headScripts?: HeadScriptsOption;
|
|
170
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
|
+
|
|
171
190
|
/**
|
|
172
191
|
* prerender from react-dom/static.edge. Optional; required only by
|
|
173
192
|
* {@link createShellCaptureHandler} for PPR shell capture.
|
|
@@ -497,9 +516,21 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
|
|
|
497
516
|
// - rscStream2: For browser hydration (inject as __FLIGHT_DATA__)
|
|
498
517
|
const [rscStream1, rscStream2] = rscStream.tee();
|
|
499
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
|
+
|
|
500
530
|
const SsrRoot = createSsrRootComponent({
|
|
501
531
|
createFromReadableStream,
|
|
502
532
|
rscStream: rscStream1,
|
|
533
|
+
payload,
|
|
503
534
|
nonce,
|
|
504
535
|
// Live fizz seeds the request's RAW search. The shell capture pass
|
|
505
536
|
// below and its resume twin seed the SHELL KEY's search instead
|
|
@@ -513,6 +544,18 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
|
|
|
513
544
|
// Get bootstrap script content
|
|
514
545
|
const bootstrapScriptContent = await loadBootstrapScriptContent();
|
|
515
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
|
+
|
|
516
559
|
// Render React tree to HTML stream
|
|
517
560
|
// Pass formState for useActionState progressive enhancement if provided
|
|
518
561
|
// Pass nonce for CSP if provided. runWithPreinitNonce makes the same
|
|
@@ -523,6 +566,7 @@ export function createSSRHandler<TEnv = unknown>(deps: SSRDependencies<TEnv>) {
|
|
|
523
566
|
...resolveBootstrapOptions(bootstrapScriptContent, deps.headScripts),
|
|
524
567
|
formState,
|
|
525
568
|
nonce,
|
|
569
|
+
...(progressiveChunkSize !== undefined && { progressiveChunkSize }),
|
|
526
570
|
}),
|
|
527
571
|
);
|
|
528
572
|
|
|
@@ -646,6 +690,14 @@ export function createShellCaptureHandler<TEnv = unknown>(
|
|
|
646
690
|
const prerenderPromise = prerender(<SsrRoot />, {
|
|
647
691
|
signal: controller.signal,
|
|
648
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
|
+
}),
|
|
649
701
|
// Abort is how capture WORKS: once the shell is quiet we abort() to
|
|
650
702
|
// freeze the prelude and let the still-pending holes postpone. React
|
|
651
703
|
// reports the abort reason for each pending boundary through onError.
|