@rangojs/router 0.0.0-experimental.e16b7c00 → 0.0.0-experimental.e9c0b2f2
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/AGENTS.md +8 -0
- package/README.md +64 -6
- 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 +195 -52
- 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/{src/browser/react/use-client-cache.ts → dist/browser/react/use-client-cache.js} +9 -28
- 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/{src/handles/index.ts → dist/handles/index.d.ts} +1 -2
- 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 +82 -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 +1165 -310
- 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 +71 -7
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +61 -1
- package/skills/bundle-analysis/SKILL.md +2 -2
- package/skills/cache-guide/SKILL.md +2 -2
- package/skills/caching/SKILL.md +92 -10
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +4 -2
- package/skills/document-cache/SKILL.md +2 -2
- package/skills/handler-use/SKILL.md +1 -1
- package/skills/hooks/SKILL.md +40 -29
- package/skills/host-router/SKILL.md +80 -3
- package/skills/intercept/SKILL.md +5 -3
- package/skills/layout/SKILL.md +11 -6
- package/skills/loader/SKILL.md +25 -19
- package/skills/middleware/SKILL.md +4 -2
- package/skills/migrate-nextjs/SKILL.md +3 -1
- package/skills/migrate-react-router/SKILL.md +4 -2
- package/skills/mime-routes/SKILL.md +2 -2
- package/skills/observability/SKILL.md +61 -4
- package/skills/parallel/SKILL.md +9 -4
- package/skills/prerender/SKILL.md +31 -10
- package/skills/rango/SKILL.md +31 -10
- package/skills/response-routes/SKILL.md +63 -45
- package/skills/route/SKILL.md +14 -2
- package/skills/router-setup/SKILL.md +27 -3
- package/skills/scripts/SKILL.md +179 -0
- package/skills/server-actions/SKILL.md +25 -1
- package/skills/tailwind/SKILL.md +27 -3
- package/skills/testing/SKILL.md +129 -0
- package/skills/testing/bindings.md +103 -0
- package/skills/testing/cache-prerender.md +127 -0
- package/skills/testing/client-components.md +124 -0
- package/skills/testing/e2e-parity.md +125 -0
- package/skills/testing/flight.md +91 -0
- package/skills/testing/handles.md +129 -0
- package/skills/testing/loader.md +128 -0
- package/skills/testing/middleware.md +99 -0
- package/skills/testing/render-handler.md +121 -0
- package/skills/testing/response-routes.md +95 -0
- package/skills/testing/reverse-and-types.md +84 -0
- package/skills/testing/server-actions.md +107 -0
- package/skills/testing/server-tree.md +128 -0
- package/skills/testing/setup.md +123 -0
- package/skills/typesafety/SKILL.md +6 -5
- package/skills/use-cache/SKILL.md +10 -9
- package/skills/vercel/SKILL.md +128 -0
- package/src/__augment-tests__/augmented.check.ts +2 -3
- package/src/__internal.ts +0 -65
- package/src/browser/action-coordinator.ts +1 -1
- package/src/browser/action-fence.ts +47 -0
- package/src/browser/app-shell.ts +14 -27
- package/src/browser/connection-warmup.ts +134 -0
- package/src/browser/cookie-name.ts +140 -0
- package/src/browser/event-controller.ts +115 -89
- package/src/browser/invalidate-client-cache.ts +52 -0
- package/src/browser/navigation-bridge.ts +16 -52
- package/src/browser/navigation-client.ts +84 -69
- package/src/browser/navigation-store-handle.ts +38 -0
- package/src/browser/navigation-store.ts +25 -74
- package/src/browser/navigation-transaction.ts +0 -32
- package/src/browser/partial-update.ts +81 -127
- package/src/browser/prefetch/cache.ts +99 -72
- package/src/browser/prefetch/fetch.ts +176 -34
- package/src/browser/prefetch/queue.ts +6 -3
- package/src/browser/rango-state.ts +157 -115
- package/src/browser/react/Link.tsx +30 -7
- package/src/browser/react/NavigationProvider.tsx +32 -95
- package/src/browser/react/ScrollRestoration.tsx +10 -6
- package/src/browser/react/filter-segment-order.ts +17 -2
- package/src/browser/react/index.ts +0 -51
- package/src/browser/react/location-state-shared.ts +14 -15
- package/src/browser/react/location-state.ts +0 -1
- package/src/browser/react/use-action.ts +6 -15
- package/src/browser/react/use-handle.ts +0 -5
- package/src/browser/react/use-href.tsx +8 -1
- package/src/browser/react/use-link-status.ts +33 -8
- package/src/browser/react/use-navigation.ts +10 -5
- package/src/browser/react/use-params.ts +0 -2
- package/src/browser/react/use-router.ts +6 -4
- package/src/browser/react/use-search-params.ts +0 -5
- package/src/browser/react/use-segments.ts +0 -13
- package/src/browser/response-adapter.ts +41 -4
- package/src/browser/rsc-router.tsx +43 -18
- package/src/browser/scroll-restoration.ts +8 -3
- package/src/browser/server-action-bridge.ts +194 -28
- package/src/browser/types.ts +40 -21
- package/src/browser/validate-redirect-origin.ts +43 -16
- package/src/build/generate-route-types.ts +1 -1
- package/src/build/index.ts +8 -4
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +117 -15
- package/src/build/route-types/ast-route-extraction.ts +15 -8
- package/src/build/route-types/codegen.ts +12 -1
- package/src/build/route-types/include-resolution.ts +116 -22
- package/src/build/route-types/param-extraction.ts +6 -3
- package/src/build/route-types/per-module-writer.ts +15 -2
- package/src/build/route-types/router-processing.ts +77 -41
- package/src/build/route-types/source-scan.ts +105 -7
- package/src/cache/cache-key-utils.ts +29 -13
- package/src/cache/cache-policy.ts +42 -62
- package/src/cache/cache-runtime.ts +126 -30
- package/src/cache/cache-scope.ts +118 -43
- package/src/cache/cache-tag.ts +7 -39
- package/src/cache/cf/cf-base64.ts +33 -0
- package/src/cache/cf/cf-cache-constants.ts +127 -0
- package/src/cache/cf/cf-cache-store.ts +1257 -537
- package/src/cache/cf/cf-cache-types.ts +349 -0
- package/src/cache/cf/cf-kv-utils.ts +46 -0
- package/src/cache/cf/cf-tag-marker-memo.ts +105 -0
- package/src/cache/cf/index.ts +6 -19
- package/src/cache/document-cache.ts +32 -32
- package/src/cache/handle-snapshot.ts +70 -0
- package/src/cache/index.ts +20 -24
- package/src/cache/memory-segment-store.ts +3 -48
- package/src/cache/profile-registry.ts +31 -31
- package/src/cache/read-through-swr.ts +41 -11
- package/src/cache/segment-codec.ts +9 -17
- package/src/cache/tag-invalidation.ts +29 -5
- package/src/cache/types.ts +14 -104
- package/src/cache/vercel/index.ts +11 -0
- package/src/cache/vercel/vercel-cache-store.ts +855 -0
- package/src/client.rsc.tsx +42 -22
- package/src/client.tsx +31 -58
- package/src/cloudflare/index.ts +11 -0
- package/src/cloudflare/tracing.ts +109 -0
- package/src/component-utils.ts +19 -0
- package/src/components/DefaultDocument.tsx +8 -2
- package/src/context-var.ts +13 -1
- package/src/decode-loader-results.ts +18 -2
- package/src/defer.ts +196 -0
- package/src/deps/ssr.ts +0 -1
- package/src/encode-kv.ts +49 -0
- package/src/errors.ts +0 -3
- package/src/escape-script.ts +52 -0
- package/src/handle.ts +28 -18
- package/src/handles/MetaTags.tsx +56 -19
- package/src/handles/Scripts.tsx +183 -0
- package/src/handles/breadcrumbs.ts +37 -8
- package/src/handles/is-thenable.ts +19 -0
- package/src/handles/meta.ts +51 -40
- package/src/handles/script.ts +244 -0
- package/src/host/cookie-handler.ts +9 -60
- package/src/host/errors.ts +0 -24
- package/src/host/index.ts +6 -0
- package/src/host/pattern-matcher.ts +23 -52
- package/src/host/router.ts +1 -65
- package/src/host/testing.ts +40 -27
- package/src/host/types.ts +6 -2
- package/src/href-client.ts +7 -12
- package/src/index.rsc.ts +75 -8
- package/src/index.ts +60 -4
- package/src/internal-debug.ts +2 -4
- package/src/loader.rsc.ts +19 -9
- package/src/loader.ts +12 -4
- package/src/network-error-thrower.tsx +1 -6
- package/src/outlet-provider.tsx +1 -5
- package/src/prerender/param-hash.ts +16 -16
- package/src/prerender/store.ts +32 -37
- package/src/prerender.ts +58 -3
- package/src/redirect-origin.ts +100 -0
- package/src/regex-escape.ts +8 -0
- package/src/response-utils.ts +25 -0
- package/src/root-error-boundary.tsx +1 -19
- package/src/route-content-wrapper.tsx +1 -44
- package/src/route-definition/dsl-helpers.ts +39 -21
- package/src/route-definition/helpers-types.ts +3 -3
- package/src/route-definition/redirect.ts +44 -11
- package/src/route-definition/resolve-handler-use.ts +6 -0
- package/src/route-map-builder.ts +0 -16
- package/src/router/basename.ts +14 -0
- package/src/router/content-negotiation.ts +58 -23
- package/src/router/error-handling.ts +44 -17
- package/src/router/find-match.ts +44 -23
- package/src/router/handler-context.ts +6 -1
- package/src/router/instrument.ts +350 -0
- package/src/router/intercept-resolution.ts +35 -2
- package/src/router/lazy-includes.ts +7 -44
- package/src/router/loader-resolution.ts +139 -73
- package/src/router/logging.ts +0 -6
- package/src/router/manifest.ts +18 -29
- package/src/router/match-api.ts +0 -20
- package/src/router/match-context.ts +0 -22
- package/src/router/match-handlers.ts +57 -58
- package/src/router/match-middleware/background-revalidation.ts +6 -7
- package/src/router/match-middleware/cache-lookup.ts +115 -194
- package/src/router/match-middleware/cache-store.ts +28 -32
- package/src/router/match-middleware/intercept-resolution.ts +0 -22
- package/src/router/match-middleware/segment-resolution.ts +0 -22
- package/src/router/match-pipelines.ts +1 -42
- package/src/router/match-result.ts +1 -52
- package/src/router/metrics.ts +0 -34
- package/src/router/middleware-types.ts +0 -116
- package/src/router/middleware.ts +175 -90
- package/src/router/navigation-snapshot.ts +0 -51
- package/src/router/params-util.ts +23 -0
- package/src/router/pattern-matching.ts +47 -89
- package/src/router/prefetch-cache-ttl.ts +51 -0
- package/src/router/prerender-match.ts +101 -64
- package/src/router/request-classification.ts +25 -35
- package/src/router/revalidation.ts +75 -81
- package/src/router/route-snapshot.ts +0 -1
- package/src/router/router-context.ts +3 -28
- package/src/router/router-interfaces.ts +38 -7
- package/src/router/router-options.ts +111 -4
- package/src/router/segment-resolution/fresh.ts +66 -78
- package/src/router/segment-resolution/helpers.ts +86 -6
- package/src/router/segment-resolution/loader-cache.ts +57 -23
- package/src/router/segment-resolution/revalidation.ts +212 -304
- package/src/router/segment-resolution/static-store.ts +19 -5
- package/src/router/segment-resolution/streamed-handler-telemetry.ts +52 -0
- package/src/router/segment-resolution.ts +5 -1
- package/src/router/segment-wrappers.ts +6 -5
- package/src/router/state-cookie-name.ts +33 -0
- package/src/router/telemetry-otel.ts +161 -199
- package/src/router/telemetry.ts +96 -19
- package/src/router/timeout.ts +0 -20
- package/src/router/tracing.ts +206 -0
- package/src/router/trie-matching.ts +163 -64
- package/src/router/types.ts +1 -63
- package/src/router/url-params.ts +0 -5
- package/src/router.ts +87 -37
- package/src/rsc/handler-context.ts +1 -0
- package/src/rsc/handler.ts +232 -153
- package/src/rsc/helpers.ts +97 -4
- package/src/rsc/index.ts +1 -4
- package/src/rsc/json-route-result.ts +38 -0
- package/src/rsc/loader-fetch.ts +114 -38
- package/src/rsc/manifest-init.ts +28 -41
- package/src/rsc/origin-guard.ts +11 -15
- package/src/rsc/progressive-enhancement.ts +59 -9
- package/src/rsc/redirect-guard.ts +99 -0
- package/src/rsc/response-cache-serve.ts +238 -0
- package/src/rsc/response-error.ts +79 -12
- package/src/rsc/response-route-handler.ts +57 -147
- package/src/rsc/rsc-rendering.ts +64 -24
- package/src/rsc/runtime-warnings.ts +14 -0
- package/src/rsc/server-action.ts +244 -81
- package/src/rsc/types.ts +15 -3
- package/src/runtime-env.ts +18 -0
- package/src/search-params.ts +31 -26
- package/src/segment-loader-promise.ts +31 -4
- package/src/segment-system.tsx +89 -89
- package/src/server/context.ts +32 -0
- package/src/server/cookie-parse.ts +32 -0
- package/src/server/cookie-store.ts +52 -1
- package/src/server/handle-store.ts +21 -38
- package/src/server/loader-registry.ts +21 -42
- package/src/server/request-context.ts +189 -131
- package/src/ssr/index.tsx +19 -18
- package/src/static-handler.ts +10 -13
- package/src/testing/cache-status.ts +162 -0
- package/src/testing/collect-handle.ts +40 -0
- package/src/testing/dispatch.ts +701 -0
- package/src/testing/dom.entry.ts +22 -0
- package/src/testing/e2e/fixture.ts +188 -0
- package/src/testing/e2e/index.ts +128 -0
- package/src/testing/e2e/matchers.ts +35 -0
- package/src/testing/e2e/page-helpers.ts +272 -0
- package/src/testing/e2e/parity.ts +387 -0
- package/src/testing/e2e/server.ts +195 -0
- package/src/testing/flight-matchers.ts +97 -0
- package/src/testing/flight-normalize.ts +11 -0
- package/src/testing/flight-runtime.d.ts +57 -0
- package/src/testing/flight-tree.ts +682 -0
- package/src/testing/flight.entry.ts +52 -0
- package/src/testing/flight.ts +257 -0
- package/src/testing/generated-routes.ts +183 -0
- package/src/testing/index.ts +99 -0
- package/src/testing/internal/context.ts +371 -0
- package/src/testing/internal/flight-client-globals.ts +30 -0
- package/src/testing/internal/seed-vars.ts +54 -0
- package/src/testing/render-handler.ts +343 -0
- package/src/testing/render-route.tsx +581 -0
- package/src/testing/run-loader.ts +385 -0
- package/src/testing/run-middleware.ts +205 -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 +305 -0
- package/src/theme/ThemeProvider.tsx +20 -58
- package/src/theme/ThemeScript.tsx +7 -9
- package/src/theme/constants.ts +52 -13
- package/src/theme/index.ts +0 -7
- package/src/theme/theme-context.ts +1 -5
- package/src/theme/theme-script.ts +22 -21
- package/src/theme/use-theme.ts +0 -3
- package/src/types/boundaries.ts +0 -35
- package/src/types/cache-types.ts +3 -3
- package/src/types/error-types.ts +25 -89
- package/src/types/global-namespace.ts +15 -15
- package/src/types/handler-context.ts +44 -14
- package/src/types/index.ts +0 -10
- package/src/types/loader-types.ts +6 -3
- package/src/types/request-scope.ts +8 -22
- package/src/types/route-config.ts +6 -50
- package/src/types/route-entry.ts +0 -6
- package/src/types/segments.ts +0 -13
- package/src/urls/include-helper.ts +0 -4
- package/src/urls/index.ts +1 -8
- package/src/urls/path-helper-types.ts +8 -2
- package/src/urls/path-helper.ts +0 -54
- package/src/urls/type-extraction.ts +33 -24
- package/src/urls/urls-function.ts +0 -13
- package/src/use-loader.tsx +0 -186
- package/src/vercel/index.ts +11 -0
- package/src/vercel/tracing.ts +88 -0
- package/src/vite/discovery/bundle-postprocess.ts +2 -1
- package/src/vite/discovery/discover-routers.ts +33 -42
- package/src/vite/discovery/prerender-collection.ts +33 -46
- package/src/vite/discovery/state.ts +12 -1
- package/src/vite/discovery/virtual-module-codegen.ts +1 -11
- package/src/vite/index.ts +2 -0
- package/src/vite/plugin-types.ts +143 -10
- package/src/vite/plugins/cjs-to-esm.ts +8 -12
- package/src/vite/plugins/client-ref-dedup.ts +0 -11
- package/src/vite/plugins/client-ref-hashing.ts +0 -10
- package/src/vite/plugins/cloudflare-protocol-stub.ts +0 -20
- package/src/vite/plugins/expose-action-id.ts +2 -73
- package/src/vite/plugins/expose-id-utils.ts +85 -56
- package/src/vite/plugins/expose-ids/export-analysis.ts +30 -43
- package/src/vite/plugins/expose-ids/handler-transform.ts +5 -31
- package/src/vite/plugins/expose-ids/loader-transform.ts +12 -20
- package/src/vite/plugins/expose-ids/router-transform.ts +98 -26
- package/src/vite/plugins/expose-internal-ids.ts +10 -1
- package/src/vite/plugins/performance-tracks.ts +0 -3
- package/src/vite/plugins/refresh-cmd.ts +1 -1
- package/src/vite/plugins/use-cache-transform.ts +21 -46
- package/src/vite/plugins/vercel-output.ts +295 -0
- package/src/vite/plugins/version-injector.ts +0 -20
- package/src/vite/plugins/version-plugin.ts +6 -66
- package/src/vite/plugins/virtual-entries.ts +70 -17
- package/src/vite/rango.ts +135 -134
- package/src/vite/router-discovery.ts +21 -8
- package/src/vite/utils/ast-handler-extract.ts +11 -20
- package/src/vite/utils/bundle-analysis.ts +6 -13
- package/src/vite/utils/client-chunks.ts +0 -6
- package/src/vite/utils/directive-prologue.ts +40 -0
- package/src/vite/utils/forward-user-plugins.ts +0 -22
- package/src/vite/utils/manifest-utils.ts +4 -75
- package/src/vite/utils/package-resolution.ts +1 -73
- package/src/vite/utils/prerender-utils.ts +54 -40
- package/src/vite/utils/shared-utils.ts +8 -37
- package/src/browser/shallow.ts +0 -40
- package/src/router/middleware-cookies.ts +0 -55
package/src/use-loader.tsx
CHANGED
|
@@ -15,14 +15,6 @@ import { OutletContext, type OutletContextValue } from "./outlet-context.js";
|
|
|
15
15
|
import { loaderStore, type LoaderEntry } from "./loader-store.js";
|
|
16
16
|
import type { LoaderDefinition, LoadOptions } from "./types.js";
|
|
17
17
|
|
|
18
|
-
/**
|
|
19
|
-
* A shareable GET — a `load()` call that reads data (GET or defaulted method)
|
|
20
|
-
* with no request body. Params are allowed. This is the gate for keyed sharing:
|
|
21
|
-
* when a hook is given an explicit `key`, every shareable GET writes to the
|
|
22
|
-
* keyed bucket so co-keyed readers (including parameterized views) refresh
|
|
23
|
-
* together. Non-GET methods and body-bearing calls are mutations and stay local
|
|
24
|
-
* to the call site.
|
|
25
|
-
*/
|
|
26
18
|
function isShareableGet(options: LoadOptions | undefined): boolean {
|
|
27
19
|
if (!options) return true;
|
|
28
20
|
if (options.method && options.method !== "GET") return false;
|
|
@@ -32,44 +24,14 @@ function isShareableGet(options: LoadOptions | undefined): boolean {
|
|
|
32
24
|
return true;
|
|
33
25
|
}
|
|
34
26
|
|
|
35
|
-
/**
|
|
36
|
-
* Plain route-context refetch — a `load()` call with no options or a
|
|
37
|
-
* trivially-defaulted GET (no params, no body). Results from these are
|
|
38
|
-
* broadcast to every component reading the same loader id via the shared
|
|
39
|
-
* store, so a layout's refetch button updates page + parallel-slot reads
|
|
40
|
-
* automatically.
|
|
41
|
-
*
|
|
42
|
-
* Calls with explicit `params`, an explicit non-GET method, or a `body`
|
|
43
|
-
* stay local to the call site — that preserves the today-semantics of
|
|
44
|
-
* `useFetchLoader(SearchLoader).load({ params: { q } })` style code where
|
|
45
|
-
* each component owns its own fetched view. (An explicit `key` opts a
|
|
46
|
-
* parameterized GET back into sharing; see `isShareableGet`.)
|
|
47
|
-
*/
|
|
48
27
|
function isPlainRefetch(options: LoadOptions | undefined): boolean {
|
|
49
28
|
if (!isShareableGet(options)) return false;
|
|
50
29
|
if (options?.params && Object.keys(options.params).length > 0) return false;
|
|
51
30
|
return true;
|
|
52
31
|
}
|
|
53
32
|
|
|
54
|
-
// Per-hook unique suffix for grouped reads that have no explicit `key`. Such a
|
|
55
|
-
// read must NOT share the bare `loader.$$id` bucket, or a cross-loader group
|
|
56
|
-
// refresh would leak into unrelated unkeyed readers of the same loader (which
|
|
57
|
-
// the contract keeps local). Sharing within a group is opt-in via an explicit
|
|
58
|
-
// `key`; without one, each grouped read gets its own private bucket. The value
|
|
59
|
-
// is only ever used as a client-side store bucket key (never rendered), so the
|
|
60
|
-
// counter has no SSR/hydration consistency requirement.
|
|
61
33
|
let privateGroupBucketSeq = 0;
|
|
62
34
|
|
|
63
|
-
/**
|
|
64
|
-
* Extract a specific loader's data from a content ReactNode.
|
|
65
|
-
*
|
|
66
|
-
* When a route registers loaders via loader(), the resolved data lives in
|
|
67
|
-
* the route's OutletProvider (rendered as <Outlet /> content). Parallel
|
|
68
|
-
* slots are siblings of <Outlet />, so they can't find it by walking
|
|
69
|
-
* the parent context chain. This helper traverses wrapper elements
|
|
70
|
-
* (MountContextProvider, ViewTransition, etc.) to reach the OutletProvider
|
|
71
|
-
* and extract the loader data directly.
|
|
72
|
-
*/
|
|
73
35
|
const NOT_FOUND = Symbol("not-found");
|
|
74
36
|
|
|
75
37
|
function extractContentLoaderData(
|
|
@@ -85,10 +47,6 @@ function extractContentLoaderData(
|
|
|
85
47
|
return props.loaderData[loaderId];
|
|
86
48
|
}
|
|
87
49
|
|
|
88
|
-
// LoaderBoundary: loaderIds + loaderDataPromise (already resolved array).
|
|
89
|
-
// When the segment has loading(), loaderData is resolved inside
|
|
90
|
-
// LoaderBoundary via use(). If the promise was pre-awaited (forceAwait
|
|
91
|
-
// or isAction), the prop is a raw array we can index into.
|
|
92
50
|
if (
|
|
93
51
|
props.loaderIds &&
|
|
94
52
|
Array.isArray(props.loaderIds) &&
|
|
@@ -98,7 +56,6 @@ function extractContentLoaderData(
|
|
|
98
56
|
const idx = (props.loaderIds as string[]).indexOf(loaderId);
|
|
99
57
|
if (idx !== -1) {
|
|
100
58
|
const data = (props.loaderDataPromise as any[])[idx];
|
|
101
|
-
// loaderDataPromise entries may be { ok, data } result objects
|
|
102
59
|
if (data && typeof data === "object" && "ok" in data) {
|
|
103
60
|
return data.ok ? data.data : NOT_FOUND;
|
|
104
61
|
}
|
|
@@ -106,118 +63,45 @@ function extractContentLoaderData(
|
|
|
106
63
|
}
|
|
107
64
|
}
|
|
108
65
|
|
|
109
|
-
// Traverse into wrapper elements (MountContextProvider, ViewTransition,
|
|
110
|
-
// Suspense wrappers, etc.)
|
|
111
66
|
if (props.children) return extractContentLoaderData(props.children, loaderId);
|
|
112
67
|
return NOT_FOUND;
|
|
113
68
|
}
|
|
114
69
|
|
|
115
|
-
/**
|
|
116
|
-
* Payload returned by loader RSC requests
|
|
117
|
-
*/
|
|
118
70
|
interface LoaderRscPayload<T = unknown> {
|
|
119
71
|
loaderResult: T;
|
|
120
72
|
loaderError?: { message: string; name: string };
|
|
121
73
|
}
|
|
122
74
|
|
|
123
|
-
/**
|
|
124
|
-
* Load function type for fetching loader data from the client
|
|
125
|
-
*/
|
|
126
75
|
export type LoadFunction<T> = (options?: LoadOptions) => Promise<T>;
|
|
127
76
|
|
|
128
|
-
/**
|
|
129
|
-
* Result type for useLoader hook (strict - data is required)
|
|
130
|
-
*/
|
|
131
77
|
export interface UseLoaderResult<T> {
|
|
132
|
-
/** The loaded data - guaranteed to exist when loader is registered on route */
|
|
133
78
|
data: T;
|
|
134
|
-
/** True while a load() is in progress */
|
|
135
79
|
isLoading: boolean;
|
|
136
|
-
/** Error from the most recent load attempt, null if successful */
|
|
137
80
|
error: Error | null;
|
|
138
|
-
/** Function to trigger a fetch (only works if loader is fetchable) */
|
|
139
81
|
load: LoadFunction<T>;
|
|
140
|
-
/** Alias for load */
|
|
141
82
|
refetch: LoadFunction<T>;
|
|
142
83
|
}
|
|
143
84
|
|
|
144
|
-
/**
|
|
145
|
-
* Result type for useFetchLoader hook (flexible - data is optional)
|
|
146
|
-
*/
|
|
147
85
|
export interface UseFetchLoaderResult<T> {
|
|
148
|
-
/** The loaded data - may be undefined if not yet fetched or not in context */
|
|
149
86
|
data: T | undefined;
|
|
150
|
-
/** True while a load() is in progress */
|
|
151
87
|
isLoading: boolean;
|
|
152
|
-
/** Error from the most recent load attempt, null if successful */
|
|
153
88
|
error: Error | null;
|
|
154
|
-
/** Function to trigger a fetch (only works if loader is fetchable) */
|
|
155
89
|
load: LoadFunction<T>;
|
|
156
|
-
/** Alias for load */
|
|
157
90
|
refetch: LoadFunction<T>;
|
|
158
91
|
}
|
|
159
92
|
|
|
160
|
-
/**
|
|
161
|
-
* Options for useLoader hook
|
|
162
|
-
*/
|
|
163
93
|
export interface UseLoaderOptions {
|
|
164
|
-
/**
|
|
165
|
-
* If true (default), errors from load() will be thrown to the nearest error boundary.
|
|
166
|
-
* If false, errors are only captured in the `error` state.
|
|
167
|
-
* @default true
|
|
168
|
-
*/
|
|
169
94
|
throwOnError?: boolean;
|
|
170
|
-
/**
|
|
171
|
-
* Client refresh key. Partitions the shared refresh store so that only hooks
|
|
172
|
-
* using the same `key` refresh together when one of them calls `load()`.
|
|
173
|
-
*
|
|
174
|
-
* Without a `key` (default), a plain `load()` on a route-registered loader
|
|
175
|
-
* broadcasts to every reader of that loader, and any parameterized / unregistered
|
|
176
|
-
* load stays local to the calling hook. With a `key`:
|
|
177
|
-
* - readers of the same loader that share a `key` form one refresh group —
|
|
178
|
-
* a `load()` from any of them updates the whole group, including
|
|
179
|
-
* parameterized GETs;
|
|
180
|
-
* - readers with different keys are independent;
|
|
181
|
-
* - it works even when the loader is NOT registered on the route (keyed
|
|
182
|
-
* `useFetchLoader`), letting unrelated components opt into sharing.
|
|
183
|
-
*
|
|
184
|
-
* This is a client-side refresh identity only. It is unrelated to the server
|
|
185
|
-
* `cache({ key })` option and to `revalidate()`; it never changes the request
|
|
186
|
-
* sent to the server.
|
|
187
|
-
*/
|
|
188
95
|
key?: string;
|
|
189
|
-
/**
|
|
190
|
-
* Cross-loader refresh group tag(s). Tag reads of DIFFERENT loaders with a
|
|
191
|
-
* shared name, then call `useRefreshLoaders()(name)` to refresh the whole group
|
|
192
|
-
* at once. Pass an array to tag one read into several groups — it is refreshed
|
|
193
|
-
* when ANY of its groups is refreshed, so a coarse tag can cover the whole set
|
|
194
|
-
* while a finer tag targets a subset. Each member is refreshed with a plain GET
|
|
195
|
-
* against the current route URL — no params, no body, no mutation methods —
|
|
196
|
-
* because a group spans heterogeneous loaders with different param/return
|
|
197
|
-
* shapes.
|
|
198
|
-
*
|
|
199
|
-
* For parameterized sharing of a SINGLE loader, use `key` instead; group
|
|
200
|
-
* members should be registered or non-parameterized-keyed reads (a plain-GET
|
|
201
|
-
* group refresh would drop any per-call params).
|
|
202
|
-
*/
|
|
203
96
|
refreshGroup?: string | string[];
|
|
204
97
|
}
|
|
205
98
|
|
|
206
|
-
/**
|
|
207
|
-
* Internal hook implementation shared by useLoader and useFetchLoader
|
|
208
|
-
*/
|
|
209
99
|
function useLoaderInternal<T>(
|
|
210
100
|
loader: LoaderDefinition<T>,
|
|
211
101
|
options?: UseLoaderOptions,
|
|
212
102
|
): UseFetchLoaderResult<T> {
|
|
213
103
|
const context = useContext(OutletContext);
|
|
214
104
|
|
|
215
|
-
// Get data from context (SSR/navigation). `hasContextData` distinguishes
|
|
216
|
-
// "loader registered on the route, value happens to be undefined" from
|
|
217
|
-
// "loader is not in any parent's context at all". The shared store is
|
|
218
|
-
// only consulted when the loader really is in route context — that
|
|
219
|
-
// preserves per-component isolation for ad-hoc useFetchLoader callers
|
|
220
|
-
// who use the same fetchable loader without registering it.
|
|
221
105
|
const { contextData, hasContextData } = useMemo((): {
|
|
222
106
|
contextData: T | undefined;
|
|
223
107
|
hasContextData: boolean;
|
|
@@ -230,9 +114,6 @@ function useLoaderInternal<T>(
|
|
|
230
114
|
hasContextData: true,
|
|
231
115
|
};
|
|
232
116
|
}
|
|
233
|
-
// Check content element — the route's OutletProvider is rendered as
|
|
234
|
-
// <Outlet /> content (a child), so its loaderData isn't in the parent
|
|
235
|
-
// chain. Parallel slots need to reach into it to find route-level loaders.
|
|
236
117
|
const contentData = extractContentLoaderData(
|
|
237
118
|
current.content,
|
|
238
119
|
loader.$$id,
|
|
@@ -245,23 +126,8 @@ function useLoaderInternal<T>(
|
|
|
245
126
|
return { contextData: undefined, hasContextData: false };
|
|
246
127
|
}, [context, loader.$$id]);
|
|
247
128
|
|
|
248
|
-
// Shared subscription: every component reading the same loader id sees
|
|
249
|
-
// the same snapshot, so a plain refetch from one component propagates to
|
|
250
|
-
// the others. Mirrors the convention used by useParams / useLinkStatus —
|
|
251
|
-
// useState seeded from the store, useEffect subscribes for updates and
|
|
252
|
-
// calls setState inside startTransition so subscriber re-renders don't
|
|
253
|
-
// trip Suspense fallbacks during a refetch (matches the per-hook
|
|
254
|
-
// startTransition the old code wrapped setFetchedData in).
|
|
255
129
|
const loaderId = loader.$$id;
|
|
256
|
-
// Client refresh key. The shared store is partitioned by bucket key so that
|
|
257
|
-
// only hooks with the same `key` refresh together. Default (no key) keeps the
|
|
258
|
-
// historical behavior: one bucket per loader id.
|
|
259
130
|
const key = options?.key;
|
|
260
|
-
// Normalize the refresh-group tag(s) to a stable, deduped, sorted list. The
|
|
261
|
-
// joined `groupKey` string is the subscribe effect's dependency, so passing an
|
|
262
|
-
// inline array literal (`refreshGroup={["a", "b"]}`) does not force a
|
|
263
|
-
// resubscribe on every render. An empty list means "no groups" — identical to
|
|
264
|
-
// omitting the option (`hasGroups` stays false, no private bucket is created).
|
|
265
131
|
const refreshGroupOption = options?.refreshGroup;
|
|
266
132
|
const groupKey =
|
|
267
133
|
refreshGroupOption === undefined
|
|
@@ -276,10 +142,6 @@ function useLoaderInternal<T>(
|
|
|
276
142
|
[groupKey],
|
|
277
143
|
);
|
|
278
144
|
const hasGroups = groupList.length > 0;
|
|
279
|
-
// A grouped reader with no explicit key gets a private per-hook bucket so a
|
|
280
|
-
// cross-loader group refresh cannot leak into the bare `loader.$$id` bucket
|
|
281
|
-
// shared by unrelated unkeyed readers. Sharing within a group is opt-in via
|
|
282
|
-
// an explicit `key`.
|
|
283
145
|
const privateBucketIdRef = useRef<string | null>(null);
|
|
284
146
|
if (hasGroups && key === undefined && privateBucketIdRef.current === null) {
|
|
285
147
|
privateBucketIdRef.current = `__rg${privateGroupBucketSeq++}`;
|
|
@@ -289,12 +151,6 @@ function useLoaderInternal<T>(
|
|
|
289
151
|
const bucketKey =
|
|
290
152
|
effectiveKey === undefined ? loaderId : `${loaderId}::${effectiveKey}`;
|
|
291
153
|
|
|
292
|
-
// Plain-GET refresh thunk registered with the store for cross-loader group
|
|
293
|
-
// refresh (useRefreshLoaders). Always shares into this hook's bucket, never
|
|
294
|
-
// touches lastSharedRequestIdRef (so a group refresh never render-throws —
|
|
295
|
-
// errors surface via `error` and reject the refreshGroups() promise instead),
|
|
296
|
-
// and sends no params/body. Stable across navigations (depends only on
|
|
297
|
-
// loaderId + bucketKey), so the store keeps one current thunk per bucket.
|
|
298
154
|
const groupRefetch = useCallback(async (): Promise<void> => {
|
|
299
155
|
if (!loaderId) return;
|
|
300
156
|
const requestId = loaderStore.reserveRequestId(bucketKey);
|
|
@@ -333,9 +189,6 @@ function useLoaderInternal<T>(
|
|
|
333
189
|
? sharedState.snapshot
|
|
334
190
|
: loaderStore.getSnapshot(bucketKey);
|
|
335
191
|
useEffect(() => {
|
|
336
|
-
// Sync any value the store committed between this hook's lazy
|
|
337
|
-
// initializer and effect-time (e.g. a sibling that mounted earlier
|
|
338
|
-
// already triggered a load()).
|
|
339
192
|
const initial = loaderStore.getSnapshot(bucketKey);
|
|
340
193
|
if (initial !== sharedSnapshot) {
|
|
341
194
|
startTransition(() => {
|
|
@@ -430,10 +283,6 @@ function useLoaderInternal<T>(
|
|
|
430
283
|
|
|
431
284
|
const throwOnError = options?.throwOnError ?? true;
|
|
432
285
|
|
|
433
|
-
// Refs for values used inside load() that should NOT cause callback identity
|
|
434
|
-
// churn. loader.$$id can change if a reusable component receives a different
|
|
435
|
-
// loader without remounting; data changes on every navigation. Refs keep the
|
|
436
|
-
// callback stable while always reading the latest values.
|
|
437
286
|
const loaderIdRef = useRef(loaderId);
|
|
438
287
|
loaderIdRef.current = loaderId;
|
|
439
288
|
const bucketKeyRef = useRef(bucketKey);
|
|
@@ -443,8 +292,6 @@ function useLoaderInternal<T>(
|
|
|
443
292
|
const hasContextDataRef = useRef(hasContextData);
|
|
444
293
|
hasContextDataRef.current = hasContextData;
|
|
445
294
|
|
|
446
|
-
// Load function for fetching data via the ?_rsc_loader endpoint.
|
|
447
|
-
// Supports GET (data fetching) and POST/PUT/PATCH/DELETE (mutations).
|
|
448
295
|
const load = useCallback(
|
|
449
296
|
async (loadOptions?: LoadOptions): Promise<T> => {
|
|
450
297
|
const id = loaderIdRef.current;
|
|
@@ -455,20 +302,8 @@ function useLoaderInternal<T>(
|
|
|
455
302
|
}
|
|
456
303
|
|
|
457
304
|
const bucket = bucketKeyRef.current;
|
|
458
|
-
// A dedicated bucket means this read owns a bucket distinct from the bare
|
|
459
|
-
// loader id — either an explicit `key` (`$$id::key`) or a refreshGroup's
|
|
460
|
-
// private bucket (`$$id::<private>`).
|
|
461
305
|
const hasDedicatedBucket = bucket !== id;
|
|
462
306
|
|
|
463
|
-
// Deciding shared vs local:
|
|
464
|
-
// - With a dedicated bucket, every shareable GET (params allowed) writes
|
|
465
|
-
// to that bucket — the key/group is an explicit opt-in to sharing, and
|
|
466
|
-
// a direct load() must land in the same bucket a group refresh uses.
|
|
467
|
-
// - On the bare loader-id bucket, sharing is only correct when the
|
|
468
|
-
// loader is registered on the route and the call is a plain refetch —
|
|
469
|
-
// otherwise two unrelated components calling load() on the same
|
|
470
|
-
// fetchable loader would overwrite each other's local view.
|
|
471
|
-
// Mutations (non-GET / body) stay local in both cases.
|
|
472
307
|
const shared = hasDedicatedBucket
|
|
473
308
|
? isShareableGet(loadOptions)
|
|
474
309
|
: isPlainRefetch(loadOptions) && hasContextDataRef.current;
|
|
@@ -477,9 +312,6 @@ function useLoaderInternal<T>(
|
|
|
477
312
|
if (shared) {
|
|
478
313
|
sharedRequestId = loaderStore.reserveRequestId(bucket);
|
|
479
314
|
lastSharedRequestIdRef.current = sharedRequestId;
|
|
480
|
-
// beginRequest flips loading on AND clears any prior error so a
|
|
481
|
-
// throwOnError: false consumer doesn't keep showing the stale
|
|
482
|
-
// error during the retry. Gated on requestId === latest.
|
|
483
315
|
loaderStore.beginRequest(bucket, sharedRequestId);
|
|
484
316
|
} else {
|
|
485
317
|
localRequestId = ++localRequestIdRef.current;
|
|
@@ -505,8 +337,6 @@ function useLoaderInternal<T>(
|
|
|
505
337
|
loadOptions?.params && Object.keys(loadOptions.params).length > 0;
|
|
506
338
|
|
|
507
339
|
if (bodyValue instanceof FormData) {
|
|
508
|
-
// FormData body — send as multipart/form-data (preserves File objects).
|
|
509
|
-
// Params are appended as a JSON string in a special field.
|
|
510
340
|
if (hasParams) {
|
|
511
341
|
bodyValue.set(
|
|
512
342
|
"_rsc_loader_params",
|
|
@@ -519,7 +349,6 @@ function useLoaderInternal<T>(
|
|
|
519
349
|
body: bodyValue,
|
|
520
350
|
};
|
|
521
351
|
} else {
|
|
522
|
-
// JSON body — send params and body as JSON
|
|
523
352
|
const bodyPayload: {
|
|
524
353
|
params?: Record<string, string>;
|
|
525
354
|
body?: unknown;
|
|
@@ -541,7 +370,6 @@ function useLoaderInternal<T>(
|
|
|
541
370
|
};
|
|
542
371
|
}
|
|
543
372
|
} else {
|
|
544
|
-
// GET - send params in query string
|
|
545
373
|
if (
|
|
546
374
|
loadOptions?.params &&
|
|
547
375
|
Object.keys(loadOptions.params).length > 0
|
|
@@ -571,12 +399,8 @@ function useLoaderInternal<T>(
|
|
|
571
399
|
|
|
572
400
|
const result = payload.loaderResult;
|
|
573
401
|
if (shared) {
|
|
574
|
-
// finishData is gated on requestId; a stale response is dropped.
|
|
575
402
|
loaderStore.finishData(bucket, sharedRequestId, result);
|
|
576
403
|
} else if (localRequestId === localRequestIdRef.current) {
|
|
577
|
-
// Local-branch gate, mirrors the shared-branch requestId check:
|
|
578
|
-
// if a newer load() was issued from this hook before this one
|
|
579
|
-
// resolved, drop the stale result.
|
|
580
404
|
startTransition(() => {
|
|
581
405
|
setLocalFetchedData({ has: true, value: result });
|
|
582
406
|
setLocalIsLoading(false);
|
|
@@ -594,12 +418,9 @@ function useLoaderInternal<T>(
|
|
|
594
418
|
if (throwOnError) {
|
|
595
419
|
throw err;
|
|
596
420
|
}
|
|
597
|
-
// When throwOnError is false, return the latest data snapshot (previous
|
|
598
|
-
// successful value or undefined). Caller should check error state.
|
|
599
421
|
return dataRef.current as T;
|
|
600
422
|
} finally {
|
|
601
423
|
if (shared) {
|
|
602
|
-
// setLoading is gated; only the latest request flips the flag off.
|
|
603
424
|
loaderStore.setLoading(bucket, sharedRequestId, false);
|
|
604
425
|
}
|
|
605
426
|
}
|
|
@@ -607,13 +428,6 @@ function useLoaderInternal<T>(
|
|
|
607
428
|
[throwOnError],
|
|
608
429
|
);
|
|
609
430
|
|
|
610
|
-
// Throw during render if there's an error and throwOnError is true.
|
|
611
|
-
// - Local errors always belong to this hook, so always throw on opt-in.
|
|
612
|
-
// - Shared errors throw only when this hook initiated the failing
|
|
613
|
-
// request (entry.requestId matches lastSharedRequestIdRef). Sibling
|
|
614
|
-
// readers expose the error via `error` but do not throw, so a
|
|
615
|
-
// throwOnError: true reader never explodes because of someone else's
|
|
616
|
-
// throwOnError: false load() failure.
|
|
617
431
|
if (throwOnError) {
|
|
618
432
|
if (localError) throw localError;
|
|
619
433
|
if (
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel preset integration surface for @rangojs/router.
|
|
3
|
+
*
|
|
4
|
+
* Imported via `@rangojs/router/vercel`. Vercel-only helpers live here so
|
|
5
|
+
* Node/other-platform consumers never pull them in. The Vercel cache store
|
|
6
|
+
* (`VercelCacheStore`) is exported from `@rangojs/router/cache`, mirroring the
|
|
7
|
+
* Cloudflare split where the store lives in `/cache` and the tracing helper in
|
|
8
|
+
* the platform subpath.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export { createVercelTracing, type VercelTracingOptions } from "./tracing.js";
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel OpenTelemetry tracing integration.
|
|
3
|
+
*
|
|
4
|
+
* Bridges the router's performance phases (request, middleware, action,
|
|
5
|
+
* loaders, handler, render, ssr) onto OpenTelemetry spans so they show up in
|
|
6
|
+
* Vercel's trace waterfall next to the platform's automatic spans, with correct
|
|
7
|
+
* nesting. Vercel exposes tracing through OpenTelemetry (not a native import-free
|
|
8
|
+
* API like Cloudflare), so this is a thin convenience over `createOTelTracing`:
|
|
9
|
+
* it reads the global OTel tracer that `@vercel/otel`'s `registerOTel()` installs.
|
|
10
|
+
*
|
|
11
|
+
* Usage (vercel preset). A Rango/Vite app does NOT auto-load `instrumentation.ts`
|
|
12
|
+
* the way Next.js does, so export the tracing config from there and import it —
|
|
13
|
+
* the import is what runs `registerOTel()`. A standalone `registerOTel()` that
|
|
14
|
+
* nothing imports is a silent no-op (the tracer never registers, spans drop):
|
|
15
|
+
*
|
|
16
|
+
* // instrumentation.ts
|
|
17
|
+
* import { registerOTel } from "@vercel/otel";
|
|
18
|
+
* import { createVercelTracing } from "@rangojs/router/vercel";
|
|
19
|
+
* registerOTel({ serviceName: "my-app" });
|
|
20
|
+
* export const tracing = createVercelTracing();
|
|
21
|
+
*
|
|
22
|
+
* // router.tsx — importing `tracing` runs instrumentation.ts (and registerOTel)
|
|
23
|
+
* import { createRouter } from "@rangojs/router";
|
|
24
|
+
* import { tracing } from "./instrumentation.js";
|
|
25
|
+
* export const router = createRouter({ tracing });
|
|
26
|
+
*
|
|
27
|
+
* Two runtime caveats inherited from the platform:
|
|
28
|
+
* - Node.js runtime only. Vercel custom spans are unsupported on the Edge
|
|
29
|
+
* runtime; `startActiveSpan` also needs an AsyncLocalStorage context manager
|
|
30
|
+
* (which @vercel/otel configures on Node) for spans to nest correctly.
|
|
31
|
+
* - `registerOTel()` must run before the first request. Reading the tracer via
|
|
32
|
+
* `trace.getTracer` here is safe even if it runs first — the API's proxy
|
|
33
|
+
* tracer delegates to the provider once registered — but no provider means
|
|
34
|
+
* every span is a no-op (the request behaves exactly as if tracing were off).
|
|
35
|
+
*
|
|
36
|
+
* Whether spans are actually exported is governed by your OTel setup / Vercel
|
|
37
|
+
* tracing destination, not by this adapter.
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
import { trace } from "@opentelemetry/api";
|
|
41
|
+
import {
|
|
42
|
+
createOTelTracing,
|
|
43
|
+
type OTelActiveSpanTracer,
|
|
44
|
+
} from "../router/telemetry-otel.js";
|
|
45
|
+
import type {
|
|
46
|
+
RouterTracingConfig,
|
|
47
|
+
TracePhaseToggles,
|
|
48
|
+
} from "../router/tracing.js";
|
|
49
|
+
|
|
50
|
+
/** Options for createVercelTracing. */
|
|
51
|
+
export interface VercelTracingOptions {
|
|
52
|
+
/** Master switch. Defaults to true. */
|
|
53
|
+
enabled?: boolean;
|
|
54
|
+
/** Per-phase span toggles. Omitted phases default to enabled. */
|
|
55
|
+
spans?: TracePhaseToggles;
|
|
56
|
+
/**
|
|
57
|
+
* OTel instrumentation-scope name passed to `trace.getTracer()`. Defaults to
|
|
58
|
+
* `"rango"`. Ignored when `tracer` is provided.
|
|
59
|
+
*/
|
|
60
|
+
tracerName?: string;
|
|
61
|
+
/**
|
|
62
|
+
* Explicit tracer override. Defaults to the global OTel tracer
|
|
63
|
+
* (`trace.getTracer(tracerName)`) — the provider `@vercel/otel`'s
|
|
64
|
+
* `registerOTel()` installs. Pass this to bridge onto a tracer you own.
|
|
65
|
+
*/
|
|
66
|
+
tracer?: OTelActiveSpanTracer;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Create the tracing config for a Vercel router. Pass the result to
|
|
71
|
+
* `createRouter({ tracing })`. Spans are emitted for the request, middleware,
|
|
72
|
+
* action, loaders, handler, render, and ssr phases; pass `spans` to turn
|
|
73
|
+
* individual phases off.
|
|
74
|
+
*
|
|
75
|
+
* @see createOTelTracing (`@rangojs/router`) for the underlying adapter on any
|
|
76
|
+
* platform with an OpenTelemetry SDK.
|
|
77
|
+
* @see createCloudflareTracing (`@rangojs/router/cloudflare`) for the same slot
|
|
78
|
+
* using Cloudflare Workers native custom spans.
|
|
79
|
+
*/
|
|
80
|
+
export function createVercelTracing(
|
|
81
|
+
options: VercelTracingOptions = {},
|
|
82
|
+
): RouterTracingConfig {
|
|
83
|
+
const { tracerName = "rango", tracer, enabled, spans } = options;
|
|
84
|
+
return createOTelTracing(tracer ?? trace.getTracer(tracerName), {
|
|
85
|
+
enabled,
|
|
86
|
+
spans,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
@@ -9,6 +9,7 @@ import { resolve } from "node:path";
|
|
|
9
9
|
import { readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
10
10
|
import { evictHandlerCode } from "../utils/bundle-analysis.js";
|
|
11
11
|
import { copyStagedBuildAssets } from "../utils/prerender-utils.js";
|
|
12
|
+
import { jsonParseExpression } from "../utils/manifest-utils.js";
|
|
12
13
|
import type { DiscoveryState } from "./state.js";
|
|
13
14
|
|
|
14
15
|
/**
|
|
@@ -104,7 +105,7 @@ export function postprocessBundle(state: DiscoveryState): void {
|
|
|
104
105
|
}
|
|
105
106
|
|
|
106
107
|
const manifestCode = [
|
|
107
|
-
`const m
|
|
108
|
+
`const m=${jsonParseExpression(manifestMap)};`,
|
|
108
109
|
`export function loadPrerenderAsset(s){return import(s)}`,
|
|
109
110
|
`export default m;`,
|
|
110
111
|
"",
|
|
@@ -11,6 +11,16 @@ import {
|
|
|
11
11
|
formatNestedRouterConflictError,
|
|
12
12
|
findNestedRouterConflict,
|
|
13
13
|
} from "../../build/generate-route-types.js";
|
|
14
|
+
// Pure data transforms over generateManifestFull's output. Imported directly
|
|
15
|
+
// from source (not the public ./build barrel, and not the runner) because they
|
|
16
|
+
// are realm-independent: buildRouteTrie/buildPerRouterTrie operate on plain
|
|
17
|
+
// manifest data, and collectFallbackClientRefs keys on the global-registry
|
|
18
|
+
// Symbol.for("react.client.reference"), so it detects client references in a
|
|
19
|
+
// boundary tree regardless of which realm imported the walker. Only
|
|
20
|
+
// generateManifestFull must stay on the runner (it invokes user handlers via
|
|
21
|
+
// RangoContext from the runner realm) — see the runner.import below.
|
|
22
|
+
import { buildRouteTrie, buildPerRouterTrie } from "../../build/route-trie.js";
|
|
23
|
+
import { collectFallbackClientRefs } from "../../build/collect-fallback-refs.js";
|
|
14
24
|
import {
|
|
15
25
|
flattenLeafEntries,
|
|
16
26
|
buildRouteToStaticPrefix,
|
|
@@ -107,7 +117,10 @@ export async function discoverRouters(
|
|
|
107
117
|
}
|
|
108
118
|
}
|
|
109
119
|
|
|
110
|
-
//
|
|
120
|
+
// generateManifestFull must run in the RSC runner realm: it invokes the
|
|
121
|
+
// user's urlpatterns.handler() via RangoContext, consuming router instances
|
|
122
|
+
// from the runner. The trie/fallback-ref builders are pure transforms over
|
|
123
|
+
// its output and are imported directly from source above.
|
|
111
124
|
const buildMod = await timed(
|
|
112
125
|
debug,
|
|
113
126
|
"inner: import @rangojs/router/build",
|
|
@@ -158,11 +171,12 @@ export async function discoverRouters(
|
|
|
158
171
|
// are NOT in EntryData, so generateManifestFull's walk misses them. Collect any
|
|
159
172
|
// "use client" default boundary directly off the router instance. The value is
|
|
160
173
|
// commonly a handler function wrapping the client boundary in server providers,
|
|
161
|
-
// so collectFallbackClientRefs invokes + walks the tree.
|
|
162
|
-
// so it
|
|
174
|
+
// so collectFallbackClientRefs invokes + walks the tree. The walker keys on the
|
|
175
|
+
// global-registry Symbol.for("react.client.reference"), so it detects client
|
|
176
|
+
// references in a runner-realm boundary tree even when imported here directly.
|
|
163
177
|
const collectFromBoundaryNode = (node: unknown): void => {
|
|
164
|
-
if (collectClientFallbackRef
|
|
165
|
-
|
|
178
|
+
if (collectClientFallbackRef) {
|
|
179
|
+
collectFallbackClientRefs(node, collectClientFallbackRef);
|
|
166
180
|
}
|
|
167
181
|
};
|
|
168
182
|
|
|
@@ -243,20 +257,19 @@ export async function discoverRouters(
|
|
|
243
257
|
// Flatten prefix tree leaf nodes into precomputed entries.
|
|
244
258
|
// Leaf nodes (no children) can have their routes used directly by
|
|
245
259
|
// evaluateLazyEntry() without running the handler at runtime.
|
|
260
|
+
// Walk once into a per-router array, then fold it into the merged array;
|
|
261
|
+
// the merged and per-router entries are identical, so a second walk is
|
|
262
|
+
// redundant. Append order is preserved within and across routers.
|
|
263
|
+
const routerPrecomputed: PrecomputedEntry[] = [];
|
|
246
264
|
flattenLeafEntries(
|
|
247
265
|
manifest.prefixTree,
|
|
248
266
|
manifest.routeManifest,
|
|
249
|
-
|
|
267
|
+
routerPrecomputed,
|
|
250
268
|
);
|
|
269
|
+
newMergedPrecomputedEntries.push(...routerPrecomputed);
|
|
251
270
|
|
|
252
271
|
// Store per-router manifest and precomputed entries for isolated virtual modules.
|
|
253
272
|
newPerRouterManifestDataMap.set(id, manifest.routeManifest);
|
|
254
|
-
const routerPrecomputed: PrecomputedEntry[] = [];
|
|
255
|
-
flattenLeafEntries(
|
|
256
|
-
manifest.prefixTree,
|
|
257
|
-
manifest.routeManifest,
|
|
258
|
-
routerPrecomputed,
|
|
259
|
-
);
|
|
260
273
|
newPerRouterPrecomputedMap.set(id, routerPrecomputed);
|
|
261
274
|
|
|
262
275
|
console.log(
|
|
@@ -294,8 +307,7 @@ export async function discoverRouters(
|
|
|
294
307
|
let newMergedRouteTrie: any = null;
|
|
295
308
|
const trieStart = debug ? performance.now() : 0;
|
|
296
309
|
if (Object.keys(newMergedRouteManifest).length > 0) {
|
|
297
|
-
|
|
298
|
-
if (buildRouteTrie && mergedRouteAncestry) {
|
|
310
|
+
if (mergedRouteAncestry) {
|
|
299
311
|
// Build routeToStaticPrefix from saved manifests
|
|
300
312
|
const routeToStaticPrefix: Record<string, string> = {};
|
|
301
313
|
for (const { manifest } of allManifests) {
|
|
@@ -340,36 +352,15 @@ export async function discoverRouters(
|
|
|
340
352
|
mergedResponseTypeRoutes,
|
|
341
353
|
);
|
|
342
354
|
|
|
343
|
-
// Build per-router tries for multi-router isolation.
|
|
355
|
+
// Build per-router tries for multi-router isolation. Uses the single
|
|
356
|
+
// shared buildPerRouterTrie so the production serialized trie is built by
|
|
357
|
+
// exactly the same code as the dev/HMR runtime rebuild (manifest-init.ts).
|
|
358
|
+
// Returns null for route-less manifests (route-trie.ts).
|
|
344
359
|
for (const { id, manifest } of allManifests) {
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
)
|
|
349
|
-
continue;
|
|
350
|
-
const perRouterStaticPrefix: Record<string, string> = {};
|
|
351
|
-
for (const name of Object.keys(manifest.routeManifest)) {
|
|
352
|
-
perRouterStaticPrefix[name] = "";
|
|
360
|
+
const perRouterTrie = buildPerRouterTrie(manifest);
|
|
361
|
+
if (perRouterTrie) {
|
|
362
|
+
newPerRouterTrieMap.set(id, perRouterTrie);
|
|
353
363
|
}
|
|
354
|
-
buildRouteToStaticPrefix(manifest.prefixTree, perRouterStaticPrefix);
|
|
355
|
-
|
|
356
|
-
const perRouterPrerenderNames = manifest.prerenderRoutes
|
|
357
|
-
? new Set<string>(manifest.prerenderRoutes)
|
|
358
|
-
: undefined;
|
|
359
|
-
const perRouterPassthroughNames = manifest.passthroughRoutes
|
|
360
|
-
? new Set<string>(manifest.passthroughRoutes)
|
|
361
|
-
: undefined;
|
|
362
|
-
|
|
363
|
-
const perRouterTrie = buildRouteTrie(
|
|
364
|
-
manifest.routeManifest,
|
|
365
|
-
manifest._routeAncestry,
|
|
366
|
-
perRouterStaticPrefix,
|
|
367
|
-
manifest.routeTrailingSlash,
|
|
368
|
-
perRouterPrerenderNames,
|
|
369
|
-
perRouterPassthroughNames,
|
|
370
|
-
manifest.responseTypeRoutes,
|
|
371
|
-
);
|
|
372
|
-
newPerRouterTrieMap.set(id, perRouterTrie);
|
|
373
364
|
}
|
|
374
365
|
}
|
|
375
366
|
}
|