@rangojs/router 0.0.0-experimental.f2337aef → 0.0.0-experimental.f2d1a2f1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -38
- package/dist/bin/rango.js +138 -50
- package/dist/vite/index.js +1183 -461
- package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/package.json +7 -5
- package/skills/breadcrumbs/SKILL.md +3 -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 +28 -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 +88 -45
- 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 +1 -1
- 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/navigation-bridge.ts +88 -9
- 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 +109 -15
- package/src/browser/prefetch/cache.ts +175 -15
- package/src/browser/prefetch/fetch.ts +180 -33
- 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 +81 -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 +30 -15
- package/src/browser/segment-reconciler.ts +36 -9
- package/src/browser/server-action-bridge.ts +8 -6
- package/src/browser/types.ts +49 -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 +6 -1
- package/src/index.ts +49 -6
- 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-types.ts +18 -0
- package/src/router/content-negotiation.ts +100 -1
- package/src/router/handler-context.ts +101 -25
- package/src/router/intercept-resolution.ts +9 -4
- package/src/router/lazy-includes.ts +10 -7
- package/src/router/loader-resolution.ts +159 -21
- package/src/router/logging.ts +1 -1
- 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 +60 -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 +1 -0
- 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 +433 -296
- 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 +17 -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/debug.ts +86 -0
- 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 +86 -0
- package/src/vite/plugins/refresh-cmd.ts +88 -26
- package/src/vite/plugins/version-plugin.ts +13 -1
- package/src/vite/rango.ts +204 -217
- package/src/vite/router-discovery.ts +335 -64
- 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/__internal.d.ts +0 -83
- package/dist/__internal.d.ts.map +0 -1
- package/dist/__internal.js +0 -19
- package/dist/__internal.js.map +0 -1
- package/dist/__mocks__/version.d.ts +0 -7
- package/dist/__mocks__/version.d.ts.map +0 -1
- package/dist/__mocks__/version.js +0 -7
- package/dist/__mocks__/version.js.map +0 -1
- package/dist/__tests__/client-href.test.d.ts +0 -2
- package/dist/__tests__/client-href.test.d.ts.map +0 -1
- package/dist/__tests__/client-href.test.js +0 -74
- package/dist/__tests__/client-href.test.js.map +0 -1
- package/dist/__tests__/component-utils.test.d.ts +0 -2
- package/dist/__tests__/component-utils.test.d.ts.map +0 -1
- package/dist/__tests__/component-utils.test.js +0 -51
- package/dist/__tests__/component-utils.test.js.map +0 -1
- package/dist/__tests__/event-controller.test.d.ts +0 -2
- package/dist/__tests__/event-controller.test.d.ts.map +0 -1
- package/dist/__tests__/event-controller.test.js +0 -538
- package/dist/__tests__/event-controller.test.js.map +0 -1
- package/dist/__tests__/helpers/route-tree.d.ts +0 -118
- package/dist/__tests__/helpers/route-tree.d.ts.map +0 -1
- package/dist/__tests__/helpers/route-tree.js +0 -374
- package/dist/__tests__/helpers/route-tree.js.map +0 -1
- package/dist/__tests__/match-result.test.d.ts +0 -2
- package/dist/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/__tests__/match-result.test.js +0 -154
- package/dist/__tests__/match-result.test.js.map +0 -1
- package/dist/__tests__/navigation-store.test.d.ts +0 -2
- package/dist/__tests__/navigation-store.test.d.ts.map +0 -1
- package/dist/__tests__/navigation-store.test.js +0 -440
- package/dist/__tests__/navigation-store.test.js.map +0 -1
- package/dist/__tests__/partial-update.test.d.ts +0 -2
- package/dist/__tests__/partial-update.test.d.ts.map +0 -1
- package/dist/__tests__/partial-update.test.js +0 -1009
- package/dist/__tests__/partial-update.test.js.map +0 -1
- package/dist/__tests__/reverse-types.test.d.ts +0 -8
- package/dist/__tests__/reverse-types.test.d.ts.map +0 -1
- package/dist/__tests__/reverse-types.test.js +0 -656
- package/dist/__tests__/reverse-types.test.js.map +0 -1
- package/dist/__tests__/route-definition.test.d.ts +0 -2
- package/dist/__tests__/route-definition.test.d.ts.map +0 -1
- package/dist/__tests__/route-definition.test.js +0 -55
- package/dist/__tests__/route-definition.test.js.map +0 -1
- package/dist/__tests__/router-helpers.test.d.ts +0 -2
- package/dist/__tests__/router-helpers.test.d.ts.map +0 -1
- package/dist/__tests__/router-helpers.test.js +0 -377
- package/dist/__tests__/router-helpers.test.js.map +0 -1
- package/dist/__tests__/router-integration-2.test.d.ts +0 -2
- package/dist/__tests__/router-integration-2.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration-2.test.js +0 -426
- package/dist/__tests__/router-integration-2.test.js.map +0 -1
- package/dist/__tests__/router-integration.test.d.ts +0 -2
- package/dist/__tests__/router-integration.test.d.ts.map +0 -1
- package/dist/__tests__/router-integration.test.js +0 -1051
- package/dist/__tests__/router-integration.test.js.map +0 -1
- package/dist/__tests__/search-params.test.d.ts +0 -5
- package/dist/__tests__/search-params.test.d.ts.map +0 -1
- package/dist/__tests__/search-params.test.js +0 -306
- package/dist/__tests__/search-params.test.js.map +0 -1
- package/dist/__tests__/segment-system.test.d.ts +0 -2
- package/dist/__tests__/segment-system.test.d.ts.map +0 -1
- package/dist/__tests__/segment-system.test.js +0 -627
- package/dist/__tests__/segment-system.test.js.map +0 -1
- package/dist/__tests__/static-handler-types.test.d.ts +0 -8
- package/dist/__tests__/static-handler-types.test.d.ts.map +0 -1
- package/dist/__tests__/static-handler-types.test.js +0 -63
- package/dist/__tests__/static-handler-types.test.js.map +0 -1
- package/dist/__tests__/urls.test.d.ts +0 -2
- package/dist/__tests__/urls.test.d.ts.map +0 -1
- package/dist/__tests__/urls.test.js +0 -421
- package/dist/__tests__/urls.test.js.map +0 -1
- package/dist/__tests__/use-mount.test.d.ts +0 -2
- package/dist/__tests__/use-mount.test.d.ts.map +0 -1
- package/dist/__tests__/use-mount.test.js +0 -35
- package/dist/__tests__/use-mount.test.js.map +0 -1
- package/dist/bin/rango.d.ts +0 -2
- package/dist/bin/rango.d.ts.map +0 -1
- package/dist/bin/rango.js.map +0 -1
- package/dist/browser/event-controller.d.ts +0 -191
- package/dist/browser/event-controller.d.ts.map +0 -1
- package/dist/browser/event-controller.js +0 -559
- package/dist/browser/event-controller.js.map +0 -1
- package/dist/browser/index.d.ts +0 -2
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -14
- package/dist/browser/index.js.map +0 -1
- package/dist/browser/link-interceptor.d.ts +0 -38
- package/dist/browser/link-interceptor.d.ts.map +0 -1
- package/dist/browser/link-interceptor.js +0 -99
- package/dist/browser/link-interceptor.js.map +0 -1
- package/dist/browser/logging.d.ts +0 -10
- package/dist/browser/logging.d.ts.map +0 -1
- package/dist/browser/logging.js +0 -29
- package/dist/browser/logging.js.map +0 -1
- package/dist/browser/lru-cache.d.ts +0 -17
- package/dist/browser/lru-cache.d.ts.map +0 -1
- package/dist/browser/lru-cache.js +0 -50
- package/dist/browser/lru-cache.js.map +0 -1
- package/dist/browser/merge-segment-loaders.d.ts +0 -39
- package/dist/browser/merge-segment-loaders.d.ts.map +0 -1
- package/dist/browser/merge-segment-loaders.js +0 -102
- package/dist/browser/merge-segment-loaders.js.map +0 -1
- package/dist/browser/navigation-bridge.d.ts +0 -102
- package/dist/browser/navigation-bridge.d.ts.map +0 -1
- package/dist/browser/navigation-bridge.js +0 -708
- package/dist/browser/navigation-bridge.js.map +0 -1
- package/dist/browser/navigation-client.d.ts +0 -25
- package/dist/browser/navigation-client.d.ts.map +0 -1
- package/dist/browser/navigation-client.js +0 -157
- package/dist/browser/navigation-client.js.map +0 -1
- package/dist/browser/navigation-store.d.ts +0 -101
- package/dist/browser/navigation-store.d.ts.map +0 -1
- package/dist/browser/navigation-store.js +0 -625
- package/dist/browser/navigation-store.js.map +0 -1
- package/dist/browser/partial-update.d.ts +0 -75
- package/dist/browser/partial-update.d.ts.map +0 -1
- package/dist/browser/partial-update.js +0 -426
- package/dist/browser/partial-update.js.map +0 -1
- package/dist/browser/react/Link.d.ts +0 -86
- package/dist/browser/react/Link.d.ts.map +0 -1
- package/dist/browser/react/Link.js +0 -128
- package/dist/browser/react/Link.js.map +0 -1
- package/dist/browser/react/NavigationProvider.d.ts +0 -63
- package/dist/browser/react/NavigationProvider.d.ts.map +0 -1
- package/dist/browser/react/NavigationProvider.js +0 -216
- package/dist/browser/react/NavigationProvider.js.map +0 -1
- package/dist/browser/react/ScrollRestoration.d.ts +0 -75
- package/dist/browser/react/ScrollRestoration.d.ts.map +0 -1
- package/dist/browser/react/ScrollRestoration.js +0 -57
- package/dist/browser/react/ScrollRestoration.js.map +0 -1
- package/dist/browser/react/context.d.ts +0 -46
- package/dist/browser/react/context.d.ts.map +0 -1
- package/dist/browser/react/context.js +0 -10
- package/dist/browser/react/context.js.map +0 -1
- package/dist/browser/react/index.d.ts +0 -11
- package/dist/browser/react/index.d.ts.map +0 -1
- package/dist/browser/react/index.js +0 -22
- package/dist/browser/react/index.js.map +0 -1
- package/dist/browser/react/location-state-shared.d.ts +0 -63
- package/dist/browser/react/location-state-shared.d.ts.map +0 -1
- package/dist/browser/react/location-state-shared.js +0 -81
- package/dist/browser/react/location-state-shared.js.map +0 -1
- package/dist/browser/react/location-state.d.ts +0 -23
- package/dist/browser/react/location-state.d.ts.map +0 -1
- package/dist/browser/react/location-state.js +0 -29
- package/dist/browser/react/location-state.js.map +0 -1
- package/dist/browser/react/mount-context.d.ts +0 -24
- package/dist/browser/react/mount-context.d.ts.map +0 -1
- package/dist/browser/react/mount-context.js +0 -24
- package/dist/browser/react/mount-context.js.map +0 -1
- package/dist/browser/react/use-action.d.ts +0 -64
- package/dist/browser/react/use-action.d.ts.map +0 -1
- package/dist/browser/react/use-action.js +0 -134
- package/dist/browser/react/use-action.js.map +0 -1
- package/dist/browser/react/use-client-cache.d.ts +0 -41
- package/dist/browser/react/use-client-cache.d.ts.map +0 -1
- package/dist/browser/react/use-client-cache.js +0 -39
- package/dist/browser/react/use-client-cache.js.map +0 -1
- package/dist/browser/react/use-handle.d.ts +0 -31
- package/dist/browser/react/use-handle.d.ts.map +0 -1
- package/dist/browser/react/use-handle.js +0 -144
- package/dist/browser/react/use-handle.js.map +0 -1
- package/dist/browser/react/use-href.d.ts +0 -33
- package/dist/browser/react/use-href.d.ts.map +0 -1
- package/dist/browser/react/use-href.js +0 -39
- package/dist/browser/react/use-href.js.map +0 -1
- package/dist/browser/react/use-link-status.d.ts +0 -37
- package/dist/browser/react/use-link-status.d.ts.map +0 -1
- package/dist/browser/react/use-link-status.js +0 -99
- package/dist/browser/react/use-link-status.js.map +0 -1
- package/dist/browser/react/use-mount.d.ts +0 -25
- package/dist/browser/react/use-mount.d.ts.map +0 -1
- package/dist/browser/react/use-mount.js +0 -30
- package/dist/browser/react/use-mount.js.map +0 -1
- package/dist/browser/react/use-navigation.d.ts +0 -27
- package/dist/browser/react/use-navigation.d.ts.map +0 -1
- package/dist/browser/react/use-navigation.js +0 -87
- package/dist/browser/react/use-navigation.js.map +0 -1
- package/dist/browser/react/use-segments.d.ts +0 -38
- package/dist/browser/react/use-segments.d.ts.map +0 -1
- package/dist/browser/react/use-segments.js +0 -130
- package/dist/browser/react/use-segments.js.map +0 -1
- package/dist/browser/request-controller.d.ts +0 -26
- package/dist/browser/request-controller.d.ts.map +0 -1
- package/dist/browser/request-controller.js +0 -147
- package/dist/browser/request-controller.js.map +0 -1
- package/dist/browser/rsc-router.d.ts +0 -129
- package/dist/browser/rsc-router.d.ts.map +0 -1
- package/dist/browser/rsc-router.js +0 -195
- package/dist/browser/rsc-router.js.map +0 -1
- package/dist/browser/scroll-restoration.d.ts +0 -93
- package/dist/browser/scroll-restoration.d.ts.map +0 -1
- package/dist/browser/scroll-restoration.js +0 -321
- package/dist/browser/scroll-restoration.js.map +0 -1
- package/dist/browser/segment-structure-assert.d.ts +0 -17
- package/dist/browser/segment-structure-assert.d.ts.map +0 -1
- package/dist/browser/segment-structure-assert.js +0 -59
- package/dist/browser/segment-structure-assert.js.map +0 -1
- package/dist/browser/server-action-bridge.d.ts +0 -26
- package/dist/browser/server-action-bridge.d.ts.map +0 -1
- package/dist/browser/server-action-bridge.js +0 -668
- package/dist/browser/server-action-bridge.js.map +0 -1
- package/dist/browser/shallow.d.ts +0 -12
- package/dist/browser/shallow.d.ts.map +0 -1
- package/dist/browser/shallow.js +0 -34
- package/dist/browser/shallow.js.map +0 -1
- package/dist/browser/types.d.ts +0 -369
- package/dist/browser/types.d.ts.map +0 -1
- package/dist/browser/types.js +0 -2
- package/dist/browser/types.js.map +0 -1
- package/dist/build/__tests__/generate-cli.test.d.ts +0 -2
- package/dist/build/__tests__/generate-cli.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-cli.test.js +0 -237
- package/dist/build/__tests__/generate-cli.test.js.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-manifest.test.js +0 -119
- package/dist/build/__tests__/generate-manifest.test.js.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.d.ts +0 -2
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +0 -1
- package/dist/build/__tests__/generate-route-types.test.js +0 -620
- package/dist/build/__tests__/generate-route-types.test.js.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.d.ts +0 -2
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +0 -1
- package/dist/build/__tests__/per-router-manifest.test.js +0 -308
- package/dist/build/__tests__/per-router-manifest.test.js.map +0 -1
- package/dist/build/generate-manifest.d.ts +0 -81
- package/dist/build/generate-manifest.d.ts.map +0 -1
- package/dist/build/generate-manifest.js +0 -276
- package/dist/build/generate-manifest.js.map +0 -1
- package/dist/build/generate-route-types.d.ts +0 -115
- package/dist/build/generate-route-types.d.ts.map +0 -1
- package/dist/build/generate-route-types.js +0 -740
- package/dist/build/generate-route-types.js.map +0 -1
- package/dist/build/index.d.ts +0 -21
- package/dist/build/index.d.ts.map +0 -1
- package/dist/build/index.js +0 -21
- package/dist/build/index.js.map +0 -1
- package/dist/build/route-trie.d.ts +0 -71
- package/dist/build/route-trie.d.ts.map +0 -1
- package/dist/build/route-trie.js +0 -175
- package/dist/build/route-trie.js.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.d.ts +0 -2
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +0 -1
- package/dist/cache/__tests__/cache-scope.test.js +0 -208
- package/dist/cache/__tests__/cache-scope.test.js.map +0 -1
- package/dist/cache/__tests__/document-cache.test.d.ts +0 -2
- package/dist/cache/__tests__/document-cache.test.d.ts.map +0 -1
- package/dist/cache/__tests__/document-cache.test.js +0 -345
- package/dist/cache/__tests__/document-cache.test.js.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-segment-store.test.js +0 -425
- package/dist/cache/__tests__/memory-segment-store.test.js.map +0 -1
- package/dist/cache/__tests__/memory-store.test.d.ts +0 -2
- package/dist/cache/__tests__/memory-store.test.d.ts.map +0 -1
- package/dist/cache/__tests__/memory-store.test.js +0 -367
- package/dist/cache/__tests__/memory-store.test.js.map +0 -1
- package/dist/cache/cache-scope.d.ts +0 -102
- package/dist/cache/cache-scope.d.ts.map +0 -1
- package/dist/cache/cache-scope.js +0 -440
- package/dist/cache/cache-scope.js.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +0 -2
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +0 -1
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +0 -330
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +0 -1
- package/dist/cache/cf/cf-cache-store.d.ts +0 -165
- package/dist/cache/cf/cf-cache-store.d.ts.map +0 -1
- package/dist/cache/cf/cf-cache-store.js +0 -242
- package/dist/cache/cf/cf-cache-store.js.map +0 -1
- package/dist/cache/cf/index.d.ts +0 -14
- package/dist/cache/cf/index.d.ts.map +0 -1
- package/dist/cache/cf/index.js +0 -17
- package/dist/cache/cf/index.js.map +0 -1
- package/dist/cache/document-cache.d.ts +0 -64
- package/dist/cache/document-cache.d.ts.map +0 -1
- package/dist/cache/document-cache.js +0 -228
- package/dist/cache/document-cache.js.map +0 -1
- package/dist/cache/index.d.ts +0 -19
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/index.js +0 -21
- package/dist/cache/index.js.map +0 -1
- package/dist/cache/memory-segment-store.d.ts +0 -110
- package/dist/cache/memory-segment-store.d.ts.map +0 -1
- package/dist/cache/memory-segment-store.js +0 -117
- package/dist/cache/memory-segment-store.js.map +0 -1
- package/dist/cache/memory-store.d.ts +0 -41
- package/dist/cache/memory-store.d.ts.map +0 -1
- package/dist/cache/memory-store.js +0 -191
- package/dist/cache/memory-store.js.map +0 -1
- package/dist/cache/types.d.ts +0 -317
- package/dist/cache/types.d.ts.map +0 -1
- package/dist/cache/types.js +0 -12
- package/dist/cache/types.js.map +0 -1
- package/dist/client.d.ts +0 -248
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -367
- package/dist/client.js.map +0 -1
- package/dist/client.rsc.d.ts +0 -26
- package/dist/client.rsc.d.ts.map +0 -1
- package/dist/client.rsc.js +0 -46
- package/dist/client.rsc.js.map +0 -1
- package/dist/component-utils.d.ts +0 -36
- package/dist/component-utils.d.ts.map +0 -1
- package/dist/component-utils.js +0 -61
- package/dist/component-utils.js.map +0 -1
- package/dist/components/DefaultDocument.d.ts +0 -13
- package/dist/components/DefaultDocument.d.ts.map +0 -1
- package/dist/components/DefaultDocument.js +0 -15
- package/dist/components/DefaultDocument.js.map +0 -1
- package/dist/debug.d.ts +0 -58
- package/dist/debug.d.ts.map +0 -1
- package/dist/debug.js +0 -157
- package/dist/debug.js.map +0 -1
- package/dist/default-error-boundary.d.ts +0 -11
- package/dist/default-error-boundary.d.ts.map +0 -1
- package/dist/default-error-boundary.js +0 -45
- package/dist/default-error-boundary.js.map +0 -1
- package/dist/deps/browser.d.ts +0 -2
- package/dist/deps/browser.d.ts.map +0 -1
- package/dist/deps/browser.js +0 -3
- package/dist/deps/browser.js.map +0 -1
- package/dist/deps/html-stream-client.d.ts +0 -2
- package/dist/deps/html-stream-client.d.ts.map +0 -1
- package/dist/deps/html-stream-client.js +0 -3
- package/dist/deps/html-stream-client.js.map +0 -1
- package/dist/deps/html-stream-server.d.ts +0 -2
- package/dist/deps/html-stream-server.d.ts.map +0 -1
- package/dist/deps/html-stream-server.js +0 -3
- package/dist/deps/html-stream-server.js.map +0 -1
- package/dist/deps/rsc.d.ts +0 -2
- package/dist/deps/rsc.d.ts.map +0 -1
- package/dist/deps/rsc.js +0 -4
- package/dist/deps/rsc.js.map +0 -1
- package/dist/deps/ssr.d.ts +0 -2
- package/dist/deps/ssr.d.ts.map +0 -1
- package/dist/deps/ssr.js +0 -3
- package/dist/deps/ssr.js.map +0 -1
- package/dist/errors.d.ts +0 -174
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -241
- package/dist/errors.js.map +0 -1
- package/dist/handle.d.ts +0 -78
- package/dist/handle.d.ts.map +0 -1
- package/dist/handle.js +0 -82
- package/dist/handle.js.map +0 -1
- package/dist/handles/MetaTags.d.ts +0 -14
- package/dist/handles/MetaTags.d.ts.map +0 -1
- package/dist/handles/MetaTags.js +0 -136
- package/dist/handles/MetaTags.js.map +0 -1
- package/dist/handles/index.d.ts +0 -6
- package/dist/handles/index.d.ts.map +0 -1
- package/dist/handles/index.js +0 -6
- package/dist/handles/index.js.map +0 -1
- package/dist/handles/meta.d.ts +0 -39
- package/dist/handles/meta.d.ts.map +0 -1
- package/dist/handles/meta.js +0 -202
- package/dist/handles/meta.js.map +0 -1
- package/dist/host/__tests__/errors.test.d.ts +0 -2
- package/dist/host/__tests__/errors.test.d.ts.map +0 -1
- package/dist/host/__tests__/errors.test.js +0 -76
- package/dist/host/__tests__/errors.test.js.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-comprehensive.test.js +0 -732
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.d.ts +0 -2
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +0 -1
- package/dist/host/__tests__/pattern-matcher.test.js +0 -251
- package/dist/host/__tests__/pattern-matcher.test.js.map +0 -1
- package/dist/host/__tests__/router.test.d.ts +0 -2
- package/dist/host/__tests__/router.test.d.ts.map +0 -1
- package/dist/host/__tests__/router.test.js +0 -241
- package/dist/host/__tests__/router.test.js.map +0 -1
- package/dist/host/__tests__/testing.test.d.ts +0 -2
- package/dist/host/__tests__/testing.test.d.ts.map +0 -1
- package/dist/host/__tests__/testing.test.js +0 -64
- package/dist/host/__tests__/testing.test.js.map +0 -1
- package/dist/host/__tests__/utils.test.d.ts +0 -2
- package/dist/host/__tests__/utils.test.d.ts.map +0 -1
- package/dist/host/__tests__/utils.test.js +0 -29
- package/dist/host/__tests__/utils.test.js.map +0 -1
- package/dist/host/cookie-handler.d.ts +0 -34
- package/dist/host/cookie-handler.d.ts.map +0 -1
- package/dist/host/cookie-handler.js +0 -124
- package/dist/host/cookie-handler.js.map +0 -1
- package/dist/host/errors.d.ts +0 -56
- package/dist/host/errors.d.ts.map +0 -1
- package/dist/host/errors.js +0 -79
- package/dist/host/errors.js.map +0 -1
- package/dist/host/index.d.ts +0 -29
- package/dist/host/index.d.ts.map +0 -1
- package/dist/host/index.js +0 -32
- package/dist/host/index.js.map +0 -1
- package/dist/host/pattern-matcher.d.ts +0 -36
- package/dist/host/pattern-matcher.d.ts.map +0 -1
- package/dist/host/pattern-matcher.js +0 -172
- package/dist/host/pattern-matcher.js.map +0 -1
- package/dist/host/router.d.ts +0 -26
- package/dist/host/router.d.ts.map +0 -1
- package/dist/host/router.js +0 -218
- package/dist/host/router.js.map +0 -1
- package/dist/host/testing.d.ts +0 -36
- package/dist/host/testing.d.ts.map +0 -1
- package/dist/host/testing.js +0 -55
- package/dist/host/testing.js.map +0 -1
- package/dist/host/types.d.ts +0 -115
- package/dist/host/types.d.ts.map +0 -1
- package/dist/host/types.js +0 -7
- package/dist/host/types.js.map +0 -1
- package/dist/host/utils.d.ts +0 -21
- package/dist/host/utils.d.ts.map +0 -1
- package/dist/host/utils.js +0 -23
- package/dist/host/utils.js.map +0 -1
- package/dist/href-client.d.ts +0 -131
- package/dist/href-client.d.ts.map +0 -1
- package/dist/href-client.js +0 -64
- package/dist/href-client.js.map +0 -1
- package/dist/href-context.d.ts +0 -29
- package/dist/href-context.d.ts.map +0 -1
- package/dist/href-context.js +0 -21
- package/dist/href-context.js.map +0 -1
- package/dist/index.d.ts +0 -73
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -91
- package/dist/index.js.map +0 -1
- package/dist/index.rsc.d.ts +0 -32
- package/dist/index.rsc.d.ts.map +0 -1
- package/dist/index.rsc.js +0 -40
- package/dist/index.rsc.js.map +0 -1
- package/dist/internal-debug.d.ts +0 -2
- package/dist/internal-debug.d.ts.map +0 -1
- package/dist/internal-debug.js +0 -5
- package/dist/internal-debug.js.map +0 -1
- package/dist/loader.d.ts +0 -14
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -20
- package/dist/loader.js.map +0 -1
- package/dist/loader.rsc.d.ts +0 -19
- package/dist/loader.rsc.d.ts.map +0 -1
- package/dist/loader.rsc.js +0 -99
- package/dist/loader.rsc.js.map +0 -1
- package/dist/network-error-thrower.d.ts +0 -17
- package/dist/network-error-thrower.d.ts.map +0 -1
- package/dist/network-error-thrower.js +0 -14
- package/dist/network-error-thrower.js.map +0 -1
- package/dist/outlet-context.d.ts +0 -13
- package/dist/outlet-context.d.ts.map +0 -1
- package/dist/outlet-context.js +0 -3
- package/dist/outlet-context.js.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.d.ts +0 -2
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +0 -1
- package/dist/prerender/__tests__/param-hash.test.js +0 -148
- package/dist/prerender/__tests__/param-hash.test.js.map +0 -1
- package/dist/prerender/param-hash.d.ts +0 -16
- package/dist/prerender/param-hash.d.ts.map +0 -1
- package/dist/prerender/param-hash.js +0 -36
- package/dist/prerender/param-hash.js.map +0 -1
- package/dist/prerender/store.d.ts +0 -38
- package/dist/prerender/store.d.ts.map +0 -1
- package/dist/prerender/store.js +0 -61
- package/dist/prerender/store.js.map +0 -1
- package/dist/prerender.d.ts +0 -66
- package/dist/prerender.d.ts.map +0 -1
- package/dist/prerender.js +0 -57
- package/dist/prerender.js.map +0 -1
- package/dist/reverse.d.ts +0 -196
- package/dist/reverse.d.ts.map +0 -1
- package/dist/reverse.js +0 -78
- package/dist/reverse.js.map +0 -1
- package/dist/root-error-boundary.d.ts +0 -33
- package/dist/root-error-boundary.d.ts.map +0 -1
- package/dist/root-error-boundary.js +0 -165
- package/dist/root-error-boundary.js.map +0 -1
- package/dist/route-content-wrapper.d.ts +0 -46
- package/dist/route-content-wrapper.d.ts.map +0 -1
- package/dist/route-content-wrapper.js +0 -77
- package/dist/route-content-wrapper.js.map +0 -1
- package/dist/route-definition.d.ts +0 -421
- package/dist/route-definition.d.ts.map +0 -1
- package/dist/route-definition.js +0 -868
- package/dist/route-definition.js.map +0 -1
- package/dist/route-map-builder.d.ts +0 -155
- package/dist/route-map-builder.d.ts.map +0 -1
- package/dist/route-map-builder.js +0 -237
- package/dist/route-map-builder.js.map +0 -1
- package/dist/route-types.d.ts +0 -165
- package/dist/route-types.d.ts.map +0 -1
- package/dist/route-types.js +0 -7
- package/dist/route-types.js.map +0 -1
- package/dist/router/__tests__/handler-context.test.d.ts +0 -2
- package/dist/router/__tests__/handler-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/handler-context.test.js +0 -65
- package/dist/router/__tests__/handler-context.test.js.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +0 -2
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +0 -1
- package/dist/router/__tests__/loader-cycle-detection.test.js +0 -221
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +0 -1
- package/dist/router/__tests__/match-context.test.d.ts +0 -2
- package/dist/router/__tests__/match-context.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-context.test.js +0 -92
- package/dist/router/__tests__/match-context.test.js.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.d.ts +0 -2
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-pipelines.test.js +0 -417
- package/dist/router/__tests__/match-pipelines.test.js.map +0 -1
- package/dist/router/__tests__/match-result.test.d.ts +0 -2
- package/dist/router/__tests__/match-result.test.d.ts.map +0 -1
- package/dist/router/__tests__/match-result.test.js +0 -457
- package/dist/router/__tests__/match-result.test.js.map +0 -1
- package/dist/router/__tests__/on-error.test.d.ts +0 -2
- package/dist/router/__tests__/on-error.test.d.ts.map +0 -1
- package/dist/router/__tests__/on-error.test.js +0 -678
- package/dist/router/__tests__/on-error.test.js.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.d.ts +0 -2
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +0 -1
- package/dist/router/__tests__/pattern-matching.test.js +0 -629
- package/dist/router/__tests__/pattern-matching.test.js.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +0 -2
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +0 -1
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +0 -155
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +0 -1
- package/dist/router/error-handling.d.ts +0 -77
- package/dist/router/error-handling.d.ts.map +0 -1
- package/dist/router/error-handling.js +0 -202
- package/dist/router/error-handling.js.map +0 -1
- package/dist/router/handler-context.d.ts +0 -20
- package/dist/router/handler-context.d.ts.map +0 -1
- package/dist/router/handler-context.js +0 -198
- package/dist/router/handler-context.js.map +0 -1
- package/dist/router/intercept-resolution.d.ts +0 -66
- package/dist/router/intercept-resolution.d.ts.map +0 -1
- package/dist/router/intercept-resolution.js +0 -246
- package/dist/router/intercept-resolution.js.map +0 -1
- package/dist/router/loader-resolution.d.ts +0 -64
- package/dist/router/loader-resolution.d.ts.map +0 -1
- package/dist/router/loader-resolution.js +0 -284
- package/dist/router/loader-resolution.js.map +0 -1
- package/dist/router/logging.d.ts +0 -15
- package/dist/router/logging.d.ts.map +0 -1
- package/dist/router/logging.js +0 -99
- package/dist/router/logging.js.map +0 -1
- package/dist/router/manifest.d.ts +0 -22
- package/dist/router/manifest.d.ts.map +0 -1
- package/dist/router/manifest.js +0 -181
- package/dist/router/manifest.js.map +0 -1
- package/dist/router/match-api.d.ts +0 -35
- package/dist/router/match-api.d.ts.map +0 -1
- package/dist/router/match-api.js +0 -406
- package/dist/router/match-api.js.map +0 -1
- package/dist/router/match-context.d.ts +0 -206
- package/dist/router/match-context.d.ts.map +0 -1
- package/dist/router/match-context.js +0 -17
- package/dist/router/match-context.js.map +0 -1
- package/dist/router/match-middleware/background-revalidation.d.ts +0 -127
- package/dist/router/match-middleware/background-revalidation.d.ts.map +0 -1
- package/dist/router/match-middleware/background-revalidation.js +0 -75
- package/dist/router/match-middleware/background-revalidation.js.map +0 -1
- package/dist/router/match-middleware/cache-lookup.d.ts +0 -112
- package/dist/router/match-middleware/cache-lookup.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-lookup.js +0 -257
- package/dist/router/match-middleware/cache-lookup.js.map +0 -1
- package/dist/router/match-middleware/cache-store.d.ts +0 -113
- package/dist/router/match-middleware/cache-store.d.ts.map +0 -1
- package/dist/router/match-middleware/cache-store.js +0 -108
- package/dist/router/match-middleware/cache-store.js.map +0 -1
- package/dist/router/match-middleware/index.d.ts +0 -81
- package/dist/router/match-middleware/index.d.ts.map +0 -1
- package/dist/router/match-middleware/index.js +0 -80
- package/dist/router/match-middleware/index.js.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.d.ts +0 -117
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/intercept-resolution.js +0 -134
- package/dist/router/match-middleware/intercept-resolution.js.map +0 -1
- package/dist/router/match-middleware/segment-resolution.d.ts +0 -99
- package/dist/router/match-middleware/segment-resolution.d.ts.map +0 -1
- package/dist/router/match-middleware/segment-resolution.js +0 -53
- package/dist/router/match-middleware/segment-resolution.js.map +0 -1
- package/dist/router/match-pipelines.d.ts +0 -147
- package/dist/router/match-pipelines.d.ts.map +0 -1
- package/dist/router/match-pipelines.js +0 -82
- package/dist/router/match-pipelines.js.map +0 -1
- package/dist/router/match-result.d.ts +0 -126
- package/dist/router/match-result.d.ts.map +0 -1
- package/dist/router/match-result.js +0 -93
- package/dist/router/match-result.js.map +0 -1
- package/dist/router/metrics.d.ts +0 -20
- package/dist/router/metrics.d.ts.map +0 -1
- package/dist/router/metrics.js +0 -47
- package/dist/router/metrics.js.map +0 -1
- package/dist/router/middleware.d.ts +0 -249
- package/dist/router/middleware.d.ts.map +0 -1
- package/dist/router/middleware.js +0 -434
- package/dist/router/middleware.js.map +0 -1
- package/dist/router/middleware.test.d.ts +0 -2
- package/dist/router/middleware.test.d.ts.map +0 -1
- package/dist/router/middleware.test.js +0 -816
- package/dist/router/middleware.test.js.map +0 -1
- package/dist/router/pattern-matching.d.ts +0 -149
- package/dist/router/pattern-matching.d.ts.map +0 -1
- package/dist/router/pattern-matching.js +0 -349
- package/dist/router/pattern-matching.js.map +0 -1
- package/dist/router/revalidation.d.ts +0 -44
- package/dist/router/revalidation.d.ts.map +0 -1
- package/dist/router/revalidation.js +0 -147
- package/dist/router/revalidation.js.map +0 -1
- package/dist/router/router-context.d.ts +0 -135
- package/dist/router/router-context.d.ts.map +0 -1
- package/dist/router/router-context.js +0 -36
- package/dist/router/router-context.js.map +0 -1
- package/dist/router/segment-resolution.d.ts +0 -127
- package/dist/router/segment-resolution.d.ts.map +0 -1
- package/dist/router/segment-resolution.js +0 -919
- package/dist/router/segment-resolution.js.map +0 -1
- package/dist/router/trie-matching.d.ts +0 -40
- package/dist/router/trie-matching.d.ts.map +0 -1
- package/dist/router/trie-matching.js +0 -127
- package/dist/router/trie-matching.js.map +0 -1
- package/dist/router/types.d.ts +0 -136
- package/dist/router/types.d.ts.map +0 -1
- package/dist/router/types.js +0 -7
- package/dist/router/types.js.map +0 -1
- package/dist/router.d.ts +0 -753
- package/dist/router.d.ts.map +0 -1
- package/dist/router.gen.d.ts +0 -6
- package/dist/router.gen.d.ts.map +0 -1
- package/dist/router.gen.js +0 -6
- package/dist/router.gen.js.map +0 -1
- package/dist/router.js +0 -1304
- package/dist/router.js.map +0 -1
- package/dist/rsc/__tests__/helpers.test.d.ts +0 -2
- package/dist/rsc/__tests__/helpers.test.d.ts.map +0 -1
- package/dist/rsc/__tests__/helpers.test.js +0 -140
- package/dist/rsc/__tests__/helpers.test.js.map +0 -1
- package/dist/rsc/handler.d.ts +0 -45
- package/dist/rsc/handler.d.ts.map +0 -1
- package/dist/rsc/handler.js +0 -1172
- package/dist/rsc/handler.js.map +0 -1
- package/dist/rsc/helpers.d.ts +0 -16
- package/dist/rsc/helpers.d.ts.map +0 -1
- package/dist/rsc/helpers.js +0 -55
- package/dist/rsc/helpers.js.map +0 -1
- package/dist/rsc/index.d.ts +0 -22
- package/dist/rsc/index.d.ts.map +0 -1
- package/dist/rsc/index.js +0 -23
- package/dist/rsc/index.js.map +0 -1
- package/dist/rsc/nonce.d.ts +0 -9
- package/dist/rsc/nonce.d.ts.map +0 -1
- package/dist/rsc/nonce.js +0 -18
- package/dist/rsc/nonce.js.map +0 -1
- package/dist/rsc/types.d.ts +0 -206
- package/dist/rsc/types.d.ts.map +0 -1
- package/dist/rsc/types.js +0 -8
- package/dist/rsc/types.js.map +0 -1
- package/dist/search-params.d.ts +0 -103
- package/dist/search-params.d.ts.map +0 -1
- package/dist/search-params.js +0 -74
- package/dist/search-params.js.map +0 -1
- package/dist/segment-system.d.ts +0 -75
- package/dist/segment-system.d.ts.map +0 -1
- package/dist/segment-system.js +0 -336
- package/dist/segment-system.js.map +0 -1
- package/dist/server/context.d.ts +0 -245
- package/dist/server/context.d.ts.map +0 -1
- package/dist/server/context.js +0 -197
- package/dist/server/context.js.map +0 -1
- package/dist/server/fetchable-loader-store.d.ts +0 -18
- package/dist/server/fetchable-loader-store.d.ts.map +0 -1
- package/dist/server/fetchable-loader-store.js +0 -18
- package/dist/server/fetchable-loader-store.js.map +0 -1
- package/dist/server/handle-store.d.ts +0 -85
- package/dist/server/handle-store.d.ts.map +0 -1
- package/dist/server/handle-store.js +0 -142
- package/dist/server/handle-store.js.map +0 -1
- package/dist/server/loader-registry.d.ts +0 -55
- package/dist/server/loader-registry.d.ts.map +0 -1
- package/dist/server/loader-registry.js +0 -132
- package/dist/server/loader-registry.js.map +0 -1
- package/dist/server/request-context.d.ts +0 -226
- package/dist/server/request-context.d.ts.map +0 -1
- package/dist/server/request-context.js +0 -290
- package/dist/server/request-context.js.map +0 -1
- package/dist/server/root-layout.d.ts +0 -4
- package/dist/server/root-layout.d.ts.map +0 -1
- package/dist/server/root-layout.js +0 -5
- package/dist/server/root-layout.js.map +0 -1
- package/dist/server.d.ts +0 -15
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -20
- package/dist/server.js.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +0 -2
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +0 -1
- package/dist/ssr/__tests__/ssr-handler.test.js +0 -132
- package/dist/ssr/__tests__/ssr-handler.test.js.map +0 -1
- package/dist/ssr/index.d.ts +0 -98
- package/dist/ssr/index.d.ts.map +0 -1
- package/dist/ssr/index.js +0 -158
- package/dist/ssr/index.js.map +0 -1
- package/dist/static-handler.d.ts +0 -50
- package/dist/static-handler.d.ts.map +0 -1
- package/dist/static-handler.gen.d.ts +0 -5
- package/dist/static-handler.gen.d.ts.map +0 -1
- package/dist/static-handler.gen.js +0 -5
- package/dist/static-handler.gen.js.map +0 -1
- package/dist/static-handler.js +0 -29
- package/dist/static-handler.js.map +0 -1
- package/dist/theme/ThemeProvider.d.ts +0 -20
- package/dist/theme/ThemeProvider.d.ts.map +0 -1
- package/dist/theme/ThemeProvider.js +0 -240
- package/dist/theme/ThemeProvider.js.map +0 -1
- package/dist/theme/ThemeScript.d.ts +0 -48
- package/dist/theme/ThemeScript.d.ts.map +0 -1
- package/dist/theme/ThemeScript.js +0 -13
- package/dist/theme/ThemeScript.js.map +0 -1
- package/dist/theme/__tests__/theme.test.d.ts +0 -2
- package/dist/theme/__tests__/theme.test.d.ts.map +0 -1
- package/dist/theme/__tests__/theme.test.js +0 -103
- package/dist/theme/__tests__/theme.test.js.map +0 -1
- package/dist/theme/constants.d.ts +0 -29
- package/dist/theme/constants.d.ts.map +0 -1
- package/dist/theme/constants.js +0 -48
- package/dist/theme/constants.js.map +0 -1
- package/dist/theme/index.d.ts +0 -31
- package/dist/theme/index.d.ts.map +0 -1
- package/dist/theme/index.js +0 -36
- package/dist/theme/index.js.map +0 -1
- package/dist/theme/theme-context.d.ts +0 -40
- package/dist/theme/theme-context.d.ts.map +0 -1
- package/dist/theme/theme-context.js +0 -60
- package/dist/theme/theme-context.js.map +0 -1
- package/dist/theme/theme-script.d.ts +0 -27
- package/dist/theme/theme-script.d.ts.map +0 -1
- package/dist/theme/theme-script.js +0 -147
- package/dist/theme/theme-script.js.map +0 -1
- package/dist/theme/types.d.ts +0 -163
- package/dist/theme/types.d.ts.map +0 -1
- package/dist/theme/types.js +0 -11
- package/dist/theme/types.js.map +0 -1
- package/dist/theme/use-theme.d.ts +0 -12
- package/dist/theme/use-theme.d.ts.map +0 -1
- package/dist/theme/use-theme.js +0 -40
- package/dist/theme/use-theme.js.map +0 -1
- package/dist/types.d.ts +0 -1479
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -10
- package/dist/types.js.map +0 -1
- package/dist/urls.d.ts +0 -441
- package/dist/urls.d.ts.map +0 -1
- package/dist/urls.gen.d.ts +0 -8
- package/dist/urls.gen.d.ts.map +0 -1
- package/dist/urls.gen.js +0 -8
- package/dist/urls.gen.js.map +0 -1
- package/dist/urls.js +0 -443
- package/dist/urls.js.map +0 -1
- package/dist/use-loader.d.ts +0 -127
- package/dist/use-loader.d.ts.map +0 -1
- package/dist/use-loader.js +0 -237
- package/dist/use-loader.js.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +0 -2
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +0 -1
- package/dist/vite/__tests__/ast-handler-extract.test.js +0 -294
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-id-utils.test.js +0 -224
- package/dist/vite/__tests__/expose-id-utils.test.js.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-internal-ids.test.js +0 -647
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.d.ts +0 -2
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +0 -1
- package/dist/vite/__tests__/expose-router-id.test.js +0 -39
- package/dist/vite/__tests__/expose-router-id.test.js.map +0 -1
- package/dist/vite/ast-handler-extract.d.ts +0 -49
- package/dist/vite/ast-handler-extract.d.ts.map +0 -1
- package/dist/vite/ast-handler-extract.js +0 -249
- package/dist/vite/ast-handler-extract.js.map +0 -1
- package/dist/vite/expose-action-id.d.ts +0 -19
- package/dist/vite/expose-action-id.d.ts.map +0 -1
- package/dist/vite/expose-action-id.js +0 -250
- package/dist/vite/expose-action-id.js.map +0 -1
- package/dist/vite/expose-id-utils.d.ts +0 -69
- package/dist/vite/expose-id-utils.d.ts.map +0 -1
- package/dist/vite/expose-id-utils.js +0 -289
- package/dist/vite/expose-id-utils.js.map +0 -1
- package/dist/vite/expose-internal-ids.d.ts +0 -22
- package/dist/vite/expose-internal-ids.d.ts.map +0 -1
- package/dist/vite/expose-internal-ids.js +0 -886
- package/dist/vite/expose-internal-ids.js.map +0 -1
- package/dist/vite/index.d.ts +0 -149
- package/dist/vite/index.d.ts.map +0 -1
- package/dist/vite/index.js.map +0 -1
- package/dist/vite/index.named-routes.gen.ts +0 -103
- package/dist/vite/package-resolution.d.ts +0 -43
- package/dist/vite/package-resolution.d.ts.map +0 -1
- package/dist/vite/package-resolution.js +0 -112
- package/dist/vite/package-resolution.js.map +0 -1
- package/dist/vite/virtual-entries.d.ts +0 -25
- package/dist/vite/virtual-entries.d.ts.map +0 -1
- package/dist/vite/virtual-entries.js +0 -110
- package/dist/vite/virtual-entries.js.map +0 -1
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.f2d1a2f1",
|
|
1749
1869
|
description: "Django-inspired RSC router with composable URL patterns",
|
|
1750
1870
|
keywords: [
|
|
1751
1871
|
"react",
|
|
@@ -1878,22 +1998,24 @@ 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",
|
|
2011
|
+
debug: "^4.4.1",
|
|
1891
2012
|
"magic-string": "^0.30.17",
|
|
1892
2013
|
picomatch: "^4.0.3",
|
|
1893
2014
|
"rsc-html-stream": "^0.0.7"
|
|
1894
2015
|
},
|
|
1895
2016
|
devDependencies: {
|
|
1896
2017
|
"@playwright/test": "^1.49.1",
|
|
2018
|
+
"@types/debug": "^4.1.12",
|
|
1897
2019
|
"@types/node": "^24.10.1",
|
|
1898
2020
|
"@types/react": "catalog:",
|
|
1899
2021
|
"@types/react-dom": "catalog:",
|
|
@@ -1907,7 +2029,7 @@ var package_default = {
|
|
|
1907
2029
|
},
|
|
1908
2030
|
peerDependencies: {
|
|
1909
2031
|
"@cloudflare/vite-plugin": "^1.25.0",
|
|
1910
|
-
"@vitejs/plugin-rsc": "^0.5.
|
|
2032
|
+
"@vitejs/plugin-rsc": "^0.5.23",
|
|
1911
2033
|
react: "^18.0.0 || ^19.0.0",
|
|
1912
2034
|
vite: "^7.3.0"
|
|
1913
2035
|
},
|
|
@@ -1922,6 +2044,7 @@ var package_default = {
|
|
|
1922
2044
|
};
|
|
1923
2045
|
|
|
1924
2046
|
// src/vite/utils/package-resolution.ts
|
|
2047
|
+
var require2 = createRequire(import.meta.url);
|
|
1925
2048
|
var VIRTUAL_PACKAGE_NAME = "@rangojs/router";
|
|
1926
2049
|
function getPublishedPackageName() {
|
|
1927
2050
|
return package_default.name;
|
|
@@ -1962,6 +2085,20 @@ function getPackageAliases() {
|
|
|
1962
2085
|
}
|
|
1963
2086
|
return aliases;
|
|
1964
2087
|
}
|
|
2088
|
+
function getVendorAliases() {
|
|
2089
|
+
const specs = [
|
|
2090
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.edge",
|
|
2091
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
|
|
2092
|
+
];
|
|
2093
|
+
const aliases = {};
|
|
2094
|
+
for (const spec of specs) {
|
|
2095
|
+
try {
|
|
2096
|
+
aliases[spec] = require2.resolve(spec);
|
|
2097
|
+
} catch {
|
|
2098
|
+
}
|
|
2099
|
+
}
|
|
2100
|
+
return aliases;
|
|
2101
|
+
}
|
|
1965
2102
|
|
|
1966
2103
|
// src/build/route-types/param-extraction.ts
|
|
1967
2104
|
function extractParamsFromPattern(pattern) {
|
|
@@ -2095,31 +2232,7 @@ declare global {
|
|
|
2095
2232
|
}
|
|
2096
2233
|
|
|
2097
2234
|
// src/build/route-types/scan-filter.ts
|
|
2098
|
-
import { join, relative } from "node:path";
|
|
2099
2235
|
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
2236
|
|
|
2124
2237
|
// src/build/route-types/per-module-writer.ts
|
|
2125
2238
|
import ts4 from "typescript";
|
|
@@ -2341,7 +2454,7 @@ function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSche
|
|
|
2341
2454
|
}
|
|
2342
2455
|
return routeMap;
|
|
2343
2456
|
}
|
|
2344
|
-
function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut) {
|
|
2457
|
+
function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut, inlineBlock) {
|
|
2345
2458
|
visited = visited ?? /* @__PURE__ */ new Set();
|
|
2346
2459
|
const realPath = resolve2(filePath);
|
|
2347
2460
|
const key = variableName ? `${realPath}:${variableName}` : realPath;
|
|
@@ -2357,7 +2470,9 @@ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagno
|
|
|
2357
2470
|
return { routes: {}, searchSchemas: {} };
|
|
2358
2471
|
}
|
|
2359
2472
|
let block;
|
|
2360
|
-
if (
|
|
2473
|
+
if (inlineBlock) {
|
|
2474
|
+
block = inlineBlock;
|
|
2475
|
+
} else if (variableName) {
|
|
2361
2476
|
const extracted = extractUrlsBlockForVariable(source, variableName);
|
|
2362
2477
|
if (!extracted) return { routes: {}, searchSchemas: {} };
|
|
2363
2478
|
block = extracted;
|
|
@@ -2386,7 +2501,7 @@ import {
|
|
|
2386
2501
|
readdirSync
|
|
2387
2502
|
} from "node:fs";
|
|
2388
2503
|
import {
|
|
2389
|
-
join
|
|
2504
|
+
join,
|
|
2390
2505
|
dirname as dirname2,
|
|
2391
2506
|
resolve as resolve3,
|
|
2392
2507
|
sep,
|
|
@@ -2406,7 +2521,7 @@ function countPublicRouteEntries(source) {
|
|
|
2406
2521
|
}
|
|
2407
2522
|
var ROUTER_CALL_PATTERN = /\bcreateRouter\s*[<(]/;
|
|
2408
2523
|
function isRoutableSourceFile(name) {
|
|
2409
|
-
return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.");
|
|
2524
|
+
return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.") && !name.includes(".test.") && !name.includes(".spec.");
|
|
2410
2525
|
}
|
|
2411
2526
|
function findRouterFilesRecursive(dir, filter, results) {
|
|
2412
2527
|
let entries;
|
|
@@ -2421,9 +2536,10 @@ function findRouterFilesRecursive(dir, filter, results) {
|
|
|
2421
2536
|
const childDirs = [];
|
|
2422
2537
|
const routerFilesInDir = [];
|
|
2423
2538
|
for (const entry of entries) {
|
|
2424
|
-
const fullPath =
|
|
2539
|
+
const fullPath = join(dir, entry.name);
|
|
2425
2540
|
if (entry.isDirectory()) {
|
|
2426
|
-
if (entry.name === "node_modules" || entry.name.startsWith("."))
|
|
2541
|
+
if (entry.name === "node_modules" || entry.name === "dist" || entry.name === "coverage" || entry.name === "__tests__" || entry.name === "__mocks__" || entry.name.startsWith("."))
|
|
2542
|
+
continue;
|
|
2427
2543
|
childDirs.push(fullPath);
|
|
2428
2544
|
continue;
|
|
2429
2545
|
}
|
|
@@ -2475,7 +2591,7 @@ Router root: ${conflict.ancestor}
|
|
|
2475
2591
|
Nested router: ${conflict.nested}
|
|
2476
2592
|
Move the nested router into a sibling directory or configure it as a separate app root.`;
|
|
2477
2593
|
}
|
|
2478
|
-
function
|
|
2594
|
+
function extractUrlsFromRouter(code) {
|
|
2479
2595
|
const sourceFile = ts5.createSourceFile(
|
|
2480
2596
|
"router.tsx",
|
|
2481
2597
|
code,
|
|
@@ -2489,24 +2605,70 @@ function extractUrlsVariableFromRouter(code) {
|
|
|
2489
2605
|
const callee = node.expression;
|
|
2490
2606
|
return ts5.isIdentifier(callee) && callee.text === "createRouter";
|
|
2491
2607
|
}
|
|
2608
|
+
function isInlineBuilder(node) {
|
|
2609
|
+
return ts5.isArrowFunction(node) || ts5.isFunctionExpression(node);
|
|
2610
|
+
}
|
|
2611
|
+
function isRoutesOnCreateRouter(node) {
|
|
2612
|
+
if (!ts5.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "routes")
|
|
2613
|
+
return false;
|
|
2614
|
+
let inner = node.expression.expression;
|
|
2615
|
+
while (ts5.isCallExpression(inner) && ts5.isPropertyAccessExpression(inner.expression)) {
|
|
2616
|
+
inner = inner.expression.expression;
|
|
2617
|
+
}
|
|
2618
|
+
return isCreateRouterCall(inner);
|
|
2619
|
+
}
|
|
2492
2620
|
function visit(node) {
|
|
2493
2621
|
if (result) return;
|
|
2494
|
-
if (ts5.isCallExpression(node) &&
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
}
|
|
2499
|
-
|
|
2500
|
-
result = node.arguments[0].text;
|
|
2501
|
-
return;
|
|
2622
|
+
if (ts5.isCallExpression(node) && node.arguments.length >= 1 && isRoutesOnCreateRouter(node)) {
|
|
2623
|
+
const arg = node.arguments[0];
|
|
2624
|
+
if (ts5.isIdentifier(arg)) {
|
|
2625
|
+
result = { kind: "variable", name: arg.text };
|
|
2626
|
+
} else if (isInlineBuilder(arg)) {
|
|
2627
|
+
result = { kind: "inline", block: arg.getText(sourceFile) };
|
|
2502
2628
|
}
|
|
2629
|
+
return;
|
|
2503
2630
|
}
|
|
2504
2631
|
if (isCreateRouterCall(node)) {
|
|
2505
2632
|
const callExpr = node;
|
|
2506
|
-
for (const
|
|
2633
|
+
for (const callArg of callExpr.arguments) {
|
|
2634
|
+
if (ts5.isObjectLiteralExpression(callArg)) {
|
|
2635
|
+
for (const prop of callArg.properties) {
|
|
2636
|
+
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls") {
|
|
2637
|
+
if (ts5.isIdentifier(prop.initializer)) {
|
|
2638
|
+
result = { kind: "variable", name: prop.initializer.text };
|
|
2639
|
+
} else if (isInlineBuilder(prop.initializer)) {
|
|
2640
|
+
result = {
|
|
2641
|
+
kind: "inline",
|
|
2642
|
+
block: prop.initializer.getText(sourceFile)
|
|
2643
|
+
};
|
|
2644
|
+
}
|
|
2645
|
+
return;
|
|
2646
|
+
}
|
|
2647
|
+
}
|
|
2648
|
+
}
|
|
2649
|
+
}
|
|
2650
|
+
}
|
|
2651
|
+
ts5.forEachChild(node, visit);
|
|
2652
|
+
}
|
|
2653
|
+
visit(sourceFile);
|
|
2654
|
+
return result;
|
|
2655
|
+
}
|
|
2656
|
+
function extractBasenameFromRouter(code) {
|
|
2657
|
+
const sourceFile = ts5.createSourceFile(
|
|
2658
|
+
"router.tsx",
|
|
2659
|
+
code,
|
|
2660
|
+
ts5.ScriptTarget.Latest,
|
|
2661
|
+
true,
|
|
2662
|
+
ts5.ScriptKind.TSX
|
|
2663
|
+
);
|
|
2664
|
+
let result;
|
|
2665
|
+
function visit(node) {
|
|
2666
|
+
if (result !== void 0) return;
|
|
2667
|
+
if (ts5.isCallExpression(node) && ts5.isIdentifier(node.expression) && node.expression.text === "createRouter") {
|
|
2668
|
+
for (const arg of node.arguments) {
|
|
2507
2669
|
if (ts5.isObjectLiteralExpression(arg)) {
|
|
2508
2670
|
for (const prop of arg.properties) {
|
|
2509
|
-
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "
|
|
2671
|
+
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "basename" && ts5.isStringLiteral(prop.initializer)) {
|
|
2510
2672
|
result = prop.initializer.text;
|
|
2511
2673
|
return;
|
|
2512
2674
|
}
|
|
@@ -2519,6 +2681,19 @@ function extractUrlsVariableFromRouter(code) {
|
|
|
2519
2681
|
visit(sourceFile);
|
|
2520
2682
|
return result;
|
|
2521
2683
|
}
|
|
2684
|
+
function applyBasenameToRoutes(result, basename3) {
|
|
2685
|
+
const prefixed = {};
|
|
2686
|
+
for (const [name, pattern] of Object.entries(result.routes)) {
|
|
2687
|
+
if (pattern === "/") {
|
|
2688
|
+
prefixed[name] = basename3;
|
|
2689
|
+
} else if (basename3.endsWith("/") && pattern.startsWith("/")) {
|
|
2690
|
+
prefixed[name] = basename3 + pattern.slice(1);
|
|
2691
|
+
} else {
|
|
2692
|
+
prefixed[name] = basename3 + pattern;
|
|
2693
|
+
}
|
|
2694
|
+
}
|
|
2695
|
+
return { routes: prefixed, searchSchemas: result.searchSchemas };
|
|
2696
|
+
}
|
|
2522
2697
|
function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
2523
2698
|
let routerSource;
|
|
2524
2699
|
try {
|
|
@@ -2526,19 +2701,40 @@ function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
|
2526
2701
|
} catch {
|
|
2527
2702
|
return { routes: {}, searchSchemas: {} };
|
|
2528
2703
|
}
|
|
2529
|
-
const
|
|
2530
|
-
if (!
|
|
2704
|
+
const extraction = extractUrlsFromRouter(routerSource);
|
|
2705
|
+
if (!extraction) {
|
|
2531
2706
|
return { routes: {}, searchSchemas: {} };
|
|
2532
2707
|
}
|
|
2533
|
-
const
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2708
|
+
const rawBasename = extractBasenameFromRouter(routerSource);
|
|
2709
|
+
const basename3 = rawBasename ? ("/" + rawBasename.replace(/^\/+|\/+$/g, "")).replace(/^\/$/, "") : void 0;
|
|
2710
|
+
let result;
|
|
2711
|
+
if (extraction.kind === "inline") {
|
|
2712
|
+
result = buildCombinedRouteMapWithSearch(
|
|
2713
|
+
routerFilePath,
|
|
2714
|
+
void 0,
|
|
2715
|
+
void 0,
|
|
2716
|
+
void 0,
|
|
2717
|
+
extraction.block
|
|
2718
|
+
);
|
|
2719
|
+
} else {
|
|
2720
|
+
const imported = resolveImportedVariable(routerSource, extraction.name);
|
|
2721
|
+
if (imported) {
|
|
2722
|
+
const targetFile = resolveImportPath(imported.specifier, routerFilePath);
|
|
2723
|
+
if (!targetFile) {
|
|
2724
|
+
return { routes: {}, searchSchemas: {} };
|
|
2725
|
+
}
|
|
2726
|
+
result = buildCombinedRouteMapWithSearch(
|
|
2727
|
+
targetFile,
|
|
2728
|
+
imported.exportedName
|
|
2729
|
+
);
|
|
2730
|
+
} else {
|
|
2731
|
+
result = buildCombinedRouteMapWithSearch(routerFilePath, extraction.name);
|
|
2538
2732
|
}
|
|
2539
|
-
return buildCombinedRouteMapWithSearch(targetFile, imported.exportedName);
|
|
2540
2733
|
}
|
|
2541
|
-
|
|
2734
|
+
if (basename3) {
|
|
2735
|
+
result = applyBasenameToRoutes(result, basename3);
|
|
2736
|
+
}
|
|
2737
|
+
return result;
|
|
2542
2738
|
}
|
|
2543
2739
|
function findRouterFiles(root, filter) {
|
|
2544
2740
|
const result = [];
|
|
@@ -2547,7 +2743,7 @@ function findRouterFiles(root, filter) {
|
|
|
2547
2743
|
}
|
|
2548
2744
|
function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
|
|
2549
2745
|
try {
|
|
2550
|
-
const oldCombinedPath =
|
|
2746
|
+
const oldCombinedPath = join(root, "src", "named-routes.gen.ts");
|
|
2551
2747
|
if (existsSync3(oldCombinedPath)) {
|
|
2552
2748
|
unlinkSync(oldCombinedPath);
|
|
2553
2749
|
console.log(
|
|
@@ -2563,31 +2759,21 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
|
|
|
2563
2759
|
throw new Error(formatNestedRouterConflictError(nestedRouterConflict));
|
|
2564
2760
|
}
|
|
2565
2761
|
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);
|
|
2762
|
+
const result = buildCombinedRouteMapForRouterFile(routerFilePath);
|
|
2763
|
+
if (Object.keys(result.routes).length === 0 && Object.keys(result.searchSchemas).length === 0) {
|
|
2764
|
+
let routerSource;
|
|
2765
|
+
try {
|
|
2766
|
+
routerSource = readFileSync2(routerFilePath, "utf-8");
|
|
2767
|
+
} catch {
|
|
2768
|
+
continue;
|
|
2769
|
+
}
|
|
2770
|
+
if (!extractUrlsFromRouter(routerSource)) continue;
|
|
2585
2771
|
}
|
|
2586
2772
|
const routerBasename = pathBasename(routerFilePath).replace(
|
|
2587
2773
|
/\.(tsx?|jsx?)$/,
|
|
2588
2774
|
""
|
|
2589
2775
|
);
|
|
2590
|
-
const outPath =
|
|
2776
|
+
const outPath = join(
|
|
2591
2777
|
dirname2(routerFilePath),
|
|
2592
2778
|
`${routerBasename}.named-routes.gen.ts`
|
|
2593
2779
|
);
|
|
@@ -2717,8 +2903,9 @@ function createVersionPlugin() {
|
|
|
2717
2903
|
let isDev = false;
|
|
2718
2904
|
let server = null;
|
|
2719
2905
|
const clientModuleSignatures = /* @__PURE__ */ new Map();
|
|
2906
|
+
let versionCounter = 0;
|
|
2720
2907
|
const bumpVersion = (reason) => {
|
|
2721
|
-
currentVersion = Date.now().toString(16);
|
|
2908
|
+
currentVersion = Date.now().toString(16) + String(++versionCounter);
|
|
2722
2909
|
console.log(`[rsc-router] ${reason}, version updated: ${currentVersion}`);
|
|
2723
2910
|
const rscEnv = server?.environments?.rsc;
|
|
2724
2911
|
const versionMod = rscEnv?.moduleGraph?.getModuleById(
|
|
@@ -2774,6 +2961,9 @@ function createVersionPlugin() {
|
|
|
2774
2961
|
if (!isDev) return;
|
|
2775
2962
|
const isRscModule = this.environment?.name === "rsc";
|
|
2776
2963
|
if (!isRscModule) return;
|
|
2964
|
+
if (ctx.modules.length === 1 && ctx.modules[0].id === "\0" + VIRTUAL_IDS.version) {
|
|
2965
|
+
return;
|
|
2966
|
+
}
|
|
2777
2967
|
if (isCodeModule(ctx.file)) {
|
|
2778
2968
|
const filePath = normalizeModuleId(ctx.file);
|
|
2779
2969
|
const previousSignature = clientModuleSignatures.get(filePath);
|
|
@@ -2803,6 +2993,98 @@ function createVersionPlugin() {
|
|
|
2803
2993
|
|
|
2804
2994
|
// src/vite/utils/shared-utils.ts
|
|
2805
2995
|
import * as Vite from "vite";
|
|
2996
|
+
|
|
2997
|
+
// src/vite/plugins/performance-tracks.ts
|
|
2998
|
+
import { readFile } from "node:fs/promises";
|
|
2999
|
+
|
|
3000
|
+
// src/vite/debug.ts
|
|
3001
|
+
import debugFactory from "debug";
|
|
3002
|
+
if (process.env.INTERNAL_RANGO_DEBUG) {
|
|
3003
|
+
const existing = debugFactory.disable();
|
|
3004
|
+
debugFactory.enable(existing ? `${existing},rango:*` : "rango:*");
|
|
3005
|
+
}
|
|
3006
|
+
function createRangoDebugger(namespace) {
|
|
3007
|
+
const primary = debugFactory(namespace);
|
|
3008
|
+
const shadow = debugFactory(`vite:${namespace}`);
|
|
3009
|
+
if (primary.enabled) return primary;
|
|
3010
|
+
if (shadow.enabled) return shadow;
|
|
3011
|
+
return void 0;
|
|
3012
|
+
}
|
|
3013
|
+
async function timed(debug2, label, fn) {
|
|
3014
|
+
if (!debug2) return await fn();
|
|
3015
|
+
const start = performance.now();
|
|
3016
|
+
try {
|
|
3017
|
+
return await fn();
|
|
3018
|
+
} finally {
|
|
3019
|
+
debug2("%s (%sms)", label, (performance.now() - start).toFixed(1));
|
|
3020
|
+
}
|
|
3021
|
+
}
|
|
3022
|
+
function timedSync(debug2, label, fn) {
|
|
3023
|
+
if (!debug2) return fn();
|
|
3024
|
+
const start = performance.now();
|
|
3025
|
+
try {
|
|
3026
|
+
return fn();
|
|
3027
|
+
} finally {
|
|
3028
|
+
debug2("%s (%sms)", label, (performance.now() - start).toFixed(1));
|
|
3029
|
+
}
|
|
3030
|
+
}
|
|
3031
|
+
|
|
3032
|
+
// src/vite/plugins/performance-tracks.ts
|
|
3033
|
+
var debug = createRangoDebugger("rango:transform");
|
|
3034
|
+
var RSDW_PATCH_RE = /((?:var|let|const)\s+\w+\s*=\s*root\._children\s*,\s*(\w+)\s*=\s*root\._debugInfo\s*[;,])/;
|
|
3035
|
+
function buildPatchReplacement(match, debugInfoVar) {
|
|
3036
|
+
return `${match}
|
|
3037
|
+
if (${debugInfoVar} && 0 === ${debugInfoVar}.length && "fulfilled" === root.status) {
|
|
3038
|
+
var _resolved = "function" === typeof resolveLazy ? resolveLazy(root.value) : root.value;
|
|
3039
|
+
if ("object" === typeof _resolved && null !== _resolved && isArrayImpl(_resolved._debugInfo)) {
|
|
3040
|
+
${debugInfoVar} = _resolved._debugInfo;
|
|
3041
|
+
}
|
|
3042
|
+
}`;
|
|
3043
|
+
}
|
|
3044
|
+
function patchRsdwClientDebugInfoRecovery(code) {
|
|
3045
|
+
const match = code.match(RSDW_PATCH_RE);
|
|
3046
|
+
if (!match) {
|
|
3047
|
+
return { code, debugInfoVar: null };
|
|
3048
|
+
}
|
|
3049
|
+
return {
|
|
3050
|
+
code: code.replace(match[1], buildPatchReplacement(match[1], match[2])),
|
|
3051
|
+
debugInfoVar: match[2]
|
|
3052
|
+
};
|
|
3053
|
+
}
|
|
3054
|
+
function performanceTracksOptimizeDepsPlugin() {
|
|
3055
|
+
return {
|
|
3056
|
+
name: "@rangojs/router:performance-tracks-optimize-deps",
|
|
3057
|
+
setup(build) {
|
|
3058
|
+
build.onLoad(
|
|
3059
|
+
{
|
|
3060
|
+
filter: /react-server-dom-webpack-client\.browser\.(development|production)\.js$/
|
|
3061
|
+
},
|
|
3062
|
+
async (args) => {
|
|
3063
|
+
const code = await readFile(args.path, "utf8");
|
|
3064
|
+
const patched = patchRsdwClientDebugInfoRecovery(code);
|
|
3065
|
+
return {
|
|
3066
|
+
contents: patched.code,
|
|
3067
|
+
loader: "js"
|
|
3068
|
+
};
|
|
3069
|
+
}
|
|
3070
|
+
);
|
|
3071
|
+
}
|
|
3072
|
+
};
|
|
3073
|
+
}
|
|
3074
|
+
function performanceTracksPlugin() {
|
|
3075
|
+
return {
|
|
3076
|
+
name: "@rangojs/router:performance-tracks",
|
|
3077
|
+
transform(code, id) {
|
|
3078
|
+
if (!id.includes("react-server-dom") || !id.includes("client")) return;
|
|
3079
|
+
const patched = patchRsdwClientDebugInfoRecovery(code);
|
|
3080
|
+
if (!patched.debugInfoVar) return;
|
|
3081
|
+
debug?.("patched RSDW client (var: %s)", patched.debugInfoVar);
|
|
3082
|
+
return patched.code;
|
|
3083
|
+
}
|
|
3084
|
+
};
|
|
3085
|
+
}
|
|
3086
|
+
|
|
3087
|
+
// src/vite/utils/shared-utils.ts
|
|
2806
3088
|
var versionEsbuildPlugin = {
|
|
2807
3089
|
name: "@rangojs/router-version",
|
|
2808
3090
|
setup(build) {
|
|
@@ -2820,7 +3102,7 @@ var versionEsbuildPlugin = {
|
|
|
2820
3102
|
}
|
|
2821
3103
|
};
|
|
2822
3104
|
var sharedEsbuildOptions = {
|
|
2823
|
-
plugins: [versionEsbuildPlugin]
|
|
3105
|
+
plugins: [versionEsbuildPlugin, performanceTracksOptimizeDepsPlugin()]
|
|
2824
3106
|
};
|
|
2825
3107
|
function createVirtualEntriesPlugin(entries, routerPathRef) {
|
|
2826
3108
|
const virtualModules = {};
|
|
@@ -2903,11 +3185,11 @@ ${dim} \u2571${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2
|
|
|
2903
3185
|
${dim} ${reset}${bold}\u2551 \u2551${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2727. \u2571${reset}
|
|
2904
3186
|
${dim} ${reset}${bold}\u2554\u2557 \u2551 \u2551 \u2551 \u2551${reset}${dim} * \u2571${reset}
|
|
2905
3187
|
${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}
|
|
3188
|
+
${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
3189
|
${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
3190
|
${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\
|
|
3191
|
+
${dim} * ${reset}${bold}\u2551 \u2551${reset}${dim} * \u2727. \u2571${reset}
|
|
3192
|
+
${dim} ${reset}${bold}\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550${reset}${dim} \u2726 *${reset}
|
|
2911
3193
|
|
|
2912
3194
|
v${version} \xB7 ${preset} \xB7 ${mode}
|
|
2913
3195
|
`;
|
|
@@ -3026,6 +3308,8 @@ function createCjsToEsmPlugin() {
|
|
|
3026
3308
|
import { createServer as createViteServer } from "vite";
|
|
3027
3309
|
import { resolve as resolve8 } from "node:path";
|
|
3028
3310
|
import { readFileSync as readFileSync6 } from "node:fs";
|
|
3311
|
+
import { createRequire as createRequire2, register } from "node:module";
|
|
3312
|
+
import { pathToFileURL } from "node:url";
|
|
3029
3313
|
|
|
3030
3314
|
// src/vite/plugins/virtual-stub-plugin.ts
|
|
3031
3315
|
function createVirtualStubPlugin() {
|
|
@@ -3051,8 +3335,115 @@ function createVirtualStubPlugin() {
|
|
|
3051
3335
|
};
|
|
3052
3336
|
}
|
|
3053
3337
|
|
|
3338
|
+
// src/vite/plugins/cloudflare-protocol-stub.ts
|
|
3339
|
+
var VIRTUAL_PREFIX = "virtual:rango-cloudflare-stub-";
|
|
3340
|
+
var NULL_PREFIX = "\0" + VIRTUAL_PREFIX;
|
|
3341
|
+
var CF_PREFIX = "cloudflare:";
|
|
3342
|
+
var BUILD_ENV_GLOBAL_KEY = "__rango_build_env__";
|
|
3343
|
+
var SOURCE_EXT_RE = /\.[mc]?[jt]sx?$/;
|
|
3344
|
+
var IMPORT_NODE_TYPES = /* @__PURE__ */ new Set([
|
|
3345
|
+
"ImportDeclaration",
|
|
3346
|
+
"ImportExpression",
|
|
3347
|
+
"ExportNamedDeclaration",
|
|
3348
|
+
"ExportAllDeclaration"
|
|
3349
|
+
]);
|
|
3350
|
+
var STUBS = {
|
|
3351
|
+
"cloudflare:workers": `
|
|
3352
|
+
export class DurableObject { constructor(_ctx, _env) {} }
|
|
3353
|
+
export class WorkerEntrypoint { constructor(_ctx, _env) {} }
|
|
3354
|
+
export class WorkflowEntrypoint { constructor(_ctx, _env) {} }
|
|
3355
|
+
export class RpcTarget {}
|
|
3356
|
+
export const env = globalThis[${JSON.stringify(BUILD_ENV_GLOBAL_KEY)}] ?? {};
|
|
3357
|
+
export default {};
|
|
3358
|
+
`,
|
|
3359
|
+
"cloudflare:email": `
|
|
3360
|
+
export class EmailMessage { constructor(_from, _to, _raw) {} }
|
|
3361
|
+
export default {};
|
|
3362
|
+
`,
|
|
3363
|
+
"cloudflare:sockets": `
|
|
3364
|
+
export function connect() { return {}; }
|
|
3365
|
+
export default {};
|
|
3366
|
+
`,
|
|
3367
|
+
"cloudflare:workflows": `
|
|
3368
|
+
export class NonRetryableError extends Error {
|
|
3369
|
+
constructor(message, name) { super(message); this.name = name ?? "NonRetryableError"; }
|
|
3370
|
+
}
|
|
3371
|
+
export default {};
|
|
3372
|
+
`
|
|
3373
|
+
};
|
|
3374
|
+
var FALLBACK_STUB = `export default {};
|
|
3375
|
+
`;
|
|
3376
|
+
function createCloudflareProtocolStubPlugin() {
|
|
3377
|
+
return {
|
|
3378
|
+
name: "@rangojs/router:cloudflare-protocol-stub",
|
|
3379
|
+
transform(code, id) {
|
|
3380
|
+
const cleanId = id.split("?")[0] ?? id;
|
|
3381
|
+
if (!SOURCE_EXT_RE.test(cleanId)) return null;
|
|
3382
|
+
if (!code.includes(CF_PREFIX)) return null;
|
|
3383
|
+
let ast;
|
|
3384
|
+
try {
|
|
3385
|
+
ast = this.parse(code);
|
|
3386
|
+
} catch {
|
|
3387
|
+
return null;
|
|
3388
|
+
}
|
|
3389
|
+
const hits = [];
|
|
3390
|
+
walk(ast, (node) => {
|
|
3391
|
+
if (!IMPORT_NODE_TYPES.has(node.type)) return;
|
|
3392
|
+
const source = node.source;
|
|
3393
|
+
if (!source || source.type !== "Literal") return;
|
|
3394
|
+
if (typeof source.value !== "string") return;
|
|
3395
|
+
if (!source.value.startsWith(CF_PREFIX)) return;
|
|
3396
|
+
if (typeof source.start !== "number" || typeof source.end !== "number")
|
|
3397
|
+
return;
|
|
3398
|
+
hits.push({
|
|
3399
|
+
start: source.start,
|
|
3400
|
+
end: source.end,
|
|
3401
|
+
value: source.value
|
|
3402
|
+
});
|
|
3403
|
+
});
|
|
3404
|
+
if (hits.length === 0) return null;
|
|
3405
|
+
hits.sort((a, b) => b.start - a.start);
|
|
3406
|
+
let out = code;
|
|
3407
|
+
for (const hit of hits) {
|
|
3408
|
+
const submodule = hit.value.slice(CF_PREFIX.length);
|
|
3409
|
+
const quote = code[hit.start] === "'" ? "'" : '"';
|
|
3410
|
+
out = out.slice(0, hit.start) + quote + VIRTUAL_PREFIX + submodule + quote + out.slice(hit.end);
|
|
3411
|
+
}
|
|
3412
|
+
return { code: out, map: null };
|
|
3413
|
+
},
|
|
3414
|
+
resolveId(id) {
|
|
3415
|
+
if (id.startsWith(VIRTUAL_PREFIX)) {
|
|
3416
|
+
return "\0" + id;
|
|
3417
|
+
}
|
|
3418
|
+
return null;
|
|
3419
|
+
},
|
|
3420
|
+
load(id) {
|
|
3421
|
+
if (!id.startsWith(NULL_PREFIX)) return null;
|
|
3422
|
+
const submodule = id.slice(NULL_PREFIX.length);
|
|
3423
|
+
const specifier = CF_PREFIX + submodule;
|
|
3424
|
+
return STUBS[specifier] ?? FALLBACK_STUB;
|
|
3425
|
+
}
|
|
3426
|
+
};
|
|
3427
|
+
}
|
|
3428
|
+
function walk(node, visit) {
|
|
3429
|
+
if (!node || typeof node !== "object") return;
|
|
3430
|
+
if (Array.isArray(node)) {
|
|
3431
|
+
for (const child of node) walk(child, visit);
|
|
3432
|
+
return;
|
|
3433
|
+
}
|
|
3434
|
+
const n = node;
|
|
3435
|
+
if (typeof n.type !== "string") return;
|
|
3436
|
+
visit(n);
|
|
3437
|
+
for (const key in n) {
|
|
3438
|
+
if (key === "loc" || key === "start" || key === "end" || key === "range") {
|
|
3439
|
+
continue;
|
|
3440
|
+
}
|
|
3441
|
+
walk(n[key], visit);
|
|
3442
|
+
}
|
|
3443
|
+
}
|
|
3444
|
+
|
|
3054
3445
|
// src/vite/plugins/client-ref-hashing.ts
|
|
3055
|
-
import { relative
|
|
3446
|
+
import { relative } from "node:path";
|
|
3056
3447
|
import { createHash as createHash2 } from "node:crypto";
|
|
3057
3448
|
var CLIENT_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-package-proxy/";
|
|
3058
3449
|
var CLIENT_IN_SERVER_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-in-server-package-proxy/";
|
|
@@ -3065,10 +3456,10 @@ function computeProductionHash(projectRoot, refKey) {
|
|
|
3065
3456
|
const absPath = decodeURIComponent(
|
|
3066
3457
|
refKey.slice(CLIENT_IN_SERVER_PKG_PROXY_PREFIX.length)
|
|
3067
3458
|
);
|
|
3068
|
-
toHash =
|
|
3459
|
+
toHash = relative(projectRoot, absPath).replaceAll("\\", "/");
|
|
3069
3460
|
} else if (refKey.startsWith(FS_PREFIX)) {
|
|
3070
3461
|
const absPath = refKey.slice(FS_PREFIX.length - 1);
|
|
3071
|
-
toHash =
|
|
3462
|
+
toHash = relative(projectRoot, absPath).replaceAll("\\", "/");
|
|
3072
3463
|
} else if (refKey.startsWith("/")) {
|
|
3073
3464
|
toHash = refKey.slice(1);
|
|
3074
3465
|
} else {
|
|
@@ -3209,8 +3600,8 @@ function createDiscoveryState(entryPath, opts) {
|
|
|
3209
3600
|
perRouterManifestDataMap: /* @__PURE__ */ new Map(),
|
|
3210
3601
|
prerenderManifestEntries: null,
|
|
3211
3602
|
staticManifestEntries: null,
|
|
3212
|
-
|
|
3213
|
-
|
|
3603
|
+
handlerChunkInfoMap: /* @__PURE__ */ new Map(),
|
|
3604
|
+
staticHandlerChunkInfoMap: /* @__PURE__ */ new Map(),
|
|
3214
3605
|
rscEntryFileName: null,
|
|
3215
3606
|
resolvedPrerenderModules: void 0,
|
|
3216
3607
|
resolvedStaticModules: void 0,
|
|
@@ -3293,8 +3684,17 @@ function jsonParseExpression(value) {
|
|
|
3293
3684
|
}
|
|
3294
3685
|
|
|
3295
3686
|
// src/context-var.ts
|
|
3687
|
+
var NON_CACHEABLE_KEYS = /* @__PURE__ */ Symbol.for(
|
|
3688
|
+
"rango:non-cacheable-keys"
|
|
3689
|
+
);
|
|
3690
|
+
function getNonCacheableKeys(variables) {
|
|
3691
|
+
if (!variables[NON_CACHEABLE_KEYS]) {
|
|
3692
|
+
variables[NON_CACHEABLE_KEYS] = /* @__PURE__ */ new Set();
|
|
3693
|
+
}
|
|
3694
|
+
return variables[NON_CACHEABLE_KEYS];
|
|
3695
|
+
}
|
|
3296
3696
|
var FORBIDDEN_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
|
|
3297
|
-
function contextSet(variables, keyOrVar, value) {
|
|
3697
|
+
function contextSet(variables, keyOrVar, value, options) {
|
|
3298
3698
|
if (typeof keyOrVar === "string") {
|
|
3299
3699
|
if (FORBIDDEN_KEYS.has(keyOrVar)) {
|
|
3300
3700
|
throw new Error(
|
|
@@ -3302,8 +3702,14 @@ function contextSet(variables, keyOrVar, value) {
|
|
|
3302
3702
|
);
|
|
3303
3703
|
}
|
|
3304
3704
|
variables[keyOrVar] = value;
|
|
3705
|
+
if (options?.cache === false) {
|
|
3706
|
+
getNonCacheableKeys(variables).add(keyOrVar);
|
|
3707
|
+
}
|
|
3305
3708
|
} else {
|
|
3306
3709
|
variables[keyOrVar.key] = value;
|
|
3710
|
+
if (options?.cache === false) {
|
|
3711
|
+
getNonCacheableKeys(variables).add(keyOrVar.key);
|
|
3712
|
+
}
|
|
3307
3713
|
}
|
|
3308
3714
|
}
|
|
3309
3715
|
|
|
@@ -3326,13 +3732,31 @@ function encodePathParam(value) {
|
|
|
3326
3732
|
}
|
|
3327
3733
|
function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
|
|
3328
3734
|
let result = pattern;
|
|
3735
|
+
let hadOmittedOptional = false;
|
|
3329
3736
|
for (const [key, value] of Object.entries(params)) {
|
|
3330
3737
|
const escaped = escapeRegExp2(key);
|
|
3331
|
-
|
|
3332
|
-
|
|
3333
|
-
|
|
3334
|
-
|
|
3335
|
-
|
|
3738
|
+
if (value === "") {
|
|
3739
|
+
result = result.replace(
|
|
3740
|
+
new RegExp(`:${escaped}(\\([^)]*\\))?(?!\\?)`),
|
|
3741
|
+
""
|
|
3742
|
+
);
|
|
3743
|
+
result = result.replace(`*${key}`, "");
|
|
3744
|
+
} else {
|
|
3745
|
+
result = result.replace(
|
|
3746
|
+
new RegExp(`:${escaped}(\\([^)]*\\))?\\??`),
|
|
3747
|
+
encode(value)
|
|
3748
|
+
);
|
|
3749
|
+
result = result.replace(`*${key}`, encode(value));
|
|
3750
|
+
}
|
|
3751
|
+
}
|
|
3752
|
+
result = result.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?\?/g, () => {
|
|
3753
|
+
hadOmittedOptional = true;
|
|
3754
|
+
return "";
|
|
3755
|
+
});
|
|
3756
|
+
if (hadOmittedOptional) {
|
|
3757
|
+
const hadTrailingSlash = pattern.length > 1 && pattern.endsWith("/");
|
|
3758
|
+
result = result.replace(/\/\/+/g, "/").replace(/\/+$/, "") || "/";
|
|
3759
|
+
if (hadTrailingSlash && !result.endsWith("/")) result += "/";
|
|
3336
3760
|
}
|
|
3337
3761
|
return result;
|
|
3338
3762
|
}
|
|
@@ -3442,84 +3866,126 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3442
3866
|
if (!params) return pattern;
|
|
3443
3867
|
return substituteRouteParams(pattern, params);
|
|
3444
3868
|
};
|
|
3869
|
+
let resolvedRoutes = 0;
|
|
3870
|
+
let totalDynamic = 0;
|
|
3445
3871
|
for (const { manifest } of allManifests) {
|
|
3446
3872
|
if (!manifest.prerenderRoutes) continue;
|
|
3447
|
-
const defs = manifest._prerenderDefs || {};
|
|
3448
3873
|
for (const routeName of manifest.prerenderRoutes) {
|
|
3449
3874
|
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
|
-
|
|
3875
|
+
if (pattern && (pattern.includes(":") || pattern.includes("*"))) {
|
|
3876
|
+
totalDynamic++;
|
|
3877
|
+
}
|
|
3878
|
+
}
|
|
3879
|
+
}
|
|
3880
|
+
const paramsStart = performance.now();
|
|
3881
|
+
const progressInterval = totalDynamic > 0 ? setInterval(() => {
|
|
3882
|
+
const elapsed = ((performance.now() - paramsStart) / 1e3).toFixed(1);
|
|
3883
|
+
console.log(
|
|
3884
|
+
`[rsc-router] Resolving prerender params... ${resolvedRoutes}/${totalDynamic} routes (${elapsed}s)`
|
|
3885
|
+
);
|
|
3886
|
+
}, 5e3) : void 0;
|
|
3887
|
+
try {
|
|
3888
|
+
for (const { manifest } of allManifests) {
|
|
3889
|
+
if (!manifest.prerenderRoutes) continue;
|
|
3890
|
+
const defs = manifest._prerenderDefs || {};
|
|
3891
|
+
const passthroughSet = new Set(manifest.passthroughRoutes || []);
|
|
3892
|
+
for (const routeName of manifest.prerenderRoutes) {
|
|
3893
|
+
const pattern = manifest.routeManifest[routeName];
|
|
3894
|
+
if (!pattern) continue;
|
|
3895
|
+
const def = defs[routeName];
|
|
3896
|
+
const isPassthroughRoute = passthroughSet.has(routeName);
|
|
3897
|
+
const hasDynamic = pattern.includes(":") || pattern.includes("*");
|
|
3898
|
+
if (!hasDynamic) {
|
|
3899
|
+
entries.push({
|
|
3900
|
+
urlPath: pattern.replace(/\/$/, "") || "/",
|
|
3901
|
+
routeName,
|
|
3902
|
+
concurrency: 1,
|
|
3903
|
+
isPassthroughRoute
|
|
3904
|
+
});
|
|
3905
|
+
} else {
|
|
3906
|
+
if (def?.getParams) {
|
|
3907
|
+
try {
|
|
3908
|
+
const buildVars = {};
|
|
3909
|
+
const buildEnv = state.resolvedBuildEnv;
|
|
3910
|
+
const getParamsCtx = {
|
|
3911
|
+
build: true,
|
|
3912
|
+
dev: !state.isBuildMode,
|
|
3913
|
+
set: ((keyOrVar, value) => {
|
|
3914
|
+
contextSet(buildVars, keyOrVar, value);
|
|
3915
|
+
}),
|
|
3916
|
+
reverse: getParamsReverse,
|
|
3917
|
+
get env() {
|
|
3918
|
+
if (buildEnv !== void 0) return buildEnv;
|
|
3919
|
+
throw new Error(
|
|
3920
|
+
"[rsc-router] ctx.env is not available during build-time getParams(). Configure buildEnv in your rango() plugin options to enable build-time env access."
|
|
3921
|
+
);
|
|
3485
3922
|
}
|
|
3923
|
+
};
|
|
3924
|
+
const paramsList = await def.getParams(getParamsCtx);
|
|
3925
|
+
const concurrency = def.options?.concurrency ?? 1;
|
|
3926
|
+
const hasBuildVars = Object.keys(buildVars).length > 0 || Object.getOwnPropertySymbols(buildVars).length > 0;
|
|
3927
|
+
for (const params of paramsList) {
|
|
3928
|
+
let url = substituteRouteParams(
|
|
3929
|
+
pattern,
|
|
3930
|
+
params,
|
|
3931
|
+
encodePathParam
|
|
3932
|
+
);
|
|
3933
|
+
if (url.includes("*")) {
|
|
3934
|
+
const wildcardValue = params["*"] ?? params.splat;
|
|
3935
|
+
if (wildcardValue !== void 0) {
|
|
3936
|
+
url = url.replace(
|
|
3937
|
+
/\*[^/]*$/,
|
|
3938
|
+
encodePathParam(wildcardValue)
|
|
3939
|
+
);
|
|
3940
|
+
}
|
|
3941
|
+
}
|
|
3942
|
+
entries.push({
|
|
3943
|
+
urlPath: url.replace(/\/$/, "") || "/",
|
|
3944
|
+
routeName,
|
|
3945
|
+
concurrency,
|
|
3946
|
+
...hasBuildVars ? { buildVars } : {},
|
|
3947
|
+
isPassthroughRoute
|
|
3948
|
+
});
|
|
3486
3949
|
}
|
|
3487
|
-
|
|
3488
|
-
|
|
3489
|
-
|
|
3490
|
-
|
|
3491
|
-
|
|
3492
|
-
|
|
3493
|
-
|
|
3494
|
-
|
|
3495
|
-
|
|
3496
|
-
|
|
3497
|
-
|
|
3498
|
-
|
|
3499
|
-
|
|
3500
|
-
|
|
3501
|
-
|
|
3502
|
-
|
|
3503
|
-
|
|
3504
|
-
|
|
3505
|
-
|
|
3506
|
-
true
|
|
3950
|
+
resolvedRoutes++;
|
|
3951
|
+
} catch (err) {
|
|
3952
|
+
resolvedRoutes++;
|
|
3953
|
+
if (err.name === "Skip") {
|
|
3954
|
+
console.log(
|
|
3955
|
+
`[rsc-router] SKIP route "${routeName}" - ${err.message}`
|
|
3956
|
+
);
|
|
3957
|
+
notifyOnError(
|
|
3958
|
+
registry,
|
|
3959
|
+
err,
|
|
3960
|
+
"prerender",
|
|
3961
|
+
routeName,
|
|
3962
|
+
void 0,
|
|
3963
|
+
true
|
|
3964
|
+
);
|
|
3965
|
+
continue;
|
|
3966
|
+
}
|
|
3967
|
+
console.error(
|
|
3968
|
+
`[rsc-router] Failed to get params for prerender route "${routeName}": ${err.message}`
|
|
3507
3969
|
);
|
|
3508
|
-
|
|
3970
|
+
notifyOnError(registry, err, "prerender", routeName);
|
|
3971
|
+
throw err;
|
|
3509
3972
|
}
|
|
3510
|
-
|
|
3511
|
-
|
|
3973
|
+
} else {
|
|
3974
|
+
console.warn(
|
|
3975
|
+
`[rsc-router] Dynamic prerender route "${routeName}" has no getParams(), skipping`
|
|
3512
3976
|
);
|
|
3513
|
-
notifyOnError(registry, err, "prerender", routeName);
|
|
3514
|
-
throw err;
|
|
3515
3977
|
}
|
|
3516
|
-
} else {
|
|
3517
|
-
console.warn(
|
|
3518
|
-
`[rsc-router] Dynamic prerender route "${routeName}" has no getParams(), skipping`
|
|
3519
|
-
);
|
|
3520
3978
|
}
|
|
3521
3979
|
}
|
|
3522
3980
|
}
|
|
3981
|
+
} finally {
|
|
3982
|
+
if (progressInterval) {
|
|
3983
|
+
clearInterval(progressInterval);
|
|
3984
|
+
const elapsed = ((performance.now() - paramsStart) / 1e3).toFixed(1);
|
|
3985
|
+
console.log(
|
|
3986
|
+
`[rsc-router] Resolved prerender params: ${resolvedRoutes}/${totalDynamic} routes (${elapsed}s)`
|
|
3987
|
+
);
|
|
3988
|
+
}
|
|
3523
3989
|
}
|
|
3524
3990
|
if (entries.length === 0) return;
|
|
3525
3991
|
const maxConcurrency = Math.max(...entries.map((e) => e.concurrency));
|
|
@@ -3546,7 +4012,8 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3546
4012
|
entry.urlPath,
|
|
3547
4013
|
{},
|
|
3548
4014
|
entry.buildVars,
|
|
3549
|
-
entry.isPassthroughRoute
|
|
4015
|
+
entry.isPassthroughRoute,
|
|
4016
|
+
state.resolvedBuildEnv
|
|
3550
4017
|
);
|
|
3551
4018
|
if (!result) continue;
|
|
3552
4019
|
if (result.passthrough) {
|
|
@@ -3670,7 +4137,9 @@ async function renderStaticHandlers(state, rscEnv, registry) {
|
|
|
3670
4137
|
const result = await routerInstance.renderStaticSegment(
|
|
3671
4138
|
def.handler,
|
|
3672
4139
|
def.$$id,
|
|
3673
|
-
def.$$routePrefix
|
|
4140
|
+
def.$$routePrefix,
|
|
4141
|
+
state.resolvedBuildEnv,
|
|
4142
|
+
!state.isBuildMode
|
|
3674
4143
|
);
|
|
3675
4144
|
if (result) {
|
|
3676
4145
|
const hasHandles = Object.keys(result.handles).length > 0;
|
|
@@ -3795,7 +4264,11 @@ async function discoverRouters(state, rscEnv) {
|
|
|
3795
4264
|
if (!router.urlpatterns || !generateManifestFull) {
|
|
3796
4265
|
continue;
|
|
3797
4266
|
}
|
|
3798
|
-
const manifest = generateManifestFull(
|
|
4267
|
+
const manifest = generateManifestFull(
|
|
4268
|
+
router.urlpatterns,
|
|
4269
|
+
routerMountIndex,
|
|
4270
|
+
router.__basename ? { urlPrefix: router.__basename } : void 0
|
|
4271
|
+
);
|
|
3799
4272
|
routerMountIndex++;
|
|
3800
4273
|
allManifests.push({ id, manifest });
|
|
3801
4274
|
const routeCount = Object.keys(manifest.routeManifest).length;
|
|
@@ -3937,7 +4410,7 @@ async function discoverRouters(state, rscEnv) {
|
|
|
3937
4410
|
}
|
|
3938
4411
|
|
|
3939
4412
|
// src/vite/discovery/route-types-writer.ts
|
|
3940
|
-
import { dirname as dirname3, basename, join as
|
|
4413
|
+
import { dirname as dirname3, basename, join as join2, resolve as resolve6 } from "node:path";
|
|
3941
4414
|
import { readFileSync as readFileSync4, writeFileSync as writeFileSync3, existsSync as existsSync5, unlinkSync as unlinkSync2 } from "node:fs";
|
|
3942
4415
|
function filterUserNamedRoutes(manifest) {
|
|
3943
4416
|
const filtered = {};
|
|
@@ -3958,7 +4431,7 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
|
|
|
3958
4431
|
/\.(tsx?|jsx?)$/,
|
|
3959
4432
|
""
|
|
3960
4433
|
);
|
|
3961
|
-
const outPath =
|
|
4434
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
3962
4435
|
try {
|
|
3963
4436
|
preContent.set(outPath, readFileSync4(outPath, "utf-8"));
|
|
3964
4437
|
} catch {
|
|
@@ -3971,7 +4444,7 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
|
|
|
3971
4444
|
/\.(tsx?|jsx?)$/,
|
|
3972
4445
|
""
|
|
3973
4446
|
);
|
|
3974
|
-
const outPath =
|
|
4447
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
3975
4448
|
if (!existsSync5(outPath)) continue;
|
|
3976
4449
|
try {
|
|
3977
4450
|
const content = readFileSync4(outPath, "utf-8");
|
|
@@ -3988,7 +4461,7 @@ function writeRouteTypesFiles(state) {
|
|
|
3988
4461
|
const entryDir = dirname3(
|
|
3989
4462
|
resolve6(state.projectRoot, state.resolvedEntryPath)
|
|
3990
4463
|
);
|
|
3991
|
-
const oldCombinedPath =
|
|
4464
|
+
const oldCombinedPath = join2(entryDir, "named-routes.gen.ts");
|
|
3992
4465
|
if (existsSync5(oldCombinedPath)) {
|
|
3993
4466
|
unlinkSync2(oldCombinedPath);
|
|
3994
4467
|
console.log(
|
|
@@ -4013,7 +4486,7 @@ Set an explicit \`id\` on createRouter() or check the call site.`
|
|
|
4013
4486
|
}
|
|
4014
4487
|
const routerDir = dirname3(sourceFile);
|
|
4015
4488
|
const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
|
|
4016
|
-
const outPath =
|
|
4489
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
4017
4490
|
const userRoutes = filterUserNamedRoutes(routeManifest);
|
|
4018
4491
|
let effectiveSearchSchemas = routeSearchSchemas;
|
|
4019
4492
|
if ((!effectiveSearchSchemas || Object.keys(effectiveSearchSchemas).length === 0) && sourceFile) {
|
|
@@ -4078,7 +4551,7 @@ function supplementGenFilesWithRuntimeRoutes(state) {
|
|
|
4078
4551
|
}
|
|
4079
4552
|
const routerDir = dirname3(sourceFile);
|
|
4080
4553
|
const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
|
|
4081
|
-
const outPath =
|
|
4554
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
4082
4555
|
const source = generateRouteTypesSource(
|
|
4083
4556
|
mergedRoutes,
|
|
4084
4557
|
Object.keys(mergedSearchSchemas).length > 0 ? mergedSearchSchemas : void 0
|
|
@@ -4092,7 +4565,7 @@ function supplementGenFilesWithRuntimeRoutes(state) {
|
|
|
4092
4565
|
}
|
|
4093
4566
|
|
|
4094
4567
|
// src/vite/discovery/virtual-module-codegen.ts
|
|
4095
|
-
import { dirname as dirname4, basename as basename2, join as
|
|
4568
|
+
import { dirname as dirname4, basename as basename2, join as join3 } from "node:path";
|
|
4096
4569
|
function generateRoutesManifestModule(state) {
|
|
4097
4570
|
const hasManifest = state.mergedRouteManifest && Object.keys(state.mergedRouteManifest).length > 0;
|
|
4098
4571
|
if (hasManifest) {
|
|
@@ -4107,7 +4580,7 @@ function generateRoutesManifestModule(state) {
|
|
|
4107
4580
|
/\.(tsx?|jsx?)$/,
|
|
4108
4581
|
""
|
|
4109
4582
|
);
|
|
4110
|
-
const genPath =
|
|
4583
|
+
const genPath = join3(
|
|
4111
4584
|
routerDir,
|
|
4112
4585
|
`${routerBasename}.named-routes.gen.js`
|
|
4113
4586
|
).replaceAll("\\", "/");
|
|
@@ -4204,7 +4677,7 @@ function generatePerRouterModule(state, routerId) {
|
|
|
4204
4677
|
/\.(tsx?|jsx?)$/,
|
|
4205
4678
|
""
|
|
4206
4679
|
);
|
|
4207
|
-
const genPath =
|
|
4680
|
+
const genPath = join3(
|
|
4208
4681
|
routerDir,
|
|
4209
4682
|
`${routerBasename}.named-routes.gen.js`
|
|
4210
4683
|
).replaceAll("\\", "/");
|
|
@@ -4244,48 +4717,45 @@ function postprocessBundle(state) {
|
|
|
4244
4717
|
);
|
|
4245
4718
|
const evictionTargets = [
|
|
4246
4719
|
{
|
|
4247
|
-
|
|
4720
|
+
infos: state.handlerChunkInfoMap.values(),
|
|
4248
4721
|
fnName: "Prerender",
|
|
4249
4722
|
brand: "prerenderHandler",
|
|
4250
4723
|
label: "handler code from RSC bundle"
|
|
4251
4724
|
},
|
|
4252
4725
|
{
|
|
4253
|
-
|
|
4726
|
+
infos: state.staticHandlerChunkInfoMap.values(),
|
|
4254
4727
|
fnName: "Static",
|
|
4255
4728
|
brand: "staticHandler",
|
|
4256
4729
|
label: "static handler code"
|
|
4257
4730
|
}
|
|
4258
4731
|
];
|
|
4259
4732
|
for (const target of evictionTargets) {
|
|
4260
|
-
|
|
4261
|
-
|
|
4262
|
-
|
|
4263
|
-
|
|
4264
|
-
|
|
4265
|
-
|
|
4266
|
-
|
|
4267
|
-
|
|
4268
|
-
|
|
4269
|
-
|
|
4270
|
-
|
|
4271
|
-
|
|
4272
|
-
|
|
4273
|
-
|
|
4274
|
-
|
|
4275
|
-
|
|
4276
|
-
|
|
4277
|
-
|
|
4278
|
-
|
|
4733
|
+
for (const info of target.infos) {
|
|
4734
|
+
const chunkPath = resolve7(state.projectRoot, "dist/rsc", info.fileName);
|
|
4735
|
+
try {
|
|
4736
|
+
const code = readFileSync5(chunkPath, "utf-8");
|
|
4737
|
+
const result = evictHandlerCode(
|
|
4738
|
+
code,
|
|
4739
|
+
info.exports,
|
|
4740
|
+
target.fnName,
|
|
4741
|
+
target.brand
|
|
4742
|
+
);
|
|
4743
|
+
if (result) {
|
|
4744
|
+
writeFileSync4(chunkPath, result.code);
|
|
4745
|
+
const savedKB = (result.savedBytes / 1024).toFixed(1);
|
|
4746
|
+
console.log(
|
|
4747
|
+
`[rsc-router] Evicted ${target.label} (${savedKB} KB saved): ${info.fileName}`
|
|
4748
|
+
);
|
|
4749
|
+
}
|
|
4750
|
+
} catch (replaceErr) {
|
|
4751
|
+
console.warn(
|
|
4752
|
+
`[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
|
|
4279
4753
|
);
|
|
4280
4754
|
}
|
|
4281
|
-
} catch (replaceErr) {
|
|
4282
|
-
console.warn(
|
|
4283
|
-
`[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
|
|
4284
|
-
);
|
|
4285
4755
|
}
|
|
4286
4756
|
}
|
|
4287
|
-
state.
|
|
4288
|
-
state.
|
|
4757
|
+
state.handlerChunkInfoMap.clear();
|
|
4758
|
+
state.staticHandlerChunkInfoMap.clear();
|
|
4289
4759
|
if (hasPrerenderData && existsSync6(rscEntryPath)) {
|
|
4290
4760
|
const rscCode = readFileSync5(rscEntryPath, "utf-8");
|
|
4291
4761
|
if (!rscCode.includes("__prerender-manifest.js")) {
|
|
@@ -4328,7 +4798,7 @@ function postprocessBundle(state) {
|
|
|
4328
4798
|
}
|
|
4329
4799
|
if (hasStaticData && existsSync6(rscEntryPath)) {
|
|
4330
4800
|
const rscCode = readFileSync5(rscEntryPath, "utf-8");
|
|
4331
|
-
if (!rscCode.includes("
|
|
4801
|
+
if (!rscCode.includes("__static-manifest.js")) {
|
|
4332
4802
|
try {
|
|
4333
4803
|
const manifestEntries = [];
|
|
4334
4804
|
let totalBytes = copyStagedBuildAssets(
|
|
@@ -4367,7 +4837,24 @@ function postprocessBundle(state) {
|
|
|
4367
4837
|
}
|
|
4368
4838
|
|
|
4369
4839
|
// src/vite/router-discovery.ts
|
|
4840
|
+
var debugDiscovery = createRangoDebugger("rango:discovery");
|
|
4841
|
+
var debugRoutes = createRangoDebugger("rango:routes");
|
|
4842
|
+
var loaderHookRegistered = false;
|
|
4843
|
+
function ensureCloudflareProtocolLoaderRegistered() {
|
|
4844
|
+
if (loaderHookRegistered) return;
|
|
4845
|
+
loaderHookRegistered = true;
|
|
4846
|
+
try {
|
|
4847
|
+
register(
|
|
4848
|
+
new URL("./plugins/cloudflare-protocol-loader-hook.mjs", import.meta.url)
|
|
4849
|
+
);
|
|
4850
|
+
} catch (err) {
|
|
4851
|
+
console.warn(
|
|
4852
|
+
`[rsc-router] Could not register Node ESM loader hook for cloudflare:* imports (${err?.message ?? err}). Falling back to Vite transform only.`
|
|
4853
|
+
);
|
|
4854
|
+
}
|
|
4855
|
+
}
|
|
4370
4856
|
async function createTempRscServer(state, options = {}) {
|
|
4857
|
+
ensureCloudflareProtocolLoaderRegistered();
|
|
4371
4858
|
const { default: rsc } = await import("@vitejs/plugin-rsc");
|
|
4372
4859
|
return createViteServer({
|
|
4373
4860
|
root: state.projectRoot,
|
|
@@ -4390,6 +4877,7 @@ async function createTempRscServer(state, options = {}) {
|
|
|
4390
4877
|
...options.forceBuild ? [hashClientRefs(state.projectRoot)] : [],
|
|
4391
4878
|
createVersionPlugin(),
|
|
4392
4879
|
createVirtualStubPlugin(),
|
|
4880
|
+
createCloudflareProtocolStubPlugin(),
|
|
4393
4881
|
// Dev prerender must use dev-mode IDs (path-based) to match the workerd
|
|
4394
4882
|
// runtime. forceBuild produces hashed IDs for production bundle consistency.
|
|
4395
4883
|
exposeInternalIds(options.forceBuild ? { forceBuild: true } : void 0),
|
|
@@ -4397,8 +4885,69 @@ async function createTempRscServer(state, options = {}) {
|
|
|
4397
4885
|
]
|
|
4398
4886
|
});
|
|
4399
4887
|
}
|
|
4888
|
+
async function resolveBuildEnv(option, factoryCtx) {
|
|
4889
|
+
if (!option) return null;
|
|
4890
|
+
if (option === "auto") {
|
|
4891
|
+
if (factoryCtx.preset !== "cloudflare") {
|
|
4892
|
+
throw new Error(
|
|
4893
|
+
'[rsc-router] buildEnv: "auto" is only supported with preset: "cloudflare". Use a factory function or plain object for other presets.'
|
|
4894
|
+
);
|
|
4895
|
+
}
|
|
4896
|
+
try {
|
|
4897
|
+
const userRequire = createRequire2(
|
|
4898
|
+
resolve8(factoryCtx.root, "package.json")
|
|
4899
|
+
);
|
|
4900
|
+
const wranglerPath = userRequire.resolve("wrangler");
|
|
4901
|
+
const { getPlatformProxy } = await import(pathToFileURL(wranglerPath).href);
|
|
4902
|
+
const proxy = await getPlatformProxy();
|
|
4903
|
+
return {
|
|
4904
|
+
env: proxy.env,
|
|
4905
|
+
dispose: proxy.dispose
|
|
4906
|
+
};
|
|
4907
|
+
} catch (err) {
|
|
4908
|
+
throw new Error(
|
|
4909
|
+
`[rsc-router] buildEnv: "auto" requires wrangler to be installed.
|
|
4910
|
+
Install it with: pnpm add -D wrangler
|
|
4911
|
+
${err.message}`
|
|
4912
|
+
);
|
|
4913
|
+
}
|
|
4914
|
+
}
|
|
4915
|
+
if (typeof option === "function") {
|
|
4916
|
+
return await option(factoryCtx);
|
|
4917
|
+
}
|
|
4918
|
+
return { env: option };
|
|
4919
|
+
}
|
|
4920
|
+
async function acquireBuildEnv(s, command, mode) {
|
|
4921
|
+
const option = s.opts?.buildEnv;
|
|
4922
|
+
if (!option) return false;
|
|
4923
|
+
const result = await resolveBuildEnv(option, {
|
|
4924
|
+
root: s.projectRoot,
|
|
4925
|
+
mode,
|
|
4926
|
+
command,
|
|
4927
|
+
preset: s.opts?.preset ?? "node"
|
|
4928
|
+
});
|
|
4929
|
+
if (!result) return false;
|
|
4930
|
+
s.resolvedBuildEnv = result.env;
|
|
4931
|
+
s.buildEnvDispose = result.dispose ?? null;
|
|
4932
|
+
globalThis[BUILD_ENV_GLOBAL_KEY] = result.env;
|
|
4933
|
+
return true;
|
|
4934
|
+
}
|
|
4935
|
+
async function releaseBuildEnv(s) {
|
|
4936
|
+
if (s.buildEnvDispose) {
|
|
4937
|
+
try {
|
|
4938
|
+
await s.buildEnvDispose();
|
|
4939
|
+
} catch (err) {
|
|
4940
|
+
console.warn(`[rsc-router] buildEnv dispose failed: ${err.message}`);
|
|
4941
|
+
}
|
|
4942
|
+
s.buildEnvDispose = null;
|
|
4943
|
+
}
|
|
4944
|
+
s.resolvedBuildEnv = void 0;
|
|
4945
|
+
delete globalThis[BUILD_ENV_GLOBAL_KEY];
|
|
4946
|
+
}
|
|
4400
4947
|
function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
4401
4948
|
const s = createDiscoveryState(entryPath, opts);
|
|
4949
|
+
let viteCommand = "build";
|
|
4950
|
+
let viteMode = "production";
|
|
4402
4951
|
return {
|
|
4403
4952
|
name: "@rangojs/router:discovery",
|
|
4404
4953
|
config() {
|
|
@@ -4407,31 +4956,13 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4407
4956
|
__RANGO_DEBUG__: JSON.stringify(!!process.env.INTERNAL_RANGO_DEBUG)
|
|
4408
4957
|
}
|
|
4409
4958
|
};
|
|
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
4959
|
return config;
|
|
4431
4960
|
},
|
|
4432
4961
|
configResolved(config) {
|
|
4433
4962
|
s.projectRoot = config.root;
|
|
4434
4963
|
s.isBuildMode = config.command === "build";
|
|
4964
|
+
viteCommand = config.command;
|
|
4965
|
+
viteMode = config.mode;
|
|
4435
4966
|
s.userResolveAlias = config.resolve.alias;
|
|
4436
4967
|
if (!s.resolvedEntryPath && opts?.routerPathRef?.path) {
|
|
4437
4968
|
s.resolvedEntryPath = opts.routerPathRef.path;
|
|
@@ -4445,12 +4976,6 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4445
4976
|
s.resolvedEntryPath = entries[0];
|
|
4446
4977
|
}
|
|
4447
4978
|
}
|
|
4448
|
-
if (opts?.include || opts?.exclude) {
|
|
4449
|
-
s.scanFilter = createScanFilter(s.projectRoot, {
|
|
4450
|
-
include: opts.include,
|
|
4451
|
-
exclude: opts.exclude
|
|
4452
|
-
});
|
|
4453
|
-
}
|
|
4454
4979
|
if (opts?.staticRouteTypesGeneration !== false) {
|
|
4455
4980
|
s.cachedRouterFiles = findRouterFiles(s.projectRoot, s.scanFilter);
|
|
4456
4981
|
writeCombinedRouteTypesWithTracking(s, { preserveIfLarger: true });
|
|
@@ -4482,6 +5007,8 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4482
5007
|
});
|
|
4483
5008
|
prerenderTempServer = null;
|
|
4484
5009
|
}
|
|
5010
|
+
releaseBuildEnv(s).catch(() => {
|
|
5011
|
+
});
|
|
4485
5012
|
});
|
|
4486
5013
|
async function getOrCreateTempServer() {
|
|
4487
5014
|
if (prerenderNodeRegistry) {
|
|
@@ -4508,14 +5035,33 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4508
5035
|
return null;
|
|
4509
5036
|
}
|
|
4510
5037
|
const discover = async () => {
|
|
5038
|
+
const discoverStart = performance.now();
|
|
4511
5039
|
const rscEnv = server.environments?.rsc;
|
|
4512
5040
|
if (!rscEnv?.runner) {
|
|
5041
|
+
debugDiscovery?.("dev: no rsc runner (cloudflare path)");
|
|
4513
5042
|
s.devServerOrigin = getDevServerOrigin();
|
|
4514
5043
|
try {
|
|
4515
|
-
|
|
5044
|
+
await timed(
|
|
5045
|
+
debugDiscovery,
|
|
5046
|
+
"acquireBuildEnv",
|
|
5047
|
+
() => acquireBuildEnv(s, viteCommand, viteMode)
|
|
5048
|
+
);
|
|
5049
|
+
const tempRscEnv = await timed(
|
|
5050
|
+
debugDiscovery,
|
|
5051
|
+
"getOrCreateTempServer",
|
|
5052
|
+
() => getOrCreateTempServer()
|
|
5053
|
+
);
|
|
4516
5054
|
if (tempRscEnv) {
|
|
4517
|
-
await
|
|
4518
|
-
|
|
5055
|
+
await timed(
|
|
5056
|
+
debugDiscovery,
|
|
5057
|
+
"discoverRouters (cloudflare)",
|
|
5058
|
+
() => discoverRouters(s, tempRscEnv)
|
|
5059
|
+
);
|
|
5060
|
+
timedSync(
|
|
5061
|
+
debugDiscovery,
|
|
5062
|
+
"writeRouteTypesFiles",
|
|
5063
|
+
() => writeRouteTypesFiles(s)
|
|
5064
|
+
);
|
|
4519
5065
|
}
|
|
4520
5066
|
} catch (err) {
|
|
4521
5067
|
console.warn(
|
|
@@ -4523,26 +5069,54 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4523
5069
|
${err.stack}`
|
|
4524
5070
|
);
|
|
4525
5071
|
}
|
|
5072
|
+
debugDiscovery?.(
|
|
5073
|
+
"dev discovery done (%sms)",
|
|
5074
|
+
(performance.now() - discoverStart).toFixed(1)
|
|
5075
|
+
);
|
|
4526
5076
|
resolveDiscovery();
|
|
4527
5077
|
return;
|
|
4528
5078
|
}
|
|
4529
5079
|
try {
|
|
4530
|
-
|
|
4531
|
-
|
|
5080
|
+
debugDiscovery?.("dev: node path start");
|
|
5081
|
+
await timed(
|
|
5082
|
+
debugDiscovery,
|
|
5083
|
+
"acquireBuildEnv",
|
|
5084
|
+
() => acquireBuildEnv(s, viteCommand, viteMode)
|
|
5085
|
+
);
|
|
5086
|
+
const serverMod = await timed(
|
|
5087
|
+
debugDiscovery,
|
|
5088
|
+
"import @rangojs/router/server",
|
|
5089
|
+
() => rscEnv.runner.import("@rangojs/router/server")
|
|
4532
5090
|
);
|
|
4533
5091
|
if (serverMod?.setManifestReadyPromise) {
|
|
4534
5092
|
serverMod.setManifestReadyPromise(discoveryPromise);
|
|
4535
5093
|
}
|
|
4536
|
-
await
|
|
5094
|
+
await timed(
|
|
5095
|
+
debugDiscovery,
|
|
5096
|
+
"discoverRouters",
|
|
5097
|
+
() => discoverRouters(s, rscEnv)
|
|
5098
|
+
);
|
|
4537
5099
|
s.devServerOrigin = getDevServerOrigin();
|
|
4538
|
-
|
|
4539
|
-
|
|
5100
|
+
timedSync(
|
|
5101
|
+
debugDiscovery,
|
|
5102
|
+
"writeRouteTypesFiles",
|
|
5103
|
+
() => writeRouteTypesFiles(s)
|
|
5104
|
+
);
|
|
5105
|
+
await timed(
|
|
5106
|
+
debugDiscovery,
|
|
5107
|
+
"propagateDiscoveryState",
|
|
5108
|
+
() => propagateDiscoveryState(rscEnv)
|
|
5109
|
+
);
|
|
4540
5110
|
} catch (err) {
|
|
4541
5111
|
console.warn(
|
|
4542
5112
|
`[rsc-router] Router discovery failed: ${err.message}
|
|
4543
5113
|
${err.stack}`
|
|
4544
5114
|
);
|
|
4545
5115
|
} finally {
|
|
5116
|
+
debugDiscovery?.(
|
|
5117
|
+
"dev discovery done (%sms)",
|
|
5118
|
+
(performance.now() - discoverStart).toFixed(1)
|
|
5119
|
+
);
|
|
4546
5120
|
resolveDiscovery();
|
|
4547
5121
|
}
|
|
4548
5122
|
};
|
|
@@ -4591,7 +5165,26 @@ ${err.stack}`
|
|
|
4591
5165
|
res.end("Missing pathname");
|
|
4592
5166
|
return;
|
|
4593
5167
|
}
|
|
4594
|
-
|
|
5168
|
+
const rscEnv = server.environments?.rsc;
|
|
5169
|
+
let registry = null;
|
|
5170
|
+
if (rscEnv?.runner && s.resolvedEntryPath) {
|
|
5171
|
+
try {
|
|
5172
|
+
await rscEnv.runner.import(s.resolvedEntryPath);
|
|
5173
|
+
const serverMod = await rscEnv.runner.import(
|
|
5174
|
+
"@rangojs/router/server"
|
|
5175
|
+
);
|
|
5176
|
+
registry = serverMod.RouterRegistry ?? null;
|
|
5177
|
+
} catch (err) {
|
|
5178
|
+
console.warn(
|
|
5179
|
+
`[rsc-router] Dev prerender module refresh failed: ${err.message}`
|
|
5180
|
+
);
|
|
5181
|
+
res.statusCode = 500;
|
|
5182
|
+
res.end(`Prerender handler error: ${err.message}`);
|
|
5183
|
+
return;
|
|
5184
|
+
}
|
|
5185
|
+
} else {
|
|
5186
|
+
registry = mainRegistry;
|
|
5187
|
+
}
|
|
4595
5188
|
if (!registry) {
|
|
4596
5189
|
if (!prerenderNodeRegistry) {
|
|
4597
5190
|
await getOrCreateTempServer();
|
|
@@ -4613,7 +5206,10 @@ ${err.stack}`
|
|
|
4613
5206
|
pathname,
|
|
4614
5207
|
{},
|
|
4615
5208
|
void 0,
|
|
4616
|
-
wantPassthrough
|
|
5209
|
+
wantPassthrough,
|
|
5210
|
+
s.resolvedBuildEnv,
|
|
5211
|
+
true
|
|
5212
|
+
// devMode: check getParams for passthrough routes
|
|
4617
5213
|
);
|
|
4618
5214
|
if (!result) continue;
|
|
4619
5215
|
if (result.passthrough) continue;
|
|
@@ -4665,15 +5261,32 @@ ${err.stack}`
|
|
|
4665
5261
|
const rscEnv = server.environments?.rsc;
|
|
4666
5262
|
if (!rscEnv?.runner || runtimeRediscoveryInProgress) return;
|
|
4667
5263
|
runtimeRediscoveryInProgress = true;
|
|
5264
|
+
const hmrStart = performance.now();
|
|
4668
5265
|
try {
|
|
4669
|
-
await
|
|
4670
|
-
|
|
4671
|
-
|
|
5266
|
+
await timed(
|
|
5267
|
+
debugDiscovery,
|
|
5268
|
+
"hmr discoverRouters",
|
|
5269
|
+
() => discoverRouters(s, rscEnv)
|
|
5270
|
+
);
|
|
5271
|
+
timedSync(
|
|
5272
|
+
debugDiscovery,
|
|
5273
|
+
"hmr writeRouteTypesFiles",
|
|
5274
|
+
() => writeRouteTypesFiles(s)
|
|
5275
|
+
);
|
|
5276
|
+
await timed(
|
|
5277
|
+
debugDiscovery,
|
|
5278
|
+
"hmr propagateDiscoveryState",
|
|
5279
|
+
() => propagateDiscoveryState(rscEnv)
|
|
5280
|
+
);
|
|
4672
5281
|
} catch (err) {
|
|
4673
5282
|
console.warn(
|
|
4674
5283
|
`[rsc-router] Runtime re-discovery failed: ${err.message}`
|
|
4675
5284
|
);
|
|
4676
5285
|
} finally {
|
|
5286
|
+
debugDiscovery?.(
|
|
5287
|
+
"hmr re-discovery done (%sms)",
|
|
5288
|
+
(performance.now() - hmrStart).toFixed(1)
|
|
5289
|
+
);
|
|
4677
5290
|
runtimeRediscoveryInProgress = false;
|
|
4678
5291
|
}
|
|
4679
5292
|
};
|
|
@@ -4746,13 +5359,24 @@ ${err.stack}`
|
|
|
4746
5359
|
async buildStart() {
|
|
4747
5360
|
if (!s.isBuildMode) return;
|
|
4748
5361
|
if (s.mergedRouteManifest !== null) return;
|
|
5362
|
+
const buildStartTime = performance.now();
|
|
5363
|
+
debugDiscovery?.("build: start");
|
|
4749
5364
|
resetStagedBuildAssets(s.projectRoot);
|
|
4750
5365
|
s.prerenderManifestEntries = null;
|
|
4751
5366
|
s.staticManifestEntries = null;
|
|
5367
|
+
await timed(
|
|
5368
|
+
debugDiscovery,
|
|
5369
|
+
"build acquireBuildEnv",
|
|
5370
|
+
() => acquireBuildEnv(s, viteCommand, viteMode)
|
|
5371
|
+
);
|
|
4752
5372
|
let tempServer = null;
|
|
4753
5373
|
globalThis.__rscRouterDiscoveryActive = true;
|
|
4754
5374
|
try {
|
|
4755
|
-
tempServer = await
|
|
5375
|
+
tempServer = await timed(
|
|
5376
|
+
debugDiscovery,
|
|
5377
|
+
"build createTempRscServer",
|
|
5378
|
+
() => createTempRscServer(s, { forceBuild: true })
|
|
5379
|
+
);
|
|
4756
5380
|
const rscEnv = tempServer.environments?.rsc;
|
|
4757
5381
|
if (!rscEnv?.runner) {
|
|
4758
5382
|
console.warn(
|
|
@@ -4766,8 +5390,16 @@ ${err.stack}`
|
|
|
4766
5390
|
if (tempIdsPlugin?.api?.staticHandlerModules) {
|
|
4767
5391
|
s.resolvedStaticModules = tempIdsPlugin.api.staticHandlerModules;
|
|
4768
5392
|
}
|
|
4769
|
-
await
|
|
4770
|
-
|
|
5393
|
+
await timed(
|
|
5394
|
+
debugDiscovery,
|
|
5395
|
+
"build discoverRouters",
|
|
5396
|
+
() => discoverRouters(s, rscEnv)
|
|
5397
|
+
);
|
|
5398
|
+
timedSync(
|
|
5399
|
+
debugDiscovery,
|
|
5400
|
+
"build writeRouteTypesFiles",
|
|
5401
|
+
() => writeRouteTypesFiles(s)
|
|
5402
|
+
);
|
|
4771
5403
|
} catch (err) {
|
|
4772
5404
|
const sourceFile = err.stack?.split("\n").find(
|
|
4773
5405
|
(line) => line.includes(s.projectRoot) && !line.includes("node_modules")
|
|
@@ -4786,8 +5418,17 @@ ${details}`
|
|
|
4786
5418
|
} finally {
|
|
4787
5419
|
delete globalThis.__rscRouterDiscoveryActive;
|
|
4788
5420
|
if (tempServer) {
|
|
4789
|
-
await
|
|
5421
|
+
await timed(
|
|
5422
|
+
debugDiscovery,
|
|
5423
|
+
"build tempServer.close",
|
|
5424
|
+
() => tempServer.close()
|
|
5425
|
+
);
|
|
4790
5426
|
}
|
|
5427
|
+
await releaseBuildEnv(s);
|
|
5428
|
+
debugDiscovery?.(
|
|
5429
|
+
"build discovery done (%sms)",
|
|
5430
|
+
(performance.now() - buildStartTime).toFixed(1)
|
|
5431
|
+
);
|
|
4791
5432
|
}
|
|
4792
5433
|
},
|
|
4793
5434
|
// Virtual module: provides the pre-generated route manifest as a JS module
|
|
@@ -4804,17 +5445,36 @@ ${details}`
|
|
|
4804
5445
|
async load(id) {
|
|
4805
5446
|
if (id === "\0" + VIRTUAL_ROUTES_MANIFEST_ID) {
|
|
4806
5447
|
if (s.discoveryDone) {
|
|
4807
|
-
await
|
|
5448
|
+
await timed(
|
|
5449
|
+
debugRoutes,
|
|
5450
|
+
"await discoveryDone (manifest)",
|
|
5451
|
+
() => Promise.resolve(s.discoveryDone)
|
|
5452
|
+
);
|
|
4808
5453
|
}
|
|
4809
|
-
|
|
5454
|
+
const code = await timed(
|
|
5455
|
+
debugRoutes,
|
|
5456
|
+
"generateRoutesManifestModule",
|
|
5457
|
+
() => generateRoutesManifestModule(s)
|
|
5458
|
+
);
|
|
5459
|
+
debugRoutes?.("manifest module emitted (%d bytes)", code?.length ?? 0);
|
|
5460
|
+
return code;
|
|
4810
5461
|
}
|
|
4811
5462
|
const perRouterPrefix = "\0" + VIRTUAL_ROUTES_MANIFEST_ID + "/";
|
|
4812
5463
|
if (id.startsWith(perRouterPrefix)) {
|
|
4813
5464
|
if (s.discoveryDone) {
|
|
4814
|
-
await
|
|
5465
|
+
await timed(
|
|
5466
|
+
debugRoutes,
|
|
5467
|
+
"await discoveryDone (per-router)",
|
|
5468
|
+
() => Promise.resolve(s.discoveryDone)
|
|
5469
|
+
);
|
|
4815
5470
|
}
|
|
4816
5471
|
const routerId = id.slice(perRouterPrefix.length);
|
|
4817
|
-
|
|
5472
|
+
const code = await timed(
|
|
5473
|
+
debugRoutes,
|
|
5474
|
+
`generatePerRouterModule ${routerId}`,
|
|
5475
|
+
() => generatePerRouterModule(s, routerId)
|
|
5476
|
+
);
|
|
5477
|
+
return code;
|
|
4818
5478
|
}
|
|
4819
5479
|
return null;
|
|
4820
5480
|
},
|
|
@@ -4830,20 +5490,30 @@ ${details}`
|
|
|
4830
5490
|
}
|
|
4831
5491
|
if (!s.resolvedPrerenderModules?.size && !s.resolvedStaticModules?.size)
|
|
4832
5492
|
return;
|
|
5493
|
+
s.handlerChunkInfoMap.clear();
|
|
5494
|
+
s.staticHandlerChunkInfoMap.clear();
|
|
4833
5495
|
for (const [fileName, chunk] of Object.entries(bundle)) {
|
|
4834
5496
|
if (chunk.type !== "chunk") continue;
|
|
4835
|
-
if (
|
|
5497
|
+
if (s.resolvedPrerenderModules?.size) {
|
|
4836
5498
|
const handlers = extractHandlerExportsFromChunk(
|
|
4837
5499
|
chunk.code,
|
|
4838
5500
|
s.resolvedPrerenderModules,
|
|
4839
5501
|
"Prerender",
|
|
4840
|
-
|
|
5502
|
+
false
|
|
4841
5503
|
);
|
|
4842
5504
|
if (handlers.length > 0) {
|
|
4843
|
-
|
|
5505
|
+
const existing = s.handlerChunkInfoMap.get(fileName);
|
|
5506
|
+
if (existing) {
|
|
5507
|
+
existing.exports.push(...handlers);
|
|
5508
|
+
} else {
|
|
5509
|
+
s.handlerChunkInfoMap.set(fileName, {
|
|
5510
|
+
fileName,
|
|
5511
|
+
exports: handlers
|
|
5512
|
+
});
|
|
5513
|
+
}
|
|
4844
5514
|
}
|
|
4845
5515
|
}
|
|
4846
|
-
if (
|
|
5516
|
+
if (s.resolvedStaticModules?.size) {
|
|
4847
5517
|
const handlers = extractHandlerExportsFromChunk(
|
|
4848
5518
|
chunk.code,
|
|
4849
5519
|
s.resolvedStaticModules,
|
|
@@ -4851,7 +5521,15 @@ ${details}`
|
|
|
4851
5521
|
false
|
|
4852
5522
|
);
|
|
4853
5523
|
if (handlers.length > 0) {
|
|
4854
|
-
|
|
5524
|
+
const existing = s.staticHandlerChunkInfoMap.get(fileName);
|
|
5525
|
+
if (existing) {
|
|
5526
|
+
existing.exports.push(...handlers);
|
|
5527
|
+
} else {
|
|
5528
|
+
s.staticHandlerChunkInfoMap.set(fileName, {
|
|
5529
|
+
fileName,
|
|
5530
|
+
exports: handlers
|
|
5531
|
+
});
|
|
5532
|
+
}
|
|
4855
5533
|
}
|
|
4856
5534
|
}
|
|
4857
5535
|
}
|
|
@@ -4872,14 +5550,30 @@ ${details}`
|
|
|
4872
5550
|
}
|
|
4873
5551
|
|
|
4874
5552
|
// src/vite/rango.ts
|
|
5553
|
+
var debugConfig = createRangoDebugger("rango:config");
|
|
4875
5554
|
async function rango(options) {
|
|
5555
|
+
const rangoStart = performance.now();
|
|
4876
5556
|
const resolvedOptions = options ?? { preset: "node" };
|
|
4877
5557
|
const preset = resolvedOptions.preset ?? "node";
|
|
4878
5558
|
const showBanner = resolvedOptions.banner ?? true;
|
|
5559
|
+
debugConfig?.("rango(%s) setup start", preset);
|
|
4879
5560
|
const plugins = [];
|
|
4880
|
-
const rangoAliases = getPackageAliases();
|
|
4881
|
-
const excludeDeps =
|
|
4882
|
-
|
|
5561
|
+
const rangoAliases = { ...getPackageAliases(), ...getVendorAliases() };
|
|
5562
|
+
const excludeDeps = [
|
|
5563
|
+
...getExcludeDeps(),
|
|
5564
|
+
// plugin-rsc itself injects these into the client env's
|
|
5565
|
+
// optimizeDeps.include, which overrides exclude for the dep's own
|
|
5566
|
+
// pre-bundle entry. What exclude still controls is how *other*
|
|
5567
|
+
// pre-bundled deps treat imports of these specs (external vs inlined)
|
|
5568
|
+
// via esbuildCjsExternalPlugin. The cjs-to-esm transform in
|
|
5569
|
+
// plugins/cjs-to-esm.ts is the fallback for strict-pnpm consumers,
|
|
5570
|
+
// where client.browser's bare include fails to resolve and Vite ends up
|
|
5571
|
+
// serving the raw CJS file at dev-serve time.
|
|
5572
|
+
"@vitejs/plugin-rsc/browser",
|
|
5573
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.browser"
|
|
5574
|
+
];
|
|
5575
|
+
const pkg = getPublishedPackageName();
|
|
5576
|
+
const nested = (spec) => `${pkg} > ${spec}`;
|
|
4883
5577
|
const routerRef = { path: void 0 };
|
|
4884
5578
|
const prerenderEnabled = true;
|
|
4885
5579
|
if (preset === "cloudflare") {
|
|
@@ -4917,7 +5611,7 @@ async function rango(options) {
|
|
|
4917
5611
|
// Pre-bundle rsc-html-stream to prevent discovery during first request
|
|
4918
5612
|
// Exclude rsc-router modules to ensure same Context instance
|
|
4919
5613
|
optimizeDeps: {
|
|
4920
|
-
include: ["rsc-html-stream/client"],
|
|
5614
|
+
include: [nested("rsc-html-stream/client")],
|
|
4921
5615
|
exclude: excludeDeps,
|
|
4922
5616
|
esbuildOptions: sharedEsbuildOptions
|
|
4923
5617
|
}
|
|
@@ -4942,8 +5636,10 @@ async function rango(options) {
|
|
|
4942
5636
|
"react-dom/static.edge",
|
|
4943
5637
|
"react/jsx-runtime",
|
|
4944
5638
|
"react/jsx-dev-runtime",
|
|
4945
|
-
"rsc-html-stream/server",
|
|
4946
|
-
|
|
5639
|
+
nested("rsc-html-stream/server"),
|
|
5640
|
+
nested(
|
|
5641
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
|
|
5642
|
+
)
|
|
4947
5643
|
],
|
|
4948
5644
|
exclude: excludeDeps,
|
|
4949
5645
|
esbuildOptions: sharedEsbuildOptions
|
|
@@ -4958,7 +5654,9 @@ async function rango(options) {
|
|
|
4958
5654
|
"react",
|
|
4959
5655
|
"react/jsx-runtime",
|
|
4960
5656
|
"react/jsx-dev-runtime",
|
|
4961
|
-
|
|
5657
|
+
nested(
|
|
5658
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
|
|
5659
|
+
)
|
|
4962
5660
|
],
|
|
4963
5661
|
exclude: excludeDeps,
|
|
4964
5662
|
esbuildOptions: sharedEsbuildOptions
|
|
@@ -4975,6 +5673,7 @@ async function rango(options) {
|
|
|
4975
5673
|
}
|
|
4976
5674
|
});
|
|
4977
5675
|
plugins.push(createVirtualEntriesPlugin(finalEntries));
|
|
5676
|
+
plugins.push(performanceTracksPlugin());
|
|
4978
5677
|
plugins.push(
|
|
4979
5678
|
rsc({
|
|
4980
5679
|
entries: finalEntries,
|
|
@@ -4983,153 +5682,126 @@ async function rango(options) {
|
|
|
4983
5682
|
);
|
|
4984
5683
|
plugins.push(clientRefDedup());
|
|
4985
5684
|
} 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
|
-
}
|
|
5685
|
+
plugins.push({
|
|
5686
|
+
name: "@rangojs/router:auto-discover",
|
|
5687
|
+
config(userConfig) {
|
|
5688
|
+
if (routerRef.path) return;
|
|
5689
|
+
const root = userConfig.root ? resolve9(process.cwd(), userConfig.root) : process.cwd();
|
|
5690
|
+
const candidates = findRouterFiles(root);
|
|
5691
|
+
if (candidates.length === 1) {
|
|
5692
|
+
const abs = candidates[0];
|
|
5693
|
+
routerRef.path = (abs.startsWith(root) ? "./" + abs.slice(root.length + 1) : abs).replaceAll("\\", "/");
|
|
5694
|
+
} else if (candidates.length > 1) {
|
|
5695
|
+
const list = candidates.map(
|
|
5696
|
+
(f) => " - " + (f.startsWith(root) ? f.slice(root.length + 1) : f)
|
|
5697
|
+
).join("\n");
|
|
5698
|
+
throw new Error(`[rsc-router] Multiple routers found:
|
|
5699
|
+
${list}`);
|
|
5011
5700
|
}
|
|
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
|
|
5701
|
+
}
|
|
5702
|
+
});
|
|
5703
|
+
const finalEntries = {
|
|
5704
|
+
client: VIRTUAL_IDS.browser,
|
|
5705
|
+
ssr: VIRTUAL_IDS.ssr,
|
|
5706
|
+
rsc: VIRTUAL_IDS.rsc
|
|
5707
|
+
};
|
|
5708
|
+
const { default: rsc } = await import("@vitejs/plugin-rsc");
|
|
5709
|
+
let hasWarnedDuplicate = false;
|
|
5710
|
+
plugins.push({
|
|
5711
|
+
name: "@rangojs/router:rsc-integration",
|
|
5712
|
+
enforce: "pre",
|
|
5713
|
+
config() {
|
|
5714
|
+
return {
|
|
5715
|
+
optimizeDeps: {
|
|
5716
|
+
exclude: excludeDeps,
|
|
5717
|
+
esbuildOptions: sharedEsbuildOptions
|
|
5718
|
+
},
|
|
5719
|
+
build: {
|
|
5720
|
+
rollupOptions: { onwarn }
|
|
5721
|
+
},
|
|
5722
|
+
resolve: {
|
|
5723
|
+
alias: rangoAliases
|
|
5724
|
+
},
|
|
5725
|
+
environments: {
|
|
5726
|
+
client: {
|
|
5727
|
+
build: {
|
|
5728
|
+
rollupOptions: {
|
|
5729
|
+
output: {
|
|
5730
|
+
manualChunks: getManualChunks
|
|
5089
5731
|
}
|
|
5090
5732
|
}
|
|
5091
5733
|
},
|
|
5092
|
-
|
|
5093
|
-
|
|
5094
|
-
|
|
5095
|
-
|
|
5096
|
-
|
|
5097
|
-
|
|
5098
|
-
|
|
5099
|
-
|
|
5100
|
-
|
|
5101
|
-
|
|
5102
|
-
|
|
5103
|
-
|
|
5104
|
-
|
|
5105
|
-
|
|
5734
|
+
optimizeDeps: {
|
|
5735
|
+
include: [
|
|
5736
|
+
"react",
|
|
5737
|
+
"react-dom",
|
|
5738
|
+
"react/jsx-runtime",
|
|
5739
|
+
"react/jsx-dev-runtime",
|
|
5740
|
+
nested("rsc-html-stream/client")
|
|
5741
|
+
],
|
|
5742
|
+
exclude: excludeDeps,
|
|
5743
|
+
esbuildOptions: sharedEsbuildOptions,
|
|
5744
|
+
entries: [VIRTUAL_IDS.browser]
|
|
5745
|
+
}
|
|
5746
|
+
},
|
|
5747
|
+
ssr: {
|
|
5748
|
+
optimizeDeps: {
|
|
5749
|
+
entries: [VIRTUAL_IDS.ssr],
|
|
5750
|
+
include: [
|
|
5751
|
+
"react",
|
|
5752
|
+
"react-dom",
|
|
5753
|
+
"react-dom/server.edge",
|
|
5754
|
+
"react-dom/static.edge",
|
|
5755
|
+
"react/jsx-runtime",
|
|
5756
|
+
"react/jsx-dev-runtime",
|
|
5757
|
+
nested(
|
|
5758
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
|
|
5759
|
+
)
|
|
5760
|
+
],
|
|
5761
|
+
exclude: excludeDeps,
|
|
5762
|
+
esbuildOptions: sharedEsbuildOptions
|
|
5763
|
+
}
|
|
5764
|
+
},
|
|
5765
|
+
rsc: {
|
|
5766
|
+
optimizeDeps: {
|
|
5767
|
+
entries: [VIRTUAL_IDS.rsc],
|
|
5768
|
+
include: [
|
|
5769
|
+
"react",
|
|
5770
|
+
"react/jsx-runtime",
|
|
5771
|
+
"react/jsx-dev-runtime",
|
|
5772
|
+
nested(
|
|
5773
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
|
|
5774
|
+
)
|
|
5775
|
+
],
|
|
5776
|
+
esbuildOptions: sharedEsbuildOptions
|
|
5106
5777
|
}
|
|
5107
5778
|
}
|
|
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
5779
|
}
|
|
5780
|
+
};
|
|
5781
|
+
},
|
|
5782
|
+
configResolved(config) {
|
|
5783
|
+
if (showBanner) {
|
|
5784
|
+
const mode = config.command === "serve" ? process.argv.includes("preview") ? "preview" : "dev" : "build";
|
|
5785
|
+
printBanner(mode, "node", rangoVersion);
|
|
5124
5786
|
}
|
|
5125
|
-
|
|
5126
|
-
|
|
5127
|
-
|
|
5128
|
-
|
|
5129
|
-
|
|
5130
|
-
|
|
5131
|
-
|
|
5132
|
-
|
|
5787
|
+
const rscMinimalCount = config.plugins.filter(
|
|
5788
|
+
(p) => p.name === "rsc:minimal"
|
|
5789
|
+
).length;
|
|
5790
|
+
if (rscMinimalCount > 1 && !hasWarnedDuplicate) {
|
|
5791
|
+
hasWarnedDuplicate = true;
|
|
5792
|
+
console.warn(
|
|
5793
|
+
"[rsc-router] Duplicate @vitejs/plugin-rsc detected. Remove rsc() from your vite config \u2014 rango() includes it automatically."
|
|
5794
|
+
);
|
|
5795
|
+
}
|
|
5796
|
+
}
|
|
5797
|
+
});
|
|
5798
|
+
plugins.push(createVirtualEntriesPlugin(finalEntries, routerRef));
|
|
5799
|
+
plugins.push(performanceTracksPlugin());
|
|
5800
|
+
plugins.push(
|
|
5801
|
+
rsc({
|
|
5802
|
+
entries: finalEntries
|
|
5803
|
+
})
|
|
5804
|
+
);
|
|
5133
5805
|
plugins.push(clientRefDedup());
|
|
5134
5806
|
}
|
|
5135
5807
|
plugins.push({
|
|
@@ -5157,20 +5829,24 @@ ${list}`
|
|
|
5157
5829
|
plugins.push(createVersionPlugin());
|
|
5158
5830
|
const discoveryEntryPath = preset !== "cloudflare" ? routerRef.path : void 0;
|
|
5159
5831
|
const discoveryRouterRef = preset !== "cloudflare" ? routerRef : void 0;
|
|
5160
|
-
|
|
5161
|
-
|
|
5162
|
-
plugins.push(createVersionInjectorPlugin(injectorEntryPath));
|
|
5832
|
+
if (preset === "cloudflare") {
|
|
5833
|
+
plugins.push(createVersionInjectorPlugin(void 0));
|
|
5163
5834
|
}
|
|
5164
5835
|
plugins.push(createCjsToEsmPlugin());
|
|
5165
5836
|
plugins.push(
|
|
5166
5837
|
createRouterDiscoveryPlugin(discoveryEntryPath, {
|
|
5167
5838
|
routerPathRef: discoveryRouterRef,
|
|
5168
5839
|
enableBuildPrerender: prerenderEnabled,
|
|
5169
|
-
|
|
5170
|
-
|
|
5171
|
-
exclude: resolvedOptions.exclude
|
|
5840
|
+
buildEnv: options?.buildEnv,
|
|
5841
|
+
preset
|
|
5172
5842
|
})
|
|
5173
5843
|
);
|
|
5844
|
+
debugConfig?.(
|
|
5845
|
+
"rango(%s) setup done: %d plugin(s) (%sms)",
|
|
5846
|
+
preset,
|
|
5847
|
+
plugins.length,
|
|
5848
|
+
(performance.now() - rangoStart).toFixed(1)
|
|
5849
|
+
);
|
|
5174
5850
|
return plugins;
|
|
5175
5851
|
}
|
|
5176
5852
|
|
|
@@ -5181,29 +5857,75 @@ function poke() {
|
|
|
5181
5857
|
apply: "serve",
|
|
5182
5858
|
configureServer(server) {
|
|
5183
5859
|
const stdin = process.stdin;
|
|
5184
|
-
const
|
|
5860
|
+
const debug2 = process.env.RANGO_POKE_DEBUG === "1";
|
|
5861
|
+
const triggerReload = (source) => {
|
|
5862
|
+
server.hot.send({ type: "full-reload", path: "*" });
|
|
5863
|
+
server.config.logger.info(` browser reload (${source})`, {
|
|
5864
|
+
timestamp: true
|
|
5865
|
+
});
|
|
5866
|
+
};
|
|
5867
|
+
const toBuffer = (chunk) => {
|
|
5868
|
+
return typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
|
|
5869
|
+
};
|
|
5870
|
+
const formatChunk = (chunk) => {
|
|
5871
|
+
const data = toBuffer(chunk);
|
|
5872
|
+
const hex = Array.from(data).map((byte) => `0x${byte.toString(16).padStart(2, "0")}`).join(" ");
|
|
5873
|
+
const ascii = Array.from(data).map((byte) => {
|
|
5874
|
+
if (byte >= 32 && byte <= 126) return String.fromCharCode(byte);
|
|
5875
|
+
if (byte === 10) return "\\n";
|
|
5876
|
+
if (byte === 13) return "\\r";
|
|
5877
|
+
if (byte === 9) return "\\t";
|
|
5878
|
+
return ".";
|
|
5879
|
+
}).join("");
|
|
5880
|
+
return `len=${data.length} hex=[${hex}] ascii="${ascii}"`;
|
|
5881
|
+
};
|
|
5882
|
+
const readCtrlR = (chunk) => {
|
|
5883
|
+
const data = typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
|
|
5884
|
+
return data.length === 1 && data[0] === 18;
|
|
5885
|
+
};
|
|
5886
|
+
const readSubmittedCommands = (chunk) => {
|
|
5887
|
+
const text = toBuffer(chunk).toString("utf8").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
5888
|
+
if (!text.includes("\n")) return [];
|
|
5889
|
+
const lines = text.split("\n");
|
|
5890
|
+
lines.pop();
|
|
5891
|
+
return lines;
|
|
5892
|
+
};
|
|
5893
|
+
if (debug2) {
|
|
5894
|
+
server.config.logger.info(
|
|
5895
|
+
` poke debug enabled (isTTY=${stdin.isTTY ? "yes" : "no"}, isRaw=${stdin.isTTY ? stdin.isRaw ? "yes" : "no" : "n/a"})`,
|
|
5896
|
+
{ timestamp: true }
|
|
5897
|
+
);
|
|
5898
|
+
}
|
|
5185
5899
|
if (stdin.isTTY) {
|
|
5186
|
-
|
|
5900
|
+
server.config.logger.info(
|
|
5901
|
+
" poke ready: press e + enter to reload browser (ctrl+r also works when available)",
|
|
5902
|
+
{ timestamp: true }
|
|
5903
|
+
);
|
|
5187
5904
|
}
|
|
5188
5905
|
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)", {
|
|
5906
|
+
if (debug2) {
|
|
5907
|
+
server.config.logger.info(` poke stdin ${formatChunk(data)}`, {
|
|
5197
5908
|
timestamp: true
|
|
5198
5909
|
});
|
|
5199
5910
|
}
|
|
5911
|
+
if (readCtrlR(data)) {
|
|
5912
|
+
triggerReload("ctrl+r");
|
|
5913
|
+
return;
|
|
5914
|
+
}
|
|
5915
|
+
for (const command of readSubmittedCommands(data)) {
|
|
5916
|
+
if (command === "e") {
|
|
5917
|
+
triggerReload("e+enter");
|
|
5918
|
+
return;
|
|
5919
|
+
}
|
|
5920
|
+
if (command === "\x1Br") {
|
|
5921
|
+
triggerReload("option+r+enter");
|
|
5922
|
+
return;
|
|
5923
|
+
}
|
|
5924
|
+
}
|
|
5200
5925
|
};
|
|
5201
5926
|
stdin.on("data", onData);
|
|
5202
5927
|
server.httpServer?.on("close", () => {
|
|
5203
5928
|
stdin.off("data", onData);
|
|
5204
|
-
if (stdin.isTTY && previousRawMode !== null) {
|
|
5205
|
-
stdin.setRawMode(previousRawMode);
|
|
5206
|
-
}
|
|
5207
5929
|
});
|
|
5208
5930
|
}
|
|
5209
5931
|
};
|