@rangojs/router 0.0.0-experimental.ea6d5eec → 0.0.0-experimental.eb0645d3
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 +124 -38
- 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 +130 -47
- 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 +845 -241
- 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 +4 -4
- package/skills/cache-guide/SKILL.md +32 -0
- package/skills/caching/SKILL.md +8 -0
- package/skills/handler-use/SKILL.md +362 -0
- package/skills/hooks/SKILL.md +25 -19
- package/skills/intercept/SKILL.md +20 -0
- package/skills/layout/SKILL.md +22 -0
- package/skills/links/SKILL.md +77 -12
- package/skills/loader/SKILL.md +53 -43
- package/skills/middleware/SKILL.md +34 -3
- package/skills/migrate-nextjs/SKILL.md +560 -0
- package/skills/migrate-react-router/SKILL.md +765 -0
- package/skills/parallel/SKILL.md +185 -0
- package/skills/prerender/SKILL.md +110 -68
- package/skills/rango/SKILL.md +24 -22
- package/skills/response-routes/SKILL.md +8 -0
- package/skills/route/SKILL.md +55 -0
- package/skills/router-setup/SKILL.md +87 -2
- package/skills/streams-and-websockets/SKILL.md +283 -0
- package/skills/typesafety/SKILL.md +10 -0
- package/src/__internal.ts +1 -1
- package/src/browser/app-version.ts +14 -0
- package/src/browser/event-controller.ts +5 -0
- package/src/browser/navigation-bridge.ts +37 -5
- package/src/browser/navigation-client.ts +132 -77
- package/src/browser/navigation-store.ts +43 -8
- package/src/browser/partial-update.ts +51 -6
- package/src/browser/prefetch/cache.ts +118 -26
- package/src/browser/prefetch/fetch.ts +168 -31
- package/src/browser/prefetch/queue.ts +92 -29
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/react/Link.tsx +72 -8
- package/src/browser/react/NavigationProvider.tsx +19 -6
- package/src/browser/react/context.ts +7 -2
- package/src/browser/react/use-handle.ts +9 -58
- package/src/browser/react/use-navigation.ts +22 -2
- package/src/browser/react/use-params.ts +11 -1
- package/src/browser/react/use-router.ts +21 -8
- package/src/browser/rsc-router.tsx +45 -3
- package/src/browser/scroll-restoration.ts +10 -8
- package/src/browser/segment-reconciler.ts +36 -9
- package/src/browser/server-action-bridge.ts +8 -6
- package/src/browser/types.ts +27 -5
- package/src/build/generate-manifest.ts +6 -6
- package/src/build/generate-route-types.ts +3 -0
- package/src/build/route-trie.ts +50 -24
- package/src/build/route-types/include-resolution.ts +8 -1
- package/src/build/route-types/router-processing.ts +211 -72
- package/src/build/route-types/scan-filter.ts +8 -1
- package/src/cache/cache-runtime.ts +15 -11
- package/src/cache/cache-scope.ts +46 -5
- package/src/cache/document-cache.ts +17 -7
- package/src/cache/taint.ts +55 -0
- package/src/client.tsx +84 -230
- package/src/context-var.ts +72 -2
- package/src/debug.ts +2 -2
- package/src/handle.ts +40 -0
- package/src/index.rsc.ts +3 -1
- package/src/index.ts +46 -6
- package/src/prerender/store.ts +5 -4
- package/src/prerender.ts +138 -77
- package/src/response-utils.ts +28 -0
- package/src/reverse.ts +27 -2
- package/src/route-definition/dsl-helpers.ts +224 -37
- package/src/route-definition/helpers-types.ts +67 -19
- package/src/route-definition/index.ts +3 -0
- package/src/route-definition/redirect.ts +9 -1
- package/src/route-definition/resolve-handler-use.ts +149 -0
- package/src/route-types.ts +18 -0
- package/src/router/content-negotiation.ts +100 -1
- package/src/router/handler-context.ts +84 -24
- package/src/router/intercept-resolution.ts +9 -4
- package/src/router/lazy-includes.ts +7 -6
- package/src/router/loader-resolution.ts +156 -21
- package/src/router/logging.ts +1 -1
- package/src/router/manifest.ts +28 -15
- package/src/router/match-api.ts +124 -189
- package/src/router/match-middleware/background-revalidation.ts +30 -2
- package/src/router/match-middleware/cache-lookup.ts +94 -17
- package/src/router/match-middleware/cache-store.ts +53 -10
- package/src/router/match-middleware/intercept-resolution.ts +9 -7
- package/src/router/match-middleware/segment-resolution.ts +60 -5
- package/src/router/match-result.ts +104 -10
- package/src/router/metrics.ts +6 -1
- package/src/router/middleware-types.ts +6 -8
- package/src/router/middleware.ts +24 -8
- package/src/router/navigation-snapshot.ts +182 -0
- package/src/router/pattern-matching.ts +60 -9
- package/src/router/prerender-match.ts +110 -10
- package/src/router/preview-match.ts +30 -102
- package/src/router/request-classification.ts +310 -0
- package/src/router/route-snapshot.ts +245 -0
- package/src/router/router-context.ts +1 -0
- package/src/router/router-interfaces.ts +36 -4
- package/src/router/router-options.ts +37 -11
- package/src/router/segment-resolution/fresh.ts +198 -20
- package/src/router/segment-resolution/helpers.ts +29 -24
- package/src/router/segment-resolution/loader-cache.ts +1 -0
- package/src/router/segment-resolution/revalidation.ts +433 -296
- package/src/router/trie-matching.ts +10 -4
- package/src/router/types.ts +1 -0
- package/src/router/url-params.ts +49 -0
- package/src/router.ts +55 -6
- package/src/rsc/handler.ts +476 -373
- package/src/rsc/helpers.ts +69 -41
- package/src/rsc/loader-fetch.ts +23 -3
- package/src/rsc/manifest-init.ts +5 -1
- package/src/rsc/progressive-enhancement.ts +16 -2
- package/src/rsc/response-route-handler.ts +11 -1
- package/src/rsc/rsc-rendering.ts +17 -1
- package/src/rsc/server-action.ts +10 -0
- package/src/rsc/ssr-setup.ts +2 -2
- package/src/rsc/types.ts +9 -1
- package/src/segment-content-promise.ts +67 -0
- package/src/segment-loader-promise.ts +122 -0
- package/src/segment-system.tsx +109 -23
- package/src/server/context.ts +166 -17
- package/src/server/handle-store.ts +19 -0
- package/src/server/loader-registry.ts +9 -8
- package/src/server/request-context.ts +175 -15
- package/src/ssr/index.tsx +4 -0
- package/src/static-handler.ts +18 -6
- package/src/types/cache-types.ts +4 -4
- package/src/types/handler-context.ts +137 -33
- package/src/types/loader-types.ts +36 -9
- package/src/types/route-entry.ts +12 -1
- package/src/types/segments.ts +2 -0
- package/src/urls/include-helper.ts +24 -14
- package/src/urls/path-helper-types.ts +39 -6
- package/src/urls/path-helper.ts +48 -13
- package/src/urls/pattern-types.ts +12 -0
- package/src/urls/response-types.ts +16 -6
- package/src/use-loader.tsx +77 -5
- package/src/vite/discovery/bundle-postprocess.ts +30 -33
- package/src/vite/discovery/discover-routers.ts +5 -1
- package/src/vite/discovery/prerender-collection.ts +128 -74
- package/src/vite/discovery/state.ts +13 -4
- package/src/vite/index.ts +4 -0
- package/src/vite/plugin-types.ts +60 -5
- package/src/vite/plugins/cloudflare-protocol-loader-hook.d.mts +23 -0
- package/src/vite/plugins/cloudflare-protocol-loader-hook.mjs +76 -0
- package/src/vite/plugins/cloudflare-protocol-stub.ts +214 -0
- package/src/vite/plugins/expose-id-utils.ts +12 -0
- package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
- package/src/vite/plugins/expose-internal-ids.ts +257 -40
- package/src/vite/plugins/performance-tracks.ts +88 -0
- package/src/vite/plugins/refresh-cmd.ts +88 -26
- package/src/vite/rango.ts +19 -2
- package/src/vite/router-discovery.ts +237 -37
- package/src/vite/utils/banner.ts +3 -3
- package/src/vite/utils/prerender-utils.ts +37 -5
- package/src/vite/utils/shared-utils.ts +3 -2
package/dist/vite/index.js
CHANGED
|
@@ -18,6 +18,9 @@ function hashId(filePath, exportName) {
|
|
|
18
18
|
const hash = crypto.createHash("sha256").update(input).digest("hex");
|
|
19
19
|
return `${hash.slice(0, 8)}#${exportName}`;
|
|
20
20
|
}
|
|
21
|
+
function makeStubId(filePath, exportName, isBuild) {
|
|
22
|
+
return isBuild ? hashId(filePath, exportName) : `${filePath}#${exportName}`;
|
|
23
|
+
}
|
|
21
24
|
function hashInlineId(filePath, lineNumber, index) {
|
|
22
25
|
const input = index !== void 0 && index > 0 ? `${filePath}:${lineNumber}:${index}` : `${filePath}:${lineNumber}`;
|
|
23
26
|
return crypto.createHash("sha256").update(input).digest("hex").slice(0, 8);
|
|
@@ -910,9 +913,7 @@ function generateWholeFileStubs(cfg, bindings, code, filePath, isBuild) {
|
|
|
910
913
|
});
|
|
911
914
|
return { code: stubs.join("\n") + "\n", map: null };
|
|
912
915
|
}
|
|
913
|
-
function
|
|
914
|
-
if (bindings.length === 0) return null;
|
|
915
|
-
const s = new MagicString2(code);
|
|
916
|
+
function stubHandlerExprs(cfg, bindings, s, filePath, isBuild) {
|
|
916
917
|
let hasChanges = false;
|
|
917
918
|
for (const binding of bindings) {
|
|
918
919
|
const exportName = binding.exportNames[0];
|
|
@@ -924,15 +925,7 @@ function generateExprStubs(cfg, bindings, code, filePath, sourceId, isBuild) {
|
|
|
924
925
|
);
|
|
925
926
|
hasChanges = true;
|
|
926
927
|
}
|
|
927
|
-
|
|
928
|
-
return {
|
|
929
|
-
code: s.toString(),
|
|
930
|
-
map: s.generateMap({
|
|
931
|
-
source: sourceId,
|
|
932
|
-
includeContent: true,
|
|
933
|
-
hires: "boundary"
|
|
934
|
-
})
|
|
935
|
-
};
|
|
928
|
+
return hasChanges;
|
|
936
929
|
}
|
|
937
930
|
function transformHandlerIds(cfg, bindings, s, filePath, isBuild) {
|
|
938
931
|
let hasChanges = false;
|
|
@@ -1269,15 +1262,6 @@ ${lazyImports.join(",\n")}
|
|
|
1269
1262
|
isBuild
|
|
1270
1263
|
);
|
|
1271
1264
|
if (wholeFile) return wholeFile;
|
|
1272
|
-
const exprStubs = generateExprStubs(
|
|
1273
|
-
PRERENDER_CONFIG,
|
|
1274
|
-
bindings,
|
|
1275
|
-
code,
|
|
1276
|
-
filePath,
|
|
1277
|
-
id,
|
|
1278
|
-
isBuild
|
|
1279
|
-
);
|
|
1280
|
-
if (exprStubs) return exprStubs;
|
|
1281
1265
|
}
|
|
1282
1266
|
if (hasPrerenderHandlerCode && isRscEnv && isBuild) {
|
|
1283
1267
|
const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
|
|
@@ -1329,15 +1313,134 @@ ${lazyImports.join(",\n")}
|
|
|
1329
1313
|
isBuild
|
|
1330
1314
|
);
|
|
1331
1315
|
if (wholeFile) return wholeFile;
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1316
|
+
}
|
|
1317
|
+
if (!isRscEnv && (hasPrerenderHandlerCode || hasStaticHandlerCode)) {
|
|
1318
|
+
const prerenderFnNames = hasPrerenderHandlerCode ? getFnNames(PRERENDER_CONFIG.fnName) : [];
|
|
1319
|
+
const staticFnNames = hasStaticHandlerCode ? getFnNames(STATIC_CONFIG.fnName) : [];
|
|
1320
|
+
const loaderFnNames = hasLoaderCode ? getFnNames("createLoader") : [];
|
|
1321
|
+
const handleFnNames = hasHandleCode ? getFnNames("createHandle") : [];
|
|
1322
|
+
const lsFnNames = hasLocationStateCode ? getFnNames("createLocationState") : [];
|
|
1323
|
+
const allBindings = [];
|
|
1324
|
+
for (const fnNames of [
|
|
1325
|
+
prerenderFnNames,
|
|
1326
|
+
staticFnNames,
|
|
1327
|
+
loaderFnNames,
|
|
1328
|
+
handleFnNames,
|
|
1329
|
+
lsFnNames
|
|
1330
|
+
]) {
|
|
1331
|
+
if (fnNames.length > 0) {
|
|
1332
|
+
allBindings.push(...getBindings(code, fnNames));
|
|
1333
|
+
}
|
|
1334
|
+
}
|
|
1335
|
+
let canStubWholeFile = allBindings.length > 0 && isExportOnlyFile(code, allBindings);
|
|
1336
|
+
if (canStubWholeFile && (handleFnNames.length > 0 || lsFnNames.length > 0)) {
|
|
1337
|
+
const exportedLocals = new Set(allBindings.map((b) => b.localName));
|
|
1338
|
+
const strippedBindings = [];
|
|
1339
|
+
const localDeclPattern = /(?:^|;|\n)\s*(?:const|let|var|function)\s+(\w+)/g;
|
|
1340
|
+
let declMatch;
|
|
1341
|
+
while ((declMatch = localDeclPattern.exec(code)) !== null) {
|
|
1342
|
+
const name = declMatch[1];
|
|
1343
|
+
if (!exportedLocals.has(name) && !/^_c\d*$/.test(name)) {
|
|
1344
|
+
strippedBindings.push(name);
|
|
1345
|
+
}
|
|
1346
|
+
}
|
|
1347
|
+
const importPattern = /import\s*\{([^}]*)\}\s*from\s*["'](?!@rangojs\/router)[^"']*["']/g;
|
|
1348
|
+
let importMatch;
|
|
1349
|
+
while ((importMatch = importPattern.exec(code)) !== null) {
|
|
1350
|
+
for (const spec of importMatch[1].split(",")) {
|
|
1351
|
+
const m = spec.trim().match(/^[A-Za-z_$][\w$]*(?:\s+as\s+([A-Za-z_$][\w$]*))?$/);
|
|
1352
|
+
if (m) strippedBindings.push(m[1] || m[0].trim().split(/\s/)[0]);
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
const defaultImportPattern = /import\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
|
|
1356
|
+
while ((importMatch = defaultImportPattern.exec(code)) !== null) {
|
|
1357
|
+
strippedBindings.push(importMatch[1]);
|
|
1358
|
+
}
|
|
1359
|
+
const nsImportPattern = /import\s+\*\s+as\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
|
|
1360
|
+
while ((importMatch = nsImportPattern.exec(code)) !== null) {
|
|
1361
|
+
strippedBindings.push(importMatch[1]);
|
|
1362
|
+
}
|
|
1363
|
+
if (strippedBindings.length > 0) {
|
|
1364
|
+
const preservedBindings = allBindings.filter((b) => {
|
|
1365
|
+
const fc = code.slice(b.callExprStart, b.callOpenParenPos + 1);
|
|
1366
|
+
return handleFnNames.some((n) => fc.includes(n)) || lsFnNames.some((n) => fc.includes(n));
|
|
1367
|
+
});
|
|
1368
|
+
const strippedRe = new RegExp(
|
|
1369
|
+
`\\b(?:${strippedBindings.join("|")})\\b`
|
|
1370
|
+
);
|
|
1371
|
+
canStubWholeFile = !preservedBindings.some((b) => {
|
|
1372
|
+
const expr = code.slice(b.callExprStart, b.callCloseParenPos + 1);
|
|
1373
|
+
return strippedRe.test(expr);
|
|
1374
|
+
});
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1377
|
+
if (canStubWholeFile) {
|
|
1378
|
+
const lines = [];
|
|
1379
|
+
const neededImports = [];
|
|
1380
|
+
if (handleFnNames.length > 0) neededImports.push("createHandle");
|
|
1381
|
+
if (lsFnNames.length > 0) neededImports.push("createLocationState");
|
|
1382
|
+
if (neededImports.length > 0) {
|
|
1383
|
+
lines.push(
|
|
1384
|
+
`import { ${neededImports.join(", ")} } from "@rangojs/router";`
|
|
1385
|
+
);
|
|
1386
|
+
}
|
|
1387
|
+
for (const binding of allBindings) {
|
|
1388
|
+
const fnCall = code.slice(
|
|
1389
|
+
binding.callExprStart,
|
|
1390
|
+
binding.callOpenParenPos + 1
|
|
1391
|
+
);
|
|
1392
|
+
const isHandle = handleFnNames.some((n) => fnCall.includes(n));
|
|
1393
|
+
const isLocationState = lsFnNames.some((n) => fnCall.includes(n));
|
|
1394
|
+
const primaryName = binding.exportNames[0];
|
|
1395
|
+
const stubId = makeStubId(filePath, primaryName, isBuild);
|
|
1396
|
+
if (isHandle || isLocationState) {
|
|
1397
|
+
const rawArgs = code.slice(binding.callOpenParenPos + 1, binding.callCloseParenPos).replace(/\b_c\d*\s*=\s*/g, "");
|
|
1398
|
+
const canonicalName = isHandle ? "createHandle" : "createLocationState";
|
|
1399
|
+
const activeFnNames = isHandle ? handleFnNames : lsFnNames;
|
|
1400
|
+
let rawCallee = code.slice(
|
|
1401
|
+
binding.callExprStart,
|
|
1402
|
+
binding.callOpenParenPos
|
|
1403
|
+
);
|
|
1404
|
+
for (const alias of activeFnNames) {
|
|
1405
|
+
if (alias !== canonicalName && rawCallee.startsWith(alias)) {
|
|
1406
|
+
rawCallee = canonicalName + rawCallee.slice(alias.length);
|
|
1407
|
+
break;
|
|
1408
|
+
}
|
|
1409
|
+
}
|
|
1410
|
+
if (isHandle) {
|
|
1411
|
+
const idParam = binding.argCount === 0 ? `undefined, "${stubId}"` : `, "${stubId}"`;
|
|
1412
|
+
lines.push(
|
|
1413
|
+
`export const ${primaryName} = ${rawCallee}(${rawArgs}${idParam});`
|
|
1414
|
+
);
|
|
1415
|
+
lines.push(`${primaryName}.$$id = "${stubId}";`);
|
|
1416
|
+
} else {
|
|
1417
|
+
lines.push(
|
|
1418
|
+
`export const ${primaryName} = ${rawCallee}(${rawArgs});`
|
|
1419
|
+
);
|
|
1420
|
+
lines.push(
|
|
1421
|
+
`${primaryName}.__rsc_ls_key = "__rsc_ls_${stubId}";`
|
|
1422
|
+
);
|
|
1423
|
+
}
|
|
1424
|
+
for (const name of binding.exportNames.slice(1)) {
|
|
1425
|
+
lines.push(`export const ${name} = ${primaryName};`);
|
|
1426
|
+
}
|
|
1427
|
+
} else {
|
|
1428
|
+
let brand = "loader";
|
|
1429
|
+
if (prerenderFnNames.some((n) => fnCall.includes(n))) {
|
|
1430
|
+
brand = PRERENDER_CONFIG.brand;
|
|
1431
|
+
} else if (staticFnNames.some((n) => fnCall.includes(n))) {
|
|
1432
|
+
brand = STATIC_CONFIG.brand;
|
|
1433
|
+
}
|
|
1434
|
+
lines.push(
|
|
1435
|
+
`export const ${primaryName} = { __brand: "${brand}", $$id: "${stubId}" };`
|
|
1436
|
+
);
|
|
1437
|
+
for (const name of binding.exportNames.slice(1)) {
|
|
1438
|
+
lines.push(`export const ${name} = ${primaryName};`);
|
|
1439
|
+
}
|
|
1440
|
+
}
|
|
1441
|
+
}
|
|
1442
|
+
return { code: lines.join("\n") + "\n", map: null };
|
|
1443
|
+
}
|
|
1341
1444
|
}
|
|
1342
1445
|
if (hasStaticHandlerCode && isRscEnv && isBuild) {
|
|
1343
1446
|
const fnNames = getFnNames(STATIC_CONFIG.fnName);
|
|
@@ -1372,25 +1475,41 @@ ${lazyImports.join(",\n")}
|
|
|
1372
1475
|
isBuild
|
|
1373
1476
|
) || changed;
|
|
1374
1477
|
}
|
|
1375
|
-
if (hasPrerenderHandlerCode
|
|
1478
|
+
if (hasPrerenderHandlerCode) {
|
|
1376
1479
|
const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1480
|
+
const bindings = getBindings(code, fnNames);
|
|
1481
|
+
if (isRscEnv) {
|
|
1482
|
+
changed = transformHandlerIds(
|
|
1483
|
+
PRERENDER_CONFIG,
|
|
1484
|
+
bindings,
|
|
1485
|
+
s,
|
|
1486
|
+
filePath,
|
|
1487
|
+
isBuild
|
|
1488
|
+
) || changed;
|
|
1489
|
+
} else {
|
|
1490
|
+
changed = stubHandlerExprs(
|
|
1491
|
+
PRERENDER_CONFIG,
|
|
1492
|
+
bindings,
|
|
1493
|
+
s,
|
|
1494
|
+
filePath,
|
|
1495
|
+
isBuild
|
|
1496
|
+
) || changed;
|
|
1497
|
+
}
|
|
1384
1498
|
}
|
|
1385
|
-
if (hasStaticHandlerCode
|
|
1499
|
+
if (hasStaticHandlerCode) {
|
|
1386
1500
|
const fnNames = getFnNames(STATIC_CONFIG.fnName);
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1501
|
+
const bindings = getBindings(code, fnNames);
|
|
1502
|
+
if (isRscEnv) {
|
|
1503
|
+
changed = transformHandlerIds(
|
|
1504
|
+
STATIC_CONFIG,
|
|
1505
|
+
bindings,
|
|
1506
|
+
s,
|
|
1507
|
+
filePath,
|
|
1508
|
+
isBuild
|
|
1509
|
+
) || changed;
|
|
1510
|
+
} else {
|
|
1511
|
+
changed = stubHandlerExprs(STATIC_CONFIG, bindings, s, filePath, isBuild) || changed;
|
|
1512
|
+
}
|
|
1394
1513
|
}
|
|
1395
1514
|
if (!changed) return;
|
|
1396
1515
|
return {
|
|
@@ -1745,7 +1864,7 @@ import { resolve } from "node:path";
|
|
|
1745
1864
|
// package.json
|
|
1746
1865
|
var package_default = {
|
|
1747
1866
|
name: "@rangojs/router",
|
|
1748
|
-
version: "0.0.0-experimental.
|
|
1867
|
+
version: "0.0.0-experimental.eb0645d3",
|
|
1749
1868
|
description: "Django-inspired RSC router with composable URL patterns",
|
|
1750
1869
|
keywords: [
|
|
1751
1870
|
"react",
|
|
@@ -1878,7 +1997,7 @@ var package_default = {
|
|
|
1878
1997
|
tag: "experimental"
|
|
1879
1998
|
},
|
|
1880
1999
|
scripts: {
|
|
1881
|
-
build: "pnpm dlx esbuild src/vite/index.ts --bundle --format=esm --outfile=dist/vite/index.js --platform=node --packages=external && pnpm dlx esbuild src/bin/rango.ts --bundle --format=esm --outfile=dist/bin/rango.js --platform=node --packages=external --banner:js='#!/usr/bin/env node' && chmod +x dist/bin/rango.js",
|
|
2000
|
+
build: "pnpm dlx esbuild src/vite/index.ts --bundle --format=esm --outfile=dist/vite/index.js --platform=node --packages=external && mkdir -p dist/vite/plugins && cp src/vite/plugins/cloudflare-protocol-loader-hook.mjs dist/vite/plugins/cloudflare-protocol-loader-hook.mjs && pnpm dlx esbuild src/bin/rango.ts --bundle --format=esm --outfile=dist/bin/rango.js --platform=node --packages=external --banner:js='#!/usr/bin/env node' && chmod +x dist/bin/rango.js",
|
|
1882
2001
|
prepublishOnly: "pnpm build",
|
|
1883
2002
|
typecheck: "tsc --noEmit",
|
|
1884
2003
|
test: "playwright test",
|
|
@@ -1887,7 +2006,7 @@ var package_default = {
|
|
|
1887
2006
|
"test:unit:watch": "vitest"
|
|
1888
2007
|
},
|
|
1889
2008
|
dependencies: {
|
|
1890
|
-
"@vitejs/plugin-rsc": "^0.5.
|
|
2009
|
+
"@vitejs/plugin-rsc": "^0.5.23",
|
|
1891
2010
|
"magic-string": "^0.30.17",
|
|
1892
2011
|
picomatch: "^4.0.3",
|
|
1893
2012
|
"rsc-html-stream": "^0.0.7"
|
|
@@ -1907,7 +2026,7 @@ var package_default = {
|
|
|
1907
2026
|
},
|
|
1908
2027
|
peerDependencies: {
|
|
1909
2028
|
"@cloudflare/vite-plugin": "^1.25.0",
|
|
1910
|
-
"@vitejs/plugin-rsc": "^0.5.
|
|
2029
|
+
"@vitejs/plugin-rsc": "^0.5.23",
|
|
1911
2030
|
react: "^18.0.0 || ^19.0.0",
|
|
1912
2031
|
vite: "^7.3.0"
|
|
1913
2032
|
},
|
|
@@ -2317,7 +2436,7 @@ function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSche
|
|
|
2317
2436
|
}
|
|
2318
2437
|
return routeMap;
|
|
2319
2438
|
}
|
|
2320
|
-
function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut) {
|
|
2439
|
+
function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut, inlineBlock) {
|
|
2321
2440
|
visited = visited ?? /* @__PURE__ */ new Set();
|
|
2322
2441
|
const realPath = resolve2(filePath);
|
|
2323
2442
|
const key = variableName ? `${realPath}:${variableName}` : realPath;
|
|
@@ -2333,7 +2452,9 @@ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagno
|
|
|
2333
2452
|
return { routes: {}, searchSchemas: {} };
|
|
2334
2453
|
}
|
|
2335
2454
|
let block;
|
|
2336
|
-
if (
|
|
2455
|
+
if (inlineBlock) {
|
|
2456
|
+
block = inlineBlock;
|
|
2457
|
+
} else if (variableName) {
|
|
2337
2458
|
const extracted = extractUrlsBlockForVariable(source, variableName);
|
|
2338
2459
|
if (!extracted) return { routes: {}, searchSchemas: {} };
|
|
2339
2460
|
block = extracted;
|
|
@@ -2452,7 +2573,7 @@ Router root: ${conflict.ancestor}
|
|
|
2452
2573
|
Nested router: ${conflict.nested}
|
|
2453
2574
|
Move the nested router into a sibling directory or configure it as a separate app root.`;
|
|
2454
2575
|
}
|
|
2455
|
-
function
|
|
2576
|
+
function extractUrlsFromRouter(code) {
|
|
2456
2577
|
const sourceFile = ts5.createSourceFile(
|
|
2457
2578
|
"router.tsx",
|
|
2458
2579
|
code,
|
|
@@ -2466,24 +2587,70 @@ function extractUrlsVariableFromRouter(code) {
|
|
|
2466
2587
|
const callee = node.expression;
|
|
2467
2588
|
return ts5.isIdentifier(callee) && callee.text === "createRouter";
|
|
2468
2589
|
}
|
|
2590
|
+
function isInlineBuilder(node) {
|
|
2591
|
+
return ts5.isArrowFunction(node) || ts5.isFunctionExpression(node);
|
|
2592
|
+
}
|
|
2593
|
+
function isRoutesOnCreateRouter(node) {
|
|
2594
|
+
if (!ts5.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "routes")
|
|
2595
|
+
return false;
|
|
2596
|
+
let inner = node.expression.expression;
|
|
2597
|
+
while (ts5.isCallExpression(inner) && ts5.isPropertyAccessExpression(inner.expression)) {
|
|
2598
|
+
inner = inner.expression.expression;
|
|
2599
|
+
}
|
|
2600
|
+
return isCreateRouterCall(inner);
|
|
2601
|
+
}
|
|
2469
2602
|
function visit(node) {
|
|
2470
2603
|
if (result) return;
|
|
2471
|
-
if (ts5.isCallExpression(node) &&
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
}
|
|
2476
|
-
|
|
2477
|
-
result = node.arguments[0].text;
|
|
2478
|
-
return;
|
|
2604
|
+
if (ts5.isCallExpression(node) && node.arguments.length >= 1 && isRoutesOnCreateRouter(node)) {
|
|
2605
|
+
const arg = node.arguments[0];
|
|
2606
|
+
if (ts5.isIdentifier(arg)) {
|
|
2607
|
+
result = { kind: "variable", name: arg.text };
|
|
2608
|
+
} else if (isInlineBuilder(arg)) {
|
|
2609
|
+
result = { kind: "inline", block: arg.getText(sourceFile) };
|
|
2479
2610
|
}
|
|
2611
|
+
return;
|
|
2480
2612
|
}
|
|
2481
2613
|
if (isCreateRouterCall(node)) {
|
|
2482
2614
|
const callExpr = node;
|
|
2483
|
-
for (const
|
|
2615
|
+
for (const callArg of callExpr.arguments) {
|
|
2616
|
+
if (ts5.isObjectLiteralExpression(callArg)) {
|
|
2617
|
+
for (const prop of callArg.properties) {
|
|
2618
|
+
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls") {
|
|
2619
|
+
if (ts5.isIdentifier(prop.initializer)) {
|
|
2620
|
+
result = { kind: "variable", name: prop.initializer.text };
|
|
2621
|
+
} else if (isInlineBuilder(prop.initializer)) {
|
|
2622
|
+
result = {
|
|
2623
|
+
kind: "inline",
|
|
2624
|
+
block: prop.initializer.getText(sourceFile)
|
|
2625
|
+
};
|
|
2626
|
+
}
|
|
2627
|
+
return;
|
|
2628
|
+
}
|
|
2629
|
+
}
|
|
2630
|
+
}
|
|
2631
|
+
}
|
|
2632
|
+
}
|
|
2633
|
+
ts5.forEachChild(node, visit);
|
|
2634
|
+
}
|
|
2635
|
+
visit(sourceFile);
|
|
2636
|
+
return result;
|
|
2637
|
+
}
|
|
2638
|
+
function extractBasenameFromRouter(code) {
|
|
2639
|
+
const sourceFile = ts5.createSourceFile(
|
|
2640
|
+
"router.tsx",
|
|
2641
|
+
code,
|
|
2642
|
+
ts5.ScriptTarget.Latest,
|
|
2643
|
+
true,
|
|
2644
|
+
ts5.ScriptKind.TSX
|
|
2645
|
+
);
|
|
2646
|
+
let result;
|
|
2647
|
+
function visit(node) {
|
|
2648
|
+
if (result !== void 0) return;
|
|
2649
|
+
if (ts5.isCallExpression(node) && ts5.isIdentifier(node.expression) && node.expression.text === "createRouter") {
|
|
2650
|
+
for (const arg of node.arguments) {
|
|
2484
2651
|
if (ts5.isObjectLiteralExpression(arg)) {
|
|
2485
2652
|
for (const prop of arg.properties) {
|
|
2486
|
-
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "
|
|
2653
|
+
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "basename" && ts5.isStringLiteral(prop.initializer)) {
|
|
2487
2654
|
result = prop.initializer.text;
|
|
2488
2655
|
return;
|
|
2489
2656
|
}
|
|
@@ -2496,6 +2663,19 @@ function extractUrlsVariableFromRouter(code) {
|
|
|
2496
2663
|
visit(sourceFile);
|
|
2497
2664
|
return result;
|
|
2498
2665
|
}
|
|
2666
|
+
function applyBasenameToRoutes(result, basename3) {
|
|
2667
|
+
const prefixed = {};
|
|
2668
|
+
for (const [name, pattern] of Object.entries(result.routes)) {
|
|
2669
|
+
if (pattern === "/") {
|
|
2670
|
+
prefixed[name] = basename3;
|
|
2671
|
+
} else if (basename3.endsWith("/") && pattern.startsWith("/")) {
|
|
2672
|
+
prefixed[name] = basename3 + pattern.slice(1);
|
|
2673
|
+
} else {
|
|
2674
|
+
prefixed[name] = basename3 + pattern;
|
|
2675
|
+
}
|
|
2676
|
+
}
|
|
2677
|
+
return { routes: prefixed, searchSchemas: result.searchSchemas };
|
|
2678
|
+
}
|
|
2499
2679
|
function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
2500
2680
|
let routerSource;
|
|
2501
2681
|
try {
|
|
@@ -2503,19 +2683,40 @@ function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
|
2503
2683
|
} catch {
|
|
2504
2684
|
return { routes: {}, searchSchemas: {} };
|
|
2505
2685
|
}
|
|
2506
|
-
const
|
|
2507
|
-
if (!
|
|
2686
|
+
const extraction = extractUrlsFromRouter(routerSource);
|
|
2687
|
+
if (!extraction) {
|
|
2508
2688
|
return { routes: {}, searchSchemas: {} };
|
|
2509
2689
|
}
|
|
2510
|
-
const
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
|
|
2690
|
+
const rawBasename = extractBasenameFromRouter(routerSource);
|
|
2691
|
+
const basename3 = rawBasename ? ("/" + rawBasename.replace(/^\/+|\/+$/g, "")).replace(/^\/$/, "") : void 0;
|
|
2692
|
+
let result;
|
|
2693
|
+
if (extraction.kind === "inline") {
|
|
2694
|
+
result = buildCombinedRouteMapWithSearch(
|
|
2695
|
+
routerFilePath,
|
|
2696
|
+
void 0,
|
|
2697
|
+
void 0,
|
|
2698
|
+
void 0,
|
|
2699
|
+
extraction.block
|
|
2700
|
+
);
|
|
2701
|
+
} else {
|
|
2702
|
+
const imported = resolveImportedVariable(routerSource, extraction.name);
|
|
2703
|
+
if (imported) {
|
|
2704
|
+
const targetFile = resolveImportPath(imported.specifier, routerFilePath);
|
|
2705
|
+
if (!targetFile) {
|
|
2706
|
+
return { routes: {}, searchSchemas: {} };
|
|
2707
|
+
}
|
|
2708
|
+
result = buildCombinedRouteMapWithSearch(
|
|
2709
|
+
targetFile,
|
|
2710
|
+
imported.exportedName
|
|
2711
|
+
);
|
|
2712
|
+
} else {
|
|
2713
|
+
result = buildCombinedRouteMapWithSearch(routerFilePath, extraction.name);
|
|
2515
2714
|
}
|
|
2516
|
-
return buildCombinedRouteMapWithSearch(targetFile, imported.exportedName);
|
|
2517
2715
|
}
|
|
2518
|
-
|
|
2716
|
+
if (basename3) {
|
|
2717
|
+
result = applyBasenameToRoutes(result, basename3);
|
|
2718
|
+
}
|
|
2719
|
+
return result;
|
|
2519
2720
|
}
|
|
2520
2721
|
function findRouterFiles(root, filter) {
|
|
2521
2722
|
const result = [];
|
|
@@ -2540,25 +2741,15 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
|
|
|
2540
2741
|
throw new Error(formatNestedRouterConflictError(nestedRouterConflict));
|
|
2541
2742
|
}
|
|
2542
2743
|
for (const routerFilePath of routerFilePaths) {
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
routerSource
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
const imported = resolveImportedVariable(routerSource, urlsVarName);
|
|
2553
|
-
if (imported) {
|
|
2554
|
-
const targetFile = resolveImportPath(imported.specifier, routerFilePath);
|
|
2555
|
-
if (!targetFile) continue;
|
|
2556
|
-
result = buildCombinedRouteMapWithSearch(
|
|
2557
|
-
targetFile,
|
|
2558
|
-
imported.exportedName
|
|
2559
|
-
);
|
|
2560
|
-
} else {
|
|
2561
|
-
result = buildCombinedRouteMapWithSearch(routerFilePath, urlsVarName);
|
|
2744
|
+
const result = buildCombinedRouteMapForRouterFile(routerFilePath);
|
|
2745
|
+
if (Object.keys(result.routes).length === 0 && Object.keys(result.searchSchemas).length === 0) {
|
|
2746
|
+
let routerSource;
|
|
2747
|
+
try {
|
|
2748
|
+
routerSource = readFileSync2(routerFilePath, "utf-8");
|
|
2749
|
+
} catch {
|
|
2750
|
+
continue;
|
|
2751
|
+
}
|
|
2752
|
+
if (!extractUrlsFromRouter(routerSource)) continue;
|
|
2562
2753
|
}
|
|
2563
2754
|
const routerBasename = pathBasename(routerFilePath).replace(
|
|
2564
2755
|
/\.(tsx?|jsx?)$/,
|
|
@@ -2784,6 +2975,68 @@ function createVersionPlugin() {
|
|
|
2784
2975
|
|
|
2785
2976
|
// src/vite/utils/shared-utils.ts
|
|
2786
2977
|
import * as Vite from "vite";
|
|
2978
|
+
|
|
2979
|
+
// src/vite/plugins/performance-tracks.ts
|
|
2980
|
+
import { readFile } from "node:fs/promises";
|
|
2981
|
+
var RSDW_PATCH_RE = /((?:var|let|const)\s+\w+\s*=\s*root\._children\s*,\s*(\w+)\s*=\s*root\._debugInfo\s*[;,])/;
|
|
2982
|
+
function buildPatchReplacement(match, debugInfoVar) {
|
|
2983
|
+
return `${match}
|
|
2984
|
+
if (${debugInfoVar} && 0 === ${debugInfoVar}.length && "fulfilled" === root.status) {
|
|
2985
|
+
var _resolved = "function" === typeof resolveLazy ? resolveLazy(root.value) : root.value;
|
|
2986
|
+
if ("object" === typeof _resolved && null !== _resolved && isArrayImpl(_resolved._debugInfo)) {
|
|
2987
|
+
${debugInfoVar} = _resolved._debugInfo;
|
|
2988
|
+
}
|
|
2989
|
+
}`;
|
|
2990
|
+
}
|
|
2991
|
+
function patchRsdwClientDebugInfoRecovery(code) {
|
|
2992
|
+
const match = code.match(RSDW_PATCH_RE);
|
|
2993
|
+
if (!match) {
|
|
2994
|
+
return { code, debugInfoVar: null };
|
|
2995
|
+
}
|
|
2996
|
+
return {
|
|
2997
|
+
code: code.replace(match[1], buildPatchReplacement(match[1], match[2])),
|
|
2998
|
+
debugInfoVar: match[2]
|
|
2999
|
+
};
|
|
3000
|
+
}
|
|
3001
|
+
function performanceTracksOptimizeDepsPlugin() {
|
|
3002
|
+
return {
|
|
3003
|
+
name: "@rangojs/router:performance-tracks-optimize-deps",
|
|
3004
|
+
setup(build) {
|
|
3005
|
+
build.onLoad(
|
|
3006
|
+
{
|
|
3007
|
+
filter: /react-server-dom-webpack-client\.browser\.(development|production)\.js$/
|
|
3008
|
+
},
|
|
3009
|
+
async (args) => {
|
|
3010
|
+
const code = await readFile(args.path, "utf8");
|
|
3011
|
+
const patched = patchRsdwClientDebugInfoRecovery(code);
|
|
3012
|
+
return {
|
|
3013
|
+
contents: patched.code,
|
|
3014
|
+
loader: "js"
|
|
3015
|
+
};
|
|
3016
|
+
}
|
|
3017
|
+
);
|
|
3018
|
+
}
|
|
3019
|
+
};
|
|
3020
|
+
}
|
|
3021
|
+
function performanceTracksPlugin() {
|
|
3022
|
+
return {
|
|
3023
|
+
name: "@rangojs/router:performance-tracks",
|
|
3024
|
+
transform(code, id) {
|
|
3025
|
+
if (!id.includes("react-server-dom") || !id.includes("client")) return;
|
|
3026
|
+
const patched = patchRsdwClientDebugInfoRecovery(code);
|
|
3027
|
+
if (!patched.debugInfoVar) return;
|
|
3028
|
+
if (process.env.INTERNAL_RANGO_DEBUG)
|
|
3029
|
+
console.log(
|
|
3030
|
+
"[perf-tracks] patched RSDW client (var:",
|
|
3031
|
+
patched.debugInfoVar,
|
|
3032
|
+
")"
|
|
3033
|
+
);
|
|
3034
|
+
return patched.code;
|
|
3035
|
+
}
|
|
3036
|
+
};
|
|
3037
|
+
}
|
|
3038
|
+
|
|
3039
|
+
// src/vite/utils/shared-utils.ts
|
|
2787
3040
|
var versionEsbuildPlugin = {
|
|
2788
3041
|
name: "@rangojs/router-version",
|
|
2789
3042
|
setup(build) {
|
|
@@ -2801,7 +3054,7 @@ var versionEsbuildPlugin = {
|
|
|
2801
3054
|
}
|
|
2802
3055
|
};
|
|
2803
3056
|
var sharedEsbuildOptions = {
|
|
2804
|
-
plugins: [versionEsbuildPlugin]
|
|
3057
|
+
plugins: [versionEsbuildPlugin, performanceTracksOptimizeDepsPlugin()]
|
|
2805
3058
|
};
|
|
2806
3059
|
function createVirtualEntriesPlugin(entries, routerPathRef) {
|
|
2807
3060
|
const virtualModules = {};
|
|
@@ -2884,11 +3137,11 @@ ${dim} \u2571${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2
|
|
|
2884
3137
|
${dim} ${reset}${bold}\u2551 \u2551${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2727. \u2571${reset}
|
|
2885
3138
|
${dim} ${reset}${bold}\u2554\u2557 \u2551 \u2551 \u2551 \u2551${reset}${dim} * \u2571${reset}
|
|
2886
3139
|
${dim} ${reset}${bold}\u2551\u2551 \u2551 \u2551 \u2551 \u2551 \u2566\u2550\u2557\u2554\u2550\u2557\u2554\u2557\u2554\u2554\u2550\u2557\u2554\u2550\u2557${reset}${dim} \u2727 \u2726${reset}
|
|
2887
|
-
${dim}
|
|
3140
|
+
${dim} ${reset}${bold}\u2551\u2551 \u2551 \u2560\u2550\u255D \u2551 \u2560\u2566\u255D\u2560\u2550\u2563\u2551\u2551\u2551\u2551 \u2566\u2551 \u2551${reset}${dim} * \u2727${reset}
|
|
2888
3141
|
${dim} ${reset}${bold}\u2551\u255A\u2550\u255D \u2554\u2550\u2550\u2550\u255D \u2569\u255A\u2550\u2569 \u2569\u255D\u255A\u255D\u255A\u2550\u255D\u255A\u2550\u255D${reset}${dim} \u2726 . *${reset}
|
|
2889
3142
|
${dim} ${reset}${bold}\u255A\u2550\u2550\u2557 \u2551${reset}${dim} * RSC Wrangler \u2727 \u2726${reset}
|
|
2890
|
-
${dim} * ${reset}${bold}\u2551 \
|
|
2891
|
-
${bold}\u2550\u2550\u2550\
|
|
3143
|
+
${dim} * ${reset}${bold}\u2551 \u2551${reset}${dim} * \u2727. \u2571${reset}
|
|
3144
|
+
${dim} ${reset}${bold}\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550${reset}${dim} \u2726 *${reset}
|
|
2892
3145
|
|
|
2893
3146
|
v${version} \xB7 ${preset} \xB7 ${mode}
|
|
2894
3147
|
`;
|
|
@@ -3007,6 +3260,8 @@ function createCjsToEsmPlugin() {
|
|
|
3007
3260
|
import { createServer as createViteServer } from "vite";
|
|
3008
3261
|
import { resolve as resolve8 } from "node:path";
|
|
3009
3262
|
import { readFileSync as readFileSync6 } from "node:fs";
|
|
3263
|
+
import { createRequire, register } from "node:module";
|
|
3264
|
+
import { pathToFileURL } from "node:url";
|
|
3010
3265
|
|
|
3011
3266
|
// src/vite/plugins/virtual-stub-plugin.ts
|
|
3012
3267
|
function createVirtualStubPlugin() {
|
|
@@ -3032,6 +3287,113 @@ function createVirtualStubPlugin() {
|
|
|
3032
3287
|
};
|
|
3033
3288
|
}
|
|
3034
3289
|
|
|
3290
|
+
// src/vite/plugins/cloudflare-protocol-stub.ts
|
|
3291
|
+
var VIRTUAL_PREFIX = "virtual:rango-cloudflare-stub-";
|
|
3292
|
+
var NULL_PREFIX = "\0" + VIRTUAL_PREFIX;
|
|
3293
|
+
var CF_PREFIX = "cloudflare:";
|
|
3294
|
+
var BUILD_ENV_GLOBAL_KEY = "__rango_build_env__";
|
|
3295
|
+
var SOURCE_EXT_RE = /\.[mc]?[jt]sx?$/;
|
|
3296
|
+
var IMPORT_NODE_TYPES = /* @__PURE__ */ new Set([
|
|
3297
|
+
"ImportDeclaration",
|
|
3298
|
+
"ImportExpression",
|
|
3299
|
+
"ExportNamedDeclaration",
|
|
3300
|
+
"ExportAllDeclaration"
|
|
3301
|
+
]);
|
|
3302
|
+
var STUBS = {
|
|
3303
|
+
"cloudflare:workers": `
|
|
3304
|
+
export class DurableObject { constructor(_ctx, _env) {} }
|
|
3305
|
+
export class WorkerEntrypoint { constructor(_ctx, _env) {} }
|
|
3306
|
+
export class WorkflowEntrypoint { constructor(_ctx, _env) {} }
|
|
3307
|
+
export class RpcTarget {}
|
|
3308
|
+
export const env = globalThis[${JSON.stringify(BUILD_ENV_GLOBAL_KEY)}] ?? {};
|
|
3309
|
+
export default {};
|
|
3310
|
+
`,
|
|
3311
|
+
"cloudflare:email": `
|
|
3312
|
+
export class EmailMessage { constructor(_from, _to, _raw) {} }
|
|
3313
|
+
export default {};
|
|
3314
|
+
`,
|
|
3315
|
+
"cloudflare:sockets": `
|
|
3316
|
+
export function connect() { return {}; }
|
|
3317
|
+
export default {};
|
|
3318
|
+
`,
|
|
3319
|
+
"cloudflare:workflows": `
|
|
3320
|
+
export class NonRetryableError extends Error {
|
|
3321
|
+
constructor(message, name) { super(message); this.name = name ?? "NonRetryableError"; }
|
|
3322
|
+
}
|
|
3323
|
+
export default {};
|
|
3324
|
+
`
|
|
3325
|
+
};
|
|
3326
|
+
var FALLBACK_STUB = `export default {};
|
|
3327
|
+
`;
|
|
3328
|
+
function createCloudflareProtocolStubPlugin() {
|
|
3329
|
+
return {
|
|
3330
|
+
name: "@rangojs/router:cloudflare-protocol-stub",
|
|
3331
|
+
transform(code, id) {
|
|
3332
|
+
const cleanId = id.split("?")[0] ?? id;
|
|
3333
|
+
if (!SOURCE_EXT_RE.test(cleanId)) return null;
|
|
3334
|
+
if (!code.includes(CF_PREFIX)) return null;
|
|
3335
|
+
let ast;
|
|
3336
|
+
try {
|
|
3337
|
+
ast = this.parse(code);
|
|
3338
|
+
} catch {
|
|
3339
|
+
return null;
|
|
3340
|
+
}
|
|
3341
|
+
const hits = [];
|
|
3342
|
+
walk(ast, (node) => {
|
|
3343
|
+
if (!IMPORT_NODE_TYPES.has(node.type)) return;
|
|
3344
|
+
const source = node.source;
|
|
3345
|
+
if (!source || source.type !== "Literal") return;
|
|
3346
|
+
if (typeof source.value !== "string") return;
|
|
3347
|
+
if (!source.value.startsWith(CF_PREFIX)) return;
|
|
3348
|
+
if (typeof source.start !== "number" || typeof source.end !== "number")
|
|
3349
|
+
return;
|
|
3350
|
+
hits.push({
|
|
3351
|
+
start: source.start,
|
|
3352
|
+
end: source.end,
|
|
3353
|
+
value: source.value
|
|
3354
|
+
});
|
|
3355
|
+
});
|
|
3356
|
+
if (hits.length === 0) return null;
|
|
3357
|
+
hits.sort((a, b) => b.start - a.start);
|
|
3358
|
+
let out = code;
|
|
3359
|
+
for (const hit of hits) {
|
|
3360
|
+
const submodule = hit.value.slice(CF_PREFIX.length);
|
|
3361
|
+
const quote = code[hit.start] === "'" ? "'" : '"';
|
|
3362
|
+
out = out.slice(0, hit.start) + quote + VIRTUAL_PREFIX + submodule + quote + out.slice(hit.end);
|
|
3363
|
+
}
|
|
3364
|
+
return { code: out, map: null };
|
|
3365
|
+
},
|
|
3366
|
+
resolveId(id) {
|
|
3367
|
+
if (id.startsWith(VIRTUAL_PREFIX)) {
|
|
3368
|
+
return "\0" + id;
|
|
3369
|
+
}
|
|
3370
|
+
return null;
|
|
3371
|
+
},
|
|
3372
|
+
load(id) {
|
|
3373
|
+
if (!id.startsWith(NULL_PREFIX)) return null;
|
|
3374
|
+
const submodule = id.slice(NULL_PREFIX.length);
|
|
3375
|
+
const specifier = CF_PREFIX + submodule;
|
|
3376
|
+
return STUBS[specifier] ?? FALLBACK_STUB;
|
|
3377
|
+
}
|
|
3378
|
+
};
|
|
3379
|
+
}
|
|
3380
|
+
function walk(node, visit) {
|
|
3381
|
+
if (!node || typeof node !== "object") return;
|
|
3382
|
+
if (Array.isArray(node)) {
|
|
3383
|
+
for (const child of node) walk(child, visit);
|
|
3384
|
+
return;
|
|
3385
|
+
}
|
|
3386
|
+
const n = node;
|
|
3387
|
+
if (typeof n.type !== "string") return;
|
|
3388
|
+
visit(n);
|
|
3389
|
+
for (const key in n) {
|
|
3390
|
+
if (key === "loc" || key === "start" || key === "end" || key === "range") {
|
|
3391
|
+
continue;
|
|
3392
|
+
}
|
|
3393
|
+
walk(n[key], visit);
|
|
3394
|
+
}
|
|
3395
|
+
}
|
|
3396
|
+
|
|
3035
3397
|
// src/vite/plugins/client-ref-hashing.ts
|
|
3036
3398
|
import { relative } from "node:path";
|
|
3037
3399
|
import { createHash as createHash2 } from "node:crypto";
|
|
@@ -3190,8 +3552,8 @@ function createDiscoveryState(entryPath, opts) {
|
|
|
3190
3552
|
perRouterManifestDataMap: /* @__PURE__ */ new Map(),
|
|
3191
3553
|
prerenderManifestEntries: null,
|
|
3192
3554
|
staticManifestEntries: null,
|
|
3193
|
-
|
|
3194
|
-
|
|
3555
|
+
handlerChunkInfoMap: /* @__PURE__ */ new Map(),
|
|
3556
|
+
staticHandlerChunkInfoMap: /* @__PURE__ */ new Map(),
|
|
3195
3557
|
rscEntryFileName: null,
|
|
3196
3558
|
resolvedPrerenderModules: void 0,
|
|
3197
3559
|
resolvedStaticModules: void 0,
|
|
@@ -3274,8 +3636,17 @@ function jsonParseExpression(value) {
|
|
|
3274
3636
|
}
|
|
3275
3637
|
|
|
3276
3638
|
// src/context-var.ts
|
|
3639
|
+
var NON_CACHEABLE_KEYS = /* @__PURE__ */ Symbol.for(
|
|
3640
|
+
"rango:non-cacheable-keys"
|
|
3641
|
+
);
|
|
3642
|
+
function getNonCacheableKeys(variables) {
|
|
3643
|
+
if (!variables[NON_CACHEABLE_KEYS]) {
|
|
3644
|
+
variables[NON_CACHEABLE_KEYS] = /* @__PURE__ */ new Set();
|
|
3645
|
+
}
|
|
3646
|
+
return variables[NON_CACHEABLE_KEYS];
|
|
3647
|
+
}
|
|
3277
3648
|
var FORBIDDEN_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
|
|
3278
|
-
function contextSet(variables, keyOrVar, value) {
|
|
3649
|
+
function contextSet(variables, keyOrVar, value, options) {
|
|
3279
3650
|
if (typeof keyOrVar === "string") {
|
|
3280
3651
|
if (FORBIDDEN_KEYS.has(keyOrVar)) {
|
|
3281
3652
|
throw new Error(
|
|
@@ -3283,8 +3654,14 @@ function contextSet(variables, keyOrVar, value) {
|
|
|
3283
3654
|
);
|
|
3284
3655
|
}
|
|
3285
3656
|
variables[keyOrVar] = value;
|
|
3657
|
+
if (options?.cache === false) {
|
|
3658
|
+
getNonCacheableKeys(variables).add(keyOrVar);
|
|
3659
|
+
}
|
|
3286
3660
|
} else {
|
|
3287
3661
|
variables[keyOrVar.key] = value;
|
|
3662
|
+
if (options?.cache === false) {
|
|
3663
|
+
getNonCacheableKeys(variables).add(keyOrVar.key);
|
|
3664
|
+
}
|
|
3288
3665
|
}
|
|
3289
3666
|
}
|
|
3290
3667
|
|
|
@@ -3307,13 +3684,31 @@ function encodePathParam(value) {
|
|
|
3307
3684
|
}
|
|
3308
3685
|
function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
|
|
3309
3686
|
let result = pattern;
|
|
3687
|
+
let hadOmittedOptional = false;
|
|
3310
3688
|
for (const [key, value] of Object.entries(params)) {
|
|
3311
3689
|
const escaped = escapeRegExp2(key);
|
|
3312
|
-
|
|
3313
|
-
|
|
3314
|
-
|
|
3315
|
-
|
|
3316
|
-
|
|
3690
|
+
if (value === "") {
|
|
3691
|
+
result = result.replace(
|
|
3692
|
+
new RegExp(`:${escaped}(\\([^)]*\\))?(?!\\?)`),
|
|
3693
|
+
""
|
|
3694
|
+
);
|
|
3695
|
+
result = result.replace(`*${key}`, "");
|
|
3696
|
+
} else {
|
|
3697
|
+
result = result.replace(
|
|
3698
|
+
new RegExp(`:${escaped}(\\([^)]*\\))?\\??`),
|
|
3699
|
+
encode(value)
|
|
3700
|
+
);
|
|
3701
|
+
result = result.replace(`*${key}`, encode(value));
|
|
3702
|
+
}
|
|
3703
|
+
}
|
|
3704
|
+
result = result.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?\?/g, () => {
|
|
3705
|
+
hadOmittedOptional = true;
|
|
3706
|
+
return "";
|
|
3707
|
+
});
|
|
3708
|
+
if (hadOmittedOptional) {
|
|
3709
|
+
const hadTrailingSlash = pattern.length > 1 && pattern.endsWith("/");
|
|
3710
|
+
result = result.replace(/\/\/+/g, "/").replace(/\/+$/, "") || "/";
|
|
3711
|
+
if (hadTrailingSlash && !result.endsWith("/")) result += "/";
|
|
3317
3712
|
}
|
|
3318
3713
|
return result;
|
|
3319
3714
|
}
|
|
@@ -3423,84 +3818,126 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3423
3818
|
if (!params) return pattern;
|
|
3424
3819
|
return substituteRouteParams(pattern, params);
|
|
3425
3820
|
};
|
|
3821
|
+
let resolvedRoutes = 0;
|
|
3822
|
+
let totalDynamic = 0;
|
|
3426
3823
|
for (const { manifest } of allManifests) {
|
|
3427
3824
|
if (!manifest.prerenderRoutes) continue;
|
|
3428
|
-
const defs = manifest._prerenderDefs || {};
|
|
3429
3825
|
for (const routeName of manifest.prerenderRoutes) {
|
|
3430
3826
|
const pattern = manifest.routeManifest[routeName];
|
|
3431
|
-
if (
|
|
3432
|
-
|
|
3433
|
-
|
|
3434
|
-
|
|
3435
|
-
|
|
3436
|
-
|
|
3437
|
-
|
|
3438
|
-
|
|
3439
|
-
|
|
3440
|
-
|
|
3441
|
-
|
|
3442
|
-
|
|
3443
|
-
|
|
3444
|
-
|
|
3445
|
-
|
|
3446
|
-
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
|
|
3450
|
-
|
|
3451
|
-
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3458
|
-
|
|
3459
|
-
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3827
|
+
if (pattern && (pattern.includes(":") || pattern.includes("*"))) {
|
|
3828
|
+
totalDynamic++;
|
|
3829
|
+
}
|
|
3830
|
+
}
|
|
3831
|
+
}
|
|
3832
|
+
const paramsStart = performance.now();
|
|
3833
|
+
const progressInterval = totalDynamic > 0 ? setInterval(() => {
|
|
3834
|
+
const elapsed = ((performance.now() - paramsStart) / 1e3).toFixed(1);
|
|
3835
|
+
console.log(
|
|
3836
|
+
`[rsc-router] Resolving prerender params... ${resolvedRoutes}/${totalDynamic} routes (${elapsed}s)`
|
|
3837
|
+
);
|
|
3838
|
+
}, 5e3) : void 0;
|
|
3839
|
+
try {
|
|
3840
|
+
for (const { manifest } of allManifests) {
|
|
3841
|
+
if (!manifest.prerenderRoutes) continue;
|
|
3842
|
+
const defs = manifest._prerenderDefs || {};
|
|
3843
|
+
const passthroughSet = new Set(manifest.passthroughRoutes || []);
|
|
3844
|
+
for (const routeName of manifest.prerenderRoutes) {
|
|
3845
|
+
const pattern = manifest.routeManifest[routeName];
|
|
3846
|
+
if (!pattern) continue;
|
|
3847
|
+
const def = defs[routeName];
|
|
3848
|
+
const isPassthroughRoute = passthroughSet.has(routeName);
|
|
3849
|
+
const hasDynamic = pattern.includes(":") || pattern.includes("*");
|
|
3850
|
+
if (!hasDynamic) {
|
|
3851
|
+
entries.push({
|
|
3852
|
+
urlPath: pattern.replace(/\/$/, "") || "/",
|
|
3853
|
+
routeName,
|
|
3854
|
+
concurrency: 1,
|
|
3855
|
+
isPassthroughRoute
|
|
3856
|
+
});
|
|
3857
|
+
} else {
|
|
3858
|
+
if (def?.getParams) {
|
|
3859
|
+
try {
|
|
3860
|
+
const buildVars = {};
|
|
3861
|
+
const buildEnv = state.resolvedBuildEnv;
|
|
3862
|
+
const getParamsCtx = {
|
|
3863
|
+
build: true,
|
|
3864
|
+
dev: !state.isBuildMode,
|
|
3865
|
+
set: ((keyOrVar, value) => {
|
|
3866
|
+
contextSet(buildVars, keyOrVar, value);
|
|
3867
|
+
}),
|
|
3868
|
+
reverse: getParamsReverse,
|
|
3869
|
+
get env() {
|
|
3870
|
+
if (buildEnv !== void 0) return buildEnv;
|
|
3871
|
+
throw new Error(
|
|
3872
|
+
"[rsc-router] ctx.env is not available during build-time getParams(). Configure buildEnv in your rango() plugin options to enable build-time env access."
|
|
3873
|
+
);
|
|
3466
3874
|
}
|
|
3875
|
+
};
|
|
3876
|
+
const paramsList = await def.getParams(getParamsCtx);
|
|
3877
|
+
const concurrency = def.options?.concurrency ?? 1;
|
|
3878
|
+
const hasBuildVars = Object.keys(buildVars).length > 0 || Object.getOwnPropertySymbols(buildVars).length > 0;
|
|
3879
|
+
for (const params of paramsList) {
|
|
3880
|
+
let url = substituteRouteParams(
|
|
3881
|
+
pattern,
|
|
3882
|
+
params,
|
|
3883
|
+
encodePathParam
|
|
3884
|
+
);
|
|
3885
|
+
if (url.includes("*")) {
|
|
3886
|
+
const wildcardValue = params["*"] ?? params.splat;
|
|
3887
|
+
if (wildcardValue !== void 0) {
|
|
3888
|
+
url = url.replace(
|
|
3889
|
+
/\*[^/]*$/,
|
|
3890
|
+
encodePathParam(wildcardValue)
|
|
3891
|
+
);
|
|
3892
|
+
}
|
|
3893
|
+
}
|
|
3894
|
+
entries.push({
|
|
3895
|
+
urlPath: url.replace(/\/$/, "") || "/",
|
|
3896
|
+
routeName,
|
|
3897
|
+
concurrency,
|
|
3898
|
+
...hasBuildVars ? { buildVars } : {},
|
|
3899
|
+
isPassthroughRoute
|
|
3900
|
+
});
|
|
3467
3901
|
}
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
|
|
3477
|
-
|
|
3478
|
-
|
|
3479
|
-
|
|
3480
|
-
|
|
3481
|
-
|
|
3482
|
-
|
|
3483
|
-
|
|
3484
|
-
|
|
3485
|
-
|
|
3486
|
-
|
|
3487
|
-
true
|
|
3902
|
+
resolvedRoutes++;
|
|
3903
|
+
} catch (err) {
|
|
3904
|
+
resolvedRoutes++;
|
|
3905
|
+
if (err.name === "Skip") {
|
|
3906
|
+
console.log(
|
|
3907
|
+
`[rsc-router] SKIP route "${routeName}" - ${err.message}`
|
|
3908
|
+
);
|
|
3909
|
+
notifyOnError(
|
|
3910
|
+
registry,
|
|
3911
|
+
err,
|
|
3912
|
+
"prerender",
|
|
3913
|
+
routeName,
|
|
3914
|
+
void 0,
|
|
3915
|
+
true
|
|
3916
|
+
);
|
|
3917
|
+
continue;
|
|
3918
|
+
}
|
|
3919
|
+
console.error(
|
|
3920
|
+
`[rsc-router] Failed to get params for prerender route "${routeName}": ${err.message}`
|
|
3488
3921
|
);
|
|
3489
|
-
|
|
3922
|
+
notifyOnError(registry, err, "prerender", routeName);
|
|
3923
|
+
throw err;
|
|
3490
3924
|
}
|
|
3491
|
-
|
|
3492
|
-
|
|
3925
|
+
} else {
|
|
3926
|
+
console.warn(
|
|
3927
|
+
`[rsc-router] Dynamic prerender route "${routeName}" has no getParams(), skipping`
|
|
3493
3928
|
);
|
|
3494
|
-
notifyOnError(registry, err, "prerender", routeName);
|
|
3495
|
-
throw err;
|
|
3496
3929
|
}
|
|
3497
|
-
} else {
|
|
3498
|
-
console.warn(
|
|
3499
|
-
`[rsc-router] Dynamic prerender route "${routeName}" has no getParams(), skipping`
|
|
3500
|
-
);
|
|
3501
3930
|
}
|
|
3502
3931
|
}
|
|
3503
3932
|
}
|
|
3933
|
+
} finally {
|
|
3934
|
+
if (progressInterval) {
|
|
3935
|
+
clearInterval(progressInterval);
|
|
3936
|
+
const elapsed = ((performance.now() - paramsStart) / 1e3).toFixed(1);
|
|
3937
|
+
console.log(
|
|
3938
|
+
`[rsc-router] Resolved prerender params: ${resolvedRoutes}/${totalDynamic} routes (${elapsed}s)`
|
|
3939
|
+
);
|
|
3940
|
+
}
|
|
3504
3941
|
}
|
|
3505
3942
|
if (entries.length === 0) return;
|
|
3506
3943
|
const maxConcurrency = Math.max(...entries.map((e) => e.concurrency));
|
|
@@ -3527,7 +3964,8 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3527
3964
|
entry.urlPath,
|
|
3528
3965
|
{},
|
|
3529
3966
|
entry.buildVars,
|
|
3530
|
-
entry.isPassthroughRoute
|
|
3967
|
+
entry.isPassthroughRoute,
|
|
3968
|
+
state.resolvedBuildEnv
|
|
3531
3969
|
);
|
|
3532
3970
|
if (!result) continue;
|
|
3533
3971
|
if (result.passthrough) {
|
|
@@ -3651,7 +4089,9 @@ async function renderStaticHandlers(state, rscEnv, registry) {
|
|
|
3651
4089
|
const result = await routerInstance.renderStaticSegment(
|
|
3652
4090
|
def.handler,
|
|
3653
4091
|
def.$$id,
|
|
3654
|
-
def.$$routePrefix
|
|
4092
|
+
def.$$routePrefix,
|
|
4093
|
+
state.resolvedBuildEnv,
|
|
4094
|
+
!state.isBuildMode
|
|
3655
4095
|
);
|
|
3656
4096
|
if (result) {
|
|
3657
4097
|
const hasHandles = Object.keys(result.handles).length > 0;
|
|
@@ -3776,7 +4216,11 @@ async function discoverRouters(state, rscEnv) {
|
|
|
3776
4216
|
if (!router.urlpatterns || !generateManifestFull) {
|
|
3777
4217
|
continue;
|
|
3778
4218
|
}
|
|
3779
|
-
const manifest = generateManifestFull(
|
|
4219
|
+
const manifest = generateManifestFull(
|
|
4220
|
+
router.urlpatterns,
|
|
4221
|
+
routerMountIndex,
|
|
4222
|
+
router.__basename ? { urlPrefix: router.__basename } : void 0
|
|
4223
|
+
);
|
|
3780
4224
|
routerMountIndex++;
|
|
3781
4225
|
allManifests.push({ id, manifest });
|
|
3782
4226
|
const routeCount = Object.keys(manifest.routeManifest).length;
|
|
@@ -4225,48 +4669,45 @@ function postprocessBundle(state) {
|
|
|
4225
4669
|
);
|
|
4226
4670
|
const evictionTargets = [
|
|
4227
4671
|
{
|
|
4228
|
-
|
|
4672
|
+
infos: state.handlerChunkInfoMap.values(),
|
|
4229
4673
|
fnName: "Prerender",
|
|
4230
4674
|
brand: "prerenderHandler",
|
|
4231
4675
|
label: "handler code from RSC bundle"
|
|
4232
4676
|
},
|
|
4233
4677
|
{
|
|
4234
|
-
|
|
4678
|
+
infos: state.staticHandlerChunkInfoMap.values(),
|
|
4235
4679
|
fnName: "Static",
|
|
4236
4680
|
brand: "staticHandler",
|
|
4237
4681
|
label: "static handler code"
|
|
4238
4682
|
}
|
|
4239
4683
|
];
|
|
4240
4684
|
for (const target of evictionTargets) {
|
|
4241
|
-
|
|
4242
|
-
|
|
4243
|
-
|
|
4244
|
-
|
|
4245
|
-
|
|
4246
|
-
|
|
4247
|
-
|
|
4248
|
-
|
|
4249
|
-
|
|
4250
|
-
|
|
4251
|
-
|
|
4252
|
-
|
|
4253
|
-
|
|
4254
|
-
|
|
4255
|
-
|
|
4256
|
-
|
|
4257
|
-
|
|
4258
|
-
|
|
4259
|
-
|
|
4685
|
+
for (const info of target.infos) {
|
|
4686
|
+
const chunkPath = resolve7(state.projectRoot, "dist/rsc", info.fileName);
|
|
4687
|
+
try {
|
|
4688
|
+
const code = readFileSync5(chunkPath, "utf-8");
|
|
4689
|
+
const result = evictHandlerCode(
|
|
4690
|
+
code,
|
|
4691
|
+
info.exports,
|
|
4692
|
+
target.fnName,
|
|
4693
|
+
target.brand
|
|
4694
|
+
);
|
|
4695
|
+
if (result) {
|
|
4696
|
+
writeFileSync4(chunkPath, result.code);
|
|
4697
|
+
const savedKB = (result.savedBytes / 1024).toFixed(1);
|
|
4698
|
+
console.log(
|
|
4699
|
+
`[rsc-router] Evicted ${target.label} (${savedKB} KB saved): ${info.fileName}`
|
|
4700
|
+
);
|
|
4701
|
+
}
|
|
4702
|
+
} catch (replaceErr) {
|
|
4703
|
+
console.warn(
|
|
4704
|
+
`[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
|
|
4260
4705
|
);
|
|
4261
4706
|
}
|
|
4262
|
-
} catch (replaceErr) {
|
|
4263
|
-
console.warn(
|
|
4264
|
-
`[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
|
|
4265
|
-
);
|
|
4266
4707
|
}
|
|
4267
4708
|
}
|
|
4268
|
-
state.
|
|
4269
|
-
state.
|
|
4709
|
+
state.handlerChunkInfoMap.clear();
|
|
4710
|
+
state.staticHandlerChunkInfoMap.clear();
|
|
4270
4711
|
if (hasPrerenderData && existsSync6(rscEntryPath)) {
|
|
4271
4712
|
const rscCode = readFileSync5(rscEntryPath, "utf-8");
|
|
4272
4713
|
if (!rscCode.includes("__prerender-manifest.js")) {
|
|
@@ -4309,7 +4750,7 @@ function postprocessBundle(state) {
|
|
|
4309
4750
|
}
|
|
4310
4751
|
if (hasStaticData && existsSync6(rscEntryPath)) {
|
|
4311
4752
|
const rscCode = readFileSync5(rscEntryPath, "utf-8");
|
|
4312
|
-
if (!rscCode.includes("
|
|
4753
|
+
if (!rscCode.includes("__static-manifest.js")) {
|
|
4313
4754
|
try {
|
|
4314
4755
|
const manifestEntries = [];
|
|
4315
4756
|
let totalBytes = copyStagedBuildAssets(
|
|
@@ -4348,7 +4789,22 @@ function postprocessBundle(state) {
|
|
|
4348
4789
|
}
|
|
4349
4790
|
|
|
4350
4791
|
// src/vite/router-discovery.ts
|
|
4792
|
+
var loaderHookRegistered = false;
|
|
4793
|
+
function ensureCloudflareProtocolLoaderRegistered() {
|
|
4794
|
+
if (loaderHookRegistered) return;
|
|
4795
|
+
loaderHookRegistered = true;
|
|
4796
|
+
try {
|
|
4797
|
+
register(
|
|
4798
|
+
new URL("./plugins/cloudflare-protocol-loader-hook.mjs", import.meta.url)
|
|
4799
|
+
);
|
|
4800
|
+
} catch (err) {
|
|
4801
|
+
console.warn(
|
|
4802
|
+
`[rsc-router] Could not register Node ESM loader hook for cloudflare:* imports (${err?.message ?? err}). Falling back to Vite transform only.`
|
|
4803
|
+
);
|
|
4804
|
+
}
|
|
4805
|
+
}
|
|
4351
4806
|
async function createTempRscServer(state, options = {}) {
|
|
4807
|
+
ensureCloudflareProtocolLoaderRegistered();
|
|
4352
4808
|
const { default: rsc } = await import("@vitejs/plugin-rsc");
|
|
4353
4809
|
return createViteServer({
|
|
4354
4810
|
root: state.projectRoot,
|
|
@@ -4371,6 +4827,7 @@ async function createTempRscServer(state, options = {}) {
|
|
|
4371
4827
|
...options.forceBuild ? [hashClientRefs(state.projectRoot)] : [],
|
|
4372
4828
|
createVersionPlugin(),
|
|
4373
4829
|
createVirtualStubPlugin(),
|
|
4830
|
+
createCloudflareProtocolStubPlugin(),
|
|
4374
4831
|
// Dev prerender must use dev-mode IDs (path-based) to match the workerd
|
|
4375
4832
|
// runtime. forceBuild produces hashed IDs for production bundle consistency.
|
|
4376
4833
|
exposeInternalIds(options.forceBuild ? { forceBuild: true } : void 0),
|
|
@@ -4378,8 +4835,69 @@ async function createTempRscServer(state, options = {}) {
|
|
|
4378
4835
|
]
|
|
4379
4836
|
});
|
|
4380
4837
|
}
|
|
4838
|
+
async function resolveBuildEnv(option, factoryCtx) {
|
|
4839
|
+
if (!option) return null;
|
|
4840
|
+
if (option === "auto") {
|
|
4841
|
+
if (factoryCtx.preset !== "cloudflare") {
|
|
4842
|
+
throw new Error(
|
|
4843
|
+
'[rsc-router] buildEnv: "auto" is only supported with preset: "cloudflare". Use a factory function or plain object for other presets.'
|
|
4844
|
+
);
|
|
4845
|
+
}
|
|
4846
|
+
try {
|
|
4847
|
+
const userRequire = createRequire(
|
|
4848
|
+
resolve8(factoryCtx.root, "package.json")
|
|
4849
|
+
);
|
|
4850
|
+
const wranglerPath = userRequire.resolve("wrangler");
|
|
4851
|
+
const { getPlatformProxy } = await import(pathToFileURL(wranglerPath).href);
|
|
4852
|
+
const proxy = await getPlatformProxy();
|
|
4853
|
+
return {
|
|
4854
|
+
env: proxy.env,
|
|
4855
|
+
dispose: proxy.dispose
|
|
4856
|
+
};
|
|
4857
|
+
} catch (err) {
|
|
4858
|
+
throw new Error(
|
|
4859
|
+
`[rsc-router] buildEnv: "auto" requires wrangler to be installed.
|
|
4860
|
+
Install it with: pnpm add -D wrangler
|
|
4861
|
+
${err.message}`
|
|
4862
|
+
);
|
|
4863
|
+
}
|
|
4864
|
+
}
|
|
4865
|
+
if (typeof option === "function") {
|
|
4866
|
+
return await option(factoryCtx);
|
|
4867
|
+
}
|
|
4868
|
+
return { env: option };
|
|
4869
|
+
}
|
|
4870
|
+
async function acquireBuildEnv(s, command, mode) {
|
|
4871
|
+
const option = s.opts?.buildEnv;
|
|
4872
|
+
if (!option) return false;
|
|
4873
|
+
const result = await resolveBuildEnv(option, {
|
|
4874
|
+
root: s.projectRoot,
|
|
4875
|
+
mode,
|
|
4876
|
+
command,
|
|
4877
|
+
preset: s.opts?.preset ?? "node"
|
|
4878
|
+
});
|
|
4879
|
+
if (!result) return false;
|
|
4880
|
+
s.resolvedBuildEnv = result.env;
|
|
4881
|
+
s.buildEnvDispose = result.dispose ?? null;
|
|
4882
|
+
globalThis[BUILD_ENV_GLOBAL_KEY] = result.env;
|
|
4883
|
+
return true;
|
|
4884
|
+
}
|
|
4885
|
+
async function releaseBuildEnv(s) {
|
|
4886
|
+
if (s.buildEnvDispose) {
|
|
4887
|
+
try {
|
|
4888
|
+
await s.buildEnvDispose();
|
|
4889
|
+
} catch (err) {
|
|
4890
|
+
console.warn(`[rsc-router] buildEnv dispose failed: ${err.message}`);
|
|
4891
|
+
}
|
|
4892
|
+
s.buildEnvDispose = null;
|
|
4893
|
+
}
|
|
4894
|
+
s.resolvedBuildEnv = void 0;
|
|
4895
|
+
delete globalThis[BUILD_ENV_GLOBAL_KEY];
|
|
4896
|
+
}
|
|
4381
4897
|
function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
4382
4898
|
const s = createDiscoveryState(entryPath, opts);
|
|
4899
|
+
let viteCommand = "build";
|
|
4900
|
+
let viteMode = "production";
|
|
4383
4901
|
return {
|
|
4384
4902
|
name: "@rangojs/router:discovery",
|
|
4385
4903
|
config() {
|
|
@@ -4388,31 +4906,13 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4388
4906
|
__RANGO_DEBUG__: JSON.stringify(!!process.env.INTERNAL_RANGO_DEBUG)
|
|
4389
4907
|
}
|
|
4390
4908
|
};
|
|
4391
|
-
if (opts?.enableBuildPrerender) {
|
|
4392
|
-
config.environments = {
|
|
4393
|
-
rsc: {
|
|
4394
|
-
build: {
|
|
4395
|
-
rollupOptions: {
|
|
4396
|
-
output: {
|
|
4397
|
-
manualChunks(id) {
|
|
4398
|
-
if (s.resolvedPrerenderModules?.has(id)) {
|
|
4399
|
-
return "__prerender-handlers";
|
|
4400
|
-
}
|
|
4401
|
-
if (s.resolvedStaticModules?.has(id)) {
|
|
4402
|
-
return "__static-handlers";
|
|
4403
|
-
}
|
|
4404
|
-
}
|
|
4405
|
-
}
|
|
4406
|
-
}
|
|
4407
|
-
}
|
|
4408
|
-
}
|
|
4409
|
-
};
|
|
4410
|
-
}
|
|
4411
4909
|
return config;
|
|
4412
4910
|
},
|
|
4413
4911
|
configResolved(config) {
|
|
4414
4912
|
s.projectRoot = config.root;
|
|
4415
4913
|
s.isBuildMode = config.command === "build";
|
|
4914
|
+
viteCommand = config.command;
|
|
4915
|
+
viteMode = config.mode;
|
|
4416
4916
|
s.userResolveAlias = config.resolve.alias;
|
|
4417
4917
|
if (!s.resolvedEntryPath && opts?.routerPathRef?.path) {
|
|
4418
4918
|
s.resolvedEntryPath = opts.routerPathRef.path;
|
|
@@ -4457,6 +4957,8 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4457
4957
|
});
|
|
4458
4958
|
prerenderTempServer = null;
|
|
4459
4959
|
}
|
|
4960
|
+
releaseBuildEnv(s).catch(() => {
|
|
4961
|
+
});
|
|
4460
4962
|
});
|
|
4461
4963
|
async function getOrCreateTempServer() {
|
|
4462
4964
|
if (prerenderNodeRegistry) {
|
|
@@ -4487,6 +4989,7 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4487
4989
|
if (!rscEnv?.runner) {
|
|
4488
4990
|
s.devServerOrigin = getDevServerOrigin();
|
|
4489
4991
|
try {
|
|
4992
|
+
await acquireBuildEnv(s, viteCommand, viteMode);
|
|
4490
4993
|
const tempRscEnv = await getOrCreateTempServer();
|
|
4491
4994
|
if (tempRscEnv) {
|
|
4492
4995
|
await discoverRouters(s, tempRscEnv);
|
|
@@ -4502,6 +5005,7 @@ ${err.stack}`
|
|
|
4502
5005
|
return;
|
|
4503
5006
|
}
|
|
4504
5007
|
try {
|
|
5008
|
+
await acquireBuildEnv(s, viteCommand, viteMode);
|
|
4505
5009
|
const serverMod = await rscEnv.runner.import(
|
|
4506
5010
|
"@rangojs/router/server"
|
|
4507
5011
|
);
|
|
@@ -4566,7 +5070,26 @@ ${err.stack}`
|
|
|
4566
5070
|
res.end("Missing pathname");
|
|
4567
5071
|
return;
|
|
4568
5072
|
}
|
|
4569
|
-
|
|
5073
|
+
const rscEnv = server.environments?.rsc;
|
|
5074
|
+
let registry = null;
|
|
5075
|
+
if (rscEnv?.runner && s.resolvedEntryPath) {
|
|
5076
|
+
try {
|
|
5077
|
+
await rscEnv.runner.import(s.resolvedEntryPath);
|
|
5078
|
+
const serverMod = await rscEnv.runner.import(
|
|
5079
|
+
"@rangojs/router/server"
|
|
5080
|
+
);
|
|
5081
|
+
registry = serverMod.RouterRegistry ?? null;
|
|
5082
|
+
} catch (err) {
|
|
5083
|
+
console.warn(
|
|
5084
|
+
`[rsc-router] Dev prerender module refresh failed: ${err.message}`
|
|
5085
|
+
);
|
|
5086
|
+
res.statusCode = 500;
|
|
5087
|
+
res.end(`Prerender handler error: ${err.message}`);
|
|
5088
|
+
return;
|
|
5089
|
+
}
|
|
5090
|
+
} else {
|
|
5091
|
+
registry = mainRegistry;
|
|
5092
|
+
}
|
|
4570
5093
|
if (!registry) {
|
|
4571
5094
|
if (!prerenderNodeRegistry) {
|
|
4572
5095
|
await getOrCreateTempServer();
|
|
@@ -4588,7 +5111,10 @@ ${err.stack}`
|
|
|
4588
5111
|
pathname,
|
|
4589
5112
|
{},
|
|
4590
5113
|
void 0,
|
|
4591
|
-
wantPassthrough
|
|
5114
|
+
wantPassthrough,
|
|
5115
|
+
s.resolvedBuildEnv,
|
|
5116
|
+
true
|
|
5117
|
+
// devMode: check getParams for passthrough routes
|
|
4592
5118
|
);
|
|
4593
5119
|
if (!result) continue;
|
|
4594
5120
|
if (result.passthrough) continue;
|
|
@@ -4724,6 +5250,7 @@ ${err.stack}`
|
|
|
4724
5250
|
resetStagedBuildAssets(s.projectRoot);
|
|
4725
5251
|
s.prerenderManifestEntries = null;
|
|
4726
5252
|
s.staticManifestEntries = null;
|
|
5253
|
+
await acquireBuildEnv(s, viteCommand, viteMode);
|
|
4727
5254
|
let tempServer = null;
|
|
4728
5255
|
globalThis.__rscRouterDiscoveryActive = true;
|
|
4729
5256
|
try {
|
|
@@ -4763,6 +5290,7 @@ ${details}`
|
|
|
4763
5290
|
if (tempServer) {
|
|
4764
5291
|
await tempServer.close();
|
|
4765
5292
|
}
|
|
5293
|
+
await releaseBuildEnv(s);
|
|
4766
5294
|
}
|
|
4767
5295
|
},
|
|
4768
5296
|
// Virtual module: provides the pre-generated route manifest as a JS module
|
|
@@ -4805,20 +5333,30 @@ ${details}`
|
|
|
4805
5333
|
}
|
|
4806
5334
|
if (!s.resolvedPrerenderModules?.size && !s.resolvedStaticModules?.size)
|
|
4807
5335
|
return;
|
|
5336
|
+
s.handlerChunkInfoMap.clear();
|
|
5337
|
+
s.staticHandlerChunkInfoMap.clear();
|
|
4808
5338
|
for (const [fileName, chunk] of Object.entries(bundle)) {
|
|
4809
5339
|
if (chunk.type !== "chunk") continue;
|
|
4810
|
-
if (
|
|
5340
|
+
if (s.resolvedPrerenderModules?.size) {
|
|
4811
5341
|
const handlers = extractHandlerExportsFromChunk(
|
|
4812
5342
|
chunk.code,
|
|
4813
5343
|
s.resolvedPrerenderModules,
|
|
4814
5344
|
"Prerender",
|
|
4815
|
-
|
|
5345
|
+
false
|
|
4816
5346
|
);
|
|
4817
5347
|
if (handlers.length > 0) {
|
|
4818
|
-
|
|
5348
|
+
const existing = s.handlerChunkInfoMap.get(fileName);
|
|
5349
|
+
if (existing) {
|
|
5350
|
+
existing.exports.push(...handlers);
|
|
5351
|
+
} else {
|
|
5352
|
+
s.handlerChunkInfoMap.set(fileName, {
|
|
5353
|
+
fileName,
|
|
5354
|
+
exports: handlers
|
|
5355
|
+
});
|
|
5356
|
+
}
|
|
4819
5357
|
}
|
|
4820
5358
|
}
|
|
4821
|
-
if (
|
|
5359
|
+
if (s.resolvedStaticModules?.size) {
|
|
4822
5360
|
const handlers = extractHandlerExportsFromChunk(
|
|
4823
5361
|
chunk.code,
|
|
4824
5362
|
s.resolvedStaticModules,
|
|
@@ -4826,7 +5364,15 @@ ${details}`
|
|
|
4826
5364
|
false
|
|
4827
5365
|
);
|
|
4828
5366
|
if (handlers.length > 0) {
|
|
4829
|
-
|
|
5367
|
+
const existing = s.staticHandlerChunkInfoMap.get(fileName);
|
|
5368
|
+
if (existing) {
|
|
5369
|
+
existing.exports.push(...handlers);
|
|
5370
|
+
} else {
|
|
5371
|
+
s.staticHandlerChunkInfoMap.set(fileName, {
|
|
5372
|
+
fileName,
|
|
5373
|
+
exports: handlers
|
|
5374
|
+
});
|
|
5375
|
+
}
|
|
4830
5376
|
}
|
|
4831
5377
|
}
|
|
4832
5378
|
}
|
|
@@ -4853,7 +5399,16 @@ async function rango(options) {
|
|
|
4853
5399
|
const showBanner = resolvedOptions.banner ?? true;
|
|
4854
5400
|
const plugins = [];
|
|
4855
5401
|
const rangoAliases = getPackageAliases();
|
|
4856
|
-
const excludeDeps =
|
|
5402
|
+
const excludeDeps = [
|
|
5403
|
+
...getExcludeDeps(),
|
|
5404
|
+
// The public browser entry re-exports the RSDW browser client.
|
|
5405
|
+
// Excluding both keeps Vite from freezing the unpatched bundle into
|
|
5406
|
+
// .vite/deps before our source transforms run.
|
|
5407
|
+
"@vitejs/plugin-rsc/browser",
|
|
5408
|
+
// Keep the browser RSDW client out of Vite's dep optimizer so our
|
|
5409
|
+
// cjs-to-esm transform can patch the real file.
|
|
5410
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.browser"
|
|
5411
|
+
];
|
|
4857
5412
|
const routerRef = { path: void 0 };
|
|
4858
5413
|
const prerenderEnabled = true;
|
|
4859
5414
|
if (preset === "cloudflare") {
|
|
@@ -4949,6 +5504,7 @@ async function rango(options) {
|
|
|
4949
5504
|
}
|
|
4950
5505
|
});
|
|
4951
5506
|
plugins.push(createVirtualEntriesPlugin(finalEntries));
|
|
5507
|
+
plugins.push(performanceTracksPlugin());
|
|
4952
5508
|
plugins.push(
|
|
4953
5509
|
rsc({
|
|
4954
5510
|
entries: finalEntries,
|
|
@@ -5067,6 +5623,7 @@ ${list}`);
|
|
|
5067
5623
|
}
|
|
5068
5624
|
});
|
|
5069
5625
|
plugins.push(createVirtualEntriesPlugin(finalEntries, routerRef));
|
|
5626
|
+
plugins.push(performanceTracksPlugin());
|
|
5070
5627
|
plugins.push(
|
|
5071
5628
|
rsc({
|
|
5072
5629
|
entries: finalEntries
|
|
@@ -5107,7 +5664,8 @@ ${list}`);
|
|
|
5107
5664
|
createRouterDiscoveryPlugin(discoveryEntryPath, {
|
|
5108
5665
|
routerPathRef: discoveryRouterRef,
|
|
5109
5666
|
enableBuildPrerender: prerenderEnabled,
|
|
5110
|
-
|
|
5667
|
+
buildEnv: options?.buildEnv,
|
|
5668
|
+
preset
|
|
5111
5669
|
})
|
|
5112
5670
|
);
|
|
5113
5671
|
return plugins;
|
|
@@ -5120,29 +5678,75 @@ function poke() {
|
|
|
5120
5678
|
apply: "serve",
|
|
5121
5679
|
configureServer(server) {
|
|
5122
5680
|
const stdin = process.stdin;
|
|
5123
|
-
const
|
|
5681
|
+
const debug = process.env.RANGO_POKE_DEBUG === "1";
|
|
5682
|
+
const triggerReload = (source) => {
|
|
5683
|
+
server.hot.send({ type: "full-reload", path: "*" });
|
|
5684
|
+
server.config.logger.info(` browser reload (${source})`, {
|
|
5685
|
+
timestamp: true
|
|
5686
|
+
});
|
|
5687
|
+
};
|
|
5688
|
+
const toBuffer = (chunk) => {
|
|
5689
|
+
return typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
|
|
5690
|
+
};
|
|
5691
|
+
const formatChunk = (chunk) => {
|
|
5692
|
+
const data = toBuffer(chunk);
|
|
5693
|
+
const hex = Array.from(data).map((byte) => `0x${byte.toString(16).padStart(2, "0")}`).join(" ");
|
|
5694
|
+
const ascii = Array.from(data).map((byte) => {
|
|
5695
|
+
if (byte >= 32 && byte <= 126) return String.fromCharCode(byte);
|
|
5696
|
+
if (byte === 10) return "\\n";
|
|
5697
|
+
if (byte === 13) return "\\r";
|
|
5698
|
+
if (byte === 9) return "\\t";
|
|
5699
|
+
return ".";
|
|
5700
|
+
}).join("");
|
|
5701
|
+
return `len=${data.length} hex=[${hex}] ascii="${ascii}"`;
|
|
5702
|
+
};
|
|
5703
|
+
const readCtrlR = (chunk) => {
|
|
5704
|
+
const data = typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
|
|
5705
|
+
return data.length === 1 && data[0] === 18;
|
|
5706
|
+
};
|
|
5707
|
+
const readSubmittedCommands = (chunk) => {
|
|
5708
|
+
const text = toBuffer(chunk).toString("utf8").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
5709
|
+
if (!text.includes("\n")) return [];
|
|
5710
|
+
const lines = text.split("\n");
|
|
5711
|
+
lines.pop();
|
|
5712
|
+
return lines;
|
|
5713
|
+
};
|
|
5714
|
+
if (debug) {
|
|
5715
|
+
server.config.logger.info(
|
|
5716
|
+
` poke debug enabled (isTTY=${stdin.isTTY ? "yes" : "no"}, isRaw=${stdin.isTTY ? stdin.isRaw ? "yes" : "no" : "n/a"})`,
|
|
5717
|
+
{ timestamp: true }
|
|
5718
|
+
);
|
|
5719
|
+
}
|
|
5124
5720
|
if (stdin.isTTY) {
|
|
5125
|
-
|
|
5721
|
+
server.config.logger.info(
|
|
5722
|
+
" poke ready: press e + enter to reload browser (ctrl+r also works when available)",
|
|
5723
|
+
{ timestamp: true }
|
|
5724
|
+
);
|
|
5126
5725
|
}
|
|
5127
5726
|
const onData = (data) => {
|
|
5128
|
-
if (
|
|
5129
|
-
|
|
5130
|
-
process.emit("SIGINT", "SIGINT");
|
|
5131
|
-
return;
|
|
5132
|
-
}
|
|
5133
|
-
if (data[0] === 18) {
|
|
5134
|
-
server.hot.send({ type: "full-reload", path: "*" });
|
|
5135
|
-
server.config.logger.info(" browser reload (ctrl+r)", {
|
|
5727
|
+
if (debug) {
|
|
5728
|
+
server.config.logger.info(` poke stdin ${formatChunk(data)}`, {
|
|
5136
5729
|
timestamp: true
|
|
5137
5730
|
});
|
|
5138
5731
|
}
|
|
5732
|
+
if (readCtrlR(data)) {
|
|
5733
|
+
triggerReload("ctrl+r");
|
|
5734
|
+
return;
|
|
5735
|
+
}
|
|
5736
|
+
for (const command of readSubmittedCommands(data)) {
|
|
5737
|
+
if (command === "e") {
|
|
5738
|
+
triggerReload("e+enter");
|
|
5739
|
+
return;
|
|
5740
|
+
}
|
|
5741
|
+
if (command === "\x1Br") {
|
|
5742
|
+
triggerReload("option+r+enter");
|
|
5743
|
+
return;
|
|
5744
|
+
}
|
|
5745
|
+
}
|
|
5139
5746
|
};
|
|
5140
5747
|
stdin.on("data", onData);
|
|
5141
5748
|
server.httpServer?.on("close", () => {
|
|
5142
5749
|
stdin.off("data", onData);
|
|
5143
|
-
if (stdin.isTTY && previousRawMode !== null) {
|
|
5144
|
-
stdin.setRawMode(previousRawMode);
|
|
5145
|
-
}
|
|
5146
5750
|
});
|
|
5147
5751
|
}
|
|
5148
5752
|
};
|