@rangojs/router 0.0.0-experimental.dfa55db4 → 0.0.0-experimental.e16b7c00
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -25
- package/dist/bin/rango.js +147 -57
- package/dist/vite/index.js +2108 -829
- package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/package.json +13 -8
- package/skills/breadcrumbs/SKILL.md +3 -1
- package/skills/bundle-analysis/SKILL.md +159 -0
- package/skills/cache-guide/SKILL.md +222 -30
- package/skills/caching/SKILL.md +188 -8
- package/skills/composability/SKILL.md +27 -2
- package/skills/document-cache/SKILL.md +78 -55
- package/skills/handler-use/SKILL.md +364 -0
- package/skills/hooks/SKILL.md +229 -20
- package/skills/host-router/SKILL.md +45 -20
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +46 -4
- package/skills/layout/SKILL.md +28 -7
- package/skills/links/SKILL.md +247 -17
- package/skills/loader/SKILL.md +219 -9
- package/skills/middleware/SKILL.md +47 -12
- package/skills/migrate-nextjs/SKILL.md +582 -0
- package/skills/migrate-react-router/SKILL.md +769 -0
- package/skills/mime-routes/SKILL.md +27 -0
- package/skills/observability/SKILL.md +137 -0
- package/skills/parallel/SKILL.md +71 -6
- package/skills/prerender/SKILL.md +14 -33
- package/skills/rango/SKILL.md +236 -22
- package/skills/react-compiler/SKILL.md +168 -0
- package/skills/response-routes/SKILL.md +66 -9
- package/skills/route/SKILL.md +57 -4
- package/skills/router-setup/SKILL.md +3 -3
- package/skills/server-actions/SKILL.md +751 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/typesafety/SKILL.md +319 -27
- package/skills/use-cache/SKILL.md +36 -5
- package/skills/view-transitions/SKILL.md +294 -0
- package/src/__augment-tests__/augment.ts +81 -0
- package/src/__augment-tests__/augmented.check.ts +117 -0
- package/src/browser/action-coordinator.ts +53 -36
- package/src/browser/app-shell.ts +52 -0
- package/src/browser/event-controller.ts +86 -70
- package/src/browser/history-state.ts +21 -0
- package/src/browser/index.ts +3 -3
- package/src/browser/navigation-bridge.ts +86 -11
- package/src/browser/navigation-client.ts +76 -28
- package/src/browser/navigation-store.ts +32 -9
- package/src/browser/navigation-transaction.ts +10 -28
- package/src/browser/partial-update.ts +64 -26
- package/src/browser/prefetch/cache.ts +129 -21
- package/src/browser/prefetch/fetch.ts +148 -16
- package/src/browser/prefetch/queue.ts +36 -5
- package/src/browser/rango-state.ts +53 -13
- package/src/browser/react/Link.tsx +30 -2
- package/src/browser/react/NavigationProvider.tsx +72 -31
- package/src/browser/react/filter-segment-order.ts +51 -7
- package/src/browser/react/index.ts +3 -0
- package/src/browser/react/location-state-shared.ts +175 -4
- package/src/browser/react/location-state.ts +39 -13
- package/src/browser/react/use-handle.ts +17 -9
- package/src/browser/react/use-navigation.ts +22 -2
- package/src/browser/react/use-params.ts +20 -8
- package/src/browser/react/use-reverse.ts +106 -0
- package/src/browser/react/use-router.ts +22 -2
- package/src/browser/react/use-segments.ts +11 -8
- package/src/browser/response-adapter.ts +25 -0
- package/src/browser/rsc-router.tsx +64 -22
- package/src/browser/scroll-restoration.ts +22 -14
- package/src/browser/segment-reconciler.ts +36 -14
- package/src/browser/segment-structure-assert.ts +2 -2
- package/src/browser/server-action-bridge.ts +23 -30
- package/src/browser/types.ts +21 -0
- package/src/build/collect-fallback-refs.ts +107 -0
- package/src/build/generate-manifest.ts +60 -35
- package/src/build/generate-route-types.ts +2 -0
- package/src/build/index.ts +2 -0
- package/src/build/route-trie.ts +52 -25
- package/src/build/route-types/codegen.ts +4 -4
- package/src/build/route-types/include-resolution.ts +1 -1
- package/src/build/route-types/per-module-writer.ts +7 -4
- package/src/build/route-types/router-processing.ts +55 -14
- package/src/build/route-types/scan-filter.ts +1 -1
- package/src/build/route-types/source-scan.ts +118 -0
- package/src/build/runtime-discovery.ts +9 -20
- package/src/cache/cache-error.ts +104 -0
- package/src/cache/cache-policy.ts +95 -1
- package/src/cache/cache-runtime.ts +79 -13
- package/src/cache/cache-scope.ts +77 -46
- package/src/cache/cache-tag.ts +135 -0
- package/src/cache/cf/cf-cache-store.ts +1067 -176
- package/src/cache/cf/index.ts +4 -1
- package/src/cache/document-cache.ts +59 -7
- package/src/cache/index.ts +6 -0
- package/src/cache/memory-segment-store.ts +158 -14
- package/src/cache/tag-invalidation.ts +206 -0
- package/src/cache/types.ts +27 -0
- package/src/client.rsc.tsx +3 -0
- package/src/client.tsx +92 -182
- package/src/context-var.ts +5 -5
- package/src/decode-loader-results.ts +36 -0
- package/src/errors.ts +30 -1
- package/src/handle.ts +4 -6
- package/src/host/index.ts +2 -2
- package/src/host/router.ts +129 -57
- package/src/host/types.ts +31 -2
- package/src/host/utils.ts +1 -1
- package/src/href-client.ts +140 -20
- package/src/index.rsc.ts +16 -4
- package/src/index.ts +65 -15
- package/src/loader-store.ts +500 -0
- package/src/loader.rsc.ts +2 -5
- package/src/loader.ts +3 -10
- package/src/missing-id-error.ts +68 -0
- package/src/outlet-context.ts +1 -1
- package/src/prerender.ts +4 -4
- package/src/response-utils.ts +37 -0
- package/src/reverse.ts +65 -36
- package/src/route-content-wrapper.tsx +6 -28
- package/src/route-definition/dsl-helpers.ts +384 -257
- package/src/route-definition/helper-factories.ts +29 -139
- package/src/route-definition/helpers-types.ts +100 -28
- package/src/route-definition/resolve-handler-use.ts +6 -0
- package/src/route-definition/use-item-types.ts +32 -0
- package/src/route-types.ts +26 -41
- package/src/router/content-negotiation.ts +15 -2
- package/src/router/error-handling.ts +1 -1
- package/src/router/handler-context.ts +21 -38
- package/src/router/intercept-resolution.ts +4 -18
- package/src/router/lazy-includes.ts +8 -8
- package/src/router/loader-resolution.ts +19 -2
- package/src/router/manifest.ts +22 -13
- package/src/router/match-api.ts +4 -3
- package/src/router/match-handlers.ts +1 -0
- package/src/router/match-middleware/cache-lookup.ts +46 -92
- package/src/router/match-middleware/cache-store.ts +3 -2
- package/src/router/match-result.ts +103 -4
- package/src/router/metrics.ts +1 -1
- package/src/router/middleware-types.ts +15 -26
- package/src/router/middleware.ts +99 -84
- package/src/router/pattern-matching.ts +101 -17
- package/src/router/prerender-match.ts +3 -1
- package/src/router/preview-match.ts +3 -1
- package/src/router/request-classification.ts +4 -28
- package/src/router/revalidation.ts +58 -2
- package/src/router/router-interfaces.ts +45 -28
- package/src/router/router-options.ts +25 -1
- package/src/router/router-registry.ts +2 -5
- package/src/router/segment-resolution/fresh.ts +32 -6
- package/src/router/segment-resolution/loader-cache.ts +8 -17
- package/src/router/segment-resolution/revalidation.ts +154 -107
- package/src/router/segment-resolution/view-transition-default.ts +36 -0
- package/src/router/substitute-pattern-params.ts +56 -0
- package/src/router/trie-matching.ts +18 -13
- package/src/router/types.ts +8 -0
- package/src/router/url-params.ts +49 -0
- package/src/router.ts +23 -18
- package/src/rsc/handler-context.ts +2 -2
- package/src/rsc/handler.ts +46 -74
- package/src/rsc/helpers.ts +72 -43
- package/src/rsc/index.ts +1 -1
- package/src/rsc/origin-guard.ts +28 -10
- package/src/rsc/progressive-enhancement.ts +4 -0
- package/src/rsc/response-route-handler.ts +54 -54
- package/src/rsc/rsc-rendering.ts +35 -51
- package/src/rsc/runtime-warnings.ts +9 -10
- package/src/rsc/server-action.ts +17 -37
- package/src/rsc/ssr-setup.ts +16 -0
- package/src/rsc/types.ts +8 -2
- package/src/search-params.ts +4 -4
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-loader-promise.ts +122 -0
- package/src/segment-system.tsx +132 -116
- package/src/serialize.ts +243 -0
- package/src/server/context.ts +143 -53
- package/src/server/cookie-store.ts +28 -4
- package/src/server/request-context.ts +46 -44
- package/src/ssr/index.tsx +5 -1
- package/src/static-handler.ts +1 -1
- package/src/types/cache-types.ts +13 -4
- package/src/types/error-types.ts +5 -1
- package/src/types/global-namespace.ts +39 -26
- package/src/types/handler-context.ts +68 -50
- package/src/types/index.ts +1 -0
- package/src/types/loader-types.ts +5 -6
- package/src/types/request-scope.ts +126 -0
- package/src/types/route-entry.ts +11 -0
- package/src/types/segments.ts +36 -2
- package/src/urls/include-helper.ts +34 -67
- package/src/urls/index.ts +0 -3
- package/src/urls/path-helper-types.ts +41 -7
- package/src/urls/path-helper.ts +17 -52
- package/src/urls/pattern-types.ts +36 -19
- package/src/urls/response-types.ts +22 -29
- package/src/urls/type-extraction.ts +26 -116
- package/src/urls/urls-function.ts +1 -5
- package/src/use-loader.tsx +416 -42
- package/src/vite/debug.ts +185 -0
- package/src/vite/discovery/bundle-postprocess.ts +6 -6
- package/src/vite/discovery/discover-routers.ts +101 -51
- package/src/vite/discovery/discovery-errors.ts +194 -0
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +67 -26
- package/src/vite/discovery/route-types-writer.ts +40 -84
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/discovery/state.ts +33 -0
- package/src/vite/discovery/virtual-module-codegen.ts +13 -23
- package/src/vite/index.ts +2 -0
- package/src/vite/plugin-types.ts +67 -0
- package/src/vite/plugins/cjs-to-esm.ts +8 -7
- package/src/vite/plugins/client-ref-dedup.ts +16 -0
- package/src/vite/plugins/client-ref-hashing.ts +28 -5
- package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
- package/src/vite/plugins/expose-action-id.ts +54 -30
- package/src/vite/plugins/expose-id-utils.ts +24 -8
- package/src/vite/plugins/expose-ids/export-analysis.ts +100 -20
- package/src/vite/plugins/expose-ids/handler-transform.ts +8 -61
- package/src/vite/plugins/expose-ids/loader-transform.ts +3 -5
- package/src/vite/plugins/expose-ids/router-transform.ts +20 -3
- package/src/vite/plugins/expose-internal-ids.ts +503 -468
- package/src/vite/plugins/performance-tracks.ts +29 -25
- package/src/vite/plugins/use-cache-transform.ts +65 -50
- package/src/vite/plugins/version-injector.ts +39 -23
- package/src/vite/plugins/version-plugin.ts +59 -2
- package/src/vite/plugins/virtual-entries.ts +2 -2
- package/src/vite/rango.ts +116 -29
- package/src/vite/router-discovery.ts +750 -100
- package/src/vite/utils/ast-handler-extract.ts +15 -15
- package/src/vite/utils/banner.ts +1 -1
- package/src/vite/utils/bundle-analysis.ts +4 -2
- package/src/vite/utils/client-chunks.ts +190 -0
- package/src/vite/utils/forward-user-plugins.ts +193 -0
- package/src/vite/utils/manifest-utils.ts +21 -5
- package/src/vite/utils/package-resolution.ts +41 -1
- package/src/vite/utils/prerender-utils.ts +21 -6
- package/src/vite/utils/shared-utils.ts +107 -26
- 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.bak +0 -5448
- 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/src/browser/action-response-classifier.ts +0 -99
|
@@ -2,7 +2,12 @@ import type { Plugin, ResolvedConfig } from "vite";
|
|
|
2
2
|
import { parseAst } from "vite";
|
|
3
3
|
import MagicString from "magic-string";
|
|
4
4
|
import path from "node:path";
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
normalizePath,
|
|
7
|
+
hashId,
|
|
8
|
+
makeStubId,
|
|
9
|
+
detectImports,
|
|
10
|
+
} from "./expose-id-utils.js";
|
|
6
11
|
import {
|
|
7
12
|
transformInlineHandlers,
|
|
8
13
|
type VirtualHandlerEntry,
|
|
@@ -23,6 +28,7 @@ import {
|
|
|
23
28
|
getImportedFnNames,
|
|
24
29
|
collectCreateExportBindings,
|
|
25
30
|
buildUnsupportedShapeWarning,
|
|
31
|
+
findUnsupportedCreateCallSites,
|
|
26
32
|
isExportOnlyFile,
|
|
27
33
|
} from "./expose-ids/export-analysis.js";
|
|
28
34
|
import {
|
|
@@ -34,10 +40,12 @@ import {
|
|
|
34
40
|
transformHandles,
|
|
35
41
|
transformLocationState,
|
|
36
42
|
generateWholeFileStubs,
|
|
37
|
-
generateExprStubs,
|
|
38
43
|
stubHandlerExprs,
|
|
39
44
|
transformHandlerIds,
|
|
40
45
|
} from "./expose-ids/handler-transform.js";
|
|
46
|
+
import { createRangoDebugger, createCounter, NS } from "../debug.js";
|
|
47
|
+
|
|
48
|
+
const debug = createRangoDebugger(NS.transform);
|
|
41
49
|
|
|
42
50
|
// Re-exports consumed by other packages/plugins
|
|
43
51
|
export { exposeRouterId } from "./expose-ids/router-transform.js";
|
|
@@ -82,10 +90,16 @@ export function exposeInternalIds(options?: { forceBuild?: boolean }): Plugin {
|
|
|
82
90
|
// De-duplicate unsupported shape warnings across repeated transforms.
|
|
83
91
|
const unsupportedShapeWarnings = new Set<string>();
|
|
84
92
|
|
|
93
|
+
const counter = createCounter(debug, "expose-internal-ids");
|
|
94
|
+
|
|
85
95
|
return {
|
|
86
96
|
name: "@rangojs/router:expose-internal-ids",
|
|
87
97
|
enforce: "post",
|
|
88
98
|
|
|
99
|
+
buildEnd() {
|
|
100
|
+
counter?.flush();
|
|
101
|
+
},
|
|
102
|
+
|
|
89
103
|
api: {
|
|
90
104
|
prerenderHandlerModules,
|
|
91
105
|
staticHandlerModules,
|
|
@@ -228,534 +242,555 @@ ${lazyImports.join(",\n")}
|
|
|
228
242
|
transform(code, id) {
|
|
229
243
|
if (id.includes("/node_modules/")) return;
|
|
230
244
|
|
|
231
|
-
const
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
// NamedRoutes is server-only data and would bloat the client bundle.
|
|
236
|
-
if (
|
|
237
|
-
id.includes(".named-routes.gen.") &&
|
|
238
|
-
!isRscEnv &&
|
|
239
|
-
this.environment?.name === "client"
|
|
240
|
-
) {
|
|
241
|
-
this.warn(
|
|
242
|
-
`\n` +
|
|
243
|
-
`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n` +
|
|
244
|
-
`!! !!\n` +
|
|
245
|
-
`!! WARNING: NamedRoutes imported in a CLIENT component! !!\n` +
|
|
246
|
-
`!! !!\n` +
|
|
247
|
-
`!! File: ${filePath.padEnd(53)}!!\n` +
|
|
248
|
-
`!! !!\n` +
|
|
249
|
-
`!! NamedRoutes contains your entire route structure — every !!\n` +
|
|
250
|
-
`!! route name and URL pattern in your application. Shipping !!\n` +
|
|
251
|
-
`!! this to the browser exposes your full routing topology to !!\n` +
|
|
252
|
-
`!! the client, which is a security concern (internal/admin !!\n` +
|
|
253
|
-
`!! routes, API endpoints, hidden paths become visible). !!\n` +
|
|
254
|
-
`!! !!\n` +
|
|
255
|
-
`!! It also bloats the client bundle — this map contains all !!\n` +
|
|
256
|
-
`!! named routes in your application. !!\n` +
|
|
257
|
-
`!! !!\n` +
|
|
258
|
-
`!! Fix: remove the import or move it to a server component. !!\n` +
|
|
259
|
-
`!! !!\n` +
|
|
260
|
-
`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n`,
|
|
261
|
-
);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// Fast exit: if the file doesn't import from @rangojs/router at all,
|
|
265
|
-
// skip all create* analysis and transforms.
|
|
266
|
-
if (!code.includes("@rangojs/router")) return;
|
|
267
|
-
|
|
268
|
-
// Detect all relevant imports in one pass
|
|
269
|
-
const has = detectImports(code);
|
|
270
|
-
|
|
271
|
-
// Quick bail-out: also check for raw create* identifiers.
|
|
272
|
-
// This is safe even with aliases (e.g., `import { createLoader as cl }`)
|
|
273
|
-
// because the import statement itself always contains the canonical name
|
|
274
|
-
// "createLoader", so code.includes("createLoader") will still match.
|
|
275
|
-
const hasLoaderCode = has.loader && code.includes("createLoader");
|
|
276
|
-
const hasHandleCode = has.handle && code.includes("createHandle");
|
|
277
|
-
const hasLocationStateCode =
|
|
278
|
-
has.locationState && code.includes("createLocationState");
|
|
279
|
-
const hasPrerenderHandlerCode =
|
|
280
|
-
has.prerenderHandler && code.includes("Prerender");
|
|
281
|
-
const hasStaticHandlerCode = has.staticHandler && code.includes("Static");
|
|
282
|
-
if (
|
|
283
|
-
!hasLoaderCode &&
|
|
284
|
-
!hasHandleCode &&
|
|
285
|
-
!hasLocationStateCode &&
|
|
286
|
-
!hasPrerenderHandlerCode &&
|
|
287
|
-
!hasStaticHandlerCode
|
|
288
|
-
) {
|
|
289
|
-
return;
|
|
290
|
-
}
|
|
245
|
+
const __t0 = counter ? performance.now() : 0;
|
|
246
|
+
try {
|
|
247
|
+
const filePath = normalizePath(path.relative(projectRoot, id));
|
|
248
|
+
const isRscEnv = this.environment?.name === "rsc";
|
|
291
249
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
try {
|
|
321
|
-
_cachedAst = parseAst(code, { jsx: true });
|
|
322
|
-
} catch {
|
|
323
|
-
_astParseFailed = true;
|
|
324
|
-
}
|
|
325
|
-
return _cachedAst;
|
|
326
|
-
};
|
|
327
|
-
|
|
328
|
-
const getBindings = (
|
|
329
|
-
currentCode: string,
|
|
330
|
-
fnNames: string[],
|
|
331
|
-
): CreateExportBinding[] => {
|
|
332
|
-
const key = fnNames.join("\0");
|
|
333
|
-
let result = _bindingsCache.get(key);
|
|
334
|
-
if (!result) {
|
|
335
|
-
result = collectCreateExportBindings(currentCode, fnNames, lazyAst());
|
|
336
|
-
_bindingsCache.set(key, result);
|
|
250
|
+
// Warn if named-routes.gen is imported in a client component.
|
|
251
|
+
// NamedRoutes is server-only data and would bloat the client bundle.
|
|
252
|
+
if (
|
|
253
|
+
id.includes(".named-routes.gen.") &&
|
|
254
|
+
!isRscEnv &&
|
|
255
|
+
this.environment?.name === "client"
|
|
256
|
+
) {
|
|
257
|
+
this.warn(
|
|
258
|
+
`\n` +
|
|
259
|
+
`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n` +
|
|
260
|
+
`!! !!\n` +
|
|
261
|
+
`!! WARNING: NamedRoutes imported in a CLIENT component! !!\n` +
|
|
262
|
+
`!! !!\n` +
|
|
263
|
+
`!! File: ${filePath.padEnd(53)}!!\n` +
|
|
264
|
+
`!! !!\n` +
|
|
265
|
+
`!! NamedRoutes contains your entire route structure — every !!\n` +
|
|
266
|
+
`!! route name and URL pattern in your application. Shipping !!\n` +
|
|
267
|
+
`!! this to the browser exposes your full routing topology to !!\n` +
|
|
268
|
+
`!! the client, which is a security concern (internal/admin !!\n` +
|
|
269
|
+
`!! routes, API endpoints, hidden paths become visible). !!\n` +
|
|
270
|
+
`!! !!\n` +
|
|
271
|
+
`!! It also bloats the client bundle — this map contains all !!\n` +
|
|
272
|
+
`!! named routes in your application. !!\n` +
|
|
273
|
+
`!! !!\n` +
|
|
274
|
+
`!! Fix: remove the import or move it to a server component. !!\n` +
|
|
275
|
+
`!! !!\n` +
|
|
276
|
+
`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n`,
|
|
277
|
+
);
|
|
337
278
|
}
|
|
338
|
-
return result;
|
|
339
|
-
};
|
|
340
|
-
|
|
341
|
-
// Warn on create* declaration shapes that are currently unsupported by
|
|
342
|
-
// non-AST transforms (loader/handle/locationState only).
|
|
343
|
-
for (const cfg of STRICT_CREATE_CONFIGS) {
|
|
344
|
-
const hasCode =
|
|
345
|
-
cfg.fnName === "createLoader"
|
|
346
|
-
? hasLoaderCode
|
|
347
|
-
: cfg.fnName === "createHandle"
|
|
348
|
-
? hasHandleCode
|
|
349
|
-
: hasLocationStateCode;
|
|
350
|
-
if (!hasCode) continue;
|
|
351
|
-
|
|
352
|
-
const fnNames = getFnNames(cfg.fnName);
|
|
353
|
-
const totalCalls = countCreateCallsForNames(code, fnNames);
|
|
354
|
-
const supportedBindings = getBindings(code, fnNames).length;
|
|
355
|
-
if (totalCalls <= supportedBindings) continue;
|
|
356
|
-
|
|
357
|
-
const warnKey = `${id}::${cfg.fnName}`;
|
|
358
|
-
if (unsupportedShapeWarnings.has(warnKey)) continue;
|
|
359
|
-
unsupportedShapeWarnings.add(warnKey);
|
|
360
|
-
this.warn(buildUnsupportedShapeWarning(filePath, cfg.fnName));
|
|
361
|
-
}
|
|
362
279
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
280
|
+
// Fast exit: if the file doesn't import from @rangojs/router at all,
|
|
281
|
+
// skip all create* analysis and transforms.
|
|
282
|
+
if (!code.includes("@rangojs/router")) return;
|
|
283
|
+
|
|
284
|
+
// Detect all relevant imports in one pass
|
|
285
|
+
const has = detectImports(code);
|
|
286
|
+
|
|
287
|
+
// Quick bail-out: also check for raw create* identifiers.
|
|
288
|
+
// This is safe even with aliases (e.g., `import { createLoader as cl }`)
|
|
289
|
+
// because the import statement itself always contains the canonical name
|
|
290
|
+
// "createLoader", so code.includes("createLoader") will still match.
|
|
291
|
+
const hasLoaderCode = has.loader && code.includes("createLoader");
|
|
292
|
+
const hasHandleCode = has.handle && code.includes("createHandle");
|
|
293
|
+
const hasLocationStateCode =
|
|
294
|
+
has.locationState && code.includes("createLocationState");
|
|
295
|
+
const hasPrerenderHandlerCode =
|
|
296
|
+
has.prerenderHandler && code.includes("Prerender");
|
|
297
|
+
const hasStaticHandlerCode =
|
|
298
|
+
has.staticHandler && code.includes("Static");
|
|
299
|
+
if (
|
|
300
|
+
!hasLoaderCode &&
|
|
301
|
+
!hasHandleCode &&
|
|
302
|
+
!hasLocationStateCode &&
|
|
303
|
+
!hasPrerenderHandlerCode &&
|
|
304
|
+
!hasStaticHandlerCode
|
|
305
|
+
) {
|
|
306
|
+
return;
|
|
374
307
|
}
|
|
375
|
-
}
|
|
376
308
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
const
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
309
|
+
// Per-invocation caches to avoid redundant AST parsing.
|
|
310
|
+
// getImportedFnNames is cached by canonical name (imports never change).
|
|
311
|
+
// collectCreateExportBindings is cached by fnNames key; the cache is
|
|
312
|
+
// cleared when `code` changes (e.g., after inline handler extraction).
|
|
313
|
+
const _fnNamesCache = new Map<string, string[]>();
|
|
314
|
+
const _bindingsCache = new Map<string, CreateExportBinding[]>();
|
|
315
|
+
let _cachedAst: any;
|
|
316
|
+
let _astParseFailed = false;
|
|
317
|
+
let _astCodeRef = code;
|
|
318
|
+
|
|
319
|
+
const getFnNames = (canonicalName: string): string[] => {
|
|
320
|
+
let result = _fnNamesCache.get(canonicalName);
|
|
321
|
+
if (!result) {
|
|
322
|
+
result = getImportedFnNames(code, canonicalName);
|
|
323
|
+
_fnNamesCache.set(canonicalName, result);
|
|
324
|
+
}
|
|
325
|
+
return result;
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
// Lazy AST parse: parsed once and shared across all
|
|
329
|
+
// collectCreateExportBindings calls for the same code string.
|
|
330
|
+
const lazyAst = (): any | undefined => {
|
|
331
|
+
if (code !== _astCodeRef) {
|
|
332
|
+
_cachedAst = undefined;
|
|
333
|
+
_astParseFailed = false;
|
|
334
|
+
_astCodeRef = code;
|
|
335
|
+
}
|
|
336
|
+
if (_cachedAst !== undefined || _astParseFailed) return _cachedAst;
|
|
337
|
+
try {
|
|
338
|
+
_cachedAst = parseAst(code, { lang: "tsx" });
|
|
339
|
+
} catch {
|
|
340
|
+
_astParseFailed = true;
|
|
341
|
+
}
|
|
342
|
+
return _cachedAst;
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
const getBindings = (
|
|
346
|
+
currentCode: string,
|
|
347
|
+
fnNames: string[],
|
|
348
|
+
): CreateExportBinding[] => {
|
|
349
|
+
const key = fnNames.join("\0");
|
|
350
|
+
let result = _bindingsCache.get(key);
|
|
351
|
+
if (!result) {
|
|
352
|
+
result = collectCreateExportBindings(
|
|
353
|
+
currentCode,
|
|
354
|
+
fnNames,
|
|
355
|
+
lazyAst(),
|
|
356
|
+
);
|
|
357
|
+
_bindingsCache.set(key, result);
|
|
358
|
+
}
|
|
359
|
+
return result;
|
|
360
|
+
};
|
|
361
|
+
|
|
362
|
+
// Warn on create* declaration shapes that are currently unsupported by
|
|
363
|
+
// non-AST transforms (loader/handle/locationState only).
|
|
364
|
+
for (const cfg of STRICT_CREATE_CONFIGS) {
|
|
365
|
+
const hasCode =
|
|
366
|
+
cfg.fnName === "createLoader"
|
|
367
|
+
? hasLoaderCode
|
|
368
|
+
: cfg.fnName === "createHandle"
|
|
369
|
+
? hasHandleCode
|
|
370
|
+
: hasLocationStateCode;
|
|
371
|
+
if (!hasCode) continue;
|
|
389
372
|
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
isBuild,
|
|
402
|
-
);
|
|
403
|
-
if (wholeFile) return wholeFile;
|
|
404
|
-
}
|
|
373
|
+
const fnNames = getFnNames(cfg.fnName);
|
|
374
|
+
// Locate the real (comment/string-free) create* calls not covered by
|
|
375
|
+
// a supported, id-injectable export shape. Empty means every call is
|
|
376
|
+
// fine — in particular, a create*() token in a comment or string no
|
|
377
|
+
// longer trips a spurious warning.
|
|
378
|
+
const sites = findUnsupportedCreateCallSites(
|
|
379
|
+
code,
|
|
380
|
+
fnNames,
|
|
381
|
+
getBindings(code, fnNames),
|
|
382
|
+
);
|
|
383
|
+
if (sites.length === 0) continue;
|
|
405
384
|
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
(b) => b.exportNames[0],
|
|
411
|
-
);
|
|
412
|
-
if (exportNames.length > 0) {
|
|
413
|
-
prerenderHandlerModules.set(id, exportNames);
|
|
385
|
+
const warnKey = `${id}::${cfg.fnName}`;
|
|
386
|
+
if (unsupportedShapeWarnings.has(warnKey)) continue;
|
|
387
|
+
unsupportedShapeWarnings.add(warnKey);
|
|
388
|
+
this.warn(buildUnsupportedShapeWarning(filePath, cfg.fnName, sites));
|
|
414
389
|
}
|
|
415
|
-
}
|
|
416
390
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
return { cfg, fnNames };
|
|
438
|
-
});
|
|
439
|
-
|
|
440
|
-
for (const { cfg, fnNames } of handlerConfigs) {
|
|
441
|
-
const totalCalls = countCreateCallsForNames(code, fnNames);
|
|
442
|
-
const supportedBindings = getBindings(code, fnNames).length;
|
|
443
|
-
|
|
444
|
-
if (totalCalls > supportedBindings) {
|
|
445
|
-
const iterS = new MagicString(code);
|
|
446
|
-
const result = transformInlineHandlers(
|
|
447
|
-
cfg.fnName,
|
|
448
|
-
VIRTUAL_HANDLER_PREFIX,
|
|
449
|
-
iterS,
|
|
391
|
+
// --- Loader: track for manifest (RSC env only) ---
|
|
392
|
+
if (hasLoaderCode && isRscEnv) {
|
|
393
|
+
const fnNames = getFnNames("createLoader");
|
|
394
|
+
const bindings = getBindings(code, fnNames);
|
|
395
|
+
for (const binding of bindings) {
|
|
396
|
+
const exportName = binding.exportNames[0];
|
|
397
|
+
const hashedId = hashId(filePath, exportName);
|
|
398
|
+
loaderRegistry.set(hashedId, {
|
|
399
|
+
filePath,
|
|
400
|
+
exportName,
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// --- Loader: client stubs for non-RSC environments ---
|
|
406
|
+
if (hasLoaderCode && !isRscEnv) {
|
|
407
|
+
const fnNames = getFnNames("createLoader");
|
|
408
|
+
const bindings = getBindings(code, fnNames);
|
|
409
|
+
const stubResult = generateClientLoaderStubs(
|
|
410
|
+
bindings,
|
|
450
411
|
code,
|
|
451
412
|
filePath,
|
|
452
|
-
|
|
453
|
-
id,
|
|
454
|
-
parseAst,
|
|
413
|
+
isBuild,
|
|
455
414
|
);
|
|
456
|
-
if (
|
|
457
|
-
changed = true;
|
|
458
|
-
code = iterS.toString();
|
|
459
|
-
_bindingsCache.clear();
|
|
460
|
-
}
|
|
415
|
+
if (stubResult) return stubResult;
|
|
461
416
|
}
|
|
462
|
-
}
|
|
463
417
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
418
|
+
// --- PrerenderHandler: non-RSC whole-file stub replacement ---
|
|
419
|
+
// When ALL exports are Prerender() calls, replace the entire file.
|
|
420
|
+
// Mixed-export files are handled in the unified pipeline below.
|
|
421
|
+
if (hasPrerenderHandlerCode && !isRscEnv) {
|
|
422
|
+
const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
|
|
423
|
+
const bindings = getBindings(code, fnNames);
|
|
424
|
+
const wholeFile = generateWholeFileStubs(
|
|
425
|
+
PRERENDER_CONFIG,
|
|
426
|
+
bindings,
|
|
427
|
+
code,
|
|
428
|
+
filePath,
|
|
429
|
+
isBuild,
|
|
430
|
+
);
|
|
431
|
+
if (wholeFile) return wholeFile;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// --- Inline handler extraction to virtual modules ---
|
|
435
|
+
// Runs before stubs/tracking so inline calls become imports, then
|
|
436
|
+
// the existing regex fast path handles both the original file's
|
|
437
|
+
// export const patterns and the virtual modules independently.
|
|
438
|
+
//
|
|
439
|
+
// Cheap pre-check: count total fnName( occurrences vs export const
|
|
440
|
+
// patterns. If they match, every call is a named export and the
|
|
441
|
+
// regex fast path handles them -- skip the AST parse entirely.
|
|
442
|
+
//
|
|
443
|
+
// Each iteration creates a fresh MagicString so that AST positions
|
|
444
|
+
// from findHandlerCalls always match the string they were parsed from.
|
|
445
|
+
let changed = false;
|
|
446
|
+
|
|
447
|
+
const handlerConfigs = [
|
|
448
|
+
hasStaticHandlerCode && STATIC_CONFIG,
|
|
449
|
+
hasPrerenderHandlerCode && PRERENDER_CONFIG,
|
|
450
|
+
]
|
|
451
|
+
.filter((c): c is HandlerTransformConfig => !!c)
|
|
452
|
+
.map((cfg) => {
|
|
453
|
+
const fnNames = getFnNames(cfg.fnName);
|
|
454
|
+
return { cfg, fnNames };
|
|
455
|
+
});
|
|
478
456
|
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
const staticFnNames = hasStaticHandlerCode
|
|
501
|
-
? getFnNames(STATIC_CONFIG.fnName)
|
|
502
|
-
: [];
|
|
503
|
-
const loaderFnNames = hasLoaderCode ? getFnNames("createLoader") : [];
|
|
504
|
-
const handleFnNames = hasHandleCode ? getFnNames("createHandle") : [];
|
|
505
|
-
const lsFnNames = hasLocationStateCode
|
|
506
|
-
? getFnNames("createLocationState")
|
|
507
|
-
: [];
|
|
508
|
-
|
|
509
|
-
// Collect ALL recognized bindings to check export coverage
|
|
510
|
-
const allBindings: CreateExportBinding[] = [];
|
|
511
|
-
for (const fnNames of [
|
|
512
|
-
prerenderFnNames,
|
|
513
|
-
staticFnNames,
|
|
514
|
-
loaderFnNames,
|
|
515
|
-
handleFnNames,
|
|
516
|
-
lsFnNames,
|
|
517
|
-
]) {
|
|
518
|
-
if (fnNames.length > 0) {
|
|
519
|
-
allBindings.push(...getBindings(code, fnNames));
|
|
457
|
+
for (const { cfg, fnNames } of handlerConfigs) {
|
|
458
|
+
const totalCalls = countCreateCallsForNames(code, fnNames);
|
|
459
|
+
const supportedBindings = getBindings(code, fnNames).length;
|
|
460
|
+
|
|
461
|
+
if (totalCalls > supportedBindings) {
|
|
462
|
+
const iterS = new MagicString(code);
|
|
463
|
+
const result = transformInlineHandlers(
|
|
464
|
+
cfg.fnName,
|
|
465
|
+
VIRTUAL_HANDLER_PREFIX,
|
|
466
|
+
iterS,
|
|
467
|
+
code,
|
|
468
|
+
filePath,
|
|
469
|
+
virtualHandlers,
|
|
470
|
+
id,
|
|
471
|
+
parseAst,
|
|
472
|
+
);
|
|
473
|
+
if (result) {
|
|
474
|
+
changed = true;
|
|
475
|
+
code = iterS.toString();
|
|
476
|
+
_bindingsCache.clear();
|
|
477
|
+
}
|
|
520
478
|
}
|
|
521
479
|
}
|
|
522
480
|
|
|
523
|
-
//
|
|
524
|
-
//
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
481
|
+
// --- StaticHandler: non-RSC whole-file stub replacement ---
|
|
482
|
+
// When ALL exports are Static() calls, replace the entire file.
|
|
483
|
+
if (hasStaticHandlerCode && !isRscEnv) {
|
|
484
|
+
const fnNames = getFnNames(STATIC_CONFIG.fnName);
|
|
485
|
+
const bindings = getBindings(code, fnNames);
|
|
486
|
+
const wholeFile = generateWholeFileStubs(
|
|
487
|
+
STATIC_CONFIG,
|
|
488
|
+
bindings,
|
|
489
|
+
code,
|
|
490
|
+
filePath,
|
|
491
|
+
isBuild,
|
|
492
|
+
);
|
|
493
|
+
if (wholeFile) return wholeFile;
|
|
494
|
+
}
|
|
529
495
|
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
496
|
+
// --- Mixed-type whole-file stub replacement (non-RSC) ---
|
|
497
|
+
// When the individual whole-file checks above fail (each only checks
|
|
498
|
+
// one type), the file has mixed exports (e.g. createLoader + Prerender).
|
|
499
|
+
// Gather ALL stub-safe bindings and check if they cover every export.
|
|
500
|
+
// If yes, replace the entire file with stubs — this strips server-only
|
|
501
|
+
// imports (node:fs, DB clients, etc.) that would crash in the browser.
|
|
502
|
+
//
|
|
503
|
+
// Only applies when the file contains Prerender/Static (the handler
|
|
504
|
+
// types that bring server-only code). Files with only loaders, handles,
|
|
505
|
+
// or locationState are handled correctly by the unified pipeline below.
|
|
506
|
+
//
|
|
507
|
+
// Loader, Prerender, and Static exports become plain { __brand, $$id }
|
|
508
|
+
// stubs. createHandle and createLocationState need their create*()
|
|
509
|
+
// functions to execute (collect registration / __rsc_ls_key), so their
|
|
510
|
+
// call expressions are preserved with only a @rangojs/router import.
|
|
511
|
+
// This strips all server-only imports while keeping the correct
|
|
512
|
+
// client contract for every export type.
|
|
513
|
+
if (!isRscEnv && (hasPrerenderHandlerCode || hasStaticHandlerCode)) {
|
|
514
|
+
const prerenderFnNames = hasPrerenderHandlerCode
|
|
515
|
+
? getFnNames(PRERENDER_CONFIG.fnName)
|
|
516
|
+
: [];
|
|
517
|
+
const staticFnNames = hasStaticHandlerCode
|
|
518
|
+
? getFnNames(STATIC_CONFIG.fnName)
|
|
519
|
+
: [];
|
|
520
|
+
const loaderFnNames = hasLoaderCode ? getFnNames("createLoader") : [];
|
|
521
|
+
const handleFnNames = hasHandleCode ? getFnNames("createHandle") : [];
|
|
522
|
+
const lsFnNames = hasLocationStateCode
|
|
523
|
+
? getFnNames("createLocationState")
|
|
524
|
+
: [];
|
|
525
|
+
|
|
526
|
+
// Collect ALL recognized bindings to check export coverage
|
|
527
|
+
const allBindings: CreateExportBinding[] = [];
|
|
528
|
+
for (const fnNames of [
|
|
529
|
+
prerenderFnNames,
|
|
530
|
+
staticFnNames,
|
|
531
|
+
loaderFnNames,
|
|
532
|
+
handleFnNames,
|
|
533
|
+
lsFnNames,
|
|
534
|
+
]) {
|
|
535
|
+
if (fnNames.length > 0) {
|
|
536
|
+
allBindings.push(...getBindings(code, fnNames));
|
|
546
537
|
}
|
|
547
538
|
}
|
|
548
539
|
|
|
549
|
-
//
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
540
|
+
// Check if preserved createHandle/createLocationState calls
|
|
541
|
+
// reference non-exported locals (e.g. helper functions, constants).
|
|
542
|
+
// If so, the whole-file stub would strip those locals, breaking
|
|
543
|
+
// the call. Fall through to the unified pipeline instead.
|
|
544
|
+
let canStubWholeFile =
|
|
545
|
+
allBindings.length > 0 && isExportOnlyFile(code, allBindings);
|
|
546
|
+
|
|
547
|
+
if (
|
|
548
|
+
canStubWholeFile &&
|
|
549
|
+
(handleFnNames.length > 0 || lsFnNames.length > 0)
|
|
550
|
+
) {
|
|
551
|
+
const exportedLocals = new Set(allBindings.map((b) => b.localName));
|
|
552
|
+
// Collect bindings that would be stripped by whole-file replacement:
|
|
553
|
+
// local declarations and imported bindings from non-@rangojs/router
|
|
554
|
+
// modules. This is a regex-based heuristic — it intentionally skips
|
|
555
|
+
// edge cases (class decls, destructured bindings, combined
|
|
556
|
+
// default+named imports) since those rarely appear in route files.
|
|
557
|
+
const strippedBindings: string[] = [];
|
|
558
|
+
|
|
559
|
+
// Skip React Fast Refresh temporaries (_c, _c2, ...) which are
|
|
560
|
+
// injected by @vitejs/plugin-react in the client environment and
|
|
561
|
+
// would falsely trigger the bailout.
|
|
562
|
+
const localDeclPattern =
|
|
563
|
+
/(?:^|;|\n)\s*(?:const|let|var|function)\s+(\w+)/g;
|
|
564
|
+
let declMatch: RegExpExecArray | null;
|
|
565
|
+
while ((declMatch = localDeclPattern.exec(code)) !== null) {
|
|
566
|
+
const name = declMatch[1];
|
|
567
|
+
if (!exportedLocals.has(name) && !/^_c\d*$/.test(name)) {
|
|
568
|
+
strippedBindings.push(name);
|
|
569
|
+
}
|
|
559
570
|
}
|
|
560
|
-
}
|
|
561
|
-
// Default imports from non-@rangojs/router modules
|
|
562
|
-
const defaultImportPattern =
|
|
563
|
-
/import\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
|
|
564
|
-
while ((importMatch = defaultImportPattern.exec(code)) !== null) {
|
|
565
|
-
strippedBindings.push(importMatch[1]);
|
|
566
|
-
}
|
|
567
571
|
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
572
|
+
const importPattern =
|
|
573
|
+
/import\s*\{([^}]*)\}\s*from\s*["'](?!@rangojs\/router)[^"']*["']/g;
|
|
574
|
+
let importMatch: RegExpExecArray | null;
|
|
575
|
+
while ((importMatch = importPattern.exec(code)) !== null) {
|
|
576
|
+
for (const spec of importMatch[1].split(",")) {
|
|
577
|
+
const m = spec
|
|
578
|
+
.trim()
|
|
579
|
+
.match(/^[A-Za-z_$][\w$]*(?:\s+as\s+([A-Za-z_$][\w$]*))?$/);
|
|
580
|
+
if (m)
|
|
581
|
+
strippedBindings.push(m[1] || m[0].trim().split(/\s/)[0]);
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
const defaultImportPattern =
|
|
585
|
+
/import\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
|
|
586
|
+
while ((importMatch = defaultImportPattern.exec(code)) !== null) {
|
|
587
|
+
strippedBindings.push(importMatch[1]);
|
|
588
|
+
}
|
|
589
|
+
const nsImportPattern =
|
|
590
|
+
/import\s+\*\s+as\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
|
|
591
|
+
while ((importMatch = nsImportPattern.exec(code)) !== null) {
|
|
592
|
+
strippedBindings.push(importMatch[1]);
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
if (strippedBindings.length > 0) {
|
|
596
|
+
const preservedBindings = allBindings.filter((b) => {
|
|
597
|
+
const fc = code.slice(b.callExprStart, b.callOpenParenPos + 1);
|
|
598
|
+
return (
|
|
599
|
+
handleFnNames.some((n) => fc.includes(n)) ||
|
|
600
|
+
lsFnNames.some((n) => fc.includes(n))
|
|
601
|
+
);
|
|
602
|
+
});
|
|
603
|
+
const strippedRe = new RegExp(
|
|
604
|
+
`\\b(?:${strippedBindings.join("|")})\\b`,
|
|
580
605
|
);
|
|
581
|
-
|
|
606
|
+
canStubWholeFile = !preservedBindings.some((b) => {
|
|
607
|
+
const expr = code.slice(
|
|
608
|
+
b.callExprStart,
|
|
609
|
+
b.callCloseParenPos + 1,
|
|
610
|
+
);
|
|
611
|
+
return strippedRe.test(expr);
|
|
612
|
+
});
|
|
613
|
+
}
|
|
582
614
|
}
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
if (canStubWholeFile) {
|
|
586
|
-
const lines: string[] = [];
|
|
587
615
|
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
616
|
+
if (canStubWholeFile) {
|
|
617
|
+
const lines: string[] = [];
|
|
618
|
+
const neededImports: string[] = [];
|
|
619
|
+
if (handleFnNames.length > 0) neededImports.push("createHandle");
|
|
620
|
+
if (lsFnNames.length > 0) neededImports.push("createLocationState");
|
|
621
|
+
if (neededImports.length > 0) {
|
|
622
|
+
lines.push(
|
|
623
|
+
`import { ${neededImports.join(", ")} } from "@rangojs/router";`,
|
|
624
|
+
);
|
|
625
|
+
}
|
|
597
626
|
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
binding.callExprStart,
|
|
601
|
-
binding.callOpenParenPos + 1,
|
|
602
|
-
);
|
|
603
|
-
const isHandle = handleFnNames.some((n) => fnCall.includes(n));
|
|
604
|
-
const isLocationState = lsFnNames.some((n) => fnCall.includes(n));
|
|
605
|
-
|
|
606
|
-
// All aliases share the first export name's ID, matching
|
|
607
|
-
// the server transforms which key off exportNames[0].
|
|
608
|
-
const primaryName = binding.exportNames[0];
|
|
609
|
-
const stubId = isBuild
|
|
610
|
-
? hashId(filePath, primaryName)
|
|
611
|
-
: `${filePath}#${primaryName}`;
|
|
612
|
-
|
|
613
|
-
if (isHandle || isLocationState) {
|
|
614
|
-
// Preserve the original call expression so create*() executes.
|
|
615
|
-
// Replace the alias (if any) with the canonical name since the
|
|
616
|
-
// stub file imports canonical names from @rangojs/router.
|
|
617
|
-
const rawCallExpr = code.slice(
|
|
627
|
+
for (const binding of allBindings) {
|
|
628
|
+
const fnCall = code.slice(
|
|
618
629
|
binding.callExprStart,
|
|
619
|
-
binding.
|
|
630
|
+
binding.callOpenParenPos + 1,
|
|
620
631
|
);
|
|
621
|
-
const
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
632
|
+
const isHandle = handleFnNames.some((n) => fnCall.includes(n));
|
|
633
|
+
const isLocationState = lsFnNames.some((n) => fnCall.includes(n));
|
|
634
|
+
|
|
635
|
+
// Aliases share the primary name's ID (matches server transforms).
|
|
636
|
+
const primaryName = binding.exportNames[0];
|
|
637
|
+
const stubId = makeStubId(filePath, primaryName, isBuild);
|
|
638
|
+
|
|
639
|
+
if (isHandle || isLocationState) {
|
|
640
|
+
// Rewrite alias to canonical name since the stub file only
|
|
641
|
+
// imports canonical names from @rangojs/router.
|
|
642
|
+
// Strip React Fast Refresh `_c = ` wrappers from args
|
|
643
|
+
// (e.g. `_c = (segments) => ...` → `(segments) => ...`)
|
|
644
|
+
const rawArgs = code
|
|
645
|
+
.slice(
|
|
646
|
+
binding.callOpenParenPos + 1,
|
|
647
|
+
binding.callCloseParenPos,
|
|
648
|
+
)
|
|
649
|
+
.replace(/\b_c\d*\s*=\s*/g, "");
|
|
650
|
+
const canonicalName = isHandle
|
|
651
|
+
? "createHandle"
|
|
652
|
+
: "createLocationState";
|
|
653
|
+
const activeFnNames = isHandle ? handleFnNames : lsFnNames;
|
|
654
|
+
|
|
655
|
+
// Reconstruct the function name (handling aliases + generics)
|
|
656
|
+
let rawCallee = code.slice(
|
|
657
|
+
binding.callExprStart,
|
|
658
|
+
binding.callOpenParenPos,
|
|
659
|
+
);
|
|
660
|
+
for (const alias of activeFnNames) {
|
|
661
|
+
if (alias !== canonicalName && rawCallee.startsWith(alias)) {
|
|
662
|
+
rawCallee = canonicalName + rawCallee.slice(alias.length);
|
|
663
|
+
break;
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
if (isHandle) {
|
|
668
|
+
// createHandle checks __injectedId DURING the call, so $$id
|
|
669
|
+
// must be a parameter, not a post-call property assignment.
|
|
670
|
+
const idParam =
|
|
671
|
+
binding.argCount === 0
|
|
672
|
+
? `undefined, "${stubId}"`
|
|
673
|
+
: `, "${stubId}"`;
|
|
674
|
+
lines.push(
|
|
675
|
+
`export const ${primaryName} = ${rawCallee}(${rawArgs}${idParam});`,
|
|
676
|
+
);
|
|
677
|
+
lines.push(`${primaryName}.$$id = "${stubId}";`);
|
|
678
|
+
} else {
|
|
679
|
+
lines.push(
|
|
680
|
+
`export const ${primaryName} = ${rawCallee}(${rawArgs});`,
|
|
681
|
+
);
|
|
682
|
+
lines.push(
|
|
683
|
+
`${primaryName}.__rsc_ls_key = "__rsc_ls_${stubId}";`,
|
|
684
|
+
);
|
|
685
|
+
}
|
|
686
|
+
for (const name of binding.exportNames.slice(1)) {
|
|
687
|
+
lines.push(`export const ${name} = ${primaryName};`);
|
|
630
688
|
}
|
|
631
|
-
}
|
|
632
|
-
lines.push(`export const ${primaryName} = ${callExpr};`);
|
|
633
|
-
if (isHandle) {
|
|
634
|
-
lines.push(`${primaryName}.$$id = "${stubId}";`);
|
|
635
689
|
} else {
|
|
690
|
+
let brand = "loader";
|
|
691
|
+
if (prerenderFnNames.some((n) => fnCall.includes(n))) {
|
|
692
|
+
brand = PRERENDER_CONFIG.brand;
|
|
693
|
+
} else if (staticFnNames.some((n) => fnCall.includes(n))) {
|
|
694
|
+
brand = STATIC_CONFIG.brand;
|
|
695
|
+
}
|
|
636
696
|
lines.push(
|
|
637
|
-
|
|
697
|
+
`export const ${primaryName} = { __brand: "${brand}", $$id: "${stubId}" };`,
|
|
638
698
|
);
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
lines.push(`export const ${name} = ${primaryName};`);
|
|
643
|
-
}
|
|
644
|
-
} else {
|
|
645
|
-
// Loader, Prerender, Static → plain stub
|
|
646
|
-
let brand = "loader";
|
|
647
|
-
if (prerenderFnNames.some((n) => fnCall.includes(n))) {
|
|
648
|
-
brand = PRERENDER_CONFIG.brand;
|
|
649
|
-
} else if (staticFnNames.some((n) => fnCall.includes(n))) {
|
|
650
|
-
brand = STATIC_CONFIG.brand;
|
|
651
|
-
}
|
|
652
|
-
lines.push(
|
|
653
|
-
`export const ${primaryName} = { __brand: "${brand}", $$id: "${stubId}" };`,
|
|
654
|
-
);
|
|
655
|
-
for (const name of binding.exportNames.slice(1)) {
|
|
656
|
-
lines.push(`export const ${name} = ${primaryName};`);
|
|
699
|
+
for (const name of binding.exportNames.slice(1)) {
|
|
700
|
+
lines.push(`export const ${name} = ${primaryName};`);
|
|
701
|
+
}
|
|
657
702
|
}
|
|
658
703
|
}
|
|
659
|
-
}
|
|
660
704
|
|
|
661
|
-
|
|
705
|
+
return { code: lines.join("\n") + "\n", map: null };
|
|
706
|
+
}
|
|
662
707
|
}
|
|
663
|
-
}
|
|
664
708
|
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
709
|
+
// RSC build module tracking (prerender + static), consumed via the
|
|
710
|
+
// plugin API for prerender freezing. Export-binding sets are invariant
|
|
711
|
+
// across the inline-extraction loop, so tracking both here is equivalent
|
|
712
|
+
// to the pre-extraction prerender tracking this replaces.
|
|
713
|
+
if (isRscEnv && isBuild) {
|
|
714
|
+
const trackTypes: Array<
|
|
715
|
+
[boolean, HandlerTransformConfig, Map<string, string[]>]
|
|
716
|
+
> = [
|
|
717
|
+
[
|
|
718
|
+
hasPrerenderHandlerCode,
|
|
719
|
+
PRERENDER_CONFIG,
|
|
720
|
+
prerenderHandlerModules,
|
|
721
|
+
],
|
|
722
|
+
[hasStaticHandlerCode, STATIC_CONFIG, staticHandlerModules],
|
|
723
|
+
];
|
|
724
|
+
for (const [has, cfg, trackMap] of trackTypes) {
|
|
725
|
+
if (!has) continue;
|
|
726
|
+
const exportNames = getBindings(code, getFnNames(cfg.fnName)).map(
|
|
727
|
+
(b) => b.exportNames[0],
|
|
728
|
+
);
|
|
729
|
+
if (exportNames.length > 0) trackMap.set(id, exportNames);
|
|
730
|
+
}
|
|
673
731
|
}
|
|
674
|
-
}
|
|
675
732
|
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
changed =
|
|
685
|
-
transformLoaders(getBindings(code, fnNames), s, filePath, isBuild) ||
|
|
686
|
-
changed;
|
|
687
|
-
}
|
|
688
|
-
if (hasHandleCode) {
|
|
689
|
-
const fnNames = getFnNames("createHandle");
|
|
690
|
-
changed =
|
|
691
|
-
transformHandles(
|
|
692
|
-
getBindings(code, fnNames),
|
|
693
|
-
s,
|
|
694
|
-
code,
|
|
695
|
-
filePath,
|
|
696
|
-
isBuild,
|
|
697
|
-
) || changed;
|
|
698
|
-
}
|
|
699
|
-
if (hasLocationStateCode) {
|
|
700
|
-
const fnNames = getFnNames("createLocationState");
|
|
701
|
-
changed =
|
|
702
|
-
transformLocationState(
|
|
703
|
-
getBindings(code, fnNames),
|
|
704
|
-
s,
|
|
705
|
-
filePath,
|
|
706
|
-
isBuild,
|
|
707
|
-
) || changed;
|
|
708
|
-
}
|
|
709
|
-
if (hasPrerenderHandlerCode) {
|
|
710
|
-
const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
|
|
711
|
-
const bindings = getBindings(code, fnNames);
|
|
712
|
-
if (isRscEnv) {
|
|
733
|
+
// --- Unified MagicString transforms ---
|
|
734
|
+
// Single pipeline for all downstream transforms (loaders, handles,
|
|
735
|
+
// locationState, handler IDs). Uses the post-extraction code so
|
|
736
|
+
// positions are always consistent.
|
|
737
|
+
const s = new MagicString(code);
|
|
738
|
+
|
|
739
|
+
if (hasLoaderCode) {
|
|
740
|
+
const fnNames = getFnNames("createLoader");
|
|
713
741
|
changed =
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
bindings,
|
|
742
|
+
transformLoaders(
|
|
743
|
+
getBindings(code, fnNames),
|
|
717
744
|
s,
|
|
718
745
|
filePath,
|
|
719
746
|
isBuild,
|
|
720
747
|
) || changed;
|
|
721
|
-
}
|
|
722
|
-
|
|
723
|
-
|
|
748
|
+
}
|
|
749
|
+
if (hasHandleCode) {
|
|
750
|
+
const fnNames = getFnNames("createHandle");
|
|
724
751
|
changed =
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
bindings,
|
|
752
|
+
transformHandles(
|
|
753
|
+
getBindings(code, fnNames),
|
|
728
754
|
s,
|
|
755
|
+
code,
|
|
729
756
|
filePath,
|
|
730
757
|
isBuild,
|
|
731
758
|
) || changed;
|
|
732
759
|
}
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
const fnNames = getFnNames(STATIC_CONFIG.fnName);
|
|
736
|
-
const bindings = getBindings(code, fnNames);
|
|
737
|
-
if (isRscEnv) {
|
|
760
|
+
if (hasLocationStateCode) {
|
|
761
|
+
const fnNames = getFnNames("createLocationState");
|
|
738
762
|
changed =
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
bindings,
|
|
763
|
+
transformLocationState(
|
|
764
|
+
getBindings(code, fnNames),
|
|
742
765
|
s,
|
|
743
766
|
filePath,
|
|
744
767
|
isBuild,
|
|
745
768
|
) || changed;
|
|
746
|
-
}
|
|
769
|
+
}
|
|
770
|
+
// Prerender + Static share the RSC inject-id vs non-RSC stub dispatch.
|
|
771
|
+
// Call sites are disjoint (distinct fnNames), so loop order is irrelevant.
|
|
772
|
+
const finalHandlerConfigs = [
|
|
773
|
+
hasPrerenderHandlerCode && PRERENDER_CONFIG,
|
|
774
|
+
hasStaticHandlerCode && STATIC_CONFIG,
|
|
775
|
+
].filter((c): c is HandlerTransformConfig => !!c);
|
|
776
|
+
for (const cfg of finalHandlerConfigs) {
|
|
777
|
+
const bindings = getBindings(code, getFnNames(cfg.fnName));
|
|
747
778
|
changed =
|
|
748
|
-
|
|
779
|
+
(isRscEnv
|
|
780
|
+
? transformHandlerIds(cfg, bindings, s, filePath, isBuild)
|
|
781
|
+
: stubHandlerExprs(cfg, bindings, s, filePath, isBuild)) ||
|
|
749
782
|
changed;
|
|
750
783
|
}
|
|
751
|
-
}
|
|
752
784
|
|
|
753
|
-
|
|
785
|
+
if (!changed) return;
|
|
754
786
|
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
787
|
+
return {
|
|
788
|
+
code: s.toString(),
|
|
789
|
+
map: s.generateMap({ source: id, includeContent: true }),
|
|
790
|
+
};
|
|
791
|
+
} finally {
|
|
792
|
+
counter?.record(id, performance.now() - __t0);
|
|
793
|
+
}
|
|
759
794
|
},
|
|
760
795
|
};
|
|
761
796
|
}
|