@rangojs/router 0.0.0-experimental.20 → 0.0.0-experimental.21efdd86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +4 -0
- package/README.md +122 -30
- package/dist/bin/rango.js +138 -50
- package/dist/vite/index.js +726 -386
- package/package.json +16 -15
- package/skills/breadcrumbs/SKILL.md +250 -0
- package/skills/cache-guide/SKILL.md +32 -0
- package/skills/caching/SKILL.md +49 -8
- package/skills/document-cache/SKILL.md +2 -2
- package/skills/hooks/SKILL.md +33 -31
- package/skills/host-router/SKILL.md +218 -0
- package/skills/links/SKILL.md +3 -1
- package/skills/loader/SKILL.md +72 -22
- package/skills/middleware/SKILL.md +2 -0
- package/skills/parallel/SKILL.md +126 -0
- package/skills/prerender/SKILL.md +112 -70
- package/skills/rango/SKILL.md +0 -1
- package/skills/route/SKILL.md +34 -4
- package/skills/router-setup/SKILL.md +95 -5
- package/skills/typesafety/SKILL.md +35 -23
- package/src/__internal.ts +92 -0
- package/src/browser/app-version.ts +14 -0
- package/src/browser/event-controller.ts +5 -0
- package/src/browser/link-interceptor.ts +4 -0
- package/src/browser/navigation-bridge.ts +104 -14
- package/src/browser/navigation-client.ts +126 -44
- package/src/browser/navigation-store.ts +43 -8
- package/src/browser/navigation-transaction.ts +11 -9
- package/src/browser/partial-update.ts +80 -15
- package/src/browser/prefetch/cache.ts +166 -27
- package/src/browser/prefetch/fetch.ts +52 -39
- package/src/browser/prefetch/policy.ts +6 -0
- package/src/browser/prefetch/queue.ts +92 -20
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/react/Link.tsx +70 -14
- package/src/browser/react/NavigationProvider.tsx +40 -4
- package/src/browser/react/context.ts +7 -2
- package/src/browser/react/use-handle.ts +9 -58
- package/src/browser/react/use-router.ts +21 -8
- package/src/browser/rsc-router.tsx +143 -60
- package/src/browser/scroll-restoration.ts +41 -42
- package/src/browser/segment-reconciler.ts +6 -1
- package/src/browser/server-action-bridge.ts +8 -6
- package/src/browser/types.ts +60 -5
- package/src/build/generate-manifest.ts +6 -6
- package/src/build/generate-route-types.ts +3 -0
- package/src/build/route-trie.ts +19 -3
- 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 +453 -11
- 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.rsc.tsx +2 -1
- package/src/client.tsx +3 -102
- package/src/context-var.ts +72 -2
- package/src/debug.ts +2 -2
- package/src/handle.ts +40 -0
- package/src/handles/breadcrumbs.ts +66 -0
- package/src/handles/index.ts +1 -0
- package/src/host/index.ts +0 -3
- package/src/index.rsc.ts +6 -36
- package/src/index.ts +40 -66
- package/src/prerender/store.ts +57 -15
- package/src/prerender.ts +138 -77
- package/src/reverse.ts +22 -1
- package/src/route-definition/dsl-helpers.ts +73 -25
- package/src/route-definition/helpers-types.ts +10 -6
- package/src/route-definition/index.ts +3 -3
- package/src/route-definition/redirect.ts +11 -3
- package/src/route-definition/resolve-handler-use.ts +149 -0
- package/src/route-map-builder.ts +7 -1
- package/src/route-types.ts +11 -0
- package/src/router/content-negotiation.ts +100 -1
- package/src/router/find-match.ts +4 -2
- package/src/router/handler-context.ts +108 -25
- package/src/router/intercept-resolution.ts +11 -4
- package/src/router/lazy-includes.ts +4 -1
- package/src/router/loader-resolution.ts +123 -11
- package/src/router/logging.ts +5 -2
- package/src/router/manifest.ts +9 -3
- package/src/router/match-api.ts +125 -190
- package/src/router/match-middleware/background-revalidation.ts +30 -2
- package/src/router/match-middleware/cache-lookup.ts +88 -16
- package/src/router/match-middleware/cache-store.ts +53 -10
- package/src/router/match-middleware/intercept-resolution.ts +9 -7
- package/src/router/match-middleware/segment-resolution.ts +61 -5
- package/src/router/match-result.ts +22 -15
- package/src/router/metrics.ts +238 -13
- package/src/router/middleware-types.ts +53 -12
- package/src/router/middleware.ts +172 -85
- package/src/router/navigation-snapshot.ts +182 -0
- package/src/router/pattern-matching.ts +20 -5
- package/src/router/prerender-match.ts +114 -10
- package/src/router/preview-match.ts +30 -102
- package/src/router/request-classification.ts +310 -0
- package/src/router/revalidation.ts +27 -7
- package/src/router/route-snapshot.ts +245 -0
- package/src/router/router-context.ts +6 -1
- package/src/router/router-interfaces.ts +50 -5
- package/src/router/router-options.ts +50 -19
- package/src/router/segment-resolution/fresh.ts +210 -19
- package/src/router/segment-resolution/helpers.ts +30 -25
- package/src/router/segment-resolution/loader-cache.ts +1 -0
- package/src/router/segment-resolution/revalidation.ts +448 -301
- package/src/router/segment-wrappers.ts +2 -0
- package/src/router/trie-matching.ts +20 -2
- package/src/router/types.ts +1 -0
- package/src/router.ts +88 -15
- package/src/rsc/handler.ts +546 -359
- package/src/rsc/index.ts +0 -20
- package/src/rsc/manifest-init.ts +5 -1
- package/src/rsc/progressive-enhancement.ts +25 -8
- package/src/rsc/rsc-rendering.ts +35 -43
- package/src/rsc/server-action.ts +16 -10
- package/src/rsc/ssr-setup.ts +128 -0
- package/src/rsc/types.ts +10 -1
- package/src/search-params.ts +16 -13
- package/src/segment-system.tsx +140 -4
- package/src/server/context.ts +148 -16
- package/src/server/loader-registry.ts +9 -8
- package/src/server/request-context.ts +186 -29
- package/src/server.ts +6 -0
- package/src/ssr/index.tsx +4 -0
- package/src/static-handler.ts +18 -6
- package/src/theme/index.ts +4 -13
- package/src/types/cache-types.ts +4 -4
- package/src/types/handler-context.ts +149 -49
- package/src/types/loader-types.ts +36 -9
- package/src/types/route-config.ts +17 -8
- package/src/types/route-entry.ts +8 -1
- package/src/types/segments.ts +2 -5
- package/src/urls/path-helper-types.ts +9 -2
- package/src/urls/path-helper.ts +48 -13
- package/src/urls/pattern-types.ts +12 -0
- package/src/urls/response-types.ts +16 -6
- package/src/use-loader.tsx +73 -4
- package/src/vite/discovery/bundle-postprocess.ts +61 -89
- package/src/vite/discovery/discover-routers.ts +7 -4
- package/src/vite/discovery/prerender-collection.ts +48 -15
- package/src/vite/discovery/state.ts +17 -13
- package/src/vite/index.ts +8 -3
- package/src/vite/plugin-types.ts +51 -79
- package/src/vite/plugins/expose-action-id.ts +1 -3
- package/src/vite/plugins/performance-tracks.ts +88 -0
- package/src/vite/plugins/refresh-cmd.ts +127 -0
- package/src/vite/plugins/version-plugin.ts +13 -1
- package/src/vite/rango.ts +163 -211
- package/src/vite/router-discovery.ts +182 -45
- package/src/vite/utils/banner.ts +3 -3
- package/src/vite/utils/prerender-utils.ts +78 -0
- 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/skills/testing/SKILL.md +0 -226
- package/src/route-definition/route-function.ts +0 -119
package/dist/vite/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/vite/rango.ts
|
|
2
2
|
import { readFileSync as readFileSync7 } from "node:fs";
|
|
3
|
-
import { resolve as
|
|
3
|
+
import { resolve as resolve9 } from "node:path";
|
|
4
4
|
|
|
5
5
|
// src/vite/plugins/expose-action-id.ts
|
|
6
6
|
import MagicString from "magic-string";
|
|
@@ -292,7 +292,7 @@ function exposeActionId() {
|
|
|
292
292
|
}
|
|
293
293
|
if (!rscPluginApi) {
|
|
294
294
|
throw new Error(
|
|
295
|
-
"[rsc-router] Could not find @vitejs/plugin-rsc. @rangojs/router requires the Vite RSC plugin
|
|
295
|
+
"[rsc-router] Could not find @vitejs/plugin-rsc. @rangojs/router requires the Vite RSC plugin, which is included automatically by rango()."
|
|
296
296
|
);
|
|
297
297
|
}
|
|
298
298
|
if (!isBuild) return;
|
|
@@ -1745,7 +1745,7 @@ import { resolve } from "node:path";
|
|
|
1745
1745
|
// package.json
|
|
1746
1746
|
var package_default = {
|
|
1747
1747
|
name: "@rangojs/router",
|
|
1748
|
-
version: "0.0.0-experimental.
|
|
1748
|
+
version: "0.0.0-experimental.21efdd86",
|
|
1749
1749
|
description: "Django-inspired RSC router with composable URL patterns",
|
|
1750
1750
|
keywords: [
|
|
1751
1751
|
"react",
|
|
@@ -1887,7 +1887,7 @@ var package_default = {
|
|
|
1887
1887
|
"test:unit:watch": "vitest"
|
|
1888
1888
|
},
|
|
1889
1889
|
dependencies: {
|
|
1890
|
-
"@vitejs/plugin-rsc": "^0.5.
|
|
1890
|
+
"@vitejs/plugin-rsc": "^0.5.19",
|
|
1891
1891
|
"magic-string": "^0.30.17",
|
|
1892
1892
|
picomatch: "^4.0.3",
|
|
1893
1893
|
"rsc-html-stream": "^0.0.7"
|
|
@@ -2095,31 +2095,7 @@ declare global {
|
|
|
2095
2095
|
}
|
|
2096
2096
|
|
|
2097
2097
|
// src/build/route-types/scan-filter.ts
|
|
2098
|
-
import { join, relative } from "node:path";
|
|
2099
2098
|
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
2099
|
|
|
2124
2100
|
// src/build/route-types/per-module-writer.ts
|
|
2125
2101
|
import ts4 from "typescript";
|
|
@@ -2341,7 +2317,7 @@ function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSche
|
|
|
2341
2317
|
}
|
|
2342
2318
|
return routeMap;
|
|
2343
2319
|
}
|
|
2344
|
-
function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut) {
|
|
2320
|
+
function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut, inlineBlock) {
|
|
2345
2321
|
visited = visited ?? /* @__PURE__ */ new Set();
|
|
2346
2322
|
const realPath = resolve2(filePath);
|
|
2347
2323
|
const key = variableName ? `${realPath}:${variableName}` : realPath;
|
|
@@ -2357,7 +2333,9 @@ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagno
|
|
|
2357
2333
|
return { routes: {}, searchSchemas: {} };
|
|
2358
2334
|
}
|
|
2359
2335
|
let block;
|
|
2360
|
-
if (
|
|
2336
|
+
if (inlineBlock) {
|
|
2337
|
+
block = inlineBlock;
|
|
2338
|
+
} else if (variableName) {
|
|
2361
2339
|
const extracted = extractUrlsBlockForVariable(source, variableName);
|
|
2362
2340
|
if (!extracted) return { routes: {}, searchSchemas: {} };
|
|
2363
2341
|
block = extracted;
|
|
@@ -2386,7 +2364,7 @@ import {
|
|
|
2386
2364
|
readdirSync
|
|
2387
2365
|
} from "node:fs";
|
|
2388
2366
|
import {
|
|
2389
|
-
join
|
|
2367
|
+
join,
|
|
2390
2368
|
dirname as dirname2,
|
|
2391
2369
|
resolve as resolve3,
|
|
2392
2370
|
sep,
|
|
@@ -2406,7 +2384,7 @@ function countPublicRouteEntries(source) {
|
|
|
2406
2384
|
}
|
|
2407
2385
|
var ROUTER_CALL_PATTERN = /\bcreateRouter\s*[<(]/;
|
|
2408
2386
|
function isRoutableSourceFile(name) {
|
|
2409
|
-
return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.");
|
|
2387
|
+
return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.") && !name.includes(".test.") && !name.includes(".spec.");
|
|
2410
2388
|
}
|
|
2411
2389
|
function findRouterFilesRecursive(dir, filter, results) {
|
|
2412
2390
|
let entries;
|
|
@@ -2421,9 +2399,10 @@ function findRouterFilesRecursive(dir, filter, results) {
|
|
|
2421
2399
|
const childDirs = [];
|
|
2422
2400
|
const routerFilesInDir = [];
|
|
2423
2401
|
for (const entry of entries) {
|
|
2424
|
-
const fullPath =
|
|
2402
|
+
const fullPath = join(dir, entry.name);
|
|
2425
2403
|
if (entry.isDirectory()) {
|
|
2426
|
-
if (entry.name === "node_modules" || entry.name.startsWith("."))
|
|
2404
|
+
if (entry.name === "node_modules" || entry.name === "dist" || entry.name === "coverage" || entry.name === "__tests__" || entry.name === "__mocks__" || entry.name.startsWith("."))
|
|
2405
|
+
continue;
|
|
2427
2406
|
childDirs.push(fullPath);
|
|
2428
2407
|
continue;
|
|
2429
2408
|
}
|
|
@@ -2475,7 +2454,7 @@ Router root: ${conflict.ancestor}
|
|
|
2475
2454
|
Nested router: ${conflict.nested}
|
|
2476
2455
|
Move the nested router into a sibling directory or configure it as a separate app root.`;
|
|
2477
2456
|
}
|
|
2478
|
-
function
|
|
2457
|
+
function extractUrlsFromRouter(code) {
|
|
2479
2458
|
const sourceFile = ts5.createSourceFile(
|
|
2480
2459
|
"router.tsx",
|
|
2481
2460
|
code,
|
|
@@ -2489,24 +2468,70 @@ function extractUrlsVariableFromRouter(code) {
|
|
|
2489
2468
|
const callee = node.expression;
|
|
2490
2469
|
return ts5.isIdentifier(callee) && callee.text === "createRouter";
|
|
2491
2470
|
}
|
|
2471
|
+
function isInlineBuilder(node) {
|
|
2472
|
+
return ts5.isArrowFunction(node) || ts5.isFunctionExpression(node);
|
|
2473
|
+
}
|
|
2474
|
+
function isRoutesOnCreateRouter(node) {
|
|
2475
|
+
if (!ts5.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "routes")
|
|
2476
|
+
return false;
|
|
2477
|
+
let inner = node.expression.expression;
|
|
2478
|
+
while (ts5.isCallExpression(inner) && ts5.isPropertyAccessExpression(inner.expression)) {
|
|
2479
|
+
inner = inner.expression.expression;
|
|
2480
|
+
}
|
|
2481
|
+
return isCreateRouterCall(inner);
|
|
2482
|
+
}
|
|
2492
2483
|
function visit(node) {
|
|
2493
2484
|
if (result) return;
|
|
2494
|
-
if (ts5.isCallExpression(node) &&
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
}
|
|
2499
|
-
|
|
2500
|
-
result = node.arguments[0].text;
|
|
2501
|
-
return;
|
|
2485
|
+
if (ts5.isCallExpression(node) && node.arguments.length >= 1 && isRoutesOnCreateRouter(node)) {
|
|
2486
|
+
const arg = node.arguments[0];
|
|
2487
|
+
if (ts5.isIdentifier(arg)) {
|
|
2488
|
+
result = { kind: "variable", name: arg.text };
|
|
2489
|
+
} else if (isInlineBuilder(arg)) {
|
|
2490
|
+
result = { kind: "inline", block: arg.getText(sourceFile) };
|
|
2502
2491
|
}
|
|
2492
|
+
return;
|
|
2503
2493
|
}
|
|
2504
2494
|
if (isCreateRouterCall(node)) {
|
|
2505
2495
|
const callExpr = node;
|
|
2506
|
-
for (const
|
|
2496
|
+
for (const callArg of callExpr.arguments) {
|
|
2497
|
+
if (ts5.isObjectLiteralExpression(callArg)) {
|
|
2498
|
+
for (const prop of callArg.properties) {
|
|
2499
|
+
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls") {
|
|
2500
|
+
if (ts5.isIdentifier(prop.initializer)) {
|
|
2501
|
+
result = { kind: "variable", name: prop.initializer.text };
|
|
2502
|
+
} else if (isInlineBuilder(prop.initializer)) {
|
|
2503
|
+
result = {
|
|
2504
|
+
kind: "inline",
|
|
2505
|
+
block: prop.initializer.getText(sourceFile)
|
|
2506
|
+
};
|
|
2507
|
+
}
|
|
2508
|
+
return;
|
|
2509
|
+
}
|
|
2510
|
+
}
|
|
2511
|
+
}
|
|
2512
|
+
}
|
|
2513
|
+
}
|
|
2514
|
+
ts5.forEachChild(node, visit);
|
|
2515
|
+
}
|
|
2516
|
+
visit(sourceFile);
|
|
2517
|
+
return result;
|
|
2518
|
+
}
|
|
2519
|
+
function extractBasenameFromRouter(code) {
|
|
2520
|
+
const sourceFile = ts5.createSourceFile(
|
|
2521
|
+
"router.tsx",
|
|
2522
|
+
code,
|
|
2523
|
+
ts5.ScriptTarget.Latest,
|
|
2524
|
+
true,
|
|
2525
|
+
ts5.ScriptKind.TSX
|
|
2526
|
+
);
|
|
2527
|
+
let result;
|
|
2528
|
+
function visit(node) {
|
|
2529
|
+
if (result !== void 0) return;
|
|
2530
|
+
if (ts5.isCallExpression(node) && ts5.isIdentifier(node.expression) && node.expression.text === "createRouter") {
|
|
2531
|
+
for (const arg of node.arguments) {
|
|
2507
2532
|
if (ts5.isObjectLiteralExpression(arg)) {
|
|
2508
2533
|
for (const prop of arg.properties) {
|
|
2509
|
-
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "
|
|
2534
|
+
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "basename" && ts5.isStringLiteral(prop.initializer)) {
|
|
2510
2535
|
result = prop.initializer.text;
|
|
2511
2536
|
return;
|
|
2512
2537
|
}
|
|
@@ -2519,6 +2544,19 @@ function extractUrlsVariableFromRouter(code) {
|
|
|
2519
2544
|
visit(sourceFile);
|
|
2520
2545
|
return result;
|
|
2521
2546
|
}
|
|
2547
|
+
function applyBasenameToRoutes(result, basename3) {
|
|
2548
|
+
const prefixed = {};
|
|
2549
|
+
for (const [name, pattern] of Object.entries(result.routes)) {
|
|
2550
|
+
if (pattern === "/") {
|
|
2551
|
+
prefixed[name] = basename3;
|
|
2552
|
+
} else if (basename3.endsWith("/") && pattern.startsWith("/")) {
|
|
2553
|
+
prefixed[name] = basename3 + pattern.slice(1);
|
|
2554
|
+
} else {
|
|
2555
|
+
prefixed[name] = basename3 + pattern;
|
|
2556
|
+
}
|
|
2557
|
+
}
|
|
2558
|
+
return { routes: prefixed, searchSchemas: result.searchSchemas };
|
|
2559
|
+
}
|
|
2522
2560
|
function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
2523
2561
|
let routerSource;
|
|
2524
2562
|
try {
|
|
@@ -2526,19 +2564,40 @@ function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
|
2526
2564
|
} catch {
|
|
2527
2565
|
return { routes: {}, searchSchemas: {} };
|
|
2528
2566
|
}
|
|
2529
|
-
const
|
|
2530
|
-
if (!
|
|
2567
|
+
const extraction = extractUrlsFromRouter(routerSource);
|
|
2568
|
+
if (!extraction) {
|
|
2531
2569
|
return { routes: {}, searchSchemas: {} };
|
|
2532
2570
|
}
|
|
2533
|
-
const
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2571
|
+
const rawBasename = extractBasenameFromRouter(routerSource);
|
|
2572
|
+
const basename3 = rawBasename ? ("/" + rawBasename.replace(/^\/+|\/+$/g, "")).replace(/^\/$/, "") : void 0;
|
|
2573
|
+
let result;
|
|
2574
|
+
if (extraction.kind === "inline") {
|
|
2575
|
+
result = buildCombinedRouteMapWithSearch(
|
|
2576
|
+
routerFilePath,
|
|
2577
|
+
void 0,
|
|
2578
|
+
void 0,
|
|
2579
|
+
void 0,
|
|
2580
|
+
extraction.block
|
|
2581
|
+
);
|
|
2582
|
+
} else {
|
|
2583
|
+
const imported = resolveImportedVariable(routerSource, extraction.name);
|
|
2584
|
+
if (imported) {
|
|
2585
|
+
const targetFile = resolveImportPath(imported.specifier, routerFilePath);
|
|
2586
|
+
if (!targetFile) {
|
|
2587
|
+
return { routes: {}, searchSchemas: {} };
|
|
2588
|
+
}
|
|
2589
|
+
result = buildCombinedRouteMapWithSearch(
|
|
2590
|
+
targetFile,
|
|
2591
|
+
imported.exportedName
|
|
2592
|
+
);
|
|
2593
|
+
} else {
|
|
2594
|
+
result = buildCombinedRouteMapWithSearch(routerFilePath, extraction.name);
|
|
2538
2595
|
}
|
|
2539
|
-
return buildCombinedRouteMapWithSearch(targetFile, imported.exportedName);
|
|
2540
2596
|
}
|
|
2541
|
-
|
|
2597
|
+
if (basename3) {
|
|
2598
|
+
result = applyBasenameToRoutes(result, basename3);
|
|
2599
|
+
}
|
|
2600
|
+
return result;
|
|
2542
2601
|
}
|
|
2543
2602
|
function findRouterFiles(root, filter) {
|
|
2544
2603
|
const result = [];
|
|
@@ -2547,7 +2606,7 @@ function findRouterFiles(root, filter) {
|
|
|
2547
2606
|
}
|
|
2548
2607
|
function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
|
|
2549
2608
|
try {
|
|
2550
|
-
const oldCombinedPath =
|
|
2609
|
+
const oldCombinedPath = join(root, "src", "named-routes.gen.ts");
|
|
2551
2610
|
if (existsSync3(oldCombinedPath)) {
|
|
2552
2611
|
unlinkSync(oldCombinedPath);
|
|
2553
2612
|
console.log(
|
|
@@ -2563,31 +2622,21 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
|
|
|
2563
2622
|
throw new Error(formatNestedRouterConflictError(nestedRouterConflict));
|
|
2564
2623
|
}
|
|
2565
2624
|
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);
|
|
2625
|
+
const result = buildCombinedRouteMapForRouterFile(routerFilePath);
|
|
2626
|
+
if (Object.keys(result.routes).length === 0 && Object.keys(result.searchSchemas).length === 0) {
|
|
2627
|
+
let routerSource;
|
|
2628
|
+
try {
|
|
2629
|
+
routerSource = readFileSync2(routerFilePath, "utf-8");
|
|
2630
|
+
} catch {
|
|
2631
|
+
continue;
|
|
2632
|
+
}
|
|
2633
|
+
if (!extractUrlsFromRouter(routerSource)) continue;
|
|
2585
2634
|
}
|
|
2586
2635
|
const routerBasename = pathBasename(routerFilePath).replace(
|
|
2587
2636
|
/\.(tsx?|jsx?)$/,
|
|
2588
2637
|
""
|
|
2589
2638
|
);
|
|
2590
|
-
const outPath =
|
|
2639
|
+
const outPath = join(
|
|
2591
2640
|
dirname2(routerFilePath),
|
|
2592
2641
|
`${routerBasename}.named-routes.gen.ts`
|
|
2593
2642
|
);
|
|
@@ -2717,8 +2766,9 @@ function createVersionPlugin() {
|
|
|
2717
2766
|
let isDev = false;
|
|
2718
2767
|
let server = null;
|
|
2719
2768
|
const clientModuleSignatures = /* @__PURE__ */ new Map();
|
|
2769
|
+
let versionCounter = 0;
|
|
2720
2770
|
const bumpVersion = (reason) => {
|
|
2721
|
-
currentVersion = Date.now().toString(16);
|
|
2771
|
+
currentVersion = Date.now().toString(16) + String(++versionCounter);
|
|
2722
2772
|
console.log(`[rsc-router] ${reason}, version updated: ${currentVersion}`);
|
|
2723
2773
|
const rscEnv = server?.environments?.rsc;
|
|
2724
2774
|
const versionMod = rscEnv?.moduleGraph?.getModuleById(
|
|
@@ -2774,6 +2824,9 @@ function createVersionPlugin() {
|
|
|
2774
2824
|
if (!isDev) return;
|
|
2775
2825
|
const isRscModule = this.environment?.name === "rsc";
|
|
2776
2826
|
if (!isRscModule) return;
|
|
2827
|
+
if (ctx.modules.length === 1 && ctx.modules[0].id === "\0" + VIRTUAL_IDS.version) {
|
|
2828
|
+
return;
|
|
2829
|
+
}
|
|
2777
2830
|
if (isCodeModule(ctx.file)) {
|
|
2778
2831
|
const filePath = normalizeModuleId(ctx.file);
|
|
2779
2832
|
const previousSignature = clientModuleSignatures.get(filePath);
|
|
@@ -2803,6 +2856,68 @@ function createVersionPlugin() {
|
|
|
2803
2856
|
|
|
2804
2857
|
// src/vite/utils/shared-utils.ts
|
|
2805
2858
|
import * as Vite from "vite";
|
|
2859
|
+
|
|
2860
|
+
// src/vite/plugins/performance-tracks.ts
|
|
2861
|
+
import { readFile } from "node:fs/promises";
|
|
2862
|
+
var RSDW_PATCH_RE = /((?:var|let|const)\s+\w+\s*=\s*root\._children\s*,\s*(\w+)\s*=\s*root\._debugInfo\s*[;,])/;
|
|
2863
|
+
function buildPatchReplacement(match, debugInfoVar) {
|
|
2864
|
+
return `${match}
|
|
2865
|
+
if (${debugInfoVar} && 0 === ${debugInfoVar}.length && "fulfilled" === root.status) {
|
|
2866
|
+
var _resolved = "function" === typeof resolveLazy ? resolveLazy(root.value) : root.value;
|
|
2867
|
+
if ("object" === typeof _resolved && null !== _resolved && isArrayImpl(_resolved._debugInfo)) {
|
|
2868
|
+
${debugInfoVar} = _resolved._debugInfo;
|
|
2869
|
+
}
|
|
2870
|
+
}`;
|
|
2871
|
+
}
|
|
2872
|
+
function patchRsdwClientDebugInfoRecovery(code) {
|
|
2873
|
+
const match = code.match(RSDW_PATCH_RE);
|
|
2874
|
+
if (!match) {
|
|
2875
|
+
return { code, debugInfoVar: null };
|
|
2876
|
+
}
|
|
2877
|
+
return {
|
|
2878
|
+
code: code.replace(match[1], buildPatchReplacement(match[1], match[2])),
|
|
2879
|
+
debugInfoVar: match[2]
|
|
2880
|
+
};
|
|
2881
|
+
}
|
|
2882
|
+
function performanceTracksOptimizeDepsPlugin() {
|
|
2883
|
+
return {
|
|
2884
|
+
name: "@rangojs/router:performance-tracks-optimize-deps",
|
|
2885
|
+
setup(build) {
|
|
2886
|
+
build.onLoad(
|
|
2887
|
+
{
|
|
2888
|
+
filter: /react-server-dom-webpack-client\.browser\.(development|production)\.js$/
|
|
2889
|
+
},
|
|
2890
|
+
async (args) => {
|
|
2891
|
+
const code = await readFile(args.path, "utf8");
|
|
2892
|
+
const patched = patchRsdwClientDebugInfoRecovery(code);
|
|
2893
|
+
return {
|
|
2894
|
+
contents: patched.code,
|
|
2895
|
+
loader: "js"
|
|
2896
|
+
};
|
|
2897
|
+
}
|
|
2898
|
+
);
|
|
2899
|
+
}
|
|
2900
|
+
};
|
|
2901
|
+
}
|
|
2902
|
+
function performanceTracksPlugin() {
|
|
2903
|
+
return {
|
|
2904
|
+
name: "@rangojs/router:performance-tracks",
|
|
2905
|
+
transform(code, id) {
|
|
2906
|
+
if (!id.includes("react-server-dom") || !id.includes("client")) return;
|
|
2907
|
+
const patched = patchRsdwClientDebugInfoRecovery(code);
|
|
2908
|
+
if (!patched.debugInfoVar) return;
|
|
2909
|
+
if (process.env.INTERNAL_RANGO_DEBUG)
|
|
2910
|
+
console.log(
|
|
2911
|
+
"[perf-tracks] patched RSDW client (var:",
|
|
2912
|
+
patched.debugInfoVar,
|
|
2913
|
+
")"
|
|
2914
|
+
);
|
|
2915
|
+
return patched.code;
|
|
2916
|
+
}
|
|
2917
|
+
};
|
|
2918
|
+
}
|
|
2919
|
+
|
|
2920
|
+
// src/vite/utils/shared-utils.ts
|
|
2806
2921
|
var versionEsbuildPlugin = {
|
|
2807
2922
|
name: "@rangojs/router-version",
|
|
2808
2923
|
setup(build) {
|
|
@@ -2820,7 +2935,7 @@ var versionEsbuildPlugin = {
|
|
|
2820
2935
|
}
|
|
2821
2936
|
};
|
|
2822
2937
|
var sharedEsbuildOptions = {
|
|
2823
|
-
plugins: [versionEsbuildPlugin]
|
|
2938
|
+
plugins: [versionEsbuildPlugin, performanceTracksOptimizeDepsPlugin()]
|
|
2824
2939
|
};
|
|
2825
2940
|
function createVirtualEntriesPlugin(entries, routerPathRef) {
|
|
2826
2941
|
const virtualModules = {};
|
|
@@ -2903,11 +3018,11 @@ ${dim} \u2571${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2
|
|
|
2903
3018
|
${dim} ${reset}${bold}\u2551 \u2551${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2727. \u2571${reset}
|
|
2904
3019
|
${dim} ${reset}${bold}\u2554\u2557 \u2551 \u2551 \u2551 \u2551${reset}${dim} * \u2571${reset}
|
|
2905
3020
|
${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}
|
|
3021
|
+
${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
3022
|
${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
3023
|
${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\
|
|
3024
|
+
${dim} * ${reset}${bold}\u2551 \u2551${reset}${dim} * \u2727. \u2571${reset}
|
|
3025
|
+
${dim} ${reset}${bold}\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550${reset}${dim} \u2726 *${reset}
|
|
2911
3026
|
|
|
2912
3027
|
v${version} \xB7 ${preset} \xB7 ${mode}
|
|
2913
3028
|
`;
|
|
@@ -3024,8 +3139,10 @@ function createCjsToEsmPlugin() {
|
|
|
3024
3139
|
|
|
3025
3140
|
// src/vite/router-discovery.ts
|
|
3026
3141
|
import { createServer as createViteServer } from "vite";
|
|
3027
|
-
import { resolve as
|
|
3142
|
+
import { resolve as resolve8 } from "node:path";
|
|
3028
3143
|
import { readFileSync as readFileSync6 } from "node:fs";
|
|
3144
|
+
import { createRequire } from "node:module";
|
|
3145
|
+
import { pathToFileURL } from "node:url";
|
|
3029
3146
|
|
|
3030
3147
|
// src/vite/plugins/virtual-stub-plugin.ts
|
|
3031
3148
|
function createVirtualStubPlugin() {
|
|
@@ -3052,7 +3169,7 @@ function createVirtualStubPlugin() {
|
|
|
3052
3169
|
}
|
|
3053
3170
|
|
|
3054
3171
|
// src/vite/plugins/client-ref-hashing.ts
|
|
3055
|
-
import { relative
|
|
3172
|
+
import { relative } from "node:path";
|
|
3056
3173
|
import { createHash as createHash2 } from "node:crypto";
|
|
3057
3174
|
var CLIENT_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-package-proxy/";
|
|
3058
3175
|
var CLIENT_IN_SERVER_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-in-server-package-proxy/";
|
|
@@ -3065,10 +3182,10 @@ function computeProductionHash(projectRoot, refKey) {
|
|
|
3065
3182
|
const absPath = decodeURIComponent(
|
|
3066
3183
|
refKey.slice(CLIENT_IN_SERVER_PKG_PROXY_PREFIX.length)
|
|
3067
3184
|
);
|
|
3068
|
-
toHash =
|
|
3185
|
+
toHash = relative(projectRoot, absPath).replaceAll("\\", "/");
|
|
3069
3186
|
} else if (refKey.startsWith(FS_PREFIX)) {
|
|
3070
3187
|
const absPath = refKey.slice(FS_PREFIX.length - 1);
|
|
3071
|
-
toHash =
|
|
3188
|
+
toHash = relative(projectRoot, absPath).replaceAll("\\", "/");
|
|
3072
3189
|
} else if (refKey.startsWith("/")) {
|
|
3073
3190
|
toHash = refKey.slice(1);
|
|
3074
3191
|
} else {
|
|
@@ -3207,10 +3324,10 @@ function createDiscoveryState(entryPath, opts) {
|
|
|
3207
3324
|
perRouterTrieMap: /* @__PURE__ */ new Map(),
|
|
3208
3325
|
perRouterPrecomputedMap: /* @__PURE__ */ new Map(),
|
|
3209
3326
|
perRouterManifestDataMap: /* @__PURE__ */ new Map(),
|
|
3210
|
-
|
|
3211
|
-
|
|
3212
|
-
|
|
3213
|
-
|
|
3327
|
+
prerenderManifestEntries: null,
|
|
3328
|
+
staticManifestEntries: null,
|
|
3329
|
+
handlerChunkInfoMap: /* @__PURE__ */ new Map(),
|
|
3330
|
+
staticHandlerChunkInfoMap: /* @__PURE__ */ new Map(),
|
|
3214
3331
|
rscEntryFileName: null,
|
|
3215
3332
|
resolvedPrerenderModules: void 0,
|
|
3216
3333
|
resolvedStaticModules: void 0,
|
|
@@ -3293,8 +3410,17 @@ function jsonParseExpression(value) {
|
|
|
3293
3410
|
}
|
|
3294
3411
|
|
|
3295
3412
|
// src/context-var.ts
|
|
3413
|
+
var NON_CACHEABLE_KEYS = /* @__PURE__ */ Symbol.for(
|
|
3414
|
+
"rango:non-cacheable-keys"
|
|
3415
|
+
);
|
|
3416
|
+
function getNonCacheableKeys(variables) {
|
|
3417
|
+
if (!variables[NON_CACHEABLE_KEYS]) {
|
|
3418
|
+
variables[NON_CACHEABLE_KEYS] = /* @__PURE__ */ new Set();
|
|
3419
|
+
}
|
|
3420
|
+
return variables[NON_CACHEABLE_KEYS];
|
|
3421
|
+
}
|
|
3296
3422
|
var FORBIDDEN_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
|
|
3297
|
-
function contextSet(variables, keyOrVar, value) {
|
|
3423
|
+
function contextSet(variables, keyOrVar, value, options) {
|
|
3298
3424
|
if (typeof keyOrVar === "string") {
|
|
3299
3425
|
if (FORBIDDEN_KEYS.has(keyOrVar)) {
|
|
3300
3426
|
throw new Error(
|
|
@@ -3302,12 +3428,28 @@ function contextSet(variables, keyOrVar, value) {
|
|
|
3302
3428
|
);
|
|
3303
3429
|
}
|
|
3304
3430
|
variables[keyOrVar] = value;
|
|
3431
|
+
if (options?.cache === false) {
|
|
3432
|
+
getNonCacheableKeys(variables).add(keyOrVar);
|
|
3433
|
+
}
|
|
3305
3434
|
} else {
|
|
3306
3435
|
variables[keyOrVar.key] = value;
|
|
3436
|
+
if (options?.cache === false) {
|
|
3437
|
+
getNonCacheableKeys(variables).add(keyOrVar.key);
|
|
3438
|
+
}
|
|
3307
3439
|
}
|
|
3308
3440
|
}
|
|
3309
3441
|
|
|
3310
3442
|
// src/vite/utils/prerender-utils.ts
|
|
3443
|
+
import { createHash as createHash4 } from "node:crypto";
|
|
3444
|
+
import {
|
|
3445
|
+
copyFileSync,
|
|
3446
|
+
existsSync as existsSync4,
|
|
3447
|
+
mkdirSync,
|
|
3448
|
+
rmSync,
|
|
3449
|
+
statSync,
|
|
3450
|
+
writeFileSync as writeFileSync2
|
|
3451
|
+
} from "node:fs";
|
|
3452
|
+
import { resolve as resolve5 } from "node:path";
|
|
3311
3453
|
function escapeRegExp2(str) {
|
|
3312
3454
|
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
3313
3455
|
}
|
|
@@ -3316,6 +3458,7 @@ function encodePathParam(value) {
|
|
|
3316
3458
|
}
|
|
3317
3459
|
function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
|
|
3318
3460
|
let result = pattern;
|
|
3461
|
+
let hadOmittedOptional = false;
|
|
3319
3462
|
for (const [key, value] of Object.entries(params)) {
|
|
3320
3463
|
const escaped = escapeRegExp2(key);
|
|
3321
3464
|
result = result.replace(
|
|
@@ -3324,6 +3467,15 @@ function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
|
|
|
3324
3467
|
);
|
|
3325
3468
|
result = result.replace(`*${key}`, encode(value));
|
|
3326
3469
|
}
|
|
3470
|
+
result = result.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?\?/g, () => {
|
|
3471
|
+
hadOmittedOptional = true;
|
|
3472
|
+
return "";
|
|
3473
|
+
});
|
|
3474
|
+
if (hadOmittedOptional) {
|
|
3475
|
+
const hadTrailingSlash = pattern.length > 1 && pattern.endsWith("/");
|
|
3476
|
+
result = result.replace(/\/\/+/g, "/").replace(/\/+$/, "") || "/";
|
|
3477
|
+
if (hadTrailingSlash && !result.endsWith("/")) result += "/";
|
|
3478
|
+
}
|
|
3327
3479
|
return result;
|
|
3328
3480
|
}
|
|
3329
3481
|
async function runWithConcurrency(items, concurrency, fn) {
|
|
@@ -3386,6 +3538,37 @@ function notifyOnError(registry, error, phase, routeKey, pathname, skipped) {
|
|
|
3386
3538
|
break;
|
|
3387
3539
|
}
|
|
3388
3540
|
}
|
|
3541
|
+
function getStagedAssetDir(projectRoot) {
|
|
3542
|
+
return resolve5(projectRoot, "node_modules/.rangojs-router-build/rsc-assets");
|
|
3543
|
+
}
|
|
3544
|
+
function resetStagedBuildAssets(projectRoot) {
|
|
3545
|
+
rmSync(getStagedAssetDir(projectRoot), { recursive: true, force: true });
|
|
3546
|
+
}
|
|
3547
|
+
function stageBuildAssetModule(projectRoot, prefix, exportValue) {
|
|
3548
|
+
const stagedDir = getStagedAssetDir(projectRoot);
|
|
3549
|
+
mkdirSync(stagedDir, { recursive: true });
|
|
3550
|
+
const contentHash = createHash4("sha256").update(exportValue).digest("hex").slice(0, 8);
|
|
3551
|
+
const fileName = `${prefix}-${contentHash}.js`;
|
|
3552
|
+
const filePath = resolve5(stagedDir, fileName);
|
|
3553
|
+
if (!existsSync4(filePath)) {
|
|
3554
|
+
writeFileSync2(filePath, `export default ${exportValue};
|
|
3555
|
+
`);
|
|
3556
|
+
}
|
|
3557
|
+
return fileName;
|
|
3558
|
+
}
|
|
3559
|
+
function copyStagedBuildAssets(projectRoot, fileNames) {
|
|
3560
|
+
const stagedDir = getStagedAssetDir(projectRoot);
|
|
3561
|
+
const distAssetsDir = resolve5(projectRoot, "dist/rsc/assets");
|
|
3562
|
+
mkdirSync(distAssetsDir, { recursive: true });
|
|
3563
|
+
let totalBytes = 0;
|
|
3564
|
+
for (const fileName of new Set(fileNames)) {
|
|
3565
|
+
const stagedPath = resolve5(stagedDir, fileName);
|
|
3566
|
+
const distPath = resolve5(distAssetsDir, fileName);
|
|
3567
|
+
copyFileSync(stagedPath, distPath);
|
|
3568
|
+
totalBytes += statSync(stagedPath).size;
|
|
3569
|
+
}
|
|
3570
|
+
return totalBytes;
|
|
3571
|
+
}
|
|
3389
3572
|
|
|
3390
3573
|
// src/vite/discovery/prerender-collection.ts
|
|
3391
3574
|
async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
@@ -3404,11 +3587,12 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3404
3587
|
for (const { manifest } of allManifests) {
|
|
3405
3588
|
if (!manifest.prerenderRoutes) continue;
|
|
3406
3589
|
const defs = manifest._prerenderDefs || {};
|
|
3590
|
+
const passthroughSet = new Set(manifest.passthroughRoutes || []);
|
|
3407
3591
|
for (const routeName of manifest.prerenderRoutes) {
|
|
3408
3592
|
const pattern = manifest.routeManifest[routeName];
|
|
3409
3593
|
if (!pattern) continue;
|
|
3410
3594
|
const def = defs[routeName];
|
|
3411
|
-
const isPassthroughRoute =
|
|
3595
|
+
const isPassthroughRoute = passthroughSet.has(routeName);
|
|
3412
3596
|
const hasDynamic = pattern.includes(":") || pattern.includes("*");
|
|
3413
3597
|
if (!hasDynamic) {
|
|
3414
3598
|
entries.push({
|
|
@@ -3421,12 +3605,20 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3421
3605
|
if (def?.getParams) {
|
|
3422
3606
|
try {
|
|
3423
3607
|
const buildVars = {};
|
|
3608
|
+
const buildEnv = state.resolvedBuildEnv;
|
|
3424
3609
|
const getParamsCtx = {
|
|
3425
3610
|
build: true,
|
|
3611
|
+
dev: !state.isBuildMode,
|
|
3426
3612
|
set: ((keyOrVar, value) => {
|
|
3427
3613
|
contextSet(buildVars, keyOrVar, value);
|
|
3428
3614
|
}),
|
|
3429
|
-
reverse: getParamsReverse
|
|
3615
|
+
reverse: getParamsReverse,
|
|
3616
|
+
get env() {
|
|
3617
|
+
if (buildEnv !== void 0) return buildEnv;
|
|
3618
|
+
throw new Error(
|
|
3619
|
+
"[rsc-router] ctx.env is not available during build-time getParams(). Configure buildEnv in your rango() plugin options to enable build-time env access."
|
|
3620
|
+
);
|
|
3621
|
+
}
|
|
3430
3622
|
};
|
|
3431
3623
|
const paramsList = await def.getParams(getParamsCtx);
|
|
3432
3624
|
const concurrency = def.options?.concurrency ?? 1;
|
|
@@ -3487,7 +3679,7 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3487
3679
|
`[rsc-router] Pre-rendering ${entries.length} URL(s)${concurrencyNote}...`
|
|
3488
3680
|
);
|
|
3489
3681
|
const { hashParams } = await rscEnv.runner.import("@rangojs/router/build");
|
|
3490
|
-
const
|
|
3682
|
+
const manifestEntries = {};
|
|
3491
3683
|
let doneCount = 0;
|
|
3492
3684
|
let skipCount = 0;
|
|
3493
3685
|
const startTotal = performance.now();
|
|
@@ -3505,7 +3697,8 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3505
3697
|
entry.urlPath,
|
|
3506
3698
|
{},
|
|
3507
3699
|
entry.buildVars,
|
|
3508
|
-
entry.isPassthroughRoute
|
|
3700
|
+
entry.isPassthroughRoute,
|
|
3701
|
+
state.resolvedBuildEnv
|
|
3509
3702
|
);
|
|
3510
3703
|
if (!result) continue;
|
|
3511
3704
|
if (result.passthrough) {
|
|
@@ -3517,18 +3710,30 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3517
3710
|
break;
|
|
3518
3711
|
}
|
|
3519
3712
|
const paramHash = hashParams(result.params || {});
|
|
3520
|
-
|
|
3713
|
+
const mainKey = `${result.routeName}/${paramHash}`;
|
|
3714
|
+
const mainValue = JSON.stringify({
|
|
3521
3715
|
segments: result.segments,
|
|
3522
3716
|
handles: result.handles
|
|
3523
|
-
};
|
|
3717
|
+
});
|
|
3718
|
+
manifestEntries[mainKey] = stageBuildAssetModule(
|
|
3719
|
+
state.projectRoot,
|
|
3720
|
+
"__pr",
|
|
3721
|
+
mainValue
|
|
3722
|
+
);
|
|
3524
3723
|
if (result.interceptSegments?.length) {
|
|
3525
|
-
|
|
3724
|
+
const interceptKey = `${result.routeName}/${paramHash}/i`;
|
|
3725
|
+
const interceptValue = JSON.stringify({
|
|
3526
3726
|
segments: [...result.segments, ...result.interceptSegments],
|
|
3527
3727
|
handles: {
|
|
3528
3728
|
...result.handles,
|
|
3529
3729
|
...result.interceptHandles || {}
|
|
3530
3730
|
}
|
|
3531
|
-
};
|
|
3731
|
+
});
|
|
3732
|
+
manifestEntries[interceptKey] = stageBuildAssetModule(
|
|
3733
|
+
state.projectRoot,
|
|
3734
|
+
"__pr",
|
|
3735
|
+
interceptValue
|
|
3736
|
+
);
|
|
3532
3737
|
}
|
|
3533
3738
|
const elapsed = (performance.now() - startUrl).toFixed(0);
|
|
3534
3739
|
console.log(
|
|
@@ -3572,7 +3777,7 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3572
3777
|
}
|
|
3573
3778
|
const totalElapsed = (performance.now() - startTotal).toFixed(0);
|
|
3574
3779
|
if (doneCount > 0) {
|
|
3575
|
-
state.
|
|
3780
|
+
state.prerenderManifestEntries = manifestEntries;
|
|
3576
3781
|
}
|
|
3577
3782
|
const parts = [`${doneCount} done`];
|
|
3578
3783
|
if (skipCount > 0) parts.push(`${skipCount} skipped`);
|
|
@@ -3583,7 +3788,7 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3583
3788
|
async function renderStaticHandlers(state, rscEnv, registry) {
|
|
3584
3789
|
if (!state.opts?.enableBuildPrerender || !state.isBuildMode || !state.resolvedStaticModules?.size)
|
|
3585
3790
|
return;
|
|
3586
|
-
const
|
|
3791
|
+
const manifestEntries = {};
|
|
3587
3792
|
let staticDone = 0;
|
|
3588
3793
|
let staticSkip = 0;
|
|
3589
3794
|
let totalStaticCount = 0;
|
|
@@ -3617,10 +3822,18 @@ async function renderStaticHandlers(state, rscEnv, registry) {
|
|
|
3617
3822
|
const result = await routerInstance.renderStaticSegment(
|
|
3618
3823
|
def.handler,
|
|
3619
3824
|
def.$$id,
|
|
3620
|
-
def.$$routePrefix
|
|
3825
|
+
def.$$routePrefix,
|
|
3826
|
+
state.resolvedBuildEnv,
|
|
3827
|
+
!state.isBuildMode
|
|
3621
3828
|
);
|
|
3622
3829
|
if (result) {
|
|
3623
|
-
|
|
3830
|
+
const hasHandles = Object.keys(result.handles).length > 0;
|
|
3831
|
+
const exportValue = hasHandles ? JSON.stringify(result) : JSON.stringify(result.encoded);
|
|
3832
|
+
manifestEntries[def.$$id] = stageBuildAssetModule(
|
|
3833
|
+
state.projectRoot,
|
|
3834
|
+
"__st",
|
|
3835
|
+
exportValue
|
|
3836
|
+
);
|
|
3624
3837
|
const elapsed = (performance.now() - startHandler).toFixed(0);
|
|
3625
3838
|
console.log(
|
|
3626
3839
|
`[rsc-router] OK ${name.padEnd(40)} (${elapsed}ms)`
|
|
@@ -3657,7 +3870,7 @@ async function renderStaticHandlers(state, rscEnv, registry) {
|
|
|
3657
3870
|
}
|
|
3658
3871
|
const totalStaticElapsed = (performance.now() - startStatic).toFixed(0);
|
|
3659
3872
|
if (staticDone > 0) {
|
|
3660
|
-
state.
|
|
3873
|
+
state.staticManifestEntries = manifestEntries;
|
|
3661
3874
|
}
|
|
3662
3875
|
const staticParts = [`${staticDone} done`];
|
|
3663
3876
|
if (staticSkip > 0) staticParts.push(`${staticSkip} skipped`);
|
|
@@ -3674,8 +3887,7 @@ async function discoverRouters(state, rscEnv) {
|
|
|
3674
3887
|
let registry = serverMod.RouterRegistry;
|
|
3675
3888
|
if (!registry || registry.size === 0) {
|
|
3676
3889
|
try {
|
|
3677
|
-
const
|
|
3678
|
-
const hostRegistry = hostMod.HostRouterRegistry;
|
|
3890
|
+
const hostRegistry = serverMod.HostRouterRegistry;
|
|
3679
3891
|
if (hostRegistry && hostRegistry.size > 0) {
|
|
3680
3892
|
console.log(
|
|
3681
3893
|
`[rsc-router] Found ${hostRegistry.size} host router(s), resolving lazy handlers...`
|
|
@@ -3737,7 +3949,11 @@ async function discoverRouters(state, rscEnv) {
|
|
|
3737
3949
|
if (!router.urlpatterns || !generateManifestFull) {
|
|
3738
3950
|
continue;
|
|
3739
3951
|
}
|
|
3740
|
-
const manifest = generateManifestFull(
|
|
3952
|
+
const manifest = generateManifestFull(
|
|
3953
|
+
router.urlpatterns,
|
|
3954
|
+
routerMountIndex,
|
|
3955
|
+
router.__basename ? { urlPrefix: router.__basename } : void 0
|
|
3956
|
+
);
|
|
3741
3957
|
routerMountIndex++;
|
|
3742
3958
|
allManifests.push({ id, manifest });
|
|
3743
3959
|
const routeCount = Object.keys(manifest.routeManifest).length;
|
|
@@ -3879,8 +4095,8 @@ async function discoverRouters(state, rscEnv) {
|
|
|
3879
4095
|
}
|
|
3880
4096
|
|
|
3881
4097
|
// src/vite/discovery/route-types-writer.ts
|
|
3882
|
-
import { dirname as dirname3, basename, join as
|
|
3883
|
-
import { readFileSync as readFileSync4, writeFileSync as
|
|
4098
|
+
import { dirname as dirname3, basename, join as join2, resolve as resolve6 } from "node:path";
|
|
4099
|
+
import { readFileSync as readFileSync4, writeFileSync as writeFileSync3, existsSync as existsSync5, unlinkSync as unlinkSync2 } from "node:fs";
|
|
3884
4100
|
function filterUserNamedRoutes(manifest) {
|
|
3885
4101
|
const filtered = {};
|
|
3886
4102
|
for (const [name, pattern] of Object.entries(manifest)) {
|
|
@@ -3900,7 +4116,7 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
|
|
|
3900
4116
|
/\.(tsx?|jsx?)$/,
|
|
3901
4117
|
""
|
|
3902
4118
|
);
|
|
3903
|
-
const outPath =
|
|
4119
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
3904
4120
|
try {
|
|
3905
4121
|
preContent.set(outPath, readFileSync4(outPath, "utf-8"));
|
|
3906
4122
|
} catch {
|
|
@@ -3913,8 +4129,8 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
|
|
|
3913
4129
|
/\.(tsx?|jsx?)$/,
|
|
3914
4130
|
""
|
|
3915
4131
|
);
|
|
3916
|
-
const outPath =
|
|
3917
|
-
if (!
|
|
4132
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
4133
|
+
if (!existsSync5(outPath)) continue;
|
|
3918
4134
|
try {
|
|
3919
4135
|
const content = readFileSync4(outPath, "utf-8");
|
|
3920
4136
|
if (content !== preContent.get(outPath)) {
|
|
@@ -3928,10 +4144,10 @@ function writeRouteTypesFiles(state) {
|
|
|
3928
4144
|
if (state.perRouterManifests.length === 0) return;
|
|
3929
4145
|
try {
|
|
3930
4146
|
const entryDir = dirname3(
|
|
3931
|
-
|
|
4147
|
+
resolve6(state.projectRoot, state.resolvedEntryPath)
|
|
3932
4148
|
);
|
|
3933
|
-
const oldCombinedPath =
|
|
3934
|
-
if (
|
|
4149
|
+
const oldCombinedPath = join2(entryDir, "named-routes.gen.ts");
|
|
4150
|
+
if (existsSync5(oldCombinedPath)) {
|
|
3935
4151
|
unlinkSync2(oldCombinedPath);
|
|
3936
4152
|
console.log(
|
|
3937
4153
|
`[rsc-router] Removed stale combined route types: ${oldCombinedPath}`
|
|
@@ -3955,7 +4171,7 @@ Set an explicit \`id\` on createRouter() or check the call site.`
|
|
|
3955
4171
|
}
|
|
3956
4172
|
const routerDir = dirname3(sourceFile);
|
|
3957
4173
|
const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
|
|
3958
|
-
const outPath =
|
|
4174
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
3959
4175
|
const userRoutes = filterUserNamedRoutes(routeManifest);
|
|
3960
4176
|
let effectiveSearchSchemas = routeSearchSchemas;
|
|
3961
4177
|
if ((!effectiveSearchSchemas || Object.keys(effectiveSearchSchemas).length === 0) && sourceFile) {
|
|
@@ -3975,10 +4191,10 @@ Set an explicit \`id\` on createRouter() or check the call site.`
|
|
|
3975
4191
|
userRoutes,
|
|
3976
4192
|
effectiveSearchSchemas && Object.keys(effectiveSearchSchemas).length > 0 ? effectiveSearchSchemas : void 0
|
|
3977
4193
|
);
|
|
3978
|
-
const existing =
|
|
4194
|
+
const existing = existsSync5(outPath) ? readFileSync4(outPath, "utf-8") : null;
|
|
3979
4195
|
if (existing !== source) {
|
|
3980
4196
|
markSelfGenWrite(state, outPath, source);
|
|
3981
|
-
|
|
4197
|
+
writeFileSync3(outPath, source);
|
|
3982
4198
|
console.log(`[rsc-router] Generated route types -> ${outPath}`);
|
|
3983
4199
|
}
|
|
3984
4200
|
}
|
|
@@ -4020,21 +4236,21 @@ function supplementGenFilesWithRuntimeRoutes(state) {
|
|
|
4020
4236
|
}
|
|
4021
4237
|
const routerDir = dirname3(sourceFile);
|
|
4022
4238
|
const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
|
|
4023
|
-
const outPath =
|
|
4239
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
4024
4240
|
const source = generateRouteTypesSource(
|
|
4025
4241
|
mergedRoutes,
|
|
4026
4242
|
Object.keys(mergedSearchSchemas).length > 0 ? mergedSearchSchemas : void 0
|
|
4027
4243
|
);
|
|
4028
|
-
const existing =
|
|
4244
|
+
const existing = existsSync5(outPath) ? readFileSync4(outPath, "utf-8") : null;
|
|
4029
4245
|
if (existing !== source) {
|
|
4030
4246
|
markSelfGenWrite(state, outPath, source);
|
|
4031
|
-
|
|
4247
|
+
writeFileSync3(outPath, source);
|
|
4032
4248
|
}
|
|
4033
4249
|
}
|
|
4034
4250
|
}
|
|
4035
4251
|
|
|
4036
4252
|
// src/vite/discovery/virtual-module-codegen.ts
|
|
4037
|
-
import { dirname as dirname4, basename as basename2, join as
|
|
4253
|
+
import { dirname as dirname4, basename as basename2, join as join3 } from "node:path";
|
|
4038
4254
|
function generateRoutesManifestModule(state) {
|
|
4039
4255
|
const hasManifest = state.mergedRouteManifest && Object.keys(state.mergedRouteManifest).length > 0;
|
|
4040
4256
|
if (hasManifest) {
|
|
@@ -4049,7 +4265,7 @@ function generateRoutesManifestModule(state) {
|
|
|
4049
4265
|
/\.(tsx?|jsx?)$/,
|
|
4050
4266
|
""
|
|
4051
4267
|
);
|
|
4052
|
-
const genPath =
|
|
4268
|
+
const genPath = join3(
|
|
4053
4269
|
routerDir,
|
|
4054
4270
|
`${routerBasename}.named-routes.gen.js`
|
|
4055
4271
|
).replaceAll("\\", "/");
|
|
@@ -4146,7 +4362,7 @@ function generatePerRouterModule(state, routerId) {
|
|
|
4146
4362
|
/\.(tsx?|jsx?)$/,
|
|
4147
4363
|
""
|
|
4148
4364
|
);
|
|
4149
|
-
const genPath =
|
|
4365
|
+
const genPath = join3(
|
|
4150
4366
|
routerDir,
|
|
4151
4367
|
`${routerBasename}.named-routes.gen.js`
|
|
4152
4368
|
).replaceAll("\\", "/");
|
|
@@ -4173,100 +4389,90 @@ function generatePerRouterModule(state, routerId) {
|
|
|
4173
4389
|
}
|
|
4174
4390
|
|
|
4175
4391
|
// src/vite/discovery/bundle-postprocess.ts
|
|
4176
|
-
import { resolve as
|
|
4177
|
-
import {
|
|
4178
|
-
import { readFileSync as readFileSync5, writeFileSync as writeFileSync3, existsSync as existsSync5, mkdirSync } from "node:fs";
|
|
4392
|
+
import { resolve as resolve7 } from "node:path";
|
|
4393
|
+
import { readFileSync as readFileSync5, writeFileSync as writeFileSync4, existsSync as existsSync6 } from "node:fs";
|
|
4179
4394
|
function postprocessBundle(state) {
|
|
4180
|
-
const hasPrerenderData = state.
|
|
4181
|
-
const hasStaticData = state.
|
|
4395
|
+
const hasPrerenderData = state.prerenderManifestEntries && Object.keys(state.prerenderManifestEntries).length > 0;
|
|
4396
|
+
const hasStaticData = state.staticManifestEntries && Object.keys(state.staticManifestEntries).length > 0;
|
|
4182
4397
|
if (!hasPrerenderData && !hasStaticData) return;
|
|
4183
|
-
const rscEntryPath =
|
|
4398
|
+
const rscEntryPath = resolve7(
|
|
4184
4399
|
state.projectRoot,
|
|
4185
4400
|
"dist/rsc",
|
|
4186
4401
|
state.rscEntryFileName ?? "index.js"
|
|
4187
4402
|
);
|
|
4188
4403
|
const evictionTargets = [
|
|
4189
4404
|
{
|
|
4190
|
-
|
|
4405
|
+
infos: state.handlerChunkInfoMap.values(),
|
|
4191
4406
|
fnName: "Prerender",
|
|
4192
4407
|
brand: "prerenderHandler",
|
|
4193
4408
|
label: "handler code from RSC bundle"
|
|
4194
4409
|
},
|
|
4195
4410
|
{
|
|
4196
|
-
|
|
4411
|
+
infos: state.staticHandlerChunkInfoMap.values(),
|
|
4197
4412
|
fnName: "Static",
|
|
4198
4413
|
brand: "staticHandler",
|
|
4199
4414
|
label: "static handler code"
|
|
4200
4415
|
}
|
|
4201
4416
|
];
|
|
4202
4417
|
for (const target of evictionTargets) {
|
|
4203
|
-
|
|
4204
|
-
|
|
4205
|
-
|
|
4206
|
-
|
|
4207
|
-
|
|
4208
|
-
|
|
4209
|
-
|
|
4210
|
-
|
|
4211
|
-
|
|
4212
|
-
|
|
4213
|
-
|
|
4214
|
-
|
|
4215
|
-
|
|
4216
|
-
|
|
4217
|
-
|
|
4218
|
-
|
|
4219
|
-
|
|
4220
|
-
|
|
4221
|
-
|
|
4418
|
+
for (const info of target.infos) {
|
|
4419
|
+
const chunkPath = resolve7(state.projectRoot, "dist/rsc", info.fileName);
|
|
4420
|
+
try {
|
|
4421
|
+
const code = readFileSync5(chunkPath, "utf-8");
|
|
4422
|
+
const result = evictHandlerCode(
|
|
4423
|
+
code,
|
|
4424
|
+
info.exports,
|
|
4425
|
+
target.fnName,
|
|
4426
|
+
target.brand
|
|
4427
|
+
);
|
|
4428
|
+
if (result) {
|
|
4429
|
+
writeFileSync4(chunkPath, result.code);
|
|
4430
|
+
const savedKB = (result.savedBytes / 1024).toFixed(1);
|
|
4431
|
+
console.log(
|
|
4432
|
+
`[rsc-router] Evicted ${target.label} (${savedKB} KB saved): ${info.fileName}`
|
|
4433
|
+
);
|
|
4434
|
+
}
|
|
4435
|
+
} catch (replaceErr) {
|
|
4436
|
+
console.warn(
|
|
4437
|
+
`[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
|
|
4222
4438
|
);
|
|
4223
4439
|
}
|
|
4224
|
-
} catch (replaceErr) {
|
|
4225
|
-
console.warn(
|
|
4226
|
-
`[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
|
|
4227
|
-
);
|
|
4228
4440
|
}
|
|
4229
4441
|
}
|
|
4230
|
-
state.
|
|
4231
|
-
state.
|
|
4232
|
-
if (hasPrerenderData &&
|
|
4442
|
+
state.handlerChunkInfoMap.clear();
|
|
4443
|
+
state.staticHandlerChunkInfoMap.clear();
|
|
4444
|
+
if (hasPrerenderData && existsSync6(rscEntryPath)) {
|
|
4233
4445
|
const rscCode = readFileSync5(rscEntryPath, "utf-8");
|
|
4234
4446
|
if (!rscCode.includes("__prerender-manifest.js")) {
|
|
4235
4447
|
try {
|
|
4236
|
-
|
|
4237
|
-
|
|
4238
|
-
|
|
4239
|
-
|
|
4240
|
-
|
|
4241
|
-
|
|
4448
|
+
let totalBytes = copyStagedBuildAssets(
|
|
4449
|
+
state.projectRoot,
|
|
4450
|
+
Object.values(state.prerenderManifestEntries)
|
|
4451
|
+
);
|
|
4452
|
+
const manifestMap = {};
|
|
4453
|
+
for (const [key, assetFileName] of Object.entries(
|
|
4454
|
+
state.prerenderManifestEntries
|
|
4242
4455
|
)) {
|
|
4243
|
-
|
|
4244
|
-
const contentHash = createHash4("sha256").update(entryJson).digest("hex").slice(0, 8);
|
|
4245
|
-
const assetFileName = `__pr-${contentHash}.js`;
|
|
4246
|
-
const assetPath = resolve6(assetsDir, assetFileName);
|
|
4247
|
-
const assetCode = `export default ${entryJson};
|
|
4248
|
-
`;
|
|
4249
|
-
writeFileSync3(assetPath, assetCode);
|
|
4250
|
-
totalBytes += Buffer.byteLength(assetCode);
|
|
4251
|
-
manifestEntries.push(
|
|
4252
|
-
`${JSON.stringify(key)}:()=>import("./assets/${assetFileName}")`
|
|
4253
|
-
);
|
|
4456
|
+
manifestMap[key] = `./assets/${assetFileName}`;
|
|
4254
4457
|
}
|
|
4255
|
-
const manifestCode =
|
|
4256
|
-
|
|
4257
|
-
|
|
4458
|
+
const manifestCode = [
|
|
4459
|
+
`const m=JSON.parse('${JSON.stringify(manifestMap).replace(/'/g, "\\'")}');`,
|
|
4460
|
+
`export function loadPrerenderAsset(s){return import(s)}`,
|
|
4461
|
+
`export default m;`,
|
|
4462
|
+
""
|
|
4463
|
+
].join("\n");
|
|
4464
|
+
const manifestPath = resolve7(
|
|
4258
4465
|
state.projectRoot,
|
|
4259
4466
|
"dist/rsc/__prerender-manifest.js"
|
|
4260
4467
|
);
|
|
4261
|
-
|
|
4468
|
+
writeFileSync4(manifestPath, manifestCode);
|
|
4262
4469
|
totalBytes += Buffer.byteLength(manifestCode);
|
|
4263
|
-
const injection = `
|
|
4264
|
-
globalThis.__PRERENDER_MANIFEST = __pm;
|
|
4470
|
+
const injection = `globalThis.__loadPrerenderManifestModule = () => import("./__prerender-manifest.js");
|
|
4265
4471
|
`;
|
|
4266
|
-
|
|
4472
|
+
writeFileSync4(rscEntryPath, injection + rscCode);
|
|
4267
4473
|
const totalKB = (totalBytes / 1024).toFixed(1);
|
|
4268
4474
|
console.log(
|
|
4269
|
-
`[rsc-router] Wrote prerender assets (${totalKB} KB total, ${Object.keys(state.
|
|
4475
|
+
`[rsc-router] Wrote prerender assets (${totalKB} KB total, ${Object.keys(state.prerenderManifestEntries).length} entries)`
|
|
4270
4476
|
);
|
|
4271
4477
|
} catch (err) {
|
|
4272
4478
|
throw new Error(
|
|
@@ -4275,44 +4481,36 @@ globalThis.__PRERENDER_MANIFEST = __pm;
|
|
|
4275
4481
|
}
|
|
4276
4482
|
}
|
|
4277
4483
|
}
|
|
4278
|
-
if (hasStaticData &&
|
|
4484
|
+
if (hasStaticData && existsSync6(rscEntryPath)) {
|
|
4279
4485
|
const rscCode = readFileSync5(rscEntryPath, "utf-8");
|
|
4280
|
-
if (!rscCode.includes("
|
|
4486
|
+
if (!rscCode.includes("__static-manifest.js")) {
|
|
4281
4487
|
try {
|
|
4282
|
-
const assetsDir = resolve6(state.projectRoot, "dist/rsc/assets");
|
|
4283
|
-
mkdirSync(assetsDir, { recursive: true });
|
|
4284
4488
|
const manifestEntries = [];
|
|
4285
|
-
let totalBytes =
|
|
4286
|
-
|
|
4287
|
-
state.
|
|
4489
|
+
let totalBytes = copyStagedBuildAssets(
|
|
4490
|
+
state.projectRoot,
|
|
4491
|
+
Object.values(state.staticManifestEntries)
|
|
4492
|
+
);
|
|
4493
|
+
for (const [handlerId, assetFileName] of Object.entries(
|
|
4494
|
+
state.staticManifestEntries
|
|
4288
4495
|
)) {
|
|
4289
|
-
const hasHandles = Object.keys(handles).length > 0;
|
|
4290
|
-
const exportValue = hasHandles ? JSON.stringify({ encoded, handles }) : JSON.stringify(encoded);
|
|
4291
|
-
const contentHash = createHash4("sha256").update(exportValue).digest("hex").slice(0, 8);
|
|
4292
|
-
const assetFileName = `__st-${contentHash}.js`;
|
|
4293
|
-
const assetPath = resolve6(assetsDir, assetFileName);
|
|
4294
|
-
const assetCode = `export default ${exportValue};
|
|
4295
|
-
`;
|
|
4296
|
-
writeFileSync3(assetPath, assetCode);
|
|
4297
|
-
totalBytes += Buffer.byteLength(assetCode);
|
|
4298
4496
|
manifestEntries.push(
|
|
4299
4497
|
`${JSON.stringify(handlerId)}:()=>import("./assets/${assetFileName}")`
|
|
4300
4498
|
);
|
|
4301
4499
|
}
|
|
4302
4500
|
const manifestCode = `const m={${manifestEntries.join(",")}};globalThis.__STATIC_MANIFEST=m;export default m;
|
|
4303
4501
|
`;
|
|
4304
|
-
const manifestPath =
|
|
4502
|
+
const manifestPath = resolve7(
|
|
4305
4503
|
state.projectRoot,
|
|
4306
4504
|
"dist/rsc/__static-manifest.js"
|
|
4307
4505
|
);
|
|
4308
|
-
|
|
4506
|
+
writeFileSync4(manifestPath, manifestCode);
|
|
4309
4507
|
totalBytes += Buffer.byteLength(manifestCode);
|
|
4310
4508
|
const injection = `import "./__static-manifest.js";
|
|
4311
4509
|
`;
|
|
4312
|
-
|
|
4510
|
+
writeFileSync4(rscEntryPath, injection + rscCode);
|
|
4313
4511
|
const totalKB = (totalBytes / 1024).toFixed(1);
|
|
4314
4512
|
console.log(
|
|
4315
|
-
`[rsc-router] Wrote static assets (${totalKB} KB total, ${Object.keys(state.
|
|
4513
|
+
`[rsc-router] Wrote static assets (${totalKB} KB total, ${Object.keys(state.staticManifestEntries).length} entries)`
|
|
4316
4514
|
);
|
|
4317
4515
|
} catch (err) {
|
|
4318
4516
|
throw new Error(
|
|
@@ -4354,8 +4552,67 @@ async function createTempRscServer(state, options = {}) {
|
|
|
4354
4552
|
]
|
|
4355
4553
|
});
|
|
4356
4554
|
}
|
|
4555
|
+
async function resolveBuildEnv(option, factoryCtx) {
|
|
4556
|
+
if (!option) return null;
|
|
4557
|
+
if (option === "auto") {
|
|
4558
|
+
if (factoryCtx.preset !== "cloudflare") {
|
|
4559
|
+
throw new Error(
|
|
4560
|
+
'[rsc-router] buildEnv: "auto" is only supported with preset: "cloudflare". Use a factory function or plain object for other presets.'
|
|
4561
|
+
);
|
|
4562
|
+
}
|
|
4563
|
+
try {
|
|
4564
|
+
const userRequire = createRequire(
|
|
4565
|
+
resolve8(factoryCtx.root, "package.json")
|
|
4566
|
+
);
|
|
4567
|
+
const wranglerPath = userRequire.resolve("wrangler");
|
|
4568
|
+
const { getPlatformProxy } = await import(pathToFileURL(wranglerPath).href);
|
|
4569
|
+
const proxy = await getPlatformProxy();
|
|
4570
|
+
return {
|
|
4571
|
+
env: proxy.env,
|
|
4572
|
+
dispose: proxy.dispose
|
|
4573
|
+
};
|
|
4574
|
+
} catch (err) {
|
|
4575
|
+
throw new Error(
|
|
4576
|
+
`[rsc-router] buildEnv: "auto" requires wrangler to be installed.
|
|
4577
|
+
Install it with: pnpm add -D wrangler
|
|
4578
|
+
${err.message}`
|
|
4579
|
+
);
|
|
4580
|
+
}
|
|
4581
|
+
}
|
|
4582
|
+
if (typeof option === "function") {
|
|
4583
|
+
return await option(factoryCtx);
|
|
4584
|
+
}
|
|
4585
|
+
return { env: option };
|
|
4586
|
+
}
|
|
4587
|
+
async function acquireBuildEnv(s, command, mode) {
|
|
4588
|
+
const option = s.opts?.buildEnv;
|
|
4589
|
+
if (!option) return false;
|
|
4590
|
+
const result = await resolveBuildEnv(option, {
|
|
4591
|
+
root: s.projectRoot,
|
|
4592
|
+
mode,
|
|
4593
|
+
command,
|
|
4594
|
+
preset: s.opts?.preset ?? "node"
|
|
4595
|
+
});
|
|
4596
|
+
if (!result) return false;
|
|
4597
|
+
s.resolvedBuildEnv = result.env;
|
|
4598
|
+
s.buildEnvDispose = result.dispose ?? null;
|
|
4599
|
+
return true;
|
|
4600
|
+
}
|
|
4601
|
+
async function releaseBuildEnv(s) {
|
|
4602
|
+
if (s.buildEnvDispose) {
|
|
4603
|
+
try {
|
|
4604
|
+
await s.buildEnvDispose();
|
|
4605
|
+
} catch (err) {
|
|
4606
|
+
console.warn(`[rsc-router] buildEnv dispose failed: ${err.message}`);
|
|
4607
|
+
}
|
|
4608
|
+
s.buildEnvDispose = null;
|
|
4609
|
+
}
|
|
4610
|
+
s.resolvedBuildEnv = void 0;
|
|
4611
|
+
}
|
|
4357
4612
|
function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
4358
4613
|
const s = createDiscoveryState(entryPath, opts);
|
|
4614
|
+
let viteCommand = "build";
|
|
4615
|
+
let viteMode = "production";
|
|
4359
4616
|
return {
|
|
4360
4617
|
name: "@rangojs/router:discovery",
|
|
4361
4618
|
config() {
|
|
@@ -4364,31 +4621,13 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4364
4621
|
__RANGO_DEBUG__: JSON.stringify(!!process.env.INTERNAL_RANGO_DEBUG)
|
|
4365
4622
|
}
|
|
4366
4623
|
};
|
|
4367
|
-
if (opts?.enableBuildPrerender) {
|
|
4368
|
-
config.environments = {
|
|
4369
|
-
rsc: {
|
|
4370
|
-
build: {
|
|
4371
|
-
rollupOptions: {
|
|
4372
|
-
output: {
|
|
4373
|
-
manualChunks(id) {
|
|
4374
|
-
if (s.resolvedPrerenderModules?.has(id)) {
|
|
4375
|
-
return "__prerender-handlers";
|
|
4376
|
-
}
|
|
4377
|
-
if (s.resolvedStaticModules?.has(id)) {
|
|
4378
|
-
return "__static-handlers";
|
|
4379
|
-
}
|
|
4380
|
-
}
|
|
4381
|
-
}
|
|
4382
|
-
}
|
|
4383
|
-
}
|
|
4384
|
-
}
|
|
4385
|
-
};
|
|
4386
|
-
}
|
|
4387
4624
|
return config;
|
|
4388
4625
|
},
|
|
4389
4626
|
configResolved(config) {
|
|
4390
4627
|
s.projectRoot = config.root;
|
|
4391
4628
|
s.isBuildMode = config.command === "build";
|
|
4629
|
+
viteCommand = config.command;
|
|
4630
|
+
viteMode = config.mode;
|
|
4392
4631
|
s.userResolveAlias = config.resolve.alias;
|
|
4393
4632
|
if (!s.resolvedEntryPath && opts?.routerPathRef?.path) {
|
|
4394
4633
|
s.resolvedEntryPath = opts.routerPathRef.path;
|
|
@@ -4402,12 +4641,6 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4402
4641
|
s.resolvedEntryPath = entries[0];
|
|
4403
4642
|
}
|
|
4404
4643
|
}
|
|
4405
|
-
if (opts?.include || opts?.exclude) {
|
|
4406
|
-
s.scanFilter = createScanFilter(s.projectRoot, {
|
|
4407
|
-
include: opts.include,
|
|
4408
|
-
exclude: opts.exclude
|
|
4409
|
-
});
|
|
4410
|
-
}
|
|
4411
4644
|
if (opts?.staticRouteTypesGeneration !== false) {
|
|
4412
4645
|
s.cachedRouterFiles = findRouterFiles(s.projectRoot, s.scanFilter);
|
|
4413
4646
|
writeCombinedRouteTypesWithTracking(s, { preserveIfLarger: true });
|
|
@@ -4427,8 +4660,8 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4427
4660
|
if (globalThis.__rscRouterDiscoveryActive) return;
|
|
4428
4661
|
s.devServer = server;
|
|
4429
4662
|
let resolveDiscovery;
|
|
4430
|
-
const discoveryPromise = new Promise((
|
|
4431
|
-
resolveDiscovery =
|
|
4663
|
+
const discoveryPromise = new Promise((resolve10) => {
|
|
4664
|
+
resolveDiscovery = resolve10;
|
|
4432
4665
|
});
|
|
4433
4666
|
const getDevServerOrigin = () => server.resolvedUrls?.local?.[0]?.replace(/\/$/, "") || `http://localhost:${server.config.server.port || 5173}`;
|
|
4434
4667
|
let prerenderTempServer = null;
|
|
@@ -4439,6 +4672,8 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4439
4672
|
});
|
|
4440
4673
|
prerenderTempServer = null;
|
|
4441
4674
|
}
|
|
4675
|
+
releaseBuildEnv(s).catch(() => {
|
|
4676
|
+
});
|
|
4442
4677
|
});
|
|
4443
4678
|
async function getOrCreateTempServer() {
|
|
4444
4679
|
if (prerenderNodeRegistry) {
|
|
@@ -4469,6 +4704,7 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4469
4704
|
if (!rscEnv?.runner) {
|
|
4470
4705
|
s.devServerOrigin = getDevServerOrigin();
|
|
4471
4706
|
try {
|
|
4707
|
+
await acquireBuildEnv(s, viteCommand, viteMode);
|
|
4472
4708
|
const tempRscEnv = await getOrCreateTempServer();
|
|
4473
4709
|
if (tempRscEnv) {
|
|
4474
4710
|
await discoverRouters(s, tempRscEnv);
|
|
@@ -4484,6 +4720,7 @@ ${err.stack}`
|
|
|
4484
4720
|
return;
|
|
4485
4721
|
}
|
|
4486
4722
|
try {
|
|
4723
|
+
await acquireBuildEnv(s, viteCommand, viteMode);
|
|
4487
4724
|
const serverMod = await rscEnv.runner.import(
|
|
4488
4725
|
"@rangojs/router/server"
|
|
4489
4726
|
);
|
|
@@ -4503,8 +4740,8 @@ ${err.stack}`
|
|
|
4503
4740
|
resolveDiscovery();
|
|
4504
4741
|
}
|
|
4505
4742
|
};
|
|
4506
|
-
s.discoveryDone = new Promise((
|
|
4507
|
-
setTimeout(() => discover().then(
|
|
4743
|
+
s.discoveryDone = new Promise((resolve10) => {
|
|
4744
|
+
setTimeout(() => discover().then(resolve10, resolve10), 0);
|
|
4508
4745
|
});
|
|
4509
4746
|
let mainRegistry = null;
|
|
4510
4747
|
const propagateDiscoveryState = async (rscEnv) => {
|
|
@@ -4548,7 +4785,26 @@ ${err.stack}`
|
|
|
4548
4785
|
res.end("Missing pathname");
|
|
4549
4786
|
return;
|
|
4550
4787
|
}
|
|
4551
|
-
|
|
4788
|
+
const rscEnv = server.environments?.rsc;
|
|
4789
|
+
let registry = null;
|
|
4790
|
+
if (rscEnv?.runner && s.resolvedEntryPath) {
|
|
4791
|
+
try {
|
|
4792
|
+
await rscEnv.runner.import(s.resolvedEntryPath);
|
|
4793
|
+
const serverMod = await rscEnv.runner.import(
|
|
4794
|
+
"@rangojs/router/server"
|
|
4795
|
+
);
|
|
4796
|
+
registry = serverMod.RouterRegistry ?? null;
|
|
4797
|
+
} catch (err) {
|
|
4798
|
+
console.warn(
|
|
4799
|
+
`[rsc-router] Dev prerender module refresh failed: ${err.message}`
|
|
4800
|
+
);
|
|
4801
|
+
res.statusCode = 500;
|
|
4802
|
+
res.end(`Prerender handler error: ${err.message}`);
|
|
4803
|
+
return;
|
|
4804
|
+
}
|
|
4805
|
+
} else {
|
|
4806
|
+
registry = mainRegistry;
|
|
4807
|
+
}
|
|
4552
4808
|
if (!registry) {
|
|
4553
4809
|
if (!prerenderNodeRegistry) {
|
|
4554
4810
|
await getOrCreateTempServer();
|
|
@@ -4570,7 +4826,10 @@ ${err.stack}`
|
|
|
4570
4826
|
pathname,
|
|
4571
4827
|
{},
|
|
4572
4828
|
void 0,
|
|
4573
|
-
wantPassthrough
|
|
4829
|
+
wantPassthrough,
|
|
4830
|
+
s.resolvedBuildEnv,
|
|
4831
|
+
true
|
|
4832
|
+
// devMode: check getParams for passthrough routes
|
|
4574
4833
|
);
|
|
4575
4834
|
if (!result) continue;
|
|
4576
4835
|
if (result.passthrough) continue;
|
|
@@ -4673,7 +4932,7 @@ ${err.stack}`
|
|
|
4673
4932
|
if (hasCreateRouter) {
|
|
4674
4933
|
const nestedRouterConflict = findNestedRouterConflict([
|
|
4675
4934
|
...s.cachedRouterFiles ?? [],
|
|
4676
|
-
|
|
4935
|
+
resolve8(filePath)
|
|
4677
4936
|
]);
|
|
4678
4937
|
if (nestedRouterConflict) {
|
|
4679
4938
|
server.config.logger.error(
|
|
@@ -4703,6 +4962,10 @@ ${err.stack}`
|
|
|
4703
4962
|
async buildStart() {
|
|
4704
4963
|
if (!s.isBuildMode) return;
|
|
4705
4964
|
if (s.mergedRouteManifest !== null) return;
|
|
4965
|
+
resetStagedBuildAssets(s.projectRoot);
|
|
4966
|
+
s.prerenderManifestEntries = null;
|
|
4967
|
+
s.staticManifestEntries = null;
|
|
4968
|
+
await acquireBuildEnv(s, viteCommand, viteMode);
|
|
4706
4969
|
let tempServer = null;
|
|
4707
4970
|
globalThis.__rscRouterDiscoveryActive = true;
|
|
4708
4971
|
try {
|
|
@@ -4742,6 +5005,7 @@ ${details}`
|
|
|
4742
5005
|
if (tempServer) {
|
|
4743
5006
|
await tempServer.close();
|
|
4744
5007
|
}
|
|
5008
|
+
await releaseBuildEnv(s);
|
|
4745
5009
|
}
|
|
4746
5010
|
},
|
|
4747
5011
|
// Virtual module: provides the pre-generated route manifest as a JS module
|
|
@@ -4784,20 +5048,30 @@ ${details}`
|
|
|
4784
5048
|
}
|
|
4785
5049
|
if (!s.resolvedPrerenderModules?.size && !s.resolvedStaticModules?.size)
|
|
4786
5050
|
return;
|
|
5051
|
+
s.handlerChunkInfoMap.clear();
|
|
5052
|
+
s.staticHandlerChunkInfoMap.clear();
|
|
4787
5053
|
for (const [fileName, chunk] of Object.entries(bundle)) {
|
|
4788
5054
|
if (chunk.type !== "chunk") continue;
|
|
4789
|
-
if (
|
|
5055
|
+
if (s.resolvedPrerenderModules?.size) {
|
|
4790
5056
|
const handlers = extractHandlerExportsFromChunk(
|
|
4791
5057
|
chunk.code,
|
|
4792
5058
|
s.resolvedPrerenderModules,
|
|
4793
5059
|
"Prerender",
|
|
4794
|
-
|
|
5060
|
+
false
|
|
4795
5061
|
);
|
|
4796
5062
|
if (handlers.length > 0) {
|
|
4797
|
-
|
|
5063
|
+
const existing = s.handlerChunkInfoMap.get(fileName);
|
|
5064
|
+
if (existing) {
|
|
5065
|
+
existing.exports.push(...handlers);
|
|
5066
|
+
} else {
|
|
5067
|
+
s.handlerChunkInfoMap.set(fileName, {
|
|
5068
|
+
fileName,
|
|
5069
|
+
exports: handlers
|
|
5070
|
+
});
|
|
5071
|
+
}
|
|
4798
5072
|
}
|
|
4799
5073
|
}
|
|
4800
|
-
if (
|
|
5074
|
+
if (s.resolvedStaticModules?.size) {
|
|
4801
5075
|
const handlers = extractHandlerExportsFromChunk(
|
|
4802
5076
|
chunk.code,
|
|
4803
5077
|
s.resolvedStaticModules,
|
|
@@ -4805,7 +5079,15 @@ ${details}`
|
|
|
4805
5079
|
false
|
|
4806
5080
|
);
|
|
4807
5081
|
if (handlers.length > 0) {
|
|
4808
|
-
|
|
5082
|
+
const existing = s.staticHandlerChunkInfoMap.get(fileName);
|
|
5083
|
+
if (existing) {
|
|
5084
|
+
existing.exports.push(...handlers);
|
|
5085
|
+
} else {
|
|
5086
|
+
s.staticHandlerChunkInfoMap.set(fileName, {
|
|
5087
|
+
fileName,
|
|
5088
|
+
exports: handlers
|
|
5089
|
+
});
|
|
5090
|
+
}
|
|
4809
5091
|
}
|
|
4810
5092
|
}
|
|
4811
5093
|
}
|
|
@@ -4832,8 +5114,16 @@ async function rango(options) {
|
|
|
4832
5114
|
const showBanner = resolvedOptions.banner ?? true;
|
|
4833
5115
|
const plugins = [];
|
|
4834
5116
|
const rangoAliases = getPackageAliases();
|
|
4835
|
-
const excludeDeps =
|
|
4836
|
-
|
|
5117
|
+
const excludeDeps = [
|
|
5118
|
+
...getExcludeDeps(),
|
|
5119
|
+
// The public browser entry re-exports the RSDW browser client.
|
|
5120
|
+
// Excluding both keeps Vite from freezing the unpatched bundle into
|
|
5121
|
+
// .vite/deps before our source transforms run.
|
|
5122
|
+
"@vitejs/plugin-rsc/browser",
|
|
5123
|
+
// Keep the browser RSDW client out of Vite's dep optimizer so our
|
|
5124
|
+
// cjs-to-esm transform can patch the real file.
|
|
5125
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.browser"
|
|
5126
|
+
];
|
|
4837
5127
|
const routerRef = { path: void 0 };
|
|
4838
5128
|
const prerenderEnabled = true;
|
|
4839
5129
|
if (preset === "cloudflare") {
|
|
@@ -4929,6 +5219,7 @@ async function rango(options) {
|
|
|
4929
5219
|
}
|
|
4930
5220
|
});
|
|
4931
5221
|
plugins.push(createVirtualEntriesPlugin(finalEntries));
|
|
5222
|
+
plugins.push(performanceTracksPlugin());
|
|
4932
5223
|
plugins.push(
|
|
4933
5224
|
rsc({
|
|
4934
5225
|
entries: finalEntries,
|
|
@@ -4937,153 +5228,122 @@ async function rango(options) {
|
|
|
4937
5228
|
);
|
|
4938
5229
|
plugins.push(clientRefDedup());
|
|
4939
5230
|
} else {
|
|
4940
|
-
|
|
4941
|
-
|
|
4942
|
-
|
|
4943
|
-
|
|
4944
|
-
|
|
4945
|
-
|
|
4946
|
-
|
|
4947
|
-
const
|
|
4948
|
-
|
|
4949
|
-
|
|
4950
|
-
|
|
4951
|
-
|
|
4952
|
-
|
|
4953
|
-
|
|
4954
|
-
|
|
4955
|
-
routerRef.path = (abs.startsWith(root) ? "./" + abs.slice(root.length + 1) : abs).replaceAll("\\", "/");
|
|
4956
|
-
} else if (candidates.length > 1) {
|
|
4957
|
-
const list = candidates.map(
|
|
4958
|
-
(f) => " - " + (f.startsWith(root) ? f.slice(root.length + 1) : f)
|
|
4959
|
-
).join("\n");
|
|
4960
|
-
throw new Error(
|
|
4961
|
-
`[rsc-router] Multiple routers found. Specify \`router\` to choose one:
|
|
4962
|
-
${list}`
|
|
4963
|
-
);
|
|
4964
|
-
}
|
|
5231
|
+
plugins.push({
|
|
5232
|
+
name: "@rangojs/router:auto-discover",
|
|
5233
|
+
config(userConfig) {
|
|
5234
|
+
if (routerRef.path) return;
|
|
5235
|
+
const root = userConfig.root ? resolve9(process.cwd(), userConfig.root) : process.cwd();
|
|
5236
|
+
const candidates = findRouterFiles(root);
|
|
5237
|
+
if (candidates.length === 1) {
|
|
5238
|
+
const abs = candidates[0];
|
|
5239
|
+
routerRef.path = (abs.startsWith(root) ? "./" + abs.slice(root.length + 1) : abs).replaceAll("\\", "/");
|
|
5240
|
+
} else if (candidates.length > 1) {
|
|
5241
|
+
const list = candidates.map(
|
|
5242
|
+
(f) => " - " + (f.startsWith(root) ? f.slice(root.length + 1) : f)
|
|
5243
|
+
).join("\n");
|
|
5244
|
+
throw new Error(`[rsc-router] Multiple routers found:
|
|
5245
|
+
${list}`);
|
|
4965
5246
|
}
|
|
4966
|
-
}
|
|
4967
|
-
}
|
|
4968
|
-
const
|
|
4969
|
-
|
|
4970
|
-
|
|
4971
|
-
|
|
4972
|
-
|
|
4973
|
-
|
|
4974
|
-
|
|
4975
|
-
|
|
4976
|
-
|
|
4977
|
-
|
|
4978
|
-
|
|
4979
|
-
|
|
4980
|
-
|
|
4981
|
-
|
|
4982
|
-
|
|
4983
|
-
|
|
4984
|
-
|
|
4985
|
-
|
|
4986
|
-
|
|
4987
|
-
|
|
4988
|
-
|
|
4989
|
-
|
|
4990
|
-
|
|
4991
|
-
|
|
4992
|
-
|
|
4993
|
-
|
|
4994
|
-
|
|
4995
|
-
|
|
4996
|
-
resolve: {
|
|
4997
|
-
alias: rangoAliases
|
|
4998
|
-
},
|
|
4999
|
-
environments: {
|
|
5000
|
-
client: {
|
|
5001
|
-
build: {
|
|
5002
|
-
rollupOptions: {
|
|
5003
|
-
output: {
|
|
5004
|
-
manualChunks: getManualChunks
|
|
5005
|
-
}
|
|
5006
|
-
}
|
|
5007
|
-
},
|
|
5008
|
-
// Always exclude rsc-router modules, conditionally add virtual entry
|
|
5009
|
-
optimizeDeps: {
|
|
5010
|
-
// Pre-bundle React and rsc-html-stream to prevent late discovery
|
|
5011
|
-
// triggering ERR_OUTDATED_OPTIMIZED_DEP on cold starts
|
|
5012
|
-
include: [
|
|
5013
|
-
"react",
|
|
5014
|
-
"react-dom",
|
|
5015
|
-
"react/jsx-runtime",
|
|
5016
|
-
"react/jsx-dev-runtime",
|
|
5017
|
-
"rsc-html-stream/client"
|
|
5018
|
-
],
|
|
5019
|
-
exclude: excludeDeps,
|
|
5020
|
-
esbuildOptions: sharedEsbuildOptions,
|
|
5021
|
-
...useVirtualClient && {
|
|
5022
|
-
// Tell Vite to scan the virtual entry for dependencies
|
|
5023
|
-
entries: [VIRTUAL_IDS.browser]
|
|
5024
|
-
}
|
|
5025
|
-
}
|
|
5026
|
-
},
|
|
5027
|
-
...useVirtualSSR && {
|
|
5028
|
-
ssr: {
|
|
5029
|
-
optimizeDeps: {
|
|
5030
|
-
entries: [VIRTUAL_IDS.ssr],
|
|
5031
|
-
// Pre-bundle all SSR deps to prevent late discovery triggering ERR_OUTDATED_OPTIMIZED_DEP
|
|
5032
|
-
include: [
|
|
5033
|
-
"react",
|
|
5034
|
-
"react-dom",
|
|
5035
|
-
"react-dom/server.edge",
|
|
5036
|
-
"react-dom/static.edge",
|
|
5037
|
-
"react/jsx-runtime",
|
|
5038
|
-
"react/jsx-dev-runtime",
|
|
5039
|
-
"@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
|
|
5040
|
-
],
|
|
5041
|
-
exclude: excludeDeps,
|
|
5042
|
-
esbuildOptions: sharedEsbuildOptions
|
|
5247
|
+
}
|
|
5248
|
+
});
|
|
5249
|
+
const finalEntries = {
|
|
5250
|
+
client: VIRTUAL_IDS.browser,
|
|
5251
|
+
ssr: VIRTUAL_IDS.ssr,
|
|
5252
|
+
rsc: VIRTUAL_IDS.rsc
|
|
5253
|
+
};
|
|
5254
|
+
const { default: rsc } = await import("@vitejs/plugin-rsc");
|
|
5255
|
+
let hasWarnedDuplicate = false;
|
|
5256
|
+
plugins.push({
|
|
5257
|
+
name: "@rangojs/router:rsc-integration",
|
|
5258
|
+
enforce: "pre",
|
|
5259
|
+
config() {
|
|
5260
|
+
return {
|
|
5261
|
+
optimizeDeps: {
|
|
5262
|
+
exclude: excludeDeps,
|
|
5263
|
+
esbuildOptions: sharedEsbuildOptions
|
|
5264
|
+
},
|
|
5265
|
+
build: {
|
|
5266
|
+
rollupOptions: { onwarn }
|
|
5267
|
+
},
|
|
5268
|
+
resolve: {
|
|
5269
|
+
alias: rangoAliases
|
|
5270
|
+
},
|
|
5271
|
+
environments: {
|
|
5272
|
+
client: {
|
|
5273
|
+
build: {
|
|
5274
|
+
rollupOptions: {
|
|
5275
|
+
output: {
|
|
5276
|
+
manualChunks: getManualChunks
|
|
5043
5277
|
}
|
|
5044
5278
|
}
|
|
5045
5279
|
},
|
|
5046
|
-
|
|
5047
|
-
|
|
5048
|
-
|
|
5049
|
-
|
|
5050
|
-
|
|
5051
|
-
|
|
5052
|
-
|
|
5053
|
-
|
|
5054
|
-
|
|
5055
|
-
|
|
5056
|
-
|
|
5057
|
-
|
|
5058
|
-
|
|
5059
|
-
|
|
5280
|
+
optimizeDeps: {
|
|
5281
|
+
include: [
|
|
5282
|
+
"react",
|
|
5283
|
+
"react-dom",
|
|
5284
|
+
"react/jsx-runtime",
|
|
5285
|
+
"react/jsx-dev-runtime",
|
|
5286
|
+
"rsc-html-stream/client"
|
|
5287
|
+
],
|
|
5288
|
+
exclude: excludeDeps,
|
|
5289
|
+
esbuildOptions: sharedEsbuildOptions,
|
|
5290
|
+
entries: [VIRTUAL_IDS.browser]
|
|
5291
|
+
}
|
|
5292
|
+
},
|
|
5293
|
+
ssr: {
|
|
5294
|
+
optimizeDeps: {
|
|
5295
|
+
entries: [VIRTUAL_IDS.ssr],
|
|
5296
|
+
include: [
|
|
5297
|
+
"react",
|
|
5298
|
+
"react-dom",
|
|
5299
|
+
"react-dom/server.edge",
|
|
5300
|
+
"react-dom/static.edge",
|
|
5301
|
+
"react/jsx-runtime",
|
|
5302
|
+
"react/jsx-dev-runtime",
|
|
5303
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
|
|
5304
|
+
],
|
|
5305
|
+
exclude: excludeDeps,
|
|
5306
|
+
esbuildOptions: sharedEsbuildOptions
|
|
5307
|
+
}
|
|
5308
|
+
},
|
|
5309
|
+
rsc: {
|
|
5310
|
+
optimizeDeps: {
|
|
5311
|
+
entries: [VIRTUAL_IDS.rsc],
|
|
5312
|
+
include: [
|
|
5313
|
+
"react",
|
|
5314
|
+
"react/jsx-runtime",
|
|
5315
|
+
"react/jsx-dev-runtime",
|
|
5316
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
|
|
5317
|
+
],
|
|
5318
|
+
esbuildOptions: sharedEsbuildOptions
|
|
5060
5319
|
}
|
|
5061
5320
|
}
|
|
5062
|
-
};
|
|
5063
|
-
},
|
|
5064
|
-
configResolved(config) {
|
|
5065
|
-
if (showBanner) {
|
|
5066
|
-
const mode = config.command === "serve" ? process.argv.includes("preview") ? "preview" : "dev" : "build";
|
|
5067
|
-
printBanner(mode, "node", rangoVersion);
|
|
5068
|
-
}
|
|
5069
|
-
const rscMinimalCount = config.plugins.filter(
|
|
5070
|
-
(p) => p.name === "rsc:minimal"
|
|
5071
|
-
).length;
|
|
5072
|
-
if (rscMinimalCount > 1 && !hasWarnedDuplicate) {
|
|
5073
|
-
hasWarnedDuplicate = true;
|
|
5074
|
-
console.warn(
|
|
5075
|
-
"[rsc-router] Duplicate @vitejs/plugin-rsc detected. Remove rsc() from your config or use rango({ rsc: false }) for manual configuration."
|
|
5076
|
-
);
|
|
5077
5321
|
}
|
|
5322
|
+
};
|
|
5323
|
+
},
|
|
5324
|
+
configResolved(config) {
|
|
5325
|
+
if (showBanner) {
|
|
5326
|
+
const mode = config.command === "serve" ? process.argv.includes("preview") ? "preview" : "dev" : "build";
|
|
5327
|
+
printBanner(mode, "node", rangoVersion);
|
|
5078
5328
|
}
|
|
5079
|
-
|
|
5080
|
-
|
|
5081
|
-
|
|
5082
|
-
|
|
5083
|
-
|
|
5084
|
-
|
|
5085
|
-
|
|
5086
|
-
|
|
5329
|
+
const rscMinimalCount = config.plugins.filter(
|
|
5330
|
+
(p) => p.name === "rsc:minimal"
|
|
5331
|
+
).length;
|
|
5332
|
+
if (rscMinimalCount > 1 && !hasWarnedDuplicate) {
|
|
5333
|
+
hasWarnedDuplicate = true;
|
|
5334
|
+
console.warn(
|
|
5335
|
+
"[rsc-router] Duplicate @vitejs/plugin-rsc detected. Remove rsc() from your vite config \u2014 rango() includes it automatically."
|
|
5336
|
+
);
|
|
5337
|
+
}
|
|
5338
|
+
}
|
|
5339
|
+
});
|
|
5340
|
+
plugins.push(createVirtualEntriesPlugin(finalEntries, routerRef));
|
|
5341
|
+
plugins.push(performanceTracksPlugin());
|
|
5342
|
+
plugins.push(
|
|
5343
|
+
rsc({
|
|
5344
|
+
entries: finalEntries
|
|
5345
|
+
})
|
|
5346
|
+
);
|
|
5087
5347
|
plugins.push(clientRefDedup());
|
|
5088
5348
|
}
|
|
5089
5349
|
plugins.push({
|
|
@@ -5111,22 +5371,102 @@ ${list}`
|
|
|
5111
5371
|
plugins.push(createVersionPlugin());
|
|
5112
5372
|
const discoveryEntryPath = preset !== "cloudflare" ? routerRef.path : void 0;
|
|
5113
5373
|
const discoveryRouterRef = preset !== "cloudflare" ? routerRef : void 0;
|
|
5114
|
-
|
|
5115
|
-
|
|
5116
|
-
plugins.push(createVersionInjectorPlugin(injectorEntryPath));
|
|
5374
|
+
if (preset === "cloudflare") {
|
|
5375
|
+
plugins.push(createVersionInjectorPlugin(void 0));
|
|
5117
5376
|
}
|
|
5118
5377
|
plugins.push(createCjsToEsmPlugin());
|
|
5119
5378
|
plugins.push(
|
|
5120
5379
|
createRouterDiscoveryPlugin(discoveryEntryPath, {
|
|
5121
5380
|
routerPathRef: discoveryRouterRef,
|
|
5122
5381
|
enableBuildPrerender: prerenderEnabled,
|
|
5123
|
-
|
|
5124
|
-
|
|
5125
|
-
exclude: resolvedOptions.exclude
|
|
5382
|
+
buildEnv: options?.buildEnv,
|
|
5383
|
+
preset
|
|
5126
5384
|
})
|
|
5127
5385
|
);
|
|
5128
5386
|
return plugins;
|
|
5129
5387
|
}
|
|
5388
|
+
|
|
5389
|
+
// src/vite/plugins/refresh-cmd.ts
|
|
5390
|
+
function poke() {
|
|
5391
|
+
return {
|
|
5392
|
+
name: "vite-plugin-poke",
|
|
5393
|
+
apply: "serve",
|
|
5394
|
+
configureServer(server) {
|
|
5395
|
+
const stdin = process.stdin;
|
|
5396
|
+
const debug = process.env.RANGO_POKE_DEBUG === "1";
|
|
5397
|
+
const triggerReload = (source) => {
|
|
5398
|
+
server.hot.send({ type: "full-reload", path: "*" });
|
|
5399
|
+
server.config.logger.info(` browser reload (${source})`, {
|
|
5400
|
+
timestamp: true
|
|
5401
|
+
});
|
|
5402
|
+
};
|
|
5403
|
+
const toBuffer = (chunk) => {
|
|
5404
|
+
return typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
|
|
5405
|
+
};
|
|
5406
|
+
const formatChunk = (chunk) => {
|
|
5407
|
+
const data = toBuffer(chunk);
|
|
5408
|
+
const hex = Array.from(data).map((byte) => `0x${byte.toString(16).padStart(2, "0")}`).join(" ");
|
|
5409
|
+
const ascii = Array.from(data).map((byte) => {
|
|
5410
|
+
if (byte >= 32 && byte <= 126) return String.fromCharCode(byte);
|
|
5411
|
+
if (byte === 10) return "\\n";
|
|
5412
|
+
if (byte === 13) return "\\r";
|
|
5413
|
+
if (byte === 9) return "\\t";
|
|
5414
|
+
return ".";
|
|
5415
|
+
}).join("");
|
|
5416
|
+
return `len=${data.length} hex=[${hex}] ascii="${ascii}"`;
|
|
5417
|
+
};
|
|
5418
|
+
const readCtrlR = (chunk) => {
|
|
5419
|
+
const data = typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
|
|
5420
|
+
return data.length === 1 && data[0] === 18;
|
|
5421
|
+
};
|
|
5422
|
+
const readSubmittedCommands = (chunk) => {
|
|
5423
|
+
const text = toBuffer(chunk).toString("utf8").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
5424
|
+
if (!text.includes("\n")) return [];
|
|
5425
|
+
const lines = text.split("\n");
|
|
5426
|
+
lines.pop();
|
|
5427
|
+
return lines;
|
|
5428
|
+
};
|
|
5429
|
+
if (debug) {
|
|
5430
|
+
server.config.logger.info(
|
|
5431
|
+
` poke debug enabled (isTTY=${stdin.isTTY ? "yes" : "no"}, isRaw=${stdin.isTTY ? stdin.isRaw ? "yes" : "no" : "n/a"})`,
|
|
5432
|
+
{ timestamp: true }
|
|
5433
|
+
);
|
|
5434
|
+
}
|
|
5435
|
+
if (stdin.isTTY) {
|
|
5436
|
+
server.config.logger.info(
|
|
5437
|
+
" poke ready: press e + enter to reload browser (ctrl+r also works when available)",
|
|
5438
|
+
{ timestamp: true }
|
|
5439
|
+
);
|
|
5440
|
+
}
|
|
5441
|
+
const onData = (data) => {
|
|
5442
|
+
if (debug) {
|
|
5443
|
+
server.config.logger.info(` poke stdin ${formatChunk(data)}`, {
|
|
5444
|
+
timestamp: true
|
|
5445
|
+
});
|
|
5446
|
+
}
|
|
5447
|
+
if (readCtrlR(data)) {
|
|
5448
|
+
triggerReload("ctrl+r");
|
|
5449
|
+
return;
|
|
5450
|
+
}
|
|
5451
|
+
for (const command of readSubmittedCommands(data)) {
|
|
5452
|
+
if (command === "e") {
|
|
5453
|
+
triggerReload("e+enter");
|
|
5454
|
+
return;
|
|
5455
|
+
}
|
|
5456
|
+
if (command === "\x1Br") {
|
|
5457
|
+
triggerReload("option+r+enter");
|
|
5458
|
+
return;
|
|
5459
|
+
}
|
|
5460
|
+
}
|
|
5461
|
+
};
|
|
5462
|
+
stdin.on("data", onData);
|
|
5463
|
+
server.httpServer?.on("close", () => {
|
|
5464
|
+
stdin.off("data", onData);
|
|
5465
|
+
});
|
|
5466
|
+
}
|
|
5467
|
+
};
|
|
5468
|
+
}
|
|
5130
5469
|
export {
|
|
5470
|
+
poke,
|
|
5131
5471
|
rango
|
|
5132
5472
|
};
|