@rangojs/router 0.0.0-experimental.12 → 0.0.0-experimental.120
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 +9 -0
- package/README.md +1037 -4
- 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 +1704 -212
- 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/{src/href-context.ts → dist/href-context.d.ts} +7 -11
- 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 +5994 -2763
- 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/{src/vite/package-resolution.ts → dist/vite/package-resolution.js} +53 -66
- 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/{src/vite/virtual-entries.ts → dist/vite/virtual-entries.js} +12 -16
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +64 -54
- package/skills/api-client/SKILL.md +211 -0
- package/skills/breadcrumbs/SKILL.md +252 -0
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +484 -0
- package/skills/caching/SKILL.md +202 -24
- package/skills/composability/SKILL.md +197 -0
- package/skills/css/SKILL.md +76 -0
- package/skills/debug-manifest/SKILL.md +12 -8
- package/skills/document-cache/SKILL.md +87 -62
- package/skills/fonts/SKILL.md +6 -4
- package/skills/handler-use/SKILL.md +364 -0
- package/skills/hooks/SKILL.md +537 -70
- package/skills/host-router/SKILL.md +264 -0
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +173 -8
- package/skills/layout/SKILL.md +123 -5
- package/skills/links/SKILL.md +304 -25
- package/skills/loader/SKILL.md +600 -54
- package/skills/middleware/SKILL.md +211 -37
- package/skills/migrate-nextjs/SKILL.md +562 -0
- package/skills/migrate-react-router/SKILL.md +769 -0
- package/skills/mime-routes/SKILL.md +41 -10
- package/skills/observability/SKILL.md +137 -0
- package/skills/parallel/SKILL.md +271 -3
- package/skills/prerender/SKILL.md +413 -52
- package/skills/rango/SKILL.md +301 -21
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +248 -120
- package/skills/route/SKILL.md +279 -21
- package/skills/router-setup/SKILL.md +211 -33
- package/skills/server-actions/SKILL.md +751 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/tailwind/SKILL.md +27 -3
- package/skills/theme/SKILL.md +9 -8
- package/skills/typesafety/SKILL.md +547 -107
- package/skills/use-cache/SKILL.md +353 -0
- package/skills/view-transitions/SKILL.md +294 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +116 -0
- package/src/__internal.ts +102 -4
- package/src/bin/rango.ts +312 -15
- package/src/browser/action-coordinator.ts +114 -0
- package/src/browser/app-shell.ts +39 -0
- package/src/browser/app-version.ts +14 -0
- package/src/browser/event-controller.ts +172 -128
- package/src/browser/history-state.ts +101 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/intercept-utils.ts +52 -0
- package/src/browser/link-interceptor.ts +24 -4
- package/src/browser/logging.ts +11 -0
- package/src/browser/merge-segment-loaders.ts +20 -12
- package/src/browser/navigation-bridge.ts +309 -562
- package/src/browser/navigation-client.ts +206 -75
- package/src/browser/navigation-store.ts +80 -63
- package/src/browser/navigation-transaction.ts +279 -0
- package/src/browser/network-error-handler.ts +61 -0
- package/src/browser/partial-update.ts +355 -314
- package/src/browser/prefetch/cache.ts +363 -0
- package/src/browser/prefetch/fetch.ts +350 -0
- package/src/browser/prefetch/observer.ts +65 -0
- package/src/browser/prefetch/policy.ts +48 -0
- package/src/browser/prefetch/queue.ts +191 -0
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/rango-state.ts +136 -0
- package/src/browser/react/Link.tsx +255 -71
- package/src/browser/react/NavigationProvider.tsx +153 -33
- package/src/browser/react/context.ts +11 -0
- package/src/browser/react/filter-segment-order.ts +55 -0
- package/src/browser/react/index.ts +15 -12
- package/src/browser/react/location-state-shared.ts +269 -56
- package/src/browser/react/location-state.ts +90 -19
- package/src/browser/react/mount-context.ts +6 -1
- package/src/browser/react/nonce-context.ts +23 -0
- package/src/browser/react/shallow-equal.ts +27 -0
- package/src/browser/react/use-action.ts +29 -51
- package/src/browser/react/use-client-cache.ts +5 -3
- package/src/browser/react/use-handle.ts +41 -123
- package/src/browser/react/use-link-status.ts +6 -5
- package/src/browser/react/use-navigation.ts +44 -65
- package/src/browser/react/use-params.ts +77 -0
- package/src/browser/react/use-pathname.ts +47 -0
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +97 -0
- package/src/browser/react/use-search-params.ts +56 -0
- package/src/browser/react/use-segments.ts +85 -99
- package/src/browser/response-adapter.ts +124 -0
- package/src/browser/rsc-router.tsx +275 -72
- package/src/browser/scroll-restoration.ts +132 -49
- package/src/browser/segment-reconciler.ts +243 -0
- package/src/browser/segment-structure-assert.ts +17 -1
- package/src/browser/server-action-bridge.ts +508 -610
- package/src/browser/shallow.ts +6 -1
- package/src/browser/types.ts +149 -48
- package/src/browser/validate-redirect-origin.ts +29 -0
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +123 -56
- package/src/build/generate-route-types.ts +41 -1029
- package/src/build/index.ts +4 -0
- package/src/build/prefix-tree-utils.ts +123 -0
- package/src/build/route-trie.ts +127 -31
- package/src/build/route-types/ast-helpers.ts +25 -0
- package/src/build/route-types/ast-route-extraction.ts +98 -0
- package/src/build/route-types/codegen.ts +102 -0
- package/src/build/route-types/include-resolution.ts +418 -0
- package/src/build/route-types/param-extraction.ts +48 -0
- package/src/build/route-types/per-module-writer.ts +131 -0
- package/src/build/route-types/router-processing.ts +659 -0
- package/src/build/route-types/scan-filter.ts +85 -0
- package/src/build/route-types/source-scan.ts +118 -0
- package/src/build/runtime-discovery.ts +220 -0
- package/src/cache/background-task.ts +34 -0
- package/src/cache/cache-key-utils.ts +44 -0
- package/src/cache/cache-policy.ts +125 -0
- package/src/cache/cache-runtime.ts +354 -0
- package/src/cache/cache-scope.ts +170 -308
- package/src/cache/cf/cf-cache-store.ts +696 -30
- package/src/cache/cf/index.ts +13 -3
- package/src/cache/document-cache.ts +116 -77
- package/src/cache/handle-capture.ts +81 -0
- package/src/cache/handle-snapshot.ts +144 -0
- package/src/cache/index.ts +1 -15
- package/src/cache/memory-segment-store.ts +192 -13
- package/src/cache/profile-registry.ts +73 -0
- package/src/cache/read-through-swr.ts +134 -0
- package/src/cache/segment-codec.ts +256 -0
- package/src/cache/taint.ts +153 -0
- package/src/cache/types.ts +78 -124
- package/src/client.rsc.tsx +6 -1
- package/src/client.tsx +117 -322
- package/src/component-utils.ts +4 -4
- package/src/components/DefaultDocument.tsx +5 -1
- package/src/context-var.ts +156 -0
- package/src/debug.ts +19 -9
- package/src/decode-loader-results.ts +36 -0
- package/src/errors.ts +106 -10
- package/src/handle.ts +54 -11
- package/src/handles/MetaTags.tsx +73 -20
- package/src/handles/breadcrumbs.ts +66 -0
- package/src/handles/index.ts +1 -0
- package/src/handles/meta.ts +30 -13
- package/src/host/cookie-handler.ts +21 -15
- package/src/host/errors.ts +8 -8
- package/src/host/index.ts +6 -9
- package/src/host/pattern-matcher.ts +27 -27
- package/src/host/router.ts +176 -82
- package/src/host/testing.ts +8 -8
- package/src/host/types.ts +46 -9
- package/src/host/utils.ts +2 -2
- package/src/href-client.ts +196 -57
- package/src/index.rsc.ts +112 -42
- package/src/index.ts +178 -74
- package/src/internal-debug.ts +9 -3
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +15 -93
- package/src/loader.ts +20 -10
- package/src/missing-id-error.ts +68 -0
- package/src/network-error-thrower.tsx +3 -1
- package/src/outlet-context.ts +1 -1
- package/src/outlet-provider.tsx +45 -0
- package/src/prerender/param-hash.ts +4 -2
- package/src/prerender/store.ts +125 -18
- package/src/prerender.ts +389 -23
- package/src/response-utils.ts +37 -0
- package/src/reverse.ts +198 -128
- package/src/root-error-boundary.tsx +41 -29
- package/src/route-content-wrapper.tsx +13 -32
- package/src/route-definition/dsl-helpers.ts +1109 -0
- package/src/route-definition/helper-factories.ts +90 -0
- package/src/route-definition/helpers-types.ts +506 -0
- package/src/route-definition/index.ts +55 -0
- package/src/route-definition/redirect.ts +101 -0
- package/src/route-definition/resolve-handler-use.ts +155 -0
- package/src/route-definition/use-item-types.ts +32 -0
- package/src/route-definition.ts +1 -1450
- package/src/route-map-builder.ts +87 -133
- package/src/route-name.ts +53 -0
- package/src/route-types.ts +72 -41
- package/src/router/content-negotiation.ts +228 -0
- package/src/router/debug-manifest.ts +72 -0
- package/src/router/error-handling.ts +10 -10
- package/src/router/find-match.ts +208 -0
- package/src/router/handler-context.ts +372 -125
- package/src/router/intercept-resolution.ts +24 -26
- package/src/router/lazy-includes.ts +256 -0
- package/src/router/loader-resolution.ts +367 -140
- package/src/router/logging.ts +112 -6
- package/src/router/manifest.ts +89 -28
- package/src/router/match-api.ts +175 -238
- package/src/router/match-context.ts +4 -2
- package/src/router/match-handlers.ts +441 -0
- package/src/router/match-middleware/background-revalidation.ts +97 -89
- package/src/router/match-middleware/cache-lookup.ts +289 -54
- package/src/router/match-middleware/cache-store.ts +78 -17
- package/src/router/match-middleware/intercept-resolution.ts +45 -22
- package/src/router/match-middleware/segment-resolution.ts +73 -9
- package/src/router/match-pipelines.ts +10 -45
- package/src/router/match-result.ts +146 -24
- package/src/router/metrics.ts +241 -16
- package/src/router/middleware-cookies.ts +55 -0
- package/src/router/middleware-types.ts +209 -0
- package/src/router/middleware.ts +354 -384
- package/src/router/navigation-snapshot.ts +182 -0
- package/src/router/pattern-matching.ts +279 -44
- package/src/router/prerender-match.ts +527 -0
- package/src/router/preview-match.ts +100 -0
- package/src/router/request-classification.ts +313 -0
- package/src/router/revalidation.ts +163 -16
- package/src/router/route-snapshot.ts +245 -0
- package/src/router/router-context.ts +41 -21
- package/src/router/router-interfaces.ts +500 -0
- package/src/router/router-options.ts +642 -0
- package/src/router/router-registry.ts +21 -0
- package/src/router/segment-resolution/fresh.ts +769 -0
- package/src/router/segment-resolution/helpers.ts +268 -0
- package/src/router/segment-resolution/loader-cache.ts +199 -0
- package/src/router/segment-resolution/revalidation.ts +1420 -0
- package/src/router/segment-resolution/static-store.ts +81 -0
- package/src/router/segment-resolution/view-transition-default.ts +36 -0
- package/src/router/segment-resolution.ts +21 -1354
- package/src/router/segment-wrappers.ts +291 -0
- package/src/router/substitute-pattern-params.ts +56 -0
- package/src/router/telemetry-otel.ts +299 -0
- package/src/router/telemetry.ts +300 -0
- package/src/router/timeout.ts +148 -0
- package/src/router/trie-matching.ts +133 -42
- package/src/router/types.ts +24 -9
- package/src/router/url-params.ts +49 -0
- package/src/router.ts +710 -2373
- package/src/rsc/handler-context.ts +45 -0
- package/src/rsc/handler.ts +821 -1128
- package/src/rsc/helpers.ts +182 -19
- package/src/rsc/index.ts +1 -21
- package/src/rsc/loader-fetch.ts +229 -0
- package/src/rsc/manifest-init.ts +77 -0
- package/src/rsc/nonce.ts +14 -0
- package/src/rsc/origin-guard.ts +161 -0
- package/src/rsc/progressive-enhancement.ts +395 -0
- package/src/rsc/response-error.ts +104 -0
- package/src/rsc/response-route-handler.ts +362 -0
- package/src/rsc/rsc-rendering.ts +240 -0
- package/src/rsc/runtime-warnings.ts +41 -0
- package/src/rsc/server-action.ts +350 -0
- package/src/rsc/ssr-setup.ts +144 -0
- package/src/rsc/types.ts +52 -11
- package/src/search-params.ts +70 -58
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-loader-promise.ts +122 -0
- package/src/segment-system.tsx +237 -73
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +439 -85
- package/src/server/cookie-store.ts +214 -0
- package/src/server/fetchable-loader-store.ts +11 -6
- package/src/server/handle-store.ts +113 -15
- package/src/server/loader-registry.ts +24 -64
- package/src/server/request-context.ts +640 -107
- package/src/server.ts +26 -164
- package/src/ssr/index.tsx +107 -30
- package/src/static-handler.ts +39 -9
- package/src/theme/ThemeProvider.tsx +21 -15
- package/src/theme/ThemeScript.tsx +5 -5
- package/src/theme/constants.ts +5 -2
- package/src/theme/index.ts +4 -14
- package/src/theme/theme-context.ts +4 -30
- package/src/theme/theme-script.ts +21 -18
- package/src/types/boundaries.ts +158 -0
- package/src/types/cache-types.ts +198 -0
- package/src/types/error-types.ts +192 -0
- package/src/types/global-namespace.ts +113 -0
- package/src/types/handler-context.ts +809 -0
- package/src/types/index.ts +89 -0
- package/src/types/loader-types.ts +212 -0
- package/src/types/request-scope.ts +126 -0
- package/src/types/route-config.ts +170 -0
- package/src/types/route-entry.ts +120 -0
- package/src/types/segments.ts +184 -0
- package/src/types.ts +1 -1795
- package/src/urls/include-helper.ts +164 -0
- package/src/urls/index.ts +49 -0
- package/src/urls/path-helper-types.ts +386 -0
- package/src/urls/path-helper.ts +329 -0
- package/src/urls/pattern-types.ts +124 -0
- package/src/urls/response-types.ts +109 -0
- package/src/urls/type-extraction.ts +291 -0
- package/src/urls/urls-function.ts +94 -0
- package/src/urls.ts +1 -1323
- package/src/use-loader.tsx +559 -108
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +181 -0
- package/src/vite/discovery/discover-routers.ts +379 -0
- 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 +480 -0
- package/src/vite/discovery/route-types-writer.ts +214 -0
- package/src/vite/discovery/self-gen-tracking.ts +73 -0
- package/src/vite/discovery/state.ts +150 -0
- package/src/vite/discovery/virtual-module-codegen.ts +193 -0
- package/src/vite/index.ts +17 -2261
- package/src/vite/plugin-types.ts +170 -0
- package/src/vite/plugins/cjs-to-esm.ts +94 -0
- package/src/vite/plugins/client-ref-dedup.ts +131 -0
- package/src/vite/plugins/client-ref-hashing.ts +128 -0
- 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/{expose-action-id.ts → plugins/expose-action-id.ts} +109 -60
- package/src/vite/{expose-id-utils.ts → plugins/expose-id-utils.ts} +32 -51
- package/src/vite/plugins/expose-ids/export-analysis.ts +376 -0
- package/src/vite/plugins/expose-ids/handler-transform.ts +156 -0
- package/src/vite/plugins/expose-ids/loader-transform.ts +72 -0
- package/src/vite/plugins/expose-ids/router-transform.ts +127 -0
- package/src/vite/plugins/expose-ids/types.ts +45 -0
- package/src/vite/plugins/expose-internal-ids.ts +796 -0
- package/src/vite/plugins/performance-tracks.ts +92 -0
- package/src/vite/plugins/refresh-cmd.ts +127 -0
- package/src/vite/plugins/use-cache-transform.ts +338 -0
- package/src/vite/plugins/version-injector.ts +99 -0
- package/src/vite/plugins/version-plugin.ts +323 -0
- package/src/vite/plugins/virtual-entries.ts +123 -0
- package/src/vite/plugins/virtual-stub-plugin.ts +29 -0
- package/src/vite/rango.ts +549 -0
- package/src/vite/router-discovery.ts +1567 -0
- package/src/vite/{ast-handler-extract.ts → utils/ast-handler-extract.ts} +194 -22
- package/src/vite/utils/banner.ts +36 -0
- package/src/vite/utils/bundle-analysis.ts +139 -0
- 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 +19 -0
- package/src/vite/utils/package-resolution.ts +161 -0
- package/src/vite/utils/prerender-utils.ts +222 -0
- package/src/vite/utils/shared-utils.ts +251 -0
- package/CLAUDE.md +0 -43
- package/src/browser/lru-cache.ts +0 -69
- package/src/browser/request-controller.ts +0 -164
- package/src/cache/memory-store.ts +0 -253
- package/src/router.gen.ts +0 -6
- package/src/static-handler.gen.ts +0 -5
- package/src/urls.gen.ts +0 -8
- package/src/vite/expose-internal-ids.ts +0 -1167
- /package/src/vite/{version.d.ts → plugins/version.d.ts} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type MagicString from "magic-string";
|
|
2
|
-
import { hashInlineId, buildExportMap } from "
|
|
2
|
+
import { hashInlineId, buildExportMap } from "../plugins/expose-id-utils.js";
|
|
3
3
|
|
|
4
4
|
// ---------------------------------------------------------------------------
|
|
5
5
|
// Types
|
|
@@ -27,14 +27,14 @@ export interface HandlerCallSite {
|
|
|
27
27
|
export interface VirtualHandlerEntry {
|
|
28
28
|
originalModuleId: string;
|
|
29
29
|
imports: string[];
|
|
30
|
+
declarations: string[];
|
|
30
31
|
handlerCode: string;
|
|
31
32
|
exportName: string;
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
function isDirectivePrologueStatement(node: any): boolean {
|
|
35
36
|
return (
|
|
36
|
-
node?.type === "ExpressionStatement" &&
|
|
37
|
-
typeof node.directive === "string"
|
|
37
|
+
node?.type === "ExpressionStatement" && typeof node.directive === "string"
|
|
38
38
|
);
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -48,7 +48,7 @@ function findImportInsertionPos(
|
|
|
48
48
|
): number {
|
|
49
49
|
let program: ProgramNode;
|
|
50
50
|
try {
|
|
51
|
-
program = parseAst(code, {
|
|
51
|
+
program = parseAst(code, { lang: "tsx" });
|
|
52
52
|
} catch {
|
|
53
53
|
return 0;
|
|
54
54
|
}
|
|
@@ -99,7 +99,11 @@ function walkNode(
|
|
|
99
99
|
walkNode(item, node, ancestors, enter);
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
|
-
} else if (
|
|
102
|
+
} else if (
|
|
103
|
+
child &&
|
|
104
|
+
typeof child === "object" &&
|
|
105
|
+
typeof child.type === "string"
|
|
106
|
+
) {
|
|
103
107
|
walkNode(child, node, ancestors, enter);
|
|
104
108
|
}
|
|
105
109
|
}
|
|
@@ -123,7 +127,7 @@ export function findHandlerCalls(
|
|
|
123
127
|
): HandlerCallSite[] {
|
|
124
128
|
let program: ProgramNode;
|
|
125
129
|
try {
|
|
126
|
-
program = parseAst(code, {
|
|
130
|
+
program = parseAst(code, { lang: "tsx" });
|
|
127
131
|
} catch {
|
|
128
132
|
return [];
|
|
129
133
|
}
|
|
@@ -158,8 +162,10 @@ export function findHandlerCalls(
|
|
|
158
162
|
|
|
159
163
|
if (parent?.type === "VariableDeclarator" && parent.init === node) {
|
|
160
164
|
// ancestors: [..., ExportNamedDecl, VarDecl, VarDeclarator, CallExpr]
|
|
161
|
-
const grandParent =
|
|
162
|
-
|
|
165
|
+
const grandParent =
|
|
166
|
+
ancestors.length >= 3 ? ancestors[ancestors.length - 3] : null;
|
|
167
|
+
const greatGrandParent =
|
|
168
|
+
ancestors.length >= 4 ? ancestors[ancestors.length - 4] : null;
|
|
163
169
|
|
|
164
170
|
if (
|
|
165
171
|
grandParent?.type === "VariableDeclaration" &&
|
|
@@ -233,7 +239,7 @@ export function getImportedLocalNames(
|
|
|
233
239
|
parseAst: (code: string, options?: any) => ProgramNode,
|
|
234
240
|
): Set<string> {
|
|
235
241
|
try {
|
|
236
|
-
const program = parseAst(code, {
|
|
242
|
+
const program = parseAst(code, { lang: "tsx" });
|
|
237
243
|
return getImportedLocalNamesFromProgram(program, importedName);
|
|
238
244
|
} catch {
|
|
239
245
|
return new Set<string>();
|
|
@@ -250,7 +256,7 @@ export function extractImportDeclarations(
|
|
|
250
256
|
): string[] {
|
|
251
257
|
let program: ProgramNode;
|
|
252
258
|
try {
|
|
253
|
-
program = parseAst(code, {
|
|
259
|
+
program = parseAst(code, { lang: "tsx" });
|
|
254
260
|
} catch {
|
|
255
261
|
return [];
|
|
256
262
|
}
|
|
@@ -264,6 +270,162 @@ export function extractImportDeclarations(
|
|
|
264
270
|
return imports;
|
|
265
271
|
}
|
|
266
272
|
|
|
273
|
+
/**
|
|
274
|
+
* Check if an expression AST subtree is "inert" -- safe to evaluate eagerly
|
|
275
|
+
* without referencing import bindings. Inert expressions contain only literals,
|
|
276
|
+
* arrays/objects of inert values, template literals with inert expressions,
|
|
277
|
+
* and unary/binary operators on inert operands.
|
|
278
|
+
*
|
|
279
|
+
* Function/arrow expressions are NOT inert (they're lazy -- handled separately).
|
|
280
|
+
* Identifiers and member expressions are NOT inert (may reference imports).
|
|
281
|
+
*
|
|
282
|
+
* This check prevents TDZ errors when declarations are moved to virtual
|
|
283
|
+
* modules that end up in separate Rollup chunks with circular dependencies.
|
|
284
|
+
*/
|
|
285
|
+
function isInertExpression(node: any): boolean {
|
|
286
|
+
if (!node) return false;
|
|
287
|
+
switch (node.type) {
|
|
288
|
+
case "Literal":
|
|
289
|
+
return true;
|
|
290
|
+
case "TemplateLiteral":
|
|
291
|
+
return (node.expressions ?? []).every((e: any) => isInertExpression(e));
|
|
292
|
+
case "ArrayExpression":
|
|
293
|
+
return (node.elements ?? []).every(
|
|
294
|
+
(e: any) => e === null || isInertExpression(e),
|
|
295
|
+
);
|
|
296
|
+
case "ObjectExpression":
|
|
297
|
+
return (node.properties ?? []).every(
|
|
298
|
+
(p: any) =>
|
|
299
|
+
p.type === "Property" &&
|
|
300
|
+
(!p.computed || isInertExpression(p.key)) &&
|
|
301
|
+
isInertExpression(p.value),
|
|
302
|
+
);
|
|
303
|
+
case "UnaryExpression":
|
|
304
|
+
return isInertExpression(node.argument);
|
|
305
|
+
case "BinaryExpression":
|
|
306
|
+
return isInertExpression(node.left) && isInertExpression(node.right);
|
|
307
|
+
case "ConditionalExpression":
|
|
308
|
+
return (
|
|
309
|
+
isInertExpression(node.test) &&
|
|
310
|
+
isInertExpression(node.consequent) &&
|
|
311
|
+
isInertExpression(node.alternate)
|
|
312
|
+
);
|
|
313
|
+
case "SpreadElement":
|
|
314
|
+
return isInertExpression(node.argument);
|
|
315
|
+
default:
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Check if a variable declarator's init is safe for inclusion in a virtual
|
|
322
|
+
* module. Safe initializers are:
|
|
323
|
+
* 1. Function/arrow expressions (body is lazy, no TDZ risk)
|
|
324
|
+
* 2. Inert expressions (no identifier references, no TDZ risk)
|
|
325
|
+
*
|
|
326
|
+
* Declarations that reference identifiers at the top level (e.g.
|
|
327
|
+
* `const VT = React.Fragment`) are NOT safe -- when the virtual module
|
|
328
|
+
* is bundled into a separate Rollup chunk, circular chunk dependencies
|
|
329
|
+
* can cause "Cannot access X before initialization" TDZ errors.
|
|
330
|
+
*/
|
|
331
|
+
function isSafeDeclaratorInit(init: any): boolean {
|
|
332
|
+
if (!init) return true; // `let x;` with no init is safe
|
|
333
|
+
if (
|
|
334
|
+
init.type === "ArrowFunctionExpression" ||
|
|
335
|
+
init.type === "FunctionExpression"
|
|
336
|
+
) {
|
|
337
|
+
return true;
|
|
338
|
+
}
|
|
339
|
+
return isInertExpression(init);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Check if all declarators in a VariableDeclaration have safe initializers
|
|
344
|
+
* and none is a handler call (Static/Prerender).
|
|
345
|
+
*/
|
|
346
|
+
function isSafeVariableDeclaration(
|
|
347
|
+
node: any,
|
|
348
|
+
handlerNames: Set<string>,
|
|
349
|
+
): boolean {
|
|
350
|
+
if (node.type !== "VariableDeclaration") return false;
|
|
351
|
+
return node.declarations.every(
|
|
352
|
+
(d: any) =>
|
|
353
|
+
isSafeDeclaratorInit(d.init) &&
|
|
354
|
+
!(
|
|
355
|
+
d.init?.type === "CallExpression" &&
|
|
356
|
+
d.init.callee?.type === "Identifier" &&
|
|
357
|
+
handlerNames.has(d.init.callee.name)
|
|
358
|
+
),
|
|
359
|
+
);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Extract module-level declarations that are safe for inclusion in virtual
|
|
364
|
+
* modules. "Safe" means the declaration can be eagerly evaluated without
|
|
365
|
+
* referencing import bindings, preventing TDZ errors in separate chunks.
|
|
366
|
+
*
|
|
367
|
+
* Included: function declarations, arrow/function expression inits, and
|
|
368
|
+
* variable inits that are inert (pure literals, arrays, objects).
|
|
369
|
+
* Excluded: declarations that reference identifiers at init time (may
|
|
370
|
+
* reference imports causing TDZ), handler call declarations (circular),
|
|
371
|
+
* class declarations (field initializers can reference imports).
|
|
372
|
+
*
|
|
373
|
+
* Strips export keywords so declarations work as plain locals.
|
|
374
|
+
* Rollup tree-shakes unused declarations from virtual modules.
|
|
375
|
+
*/
|
|
376
|
+
export function extractModuleLevelDeclarations(
|
|
377
|
+
code: string,
|
|
378
|
+
parseAst: (code: string, options?: any) => ProgramNode,
|
|
379
|
+
handlerNames: Set<string>,
|
|
380
|
+
): string[] {
|
|
381
|
+
let program: ProgramNode;
|
|
382
|
+
try {
|
|
383
|
+
program = parseAst(code, { lang: "tsx" });
|
|
384
|
+
} catch {
|
|
385
|
+
return [];
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
const declarations: string[] = [];
|
|
389
|
+
for (const node of program.body as any[]) {
|
|
390
|
+
// Skip imports (handled by extractImportDeclarations)
|
|
391
|
+
if (node.type === "ImportDeclaration") continue;
|
|
392
|
+
|
|
393
|
+
// VariableDeclaration -- include only if all declarators are safe
|
|
394
|
+
if (node.type === "VariableDeclaration") {
|
|
395
|
+
if (isSafeVariableDeclaration(node, handlerNames)) {
|
|
396
|
+
declarations.push(code.slice(node.start, node.end));
|
|
397
|
+
}
|
|
398
|
+
continue;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
// FunctionDeclaration -- always safe (body is lazy)
|
|
402
|
+
if (node.type === "FunctionDeclaration") {
|
|
403
|
+
declarations.push(code.slice(node.start, node.end));
|
|
404
|
+
continue;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
// ExportNamedDeclaration with a declaration inside -- strip the export
|
|
408
|
+
if (node.type === "ExportNamedDeclaration" && node.declaration) {
|
|
409
|
+
const decl = node.declaration;
|
|
410
|
+
if (decl.type === "VariableDeclaration") {
|
|
411
|
+
if (isSafeVariableDeclaration(decl, handlerNames)) {
|
|
412
|
+
declarations.push(code.slice(decl.start, decl.end));
|
|
413
|
+
}
|
|
414
|
+
} else if (decl.type === "FunctionDeclaration") {
|
|
415
|
+
declarations.push(code.slice(decl.start, decl.end));
|
|
416
|
+
}
|
|
417
|
+
continue;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
// Skip: ClassDeclaration (field initializers can reference imports),
|
|
421
|
+
// ExportDefaultDeclaration, ExportAllDeclaration,
|
|
422
|
+
// ExportNamedDeclaration without declaration (re-exports),
|
|
423
|
+
// ExpressionStatement (side effects), etc.
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
return declarations;
|
|
427
|
+
}
|
|
428
|
+
|
|
267
429
|
// ---------------------------------------------------------------------------
|
|
268
430
|
// Transform
|
|
269
431
|
// ---------------------------------------------------------------------------
|
|
@@ -295,19 +457,30 @@ export function transformInlineHandlers(
|
|
|
295
457
|
|
|
296
458
|
const imports = extractImportDeclarations(code, parseAst);
|
|
297
459
|
|
|
298
|
-
//
|
|
299
|
-
|
|
460
|
+
// Collect local names for both Static and Prerender to exclude their
|
|
461
|
+
// declarations from virtual modules (avoids circular extraction).
|
|
462
|
+
const staticNames = getImportedLocalNames(code, "Static", parseAst);
|
|
463
|
+
const prerenderNames = getImportedLocalNames(code, "Prerender", parseAst);
|
|
464
|
+
const handlerNames = new Set([...staticNames, ...prerenderNames]);
|
|
465
|
+
const declarations = extractModuleLevelDeclarations(
|
|
466
|
+
code,
|
|
467
|
+
parseAst,
|
|
468
|
+
handlerNames,
|
|
469
|
+
);
|
|
300
470
|
|
|
301
471
|
// Collect all import statements to prepend
|
|
302
472
|
const importStatements: string[] = [];
|
|
303
473
|
|
|
304
|
-
for (const site of inlineSites) {
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
474
|
+
for (const [siteIndex, site] of inlineSites.entries()) {
|
|
475
|
+
// Key the extracted handler on its source-order index (per fnName), NOT its
|
|
476
|
+
// line number. The id flows into BOTH the export name and the virtual module
|
|
477
|
+
// path (which hashId hashes for the runtime $$id), and line numbers shift
|
|
478
|
+
// between the prerender and production build contexts. The index is invariant
|
|
479
|
+
// to those shifts, keeping the prerender manifest key == the runtime id.
|
|
480
|
+
const hash = hashInlineId(filePath, fnName, siteIndex);
|
|
309
481
|
const exportName = `__sh_${hash}`;
|
|
310
|
-
const
|
|
482
|
+
const idSuffix = `${filePath}:${fnName}:${siteIndex}`;
|
|
483
|
+
const virtualId = `\0${virtualPrefix}${idSuffix}`;
|
|
311
484
|
|
|
312
485
|
// Extract the full handler call expression text
|
|
313
486
|
const handlerCode = code.slice(site.callStart, site.callEnd);
|
|
@@ -316,6 +489,7 @@ export function transformInlineHandlers(
|
|
|
316
489
|
virtualRegistry.set(virtualId, {
|
|
317
490
|
originalModuleId: moduleId,
|
|
318
491
|
imports,
|
|
492
|
+
declarations,
|
|
319
493
|
handlerCode,
|
|
320
494
|
exportName,
|
|
321
495
|
});
|
|
@@ -324,10 +498,8 @@ export function transformInlineHandlers(
|
|
|
324
498
|
s.overwrite(site.callStart, site.callEnd, exportName);
|
|
325
499
|
|
|
326
500
|
// Build the import specifier for this virtual module
|
|
327
|
-
const importId = `${virtualPrefix}${
|
|
328
|
-
importStatements.push(
|
|
329
|
-
`import { ${exportName} } from "${importId}";`,
|
|
330
|
-
);
|
|
501
|
+
const importId = `${virtualPrefix}${idSuffix}`;
|
|
502
|
+
importStatements.push(`import { ${exportName} } from "${importId}";`);
|
|
331
503
|
}
|
|
332
504
|
|
|
333
505
|
// Insert imports after directive prologue + existing import block
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import packageJson from "../../../package.json";
|
|
2
|
+
|
|
3
|
+
export const rangoVersion: string = packageJson.version;
|
|
4
|
+
|
|
5
|
+
let _bannerPrinted = false;
|
|
6
|
+
|
|
7
|
+
export function printBanner(
|
|
8
|
+
mode: "dev" | "build" | "preview",
|
|
9
|
+
preset: string,
|
|
10
|
+
version: string,
|
|
11
|
+
): void {
|
|
12
|
+
if (_bannerPrinted) return;
|
|
13
|
+
_bannerPrinted = true;
|
|
14
|
+
|
|
15
|
+
// ANSI codes
|
|
16
|
+
const dim = "\x1b[2m";
|
|
17
|
+
const bold = "\x1b[1m";
|
|
18
|
+
const reset = "\x1b[0m";
|
|
19
|
+
|
|
20
|
+
const banner = `
|
|
21
|
+
${dim} ✦ ✦ ✧. . .${reset}
|
|
22
|
+
${dim} ╱${reset} ${bold}╔═╗${reset}${dim} * ╱ ✦ *${reset}
|
|
23
|
+
${dim} ${reset}${bold}║ ║${reset} ${bold}╔═╗${reset}${dim} * ✧. ╱${reset}
|
|
24
|
+
${dim} ${reset}${bold}╔╗ ║ ║ ║ ║${reset}${dim} * ╱${reset}
|
|
25
|
+
${dim} ${reset}${bold}║║ ║ ║ ║ ║ ╦═╗╔═╗╔╗╔╔═╗╔═╗${reset}${dim} ✧ ✦${reset}
|
|
26
|
+
${dim} ${reset}${bold}║║ ║ ╠═╝ ║ ╠╦╝╠═╣║║║║ ╦║ ║${reset}${dim} * ✧${reset}
|
|
27
|
+
${dim} ${reset}${bold}║╚═╝ ╔═══╝ ╩╚═╩ ╩╝╚╝╚═╝╚═╝${reset}${dim} ✦ . *${reset}
|
|
28
|
+
${dim} ${reset}${bold}╚══╗ ║${reset}${dim} * RSC Wrangler ✧ ✦${reset}
|
|
29
|
+
${dim} * ${reset}${bold}║ ║${reset}${dim} * ✧. ╱${reset}
|
|
30
|
+
${dim} ${reset}${bold}═══╝ ╚════${reset}${dim} ✦ *${reset}
|
|
31
|
+
|
|
32
|
+
v${version} · ${preset} · ${mode}
|
|
33
|
+
`;
|
|
34
|
+
|
|
35
|
+
console.log(banner);
|
|
36
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import {
|
|
2
|
+
skipStringOrComment,
|
|
3
|
+
escapeRegExp,
|
|
4
|
+
} from "../plugins/expose-id-utils.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Find matching close paren in bundled code using depth counting.
|
|
8
|
+
* Uses skipStringOrComment from expose-id-utils to correctly handle
|
|
9
|
+
* template literal ${...} expressions, comments, and nested strings.
|
|
10
|
+
* Returns the position after the closing paren, or -1 if unmatched.
|
|
11
|
+
* @internal Exported for testing only.
|
|
12
|
+
*/
|
|
13
|
+
export function findMatchingParenInBundle(
|
|
14
|
+
code: string,
|
|
15
|
+
openParenPos: number,
|
|
16
|
+
): number {
|
|
17
|
+
let depth = 1;
|
|
18
|
+
let pos = openParenPos;
|
|
19
|
+
while (pos < code.length && depth > 0) {
|
|
20
|
+
const skipped = skipStringOrComment(code, pos);
|
|
21
|
+
if (skipped > pos) {
|
|
22
|
+
pos = skipped;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (code[pos] === "(") depth++;
|
|
26
|
+
else if (code[pos] === ")") depth--;
|
|
27
|
+
pos++;
|
|
28
|
+
}
|
|
29
|
+
return depth === 0 ? pos : -1;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Scan a bundled chunk for handler exports of a given type and extract
|
|
34
|
+
* their names + $$id values. Optionally detects passthrough flag.
|
|
35
|
+
* @internal Exported for testing only.
|
|
36
|
+
*/
|
|
37
|
+
export function extractHandlerExportsFromChunk(
|
|
38
|
+
chunkCode: string,
|
|
39
|
+
handlerModules: Map<string, string[]>,
|
|
40
|
+
fnName: string,
|
|
41
|
+
detectPassthrough: boolean,
|
|
42
|
+
): Array<{ name: string; handlerId: string; passthrough: boolean }> {
|
|
43
|
+
const handlers: Array<{
|
|
44
|
+
name: string;
|
|
45
|
+
handlerId: string;
|
|
46
|
+
passthrough: boolean;
|
|
47
|
+
}> = [];
|
|
48
|
+
|
|
49
|
+
for (const [, handlerNames] of handlerModules) {
|
|
50
|
+
for (const name of handlerNames) {
|
|
51
|
+
const eName = escapeRegExp(name);
|
|
52
|
+
const idPattern = new RegExp(
|
|
53
|
+
`(?<![a-zA-Z0-9_])${eName}\\.\\$\\$id\\s*=\\s*"([^"]+)"`,
|
|
54
|
+
);
|
|
55
|
+
const match = chunkCode.match(idPattern);
|
|
56
|
+
if (!match) continue;
|
|
57
|
+
|
|
58
|
+
let isPassthrough = false;
|
|
59
|
+
if (detectPassthrough) {
|
|
60
|
+
const eFnName = escapeRegExp(fnName);
|
|
61
|
+
const callStartRe = new RegExp(
|
|
62
|
+
`(?:const|let|var)\\s+${eName}\\s*=\\s*${eFnName}\\s*(?:<[^>]*>)?\\s*\\(`,
|
|
63
|
+
);
|
|
64
|
+
const callStart = callStartRe.exec(chunkCode);
|
|
65
|
+
if (callStart) {
|
|
66
|
+
const afterOpen = callStart.index + callStart[0].length;
|
|
67
|
+
const closePos = findMatchingParenInBundle(chunkCode, afterOpen);
|
|
68
|
+
if (closePos !== -1) {
|
|
69
|
+
const callBody = chunkCode.slice(callStart.index, closePos);
|
|
70
|
+
isPassthrough = /passthrough\s*:\s*(!0|true)/.test(callBody);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
handlers.push({ name, handlerId: match[1], passthrough: isPassthrough });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return handlers;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Evict handler code from a bundled chunk, replacing full handler call
|
|
83
|
+
* expressions with lightweight stub objects. Returns the modified code
|
|
84
|
+
* and bytes saved, or null if no changes were made.
|
|
85
|
+
* @internal Exported for testing only.
|
|
86
|
+
*/
|
|
87
|
+
export function evictHandlerCode(
|
|
88
|
+
code: string,
|
|
89
|
+
exports: Array<{ name: string; handlerId: string; passthrough?: boolean }>,
|
|
90
|
+
fnName: string,
|
|
91
|
+
brand: string,
|
|
92
|
+
): { code: string; savedBytes: number } | null {
|
|
93
|
+
const originalSize = Buffer.byteLength(code);
|
|
94
|
+
let modified = code;
|
|
95
|
+
|
|
96
|
+
const eFnName = escapeRegExp(fnName);
|
|
97
|
+
for (const { name, handlerId, passthrough } of exports) {
|
|
98
|
+
if (passthrough) continue;
|
|
99
|
+
|
|
100
|
+
const eName = escapeRegExp(name);
|
|
101
|
+
// Match const/let/var: Rolldown (Vite 8) emits top-level bindings in the
|
|
102
|
+
// non-minified RSC bundle as `var`, whereas Rollup used `const`.
|
|
103
|
+
const callStartRe = new RegExp(
|
|
104
|
+
`(?:const|let|var)\\s+${eName}\\s*=\\s*${eFnName}\\s*(?:<[^>]*>)?\\s*\\(`,
|
|
105
|
+
);
|
|
106
|
+
const startMatch = callStartRe.exec(modified);
|
|
107
|
+
if (!startMatch) continue;
|
|
108
|
+
|
|
109
|
+
const afterOpen = startMatch.index + startMatch[0].length;
|
|
110
|
+
const closePos = findMatchingParenInBundle(modified, afterOpen);
|
|
111
|
+
if (closePos === -1) continue;
|
|
112
|
+
|
|
113
|
+
// Skip trailing whitespace and optional semicolon
|
|
114
|
+
let rangeEnd = closePos;
|
|
115
|
+
while (rangeEnd < modified.length && /\s/.test(modified[rangeEnd]))
|
|
116
|
+
rangeEnd++;
|
|
117
|
+
if (modified[rangeEnd] === ";") rangeEnd++;
|
|
118
|
+
|
|
119
|
+
// Validate: matched range must contain the expected handlerId
|
|
120
|
+
const matched = modified.slice(startMatch.index, rangeEnd);
|
|
121
|
+
if (!matched.includes(handlerId)) continue;
|
|
122
|
+
|
|
123
|
+
const stub = `const ${name} = { __brand: "${brand}", $$id: "${handlerId}" };`;
|
|
124
|
+
modified =
|
|
125
|
+
modified.slice(0, startMatch.index) + stub + modified.slice(rangeEnd);
|
|
126
|
+
|
|
127
|
+
// Remove the now-redundant $$id assignment line.
|
|
128
|
+
modified = modified.replace(
|
|
129
|
+
new RegExp(`\\n${eName}\\.\\$\\$id\\s*=\\s*"[^"]+";`),
|
|
130
|
+
"",
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (modified === code) return null;
|
|
135
|
+
return {
|
|
136
|
+
code: modified,
|
|
137
|
+
savedBytes: originalSize - Buffer.byteLength(modified),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
// Resolution of the public `clientChunks` option into the callback shape that
|
|
2
|
+
// @vitejs/plugin-rsc expects. See plugin-types.ts (ClientChunks) and
|
|
3
|
+
// docs/client-chunking.md for the contract. The mechanism: a distinct returned
|
|
4
|
+
// name yields a distinct, dynamically-imported client chunk, independent of how
|
|
5
|
+
// the RSC/server build chunked the importing modules.
|
|
6
|
+
|
|
7
|
+
import type { ClientChunkMeta, ClientChunks } from "../plugin-types.js";
|
|
8
|
+
import { createRangoDebugger, NS } from "../debug.js";
|
|
9
|
+
import { hashRefKey } from "../plugins/client-ref-hashing.js";
|
|
10
|
+
|
|
11
|
+
/** The callback shape @vitejs/plugin-rsc's `clientChunks` option accepts. */
|
|
12
|
+
export type RscClientChunksFn = (meta: ClientChunkMeta) => string | undefined;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Build-time context the discovery pass populates and the built-in strategy
|
|
16
|
+
* reads. It refines how the catch-all (no route-root marker) modules are grouped
|
|
17
|
+
* without touching marker splits or the shared runtime:
|
|
18
|
+
*
|
|
19
|
+
* - `fallbackRefs`: production hashes of the `"use client"` modules a consumer
|
|
20
|
+
* registered as `errorBoundary`/`notFoundBoundary` fallbacks. Pulled into a
|
|
21
|
+
* dedicated `app-fallback` chunk so the error UI is not co-bundled with the
|
|
22
|
+
* very route code it exists to catch failures for (resilience), and so the
|
|
23
|
+
* chunk it would otherwise sit in gets named after a real module rather than
|
|
24
|
+
* the boundary. Populated by reading each fallback element's client-reference
|
|
25
|
+
* `$$id` during discovery (see discover-routers).
|
|
26
|
+
*/
|
|
27
|
+
export interface ClientChunkContext {
|
|
28
|
+
fallbackRefs: Set<string>;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Opt-in observability for the built-in strategy. The route-root marker list is
|
|
33
|
+
* intentionally finite (see {@link ROUTE_ROOT_DIRS}); a consumer whose layout
|
|
34
|
+
* has no recognized marker (e.g. `src/parts/<feature>/…`) silently inherits the
|
|
35
|
+
* default grouping (no per-route split). That silence is the only real downside
|
|
36
|
+
* of a convention-based default, so we make the decision observable: run a build
|
|
37
|
+
* with `DEBUG=rango:chunks` to see, per client module, which route group it was
|
|
38
|
+
* assigned to or why it fell back to the shared grouping. Zero cost when off
|
|
39
|
+
* (the debugger is `undefined` unless the namespace is enabled). For full control
|
|
40
|
+
* over any layout, pass a `clientChunks` function instead of relying on the
|
|
41
|
+
* convention — that is the supported configurability path, not widening the list.
|
|
42
|
+
*/
|
|
43
|
+
const debugChunks = createRangoDebugger(NS.chunks);
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Modules that must stay on the default (shared) grouping regardless of strategy:
|
|
47
|
+
* React, the router client runtime, and anything in node_modules. Splitting these
|
|
48
|
+
* out per route would fragment the shared baseline and regress cache reuse — they
|
|
49
|
+
* are loaded on every route, so they belong in shared chunks.
|
|
50
|
+
*
|
|
51
|
+
* The Rango runtime is matched by package root only: `@rangojs/router` (the
|
|
52
|
+
* installed/aliased name) and the workspace `packages/(rangojs-router|rsc-router)/(src|dist)/`.
|
|
53
|
+
* The `(src|dist)` anchor matches the package's own source/build output but NOT
|
|
54
|
+
* consumer apps that merely live under a `packages/rangojs-router/` ancestor (the
|
|
55
|
+
* in-repo e2e apps), so their app components remain splittable. We deliberately do
|
|
56
|
+
* NOT match a bare `/src/browser/`: that is a consumer-owned path (a consumer's own
|
|
57
|
+
* `src/browser/Foo.tsx` must still split).
|
|
58
|
+
*
|
|
59
|
+
* We test BOTH `meta.id` (absolute) and `meta.normalizedId`. `normalizedId` is the
|
|
60
|
+
* project-root-relative form plugin-rsc derives (e.g. `../../src/browser/react/Link.tsx`
|
|
61
|
+
* for the in-repo runtime), which the package-root patterns miss; the absolute `id`
|
|
62
|
+
* always contains the package's real location, so it reliably catches the runtime.
|
|
63
|
+
*/
|
|
64
|
+
function isSharedRuntime(meta: ClientChunkMeta): boolean {
|
|
65
|
+
return [meta.id, meta.normalizedId].some(
|
|
66
|
+
(path) =>
|
|
67
|
+
path.includes("/node_modules/") ||
|
|
68
|
+
/\/@rangojs\/router\//.test(path) ||
|
|
69
|
+
/\/packages\/(rangojs-router|rsc-router)\/(src|dist)\//.test(path),
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Sanitize a raw group name into a filesystem/Rollup-safe chunk name fragment. */
|
|
74
|
+
function sanitizeGroup(name: string): string {
|
|
75
|
+
return name.replace(/[^a-zA-Z0-9_-]+/g, "_").replace(/^_+|_+$/g, "") || "app";
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Directory names that conventionally hold one sub-directory per route/feature.
|
|
80
|
+
* When a `"use client"` module lives under one of these, the built-in strategy
|
|
81
|
+
* keys the chunk on the segment IMMEDIATELY AFTER the marker (the route id),
|
|
82
|
+
* rather than the module's immediate parent directory. This is what keeps
|
|
83
|
+
* `routes/foo/components/Button.tsx` and `routes/bar/components/Button.tsx` in
|
|
84
|
+
* `app-foo` / `app-bar` instead of colliding in a single `app-components`.
|
|
85
|
+
*
|
|
86
|
+
* Route identity lives in the path PREFIX; the immediate parent (a suffix) is
|
|
87
|
+
* only a reliable proxy for the un-nested `routes/<route>/Widget.tsx` layout.
|
|
88
|
+
*/
|
|
89
|
+
const ROUTE_ROOT_DIRS = new Set([
|
|
90
|
+
"routes",
|
|
91
|
+
"route",
|
|
92
|
+
"pages",
|
|
93
|
+
"page",
|
|
94
|
+
"app",
|
|
95
|
+
"features",
|
|
96
|
+
"feature",
|
|
97
|
+
"views",
|
|
98
|
+
"view",
|
|
99
|
+
"handlers",
|
|
100
|
+
"urls",
|
|
101
|
+
"modules",
|
|
102
|
+
"screens",
|
|
103
|
+
"sections",
|
|
104
|
+
]);
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Built-in strategy used when `clientChunks: true` (also the default). Splits app
|
|
108
|
+
* client components by route/feature identity ONLY where it can recognize a route
|
|
109
|
+
* structure; everywhere else it inherits the default grouping (returns undefined).
|
|
110
|
+
* This conservatism is what makes it safe as a default:
|
|
111
|
+
*
|
|
112
|
+
* - A recognized route structure (`routes/<id>/…`, `app/<id>/…`, `handlers/<id>/…`
|
|
113
|
+
* etc.) splits into a per-route chunk `app-<id>`, at any nesting depth.
|
|
114
|
+
* - A flat `src/components/Button.tsx`, or host sub-apps already split by a dynamic
|
|
115
|
+
* `import()` boundary (each app's `serverChunk` differs), get `undefined` and so
|
|
116
|
+
* keep `@vitejs/plugin-rsc`'s default `serverChunk` grouping — i.e. NO change
|
|
117
|
+
* versus not enabling the option. Returning a parent-dir name here would instead
|
|
118
|
+
* merge unrelated modules (e.g. every host app's `components/Layout.tsx` into one
|
|
119
|
+
* `app-components`), re-introducing cross-app leakage.
|
|
120
|
+
*
|
|
121
|
+
* Resolution order:
|
|
122
|
+
* 1. Shared runtime (React / router / node_modules) -> `undefined` (never split).
|
|
123
|
+
* 2. A registered error/notFound fallback (`ctx.fallbackRefs`) -> `app-fallback`,
|
|
124
|
+
* regardless of location, so the error UI is decoupled from the happy path.
|
|
125
|
+
* 3. A {@link ROUTE_ROOT_DIRS} marker with a directory after it -> key on that
|
|
126
|
+
* next segment (the route id), robust to any nesting depth.
|
|
127
|
+
* 4. Otherwise `undefined` (inherit the default `serverChunk` grouping).
|
|
128
|
+
*/
|
|
129
|
+
export function directoryClientChunks(
|
|
130
|
+
meta: ClientChunkMeta,
|
|
131
|
+
ctx?: ClientChunkContext,
|
|
132
|
+
): string | undefined {
|
|
133
|
+
if (isSharedRuntime(meta)) {
|
|
134
|
+
// React / router runtime / node_modules: always shared, expected, uninteresting.
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
// Registered error/notFound fallbacks -> a dedicated chunk. The error UI must
|
|
138
|
+
// not co-bundle with the code it catches failures for, and removing it lets the
|
|
139
|
+
// chunk it would otherwise anchor be named after a real module, not the boundary.
|
|
140
|
+
if (
|
|
141
|
+
ctx?.fallbackRefs.size &&
|
|
142
|
+
ctx.fallbackRefs.has(hashRefKey(meta.normalizedId))
|
|
143
|
+
) {
|
|
144
|
+
debugChunks?.("fallback %s -> app-fallback", meta.normalizedId);
|
|
145
|
+
return "app-fallback";
|
|
146
|
+
}
|
|
147
|
+
const segments = meta.normalizedId.split("/").filter(Boolean);
|
|
148
|
+
const dirCount = segments.length - 1; // exclude the filename
|
|
149
|
+
if (dirCount >= 1) {
|
|
150
|
+
// Route-root marker -> the segment after it is the route id. First marker
|
|
151
|
+
// wins, so a top-level route owns its whole subtree. The `< dirCount - 1`
|
|
152
|
+
// bound guarantees the segment after the marker is a directory, not the file.
|
|
153
|
+
for (let i = 0; i < dirCount - 1; i++) {
|
|
154
|
+
if (ROUTE_ROOT_DIRS.has(segments[i].toLowerCase())) {
|
|
155
|
+
const group = `app-${sanitizeGroup(segments[i + 1])}`;
|
|
156
|
+
debugChunks?.("split %s -> %s", meta.normalizedId, group);
|
|
157
|
+
return group;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// No recognized route structure -> inherit the default serverChunk grouping.
|
|
162
|
+
// This is the actionable "silent" case: app code that did NOT split by route.
|
|
163
|
+
// Surface it (under DEBUG=rango:chunks) so a consumer can see their layout
|
|
164
|
+
// missed the convention and either colocate under a marker dir or pass a fn.
|
|
165
|
+
debugChunks?.(
|
|
166
|
+
"shared %s (no route-root marker; inherits default grouping)",
|
|
167
|
+
meta.normalizedId,
|
|
168
|
+
);
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Resolve a Rango `clientChunks` option into a @vitejs/plugin-rsc `clientChunks`
|
|
174
|
+
* callback, or `undefined` to leave plugin-rsc on its default (serverChunk)
|
|
175
|
+
* grouping.
|
|
176
|
+
*
|
|
177
|
+
* - `false` / `undefined` -> `undefined` (no override).
|
|
178
|
+
* - `true` -> the built-in {@link directoryClientChunks} strategy,
|
|
179
|
+
* bound to the discovery-populated {@link ClientChunkContext} (fallback chunk).
|
|
180
|
+
* - function -> the user's function, used verbatim (full control; the
|
|
181
|
+
* fallback refinement does not apply — the consumer owns the grouping).
|
|
182
|
+
*/
|
|
183
|
+
export function resolveClientChunks(
|
|
184
|
+
option: ClientChunks | undefined,
|
|
185
|
+
ctx?: ClientChunkContext,
|
|
186
|
+
): RscClientChunksFn | undefined {
|
|
187
|
+
if (!option) return undefined;
|
|
188
|
+
if (option === true) return (meta) => directoryClientChunks(meta, ctx);
|
|
189
|
+
return option;
|
|
190
|
+
}
|