@rangojs/router 0.0.0-experimental.32 → 0.0.0-experimental.32f9e280
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 +4 -0
- package/README.md +128 -39
- 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 +138 -50
- package/dist/bin/rango.js.map +1 -0
- package/dist/browser/event-controller.d.ts +191 -0
- package/dist/browser/event-controller.d.ts.map +1 -0
- package/dist/browser/event-controller.js +559 -0
- package/dist/browser/event-controller.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/link-interceptor.d.ts +38 -0
- package/dist/browser/link-interceptor.d.ts.map +1 -0
- package/dist/browser/link-interceptor.js +99 -0
- package/dist/browser/link-interceptor.js.map +1 -0
- package/dist/browser/logging.d.ts +10 -0
- package/dist/browser/logging.d.ts.map +1 -0
- package/dist/browser/logging.js +29 -0
- package/dist/browser/logging.js.map +1 -0
- package/dist/browser/lru-cache.d.ts +17 -0
- package/dist/browser/lru-cache.d.ts.map +1 -0
- package/dist/browser/lru-cache.js +50 -0
- package/dist/browser/lru-cache.js.map +1 -0
- package/dist/browser/merge-segment-loaders.d.ts +39 -0
- package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
- package/dist/browser/merge-segment-loaders.js +102 -0
- package/dist/browser/merge-segment-loaders.js.map +1 -0
- package/dist/browser/navigation-bridge.d.ts +102 -0
- package/dist/browser/navigation-bridge.d.ts.map +1 -0
- package/dist/browser/navigation-bridge.js +708 -0
- package/dist/browser/navigation-bridge.js.map +1 -0
- package/dist/browser/navigation-client.d.ts +25 -0
- package/dist/browser/navigation-client.d.ts.map +1 -0
- package/dist/browser/navigation-client.js +157 -0
- package/dist/browser/navigation-client.js.map +1 -0
- package/dist/browser/navigation-store.d.ts +101 -0
- package/dist/browser/navigation-store.d.ts.map +1 -0
- package/dist/browser/navigation-store.js +625 -0
- package/dist/browser/navigation-store.js.map +1 -0
- package/dist/browser/partial-update.d.ts +75 -0
- package/dist/browser/partial-update.d.ts.map +1 -0
- package/dist/browser/partial-update.js +426 -0
- package/dist/browser/partial-update.js.map +1 -0
- package/dist/browser/react/Link.d.ts +86 -0
- package/dist/browser/react/Link.d.ts.map +1 -0
- package/dist/browser/react/Link.js +128 -0
- package/dist/browser/react/Link.js.map +1 -0
- package/dist/browser/react/NavigationProvider.d.ts +63 -0
- package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
- package/dist/browser/react/NavigationProvider.js +216 -0
- package/dist/browser/react/NavigationProvider.js.map +1 -0
- package/dist/browser/react/ScrollRestoration.d.ts +75 -0
- package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
- package/dist/browser/react/ScrollRestoration.js +57 -0
- package/dist/browser/react/ScrollRestoration.js.map +1 -0
- package/dist/browser/react/context.d.ts +46 -0
- package/dist/browser/react/context.d.ts.map +1 -0
- package/dist/browser/react/context.js +10 -0
- package/dist/browser/react/context.js.map +1 -0
- package/dist/browser/react/index.d.ts +11 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/index.js +22 -0
- package/dist/browser/react/index.js.map +1 -0
- package/dist/browser/react/location-state-shared.d.ts +63 -0
- package/dist/browser/react/location-state-shared.d.ts.map +1 -0
- package/dist/browser/react/location-state-shared.js +81 -0
- package/dist/browser/react/location-state-shared.js.map +1 -0
- package/dist/browser/react/location-state.d.ts +23 -0
- package/dist/browser/react/location-state.d.ts.map +1 -0
- package/dist/browser/react/location-state.js +29 -0
- package/dist/browser/react/location-state.js.map +1 -0
- package/dist/browser/react/mount-context.d.ts +24 -0
- package/dist/browser/react/mount-context.d.ts.map +1 -0
- package/dist/browser/react/mount-context.js +24 -0
- package/dist/browser/react/mount-context.js.map +1 -0
- package/dist/browser/react/use-action.d.ts +64 -0
- package/dist/browser/react/use-action.d.ts.map +1 -0
- package/dist/browser/react/use-action.js +134 -0
- package/dist/browser/react/use-action.js.map +1 -0
- package/dist/browser/react/use-client-cache.d.ts +41 -0
- package/dist/browser/react/use-client-cache.d.ts.map +1 -0
- package/dist/browser/react/use-client-cache.js +39 -0
- package/dist/browser/react/use-client-cache.js.map +1 -0
- package/dist/browser/react/use-handle.d.ts +31 -0
- package/dist/browser/react/use-handle.d.ts.map +1 -0
- package/dist/browser/react/use-handle.js +144 -0
- package/dist/browser/react/use-handle.js.map +1 -0
- package/dist/browser/react/use-href.d.ts +33 -0
- package/dist/browser/react/use-href.d.ts.map +1 -0
- package/dist/browser/react/use-href.js +39 -0
- package/dist/browser/react/use-href.js.map +1 -0
- package/dist/browser/react/use-link-status.d.ts +37 -0
- package/dist/browser/react/use-link-status.d.ts.map +1 -0
- package/dist/browser/react/use-link-status.js +99 -0
- package/dist/browser/react/use-link-status.js.map +1 -0
- package/dist/browser/react/use-mount.d.ts +25 -0
- package/dist/browser/react/use-mount.d.ts.map +1 -0
- package/dist/browser/react/use-mount.js +30 -0
- package/dist/browser/react/use-mount.js.map +1 -0
- package/dist/browser/react/use-navigation.d.ts +27 -0
- package/dist/browser/react/use-navigation.d.ts.map +1 -0
- package/dist/browser/react/use-navigation.js +87 -0
- package/dist/browser/react/use-navigation.js.map +1 -0
- package/dist/browser/react/use-segments.d.ts +38 -0
- package/dist/browser/react/use-segments.d.ts.map +1 -0
- package/dist/browser/react/use-segments.js +130 -0
- package/dist/browser/react/use-segments.js.map +1 -0
- package/dist/browser/request-controller.d.ts +26 -0
- package/dist/browser/request-controller.d.ts.map +1 -0
- package/dist/browser/request-controller.js +147 -0
- package/dist/browser/request-controller.js.map +1 -0
- package/dist/browser/rsc-router.d.ts +129 -0
- package/dist/browser/rsc-router.d.ts.map +1 -0
- package/dist/browser/rsc-router.js +195 -0
- package/dist/browser/rsc-router.js.map +1 -0
- package/dist/browser/scroll-restoration.d.ts +93 -0
- package/dist/browser/scroll-restoration.d.ts.map +1 -0
- package/dist/browser/scroll-restoration.js +321 -0
- package/dist/browser/scroll-restoration.js.map +1 -0
- package/dist/browser/segment-structure-assert.d.ts +17 -0
- package/dist/browser/segment-structure-assert.d.ts.map +1 -0
- package/dist/browser/segment-structure-assert.js +59 -0
- package/dist/browser/segment-structure-assert.js.map +1 -0
- package/dist/browser/server-action-bridge.d.ts +26 -0
- package/dist/browser/server-action-bridge.d.ts.map +1 -0
- package/dist/browser/server-action-bridge.js +668 -0
- package/dist/browser/server-action-bridge.js.map +1 -0
- package/dist/browser/shallow.d.ts +12 -0
- package/dist/browser/shallow.d.ts.map +1 -0
- package/dist/browser/shallow.js +34 -0
- package/dist/browser/shallow.js.map +1 -0
- package/dist/browser/types.d.ts +369 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
- package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-cli.test.js +237 -0
- package/dist/build/__tests__/generate-cli.test.js.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.js +119 -0
- package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.js +620 -0
- package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.js +308 -0
- package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +81 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +276 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/build/generate-route-types.d.ts +115 -0
- package/dist/build/generate-route-types.d.ts.map +1 -0
- package/dist/build/generate-route-types.js +740 -0
- package/dist/build/generate-route-types.js.map +1 -0
- package/dist/build/index.d.ts +21 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +21 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/route-trie.d.ts +71 -0
- package/dist/build/route-trie.d.ts.map +1 -0
- package/dist/build/route-trie.js +175 -0
- package/dist/build/route-trie.js.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.js +208 -0
- package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
- package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
- package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
- package/dist/cache/__tests__/document-cache.test.js +345 -0
- package/dist/cache/__tests__/document-cache.test.js.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
- package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
- package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-store.test.js +367 -0
- package/dist/cache/__tests__/memory-store.test.js.map +1 -0
- package/dist/cache/cache-scope.d.ts +102 -0
- package/dist/cache/cache-scope.d.ts.map +1 -0
- package/dist/cache/cache-scope.js +440 -0
- package/dist/cache/cache-scope.js.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
- package/dist/cache/cf/cf-cache-store.d.ts +165 -0
- package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
- package/dist/cache/cf/cf-cache-store.js +242 -0
- package/dist/cache/cf/cf-cache-store.js.map +1 -0
- package/dist/cache/cf/index.d.ts +14 -0
- package/dist/cache/cf/index.d.ts.map +1 -0
- package/dist/cache/cf/index.js +17 -0
- package/dist/cache/cf/index.js.map +1 -0
- package/dist/cache/document-cache.d.ts +64 -0
- package/dist/cache/document-cache.d.ts.map +1 -0
- package/dist/cache/document-cache.js +228 -0
- package/dist/cache/document-cache.js.map +1 -0
- package/dist/cache/index.d.ts +19 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-segment-store.d.ts +110 -0
- package/dist/cache/memory-segment-store.d.ts.map +1 -0
- package/dist/cache/memory-segment-store.js +117 -0
- package/dist/cache/memory-segment-store.js.map +1 -0
- package/dist/cache/memory-store.d.ts +41 -0
- package/dist/cache/memory-store.d.ts.map +1 -0
- package/dist/cache/memory-store.js +191 -0
- package/dist/cache/memory-store.js.map +1 -0
- package/dist/cache/types.d.ts +317 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +12 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client.d.ts +248 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +367 -0
- package/dist/client.js.map +1 -0
- package/dist/client.rsc.d.ts +26 -0
- package/dist/client.rsc.d.ts.map +1 -0
- package/dist/client.rsc.js +46 -0
- package/dist/client.rsc.js.map +1 -0
- package/dist/component-utils.d.ts +36 -0
- package/dist/component-utils.d.ts.map +1 -0
- package/dist/component-utils.js +61 -0
- package/dist/component-utils.js.map +1 -0
- package/dist/components/DefaultDocument.d.ts +13 -0
- package/dist/components/DefaultDocument.d.ts.map +1 -0
- package/dist/components/DefaultDocument.js +15 -0
- package/dist/components/DefaultDocument.js.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +157 -0
- package/dist/debug.js.map +1 -0
- package/dist/default-error-boundary.d.ts +11 -0
- package/dist/default-error-boundary.d.ts.map +1 -0
- package/dist/default-error-boundary.js +45 -0
- package/dist/default-error-boundary.js.map +1 -0
- package/dist/deps/browser.d.ts +2 -0
- package/dist/deps/browser.d.ts.map +1 -0
- package/dist/deps/browser.js +3 -0
- package/dist/deps/browser.js.map +1 -0
- package/dist/deps/html-stream-client.d.ts +2 -0
- package/dist/deps/html-stream-client.d.ts.map +1 -0
- package/dist/deps/html-stream-client.js +3 -0
- package/dist/deps/html-stream-client.js.map +1 -0
- package/dist/deps/html-stream-server.d.ts +2 -0
- package/dist/deps/html-stream-server.d.ts.map +1 -0
- package/dist/deps/html-stream-server.js +3 -0
- package/dist/deps/html-stream-server.js.map +1 -0
- package/dist/deps/rsc.d.ts +2 -0
- package/dist/deps/rsc.d.ts.map +1 -0
- package/dist/deps/rsc.js +4 -0
- package/dist/deps/rsc.js.map +1 -0
- package/dist/deps/ssr.d.ts +2 -0
- package/dist/deps/ssr.d.ts.map +1 -0
- package/dist/deps/ssr.js +3 -0
- package/dist/deps/ssr.js.map +1 -0
- package/dist/errors.d.ts +174 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +241 -0
- package/dist/errors.js.map +1 -0
- package/dist/handle.d.ts +78 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +82 -0
- package/dist/handle.js.map +1 -0
- package/dist/handles/MetaTags.d.ts +14 -0
- package/dist/handles/MetaTags.d.ts.map +1 -0
- package/dist/handles/MetaTags.js +136 -0
- package/dist/handles/MetaTags.js.map +1 -0
- package/dist/handles/index.d.ts +6 -0
- package/dist/handles/index.d.ts.map +1 -0
- package/dist/handles/index.js +6 -0
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/dist/href-context.d.ts +29 -0
- package/dist/href-context.d.ts.map +1 -0
- package/dist/href-context.js +21 -0
- package/dist/href-context.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.rsc.d.ts +32 -0
- package/dist/index.rsc.d.ts.map +1 -0
- package/dist/index.rsc.js +40 -0
- package/dist/index.rsc.js.map +1 -0
- package/dist/internal-debug.d.ts +2 -0
- package/dist/internal-debug.d.ts.map +1 -0
- package/dist/internal-debug.js +5 -0
- package/dist/internal-debug.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/loader.rsc.d.ts +19 -0
- package/dist/loader.rsc.d.ts.map +1 -0
- package/dist/loader.rsc.js +99 -0
- package/dist/loader.rsc.js.map +1 -0
- package/dist/network-error-thrower.d.ts +17 -0
- package/dist/network-error-thrower.d.ts.map +1 -0
- package/dist/network-error-thrower.js +14 -0
- package/dist/network-error-thrower.js.map +1 -0
- package/dist/outlet-context.d.ts +13 -0
- package/dist/outlet-context.d.ts.map +1 -0
- package/dist/outlet-context.js +3 -0
- package/dist/outlet-context.js.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.js +148 -0
- package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
- package/dist/prerender/param-hash.d.ts +16 -0
- package/dist/prerender/param-hash.d.ts.map +1 -0
- package/dist/prerender/param-hash.js +36 -0
- package/dist/prerender/param-hash.js.map +1 -0
- package/dist/prerender/store.d.ts +38 -0
- package/dist/prerender/store.d.ts.map +1 -0
- package/dist/prerender/store.js +61 -0
- package/dist/prerender/store.js.map +1 -0
- package/dist/prerender.d.ts +66 -0
- package/dist/prerender.d.ts.map +1 -0
- package/dist/prerender.js +57 -0
- package/dist/prerender.js.map +1 -0
- package/dist/reverse.d.ts +196 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +78 -0
- package/dist/reverse.js.map +1 -0
- package/dist/root-error-boundary.d.ts +33 -0
- package/dist/root-error-boundary.d.ts.map +1 -0
- package/dist/root-error-boundary.js +165 -0
- package/dist/root-error-boundary.js.map +1 -0
- package/dist/route-content-wrapper.d.ts +46 -0
- package/dist/route-content-wrapper.d.ts.map +1 -0
- package/dist/route-content-wrapper.js +77 -0
- package/dist/route-content-wrapper.js.map +1 -0
- package/dist/route-definition.d.ts +421 -0
- package/dist/route-definition.d.ts.map +1 -0
- package/dist/route-definition.js +868 -0
- package/dist/route-definition.js.map +1 -0
- package/dist/route-map-builder.d.ts +155 -0
- package/dist/route-map-builder.d.ts.map +1 -0
- package/dist/route-map-builder.js +237 -0
- package/dist/route-map-builder.js.map +1 -0
- package/dist/route-types.d.ts +165 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +7 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router/__tests__/handler-context.test.d.ts +2 -0
- package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/handler-context.test.js +65 -0
- package/dist/router/__tests__/handler-context.test.js.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
- package/dist/router/__tests__/match-context.test.d.ts +2 -0
- package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-context.test.js +92 -0
- package/dist/router/__tests__/match-context.test.js.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.js +417 -0
- package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
- package/dist/router/__tests__/match-result.test.d.ts +2 -0
- package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-result.test.js +457 -0
- package/dist/router/__tests__/match-result.test.js.map +1 -0
- package/dist/router/__tests__/on-error.test.d.ts +2 -0
- package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
- package/dist/router/__tests__/on-error.test.js +678 -0
- package/dist/router/__tests__/on-error.test.js.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.js +629 -0
- package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
- package/dist/router/error-handling.d.ts +77 -0
- package/dist/router/error-handling.d.ts.map +1 -0
- package/dist/router/error-handling.js +202 -0
- package/dist/router/error-handling.js.map +1 -0
- package/dist/router/handler-context.d.ts +20 -0
- package/dist/router/handler-context.d.ts.map +1 -0
- package/dist/router/handler-context.js +198 -0
- package/dist/router/handler-context.js.map +1 -0
- package/dist/router/intercept-resolution.d.ts +66 -0
- package/dist/router/intercept-resolution.d.ts.map +1 -0
- package/dist/router/intercept-resolution.js +246 -0
- package/dist/router/intercept-resolution.js.map +1 -0
- package/dist/router/loader-resolution.d.ts +64 -0
- package/dist/router/loader-resolution.d.ts.map +1 -0
- package/dist/router/loader-resolution.js +284 -0
- package/dist/router/loader-resolution.js.map +1 -0
- package/dist/router/logging.d.ts +15 -0
- package/dist/router/logging.d.ts.map +1 -0
- package/dist/router/logging.js +99 -0
- package/dist/router/logging.js.map +1 -0
- package/dist/router/manifest.d.ts +22 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +181 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/match-api.d.ts +35 -0
- package/dist/router/match-api.d.ts.map +1 -0
- package/dist/router/match-api.js +406 -0
- package/dist/router/match-api.js.map +1 -0
- package/dist/router/match-context.d.ts +206 -0
- package/dist/router/match-context.d.ts.map +1 -0
- package/dist/router/match-context.js +17 -0
- package/dist/router/match-context.js.map +1 -0
- package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
- package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
- package/dist/router/match-middleware/background-revalidation.js +75 -0
- package/dist/router/match-middleware/background-revalidation.js.map +1 -0
- package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
- package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-lookup.js +257 -0
- package/dist/router/match-middleware/cache-lookup.js.map +1 -0
- package/dist/router/match-middleware/cache-store.d.ts +113 -0
- package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-store.js +108 -0
- package/dist/router/match-middleware/cache-store.js.map +1 -0
- package/dist/router/match-middleware/index.d.ts +81 -0
- package/dist/router/match-middleware/index.d.ts.map +1 -0
- package/dist/router/match-middleware/index.js +80 -0
- package/dist/router/match-middleware/index.js.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.js +134 -0
- package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
- package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
- package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/segment-resolution.js +53 -0
- package/dist/router/match-middleware/segment-resolution.js.map +1 -0
- package/dist/router/match-pipelines.d.ts +147 -0
- package/dist/router/match-pipelines.d.ts.map +1 -0
- package/dist/router/match-pipelines.js +82 -0
- package/dist/router/match-pipelines.js.map +1 -0
- package/dist/router/match-result.d.ts +126 -0
- package/dist/router/match-result.d.ts.map +1 -0
- package/dist/router/match-result.js +93 -0
- package/dist/router/match-result.js.map +1 -0
- package/dist/router/metrics.d.ts +20 -0
- package/dist/router/metrics.d.ts.map +1 -0
- package/dist/router/metrics.js +47 -0
- package/dist/router/metrics.js.map +1 -0
- package/dist/router/middleware.d.ts +249 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +434 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/middleware.test.d.ts +2 -0
- package/dist/router/middleware.test.d.ts.map +1 -0
- package/dist/router/middleware.test.js +816 -0
- package/dist/router/middleware.test.js.map +1 -0
- package/dist/router/pattern-matching.d.ts +149 -0
- package/dist/router/pattern-matching.d.ts.map +1 -0
- package/dist/router/pattern-matching.js +349 -0
- package/dist/router/pattern-matching.js.map +1 -0
- package/dist/router/revalidation.d.ts +44 -0
- package/dist/router/revalidation.d.ts.map +1 -0
- package/dist/router/revalidation.js +147 -0
- package/dist/router/revalidation.js.map +1 -0
- package/dist/router/router-context.d.ts +135 -0
- package/dist/router/router-context.d.ts.map +1 -0
- package/dist/router/router-context.js +36 -0
- package/dist/router/router-context.js.map +1 -0
- package/dist/router/segment-resolution.d.ts +127 -0
- package/dist/router/segment-resolution.d.ts.map +1 -0
- package/dist/router/segment-resolution.js +919 -0
- package/dist/router/segment-resolution.js.map +1 -0
- package/dist/router/trie-matching.d.ts +40 -0
- package/dist/router/trie-matching.d.ts.map +1 -0
- package/dist/router/trie-matching.js +127 -0
- package/dist/router/trie-matching.js.map +1 -0
- package/dist/router/types.d.ts +136 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router.d.ts +753 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.gen.d.ts +6 -0
- package/dist/router.gen.d.ts.map +1 -0
- package/dist/router.gen.js +6 -0
- package/dist/router.gen.js.map +1 -0
- package/dist/router.js +1304 -0
- package/dist/router.js.map +1 -0
- package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
- package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/rsc/__tests__/helpers.test.js +140 -0
- package/dist/rsc/__tests__/helpers.test.js.map +1 -0
- package/dist/rsc/handler.d.ts +45 -0
- package/dist/rsc/handler.d.ts.map +1 -0
- package/dist/rsc/handler.js +1172 -0
- package/dist/rsc/handler.js.map +1 -0
- package/dist/rsc/helpers.d.ts +16 -0
- package/dist/rsc/helpers.d.ts.map +1 -0
- package/dist/rsc/helpers.js +55 -0
- package/dist/rsc/helpers.js.map +1 -0
- package/dist/rsc/index.d.ts +22 -0
- package/dist/rsc/index.d.ts.map +1 -0
- package/dist/rsc/index.js +23 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/nonce.d.ts +9 -0
- package/dist/rsc/nonce.d.ts.map +1 -0
- package/dist/rsc/nonce.js +18 -0
- package/dist/rsc/nonce.js.map +1 -0
- package/dist/rsc/types.d.ts +206 -0
- package/dist/rsc/types.d.ts.map +1 -0
- package/dist/rsc/types.js +8 -0
- package/dist/rsc/types.js.map +1 -0
- package/dist/search-params.d.ts +103 -0
- package/dist/search-params.d.ts.map +1 -0
- package/dist/search-params.js +74 -0
- package/dist/search-params.js.map +1 -0
- package/dist/segment-system.d.ts +75 -0
- package/dist/segment-system.d.ts.map +1 -0
- package/dist/segment-system.js +336 -0
- package/dist/segment-system.js.map +1 -0
- package/dist/server/context.d.ts +245 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +197 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fetchable-loader-store.d.ts +18 -0
- package/dist/server/fetchable-loader-store.d.ts.map +1 -0
- package/dist/server/fetchable-loader-store.js +18 -0
- package/dist/server/fetchable-loader-store.js.map +1 -0
- package/dist/server/handle-store.d.ts +85 -0
- package/dist/server/handle-store.d.ts.map +1 -0
- package/dist/server/handle-store.js +142 -0
- package/dist/server/handle-store.js.map +1 -0
- package/dist/server/loader-registry.d.ts +55 -0
- package/dist/server/loader-registry.d.ts.map +1 -0
- package/dist/server/loader-registry.js +132 -0
- package/dist/server/loader-registry.js.map +1 -0
- package/dist/server/request-context.d.ts +226 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +290 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/root-layout.d.ts +4 -0
- package/dist/server/root-layout.d.ts.map +1 -0
- package/dist/server/root-layout.js +5 -0
- package/dist/server/root-layout.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
- package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
- package/dist/ssr/index.d.ts +98 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +158 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/static-handler.d.ts +50 -0
- package/dist/static-handler.d.ts.map +1 -0
- package/dist/static-handler.gen.d.ts +5 -0
- package/dist/static-handler.gen.d.ts.map +1 -0
- package/dist/static-handler.gen.js +5 -0
- package/dist/static-handler.gen.js.map +1 -0
- package/dist/static-handler.js +29 -0
- package/dist/static-handler.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +20 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +240 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/ThemeScript.d.ts +48 -0
- package/dist/theme/ThemeScript.d.ts.map +1 -0
- package/dist/theme/ThemeScript.js +13 -0
- package/dist/theme/ThemeScript.js.map +1 -0
- package/dist/theme/__tests__/theme.test.d.ts +2 -0
- package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
- package/dist/theme/__tests__/theme.test.js +103 -0
- package/dist/theme/__tests__/theme.test.js.map +1 -0
- package/dist/theme/constants.d.ts +29 -0
- package/dist/theme/constants.d.ts.map +1 -0
- package/dist/theme/constants.js +48 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +31 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +36 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-context.d.ts +40 -0
- package/dist/theme/theme-context.d.ts.map +1 -0
- package/dist/theme/theme-context.js +60 -0
- package/dist/theme/theme-context.js.map +1 -0
- package/dist/theme/theme-script.d.ts +27 -0
- package/dist/theme/theme-script.d.ts.map +1 -0
- package/dist/theme/theme-script.js +147 -0
- package/dist/theme/theme-script.js.map +1 -0
- package/dist/theme/types.d.ts +163 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +11 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/theme/use-theme.d.ts +12 -0
- package/dist/theme/use-theme.d.ts.map +1 -0
- package/dist/theme/use-theme.js +40 -0
- package/dist/theme/use-theme.js.map +1 -0
- package/dist/types.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 +1011 -442
- package/dist/vite/index.js.bak +5448 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/index.named-routes.gen.ts +103 -0
- package/dist/vite/package-resolution.d.ts +43 -0
- package/dist/vite/package-resolution.d.ts.map +1 -0
- package/dist/vite/package-resolution.js +112 -0
- package/dist/vite/package-resolution.js.map +1 -0
- package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/dist/vite/virtual-entries.d.ts +25 -0
- package/dist/vite/virtual-entries.d.ts.map +1 -0
- package/dist/vite/virtual-entries.js +110 -0
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +17 -16
- package/skills/breadcrumbs/SKILL.md +47 -1
- package/skills/cache-guide/SKILL.md +32 -0
- package/skills/caching/SKILL.md +45 -4
- package/skills/handler-use/SKILL.md +362 -0
- package/skills/hooks/SKILL.md +48 -20
- package/skills/intercept/SKILL.md +20 -0
- package/skills/layout/SKILL.md +22 -0
- package/skills/links/SKILL.md +91 -17
- package/skills/loader/SKILL.md +106 -23
- package/skills/middleware/SKILL.md +34 -3
- package/skills/migrate-nextjs/SKILL.md +560 -0
- package/skills/migrate-react-router/SKILL.md +765 -0
- package/skills/parallel/SKILL.md +185 -0
- package/skills/prerender/SKILL.md +110 -68
- package/skills/rango/SKILL.md +24 -22
- package/skills/response-routes/SKILL.md +8 -0
- package/skills/route/SKILL.md +55 -0
- package/skills/router-setup/SKILL.md +87 -2
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/typesafety/SKILL.md +13 -1
- package/src/__internal.ts +92 -0
- package/src/browser/app-shell.ts +52 -0
- package/src/browser/app-version.ts +14 -0
- package/src/browser/event-controller.ts +5 -0
- package/src/browser/link-interceptor.ts +4 -0
- package/src/browser/navigation-bridge.ts +175 -17
- package/src/browser/navigation-client.ts +167 -59
- package/src/browser/navigation-store.ts +68 -9
- package/src/browser/navigation-transaction.ts +11 -9
- package/src/browser/partial-update.ts +113 -17
- package/src/browser/prefetch/cache.ts +184 -16
- package/src/browser/prefetch/fetch.ts +180 -33
- package/src/browser/prefetch/policy.ts +6 -0
- package/src/browser/prefetch/queue.ts +123 -20
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/rango-state.ts +53 -13
- package/src/browser/react/Link.tsx +93 -9
- package/src/browser/react/NavigationProvider.tsx +89 -14
- package/src/browser/react/context.ts +7 -2
- package/src/browser/react/use-handle.ts +9 -58
- package/src/browser/react/use-navigation.ts +22 -2
- package/src/browser/react/use-params.ts +11 -1
- package/src/browser/react/use-router.ts +29 -9
- package/src/browser/rsc-router.tsx +168 -65
- package/src/browser/scroll-restoration.ts +41 -42
- package/src/browser/segment-reconciler.ts +36 -9
- package/src/browser/server-action-bridge.ts +8 -6
- package/src/browser/types.ts +68 -5
- package/src/build/generate-manifest.ts +6 -6
- package/src/build/generate-route-types.ts +3 -0
- package/src/build/route-trie.ts +50 -24
- package/src/build/route-types/include-resolution.ts +8 -1
- package/src/build/route-types/router-processing.ts +223 -74
- package/src/build/route-types/scan-filter.ts +8 -1
- package/src/cache/cache-runtime.ts +15 -11
- package/src/cache/cache-scope.ts +48 -7
- package/src/cache/cf/cf-cache-store.ts +455 -15
- package/src/cache/cf/index.ts +5 -1
- package/src/cache/document-cache.ts +17 -7
- package/src/cache/index.ts +1 -0
- package/src/cache/taint.ts +55 -0
- package/src/client.tsx +84 -230
- package/src/context-var.ts +72 -2
- package/src/debug.ts +2 -2
- package/src/handle.ts +40 -0
- package/src/index.rsc.ts +8 -36
- package/src/index.ts +50 -43
- package/src/outlet-context.ts +1 -1
- package/src/prerender/store.ts +5 -4
- package/src/prerender.ts +138 -77
- package/src/response-utils.ts +28 -0
- package/src/reverse.ts +27 -2
- package/src/route-definition/dsl-helpers.ts +240 -40
- package/src/route-definition/helpers-types.ts +67 -19
- package/src/route-definition/index.ts +3 -0
- package/src/route-definition/redirect.ts +11 -3
- package/src/route-definition/resolve-handler-use.ts +155 -0
- package/src/route-map-builder.ts +7 -1
- package/src/route-types.ts +18 -0
- package/src/router/content-negotiation.ts +100 -1
- package/src/router/find-match.ts +4 -2
- package/src/router/handler-context.ts +107 -28
- package/src/router/intercept-resolution.ts +11 -4
- package/src/router/lazy-includes.ts +10 -7
- package/src/router/loader-resolution.ts +159 -21
- package/src/router/logging.ts +5 -2
- package/src/router/manifest.ts +31 -16
- package/src/router/match-api.ts +127 -192
- package/src/router/match-middleware/background-revalidation.ts +30 -2
- package/src/router/match-middleware/cache-lookup.ts +94 -17
- package/src/router/match-middleware/cache-store.ts +53 -10
- package/src/router/match-middleware/intercept-resolution.ts +9 -7
- package/src/router/match-middleware/segment-resolution.ts +61 -5
- package/src/router/match-result.ts +104 -10
- package/src/router/metrics.ts +6 -1
- package/src/router/middleware-types.ts +8 -30
- package/src/router/middleware.ts +36 -10
- package/src/router/navigation-snapshot.ts +182 -0
- package/src/router/pattern-matching.ts +60 -9
- package/src/router/prerender-match.ts +110 -10
- package/src/router/preview-match.ts +30 -102
- package/src/router/request-classification.ts +310 -0
- package/src/router/route-snapshot.ts +245 -0
- package/src/router/router-context.ts +6 -1
- package/src/router/router-interfaces.ts +36 -4
- package/src/router/router-options.ts +37 -11
- package/src/router/segment-resolution/fresh.ts +198 -20
- package/src/router/segment-resolution/helpers.ts +29 -24
- package/src/router/segment-resolution/loader-cache.ts +1 -0
- package/src/router/segment-resolution/revalidation.ts +438 -300
- package/src/router/segment-wrappers.ts +2 -0
- package/src/router/trie-matching.ts +10 -4
- package/src/router/types.ts +1 -0
- package/src/router/url-params.ts +49 -0
- package/src/router.ts +60 -8
- package/src/rsc/handler.ts +478 -374
- package/src/rsc/helpers.ts +69 -41
- package/src/rsc/loader-fetch.ts +23 -3
- package/src/rsc/manifest-init.ts +5 -1
- package/src/rsc/progressive-enhancement.ts +16 -2
- package/src/rsc/response-route-handler.ts +14 -1
- package/src/rsc/rsc-rendering.ts +19 -1
- package/src/rsc/server-action.ts +10 -0
- package/src/rsc/ssr-setup.ts +2 -2
- package/src/rsc/types.ts +9 -1
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-loader-promise.ts +122 -0
- package/src/segment-system.tsx +109 -23
- package/src/server/context.ts +166 -17
- package/src/server/handle-store.ts +19 -0
- package/src/server/loader-registry.ts +9 -8
- package/src/server/request-context.ts +194 -60
- package/src/ssr/index.tsx +4 -0
- package/src/static-handler.ts +18 -6
- package/src/types/cache-types.ts +4 -4
- package/src/types/handler-context.ts +137 -65
- package/src/types/loader-types.ts +41 -15
- package/src/types/request-scope.ts +126 -0
- package/src/types/route-entry.ts +19 -1
- package/src/types/segments.ts +2 -0
- package/src/urls/include-helper.ts +24 -14
- package/src/urls/path-helper-types.ts +39 -6
- package/src/urls/path-helper.ts +48 -13
- package/src/urls/pattern-types.ts +12 -0
- package/src/urls/response-types.ts +18 -16
- package/src/use-loader.tsx +77 -5
- package/src/vite/discovery/bundle-postprocess.ts +30 -33
- package/src/vite/discovery/discover-routers.ts +5 -1
- package/src/vite/discovery/prerender-collection.ts +128 -74
- package/src/vite/discovery/state.ts +13 -6
- package/src/vite/index.ts +4 -0
- package/src/vite/plugin-types.ts +51 -79
- package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
- package/src/vite/plugins/expose-action-id.ts +1 -3
- package/src/vite/plugins/expose-id-utils.ts +12 -0
- package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
- package/src/vite/plugins/expose-internal-ids.ts +257 -40
- package/src/vite/plugins/performance-tracks.ts +88 -0
- package/src/vite/plugins/refresh-cmd.ts +88 -26
- package/src/vite/plugins/version-plugin.ts +13 -1
- package/src/vite/rango.ts +190 -217
- package/src/vite/router-discovery.ts +237 -45
- package/src/vite/utils/banner.ts +4 -4
- package/src/vite/utils/package-resolution.ts +41 -1
- package/src/vite/utils/prerender-utils.ts +37 -5
- package/src/vite/utils/shared-utils.ts +3 -2
package/dist/vite/index.js
CHANGED
|
@@ -18,6 +18,9 @@ function hashId(filePath, exportName) {
|
|
|
18
18
|
const hash = crypto.createHash("sha256").update(input).digest("hex");
|
|
19
19
|
return `${hash.slice(0, 8)}#${exportName}`;
|
|
20
20
|
}
|
|
21
|
+
function makeStubId(filePath, exportName, isBuild) {
|
|
22
|
+
return isBuild ? hashId(filePath, exportName) : `${filePath}#${exportName}`;
|
|
23
|
+
}
|
|
21
24
|
function hashInlineId(filePath, lineNumber, index) {
|
|
22
25
|
const input = index !== void 0 && index > 0 ? `${filePath}:${lineNumber}:${index}` : `${filePath}:${lineNumber}`;
|
|
23
26
|
return crypto.createHash("sha256").update(input).digest("hex").slice(0, 8);
|
|
@@ -292,7 +295,7 @@ function exposeActionId() {
|
|
|
292
295
|
}
|
|
293
296
|
if (!rscPluginApi) {
|
|
294
297
|
throw new Error(
|
|
295
|
-
"[rsc-router] Could not find @vitejs/plugin-rsc. @rangojs/router requires the Vite RSC plugin
|
|
298
|
+
"[rsc-router] Could not find @vitejs/plugin-rsc. @rangojs/router requires the Vite RSC plugin, which is included automatically by rango()."
|
|
296
299
|
);
|
|
297
300
|
}
|
|
298
301
|
if (!isBuild) return;
|
|
@@ -910,9 +913,7 @@ function generateWholeFileStubs(cfg, bindings, code, filePath, isBuild) {
|
|
|
910
913
|
});
|
|
911
914
|
return { code: stubs.join("\n") + "\n", map: null };
|
|
912
915
|
}
|
|
913
|
-
function
|
|
914
|
-
if (bindings.length === 0) return null;
|
|
915
|
-
const s = new MagicString2(code);
|
|
916
|
+
function stubHandlerExprs(cfg, bindings, s, filePath, isBuild) {
|
|
916
917
|
let hasChanges = false;
|
|
917
918
|
for (const binding of bindings) {
|
|
918
919
|
const exportName = binding.exportNames[0];
|
|
@@ -924,15 +925,7 @@ function generateExprStubs(cfg, bindings, code, filePath, sourceId, isBuild) {
|
|
|
924
925
|
);
|
|
925
926
|
hasChanges = true;
|
|
926
927
|
}
|
|
927
|
-
|
|
928
|
-
return {
|
|
929
|
-
code: s.toString(),
|
|
930
|
-
map: s.generateMap({
|
|
931
|
-
source: sourceId,
|
|
932
|
-
includeContent: true,
|
|
933
|
-
hires: "boundary"
|
|
934
|
-
})
|
|
935
|
-
};
|
|
928
|
+
return hasChanges;
|
|
936
929
|
}
|
|
937
930
|
function transformHandlerIds(cfg, bindings, s, filePath, isBuild) {
|
|
938
931
|
let hasChanges = false;
|
|
@@ -1269,15 +1262,6 @@ ${lazyImports.join(",\n")}
|
|
|
1269
1262
|
isBuild
|
|
1270
1263
|
);
|
|
1271
1264
|
if (wholeFile) return wholeFile;
|
|
1272
|
-
const exprStubs = generateExprStubs(
|
|
1273
|
-
PRERENDER_CONFIG,
|
|
1274
|
-
bindings,
|
|
1275
|
-
code,
|
|
1276
|
-
filePath,
|
|
1277
|
-
id,
|
|
1278
|
-
isBuild
|
|
1279
|
-
);
|
|
1280
|
-
if (exprStubs) return exprStubs;
|
|
1281
1265
|
}
|
|
1282
1266
|
if (hasPrerenderHandlerCode && isRscEnv && isBuild) {
|
|
1283
1267
|
const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
|
|
@@ -1329,15 +1313,134 @@ ${lazyImports.join(",\n")}
|
|
|
1329
1313
|
isBuild
|
|
1330
1314
|
);
|
|
1331
1315
|
if (wholeFile) return wholeFile;
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1316
|
+
}
|
|
1317
|
+
if (!isRscEnv && (hasPrerenderHandlerCode || hasStaticHandlerCode)) {
|
|
1318
|
+
const prerenderFnNames = hasPrerenderHandlerCode ? getFnNames(PRERENDER_CONFIG.fnName) : [];
|
|
1319
|
+
const staticFnNames = hasStaticHandlerCode ? getFnNames(STATIC_CONFIG.fnName) : [];
|
|
1320
|
+
const loaderFnNames = hasLoaderCode ? getFnNames("createLoader") : [];
|
|
1321
|
+
const handleFnNames = hasHandleCode ? getFnNames("createHandle") : [];
|
|
1322
|
+
const lsFnNames = hasLocationStateCode ? getFnNames("createLocationState") : [];
|
|
1323
|
+
const allBindings = [];
|
|
1324
|
+
for (const fnNames of [
|
|
1325
|
+
prerenderFnNames,
|
|
1326
|
+
staticFnNames,
|
|
1327
|
+
loaderFnNames,
|
|
1328
|
+
handleFnNames,
|
|
1329
|
+
lsFnNames
|
|
1330
|
+
]) {
|
|
1331
|
+
if (fnNames.length > 0) {
|
|
1332
|
+
allBindings.push(...getBindings(code, fnNames));
|
|
1333
|
+
}
|
|
1334
|
+
}
|
|
1335
|
+
let canStubWholeFile = allBindings.length > 0 && isExportOnlyFile(code, allBindings);
|
|
1336
|
+
if (canStubWholeFile && (handleFnNames.length > 0 || lsFnNames.length > 0)) {
|
|
1337
|
+
const exportedLocals = new Set(allBindings.map((b) => b.localName));
|
|
1338
|
+
const strippedBindings = [];
|
|
1339
|
+
const localDeclPattern = /(?:^|;|\n)\s*(?:const|let|var|function)\s+(\w+)/g;
|
|
1340
|
+
let declMatch;
|
|
1341
|
+
while ((declMatch = localDeclPattern.exec(code)) !== null) {
|
|
1342
|
+
const name = declMatch[1];
|
|
1343
|
+
if (!exportedLocals.has(name) && !/^_c\d*$/.test(name)) {
|
|
1344
|
+
strippedBindings.push(name);
|
|
1345
|
+
}
|
|
1346
|
+
}
|
|
1347
|
+
const importPattern = /import\s*\{([^}]*)\}\s*from\s*["'](?!@rangojs\/router)[^"']*["']/g;
|
|
1348
|
+
let importMatch;
|
|
1349
|
+
while ((importMatch = importPattern.exec(code)) !== null) {
|
|
1350
|
+
for (const spec of importMatch[1].split(",")) {
|
|
1351
|
+
const m = spec.trim().match(/^[A-Za-z_$][\w$]*(?:\s+as\s+([A-Za-z_$][\w$]*))?$/);
|
|
1352
|
+
if (m) strippedBindings.push(m[1] || m[0].trim().split(/\s/)[0]);
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
const defaultImportPattern = /import\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
|
|
1356
|
+
while ((importMatch = defaultImportPattern.exec(code)) !== null) {
|
|
1357
|
+
strippedBindings.push(importMatch[1]);
|
|
1358
|
+
}
|
|
1359
|
+
const nsImportPattern = /import\s+\*\s+as\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
|
|
1360
|
+
while ((importMatch = nsImportPattern.exec(code)) !== null) {
|
|
1361
|
+
strippedBindings.push(importMatch[1]);
|
|
1362
|
+
}
|
|
1363
|
+
if (strippedBindings.length > 0) {
|
|
1364
|
+
const preservedBindings = allBindings.filter((b) => {
|
|
1365
|
+
const fc = code.slice(b.callExprStart, b.callOpenParenPos + 1);
|
|
1366
|
+
return handleFnNames.some((n) => fc.includes(n)) || lsFnNames.some((n) => fc.includes(n));
|
|
1367
|
+
});
|
|
1368
|
+
const strippedRe = new RegExp(
|
|
1369
|
+
`\\b(?:${strippedBindings.join("|")})\\b`
|
|
1370
|
+
);
|
|
1371
|
+
canStubWholeFile = !preservedBindings.some((b) => {
|
|
1372
|
+
const expr = code.slice(b.callExprStart, b.callCloseParenPos + 1);
|
|
1373
|
+
return strippedRe.test(expr);
|
|
1374
|
+
});
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1377
|
+
if (canStubWholeFile) {
|
|
1378
|
+
const lines = [];
|
|
1379
|
+
const neededImports = [];
|
|
1380
|
+
if (handleFnNames.length > 0) neededImports.push("createHandle");
|
|
1381
|
+
if (lsFnNames.length > 0) neededImports.push("createLocationState");
|
|
1382
|
+
if (neededImports.length > 0) {
|
|
1383
|
+
lines.push(
|
|
1384
|
+
`import { ${neededImports.join(", ")} } from "@rangojs/router";`
|
|
1385
|
+
);
|
|
1386
|
+
}
|
|
1387
|
+
for (const binding of allBindings) {
|
|
1388
|
+
const fnCall = code.slice(
|
|
1389
|
+
binding.callExprStart,
|
|
1390
|
+
binding.callOpenParenPos + 1
|
|
1391
|
+
);
|
|
1392
|
+
const isHandle = handleFnNames.some((n) => fnCall.includes(n));
|
|
1393
|
+
const isLocationState = lsFnNames.some((n) => fnCall.includes(n));
|
|
1394
|
+
const primaryName = binding.exportNames[0];
|
|
1395
|
+
const stubId = makeStubId(filePath, primaryName, isBuild);
|
|
1396
|
+
if (isHandle || isLocationState) {
|
|
1397
|
+
const rawArgs = code.slice(binding.callOpenParenPos + 1, binding.callCloseParenPos).replace(/\b_c\d*\s*=\s*/g, "");
|
|
1398
|
+
const canonicalName = isHandle ? "createHandle" : "createLocationState";
|
|
1399
|
+
const activeFnNames = isHandle ? handleFnNames : lsFnNames;
|
|
1400
|
+
let rawCallee = code.slice(
|
|
1401
|
+
binding.callExprStart,
|
|
1402
|
+
binding.callOpenParenPos
|
|
1403
|
+
);
|
|
1404
|
+
for (const alias of activeFnNames) {
|
|
1405
|
+
if (alias !== canonicalName && rawCallee.startsWith(alias)) {
|
|
1406
|
+
rawCallee = canonicalName + rawCallee.slice(alias.length);
|
|
1407
|
+
break;
|
|
1408
|
+
}
|
|
1409
|
+
}
|
|
1410
|
+
if (isHandle) {
|
|
1411
|
+
const idParam = binding.argCount === 0 ? `undefined, "${stubId}"` : `, "${stubId}"`;
|
|
1412
|
+
lines.push(
|
|
1413
|
+
`export const ${primaryName} = ${rawCallee}(${rawArgs}${idParam});`
|
|
1414
|
+
);
|
|
1415
|
+
lines.push(`${primaryName}.$$id = "${stubId}";`);
|
|
1416
|
+
} else {
|
|
1417
|
+
lines.push(
|
|
1418
|
+
`export const ${primaryName} = ${rawCallee}(${rawArgs});`
|
|
1419
|
+
);
|
|
1420
|
+
lines.push(
|
|
1421
|
+
`${primaryName}.__rsc_ls_key = "__rsc_ls_${stubId}";`
|
|
1422
|
+
);
|
|
1423
|
+
}
|
|
1424
|
+
for (const name of binding.exportNames.slice(1)) {
|
|
1425
|
+
lines.push(`export const ${name} = ${primaryName};`);
|
|
1426
|
+
}
|
|
1427
|
+
} else {
|
|
1428
|
+
let brand = "loader";
|
|
1429
|
+
if (prerenderFnNames.some((n) => fnCall.includes(n))) {
|
|
1430
|
+
brand = PRERENDER_CONFIG.brand;
|
|
1431
|
+
} else if (staticFnNames.some((n) => fnCall.includes(n))) {
|
|
1432
|
+
brand = STATIC_CONFIG.brand;
|
|
1433
|
+
}
|
|
1434
|
+
lines.push(
|
|
1435
|
+
`export const ${primaryName} = { __brand: "${brand}", $$id: "${stubId}" };`
|
|
1436
|
+
);
|
|
1437
|
+
for (const name of binding.exportNames.slice(1)) {
|
|
1438
|
+
lines.push(`export const ${name} = ${primaryName};`);
|
|
1439
|
+
}
|
|
1440
|
+
}
|
|
1441
|
+
}
|
|
1442
|
+
return { code: lines.join("\n") + "\n", map: null };
|
|
1443
|
+
}
|
|
1341
1444
|
}
|
|
1342
1445
|
if (hasStaticHandlerCode && isRscEnv && isBuild) {
|
|
1343
1446
|
const fnNames = getFnNames(STATIC_CONFIG.fnName);
|
|
@@ -1372,25 +1475,41 @@ ${lazyImports.join(",\n")}
|
|
|
1372
1475
|
isBuild
|
|
1373
1476
|
) || changed;
|
|
1374
1477
|
}
|
|
1375
|
-
if (hasPrerenderHandlerCode
|
|
1478
|
+
if (hasPrerenderHandlerCode) {
|
|
1376
1479
|
const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1480
|
+
const bindings = getBindings(code, fnNames);
|
|
1481
|
+
if (isRscEnv) {
|
|
1482
|
+
changed = transformHandlerIds(
|
|
1483
|
+
PRERENDER_CONFIG,
|
|
1484
|
+
bindings,
|
|
1485
|
+
s,
|
|
1486
|
+
filePath,
|
|
1487
|
+
isBuild
|
|
1488
|
+
) || changed;
|
|
1489
|
+
} else {
|
|
1490
|
+
changed = stubHandlerExprs(
|
|
1491
|
+
PRERENDER_CONFIG,
|
|
1492
|
+
bindings,
|
|
1493
|
+
s,
|
|
1494
|
+
filePath,
|
|
1495
|
+
isBuild
|
|
1496
|
+
) || changed;
|
|
1497
|
+
}
|
|
1384
1498
|
}
|
|
1385
|
-
if (hasStaticHandlerCode
|
|
1499
|
+
if (hasStaticHandlerCode) {
|
|
1386
1500
|
const fnNames = getFnNames(STATIC_CONFIG.fnName);
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1501
|
+
const bindings = getBindings(code, fnNames);
|
|
1502
|
+
if (isRscEnv) {
|
|
1503
|
+
changed = transformHandlerIds(
|
|
1504
|
+
STATIC_CONFIG,
|
|
1505
|
+
bindings,
|
|
1506
|
+
s,
|
|
1507
|
+
filePath,
|
|
1508
|
+
isBuild
|
|
1509
|
+
) || changed;
|
|
1510
|
+
} else {
|
|
1511
|
+
changed = stubHandlerExprs(STATIC_CONFIG, bindings, s, filePath, isBuild) || changed;
|
|
1512
|
+
}
|
|
1394
1513
|
}
|
|
1395
1514
|
if (!changed) return;
|
|
1396
1515
|
return {
|
|
@@ -1740,12 +1859,13 @@ function getVirtualVersionContent(version) {
|
|
|
1740
1859
|
|
|
1741
1860
|
// src/vite/utils/package-resolution.ts
|
|
1742
1861
|
import { existsSync } from "node:fs";
|
|
1862
|
+
import { createRequire } from "node:module";
|
|
1743
1863
|
import { resolve } from "node:path";
|
|
1744
1864
|
|
|
1745
1865
|
// package.json
|
|
1746
1866
|
var package_default = {
|
|
1747
1867
|
name: "@rangojs/router",
|
|
1748
|
-
version: "0.0.0-experimental.
|
|
1868
|
+
version: "0.0.0-experimental.32f9e280",
|
|
1749
1869
|
description: "Django-inspired RSC router with composable URL patterns",
|
|
1750
1870
|
keywords: [
|
|
1751
1871
|
"react",
|
|
@@ -1878,16 +1998,16 @@ var package_default = {
|
|
|
1878
1998
|
tag: "experimental"
|
|
1879
1999
|
},
|
|
1880
2000
|
scripts: {
|
|
1881
|
-
build: "pnpm dlx esbuild src/vite/index.ts --bundle --format=esm --outfile=dist/vite/index.js --platform=node --packages=external && pnpm dlx esbuild src/bin/rango.ts --bundle --format=esm --outfile=dist/bin/rango.js --platform=node --packages=external --banner:js='#!/usr/bin/env node' && chmod +x dist/bin/rango.js",
|
|
2001
|
+
build: "pnpm dlx esbuild src/vite/index.ts --bundle --format=esm --outfile=dist/vite/index.js --platform=node --packages=external && mkdir -p dist/vite/plugins && cp src/vite/plugins/cloudflare-protocol-loader-hook.mjs dist/vite/plugins/cloudflare-protocol-loader-hook.mjs && pnpm dlx esbuild src/bin/rango.ts --bundle --format=esm --outfile=dist/bin/rango.js --platform=node --packages=external --banner:js='#!/usr/bin/env node' && chmod +x dist/bin/rango.js",
|
|
1882
2002
|
prepublishOnly: "pnpm build",
|
|
1883
|
-
typecheck: "tsc --noEmit",
|
|
2003
|
+
typecheck: "tsc --noEmit && tsc -p tsconfig.strict-check.json --noEmit",
|
|
1884
2004
|
test: "playwright test",
|
|
1885
2005
|
"test:ui": "playwright test --ui",
|
|
1886
2006
|
"test:unit": "vitest run",
|
|
1887
2007
|
"test:unit:watch": "vitest"
|
|
1888
2008
|
},
|
|
1889
2009
|
dependencies: {
|
|
1890
|
-
"@vitejs/plugin-rsc": "^0.5.
|
|
2010
|
+
"@vitejs/plugin-rsc": "^0.5.23",
|
|
1891
2011
|
"magic-string": "^0.30.17",
|
|
1892
2012
|
picomatch: "^4.0.3",
|
|
1893
2013
|
"rsc-html-stream": "^0.0.7"
|
|
@@ -1907,7 +2027,7 @@ var package_default = {
|
|
|
1907
2027
|
},
|
|
1908
2028
|
peerDependencies: {
|
|
1909
2029
|
"@cloudflare/vite-plugin": "^1.25.0",
|
|
1910
|
-
"@vitejs/plugin-rsc": "^0.5.
|
|
2030
|
+
"@vitejs/plugin-rsc": "^0.5.23",
|
|
1911
2031
|
react: "^18.0.0 || ^19.0.0",
|
|
1912
2032
|
vite: "^7.3.0"
|
|
1913
2033
|
},
|
|
@@ -1922,6 +2042,7 @@ var package_default = {
|
|
|
1922
2042
|
};
|
|
1923
2043
|
|
|
1924
2044
|
// src/vite/utils/package-resolution.ts
|
|
2045
|
+
var require2 = createRequire(import.meta.url);
|
|
1925
2046
|
var VIRTUAL_PACKAGE_NAME = "@rangojs/router";
|
|
1926
2047
|
function getPublishedPackageName() {
|
|
1927
2048
|
return package_default.name;
|
|
@@ -1962,6 +2083,20 @@ function getPackageAliases() {
|
|
|
1962
2083
|
}
|
|
1963
2084
|
return aliases;
|
|
1964
2085
|
}
|
|
2086
|
+
function getVendorAliases() {
|
|
2087
|
+
const specs = [
|
|
2088
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.edge",
|
|
2089
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
|
|
2090
|
+
];
|
|
2091
|
+
const aliases = {};
|
|
2092
|
+
for (const spec of specs) {
|
|
2093
|
+
try {
|
|
2094
|
+
aliases[spec] = require2.resolve(spec);
|
|
2095
|
+
} catch {
|
|
2096
|
+
}
|
|
2097
|
+
}
|
|
2098
|
+
return aliases;
|
|
2099
|
+
}
|
|
1965
2100
|
|
|
1966
2101
|
// src/build/route-types/param-extraction.ts
|
|
1967
2102
|
function extractParamsFromPattern(pattern) {
|
|
@@ -2095,31 +2230,7 @@ declare global {
|
|
|
2095
2230
|
}
|
|
2096
2231
|
|
|
2097
2232
|
// src/build/route-types/scan-filter.ts
|
|
2098
|
-
import { join, relative } from "node:path";
|
|
2099
2233
|
import picomatch from "picomatch";
|
|
2100
|
-
var DEFAULT_EXCLUDE_PATTERNS = [
|
|
2101
|
-
"**/__tests__/**",
|
|
2102
|
-
"**/__mocks__/**",
|
|
2103
|
-
"**/dist/**",
|
|
2104
|
-
"**/coverage/**",
|
|
2105
|
-
"**/*.test.{ts,tsx,js,jsx}",
|
|
2106
|
-
"**/*.spec.{ts,tsx,js,jsx}"
|
|
2107
|
-
];
|
|
2108
|
-
function createScanFilter(root, opts) {
|
|
2109
|
-
const { include, exclude } = opts;
|
|
2110
|
-
const hasInclude = include && include.length > 0;
|
|
2111
|
-
const hasCustomExclude = exclude !== void 0;
|
|
2112
|
-
if (!hasInclude && !hasCustomExclude) return void 0;
|
|
2113
|
-
const effectiveExclude = exclude ?? DEFAULT_EXCLUDE_PATTERNS;
|
|
2114
|
-
const includeMatcher = hasInclude ? picomatch(include) : null;
|
|
2115
|
-
const excludeMatcher = effectiveExclude.length > 0 ? picomatch(effectiveExclude) : null;
|
|
2116
|
-
return (absolutePath) => {
|
|
2117
|
-
const rel = relative(root, absolutePath);
|
|
2118
|
-
if (excludeMatcher && excludeMatcher(rel)) return false;
|
|
2119
|
-
if (includeMatcher) return includeMatcher(rel);
|
|
2120
|
-
return true;
|
|
2121
|
-
};
|
|
2122
|
-
}
|
|
2123
2234
|
|
|
2124
2235
|
// src/build/route-types/per-module-writer.ts
|
|
2125
2236
|
import ts4 from "typescript";
|
|
@@ -2341,7 +2452,7 @@ function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSche
|
|
|
2341
2452
|
}
|
|
2342
2453
|
return routeMap;
|
|
2343
2454
|
}
|
|
2344
|
-
function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut) {
|
|
2455
|
+
function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut, inlineBlock) {
|
|
2345
2456
|
visited = visited ?? /* @__PURE__ */ new Set();
|
|
2346
2457
|
const realPath = resolve2(filePath);
|
|
2347
2458
|
const key = variableName ? `${realPath}:${variableName}` : realPath;
|
|
@@ -2357,7 +2468,9 @@ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagno
|
|
|
2357
2468
|
return { routes: {}, searchSchemas: {} };
|
|
2358
2469
|
}
|
|
2359
2470
|
let block;
|
|
2360
|
-
if (
|
|
2471
|
+
if (inlineBlock) {
|
|
2472
|
+
block = inlineBlock;
|
|
2473
|
+
} else if (variableName) {
|
|
2361
2474
|
const extracted = extractUrlsBlockForVariable(source, variableName);
|
|
2362
2475
|
if (!extracted) return { routes: {}, searchSchemas: {} };
|
|
2363
2476
|
block = extracted;
|
|
@@ -2386,7 +2499,7 @@ import {
|
|
|
2386
2499
|
readdirSync
|
|
2387
2500
|
} from "node:fs";
|
|
2388
2501
|
import {
|
|
2389
|
-
join
|
|
2502
|
+
join,
|
|
2390
2503
|
dirname as dirname2,
|
|
2391
2504
|
resolve as resolve3,
|
|
2392
2505
|
sep,
|
|
@@ -2406,7 +2519,7 @@ function countPublicRouteEntries(source) {
|
|
|
2406
2519
|
}
|
|
2407
2520
|
var ROUTER_CALL_PATTERN = /\bcreateRouter\s*[<(]/;
|
|
2408
2521
|
function isRoutableSourceFile(name) {
|
|
2409
|
-
return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.");
|
|
2522
|
+
return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.") && !name.includes(".test.") && !name.includes(".spec.");
|
|
2410
2523
|
}
|
|
2411
2524
|
function findRouterFilesRecursive(dir, filter, results) {
|
|
2412
2525
|
let entries;
|
|
@@ -2421,9 +2534,10 @@ function findRouterFilesRecursive(dir, filter, results) {
|
|
|
2421
2534
|
const childDirs = [];
|
|
2422
2535
|
const routerFilesInDir = [];
|
|
2423
2536
|
for (const entry of entries) {
|
|
2424
|
-
const fullPath =
|
|
2537
|
+
const fullPath = join(dir, entry.name);
|
|
2425
2538
|
if (entry.isDirectory()) {
|
|
2426
|
-
if (entry.name === "node_modules" || entry.name.startsWith("."))
|
|
2539
|
+
if (entry.name === "node_modules" || entry.name === "dist" || entry.name === "coverage" || entry.name === "__tests__" || entry.name === "__mocks__" || entry.name.startsWith("."))
|
|
2540
|
+
continue;
|
|
2427
2541
|
childDirs.push(fullPath);
|
|
2428
2542
|
continue;
|
|
2429
2543
|
}
|
|
@@ -2475,7 +2589,7 @@ Router root: ${conflict.ancestor}
|
|
|
2475
2589
|
Nested router: ${conflict.nested}
|
|
2476
2590
|
Move the nested router into a sibling directory or configure it as a separate app root.`;
|
|
2477
2591
|
}
|
|
2478
|
-
function
|
|
2592
|
+
function extractUrlsFromRouter(code) {
|
|
2479
2593
|
const sourceFile = ts5.createSourceFile(
|
|
2480
2594
|
"router.tsx",
|
|
2481
2595
|
code,
|
|
@@ -2489,24 +2603,70 @@ function extractUrlsVariableFromRouter(code) {
|
|
|
2489
2603
|
const callee = node.expression;
|
|
2490
2604
|
return ts5.isIdentifier(callee) && callee.text === "createRouter";
|
|
2491
2605
|
}
|
|
2606
|
+
function isInlineBuilder(node) {
|
|
2607
|
+
return ts5.isArrowFunction(node) || ts5.isFunctionExpression(node);
|
|
2608
|
+
}
|
|
2609
|
+
function isRoutesOnCreateRouter(node) {
|
|
2610
|
+
if (!ts5.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "routes")
|
|
2611
|
+
return false;
|
|
2612
|
+
let inner = node.expression.expression;
|
|
2613
|
+
while (ts5.isCallExpression(inner) && ts5.isPropertyAccessExpression(inner.expression)) {
|
|
2614
|
+
inner = inner.expression.expression;
|
|
2615
|
+
}
|
|
2616
|
+
return isCreateRouterCall(inner);
|
|
2617
|
+
}
|
|
2492
2618
|
function visit(node) {
|
|
2493
2619
|
if (result) return;
|
|
2494
|
-
if (ts5.isCallExpression(node) &&
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
}
|
|
2499
|
-
|
|
2500
|
-
result = node.arguments[0].text;
|
|
2501
|
-
return;
|
|
2620
|
+
if (ts5.isCallExpression(node) && node.arguments.length >= 1 && isRoutesOnCreateRouter(node)) {
|
|
2621
|
+
const arg = node.arguments[0];
|
|
2622
|
+
if (ts5.isIdentifier(arg)) {
|
|
2623
|
+
result = { kind: "variable", name: arg.text };
|
|
2624
|
+
} else if (isInlineBuilder(arg)) {
|
|
2625
|
+
result = { kind: "inline", block: arg.getText(sourceFile) };
|
|
2502
2626
|
}
|
|
2627
|
+
return;
|
|
2503
2628
|
}
|
|
2504
2629
|
if (isCreateRouterCall(node)) {
|
|
2505
2630
|
const callExpr = node;
|
|
2506
|
-
for (const
|
|
2631
|
+
for (const callArg of callExpr.arguments) {
|
|
2632
|
+
if (ts5.isObjectLiteralExpression(callArg)) {
|
|
2633
|
+
for (const prop of callArg.properties) {
|
|
2634
|
+
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls") {
|
|
2635
|
+
if (ts5.isIdentifier(prop.initializer)) {
|
|
2636
|
+
result = { kind: "variable", name: prop.initializer.text };
|
|
2637
|
+
} else if (isInlineBuilder(prop.initializer)) {
|
|
2638
|
+
result = {
|
|
2639
|
+
kind: "inline",
|
|
2640
|
+
block: prop.initializer.getText(sourceFile)
|
|
2641
|
+
};
|
|
2642
|
+
}
|
|
2643
|
+
return;
|
|
2644
|
+
}
|
|
2645
|
+
}
|
|
2646
|
+
}
|
|
2647
|
+
}
|
|
2648
|
+
}
|
|
2649
|
+
ts5.forEachChild(node, visit);
|
|
2650
|
+
}
|
|
2651
|
+
visit(sourceFile);
|
|
2652
|
+
return result;
|
|
2653
|
+
}
|
|
2654
|
+
function extractBasenameFromRouter(code) {
|
|
2655
|
+
const sourceFile = ts5.createSourceFile(
|
|
2656
|
+
"router.tsx",
|
|
2657
|
+
code,
|
|
2658
|
+
ts5.ScriptTarget.Latest,
|
|
2659
|
+
true,
|
|
2660
|
+
ts5.ScriptKind.TSX
|
|
2661
|
+
);
|
|
2662
|
+
let result;
|
|
2663
|
+
function visit(node) {
|
|
2664
|
+
if (result !== void 0) return;
|
|
2665
|
+
if (ts5.isCallExpression(node) && ts5.isIdentifier(node.expression) && node.expression.text === "createRouter") {
|
|
2666
|
+
for (const arg of node.arguments) {
|
|
2507
2667
|
if (ts5.isObjectLiteralExpression(arg)) {
|
|
2508
2668
|
for (const prop of arg.properties) {
|
|
2509
|
-
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "
|
|
2669
|
+
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "basename" && ts5.isStringLiteral(prop.initializer)) {
|
|
2510
2670
|
result = prop.initializer.text;
|
|
2511
2671
|
return;
|
|
2512
2672
|
}
|
|
@@ -2519,6 +2679,19 @@ function extractUrlsVariableFromRouter(code) {
|
|
|
2519
2679
|
visit(sourceFile);
|
|
2520
2680
|
return result;
|
|
2521
2681
|
}
|
|
2682
|
+
function applyBasenameToRoutes(result, basename3) {
|
|
2683
|
+
const prefixed = {};
|
|
2684
|
+
for (const [name, pattern] of Object.entries(result.routes)) {
|
|
2685
|
+
if (pattern === "/") {
|
|
2686
|
+
prefixed[name] = basename3;
|
|
2687
|
+
} else if (basename3.endsWith("/") && pattern.startsWith("/")) {
|
|
2688
|
+
prefixed[name] = basename3 + pattern.slice(1);
|
|
2689
|
+
} else {
|
|
2690
|
+
prefixed[name] = basename3 + pattern;
|
|
2691
|
+
}
|
|
2692
|
+
}
|
|
2693
|
+
return { routes: prefixed, searchSchemas: result.searchSchemas };
|
|
2694
|
+
}
|
|
2522
2695
|
function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
2523
2696
|
let routerSource;
|
|
2524
2697
|
try {
|
|
@@ -2526,19 +2699,40 @@ function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
|
2526
2699
|
} catch {
|
|
2527
2700
|
return { routes: {}, searchSchemas: {} };
|
|
2528
2701
|
}
|
|
2529
|
-
const
|
|
2530
|
-
if (!
|
|
2702
|
+
const extraction = extractUrlsFromRouter(routerSource);
|
|
2703
|
+
if (!extraction) {
|
|
2531
2704
|
return { routes: {}, searchSchemas: {} };
|
|
2532
2705
|
}
|
|
2533
|
-
const
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2706
|
+
const rawBasename = extractBasenameFromRouter(routerSource);
|
|
2707
|
+
const basename3 = rawBasename ? ("/" + rawBasename.replace(/^\/+|\/+$/g, "")).replace(/^\/$/, "") : void 0;
|
|
2708
|
+
let result;
|
|
2709
|
+
if (extraction.kind === "inline") {
|
|
2710
|
+
result = buildCombinedRouteMapWithSearch(
|
|
2711
|
+
routerFilePath,
|
|
2712
|
+
void 0,
|
|
2713
|
+
void 0,
|
|
2714
|
+
void 0,
|
|
2715
|
+
extraction.block
|
|
2716
|
+
);
|
|
2717
|
+
} else {
|
|
2718
|
+
const imported = resolveImportedVariable(routerSource, extraction.name);
|
|
2719
|
+
if (imported) {
|
|
2720
|
+
const targetFile = resolveImportPath(imported.specifier, routerFilePath);
|
|
2721
|
+
if (!targetFile) {
|
|
2722
|
+
return { routes: {}, searchSchemas: {} };
|
|
2723
|
+
}
|
|
2724
|
+
result = buildCombinedRouteMapWithSearch(
|
|
2725
|
+
targetFile,
|
|
2726
|
+
imported.exportedName
|
|
2727
|
+
);
|
|
2728
|
+
} else {
|
|
2729
|
+
result = buildCombinedRouteMapWithSearch(routerFilePath, extraction.name);
|
|
2538
2730
|
}
|
|
2539
|
-
return buildCombinedRouteMapWithSearch(targetFile, imported.exportedName);
|
|
2540
2731
|
}
|
|
2541
|
-
|
|
2732
|
+
if (basename3) {
|
|
2733
|
+
result = applyBasenameToRoutes(result, basename3);
|
|
2734
|
+
}
|
|
2735
|
+
return result;
|
|
2542
2736
|
}
|
|
2543
2737
|
function findRouterFiles(root, filter) {
|
|
2544
2738
|
const result = [];
|
|
@@ -2547,7 +2741,7 @@ function findRouterFiles(root, filter) {
|
|
|
2547
2741
|
}
|
|
2548
2742
|
function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
|
|
2549
2743
|
try {
|
|
2550
|
-
const oldCombinedPath =
|
|
2744
|
+
const oldCombinedPath = join(root, "src", "named-routes.gen.ts");
|
|
2551
2745
|
if (existsSync3(oldCombinedPath)) {
|
|
2552
2746
|
unlinkSync(oldCombinedPath);
|
|
2553
2747
|
console.log(
|
|
@@ -2563,31 +2757,21 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
|
|
|
2563
2757
|
throw new Error(formatNestedRouterConflictError(nestedRouterConflict));
|
|
2564
2758
|
}
|
|
2565
2759
|
for (const routerFilePath of routerFilePaths) {
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
routerSource
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
|
|
2575
|
-
const imported = resolveImportedVariable(routerSource, urlsVarName);
|
|
2576
|
-
if (imported) {
|
|
2577
|
-
const targetFile = resolveImportPath(imported.specifier, routerFilePath);
|
|
2578
|
-
if (!targetFile) continue;
|
|
2579
|
-
result = buildCombinedRouteMapWithSearch(
|
|
2580
|
-
targetFile,
|
|
2581
|
-
imported.exportedName
|
|
2582
|
-
);
|
|
2583
|
-
} else {
|
|
2584
|
-
result = buildCombinedRouteMapWithSearch(routerFilePath, urlsVarName);
|
|
2760
|
+
const result = buildCombinedRouteMapForRouterFile(routerFilePath);
|
|
2761
|
+
if (Object.keys(result.routes).length === 0 && Object.keys(result.searchSchemas).length === 0) {
|
|
2762
|
+
let routerSource;
|
|
2763
|
+
try {
|
|
2764
|
+
routerSource = readFileSync2(routerFilePath, "utf-8");
|
|
2765
|
+
} catch {
|
|
2766
|
+
continue;
|
|
2767
|
+
}
|
|
2768
|
+
if (!extractUrlsFromRouter(routerSource)) continue;
|
|
2585
2769
|
}
|
|
2586
2770
|
const routerBasename = pathBasename(routerFilePath).replace(
|
|
2587
2771
|
/\.(tsx?|jsx?)$/,
|
|
2588
2772
|
""
|
|
2589
2773
|
);
|
|
2590
|
-
const outPath =
|
|
2774
|
+
const outPath = join(
|
|
2591
2775
|
dirname2(routerFilePath),
|
|
2592
2776
|
`${routerBasename}.named-routes.gen.ts`
|
|
2593
2777
|
);
|
|
@@ -2717,8 +2901,9 @@ function createVersionPlugin() {
|
|
|
2717
2901
|
let isDev = false;
|
|
2718
2902
|
let server = null;
|
|
2719
2903
|
const clientModuleSignatures = /* @__PURE__ */ new Map();
|
|
2904
|
+
let versionCounter = 0;
|
|
2720
2905
|
const bumpVersion = (reason) => {
|
|
2721
|
-
currentVersion = Date.now().toString(16);
|
|
2906
|
+
currentVersion = Date.now().toString(16) + String(++versionCounter);
|
|
2722
2907
|
console.log(`[rsc-router] ${reason}, version updated: ${currentVersion}`);
|
|
2723
2908
|
const rscEnv = server?.environments?.rsc;
|
|
2724
2909
|
const versionMod = rscEnv?.moduleGraph?.getModuleById(
|
|
@@ -2774,6 +2959,9 @@ function createVersionPlugin() {
|
|
|
2774
2959
|
if (!isDev) return;
|
|
2775
2960
|
const isRscModule = this.environment?.name === "rsc";
|
|
2776
2961
|
if (!isRscModule) return;
|
|
2962
|
+
if (ctx.modules.length === 1 && ctx.modules[0].id === "\0" + VIRTUAL_IDS.version) {
|
|
2963
|
+
return;
|
|
2964
|
+
}
|
|
2777
2965
|
if (isCodeModule(ctx.file)) {
|
|
2778
2966
|
const filePath = normalizeModuleId(ctx.file);
|
|
2779
2967
|
const previousSignature = clientModuleSignatures.get(filePath);
|
|
@@ -2803,6 +2991,68 @@ function createVersionPlugin() {
|
|
|
2803
2991
|
|
|
2804
2992
|
// src/vite/utils/shared-utils.ts
|
|
2805
2993
|
import * as Vite from "vite";
|
|
2994
|
+
|
|
2995
|
+
// src/vite/plugins/performance-tracks.ts
|
|
2996
|
+
import { readFile } from "node:fs/promises";
|
|
2997
|
+
var RSDW_PATCH_RE = /((?:var|let|const)\s+\w+\s*=\s*root\._children\s*,\s*(\w+)\s*=\s*root\._debugInfo\s*[;,])/;
|
|
2998
|
+
function buildPatchReplacement(match, debugInfoVar) {
|
|
2999
|
+
return `${match}
|
|
3000
|
+
if (${debugInfoVar} && 0 === ${debugInfoVar}.length && "fulfilled" === root.status) {
|
|
3001
|
+
var _resolved = "function" === typeof resolveLazy ? resolveLazy(root.value) : root.value;
|
|
3002
|
+
if ("object" === typeof _resolved && null !== _resolved && isArrayImpl(_resolved._debugInfo)) {
|
|
3003
|
+
${debugInfoVar} = _resolved._debugInfo;
|
|
3004
|
+
}
|
|
3005
|
+
}`;
|
|
3006
|
+
}
|
|
3007
|
+
function patchRsdwClientDebugInfoRecovery(code) {
|
|
3008
|
+
const match = code.match(RSDW_PATCH_RE);
|
|
3009
|
+
if (!match) {
|
|
3010
|
+
return { code, debugInfoVar: null };
|
|
3011
|
+
}
|
|
3012
|
+
return {
|
|
3013
|
+
code: code.replace(match[1], buildPatchReplacement(match[1], match[2])),
|
|
3014
|
+
debugInfoVar: match[2]
|
|
3015
|
+
};
|
|
3016
|
+
}
|
|
3017
|
+
function performanceTracksOptimizeDepsPlugin() {
|
|
3018
|
+
return {
|
|
3019
|
+
name: "@rangojs/router:performance-tracks-optimize-deps",
|
|
3020
|
+
setup(build) {
|
|
3021
|
+
build.onLoad(
|
|
3022
|
+
{
|
|
3023
|
+
filter: /react-server-dom-webpack-client\.browser\.(development|production)\.js$/
|
|
3024
|
+
},
|
|
3025
|
+
async (args) => {
|
|
3026
|
+
const code = await readFile(args.path, "utf8");
|
|
3027
|
+
const patched = patchRsdwClientDebugInfoRecovery(code);
|
|
3028
|
+
return {
|
|
3029
|
+
contents: patched.code,
|
|
3030
|
+
loader: "js"
|
|
3031
|
+
};
|
|
3032
|
+
}
|
|
3033
|
+
);
|
|
3034
|
+
}
|
|
3035
|
+
};
|
|
3036
|
+
}
|
|
3037
|
+
function performanceTracksPlugin() {
|
|
3038
|
+
return {
|
|
3039
|
+
name: "@rangojs/router:performance-tracks",
|
|
3040
|
+
transform(code, id) {
|
|
3041
|
+
if (!id.includes("react-server-dom") || !id.includes("client")) return;
|
|
3042
|
+
const patched = patchRsdwClientDebugInfoRecovery(code);
|
|
3043
|
+
if (!patched.debugInfoVar) return;
|
|
3044
|
+
if (process.env.INTERNAL_RANGO_DEBUG)
|
|
3045
|
+
console.log(
|
|
3046
|
+
"[perf-tracks] patched RSDW client (var:",
|
|
3047
|
+
patched.debugInfoVar,
|
|
3048
|
+
")"
|
|
3049
|
+
);
|
|
3050
|
+
return patched.code;
|
|
3051
|
+
}
|
|
3052
|
+
};
|
|
3053
|
+
}
|
|
3054
|
+
|
|
3055
|
+
// src/vite/utils/shared-utils.ts
|
|
2806
3056
|
var versionEsbuildPlugin = {
|
|
2807
3057
|
name: "@rangojs/router-version",
|
|
2808
3058
|
setup(build) {
|
|
@@ -2820,7 +3070,7 @@ var versionEsbuildPlugin = {
|
|
|
2820
3070
|
}
|
|
2821
3071
|
};
|
|
2822
3072
|
var sharedEsbuildOptions = {
|
|
2823
|
-
plugins: [versionEsbuildPlugin]
|
|
3073
|
+
plugins: [versionEsbuildPlugin, performanceTracksOptimizeDepsPlugin()]
|
|
2824
3074
|
};
|
|
2825
3075
|
function createVirtualEntriesPlugin(entries, routerPathRef) {
|
|
2826
3076
|
const virtualModules = {};
|
|
@@ -2903,11 +3153,11 @@ ${dim} \u2571${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2
|
|
|
2903
3153
|
${dim} ${reset}${bold}\u2551 \u2551${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2727. \u2571${reset}
|
|
2904
3154
|
${dim} ${reset}${bold}\u2554\u2557 \u2551 \u2551 \u2551 \u2551${reset}${dim} * \u2571${reset}
|
|
2905
3155
|
${dim} ${reset}${bold}\u2551\u2551 \u2551 \u2551 \u2551 \u2551 \u2566\u2550\u2557\u2554\u2550\u2557\u2554\u2557\u2554\u2554\u2550\u2557\u2554\u2550\u2557${reset}${dim} \u2727 \u2726${reset}
|
|
2906
|
-
${dim}
|
|
3156
|
+
${dim} ${reset}${bold}\u2551\u2551 \u2551 \u2560\u2550\u255D \u2551 \u2560\u2566\u255D\u2560\u2550\u2563\u2551\u2551\u2551\u2551 \u2566\u2551 \u2551${reset}${dim} * \u2727${reset}
|
|
2907
3157
|
${dim} ${reset}${bold}\u2551\u255A\u2550\u255D \u2554\u2550\u2550\u2550\u255D \u2569\u255A\u2550\u2569 \u2569\u255D\u255A\u255D\u255A\u2550\u255D\u255A\u2550\u255D${reset}${dim} \u2726 . *${reset}
|
|
2908
3158
|
${dim} ${reset}${bold}\u255A\u2550\u2550\u2557 \u2551${reset}${dim} * RSC Wrangler \u2727 \u2726${reset}
|
|
2909
|
-
${dim} * ${reset}${bold}\u2551 \
|
|
2910
|
-
${bold}\u2550\u2550\u2550\
|
|
3159
|
+
${dim} * ${reset}${bold}\u2551 \u2551${reset}${dim} * \u2727. \u2571${reset}
|
|
3160
|
+
${dim} ${reset}${bold}\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550${reset}${dim} \u2726 *${reset}
|
|
2911
3161
|
|
|
2912
3162
|
v${version} \xB7 ${preset} \xB7 ${mode}
|
|
2913
3163
|
`;
|
|
@@ -3026,6 +3276,8 @@ function createCjsToEsmPlugin() {
|
|
|
3026
3276
|
import { createServer as createViteServer } from "vite";
|
|
3027
3277
|
import { resolve as resolve8 } from "node:path";
|
|
3028
3278
|
import { readFileSync as readFileSync6 } from "node:fs";
|
|
3279
|
+
import { createRequire as createRequire2, register } from "node:module";
|
|
3280
|
+
import { pathToFileURL } from "node:url";
|
|
3029
3281
|
|
|
3030
3282
|
// src/vite/plugins/virtual-stub-plugin.ts
|
|
3031
3283
|
function createVirtualStubPlugin() {
|
|
@@ -3051,8 +3303,115 @@ function createVirtualStubPlugin() {
|
|
|
3051
3303
|
};
|
|
3052
3304
|
}
|
|
3053
3305
|
|
|
3306
|
+
// src/vite/plugins/cloudflare-protocol-stub.ts
|
|
3307
|
+
var VIRTUAL_PREFIX = "virtual:rango-cloudflare-stub-";
|
|
3308
|
+
var NULL_PREFIX = "\0" + VIRTUAL_PREFIX;
|
|
3309
|
+
var CF_PREFIX = "cloudflare:";
|
|
3310
|
+
var BUILD_ENV_GLOBAL_KEY = "__rango_build_env__";
|
|
3311
|
+
var SOURCE_EXT_RE = /\.[mc]?[jt]sx?$/;
|
|
3312
|
+
var IMPORT_NODE_TYPES = /* @__PURE__ */ new Set([
|
|
3313
|
+
"ImportDeclaration",
|
|
3314
|
+
"ImportExpression",
|
|
3315
|
+
"ExportNamedDeclaration",
|
|
3316
|
+
"ExportAllDeclaration"
|
|
3317
|
+
]);
|
|
3318
|
+
var STUBS = {
|
|
3319
|
+
"cloudflare:workers": `
|
|
3320
|
+
export class DurableObject { constructor(_ctx, _env) {} }
|
|
3321
|
+
export class WorkerEntrypoint { constructor(_ctx, _env) {} }
|
|
3322
|
+
export class WorkflowEntrypoint { constructor(_ctx, _env) {} }
|
|
3323
|
+
export class RpcTarget {}
|
|
3324
|
+
export const env = globalThis[${JSON.stringify(BUILD_ENV_GLOBAL_KEY)}] ?? {};
|
|
3325
|
+
export default {};
|
|
3326
|
+
`,
|
|
3327
|
+
"cloudflare:email": `
|
|
3328
|
+
export class EmailMessage { constructor(_from, _to, _raw) {} }
|
|
3329
|
+
export default {};
|
|
3330
|
+
`,
|
|
3331
|
+
"cloudflare:sockets": `
|
|
3332
|
+
export function connect() { return {}; }
|
|
3333
|
+
export default {};
|
|
3334
|
+
`,
|
|
3335
|
+
"cloudflare:workflows": `
|
|
3336
|
+
export class NonRetryableError extends Error {
|
|
3337
|
+
constructor(message, name) { super(message); this.name = name ?? "NonRetryableError"; }
|
|
3338
|
+
}
|
|
3339
|
+
export default {};
|
|
3340
|
+
`
|
|
3341
|
+
};
|
|
3342
|
+
var FALLBACK_STUB = `export default {};
|
|
3343
|
+
`;
|
|
3344
|
+
function createCloudflareProtocolStubPlugin() {
|
|
3345
|
+
return {
|
|
3346
|
+
name: "@rangojs/router:cloudflare-protocol-stub",
|
|
3347
|
+
transform(code, id) {
|
|
3348
|
+
const cleanId = id.split("?")[0] ?? id;
|
|
3349
|
+
if (!SOURCE_EXT_RE.test(cleanId)) return null;
|
|
3350
|
+
if (!code.includes(CF_PREFIX)) return null;
|
|
3351
|
+
let ast;
|
|
3352
|
+
try {
|
|
3353
|
+
ast = this.parse(code);
|
|
3354
|
+
} catch {
|
|
3355
|
+
return null;
|
|
3356
|
+
}
|
|
3357
|
+
const hits = [];
|
|
3358
|
+
walk(ast, (node) => {
|
|
3359
|
+
if (!IMPORT_NODE_TYPES.has(node.type)) return;
|
|
3360
|
+
const source = node.source;
|
|
3361
|
+
if (!source || source.type !== "Literal") return;
|
|
3362
|
+
if (typeof source.value !== "string") return;
|
|
3363
|
+
if (!source.value.startsWith(CF_PREFIX)) return;
|
|
3364
|
+
if (typeof source.start !== "number" || typeof source.end !== "number")
|
|
3365
|
+
return;
|
|
3366
|
+
hits.push({
|
|
3367
|
+
start: source.start,
|
|
3368
|
+
end: source.end,
|
|
3369
|
+
value: source.value
|
|
3370
|
+
});
|
|
3371
|
+
});
|
|
3372
|
+
if (hits.length === 0) return null;
|
|
3373
|
+
hits.sort((a, b) => b.start - a.start);
|
|
3374
|
+
let out = code;
|
|
3375
|
+
for (const hit of hits) {
|
|
3376
|
+
const submodule = hit.value.slice(CF_PREFIX.length);
|
|
3377
|
+
const quote = code[hit.start] === "'" ? "'" : '"';
|
|
3378
|
+
out = out.slice(0, hit.start) + quote + VIRTUAL_PREFIX + submodule + quote + out.slice(hit.end);
|
|
3379
|
+
}
|
|
3380
|
+
return { code: out, map: null };
|
|
3381
|
+
},
|
|
3382
|
+
resolveId(id) {
|
|
3383
|
+
if (id.startsWith(VIRTUAL_PREFIX)) {
|
|
3384
|
+
return "\0" + id;
|
|
3385
|
+
}
|
|
3386
|
+
return null;
|
|
3387
|
+
},
|
|
3388
|
+
load(id) {
|
|
3389
|
+
if (!id.startsWith(NULL_PREFIX)) return null;
|
|
3390
|
+
const submodule = id.slice(NULL_PREFIX.length);
|
|
3391
|
+
const specifier = CF_PREFIX + submodule;
|
|
3392
|
+
return STUBS[specifier] ?? FALLBACK_STUB;
|
|
3393
|
+
}
|
|
3394
|
+
};
|
|
3395
|
+
}
|
|
3396
|
+
function walk(node, visit) {
|
|
3397
|
+
if (!node || typeof node !== "object") return;
|
|
3398
|
+
if (Array.isArray(node)) {
|
|
3399
|
+
for (const child of node) walk(child, visit);
|
|
3400
|
+
return;
|
|
3401
|
+
}
|
|
3402
|
+
const n = node;
|
|
3403
|
+
if (typeof n.type !== "string") return;
|
|
3404
|
+
visit(n);
|
|
3405
|
+
for (const key in n) {
|
|
3406
|
+
if (key === "loc" || key === "start" || key === "end" || key === "range") {
|
|
3407
|
+
continue;
|
|
3408
|
+
}
|
|
3409
|
+
walk(n[key], visit);
|
|
3410
|
+
}
|
|
3411
|
+
}
|
|
3412
|
+
|
|
3054
3413
|
// src/vite/plugins/client-ref-hashing.ts
|
|
3055
|
-
import { relative
|
|
3414
|
+
import { relative } from "node:path";
|
|
3056
3415
|
import { createHash as createHash2 } from "node:crypto";
|
|
3057
3416
|
var CLIENT_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-package-proxy/";
|
|
3058
3417
|
var CLIENT_IN_SERVER_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-in-server-package-proxy/";
|
|
@@ -3065,10 +3424,10 @@ function computeProductionHash(projectRoot, refKey) {
|
|
|
3065
3424
|
const absPath = decodeURIComponent(
|
|
3066
3425
|
refKey.slice(CLIENT_IN_SERVER_PKG_PROXY_PREFIX.length)
|
|
3067
3426
|
);
|
|
3068
|
-
toHash =
|
|
3427
|
+
toHash = relative(projectRoot, absPath).replaceAll("\\", "/");
|
|
3069
3428
|
} else if (refKey.startsWith(FS_PREFIX)) {
|
|
3070
3429
|
const absPath = refKey.slice(FS_PREFIX.length - 1);
|
|
3071
|
-
toHash =
|
|
3430
|
+
toHash = relative(projectRoot, absPath).replaceAll("\\", "/");
|
|
3072
3431
|
} else if (refKey.startsWith("/")) {
|
|
3073
3432
|
toHash = refKey.slice(1);
|
|
3074
3433
|
} else {
|
|
@@ -3209,8 +3568,8 @@ function createDiscoveryState(entryPath, opts) {
|
|
|
3209
3568
|
perRouterManifestDataMap: /* @__PURE__ */ new Map(),
|
|
3210
3569
|
prerenderManifestEntries: null,
|
|
3211
3570
|
staticManifestEntries: null,
|
|
3212
|
-
|
|
3213
|
-
|
|
3571
|
+
handlerChunkInfoMap: /* @__PURE__ */ new Map(),
|
|
3572
|
+
staticHandlerChunkInfoMap: /* @__PURE__ */ new Map(),
|
|
3214
3573
|
rscEntryFileName: null,
|
|
3215
3574
|
resolvedPrerenderModules: void 0,
|
|
3216
3575
|
resolvedStaticModules: void 0,
|
|
@@ -3293,8 +3652,17 @@ function jsonParseExpression(value) {
|
|
|
3293
3652
|
}
|
|
3294
3653
|
|
|
3295
3654
|
// src/context-var.ts
|
|
3655
|
+
var NON_CACHEABLE_KEYS = /* @__PURE__ */ Symbol.for(
|
|
3656
|
+
"rango:non-cacheable-keys"
|
|
3657
|
+
);
|
|
3658
|
+
function getNonCacheableKeys(variables) {
|
|
3659
|
+
if (!variables[NON_CACHEABLE_KEYS]) {
|
|
3660
|
+
variables[NON_CACHEABLE_KEYS] = /* @__PURE__ */ new Set();
|
|
3661
|
+
}
|
|
3662
|
+
return variables[NON_CACHEABLE_KEYS];
|
|
3663
|
+
}
|
|
3296
3664
|
var FORBIDDEN_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
|
|
3297
|
-
function contextSet(variables, keyOrVar, value) {
|
|
3665
|
+
function contextSet(variables, keyOrVar, value, options) {
|
|
3298
3666
|
if (typeof keyOrVar === "string") {
|
|
3299
3667
|
if (FORBIDDEN_KEYS.has(keyOrVar)) {
|
|
3300
3668
|
throw new Error(
|
|
@@ -3302,8 +3670,14 @@ function contextSet(variables, keyOrVar, value) {
|
|
|
3302
3670
|
);
|
|
3303
3671
|
}
|
|
3304
3672
|
variables[keyOrVar] = value;
|
|
3673
|
+
if (options?.cache === false) {
|
|
3674
|
+
getNonCacheableKeys(variables).add(keyOrVar);
|
|
3675
|
+
}
|
|
3305
3676
|
} else {
|
|
3306
3677
|
variables[keyOrVar.key] = value;
|
|
3678
|
+
if (options?.cache === false) {
|
|
3679
|
+
getNonCacheableKeys(variables).add(keyOrVar.key);
|
|
3680
|
+
}
|
|
3307
3681
|
}
|
|
3308
3682
|
}
|
|
3309
3683
|
|
|
@@ -3326,13 +3700,31 @@ function encodePathParam(value) {
|
|
|
3326
3700
|
}
|
|
3327
3701
|
function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
|
|
3328
3702
|
let result = pattern;
|
|
3703
|
+
let hadOmittedOptional = false;
|
|
3329
3704
|
for (const [key, value] of Object.entries(params)) {
|
|
3330
3705
|
const escaped = escapeRegExp2(key);
|
|
3331
|
-
|
|
3332
|
-
|
|
3333
|
-
|
|
3334
|
-
|
|
3335
|
-
|
|
3706
|
+
if (value === "") {
|
|
3707
|
+
result = result.replace(
|
|
3708
|
+
new RegExp(`:${escaped}(\\([^)]*\\))?(?!\\?)`),
|
|
3709
|
+
""
|
|
3710
|
+
);
|
|
3711
|
+
result = result.replace(`*${key}`, "");
|
|
3712
|
+
} else {
|
|
3713
|
+
result = result.replace(
|
|
3714
|
+
new RegExp(`:${escaped}(\\([^)]*\\))?\\??`),
|
|
3715
|
+
encode(value)
|
|
3716
|
+
);
|
|
3717
|
+
result = result.replace(`*${key}`, encode(value));
|
|
3718
|
+
}
|
|
3719
|
+
}
|
|
3720
|
+
result = result.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?\?/g, () => {
|
|
3721
|
+
hadOmittedOptional = true;
|
|
3722
|
+
return "";
|
|
3723
|
+
});
|
|
3724
|
+
if (hadOmittedOptional) {
|
|
3725
|
+
const hadTrailingSlash = pattern.length > 1 && pattern.endsWith("/");
|
|
3726
|
+
result = result.replace(/\/\/+/g, "/").replace(/\/+$/, "") || "/";
|
|
3727
|
+
if (hadTrailingSlash && !result.endsWith("/")) result += "/";
|
|
3336
3728
|
}
|
|
3337
3729
|
return result;
|
|
3338
3730
|
}
|
|
@@ -3442,84 +3834,126 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3442
3834
|
if (!params) return pattern;
|
|
3443
3835
|
return substituteRouteParams(pattern, params);
|
|
3444
3836
|
};
|
|
3837
|
+
let resolvedRoutes = 0;
|
|
3838
|
+
let totalDynamic = 0;
|
|
3445
3839
|
for (const { manifest } of allManifests) {
|
|
3446
3840
|
if (!manifest.prerenderRoutes) continue;
|
|
3447
|
-
const defs = manifest._prerenderDefs || {};
|
|
3448
3841
|
for (const routeName of manifest.prerenderRoutes) {
|
|
3449
3842
|
const pattern = manifest.routeManifest[routeName];
|
|
3450
|
-
if (
|
|
3451
|
-
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3458
|
-
|
|
3459
|
-
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3466
|
-
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
|
|
3477
|
-
|
|
3478
|
-
|
|
3479
|
-
|
|
3480
|
-
|
|
3481
|
-
|
|
3482
|
-
|
|
3483
|
-
|
|
3484
|
-
|
|
3843
|
+
if (pattern && (pattern.includes(":") || pattern.includes("*"))) {
|
|
3844
|
+
totalDynamic++;
|
|
3845
|
+
}
|
|
3846
|
+
}
|
|
3847
|
+
}
|
|
3848
|
+
const paramsStart = performance.now();
|
|
3849
|
+
const progressInterval = totalDynamic > 0 ? setInterval(() => {
|
|
3850
|
+
const elapsed = ((performance.now() - paramsStart) / 1e3).toFixed(1);
|
|
3851
|
+
console.log(
|
|
3852
|
+
`[rsc-router] Resolving prerender params... ${resolvedRoutes}/${totalDynamic} routes (${elapsed}s)`
|
|
3853
|
+
);
|
|
3854
|
+
}, 5e3) : void 0;
|
|
3855
|
+
try {
|
|
3856
|
+
for (const { manifest } of allManifests) {
|
|
3857
|
+
if (!manifest.prerenderRoutes) continue;
|
|
3858
|
+
const defs = manifest._prerenderDefs || {};
|
|
3859
|
+
const passthroughSet = new Set(manifest.passthroughRoutes || []);
|
|
3860
|
+
for (const routeName of manifest.prerenderRoutes) {
|
|
3861
|
+
const pattern = manifest.routeManifest[routeName];
|
|
3862
|
+
if (!pattern) continue;
|
|
3863
|
+
const def = defs[routeName];
|
|
3864
|
+
const isPassthroughRoute = passthroughSet.has(routeName);
|
|
3865
|
+
const hasDynamic = pattern.includes(":") || pattern.includes("*");
|
|
3866
|
+
if (!hasDynamic) {
|
|
3867
|
+
entries.push({
|
|
3868
|
+
urlPath: pattern.replace(/\/$/, "") || "/",
|
|
3869
|
+
routeName,
|
|
3870
|
+
concurrency: 1,
|
|
3871
|
+
isPassthroughRoute
|
|
3872
|
+
});
|
|
3873
|
+
} else {
|
|
3874
|
+
if (def?.getParams) {
|
|
3875
|
+
try {
|
|
3876
|
+
const buildVars = {};
|
|
3877
|
+
const buildEnv = state.resolvedBuildEnv;
|
|
3878
|
+
const getParamsCtx = {
|
|
3879
|
+
build: true,
|
|
3880
|
+
dev: !state.isBuildMode,
|
|
3881
|
+
set: ((keyOrVar, value) => {
|
|
3882
|
+
contextSet(buildVars, keyOrVar, value);
|
|
3883
|
+
}),
|
|
3884
|
+
reverse: getParamsReverse,
|
|
3885
|
+
get env() {
|
|
3886
|
+
if (buildEnv !== void 0) return buildEnv;
|
|
3887
|
+
throw new Error(
|
|
3888
|
+
"[rsc-router] ctx.env is not available during build-time getParams(). Configure buildEnv in your rango() plugin options to enable build-time env access."
|
|
3889
|
+
);
|
|
3485
3890
|
}
|
|
3891
|
+
};
|
|
3892
|
+
const paramsList = await def.getParams(getParamsCtx);
|
|
3893
|
+
const concurrency = def.options?.concurrency ?? 1;
|
|
3894
|
+
const hasBuildVars = Object.keys(buildVars).length > 0 || Object.getOwnPropertySymbols(buildVars).length > 0;
|
|
3895
|
+
for (const params of paramsList) {
|
|
3896
|
+
let url = substituteRouteParams(
|
|
3897
|
+
pattern,
|
|
3898
|
+
params,
|
|
3899
|
+
encodePathParam
|
|
3900
|
+
);
|
|
3901
|
+
if (url.includes("*")) {
|
|
3902
|
+
const wildcardValue = params["*"] ?? params.splat;
|
|
3903
|
+
if (wildcardValue !== void 0) {
|
|
3904
|
+
url = url.replace(
|
|
3905
|
+
/\*[^/]*$/,
|
|
3906
|
+
encodePathParam(wildcardValue)
|
|
3907
|
+
);
|
|
3908
|
+
}
|
|
3909
|
+
}
|
|
3910
|
+
entries.push({
|
|
3911
|
+
urlPath: url.replace(/\/$/, "") || "/",
|
|
3912
|
+
routeName,
|
|
3913
|
+
concurrency,
|
|
3914
|
+
...hasBuildVars ? { buildVars } : {},
|
|
3915
|
+
isPassthroughRoute
|
|
3916
|
+
});
|
|
3486
3917
|
}
|
|
3487
|
-
|
|
3488
|
-
|
|
3489
|
-
|
|
3490
|
-
|
|
3491
|
-
|
|
3492
|
-
|
|
3493
|
-
|
|
3494
|
-
|
|
3495
|
-
|
|
3496
|
-
|
|
3497
|
-
|
|
3498
|
-
|
|
3499
|
-
|
|
3500
|
-
|
|
3501
|
-
|
|
3502
|
-
|
|
3503
|
-
|
|
3504
|
-
|
|
3505
|
-
|
|
3506
|
-
true
|
|
3918
|
+
resolvedRoutes++;
|
|
3919
|
+
} catch (err) {
|
|
3920
|
+
resolvedRoutes++;
|
|
3921
|
+
if (err.name === "Skip") {
|
|
3922
|
+
console.log(
|
|
3923
|
+
`[rsc-router] SKIP route "${routeName}" - ${err.message}`
|
|
3924
|
+
);
|
|
3925
|
+
notifyOnError(
|
|
3926
|
+
registry,
|
|
3927
|
+
err,
|
|
3928
|
+
"prerender",
|
|
3929
|
+
routeName,
|
|
3930
|
+
void 0,
|
|
3931
|
+
true
|
|
3932
|
+
);
|
|
3933
|
+
continue;
|
|
3934
|
+
}
|
|
3935
|
+
console.error(
|
|
3936
|
+
`[rsc-router] Failed to get params for prerender route "${routeName}": ${err.message}`
|
|
3507
3937
|
);
|
|
3508
|
-
|
|
3938
|
+
notifyOnError(registry, err, "prerender", routeName);
|
|
3939
|
+
throw err;
|
|
3509
3940
|
}
|
|
3510
|
-
|
|
3511
|
-
|
|
3941
|
+
} else {
|
|
3942
|
+
console.warn(
|
|
3943
|
+
`[rsc-router] Dynamic prerender route "${routeName}" has no getParams(), skipping`
|
|
3512
3944
|
);
|
|
3513
|
-
notifyOnError(registry, err, "prerender", routeName);
|
|
3514
|
-
throw err;
|
|
3515
3945
|
}
|
|
3516
|
-
} else {
|
|
3517
|
-
console.warn(
|
|
3518
|
-
`[rsc-router] Dynamic prerender route "${routeName}" has no getParams(), skipping`
|
|
3519
|
-
);
|
|
3520
3946
|
}
|
|
3521
3947
|
}
|
|
3522
3948
|
}
|
|
3949
|
+
} finally {
|
|
3950
|
+
if (progressInterval) {
|
|
3951
|
+
clearInterval(progressInterval);
|
|
3952
|
+
const elapsed = ((performance.now() - paramsStart) / 1e3).toFixed(1);
|
|
3953
|
+
console.log(
|
|
3954
|
+
`[rsc-router] Resolved prerender params: ${resolvedRoutes}/${totalDynamic} routes (${elapsed}s)`
|
|
3955
|
+
);
|
|
3956
|
+
}
|
|
3523
3957
|
}
|
|
3524
3958
|
if (entries.length === 0) return;
|
|
3525
3959
|
const maxConcurrency = Math.max(...entries.map((e) => e.concurrency));
|
|
@@ -3546,7 +3980,8 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3546
3980
|
entry.urlPath,
|
|
3547
3981
|
{},
|
|
3548
3982
|
entry.buildVars,
|
|
3549
|
-
entry.isPassthroughRoute
|
|
3983
|
+
entry.isPassthroughRoute,
|
|
3984
|
+
state.resolvedBuildEnv
|
|
3550
3985
|
);
|
|
3551
3986
|
if (!result) continue;
|
|
3552
3987
|
if (result.passthrough) {
|
|
@@ -3670,7 +4105,9 @@ async function renderStaticHandlers(state, rscEnv, registry) {
|
|
|
3670
4105
|
const result = await routerInstance.renderStaticSegment(
|
|
3671
4106
|
def.handler,
|
|
3672
4107
|
def.$$id,
|
|
3673
|
-
def.$$routePrefix
|
|
4108
|
+
def.$$routePrefix,
|
|
4109
|
+
state.resolvedBuildEnv,
|
|
4110
|
+
!state.isBuildMode
|
|
3674
4111
|
);
|
|
3675
4112
|
if (result) {
|
|
3676
4113
|
const hasHandles = Object.keys(result.handles).length > 0;
|
|
@@ -3795,7 +4232,11 @@ async function discoverRouters(state, rscEnv) {
|
|
|
3795
4232
|
if (!router.urlpatterns || !generateManifestFull) {
|
|
3796
4233
|
continue;
|
|
3797
4234
|
}
|
|
3798
|
-
const manifest = generateManifestFull(
|
|
4235
|
+
const manifest = generateManifestFull(
|
|
4236
|
+
router.urlpatterns,
|
|
4237
|
+
routerMountIndex,
|
|
4238
|
+
router.__basename ? { urlPrefix: router.__basename } : void 0
|
|
4239
|
+
);
|
|
3799
4240
|
routerMountIndex++;
|
|
3800
4241
|
allManifests.push({ id, manifest });
|
|
3801
4242
|
const routeCount = Object.keys(manifest.routeManifest).length;
|
|
@@ -3937,7 +4378,7 @@ async function discoverRouters(state, rscEnv) {
|
|
|
3937
4378
|
}
|
|
3938
4379
|
|
|
3939
4380
|
// src/vite/discovery/route-types-writer.ts
|
|
3940
|
-
import { dirname as dirname3, basename, join as
|
|
4381
|
+
import { dirname as dirname3, basename, join as join2, resolve as resolve6 } from "node:path";
|
|
3941
4382
|
import { readFileSync as readFileSync4, writeFileSync as writeFileSync3, existsSync as existsSync5, unlinkSync as unlinkSync2 } from "node:fs";
|
|
3942
4383
|
function filterUserNamedRoutes(manifest) {
|
|
3943
4384
|
const filtered = {};
|
|
@@ -3958,7 +4399,7 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
|
|
|
3958
4399
|
/\.(tsx?|jsx?)$/,
|
|
3959
4400
|
""
|
|
3960
4401
|
);
|
|
3961
|
-
const outPath =
|
|
4402
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
3962
4403
|
try {
|
|
3963
4404
|
preContent.set(outPath, readFileSync4(outPath, "utf-8"));
|
|
3964
4405
|
} catch {
|
|
@@ -3971,7 +4412,7 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
|
|
|
3971
4412
|
/\.(tsx?|jsx?)$/,
|
|
3972
4413
|
""
|
|
3973
4414
|
);
|
|
3974
|
-
const outPath =
|
|
4415
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
3975
4416
|
if (!existsSync5(outPath)) continue;
|
|
3976
4417
|
try {
|
|
3977
4418
|
const content = readFileSync4(outPath, "utf-8");
|
|
@@ -3988,7 +4429,7 @@ function writeRouteTypesFiles(state) {
|
|
|
3988
4429
|
const entryDir = dirname3(
|
|
3989
4430
|
resolve6(state.projectRoot, state.resolvedEntryPath)
|
|
3990
4431
|
);
|
|
3991
|
-
const oldCombinedPath =
|
|
4432
|
+
const oldCombinedPath = join2(entryDir, "named-routes.gen.ts");
|
|
3992
4433
|
if (existsSync5(oldCombinedPath)) {
|
|
3993
4434
|
unlinkSync2(oldCombinedPath);
|
|
3994
4435
|
console.log(
|
|
@@ -4013,7 +4454,7 @@ Set an explicit \`id\` on createRouter() or check the call site.`
|
|
|
4013
4454
|
}
|
|
4014
4455
|
const routerDir = dirname3(sourceFile);
|
|
4015
4456
|
const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
|
|
4016
|
-
const outPath =
|
|
4457
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
4017
4458
|
const userRoutes = filterUserNamedRoutes(routeManifest);
|
|
4018
4459
|
let effectiveSearchSchemas = routeSearchSchemas;
|
|
4019
4460
|
if ((!effectiveSearchSchemas || Object.keys(effectiveSearchSchemas).length === 0) && sourceFile) {
|
|
@@ -4078,7 +4519,7 @@ function supplementGenFilesWithRuntimeRoutes(state) {
|
|
|
4078
4519
|
}
|
|
4079
4520
|
const routerDir = dirname3(sourceFile);
|
|
4080
4521
|
const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
|
|
4081
|
-
const outPath =
|
|
4522
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
4082
4523
|
const source = generateRouteTypesSource(
|
|
4083
4524
|
mergedRoutes,
|
|
4084
4525
|
Object.keys(mergedSearchSchemas).length > 0 ? mergedSearchSchemas : void 0
|
|
@@ -4092,7 +4533,7 @@ function supplementGenFilesWithRuntimeRoutes(state) {
|
|
|
4092
4533
|
}
|
|
4093
4534
|
|
|
4094
4535
|
// src/vite/discovery/virtual-module-codegen.ts
|
|
4095
|
-
import { dirname as dirname4, basename as basename2, join as
|
|
4536
|
+
import { dirname as dirname4, basename as basename2, join as join3 } from "node:path";
|
|
4096
4537
|
function generateRoutesManifestModule(state) {
|
|
4097
4538
|
const hasManifest = state.mergedRouteManifest && Object.keys(state.mergedRouteManifest).length > 0;
|
|
4098
4539
|
if (hasManifest) {
|
|
@@ -4107,7 +4548,7 @@ function generateRoutesManifestModule(state) {
|
|
|
4107
4548
|
/\.(tsx?|jsx?)$/,
|
|
4108
4549
|
""
|
|
4109
4550
|
);
|
|
4110
|
-
const genPath =
|
|
4551
|
+
const genPath = join3(
|
|
4111
4552
|
routerDir,
|
|
4112
4553
|
`${routerBasename}.named-routes.gen.js`
|
|
4113
4554
|
).replaceAll("\\", "/");
|
|
@@ -4204,7 +4645,7 @@ function generatePerRouterModule(state, routerId) {
|
|
|
4204
4645
|
/\.(tsx?|jsx?)$/,
|
|
4205
4646
|
""
|
|
4206
4647
|
);
|
|
4207
|
-
const genPath =
|
|
4648
|
+
const genPath = join3(
|
|
4208
4649
|
routerDir,
|
|
4209
4650
|
`${routerBasename}.named-routes.gen.js`
|
|
4210
4651
|
).replaceAll("\\", "/");
|
|
@@ -4244,48 +4685,45 @@ function postprocessBundle(state) {
|
|
|
4244
4685
|
);
|
|
4245
4686
|
const evictionTargets = [
|
|
4246
4687
|
{
|
|
4247
|
-
|
|
4688
|
+
infos: state.handlerChunkInfoMap.values(),
|
|
4248
4689
|
fnName: "Prerender",
|
|
4249
4690
|
brand: "prerenderHandler",
|
|
4250
4691
|
label: "handler code from RSC bundle"
|
|
4251
4692
|
},
|
|
4252
4693
|
{
|
|
4253
|
-
|
|
4694
|
+
infos: state.staticHandlerChunkInfoMap.values(),
|
|
4254
4695
|
fnName: "Static",
|
|
4255
4696
|
brand: "staticHandler",
|
|
4256
4697
|
label: "static handler code"
|
|
4257
4698
|
}
|
|
4258
4699
|
];
|
|
4259
4700
|
for (const target of evictionTargets) {
|
|
4260
|
-
|
|
4261
|
-
|
|
4262
|
-
|
|
4263
|
-
|
|
4264
|
-
|
|
4265
|
-
|
|
4266
|
-
|
|
4267
|
-
|
|
4268
|
-
|
|
4269
|
-
|
|
4270
|
-
|
|
4271
|
-
|
|
4272
|
-
|
|
4273
|
-
|
|
4274
|
-
|
|
4275
|
-
|
|
4276
|
-
|
|
4277
|
-
|
|
4278
|
-
|
|
4701
|
+
for (const info of target.infos) {
|
|
4702
|
+
const chunkPath = resolve7(state.projectRoot, "dist/rsc", info.fileName);
|
|
4703
|
+
try {
|
|
4704
|
+
const code = readFileSync5(chunkPath, "utf-8");
|
|
4705
|
+
const result = evictHandlerCode(
|
|
4706
|
+
code,
|
|
4707
|
+
info.exports,
|
|
4708
|
+
target.fnName,
|
|
4709
|
+
target.brand
|
|
4710
|
+
);
|
|
4711
|
+
if (result) {
|
|
4712
|
+
writeFileSync4(chunkPath, result.code);
|
|
4713
|
+
const savedKB = (result.savedBytes / 1024).toFixed(1);
|
|
4714
|
+
console.log(
|
|
4715
|
+
`[rsc-router] Evicted ${target.label} (${savedKB} KB saved): ${info.fileName}`
|
|
4716
|
+
);
|
|
4717
|
+
}
|
|
4718
|
+
} catch (replaceErr) {
|
|
4719
|
+
console.warn(
|
|
4720
|
+
`[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
|
|
4279
4721
|
);
|
|
4280
4722
|
}
|
|
4281
|
-
} catch (replaceErr) {
|
|
4282
|
-
console.warn(
|
|
4283
|
-
`[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
|
|
4284
|
-
);
|
|
4285
4723
|
}
|
|
4286
4724
|
}
|
|
4287
|
-
state.
|
|
4288
|
-
state.
|
|
4725
|
+
state.handlerChunkInfoMap.clear();
|
|
4726
|
+
state.staticHandlerChunkInfoMap.clear();
|
|
4289
4727
|
if (hasPrerenderData && existsSync6(rscEntryPath)) {
|
|
4290
4728
|
const rscCode = readFileSync5(rscEntryPath, "utf-8");
|
|
4291
4729
|
if (!rscCode.includes("__prerender-manifest.js")) {
|
|
@@ -4328,7 +4766,7 @@ function postprocessBundle(state) {
|
|
|
4328
4766
|
}
|
|
4329
4767
|
if (hasStaticData && existsSync6(rscEntryPath)) {
|
|
4330
4768
|
const rscCode = readFileSync5(rscEntryPath, "utf-8");
|
|
4331
|
-
if (!rscCode.includes("
|
|
4769
|
+
if (!rscCode.includes("__static-manifest.js")) {
|
|
4332
4770
|
try {
|
|
4333
4771
|
const manifestEntries = [];
|
|
4334
4772
|
let totalBytes = copyStagedBuildAssets(
|
|
@@ -4367,7 +4805,22 @@ function postprocessBundle(state) {
|
|
|
4367
4805
|
}
|
|
4368
4806
|
|
|
4369
4807
|
// src/vite/router-discovery.ts
|
|
4808
|
+
var loaderHookRegistered = false;
|
|
4809
|
+
function ensureCloudflareProtocolLoaderRegistered() {
|
|
4810
|
+
if (loaderHookRegistered) return;
|
|
4811
|
+
loaderHookRegistered = true;
|
|
4812
|
+
try {
|
|
4813
|
+
register(
|
|
4814
|
+
new URL("./plugins/cloudflare-protocol-loader-hook.mjs", import.meta.url)
|
|
4815
|
+
);
|
|
4816
|
+
} catch (err) {
|
|
4817
|
+
console.warn(
|
|
4818
|
+
`[rsc-router] Could not register Node ESM loader hook for cloudflare:* imports (${err?.message ?? err}). Falling back to Vite transform only.`
|
|
4819
|
+
);
|
|
4820
|
+
}
|
|
4821
|
+
}
|
|
4370
4822
|
async function createTempRscServer(state, options = {}) {
|
|
4823
|
+
ensureCloudflareProtocolLoaderRegistered();
|
|
4371
4824
|
const { default: rsc } = await import("@vitejs/plugin-rsc");
|
|
4372
4825
|
return createViteServer({
|
|
4373
4826
|
root: state.projectRoot,
|
|
@@ -4390,6 +4843,7 @@ async function createTempRscServer(state, options = {}) {
|
|
|
4390
4843
|
...options.forceBuild ? [hashClientRefs(state.projectRoot)] : [],
|
|
4391
4844
|
createVersionPlugin(),
|
|
4392
4845
|
createVirtualStubPlugin(),
|
|
4846
|
+
createCloudflareProtocolStubPlugin(),
|
|
4393
4847
|
// Dev prerender must use dev-mode IDs (path-based) to match the workerd
|
|
4394
4848
|
// runtime. forceBuild produces hashed IDs for production bundle consistency.
|
|
4395
4849
|
exposeInternalIds(options.forceBuild ? { forceBuild: true } : void 0),
|
|
@@ -4397,8 +4851,69 @@ async function createTempRscServer(state, options = {}) {
|
|
|
4397
4851
|
]
|
|
4398
4852
|
});
|
|
4399
4853
|
}
|
|
4854
|
+
async function resolveBuildEnv(option, factoryCtx) {
|
|
4855
|
+
if (!option) return null;
|
|
4856
|
+
if (option === "auto") {
|
|
4857
|
+
if (factoryCtx.preset !== "cloudflare") {
|
|
4858
|
+
throw new Error(
|
|
4859
|
+
'[rsc-router] buildEnv: "auto" is only supported with preset: "cloudflare". Use a factory function or plain object for other presets.'
|
|
4860
|
+
);
|
|
4861
|
+
}
|
|
4862
|
+
try {
|
|
4863
|
+
const userRequire = createRequire2(
|
|
4864
|
+
resolve8(factoryCtx.root, "package.json")
|
|
4865
|
+
);
|
|
4866
|
+
const wranglerPath = userRequire.resolve("wrangler");
|
|
4867
|
+
const { getPlatformProxy } = await import(pathToFileURL(wranglerPath).href);
|
|
4868
|
+
const proxy = await getPlatformProxy();
|
|
4869
|
+
return {
|
|
4870
|
+
env: proxy.env,
|
|
4871
|
+
dispose: proxy.dispose
|
|
4872
|
+
};
|
|
4873
|
+
} catch (err) {
|
|
4874
|
+
throw new Error(
|
|
4875
|
+
`[rsc-router] buildEnv: "auto" requires wrangler to be installed.
|
|
4876
|
+
Install it with: pnpm add -D wrangler
|
|
4877
|
+
${err.message}`
|
|
4878
|
+
);
|
|
4879
|
+
}
|
|
4880
|
+
}
|
|
4881
|
+
if (typeof option === "function") {
|
|
4882
|
+
return await option(factoryCtx);
|
|
4883
|
+
}
|
|
4884
|
+
return { env: option };
|
|
4885
|
+
}
|
|
4886
|
+
async function acquireBuildEnv(s, command, mode) {
|
|
4887
|
+
const option = s.opts?.buildEnv;
|
|
4888
|
+
if (!option) return false;
|
|
4889
|
+
const result = await resolveBuildEnv(option, {
|
|
4890
|
+
root: s.projectRoot,
|
|
4891
|
+
mode,
|
|
4892
|
+
command,
|
|
4893
|
+
preset: s.opts?.preset ?? "node"
|
|
4894
|
+
});
|
|
4895
|
+
if (!result) return false;
|
|
4896
|
+
s.resolvedBuildEnv = result.env;
|
|
4897
|
+
s.buildEnvDispose = result.dispose ?? null;
|
|
4898
|
+
globalThis[BUILD_ENV_GLOBAL_KEY] = result.env;
|
|
4899
|
+
return true;
|
|
4900
|
+
}
|
|
4901
|
+
async function releaseBuildEnv(s) {
|
|
4902
|
+
if (s.buildEnvDispose) {
|
|
4903
|
+
try {
|
|
4904
|
+
await s.buildEnvDispose();
|
|
4905
|
+
} catch (err) {
|
|
4906
|
+
console.warn(`[rsc-router] buildEnv dispose failed: ${err.message}`);
|
|
4907
|
+
}
|
|
4908
|
+
s.buildEnvDispose = null;
|
|
4909
|
+
}
|
|
4910
|
+
s.resolvedBuildEnv = void 0;
|
|
4911
|
+
delete globalThis[BUILD_ENV_GLOBAL_KEY];
|
|
4912
|
+
}
|
|
4400
4913
|
function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
4401
4914
|
const s = createDiscoveryState(entryPath, opts);
|
|
4915
|
+
let viteCommand = "build";
|
|
4916
|
+
let viteMode = "production";
|
|
4402
4917
|
return {
|
|
4403
4918
|
name: "@rangojs/router:discovery",
|
|
4404
4919
|
config() {
|
|
@@ -4407,31 +4922,13 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4407
4922
|
__RANGO_DEBUG__: JSON.stringify(!!process.env.INTERNAL_RANGO_DEBUG)
|
|
4408
4923
|
}
|
|
4409
4924
|
};
|
|
4410
|
-
if (opts?.enableBuildPrerender) {
|
|
4411
|
-
config.environments = {
|
|
4412
|
-
rsc: {
|
|
4413
|
-
build: {
|
|
4414
|
-
rollupOptions: {
|
|
4415
|
-
output: {
|
|
4416
|
-
manualChunks(id) {
|
|
4417
|
-
if (s.resolvedPrerenderModules?.has(id)) {
|
|
4418
|
-
return "__prerender-handlers";
|
|
4419
|
-
}
|
|
4420
|
-
if (s.resolvedStaticModules?.has(id)) {
|
|
4421
|
-
return "__static-handlers";
|
|
4422
|
-
}
|
|
4423
|
-
}
|
|
4424
|
-
}
|
|
4425
|
-
}
|
|
4426
|
-
}
|
|
4427
|
-
}
|
|
4428
|
-
};
|
|
4429
|
-
}
|
|
4430
4925
|
return config;
|
|
4431
4926
|
},
|
|
4432
4927
|
configResolved(config) {
|
|
4433
4928
|
s.projectRoot = config.root;
|
|
4434
4929
|
s.isBuildMode = config.command === "build";
|
|
4930
|
+
viteCommand = config.command;
|
|
4931
|
+
viteMode = config.mode;
|
|
4435
4932
|
s.userResolveAlias = config.resolve.alias;
|
|
4436
4933
|
if (!s.resolvedEntryPath && opts?.routerPathRef?.path) {
|
|
4437
4934
|
s.resolvedEntryPath = opts.routerPathRef.path;
|
|
@@ -4445,12 +4942,6 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4445
4942
|
s.resolvedEntryPath = entries[0];
|
|
4446
4943
|
}
|
|
4447
4944
|
}
|
|
4448
|
-
if (opts?.include || opts?.exclude) {
|
|
4449
|
-
s.scanFilter = createScanFilter(s.projectRoot, {
|
|
4450
|
-
include: opts.include,
|
|
4451
|
-
exclude: opts.exclude
|
|
4452
|
-
});
|
|
4453
|
-
}
|
|
4454
4945
|
if (opts?.staticRouteTypesGeneration !== false) {
|
|
4455
4946
|
s.cachedRouterFiles = findRouterFiles(s.projectRoot, s.scanFilter);
|
|
4456
4947
|
writeCombinedRouteTypesWithTracking(s, { preserveIfLarger: true });
|
|
@@ -4482,6 +4973,8 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4482
4973
|
});
|
|
4483
4974
|
prerenderTempServer = null;
|
|
4484
4975
|
}
|
|
4976
|
+
releaseBuildEnv(s).catch(() => {
|
|
4977
|
+
});
|
|
4485
4978
|
});
|
|
4486
4979
|
async function getOrCreateTempServer() {
|
|
4487
4980
|
if (prerenderNodeRegistry) {
|
|
@@ -4512,6 +5005,7 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4512
5005
|
if (!rscEnv?.runner) {
|
|
4513
5006
|
s.devServerOrigin = getDevServerOrigin();
|
|
4514
5007
|
try {
|
|
5008
|
+
await acquireBuildEnv(s, viteCommand, viteMode);
|
|
4515
5009
|
const tempRscEnv = await getOrCreateTempServer();
|
|
4516
5010
|
if (tempRscEnv) {
|
|
4517
5011
|
await discoverRouters(s, tempRscEnv);
|
|
@@ -4527,6 +5021,7 @@ ${err.stack}`
|
|
|
4527
5021
|
return;
|
|
4528
5022
|
}
|
|
4529
5023
|
try {
|
|
5024
|
+
await acquireBuildEnv(s, viteCommand, viteMode);
|
|
4530
5025
|
const serverMod = await rscEnv.runner.import(
|
|
4531
5026
|
"@rangojs/router/server"
|
|
4532
5027
|
);
|
|
@@ -4591,7 +5086,26 @@ ${err.stack}`
|
|
|
4591
5086
|
res.end("Missing pathname");
|
|
4592
5087
|
return;
|
|
4593
5088
|
}
|
|
4594
|
-
|
|
5089
|
+
const rscEnv = server.environments?.rsc;
|
|
5090
|
+
let registry = null;
|
|
5091
|
+
if (rscEnv?.runner && s.resolvedEntryPath) {
|
|
5092
|
+
try {
|
|
5093
|
+
await rscEnv.runner.import(s.resolvedEntryPath);
|
|
5094
|
+
const serverMod = await rscEnv.runner.import(
|
|
5095
|
+
"@rangojs/router/server"
|
|
5096
|
+
);
|
|
5097
|
+
registry = serverMod.RouterRegistry ?? null;
|
|
5098
|
+
} catch (err) {
|
|
5099
|
+
console.warn(
|
|
5100
|
+
`[rsc-router] Dev prerender module refresh failed: ${err.message}`
|
|
5101
|
+
);
|
|
5102
|
+
res.statusCode = 500;
|
|
5103
|
+
res.end(`Prerender handler error: ${err.message}`);
|
|
5104
|
+
return;
|
|
5105
|
+
}
|
|
5106
|
+
} else {
|
|
5107
|
+
registry = mainRegistry;
|
|
5108
|
+
}
|
|
4595
5109
|
if (!registry) {
|
|
4596
5110
|
if (!prerenderNodeRegistry) {
|
|
4597
5111
|
await getOrCreateTempServer();
|
|
@@ -4613,7 +5127,10 @@ ${err.stack}`
|
|
|
4613
5127
|
pathname,
|
|
4614
5128
|
{},
|
|
4615
5129
|
void 0,
|
|
4616
|
-
wantPassthrough
|
|
5130
|
+
wantPassthrough,
|
|
5131
|
+
s.resolvedBuildEnv,
|
|
5132
|
+
true
|
|
5133
|
+
// devMode: check getParams for passthrough routes
|
|
4617
5134
|
);
|
|
4618
5135
|
if (!result) continue;
|
|
4619
5136
|
if (result.passthrough) continue;
|
|
@@ -4749,6 +5266,7 @@ ${err.stack}`
|
|
|
4749
5266
|
resetStagedBuildAssets(s.projectRoot);
|
|
4750
5267
|
s.prerenderManifestEntries = null;
|
|
4751
5268
|
s.staticManifestEntries = null;
|
|
5269
|
+
await acquireBuildEnv(s, viteCommand, viteMode);
|
|
4752
5270
|
let tempServer = null;
|
|
4753
5271
|
globalThis.__rscRouterDiscoveryActive = true;
|
|
4754
5272
|
try {
|
|
@@ -4788,6 +5306,7 @@ ${details}`
|
|
|
4788
5306
|
if (tempServer) {
|
|
4789
5307
|
await tempServer.close();
|
|
4790
5308
|
}
|
|
5309
|
+
await releaseBuildEnv(s);
|
|
4791
5310
|
}
|
|
4792
5311
|
},
|
|
4793
5312
|
// Virtual module: provides the pre-generated route manifest as a JS module
|
|
@@ -4830,20 +5349,30 @@ ${details}`
|
|
|
4830
5349
|
}
|
|
4831
5350
|
if (!s.resolvedPrerenderModules?.size && !s.resolvedStaticModules?.size)
|
|
4832
5351
|
return;
|
|
5352
|
+
s.handlerChunkInfoMap.clear();
|
|
5353
|
+
s.staticHandlerChunkInfoMap.clear();
|
|
4833
5354
|
for (const [fileName, chunk] of Object.entries(bundle)) {
|
|
4834
5355
|
if (chunk.type !== "chunk") continue;
|
|
4835
|
-
if (
|
|
5356
|
+
if (s.resolvedPrerenderModules?.size) {
|
|
4836
5357
|
const handlers = extractHandlerExportsFromChunk(
|
|
4837
5358
|
chunk.code,
|
|
4838
5359
|
s.resolvedPrerenderModules,
|
|
4839
5360
|
"Prerender",
|
|
4840
|
-
|
|
5361
|
+
false
|
|
4841
5362
|
);
|
|
4842
5363
|
if (handlers.length > 0) {
|
|
4843
|
-
|
|
5364
|
+
const existing = s.handlerChunkInfoMap.get(fileName);
|
|
5365
|
+
if (existing) {
|
|
5366
|
+
existing.exports.push(...handlers);
|
|
5367
|
+
} else {
|
|
5368
|
+
s.handlerChunkInfoMap.set(fileName, {
|
|
5369
|
+
fileName,
|
|
5370
|
+
exports: handlers
|
|
5371
|
+
});
|
|
5372
|
+
}
|
|
4844
5373
|
}
|
|
4845
5374
|
}
|
|
4846
|
-
if (
|
|
5375
|
+
if (s.resolvedStaticModules?.size) {
|
|
4847
5376
|
const handlers = extractHandlerExportsFromChunk(
|
|
4848
5377
|
chunk.code,
|
|
4849
5378
|
s.resolvedStaticModules,
|
|
@@ -4851,7 +5380,15 @@ ${details}`
|
|
|
4851
5380
|
false
|
|
4852
5381
|
);
|
|
4853
5382
|
if (handlers.length > 0) {
|
|
4854
|
-
|
|
5383
|
+
const existing = s.staticHandlerChunkInfoMap.get(fileName);
|
|
5384
|
+
if (existing) {
|
|
5385
|
+
existing.exports.push(...handlers);
|
|
5386
|
+
} else {
|
|
5387
|
+
s.staticHandlerChunkInfoMap.set(fileName, {
|
|
5388
|
+
fileName,
|
|
5389
|
+
exports: handlers
|
|
5390
|
+
});
|
|
5391
|
+
}
|
|
4855
5392
|
}
|
|
4856
5393
|
}
|
|
4857
5394
|
}
|
|
@@ -4877,9 +5414,19 @@ async function rango(options) {
|
|
|
4877
5414
|
const preset = resolvedOptions.preset ?? "node";
|
|
4878
5415
|
const showBanner = resolvedOptions.banner ?? true;
|
|
4879
5416
|
const plugins = [];
|
|
4880
|
-
const rangoAliases = getPackageAliases();
|
|
4881
|
-
const excludeDeps =
|
|
4882
|
-
|
|
5417
|
+
const rangoAliases = { ...getPackageAliases(), ...getVendorAliases() };
|
|
5418
|
+
const excludeDeps = [
|
|
5419
|
+
...getExcludeDeps(),
|
|
5420
|
+
// The public browser entry re-exports the RSDW browser client.
|
|
5421
|
+
// Excluding both keeps Vite from freezing the unpatched bundle into
|
|
5422
|
+
// .vite/deps before our source transforms run.
|
|
5423
|
+
"@vitejs/plugin-rsc/browser",
|
|
5424
|
+
// Keep the browser RSDW client out of Vite's dep optimizer so our
|
|
5425
|
+
// cjs-to-esm transform can patch the real file.
|
|
5426
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.browser"
|
|
5427
|
+
];
|
|
5428
|
+
const pkg = getPublishedPackageName();
|
|
5429
|
+
const nested = (spec) => `${pkg} > ${spec}`;
|
|
4883
5430
|
const routerRef = { path: void 0 };
|
|
4884
5431
|
const prerenderEnabled = true;
|
|
4885
5432
|
if (preset === "cloudflare") {
|
|
@@ -4917,7 +5464,7 @@ async function rango(options) {
|
|
|
4917
5464
|
// Pre-bundle rsc-html-stream to prevent discovery during first request
|
|
4918
5465
|
// Exclude rsc-router modules to ensure same Context instance
|
|
4919
5466
|
optimizeDeps: {
|
|
4920
|
-
include: ["rsc-html-stream/client"],
|
|
5467
|
+
include: [nested("rsc-html-stream/client")],
|
|
4921
5468
|
exclude: excludeDeps,
|
|
4922
5469
|
esbuildOptions: sharedEsbuildOptions
|
|
4923
5470
|
}
|
|
@@ -4942,8 +5489,10 @@ async function rango(options) {
|
|
|
4942
5489
|
"react-dom/static.edge",
|
|
4943
5490
|
"react/jsx-runtime",
|
|
4944
5491
|
"react/jsx-dev-runtime",
|
|
4945
|
-
"rsc-html-stream/server",
|
|
4946
|
-
|
|
5492
|
+
nested("rsc-html-stream/server"),
|
|
5493
|
+
nested(
|
|
5494
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
|
|
5495
|
+
)
|
|
4947
5496
|
],
|
|
4948
5497
|
exclude: excludeDeps,
|
|
4949
5498
|
esbuildOptions: sharedEsbuildOptions
|
|
@@ -4958,7 +5507,9 @@ async function rango(options) {
|
|
|
4958
5507
|
"react",
|
|
4959
5508
|
"react/jsx-runtime",
|
|
4960
5509
|
"react/jsx-dev-runtime",
|
|
4961
|
-
|
|
5510
|
+
nested(
|
|
5511
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
|
|
5512
|
+
)
|
|
4962
5513
|
],
|
|
4963
5514
|
exclude: excludeDeps,
|
|
4964
5515
|
esbuildOptions: sharedEsbuildOptions
|
|
@@ -4975,6 +5526,7 @@ async function rango(options) {
|
|
|
4975
5526
|
}
|
|
4976
5527
|
});
|
|
4977
5528
|
plugins.push(createVirtualEntriesPlugin(finalEntries));
|
|
5529
|
+
plugins.push(performanceTracksPlugin());
|
|
4978
5530
|
plugins.push(
|
|
4979
5531
|
rsc({
|
|
4980
5532
|
entries: finalEntries,
|
|
@@ -4983,153 +5535,126 @@ async function rango(options) {
|
|
|
4983
5535
|
);
|
|
4984
5536
|
plugins.push(clientRefDedup());
|
|
4985
5537
|
} else {
|
|
4986
|
-
|
|
4987
|
-
|
|
4988
|
-
|
|
4989
|
-
|
|
4990
|
-
|
|
4991
|
-
|
|
4992
|
-
|
|
4993
|
-
const
|
|
4994
|
-
|
|
4995
|
-
|
|
4996
|
-
|
|
4997
|
-
|
|
4998
|
-
|
|
4999
|
-
|
|
5000
|
-
|
|
5001
|
-
routerRef.path = (abs.startsWith(root) ? "./" + abs.slice(root.length + 1) : abs).replaceAll("\\", "/");
|
|
5002
|
-
} else if (candidates.length > 1) {
|
|
5003
|
-
const list = candidates.map(
|
|
5004
|
-
(f) => " - " + (f.startsWith(root) ? f.slice(root.length + 1) : f)
|
|
5005
|
-
).join("\n");
|
|
5006
|
-
throw new Error(
|
|
5007
|
-
`[rsc-router] Multiple routers found. Specify \`router\` to choose one:
|
|
5008
|
-
${list}`
|
|
5009
|
-
);
|
|
5010
|
-
}
|
|
5538
|
+
plugins.push({
|
|
5539
|
+
name: "@rangojs/router:auto-discover",
|
|
5540
|
+
config(userConfig) {
|
|
5541
|
+
if (routerRef.path) return;
|
|
5542
|
+
const root = userConfig.root ? resolve9(process.cwd(), userConfig.root) : process.cwd();
|
|
5543
|
+
const candidates = findRouterFiles(root);
|
|
5544
|
+
if (candidates.length === 1) {
|
|
5545
|
+
const abs = candidates[0];
|
|
5546
|
+
routerRef.path = (abs.startsWith(root) ? "./" + abs.slice(root.length + 1) : abs).replaceAll("\\", "/");
|
|
5547
|
+
} else if (candidates.length > 1) {
|
|
5548
|
+
const list = candidates.map(
|
|
5549
|
+
(f) => " - " + (f.startsWith(root) ? f.slice(root.length + 1) : f)
|
|
5550
|
+
).join("\n");
|
|
5551
|
+
throw new Error(`[rsc-router] Multiple routers found:
|
|
5552
|
+
${list}`);
|
|
5011
5553
|
}
|
|
5012
|
-
}
|
|
5013
|
-
}
|
|
5014
|
-
const
|
|
5015
|
-
|
|
5016
|
-
|
|
5017
|
-
|
|
5018
|
-
|
|
5019
|
-
|
|
5020
|
-
|
|
5021
|
-
|
|
5022
|
-
|
|
5023
|
-
|
|
5024
|
-
|
|
5025
|
-
|
|
5026
|
-
|
|
5027
|
-
|
|
5028
|
-
|
|
5029
|
-
|
|
5030
|
-
|
|
5031
|
-
|
|
5032
|
-
|
|
5033
|
-
|
|
5034
|
-
|
|
5035
|
-
|
|
5036
|
-
|
|
5037
|
-
|
|
5038
|
-
|
|
5039
|
-
|
|
5040
|
-
|
|
5041
|
-
|
|
5042
|
-
resolve: {
|
|
5043
|
-
alias: rangoAliases
|
|
5044
|
-
},
|
|
5045
|
-
environments: {
|
|
5046
|
-
client: {
|
|
5047
|
-
build: {
|
|
5048
|
-
rollupOptions: {
|
|
5049
|
-
output: {
|
|
5050
|
-
manualChunks: getManualChunks
|
|
5051
|
-
}
|
|
5052
|
-
}
|
|
5053
|
-
},
|
|
5054
|
-
// Always exclude rsc-router modules, conditionally add virtual entry
|
|
5055
|
-
optimizeDeps: {
|
|
5056
|
-
// Pre-bundle React and rsc-html-stream to prevent late discovery
|
|
5057
|
-
// triggering ERR_OUTDATED_OPTIMIZED_DEP on cold starts
|
|
5058
|
-
include: [
|
|
5059
|
-
"react",
|
|
5060
|
-
"react-dom",
|
|
5061
|
-
"react/jsx-runtime",
|
|
5062
|
-
"react/jsx-dev-runtime",
|
|
5063
|
-
"rsc-html-stream/client"
|
|
5064
|
-
],
|
|
5065
|
-
exclude: excludeDeps,
|
|
5066
|
-
esbuildOptions: sharedEsbuildOptions,
|
|
5067
|
-
...useVirtualClient && {
|
|
5068
|
-
// Tell Vite to scan the virtual entry for dependencies
|
|
5069
|
-
entries: [VIRTUAL_IDS.browser]
|
|
5070
|
-
}
|
|
5071
|
-
}
|
|
5072
|
-
},
|
|
5073
|
-
...useVirtualSSR && {
|
|
5074
|
-
ssr: {
|
|
5075
|
-
optimizeDeps: {
|
|
5076
|
-
entries: [VIRTUAL_IDS.ssr],
|
|
5077
|
-
// Pre-bundle all SSR deps to prevent late discovery triggering ERR_OUTDATED_OPTIMIZED_DEP
|
|
5078
|
-
include: [
|
|
5079
|
-
"react",
|
|
5080
|
-
"react-dom",
|
|
5081
|
-
"react-dom/server.edge",
|
|
5082
|
-
"react-dom/static.edge",
|
|
5083
|
-
"react/jsx-runtime",
|
|
5084
|
-
"react/jsx-dev-runtime",
|
|
5085
|
-
"@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
|
|
5086
|
-
],
|
|
5087
|
-
exclude: excludeDeps,
|
|
5088
|
-
esbuildOptions: sharedEsbuildOptions
|
|
5554
|
+
}
|
|
5555
|
+
});
|
|
5556
|
+
const finalEntries = {
|
|
5557
|
+
client: VIRTUAL_IDS.browser,
|
|
5558
|
+
ssr: VIRTUAL_IDS.ssr,
|
|
5559
|
+
rsc: VIRTUAL_IDS.rsc
|
|
5560
|
+
};
|
|
5561
|
+
const { default: rsc } = await import("@vitejs/plugin-rsc");
|
|
5562
|
+
let hasWarnedDuplicate = false;
|
|
5563
|
+
plugins.push({
|
|
5564
|
+
name: "@rangojs/router:rsc-integration",
|
|
5565
|
+
enforce: "pre",
|
|
5566
|
+
config() {
|
|
5567
|
+
return {
|
|
5568
|
+
optimizeDeps: {
|
|
5569
|
+
exclude: excludeDeps,
|
|
5570
|
+
esbuildOptions: sharedEsbuildOptions
|
|
5571
|
+
},
|
|
5572
|
+
build: {
|
|
5573
|
+
rollupOptions: { onwarn }
|
|
5574
|
+
},
|
|
5575
|
+
resolve: {
|
|
5576
|
+
alias: rangoAliases
|
|
5577
|
+
},
|
|
5578
|
+
environments: {
|
|
5579
|
+
client: {
|
|
5580
|
+
build: {
|
|
5581
|
+
rollupOptions: {
|
|
5582
|
+
output: {
|
|
5583
|
+
manualChunks: getManualChunks
|
|
5089
5584
|
}
|
|
5090
5585
|
}
|
|
5091
5586
|
},
|
|
5092
|
-
|
|
5093
|
-
|
|
5094
|
-
|
|
5095
|
-
|
|
5096
|
-
|
|
5097
|
-
|
|
5098
|
-
|
|
5099
|
-
|
|
5100
|
-
|
|
5101
|
-
|
|
5102
|
-
|
|
5103
|
-
|
|
5104
|
-
|
|
5105
|
-
|
|
5587
|
+
optimizeDeps: {
|
|
5588
|
+
include: [
|
|
5589
|
+
"react",
|
|
5590
|
+
"react-dom",
|
|
5591
|
+
"react/jsx-runtime",
|
|
5592
|
+
"react/jsx-dev-runtime",
|
|
5593
|
+
nested("rsc-html-stream/client")
|
|
5594
|
+
],
|
|
5595
|
+
exclude: excludeDeps,
|
|
5596
|
+
esbuildOptions: sharedEsbuildOptions,
|
|
5597
|
+
entries: [VIRTUAL_IDS.browser]
|
|
5598
|
+
}
|
|
5599
|
+
},
|
|
5600
|
+
ssr: {
|
|
5601
|
+
optimizeDeps: {
|
|
5602
|
+
entries: [VIRTUAL_IDS.ssr],
|
|
5603
|
+
include: [
|
|
5604
|
+
"react",
|
|
5605
|
+
"react-dom",
|
|
5606
|
+
"react-dom/server.edge",
|
|
5607
|
+
"react-dom/static.edge",
|
|
5608
|
+
"react/jsx-runtime",
|
|
5609
|
+
"react/jsx-dev-runtime",
|
|
5610
|
+
nested(
|
|
5611
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
|
|
5612
|
+
)
|
|
5613
|
+
],
|
|
5614
|
+
exclude: excludeDeps,
|
|
5615
|
+
esbuildOptions: sharedEsbuildOptions
|
|
5616
|
+
}
|
|
5617
|
+
},
|
|
5618
|
+
rsc: {
|
|
5619
|
+
optimizeDeps: {
|
|
5620
|
+
entries: [VIRTUAL_IDS.rsc],
|
|
5621
|
+
include: [
|
|
5622
|
+
"react",
|
|
5623
|
+
"react/jsx-runtime",
|
|
5624
|
+
"react/jsx-dev-runtime",
|
|
5625
|
+
nested(
|
|
5626
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
|
|
5627
|
+
)
|
|
5628
|
+
],
|
|
5629
|
+
esbuildOptions: sharedEsbuildOptions
|
|
5106
5630
|
}
|
|
5107
5631
|
}
|
|
5108
|
-
};
|
|
5109
|
-
},
|
|
5110
|
-
configResolved(config) {
|
|
5111
|
-
if (showBanner) {
|
|
5112
|
-
const mode = config.command === "serve" ? process.argv.includes("preview") ? "preview" : "dev" : "build";
|
|
5113
|
-
printBanner(mode, "node", rangoVersion);
|
|
5114
|
-
}
|
|
5115
|
-
const rscMinimalCount = config.plugins.filter(
|
|
5116
|
-
(p) => p.name === "rsc:minimal"
|
|
5117
|
-
).length;
|
|
5118
|
-
if (rscMinimalCount > 1 && !hasWarnedDuplicate) {
|
|
5119
|
-
hasWarnedDuplicate = true;
|
|
5120
|
-
console.warn(
|
|
5121
|
-
"[rsc-router] Duplicate @vitejs/plugin-rsc detected. Remove rsc() from your config or use rango({ rsc: false }) for manual configuration."
|
|
5122
|
-
);
|
|
5123
5632
|
}
|
|
5633
|
+
};
|
|
5634
|
+
},
|
|
5635
|
+
configResolved(config) {
|
|
5636
|
+
if (showBanner) {
|
|
5637
|
+
const mode = config.command === "serve" ? process.argv.includes("preview") ? "preview" : "dev" : "build";
|
|
5638
|
+
printBanner(mode, "node", rangoVersion);
|
|
5124
5639
|
}
|
|
5125
|
-
|
|
5126
|
-
|
|
5127
|
-
|
|
5128
|
-
|
|
5129
|
-
|
|
5130
|
-
|
|
5131
|
-
|
|
5132
|
-
|
|
5640
|
+
const rscMinimalCount = config.plugins.filter(
|
|
5641
|
+
(p) => p.name === "rsc:minimal"
|
|
5642
|
+
).length;
|
|
5643
|
+
if (rscMinimalCount > 1 && !hasWarnedDuplicate) {
|
|
5644
|
+
hasWarnedDuplicate = true;
|
|
5645
|
+
console.warn(
|
|
5646
|
+
"[rsc-router] Duplicate @vitejs/plugin-rsc detected. Remove rsc() from your vite config \u2014 rango() includes it automatically."
|
|
5647
|
+
);
|
|
5648
|
+
}
|
|
5649
|
+
}
|
|
5650
|
+
});
|
|
5651
|
+
plugins.push(createVirtualEntriesPlugin(finalEntries, routerRef));
|
|
5652
|
+
plugins.push(performanceTracksPlugin());
|
|
5653
|
+
plugins.push(
|
|
5654
|
+
rsc({
|
|
5655
|
+
entries: finalEntries
|
|
5656
|
+
})
|
|
5657
|
+
);
|
|
5133
5658
|
plugins.push(clientRefDedup());
|
|
5134
5659
|
}
|
|
5135
5660
|
plugins.push({
|
|
@@ -5157,18 +5682,16 @@ ${list}`
|
|
|
5157
5682
|
plugins.push(createVersionPlugin());
|
|
5158
5683
|
const discoveryEntryPath = preset !== "cloudflare" ? routerRef.path : void 0;
|
|
5159
5684
|
const discoveryRouterRef = preset !== "cloudflare" ? routerRef : void 0;
|
|
5160
|
-
|
|
5161
|
-
|
|
5162
|
-
plugins.push(createVersionInjectorPlugin(injectorEntryPath));
|
|
5685
|
+
if (preset === "cloudflare") {
|
|
5686
|
+
plugins.push(createVersionInjectorPlugin(void 0));
|
|
5163
5687
|
}
|
|
5164
5688
|
plugins.push(createCjsToEsmPlugin());
|
|
5165
5689
|
plugins.push(
|
|
5166
5690
|
createRouterDiscoveryPlugin(discoveryEntryPath, {
|
|
5167
5691
|
routerPathRef: discoveryRouterRef,
|
|
5168
5692
|
enableBuildPrerender: prerenderEnabled,
|
|
5169
|
-
|
|
5170
|
-
|
|
5171
|
-
exclude: resolvedOptions.exclude
|
|
5693
|
+
buildEnv: options?.buildEnv,
|
|
5694
|
+
preset
|
|
5172
5695
|
})
|
|
5173
5696
|
);
|
|
5174
5697
|
return plugins;
|
|
@@ -5181,29 +5704,75 @@ function poke() {
|
|
|
5181
5704
|
apply: "serve",
|
|
5182
5705
|
configureServer(server) {
|
|
5183
5706
|
const stdin = process.stdin;
|
|
5184
|
-
const
|
|
5707
|
+
const debug = process.env.RANGO_POKE_DEBUG === "1";
|
|
5708
|
+
const triggerReload = (source) => {
|
|
5709
|
+
server.hot.send({ type: "full-reload", path: "*" });
|
|
5710
|
+
server.config.logger.info(` browser reload (${source})`, {
|
|
5711
|
+
timestamp: true
|
|
5712
|
+
});
|
|
5713
|
+
};
|
|
5714
|
+
const toBuffer = (chunk) => {
|
|
5715
|
+
return typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
|
|
5716
|
+
};
|
|
5717
|
+
const formatChunk = (chunk) => {
|
|
5718
|
+
const data = toBuffer(chunk);
|
|
5719
|
+
const hex = Array.from(data).map((byte) => `0x${byte.toString(16).padStart(2, "0")}`).join(" ");
|
|
5720
|
+
const ascii = Array.from(data).map((byte) => {
|
|
5721
|
+
if (byte >= 32 && byte <= 126) return String.fromCharCode(byte);
|
|
5722
|
+
if (byte === 10) return "\\n";
|
|
5723
|
+
if (byte === 13) return "\\r";
|
|
5724
|
+
if (byte === 9) return "\\t";
|
|
5725
|
+
return ".";
|
|
5726
|
+
}).join("");
|
|
5727
|
+
return `len=${data.length} hex=[${hex}] ascii="${ascii}"`;
|
|
5728
|
+
};
|
|
5729
|
+
const readCtrlR = (chunk) => {
|
|
5730
|
+
const data = typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
|
|
5731
|
+
return data.length === 1 && data[0] === 18;
|
|
5732
|
+
};
|
|
5733
|
+
const readSubmittedCommands = (chunk) => {
|
|
5734
|
+
const text = toBuffer(chunk).toString("utf8").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
5735
|
+
if (!text.includes("\n")) return [];
|
|
5736
|
+
const lines = text.split("\n");
|
|
5737
|
+
lines.pop();
|
|
5738
|
+
return lines;
|
|
5739
|
+
};
|
|
5740
|
+
if (debug) {
|
|
5741
|
+
server.config.logger.info(
|
|
5742
|
+
` poke debug enabled (isTTY=${stdin.isTTY ? "yes" : "no"}, isRaw=${stdin.isTTY ? stdin.isRaw ? "yes" : "no" : "n/a"})`,
|
|
5743
|
+
{ timestamp: true }
|
|
5744
|
+
);
|
|
5745
|
+
}
|
|
5185
5746
|
if (stdin.isTTY) {
|
|
5186
|
-
|
|
5747
|
+
server.config.logger.info(
|
|
5748
|
+
" poke ready: press e + enter to reload browser (ctrl+r also works when available)",
|
|
5749
|
+
{ timestamp: true }
|
|
5750
|
+
);
|
|
5187
5751
|
}
|
|
5188
5752
|
const onData = (data) => {
|
|
5189
|
-
if (
|
|
5190
|
-
|
|
5191
|
-
process.emit("SIGINT", "SIGINT");
|
|
5192
|
-
return;
|
|
5193
|
-
}
|
|
5194
|
-
if (data[0] === 18) {
|
|
5195
|
-
server.hot.send({ type: "full-reload", path: "*" });
|
|
5196
|
-
server.config.logger.info(" browser reload (ctrl+r)", {
|
|
5753
|
+
if (debug) {
|
|
5754
|
+
server.config.logger.info(` poke stdin ${formatChunk(data)}`, {
|
|
5197
5755
|
timestamp: true
|
|
5198
5756
|
});
|
|
5199
5757
|
}
|
|
5758
|
+
if (readCtrlR(data)) {
|
|
5759
|
+
triggerReload("ctrl+r");
|
|
5760
|
+
return;
|
|
5761
|
+
}
|
|
5762
|
+
for (const command of readSubmittedCommands(data)) {
|
|
5763
|
+
if (command === "e") {
|
|
5764
|
+
triggerReload("e+enter");
|
|
5765
|
+
return;
|
|
5766
|
+
}
|
|
5767
|
+
if (command === "\x1Br") {
|
|
5768
|
+
triggerReload("option+r+enter");
|
|
5769
|
+
return;
|
|
5770
|
+
}
|
|
5771
|
+
}
|
|
5200
5772
|
};
|
|
5201
5773
|
stdin.on("data", onData);
|
|
5202
5774
|
server.httpServer?.on("close", () => {
|
|
5203
5775
|
stdin.off("data", onData);
|
|
5204
|
-
if (stdin.isTTY && previousRawMode !== null) {
|
|
5205
|
-
stdin.setRawMode(previousRawMode);
|
|
5206
|
-
}
|
|
5207
5776
|
});
|
|
5208
5777
|
}
|
|
5209
5778
|
};
|