@rangojs/router 0.0.0-experimental.2a0dea97 → 0.0.0-experimental.2c0cb8a1
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 +112 -17
- package/dist/__internal.d.ts +83 -0
- package/dist/__internal.d.ts.map +1 -0
- package/dist/__internal.js +19 -0
- package/dist/__internal.js.map +1 -0
- package/dist/__mocks__/version.d.ts +7 -0
- package/dist/__mocks__/version.d.ts.map +1 -0
- package/dist/__mocks__/version.js +7 -0
- package/dist/__mocks__/version.js.map +1 -0
- package/dist/__tests__/client-href.test.d.ts +2 -0
- package/dist/__tests__/client-href.test.d.ts.map +1 -0
- package/dist/__tests__/client-href.test.js +74 -0
- package/dist/__tests__/client-href.test.js.map +1 -0
- package/dist/__tests__/component-utils.test.d.ts +2 -0
- package/dist/__tests__/component-utils.test.d.ts.map +1 -0
- package/dist/__tests__/component-utils.test.js +51 -0
- package/dist/__tests__/component-utils.test.js.map +1 -0
- package/dist/__tests__/event-controller.test.d.ts +2 -0
- package/dist/__tests__/event-controller.test.d.ts.map +1 -0
- package/dist/__tests__/event-controller.test.js +538 -0
- package/dist/__tests__/event-controller.test.js.map +1 -0
- package/dist/__tests__/helpers/route-tree.d.ts +118 -0
- package/dist/__tests__/helpers/route-tree.d.ts.map +1 -0
- package/dist/__tests__/helpers/route-tree.js +374 -0
- package/dist/__tests__/helpers/route-tree.js.map +1 -0
- package/dist/__tests__/match-result.test.d.ts +2 -0
- package/dist/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/__tests__/match-result.test.js +154 -0
- package/dist/__tests__/match-result.test.js.map +1 -0
- package/dist/__tests__/navigation-store.test.d.ts +2 -0
- package/dist/__tests__/navigation-store.test.d.ts.map +1 -0
- package/dist/__tests__/navigation-store.test.js +440 -0
- package/dist/__tests__/navigation-store.test.js.map +1 -0
- package/dist/__tests__/partial-update.test.d.ts +2 -0
- package/dist/__tests__/partial-update.test.d.ts.map +1 -0
- package/dist/__tests__/partial-update.test.js +1009 -0
- package/dist/__tests__/partial-update.test.js.map +1 -0
- package/dist/__tests__/reverse-types.test.d.ts +8 -0
- package/dist/__tests__/reverse-types.test.d.ts.map +1 -0
- package/dist/__tests__/reverse-types.test.js +656 -0
- package/dist/__tests__/reverse-types.test.js.map +1 -0
- package/dist/__tests__/route-definition.test.d.ts +2 -0
- package/dist/__tests__/route-definition.test.d.ts.map +1 -0
- package/dist/__tests__/route-definition.test.js +55 -0
- package/dist/__tests__/route-definition.test.js.map +1 -0
- package/dist/__tests__/router-helpers.test.d.ts +2 -0
- package/dist/__tests__/router-helpers.test.d.ts.map +1 -0
- package/dist/__tests__/router-helpers.test.js +377 -0
- package/dist/__tests__/router-helpers.test.js.map +1 -0
- package/dist/__tests__/router-integration-2.test.d.ts +2 -0
- package/dist/__tests__/router-integration-2.test.d.ts.map +1 -0
- package/dist/__tests__/router-integration-2.test.js +426 -0
- package/dist/__tests__/router-integration-2.test.js.map +1 -0
- package/dist/__tests__/router-integration.test.d.ts +2 -0
- package/dist/__tests__/router-integration.test.d.ts.map +1 -0
- package/dist/__tests__/router-integration.test.js +1051 -0
- package/dist/__tests__/router-integration.test.js.map +1 -0
- package/dist/__tests__/search-params.test.d.ts +5 -0
- package/dist/__tests__/search-params.test.d.ts.map +1 -0
- package/dist/__tests__/search-params.test.js +306 -0
- package/dist/__tests__/search-params.test.js.map +1 -0
- package/dist/__tests__/segment-system.test.d.ts +2 -0
- package/dist/__tests__/segment-system.test.d.ts.map +1 -0
- package/dist/__tests__/segment-system.test.js +627 -0
- package/dist/__tests__/segment-system.test.js.map +1 -0
- package/dist/__tests__/static-handler-types.test.d.ts +8 -0
- package/dist/__tests__/static-handler-types.test.d.ts.map +1 -0
- package/dist/__tests__/static-handler-types.test.js +63 -0
- package/dist/__tests__/static-handler-types.test.js.map +1 -0
- package/dist/__tests__/urls.test.d.ts +2 -0
- package/dist/__tests__/urls.test.d.ts.map +1 -0
- package/dist/__tests__/urls.test.js +421 -0
- package/dist/__tests__/urls.test.js.map +1 -0
- package/dist/__tests__/use-mount.test.d.ts +2 -0
- package/dist/__tests__/use-mount.test.d.ts.map +1 -0
- package/dist/__tests__/use-mount.test.js +35 -0
- package/dist/__tests__/use-mount.test.js.map +1 -0
- package/dist/bin/rango.d.ts +2 -0
- package/dist/bin/rango.d.ts.map +1 -0
- package/dist/bin/rango.js.map +1 -0
- package/dist/browser/event-controller.d.ts +191 -0
- package/dist/browser/event-controller.d.ts.map +1 -0
- package/dist/browser/event-controller.js +559 -0
- package/dist/browser/event-controller.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/link-interceptor.d.ts +38 -0
- package/dist/browser/link-interceptor.d.ts.map +1 -0
- package/dist/browser/link-interceptor.js +99 -0
- package/dist/browser/link-interceptor.js.map +1 -0
- package/dist/browser/logging.d.ts +10 -0
- package/dist/browser/logging.d.ts.map +1 -0
- package/dist/browser/logging.js +29 -0
- package/dist/browser/logging.js.map +1 -0
- package/dist/browser/lru-cache.d.ts +17 -0
- package/dist/browser/lru-cache.d.ts.map +1 -0
- package/dist/browser/lru-cache.js +50 -0
- package/dist/browser/lru-cache.js.map +1 -0
- package/dist/browser/merge-segment-loaders.d.ts +39 -0
- package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
- package/dist/browser/merge-segment-loaders.js +102 -0
- package/dist/browser/merge-segment-loaders.js.map +1 -0
- package/dist/browser/navigation-bridge.d.ts +102 -0
- package/dist/browser/navigation-bridge.d.ts.map +1 -0
- package/dist/browser/navigation-bridge.js +708 -0
- package/dist/browser/navigation-bridge.js.map +1 -0
- package/dist/browser/navigation-client.d.ts +25 -0
- package/dist/browser/navigation-client.d.ts.map +1 -0
- package/dist/browser/navigation-client.js +157 -0
- package/dist/browser/navigation-client.js.map +1 -0
- package/dist/browser/navigation-store.d.ts +101 -0
- package/dist/browser/navigation-store.d.ts.map +1 -0
- package/dist/browser/navigation-store.js +625 -0
- package/dist/browser/navigation-store.js.map +1 -0
- package/dist/browser/partial-update.d.ts +75 -0
- package/dist/browser/partial-update.d.ts.map +1 -0
- package/dist/browser/partial-update.js +426 -0
- package/dist/browser/partial-update.js.map +1 -0
- package/dist/browser/react/Link.d.ts +86 -0
- package/dist/browser/react/Link.d.ts.map +1 -0
- package/dist/browser/react/Link.js +128 -0
- package/dist/browser/react/Link.js.map +1 -0
- package/dist/browser/react/NavigationProvider.d.ts +63 -0
- package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
- package/dist/browser/react/NavigationProvider.js +216 -0
- package/dist/browser/react/NavigationProvider.js.map +1 -0
- package/dist/browser/react/ScrollRestoration.d.ts +75 -0
- package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
- package/dist/browser/react/ScrollRestoration.js +57 -0
- package/dist/browser/react/ScrollRestoration.js.map +1 -0
- package/dist/browser/react/context.d.ts +46 -0
- package/dist/browser/react/context.d.ts.map +1 -0
- package/dist/browser/react/context.js +10 -0
- package/dist/browser/react/context.js.map +1 -0
- package/dist/browser/react/index.d.ts +11 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/index.js +22 -0
- package/dist/browser/react/index.js.map +1 -0
- package/dist/browser/react/location-state-shared.d.ts +63 -0
- package/dist/browser/react/location-state-shared.d.ts.map +1 -0
- package/dist/browser/react/location-state-shared.js +81 -0
- package/dist/browser/react/location-state-shared.js.map +1 -0
- package/dist/browser/react/location-state.d.ts +23 -0
- package/dist/browser/react/location-state.d.ts.map +1 -0
- package/dist/browser/react/location-state.js +29 -0
- package/dist/browser/react/location-state.js.map +1 -0
- package/dist/browser/react/mount-context.d.ts +24 -0
- package/dist/browser/react/mount-context.d.ts.map +1 -0
- package/dist/browser/react/mount-context.js +24 -0
- package/dist/browser/react/mount-context.js.map +1 -0
- package/dist/browser/react/use-action.d.ts +64 -0
- package/dist/browser/react/use-action.d.ts.map +1 -0
- package/dist/browser/react/use-action.js +134 -0
- package/dist/browser/react/use-action.js.map +1 -0
- package/dist/browser/react/use-client-cache.d.ts +41 -0
- package/dist/browser/react/use-client-cache.d.ts.map +1 -0
- package/dist/browser/react/use-client-cache.js +39 -0
- package/dist/browser/react/use-client-cache.js.map +1 -0
- package/dist/browser/react/use-handle.d.ts +31 -0
- package/dist/browser/react/use-handle.d.ts.map +1 -0
- package/dist/browser/react/use-handle.js +144 -0
- package/dist/browser/react/use-handle.js.map +1 -0
- package/dist/browser/react/use-href.d.ts +33 -0
- package/dist/browser/react/use-href.d.ts.map +1 -0
- package/dist/browser/react/use-href.js +39 -0
- package/dist/browser/react/use-href.js.map +1 -0
- package/dist/browser/react/use-link-status.d.ts +37 -0
- package/dist/browser/react/use-link-status.d.ts.map +1 -0
- package/dist/browser/react/use-link-status.js +99 -0
- package/dist/browser/react/use-link-status.js.map +1 -0
- package/dist/browser/react/use-mount.d.ts +25 -0
- package/dist/browser/react/use-mount.d.ts.map +1 -0
- package/dist/browser/react/use-mount.js +30 -0
- package/dist/browser/react/use-mount.js.map +1 -0
- package/dist/browser/react/use-navigation.d.ts +27 -0
- package/dist/browser/react/use-navigation.d.ts.map +1 -0
- package/dist/browser/react/use-navigation.js +87 -0
- package/dist/browser/react/use-navigation.js.map +1 -0
- package/dist/browser/react/use-segments.d.ts +38 -0
- package/dist/browser/react/use-segments.d.ts.map +1 -0
- package/dist/browser/react/use-segments.js +130 -0
- package/dist/browser/react/use-segments.js.map +1 -0
- package/dist/browser/request-controller.d.ts +26 -0
- package/dist/browser/request-controller.d.ts.map +1 -0
- package/dist/browser/request-controller.js +147 -0
- package/dist/browser/request-controller.js.map +1 -0
- package/dist/browser/rsc-router.d.ts +129 -0
- package/dist/browser/rsc-router.d.ts.map +1 -0
- package/dist/browser/rsc-router.js +195 -0
- package/dist/browser/rsc-router.js.map +1 -0
- package/dist/browser/scroll-restoration.d.ts +93 -0
- package/dist/browser/scroll-restoration.d.ts.map +1 -0
- package/dist/browser/scroll-restoration.js +321 -0
- package/dist/browser/scroll-restoration.js.map +1 -0
- package/dist/browser/segment-structure-assert.d.ts +17 -0
- package/dist/browser/segment-structure-assert.d.ts.map +1 -0
- package/dist/browser/segment-structure-assert.js +59 -0
- package/dist/browser/segment-structure-assert.js.map +1 -0
- package/dist/browser/server-action-bridge.d.ts +26 -0
- package/dist/browser/server-action-bridge.d.ts.map +1 -0
- package/dist/browser/server-action-bridge.js +668 -0
- package/dist/browser/server-action-bridge.js.map +1 -0
- package/dist/browser/shallow.d.ts +12 -0
- package/dist/browser/shallow.d.ts.map +1 -0
- package/dist/browser/shallow.js +34 -0
- package/dist/browser/shallow.js.map +1 -0
- package/dist/browser/types.d.ts +369 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
- package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-cli.test.js +237 -0
- package/dist/build/__tests__/generate-cli.test.js.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.js +119 -0
- package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.js +620 -0
- package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.js +308 -0
- package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +81 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +276 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/build/generate-route-types.d.ts +115 -0
- package/dist/build/generate-route-types.d.ts.map +1 -0
- package/dist/build/generate-route-types.js +740 -0
- package/dist/build/generate-route-types.js.map +1 -0
- package/dist/build/index.d.ts +21 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +21 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/route-trie.d.ts +71 -0
- package/dist/build/route-trie.d.ts.map +1 -0
- package/dist/build/route-trie.js +175 -0
- package/dist/build/route-trie.js.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.js +208 -0
- package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
- package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
- package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
- package/dist/cache/__tests__/document-cache.test.js +345 -0
- package/dist/cache/__tests__/document-cache.test.js.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
- package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
- package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-store.test.js +367 -0
- package/dist/cache/__tests__/memory-store.test.js.map +1 -0
- package/dist/cache/cache-scope.d.ts +102 -0
- package/dist/cache/cache-scope.d.ts.map +1 -0
- package/dist/cache/cache-scope.js +440 -0
- package/dist/cache/cache-scope.js.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
- package/dist/cache/cf/cf-cache-store.d.ts +165 -0
- package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
- package/dist/cache/cf/cf-cache-store.js +242 -0
- package/dist/cache/cf/cf-cache-store.js.map +1 -0
- package/dist/cache/cf/index.d.ts +14 -0
- package/dist/cache/cf/index.d.ts.map +1 -0
- package/dist/cache/cf/index.js +17 -0
- package/dist/cache/cf/index.js.map +1 -0
- package/dist/cache/document-cache.d.ts +64 -0
- package/dist/cache/document-cache.d.ts.map +1 -0
- package/dist/cache/document-cache.js +228 -0
- package/dist/cache/document-cache.js.map +1 -0
- package/dist/cache/index.d.ts +19 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-segment-store.d.ts +110 -0
- package/dist/cache/memory-segment-store.d.ts.map +1 -0
- package/dist/cache/memory-segment-store.js +117 -0
- package/dist/cache/memory-segment-store.js.map +1 -0
- package/dist/cache/memory-store.d.ts +41 -0
- package/dist/cache/memory-store.d.ts.map +1 -0
- package/dist/cache/memory-store.js +191 -0
- package/dist/cache/memory-store.js.map +1 -0
- package/dist/cache/types.d.ts +317 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +12 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client.d.ts +248 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +367 -0
- package/dist/client.js.map +1 -0
- package/dist/client.rsc.d.ts +26 -0
- package/dist/client.rsc.d.ts.map +1 -0
- package/dist/client.rsc.js +46 -0
- package/dist/client.rsc.js.map +1 -0
- package/dist/component-utils.d.ts +36 -0
- package/dist/component-utils.d.ts.map +1 -0
- package/dist/component-utils.js +61 -0
- package/dist/component-utils.js.map +1 -0
- package/dist/components/DefaultDocument.d.ts +13 -0
- package/dist/components/DefaultDocument.d.ts.map +1 -0
- package/dist/components/DefaultDocument.js +15 -0
- package/dist/components/DefaultDocument.js.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +157 -0
- package/dist/debug.js.map +1 -0
- package/dist/default-error-boundary.d.ts +11 -0
- package/dist/default-error-boundary.d.ts.map +1 -0
- package/dist/default-error-boundary.js +45 -0
- package/dist/default-error-boundary.js.map +1 -0
- package/dist/deps/browser.d.ts +2 -0
- package/dist/deps/browser.d.ts.map +1 -0
- package/dist/deps/browser.js +3 -0
- package/dist/deps/browser.js.map +1 -0
- package/dist/deps/html-stream-client.d.ts +2 -0
- package/dist/deps/html-stream-client.d.ts.map +1 -0
- package/dist/deps/html-stream-client.js +3 -0
- package/dist/deps/html-stream-client.js.map +1 -0
- package/dist/deps/html-stream-server.d.ts +2 -0
- package/dist/deps/html-stream-server.d.ts.map +1 -0
- package/dist/deps/html-stream-server.js +3 -0
- package/dist/deps/html-stream-server.js.map +1 -0
- package/dist/deps/rsc.d.ts +2 -0
- package/dist/deps/rsc.d.ts.map +1 -0
- package/dist/deps/rsc.js +4 -0
- package/dist/deps/rsc.js.map +1 -0
- package/dist/deps/ssr.d.ts +2 -0
- package/dist/deps/ssr.d.ts.map +1 -0
- package/dist/deps/ssr.js +3 -0
- package/dist/deps/ssr.js.map +1 -0
- package/dist/errors.d.ts +174 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +241 -0
- package/dist/errors.js.map +1 -0
- package/dist/handle.d.ts +78 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +82 -0
- package/dist/handle.js.map +1 -0
- package/dist/handles/MetaTags.d.ts +14 -0
- package/dist/handles/MetaTags.d.ts.map +1 -0
- package/dist/handles/MetaTags.js +136 -0
- package/dist/handles/MetaTags.js.map +1 -0
- package/dist/handles/index.d.ts +6 -0
- package/dist/handles/index.d.ts.map +1 -0
- package/dist/handles/index.js +6 -0
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/dist/href-context.d.ts +29 -0
- package/dist/href-context.d.ts.map +1 -0
- package/dist/href-context.js +21 -0
- package/dist/href-context.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.rsc.d.ts +32 -0
- package/dist/index.rsc.d.ts.map +1 -0
- package/dist/index.rsc.js +40 -0
- package/dist/index.rsc.js.map +1 -0
- package/dist/internal-debug.d.ts +2 -0
- package/dist/internal-debug.d.ts.map +1 -0
- package/dist/internal-debug.js +5 -0
- package/dist/internal-debug.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/loader.rsc.d.ts +19 -0
- package/dist/loader.rsc.d.ts.map +1 -0
- package/dist/loader.rsc.js +99 -0
- package/dist/loader.rsc.js.map +1 -0
- package/dist/network-error-thrower.d.ts +17 -0
- package/dist/network-error-thrower.d.ts.map +1 -0
- package/dist/network-error-thrower.js +14 -0
- package/dist/network-error-thrower.js.map +1 -0
- package/dist/outlet-context.d.ts +13 -0
- package/dist/outlet-context.d.ts.map +1 -0
- package/dist/outlet-context.js +3 -0
- package/dist/outlet-context.js.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.js +148 -0
- package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
- package/dist/prerender/param-hash.d.ts +16 -0
- package/dist/prerender/param-hash.d.ts.map +1 -0
- package/dist/prerender/param-hash.js +36 -0
- package/dist/prerender/param-hash.js.map +1 -0
- package/dist/prerender/store.d.ts +38 -0
- package/dist/prerender/store.d.ts.map +1 -0
- package/dist/prerender/store.js +61 -0
- package/dist/prerender/store.js.map +1 -0
- package/dist/prerender.d.ts +66 -0
- package/dist/prerender.d.ts.map +1 -0
- package/dist/prerender.js +57 -0
- package/dist/prerender.js.map +1 -0
- package/dist/reverse.d.ts +196 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +78 -0
- package/dist/reverse.js.map +1 -0
- package/dist/root-error-boundary.d.ts +33 -0
- package/dist/root-error-boundary.d.ts.map +1 -0
- package/dist/root-error-boundary.js +165 -0
- package/dist/root-error-boundary.js.map +1 -0
- package/dist/route-content-wrapper.d.ts +46 -0
- package/dist/route-content-wrapper.d.ts.map +1 -0
- package/dist/route-content-wrapper.js +77 -0
- package/dist/route-content-wrapper.js.map +1 -0
- package/dist/route-definition.d.ts +421 -0
- package/dist/route-definition.d.ts.map +1 -0
- package/dist/route-definition.js +868 -0
- package/dist/route-definition.js.map +1 -0
- package/dist/route-map-builder.d.ts +155 -0
- package/dist/route-map-builder.d.ts.map +1 -0
- package/dist/route-map-builder.js +237 -0
- package/dist/route-map-builder.js.map +1 -0
- package/dist/route-types.d.ts +165 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +7 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router/__tests__/handler-context.test.d.ts +2 -0
- package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/handler-context.test.js +65 -0
- package/dist/router/__tests__/handler-context.test.js.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
- package/dist/router/__tests__/match-context.test.d.ts +2 -0
- package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-context.test.js +92 -0
- package/dist/router/__tests__/match-context.test.js.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.js +417 -0
- package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
- package/dist/router/__tests__/match-result.test.d.ts +2 -0
- package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-result.test.js +457 -0
- package/dist/router/__tests__/match-result.test.js.map +1 -0
- package/dist/router/__tests__/on-error.test.d.ts +2 -0
- package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
- package/dist/router/__tests__/on-error.test.js +678 -0
- package/dist/router/__tests__/on-error.test.js.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.js +629 -0
- package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
- package/dist/router/error-handling.d.ts +77 -0
- package/dist/router/error-handling.d.ts.map +1 -0
- package/dist/router/error-handling.js +202 -0
- package/dist/router/error-handling.js.map +1 -0
- package/dist/router/handler-context.d.ts +20 -0
- package/dist/router/handler-context.d.ts.map +1 -0
- package/dist/router/handler-context.js +198 -0
- package/dist/router/handler-context.js.map +1 -0
- package/dist/router/intercept-resolution.d.ts +66 -0
- package/dist/router/intercept-resolution.d.ts.map +1 -0
- package/dist/router/intercept-resolution.js +246 -0
- package/dist/router/intercept-resolution.js.map +1 -0
- package/dist/router/loader-resolution.d.ts +64 -0
- package/dist/router/loader-resolution.d.ts.map +1 -0
- package/dist/router/loader-resolution.js +284 -0
- package/dist/router/loader-resolution.js.map +1 -0
- package/dist/router/logging.d.ts +15 -0
- package/dist/router/logging.d.ts.map +1 -0
- package/dist/router/logging.js +99 -0
- package/dist/router/logging.js.map +1 -0
- package/dist/router/manifest.d.ts +22 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +181 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/match-api.d.ts +35 -0
- package/dist/router/match-api.d.ts.map +1 -0
- package/dist/router/match-api.js +406 -0
- package/dist/router/match-api.js.map +1 -0
- package/dist/router/match-context.d.ts +206 -0
- package/dist/router/match-context.d.ts.map +1 -0
- package/dist/router/match-context.js +17 -0
- package/dist/router/match-context.js.map +1 -0
- package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
- package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
- package/dist/router/match-middleware/background-revalidation.js +75 -0
- package/dist/router/match-middleware/background-revalidation.js.map +1 -0
- package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
- package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-lookup.js +257 -0
- package/dist/router/match-middleware/cache-lookup.js.map +1 -0
- package/dist/router/match-middleware/cache-store.d.ts +113 -0
- package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-store.js +108 -0
- package/dist/router/match-middleware/cache-store.js.map +1 -0
- package/dist/router/match-middleware/index.d.ts +81 -0
- package/dist/router/match-middleware/index.d.ts.map +1 -0
- package/dist/router/match-middleware/index.js +80 -0
- package/dist/router/match-middleware/index.js.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.js +134 -0
- package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
- package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
- package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/segment-resolution.js +53 -0
- package/dist/router/match-middleware/segment-resolution.js.map +1 -0
- package/dist/router/match-pipelines.d.ts +147 -0
- package/dist/router/match-pipelines.d.ts.map +1 -0
- package/dist/router/match-pipelines.js +82 -0
- package/dist/router/match-pipelines.js.map +1 -0
- package/dist/router/match-result.d.ts +126 -0
- package/dist/router/match-result.d.ts.map +1 -0
- package/dist/router/match-result.js +93 -0
- package/dist/router/match-result.js.map +1 -0
- package/dist/router/metrics.d.ts +20 -0
- package/dist/router/metrics.d.ts.map +1 -0
- package/dist/router/metrics.js +47 -0
- package/dist/router/metrics.js.map +1 -0
- package/dist/router/middleware.d.ts +249 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +434 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/middleware.test.d.ts +2 -0
- package/dist/router/middleware.test.d.ts.map +1 -0
- package/dist/router/middleware.test.js +816 -0
- package/dist/router/middleware.test.js.map +1 -0
- package/dist/router/pattern-matching.d.ts +149 -0
- package/dist/router/pattern-matching.d.ts.map +1 -0
- package/dist/router/pattern-matching.js +349 -0
- package/dist/router/pattern-matching.js.map +1 -0
- package/dist/router/revalidation.d.ts +44 -0
- package/dist/router/revalidation.d.ts.map +1 -0
- package/dist/router/revalidation.js +147 -0
- package/dist/router/revalidation.js.map +1 -0
- package/dist/router/router-context.d.ts +135 -0
- package/dist/router/router-context.d.ts.map +1 -0
- package/dist/router/router-context.js +36 -0
- package/dist/router/router-context.js.map +1 -0
- package/dist/router/segment-resolution.d.ts +127 -0
- package/dist/router/segment-resolution.d.ts.map +1 -0
- package/dist/router/segment-resolution.js +919 -0
- package/dist/router/segment-resolution.js.map +1 -0
- package/dist/router/trie-matching.d.ts +40 -0
- package/dist/router/trie-matching.d.ts.map +1 -0
- package/dist/router/trie-matching.js +127 -0
- package/dist/router/trie-matching.js.map +1 -0
- package/dist/router/types.d.ts +136 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router.d.ts +753 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.gen.d.ts +6 -0
- package/dist/router.gen.d.ts.map +1 -0
- package/dist/router.gen.js +6 -0
- package/dist/router.gen.js.map +1 -0
- package/dist/router.js +1304 -0
- package/dist/router.js.map +1 -0
- package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
- package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/rsc/__tests__/helpers.test.js +140 -0
- package/dist/rsc/__tests__/helpers.test.js.map +1 -0
- package/dist/rsc/handler.d.ts +45 -0
- package/dist/rsc/handler.d.ts.map +1 -0
- package/dist/rsc/handler.js +1172 -0
- package/dist/rsc/handler.js.map +1 -0
- package/dist/rsc/helpers.d.ts +16 -0
- package/dist/rsc/helpers.d.ts.map +1 -0
- package/dist/rsc/helpers.js +55 -0
- package/dist/rsc/helpers.js.map +1 -0
- package/dist/rsc/index.d.ts +22 -0
- package/dist/rsc/index.d.ts.map +1 -0
- package/dist/rsc/index.js +23 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/nonce.d.ts +9 -0
- package/dist/rsc/nonce.d.ts.map +1 -0
- package/dist/rsc/nonce.js +18 -0
- package/dist/rsc/nonce.js.map +1 -0
- package/dist/rsc/types.d.ts +206 -0
- package/dist/rsc/types.d.ts.map +1 -0
- package/dist/rsc/types.js +8 -0
- package/dist/rsc/types.js.map +1 -0
- package/dist/search-params.d.ts +103 -0
- package/dist/search-params.d.ts.map +1 -0
- package/dist/search-params.js +74 -0
- package/dist/search-params.js.map +1 -0
- package/dist/segment-system.d.ts +75 -0
- package/dist/segment-system.d.ts.map +1 -0
- package/dist/segment-system.js +336 -0
- package/dist/segment-system.js.map +1 -0
- package/dist/server/context.d.ts +245 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +197 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fetchable-loader-store.d.ts +18 -0
- package/dist/server/fetchable-loader-store.d.ts.map +1 -0
- package/dist/server/fetchable-loader-store.js +18 -0
- package/dist/server/fetchable-loader-store.js.map +1 -0
- package/dist/server/handle-store.d.ts +85 -0
- package/dist/server/handle-store.d.ts.map +1 -0
- package/dist/server/handle-store.js +142 -0
- package/dist/server/handle-store.js.map +1 -0
- package/dist/server/loader-registry.d.ts +55 -0
- package/dist/server/loader-registry.d.ts.map +1 -0
- package/dist/server/loader-registry.js +132 -0
- package/dist/server/loader-registry.js.map +1 -0
- package/dist/server/request-context.d.ts +226 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +290 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/root-layout.d.ts +4 -0
- package/dist/server/root-layout.d.ts.map +1 -0
- package/dist/server/root-layout.js +5 -0
- package/dist/server/root-layout.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
- package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
- package/dist/ssr/index.d.ts +98 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +158 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/static-handler.d.ts +50 -0
- package/dist/static-handler.d.ts.map +1 -0
- package/dist/static-handler.gen.d.ts +5 -0
- package/dist/static-handler.gen.d.ts.map +1 -0
- package/dist/static-handler.gen.js +5 -0
- package/dist/static-handler.gen.js.map +1 -0
- package/dist/static-handler.js +29 -0
- package/dist/static-handler.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +20 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +240 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/ThemeScript.d.ts +48 -0
- package/dist/theme/ThemeScript.d.ts.map +1 -0
- package/dist/theme/ThemeScript.js +13 -0
- package/dist/theme/ThemeScript.js.map +1 -0
- package/dist/theme/__tests__/theme.test.d.ts +2 -0
- package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
- package/dist/theme/__tests__/theme.test.js +103 -0
- package/dist/theme/__tests__/theme.test.js.map +1 -0
- package/dist/theme/constants.d.ts +29 -0
- package/dist/theme/constants.d.ts.map +1 -0
- package/dist/theme/constants.js +48 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +31 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +36 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-context.d.ts +40 -0
- package/dist/theme/theme-context.d.ts.map +1 -0
- package/dist/theme/theme-context.js +60 -0
- package/dist/theme/theme-context.js.map +1 -0
- package/dist/theme/theme-script.d.ts +27 -0
- package/dist/theme/theme-script.d.ts.map +1 -0
- package/dist/theme/theme-script.js +147 -0
- package/dist/theme/theme-script.js.map +1 -0
- package/dist/theme/types.d.ts +163 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +11 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/theme/use-theme.d.ts +12 -0
- package/dist/theme/use-theme.d.ts.map +1 -0
- package/dist/theme/use-theme.js +40 -0
- package/dist/theme/use-theme.js.map +1 -0
- package/dist/types.d.ts +1479 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/urls.d.ts +441 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.gen.d.ts +8 -0
- package/dist/urls.gen.d.ts.map +1 -0
- package/dist/urls.gen.js +8 -0
- package/dist/urls.gen.js.map +1 -0
- package/dist/urls.js +443 -0
- package/dist/urls.js.map +1 -0
- package/dist/use-loader.d.ts +127 -0
- package/dist/use-loader.d.ts.map +1 -0
- package/dist/use-loader.js +237 -0
- package/dist/use-loader.js.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
- package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.js +39 -0
- package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
- package/dist/vite/ast-handler-extract.d.ts +49 -0
- package/dist/vite/ast-handler-extract.d.ts.map +1 -0
- package/dist/vite/ast-handler-extract.js +249 -0
- package/dist/vite/ast-handler-extract.js.map +1 -0
- package/dist/vite/expose-action-id.d.ts +19 -0
- package/dist/vite/expose-action-id.d.ts.map +1 -0
- package/dist/vite/expose-action-id.js +250 -0
- package/dist/vite/expose-action-id.js.map +1 -0
- package/dist/vite/expose-id-utils.d.ts +69 -0
- package/dist/vite/expose-id-utils.d.ts.map +1 -0
- package/dist/vite/expose-id-utils.js +289 -0
- package/dist/vite/expose-id-utils.js.map +1 -0
- package/dist/vite/expose-internal-ids.d.ts +22 -0
- package/dist/vite/expose-internal-ids.d.ts.map +1 -0
- package/dist/vite/expose-internal-ids.js +886 -0
- package/dist/vite/expose-internal-ids.js.map +1 -0
- package/dist/vite/index.d.ts +149 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +1323 -455
- package/dist/vite/index.js.bak +5448 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/index.named-routes.gen.ts +103 -0
- package/dist/vite/package-resolution.d.ts +43 -0
- package/dist/vite/package-resolution.d.ts.map +1 -0
- package/dist/vite/package-resolution.js +112 -0
- package/dist/vite/package-resolution.js.map +1 -0
- package/dist/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/dist/vite/virtual-entries.d.ts +25 -0
- package/dist/vite/virtual-entries.d.ts.map +1 -0
- package/dist/vite/virtual-entries.js +110 -0
- package/dist/vite/virtual-entries.js.map +1 -0
- package/package.json +5 -3
- package/skills/breadcrumbs/SKILL.md +3 -1
- package/skills/handler-use/SKILL.md +2 -0
- package/skills/hooks/SKILL.md +54 -20
- package/skills/i18n/SKILL.md +276 -0
- package/skills/intercept/SKILL.md +25 -0
- package/skills/layout/SKILL.md +2 -0
- package/skills/links/SKILL.md +234 -16
- package/skills/loader/SKILL.md +70 -3
- package/skills/middleware/SKILL.md +2 -0
- package/skills/migrate-nextjs/SKILL.md +3 -1
- package/skills/migrate-react-router/SKILL.md +5 -0
- package/skills/parallel/SKILL.md +9 -0
- package/skills/rango/SKILL.md +2 -0
- package/skills/response-routes/SKILL.md +8 -0
- package/skills/route/SKILL.md +24 -0
- package/skills/server-actions/SKILL.md +739 -0
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/typesafety/SKILL.md +9 -1
- package/skills/view-transitions/SKILL.md +212 -0
- package/src/browser/app-shell.ts +52 -0
- package/src/browser/event-controller.ts +44 -4
- package/src/browser/navigation-bridge.ts +120 -6
- package/src/browser/navigation-client.ts +33 -10
- package/src/browser/navigation-store.ts +25 -1
- package/src/browser/partial-update.ts +44 -10
- package/src/browser/prefetch/cache.ts +124 -26
- package/src/browser/prefetch/fetch.ts +114 -38
- package/src/browser/prefetch/queue.ts +36 -5
- package/src/browser/rango-state.ts +53 -13
- package/src/browser/react/Link.tsx +18 -13
- package/src/browser/react/NavigationProvider.tsx +70 -18
- package/src/browser/react/filter-segment-order.ts +51 -7
- package/src/browser/react/index.ts +3 -0
- package/src/browser/react/use-navigation.ts +22 -2
- package/src/browser/react/use-params.ts +17 -4
- package/src/browser/react/use-reverse.ts +99 -0
- package/src/browser/react/use-router.ts +8 -1
- package/src/browser/react/use-segments.ts +11 -8
- package/src/browser/rsc-router.tsx +34 -6
- package/src/browser/scroll-restoration.ts +23 -29
- package/src/browser/segment-reconciler.ts +2 -37
- package/src/browser/types.ts +19 -0
- package/src/build/route-trie.ts +2 -1
- package/src/cache/cf/cf-cache-store.ts +5 -7
- package/src/client.rsc.tsx +3 -0
- package/src/client.tsx +86 -167
- package/src/href-client.ts +4 -1
- package/src/index.rsc.ts +3 -0
- package/src/index.ts +3 -0
- package/src/outlet-context.ts +1 -1
- package/src/response-utils.ts +28 -0
- package/src/reverse.ts +62 -39
- package/src/route-definition/dsl-helpers.ts +16 -3
- package/src/route-definition/helpers-types.ts +6 -1
- package/src/route-definition/resolve-handler-use.ts +6 -0
- package/src/route-types.ts +7 -0
- package/src/router/handler-context.ts +21 -41
- package/src/router/lazy-includes.ts +6 -6
- package/src/router/loader-resolution.ts +3 -0
- 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-result.ts +21 -2
- package/src/router/middleware-types.ts +14 -25
- package/src/router/middleware.ts +54 -7
- package/src/router/pattern-matching.ts +101 -17
- package/src/router/revalidation.ts +15 -1
- package/src/router/segment-resolution/fresh.ts +8 -0
- package/src/router/segment-resolution/revalidation.ts +128 -100
- package/src/router/substitute-pattern-params.ts +56 -0
- package/src/router/trie-matching.ts +18 -13
- package/src/router/url-params.ts +49 -0
- package/src/router.ts +1 -2
- package/src/rsc/handler.ts +8 -4
- package/src/rsc/helpers.ts +69 -41
- package/src/rsc/progressive-enhancement.ts +4 -0
- package/src/rsc/response-route-handler.ts +14 -1
- package/src/rsc/rsc-rendering.ts +10 -0
- package/src/rsc/server-action.ts +4 -0
- package/src/rsc/types.ts +6 -0
- package/src/segment-content-promise.ts +46 -12
- package/src/segment-loader-promise.ts +122 -0
- package/src/segment-system.tsx +68 -72
- package/src/server/context.ts +26 -3
- package/src/server/request-context.ts +10 -42
- package/src/ssr/index.tsx +5 -1
- package/src/types/handler-context.ts +12 -39
- 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 +17 -4
- package/src/urls/include-helper.ts +24 -14
- package/src/urls/response-types.ts +2 -10
- package/src/vite/debug.ts +184 -0
- package/src/vite/discovery/discover-routers.ts +31 -3
- package/src/vite/discovery/gate-state.ts +171 -0
- package/src/vite/discovery/prerender-collection.ts +48 -1
- package/src/vite/discovery/self-gen-tracking.ts +27 -1
- package/src/vite/plugins/cjs-to-esm.ts +5 -0
- package/src/vite/plugins/client-ref-dedup.ts +16 -0
- package/src/vite/plugins/client-ref-hashing.ts +16 -4
- 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 +52 -28
- package/src/vite/plugins/expose-ids/router-transform.ts +20 -3
- package/src/vite/plugins/expose-internal-ids.ts +516 -486
- package/src/vite/plugins/performance-tracks.ts +17 -9
- package/src/vite/plugins/use-cache-transform.ts +56 -43
- package/src/vite/plugins/version-injector.ts +37 -11
- package/src/vite/rango.ts +49 -14
- package/src/vite/router-discovery.ts +558 -53
- package/src/vite/utils/banner.ts +1 -1
- package/src/vite/utils/package-resolution.ts +41 -1
- package/src/vite/utils/prerender-utils.ts +5 -4
package/dist/vite/index.js
CHANGED
|
@@ -191,7 +191,99 @@ function escapeRegExp(input) {
|
|
|
191
191
|
return input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
192
192
|
}
|
|
193
193
|
|
|
194
|
+
// src/vite/debug.ts
|
|
195
|
+
import debugFactory from "debug";
|
|
196
|
+
var NS = {
|
|
197
|
+
config: "rango:config",
|
|
198
|
+
discovery: "rango:discovery",
|
|
199
|
+
routes: "rango:routes",
|
|
200
|
+
prerender: "rango:prerender",
|
|
201
|
+
build: "rango:build",
|
|
202
|
+
dev: "rango:dev",
|
|
203
|
+
transform: "rango:transform"
|
|
204
|
+
};
|
|
205
|
+
if (process.env.INTERNAL_RANGO_DEBUG) {
|
|
206
|
+
const existing = debugFactory.disable();
|
|
207
|
+
debugFactory.enable(existing ? `${existing},rango:*` : "rango:*");
|
|
208
|
+
}
|
|
209
|
+
function createRangoDebugger(namespace) {
|
|
210
|
+
const primary = debugFactory(namespace);
|
|
211
|
+
const shadow = debugFactory(`vite:${namespace}`);
|
|
212
|
+
if (primary.enabled) return primary;
|
|
213
|
+
if (shadow.enabled) return shadow;
|
|
214
|
+
return void 0;
|
|
215
|
+
}
|
|
216
|
+
async function timed(debug11, label, fn) {
|
|
217
|
+
if (!debug11) return await fn();
|
|
218
|
+
const start = performance.now();
|
|
219
|
+
try {
|
|
220
|
+
return await fn();
|
|
221
|
+
} finally {
|
|
222
|
+
debug11("%s (%sms)", label, (performance.now() - start).toFixed(1));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function timedSync(debug11, label, fn) {
|
|
226
|
+
if (!debug11) return fn();
|
|
227
|
+
const start = performance.now();
|
|
228
|
+
try {
|
|
229
|
+
return fn();
|
|
230
|
+
} finally {
|
|
231
|
+
debug11("%s (%sms)", label, (performance.now() - start).toFixed(1));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function createCounter(debug11, label) {
|
|
235
|
+
if (!debug11) return void 0;
|
|
236
|
+
let n = 0;
|
|
237
|
+
let totalMs = 0;
|
|
238
|
+
let slowestMs = 0;
|
|
239
|
+
let slowestFile = "";
|
|
240
|
+
const record = (file, ms) => {
|
|
241
|
+
n++;
|
|
242
|
+
totalMs += ms;
|
|
243
|
+
if (ms > slowestMs) {
|
|
244
|
+
slowestMs = ms;
|
|
245
|
+
slowestFile = file;
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
return {
|
|
249
|
+
record,
|
|
250
|
+
time(file, fn) {
|
|
251
|
+
const start = performance.now();
|
|
252
|
+
let out;
|
|
253
|
+
try {
|
|
254
|
+
out = fn();
|
|
255
|
+
} catch (err) {
|
|
256
|
+
record(file, performance.now() - start);
|
|
257
|
+
throw err;
|
|
258
|
+
}
|
|
259
|
+
if (out && typeof out.then === "function") {
|
|
260
|
+
return out.finally(
|
|
261
|
+
() => record(file, performance.now() - start)
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
record(file, performance.now() - start);
|
|
265
|
+
return out;
|
|
266
|
+
},
|
|
267
|
+
flush() {
|
|
268
|
+
if (n === 0) return;
|
|
269
|
+
debug11(
|
|
270
|
+
"%s: %d files, %sms total, slowest %sms %s",
|
|
271
|
+
label,
|
|
272
|
+
n,
|
|
273
|
+
totalMs.toFixed(1),
|
|
274
|
+
slowestMs.toFixed(1),
|
|
275
|
+
slowestFile
|
|
276
|
+
);
|
|
277
|
+
n = 0;
|
|
278
|
+
totalMs = 0;
|
|
279
|
+
slowestMs = 0;
|
|
280
|
+
slowestFile = "";
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
|
|
194
285
|
// src/vite/plugins/expose-action-id.ts
|
|
286
|
+
var debug = createRangoDebugger(NS.transform);
|
|
195
287
|
function getRscPluginApi(config) {
|
|
196
288
|
let plugin = config.plugins.find((p) => p.name === "rsc:minimal");
|
|
197
289
|
if (!plugin) {
|
|
@@ -280,6 +372,8 @@ function exposeActionId() {
|
|
|
280
372
|
let isBuild = false;
|
|
281
373
|
let hashToFileMap;
|
|
282
374
|
let rscPluginApi;
|
|
375
|
+
const counterTransform = createCounter(debug, "expose-action-id transform");
|
|
376
|
+
const counterRender = createCounter(debug, "expose-action-id renderChunk");
|
|
283
377
|
return {
|
|
284
378
|
name: "@rangojs/router:expose-action-id",
|
|
285
379
|
// Run after all other plugins (including RSC plugin's transforms)
|
|
@@ -289,6 +383,10 @@ function exposeActionId() {
|
|
|
289
383
|
isBuild = config.command === "build";
|
|
290
384
|
rscPluginApi = getRscPluginApi(config);
|
|
291
385
|
},
|
|
386
|
+
buildEnd() {
|
|
387
|
+
counterTransform?.flush();
|
|
388
|
+
counterRender?.flush();
|
|
389
|
+
},
|
|
292
390
|
buildStart() {
|
|
293
391
|
if (!rscPluginApi) {
|
|
294
392
|
rscPluginApi = getRscPluginApi(config);
|
|
@@ -325,28 +423,42 @@ function exposeActionId() {
|
|
|
325
423
|
if (id.includes("/node_modules/")) {
|
|
326
424
|
return;
|
|
327
425
|
}
|
|
328
|
-
|
|
426
|
+
const start = counterTransform ? performance.now() : 0;
|
|
427
|
+
try {
|
|
428
|
+
return transformServerReferences(code, id);
|
|
429
|
+
} finally {
|
|
430
|
+
counterTransform?.record(id, performance.now() - start);
|
|
431
|
+
}
|
|
329
432
|
},
|
|
330
433
|
// Build mode: renderChunk runs after all transforms and bundling complete
|
|
331
434
|
renderChunk(code, chunk) {
|
|
332
|
-
const
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
const
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
code
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
435
|
+
const start = counterRender ? performance.now() : 0;
|
|
436
|
+
try {
|
|
437
|
+
const isRscEnv = this.environment?.name === "rsc";
|
|
438
|
+
const effectiveMap = isRscEnv ? hashToFileMap : void 0;
|
|
439
|
+
if (isRscEnv && hashToFileMap) {
|
|
440
|
+
const s = new MagicString(code);
|
|
441
|
+
const changed1 = applyServerReferenceWrapping(code, s, effectiveMap);
|
|
442
|
+
const changed2 = applyRegisterReferenceWrapping(
|
|
443
|
+
code,
|
|
444
|
+
s,
|
|
445
|
+
hashToFileMap
|
|
446
|
+
);
|
|
447
|
+
if (changed1 || changed2) {
|
|
448
|
+
return {
|
|
449
|
+
code: s.toString(),
|
|
450
|
+
map: s.generateMap({
|
|
451
|
+
source: chunk.fileName,
|
|
452
|
+
includeContent: true
|
|
453
|
+
})
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
return null;
|
|
346
457
|
}
|
|
347
|
-
return
|
|
458
|
+
return transformServerReferences(code, chunk.fileName, effectiveMap);
|
|
459
|
+
} finally {
|
|
460
|
+
counterRender?.record(chunk.fileName, performance.now() - start);
|
|
348
461
|
}
|
|
349
|
-
return transformServerReferences(code, chunk.fileName, effectiveMap);
|
|
350
462
|
}
|
|
351
463
|
};
|
|
352
464
|
}
|
|
@@ -953,6 +1065,7 @@ ${binding.localName}.$$id = "${handlerId}";`;
|
|
|
953
1065
|
import MagicString3 from "magic-string";
|
|
954
1066
|
import path3 from "node:path";
|
|
955
1067
|
import { createHash } from "node:crypto";
|
|
1068
|
+
var debug2 = createRangoDebugger(NS.transform);
|
|
956
1069
|
function transformRouter(code, filePath, routerFnNames, absolutePath) {
|
|
957
1070
|
const pat = new RegExp(
|
|
958
1071
|
`\\b(?:${routerFnNames.map((n) => n.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|")})\\s*(?:<[^>]*>)?\\s*\\(`,
|
|
@@ -995,11 +1108,15 @@ function transformRouter(code, filePath, routerFnNames, absolutePath) {
|
|
|
995
1108
|
}
|
|
996
1109
|
function exposeRouterId() {
|
|
997
1110
|
let projectRoot = "";
|
|
1111
|
+
const counter = createCounter(debug2, "expose-router-id");
|
|
998
1112
|
return {
|
|
999
1113
|
name: "@rangojs/router:expose-router-id",
|
|
1000
1114
|
configResolved(config) {
|
|
1001
1115
|
projectRoot = config.root;
|
|
1002
1116
|
},
|
|
1117
|
+
buildEnd() {
|
|
1118
|
+
counter?.flush();
|
|
1119
|
+
},
|
|
1003
1120
|
transform(code, id) {
|
|
1004
1121
|
if (!code.includes("createRouter")) return null;
|
|
1005
1122
|
if (!/import\s*\{[^}]*\bcreateRouter\b[^}]*\}\s*from\s*["']@rangojs\/router(?:\/server)?["']/.test(
|
|
@@ -1008,14 +1125,25 @@ function exposeRouterId() {
|
|
|
1008
1125
|
return null;
|
|
1009
1126
|
}
|
|
1010
1127
|
if (id.includes("node_modules")) return null;
|
|
1011
|
-
const
|
|
1012
|
-
|
|
1013
|
-
|
|
1128
|
+
const start = counter ? performance.now() : 0;
|
|
1129
|
+
try {
|
|
1130
|
+
const filePath = normalizePath(path3.relative(projectRoot, id));
|
|
1131
|
+
const routerFnNames = getImportedFnNames(code, "createRouter");
|
|
1132
|
+
return transformRouter(
|
|
1133
|
+
code,
|
|
1134
|
+
filePath,
|
|
1135
|
+
routerFnNames,
|
|
1136
|
+
normalizePath(id)
|
|
1137
|
+
);
|
|
1138
|
+
} finally {
|
|
1139
|
+
counter?.record(id, performance.now() - start);
|
|
1140
|
+
}
|
|
1014
1141
|
}
|
|
1015
1142
|
};
|
|
1016
1143
|
}
|
|
1017
1144
|
|
|
1018
1145
|
// src/vite/plugins/expose-internal-ids.ts
|
|
1146
|
+
var debug3 = createRangoDebugger(NS.transform);
|
|
1019
1147
|
var VIRTUAL_LOADER_MANIFEST = "virtual:rsc-router/loader-manifest";
|
|
1020
1148
|
var RESOLVED_VIRTUAL_LOADER_MANIFEST = "\0" + VIRTUAL_LOADER_MANIFEST;
|
|
1021
1149
|
var VIRTUAL_HANDLER_PREFIX = "virtual:handler-extract:";
|
|
@@ -1028,9 +1156,13 @@ function exposeInternalIds(options) {
|
|
|
1028
1156
|
const staticHandlerModules = /* @__PURE__ */ new Map();
|
|
1029
1157
|
const virtualHandlers = /* @__PURE__ */ new Map();
|
|
1030
1158
|
const unsupportedShapeWarnings = /* @__PURE__ */ new Set();
|
|
1159
|
+
const counter = createCounter(debug3, "expose-internal-ids");
|
|
1031
1160
|
return {
|
|
1032
1161
|
name: "@rangojs/router:expose-internal-ids",
|
|
1033
1162
|
enforce: "post",
|
|
1163
|
+
buildEnd() {
|
|
1164
|
+
counter?.flush();
|
|
1165
|
+
},
|
|
1034
1166
|
api: {
|
|
1035
1167
|
prerenderHandlerModules,
|
|
1036
1168
|
staticHandlerModules
|
|
@@ -1144,11 +1276,13 @@ ${lazyImports.join(",\n")}
|
|
|
1144
1276
|
// --------------- Unified transform ---------------
|
|
1145
1277
|
transform(code, id) {
|
|
1146
1278
|
if (id.includes("/node_modules/")) return;
|
|
1147
|
-
const
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
this.
|
|
1151
|
-
|
|
1279
|
+
const __t0 = counter ? performance.now() : 0;
|
|
1280
|
+
try {
|
|
1281
|
+
const filePath = normalizePath(path4.relative(projectRoot, id));
|
|
1282
|
+
const isRscEnv = this.environment?.name === "rsc";
|
|
1283
|
+
if (id.includes(".named-routes.gen.") && !isRscEnv && this.environment?.name === "client") {
|
|
1284
|
+
this.warn(
|
|
1285
|
+
`
|
|
1152
1286
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
1153
1287
|
!! !!
|
|
1154
1288
|
!! WARNING: NamedRoutes imported in a CLIENT component! !!
|
|
@@ -1168,354 +1302,373 @@ ${lazyImports.join(",\n")}
|
|
|
1168
1302
|
!! !!
|
|
1169
1303
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
1170
1304
|
`
|
|
1171
|
-
|
|
1172
|
-
}
|
|
1173
|
-
if (!code.includes("@rangojs/router")) return;
|
|
1174
|
-
const has = detectImports(code);
|
|
1175
|
-
const hasLoaderCode = has.loader && code.includes("createLoader");
|
|
1176
|
-
const hasHandleCode = has.handle && code.includes("createHandle");
|
|
1177
|
-
const hasLocationStateCode = has.locationState && code.includes("createLocationState");
|
|
1178
|
-
const hasPrerenderHandlerCode = has.prerenderHandler && code.includes("Prerender");
|
|
1179
|
-
const hasStaticHandlerCode = has.staticHandler && code.includes("Static");
|
|
1180
|
-
if (!hasLoaderCode && !hasHandleCode && !hasLocationStateCode && !hasPrerenderHandlerCode && !hasStaticHandlerCode) {
|
|
1181
|
-
return;
|
|
1182
|
-
}
|
|
1183
|
-
const _fnNamesCache = /* @__PURE__ */ new Map();
|
|
1184
|
-
const _bindingsCache = /* @__PURE__ */ new Map();
|
|
1185
|
-
let _cachedAst;
|
|
1186
|
-
let _astParseFailed = false;
|
|
1187
|
-
let _astCodeRef = code;
|
|
1188
|
-
const getFnNames = (canonicalName) => {
|
|
1189
|
-
let result = _fnNamesCache.get(canonicalName);
|
|
1190
|
-
if (!result) {
|
|
1191
|
-
result = getImportedFnNames(code, canonicalName);
|
|
1192
|
-
_fnNamesCache.set(canonicalName, result);
|
|
1305
|
+
);
|
|
1193
1306
|
}
|
|
1194
|
-
return
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1307
|
+
if (!code.includes("@rangojs/router")) return;
|
|
1308
|
+
const has = detectImports(code);
|
|
1309
|
+
const hasLoaderCode = has.loader && code.includes("createLoader");
|
|
1310
|
+
const hasHandleCode = has.handle && code.includes("createHandle");
|
|
1311
|
+
const hasLocationStateCode = has.locationState && code.includes("createLocationState");
|
|
1312
|
+
const hasPrerenderHandlerCode = has.prerenderHandler && code.includes("Prerender");
|
|
1313
|
+
const hasStaticHandlerCode = has.staticHandler && code.includes("Static");
|
|
1314
|
+
if (!hasLoaderCode && !hasHandleCode && !hasLocationStateCode && !hasPrerenderHandlerCode && !hasStaticHandlerCode) {
|
|
1315
|
+
return;
|
|
1201
1316
|
}
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1317
|
+
const _fnNamesCache = /* @__PURE__ */ new Map();
|
|
1318
|
+
const _bindingsCache = /* @__PURE__ */ new Map();
|
|
1319
|
+
let _cachedAst;
|
|
1320
|
+
let _astParseFailed = false;
|
|
1321
|
+
let _astCodeRef = code;
|
|
1322
|
+
const getFnNames = (canonicalName) => {
|
|
1323
|
+
let result = _fnNamesCache.get(canonicalName);
|
|
1324
|
+
if (!result) {
|
|
1325
|
+
result = getImportedFnNames(code, canonicalName);
|
|
1326
|
+
_fnNamesCache.set(canonicalName, result);
|
|
1327
|
+
}
|
|
1328
|
+
return result;
|
|
1329
|
+
};
|
|
1330
|
+
const lazyAst = () => {
|
|
1331
|
+
if (code !== _astCodeRef) {
|
|
1332
|
+
_cachedAst = void 0;
|
|
1333
|
+
_astParseFailed = false;
|
|
1334
|
+
_astCodeRef = code;
|
|
1335
|
+
}
|
|
1336
|
+
if (_cachedAst !== void 0 || _astParseFailed) return _cachedAst;
|
|
1337
|
+
try {
|
|
1338
|
+
_cachedAst = parseAst2(code, { jsx: true });
|
|
1339
|
+
} catch {
|
|
1340
|
+
_astParseFailed = true;
|
|
1341
|
+
}
|
|
1342
|
+
return _cachedAst;
|
|
1343
|
+
};
|
|
1344
|
+
const getBindings = (currentCode, fnNames) => {
|
|
1345
|
+
const key = fnNames.join("\0");
|
|
1346
|
+
let result = _bindingsCache.get(key);
|
|
1347
|
+
if (!result) {
|
|
1348
|
+
result = collectCreateExportBindings(
|
|
1349
|
+
currentCode,
|
|
1350
|
+
fnNames,
|
|
1351
|
+
lazyAst()
|
|
1352
|
+
);
|
|
1353
|
+
_bindingsCache.set(key, result);
|
|
1354
|
+
}
|
|
1355
|
+
return result;
|
|
1356
|
+
};
|
|
1357
|
+
for (const cfg of STRICT_CREATE_CONFIGS) {
|
|
1358
|
+
const hasCode = cfg.fnName === "createLoader" ? hasLoaderCode : cfg.fnName === "createHandle" ? hasHandleCode : hasLocationStateCode;
|
|
1359
|
+
if (!hasCode) continue;
|
|
1360
|
+
const fnNames = getFnNames(cfg.fnName);
|
|
1361
|
+
const totalCalls = countCreateCallsForNames(code, fnNames);
|
|
1362
|
+
const supportedBindings = getBindings(code, fnNames).length;
|
|
1363
|
+
if (totalCalls <= supportedBindings) continue;
|
|
1364
|
+
const warnKey = `${id}::${cfg.fnName}`;
|
|
1365
|
+
if (unsupportedShapeWarnings.has(warnKey)) continue;
|
|
1366
|
+
unsupportedShapeWarnings.add(warnKey);
|
|
1367
|
+
this.warn(buildUnsupportedShapeWarning(filePath, cfg.fnName));
|
|
1207
1368
|
}
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1369
|
+
if (hasLoaderCode && isRscEnv) {
|
|
1370
|
+
const fnNames = getFnNames("createLoader");
|
|
1371
|
+
const bindings = getBindings(code, fnNames);
|
|
1372
|
+
for (const binding of bindings) {
|
|
1373
|
+
const exportName = binding.exportNames[0];
|
|
1374
|
+
const hashedId = hashId(filePath, exportName);
|
|
1375
|
+
loaderRegistry.set(hashedId, {
|
|
1376
|
+
filePath,
|
|
1377
|
+
exportName
|
|
1378
|
+
});
|
|
1379
|
+
}
|
|
1216
1380
|
}
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
const totalCalls = countCreateCallsForNames(code, fnNames);
|
|
1224
|
-
const supportedBindings = getBindings(code, fnNames).length;
|
|
1225
|
-
if (totalCalls <= supportedBindings) continue;
|
|
1226
|
-
const warnKey = `${id}::${cfg.fnName}`;
|
|
1227
|
-
if (unsupportedShapeWarnings.has(warnKey)) continue;
|
|
1228
|
-
unsupportedShapeWarnings.add(warnKey);
|
|
1229
|
-
this.warn(buildUnsupportedShapeWarning(filePath, cfg.fnName));
|
|
1230
|
-
}
|
|
1231
|
-
if (hasLoaderCode && isRscEnv) {
|
|
1232
|
-
const fnNames = getFnNames("createLoader");
|
|
1233
|
-
const bindings = getBindings(code, fnNames);
|
|
1234
|
-
for (const binding of bindings) {
|
|
1235
|
-
const exportName = binding.exportNames[0];
|
|
1236
|
-
const hashedId = hashId(filePath, exportName);
|
|
1237
|
-
loaderRegistry.set(hashedId, {
|
|
1381
|
+
if (hasLoaderCode && !isRscEnv) {
|
|
1382
|
+
const fnNames = getFnNames("createLoader");
|
|
1383
|
+
const bindings = getBindings(code, fnNames);
|
|
1384
|
+
const stubResult = generateClientLoaderStubs(
|
|
1385
|
+
bindings,
|
|
1386
|
+
code,
|
|
1238
1387
|
filePath,
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
}
|
|
1243
|
-
if (hasLoaderCode && !isRscEnv) {
|
|
1244
|
-
const fnNames = getFnNames("createLoader");
|
|
1245
|
-
const bindings = getBindings(code, fnNames);
|
|
1246
|
-
const stubResult = generateClientLoaderStubs(
|
|
1247
|
-
bindings,
|
|
1248
|
-
code,
|
|
1249
|
-
filePath,
|
|
1250
|
-
isBuild
|
|
1251
|
-
);
|
|
1252
|
-
if (stubResult) return stubResult;
|
|
1253
|
-
}
|
|
1254
|
-
if (hasPrerenderHandlerCode && !isRscEnv) {
|
|
1255
|
-
const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
|
|
1256
|
-
const bindings = getBindings(code, fnNames);
|
|
1257
|
-
const wholeFile = generateWholeFileStubs(
|
|
1258
|
-
PRERENDER_CONFIG,
|
|
1259
|
-
bindings,
|
|
1260
|
-
code,
|
|
1261
|
-
filePath,
|
|
1262
|
-
isBuild
|
|
1263
|
-
);
|
|
1264
|
-
if (wholeFile) return wholeFile;
|
|
1265
|
-
}
|
|
1266
|
-
if (hasPrerenderHandlerCode && isRscEnv && isBuild) {
|
|
1267
|
-
const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
|
|
1268
|
-
const exportNames = getBindings(code, fnNames).map(
|
|
1269
|
-
(b) => b.exportNames[0]
|
|
1270
|
-
);
|
|
1271
|
-
if (exportNames.length > 0) {
|
|
1272
|
-
prerenderHandlerModules.set(id, exportNames);
|
|
1388
|
+
isBuild
|
|
1389
|
+
);
|
|
1390
|
+
if (stubResult) return stubResult;
|
|
1273
1391
|
}
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
const fnNames = getFnNames(cfg.fnName);
|
|
1281
|
-
return { cfg, fnNames };
|
|
1282
|
-
});
|
|
1283
|
-
for (const { cfg, fnNames } of handlerConfigs) {
|
|
1284
|
-
const totalCalls = countCreateCallsForNames(code, fnNames);
|
|
1285
|
-
const supportedBindings = getBindings(code, fnNames).length;
|
|
1286
|
-
if (totalCalls > supportedBindings) {
|
|
1287
|
-
const iterS = new MagicString4(code);
|
|
1288
|
-
const result = transformInlineHandlers(
|
|
1289
|
-
cfg.fnName,
|
|
1290
|
-
VIRTUAL_HANDLER_PREFIX,
|
|
1291
|
-
iterS,
|
|
1392
|
+
if (hasPrerenderHandlerCode && !isRscEnv) {
|
|
1393
|
+
const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
|
|
1394
|
+
const bindings = getBindings(code, fnNames);
|
|
1395
|
+
const wholeFile = generateWholeFileStubs(
|
|
1396
|
+
PRERENDER_CONFIG,
|
|
1397
|
+
bindings,
|
|
1292
1398
|
code,
|
|
1293
1399
|
filePath,
|
|
1294
|
-
|
|
1295
|
-
id,
|
|
1296
|
-
parseAst2
|
|
1400
|
+
isBuild
|
|
1297
1401
|
);
|
|
1298
|
-
if (
|
|
1299
|
-
changed = true;
|
|
1300
|
-
code = iterS.toString();
|
|
1301
|
-
_bindingsCache.clear();
|
|
1302
|
-
}
|
|
1402
|
+
if (wholeFile) return wholeFile;
|
|
1303
1403
|
}
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
code,
|
|
1312
|
-
filePath,
|
|
1313
|
-
isBuild
|
|
1314
|
-
);
|
|
1315
|
-
if (wholeFile) return wholeFile;
|
|
1316
|
-
}
|
|
1317
|
-
if (!isRscEnv && (hasPrerenderHandlerCode || hasStaticHandlerCode)) {
|
|
1318
|
-
const prerenderFnNames = hasPrerenderHandlerCode ? getFnNames(PRERENDER_CONFIG.fnName) : [];
|
|
1319
|
-
const staticFnNames = hasStaticHandlerCode ? getFnNames(STATIC_CONFIG.fnName) : [];
|
|
1320
|
-
const loaderFnNames = hasLoaderCode ? getFnNames("createLoader") : [];
|
|
1321
|
-
const handleFnNames = hasHandleCode ? getFnNames("createHandle") : [];
|
|
1322
|
-
const lsFnNames = hasLocationStateCode ? getFnNames("createLocationState") : [];
|
|
1323
|
-
const allBindings = [];
|
|
1324
|
-
for (const fnNames of [
|
|
1325
|
-
prerenderFnNames,
|
|
1326
|
-
staticFnNames,
|
|
1327
|
-
loaderFnNames,
|
|
1328
|
-
handleFnNames,
|
|
1329
|
-
lsFnNames
|
|
1330
|
-
]) {
|
|
1331
|
-
if (fnNames.length > 0) {
|
|
1332
|
-
allBindings.push(...getBindings(code, fnNames));
|
|
1404
|
+
if (hasPrerenderHandlerCode && isRscEnv && isBuild) {
|
|
1405
|
+
const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
|
|
1406
|
+
const exportNames = getBindings(code, fnNames).map(
|
|
1407
|
+
(b) => b.exportNames[0]
|
|
1408
|
+
);
|
|
1409
|
+
if (exportNames.length > 0) {
|
|
1410
|
+
prerenderHandlerModules.set(id, exportNames);
|
|
1333
1411
|
}
|
|
1334
1412
|
}
|
|
1335
|
-
let
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1413
|
+
let changed = false;
|
|
1414
|
+
const handlerConfigs = [
|
|
1415
|
+
hasStaticHandlerCode && STATIC_CONFIG,
|
|
1416
|
+
hasPrerenderHandlerCode && PRERENDER_CONFIG
|
|
1417
|
+
].filter((c) => !!c).map((cfg) => {
|
|
1418
|
+
const fnNames = getFnNames(cfg.fnName);
|
|
1419
|
+
return { cfg, fnNames };
|
|
1420
|
+
});
|
|
1421
|
+
for (const { cfg, fnNames } of handlerConfigs) {
|
|
1422
|
+
const totalCalls = countCreateCallsForNames(code, fnNames);
|
|
1423
|
+
const supportedBindings = getBindings(code, fnNames).length;
|
|
1424
|
+
if (totalCalls > supportedBindings) {
|
|
1425
|
+
const iterS = new MagicString4(code);
|
|
1426
|
+
const result = transformInlineHandlers(
|
|
1427
|
+
cfg.fnName,
|
|
1428
|
+
VIRTUAL_HANDLER_PREFIX,
|
|
1429
|
+
iterS,
|
|
1430
|
+
code,
|
|
1431
|
+
filePath,
|
|
1432
|
+
virtualHandlers,
|
|
1433
|
+
id,
|
|
1434
|
+
parseAst2
|
|
1435
|
+
);
|
|
1436
|
+
if (result) {
|
|
1437
|
+
changed = true;
|
|
1438
|
+
code = iterS.toString();
|
|
1439
|
+
_bindingsCache.clear();
|
|
1345
1440
|
}
|
|
1346
1441
|
}
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1442
|
+
}
|
|
1443
|
+
if (hasStaticHandlerCode && !isRscEnv) {
|
|
1444
|
+
const fnNames = getFnNames(STATIC_CONFIG.fnName);
|
|
1445
|
+
const bindings = getBindings(code, fnNames);
|
|
1446
|
+
const wholeFile = generateWholeFileStubs(
|
|
1447
|
+
STATIC_CONFIG,
|
|
1448
|
+
bindings,
|
|
1449
|
+
code,
|
|
1450
|
+
filePath,
|
|
1451
|
+
isBuild
|
|
1452
|
+
);
|
|
1453
|
+
if (wholeFile) return wholeFile;
|
|
1454
|
+
}
|
|
1455
|
+
if (!isRscEnv && (hasPrerenderHandlerCode || hasStaticHandlerCode)) {
|
|
1456
|
+
const prerenderFnNames = hasPrerenderHandlerCode ? getFnNames(PRERENDER_CONFIG.fnName) : [];
|
|
1457
|
+
const staticFnNames = hasStaticHandlerCode ? getFnNames(STATIC_CONFIG.fnName) : [];
|
|
1458
|
+
const loaderFnNames = hasLoaderCode ? getFnNames("createLoader") : [];
|
|
1459
|
+
const handleFnNames = hasHandleCode ? getFnNames("createHandle") : [];
|
|
1460
|
+
const lsFnNames = hasLocationStateCode ? getFnNames("createLocationState") : [];
|
|
1461
|
+
const allBindings = [];
|
|
1462
|
+
for (const fnNames of [
|
|
1463
|
+
prerenderFnNames,
|
|
1464
|
+
staticFnNames,
|
|
1465
|
+
loaderFnNames,
|
|
1466
|
+
handleFnNames,
|
|
1467
|
+
lsFnNames
|
|
1468
|
+
]) {
|
|
1469
|
+
if (fnNames.length > 0) {
|
|
1470
|
+
allBindings.push(...getBindings(code, fnNames));
|
|
1353
1471
|
}
|
|
1354
1472
|
}
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
});
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1473
|
+
let canStubWholeFile = allBindings.length > 0 && isExportOnlyFile(code, allBindings);
|
|
1474
|
+
if (canStubWholeFile && (handleFnNames.length > 0 || lsFnNames.length > 0)) {
|
|
1475
|
+
const exportedLocals = new Set(allBindings.map((b) => b.localName));
|
|
1476
|
+
const strippedBindings = [];
|
|
1477
|
+
const localDeclPattern = /(?:^|;|\n)\s*(?:const|let|var|function)\s+(\w+)/g;
|
|
1478
|
+
let declMatch;
|
|
1479
|
+
while ((declMatch = localDeclPattern.exec(code)) !== null) {
|
|
1480
|
+
const name = declMatch[1];
|
|
1481
|
+
if (!exportedLocals.has(name) && !/^_c\d*$/.test(name)) {
|
|
1482
|
+
strippedBindings.push(name);
|
|
1483
|
+
}
|
|
1484
|
+
}
|
|
1485
|
+
const importPattern = /import\s*\{([^}]*)\}\s*from\s*["'](?!@rangojs\/router)[^"']*["']/g;
|
|
1486
|
+
let importMatch;
|
|
1487
|
+
while ((importMatch = importPattern.exec(code)) !== null) {
|
|
1488
|
+
for (const spec of importMatch[1].split(",")) {
|
|
1489
|
+
const m = spec.trim().match(/^[A-Za-z_$][\w$]*(?:\s+as\s+([A-Za-z_$][\w$]*))?$/);
|
|
1490
|
+
if (m)
|
|
1491
|
+
strippedBindings.push(m[1] || m[0].trim().split(/\s/)[0]);
|
|
1492
|
+
}
|
|
1493
|
+
}
|
|
1494
|
+
const defaultImportPattern = /import\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
|
|
1495
|
+
while ((importMatch = defaultImportPattern.exec(code)) !== null) {
|
|
1496
|
+
strippedBindings.push(importMatch[1]);
|
|
1497
|
+
}
|
|
1498
|
+
const nsImportPattern = /import\s+\*\s+as\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
|
|
1499
|
+
while ((importMatch = nsImportPattern.exec(code)) !== null) {
|
|
1500
|
+
strippedBindings.push(importMatch[1]);
|
|
1501
|
+
}
|
|
1502
|
+
if (strippedBindings.length > 0) {
|
|
1503
|
+
const preservedBindings = allBindings.filter((b) => {
|
|
1504
|
+
const fc = code.slice(b.callExprStart, b.callOpenParenPos + 1);
|
|
1505
|
+
return handleFnNames.some((n) => fc.includes(n)) || lsFnNames.some((n) => fc.includes(n));
|
|
1506
|
+
});
|
|
1507
|
+
const strippedRe = new RegExp(
|
|
1508
|
+
`\\b(?:${strippedBindings.join("|")})\\b`
|
|
1509
|
+
);
|
|
1510
|
+
canStubWholeFile = !preservedBindings.some((b) => {
|
|
1511
|
+
const expr = code.slice(
|
|
1512
|
+
b.callExprStart,
|
|
1513
|
+
b.callCloseParenPos + 1
|
|
1514
|
+
);
|
|
1515
|
+
return strippedRe.test(expr);
|
|
1516
|
+
});
|
|
1517
|
+
}
|
|
1386
1518
|
}
|
|
1387
|
-
|
|
1388
|
-
const
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
);
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
const
|
|
1399
|
-
const activeFnNames = isHandle ? handleFnNames : lsFnNames;
|
|
1400
|
-
let rawCallee = code.slice(
|
|
1519
|
+
if (canStubWholeFile) {
|
|
1520
|
+
const lines = [];
|
|
1521
|
+
const neededImports = [];
|
|
1522
|
+
if (handleFnNames.length > 0) neededImports.push("createHandle");
|
|
1523
|
+
if (lsFnNames.length > 0) neededImports.push("createLocationState");
|
|
1524
|
+
if (neededImports.length > 0) {
|
|
1525
|
+
lines.push(
|
|
1526
|
+
`import { ${neededImports.join(", ")} } from "@rangojs/router";`
|
|
1527
|
+
);
|
|
1528
|
+
}
|
|
1529
|
+
for (const binding of allBindings) {
|
|
1530
|
+
const fnCall = code.slice(
|
|
1401
1531
|
binding.callExprStart,
|
|
1402
|
-
binding.callOpenParenPos
|
|
1532
|
+
binding.callOpenParenPos + 1
|
|
1403
1533
|
);
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1534
|
+
const isHandle = handleFnNames.some((n) => fnCall.includes(n));
|
|
1535
|
+
const isLocationState = lsFnNames.some((n) => fnCall.includes(n));
|
|
1536
|
+
const primaryName = binding.exportNames[0];
|
|
1537
|
+
const stubId = makeStubId(filePath, primaryName, isBuild);
|
|
1538
|
+
if (isHandle || isLocationState) {
|
|
1539
|
+
const rawArgs = code.slice(
|
|
1540
|
+
binding.callOpenParenPos + 1,
|
|
1541
|
+
binding.callCloseParenPos
|
|
1542
|
+
).replace(/\b_c\d*\s*=\s*/g, "");
|
|
1543
|
+
const canonicalName = isHandle ? "createHandle" : "createLocationState";
|
|
1544
|
+
const activeFnNames = isHandle ? handleFnNames : lsFnNames;
|
|
1545
|
+
let rawCallee = code.slice(
|
|
1546
|
+
binding.callExprStart,
|
|
1547
|
+
binding.callOpenParenPos
|
|
1414
1548
|
);
|
|
1415
|
-
|
|
1549
|
+
for (const alias of activeFnNames) {
|
|
1550
|
+
if (alias !== canonicalName && rawCallee.startsWith(alias)) {
|
|
1551
|
+
rawCallee = canonicalName + rawCallee.slice(alias.length);
|
|
1552
|
+
break;
|
|
1553
|
+
}
|
|
1554
|
+
}
|
|
1555
|
+
if (isHandle) {
|
|
1556
|
+
const idParam = binding.argCount === 0 ? `undefined, "${stubId}"` : `, "${stubId}"`;
|
|
1557
|
+
lines.push(
|
|
1558
|
+
`export const ${primaryName} = ${rawCallee}(${rawArgs}${idParam});`
|
|
1559
|
+
);
|
|
1560
|
+
lines.push(`${primaryName}.$$id = "${stubId}";`);
|
|
1561
|
+
} else {
|
|
1562
|
+
lines.push(
|
|
1563
|
+
`export const ${primaryName} = ${rawCallee}(${rawArgs});`
|
|
1564
|
+
);
|
|
1565
|
+
lines.push(
|
|
1566
|
+
`${primaryName}.__rsc_ls_key = "__rsc_ls_${stubId}";`
|
|
1567
|
+
);
|
|
1568
|
+
}
|
|
1569
|
+
for (const name of binding.exportNames.slice(1)) {
|
|
1570
|
+
lines.push(`export const ${name} = ${primaryName};`);
|
|
1571
|
+
}
|
|
1416
1572
|
} else {
|
|
1573
|
+
let brand = "loader";
|
|
1574
|
+
if (prerenderFnNames.some((n) => fnCall.includes(n))) {
|
|
1575
|
+
brand = PRERENDER_CONFIG.brand;
|
|
1576
|
+
} else if (staticFnNames.some((n) => fnCall.includes(n))) {
|
|
1577
|
+
brand = STATIC_CONFIG.brand;
|
|
1578
|
+
}
|
|
1417
1579
|
lines.push(
|
|
1418
|
-
`export const ${primaryName} = ${
|
|
1419
|
-
);
|
|
1420
|
-
lines.push(
|
|
1421
|
-
`${primaryName}.__rsc_ls_key = "__rsc_ls_${stubId}";`
|
|
1580
|
+
`export const ${primaryName} = { __brand: "${brand}", $$id: "${stubId}" };`
|
|
1422
1581
|
);
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
}
|
|
1427
|
-
} else {
|
|
1428
|
-
let brand = "loader";
|
|
1429
|
-
if (prerenderFnNames.some((n) => fnCall.includes(n))) {
|
|
1430
|
-
brand = PRERENDER_CONFIG.brand;
|
|
1431
|
-
} else if (staticFnNames.some((n) => fnCall.includes(n))) {
|
|
1432
|
-
brand = STATIC_CONFIG.brand;
|
|
1433
|
-
}
|
|
1434
|
-
lines.push(
|
|
1435
|
-
`export const ${primaryName} = { __brand: "${brand}", $$id: "${stubId}" };`
|
|
1436
|
-
);
|
|
1437
|
-
for (const name of binding.exportNames.slice(1)) {
|
|
1438
|
-
lines.push(`export const ${name} = ${primaryName};`);
|
|
1582
|
+
for (const name of binding.exportNames.slice(1)) {
|
|
1583
|
+
lines.push(`export const ${name} = ${primaryName};`);
|
|
1584
|
+
}
|
|
1439
1585
|
}
|
|
1440
1586
|
}
|
|
1587
|
+
return { code: lines.join("\n") + "\n", map: null };
|
|
1441
1588
|
}
|
|
1442
|
-
return { code: lines.join("\n") + "\n", map: null };
|
|
1443
1589
|
}
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1590
|
+
if (hasStaticHandlerCode && isRscEnv && isBuild) {
|
|
1591
|
+
const fnNames = getFnNames(STATIC_CONFIG.fnName);
|
|
1592
|
+
const exportNames = getBindings(code, fnNames).map(
|
|
1593
|
+
(b) => b.exportNames[0]
|
|
1594
|
+
);
|
|
1595
|
+
if (exportNames.length > 0) {
|
|
1596
|
+
staticHandlerModules.set(id, exportNames);
|
|
1597
|
+
}
|
|
1452
1598
|
}
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
}
|
|
1459
|
-
if (hasHandleCode) {
|
|
1460
|
-
const fnNames = getFnNames("createHandle");
|
|
1461
|
-
changed = transformHandles(
|
|
1462
|
-
getBindings(code, fnNames),
|
|
1463
|
-
s,
|
|
1464
|
-
code,
|
|
1465
|
-
filePath,
|
|
1466
|
-
isBuild
|
|
1467
|
-
) || changed;
|
|
1468
|
-
}
|
|
1469
|
-
if (hasLocationStateCode) {
|
|
1470
|
-
const fnNames = getFnNames("createLocationState");
|
|
1471
|
-
changed = transformLocationState(
|
|
1472
|
-
getBindings(code, fnNames),
|
|
1473
|
-
s,
|
|
1474
|
-
filePath,
|
|
1475
|
-
isBuild
|
|
1476
|
-
) || changed;
|
|
1477
|
-
}
|
|
1478
|
-
if (hasPrerenderHandlerCode) {
|
|
1479
|
-
const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
|
|
1480
|
-
const bindings = getBindings(code, fnNames);
|
|
1481
|
-
if (isRscEnv) {
|
|
1482
|
-
changed = transformHandlerIds(
|
|
1483
|
-
PRERENDER_CONFIG,
|
|
1484
|
-
bindings,
|
|
1599
|
+
const s = new MagicString4(code);
|
|
1600
|
+
if (hasLoaderCode) {
|
|
1601
|
+
const fnNames = getFnNames("createLoader");
|
|
1602
|
+
changed = transformLoaders(
|
|
1603
|
+
getBindings(code, fnNames),
|
|
1485
1604
|
s,
|
|
1486
1605
|
filePath,
|
|
1487
1606
|
isBuild
|
|
1488
1607
|
) || changed;
|
|
1489
|
-
}
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1608
|
+
}
|
|
1609
|
+
if (hasHandleCode) {
|
|
1610
|
+
const fnNames = getFnNames("createHandle");
|
|
1611
|
+
changed = transformHandles(
|
|
1612
|
+
getBindings(code, fnNames),
|
|
1493
1613
|
s,
|
|
1614
|
+
code,
|
|
1494
1615
|
filePath,
|
|
1495
1616
|
isBuild
|
|
1496
1617
|
) || changed;
|
|
1497
1618
|
}
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
if (isRscEnv) {
|
|
1503
|
-
changed = transformHandlerIds(
|
|
1504
|
-
STATIC_CONFIG,
|
|
1505
|
-
bindings,
|
|
1619
|
+
if (hasLocationStateCode) {
|
|
1620
|
+
const fnNames = getFnNames("createLocationState");
|
|
1621
|
+
changed = transformLocationState(
|
|
1622
|
+
getBindings(code, fnNames),
|
|
1506
1623
|
s,
|
|
1507
1624
|
filePath,
|
|
1508
1625
|
isBuild
|
|
1509
1626
|
) || changed;
|
|
1510
|
-
} else {
|
|
1511
|
-
changed = stubHandlerExprs(STATIC_CONFIG, bindings, s, filePath, isBuild) || changed;
|
|
1512
1627
|
}
|
|
1628
|
+
if (hasPrerenderHandlerCode) {
|
|
1629
|
+
const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
|
|
1630
|
+
const bindings = getBindings(code, fnNames);
|
|
1631
|
+
if (isRscEnv) {
|
|
1632
|
+
changed = transformHandlerIds(
|
|
1633
|
+
PRERENDER_CONFIG,
|
|
1634
|
+
bindings,
|
|
1635
|
+
s,
|
|
1636
|
+
filePath,
|
|
1637
|
+
isBuild
|
|
1638
|
+
) || changed;
|
|
1639
|
+
} else {
|
|
1640
|
+
changed = stubHandlerExprs(
|
|
1641
|
+
PRERENDER_CONFIG,
|
|
1642
|
+
bindings,
|
|
1643
|
+
s,
|
|
1644
|
+
filePath,
|
|
1645
|
+
isBuild
|
|
1646
|
+
) || changed;
|
|
1647
|
+
}
|
|
1648
|
+
}
|
|
1649
|
+
if (hasStaticHandlerCode) {
|
|
1650
|
+
const fnNames = getFnNames(STATIC_CONFIG.fnName);
|
|
1651
|
+
const bindings = getBindings(code, fnNames);
|
|
1652
|
+
if (isRscEnv) {
|
|
1653
|
+
changed = transformHandlerIds(
|
|
1654
|
+
STATIC_CONFIG,
|
|
1655
|
+
bindings,
|
|
1656
|
+
s,
|
|
1657
|
+
filePath,
|
|
1658
|
+
isBuild
|
|
1659
|
+
) || changed;
|
|
1660
|
+
} else {
|
|
1661
|
+
changed = stubHandlerExprs(STATIC_CONFIG, bindings, s, filePath, isBuild) || changed;
|
|
1662
|
+
}
|
|
1663
|
+
}
|
|
1664
|
+
if (!changed) return;
|
|
1665
|
+
return {
|
|
1666
|
+
code: s.toString(),
|
|
1667
|
+
map: s.generateMap({ source: id, includeContent: true })
|
|
1668
|
+
};
|
|
1669
|
+
} finally {
|
|
1670
|
+
counter?.record(id, performance.now() - __t0);
|
|
1513
1671
|
}
|
|
1514
|
-
if (!changed) return;
|
|
1515
|
-
return {
|
|
1516
|
-
code: s.toString(),
|
|
1517
|
-
map: s.generateMap({ source: id, includeContent: true })
|
|
1518
|
-
};
|
|
1519
1672
|
}
|
|
1520
1673
|
};
|
|
1521
1674
|
}
|
|
@@ -1523,12 +1676,14 @@ ${lazyImports.join(",\n")}
|
|
|
1523
1676
|
// src/vite/plugins/use-cache-transform.ts
|
|
1524
1677
|
import path5 from "node:path";
|
|
1525
1678
|
import MagicString5 from "magic-string";
|
|
1679
|
+
var debug4 = createRangoDebugger(NS.transform);
|
|
1526
1680
|
var CACHE_RUNTIME_IMPORT = "@rangojs/router/cache-runtime";
|
|
1527
1681
|
var LAYOUT_TEMPLATE_PATTERN = /\/(layout|template)\.(tsx?|jsx?)$/;
|
|
1528
1682
|
function useCacheTransform() {
|
|
1529
1683
|
let projectRoot = "";
|
|
1530
1684
|
let isBuild = false;
|
|
1531
1685
|
let rscTransforms = null;
|
|
1686
|
+
const counter = createCounter(debug4, "use-cache");
|
|
1532
1687
|
return {
|
|
1533
1688
|
name: "@rangojs/router:use-cache",
|
|
1534
1689
|
enforce: "post",
|
|
@@ -1536,53 +1691,61 @@ function useCacheTransform() {
|
|
|
1536
1691
|
projectRoot = config.root;
|
|
1537
1692
|
isBuild = config.command === "build";
|
|
1538
1693
|
},
|
|
1694
|
+
buildEnd() {
|
|
1695
|
+
counter?.flush();
|
|
1696
|
+
},
|
|
1539
1697
|
async transform(code, id) {
|
|
1540
1698
|
if (this.environment?.name !== "rsc") return;
|
|
1541
1699
|
if (!code.includes("use cache")) return;
|
|
1542
1700
|
if (id.includes("/node_modules/") || id.startsWith("\0")) return;
|
|
1543
1701
|
if (!/\.(tsx?|jsx?|mjs)$/.test(id)) return;
|
|
1544
|
-
|
|
1702
|
+
const start = counter ? performance.now() : 0;
|
|
1703
|
+
try {
|
|
1704
|
+
if (!rscTransforms) {
|
|
1705
|
+
try {
|
|
1706
|
+
rscTransforms = await import("@vitejs/plugin-rsc/transforms");
|
|
1707
|
+
} catch {
|
|
1708
|
+
return;
|
|
1709
|
+
}
|
|
1710
|
+
}
|
|
1711
|
+
const {
|
|
1712
|
+
hasDirective,
|
|
1713
|
+
transformWrapExport,
|
|
1714
|
+
transformHoistInlineDirective
|
|
1715
|
+
} = rscTransforms;
|
|
1716
|
+
let ast;
|
|
1545
1717
|
try {
|
|
1546
|
-
|
|
1718
|
+
const { parseAst: parseAst4 } = await import("vite");
|
|
1719
|
+
ast = parseAst4(code);
|
|
1547
1720
|
} catch {
|
|
1548
1721
|
return;
|
|
1549
1722
|
}
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
hasDirective,
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
const isLayoutOrTemplate = LAYOUT_TEMPLATE_PATTERN.test(id);
|
|
1565
|
-
if (hasDirective(ast.body, "use cache")) {
|
|
1566
|
-
return transformFileLevelUseCache(
|
|
1723
|
+
const filePath = normalizePath(path5.relative(projectRoot, id));
|
|
1724
|
+
const isLayoutOrTemplate = LAYOUT_TEMPLATE_PATTERN.test(id);
|
|
1725
|
+
if (hasDirective(ast.body, "use cache")) {
|
|
1726
|
+
return transformFileLevelUseCache(
|
|
1727
|
+
code,
|
|
1728
|
+
ast,
|
|
1729
|
+
filePath,
|
|
1730
|
+
id,
|
|
1731
|
+
isBuild,
|
|
1732
|
+
isLayoutOrTemplate,
|
|
1733
|
+
transformWrapExport
|
|
1734
|
+
);
|
|
1735
|
+
}
|
|
1736
|
+
const functionResult = transformFunctionLevelUseCache(
|
|
1567
1737
|
code,
|
|
1568
1738
|
ast,
|
|
1569
1739
|
filePath,
|
|
1570
1740
|
id,
|
|
1571
1741
|
isBuild,
|
|
1572
|
-
|
|
1573
|
-
transformWrapExport
|
|
1742
|
+
transformHoistInlineDirective
|
|
1574
1743
|
);
|
|
1744
|
+
warnOnNearMissDirectives(ast, id, this.warn.bind(this));
|
|
1745
|
+
if (functionResult) return functionResult;
|
|
1746
|
+
} finally {
|
|
1747
|
+
counter?.record(id, performance.now() - start);
|
|
1575
1748
|
}
|
|
1576
|
-
const functionResult = transformFunctionLevelUseCache(
|
|
1577
|
-
code,
|
|
1578
|
-
ast,
|
|
1579
|
-
filePath,
|
|
1580
|
-
id,
|
|
1581
|
-
isBuild,
|
|
1582
|
-
transformHoistInlineDirective
|
|
1583
|
-
);
|
|
1584
|
-
warnOnNearMissDirectives(ast, id, this.warn.bind(this));
|
|
1585
|
-
if (functionResult) return functionResult;
|
|
1586
1749
|
}
|
|
1587
1750
|
};
|
|
1588
1751
|
}
|
|
@@ -1705,6 +1868,7 @@ function warnOnNearMissDirectives(ast, fileId, warn) {
|
|
|
1705
1868
|
}
|
|
1706
1869
|
|
|
1707
1870
|
// src/vite/plugins/client-ref-dedup.ts
|
|
1871
|
+
var debug5 = createRangoDebugger(NS.transform);
|
|
1708
1872
|
var CLIENT_IN_SERVER_PROXY_PREFIX = "virtual:vite-rsc/client-in-server-package-proxy/";
|
|
1709
1873
|
function extractPackageName(absolutePath) {
|
|
1710
1874
|
const marker = "/node_modules/";
|
|
@@ -1721,6 +1885,7 @@ function extractPackageName(absolutePath) {
|
|
|
1721
1885
|
}
|
|
1722
1886
|
function clientRefDedup() {
|
|
1723
1887
|
let clientExclude = [];
|
|
1888
|
+
const dedupedPackages = /* @__PURE__ */ new Set();
|
|
1724
1889
|
return {
|
|
1725
1890
|
name: "@rangojs/router:client-ref-dedup",
|
|
1726
1891
|
enforce: "pre",
|
|
@@ -1729,6 +1894,15 @@ function clientRefDedup() {
|
|
|
1729
1894
|
const clientEnv = config.environments?.["client"];
|
|
1730
1895
|
clientExclude = clientEnv?.optimizeDeps?.exclude ?? config.optimizeDeps?.exclude ?? [];
|
|
1731
1896
|
},
|
|
1897
|
+
buildEnd() {
|
|
1898
|
+
if (debug5 && dedupedPackages.size > 0) {
|
|
1899
|
+
debug5(
|
|
1900
|
+
"client-ref-dedup: redirected %d package(s) (%s)",
|
|
1901
|
+
dedupedPackages.size,
|
|
1902
|
+
[...dedupedPackages].join(",")
|
|
1903
|
+
);
|
|
1904
|
+
}
|
|
1905
|
+
},
|
|
1732
1906
|
resolveId(source, importer, options) {
|
|
1733
1907
|
if (this.environment?.name !== "client") return;
|
|
1734
1908
|
if (!importer?.includes(CLIENT_IN_SERVER_PROXY_PREFIX)) return;
|
|
@@ -1737,6 +1911,7 @@ function clientRefDedup() {
|
|
|
1737
1911
|
const packageName = extractPackageName(source);
|
|
1738
1912
|
if (!packageName) return;
|
|
1739
1913
|
if (clientExclude.includes(packageName)) return;
|
|
1914
|
+
if (debug5) dedupedPackages.add(packageName);
|
|
1740
1915
|
return `\0rango:dedup/${packageName}`;
|
|
1741
1916
|
},
|
|
1742
1917
|
load(id) {
|
|
@@ -1859,12 +2034,13 @@ function getVirtualVersionContent(version) {
|
|
|
1859
2034
|
|
|
1860
2035
|
// src/vite/utils/package-resolution.ts
|
|
1861
2036
|
import { existsSync } from "node:fs";
|
|
2037
|
+
import { createRequire } from "node:module";
|
|
1862
2038
|
import { resolve } from "node:path";
|
|
1863
2039
|
|
|
1864
2040
|
// package.json
|
|
1865
2041
|
var package_default = {
|
|
1866
2042
|
name: "@rangojs/router",
|
|
1867
|
-
version: "0.0.0-experimental.
|
|
2043
|
+
version: "0.0.0-experimental.2c0cb8a1",
|
|
1868
2044
|
description: "Django-inspired RSC router with composable URL patterns",
|
|
1869
2045
|
keywords: [
|
|
1870
2046
|
"react",
|
|
@@ -1997,16 +2173,18 @@ var package_default = {
|
|
|
1997
2173
|
tag: "experimental"
|
|
1998
2174
|
},
|
|
1999
2175
|
scripts: {
|
|
2000
|
-
build: "pnpm dlx esbuild src/vite/index.ts --bundle --format=esm --outfile=dist/vite/index.js --platform=node --packages=external && pnpm dlx esbuild src/bin/rango.ts --bundle --format=esm --outfile=dist/bin/rango.js --platform=node --packages=external --banner:js='#!/usr/bin/env node' && chmod +x dist/bin/rango.js",
|
|
2176
|
+
build: "pnpm dlx esbuild src/vite/index.ts --bundle --format=esm --outfile=dist/vite/index.js --platform=node --packages=external && mkdir -p dist/vite/plugins && cp src/vite/plugins/cloudflare-protocol-loader-hook.mjs dist/vite/plugins/cloudflare-protocol-loader-hook.mjs && pnpm dlx esbuild src/bin/rango.ts --bundle --format=esm --outfile=dist/bin/rango.js --platform=node --packages=external --banner:js='#!/usr/bin/env node' && chmod +x dist/bin/rango.js",
|
|
2001
2177
|
prepublishOnly: "pnpm build",
|
|
2002
|
-
typecheck: "tsc --noEmit",
|
|
2178
|
+
typecheck: "tsc --noEmit && tsc -p tsconfig.strict-check.json --noEmit",
|
|
2003
2179
|
test: "playwright test",
|
|
2004
2180
|
"test:ui": "playwright test --ui",
|
|
2005
2181
|
"test:unit": "vitest run",
|
|
2006
2182
|
"test:unit:watch": "vitest"
|
|
2007
2183
|
},
|
|
2008
2184
|
dependencies: {
|
|
2185
|
+
"@types/debug": "^4.1.12",
|
|
2009
2186
|
"@vitejs/plugin-rsc": "^0.5.23",
|
|
2187
|
+
debug: "^4.4.1",
|
|
2010
2188
|
"magic-string": "^0.30.17",
|
|
2011
2189
|
picomatch: "^4.0.3",
|
|
2012
2190
|
"rsc-html-stream": "^0.0.7"
|
|
@@ -2041,6 +2219,7 @@ var package_default = {
|
|
|
2041
2219
|
};
|
|
2042
2220
|
|
|
2043
2221
|
// src/vite/utils/package-resolution.ts
|
|
2222
|
+
var require2 = createRequire(import.meta.url);
|
|
2044
2223
|
var VIRTUAL_PACKAGE_NAME = "@rangojs/router";
|
|
2045
2224
|
function getPublishedPackageName() {
|
|
2046
2225
|
return package_default.name;
|
|
@@ -2081,6 +2260,20 @@ function getPackageAliases() {
|
|
|
2081
2260
|
}
|
|
2082
2261
|
return aliases;
|
|
2083
2262
|
}
|
|
2263
|
+
function getVendorAliases() {
|
|
2264
|
+
const specs = [
|
|
2265
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.edge",
|
|
2266
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
|
|
2267
|
+
];
|
|
2268
|
+
const aliases = {};
|
|
2269
|
+
for (const spec of specs) {
|
|
2270
|
+
try {
|
|
2271
|
+
aliases[spec] = require2.resolve(spec);
|
|
2272
|
+
} catch {
|
|
2273
|
+
}
|
|
2274
|
+
}
|
|
2275
|
+
return aliases;
|
|
2276
|
+
}
|
|
2084
2277
|
|
|
2085
2278
|
// src/build/route-types/param-extraction.ts
|
|
2086
2279
|
function extractParamsFromPattern(pattern) {
|
|
@@ -2978,6 +3171,7 @@ import * as Vite from "vite";
|
|
|
2978
3171
|
|
|
2979
3172
|
// src/vite/plugins/performance-tracks.ts
|
|
2980
3173
|
import { readFile } from "node:fs/promises";
|
|
3174
|
+
var debug6 = createRangoDebugger(NS.transform);
|
|
2981
3175
|
var RSDW_PATCH_RE = /((?:var|let|const)\s+\w+\s*=\s*root\._children\s*,\s*(\w+)\s*=\s*root\._debugInfo\s*[;,])/;
|
|
2982
3176
|
function buildPatchReplacement(match, debugInfoVar) {
|
|
2983
3177
|
return `${match}
|
|
@@ -3019,19 +3213,23 @@ function performanceTracksOptimizeDepsPlugin() {
|
|
|
3019
3213
|
};
|
|
3020
3214
|
}
|
|
3021
3215
|
function performanceTracksPlugin() {
|
|
3216
|
+
const counter = createCounter(debug6, "performance-tracks");
|
|
3022
3217
|
return {
|
|
3023
3218
|
name: "@rangojs/router:performance-tracks",
|
|
3219
|
+
buildEnd() {
|
|
3220
|
+
counter?.flush();
|
|
3221
|
+
},
|
|
3024
3222
|
transform(code, id) {
|
|
3025
3223
|
if (!id.includes("react-server-dom") || !id.includes("client")) return;
|
|
3026
|
-
const
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
|
-
|
|
3033
|
-
);
|
|
3034
|
-
|
|
3224
|
+
const start = counter ? performance.now() : 0;
|
|
3225
|
+
try {
|
|
3226
|
+
const patched = patchRsdwClientDebugInfoRecovery(code);
|
|
3227
|
+
if (!patched.debugInfoVar) return;
|
|
3228
|
+
debug6?.("patched RSDW client (var: %s)", patched.debugInfoVar);
|
|
3229
|
+
return patched.code;
|
|
3230
|
+
} finally {
|
|
3231
|
+
counter?.record(id, performance.now() - start);
|
|
3232
|
+
}
|
|
3035
3233
|
}
|
|
3036
3234
|
};
|
|
3037
3235
|
}
|
|
@@ -3178,11 +3376,10 @@ function createVersionInjectorPlugin(rscEntryPath) {
|
|
|
3178
3376
|
if (normalizedId !== normalizedEntry) {
|
|
3179
3377
|
return null;
|
|
3180
3378
|
}
|
|
3181
|
-
const prepend = [
|
|
3379
|
+
const prepend = [
|
|
3380
|
+
`import "virtual:rsc-router/routes-manifest";`
|
|
3381
|
+
];
|
|
3182
3382
|
let newCode = code;
|
|
3183
|
-
if (!code.includes("virtual:rsc-router/routes-manifest")) {
|
|
3184
|
-
prepend.push(`import "virtual:rsc-router/routes-manifest";`);
|
|
3185
|
-
}
|
|
3186
3383
|
const needsVersion = code.includes("createRSCHandler") && !code.includes("@rangojs/router:version") && /createRSCHandler\s*\(\s*\{/.test(code);
|
|
3187
3384
|
if (needsVersion) {
|
|
3188
3385
|
prepend.push(`import { VERSION } from "@rangojs/router:version";`);
|
|
@@ -3191,8 +3388,21 @@ function createVersionInjectorPlugin(rscEntryPath) {
|
|
|
3191
3388
|
"createRSCHandler({\n version: VERSION,"
|
|
3192
3389
|
);
|
|
3193
3390
|
}
|
|
3194
|
-
|
|
3195
|
-
|
|
3391
|
+
const lines = newCode.split("\n");
|
|
3392
|
+
let insertAt = 0;
|
|
3393
|
+
while (insertAt < lines.length) {
|
|
3394
|
+
const trimmed = lines[insertAt].trim();
|
|
3395
|
+
if (trimmed === "" || /^\/\/\/\s*<reference\b/.test(trimmed)) {
|
|
3396
|
+
insertAt++;
|
|
3397
|
+
} else {
|
|
3398
|
+
break;
|
|
3399
|
+
}
|
|
3400
|
+
}
|
|
3401
|
+
newCode = [
|
|
3402
|
+
...lines.slice(0, insertAt),
|
|
3403
|
+
...prepend,
|
|
3404
|
+
...lines.slice(insertAt)
|
|
3405
|
+
].join("\n");
|
|
3196
3406
|
return {
|
|
3197
3407
|
code: newCode,
|
|
3198
3408
|
map: null
|
|
@@ -3202,6 +3412,7 @@ function createVersionInjectorPlugin(rscEntryPath) {
|
|
|
3202
3412
|
}
|
|
3203
3413
|
|
|
3204
3414
|
// src/vite/plugins/cjs-to-esm.ts
|
|
3415
|
+
var debug7 = createRangoDebugger(NS.transform);
|
|
3205
3416
|
function createCjsToEsmPlugin() {
|
|
3206
3417
|
return {
|
|
3207
3418
|
name: "@rangojs/router:cjs-to-esm",
|
|
@@ -3211,6 +3422,7 @@ function createCjsToEsmPlugin() {
|
|
|
3211
3422
|
if (cleanId.includes("vendor/react-server-dom/client.browser.js") || cleanId.includes("vendor\\react-server-dom\\client.browser.js")) {
|
|
3212
3423
|
const isProd = process.env.NODE_ENV === "production";
|
|
3213
3424
|
const cjsFile = isProd ? "./cjs/react-server-dom-webpack-client.browser.production.js" : "./cjs/react-server-dom-webpack-client.browser.development.js";
|
|
3425
|
+
debug7?.("cjs-to-esm entry redirect %s", id);
|
|
3214
3426
|
return {
|
|
3215
3427
|
code: `export * from "${cjsFile}";`,
|
|
3216
3428
|
map: null
|
|
@@ -3246,6 +3458,7 @@ function createCjsToEsmPlugin() {
|
|
|
3246
3458
|
"export const $1 ="
|
|
3247
3459
|
);
|
|
3248
3460
|
transformed = license + "\n" + transformed;
|
|
3461
|
+
debug7?.("cjs-to-esm body rewrite %s", id);
|
|
3249
3462
|
return {
|
|
3250
3463
|
code: transformed,
|
|
3251
3464
|
map: null
|
|
@@ -3260,7 +3473,7 @@ function createCjsToEsmPlugin() {
|
|
|
3260
3473
|
import { createServer as createViteServer } from "vite";
|
|
3261
3474
|
import { resolve as resolve8 } from "node:path";
|
|
3262
3475
|
import { readFileSync as readFileSync6 } from "node:fs";
|
|
3263
|
-
import { createRequire } from "node:module";
|
|
3476
|
+
import { createRequire as createRequire2, register } from "node:module";
|
|
3264
3477
|
import { pathToFileURL } from "node:url";
|
|
3265
3478
|
|
|
3266
3479
|
// src/vite/plugins/virtual-stub-plugin.ts
|
|
@@ -3287,9 +3500,117 @@ function createVirtualStubPlugin() {
|
|
|
3287
3500
|
};
|
|
3288
3501
|
}
|
|
3289
3502
|
|
|
3503
|
+
// src/vite/plugins/cloudflare-protocol-stub.ts
|
|
3504
|
+
var VIRTUAL_PREFIX = "virtual:rango-cloudflare-stub-";
|
|
3505
|
+
var NULL_PREFIX = "\0" + VIRTUAL_PREFIX;
|
|
3506
|
+
var CF_PREFIX = "cloudflare:";
|
|
3507
|
+
var BUILD_ENV_GLOBAL_KEY = "__rango_build_env__";
|
|
3508
|
+
var SOURCE_EXT_RE = /\.[mc]?[jt]sx?$/;
|
|
3509
|
+
var IMPORT_NODE_TYPES = /* @__PURE__ */ new Set([
|
|
3510
|
+
"ImportDeclaration",
|
|
3511
|
+
"ImportExpression",
|
|
3512
|
+
"ExportNamedDeclaration",
|
|
3513
|
+
"ExportAllDeclaration"
|
|
3514
|
+
]);
|
|
3515
|
+
var STUBS = {
|
|
3516
|
+
"cloudflare:workers": `
|
|
3517
|
+
export class DurableObject { constructor(_ctx, _env) {} }
|
|
3518
|
+
export class WorkerEntrypoint { constructor(_ctx, _env) {} }
|
|
3519
|
+
export class WorkflowEntrypoint { constructor(_ctx, _env) {} }
|
|
3520
|
+
export class RpcTarget {}
|
|
3521
|
+
export const env = globalThis[${JSON.stringify(BUILD_ENV_GLOBAL_KEY)}] ?? {};
|
|
3522
|
+
export default {};
|
|
3523
|
+
`,
|
|
3524
|
+
"cloudflare:email": `
|
|
3525
|
+
export class EmailMessage { constructor(_from, _to, _raw) {} }
|
|
3526
|
+
export default {};
|
|
3527
|
+
`,
|
|
3528
|
+
"cloudflare:sockets": `
|
|
3529
|
+
export function connect() { return {}; }
|
|
3530
|
+
export default {};
|
|
3531
|
+
`,
|
|
3532
|
+
"cloudflare:workflows": `
|
|
3533
|
+
export class NonRetryableError extends Error {
|
|
3534
|
+
constructor(message, name) { super(message); this.name = name ?? "NonRetryableError"; }
|
|
3535
|
+
}
|
|
3536
|
+
export default {};
|
|
3537
|
+
`
|
|
3538
|
+
};
|
|
3539
|
+
var FALLBACK_STUB = `export default {};
|
|
3540
|
+
`;
|
|
3541
|
+
function createCloudflareProtocolStubPlugin() {
|
|
3542
|
+
return {
|
|
3543
|
+
name: "@rangojs/router:cloudflare-protocol-stub",
|
|
3544
|
+
transform(code, id) {
|
|
3545
|
+
const cleanId = id.split("?")[0] ?? id;
|
|
3546
|
+
if (!SOURCE_EXT_RE.test(cleanId)) return null;
|
|
3547
|
+
if (!code.includes(CF_PREFIX)) return null;
|
|
3548
|
+
let ast;
|
|
3549
|
+
try {
|
|
3550
|
+
ast = this.parse(code);
|
|
3551
|
+
} catch {
|
|
3552
|
+
return null;
|
|
3553
|
+
}
|
|
3554
|
+
const hits = [];
|
|
3555
|
+
walk(ast, (node) => {
|
|
3556
|
+
if (!IMPORT_NODE_TYPES.has(node.type)) return;
|
|
3557
|
+
const source = node.source;
|
|
3558
|
+
if (!source || source.type !== "Literal") return;
|
|
3559
|
+
if (typeof source.value !== "string") return;
|
|
3560
|
+
if (!source.value.startsWith(CF_PREFIX)) return;
|
|
3561
|
+
if (typeof source.start !== "number" || typeof source.end !== "number")
|
|
3562
|
+
return;
|
|
3563
|
+
hits.push({
|
|
3564
|
+
start: source.start,
|
|
3565
|
+
end: source.end,
|
|
3566
|
+
value: source.value
|
|
3567
|
+
});
|
|
3568
|
+
});
|
|
3569
|
+
if (hits.length === 0) return null;
|
|
3570
|
+
hits.sort((a, b) => b.start - a.start);
|
|
3571
|
+
let out = code;
|
|
3572
|
+
for (const hit of hits) {
|
|
3573
|
+
const submodule = hit.value.slice(CF_PREFIX.length);
|
|
3574
|
+
const quote = code[hit.start] === "'" ? "'" : '"';
|
|
3575
|
+
out = out.slice(0, hit.start) + quote + VIRTUAL_PREFIX + submodule + quote + out.slice(hit.end);
|
|
3576
|
+
}
|
|
3577
|
+
return { code: out, map: null };
|
|
3578
|
+
},
|
|
3579
|
+
resolveId(id) {
|
|
3580
|
+
if (id.startsWith(VIRTUAL_PREFIX)) {
|
|
3581
|
+
return "\0" + id;
|
|
3582
|
+
}
|
|
3583
|
+
return null;
|
|
3584
|
+
},
|
|
3585
|
+
load(id) {
|
|
3586
|
+
if (!id.startsWith(NULL_PREFIX)) return null;
|
|
3587
|
+
const submodule = id.slice(NULL_PREFIX.length);
|
|
3588
|
+
const specifier = CF_PREFIX + submodule;
|
|
3589
|
+
return STUBS[specifier] ?? FALLBACK_STUB;
|
|
3590
|
+
}
|
|
3591
|
+
};
|
|
3592
|
+
}
|
|
3593
|
+
function walk(node, visit) {
|
|
3594
|
+
if (!node || typeof node !== "object") return;
|
|
3595
|
+
if (Array.isArray(node)) {
|
|
3596
|
+
for (const child of node) walk(child, visit);
|
|
3597
|
+
return;
|
|
3598
|
+
}
|
|
3599
|
+
const n = node;
|
|
3600
|
+
if (typeof n.type !== "string") return;
|
|
3601
|
+
visit(n);
|
|
3602
|
+
for (const key in n) {
|
|
3603
|
+
if (key === "loc" || key === "start" || key === "end" || key === "range") {
|
|
3604
|
+
continue;
|
|
3605
|
+
}
|
|
3606
|
+
walk(n[key], visit);
|
|
3607
|
+
}
|
|
3608
|
+
}
|
|
3609
|
+
|
|
3290
3610
|
// src/vite/plugins/client-ref-hashing.ts
|
|
3291
3611
|
import { relative } from "node:path";
|
|
3292
3612
|
import { createHash as createHash2 } from "node:crypto";
|
|
3613
|
+
var debug8 = createRangoDebugger(NS.transform);
|
|
3293
3614
|
var CLIENT_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-package-proxy/";
|
|
3294
3615
|
var CLIENT_IN_SERVER_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-in-server-package-proxy/";
|
|
3295
3616
|
var FS_PREFIX = "/@fs/";
|
|
@@ -3328,6 +3649,7 @@ function transformClientRefs(code, projectRoot) {
|
|
|
3328
3649
|
return hasReplacement ? result : null;
|
|
3329
3650
|
}
|
|
3330
3651
|
function hashClientRefs(projectRoot) {
|
|
3652
|
+
const counter = createCounter(debug8, "hash-client-refs");
|
|
3331
3653
|
return {
|
|
3332
3654
|
name: "@rangojs/router:hash-client-refs",
|
|
3333
3655
|
// Run after the RSC plugin's transform (default enforce is normal)
|
|
@@ -3335,10 +3657,18 @@ function hashClientRefs(projectRoot) {
|
|
|
3335
3657
|
applyToEnvironment(env) {
|
|
3336
3658
|
return env.name === "rsc";
|
|
3337
3659
|
},
|
|
3338
|
-
|
|
3339
|
-
|
|
3340
|
-
|
|
3341
|
-
|
|
3660
|
+
buildEnd() {
|
|
3661
|
+
counter?.flush();
|
|
3662
|
+
},
|
|
3663
|
+
transform(code, id) {
|
|
3664
|
+
const start = counter ? performance.now() : 0;
|
|
3665
|
+
try {
|
|
3666
|
+
const result = transformClientRefs(code, projectRoot);
|
|
3667
|
+
if (result === null) return;
|
|
3668
|
+
return { code: result, map: null };
|
|
3669
|
+
} finally {
|
|
3670
|
+
counter?.record(id, performance.now() - start);
|
|
3671
|
+
}
|
|
3342
3672
|
}
|
|
3343
3673
|
};
|
|
3344
3674
|
}
|
|
@@ -3466,6 +3796,12 @@ function markSelfGenWrite(state, filePath, content) {
|
|
|
3466
3796
|
state.selfWrittenGenFiles.set(filePath, { at: Date.now(), hash });
|
|
3467
3797
|
}
|
|
3468
3798
|
function consumeSelfGenWrite(state, filePath) {
|
|
3799
|
+
return checkSelfGenWrite(state, filePath, true);
|
|
3800
|
+
}
|
|
3801
|
+
function peekSelfGenWrite(state, filePath) {
|
|
3802
|
+
return checkSelfGenWrite(state, filePath, false);
|
|
3803
|
+
}
|
|
3804
|
+
function checkSelfGenWrite(state, filePath, consume) {
|
|
3469
3805
|
const info = state.selfWrittenGenFiles.get(filePath);
|
|
3470
3806
|
if (!info) return false;
|
|
3471
3807
|
if (Date.now() - info.at > state.SELF_WRITE_WINDOW_MS) {
|
|
@@ -3476,7 +3812,7 @@ function consumeSelfGenWrite(state, filePath) {
|
|
|
3476
3812
|
const current = readFileSync3(filePath, "utf-8");
|
|
3477
3813
|
const currentHash = createHash3("sha256").update(current).digest("hex");
|
|
3478
3814
|
if (currentHash === info.hash) {
|
|
3479
|
-
state.selfWrittenGenFiles.delete(filePath);
|
|
3815
|
+
if (consume) state.selfWrittenGenFiles.delete(filePath);
|
|
3480
3816
|
return true;
|
|
3481
3817
|
}
|
|
3482
3818
|
return false;
|
|
@@ -3698,8 +4034,14 @@ function copyStagedBuildAssets(projectRoot, fileNames) {
|
|
|
3698
4034
|
}
|
|
3699
4035
|
|
|
3700
4036
|
// src/vite/discovery/prerender-collection.ts
|
|
4037
|
+
var debug9 = createRangoDebugger(NS.prerender);
|
|
3701
4038
|
async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
3702
4039
|
if (!state.opts?.enableBuildPrerender || !state.isBuildMode) return;
|
|
4040
|
+
const overallStart = debug9 ? performance.now() : 0;
|
|
4041
|
+
debug9?.(
|
|
4042
|
+
"expandPrerenderRoutes: start (%d router manifest(s))",
|
|
4043
|
+
allManifests.length
|
|
4044
|
+
);
|
|
3703
4045
|
const entries = [];
|
|
3704
4046
|
const allRoutes = {};
|
|
3705
4047
|
for (const { manifest: m } of allManifests) {
|
|
@@ -3749,6 +4091,7 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3749
4091
|
});
|
|
3750
4092
|
} else {
|
|
3751
4093
|
if (def?.getParams) {
|
|
4094
|
+
const getParamsStart = debug9 ? performance.now() : 0;
|
|
3752
4095
|
try {
|
|
3753
4096
|
const buildVars = {};
|
|
3754
4097
|
const buildEnv = state.resolvedBuildEnv;
|
|
@@ -3767,6 +4110,12 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3767
4110
|
}
|
|
3768
4111
|
};
|
|
3769
4112
|
const paramsList = await def.getParams(getParamsCtx);
|
|
4113
|
+
debug9?.(
|
|
4114
|
+
"getParams %s -> %d params (%sms)",
|
|
4115
|
+
routeName,
|
|
4116
|
+
paramsList.length,
|
|
4117
|
+
(performance.now() - getParamsStart).toFixed(1)
|
|
4118
|
+
);
|
|
3770
4119
|
const concurrency = def.options?.concurrency ?? 1;
|
|
3771
4120
|
const hasBuildVars = Object.keys(buildVars).length > 0 || Object.getOwnPropertySymbols(buildVars).length > 0;
|
|
3772
4121
|
for (const params of paramsList) {
|
|
@@ -3832,12 +4181,23 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3832
4181
|
);
|
|
3833
4182
|
}
|
|
3834
4183
|
}
|
|
3835
|
-
if (entries.length === 0)
|
|
4184
|
+
if (entries.length === 0) {
|
|
4185
|
+
debug9?.(
|
|
4186
|
+
"no prerender entries (done in %sms)",
|
|
4187
|
+
(performance.now() - overallStart).toFixed(1)
|
|
4188
|
+
);
|
|
4189
|
+
return;
|
|
4190
|
+
}
|
|
3836
4191
|
const maxConcurrency = Math.max(...entries.map((e) => e.concurrency));
|
|
3837
4192
|
const concurrencyNote = maxConcurrency > 1 ? ` (concurrency: ${maxConcurrency})` : "";
|
|
3838
4193
|
console.log(
|
|
3839
4194
|
`[rsc-router] Pre-rendering ${entries.length} URL(s)${concurrencyNote}...`
|
|
3840
4195
|
);
|
|
4196
|
+
debug9?.(
|
|
4197
|
+
"prerender loop: %d entries, max concurrency %d",
|
|
4198
|
+
entries.length,
|
|
4199
|
+
maxConcurrency
|
|
4200
|
+
);
|
|
3841
4201
|
const { hashParams } = await rscEnv.runner.import("@rangojs/router/build");
|
|
3842
4202
|
const manifestEntries = {};
|
|
3843
4203
|
let doneCount = 0;
|
|
@@ -3944,10 +4304,22 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3944
4304
|
console.log(
|
|
3945
4305
|
`[rsc-router] Pre-render complete: ${parts.join(", ")} (${totalElapsed}ms total)`
|
|
3946
4306
|
);
|
|
4307
|
+
debug9?.(
|
|
4308
|
+
"expandPrerenderRoutes done: %d done, %d skipped, %sms (overall %sms)",
|
|
4309
|
+
doneCount,
|
|
4310
|
+
skipCount,
|
|
4311
|
+
totalElapsed,
|
|
4312
|
+
(performance.now() - overallStart).toFixed(1)
|
|
4313
|
+
);
|
|
3947
4314
|
}
|
|
3948
4315
|
async function renderStaticHandlers(state, rscEnv, registry) {
|
|
3949
4316
|
if (!state.opts?.enableBuildPrerender || !state.isBuildMode || !state.resolvedStaticModules?.size)
|
|
3950
4317
|
return;
|
|
4318
|
+
const overallStart = debug9 ? performance.now() : 0;
|
|
4319
|
+
debug9?.(
|
|
4320
|
+
"renderStaticHandlers: start (%d static module(s))",
|
|
4321
|
+
state.resolvedStaticModules.size
|
|
4322
|
+
);
|
|
3951
4323
|
const manifestEntries = {};
|
|
3952
4324
|
let staticDone = 0;
|
|
3953
4325
|
let staticSkip = 0;
|
|
@@ -4037,13 +4409,29 @@ async function renderStaticHandlers(state, rscEnv, registry) {
|
|
|
4037
4409
|
console.log(
|
|
4038
4410
|
`[rsc-router] Static render complete: ${staticParts.join(", ")} (${totalStaticElapsed}ms total)`
|
|
4039
4411
|
);
|
|
4412
|
+
debug9?.(
|
|
4413
|
+
"renderStaticHandlers done: %d done, %d skipped, %sms (overall %sms)",
|
|
4414
|
+
staticDone,
|
|
4415
|
+
staticSkip,
|
|
4416
|
+
totalStaticElapsed,
|
|
4417
|
+
(performance.now() - overallStart).toFixed(1)
|
|
4418
|
+
);
|
|
4040
4419
|
}
|
|
4041
4420
|
|
|
4042
4421
|
// src/vite/discovery/discover-routers.ts
|
|
4422
|
+
var debug10 = createRangoDebugger(NS.discovery);
|
|
4043
4423
|
async function discoverRouters(state, rscEnv) {
|
|
4044
4424
|
if (!state.resolvedEntryPath) return;
|
|
4045
|
-
await
|
|
4046
|
-
|
|
4425
|
+
await timed(
|
|
4426
|
+
debug10,
|
|
4427
|
+
"inner: import entry",
|
|
4428
|
+
() => rscEnv.runner.import(state.resolvedEntryPath)
|
|
4429
|
+
);
|
|
4430
|
+
const serverMod = await timed(
|
|
4431
|
+
debug10,
|
|
4432
|
+
"inner: import @rangojs/router/server",
|
|
4433
|
+
() => rscEnv.runner.import("@rangojs/router/server")
|
|
4434
|
+
);
|
|
4047
4435
|
let registry = serverMod.RouterRegistry;
|
|
4048
4436
|
if (!registry || registry.size === 0) {
|
|
4049
4437
|
try {
|
|
@@ -4085,8 +4473,13 @@ async function discoverRouters(state, rscEnv) {
|
|
|
4085
4473
|
);
|
|
4086
4474
|
}
|
|
4087
4475
|
}
|
|
4088
|
-
const buildMod = await
|
|
4476
|
+
const buildMod = await timed(
|
|
4477
|
+
debug10,
|
|
4478
|
+
"inner: import @rangojs/router/build",
|
|
4479
|
+
() => rscEnv.runner.import("@rangojs/router/build")
|
|
4480
|
+
);
|
|
4089
4481
|
const generateManifestFull = buildMod.generateManifestFull;
|
|
4482
|
+
debug10?.("inner: found %d router(s) in registry", registry.size);
|
|
4090
4483
|
const nestedRouterConflict = findNestedRouterConflict(
|
|
4091
4484
|
[...registry.values()].map((router) => router.__sourceFile).filter(
|
|
4092
4485
|
(sourceFile) => typeof sourceFile === "string"
|
|
@@ -4105,6 +4498,7 @@ async function discoverRouters(state, rscEnv) {
|
|
|
4105
4498
|
let mergedRouteTrailingSlash = {};
|
|
4106
4499
|
let routerMountIndex = 0;
|
|
4107
4500
|
const allManifests = [];
|
|
4501
|
+
const manifestGenStart = debug10 ? performance.now() : 0;
|
|
4108
4502
|
for (const [id, router] of registry) {
|
|
4109
4503
|
if (!router.urlpatterns || !generateManifestFull) {
|
|
4110
4504
|
continue;
|
|
@@ -4179,7 +4573,13 @@ async function discoverRouters(state, rscEnv) {
|
|
|
4179
4573
|
);
|
|
4180
4574
|
}
|
|
4181
4575
|
}
|
|
4576
|
+
debug10?.(
|
|
4577
|
+
"inner: generated manifests for %d router(s) (%sms)",
|
|
4578
|
+
allManifests.length,
|
|
4579
|
+
(performance.now() - manifestGenStart).toFixed(1)
|
|
4580
|
+
);
|
|
4182
4581
|
let newMergedRouteTrie = null;
|
|
4582
|
+
const trieStart = debug10 ? performance.now() : 0;
|
|
4183
4583
|
if (Object.keys(newMergedRouteManifest).length > 0) {
|
|
4184
4584
|
const buildRouteTrie = buildMod.buildRouteTrie;
|
|
4185
4585
|
if (buildRouteTrie && mergedRouteAncestry) {
|
|
@@ -4242,6 +4642,10 @@ async function discoverRouters(state, rscEnv) {
|
|
|
4242
4642
|
}
|
|
4243
4643
|
}
|
|
4244
4644
|
}
|
|
4645
|
+
debug10?.(
|
|
4646
|
+
"inner: trie build done (%sms)",
|
|
4647
|
+
(performance.now() - trieStart).toFixed(1)
|
|
4648
|
+
);
|
|
4245
4649
|
state.mergedRouteManifest = newMergedRouteManifest;
|
|
4246
4650
|
state.mergedPrecomputedEntries = newMergedPrecomputedEntries;
|
|
4247
4651
|
state.perRouterManifests = newPerRouterManifests;
|
|
@@ -4681,8 +5085,101 @@ function postprocessBundle(state) {
|
|
|
4681
5085
|
}
|
|
4682
5086
|
}
|
|
4683
5087
|
|
|
5088
|
+
// src/vite/discovery/gate-state.ts
|
|
5089
|
+
function createDiscoveryGate(s, debug11) {
|
|
5090
|
+
let gatePending = false;
|
|
5091
|
+
let gateResolver = () => {
|
|
5092
|
+
};
|
|
5093
|
+
let inProgress = false;
|
|
5094
|
+
let queued = false;
|
|
5095
|
+
let pendingEvents = false;
|
|
5096
|
+
const beginGate = () => {
|
|
5097
|
+
if (gatePending) return;
|
|
5098
|
+
s.discoveryDone = new Promise((resolve10) => {
|
|
5099
|
+
gateResolver = resolve10;
|
|
5100
|
+
});
|
|
5101
|
+
gatePending = true;
|
|
5102
|
+
};
|
|
5103
|
+
const resolveGate = () => {
|
|
5104
|
+
if (!gatePending) return;
|
|
5105
|
+
if (inProgress || queued || pendingEvents) {
|
|
5106
|
+
debug11?.(
|
|
5107
|
+
"hmr: resolveGate deferred \u2014 work in flight (inProgress=%s queued=%s pendingEvents=%s)",
|
|
5108
|
+
inProgress,
|
|
5109
|
+
queued,
|
|
5110
|
+
pendingEvents
|
|
5111
|
+
);
|
|
5112
|
+
return;
|
|
5113
|
+
}
|
|
5114
|
+
gatePending = false;
|
|
5115
|
+
debug11?.("hmr: discoveryDone resolved");
|
|
5116
|
+
gateResolver();
|
|
5117
|
+
};
|
|
5118
|
+
const noteRouteEvent = () => {
|
|
5119
|
+
pendingEvents = true;
|
|
5120
|
+
beginGate();
|
|
5121
|
+
};
|
|
5122
|
+
const runRefreshCycle = async (work) => {
|
|
5123
|
+
if (inProgress) {
|
|
5124
|
+
queued = true;
|
|
5125
|
+
debug11?.("hmr: rediscovery in flight \u2014 queued for a follow-up cycle");
|
|
5126
|
+
return;
|
|
5127
|
+
}
|
|
5128
|
+
pendingEvents = false;
|
|
5129
|
+
inProgress = true;
|
|
5130
|
+
try {
|
|
5131
|
+
await work();
|
|
5132
|
+
} finally {
|
|
5133
|
+
inProgress = false;
|
|
5134
|
+
if (queued) {
|
|
5135
|
+
queued = false;
|
|
5136
|
+
debug11?.("hmr: consuming queued rediscovery");
|
|
5137
|
+
runRefreshCycle(work).catch((err) => {
|
|
5138
|
+
debug11?.(
|
|
5139
|
+
"hmr: queued cycle rejected \u2014 releasing gate (%s)",
|
|
5140
|
+
err instanceof Error ? err.message : String(err)
|
|
5141
|
+
);
|
|
5142
|
+
resolveGate();
|
|
5143
|
+
});
|
|
5144
|
+
} else if (pendingEvents) {
|
|
5145
|
+
debug11?.(
|
|
5146
|
+
"hmr: holding gate for pending events (debounce not yet fired)"
|
|
5147
|
+
);
|
|
5148
|
+
} else {
|
|
5149
|
+
resolveGate();
|
|
5150
|
+
}
|
|
5151
|
+
}
|
|
5152
|
+
};
|
|
5153
|
+
return {
|
|
5154
|
+
beginGate,
|
|
5155
|
+
resolveGate,
|
|
5156
|
+
noteRouteEvent,
|
|
5157
|
+
runRefreshCycle,
|
|
5158
|
+
state: () => ({ gatePending, inProgress, queued, pendingEvents })
|
|
5159
|
+
};
|
|
5160
|
+
}
|
|
5161
|
+
|
|
4684
5162
|
// src/vite/router-discovery.ts
|
|
5163
|
+
var debugDiscovery = createRangoDebugger(NS.discovery);
|
|
5164
|
+
var debugRoutes = createRangoDebugger(NS.routes);
|
|
5165
|
+
var debugBuild = createRangoDebugger(NS.build);
|
|
5166
|
+
var debugDev = createRangoDebugger(NS.dev);
|
|
5167
|
+
var loaderHookRegistered = false;
|
|
5168
|
+
function ensureCloudflareProtocolLoaderRegistered() {
|
|
5169
|
+
if (loaderHookRegistered) return;
|
|
5170
|
+
loaderHookRegistered = true;
|
|
5171
|
+
try {
|
|
5172
|
+
register(
|
|
5173
|
+
new URL("./plugins/cloudflare-protocol-loader-hook.mjs", import.meta.url)
|
|
5174
|
+
);
|
|
5175
|
+
} catch (err) {
|
|
5176
|
+
console.warn(
|
|
5177
|
+
`[rsc-router] Could not register Node ESM loader hook for cloudflare:* imports (${err?.message ?? err}). Falling back to Vite transform only.`
|
|
5178
|
+
);
|
|
5179
|
+
}
|
|
5180
|
+
}
|
|
4685
5181
|
async function createTempRscServer(state, options = {}) {
|
|
5182
|
+
ensureCloudflareProtocolLoaderRegistered();
|
|
4686
5183
|
const { default: rsc } = await import("@vitejs/plugin-rsc");
|
|
4687
5184
|
return createViteServer({
|
|
4688
5185
|
root: state.projectRoot,
|
|
@@ -4705,6 +5202,7 @@ async function createTempRscServer(state, options = {}) {
|
|
|
4705
5202
|
...options.forceBuild ? [hashClientRefs(state.projectRoot)] : [],
|
|
4706
5203
|
createVersionPlugin(),
|
|
4707
5204
|
createVirtualStubPlugin(),
|
|
5205
|
+
createCloudflareProtocolStubPlugin(),
|
|
4708
5206
|
// Dev prerender must use dev-mode IDs (path-based) to match the workerd
|
|
4709
5207
|
// runtime. forceBuild produces hashed IDs for production bundle consistency.
|
|
4710
5208
|
exposeInternalIds(options.forceBuild ? { forceBuild: true } : void 0),
|
|
@@ -4721,7 +5219,7 @@ async function resolveBuildEnv(option, factoryCtx) {
|
|
|
4721
5219
|
);
|
|
4722
5220
|
}
|
|
4723
5221
|
try {
|
|
4724
|
-
const userRequire =
|
|
5222
|
+
const userRequire = createRequire2(
|
|
4725
5223
|
resolve8(factoryCtx.root, "package.json")
|
|
4726
5224
|
);
|
|
4727
5225
|
const wranglerPath = userRequire.resolve("wrangler");
|
|
@@ -4756,6 +5254,7 @@ async function acquireBuildEnv(s, command, mode) {
|
|
|
4756
5254
|
if (!result) return false;
|
|
4757
5255
|
s.resolvedBuildEnv = result.env;
|
|
4758
5256
|
s.buildEnvDispose = result.dispose ?? null;
|
|
5257
|
+
globalThis[BUILD_ENV_GLOBAL_KEY] = result.env;
|
|
4759
5258
|
return true;
|
|
4760
5259
|
}
|
|
4761
5260
|
async function releaseBuildEnv(s) {
|
|
@@ -4768,6 +5267,7 @@ async function releaseBuildEnv(s) {
|
|
|
4768
5267
|
s.buildEnvDispose = null;
|
|
4769
5268
|
}
|
|
4770
5269
|
s.resolvedBuildEnv = void 0;
|
|
5270
|
+
delete globalThis[BUILD_ENV_GLOBAL_KEY];
|
|
4771
5271
|
}
|
|
4772
5272
|
function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
4773
5273
|
const s = createDiscoveryState(entryPath, opts);
|
|
@@ -4823,6 +5323,9 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4823
5323
|
const discoveryPromise = new Promise((resolve10) => {
|
|
4824
5324
|
resolveDiscovery = resolve10;
|
|
4825
5325
|
});
|
|
5326
|
+
const gate = createDiscoveryGate(s, debugDiscovery);
|
|
5327
|
+
const beginDiscoveryGate = gate.beginGate;
|
|
5328
|
+
const resolveDiscoveryGate = gate.resolveGate;
|
|
4826
5329
|
const getDevServerOrigin = () => server.resolvedUrls?.local?.[0]?.replace(/\/$/, "") || `http://localhost:${server.config.server.port || 5173}`;
|
|
4827
5330
|
let prerenderTempServer = null;
|
|
4828
5331
|
let prerenderNodeRegistry = null;
|
|
@@ -4835,40 +5338,180 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4835
5338
|
releaseBuildEnv(s).catch(() => {
|
|
4836
5339
|
});
|
|
4837
5340
|
});
|
|
5341
|
+
async function importEntryAndRegistry(tempRscEnv) {
|
|
5342
|
+
const flagAlreadySet = !!globalThis.__rscRouterDiscoveryActive;
|
|
5343
|
+
if (!flagAlreadySet) {
|
|
5344
|
+
globalThis.__rscRouterDiscoveryActive = true;
|
|
5345
|
+
}
|
|
5346
|
+
try {
|
|
5347
|
+
debugDiscovery?.(
|
|
5348
|
+
"importEntryAndRegistry: importing entry (flag=%s)",
|
|
5349
|
+
globalThis.__rscRouterDiscoveryActive ?? false
|
|
5350
|
+
);
|
|
5351
|
+
await tempRscEnv.runner.import(s.resolvedEntryPath);
|
|
5352
|
+
debugDiscovery?.(
|
|
5353
|
+
"importEntryAndRegistry: entry import OK, fetching RouterRegistry"
|
|
5354
|
+
);
|
|
5355
|
+
const serverMod = await tempRscEnv.runner.import(
|
|
5356
|
+
"@rangojs/router/server"
|
|
5357
|
+
);
|
|
5358
|
+
prerenderNodeRegistry = serverMod.RouterRegistry;
|
|
5359
|
+
debugDiscovery?.(
|
|
5360
|
+
"importEntryAndRegistry: registry size=%d",
|
|
5361
|
+
prerenderNodeRegistry?.size ?? 0
|
|
5362
|
+
);
|
|
5363
|
+
} finally {
|
|
5364
|
+
if (!flagAlreadySet) {
|
|
5365
|
+
delete globalThis.__rscRouterDiscoveryActive;
|
|
5366
|
+
debugDiscovery?.(
|
|
5367
|
+
"importEntryAndRegistry: cleared __rscRouterDiscoveryActive"
|
|
5368
|
+
);
|
|
5369
|
+
}
|
|
5370
|
+
}
|
|
5371
|
+
}
|
|
4838
5372
|
async function getOrCreateTempServer() {
|
|
4839
|
-
if (
|
|
4840
|
-
|
|
5373
|
+
if (prerenderTempServer) {
|
|
5374
|
+
const existingEnv = prerenderTempServer.environments?.rsc;
|
|
5375
|
+
if (existingEnv?.runner) {
|
|
5376
|
+
if (prerenderNodeRegistry) {
|
|
5377
|
+
debugDiscovery?.(
|
|
5378
|
+
"getOrCreateTempServer: cached temp runner reused"
|
|
5379
|
+
);
|
|
5380
|
+
return existingEnv;
|
|
5381
|
+
}
|
|
5382
|
+
debugDiscovery?.(
|
|
5383
|
+
"getOrCreateTempServer: server alive but registry missing \u2014 re-importing"
|
|
5384
|
+
);
|
|
5385
|
+
try {
|
|
5386
|
+
await importEntryAndRegistry(existingEnv);
|
|
5387
|
+
return existingEnv;
|
|
5388
|
+
} catch (err) {
|
|
5389
|
+
debugDiscovery?.(
|
|
5390
|
+
"getOrCreateTempServer: reuse import failed (%s) \u2014 closing orphan and creating fresh",
|
|
5391
|
+
err?.message ?? String(err)
|
|
5392
|
+
);
|
|
5393
|
+
await prerenderTempServer.close().catch(() => {
|
|
5394
|
+
});
|
|
5395
|
+
prerenderTempServer = null;
|
|
5396
|
+
prerenderNodeRegistry = null;
|
|
5397
|
+
}
|
|
5398
|
+
} else {
|
|
5399
|
+
debugDiscovery?.(
|
|
5400
|
+
"getOrCreateTempServer: existing server has no rsc.runner \u2014 closing and recreating"
|
|
5401
|
+
);
|
|
5402
|
+
await prerenderTempServer.close().catch(() => {
|
|
5403
|
+
});
|
|
5404
|
+
prerenderTempServer = null;
|
|
5405
|
+
prerenderNodeRegistry = null;
|
|
5406
|
+
}
|
|
4841
5407
|
}
|
|
5408
|
+
debugDiscovery?.(
|
|
5409
|
+
"getOrCreateTempServer: creating new temp server, entry=%s",
|
|
5410
|
+
s.resolvedEntryPath ?? "(unset)"
|
|
5411
|
+
);
|
|
4842
5412
|
try {
|
|
4843
5413
|
prerenderTempServer = await createTempRscServer(s, {
|
|
4844
5414
|
cacheDir: "node_modules/.vite_prerender"
|
|
4845
5415
|
});
|
|
4846
5416
|
const tempRscEnv = prerenderTempServer.environments?.rsc;
|
|
4847
5417
|
if (tempRscEnv?.runner) {
|
|
4848
|
-
await tempRscEnv
|
|
4849
|
-
const serverMod = await tempRscEnv.runner.import(
|
|
4850
|
-
"@rangojs/router/server"
|
|
4851
|
-
);
|
|
4852
|
-
prerenderNodeRegistry = serverMod.RouterRegistry;
|
|
5418
|
+
await importEntryAndRegistry(tempRscEnv);
|
|
4853
5419
|
return tempRscEnv;
|
|
4854
5420
|
}
|
|
5421
|
+
debugDiscovery?.(
|
|
5422
|
+
"getOrCreateTempServer: tempRscEnv.runner unavailable"
|
|
5423
|
+
);
|
|
4855
5424
|
} catch (err) {
|
|
5425
|
+
debugDiscovery?.(
|
|
5426
|
+
"getOrCreateTempServer: FAILED message=%s",
|
|
5427
|
+
err.message
|
|
5428
|
+
);
|
|
4856
5429
|
console.warn(
|
|
4857
5430
|
`[rsc-router] Failed to create temp runner: ${err.message}`
|
|
4858
5431
|
);
|
|
4859
5432
|
}
|
|
4860
5433
|
return null;
|
|
4861
5434
|
}
|
|
5435
|
+
async function clearTempRegistries(tempRscEnv) {
|
|
5436
|
+
try {
|
|
5437
|
+
const serverMod = await tempRscEnv.runner.import(
|
|
5438
|
+
"@rangojs/router/server"
|
|
5439
|
+
);
|
|
5440
|
+
if (typeof serverMod?.RouterRegistry?.clear === "function") {
|
|
5441
|
+
serverMod.RouterRegistry.clear();
|
|
5442
|
+
}
|
|
5443
|
+
if (typeof serverMod?.HostRouterRegistry?.clear === "function") {
|
|
5444
|
+
serverMod.HostRouterRegistry.clear();
|
|
5445
|
+
}
|
|
5446
|
+
debugDiscovery?.(
|
|
5447
|
+
"clearTempRegistries: cleared RouterRegistry + HostRouterRegistry"
|
|
5448
|
+
);
|
|
5449
|
+
} catch (err) {
|
|
5450
|
+
debugDiscovery?.(
|
|
5451
|
+
"clearTempRegistries: import @rangojs/router/server failed (%s)",
|
|
5452
|
+
err?.message ?? String(err)
|
|
5453
|
+
);
|
|
5454
|
+
}
|
|
5455
|
+
}
|
|
5456
|
+
async function refreshTempRscEnv() {
|
|
5457
|
+
let tempRscEnv = await getOrCreateTempServer();
|
|
5458
|
+
if (!tempRscEnv) return null;
|
|
5459
|
+
const envGraph = tempRscEnv.moduleGraph;
|
|
5460
|
+
const serverGraph = prerenderTempServer?.moduleGraph;
|
|
5461
|
+
const target = envGraph?.invalidateAll ? envGraph : serverGraph?.invalidateAll ? serverGraph : null;
|
|
5462
|
+
if (!target) {
|
|
5463
|
+
debugDiscovery?.(
|
|
5464
|
+
"refreshTempRscEnv: invalidateAll unavailable on env+server graphs, falling back to close+recreate"
|
|
5465
|
+
);
|
|
5466
|
+
if (prerenderTempServer) {
|
|
5467
|
+
await prerenderTempServer.close().catch(() => {
|
|
5468
|
+
});
|
|
5469
|
+
prerenderTempServer = null;
|
|
5470
|
+
prerenderNodeRegistry = null;
|
|
5471
|
+
}
|
|
5472
|
+
return await getOrCreateTempServer();
|
|
5473
|
+
}
|
|
5474
|
+
debugDiscovery?.(
|
|
5475
|
+
"refreshTempRscEnv: invalidating module graph (%s)",
|
|
5476
|
+
envGraph?.invalidateAll ? "env" : "server"
|
|
5477
|
+
);
|
|
5478
|
+
target.invalidateAll();
|
|
5479
|
+
prerenderNodeRegistry = null;
|
|
5480
|
+
await clearTempRegistries(tempRscEnv);
|
|
5481
|
+
await importEntryAndRegistry(tempRscEnv);
|
|
5482
|
+
return tempRscEnv;
|
|
5483
|
+
}
|
|
4862
5484
|
const discover = async () => {
|
|
5485
|
+
const discoverStart = performance.now();
|
|
4863
5486
|
const rscEnv = server.environments?.rsc;
|
|
4864
5487
|
if (!rscEnv?.runner) {
|
|
5488
|
+
debugDiscovery?.(
|
|
5489
|
+
"dev: cloudflare path start, __rscRouterDiscoveryActive=%s",
|
|
5490
|
+
globalThis.__rscRouterDiscoveryActive ?? false
|
|
5491
|
+
);
|
|
4865
5492
|
s.devServerOrigin = getDevServerOrigin();
|
|
4866
5493
|
try {
|
|
4867
|
-
await
|
|
4868
|
-
|
|
5494
|
+
await timed(
|
|
5495
|
+
debugDiscovery,
|
|
5496
|
+
"acquireBuildEnv",
|
|
5497
|
+
() => acquireBuildEnv(s, viteCommand, viteMode)
|
|
5498
|
+
);
|
|
5499
|
+
const tempRscEnv = await timed(
|
|
5500
|
+
debugDiscovery,
|
|
5501
|
+
"getOrCreateTempServer",
|
|
5502
|
+
() => getOrCreateTempServer()
|
|
5503
|
+
);
|
|
4869
5504
|
if (tempRscEnv) {
|
|
4870
|
-
await
|
|
4871
|
-
|
|
5505
|
+
await timed(
|
|
5506
|
+
debugDiscovery,
|
|
5507
|
+
"discoverRouters (cloudflare)",
|
|
5508
|
+
() => discoverRouters(s, tempRscEnv)
|
|
5509
|
+
);
|
|
5510
|
+
timedSync(
|
|
5511
|
+
debugDiscovery,
|
|
5512
|
+
"writeRouteTypesFiles",
|
|
5513
|
+
() => writeRouteTypesFiles(s)
|
|
5514
|
+
);
|
|
4872
5515
|
}
|
|
4873
5516
|
} catch (err) {
|
|
4874
5517
|
console.warn(
|
|
@@ -4876,33 +5519,62 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4876
5519
|
${err.stack}`
|
|
4877
5520
|
);
|
|
4878
5521
|
}
|
|
5522
|
+
debugDiscovery?.(
|
|
5523
|
+
"dev discovery done (%sms)",
|
|
5524
|
+
(performance.now() - discoverStart).toFixed(1)
|
|
5525
|
+
);
|
|
4879
5526
|
resolveDiscovery();
|
|
4880
5527
|
return;
|
|
4881
5528
|
}
|
|
4882
5529
|
try {
|
|
4883
|
-
|
|
4884
|
-
|
|
4885
|
-
|
|
5530
|
+
debugDiscovery?.("dev: node path start");
|
|
5531
|
+
await timed(
|
|
5532
|
+
debugDiscovery,
|
|
5533
|
+
"acquireBuildEnv",
|
|
5534
|
+
() => acquireBuildEnv(s, viteCommand, viteMode)
|
|
5535
|
+
);
|
|
5536
|
+
const serverMod = await timed(
|
|
5537
|
+
debugDiscovery,
|
|
5538
|
+
"import @rangojs/router/server",
|
|
5539
|
+
() => rscEnv.runner.import("@rangojs/router/server")
|
|
4886
5540
|
);
|
|
4887
5541
|
if (serverMod?.setManifestReadyPromise) {
|
|
4888
5542
|
serverMod.setManifestReadyPromise(discoveryPromise);
|
|
4889
5543
|
}
|
|
4890
|
-
await
|
|
5544
|
+
await timed(
|
|
5545
|
+
debugDiscovery,
|
|
5546
|
+
"discoverRouters",
|
|
5547
|
+
() => discoverRouters(s, rscEnv)
|
|
5548
|
+
);
|
|
4891
5549
|
s.devServerOrigin = getDevServerOrigin();
|
|
4892
|
-
|
|
4893
|
-
|
|
5550
|
+
timedSync(
|
|
5551
|
+
debugDiscovery,
|
|
5552
|
+
"writeRouteTypesFiles",
|
|
5553
|
+
() => writeRouteTypesFiles(s)
|
|
5554
|
+
);
|
|
5555
|
+
await timed(
|
|
5556
|
+
debugDiscovery,
|
|
5557
|
+
"propagateDiscoveryState",
|
|
5558
|
+
() => propagateDiscoveryState(rscEnv)
|
|
5559
|
+
);
|
|
4894
5560
|
} catch (err) {
|
|
4895
5561
|
console.warn(
|
|
4896
5562
|
`[rsc-router] Router discovery failed: ${err.message}
|
|
4897
5563
|
${err.stack}`
|
|
4898
5564
|
);
|
|
4899
5565
|
} finally {
|
|
5566
|
+
debugDiscovery?.(
|
|
5567
|
+
"dev discovery done (%sms)",
|
|
5568
|
+
(performance.now() - discoverStart).toFixed(1)
|
|
5569
|
+
);
|
|
4900
5570
|
resolveDiscovery();
|
|
4901
5571
|
}
|
|
4902
5572
|
};
|
|
4903
|
-
|
|
4904
|
-
|
|
4905
|
-
|
|
5573
|
+
beginDiscoveryGate();
|
|
5574
|
+
setTimeout(
|
|
5575
|
+
() => discover().then(resolveDiscoveryGate, resolveDiscoveryGate),
|
|
5576
|
+
0
|
|
5577
|
+
);
|
|
4906
5578
|
let mainRegistry = null;
|
|
4907
5579
|
const propagateDiscoveryState = async (rscEnv) => {
|
|
4908
5580
|
const serverMod = await rscEnv.runner.import("@rangojs/router/server");
|
|
@@ -4937,12 +5609,23 @@ ${err.stack}`
|
|
|
4937
5609
|
}
|
|
4938
5610
|
};
|
|
4939
5611
|
server.middlewares.use("/__rsc_prerender", async (req, res) => {
|
|
5612
|
+
const reqStart = debugDev ? performance.now() : 0;
|
|
5613
|
+
const logResult = (status, note) => {
|
|
5614
|
+
debugDev?.(
|
|
5615
|
+
"/__rsc_prerender %s -> %d %s (%sms)",
|
|
5616
|
+
req.url,
|
|
5617
|
+
status,
|
|
5618
|
+
note,
|
|
5619
|
+
(performance.now() - reqStart).toFixed(1)
|
|
5620
|
+
);
|
|
5621
|
+
};
|
|
4940
5622
|
if (s.discoveryDone) await s.discoveryDone;
|
|
4941
5623
|
const url = new URL(req.url || "/", "http://localhost");
|
|
4942
5624
|
const pathname = url.searchParams.get("pathname");
|
|
4943
5625
|
if (!pathname) {
|
|
4944
5626
|
res.statusCode = 400;
|
|
4945
5627
|
res.end("Missing pathname");
|
|
5628
|
+
logResult(400, "missing pathname");
|
|
4946
5629
|
return;
|
|
4947
5630
|
}
|
|
4948
5631
|
const rscEnv = server.environments?.rsc;
|
|
@@ -4960,6 +5643,7 @@ ${err.stack}`
|
|
|
4960
5643
|
);
|
|
4961
5644
|
res.statusCode = 500;
|
|
4962
5645
|
res.end(`Prerender handler error: ${err.message}`);
|
|
5646
|
+
logResult(500, "module refresh failed");
|
|
4963
5647
|
return;
|
|
4964
5648
|
}
|
|
4965
5649
|
} else {
|
|
@@ -4974,6 +5658,7 @@ ${err.stack}`
|
|
|
4974
5658
|
if (!registry || registry.size === 0) {
|
|
4975
5659
|
res.statusCode = 503;
|
|
4976
5660
|
res.end("Prerender runner not available");
|
|
5661
|
+
logResult(503, "no registry");
|
|
4977
5662
|
return;
|
|
4978
5663
|
}
|
|
4979
5664
|
const wantIntercept = url.searchParams.get("intercept") === "1";
|
|
@@ -5008,6 +5693,7 @@ ${err.stack}`
|
|
|
5008
5693
|
payload = { segments: result.segments, handles: result.handles };
|
|
5009
5694
|
}
|
|
5010
5695
|
res.end(JSON.stringify(payload));
|
|
5696
|
+
logResult(200, `match ${result.routeName}`);
|
|
5011
5697
|
return;
|
|
5012
5698
|
} catch (err) {
|
|
5013
5699
|
console.warn(
|
|
@@ -5017,6 +5703,7 @@ ${err.stack}`
|
|
|
5017
5703
|
}
|
|
5018
5704
|
res.statusCode = 404;
|
|
5019
5705
|
res.end("No prerender match");
|
|
5706
|
+
logResult(404, "no match");
|
|
5020
5707
|
});
|
|
5021
5708
|
if (opts?.staticRouteTypesGeneration !== false) {
|
|
5022
5709
|
const isGeneratedRouteFile = (filePath) => filePath.endsWith(".gen.ts") && (filePath.includes("named-routes.gen.ts") || filePath.includes("urls.gen.ts"));
|
|
@@ -5036,42 +5723,96 @@ ${err.stack}`
|
|
|
5036
5723
|
return true;
|
|
5037
5724
|
};
|
|
5038
5725
|
let routeChangeTimer;
|
|
5039
|
-
let runtimeRediscoveryInProgress = false;
|
|
5040
5726
|
const refreshRuntimeDiscovery = async () => {
|
|
5041
5727
|
const rscEnv = server.environments?.rsc;
|
|
5042
|
-
|
|
5043
|
-
|
|
5044
|
-
|
|
5045
|
-
|
|
5046
|
-
|
|
5047
|
-
|
|
5048
|
-
|
|
5049
|
-
|
|
5050
|
-
|
|
5051
|
-
|
|
5052
|
-
|
|
5053
|
-
|
|
5054
|
-
|
|
5728
|
+
const hasMainRunner = !!rscEnv?.runner;
|
|
5729
|
+
if (!hasMainRunner && s.perRouterManifests.length === 0) return;
|
|
5730
|
+
await gate.runRefreshCycle(async () => {
|
|
5731
|
+
const hmrStart = performance.now();
|
|
5732
|
+
try {
|
|
5733
|
+
if (hasMainRunner) {
|
|
5734
|
+
await timed(
|
|
5735
|
+
debugDiscovery,
|
|
5736
|
+
"hmr discoverRouters",
|
|
5737
|
+
() => discoverRouters(s, rscEnv)
|
|
5738
|
+
);
|
|
5739
|
+
timedSync(
|
|
5740
|
+
debugDiscovery,
|
|
5741
|
+
"hmr writeRouteTypesFiles",
|
|
5742
|
+
() => writeRouteTypesFiles(s)
|
|
5743
|
+
);
|
|
5744
|
+
await timed(
|
|
5745
|
+
debugDiscovery,
|
|
5746
|
+
"hmr propagateDiscoveryState",
|
|
5747
|
+
() => propagateDiscoveryState(rscEnv)
|
|
5748
|
+
);
|
|
5749
|
+
} else {
|
|
5750
|
+
const tempRscEnv = await timed(
|
|
5751
|
+
debugDiscovery,
|
|
5752
|
+
"hmr refreshTempRscEnv (cloudflare)",
|
|
5753
|
+
() => refreshTempRscEnv()
|
|
5754
|
+
);
|
|
5755
|
+
if (!tempRscEnv) {
|
|
5756
|
+
throw new Error(
|
|
5757
|
+
"temp runner unavailable for cloudflare HMR rediscovery"
|
|
5758
|
+
);
|
|
5759
|
+
}
|
|
5760
|
+
await timed(
|
|
5761
|
+
debugDiscovery,
|
|
5762
|
+
"hmr discoverRouters (cloudflare)",
|
|
5763
|
+
() => discoverRouters(s, tempRscEnv)
|
|
5764
|
+
);
|
|
5765
|
+
timedSync(
|
|
5766
|
+
debugDiscovery,
|
|
5767
|
+
"hmr writeRouteTypesFiles",
|
|
5768
|
+
() => writeRouteTypesFiles(s)
|
|
5769
|
+
);
|
|
5770
|
+
}
|
|
5771
|
+
} catch (err) {
|
|
5772
|
+
console.warn(
|
|
5773
|
+
`[rsc-router] Runtime re-discovery failed: ${err.message}`
|
|
5774
|
+
);
|
|
5775
|
+
} finally {
|
|
5776
|
+
debugDiscovery?.(
|
|
5777
|
+
"hmr re-discovery done (%sms)",
|
|
5778
|
+
(performance.now() - hmrStart).toFixed(1)
|
|
5779
|
+
);
|
|
5780
|
+
}
|
|
5781
|
+
});
|
|
5055
5782
|
};
|
|
5056
5783
|
const scheduleRouteRegeneration = () => {
|
|
5057
5784
|
clearTimeout(routeChangeTimer);
|
|
5058
5785
|
routeChangeTimer = setTimeout(() => {
|
|
5059
5786
|
routeChangeTimer = void 0;
|
|
5787
|
+
const regenStart = debugDiscovery ? performance.now() : 0;
|
|
5788
|
+
const rscEnv = server.environments?.rsc;
|
|
5789
|
+
const skipStaticWrite = !rscEnv?.runner && s.perRouterManifests.length > 0;
|
|
5060
5790
|
try {
|
|
5061
|
-
|
|
5062
|
-
|
|
5063
|
-
|
|
5791
|
+
if (skipStaticWrite) {
|
|
5792
|
+
debugDiscovery?.(
|
|
5793
|
+
"watcher: skipping static write (cloudflare HMR \u2014 runtime rediscovery owns gen file)"
|
|
5794
|
+
);
|
|
5795
|
+
} else {
|
|
5796
|
+
writeCombinedRouteTypesWithTracking(s);
|
|
5797
|
+
if (s.perRouterManifests.length > 0) {
|
|
5798
|
+
supplementGenFilesWithRuntimeRoutes(s);
|
|
5799
|
+
}
|
|
5064
5800
|
}
|
|
5065
5801
|
} catch (err) {
|
|
5066
5802
|
console.error(
|
|
5067
5803
|
`[rsc-router] Route regeneration error: ${err.message}`
|
|
5068
5804
|
);
|
|
5069
5805
|
}
|
|
5806
|
+
debugDiscovery?.(
|
|
5807
|
+
"watcher: regenerated gen files (%sms)",
|
|
5808
|
+
(performance.now() - regenStart).toFixed(1)
|
|
5809
|
+
);
|
|
5070
5810
|
if (s.perRouterManifests.length > 0) {
|
|
5071
5811
|
refreshRuntimeDiscovery().catch((err) => {
|
|
5072
5812
|
console.warn(
|
|
5073
5813
|
`[rsc-router] Runtime re-discovery error: ${err.message}`
|
|
5074
5814
|
);
|
|
5815
|
+
resolveDiscoveryGate();
|
|
5075
5816
|
});
|
|
5076
5817
|
}
|
|
5077
5818
|
}, 100);
|
|
@@ -5089,6 +5830,12 @@ ${err.stack}`
|
|
|
5089
5830
|
const hasUrls = source.includes("urls(");
|
|
5090
5831
|
const hasCreateRouter = /\bcreateRouter\s*[<(]/.test(source);
|
|
5091
5832
|
if (!hasUrls && !hasCreateRouter) return;
|
|
5833
|
+
debugDiscovery?.(
|
|
5834
|
+
"watcher: %s matches (urls=%s, router=%s)",
|
|
5835
|
+
filePath,
|
|
5836
|
+
hasUrls,
|
|
5837
|
+
hasCreateRouter
|
|
5838
|
+
);
|
|
5092
5839
|
if (hasCreateRouter) {
|
|
5093
5840
|
const nestedRouterConflict = findNestedRouterConflict([
|
|
5094
5841
|
...s.cachedRouterFiles ?? [],
|
|
@@ -5102,6 +5849,9 @@ ${err.stack}`
|
|
|
5102
5849
|
}
|
|
5103
5850
|
s.cachedRouterFiles = void 0;
|
|
5104
5851
|
}
|
|
5852
|
+
if (s.perRouterManifests.length > 0) {
|
|
5853
|
+
gate.noteRouteEvent();
|
|
5854
|
+
}
|
|
5105
5855
|
scheduleRouteRegeneration();
|
|
5106
5856
|
} catch {
|
|
5107
5857
|
}
|
|
@@ -5121,15 +5871,31 @@ ${err.stack}`
|
|
|
5121
5871
|
// The manifest data is stored for the virtual module's load hook.
|
|
5122
5872
|
async buildStart() {
|
|
5123
5873
|
if (!s.isBuildMode) return;
|
|
5124
|
-
if (s.mergedRouteManifest !== null)
|
|
5874
|
+
if (s.mergedRouteManifest !== null) {
|
|
5875
|
+
debugDiscovery?.(
|
|
5876
|
+
"build: skip (already discovered, env=%s)",
|
|
5877
|
+
this.environment?.name ?? "?"
|
|
5878
|
+
);
|
|
5879
|
+
return;
|
|
5880
|
+
}
|
|
5881
|
+
const buildStartTime = performance.now();
|
|
5882
|
+
debugDiscovery?.("build: start (env=%s)", this.environment?.name ?? "?");
|
|
5125
5883
|
resetStagedBuildAssets(s.projectRoot);
|
|
5126
5884
|
s.prerenderManifestEntries = null;
|
|
5127
5885
|
s.staticManifestEntries = null;
|
|
5128
|
-
await
|
|
5886
|
+
await timed(
|
|
5887
|
+
debugDiscovery,
|
|
5888
|
+
"build acquireBuildEnv",
|
|
5889
|
+
() => acquireBuildEnv(s, viteCommand, viteMode)
|
|
5890
|
+
);
|
|
5129
5891
|
let tempServer = null;
|
|
5130
5892
|
globalThis.__rscRouterDiscoveryActive = true;
|
|
5131
5893
|
try {
|
|
5132
|
-
tempServer = await
|
|
5894
|
+
tempServer = await timed(
|
|
5895
|
+
debugDiscovery,
|
|
5896
|
+
"build createTempRscServer",
|
|
5897
|
+
() => createTempRscServer(s, { forceBuild: true })
|
|
5898
|
+
);
|
|
5133
5899
|
const rscEnv = tempServer.environments?.rsc;
|
|
5134
5900
|
if (!rscEnv?.runner) {
|
|
5135
5901
|
console.warn(
|
|
@@ -5143,8 +5909,16 @@ ${err.stack}`
|
|
|
5143
5909
|
if (tempIdsPlugin?.api?.staticHandlerModules) {
|
|
5144
5910
|
s.resolvedStaticModules = tempIdsPlugin.api.staticHandlerModules;
|
|
5145
5911
|
}
|
|
5146
|
-
await
|
|
5147
|
-
|
|
5912
|
+
await timed(
|
|
5913
|
+
debugDiscovery,
|
|
5914
|
+
"build discoverRouters",
|
|
5915
|
+
() => discoverRouters(s, rscEnv)
|
|
5916
|
+
);
|
|
5917
|
+
timedSync(
|
|
5918
|
+
debugDiscovery,
|
|
5919
|
+
"build writeRouteTypesFiles",
|
|
5920
|
+
() => writeRouteTypesFiles(s)
|
|
5921
|
+
);
|
|
5148
5922
|
} catch (err) {
|
|
5149
5923
|
const sourceFile = err.stack?.split("\n").find(
|
|
5150
5924
|
(line) => line.includes(s.projectRoot) && !line.includes("node_modules")
|
|
@@ -5163,9 +5937,45 @@ ${details}`
|
|
|
5163
5937
|
} finally {
|
|
5164
5938
|
delete globalThis.__rscRouterDiscoveryActive;
|
|
5165
5939
|
if (tempServer) {
|
|
5166
|
-
await
|
|
5940
|
+
await timed(
|
|
5941
|
+
debugDiscovery,
|
|
5942
|
+
"build tempServer.close",
|
|
5943
|
+
() => tempServer.close()
|
|
5944
|
+
);
|
|
5167
5945
|
}
|
|
5168
5946
|
await releaseBuildEnv(s);
|
|
5947
|
+
debugDiscovery?.(
|
|
5948
|
+
"build discovery done (%sms)",
|
|
5949
|
+
(performance.now() - buildStartTime).toFixed(1)
|
|
5950
|
+
);
|
|
5951
|
+
}
|
|
5952
|
+
},
|
|
5953
|
+
// Suppress vite's HMR cascade for our own gen-file writes.
|
|
5954
|
+
//
|
|
5955
|
+
// After every cf HMR cycle, refreshTempRscEnv → writeRouteTypesFiles
|
|
5956
|
+
// writes the configured gen files (default `router.named-routes.gen.ts`,
|
|
5957
|
+
// but the source filenames and gen suffix are user-configurable). The
|
|
5958
|
+
// chokidar watcher then fires twice independently: our
|
|
5959
|
+
// `handleRouteFileChange` (already short-circuited by
|
|
5960
|
+
// `consumeSelfGenWrite` inside `maybeHandleGeneratedRouteFileMutation`),
|
|
5961
|
+
// AND vite's own HMR pipeline (which invalidates the gen file's
|
|
5962
|
+
// importers and triggers a second workerd full reload — visible to the
|
|
5963
|
+
// user as a duplicate "[RSCRouter] HMR: version changed" on the client).
|
|
5964
|
+
//
|
|
5965
|
+
// `peekSelfGenWrite` is the authoritative filter: its map only contains
|
|
5966
|
+
// paths that `markSelfGenWrite` has registered, so it natively works
|
|
5967
|
+
// for any configured gen-file name. It is non-consuming so the chokidar
|
|
5968
|
+
// handler that fires later can still consume the same entry. Returning
|
|
5969
|
+
// [] tells vite "no modules invalidated by this change" — safe because
|
|
5970
|
+
// `s.perRouterManifests` is already up-to-date (the write that just
|
|
5971
|
+
// happened is the consequence of our just-completed rediscovery).
|
|
5972
|
+
handleHotUpdate(ctx) {
|
|
5973
|
+
if (peekSelfGenWrite(s, ctx.file)) {
|
|
5974
|
+
debugDiscovery?.(
|
|
5975
|
+
"handleHotUpdate: suppressing self-write HMR cascade for %s",
|
|
5976
|
+
ctx.file
|
|
5977
|
+
);
|
|
5978
|
+
return [];
|
|
5169
5979
|
}
|
|
5170
5980
|
},
|
|
5171
5981
|
// Virtual module: provides the pre-generated route manifest as a JS module
|
|
@@ -5182,17 +5992,36 @@ ${details}`
|
|
|
5182
5992
|
async load(id) {
|
|
5183
5993
|
if (id === "\0" + VIRTUAL_ROUTES_MANIFEST_ID) {
|
|
5184
5994
|
if (s.discoveryDone) {
|
|
5185
|
-
await
|
|
5995
|
+
await timed(
|
|
5996
|
+
debugRoutes,
|
|
5997
|
+
"await discoveryDone (manifest)",
|
|
5998
|
+
() => s.discoveryDone
|
|
5999
|
+
);
|
|
5186
6000
|
}
|
|
5187
|
-
|
|
6001
|
+
const code = await timed(
|
|
6002
|
+
debugRoutes,
|
|
6003
|
+
"generateRoutesManifestModule",
|
|
6004
|
+
() => generateRoutesManifestModule(s)
|
|
6005
|
+
);
|
|
6006
|
+
debugRoutes?.("manifest module emitted (%d bytes)", code?.length ?? 0);
|
|
6007
|
+
return code;
|
|
5188
6008
|
}
|
|
5189
6009
|
const perRouterPrefix = "\0" + VIRTUAL_ROUTES_MANIFEST_ID + "/";
|
|
5190
6010
|
if (id.startsWith(perRouterPrefix)) {
|
|
5191
6011
|
if (s.discoveryDone) {
|
|
5192
|
-
await
|
|
6012
|
+
await timed(
|
|
6013
|
+
debugRoutes,
|
|
6014
|
+
"await discoveryDone (per-router)",
|
|
6015
|
+
() => s.discoveryDone
|
|
6016
|
+
);
|
|
5193
6017
|
}
|
|
5194
6018
|
const routerId = id.slice(perRouterPrefix.length);
|
|
5195
|
-
|
|
6019
|
+
const code = await timed(
|
|
6020
|
+
debugRoutes,
|
|
6021
|
+
`generatePerRouterModule ${routerId}`,
|
|
6022
|
+
() => generatePerRouterModule(s, routerId)
|
|
6023
|
+
);
|
|
6024
|
+
return code;
|
|
5196
6025
|
}
|
|
5197
6026
|
return null;
|
|
5198
6027
|
},
|
|
@@ -5200,14 +6029,20 @@ ${details}`
|
|
|
5200
6029
|
// Used by closeBundle for handler code eviction and prerender data injection.
|
|
5201
6030
|
generateBundle(_options, bundle) {
|
|
5202
6031
|
if (this.environment?.name !== "rsc") return;
|
|
6032
|
+
const genStart = debugBuild ? performance.now() : 0;
|
|
5203
6033
|
for (const [fileName, chunk] of Object.entries(bundle)) {
|
|
5204
6034
|
if (chunk.type === "chunk" && chunk.isEntry) {
|
|
5205
6035
|
s.rscEntryFileName = fileName;
|
|
5206
6036
|
break;
|
|
5207
6037
|
}
|
|
5208
6038
|
}
|
|
5209
|
-
if (!s.resolvedPrerenderModules?.size && !s.resolvedStaticModules?.size)
|
|
6039
|
+
if (!s.resolvedPrerenderModules?.size && !s.resolvedStaticModules?.size) {
|
|
6040
|
+
debugBuild?.(
|
|
6041
|
+
"generateBundle (rsc): no handlers to scan (%sms)",
|
|
6042
|
+
(performance.now() - genStart).toFixed(1)
|
|
6043
|
+
);
|
|
5210
6044
|
return;
|
|
6045
|
+
}
|
|
5211
6046
|
s.handlerChunkInfoMap.clear();
|
|
5212
6047
|
s.staticHandlerChunkInfoMap.clear();
|
|
5213
6048
|
for (const [fileName, chunk] of Object.entries(bundle)) {
|
|
@@ -5251,6 +6086,13 @@ ${details}`
|
|
|
5251
6086
|
}
|
|
5252
6087
|
}
|
|
5253
6088
|
}
|
|
6089
|
+
debugBuild?.(
|
|
6090
|
+
"generateBundle (rsc): scanned %d chunks, %d prerender chunk(s), %d static chunk(s) (%sms)",
|
|
6091
|
+
Object.keys(bundle).length,
|
|
6092
|
+
s.handlerChunkInfoMap.size,
|
|
6093
|
+
s.staticHandlerChunkInfoMap.size,
|
|
6094
|
+
(performance.now() - genStart).toFixed(1)
|
|
6095
|
+
);
|
|
5254
6096
|
},
|
|
5255
6097
|
// Build-time pre-rendering: evict handler code and inject collected prerender data.
|
|
5256
6098
|
// Collection now happens in-process during discoverRouters() via RSC runner.
|
|
@@ -5261,29 +6103,41 @@ ${details}`
|
|
|
5261
6103
|
async handler() {
|
|
5262
6104
|
if (!s.isBuildMode) return;
|
|
5263
6105
|
if (this.environment && this.environment.name !== "rsc") return;
|
|
5264
|
-
|
|
6106
|
+
timedSync(
|
|
6107
|
+
debugBuild,
|
|
6108
|
+
"closeBundle postprocessBundle",
|
|
6109
|
+
() => postprocessBundle(s)
|
|
6110
|
+
);
|
|
5265
6111
|
}
|
|
5266
6112
|
}
|
|
5267
6113
|
};
|
|
5268
6114
|
}
|
|
5269
6115
|
|
|
5270
6116
|
// src/vite/rango.ts
|
|
6117
|
+
var debugConfig = createRangoDebugger(NS.config);
|
|
5271
6118
|
async function rango(options) {
|
|
6119
|
+
const rangoStart = performance.now();
|
|
5272
6120
|
const resolvedOptions = options ?? { preset: "node" };
|
|
5273
6121
|
const preset = resolvedOptions.preset ?? "node";
|
|
5274
6122
|
const showBanner = resolvedOptions.banner ?? true;
|
|
6123
|
+
debugConfig?.("rango(%s) setup start", preset);
|
|
5275
6124
|
const plugins = [];
|
|
5276
|
-
const rangoAliases = getPackageAliases();
|
|
6125
|
+
const rangoAliases = { ...getPackageAliases(), ...getVendorAliases() };
|
|
5277
6126
|
const excludeDeps = [
|
|
5278
6127
|
...getExcludeDeps(),
|
|
5279
|
-
//
|
|
5280
|
-
//
|
|
5281
|
-
// .
|
|
6128
|
+
// plugin-rsc itself injects these into the client env's
|
|
6129
|
+
// optimizeDeps.include, which overrides exclude for the dep's own
|
|
6130
|
+
// pre-bundle entry. What exclude still controls is how *other*
|
|
6131
|
+
// pre-bundled deps treat imports of these specs (external vs inlined)
|
|
6132
|
+
// via esbuildCjsExternalPlugin. The cjs-to-esm transform in
|
|
6133
|
+
// plugins/cjs-to-esm.ts is the fallback for strict-pnpm consumers,
|
|
6134
|
+
// where client.browser's bare include fails to resolve and Vite ends up
|
|
6135
|
+
// serving the raw CJS file at dev-serve time.
|
|
5282
6136
|
"@vitejs/plugin-rsc/browser",
|
|
5283
|
-
// Keep the browser RSDW client out of Vite's dep optimizer so our
|
|
5284
|
-
// cjs-to-esm transform can patch the real file.
|
|
5285
6137
|
"@vitejs/plugin-rsc/vendor/react-server-dom/client.browser"
|
|
5286
6138
|
];
|
|
6139
|
+
const pkg = getPublishedPackageName();
|
|
6140
|
+
const nested = (spec) => `${pkg} > ${spec}`;
|
|
5287
6141
|
const routerRef = { path: void 0 };
|
|
5288
6142
|
const prerenderEnabled = true;
|
|
5289
6143
|
if (preset === "cloudflare") {
|
|
@@ -5321,7 +6175,7 @@ async function rango(options) {
|
|
|
5321
6175
|
// Pre-bundle rsc-html-stream to prevent discovery during first request
|
|
5322
6176
|
// Exclude rsc-router modules to ensure same Context instance
|
|
5323
6177
|
optimizeDeps: {
|
|
5324
|
-
include: ["rsc-html-stream/client"],
|
|
6178
|
+
include: [nested("rsc-html-stream/client")],
|
|
5325
6179
|
exclude: excludeDeps,
|
|
5326
6180
|
esbuildOptions: sharedEsbuildOptions
|
|
5327
6181
|
}
|
|
@@ -5346,8 +6200,10 @@ async function rango(options) {
|
|
|
5346
6200
|
"react-dom/static.edge",
|
|
5347
6201
|
"react/jsx-runtime",
|
|
5348
6202
|
"react/jsx-dev-runtime",
|
|
5349
|
-
"rsc-html-stream/server",
|
|
5350
|
-
|
|
6203
|
+
nested("rsc-html-stream/server"),
|
|
6204
|
+
nested(
|
|
6205
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
|
|
6206
|
+
)
|
|
5351
6207
|
],
|
|
5352
6208
|
exclude: excludeDeps,
|
|
5353
6209
|
esbuildOptions: sharedEsbuildOptions
|
|
@@ -5362,7 +6218,9 @@ async function rango(options) {
|
|
|
5362
6218
|
"react",
|
|
5363
6219
|
"react/jsx-runtime",
|
|
5364
6220
|
"react/jsx-dev-runtime",
|
|
5365
|
-
|
|
6221
|
+
nested(
|
|
6222
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
|
|
6223
|
+
)
|
|
5366
6224
|
],
|
|
5367
6225
|
exclude: excludeDeps,
|
|
5368
6226
|
esbuildOptions: sharedEsbuildOptions
|
|
@@ -5443,7 +6301,7 @@ ${list}`);
|
|
|
5443
6301
|
"react-dom",
|
|
5444
6302
|
"react/jsx-runtime",
|
|
5445
6303
|
"react/jsx-dev-runtime",
|
|
5446
|
-
"rsc-html-stream/client"
|
|
6304
|
+
nested("rsc-html-stream/client")
|
|
5447
6305
|
],
|
|
5448
6306
|
exclude: excludeDeps,
|
|
5449
6307
|
esbuildOptions: sharedEsbuildOptions,
|
|
@@ -5460,7 +6318,9 @@ ${list}`);
|
|
|
5460
6318
|
"react-dom/static.edge",
|
|
5461
6319
|
"react/jsx-runtime",
|
|
5462
6320
|
"react/jsx-dev-runtime",
|
|
5463
|
-
|
|
6321
|
+
nested(
|
|
6322
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
|
|
6323
|
+
)
|
|
5464
6324
|
],
|
|
5465
6325
|
exclude: excludeDeps,
|
|
5466
6326
|
esbuildOptions: sharedEsbuildOptions
|
|
@@ -5473,7 +6333,9 @@ ${list}`);
|
|
|
5473
6333
|
"react",
|
|
5474
6334
|
"react/jsx-runtime",
|
|
5475
6335
|
"react/jsx-dev-runtime",
|
|
5476
|
-
|
|
6336
|
+
nested(
|
|
6337
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
|
|
6338
|
+
)
|
|
5477
6339
|
],
|
|
5478
6340
|
esbuildOptions: sharedEsbuildOptions
|
|
5479
6341
|
}
|
|
@@ -5543,6 +6405,12 @@ ${list}`);
|
|
|
5543
6405
|
preset
|
|
5544
6406
|
})
|
|
5545
6407
|
);
|
|
6408
|
+
debugConfig?.(
|
|
6409
|
+
"rango(%s) setup done: %d plugin(s) (%sms)",
|
|
6410
|
+
preset,
|
|
6411
|
+
plugins.length,
|
|
6412
|
+
(performance.now() - rangoStart).toFixed(1)
|
|
6413
|
+
);
|
|
5546
6414
|
return plugins;
|
|
5547
6415
|
}
|
|
5548
6416
|
|
|
@@ -5553,7 +6421,7 @@ function poke() {
|
|
|
5553
6421
|
apply: "serve",
|
|
5554
6422
|
configureServer(server) {
|
|
5555
6423
|
const stdin = process.stdin;
|
|
5556
|
-
const
|
|
6424
|
+
const debug11 = process.env.RANGO_POKE_DEBUG === "1";
|
|
5557
6425
|
const triggerReload = (source) => {
|
|
5558
6426
|
server.hot.send({ type: "full-reload", path: "*" });
|
|
5559
6427
|
server.config.logger.info(` browser reload (${source})`, {
|
|
@@ -5586,7 +6454,7 @@ function poke() {
|
|
|
5586
6454
|
lines.pop();
|
|
5587
6455
|
return lines;
|
|
5588
6456
|
};
|
|
5589
|
-
if (
|
|
6457
|
+
if (debug11) {
|
|
5590
6458
|
server.config.logger.info(
|
|
5591
6459
|
` poke debug enabled (isTTY=${stdin.isTTY ? "yes" : "no"}, isRaw=${stdin.isTTY ? stdin.isRaw ? "yes" : "no" : "n/a"})`,
|
|
5592
6460
|
{ timestamp: true }
|
|
@@ -5599,7 +6467,7 @@ function poke() {
|
|
|
5599
6467
|
);
|
|
5600
6468
|
}
|
|
5601
6469
|
const onData = (data) => {
|
|
5602
|
-
if (
|
|
6470
|
+
if (debug11) {
|
|
5603
6471
|
server.config.logger.info(` poke stdin ${formatChunk(data)}`, {
|
|
5604
6472
|
timestamp: true
|
|
5605
6473
|
});
|