@rangojs/router 0.0.0-experimental.debug-cache-fix → 0.0.0-experimental.df410dd5
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/README.md +196 -43
- 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 +269 -96
- 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/testing/vitest.js +48 -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.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 +2659 -883
- 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/plugins/cloudflare-protocol-loader-hook.mjs +76 -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 +57 -11
- package/skills/breadcrumbs/SKILL.md +3 -1
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +243 -21
- package/skills/caching/SKILL.md +118 -2
- package/skills/composability/SKILL.md +27 -2
- package/skills/document-cache/SKILL.md +78 -55
- package/skills/handler-use/SKILL.md +364 -0
- package/skills/hooks/SKILL.md +229 -20
- package/skills/host-router/SKILL.md +45 -20
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +46 -4
- package/skills/layout/SKILL.md +28 -7
- package/skills/links/SKILL.md +249 -17
- package/skills/loader/SKILL.md +273 -53
- package/skills/middleware/SKILL.md +49 -12
- package/skills/migrate-nextjs/SKILL.md +562 -0
- package/skills/migrate-react-router/SKILL.md +769 -0
- package/skills/mime-routes/SKILL.md +27 -0
- package/skills/observability/SKILL.md +137 -0
- package/skills/parallel/SKILL.md +71 -6
- package/skills/prerender/SKILL.md +123 -100
- package/skills/rango/SKILL.md +242 -22
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +66 -9
- package/skills/route/SKILL.md +88 -4
- package/skills/router-setup/SKILL.md +90 -5
- package/skills/server-actions/SKILL.md +751 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/testing/SKILL.md +776 -0
- package/skills/typesafety/SKILL.md +329 -27
- package/skills/use-cache/SKILL.md +34 -5
- package/skills/view-transitions/SKILL.md +294 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +117 -0
- package/src/__internal.ts +1 -1
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/app-shell.ts +52 -0
- package/src/browser/app-version.ts +14 -0
- package/src/browser/event-controller.ts +86 -70
- package/src/browser/history-state.ts +21 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/navigation-bridge.ts +101 -13
- package/src/browser/navigation-client.ts +125 -53
- package/src/browser/navigation-store.ts +75 -17
- package/src/browser/navigation-transaction.ts +10 -28
- package/src/browser/partial-update.ts +90 -30
- package/src/browser/prefetch/cache.ts +129 -21
- package/src/browser/prefetch/fetch.ts +156 -18
- package/src/browser/prefetch/queue.ts +92 -29
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/rango-state.ts +53 -13
- package/src/browser/react/Link.tsx +72 -8
- package/src/browser/react/NavigationProvider.tsx +83 -33
- package/src/browser/react/context.ts +7 -2
- package/src/browser/react/filter-segment-order.ts +51 -7
- package/src/browser/react/index.ts +3 -0
- package/src/browser/react/location-state-shared.ts +175 -4
- package/src/browser/react/location-state.ts +39 -13
- package/src/browser/react/use-handle.ts +23 -64
- package/src/browser/react/use-navigation.ts +22 -2
- package/src/browser/react/use-params.ts +20 -8
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +43 -10
- package/src/browser/react/use-segments.ts +11 -8
- package/src/browser/response-adapter.ts +25 -0
- package/src/browser/rsc-router.tsx +87 -22
- package/src/browser/scroll-restoration.ts +29 -19
- package/src/browser/segment-reconciler.ts +36 -14
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +31 -36
- package/src/browser/types.ts +48 -5
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +65 -40
- package/src/build/generate-route-types.ts +5 -0
- package/src/build/index.ts +2 -0
- package/src/build/route-trie.ts +52 -25
- package/src/build/route-types/codegen.ts +4 -4
- package/src/build/route-types/include-resolution.ts +9 -2
- package/src/build/route-types/per-module-writer.ts +7 -4
- package/src/build/route-types/router-processing.ts +266 -86
- package/src/build/route-types/scan-filter.ts +9 -2
- package/src/build/route-types/source-scan.ts +118 -0
- package/src/build/runtime-discovery.ts +9 -20
- package/src/cache/cache-scope.ts +40 -56
- package/src/cache/cf/cf-cache-store.ts +54 -13
- package/src/cache/taint.ts +55 -0
- package/src/client.rsc.tsx +3 -0
- package/src/client.tsx +94 -238
- package/src/context-var.ts +72 -2
- package/src/decode-loader-results.ts +36 -0
- package/src/errors.ts +30 -1
- package/src/handle.ts +65 -12
- package/src/host/index.ts +2 -2
- package/src/host/router.ts +129 -57
- package/src/host/types.ts +31 -2
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +140 -20
- package/src/index.rsc.ts +12 -5
- package/src/index.ts +61 -11
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +21 -6
- package/src/loader.ts +3 -10
- package/src/missing-id-error.ts +68 -0
- package/src/outlet-context.ts +1 -1
- package/src/prerender/store.ts +5 -4
- package/src/prerender.ts +141 -80
- package/src/response-utils.ts +37 -0
- package/src/reverse.ts +65 -15
- package/src/route-content-wrapper.tsx +6 -28
- package/src/route-definition/dsl-helpers.ts +411 -261
- package/src/route-definition/helper-factories.ts +29 -139
- package/src/route-definition/helpers-types.ts +110 -34
- package/src/route-definition/index.ts +3 -0
- package/src/route-definition/redirect.ts +9 -1
- package/src/route-definition/resolve-handler-use.ts +155 -0
- package/src/route-definition/use-item-types.ts +32 -0
- package/src/route-types.ts +37 -41
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +113 -1
- package/src/router/error-handling.ts +1 -1
- package/src/router/handler-context.ts +77 -38
- package/src/router/intercept-resolution.ts +13 -22
- package/src/router/lazy-includes.ts +8 -8
- package/src/router/loader-resolution.ts +174 -22
- package/src/router/manifest.ts +22 -13
- package/src/router/match-api.ts +128 -192
- package/src/router/match-handlers.ts +63 -20
- package/src/router/match-middleware/cache-lookup.ts +70 -97
- package/src/router/match-middleware/cache-store.ts +3 -2
- package/src/router/match-middleware/segment-resolution.ts +53 -0
- package/src/router/match-result.ts +103 -4
- package/src/router/metrics.ts +1 -1
- package/src/router/middleware-types.ts +21 -34
- package/src/router/middleware.ts +101 -89
- package/src/router/navigation-snapshot.ts +182 -0
- package/src/router/pattern-matching.ts +101 -17
- package/src/router/prerender-match.ts +110 -10
- package/src/router/preview-match.ts +32 -102
- package/src/router/request-classification.ts +286 -0
- package/src/router/revalidation.ts +58 -2
- package/src/router/route-snapshot.ts +245 -0
- package/src/router/router-interfaces.ts +77 -28
- package/src/router/router-options.ts +76 -11
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +105 -13
- package/src/router/segment-resolution/helpers.ts +29 -24
- package/src/router/segment-resolution/revalidation.ts +236 -112
- package/src/router/segment-resolution/view-transition-default.ts +36 -0
- package/src/router/substitute-pattern-params.ts +56 -0
- package/src/router/telemetry.ts +99 -0
- package/src/router/trie-matching.ts +18 -13
- package/src/router/types.ts +9 -0
- package/src/router/url-params.ts +49 -0
- package/src/router.ts +86 -22
- package/src/rsc/handler-context.ts +2 -2
- package/src/rsc/handler.ts +440 -381
- package/src/rsc/helpers.ts +91 -43
- package/src/rsc/index.ts +1 -1
- package/src/rsc/loader-fetch.ts +23 -3
- package/src/rsc/manifest-init.ts +5 -1
- package/src/rsc/origin-guard.ts +28 -10
- package/src/rsc/progressive-enhancement.ts +18 -2
- package/src/rsc/response-route-handler.ts +46 -53
- package/src/rsc/rsc-rendering.ts +41 -48
- package/src/rsc/runtime-warnings.ts +9 -10
- package/src/rsc/server-action.ts +25 -37
- package/src/rsc/ssr-setup.ts +18 -2
- package/src/rsc/types.ts +17 -3
- package/src/search-params.ts +4 -4
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-loader-promise.ts +122 -0
- package/src/segment-system.tsx +132 -116
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +190 -51
- package/src/server/cookie-store.ts +28 -4
- package/src/server/handle-store.ts +19 -0
- package/src/server/loader-registry.ts +9 -8
- package/src/server/request-context.ts +195 -57
- package/src/ssr/index.tsx +8 -1
- package/src/static-handler.ts +19 -7
- package/src/testing/cache-status.ts +166 -0
- package/src/testing/collect-handle.ts +63 -0
- package/src/testing/dispatch.ts +440 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +154 -0
- package/src/testing/e2e/index.ts +149 -0
- package/src/testing/e2e/matchers.ts +51 -0
- package/src/testing/e2e/page-helpers.ts +272 -0
- package/src/testing/e2e/parity.ts +306 -0
- package/src/testing/e2e/server.ts +183 -0
- package/src/testing/flight-matchers.ts +104 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +309 -0
- package/src/testing/flight.entry.ts +39 -0
- package/src/testing/flight.ts +197 -0
- package/src/testing/generated-routes.ts +223 -0
- package/src/testing/index.ts +106 -0
- package/src/testing/internal/context.ts +304 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/render-route.tsx +565 -0
- package/src/testing/run-loader.ts +341 -0
- package/src/testing/run-middleware.ts +179 -0
- package/src/testing/vitest-stubs/cloudflare-email.ts +9 -0
- package/src/testing/vitest-stubs/cloudflare-workers.ts +21 -0
- package/src/testing/vitest-stubs/plugin-rsc.ts +16 -0
- package/src/testing/vitest-stubs/version.ts +5 -0
- package/src/testing/vitest.ts +185 -0
- package/src/types/cache-types.ts +4 -4
- package/src/types/global-namespace.ts +39 -26
- package/src/types/handler-context.ts +103 -67
- package/src/types/index.ts +1 -0
- package/src/types/loader-types.ts +41 -15
- package/src/types/request-scope.ts +126 -0
- package/src/types/route-entry.ts +12 -1
- package/src/types/segments.ts +36 -2
- package/src/urls/include-helper.ts +34 -67
- package/src/urls/index.ts +0 -3
- package/src/urls/path-helper-types.ts +50 -9
- package/src/urls/path-helper.ts +63 -63
- package/src/urls/pattern-types.ts +48 -19
- package/src/urls/response-types.ts +25 -22
- package/src/urls/type-extraction.ts +26 -116
- package/src/urls/urls-function.ts +1 -5
- package/src/use-loader.tsx +487 -44
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +34 -37
- package/src/vite/discovery/discover-routers.ts +105 -51
- package/src/vite/discovery/discovery-errors.ts +194 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +188 -93
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/state.ts +46 -4
- package/src/vite/discovery/virtual-module-codegen.ts +13 -23
- package/src/vite/index.ts +6 -0
- package/src/vite/plugin-types.ts +126 -4
- package/src/vite/plugins/cjs-to-esm.ts +8 -7
- package/src/vite/plugins/client-ref-dedup.ts +16 -0
- package/src/vite/plugins/client-ref-hashing.ts +28 -5
- package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
- package/src/vite/plugins/expose-action-id.ts +54 -30
- package/src/vite/plugins/expose-id-utils.ts +24 -8
- package/src/vite/plugins/expose-ids/export-analysis.ts +100 -20
- package/src/vite/plugins/expose-ids/handler-transform.ts +12 -35
- package/src/vite/plugins/expose-ids/loader-transform.ts +3 -5
- package/src/vite/plugins/expose-ids/router-transform.ts +20 -3
- package/src/vite/plugins/expose-internal-ids.ts +544 -317
- package/src/vite/plugins/performance-tracks.ts +92 -0
- package/src/vite/plugins/refresh-cmd.ts +88 -26
- package/src/vite/plugins/use-cache-transform.ts +65 -50
- package/src/vite/plugins/version-injector.ts +39 -23
- package/src/vite/plugins/version-plugin.ts +59 -2
- package/src/vite/plugins/virtual-entries.ts +2 -2
- package/src/vite/rango.ts +130 -26
- package/src/vite/router-discovery.ts +920 -129
- package/src/vite/utils/ast-handler-extract.ts +15 -15
- package/src/vite/utils/banner.ts +1 -1
- package/src/vite/utils/bundle-analysis.ts +4 -2
- package/src/vite/utils/client-chunks.ts +190 -0
- package/src/vite/utils/forward-user-plugins.ts +193 -0
- package/src/vite/utils/manifest-utils.ts +21 -5
- package/src/vite/utils/package-resolution.ts +41 -1
- package/src/vite/utils/prerender-utils.ts +38 -5
- package/src/vite/utils/shared-utils.ts +109 -27
- package/src/browser/action-response-classifier.ts +0 -99
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/// <reference path="./flight-runtime.d.ts" />
|
|
2
|
+
/**
|
|
3
|
+
* renderServerTree — REAL Flight serialize -> deserialize round-trip for unit
|
|
4
|
+
* tests, returning an INSPECTABLE React element tree (not just the wire string).
|
|
5
|
+
*
|
|
6
|
+
* Where it sits:
|
|
7
|
+
* - `renderRoute` (testing/dom): a synthetic CLIENT tree, no Flight at all.
|
|
8
|
+
* - `renderToFlightString` (testing/flight): the real Flight WIRE STRING, for
|
|
9
|
+
* `toMatchFlight` substring/snapshot assertions.
|
|
10
|
+
* - `renderServerTree` (here): serializes the real Flight, then deserializes it
|
|
11
|
+
* back to a React element tree you can traverse — so you can assert TYPED prop
|
|
12
|
+
* fidelity across the server/client boundary (a `Date` comes back a `Date`,
|
|
13
|
+
* not the opaque `$D...` wire encoding) and detect whether a `"use client"`
|
|
14
|
+
* component actually crossed the boundary (an `I` row) or was inlined.
|
|
15
|
+
*
|
|
16
|
+
* Scope (deliberate): serialize + deserialize ONLY. There is NO hydration and
|
|
17
|
+
* NO interaction — the deserialized client boundaries are inert placeholders
|
|
18
|
+
* carrying their props. Real interaction/hydration-mismatch testing stays at the
|
|
19
|
+
* e2e tier; in-process happy-dom hydration re-tests React more than your app and
|
|
20
|
+
* misses the only hydration bug worth a dedicated test (server/client divergence
|
|
21
|
+
* needs a real browser).
|
|
22
|
+
*
|
|
23
|
+
* Runs under the `react-server` export condition, in the SAME worker as the
|
|
24
|
+
* serializer (the client deserializer's react/react-dom imports are inert here
|
|
25
|
+
* because deserialize-only never renders). Use it from the rsc Vitest project
|
|
26
|
+
* (vitest.rsc.config.ts); name files `*.rsc-test.{ts,tsx}`.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
// MUST be first: defines the webpack-style globals the vendored client reads at
|
|
30
|
+
// module-eval time, before that client module is imported below.
|
|
31
|
+
import "./internal/flight-client-globals.js";
|
|
32
|
+
import type { ReactNode } from "react";
|
|
33
|
+
import { createFromReadableStream } from "@vitejs/plugin-rsc/react/browser";
|
|
34
|
+
import { setRequireModule } from "@vitejs/plugin-rsc/core/browser";
|
|
35
|
+
import * as RSDServer from "@vitejs/plugin-rsc/vendor/react-server-dom/server.edge";
|
|
36
|
+
import { serializeToFlightString } from "./flight.js";
|
|
37
|
+
import type { RenderToFlightStringOptions } from "./flight.js";
|
|
38
|
+
|
|
39
|
+
/** Options for {@link renderServerTree}. */
|
|
40
|
+
export interface RenderServerTreeOptions extends RenderToFlightStringOptions {
|
|
41
|
+
/**
|
|
42
|
+
* The `"use client"` modules reachable from the server tree, so their exports
|
|
43
|
+
* serialize as real client boundaries (`I` rows) instead of being inlined.
|
|
44
|
+
*
|
|
45
|
+
* Pass `import.meta.glob("./**\/*.client.tsx", { eager: true })` — one line.
|
|
46
|
+
* Each module's function exports are registered as client references (in place)
|
|
47
|
+
* keyed by the glob path, with the export name as the boundary name. The rsc
|
|
48
|
+
* Vitest project does NOT apply the `"use client"` transform, so without this a
|
|
49
|
+
* client component would render server-side (and likely throw on a hook).
|
|
50
|
+
*
|
|
51
|
+
* Omit it for pure server-only trees. Modules already registered as client
|
|
52
|
+
* references (e.g. by a transform) are left untouched.
|
|
53
|
+
*/
|
|
54
|
+
clientModules?: Record<string, unknown>;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Result of {@link renderServerTree}. */
|
|
58
|
+
export interface RenderServerTreeResult {
|
|
59
|
+
/** The raw Flight wire string (so `toMatchFlight` assertions still apply). */
|
|
60
|
+
flight: string;
|
|
61
|
+
/**
|
|
62
|
+
* The deserialized React element tree. Server elements are plain React
|
|
63
|
+
* elements; each client boundary is an inert placeholder element whose `props`
|
|
64
|
+
* are the real, deserialized JS values that crossed the boundary. Use
|
|
65
|
+
* {@link findClientBoundary} / {@link findClientBoundaries} to locate them.
|
|
66
|
+
*/
|
|
67
|
+
tree: unknown;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** A client boundary located in a deserialized tree. */
|
|
71
|
+
export interface ClientBoundary {
|
|
72
|
+
/** The client module id (the glob path it was registered under). */
|
|
73
|
+
id: string;
|
|
74
|
+
/** The export name of the client component (the boundary name). */
|
|
75
|
+
name: string;
|
|
76
|
+
/** The props that crossed the boundary, as real deserialized JS values. */
|
|
77
|
+
props: Record<string, unknown>;
|
|
78
|
+
/** The raw deserialized element (for advanced assertions). */
|
|
79
|
+
element: unknown;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const CLIENT_REFERENCE = Symbol.for("react.client.reference");
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Register every function export of each client module as a client reference,
|
|
86
|
+
* in place (ESM live-binding identity makes the server tree's own import see the
|
|
87
|
+
* reference). Idempotent: already-registered exports are skipped.
|
|
88
|
+
*/
|
|
89
|
+
function registerClientModules(modules: Record<string, unknown>): void {
|
|
90
|
+
for (const [modulePath, mod] of Object.entries(modules)) {
|
|
91
|
+
if (mod == null || typeof mod !== "object") continue;
|
|
92
|
+
for (const [exportName, value] of Object.entries(mod)) {
|
|
93
|
+
if (typeof value !== "function") continue;
|
|
94
|
+
const ref = value as { $$typeof?: symbol; $$id?: string };
|
|
95
|
+
if (ref.$$typeof === CLIENT_REFERENCE || ref.$$id) continue;
|
|
96
|
+
RSDServer.registerClientReference(value, modulePath, exportName);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* A client manifest that resolves ANY registered client reference without
|
|
103
|
+
* needing to enumerate them. `$$id` is `${id}#${exportName}`; the serializer
|
|
104
|
+
* looks it up here. We omit `async`, so each `I` row is a 3-element row and the
|
|
105
|
+
* deserialized boundary's payload is a clean `resolved_module` whose value is
|
|
106
|
+
* `[id, [], name]` — synchronously readable by {@link findClientBoundaries}.
|
|
107
|
+
*/
|
|
108
|
+
function makeClientManifest(): unknown {
|
|
109
|
+
return new Proxy(
|
|
110
|
+
{},
|
|
111
|
+
{
|
|
112
|
+
get(_target, key) {
|
|
113
|
+
if (typeof key !== "string") return undefined;
|
|
114
|
+
const hash = key.lastIndexOf("#");
|
|
115
|
+
const id = hash >= 0 ? key.slice(0, hash) : key;
|
|
116
|
+
const name = hash >= 0 ? key.slice(hash + 1) : "default";
|
|
117
|
+
return { id, chunks: [], name };
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
let loadInstalled = false;
|
|
124
|
+
/**
|
|
125
|
+
* Install the deserialize-side module loader. For the non-async manifest above,
|
|
126
|
+
* the deserializer never calls it (boundaries stay placeholders), so it throws a
|
|
127
|
+
* clear error if a code path ever does try to execute a client reference.
|
|
128
|
+
*/
|
|
129
|
+
function installDeserializeLoad(): void {
|
|
130
|
+
if (loadInstalled) return;
|
|
131
|
+
loadInstalled = true;
|
|
132
|
+
setRequireModule({
|
|
133
|
+
load: (id: string) => {
|
|
134
|
+
throw new Error(
|
|
135
|
+
`renderServerTree does not execute client references (deserialize-only). ` +
|
|
136
|
+
`A client reference "${id}" was resolved — render/interaction is the e2e tier.`,
|
|
137
|
+
);
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function stringToStream(text: string): ReadableStream<Uint8Array> {
|
|
143
|
+
const bytes = new TextEncoder().encode(text);
|
|
144
|
+
return new ReadableStream({
|
|
145
|
+
start(controller) {
|
|
146
|
+
controller.enqueue(bytes);
|
|
147
|
+
controller.close();
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Serialize a server component to real Flight, then deserialize it back to an
|
|
154
|
+
* inspectable React element tree. See the module header for scope.
|
|
155
|
+
*
|
|
156
|
+
* Must run under the `react-server` export condition.
|
|
157
|
+
*/
|
|
158
|
+
export async function renderServerTree(
|
|
159
|
+
element: ReactNode,
|
|
160
|
+
opts: RenderServerTreeOptions = {},
|
|
161
|
+
): Promise<RenderServerTreeResult> {
|
|
162
|
+
if (opts.clientModules) registerClientModules(opts.clientModules);
|
|
163
|
+
const flight = await serializeToFlightString(
|
|
164
|
+
element,
|
|
165
|
+
opts,
|
|
166
|
+
makeClientManifest(),
|
|
167
|
+
);
|
|
168
|
+
installDeserializeLoad();
|
|
169
|
+
const payload = await createFromReadableStream(stringToStream(flight));
|
|
170
|
+
// Resolve the top server chunk so the consumer gets their element, not a lazy.
|
|
171
|
+
return { flight, tree: resolveServerLazy(unwrapPayload(payload)) };
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* The serializer wraps the element in Rango's payload shape
|
|
176
|
+
* (`{ metadata: { segments: [{ component }] } }`) to mirror the real wire
|
|
177
|
+
* format. Return the consumer's own element tree, not that wrapper.
|
|
178
|
+
*/
|
|
179
|
+
function unwrapPayload(payload: unknown): unknown {
|
|
180
|
+
const segment = (
|
|
181
|
+
payload as { metadata?: { segments?: Array<{ component?: unknown }> } }
|
|
182
|
+
)?.metadata?.segments?.[0];
|
|
183
|
+
return segment && "component" in segment ? segment.component : payload;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
interface FlightLazy {
|
|
187
|
+
_payload: { status: string; value: unknown };
|
|
188
|
+
_init: (payload: unknown) => unknown;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function asFlightLazy(node: unknown): FlightLazy | undefined {
|
|
192
|
+
const candidate = node as Partial<FlightLazy> | null;
|
|
193
|
+
if (
|
|
194
|
+
candidate &&
|
|
195
|
+
typeof candidate === "object" &&
|
|
196
|
+
typeof candidate._init === "function" &&
|
|
197
|
+
candidate._payload &&
|
|
198
|
+
typeof (candidate._payload as { status?: unknown }).status === "string"
|
|
199
|
+
) {
|
|
200
|
+
return candidate as FlightLazy;
|
|
201
|
+
}
|
|
202
|
+
return undefined;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* An async server component serializes as a deferred chunk that deserializes to
|
|
207
|
+
* a lazy (`status: "resolved_model"`). Initialize it to the materialized element
|
|
208
|
+
* (synchronous for a fully-drained stream; never calls a client `load`). Client
|
|
209
|
+
* references (`status: "resolved_module"`) are left untouched — they are the
|
|
210
|
+
* boundary markers {@link findClientBoundaries} reads.
|
|
211
|
+
*/
|
|
212
|
+
function resolveServerLazy(node: unknown): unknown {
|
|
213
|
+
let current = node;
|
|
214
|
+
for (let guard = 0; guard < 1000; guard++) {
|
|
215
|
+
const lazy = asFlightLazy(current);
|
|
216
|
+
if (!lazy || lazy._payload.status !== "resolved_model") return current;
|
|
217
|
+
try {
|
|
218
|
+
current = lazy._init(lazy._payload);
|
|
219
|
+
} catch {
|
|
220
|
+
return current;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return current;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
interface ClientBoundaryElement {
|
|
227
|
+
type: { _payload: { status: string; value: unknown[] } };
|
|
228
|
+
props?: Record<string, unknown>;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
function isClientBoundaryElement(node: unknown): node is ClientBoundaryElement {
|
|
232
|
+
const type = (node as { type?: unknown })?.type as
|
|
233
|
+
| { _payload?: { status?: string; value?: unknown } }
|
|
234
|
+
| undefined;
|
|
235
|
+
const payload = type?._payload;
|
|
236
|
+
return (
|
|
237
|
+
!!payload &&
|
|
238
|
+
payload.status === "resolved_module" &&
|
|
239
|
+
Array.isArray(payload.value)
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Walk a deserialized tree and return every client boundary, in document order,
|
|
245
|
+
* each with its id, export name, and typed props. Pass `name` to keep only the
|
|
246
|
+
* boundaries with that export name.
|
|
247
|
+
*
|
|
248
|
+
* Always returns an array (no throw on zero/many). For a single expected
|
|
249
|
+
* boundary, destructure the first: `const [tag] = findClientBoundaries(tree,
|
|
250
|
+
* "PriceTag")` — and assert on `.length` when the count matters (a missing name
|
|
251
|
+
* yields `[]`, so `tag` would be `undefined`).
|
|
252
|
+
*/
|
|
253
|
+
export function findClientBoundaries(
|
|
254
|
+
tree: unknown,
|
|
255
|
+
name?: string,
|
|
256
|
+
): ClientBoundary[] {
|
|
257
|
+
const out: ClientBoundary[] = [];
|
|
258
|
+
const seen = new Set<unknown>();
|
|
259
|
+
const visit = (raw: unknown): void => {
|
|
260
|
+
// Materialize async-server-component chunks so we can traverse into them;
|
|
261
|
+
// client-reference chunks pass through untouched.
|
|
262
|
+
const node = resolveServerLazy(raw);
|
|
263
|
+
if (node == null || typeof node !== "object") return;
|
|
264
|
+
if (seen.has(node)) return;
|
|
265
|
+
seen.add(node);
|
|
266
|
+
if (Array.isArray(node)) {
|
|
267
|
+
for (const child of node) visit(child);
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
if (isClientBoundaryElement(node)) {
|
|
271
|
+
const value = node.type._payload.value;
|
|
272
|
+
out.push({
|
|
273
|
+
id: String(value[0]),
|
|
274
|
+
name: String(value[2]),
|
|
275
|
+
props: node.props ?? {},
|
|
276
|
+
element: node,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
// Recurse all own enumerable values: the tree is a deserialized payload
|
|
280
|
+
// (metadata -> segments -> component -> children/props), not just nested
|
|
281
|
+
// React props.
|
|
282
|
+
for (const value of Object.values(node as Record<string, unknown>)) {
|
|
283
|
+
visit(value);
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
visit(tree);
|
|
287
|
+
return name === undefined
|
|
288
|
+
? out
|
|
289
|
+
: out.filter((boundary) => boundary.name === name);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Smoke check that the vendored client deserializer subpaths still resolve. The
|
|
294
|
+
* paths are private to plugin-rsc; a minor bump could relocate them. Call this in
|
|
295
|
+
* a test to fail loudly with a clear message instead of an opaque import error.
|
|
296
|
+
*/
|
|
297
|
+
export function assertFlightTreeRuntimeAvailable(): void {
|
|
298
|
+
if (
|
|
299
|
+
typeof createFromReadableStream !== "function" ||
|
|
300
|
+
typeof setRequireModule !== "function" ||
|
|
301
|
+
typeof RSDServer.registerClientReference !== "function"
|
|
302
|
+
) {
|
|
303
|
+
throw new Error(
|
|
304
|
+
"renderServerTree runtime not available: a @vitejs/plugin-rsc client/server " +
|
|
305
|
+
"subpath did not export the expected function. A plugin-rsc upgrade may have " +
|
|
306
|
+
"moved react/browser, core/browser, or vendor/react-server-dom/server.edge.",
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rangojs/router/testing/flight
|
|
3
|
+
*
|
|
4
|
+
* Real React Server Component (Flight) rendering for unit tests. This entry is
|
|
5
|
+
* SEPARATE from the main ./testing barrel because its serializer (the vendored
|
|
6
|
+
* react-server-dom build) can only be imported under the `react-server` node
|
|
7
|
+
* condition; importing it elsewhere throws. Use it only from a Vitest project
|
|
8
|
+
* configured with that condition (see vitest.rsc.config.ts) — name those test
|
|
9
|
+
* files `*.rsc-test.{ts,tsx}` and run `pnpm test:unit:rsc`.
|
|
10
|
+
*
|
|
11
|
+
* This entry deliberately does NOT pull in Vitest. The `toMatchFlight` /
|
|
12
|
+
* `toMatchFlightSnapshot` matchers (which import `vitest`) live at the separate
|
|
13
|
+
* `@rangojs/router/testing/flight-matchers` subpath, so a consumer can import
|
|
14
|
+
* `renderToFlightString` without taking a hard dependency on Vitest.
|
|
15
|
+
*
|
|
16
|
+
* `renderToFlightString` returns the wire STRING (for `toMatchFlight`).
|
|
17
|
+
* `renderServerTree` additionally deserializes it back to an inspectable React
|
|
18
|
+
* element tree, so you can assert typed prop fidelity across the client boundary
|
|
19
|
+
* (a `Date` comes back a `Date`) and detect inlined-vs-island. Serialize +
|
|
20
|
+
* deserialize only — no hydration/interaction (that is the e2e tier).
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
export {
|
|
24
|
+
renderToFlightString,
|
|
25
|
+
normalizeFlight,
|
|
26
|
+
assertFlightRuntimeAvailable,
|
|
27
|
+
} from "./flight.js";
|
|
28
|
+
export type { RenderToFlightStringOptions } from "./flight.js";
|
|
29
|
+
|
|
30
|
+
export {
|
|
31
|
+
renderServerTree,
|
|
32
|
+
findClientBoundaries,
|
|
33
|
+
assertFlightTreeRuntimeAvailable,
|
|
34
|
+
} from "./flight-tree.js";
|
|
35
|
+
export type {
|
|
36
|
+
RenderServerTreeOptions,
|
|
37
|
+
RenderServerTreeResult,
|
|
38
|
+
ClientBoundary,
|
|
39
|
+
} from "./flight-tree.js";
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/// <reference path="./flight-runtime.d.ts" />
|
|
2
|
+
/**
|
|
3
|
+
* renderToFlightString — REAL React Server Component (Flight) rendering for
|
|
4
|
+
* unit tests of @rangojs/router consumer apps.
|
|
5
|
+
*
|
|
6
|
+
* This module renders a server component tree to its Flight wire string using
|
|
7
|
+
* the same react-server-dom serializer the router uses at runtime. It runs in
|
|
8
|
+
* plain node (no Vite, no browser), but ONLY under the `react-server` export
|
|
9
|
+
* condition. The serializer is the VENDORED build shipped with
|
|
10
|
+
* @vitejs/plugin-rsc — the public `@vitejs/plugin-rsc/rsc` entry top-level
|
|
11
|
+
* imports Vite virtual modules and is not usable outside a Vite build.
|
|
12
|
+
*
|
|
13
|
+
* Run the example/tests for this module via the dedicated rsc vitest project
|
|
14
|
+
* (vitest.rsc.config.ts), which forces `--conditions=react-server` on the
|
|
15
|
+
* worker. The main vitest project must NOT use that condition (it would flip
|
|
16
|
+
* React to the no-hooks server build and break the ~50 tests that mock
|
|
17
|
+
* @vitejs/plugin-rsc/rsc).
|
|
18
|
+
*
|
|
19
|
+
* Scope / limitations (v1):
|
|
20
|
+
* - Server-only / leaf trees. A tree containing a CLIENT component emits an
|
|
21
|
+
* `I[...]` import row whose module id will not resolve against the empty `{}`
|
|
22
|
+
* client manifest used here — fine for snapshotting the SHAPE of the payload,
|
|
23
|
+
* but the client reference cannot be executed/hydrated. The interactive DOM
|
|
24
|
+
* render (`renderServer`) is deferred (see module TODO at bottom of report).
|
|
25
|
+
* - The vendored subpath is a private plugin-rsc path; a minor bump could move
|
|
26
|
+
* it. `assertFlightRuntimeAvailable()` provides a smoke check.
|
|
27
|
+
* - For stable snapshots, run under NODE_ENV=production: the production
|
|
28
|
+
* serializer drops the dev-only debug-info rows (the `N<timestamp>` reference
|
|
29
|
+
* row, the per-component `stack`/`env` rows, and `D{...}` timing rows),
|
|
30
|
+
* leaving just the rendered tree row(s).
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
import type { ReactNode } from "react";
|
|
34
|
+
// Vendored react-server-dom serializer. Resolves via plugin-rsc's
|
|
35
|
+
// `"./*": "./dist/*.js"` export to
|
|
36
|
+
// dist/vendor/react-server-dom/server.edge.js. Only loadable under the
|
|
37
|
+
// `react-server` export condition.
|
|
38
|
+
import * as RSDServer from "@vitejs/plugin-rsc/vendor/react-server-dom/server.edge";
|
|
39
|
+
import {
|
|
40
|
+
createRequestContext,
|
|
41
|
+
runWithRequestContext,
|
|
42
|
+
setRequestContextParams,
|
|
43
|
+
} from "../server/request-context.js";
|
|
44
|
+
import type { RscPayload } from "../rsc/types.js";
|
|
45
|
+
import type { ResolvedSegment } from "../types.js";
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Options for {@link renderToFlightString}.
|
|
49
|
+
*/
|
|
50
|
+
export interface RenderToFlightStringOptions {
|
|
51
|
+
/** Request URL. Defaults to `http://localhost/`. */
|
|
52
|
+
url?: string;
|
|
53
|
+
/** Request headers (e.g. Cookie) visible to the server tree. */
|
|
54
|
+
headers?: HeadersInit;
|
|
55
|
+
/** Env / bindings exposed as `ctx.env`. Defaults to `{}`. */
|
|
56
|
+
env?: unknown;
|
|
57
|
+
/** Route params exposed via `ctx.params` and loader contexts. */
|
|
58
|
+
params?: Record<string, string>;
|
|
59
|
+
/** Matched route name (drives `ctx.routeName` and scoped reverse). */
|
|
60
|
+
routeName?: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const DEFAULT_URL = "http://localhost/";
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Wrap a single element in the minimal ResolvedSegment + RscPayload shape that
|
|
67
|
+
* mirrors Rango's wire format, so the serialized output matches what a real
|
|
68
|
+
* route segment would emit.
|
|
69
|
+
*/
|
|
70
|
+
function wrapAsPayload(element: ReactNode, pathname: string): RscPayload {
|
|
71
|
+
const segment: ResolvedSegment = {
|
|
72
|
+
id: "test",
|
|
73
|
+
namespace: "",
|
|
74
|
+
type: "route",
|
|
75
|
+
index: 0,
|
|
76
|
+
component: element,
|
|
77
|
+
};
|
|
78
|
+
return {
|
|
79
|
+
metadata: {
|
|
80
|
+
pathname,
|
|
81
|
+
segments: [segment],
|
|
82
|
+
version: "test",
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Render a server component (or any ReactNode) to its Flight wire string.
|
|
89
|
+
*
|
|
90
|
+
* The element is wrapped in a minimal Rango segment + payload, then serialized
|
|
91
|
+
* with the vendored react-server-dom server. A request context is active for
|
|
92
|
+
* the duration of the render (drained INSIDE runWithRequestContext) so async
|
|
93
|
+
* server components can call getRequestContext(), read params, cookies, etc.
|
|
94
|
+
*
|
|
95
|
+
* Must run under the `react-server` export condition (see module header).
|
|
96
|
+
*/
|
|
97
|
+
export async function renderToFlightString(
|
|
98
|
+
element: ReactNode,
|
|
99
|
+
opts: RenderToFlightStringOptions = {},
|
|
100
|
+
): Promise<string> {
|
|
101
|
+
// Server-only trees: empty client manifest. A client reference would emit an
|
|
102
|
+
// unresolvable `I` row here; use renderServerTree (flight-tree.ts) when the
|
|
103
|
+
// tree has client boundaries you want to inspect.
|
|
104
|
+
return serializeToFlightString(element, opts, {});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Shared serialize core: set up a request context, wrap the element as a Rango
|
|
109
|
+
* payload, and serialize it with the given client-reference manifest. Used by
|
|
110
|
+
* {@link renderToFlightString} (empty manifest) and renderServerTree (a manifest
|
|
111
|
+
* that resolves every registered client reference).
|
|
112
|
+
*
|
|
113
|
+
* Must run under the `react-server` export condition (see module header).
|
|
114
|
+
*/
|
|
115
|
+
export async function serializeToFlightString(
|
|
116
|
+
element: ReactNode,
|
|
117
|
+
opts: RenderToFlightStringOptions,
|
|
118
|
+
clientManifest: unknown,
|
|
119
|
+
): Promise<string> {
|
|
120
|
+
const url = new URL(opts.url ?? DEFAULT_URL);
|
|
121
|
+
const request = new Request(url, { headers: opts.headers });
|
|
122
|
+
const ctx = createRequestContext({
|
|
123
|
+
env: opts.env ?? {},
|
|
124
|
+
request,
|
|
125
|
+
url,
|
|
126
|
+
variables: {},
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
const payload = wrapAsPayload(element, url.pathname);
|
|
130
|
+
|
|
131
|
+
return runWithRequestContext(ctx, async () => {
|
|
132
|
+
setRequestContextParams(opts.params ?? {}, opts.routeName);
|
|
133
|
+
// Capture (do NOT rethrow) the first render error. The serializer calls
|
|
134
|
+
// onError from its own scheduled work; throwing there escapes as an
|
|
135
|
+
// unhandled rejection AND leaves the stream un-closed, so the drain below
|
|
136
|
+
// would hang until the test times out. Production's onError returns void
|
|
137
|
+
// (rsc-rendering.ts) so the stream completes with an error row. We mirror
|
|
138
|
+
// that — let the stream finish — then surface the error as a clean
|
|
139
|
+
// rejection after draining, so `await expect(...).rejects.toThrow()` works.
|
|
140
|
+
let renderError: unknown;
|
|
141
|
+
let didError = false;
|
|
142
|
+
const stream = RSDServer.renderToReadableStream(payload, clientManifest, {
|
|
143
|
+
onError(error: unknown) {
|
|
144
|
+
if (!didError) {
|
|
145
|
+
didError = true;
|
|
146
|
+
renderError = error;
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
// Drain inside the context so async components see ctx during streaming.
|
|
151
|
+
const text = await new Response(stream).text();
|
|
152
|
+
if (didError) throw renderError;
|
|
153
|
+
return text;
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Volatile leading reference row: `:N<timestamp>` (dev debug-info anchor).
|
|
158
|
+
const REFERENCE_ROW_RE = /^:N[\d.]+\n/;
|
|
159
|
+
// Absolute file:// paths embedded in dev STACK rows. The serializer emits stack
|
|
160
|
+
// frames as `["Component","file:///abs/path.tsx",<line>,<col>,...]`, so the
|
|
161
|
+
// path is a quoted JSON string immediately followed by `",<line>,<col>`. The
|
|
162
|
+
// lookahead scopes the scrub to exactly that frame shape, leaving a legitimate
|
|
163
|
+
// `file://` href in RENDERED content (e.g. `{"href":"file:///x"}`) untouched.
|
|
164
|
+
const FILE_URL_RE = /file:\/\/[^"\\]+(?=",\d+,\d+)/g;
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Scrub volatile bits from a Flight string so snapshots are stable across runs
|
|
168
|
+
* and machines:
|
|
169
|
+
* - the leading `:N<timestamp>` reference row (dev only),
|
|
170
|
+
* - absolute `file://...` paths inside dev stack rows.
|
|
171
|
+
*
|
|
172
|
+
* Under NODE_ENV=production these rows are already absent; normalize is a
|
|
173
|
+
* no-op safety net there. In dev mode it removes the machine/clock-specific
|
|
174
|
+
* noise while leaving the rendered tree intact.
|
|
175
|
+
*/
|
|
176
|
+
export function normalizeFlight(flight: string): string {
|
|
177
|
+
return flight
|
|
178
|
+
.replace(REFERENCE_ROW_RE, "")
|
|
179
|
+
.replace(FILE_URL_RE, "file://<path>");
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Smoke check that the vendored serializer subpath still resolves and exposes
|
|
184
|
+
* `renderToReadableStream`. The vendored path is private to plugin-rsc; a minor
|
|
185
|
+
* bump could relocate it. Call this in a test to fail loudly with a clear
|
|
186
|
+
* message instead of an opaque import error.
|
|
187
|
+
*/
|
|
188
|
+
export function assertFlightRuntimeAvailable(): void {
|
|
189
|
+
if (typeof RSDServer.renderToReadableStream !== "function") {
|
|
190
|
+
throw new Error(
|
|
191
|
+
"Vendored react-server-dom serializer not available: " +
|
|
192
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/server.edge did not export " +
|
|
193
|
+
"renderToReadableStream. The private vendored subpath may have moved in " +
|
|
194
|
+
"a plugin-rsc upgrade.",
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
}
|