@rangojs/router 0.0.0-experimental.1b930379 → 0.0.0-experimental.1db96a9e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +4 -0
- package/README.md +76 -18
- 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 +138 -50
- 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 +684 -366
- 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/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 +16 -15
- package/skills/cache-guide/SKILL.md +32 -0
- package/skills/caching/SKILL.md +45 -4
- package/skills/links/SKILL.md +3 -1
- package/skills/loader/SKILL.md +53 -43
- package/skills/middleware/SKILL.md +2 -0
- package/skills/parallel/SKILL.md +126 -0
- package/skills/prerender/SKILL.md +110 -68
- package/skills/route/SKILL.md +31 -0
- package/skills/router-setup/SKILL.md +87 -2
- 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 +19 -13
- package/src/browser/navigation-client.ts +115 -58
- package/src/browser/navigation-store.ts +43 -8
- package/src/browser/navigation-transaction.ts +11 -9
- package/src/browser/partial-update.ts +80 -15
- package/src/browser/prefetch/cache.ts +57 -5
- package/src/browser/prefetch/fetch.ts +38 -23
- package/src/browser/prefetch/queue.ts +92 -20
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/react/Link.tsx +53 -9
- package/src/browser/react/NavigationProvider.tsx +40 -4
- package/src/browser/react/context.ts +7 -2
- package/src/browser/react/use-handle.ts +9 -58
- package/src/browser/react/use-router.ts +21 -8
- package/src/browser/rsc-router.tsx +134 -59
- package/src/browser/scroll-restoration.ts +41 -42
- package/src/browser/segment-reconciler.ts +6 -1
- package/src/browser/server-action-bridge.ts +8 -6
- package/src/browser/types.ts +36 -5
- package/src/build/generate-manifest.ts +6 -6
- package/src/build/generate-route-types.ts +3 -0
- package/src/build/route-types/include-resolution.ts +8 -1
- package/src/build/route-types/router-processing.ts +223 -74
- package/src/build/route-types/scan-filter.ts +8 -1
- package/src/cache/cache-runtime.ts +15 -11
- package/src/cache/cache-scope.ts +48 -7
- package/src/cache/cf/cf-cache-store.ts +453 -11
- package/src/cache/cf/index.ts +5 -1
- package/src/cache/document-cache.ts +17 -7
- package/src/cache/index.ts +1 -0
- package/src/cache/taint.ts +55 -0
- package/src/client.tsx +2 -56
- 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 +12 -0
- package/src/prerender/store.ts +5 -4
- package/src/prerender.ts +138 -77
- package/src/reverse.ts +22 -1
- package/src/route-definition/dsl-helpers.ts +73 -25
- package/src/route-definition/helpers-types.ts +10 -6
- package/src/route-definition/index.ts +3 -0
- package/src/route-definition/redirect.ts +11 -3
- package/src/route-definition/resolve-handler-use.ts +149 -0
- package/src/route-map-builder.ts +7 -1
- package/src/route-types.ts +11 -0
- package/src/router/content-negotiation.ts +100 -1
- package/src/router/find-match.ts +4 -2
- package/src/router/handler-context.ts +79 -23
- package/src/router/intercept-resolution.ts +11 -4
- package/src/router/lazy-includes.ts +4 -1
- package/src/router/loader-resolution.ts +156 -21
- package/src/router/logging.ts +5 -2
- package/src/router/manifest.ts +9 -3
- 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 +92 -16
- package/src/router/match-middleware/cache-store.ts +53 -10
- package/src/router/match-middleware/intercept-resolution.ts +9 -7
- package/src/router/match-middleware/segment-resolution.ts +61 -5
- package/src/router/match-result.ts +22 -6
- package/src/router/metrics.ts +6 -1
- package/src/router/middleware-types.ts +6 -8
- package/src/router/middleware.ts +4 -6
- package/src/router/navigation-snapshot.ts +182 -0
- 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 +6 -1
- package/src/router/router-interfaces.ts +36 -4
- package/src/router/router-options.ts +37 -11
- package/src/router/segment-resolution/fresh.ts +193 -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 +431 -297
- package/src/router/segment-wrappers.ts +2 -0
- package/src/router/types.ts +1 -0
- package/src/router.ts +59 -6
- package/src/rsc/handler.ts +464 -368
- package/src/rsc/loader-fetch.ts +23 -3
- package/src/rsc/manifest-init.ts +5 -1
- package/src/rsc/progressive-enhancement.ts +14 -2
- package/src/rsc/rsc-rendering.ts +10 -1
- package/src/rsc/server-action.ts +8 -0
- package/src/rsc/ssr-setup.ts +2 -2
- package/src/rsc/types.ts +9 -1
- package/src/segment-system.tsx +140 -4
- package/src/server/context.ts +140 -14
- package/src/server/handle-store.ts +19 -0
- package/src/server/loader-registry.ts +9 -8
- package/src/server/request-context.ts +185 -19
- 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 +8 -1
- package/src/types/segments.ts +2 -0
- package/src/urls/path-helper-types.ts +9 -2
- package/src/urls/path-helper.ts +48 -13
- package/src/urls/pattern-types.ts +12 -0
- package/src/urls/response-types.ts +16 -6
- package/src/use-loader.tsx +73 -4
- package/src/vite/discovery/bundle-postprocess.ts +30 -33
- package/src/vite/discovery/discover-routers.ts +5 -1
- package/src/vite/discovery/prerender-collection.ts +44 -1
- package/src/vite/discovery/state.ts +13 -6
- package/src/vite/index.ts +4 -0
- package/src/vite/plugin-types.ts +51 -79
- package/src/vite/plugins/expose-action-id.ts +1 -3
- package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
- package/src/vite/plugins/expose-internal-ids.ts +122 -39
- package/src/vite/plugins/performance-tracks.ts +88 -0
- package/src/vite/plugins/refresh-cmd.ts +88 -26
- package/src/vite/plugins/version-plugin.ts +13 -1
- package/src/vite/rango.ts +163 -211
- package/src/vite/router-discovery.ts +178 -45
- package/src/vite/utils/banner.ts +3 -3
- package/src/vite/utils/prerender-utils.ts +18 -0
- package/src/vite/utils/shared-utils.ts +3 -2
package/dist/vite/index.js
CHANGED
|
@@ -292,7 +292,7 @@ function exposeActionId() {
|
|
|
292
292
|
}
|
|
293
293
|
if (!rscPluginApi) {
|
|
294
294
|
throw new Error(
|
|
295
|
-
"[rsc-router] Could not find @vitejs/plugin-rsc. @rangojs/router requires the Vite RSC plugin
|
|
295
|
+
"[rsc-router] Could not find @vitejs/plugin-rsc. @rangojs/router requires the Vite RSC plugin, which is included automatically by rango()."
|
|
296
296
|
);
|
|
297
297
|
}
|
|
298
298
|
if (!isBuild) return;
|
|
@@ -910,9 +910,7 @@ function generateWholeFileStubs(cfg, bindings, code, filePath, isBuild) {
|
|
|
910
910
|
});
|
|
911
911
|
return { code: stubs.join("\n") + "\n", map: null };
|
|
912
912
|
}
|
|
913
|
-
function
|
|
914
|
-
if (bindings.length === 0) return null;
|
|
915
|
-
const s = new MagicString2(code);
|
|
913
|
+
function stubHandlerExprs(cfg, bindings, s, filePath, isBuild) {
|
|
916
914
|
let hasChanges = false;
|
|
917
915
|
for (const binding of bindings) {
|
|
918
916
|
const exportName = binding.exportNames[0];
|
|
@@ -924,15 +922,7 @@ function generateExprStubs(cfg, bindings, code, filePath, sourceId, isBuild) {
|
|
|
924
922
|
);
|
|
925
923
|
hasChanges = true;
|
|
926
924
|
}
|
|
927
|
-
|
|
928
|
-
return {
|
|
929
|
-
code: s.toString(),
|
|
930
|
-
map: s.generateMap({
|
|
931
|
-
source: sourceId,
|
|
932
|
-
includeContent: true,
|
|
933
|
-
hires: "boundary"
|
|
934
|
-
})
|
|
935
|
-
};
|
|
925
|
+
return hasChanges;
|
|
936
926
|
}
|
|
937
927
|
function transformHandlerIds(cfg, bindings, s, filePath, isBuild) {
|
|
938
928
|
let hasChanges = false;
|
|
@@ -1269,15 +1259,6 @@ ${lazyImports.join(",\n")}
|
|
|
1269
1259
|
isBuild
|
|
1270
1260
|
);
|
|
1271
1261
|
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
1262
|
}
|
|
1282
1263
|
if (hasPrerenderHandlerCode && isRscEnv && isBuild) {
|
|
1283
1264
|
const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
|
|
@@ -1329,15 +1310,57 @@ ${lazyImports.join(",\n")}
|
|
|
1329
1310
|
isBuild
|
|
1330
1311
|
);
|
|
1331
1312
|
if (wholeFile) return wholeFile;
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1313
|
+
}
|
|
1314
|
+
if (!isRscEnv && (hasPrerenderHandlerCode || hasStaticHandlerCode)) {
|
|
1315
|
+
const allBindings = [];
|
|
1316
|
+
if (hasLoaderCode) {
|
|
1317
|
+
allBindings.push(...getBindings(code, getFnNames("createLoader")));
|
|
1318
|
+
}
|
|
1319
|
+
if (hasHandleCode) {
|
|
1320
|
+
allBindings.push(...getBindings(code, getFnNames("createHandle")));
|
|
1321
|
+
}
|
|
1322
|
+
if (hasLocationStateCode) {
|
|
1323
|
+
allBindings.push(
|
|
1324
|
+
...getBindings(code, getFnNames("createLocationState"))
|
|
1325
|
+
);
|
|
1326
|
+
}
|
|
1327
|
+
if (hasPrerenderHandlerCode) {
|
|
1328
|
+
allBindings.push(
|
|
1329
|
+
...getBindings(code, getFnNames(PRERENDER_CONFIG.fnName))
|
|
1330
|
+
);
|
|
1331
|
+
}
|
|
1332
|
+
if (hasStaticHandlerCode) {
|
|
1333
|
+
allBindings.push(
|
|
1334
|
+
...getBindings(code, getFnNames(STATIC_CONFIG.fnName))
|
|
1335
|
+
);
|
|
1336
|
+
}
|
|
1337
|
+
if (allBindings.length > 0 && isExportOnlyFile(code, allBindings)) {
|
|
1338
|
+
const stubs = [];
|
|
1339
|
+
for (const binding of allBindings) {
|
|
1340
|
+
const name = binding.exportNames[0];
|
|
1341
|
+
const stubId = isBuild ? hashId(filePath, name) : `${filePath}#${name}`;
|
|
1342
|
+
const fnCall = code.slice(
|
|
1343
|
+
binding.callExprStart,
|
|
1344
|
+
binding.callOpenParenPos + 1
|
|
1345
|
+
);
|
|
1346
|
+
let brand = "loader";
|
|
1347
|
+
if (hasPrerenderHandlerCode && getFnNames(PRERENDER_CONFIG.fnName).some(
|
|
1348
|
+
(n) => fnCall.includes(n)
|
|
1349
|
+
)) {
|
|
1350
|
+
brand = PRERENDER_CONFIG.brand;
|
|
1351
|
+
} else if (hasStaticHandlerCode && getFnNames(STATIC_CONFIG.fnName).some((n) => fnCall.includes(n))) {
|
|
1352
|
+
brand = STATIC_CONFIG.brand;
|
|
1353
|
+
} else if (hasHandleCode && getFnNames("createHandle").some((n) => fnCall.includes(n))) {
|
|
1354
|
+
brand = "handle";
|
|
1355
|
+
} else if (hasLocationStateCode && getFnNames("createLocationState").some((n) => fnCall.includes(n))) {
|
|
1356
|
+
brand = "locationState";
|
|
1357
|
+
}
|
|
1358
|
+
stubs.push(
|
|
1359
|
+
`export const ${name} = { __brand: "${brand}", $$id: "${stubId}" };`
|
|
1360
|
+
);
|
|
1361
|
+
}
|
|
1362
|
+
return { code: stubs.join("\n") + "\n", map: null };
|
|
1363
|
+
}
|
|
1341
1364
|
}
|
|
1342
1365
|
if (hasStaticHandlerCode && isRscEnv && isBuild) {
|
|
1343
1366
|
const fnNames = getFnNames(STATIC_CONFIG.fnName);
|
|
@@ -1372,25 +1395,41 @@ ${lazyImports.join(",\n")}
|
|
|
1372
1395
|
isBuild
|
|
1373
1396
|
) || changed;
|
|
1374
1397
|
}
|
|
1375
|
-
if (hasPrerenderHandlerCode
|
|
1398
|
+
if (hasPrerenderHandlerCode) {
|
|
1376
1399
|
const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1400
|
+
const bindings = getBindings(code, fnNames);
|
|
1401
|
+
if (isRscEnv) {
|
|
1402
|
+
changed = transformHandlerIds(
|
|
1403
|
+
PRERENDER_CONFIG,
|
|
1404
|
+
bindings,
|
|
1405
|
+
s,
|
|
1406
|
+
filePath,
|
|
1407
|
+
isBuild
|
|
1408
|
+
) || changed;
|
|
1409
|
+
} else {
|
|
1410
|
+
changed = stubHandlerExprs(
|
|
1411
|
+
PRERENDER_CONFIG,
|
|
1412
|
+
bindings,
|
|
1413
|
+
s,
|
|
1414
|
+
filePath,
|
|
1415
|
+
isBuild
|
|
1416
|
+
) || changed;
|
|
1417
|
+
}
|
|
1384
1418
|
}
|
|
1385
|
-
if (hasStaticHandlerCode
|
|
1419
|
+
if (hasStaticHandlerCode) {
|
|
1386
1420
|
const fnNames = getFnNames(STATIC_CONFIG.fnName);
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1421
|
+
const bindings = getBindings(code, fnNames);
|
|
1422
|
+
if (isRscEnv) {
|
|
1423
|
+
changed = transformHandlerIds(
|
|
1424
|
+
STATIC_CONFIG,
|
|
1425
|
+
bindings,
|
|
1426
|
+
s,
|
|
1427
|
+
filePath,
|
|
1428
|
+
isBuild
|
|
1429
|
+
) || changed;
|
|
1430
|
+
} else {
|
|
1431
|
+
changed = stubHandlerExprs(STATIC_CONFIG, bindings, s, filePath, isBuild) || changed;
|
|
1432
|
+
}
|
|
1394
1433
|
}
|
|
1395
1434
|
if (!changed) return;
|
|
1396
1435
|
return {
|
|
@@ -1745,7 +1784,7 @@ import { resolve } from "node:path";
|
|
|
1745
1784
|
// package.json
|
|
1746
1785
|
var package_default = {
|
|
1747
1786
|
name: "@rangojs/router",
|
|
1748
|
-
version: "0.0.0-experimental.
|
|
1787
|
+
version: "0.0.0-experimental.1db96a9e",
|
|
1749
1788
|
description: "Django-inspired RSC router with composable URL patterns",
|
|
1750
1789
|
keywords: [
|
|
1751
1790
|
"react",
|
|
@@ -1887,7 +1926,7 @@ var package_default = {
|
|
|
1887
1926
|
"test:unit:watch": "vitest"
|
|
1888
1927
|
},
|
|
1889
1928
|
dependencies: {
|
|
1890
|
-
"@vitejs/plugin-rsc": "^0.5.
|
|
1929
|
+
"@vitejs/plugin-rsc": "^0.5.19",
|
|
1891
1930
|
"magic-string": "^0.30.17",
|
|
1892
1931
|
picomatch: "^4.0.3",
|
|
1893
1932
|
"rsc-html-stream": "^0.0.7"
|
|
@@ -2095,31 +2134,7 @@ declare global {
|
|
|
2095
2134
|
}
|
|
2096
2135
|
|
|
2097
2136
|
// src/build/route-types/scan-filter.ts
|
|
2098
|
-
import { join, relative } from "node:path";
|
|
2099
2137
|
import picomatch from "picomatch";
|
|
2100
|
-
var DEFAULT_EXCLUDE_PATTERNS = [
|
|
2101
|
-
"**/__tests__/**",
|
|
2102
|
-
"**/__mocks__/**",
|
|
2103
|
-
"**/dist/**",
|
|
2104
|
-
"**/coverage/**",
|
|
2105
|
-
"**/*.test.{ts,tsx,js,jsx}",
|
|
2106
|
-
"**/*.spec.{ts,tsx,js,jsx}"
|
|
2107
|
-
];
|
|
2108
|
-
function createScanFilter(root, opts) {
|
|
2109
|
-
const { include, exclude } = opts;
|
|
2110
|
-
const hasInclude = include && include.length > 0;
|
|
2111
|
-
const hasCustomExclude = exclude !== void 0;
|
|
2112
|
-
if (!hasInclude && !hasCustomExclude) return void 0;
|
|
2113
|
-
const effectiveExclude = exclude ?? DEFAULT_EXCLUDE_PATTERNS;
|
|
2114
|
-
const includeMatcher = hasInclude ? picomatch(include) : null;
|
|
2115
|
-
const excludeMatcher = effectiveExclude.length > 0 ? picomatch(effectiveExclude) : null;
|
|
2116
|
-
return (absolutePath) => {
|
|
2117
|
-
const rel = relative(root, absolutePath);
|
|
2118
|
-
if (excludeMatcher && excludeMatcher(rel)) return false;
|
|
2119
|
-
if (includeMatcher) return includeMatcher(rel);
|
|
2120
|
-
return true;
|
|
2121
|
-
};
|
|
2122
|
-
}
|
|
2123
2138
|
|
|
2124
2139
|
// src/build/route-types/per-module-writer.ts
|
|
2125
2140
|
import ts4 from "typescript";
|
|
@@ -2341,7 +2356,7 @@ function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSche
|
|
|
2341
2356
|
}
|
|
2342
2357
|
return routeMap;
|
|
2343
2358
|
}
|
|
2344
|
-
function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut) {
|
|
2359
|
+
function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut, inlineBlock) {
|
|
2345
2360
|
visited = visited ?? /* @__PURE__ */ new Set();
|
|
2346
2361
|
const realPath = resolve2(filePath);
|
|
2347
2362
|
const key = variableName ? `${realPath}:${variableName}` : realPath;
|
|
@@ -2357,7 +2372,9 @@ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagno
|
|
|
2357
2372
|
return { routes: {}, searchSchemas: {} };
|
|
2358
2373
|
}
|
|
2359
2374
|
let block;
|
|
2360
|
-
if (
|
|
2375
|
+
if (inlineBlock) {
|
|
2376
|
+
block = inlineBlock;
|
|
2377
|
+
} else if (variableName) {
|
|
2361
2378
|
const extracted = extractUrlsBlockForVariable(source, variableName);
|
|
2362
2379
|
if (!extracted) return { routes: {}, searchSchemas: {} };
|
|
2363
2380
|
block = extracted;
|
|
@@ -2386,7 +2403,7 @@ import {
|
|
|
2386
2403
|
readdirSync
|
|
2387
2404
|
} from "node:fs";
|
|
2388
2405
|
import {
|
|
2389
|
-
join
|
|
2406
|
+
join,
|
|
2390
2407
|
dirname as dirname2,
|
|
2391
2408
|
resolve as resolve3,
|
|
2392
2409
|
sep,
|
|
@@ -2406,7 +2423,7 @@ function countPublicRouteEntries(source) {
|
|
|
2406
2423
|
}
|
|
2407
2424
|
var ROUTER_CALL_PATTERN = /\bcreateRouter\s*[<(]/;
|
|
2408
2425
|
function isRoutableSourceFile(name) {
|
|
2409
|
-
return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.");
|
|
2426
|
+
return (name.endsWith(".ts") || name.endsWith(".tsx") || name.endsWith(".js") || name.endsWith(".jsx")) && !name.includes(".gen.") && !name.includes(".test.") && !name.includes(".spec.");
|
|
2410
2427
|
}
|
|
2411
2428
|
function findRouterFilesRecursive(dir, filter, results) {
|
|
2412
2429
|
let entries;
|
|
@@ -2421,9 +2438,10 @@ function findRouterFilesRecursive(dir, filter, results) {
|
|
|
2421
2438
|
const childDirs = [];
|
|
2422
2439
|
const routerFilesInDir = [];
|
|
2423
2440
|
for (const entry of entries) {
|
|
2424
|
-
const fullPath =
|
|
2441
|
+
const fullPath = join(dir, entry.name);
|
|
2425
2442
|
if (entry.isDirectory()) {
|
|
2426
|
-
if (entry.name === "node_modules" || entry.name.startsWith("."))
|
|
2443
|
+
if (entry.name === "node_modules" || entry.name === "dist" || entry.name === "coverage" || entry.name === "__tests__" || entry.name === "__mocks__" || entry.name.startsWith("."))
|
|
2444
|
+
continue;
|
|
2427
2445
|
childDirs.push(fullPath);
|
|
2428
2446
|
continue;
|
|
2429
2447
|
}
|
|
@@ -2475,7 +2493,7 @@ Router root: ${conflict.ancestor}
|
|
|
2475
2493
|
Nested router: ${conflict.nested}
|
|
2476
2494
|
Move the nested router into a sibling directory or configure it as a separate app root.`;
|
|
2477
2495
|
}
|
|
2478
|
-
function
|
|
2496
|
+
function extractUrlsFromRouter(code) {
|
|
2479
2497
|
const sourceFile = ts5.createSourceFile(
|
|
2480
2498
|
"router.tsx",
|
|
2481
2499
|
code,
|
|
@@ -2489,24 +2507,70 @@ function extractUrlsVariableFromRouter(code) {
|
|
|
2489
2507
|
const callee = node.expression;
|
|
2490
2508
|
return ts5.isIdentifier(callee) && callee.text === "createRouter";
|
|
2491
2509
|
}
|
|
2510
|
+
function isInlineBuilder(node) {
|
|
2511
|
+
return ts5.isArrowFunction(node) || ts5.isFunctionExpression(node);
|
|
2512
|
+
}
|
|
2513
|
+
function isRoutesOnCreateRouter(node) {
|
|
2514
|
+
if (!ts5.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "routes")
|
|
2515
|
+
return false;
|
|
2516
|
+
let inner = node.expression.expression;
|
|
2517
|
+
while (ts5.isCallExpression(inner) && ts5.isPropertyAccessExpression(inner.expression)) {
|
|
2518
|
+
inner = inner.expression.expression;
|
|
2519
|
+
}
|
|
2520
|
+
return isCreateRouterCall(inner);
|
|
2521
|
+
}
|
|
2492
2522
|
function visit(node) {
|
|
2493
2523
|
if (result) return;
|
|
2494
|
-
if (ts5.isCallExpression(node) &&
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
}
|
|
2499
|
-
|
|
2500
|
-
result = node.arguments[0].text;
|
|
2501
|
-
return;
|
|
2524
|
+
if (ts5.isCallExpression(node) && node.arguments.length >= 1 && isRoutesOnCreateRouter(node)) {
|
|
2525
|
+
const arg = node.arguments[0];
|
|
2526
|
+
if (ts5.isIdentifier(arg)) {
|
|
2527
|
+
result = { kind: "variable", name: arg.text };
|
|
2528
|
+
} else if (isInlineBuilder(arg)) {
|
|
2529
|
+
result = { kind: "inline", block: arg.getText(sourceFile) };
|
|
2502
2530
|
}
|
|
2531
|
+
return;
|
|
2503
2532
|
}
|
|
2504
2533
|
if (isCreateRouterCall(node)) {
|
|
2505
2534
|
const callExpr = node;
|
|
2506
|
-
for (const
|
|
2535
|
+
for (const callArg of callExpr.arguments) {
|
|
2536
|
+
if (ts5.isObjectLiteralExpression(callArg)) {
|
|
2537
|
+
for (const prop of callArg.properties) {
|
|
2538
|
+
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls") {
|
|
2539
|
+
if (ts5.isIdentifier(prop.initializer)) {
|
|
2540
|
+
result = { kind: "variable", name: prop.initializer.text };
|
|
2541
|
+
} else if (isInlineBuilder(prop.initializer)) {
|
|
2542
|
+
result = {
|
|
2543
|
+
kind: "inline",
|
|
2544
|
+
block: prop.initializer.getText(sourceFile)
|
|
2545
|
+
};
|
|
2546
|
+
}
|
|
2547
|
+
return;
|
|
2548
|
+
}
|
|
2549
|
+
}
|
|
2550
|
+
}
|
|
2551
|
+
}
|
|
2552
|
+
}
|
|
2553
|
+
ts5.forEachChild(node, visit);
|
|
2554
|
+
}
|
|
2555
|
+
visit(sourceFile);
|
|
2556
|
+
return result;
|
|
2557
|
+
}
|
|
2558
|
+
function extractBasenameFromRouter(code) {
|
|
2559
|
+
const sourceFile = ts5.createSourceFile(
|
|
2560
|
+
"router.tsx",
|
|
2561
|
+
code,
|
|
2562
|
+
ts5.ScriptTarget.Latest,
|
|
2563
|
+
true,
|
|
2564
|
+
ts5.ScriptKind.TSX
|
|
2565
|
+
);
|
|
2566
|
+
let result;
|
|
2567
|
+
function visit(node) {
|
|
2568
|
+
if (result !== void 0) return;
|
|
2569
|
+
if (ts5.isCallExpression(node) && ts5.isIdentifier(node.expression) && node.expression.text === "createRouter") {
|
|
2570
|
+
for (const arg of node.arguments) {
|
|
2507
2571
|
if (ts5.isObjectLiteralExpression(arg)) {
|
|
2508
2572
|
for (const prop of arg.properties) {
|
|
2509
|
-
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "
|
|
2573
|
+
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "basename" && ts5.isStringLiteral(prop.initializer)) {
|
|
2510
2574
|
result = prop.initializer.text;
|
|
2511
2575
|
return;
|
|
2512
2576
|
}
|
|
@@ -2519,6 +2583,19 @@ function extractUrlsVariableFromRouter(code) {
|
|
|
2519
2583
|
visit(sourceFile);
|
|
2520
2584
|
return result;
|
|
2521
2585
|
}
|
|
2586
|
+
function applyBasenameToRoutes(result, basename3) {
|
|
2587
|
+
const prefixed = {};
|
|
2588
|
+
for (const [name, pattern] of Object.entries(result.routes)) {
|
|
2589
|
+
if (pattern === "/") {
|
|
2590
|
+
prefixed[name] = basename3;
|
|
2591
|
+
} else if (basename3.endsWith("/") && pattern.startsWith("/")) {
|
|
2592
|
+
prefixed[name] = basename3 + pattern.slice(1);
|
|
2593
|
+
} else {
|
|
2594
|
+
prefixed[name] = basename3 + pattern;
|
|
2595
|
+
}
|
|
2596
|
+
}
|
|
2597
|
+
return { routes: prefixed, searchSchemas: result.searchSchemas };
|
|
2598
|
+
}
|
|
2522
2599
|
function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
2523
2600
|
let routerSource;
|
|
2524
2601
|
try {
|
|
@@ -2526,19 +2603,40 @@ function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
|
2526
2603
|
} catch {
|
|
2527
2604
|
return { routes: {}, searchSchemas: {} };
|
|
2528
2605
|
}
|
|
2529
|
-
const
|
|
2530
|
-
if (!
|
|
2606
|
+
const extraction = extractUrlsFromRouter(routerSource);
|
|
2607
|
+
if (!extraction) {
|
|
2531
2608
|
return { routes: {}, searchSchemas: {} };
|
|
2532
2609
|
}
|
|
2533
|
-
const
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2610
|
+
const rawBasename = extractBasenameFromRouter(routerSource);
|
|
2611
|
+
const basename3 = rawBasename ? ("/" + rawBasename.replace(/^\/+|\/+$/g, "")).replace(/^\/$/, "") : void 0;
|
|
2612
|
+
let result;
|
|
2613
|
+
if (extraction.kind === "inline") {
|
|
2614
|
+
result = buildCombinedRouteMapWithSearch(
|
|
2615
|
+
routerFilePath,
|
|
2616
|
+
void 0,
|
|
2617
|
+
void 0,
|
|
2618
|
+
void 0,
|
|
2619
|
+
extraction.block
|
|
2620
|
+
);
|
|
2621
|
+
} else {
|
|
2622
|
+
const imported = resolveImportedVariable(routerSource, extraction.name);
|
|
2623
|
+
if (imported) {
|
|
2624
|
+
const targetFile = resolveImportPath(imported.specifier, routerFilePath);
|
|
2625
|
+
if (!targetFile) {
|
|
2626
|
+
return { routes: {}, searchSchemas: {} };
|
|
2627
|
+
}
|
|
2628
|
+
result = buildCombinedRouteMapWithSearch(
|
|
2629
|
+
targetFile,
|
|
2630
|
+
imported.exportedName
|
|
2631
|
+
);
|
|
2632
|
+
} else {
|
|
2633
|
+
result = buildCombinedRouteMapWithSearch(routerFilePath, extraction.name);
|
|
2538
2634
|
}
|
|
2539
|
-
return buildCombinedRouteMapWithSearch(targetFile, imported.exportedName);
|
|
2540
2635
|
}
|
|
2541
|
-
|
|
2636
|
+
if (basename3) {
|
|
2637
|
+
result = applyBasenameToRoutes(result, basename3);
|
|
2638
|
+
}
|
|
2639
|
+
return result;
|
|
2542
2640
|
}
|
|
2543
2641
|
function findRouterFiles(root, filter) {
|
|
2544
2642
|
const result = [];
|
|
@@ -2547,7 +2645,7 @@ function findRouterFiles(root, filter) {
|
|
|
2547
2645
|
}
|
|
2548
2646
|
function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
|
|
2549
2647
|
try {
|
|
2550
|
-
const oldCombinedPath =
|
|
2648
|
+
const oldCombinedPath = join(root, "src", "named-routes.gen.ts");
|
|
2551
2649
|
if (existsSync3(oldCombinedPath)) {
|
|
2552
2650
|
unlinkSync(oldCombinedPath);
|
|
2553
2651
|
console.log(
|
|
@@ -2563,31 +2661,21 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
|
|
|
2563
2661
|
throw new Error(formatNestedRouterConflictError(nestedRouterConflict));
|
|
2564
2662
|
}
|
|
2565
2663
|
for (const routerFilePath of routerFilePaths) {
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
routerSource
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
|
|
2575
|
-
const imported = resolveImportedVariable(routerSource, urlsVarName);
|
|
2576
|
-
if (imported) {
|
|
2577
|
-
const targetFile = resolveImportPath(imported.specifier, routerFilePath);
|
|
2578
|
-
if (!targetFile) continue;
|
|
2579
|
-
result = buildCombinedRouteMapWithSearch(
|
|
2580
|
-
targetFile,
|
|
2581
|
-
imported.exportedName
|
|
2582
|
-
);
|
|
2583
|
-
} else {
|
|
2584
|
-
result = buildCombinedRouteMapWithSearch(routerFilePath, urlsVarName);
|
|
2664
|
+
const result = buildCombinedRouteMapForRouterFile(routerFilePath);
|
|
2665
|
+
if (Object.keys(result.routes).length === 0 && Object.keys(result.searchSchemas).length === 0) {
|
|
2666
|
+
let routerSource;
|
|
2667
|
+
try {
|
|
2668
|
+
routerSource = readFileSync2(routerFilePath, "utf-8");
|
|
2669
|
+
} catch {
|
|
2670
|
+
continue;
|
|
2671
|
+
}
|
|
2672
|
+
if (!extractUrlsFromRouter(routerSource)) continue;
|
|
2585
2673
|
}
|
|
2586
2674
|
const routerBasename = pathBasename(routerFilePath).replace(
|
|
2587
2675
|
/\.(tsx?|jsx?)$/,
|
|
2588
2676
|
""
|
|
2589
2677
|
);
|
|
2590
|
-
const outPath =
|
|
2678
|
+
const outPath = join(
|
|
2591
2679
|
dirname2(routerFilePath),
|
|
2592
2680
|
`${routerBasename}.named-routes.gen.ts`
|
|
2593
2681
|
);
|
|
@@ -2717,8 +2805,9 @@ function createVersionPlugin() {
|
|
|
2717
2805
|
let isDev = false;
|
|
2718
2806
|
let server = null;
|
|
2719
2807
|
const clientModuleSignatures = /* @__PURE__ */ new Map();
|
|
2808
|
+
let versionCounter = 0;
|
|
2720
2809
|
const bumpVersion = (reason) => {
|
|
2721
|
-
currentVersion = Date.now().toString(16);
|
|
2810
|
+
currentVersion = Date.now().toString(16) + String(++versionCounter);
|
|
2722
2811
|
console.log(`[rsc-router] ${reason}, version updated: ${currentVersion}`);
|
|
2723
2812
|
const rscEnv = server?.environments?.rsc;
|
|
2724
2813
|
const versionMod = rscEnv?.moduleGraph?.getModuleById(
|
|
@@ -2774,6 +2863,9 @@ function createVersionPlugin() {
|
|
|
2774
2863
|
if (!isDev) return;
|
|
2775
2864
|
const isRscModule = this.environment?.name === "rsc";
|
|
2776
2865
|
if (!isRscModule) return;
|
|
2866
|
+
if (ctx.modules.length === 1 && ctx.modules[0].id === "\0" + VIRTUAL_IDS.version) {
|
|
2867
|
+
return;
|
|
2868
|
+
}
|
|
2777
2869
|
if (isCodeModule(ctx.file)) {
|
|
2778
2870
|
const filePath = normalizeModuleId(ctx.file);
|
|
2779
2871
|
const previousSignature = clientModuleSignatures.get(filePath);
|
|
@@ -2803,6 +2895,68 @@ function createVersionPlugin() {
|
|
|
2803
2895
|
|
|
2804
2896
|
// src/vite/utils/shared-utils.ts
|
|
2805
2897
|
import * as Vite from "vite";
|
|
2898
|
+
|
|
2899
|
+
// src/vite/plugins/performance-tracks.ts
|
|
2900
|
+
import { readFile } from "node:fs/promises";
|
|
2901
|
+
var RSDW_PATCH_RE = /((?:var|let|const)\s+\w+\s*=\s*root\._children\s*,\s*(\w+)\s*=\s*root\._debugInfo\s*[;,])/;
|
|
2902
|
+
function buildPatchReplacement(match, debugInfoVar) {
|
|
2903
|
+
return `${match}
|
|
2904
|
+
if (${debugInfoVar} && 0 === ${debugInfoVar}.length && "fulfilled" === root.status) {
|
|
2905
|
+
var _resolved = "function" === typeof resolveLazy ? resolveLazy(root.value) : root.value;
|
|
2906
|
+
if ("object" === typeof _resolved && null !== _resolved && isArrayImpl(_resolved._debugInfo)) {
|
|
2907
|
+
${debugInfoVar} = _resolved._debugInfo;
|
|
2908
|
+
}
|
|
2909
|
+
}`;
|
|
2910
|
+
}
|
|
2911
|
+
function patchRsdwClientDebugInfoRecovery(code) {
|
|
2912
|
+
const match = code.match(RSDW_PATCH_RE);
|
|
2913
|
+
if (!match) {
|
|
2914
|
+
return { code, debugInfoVar: null };
|
|
2915
|
+
}
|
|
2916
|
+
return {
|
|
2917
|
+
code: code.replace(match[1], buildPatchReplacement(match[1], match[2])),
|
|
2918
|
+
debugInfoVar: match[2]
|
|
2919
|
+
};
|
|
2920
|
+
}
|
|
2921
|
+
function performanceTracksOptimizeDepsPlugin() {
|
|
2922
|
+
return {
|
|
2923
|
+
name: "@rangojs/router:performance-tracks-optimize-deps",
|
|
2924
|
+
setup(build) {
|
|
2925
|
+
build.onLoad(
|
|
2926
|
+
{
|
|
2927
|
+
filter: /react-server-dom-webpack-client\.browser\.(development|production)\.js$/
|
|
2928
|
+
},
|
|
2929
|
+
async (args) => {
|
|
2930
|
+
const code = await readFile(args.path, "utf8");
|
|
2931
|
+
const patched = patchRsdwClientDebugInfoRecovery(code);
|
|
2932
|
+
return {
|
|
2933
|
+
contents: patched.code,
|
|
2934
|
+
loader: "js"
|
|
2935
|
+
};
|
|
2936
|
+
}
|
|
2937
|
+
);
|
|
2938
|
+
}
|
|
2939
|
+
};
|
|
2940
|
+
}
|
|
2941
|
+
function performanceTracksPlugin() {
|
|
2942
|
+
return {
|
|
2943
|
+
name: "@rangojs/router:performance-tracks",
|
|
2944
|
+
transform(code, id) {
|
|
2945
|
+
if (!id.includes("react-server-dom") || !id.includes("client")) return;
|
|
2946
|
+
const patched = patchRsdwClientDebugInfoRecovery(code);
|
|
2947
|
+
if (!patched.debugInfoVar) return;
|
|
2948
|
+
if (process.env.INTERNAL_RANGO_DEBUG)
|
|
2949
|
+
console.log(
|
|
2950
|
+
"[perf-tracks] patched RSDW client (var:",
|
|
2951
|
+
patched.debugInfoVar,
|
|
2952
|
+
")"
|
|
2953
|
+
);
|
|
2954
|
+
return patched.code;
|
|
2955
|
+
}
|
|
2956
|
+
};
|
|
2957
|
+
}
|
|
2958
|
+
|
|
2959
|
+
// src/vite/utils/shared-utils.ts
|
|
2806
2960
|
var versionEsbuildPlugin = {
|
|
2807
2961
|
name: "@rangojs/router-version",
|
|
2808
2962
|
setup(build) {
|
|
@@ -2820,7 +2974,7 @@ var versionEsbuildPlugin = {
|
|
|
2820
2974
|
}
|
|
2821
2975
|
};
|
|
2822
2976
|
var sharedEsbuildOptions = {
|
|
2823
|
-
plugins: [versionEsbuildPlugin]
|
|
2977
|
+
plugins: [versionEsbuildPlugin, performanceTracksOptimizeDepsPlugin()]
|
|
2824
2978
|
};
|
|
2825
2979
|
function createVirtualEntriesPlugin(entries, routerPathRef) {
|
|
2826
2980
|
const virtualModules = {};
|
|
@@ -2903,11 +3057,11 @@ ${dim} \u2571${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2
|
|
|
2903
3057
|
${dim} ${reset}${bold}\u2551 \u2551${reset} ${bold}\u2554\u2550\u2557${reset}${dim} * \u2727. \u2571${reset}
|
|
2904
3058
|
${dim} ${reset}${bold}\u2554\u2557 \u2551 \u2551 \u2551 \u2551${reset}${dim} * \u2571${reset}
|
|
2905
3059
|
${dim} ${reset}${bold}\u2551\u2551 \u2551 \u2551 \u2551 \u2551 \u2566\u2550\u2557\u2554\u2550\u2557\u2554\u2557\u2554\u2554\u2550\u2557\u2554\u2550\u2557${reset}${dim} \u2727 \u2726${reset}
|
|
2906
|
-
${dim}
|
|
3060
|
+
${dim} ${reset}${bold}\u2551\u2551 \u2551 \u2560\u2550\u255D \u2551 \u2560\u2566\u255D\u2560\u2550\u2563\u2551\u2551\u2551\u2551 \u2566\u2551 \u2551${reset}${dim} * \u2727${reset}
|
|
2907
3061
|
${dim} ${reset}${bold}\u2551\u255A\u2550\u255D \u2554\u2550\u2550\u2550\u255D \u2569\u255A\u2550\u2569 \u2569\u255D\u255A\u255D\u255A\u2550\u255D\u255A\u2550\u255D${reset}${dim} \u2726 . *${reset}
|
|
2908
3062
|
${dim} ${reset}${bold}\u255A\u2550\u2550\u2557 \u2551${reset}${dim} * RSC Wrangler \u2727 \u2726${reset}
|
|
2909
|
-
${dim} * ${reset}${bold}\u2551 \
|
|
2910
|
-
${bold}\u2550\u2550\u2550\
|
|
3063
|
+
${dim} * ${reset}${bold}\u2551 \u2551${reset}${dim} * \u2727. \u2571${reset}
|
|
3064
|
+
${dim} ${reset}${bold}\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550${reset}${dim} \u2726 *${reset}
|
|
2911
3065
|
|
|
2912
3066
|
v${version} \xB7 ${preset} \xB7 ${mode}
|
|
2913
3067
|
`;
|
|
@@ -3026,6 +3180,8 @@ function createCjsToEsmPlugin() {
|
|
|
3026
3180
|
import { createServer as createViteServer } from "vite";
|
|
3027
3181
|
import { resolve as resolve8 } from "node:path";
|
|
3028
3182
|
import { readFileSync as readFileSync6 } from "node:fs";
|
|
3183
|
+
import { createRequire } from "node:module";
|
|
3184
|
+
import { pathToFileURL } from "node:url";
|
|
3029
3185
|
|
|
3030
3186
|
// src/vite/plugins/virtual-stub-plugin.ts
|
|
3031
3187
|
function createVirtualStubPlugin() {
|
|
@@ -3052,7 +3208,7 @@ function createVirtualStubPlugin() {
|
|
|
3052
3208
|
}
|
|
3053
3209
|
|
|
3054
3210
|
// src/vite/plugins/client-ref-hashing.ts
|
|
3055
|
-
import { relative
|
|
3211
|
+
import { relative } from "node:path";
|
|
3056
3212
|
import { createHash as createHash2 } from "node:crypto";
|
|
3057
3213
|
var CLIENT_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-package-proxy/";
|
|
3058
3214
|
var CLIENT_IN_SERVER_PKG_PROXY_PREFIX = "/@id/__x00__virtual:vite-rsc/client-in-server-package-proxy/";
|
|
@@ -3065,10 +3221,10 @@ function computeProductionHash(projectRoot, refKey) {
|
|
|
3065
3221
|
const absPath = decodeURIComponent(
|
|
3066
3222
|
refKey.slice(CLIENT_IN_SERVER_PKG_PROXY_PREFIX.length)
|
|
3067
3223
|
);
|
|
3068
|
-
toHash =
|
|
3224
|
+
toHash = relative(projectRoot, absPath).replaceAll("\\", "/");
|
|
3069
3225
|
} else if (refKey.startsWith(FS_PREFIX)) {
|
|
3070
3226
|
const absPath = refKey.slice(FS_PREFIX.length - 1);
|
|
3071
|
-
toHash =
|
|
3227
|
+
toHash = relative(projectRoot, absPath).replaceAll("\\", "/");
|
|
3072
3228
|
} else if (refKey.startsWith("/")) {
|
|
3073
3229
|
toHash = refKey.slice(1);
|
|
3074
3230
|
} else {
|
|
@@ -3209,8 +3365,8 @@ function createDiscoveryState(entryPath, opts) {
|
|
|
3209
3365
|
perRouterManifestDataMap: /* @__PURE__ */ new Map(),
|
|
3210
3366
|
prerenderManifestEntries: null,
|
|
3211
3367
|
staticManifestEntries: null,
|
|
3212
|
-
|
|
3213
|
-
|
|
3368
|
+
handlerChunkInfoMap: /* @__PURE__ */ new Map(),
|
|
3369
|
+
staticHandlerChunkInfoMap: /* @__PURE__ */ new Map(),
|
|
3214
3370
|
rscEntryFileName: null,
|
|
3215
3371
|
resolvedPrerenderModules: void 0,
|
|
3216
3372
|
resolvedStaticModules: void 0,
|
|
@@ -3293,8 +3449,17 @@ function jsonParseExpression(value) {
|
|
|
3293
3449
|
}
|
|
3294
3450
|
|
|
3295
3451
|
// src/context-var.ts
|
|
3452
|
+
var NON_CACHEABLE_KEYS = /* @__PURE__ */ Symbol.for(
|
|
3453
|
+
"rango:non-cacheable-keys"
|
|
3454
|
+
);
|
|
3455
|
+
function getNonCacheableKeys(variables) {
|
|
3456
|
+
if (!variables[NON_CACHEABLE_KEYS]) {
|
|
3457
|
+
variables[NON_CACHEABLE_KEYS] = /* @__PURE__ */ new Set();
|
|
3458
|
+
}
|
|
3459
|
+
return variables[NON_CACHEABLE_KEYS];
|
|
3460
|
+
}
|
|
3296
3461
|
var FORBIDDEN_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
|
|
3297
|
-
function contextSet(variables, keyOrVar, value) {
|
|
3462
|
+
function contextSet(variables, keyOrVar, value, options) {
|
|
3298
3463
|
if (typeof keyOrVar === "string") {
|
|
3299
3464
|
if (FORBIDDEN_KEYS.has(keyOrVar)) {
|
|
3300
3465
|
throw new Error(
|
|
@@ -3302,8 +3467,14 @@ function contextSet(variables, keyOrVar, value) {
|
|
|
3302
3467
|
);
|
|
3303
3468
|
}
|
|
3304
3469
|
variables[keyOrVar] = value;
|
|
3470
|
+
if (options?.cache === false) {
|
|
3471
|
+
getNonCacheableKeys(variables).add(keyOrVar);
|
|
3472
|
+
}
|
|
3305
3473
|
} else {
|
|
3306
3474
|
variables[keyOrVar.key] = value;
|
|
3475
|
+
if (options?.cache === false) {
|
|
3476
|
+
getNonCacheableKeys(variables).add(keyOrVar.key);
|
|
3477
|
+
}
|
|
3307
3478
|
}
|
|
3308
3479
|
}
|
|
3309
3480
|
|
|
@@ -3326,6 +3497,7 @@ function encodePathParam(value) {
|
|
|
3326
3497
|
}
|
|
3327
3498
|
function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
|
|
3328
3499
|
let result = pattern;
|
|
3500
|
+
let hadOmittedOptional = false;
|
|
3329
3501
|
for (const [key, value] of Object.entries(params)) {
|
|
3330
3502
|
const escaped = escapeRegExp2(key);
|
|
3331
3503
|
result = result.replace(
|
|
@@ -3334,6 +3506,15 @@ function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
|
|
|
3334
3506
|
);
|
|
3335
3507
|
result = result.replace(`*${key}`, encode(value));
|
|
3336
3508
|
}
|
|
3509
|
+
result = result.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?\?/g, () => {
|
|
3510
|
+
hadOmittedOptional = true;
|
|
3511
|
+
return "";
|
|
3512
|
+
});
|
|
3513
|
+
if (hadOmittedOptional) {
|
|
3514
|
+
const hadTrailingSlash = pattern.length > 1 && pattern.endsWith("/");
|
|
3515
|
+
result = result.replace(/\/\/+/g, "/").replace(/\/+$/, "") || "/";
|
|
3516
|
+
if (hadTrailingSlash && !result.endsWith("/")) result += "/";
|
|
3517
|
+
}
|
|
3337
3518
|
return result;
|
|
3338
3519
|
}
|
|
3339
3520
|
async function runWithConcurrency(items, concurrency, fn) {
|
|
@@ -3442,14 +3623,33 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3442
3623
|
if (!params) return pattern;
|
|
3443
3624
|
return substituteRouteParams(pattern, params);
|
|
3444
3625
|
};
|
|
3626
|
+
let resolvedRoutes = 0;
|
|
3627
|
+
let totalDynamic = 0;
|
|
3628
|
+
for (const { manifest } of allManifests) {
|
|
3629
|
+
if (!manifest.prerenderRoutes) continue;
|
|
3630
|
+
for (const routeName of manifest.prerenderRoutes) {
|
|
3631
|
+
const pattern = manifest.routeManifest[routeName];
|
|
3632
|
+
if (pattern && (pattern.includes(":") || pattern.includes("*"))) {
|
|
3633
|
+
totalDynamic++;
|
|
3634
|
+
}
|
|
3635
|
+
}
|
|
3636
|
+
}
|
|
3637
|
+
const paramsStart = performance.now();
|
|
3638
|
+
const progressInterval = totalDynamic > 0 ? setInterval(() => {
|
|
3639
|
+
const elapsed = ((performance.now() - paramsStart) / 1e3).toFixed(1);
|
|
3640
|
+
console.log(
|
|
3641
|
+
`[rsc-router] Resolving prerender params... ${resolvedRoutes}/${totalDynamic} routes (${elapsed}s)`
|
|
3642
|
+
);
|
|
3643
|
+
}, 5e3) : void 0;
|
|
3445
3644
|
for (const { manifest } of allManifests) {
|
|
3446
3645
|
if (!manifest.prerenderRoutes) continue;
|
|
3447
3646
|
const defs = manifest._prerenderDefs || {};
|
|
3647
|
+
const passthroughSet = new Set(manifest.passthroughRoutes || []);
|
|
3448
3648
|
for (const routeName of manifest.prerenderRoutes) {
|
|
3449
3649
|
const pattern = manifest.routeManifest[routeName];
|
|
3450
3650
|
if (!pattern) continue;
|
|
3451
3651
|
const def = defs[routeName];
|
|
3452
|
-
const isPassthroughRoute =
|
|
3652
|
+
const isPassthroughRoute = passthroughSet.has(routeName);
|
|
3453
3653
|
const hasDynamic = pattern.includes(":") || pattern.includes("*");
|
|
3454
3654
|
if (!hasDynamic) {
|
|
3455
3655
|
entries.push({
|
|
@@ -3462,12 +3662,20 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3462
3662
|
if (def?.getParams) {
|
|
3463
3663
|
try {
|
|
3464
3664
|
const buildVars = {};
|
|
3665
|
+
const buildEnv = state.resolvedBuildEnv;
|
|
3465
3666
|
const getParamsCtx = {
|
|
3466
3667
|
build: true,
|
|
3668
|
+
dev: !state.isBuildMode,
|
|
3467
3669
|
set: ((keyOrVar, value) => {
|
|
3468
3670
|
contextSet(buildVars, keyOrVar, value);
|
|
3469
3671
|
}),
|
|
3470
|
-
reverse: getParamsReverse
|
|
3672
|
+
reverse: getParamsReverse,
|
|
3673
|
+
get env() {
|
|
3674
|
+
if (buildEnv !== void 0) return buildEnv;
|
|
3675
|
+
throw new Error(
|
|
3676
|
+
"[rsc-router] ctx.env is not available during build-time getParams(). Configure buildEnv in your rango() plugin options to enable build-time env access."
|
|
3677
|
+
);
|
|
3678
|
+
}
|
|
3471
3679
|
};
|
|
3472
3680
|
const paramsList = await def.getParams(getParamsCtx);
|
|
3473
3681
|
const concurrency = def.options?.concurrency ?? 1;
|
|
@@ -3492,7 +3700,9 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3492
3700
|
isPassthroughRoute
|
|
3493
3701
|
});
|
|
3494
3702
|
}
|
|
3703
|
+
resolvedRoutes++;
|
|
3495
3704
|
} catch (err) {
|
|
3705
|
+
resolvedRoutes++;
|
|
3496
3706
|
if (err.name === "Skip") {
|
|
3497
3707
|
console.log(
|
|
3498
3708
|
`[rsc-router] SKIP route "${routeName}" - ${err.message}`
|
|
@@ -3521,6 +3731,7 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3521
3731
|
}
|
|
3522
3732
|
}
|
|
3523
3733
|
}
|
|
3734
|
+
if (progressInterval) clearInterval(progressInterval);
|
|
3524
3735
|
if (entries.length === 0) return;
|
|
3525
3736
|
const maxConcurrency = Math.max(...entries.map((e) => e.concurrency));
|
|
3526
3737
|
const concurrencyNote = maxConcurrency > 1 ? ` (concurrency: ${maxConcurrency})` : "";
|
|
@@ -3546,7 +3757,8 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3546
3757
|
entry.urlPath,
|
|
3547
3758
|
{},
|
|
3548
3759
|
entry.buildVars,
|
|
3549
|
-
entry.isPassthroughRoute
|
|
3760
|
+
entry.isPassthroughRoute,
|
|
3761
|
+
state.resolvedBuildEnv
|
|
3550
3762
|
);
|
|
3551
3763
|
if (!result) continue;
|
|
3552
3764
|
if (result.passthrough) {
|
|
@@ -3670,7 +3882,9 @@ async function renderStaticHandlers(state, rscEnv, registry) {
|
|
|
3670
3882
|
const result = await routerInstance.renderStaticSegment(
|
|
3671
3883
|
def.handler,
|
|
3672
3884
|
def.$$id,
|
|
3673
|
-
def.$$routePrefix
|
|
3885
|
+
def.$$routePrefix,
|
|
3886
|
+
state.resolvedBuildEnv,
|
|
3887
|
+
!state.isBuildMode
|
|
3674
3888
|
);
|
|
3675
3889
|
if (result) {
|
|
3676
3890
|
const hasHandles = Object.keys(result.handles).length > 0;
|
|
@@ -3795,7 +4009,11 @@ async function discoverRouters(state, rscEnv) {
|
|
|
3795
4009
|
if (!router.urlpatterns || !generateManifestFull) {
|
|
3796
4010
|
continue;
|
|
3797
4011
|
}
|
|
3798
|
-
const manifest = generateManifestFull(
|
|
4012
|
+
const manifest = generateManifestFull(
|
|
4013
|
+
router.urlpatterns,
|
|
4014
|
+
routerMountIndex,
|
|
4015
|
+
router.__basename ? { urlPrefix: router.__basename } : void 0
|
|
4016
|
+
);
|
|
3799
4017
|
routerMountIndex++;
|
|
3800
4018
|
allManifests.push({ id, manifest });
|
|
3801
4019
|
const routeCount = Object.keys(manifest.routeManifest).length;
|
|
@@ -3937,7 +4155,7 @@ async function discoverRouters(state, rscEnv) {
|
|
|
3937
4155
|
}
|
|
3938
4156
|
|
|
3939
4157
|
// src/vite/discovery/route-types-writer.ts
|
|
3940
|
-
import { dirname as dirname3, basename, join as
|
|
4158
|
+
import { dirname as dirname3, basename, join as join2, resolve as resolve6 } from "node:path";
|
|
3941
4159
|
import { readFileSync as readFileSync4, writeFileSync as writeFileSync3, existsSync as existsSync5, unlinkSync as unlinkSync2 } from "node:fs";
|
|
3942
4160
|
function filterUserNamedRoutes(manifest) {
|
|
3943
4161
|
const filtered = {};
|
|
@@ -3958,7 +4176,7 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
|
|
|
3958
4176
|
/\.(tsx?|jsx?)$/,
|
|
3959
4177
|
""
|
|
3960
4178
|
);
|
|
3961
|
-
const outPath =
|
|
4179
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
3962
4180
|
try {
|
|
3963
4181
|
preContent.set(outPath, readFileSync4(outPath, "utf-8"));
|
|
3964
4182
|
} catch {
|
|
@@ -3971,7 +4189,7 @@ function writeCombinedRouteTypesWithTracking(state, opts) {
|
|
|
3971
4189
|
/\.(tsx?|jsx?)$/,
|
|
3972
4190
|
""
|
|
3973
4191
|
);
|
|
3974
|
-
const outPath =
|
|
4192
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
3975
4193
|
if (!existsSync5(outPath)) continue;
|
|
3976
4194
|
try {
|
|
3977
4195
|
const content = readFileSync4(outPath, "utf-8");
|
|
@@ -3988,7 +4206,7 @@ function writeRouteTypesFiles(state) {
|
|
|
3988
4206
|
const entryDir = dirname3(
|
|
3989
4207
|
resolve6(state.projectRoot, state.resolvedEntryPath)
|
|
3990
4208
|
);
|
|
3991
|
-
const oldCombinedPath =
|
|
4209
|
+
const oldCombinedPath = join2(entryDir, "named-routes.gen.ts");
|
|
3992
4210
|
if (existsSync5(oldCombinedPath)) {
|
|
3993
4211
|
unlinkSync2(oldCombinedPath);
|
|
3994
4212
|
console.log(
|
|
@@ -4013,7 +4231,7 @@ Set an explicit \`id\` on createRouter() or check the call site.`
|
|
|
4013
4231
|
}
|
|
4014
4232
|
const routerDir = dirname3(sourceFile);
|
|
4015
4233
|
const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
|
|
4016
|
-
const outPath =
|
|
4234
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
4017
4235
|
const userRoutes = filterUserNamedRoutes(routeManifest);
|
|
4018
4236
|
let effectiveSearchSchemas = routeSearchSchemas;
|
|
4019
4237
|
if ((!effectiveSearchSchemas || Object.keys(effectiveSearchSchemas).length === 0) && sourceFile) {
|
|
@@ -4078,7 +4296,7 @@ function supplementGenFilesWithRuntimeRoutes(state) {
|
|
|
4078
4296
|
}
|
|
4079
4297
|
const routerDir = dirname3(sourceFile);
|
|
4080
4298
|
const routerBasename = basename(sourceFile).replace(/\.(tsx?|jsx?)$/, "");
|
|
4081
|
-
const outPath =
|
|
4299
|
+
const outPath = join2(routerDir, `${routerBasename}.named-routes.gen.ts`);
|
|
4082
4300
|
const source = generateRouteTypesSource(
|
|
4083
4301
|
mergedRoutes,
|
|
4084
4302
|
Object.keys(mergedSearchSchemas).length > 0 ? mergedSearchSchemas : void 0
|
|
@@ -4092,7 +4310,7 @@ function supplementGenFilesWithRuntimeRoutes(state) {
|
|
|
4092
4310
|
}
|
|
4093
4311
|
|
|
4094
4312
|
// src/vite/discovery/virtual-module-codegen.ts
|
|
4095
|
-
import { dirname as dirname4, basename as basename2, join as
|
|
4313
|
+
import { dirname as dirname4, basename as basename2, join as join3 } from "node:path";
|
|
4096
4314
|
function generateRoutesManifestModule(state) {
|
|
4097
4315
|
const hasManifest = state.mergedRouteManifest && Object.keys(state.mergedRouteManifest).length > 0;
|
|
4098
4316
|
if (hasManifest) {
|
|
@@ -4107,7 +4325,7 @@ function generateRoutesManifestModule(state) {
|
|
|
4107
4325
|
/\.(tsx?|jsx?)$/,
|
|
4108
4326
|
""
|
|
4109
4327
|
);
|
|
4110
|
-
const genPath =
|
|
4328
|
+
const genPath = join3(
|
|
4111
4329
|
routerDir,
|
|
4112
4330
|
`${routerBasename}.named-routes.gen.js`
|
|
4113
4331
|
).replaceAll("\\", "/");
|
|
@@ -4204,7 +4422,7 @@ function generatePerRouterModule(state, routerId) {
|
|
|
4204
4422
|
/\.(tsx?|jsx?)$/,
|
|
4205
4423
|
""
|
|
4206
4424
|
);
|
|
4207
|
-
const genPath =
|
|
4425
|
+
const genPath = join3(
|
|
4208
4426
|
routerDir,
|
|
4209
4427
|
`${routerBasename}.named-routes.gen.js`
|
|
4210
4428
|
).replaceAll("\\", "/");
|
|
@@ -4244,48 +4462,45 @@ function postprocessBundle(state) {
|
|
|
4244
4462
|
);
|
|
4245
4463
|
const evictionTargets = [
|
|
4246
4464
|
{
|
|
4247
|
-
|
|
4465
|
+
infos: state.handlerChunkInfoMap.values(),
|
|
4248
4466
|
fnName: "Prerender",
|
|
4249
4467
|
brand: "prerenderHandler",
|
|
4250
4468
|
label: "handler code from RSC bundle"
|
|
4251
4469
|
},
|
|
4252
4470
|
{
|
|
4253
|
-
|
|
4471
|
+
infos: state.staticHandlerChunkInfoMap.values(),
|
|
4254
4472
|
fnName: "Static",
|
|
4255
4473
|
brand: "staticHandler",
|
|
4256
4474
|
label: "static handler code"
|
|
4257
4475
|
}
|
|
4258
4476
|
];
|
|
4259
4477
|
for (const target of evictionTargets) {
|
|
4260
|
-
|
|
4261
|
-
|
|
4262
|
-
|
|
4263
|
-
|
|
4264
|
-
|
|
4265
|
-
|
|
4266
|
-
|
|
4267
|
-
|
|
4268
|
-
|
|
4269
|
-
|
|
4270
|
-
|
|
4271
|
-
|
|
4272
|
-
|
|
4273
|
-
|
|
4274
|
-
|
|
4275
|
-
|
|
4276
|
-
|
|
4277
|
-
|
|
4278
|
-
|
|
4478
|
+
for (const info of target.infos) {
|
|
4479
|
+
const chunkPath = resolve7(state.projectRoot, "dist/rsc", info.fileName);
|
|
4480
|
+
try {
|
|
4481
|
+
const code = readFileSync5(chunkPath, "utf-8");
|
|
4482
|
+
const result = evictHandlerCode(
|
|
4483
|
+
code,
|
|
4484
|
+
info.exports,
|
|
4485
|
+
target.fnName,
|
|
4486
|
+
target.brand
|
|
4487
|
+
);
|
|
4488
|
+
if (result) {
|
|
4489
|
+
writeFileSync4(chunkPath, result.code);
|
|
4490
|
+
const savedKB = (result.savedBytes / 1024).toFixed(1);
|
|
4491
|
+
console.log(
|
|
4492
|
+
`[rsc-router] Evicted ${target.label} (${savedKB} KB saved): ${info.fileName}`
|
|
4493
|
+
);
|
|
4494
|
+
}
|
|
4495
|
+
} catch (replaceErr) {
|
|
4496
|
+
console.warn(
|
|
4497
|
+
`[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
|
|
4279
4498
|
);
|
|
4280
4499
|
}
|
|
4281
|
-
} catch (replaceErr) {
|
|
4282
|
-
console.warn(
|
|
4283
|
-
`[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
|
|
4284
|
-
);
|
|
4285
4500
|
}
|
|
4286
4501
|
}
|
|
4287
|
-
state.
|
|
4288
|
-
state.
|
|
4502
|
+
state.handlerChunkInfoMap.clear();
|
|
4503
|
+
state.staticHandlerChunkInfoMap.clear();
|
|
4289
4504
|
if (hasPrerenderData && existsSync6(rscEntryPath)) {
|
|
4290
4505
|
const rscCode = readFileSync5(rscEntryPath, "utf-8");
|
|
4291
4506
|
if (!rscCode.includes("__prerender-manifest.js")) {
|
|
@@ -4328,7 +4543,7 @@ function postprocessBundle(state) {
|
|
|
4328
4543
|
}
|
|
4329
4544
|
if (hasStaticData && existsSync6(rscEntryPath)) {
|
|
4330
4545
|
const rscCode = readFileSync5(rscEntryPath, "utf-8");
|
|
4331
|
-
if (!rscCode.includes("
|
|
4546
|
+
if (!rscCode.includes("__static-manifest.js")) {
|
|
4332
4547
|
try {
|
|
4333
4548
|
const manifestEntries = [];
|
|
4334
4549
|
let totalBytes = copyStagedBuildAssets(
|
|
@@ -4397,8 +4612,67 @@ async function createTempRscServer(state, options = {}) {
|
|
|
4397
4612
|
]
|
|
4398
4613
|
});
|
|
4399
4614
|
}
|
|
4615
|
+
async function resolveBuildEnv(option, factoryCtx) {
|
|
4616
|
+
if (!option) return null;
|
|
4617
|
+
if (option === "auto") {
|
|
4618
|
+
if (factoryCtx.preset !== "cloudflare") {
|
|
4619
|
+
throw new Error(
|
|
4620
|
+
'[rsc-router] buildEnv: "auto" is only supported with preset: "cloudflare". Use a factory function or plain object for other presets.'
|
|
4621
|
+
);
|
|
4622
|
+
}
|
|
4623
|
+
try {
|
|
4624
|
+
const userRequire = createRequire(
|
|
4625
|
+
resolve8(factoryCtx.root, "package.json")
|
|
4626
|
+
);
|
|
4627
|
+
const wranglerPath = userRequire.resolve("wrangler");
|
|
4628
|
+
const { getPlatformProxy } = await import(pathToFileURL(wranglerPath).href);
|
|
4629
|
+
const proxy = await getPlatformProxy();
|
|
4630
|
+
return {
|
|
4631
|
+
env: proxy.env,
|
|
4632
|
+
dispose: proxy.dispose
|
|
4633
|
+
};
|
|
4634
|
+
} catch (err) {
|
|
4635
|
+
throw new Error(
|
|
4636
|
+
`[rsc-router] buildEnv: "auto" requires wrangler to be installed.
|
|
4637
|
+
Install it with: pnpm add -D wrangler
|
|
4638
|
+
${err.message}`
|
|
4639
|
+
);
|
|
4640
|
+
}
|
|
4641
|
+
}
|
|
4642
|
+
if (typeof option === "function") {
|
|
4643
|
+
return await option(factoryCtx);
|
|
4644
|
+
}
|
|
4645
|
+
return { env: option };
|
|
4646
|
+
}
|
|
4647
|
+
async function acquireBuildEnv(s, command, mode) {
|
|
4648
|
+
const option = s.opts?.buildEnv;
|
|
4649
|
+
if (!option) return false;
|
|
4650
|
+
const result = await resolveBuildEnv(option, {
|
|
4651
|
+
root: s.projectRoot,
|
|
4652
|
+
mode,
|
|
4653
|
+
command,
|
|
4654
|
+
preset: s.opts?.preset ?? "node"
|
|
4655
|
+
});
|
|
4656
|
+
if (!result) return false;
|
|
4657
|
+
s.resolvedBuildEnv = result.env;
|
|
4658
|
+
s.buildEnvDispose = result.dispose ?? null;
|
|
4659
|
+
return true;
|
|
4660
|
+
}
|
|
4661
|
+
async function releaseBuildEnv(s) {
|
|
4662
|
+
if (s.buildEnvDispose) {
|
|
4663
|
+
try {
|
|
4664
|
+
await s.buildEnvDispose();
|
|
4665
|
+
} catch (err) {
|
|
4666
|
+
console.warn(`[rsc-router] buildEnv dispose failed: ${err.message}`);
|
|
4667
|
+
}
|
|
4668
|
+
s.buildEnvDispose = null;
|
|
4669
|
+
}
|
|
4670
|
+
s.resolvedBuildEnv = void 0;
|
|
4671
|
+
}
|
|
4400
4672
|
function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
4401
4673
|
const s = createDiscoveryState(entryPath, opts);
|
|
4674
|
+
let viteCommand = "build";
|
|
4675
|
+
let viteMode = "production";
|
|
4402
4676
|
return {
|
|
4403
4677
|
name: "@rangojs/router:discovery",
|
|
4404
4678
|
config() {
|
|
@@ -4407,31 +4681,13 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4407
4681
|
__RANGO_DEBUG__: JSON.stringify(!!process.env.INTERNAL_RANGO_DEBUG)
|
|
4408
4682
|
}
|
|
4409
4683
|
};
|
|
4410
|
-
if (opts?.enableBuildPrerender) {
|
|
4411
|
-
config.environments = {
|
|
4412
|
-
rsc: {
|
|
4413
|
-
build: {
|
|
4414
|
-
rollupOptions: {
|
|
4415
|
-
output: {
|
|
4416
|
-
manualChunks(id) {
|
|
4417
|
-
if (s.resolvedPrerenderModules?.has(id)) {
|
|
4418
|
-
return "__prerender-handlers";
|
|
4419
|
-
}
|
|
4420
|
-
if (s.resolvedStaticModules?.has(id)) {
|
|
4421
|
-
return "__static-handlers";
|
|
4422
|
-
}
|
|
4423
|
-
}
|
|
4424
|
-
}
|
|
4425
|
-
}
|
|
4426
|
-
}
|
|
4427
|
-
}
|
|
4428
|
-
};
|
|
4429
|
-
}
|
|
4430
4684
|
return config;
|
|
4431
4685
|
},
|
|
4432
4686
|
configResolved(config) {
|
|
4433
4687
|
s.projectRoot = config.root;
|
|
4434
4688
|
s.isBuildMode = config.command === "build";
|
|
4689
|
+
viteCommand = config.command;
|
|
4690
|
+
viteMode = config.mode;
|
|
4435
4691
|
s.userResolveAlias = config.resolve.alias;
|
|
4436
4692
|
if (!s.resolvedEntryPath && opts?.routerPathRef?.path) {
|
|
4437
4693
|
s.resolvedEntryPath = opts.routerPathRef.path;
|
|
@@ -4445,12 +4701,6 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4445
4701
|
s.resolvedEntryPath = entries[0];
|
|
4446
4702
|
}
|
|
4447
4703
|
}
|
|
4448
|
-
if (opts?.include || opts?.exclude) {
|
|
4449
|
-
s.scanFilter = createScanFilter(s.projectRoot, {
|
|
4450
|
-
include: opts.include,
|
|
4451
|
-
exclude: opts.exclude
|
|
4452
|
-
});
|
|
4453
|
-
}
|
|
4454
4704
|
if (opts?.staticRouteTypesGeneration !== false) {
|
|
4455
4705
|
s.cachedRouterFiles = findRouterFiles(s.projectRoot, s.scanFilter);
|
|
4456
4706
|
writeCombinedRouteTypesWithTracking(s, { preserveIfLarger: true });
|
|
@@ -4482,6 +4732,8 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4482
4732
|
});
|
|
4483
4733
|
prerenderTempServer = null;
|
|
4484
4734
|
}
|
|
4735
|
+
releaseBuildEnv(s).catch(() => {
|
|
4736
|
+
});
|
|
4485
4737
|
});
|
|
4486
4738
|
async function getOrCreateTempServer() {
|
|
4487
4739
|
if (prerenderNodeRegistry) {
|
|
@@ -4512,6 +4764,7 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4512
4764
|
if (!rscEnv?.runner) {
|
|
4513
4765
|
s.devServerOrigin = getDevServerOrigin();
|
|
4514
4766
|
try {
|
|
4767
|
+
await acquireBuildEnv(s, viteCommand, viteMode);
|
|
4515
4768
|
const tempRscEnv = await getOrCreateTempServer();
|
|
4516
4769
|
if (tempRscEnv) {
|
|
4517
4770
|
await discoverRouters(s, tempRscEnv);
|
|
@@ -4527,6 +4780,7 @@ ${err.stack}`
|
|
|
4527
4780
|
return;
|
|
4528
4781
|
}
|
|
4529
4782
|
try {
|
|
4783
|
+
await acquireBuildEnv(s, viteCommand, viteMode);
|
|
4530
4784
|
const serverMod = await rscEnv.runner.import(
|
|
4531
4785
|
"@rangojs/router/server"
|
|
4532
4786
|
);
|
|
@@ -4591,7 +4845,26 @@ ${err.stack}`
|
|
|
4591
4845
|
res.end("Missing pathname");
|
|
4592
4846
|
return;
|
|
4593
4847
|
}
|
|
4594
|
-
|
|
4848
|
+
const rscEnv = server.environments?.rsc;
|
|
4849
|
+
let registry = null;
|
|
4850
|
+
if (rscEnv?.runner && s.resolvedEntryPath) {
|
|
4851
|
+
try {
|
|
4852
|
+
await rscEnv.runner.import(s.resolvedEntryPath);
|
|
4853
|
+
const serverMod = await rscEnv.runner.import(
|
|
4854
|
+
"@rangojs/router/server"
|
|
4855
|
+
);
|
|
4856
|
+
registry = serverMod.RouterRegistry ?? null;
|
|
4857
|
+
} catch (err) {
|
|
4858
|
+
console.warn(
|
|
4859
|
+
`[rsc-router] Dev prerender module refresh failed: ${err.message}`
|
|
4860
|
+
);
|
|
4861
|
+
res.statusCode = 500;
|
|
4862
|
+
res.end(`Prerender handler error: ${err.message}`);
|
|
4863
|
+
return;
|
|
4864
|
+
}
|
|
4865
|
+
} else {
|
|
4866
|
+
registry = mainRegistry;
|
|
4867
|
+
}
|
|
4595
4868
|
if (!registry) {
|
|
4596
4869
|
if (!prerenderNodeRegistry) {
|
|
4597
4870
|
await getOrCreateTempServer();
|
|
@@ -4613,7 +4886,10 @@ ${err.stack}`
|
|
|
4613
4886
|
pathname,
|
|
4614
4887
|
{},
|
|
4615
4888
|
void 0,
|
|
4616
|
-
wantPassthrough
|
|
4889
|
+
wantPassthrough,
|
|
4890
|
+
s.resolvedBuildEnv,
|
|
4891
|
+
true
|
|
4892
|
+
// devMode: check getParams for passthrough routes
|
|
4617
4893
|
);
|
|
4618
4894
|
if (!result) continue;
|
|
4619
4895
|
if (result.passthrough) continue;
|
|
@@ -4749,6 +5025,7 @@ ${err.stack}`
|
|
|
4749
5025
|
resetStagedBuildAssets(s.projectRoot);
|
|
4750
5026
|
s.prerenderManifestEntries = null;
|
|
4751
5027
|
s.staticManifestEntries = null;
|
|
5028
|
+
await acquireBuildEnv(s, viteCommand, viteMode);
|
|
4752
5029
|
let tempServer = null;
|
|
4753
5030
|
globalThis.__rscRouterDiscoveryActive = true;
|
|
4754
5031
|
try {
|
|
@@ -4788,6 +5065,7 @@ ${details}`
|
|
|
4788
5065
|
if (tempServer) {
|
|
4789
5066
|
await tempServer.close();
|
|
4790
5067
|
}
|
|
5068
|
+
await releaseBuildEnv(s);
|
|
4791
5069
|
}
|
|
4792
5070
|
},
|
|
4793
5071
|
// Virtual module: provides the pre-generated route manifest as a JS module
|
|
@@ -4830,20 +5108,30 @@ ${details}`
|
|
|
4830
5108
|
}
|
|
4831
5109
|
if (!s.resolvedPrerenderModules?.size && !s.resolvedStaticModules?.size)
|
|
4832
5110
|
return;
|
|
5111
|
+
s.handlerChunkInfoMap.clear();
|
|
5112
|
+
s.staticHandlerChunkInfoMap.clear();
|
|
4833
5113
|
for (const [fileName, chunk] of Object.entries(bundle)) {
|
|
4834
5114
|
if (chunk.type !== "chunk") continue;
|
|
4835
|
-
if (
|
|
5115
|
+
if (s.resolvedPrerenderModules?.size) {
|
|
4836
5116
|
const handlers = extractHandlerExportsFromChunk(
|
|
4837
5117
|
chunk.code,
|
|
4838
5118
|
s.resolvedPrerenderModules,
|
|
4839
5119
|
"Prerender",
|
|
4840
|
-
|
|
5120
|
+
false
|
|
4841
5121
|
);
|
|
4842
5122
|
if (handlers.length > 0) {
|
|
4843
|
-
|
|
5123
|
+
const existing = s.handlerChunkInfoMap.get(fileName);
|
|
5124
|
+
if (existing) {
|
|
5125
|
+
existing.exports.push(...handlers);
|
|
5126
|
+
} else {
|
|
5127
|
+
s.handlerChunkInfoMap.set(fileName, {
|
|
5128
|
+
fileName,
|
|
5129
|
+
exports: handlers
|
|
5130
|
+
});
|
|
5131
|
+
}
|
|
4844
5132
|
}
|
|
4845
5133
|
}
|
|
4846
|
-
if (
|
|
5134
|
+
if (s.resolvedStaticModules?.size) {
|
|
4847
5135
|
const handlers = extractHandlerExportsFromChunk(
|
|
4848
5136
|
chunk.code,
|
|
4849
5137
|
s.resolvedStaticModules,
|
|
@@ -4851,7 +5139,15 @@ ${details}`
|
|
|
4851
5139
|
false
|
|
4852
5140
|
);
|
|
4853
5141
|
if (handlers.length > 0) {
|
|
4854
|
-
|
|
5142
|
+
const existing = s.staticHandlerChunkInfoMap.get(fileName);
|
|
5143
|
+
if (existing) {
|
|
5144
|
+
existing.exports.push(...handlers);
|
|
5145
|
+
} else {
|
|
5146
|
+
s.staticHandlerChunkInfoMap.set(fileName, {
|
|
5147
|
+
fileName,
|
|
5148
|
+
exports: handlers
|
|
5149
|
+
});
|
|
5150
|
+
}
|
|
4855
5151
|
}
|
|
4856
5152
|
}
|
|
4857
5153
|
}
|
|
@@ -4878,8 +5174,16 @@ async function rango(options) {
|
|
|
4878
5174
|
const showBanner = resolvedOptions.banner ?? true;
|
|
4879
5175
|
const plugins = [];
|
|
4880
5176
|
const rangoAliases = getPackageAliases();
|
|
4881
|
-
const excludeDeps =
|
|
4882
|
-
|
|
5177
|
+
const excludeDeps = [
|
|
5178
|
+
...getExcludeDeps(),
|
|
5179
|
+
// The public browser entry re-exports the RSDW browser client.
|
|
5180
|
+
// Excluding both keeps Vite from freezing the unpatched bundle into
|
|
5181
|
+
// .vite/deps before our source transforms run.
|
|
5182
|
+
"@vitejs/plugin-rsc/browser",
|
|
5183
|
+
// Keep the browser RSDW client out of Vite's dep optimizer so our
|
|
5184
|
+
// cjs-to-esm transform can patch the real file.
|
|
5185
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.browser"
|
|
5186
|
+
];
|
|
4883
5187
|
const routerRef = { path: void 0 };
|
|
4884
5188
|
const prerenderEnabled = true;
|
|
4885
5189
|
if (preset === "cloudflare") {
|
|
@@ -4975,6 +5279,7 @@ async function rango(options) {
|
|
|
4975
5279
|
}
|
|
4976
5280
|
});
|
|
4977
5281
|
plugins.push(createVirtualEntriesPlugin(finalEntries));
|
|
5282
|
+
plugins.push(performanceTracksPlugin());
|
|
4978
5283
|
plugins.push(
|
|
4979
5284
|
rsc({
|
|
4980
5285
|
entries: finalEntries,
|
|
@@ -4983,153 +5288,122 @@ async function rango(options) {
|
|
|
4983
5288
|
);
|
|
4984
5289
|
plugins.push(clientRefDedup());
|
|
4985
5290
|
} else {
|
|
4986
|
-
|
|
4987
|
-
|
|
4988
|
-
|
|
4989
|
-
|
|
4990
|
-
|
|
4991
|
-
|
|
4992
|
-
|
|
4993
|
-
const
|
|
4994
|
-
|
|
4995
|
-
|
|
4996
|
-
|
|
4997
|
-
|
|
4998
|
-
|
|
4999
|
-
|
|
5000
|
-
|
|
5001
|
-
routerRef.path = (abs.startsWith(root) ? "./" + abs.slice(root.length + 1) : abs).replaceAll("\\", "/");
|
|
5002
|
-
} else if (candidates.length > 1) {
|
|
5003
|
-
const list = candidates.map(
|
|
5004
|
-
(f) => " - " + (f.startsWith(root) ? f.slice(root.length + 1) : f)
|
|
5005
|
-
).join("\n");
|
|
5006
|
-
throw new Error(
|
|
5007
|
-
`[rsc-router] Multiple routers found. Specify \`router\` to choose one:
|
|
5008
|
-
${list}`
|
|
5009
|
-
);
|
|
5010
|
-
}
|
|
5291
|
+
plugins.push({
|
|
5292
|
+
name: "@rangojs/router:auto-discover",
|
|
5293
|
+
config(userConfig) {
|
|
5294
|
+
if (routerRef.path) return;
|
|
5295
|
+
const root = userConfig.root ? resolve9(process.cwd(), userConfig.root) : process.cwd();
|
|
5296
|
+
const candidates = findRouterFiles(root);
|
|
5297
|
+
if (candidates.length === 1) {
|
|
5298
|
+
const abs = candidates[0];
|
|
5299
|
+
routerRef.path = (abs.startsWith(root) ? "./" + abs.slice(root.length + 1) : abs).replaceAll("\\", "/");
|
|
5300
|
+
} else if (candidates.length > 1) {
|
|
5301
|
+
const list = candidates.map(
|
|
5302
|
+
(f) => " - " + (f.startsWith(root) ? f.slice(root.length + 1) : f)
|
|
5303
|
+
).join("\n");
|
|
5304
|
+
throw new Error(`[rsc-router] Multiple routers found:
|
|
5305
|
+
${list}`);
|
|
5011
5306
|
}
|
|
5012
|
-
}
|
|
5013
|
-
}
|
|
5014
|
-
const
|
|
5015
|
-
|
|
5016
|
-
|
|
5017
|
-
|
|
5018
|
-
|
|
5019
|
-
|
|
5020
|
-
|
|
5021
|
-
|
|
5022
|
-
|
|
5023
|
-
|
|
5024
|
-
|
|
5025
|
-
|
|
5026
|
-
|
|
5027
|
-
|
|
5028
|
-
|
|
5029
|
-
|
|
5030
|
-
|
|
5031
|
-
|
|
5032
|
-
|
|
5033
|
-
|
|
5034
|
-
|
|
5035
|
-
|
|
5036
|
-
|
|
5037
|
-
|
|
5038
|
-
|
|
5039
|
-
|
|
5040
|
-
|
|
5041
|
-
|
|
5042
|
-
resolve: {
|
|
5043
|
-
alias: rangoAliases
|
|
5044
|
-
},
|
|
5045
|
-
environments: {
|
|
5046
|
-
client: {
|
|
5047
|
-
build: {
|
|
5048
|
-
rollupOptions: {
|
|
5049
|
-
output: {
|
|
5050
|
-
manualChunks: getManualChunks
|
|
5051
|
-
}
|
|
5052
|
-
}
|
|
5053
|
-
},
|
|
5054
|
-
// Always exclude rsc-router modules, conditionally add virtual entry
|
|
5055
|
-
optimizeDeps: {
|
|
5056
|
-
// Pre-bundle React and rsc-html-stream to prevent late discovery
|
|
5057
|
-
// triggering ERR_OUTDATED_OPTIMIZED_DEP on cold starts
|
|
5058
|
-
include: [
|
|
5059
|
-
"react",
|
|
5060
|
-
"react-dom",
|
|
5061
|
-
"react/jsx-runtime",
|
|
5062
|
-
"react/jsx-dev-runtime",
|
|
5063
|
-
"rsc-html-stream/client"
|
|
5064
|
-
],
|
|
5065
|
-
exclude: excludeDeps,
|
|
5066
|
-
esbuildOptions: sharedEsbuildOptions,
|
|
5067
|
-
...useVirtualClient && {
|
|
5068
|
-
// Tell Vite to scan the virtual entry for dependencies
|
|
5069
|
-
entries: [VIRTUAL_IDS.browser]
|
|
5070
|
-
}
|
|
5071
|
-
}
|
|
5072
|
-
},
|
|
5073
|
-
...useVirtualSSR && {
|
|
5074
|
-
ssr: {
|
|
5075
|
-
optimizeDeps: {
|
|
5076
|
-
entries: [VIRTUAL_IDS.ssr],
|
|
5077
|
-
// Pre-bundle all SSR deps to prevent late discovery triggering ERR_OUTDATED_OPTIMIZED_DEP
|
|
5078
|
-
include: [
|
|
5079
|
-
"react",
|
|
5080
|
-
"react-dom",
|
|
5081
|
-
"react-dom/server.edge",
|
|
5082
|
-
"react-dom/static.edge",
|
|
5083
|
-
"react/jsx-runtime",
|
|
5084
|
-
"react/jsx-dev-runtime",
|
|
5085
|
-
"@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
|
|
5086
|
-
],
|
|
5087
|
-
exclude: excludeDeps,
|
|
5088
|
-
esbuildOptions: sharedEsbuildOptions
|
|
5307
|
+
}
|
|
5308
|
+
});
|
|
5309
|
+
const finalEntries = {
|
|
5310
|
+
client: VIRTUAL_IDS.browser,
|
|
5311
|
+
ssr: VIRTUAL_IDS.ssr,
|
|
5312
|
+
rsc: VIRTUAL_IDS.rsc
|
|
5313
|
+
};
|
|
5314
|
+
const { default: rsc } = await import("@vitejs/plugin-rsc");
|
|
5315
|
+
let hasWarnedDuplicate = false;
|
|
5316
|
+
plugins.push({
|
|
5317
|
+
name: "@rangojs/router:rsc-integration",
|
|
5318
|
+
enforce: "pre",
|
|
5319
|
+
config() {
|
|
5320
|
+
return {
|
|
5321
|
+
optimizeDeps: {
|
|
5322
|
+
exclude: excludeDeps,
|
|
5323
|
+
esbuildOptions: sharedEsbuildOptions
|
|
5324
|
+
},
|
|
5325
|
+
build: {
|
|
5326
|
+
rollupOptions: { onwarn }
|
|
5327
|
+
},
|
|
5328
|
+
resolve: {
|
|
5329
|
+
alias: rangoAliases
|
|
5330
|
+
},
|
|
5331
|
+
environments: {
|
|
5332
|
+
client: {
|
|
5333
|
+
build: {
|
|
5334
|
+
rollupOptions: {
|
|
5335
|
+
output: {
|
|
5336
|
+
manualChunks: getManualChunks
|
|
5089
5337
|
}
|
|
5090
5338
|
}
|
|
5091
5339
|
},
|
|
5092
|
-
|
|
5093
|
-
|
|
5094
|
-
|
|
5095
|
-
|
|
5096
|
-
|
|
5097
|
-
|
|
5098
|
-
|
|
5099
|
-
|
|
5100
|
-
|
|
5101
|
-
|
|
5102
|
-
|
|
5103
|
-
|
|
5104
|
-
|
|
5105
|
-
|
|
5340
|
+
optimizeDeps: {
|
|
5341
|
+
include: [
|
|
5342
|
+
"react",
|
|
5343
|
+
"react-dom",
|
|
5344
|
+
"react/jsx-runtime",
|
|
5345
|
+
"react/jsx-dev-runtime",
|
|
5346
|
+
"rsc-html-stream/client"
|
|
5347
|
+
],
|
|
5348
|
+
exclude: excludeDeps,
|
|
5349
|
+
esbuildOptions: sharedEsbuildOptions,
|
|
5350
|
+
entries: [VIRTUAL_IDS.browser]
|
|
5351
|
+
}
|
|
5352
|
+
},
|
|
5353
|
+
ssr: {
|
|
5354
|
+
optimizeDeps: {
|
|
5355
|
+
entries: [VIRTUAL_IDS.ssr],
|
|
5356
|
+
include: [
|
|
5357
|
+
"react",
|
|
5358
|
+
"react-dom",
|
|
5359
|
+
"react-dom/server.edge",
|
|
5360
|
+
"react-dom/static.edge",
|
|
5361
|
+
"react/jsx-runtime",
|
|
5362
|
+
"react/jsx-dev-runtime",
|
|
5363
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.edge"
|
|
5364
|
+
],
|
|
5365
|
+
exclude: excludeDeps,
|
|
5366
|
+
esbuildOptions: sharedEsbuildOptions
|
|
5367
|
+
}
|
|
5368
|
+
},
|
|
5369
|
+
rsc: {
|
|
5370
|
+
optimizeDeps: {
|
|
5371
|
+
entries: [VIRTUAL_IDS.rsc],
|
|
5372
|
+
include: [
|
|
5373
|
+
"react",
|
|
5374
|
+
"react/jsx-runtime",
|
|
5375
|
+
"react/jsx-dev-runtime",
|
|
5376
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/server.edge"
|
|
5377
|
+
],
|
|
5378
|
+
esbuildOptions: sharedEsbuildOptions
|
|
5106
5379
|
}
|
|
5107
5380
|
}
|
|
5108
|
-
};
|
|
5109
|
-
},
|
|
5110
|
-
configResolved(config) {
|
|
5111
|
-
if (showBanner) {
|
|
5112
|
-
const mode = config.command === "serve" ? process.argv.includes("preview") ? "preview" : "dev" : "build";
|
|
5113
|
-
printBanner(mode, "node", rangoVersion);
|
|
5114
|
-
}
|
|
5115
|
-
const rscMinimalCount = config.plugins.filter(
|
|
5116
|
-
(p) => p.name === "rsc:minimal"
|
|
5117
|
-
).length;
|
|
5118
|
-
if (rscMinimalCount > 1 && !hasWarnedDuplicate) {
|
|
5119
|
-
hasWarnedDuplicate = true;
|
|
5120
|
-
console.warn(
|
|
5121
|
-
"[rsc-router] Duplicate @vitejs/plugin-rsc detected. Remove rsc() from your config or use rango({ rsc: false }) for manual configuration."
|
|
5122
|
-
);
|
|
5123
5381
|
}
|
|
5382
|
+
};
|
|
5383
|
+
},
|
|
5384
|
+
configResolved(config) {
|
|
5385
|
+
if (showBanner) {
|
|
5386
|
+
const mode = config.command === "serve" ? process.argv.includes("preview") ? "preview" : "dev" : "build";
|
|
5387
|
+
printBanner(mode, "node", rangoVersion);
|
|
5124
5388
|
}
|
|
5125
|
-
|
|
5126
|
-
|
|
5127
|
-
|
|
5128
|
-
|
|
5129
|
-
|
|
5130
|
-
|
|
5131
|
-
|
|
5132
|
-
|
|
5389
|
+
const rscMinimalCount = config.plugins.filter(
|
|
5390
|
+
(p) => p.name === "rsc:minimal"
|
|
5391
|
+
).length;
|
|
5392
|
+
if (rscMinimalCount > 1 && !hasWarnedDuplicate) {
|
|
5393
|
+
hasWarnedDuplicate = true;
|
|
5394
|
+
console.warn(
|
|
5395
|
+
"[rsc-router] Duplicate @vitejs/plugin-rsc detected. Remove rsc() from your vite config \u2014 rango() includes it automatically."
|
|
5396
|
+
);
|
|
5397
|
+
}
|
|
5398
|
+
}
|
|
5399
|
+
});
|
|
5400
|
+
plugins.push(createVirtualEntriesPlugin(finalEntries, routerRef));
|
|
5401
|
+
plugins.push(performanceTracksPlugin());
|
|
5402
|
+
plugins.push(
|
|
5403
|
+
rsc({
|
|
5404
|
+
entries: finalEntries
|
|
5405
|
+
})
|
|
5406
|
+
);
|
|
5133
5407
|
plugins.push(clientRefDedup());
|
|
5134
5408
|
}
|
|
5135
5409
|
plugins.push({
|
|
@@ -5157,18 +5431,16 @@ ${list}`
|
|
|
5157
5431
|
plugins.push(createVersionPlugin());
|
|
5158
5432
|
const discoveryEntryPath = preset !== "cloudflare" ? routerRef.path : void 0;
|
|
5159
5433
|
const discoveryRouterRef = preset !== "cloudflare" ? routerRef : void 0;
|
|
5160
|
-
|
|
5161
|
-
|
|
5162
|
-
plugins.push(createVersionInjectorPlugin(injectorEntryPath));
|
|
5434
|
+
if (preset === "cloudflare") {
|
|
5435
|
+
plugins.push(createVersionInjectorPlugin(void 0));
|
|
5163
5436
|
}
|
|
5164
5437
|
plugins.push(createCjsToEsmPlugin());
|
|
5165
5438
|
plugins.push(
|
|
5166
5439
|
createRouterDiscoveryPlugin(discoveryEntryPath, {
|
|
5167
5440
|
routerPathRef: discoveryRouterRef,
|
|
5168
5441
|
enableBuildPrerender: prerenderEnabled,
|
|
5169
|
-
|
|
5170
|
-
|
|
5171
|
-
exclude: resolvedOptions.exclude
|
|
5442
|
+
buildEnv: options?.buildEnv,
|
|
5443
|
+
preset
|
|
5172
5444
|
})
|
|
5173
5445
|
);
|
|
5174
5446
|
return plugins;
|
|
@@ -5181,29 +5453,75 @@ function poke() {
|
|
|
5181
5453
|
apply: "serve",
|
|
5182
5454
|
configureServer(server) {
|
|
5183
5455
|
const stdin = process.stdin;
|
|
5184
|
-
const
|
|
5456
|
+
const debug = process.env.RANGO_POKE_DEBUG === "1";
|
|
5457
|
+
const triggerReload = (source) => {
|
|
5458
|
+
server.hot.send({ type: "full-reload", path: "*" });
|
|
5459
|
+
server.config.logger.info(` browser reload (${source})`, {
|
|
5460
|
+
timestamp: true
|
|
5461
|
+
});
|
|
5462
|
+
};
|
|
5463
|
+
const toBuffer = (chunk) => {
|
|
5464
|
+
return typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
|
|
5465
|
+
};
|
|
5466
|
+
const formatChunk = (chunk) => {
|
|
5467
|
+
const data = toBuffer(chunk);
|
|
5468
|
+
const hex = Array.from(data).map((byte) => `0x${byte.toString(16).padStart(2, "0")}`).join(" ");
|
|
5469
|
+
const ascii = Array.from(data).map((byte) => {
|
|
5470
|
+
if (byte >= 32 && byte <= 126) return String.fromCharCode(byte);
|
|
5471
|
+
if (byte === 10) return "\\n";
|
|
5472
|
+
if (byte === 13) return "\\r";
|
|
5473
|
+
if (byte === 9) return "\\t";
|
|
5474
|
+
return ".";
|
|
5475
|
+
}).join("");
|
|
5476
|
+
return `len=${data.length} hex=[${hex}] ascii="${ascii}"`;
|
|
5477
|
+
};
|
|
5478
|
+
const readCtrlR = (chunk) => {
|
|
5479
|
+
const data = typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
|
|
5480
|
+
return data.length === 1 && data[0] === 18;
|
|
5481
|
+
};
|
|
5482
|
+
const readSubmittedCommands = (chunk) => {
|
|
5483
|
+
const text = toBuffer(chunk).toString("utf8").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
5484
|
+
if (!text.includes("\n")) return [];
|
|
5485
|
+
const lines = text.split("\n");
|
|
5486
|
+
lines.pop();
|
|
5487
|
+
return lines;
|
|
5488
|
+
};
|
|
5489
|
+
if (debug) {
|
|
5490
|
+
server.config.logger.info(
|
|
5491
|
+
` poke debug enabled (isTTY=${stdin.isTTY ? "yes" : "no"}, isRaw=${stdin.isTTY ? stdin.isRaw ? "yes" : "no" : "n/a"})`,
|
|
5492
|
+
{ timestamp: true }
|
|
5493
|
+
);
|
|
5494
|
+
}
|
|
5185
5495
|
if (stdin.isTTY) {
|
|
5186
|
-
|
|
5496
|
+
server.config.logger.info(
|
|
5497
|
+
" poke ready: press e + enter to reload browser (ctrl+r also works when available)",
|
|
5498
|
+
{ timestamp: true }
|
|
5499
|
+
);
|
|
5187
5500
|
}
|
|
5188
5501
|
const onData = (data) => {
|
|
5189
|
-
if (
|
|
5190
|
-
|
|
5191
|
-
process.emit("SIGINT", "SIGINT");
|
|
5192
|
-
return;
|
|
5193
|
-
}
|
|
5194
|
-
if (data[0] === 18) {
|
|
5195
|
-
server.hot.send({ type: "full-reload", path: "*" });
|
|
5196
|
-
server.config.logger.info(" browser reload (ctrl+r)", {
|
|
5502
|
+
if (debug) {
|
|
5503
|
+
server.config.logger.info(` poke stdin ${formatChunk(data)}`, {
|
|
5197
5504
|
timestamp: true
|
|
5198
5505
|
});
|
|
5199
5506
|
}
|
|
5507
|
+
if (readCtrlR(data)) {
|
|
5508
|
+
triggerReload("ctrl+r");
|
|
5509
|
+
return;
|
|
5510
|
+
}
|
|
5511
|
+
for (const command of readSubmittedCommands(data)) {
|
|
5512
|
+
if (command === "e") {
|
|
5513
|
+
triggerReload("e+enter");
|
|
5514
|
+
return;
|
|
5515
|
+
}
|
|
5516
|
+
if (command === "\x1Br") {
|
|
5517
|
+
triggerReload("option+r+enter");
|
|
5518
|
+
return;
|
|
5519
|
+
}
|
|
5520
|
+
}
|
|
5200
5521
|
};
|
|
5201
5522
|
stdin.on("data", onData);
|
|
5202
5523
|
server.httpServer?.on("close", () => {
|
|
5203
5524
|
stdin.off("data", onData);
|
|
5204
|
-
if (stdin.isTTY && previousRawMode !== null) {
|
|
5205
|
-
stdin.setRawMode(previousRawMode);
|
|
5206
|
-
}
|
|
5207
5525
|
});
|
|
5208
5526
|
}
|
|
5209
5527
|
};
|