@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/client-urls/types.ts
CHANGED
|
@@ -87,12 +87,12 @@ export interface ClientUrlLoaderRecord {
|
|
|
87
87
|
/** Client-run per-loader revalidation predicates; empty = locked defaults. */
|
|
88
88
|
readonly revalidate: readonly ClientRevalidateFn[];
|
|
89
89
|
/**
|
|
90
|
-
* loader(Def, {
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
90
|
+
* loader(Def, { ssr: false }): document renders await this loader before
|
|
91
|
+
* first flush (see {@link LoaderOptions}). Projected into the server tree,
|
|
92
|
+
* where the per-isSSR entry stamping applies — client navigations stream
|
|
93
|
+
* regardless.
|
|
94
94
|
*/
|
|
95
|
-
readonly
|
|
95
|
+
readonly ssr?: false;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
/**
|
|
@@ -141,13 +141,14 @@ export interface ClientUrlHelpers {
|
|
|
141
141
|
* revalidate() only — a CLIENT-RUN per-loader predicate; its decision (not
|
|
142
142
|
* the function) is sent with the revalidation request.
|
|
143
143
|
*
|
|
144
|
-
* Pass `{
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
* live
|
|
144
|
+
* Pass `{ ssr: false }` — the same knob as loading(fallback, { ssr:
|
|
145
|
+
* false }) — to await this loader before first flush on DOCUMENT requests
|
|
146
|
+
* (see {@link LoaderOptions}): the opt-in for loaders whose data, handle
|
|
147
|
+
* pushes, or thrown notFound()/redirect() must be in the SSR'd HTML.
|
|
148
|
+
* Per-loader: a streaming sibling keeps streaming. Under a `ppr` group
|
|
149
|
+
* route the flag BAKES: the loader executes at shell capture and its
|
|
150
|
+
* settled return freezes into the shell (nested promises stay live
|
|
151
|
+
* holes).
|
|
151
152
|
*/
|
|
152
153
|
readonly loader: <TData>(
|
|
153
154
|
definition: LoaderDefinition<TData>,
|
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>
|
|
@@ -807,8 +807,12 @@ const loader: RouteHelpers<any, any>["loader"] = (
|
|
|
807
807
|
"loader() received two use() callbacks. Pass loader(Def, options, use) or loader(Def, use).",
|
|
808
808
|
);
|
|
809
809
|
invariant(
|
|
810
|
-
optionsGiven
|
|
811
|
-
|
|
810
|
+
(optionsGiven as { stream?: unknown } | undefined)?.stream === undefined,
|
|
811
|
+
"loader() stream was replaced: use loader(Def, { ssr: false }) — the same knob as loading(fallback, { ssr: false }) — to await the loader before first flush on document requests.",
|
|
812
|
+
);
|
|
813
|
+
invariant(
|
|
814
|
+
optionsGiven?.ssr === undefined || typeof optionsGiven.ssr === "boolean",
|
|
815
|
+
`loader() ssr must be a boolean (got ${JSON.stringify(optionsGiven?.ssr)}). Omit it (or pass true) to stream on every render.`,
|
|
812
816
|
);
|
|
813
817
|
|
|
814
818
|
const name = `${ctx.namespace}.$${store.getNextIndex("loader")}`;
|
|
@@ -820,7 +824,7 @@ const loader: RouteHelpers<any, any>["loader"] = (
|
|
|
820
824
|
const loaderEntry: LoaderEntry = {
|
|
821
825
|
loader: loaderDef,
|
|
822
826
|
revalidate: [] as ShouldRevalidateFn<any, any>[],
|
|
823
|
-
...(optionsGiven?.
|
|
827
|
+
...(optionsGiven?.ssr === false && ctx.isSSR
|
|
824
828
|
? { awaitBeforeFlush: true as const }
|
|
825
829
|
: {}),
|
|
826
830
|
};
|
|
@@ -310,13 +310,14 @@ export type RouteHelpers<T extends RouteDefinition, TEnv> = {
|
|
|
310
310
|
* return <div>{data.name}</div>;
|
|
311
311
|
* }
|
|
312
312
|
* ```
|
|
313
|
-
* Pass `{
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
*
|
|
313
|
+
* Pass `{ ssr: false }` — the same knob as loading(fallback, { ssr:
|
|
314
|
+
* false }) — to await this loader before first flush on DOCUMENT requests
|
|
315
|
+
* (see {@link LoaderOptions}): the opt-in for loaders whose data, handle
|
|
316
|
+
* pushes, or thrown notFound()/redirect() must be in the SSR'd HTML.
|
|
317
|
+
* Per-loader: a streaming sibling in the same segment keeps streaming.
|
|
317
318
|
*
|
|
318
319
|
* ```typescript
|
|
319
|
-
* loader(ProductLoader, {
|
|
320
|
+
* loader(ProductLoader, { ssr: false }, () => [cache()]),
|
|
320
321
|
* loader(RecommendationsLoader), // still streams behind loading()
|
|
321
322
|
* ```
|
|
322
323
|
*
|
|
@@ -572,7 +572,7 @@ function createLoaderExecutor<TEnv>(
|
|
|
572
572
|
}
|
|
573
573
|
|
|
574
574
|
// awaitBeforeFlush cycle: segment resolution awaits this loader
|
|
575
|
-
// (loader(Def, {
|
|
575
|
+
// (loader(Def, { ssr: false })), the barrier awaits segment
|
|
576
576
|
// resolution, and rendered() awaits the barrier — waiting here can
|
|
577
577
|
// never complete. Fail fast with the cause instead of hanging the
|
|
578
578
|
// document render. Only document renders populate the set (the flag is
|
|
@@ -581,10 +581,10 @@ function createLoaderExecutor<TEnv>(
|
|
|
581
581
|
if (reqCtx._awaitBeforeFlushLoaderIds?.has(currentLoaderId)) {
|
|
582
582
|
throw new Error(
|
|
583
583
|
`Deadlock: loader "${currentLoaderId}" is registered with ` +
|
|
584
|
-
`
|
|
584
|
+
`ssr: false, so the document render awaits it before ` +
|
|
585
585
|
`the render barrier resolves — ctx.rendered() (and the ` +
|
|
586
586
|
`ctx.get(handle) read it gates) can never settle here. Drop ` +
|
|
587
|
-
`
|
|
587
|
+
`ssr: false on this loader or move the handle read to ` +
|
|
588
588
|
`a component.`,
|
|
589
589
|
);
|
|
590
590
|
}
|
|
@@ -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
|
// ---------------------------------------------------------------------------
|
|
@@ -104,7 +136,7 @@ export async function resolveLoaders<TEnv>(
|
|
|
104
136
|
const errorContext = buildLoaderErrorContext(ctx);
|
|
105
137
|
|
|
106
138
|
if (emitStreaming) {
|
|
107
|
-
// awaitBeforeFlush (loader(Def, {
|
|
139
|
+
// awaitBeforeFlush (loader(Def, { ssr: false })): document
|
|
108
140
|
// renders await these loaders before returning, so their data is settled,
|
|
109
141
|
// their handle pushes beat the barrier snapshot, and a thrown notFound()'s
|
|
110
142
|
// status write deterministically precedes Response construction. The ids
|
|
@@ -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,13 +163,17 @@ 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(
|
|
148
173
|
loaderEntry,
|
|
149
174
|
ctx,
|
|
150
175
|
ctx.pathname,
|
|
151
|
-
// The bake key rides for flagged loaders too:
|
|
176
|
+
// The bake key rides for flagged loaders too: ssr:false
|
|
152
177
|
// bakes at capture regardless of the entry's loading() lane
|
|
153
178
|
// (loader-cache.ts capture branch) and its HIT-tail seed
|
|
154
179
|
// overlay needs the same key.
|
|
@@ -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
|
};
|
|
@@ -159,7 +159,7 @@ export function resolveLoaderData<TEnv>(
|
|
|
159
159
|
if (isShellCaptureActive(reqCtx)) {
|
|
160
160
|
// Capture lane, per LOADER (not per entry):
|
|
161
161
|
//
|
|
162
|
-
// - `
|
|
162
|
+
// - `ssr: false` (awaitBeforeFlush) — the BAKE lane. The flag's
|
|
163
163
|
// document promise is "this loader's data is in the HTML before first
|
|
164
164
|
// flush"; under ppr the pre-flush HTML IS the frozen prelude, so the
|
|
165
165
|
// loader executes at capture and its SETTLED return bakes into the
|
|
@@ -44,7 +44,7 @@ export { createMaskedLoaderPromise } from "./mask-nested.js";
|
|
|
44
44
|
/**
|
|
45
45
|
* Entry-level lane input for an entry's loaders under PPR (the loading()
|
|
46
46
|
* value; docs/design/loader-container-bake.md). The CAPTURE decision itself
|
|
47
|
-
* is per LOADER in loader-cache.ts:
|
|
47
|
+
* is per LOADER in loader-cache.ts: an `ssr: false`
|
|
48
48
|
* (awaitBeforeFlush) loader BAKES at capture regardless of this value — the
|
|
49
49
|
* flag's document promise ("data in the HTML before first flush") maps to
|
|
50
50
|
* the frozen prelude — while every other loader is LIVE (masked at capture,
|
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/rsc-rendering.ts
CHANGED
|
@@ -155,6 +155,7 @@ function createShellCaptureDescriptor(
|
|
|
155
155
|
ctx: HandlerContext<any>,
|
|
156
156
|
key: string,
|
|
157
157
|
searchSeed: string,
|
|
158
|
+
originSeed: string,
|
|
158
159
|
pprConfig: ResolvedPprConfig,
|
|
159
160
|
store: SegmentCacheStore<any>,
|
|
160
161
|
navigationOnly?: true,
|
|
@@ -162,6 +163,11 @@ function createShellCaptureDescriptor(
|
|
|
162
163
|
return {
|
|
163
164
|
key,
|
|
164
165
|
searchSeed,
|
|
166
|
+
// Derived from the same request URL as the key (the callers compute
|
|
167
|
+
// both next to each other, so they cannot drift): seeding the origin
|
|
168
|
+
// keeps origin-dependent static markup (Link's data-external)
|
|
169
|
+
// identical across capture, resume, and browser hydration.
|
|
170
|
+
originSeed,
|
|
165
171
|
buildVersion: ctx.version,
|
|
166
172
|
ttl: pprConfig.ttl,
|
|
167
173
|
swr: pprConfig.swr,
|
|
@@ -519,6 +525,7 @@ function* shellServePlan<TEnv>(
|
|
|
519
525
|
ctx,
|
|
520
526
|
key,
|
|
521
527
|
shellSearchSeed(url, reqCtx._searchParamsFilter),
|
|
528
|
+
url.origin,
|
|
522
529
|
pprConfig,
|
|
523
530
|
store,
|
|
524
531
|
);
|
|
@@ -1004,6 +1011,7 @@ function scheduleNavigationShellCapture<TEnv>(
|
|
|
1004
1011
|
partialCaptureKey ??
|
|
1005
1012
|
buildNavigationShellKey(url, reqCtx._searchParamsFilter),
|
|
1006
1013
|
shellSearchSeed(url, reqCtx._searchParamsFilter),
|
|
1014
|
+
url.origin,
|
|
1007
1015
|
pprConfig,
|
|
1008
1016
|
store,
|
|
1009
1017
|
true,
|
|
@@ -1524,6 +1532,8 @@ function serveShellHit(
|
|
|
1524
1532
|
// The shell key's own search — identical to the capture seed for
|
|
1525
1533
|
// this key, so the resume tree matches the captured tree.
|
|
1526
1534
|
search: shellSearchSeed(url, reqCtx._searchParamsFilter),
|
|
1535
|
+
// The HIT request's origin — same host as the capture's (key-scoped).
|
|
1536
|
+
origin: url.origin,
|
|
1527
1537
|
}),
|
|
1528
1538
|
);
|
|
1529
1539
|
};
|
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,
|
|
@@ -917,6 +920,15 @@ export interface ShellCaptureDescriptor {
|
|
|
917
920
|
* Omitted (build-time bare-pathname captures) = search-less, same as "".
|
|
918
921
|
*/
|
|
919
922
|
searchSeed?: string;
|
|
923
|
+
/**
|
|
924
|
+
* The scheduling request's origin, seeding the capture render's SSR store
|
|
925
|
+
* location. Shell keys are host-scoped, so the resume pass's request
|
|
926
|
+
* agrees modulo protocol drift; the seed keeps origin-dependent static
|
|
927
|
+
* markup (Link's data-external) identical across capture, resume, and
|
|
928
|
+
* browser hydration. Omitted (build-time host-agnostic captures) falls
|
|
929
|
+
* back to the internal host.
|
|
930
|
+
*/
|
|
931
|
+
originSeed?: string;
|
|
920
932
|
/**
|
|
921
933
|
* The RSC handler's build version (HandlerContext.version), stamped into the
|
|
922
934
|
* stored entry as ShellCacheEntry.buildVersion — the serve-side
|
|
@@ -1494,6 +1506,15 @@ export function deriveShellCaptureContext(
|
|
|
1494
1506
|
// applied ONLY at the captureHandles cache-write call site — every other
|
|
1495
1507
|
// getDataForSegment consumer (the render-barrier snapshot, prerender)
|
|
1496
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.
|
|
1497
1518
|
const handleLiveness = {
|
|
1498
1519
|
holes: false,
|
|
1499
1520
|
pendingPushes: 0,
|
|
@@ -1509,11 +1530,13 @@ export function deriveShellCaptureContext(
|
|
|
1509
1530
|
const pushedInLoaderScope = isInsideLoaderScope();
|
|
1510
1531
|
// Single walk: the mask reports whether it masked any nested thenable
|
|
1511
1532
|
// (the liveness declaration) while building the capture copy.
|
|
1533
|
+
let maskedNestedThenable = false;
|
|
1512
1534
|
const maskWithLiveness = (v: unknown): unknown => {
|
|
1513
1535
|
const report: MaskReport = { thenable: false };
|
|
1514
1536
|
const masked = maskNestedContainerThenables(v, undefined, report);
|
|
1515
|
-
if (
|
|
1516
|
-
|
|
1537
|
+
if (report.thenable) {
|
|
1538
|
+
maskedNestedThenable = true;
|
|
1539
|
+
if (!pushedInLoaderScope) handleLiveness.holes = true;
|
|
1517
1540
|
}
|
|
1518
1541
|
return masked;
|
|
1519
1542
|
};
|
|
@@ -1525,11 +1548,30 @@ export function deriveShellCaptureContext(
|
|
|
1525
1548
|
value.then(settle, settle);
|
|
1526
1549
|
}
|
|
1527
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
|
+
}
|
|
1528
1556
|
} else {
|
|
1529
1557
|
masked = maskWithLiveness(value);
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
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
|
+
}
|
|
1533
1575
|
}
|
|
1534
1576
|
rawCapturePush(handleName, segmentId, masked);
|
|
1535
1577
|
};
|
|
@@ -1767,6 +1809,7 @@ async function captureAndStoreShell(
|
|
|
1767
1809
|
// The shell key's own search seeds the capture render's store —
|
|
1768
1810
|
// static-part search reads bake what the key names.
|
|
1769
1811
|
search: capture.searchSeed,
|
|
1812
|
+
origin: capture.originSeed,
|
|
1770
1813
|
}),
|
|
1771
1814
|
);
|
|
1772
1815
|
} catch (error) {
|
package/src/rsc/ssr-setup.ts
CHANGED
|
@@ -120,6 +120,10 @@ export function createSsrHtmlStage<TEnv>(
|
|
|
120
120
|
...options.render,
|
|
121
121
|
streamMode,
|
|
122
122
|
search: options.url.search,
|
|
123
|
+
// origin: same out-of-band channel — seeds the SSR store location
|
|
124
|
+
// so origin-dependent markup (Link's data-external) agrees with the
|
|
125
|
+
// browser's window.location across hydration.
|
|
126
|
+
origin: options.url.origin,
|
|
123
127
|
}),
|
|
124
128
|
...(options.init && { init: options.init }),
|
|
125
129
|
};
|
package/src/rsc/types.ts
CHANGED
|
@@ -187,6 +187,12 @@ export interface SSRRenderOptions {
|
|
|
187
187
|
* search; see ShellCaptureOptions.search in the SSR entry).
|
|
188
188
|
*/
|
|
189
189
|
search?: string;
|
|
190
|
+
/**
|
|
191
|
+
* The live request's origin (`url.origin`), seeding the SSR store
|
|
192
|
+
* location so origin-dependent markup (Link's data-external) agrees with
|
|
193
|
+
* the browser across hydration. Absent on host-agnostic build captures.
|
|
194
|
+
*/
|
|
195
|
+
origin?: string;
|
|
190
196
|
}
|
|
191
197
|
|
|
192
198
|
/**
|
|
@@ -208,7 +214,12 @@ export interface SSRModule {
|
|
|
208
214
|
*/
|
|
209
215
|
captureShellHTML?: (
|
|
210
216
|
rscStream: ReadableStream<Uint8Array>,
|
|
211
|
-
options: {
|
|
217
|
+
options: {
|
|
218
|
+
quiesce: Promise<void>;
|
|
219
|
+
maxWaitMs?: number;
|
|
220
|
+
search?: string;
|
|
221
|
+
origin?: string;
|
|
222
|
+
},
|
|
212
223
|
) => Promise<{ prelude: Uint8Array; postponed: string | null } | null>;
|
|
213
224
|
|
|
214
225
|
/**
|
|
@@ -221,7 +232,12 @@ export interface SSRModule {
|
|
|
221
232
|
*/
|
|
222
233
|
resumeShellHTML?: (
|
|
223
234
|
rscStream: ReadableStream<Uint8Array>,
|
|
224
|
-
options: {
|
|
235
|
+
options: {
|
|
236
|
+
postponed: string | null;
|
|
237
|
+
nonce?: string;
|
|
238
|
+
search?: string;
|
|
239
|
+
origin?: string;
|
|
240
|
+
},
|
|
225
241
|
) => Promise<ReadableStream<Uint8Array>>;
|
|
226
242
|
}
|
|
227
243
|
|
|
@@ -260,12 +276,16 @@ export interface HandlerCacheConfig {
|
|
|
260
276
|
|
|
261
277
|
/**
|
|
262
278
|
* Nonce provider function type.
|
|
263
|
-
*
|
|
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.
|
|
264
284
|
*/
|
|
265
285
|
export type NonceProvider<TEnv = unknown> = (
|
|
266
286
|
request: Request,
|
|
267
287
|
env: TEnv,
|
|
268
|
-
) => string |
|
|
288
|
+
) => string | boolean | Promise<string | boolean>;
|
|
269
289
|
|
|
270
290
|
/**
|
|
271
291
|
* Options for creating an RSC handler
|