@rangojs/router 0.0.0-experimental.debug-cache-fix → 0.0.0-experimental.dfa55db4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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 +130 -47
- package/dist/bin/rango.js.map +1 -0
- package/dist/browser/event-controller.d.ts +191 -0
- package/dist/browser/event-controller.d.ts.map +1 -0
- package/dist/browser/event-controller.js +559 -0
- package/dist/browser/event-controller.js.map +1 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +14 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/link-interceptor.d.ts +38 -0
- package/dist/browser/link-interceptor.d.ts.map +1 -0
- package/dist/browser/link-interceptor.js +99 -0
- package/dist/browser/link-interceptor.js.map +1 -0
- package/dist/browser/logging.d.ts +10 -0
- package/dist/browser/logging.d.ts.map +1 -0
- package/dist/browser/logging.js +29 -0
- package/dist/browser/logging.js.map +1 -0
- package/dist/browser/lru-cache.d.ts +17 -0
- package/dist/browser/lru-cache.d.ts.map +1 -0
- package/dist/browser/lru-cache.js +50 -0
- package/dist/browser/lru-cache.js.map +1 -0
- package/dist/browser/merge-segment-loaders.d.ts +39 -0
- package/dist/browser/merge-segment-loaders.d.ts.map +1 -0
- package/dist/browser/merge-segment-loaders.js +102 -0
- package/dist/browser/merge-segment-loaders.js.map +1 -0
- package/dist/browser/navigation-bridge.d.ts +102 -0
- package/dist/browser/navigation-bridge.d.ts.map +1 -0
- package/dist/browser/navigation-bridge.js +708 -0
- package/dist/browser/navigation-bridge.js.map +1 -0
- package/dist/browser/navigation-client.d.ts +25 -0
- package/dist/browser/navigation-client.d.ts.map +1 -0
- package/dist/browser/navigation-client.js +157 -0
- package/dist/browser/navigation-client.js.map +1 -0
- package/dist/browser/navigation-store.d.ts +101 -0
- package/dist/browser/navigation-store.d.ts.map +1 -0
- package/dist/browser/navigation-store.js +625 -0
- package/dist/browser/navigation-store.js.map +1 -0
- package/dist/browser/partial-update.d.ts +75 -0
- package/dist/browser/partial-update.d.ts.map +1 -0
- package/dist/browser/partial-update.js +426 -0
- package/dist/browser/partial-update.js.map +1 -0
- package/dist/browser/react/Link.d.ts +86 -0
- package/dist/browser/react/Link.d.ts.map +1 -0
- package/dist/browser/react/Link.js +128 -0
- package/dist/browser/react/Link.js.map +1 -0
- package/dist/browser/react/NavigationProvider.d.ts +63 -0
- package/dist/browser/react/NavigationProvider.d.ts.map +1 -0
- package/dist/browser/react/NavigationProvider.js +216 -0
- package/dist/browser/react/NavigationProvider.js.map +1 -0
- package/dist/browser/react/ScrollRestoration.d.ts +75 -0
- package/dist/browser/react/ScrollRestoration.d.ts.map +1 -0
- package/dist/browser/react/ScrollRestoration.js +57 -0
- package/dist/browser/react/ScrollRestoration.js.map +1 -0
- package/dist/browser/react/context.d.ts +46 -0
- package/dist/browser/react/context.d.ts.map +1 -0
- package/dist/browser/react/context.js +10 -0
- package/dist/browser/react/context.js.map +1 -0
- package/dist/browser/react/index.d.ts +11 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/index.js +22 -0
- package/dist/browser/react/index.js.map +1 -0
- package/dist/browser/react/location-state-shared.d.ts +63 -0
- package/dist/browser/react/location-state-shared.d.ts.map +1 -0
- package/dist/browser/react/location-state-shared.js +81 -0
- package/dist/browser/react/location-state-shared.js.map +1 -0
- package/dist/browser/react/location-state.d.ts +23 -0
- package/dist/browser/react/location-state.d.ts.map +1 -0
- package/dist/browser/react/location-state.js +29 -0
- package/dist/browser/react/location-state.js.map +1 -0
- package/dist/browser/react/mount-context.d.ts +24 -0
- package/dist/browser/react/mount-context.d.ts.map +1 -0
- package/dist/browser/react/mount-context.js +24 -0
- package/dist/browser/react/mount-context.js.map +1 -0
- package/dist/browser/react/use-action.d.ts +64 -0
- package/dist/browser/react/use-action.d.ts.map +1 -0
- package/dist/browser/react/use-action.js +134 -0
- package/dist/browser/react/use-action.js.map +1 -0
- package/dist/browser/react/use-client-cache.d.ts +41 -0
- package/dist/browser/react/use-client-cache.d.ts.map +1 -0
- package/dist/browser/react/use-client-cache.js +39 -0
- package/dist/browser/react/use-client-cache.js.map +1 -0
- package/dist/browser/react/use-handle.d.ts +31 -0
- package/dist/browser/react/use-handle.d.ts.map +1 -0
- package/dist/browser/react/use-handle.js +144 -0
- package/dist/browser/react/use-handle.js.map +1 -0
- package/dist/browser/react/use-href.d.ts +33 -0
- package/dist/browser/react/use-href.d.ts.map +1 -0
- package/dist/browser/react/use-href.js +39 -0
- package/dist/browser/react/use-href.js.map +1 -0
- package/dist/browser/react/use-link-status.d.ts +37 -0
- package/dist/browser/react/use-link-status.d.ts.map +1 -0
- package/dist/browser/react/use-link-status.js +99 -0
- package/dist/browser/react/use-link-status.js.map +1 -0
- package/dist/browser/react/use-mount.d.ts +25 -0
- package/dist/browser/react/use-mount.d.ts.map +1 -0
- package/dist/browser/react/use-mount.js +30 -0
- package/dist/browser/react/use-mount.js.map +1 -0
- package/dist/browser/react/use-navigation.d.ts +27 -0
- package/dist/browser/react/use-navigation.d.ts.map +1 -0
- package/dist/browser/react/use-navigation.js +87 -0
- package/dist/browser/react/use-navigation.js.map +1 -0
- package/dist/browser/react/use-segments.d.ts +38 -0
- package/dist/browser/react/use-segments.d.ts.map +1 -0
- package/dist/browser/react/use-segments.js +130 -0
- package/dist/browser/react/use-segments.js.map +1 -0
- package/dist/browser/request-controller.d.ts +26 -0
- package/dist/browser/request-controller.d.ts.map +1 -0
- package/dist/browser/request-controller.js +147 -0
- package/dist/browser/request-controller.js.map +1 -0
- package/dist/browser/rsc-router.d.ts +129 -0
- package/dist/browser/rsc-router.d.ts.map +1 -0
- package/dist/browser/rsc-router.js +195 -0
- package/dist/browser/rsc-router.js.map +1 -0
- package/dist/browser/scroll-restoration.d.ts +93 -0
- package/dist/browser/scroll-restoration.d.ts.map +1 -0
- package/dist/browser/scroll-restoration.js +321 -0
- package/dist/browser/scroll-restoration.js.map +1 -0
- package/dist/browser/segment-structure-assert.d.ts +17 -0
- package/dist/browser/segment-structure-assert.d.ts.map +1 -0
- package/dist/browser/segment-structure-assert.js +59 -0
- package/dist/browser/segment-structure-assert.js.map +1 -0
- package/dist/browser/server-action-bridge.d.ts +26 -0
- package/dist/browser/server-action-bridge.d.ts.map +1 -0
- package/dist/browser/server-action-bridge.js +668 -0
- package/dist/browser/server-action-bridge.js.map +1 -0
- package/dist/browser/shallow.d.ts +12 -0
- package/dist/browser/shallow.d.ts.map +1 -0
- package/dist/browser/shallow.js +34 -0
- package/dist/browser/shallow.js.map +1 -0
- package/dist/browser/types.d.ts +369 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/build/__tests__/generate-cli.test.d.ts +2 -0
- package/dist/build/__tests__/generate-cli.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-cli.test.js +237 -0
- package/dist/build/__tests__/generate-cli.test.js.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/generate-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-manifest.test.js +119 -0
- package/dist/build/__tests__/generate-manifest.test.js.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts +2 -0
- package/dist/build/__tests__/generate-route-types.test.d.ts.map +1 -0
- package/dist/build/__tests__/generate-route-types.test.js +620 -0
- package/dist/build/__tests__/generate-route-types.test.js.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts +2 -0
- package/dist/build/__tests__/per-router-manifest.test.d.ts.map +1 -0
- package/dist/build/__tests__/per-router-manifest.test.js +308 -0
- package/dist/build/__tests__/per-router-manifest.test.js.map +1 -0
- package/dist/build/generate-manifest.d.ts +81 -0
- package/dist/build/generate-manifest.d.ts.map +1 -0
- package/dist/build/generate-manifest.js +276 -0
- package/dist/build/generate-manifest.js.map +1 -0
- package/dist/build/generate-route-types.d.ts +115 -0
- package/dist/build/generate-route-types.d.ts.map +1 -0
- package/dist/build/generate-route-types.js +740 -0
- package/dist/build/generate-route-types.js.map +1 -0
- package/dist/build/index.d.ts +21 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +21 -0
- package/dist/build/index.js.map +1 -0
- package/dist/build/route-trie.d.ts +71 -0
- package/dist/build/route-trie.d.ts.map +1 -0
- package/dist/build/route-trie.js +175 -0
- package/dist/build/route-trie.js.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts +2 -0
- package/dist/cache/__tests__/cache-scope.test.d.ts.map +1 -0
- package/dist/cache/__tests__/cache-scope.test.js +208 -0
- package/dist/cache/__tests__/cache-scope.test.js.map +1 -0
- package/dist/cache/__tests__/document-cache.test.d.ts +2 -0
- package/dist/cache/__tests__/document-cache.test.d.ts.map +1 -0
- package/dist/cache/__tests__/document-cache.test.js +345 -0
- package/dist/cache/__tests__/document-cache.test.js.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-segment-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-segment-store.test.js +425 -0
- package/dist/cache/__tests__/memory-segment-store.test.js.map +1 -0
- package/dist/cache/__tests__/memory-store.test.d.ts +2 -0
- package/dist/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/dist/cache/__tests__/memory-store.test.js +367 -0
- package/dist/cache/__tests__/memory-store.test.js.map +1 -0
- package/dist/cache/cache-scope.d.ts +102 -0
- package/dist/cache/cache-scope.d.ts.map +1 -0
- package/dist/cache/cache-scope.js +440 -0
- package/dist/cache/cache-scope.js.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts +2 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.d.ts.map +1 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js +330 -0
- package/dist/cache/cf/__tests__/cf-cache-store.test.js.map +1 -0
- package/dist/cache/cf/cf-cache-store.d.ts +165 -0
- package/dist/cache/cf/cf-cache-store.d.ts.map +1 -0
- package/dist/cache/cf/cf-cache-store.js +242 -0
- package/dist/cache/cf/cf-cache-store.js.map +1 -0
- package/dist/cache/cf/index.d.ts +14 -0
- package/dist/cache/cf/index.d.ts.map +1 -0
- package/dist/cache/cf/index.js +17 -0
- package/dist/cache/cf/index.js.map +1 -0
- package/dist/cache/document-cache.d.ts +64 -0
- package/dist/cache/document-cache.d.ts.map +1 -0
- package/dist/cache/document-cache.js +228 -0
- package/dist/cache/document-cache.js.map +1 -0
- package/dist/cache/index.d.ts +19 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory-segment-store.d.ts +110 -0
- package/dist/cache/memory-segment-store.d.ts.map +1 -0
- package/dist/cache/memory-segment-store.js +117 -0
- package/dist/cache/memory-segment-store.js.map +1 -0
- package/dist/cache/memory-store.d.ts +41 -0
- package/dist/cache/memory-store.d.ts.map +1 -0
- package/dist/cache/memory-store.js +191 -0
- package/dist/cache/memory-store.js.map +1 -0
- package/dist/cache/types.d.ts +317 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +12 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/client.d.ts +248 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +367 -0
- package/dist/client.js.map +1 -0
- package/dist/client.rsc.d.ts +26 -0
- package/dist/client.rsc.d.ts.map +1 -0
- package/dist/client.rsc.js +46 -0
- package/dist/client.rsc.js.map +1 -0
- package/dist/component-utils.d.ts +36 -0
- package/dist/component-utils.d.ts.map +1 -0
- package/dist/component-utils.js +61 -0
- package/dist/component-utils.js.map +1 -0
- package/dist/components/DefaultDocument.d.ts +13 -0
- package/dist/components/DefaultDocument.d.ts.map +1 -0
- package/dist/components/DefaultDocument.js +15 -0
- package/dist/components/DefaultDocument.js.map +1 -0
- package/dist/debug.d.ts +58 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +157 -0
- package/dist/debug.js.map +1 -0
- package/dist/default-error-boundary.d.ts +11 -0
- package/dist/default-error-boundary.d.ts.map +1 -0
- package/dist/default-error-boundary.js +45 -0
- package/dist/default-error-boundary.js.map +1 -0
- package/dist/deps/browser.d.ts +2 -0
- package/dist/deps/browser.d.ts.map +1 -0
- package/dist/deps/browser.js +3 -0
- package/dist/deps/browser.js.map +1 -0
- package/dist/deps/html-stream-client.d.ts +2 -0
- package/dist/deps/html-stream-client.d.ts.map +1 -0
- package/dist/deps/html-stream-client.js +3 -0
- package/dist/deps/html-stream-client.js.map +1 -0
- package/dist/deps/html-stream-server.d.ts +2 -0
- package/dist/deps/html-stream-server.d.ts.map +1 -0
- package/dist/deps/html-stream-server.js +3 -0
- package/dist/deps/html-stream-server.js.map +1 -0
- package/dist/deps/rsc.d.ts +2 -0
- package/dist/deps/rsc.d.ts.map +1 -0
- package/dist/deps/rsc.js +4 -0
- package/dist/deps/rsc.js.map +1 -0
- package/dist/deps/ssr.d.ts +2 -0
- package/dist/deps/ssr.d.ts.map +1 -0
- package/dist/deps/ssr.js +3 -0
- package/dist/deps/ssr.js.map +1 -0
- package/dist/errors.d.ts +174 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +241 -0
- package/dist/errors.js.map +1 -0
- package/dist/handle.d.ts +78 -0
- package/dist/handle.d.ts.map +1 -0
- package/dist/handle.js +82 -0
- package/dist/handle.js.map +1 -0
- package/dist/handles/MetaTags.d.ts +14 -0
- package/dist/handles/MetaTags.d.ts.map +1 -0
- package/dist/handles/MetaTags.js +136 -0
- package/dist/handles/MetaTags.js.map +1 -0
- package/dist/handles/index.d.ts +6 -0
- package/dist/handles/index.d.ts.map +1 -0
- package/dist/handles/index.js +6 -0
- package/dist/handles/index.js.map +1 -0
- package/dist/handles/meta.d.ts +39 -0
- package/dist/handles/meta.d.ts.map +1 -0
- package/dist/handles/meta.js +202 -0
- package/dist/handles/meta.js.map +1 -0
- package/dist/host/__tests__/errors.test.d.ts +2 -0
- package/dist/host/__tests__/errors.test.d.ts.map +1 -0
- package/dist/host/__tests__/errors.test.js +76 -0
- package/dist/host/__tests__/errors.test.js.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-comprehensive.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js +732 -0
- package/dist/host/__tests__/pattern-comprehensive.test.js.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts +2 -0
- package/dist/host/__tests__/pattern-matcher.test.d.ts.map +1 -0
- package/dist/host/__tests__/pattern-matcher.test.js +251 -0
- package/dist/host/__tests__/pattern-matcher.test.js.map +1 -0
- package/dist/host/__tests__/router.test.d.ts +2 -0
- package/dist/host/__tests__/router.test.d.ts.map +1 -0
- package/dist/host/__tests__/router.test.js +241 -0
- package/dist/host/__tests__/router.test.js.map +1 -0
- package/dist/host/__tests__/testing.test.d.ts +2 -0
- package/dist/host/__tests__/testing.test.d.ts.map +1 -0
- package/dist/host/__tests__/testing.test.js +64 -0
- package/dist/host/__tests__/testing.test.js.map +1 -0
- package/dist/host/__tests__/utils.test.d.ts +2 -0
- package/dist/host/__tests__/utils.test.d.ts.map +1 -0
- package/dist/host/__tests__/utils.test.js +29 -0
- package/dist/host/__tests__/utils.test.js.map +1 -0
- package/dist/host/cookie-handler.d.ts +34 -0
- package/dist/host/cookie-handler.d.ts.map +1 -0
- package/dist/host/cookie-handler.js +124 -0
- package/dist/host/cookie-handler.js.map +1 -0
- package/dist/host/errors.d.ts +56 -0
- package/dist/host/errors.d.ts.map +1 -0
- package/dist/host/errors.js +79 -0
- package/dist/host/errors.js.map +1 -0
- package/dist/host/index.d.ts +29 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +32 -0
- package/dist/host/index.js.map +1 -0
- package/dist/host/pattern-matcher.d.ts +36 -0
- package/dist/host/pattern-matcher.d.ts.map +1 -0
- package/dist/host/pattern-matcher.js +172 -0
- package/dist/host/pattern-matcher.js.map +1 -0
- package/dist/host/router.d.ts +26 -0
- package/dist/host/router.d.ts.map +1 -0
- package/dist/host/router.js +218 -0
- package/dist/host/router.js.map +1 -0
- package/dist/host/testing.d.ts +36 -0
- package/dist/host/testing.d.ts.map +1 -0
- package/dist/host/testing.js +55 -0
- package/dist/host/testing.js.map +1 -0
- package/dist/host/types.d.ts +115 -0
- package/dist/host/types.d.ts.map +1 -0
- package/dist/host/types.js +7 -0
- package/dist/host/types.js.map +1 -0
- package/dist/host/utils.d.ts +21 -0
- package/dist/host/utils.d.ts.map +1 -0
- package/dist/host/utils.js +23 -0
- package/dist/host/utils.js.map +1 -0
- package/dist/href-client.d.ts +131 -0
- package/dist/href-client.d.ts.map +1 -0
- package/dist/href-client.js +64 -0
- package/dist/href-client.js.map +1 -0
- package/dist/href-context.d.ts +29 -0
- package/dist/href-context.d.ts.map +1 -0
- package/dist/href-context.js +21 -0
- package/dist/href-context.js.map +1 -0
- package/dist/index.d.ts +73 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -0
- package/dist/index.rsc.d.ts +32 -0
- package/dist/index.rsc.d.ts.map +1 -0
- package/dist/index.rsc.js +40 -0
- package/dist/index.rsc.js.map +1 -0
- package/dist/internal-debug.d.ts +2 -0
- package/dist/internal-debug.d.ts.map +1 -0
- package/dist/internal-debug.js +5 -0
- package/dist/internal-debug.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +20 -0
- package/dist/loader.js.map +1 -0
- package/dist/loader.rsc.d.ts +19 -0
- package/dist/loader.rsc.d.ts.map +1 -0
- package/dist/loader.rsc.js +99 -0
- package/dist/loader.rsc.js.map +1 -0
- package/dist/network-error-thrower.d.ts +17 -0
- package/dist/network-error-thrower.d.ts.map +1 -0
- package/dist/network-error-thrower.js +14 -0
- package/dist/network-error-thrower.js.map +1 -0
- package/dist/outlet-context.d.ts +13 -0
- package/dist/outlet-context.d.ts.map +1 -0
- package/dist/outlet-context.js +3 -0
- package/dist/outlet-context.js.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts +2 -0
- package/dist/prerender/__tests__/param-hash.test.d.ts.map +1 -0
- package/dist/prerender/__tests__/param-hash.test.js +148 -0
- package/dist/prerender/__tests__/param-hash.test.js.map +1 -0
- package/dist/prerender/param-hash.d.ts +16 -0
- package/dist/prerender/param-hash.d.ts.map +1 -0
- package/dist/prerender/param-hash.js +36 -0
- package/dist/prerender/param-hash.js.map +1 -0
- package/dist/prerender/store.d.ts +38 -0
- package/dist/prerender/store.d.ts.map +1 -0
- package/dist/prerender/store.js +61 -0
- package/dist/prerender/store.js.map +1 -0
- package/dist/prerender.d.ts +66 -0
- package/dist/prerender.d.ts.map +1 -0
- package/dist/prerender.js +57 -0
- package/dist/prerender.js.map +1 -0
- package/dist/reverse.d.ts +196 -0
- package/dist/reverse.d.ts.map +1 -0
- package/dist/reverse.js +78 -0
- package/dist/reverse.js.map +1 -0
- package/dist/root-error-boundary.d.ts +33 -0
- package/dist/root-error-boundary.d.ts.map +1 -0
- package/dist/root-error-boundary.js +165 -0
- package/dist/root-error-boundary.js.map +1 -0
- package/dist/route-content-wrapper.d.ts +46 -0
- package/dist/route-content-wrapper.d.ts.map +1 -0
- package/dist/route-content-wrapper.js +77 -0
- package/dist/route-content-wrapper.js.map +1 -0
- package/dist/route-definition.d.ts +421 -0
- package/dist/route-definition.d.ts.map +1 -0
- package/dist/route-definition.js +868 -0
- package/dist/route-definition.js.map +1 -0
- package/dist/route-map-builder.d.ts +155 -0
- package/dist/route-map-builder.d.ts.map +1 -0
- package/dist/route-map-builder.js +237 -0
- package/dist/route-map-builder.js.map +1 -0
- package/dist/route-types.d.ts +165 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +7 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router/__tests__/handler-context.test.d.ts +2 -0
- package/dist/router/__tests__/handler-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/handler-context.test.js +65 -0
- package/dist/router/__tests__/handler-context.test.js.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts +2 -0
- package/dist/router/__tests__/loader-cycle-detection.test.d.ts.map +1 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js +221 -0
- package/dist/router/__tests__/loader-cycle-detection.test.js.map +1 -0
- package/dist/router/__tests__/match-context.test.d.ts +2 -0
- package/dist/router/__tests__/match-context.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-context.test.js +92 -0
- package/dist/router/__tests__/match-context.test.js.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts +2 -0
- package/dist/router/__tests__/match-pipelines.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-pipelines.test.js +417 -0
- package/dist/router/__tests__/match-pipelines.test.js.map +1 -0
- package/dist/router/__tests__/match-result.test.d.ts +2 -0
- package/dist/router/__tests__/match-result.test.d.ts.map +1 -0
- package/dist/router/__tests__/match-result.test.js +457 -0
- package/dist/router/__tests__/match-result.test.js.map +1 -0
- package/dist/router/__tests__/on-error.test.d.ts +2 -0
- package/dist/router/__tests__/on-error.test.d.ts.map +1 -0
- package/dist/router/__tests__/on-error.test.js +678 -0
- package/dist/router/__tests__/on-error.test.js.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts +2 -0
- package/dist/router/__tests__/pattern-matching.test.d.ts.map +1 -0
- package/dist/router/__tests__/pattern-matching.test.js +629 -0
- package/dist/router/__tests__/pattern-matching.test.js.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts +2 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.d.ts.map +1 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js +155 -0
- package/dist/router/__tests__/segment-resolution-parallel-loading.test.js.map +1 -0
- package/dist/router/error-handling.d.ts +77 -0
- package/dist/router/error-handling.d.ts.map +1 -0
- package/dist/router/error-handling.js +202 -0
- package/dist/router/error-handling.js.map +1 -0
- package/dist/router/handler-context.d.ts +20 -0
- package/dist/router/handler-context.d.ts.map +1 -0
- package/dist/router/handler-context.js +198 -0
- package/dist/router/handler-context.js.map +1 -0
- package/dist/router/intercept-resolution.d.ts +66 -0
- package/dist/router/intercept-resolution.d.ts.map +1 -0
- package/dist/router/intercept-resolution.js +246 -0
- package/dist/router/intercept-resolution.js.map +1 -0
- package/dist/router/loader-resolution.d.ts +64 -0
- package/dist/router/loader-resolution.d.ts.map +1 -0
- package/dist/router/loader-resolution.js +284 -0
- package/dist/router/loader-resolution.js.map +1 -0
- package/dist/router/logging.d.ts +15 -0
- package/dist/router/logging.d.ts.map +1 -0
- package/dist/router/logging.js +99 -0
- package/dist/router/logging.js.map +1 -0
- package/dist/router/manifest.d.ts +22 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +181 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/match-api.d.ts +35 -0
- package/dist/router/match-api.d.ts.map +1 -0
- package/dist/router/match-api.js +406 -0
- package/dist/router/match-api.js.map +1 -0
- package/dist/router/match-context.d.ts +206 -0
- package/dist/router/match-context.d.ts.map +1 -0
- package/dist/router/match-context.js +17 -0
- package/dist/router/match-context.js.map +1 -0
- package/dist/router/match-middleware/background-revalidation.d.ts +127 -0
- package/dist/router/match-middleware/background-revalidation.d.ts.map +1 -0
- package/dist/router/match-middleware/background-revalidation.js +75 -0
- package/dist/router/match-middleware/background-revalidation.js.map +1 -0
- package/dist/router/match-middleware/cache-lookup.d.ts +112 -0
- package/dist/router/match-middleware/cache-lookup.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-lookup.js +257 -0
- package/dist/router/match-middleware/cache-lookup.js.map +1 -0
- package/dist/router/match-middleware/cache-store.d.ts +113 -0
- package/dist/router/match-middleware/cache-store.d.ts.map +1 -0
- package/dist/router/match-middleware/cache-store.js +108 -0
- package/dist/router/match-middleware/cache-store.js.map +1 -0
- package/dist/router/match-middleware/index.d.ts +81 -0
- package/dist/router/match-middleware/index.d.ts.map +1 -0
- package/dist/router/match-middleware/index.js +80 -0
- package/dist/router/match-middleware/index.js.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts +117 -0
- package/dist/router/match-middleware/intercept-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/intercept-resolution.js +134 -0
- package/dist/router/match-middleware/intercept-resolution.js.map +1 -0
- package/dist/router/match-middleware/segment-resolution.d.ts +99 -0
- package/dist/router/match-middleware/segment-resolution.d.ts.map +1 -0
- package/dist/router/match-middleware/segment-resolution.js +53 -0
- package/dist/router/match-middleware/segment-resolution.js.map +1 -0
- package/dist/router/match-pipelines.d.ts +147 -0
- package/dist/router/match-pipelines.d.ts.map +1 -0
- package/dist/router/match-pipelines.js +82 -0
- package/dist/router/match-pipelines.js.map +1 -0
- package/dist/router/match-result.d.ts +126 -0
- package/dist/router/match-result.d.ts.map +1 -0
- package/dist/router/match-result.js +93 -0
- package/dist/router/match-result.js.map +1 -0
- package/dist/router/metrics.d.ts +20 -0
- package/dist/router/metrics.d.ts.map +1 -0
- package/dist/router/metrics.js +47 -0
- package/dist/router/metrics.js.map +1 -0
- package/dist/router/middleware.d.ts +249 -0
- package/dist/router/middleware.d.ts.map +1 -0
- package/dist/router/middleware.js +434 -0
- package/dist/router/middleware.js.map +1 -0
- package/dist/router/middleware.test.d.ts +2 -0
- package/dist/router/middleware.test.d.ts.map +1 -0
- package/dist/router/middleware.test.js +816 -0
- package/dist/router/middleware.test.js.map +1 -0
- package/dist/router/pattern-matching.d.ts +149 -0
- package/dist/router/pattern-matching.d.ts.map +1 -0
- package/dist/router/pattern-matching.js +349 -0
- package/dist/router/pattern-matching.js.map +1 -0
- package/dist/router/revalidation.d.ts +44 -0
- package/dist/router/revalidation.d.ts.map +1 -0
- package/dist/router/revalidation.js +147 -0
- package/dist/router/revalidation.js.map +1 -0
- package/dist/router/router-context.d.ts +135 -0
- package/dist/router/router-context.d.ts.map +1 -0
- package/dist/router/router-context.js +36 -0
- package/dist/router/router-context.js.map +1 -0
- package/dist/router/segment-resolution.d.ts +127 -0
- package/dist/router/segment-resolution.d.ts.map +1 -0
- package/dist/router/segment-resolution.js +919 -0
- package/dist/router/segment-resolution.js.map +1 -0
- package/dist/router/trie-matching.d.ts +40 -0
- package/dist/router/trie-matching.d.ts.map +1 -0
- package/dist/router/trie-matching.js +127 -0
- package/dist/router/trie-matching.js.map +1 -0
- package/dist/router/types.d.ts +136 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +7 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router.d.ts +753 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.gen.d.ts +6 -0
- package/dist/router.gen.d.ts.map +1 -0
- package/dist/router.gen.js +6 -0
- package/dist/router.gen.js.map +1 -0
- package/dist/router.js +1304 -0
- package/dist/router.js.map +1 -0
- package/dist/rsc/__tests__/helpers.test.d.ts +2 -0
- package/dist/rsc/__tests__/helpers.test.d.ts.map +1 -0
- package/dist/rsc/__tests__/helpers.test.js +140 -0
- package/dist/rsc/__tests__/helpers.test.js.map +1 -0
- package/dist/rsc/handler.d.ts +45 -0
- package/dist/rsc/handler.d.ts.map +1 -0
- package/dist/rsc/handler.js +1172 -0
- package/dist/rsc/handler.js.map +1 -0
- package/dist/rsc/helpers.d.ts +16 -0
- package/dist/rsc/helpers.d.ts.map +1 -0
- package/dist/rsc/helpers.js +55 -0
- package/dist/rsc/helpers.js.map +1 -0
- package/dist/rsc/index.d.ts +22 -0
- package/dist/rsc/index.d.ts.map +1 -0
- package/dist/rsc/index.js +23 -0
- package/dist/rsc/index.js.map +1 -0
- package/dist/rsc/nonce.d.ts +9 -0
- package/dist/rsc/nonce.d.ts.map +1 -0
- package/dist/rsc/nonce.js +18 -0
- package/dist/rsc/nonce.js.map +1 -0
- package/dist/rsc/types.d.ts +206 -0
- package/dist/rsc/types.d.ts.map +1 -0
- package/dist/rsc/types.js +8 -0
- package/dist/rsc/types.js.map +1 -0
- package/dist/search-params.d.ts +103 -0
- package/dist/search-params.d.ts.map +1 -0
- package/dist/search-params.js +74 -0
- package/dist/search-params.js.map +1 -0
- package/dist/segment-system.d.ts +75 -0
- package/dist/segment-system.d.ts.map +1 -0
- package/dist/segment-system.js +336 -0
- package/dist/segment-system.js.map +1 -0
- package/dist/server/context.d.ts +245 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +197 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/fetchable-loader-store.d.ts +18 -0
- package/dist/server/fetchable-loader-store.d.ts.map +1 -0
- package/dist/server/fetchable-loader-store.js +18 -0
- package/dist/server/fetchable-loader-store.js.map +1 -0
- package/dist/server/handle-store.d.ts +85 -0
- package/dist/server/handle-store.d.ts.map +1 -0
- package/dist/server/handle-store.js +142 -0
- package/dist/server/handle-store.js.map +1 -0
- package/dist/server/loader-registry.d.ts +55 -0
- package/dist/server/loader-registry.d.ts.map +1 -0
- package/dist/server/loader-registry.js +132 -0
- package/dist/server/loader-registry.js.map +1 -0
- package/dist/server/request-context.d.ts +226 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +290 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/root-layout.d.ts +4 -0
- package/dist/server/root-layout.d.ts.map +1 -0
- package/dist/server/root-layout.js +5 -0
- package/dist/server/root-layout.js.map +1 -0
- package/dist/server.d.ts +15 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +20 -0
- package/dist/server.js.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts +2 -0
- package/dist/ssr/__tests__/ssr-handler.test.d.ts.map +1 -0
- package/dist/ssr/__tests__/ssr-handler.test.js +132 -0
- package/dist/ssr/__tests__/ssr-handler.test.js.map +1 -0
- package/dist/ssr/index.d.ts +98 -0
- package/dist/ssr/index.d.ts.map +1 -0
- package/dist/ssr/index.js +158 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/static-handler.d.ts +50 -0
- package/dist/static-handler.d.ts.map +1 -0
- package/dist/static-handler.gen.d.ts +5 -0
- package/dist/static-handler.gen.d.ts.map +1 -0
- package/dist/static-handler.gen.js +5 -0
- package/dist/static-handler.gen.js.map +1 -0
- package/dist/static-handler.js +29 -0
- package/dist/static-handler.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +20 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +240 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/ThemeScript.d.ts +48 -0
- package/dist/theme/ThemeScript.d.ts.map +1 -0
- package/dist/theme/ThemeScript.js +13 -0
- package/dist/theme/ThemeScript.js.map +1 -0
- package/dist/theme/__tests__/theme.test.d.ts +2 -0
- package/dist/theme/__tests__/theme.test.d.ts.map +1 -0
- package/dist/theme/__tests__/theme.test.js +103 -0
- package/dist/theme/__tests__/theme.test.js.map +1 -0
- package/dist/theme/constants.d.ts +29 -0
- package/dist/theme/constants.d.ts.map +1 -0
- package/dist/theme/constants.js +48 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +31 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +36 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme-context.d.ts +40 -0
- package/dist/theme/theme-context.d.ts.map +1 -0
- package/dist/theme/theme-context.js +60 -0
- package/dist/theme/theme-context.js.map +1 -0
- package/dist/theme/theme-script.d.ts +27 -0
- package/dist/theme/theme-script.d.ts.map +1 -0
- package/dist/theme/theme-script.js +147 -0
- package/dist/theme/theme-script.js.map +1 -0
- package/dist/theme/types.d.ts +163 -0
- package/dist/theme/types.d.ts.map +1 -0
- package/dist/theme/types.js +11 -0
- package/dist/theme/types.js.map +1 -0
- package/dist/theme/use-theme.d.ts +12 -0
- package/dist/theme/use-theme.d.ts.map +1 -0
- package/dist/theme/use-theme.js +40 -0
- package/dist/theme/use-theme.js.map +1 -0
- package/dist/types.d.ts +1479 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/urls.d.ts +441 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.gen.d.ts +8 -0
- package/dist/urls.gen.d.ts.map +1 -0
- package/dist/urls.gen.js +8 -0
- package/dist/urls.gen.js.map +1 -0
- package/dist/urls.js +443 -0
- package/dist/urls.js.map +1 -0
- package/dist/use-loader.d.ts +127 -0
- package/dist/use-loader.d.ts.map +1 -0
- package/dist/use-loader.js +237 -0
- package/dist/use-loader.js.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts +2 -0
- package/dist/vite/__tests__/ast-handler-extract.test.d.ts.map +1 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js +294 -0
- package/dist/vite/__tests__/ast-handler-extract.test.js.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-id-utils.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-id-utils.test.js +224 -0
- package/dist/vite/__tests__/expose-id-utils.test.js.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-internal-ids.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js +647 -0
- package/dist/vite/__tests__/expose-internal-ids.test.js.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts +2 -0
- package/dist/vite/__tests__/expose-router-id.test.d.ts.map +1 -0
- package/dist/vite/__tests__/expose-router-id.test.js +39 -0
- package/dist/vite/__tests__/expose-router-id.test.js.map +1 -0
- package/dist/vite/ast-handler-extract.d.ts +49 -0
- package/dist/vite/ast-handler-extract.d.ts.map +1 -0
- package/dist/vite/ast-handler-extract.js +249 -0
- package/dist/vite/ast-handler-extract.js.map +1 -0
- package/dist/vite/expose-action-id.d.ts +19 -0
- package/dist/vite/expose-action-id.d.ts.map +1 -0
- package/dist/vite/expose-action-id.js +250 -0
- package/dist/vite/expose-action-id.js.map +1 -0
- package/dist/vite/expose-id-utils.d.ts +69 -0
- package/dist/vite/expose-id-utils.d.ts.map +1 -0
- package/dist/vite/expose-id-utils.js +289 -0
- package/dist/vite/expose-id-utils.js.map +1 -0
- package/dist/vite/expose-internal-ids.d.ts +22 -0
- package/dist/vite/expose-internal-ids.d.ts.map +1 -0
- package/dist/vite/expose-internal-ids.js +886 -0
- package/dist/vite/expose-internal-ids.js.map +1 -0
- package/dist/vite/index.d.ts +149 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +687 -231
- 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 +2 -2
- package/skills/cache-guide/SKILL.md +32 -0
- package/skills/caching/SKILL.md +8 -0
- package/skills/links/SKILL.md +3 -1
- package/skills/loader/SKILL.md +53 -43
- package/skills/middleware/SKILL.md +2 -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/navigation-bridge.ts +16 -3
- package/src/browser/navigation-client.ts +64 -40
- package/src/browser/navigation-store.ts +43 -8
- package/src/browser/partial-update.ts +27 -5
- package/src/browser/prefetch/fetch.ts +8 -2
- package/src/browser/prefetch/queue.ts +61 -29
- package/src/browser/prefetch/resource-ready.ts +77 -0
- package/src/browser/react/Link.tsx +44 -8
- package/src/browser/react/NavigationProvider.tsx +13 -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 +26 -3
- package/src/browser/scroll-restoration.ts +10 -8
- package/src/browser/server-action-bridge.ts +8 -6
- package/src/browser/types.ts +27 -5
- package/src/build/generate-manifest.ts +6 -6
- package/src/build/generate-route-types.ts +3 -0
- package/src/build/route-types/include-resolution.ts +8 -1
- package/src/build/route-types/router-processing.ts +211 -72
- package/src/build/route-types/scan-filter.ts +8 -1
- package/src/cache/cache-scope.ts +12 -14
- package/src/cache/taint.ts +55 -0
- package/src/client.tsx +2 -56
- package/src/context-var.ts +72 -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 +42 -19
- package/src/route-definition/helpers-types.ts +10 -6
- package/src/route-definition/index.ts +3 -0
- package/src/route-definition/redirect.ts +9 -1
- package/src/route-definition/resolve-handler-use.ts +149 -0
- package/src/route-types.ts +11 -0
- package/src/router/content-negotiation.ts +100 -1
- package/src/router/handler-context.ts +79 -23
- package/src/router/intercept-resolution.ts +9 -4
- package/src/router/loader-resolution.ts +156 -21
- package/src/router/match-api.ts +124 -189
- package/src/router/match-middleware/cache-lookup.ts +26 -7
- package/src/router/match-middleware/segment-resolution.ts +53 -0
- package/src/router/middleware-types.ts +6 -8
- package/src/router/middleware.ts +2 -5
- 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-interfaces.ts +36 -4
- package/src/router/router-options.ts +37 -11
- package/src/router/segment-resolution/fresh.ts +75 -9
- package/src/router/segment-resolution/helpers.ts +29 -24
- package/src/router/segment-resolution/revalidation.ts +84 -7
- package/src/router/types.ts +1 -0
- package/src/router.ts +54 -5
- 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/server/context.ts +50 -1
- package/src/server/handle-store.ts +19 -0
- package/src/server/loader-registry.ts +9 -8
- package/src/server/request-context.ts +175 -15
- package/src/ssr/index.tsx +3 -0
- package/src/static-handler.ts +18 -6
- package/src/types/cache-types.ts +4 -4
- package/src/types/handler-context.ts +37 -19
- package/src/types/loader-types.ts +36 -9
- package/src/types/route-entry.ts +1 -1
- package/src/urls/path-helper-types.ts +9 -2
- package/src/urls/path-helper.ts +47 -12
- 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 +128 -74
- package/src/vite/discovery/state.ts +13 -4
- package/src/vite/index.ts +4 -0
- package/src/vite/plugin-types.ts +60 -5
- package/src/vite/plugins/expose-ids/handler-transform.ts +30 -0
- package/src/vite/plugins/expose-internal-ids.ts +231 -39
- package/src/vite/plugins/performance-tracks.ts +88 -0
- package/src/vite/plugins/refresh-cmd.ts +88 -26
- package/src/vite/rango.ts +19 -2
- package/src/vite/router-discovery.ts +178 -37
- package/src/vite/utils/prerender-utils.ts +18 -0
- package/src/vite/utils/shared-utils.ts +3 -2
package/dist/vite/index.js
CHANGED
|
@@ -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,122 @@ ${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 prerenderFnNames = hasPrerenderHandlerCode ? getFnNames(PRERENDER_CONFIG.fnName) : [];
|
|
1316
|
+
const staticFnNames = hasStaticHandlerCode ? getFnNames(STATIC_CONFIG.fnName) : [];
|
|
1317
|
+
const loaderFnNames = hasLoaderCode ? getFnNames("createLoader") : [];
|
|
1318
|
+
const handleFnNames = hasHandleCode ? getFnNames("createHandle") : [];
|
|
1319
|
+
const lsFnNames = hasLocationStateCode ? getFnNames("createLocationState") : [];
|
|
1320
|
+
const allBindings = [];
|
|
1321
|
+
for (const fnNames of [
|
|
1322
|
+
prerenderFnNames,
|
|
1323
|
+
staticFnNames,
|
|
1324
|
+
loaderFnNames,
|
|
1325
|
+
handleFnNames,
|
|
1326
|
+
lsFnNames
|
|
1327
|
+
]) {
|
|
1328
|
+
if (fnNames.length > 0) {
|
|
1329
|
+
allBindings.push(...getBindings(code, fnNames));
|
|
1330
|
+
}
|
|
1331
|
+
}
|
|
1332
|
+
let canStubWholeFile = allBindings.length > 0 && isExportOnlyFile(code, allBindings);
|
|
1333
|
+
if (canStubWholeFile && (handleFnNames.length > 0 || lsFnNames.length > 0)) {
|
|
1334
|
+
const exportedLocals = new Set(allBindings.map((b) => b.localName));
|
|
1335
|
+
const strippedBindings = [];
|
|
1336
|
+
const localDeclPattern = /(?:^|;|\n)\s*(?:const|let|var|function)\s+(\w+)/g;
|
|
1337
|
+
let declMatch;
|
|
1338
|
+
while ((declMatch = localDeclPattern.exec(code)) !== null) {
|
|
1339
|
+
if (!exportedLocals.has(declMatch[1])) {
|
|
1340
|
+
strippedBindings.push(declMatch[1]);
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
const importPattern = /import\s*\{([^}]*)\}\s*from\s*["'](?!@rangojs\/router)[^"']*["']/g;
|
|
1344
|
+
let importMatch;
|
|
1345
|
+
while ((importMatch = importPattern.exec(code)) !== null) {
|
|
1346
|
+
for (const spec of importMatch[1].split(",")) {
|
|
1347
|
+
const m = spec.trim().match(/^[A-Za-z_$][\w$]*(?:\s+as\s+([A-Za-z_$][\w$]*))?$/);
|
|
1348
|
+
if (m) strippedBindings.push(m[1] || m[0].trim().split(/\s/)[0]);
|
|
1349
|
+
}
|
|
1350
|
+
}
|
|
1351
|
+
const defaultImportPattern = /import\s+([A-Za-z_$][\w$]*)\s+from\s*["'](?!@rangojs\/router)[^"']*["']/g;
|
|
1352
|
+
while ((importMatch = defaultImportPattern.exec(code)) !== null) {
|
|
1353
|
+
strippedBindings.push(importMatch[1]);
|
|
1354
|
+
}
|
|
1355
|
+
if (strippedBindings.length > 0) {
|
|
1356
|
+
const preservedBindings = allBindings.filter((b) => {
|
|
1357
|
+
const fc = code.slice(b.callExprStart, b.callOpenParenPos + 1);
|
|
1358
|
+
return handleFnNames.some((n) => fc.includes(n)) || lsFnNames.some((n) => fc.includes(n));
|
|
1359
|
+
});
|
|
1360
|
+
canStubWholeFile = !preservedBindings.some((b) => {
|
|
1361
|
+
const expr = code.slice(b.callExprStart, b.callCloseParenPos + 1);
|
|
1362
|
+
return strippedBindings.some(
|
|
1363
|
+
(name) => new RegExp(`\\b${name}\\b`).test(expr)
|
|
1364
|
+
);
|
|
1365
|
+
});
|
|
1366
|
+
}
|
|
1367
|
+
}
|
|
1368
|
+
if (canStubWholeFile) {
|
|
1369
|
+
const lines = [];
|
|
1370
|
+
const neededImports = [];
|
|
1371
|
+
if (handleFnNames.length > 0) neededImports.push("createHandle");
|
|
1372
|
+
if (lsFnNames.length > 0) neededImports.push("createLocationState");
|
|
1373
|
+
if (neededImports.length > 0) {
|
|
1374
|
+
lines.push(
|
|
1375
|
+
`import { ${neededImports.join(", ")} } from "@rangojs/router";`
|
|
1376
|
+
);
|
|
1377
|
+
}
|
|
1378
|
+
for (const binding of allBindings) {
|
|
1379
|
+
const fnCall = code.slice(
|
|
1380
|
+
binding.callExprStart,
|
|
1381
|
+
binding.callOpenParenPos + 1
|
|
1382
|
+
);
|
|
1383
|
+
const isHandle = handleFnNames.some((n) => fnCall.includes(n));
|
|
1384
|
+
const isLocationState = lsFnNames.some((n) => fnCall.includes(n));
|
|
1385
|
+
const primaryName = binding.exportNames[0];
|
|
1386
|
+
const stubId = isBuild ? hashId(filePath, primaryName) : `${filePath}#${primaryName}`;
|
|
1387
|
+
if (isHandle || isLocationState) {
|
|
1388
|
+
const rawCallExpr = code.slice(
|
|
1389
|
+
binding.callExprStart,
|
|
1390
|
+
binding.callCloseParenPos + 1
|
|
1391
|
+
);
|
|
1392
|
+
const canonicalName = isHandle ? "createHandle" : "createLocationState";
|
|
1393
|
+
const activeFnNames = isHandle ? handleFnNames : lsFnNames;
|
|
1394
|
+
let callExpr = rawCallExpr;
|
|
1395
|
+
for (const alias of activeFnNames) {
|
|
1396
|
+
if (alias !== canonicalName && callExpr.startsWith(alias)) {
|
|
1397
|
+
callExpr = canonicalName + callExpr.slice(alias.length);
|
|
1398
|
+
break;
|
|
1399
|
+
}
|
|
1400
|
+
}
|
|
1401
|
+
lines.push(`export const ${primaryName} = ${callExpr};`);
|
|
1402
|
+
if (isHandle) {
|
|
1403
|
+
lines.push(`${primaryName}.$$id = "${stubId}";`);
|
|
1404
|
+
} else {
|
|
1405
|
+
lines.push(
|
|
1406
|
+
`${primaryName}.__rsc_ls_key = "__rsc_ls_${stubId}";`
|
|
1407
|
+
);
|
|
1408
|
+
}
|
|
1409
|
+
for (const name of binding.exportNames.slice(1)) {
|
|
1410
|
+
lines.push(`export const ${name} = ${primaryName};`);
|
|
1411
|
+
}
|
|
1412
|
+
} else {
|
|
1413
|
+
let brand = "loader";
|
|
1414
|
+
if (prerenderFnNames.some((n) => fnCall.includes(n))) {
|
|
1415
|
+
brand = PRERENDER_CONFIG.brand;
|
|
1416
|
+
} else if (staticFnNames.some((n) => fnCall.includes(n))) {
|
|
1417
|
+
brand = STATIC_CONFIG.brand;
|
|
1418
|
+
}
|
|
1419
|
+
lines.push(
|
|
1420
|
+
`export const ${primaryName} = { __brand: "${brand}", $$id: "${stubId}" };`
|
|
1421
|
+
);
|
|
1422
|
+
for (const name of binding.exportNames.slice(1)) {
|
|
1423
|
+
lines.push(`export const ${name} = ${primaryName};`);
|
|
1424
|
+
}
|
|
1425
|
+
}
|
|
1426
|
+
}
|
|
1427
|
+
return { code: lines.join("\n") + "\n", map: null };
|
|
1428
|
+
}
|
|
1341
1429
|
}
|
|
1342
1430
|
if (hasStaticHandlerCode && isRscEnv && isBuild) {
|
|
1343
1431
|
const fnNames = getFnNames(STATIC_CONFIG.fnName);
|
|
@@ -1372,25 +1460,41 @@ ${lazyImports.join(",\n")}
|
|
|
1372
1460
|
isBuild
|
|
1373
1461
|
) || changed;
|
|
1374
1462
|
}
|
|
1375
|
-
if (hasPrerenderHandlerCode
|
|
1463
|
+
if (hasPrerenderHandlerCode) {
|
|
1376
1464
|
const fnNames = getFnNames(PRERENDER_CONFIG.fnName);
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1465
|
+
const bindings = getBindings(code, fnNames);
|
|
1466
|
+
if (isRscEnv) {
|
|
1467
|
+
changed = transformHandlerIds(
|
|
1468
|
+
PRERENDER_CONFIG,
|
|
1469
|
+
bindings,
|
|
1470
|
+
s,
|
|
1471
|
+
filePath,
|
|
1472
|
+
isBuild
|
|
1473
|
+
) || changed;
|
|
1474
|
+
} else {
|
|
1475
|
+
changed = stubHandlerExprs(
|
|
1476
|
+
PRERENDER_CONFIG,
|
|
1477
|
+
bindings,
|
|
1478
|
+
s,
|
|
1479
|
+
filePath,
|
|
1480
|
+
isBuild
|
|
1481
|
+
) || changed;
|
|
1482
|
+
}
|
|
1384
1483
|
}
|
|
1385
|
-
if (hasStaticHandlerCode
|
|
1484
|
+
if (hasStaticHandlerCode) {
|
|
1386
1485
|
const fnNames = getFnNames(STATIC_CONFIG.fnName);
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1486
|
+
const bindings = getBindings(code, fnNames);
|
|
1487
|
+
if (isRscEnv) {
|
|
1488
|
+
changed = transformHandlerIds(
|
|
1489
|
+
STATIC_CONFIG,
|
|
1490
|
+
bindings,
|
|
1491
|
+
s,
|
|
1492
|
+
filePath,
|
|
1493
|
+
isBuild
|
|
1494
|
+
) || changed;
|
|
1495
|
+
} else {
|
|
1496
|
+
changed = stubHandlerExprs(STATIC_CONFIG, bindings, s, filePath, isBuild) || changed;
|
|
1497
|
+
}
|
|
1394
1498
|
}
|
|
1395
1499
|
if (!changed) return;
|
|
1396
1500
|
return {
|
|
@@ -1745,7 +1849,7 @@ import { resolve } from "node:path";
|
|
|
1745
1849
|
// package.json
|
|
1746
1850
|
var package_default = {
|
|
1747
1851
|
name: "@rangojs/router",
|
|
1748
|
-
version: "0.0.0-experimental.
|
|
1852
|
+
version: "0.0.0-experimental.dfa55db4",
|
|
1749
1853
|
description: "Django-inspired RSC router with composable URL patterns",
|
|
1750
1854
|
keywords: [
|
|
1751
1855
|
"react",
|
|
@@ -1887,7 +1991,7 @@ var package_default = {
|
|
|
1887
1991
|
"test:unit:watch": "vitest"
|
|
1888
1992
|
},
|
|
1889
1993
|
dependencies: {
|
|
1890
|
-
"@vitejs/plugin-rsc": "^0.5.
|
|
1994
|
+
"@vitejs/plugin-rsc": "^0.5.19",
|
|
1891
1995
|
"magic-string": "^0.30.17",
|
|
1892
1996
|
picomatch: "^4.0.3",
|
|
1893
1997
|
"rsc-html-stream": "^0.0.7"
|
|
@@ -2317,7 +2421,7 @@ function buildRouteMapFromBlock(block, fullSource, filePath, visited, searchSche
|
|
|
2317
2421
|
}
|
|
2318
2422
|
return routeMap;
|
|
2319
2423
|
}
|
|
2320
|
-
function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut) {
|
|
2424
|
+
function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagnosticsOut, inlineBlock) {
|
|
2321
2425
|
visited = visited ?? /* @__PURE__ */ new Set();
|
|
2322
2426
|
const realPath = resolve2(filePath);
|
|
2323
2427
|
const key = variableName ? `${realPath}:${variableName}` : realPath;
|
|
@@ -2333,7 +2437,9 @@ function buildCombinedRouteMapWithSearch(filePath, variableName, visited, diagno
|
|
|
2333
2437
|
return { routes: {}, searchSchemas: {} };
|
|
2334
2438
|
}
|
|
2335
2439
|
let block;
|
|
2336
|
-
if (
|
|
2440
|
+
if (inlineBlock) {
|
|
2441
|
+
block = inlineBlock;
|
|
2442
|
+
} else if (variableName) {
|
|
2337
2443
|
const extracted = extractUrlsBlockForVariable(source, variableName);
|
|
2338
2444
|
if (!extracted) return { routes: {}, searchSchemas: {} };
|
|
2339
2445
|
block = extracted;
|
|
@@ -2452,7 +2558,7 @@ Router root: ${conflict.ancestor}
|
|
|
2452
2558
|
Nested router: ${conflict.nested}
|
|
2453
2559
|
Move the nested router into a sibling directory or configure it as a separate app root.`;
|
|
2454
2560
|
}
|
|
2455
|
-
function
|
|
2561
|
+
function extractUrlsFromRouter(code) {
|
|
2456
2562
|
const sourceFile = ts5.createSourceFile(
|
|
2457
2563
|
"router.tsx",
|
|
2458
2564
|
code,
|
|
@@ -2466,24 +2572,70 @@ function extractUrlsVariableFromRouter(code) {
|
|
|
2466
2572
|
const callee = node.expression;
|
|
2467
2573
|
return ts5.isIdentifier(callee) && callee.text === "createRouter";
|
|
2468
2574
|
}
|
|
2575
|
+
function isInlineBuilder(node) {
|
|
2576
|
+
return ts5.isArrowFunction(node) || ts5.isFunctionExpression(node);
|
|
2577
|
+
}
|
|
2578
|
+
function isRoutesOnCreateRouter(node) {
|
|
2579
|
+
if (!ts5.isPropertyAccessExpression(node.expression) || node.expression.name.text !== "routes")
|
|
2580
|
+
return false;
|
|
2581
|
+
let inner = node.expression.expression;
|
|
2582
|
+
while (ts5.isCallExpression(inner) && ts5.isPropertyAccessExpression(inner.expression)) {
|
|
2583
|
+
inner = inner.expression.expression;
|
|
2584
|
+
}
|
|
2585
|
+
return isCreateRouterCall(inner);
|
|
2586
|
+
}
|
|
2469
2587
|
function visit(node) {
|
|
2470
2588
|
if (result) return;
|
|
2471
|
-
if (ts5.isCallExpression(node) &&
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
}
|
|
2476
|
-
|
|
2477
|
-
result = node.arguments[0].text;
|
|
2478
|
-
return;
|
|
2589
|
+
if (ts5.isCallExpression(node) && node.arguments.length >= 1 && isRoutesOnCreateRouter(node)) {
|
|
2590
|
+
const arg = node.arguments[0];
|
|
2591
|
+
if (ts5.isIdentifier(arg)) {
|
|
2592
|
+
result = { kind: "variable", name: arg.text };
|
|
2593
|
+
} else if (isInlineBuilder(arg)) {
|
|
2594
|
+
result = { kind: "inline", block: arg.getText(sourceFile) };
|
|
2479
2595
|
}
|
|
2596
|
+
return;
|
|
2480
2597
|
}
|
|
2481
2598
|
if (isCreateRouterCall(node)) {
|
|
2482
2599
|
const callExpr = node;
|
|
2483
|
-
for (const
|
|
2600
|
+
for (const callArg of callExpr.arguments) {
|
|
2601
|
+
if (ts5.isObjectLiteralExpression(callArg)) {
|
|
2602
|
+
for (const prop of callArg.properties) {
|
|
2603
|
+
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "urls") {
|
|
2604
|
+
if (ts5.isIdentifier(prop.initializer)) {
|
|
2605
|
+
result = { kind: "variable", name: prop.initializer.text };
|
|
2606
|
+
} else if (isInlineBuilder(prop.initializer)) {
|
|
2607
|
+
result = {
|
|
2608
|
+
kind: "inline",
|
|
2609
|
+
block: prop.initializer.getText(sourceFile)
|
|
2610
|
+
};
|
|
2611
|
+
}
|
|
2612
|
+
return;
|
|
2613
|
+
}
|
|
2614
|
+
}
|
|
2615
|
+
}
|
|
2616
|
+
}
|
|
2617
|
+
}
|
|
2618
|
+
ts5.forEachChild(node, visit);
|
|
2619
|
+
}
|
|
2620
|
+
visit(sourceFile);
|
|
2621
|
+
return result;
|
|
2622
|
+
}
|
|
2623
|
+
function extractBasenameFromRouter(code) {
|
|
2624
|
+
const sourceFile = ts5.createSourceFile(
|
|
2625
|
+
"router.tsx",
|
|
2626
|
+
code,
|
|
2627
|
+
ts5.ScriptTarget.Latest,
|
|
2628
|
+
true,
|
|
2629
|
+
ts5.ScriptKind.TSX
|
|
2630
|
+
);
|
|
2631
|
+
let result;
|
|
2632
|
+
function visit(node) {
|
|
2633
|
+
if (result !== void 0) return;
|
|
2634
|
+
if (ts5.isCallExpression(node) && ts5.isIdentifier(node.expression) && node.expression.text === "createRouter") {
|
|
2635
|
+
for (const arg of node.arguments) {
|
|
2484
2636
|
if (ts5.isObjectLiteralExpression(arg)) {
|
|
2485
2637
|
for (const prop of arg.properties) {
|
|
2486
|
-
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "
|
|
2638
|
+
if (ts5.isPropertyAssignment(prop) && ts5.isIdentifier(prop.name) && prop.name.text === "basename" && ts5.isStringLiteral(prop.initializer)) {
|
|
2487
2639
|
result = prop.initializer.text;
|
|
2488
2640
|
return;
|
|
2489
2641
|
}
|
|
@@ -2496,6 +2648,19 @@ function extractUrlsVariableFromRouter(code) {
|
|
|
2496
2648
|
visit(sourceFile);
|
|
2497
2649
|
return result;
|
|
2498
2650
|
}
|
|
2651
|
+
function applyBasenameToRoutes(result, basename3) {
|
|
2652
|
+
const prefixed = {};
|
|
2653
|
+
for (const [name, pattern] of Object.entries(result.routes)) {
|
|
2654
|
+
if (pattern === "/") {
|
|
2655
|
+
prefixed[name] = basename3;
|
|
2656
|
+
} else if (basename3.endsWith("/") && pattern.startsWith("/")) {
|
|
2657
|
+
prefixed[name] = basename3 + pattern.slice(1);
|
|
2658
|
+
} else {
|
|
2659
|
+
prefixed[name] = basename3 + pattern;
|
|
2660
|
+
}
|
|
2661
|
+
}
|
|
2662
|
+
return { routes: prefixed, searchSchemas: result.searchSchemas };
|
|
2663
|
+
}
|
|
2499
2664
|
function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
2500
2665
|
let routerSource;
|
|
2501
2666
|
try {
|
|
@@ -2503,19 +2668,40 @@ function buildCombinedRouteMapForRouterFile(routerFilePath) {
|
|
|
2503
2668
|
} catch {
|
|
2504
2669
|
return { routes: {}, searchSchemas: {} };
|
|
2505
2670
|
}
|
|
2506
|
-
const
|
|
2507
|
-
if (!
|
|
2671
|
+
const extraction = extractUrlsFromRouter(routerSource);
|
|
2672
|
+
if (!extraction) {
|
|
2508
2673
|
return { routes: {}, searchSchemas: {} };
|
|
2509
2674
|
}
|
|
2510
|
-
const
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
|
|
2675
|
+
const rawBasename = extractBasenameFromRouter(routerSource);
|
|
2676
|
+
const basename3 = rawBasename ? ("/" + rawBasename.replace(/^\/+|\/+$/g, "")).replace(/^\/$/, "") : void 0;
|
|
2677
|
+
let result;
|
|
2678
|
+
if (extraction.kind === "inline") {
|
|
2679
|
+
result = buildCombinedRouteMapWithSearch(
|
|
2680
|
+
routerFilePath,
|
|
2681
|
+
void 0,
|
|
2682
|
+
void 0,
|
|
2683
|
+
void 0,
|
|
2684
|
+
extraction.block
|
|
2685
|
+
);
|
|
2686
|
+
} else {
|
|
2687
|
+
const imported = resolveImportedVariable(routerSource, extraction.name);
|
|
2688
|
+
if (imported) {
|
|
2689
|
+
const targetFile = resolveImportPath(imported.specifier, routerFilePath);
|
|
2690
|
+
if (!targetFile) {
|
|
2691
|
+
return { routes: {}, searchSchemas: {} };
|
|
2692
|
+
}
|
|
2693
|
+
result = buildCombinedRouteMapWithSearch(
|
|
2694
|
+
targetFile,
|
|
2695
|
+
imported.exportedName
|
|
2696
|
+
);
|
|
2697
|
+
} else {
|
|
2698
|
+
result = buildCombinedRouteMapWithSearch(routerFilePath, extraction.name);
|
|
2515
2699
|
}
|
|
2516
|
-
return buildCombinedRouteMapWithSearch(targetFile, imported.exportedName);
|
|
2517
2700
|
}
|
|
2518
|
-
|
|
2701
|
+
if (basename3) {
|
|
2702
|
+
result = applyBasenameToRoutes(result, basename3);
|
|
2703
|
+
}
|
|
2704
|
+
return result;
|
|
2519
2705
|
}
|
|
2520
2706
|
function findRouterFiles(root, filter) {
|
|
2521
2707
|
const result = [];
|
|
@@ -2540,25 +2726,15 @@ function writeCombinedRouteTypes(root, knownRouterFiles, opts) {
|
|
|
2540
2726
|
throw new Error(formatNestedRouterConflictError(nestedRouterConflict));
|
|
2541
2727
|
}
|
|
2542
2728
|
for (const routerFilePath of routerFilePaths) {
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
routerSource
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
const imported = resolveImportedVariable(routerSource, urlsVarName);
|
|
2553
|
-
if (imported) {
|
|
2554
|
-
const targetFile = resolveImportPath(imported.specifier, routerFilePath);
|
|
2555
|
-
if (!targetFile) continue;
|
|
2556
|
-
result = buildCombinedRouteMapWithSearch(
|
|
2557
|
-
targetFile,
|
|
2558
|
-
imported.exportedName
|
|
2559
|
-
);
|
|
2560
|
-
} else {
|
|
2561
|
-
result = buildCombinedRouteMapWithSearch(routerFilePath, urlsVarName);
|
|
2729
|
+
const result = buildCombinedRouteMapForRouterFile(routerFilePath);
|
|
2730
|
+
if (Object.keys(result.routes).length === 0 && Object.keys(result.searchSchemas).length === 0) {
|
|
2731
|
+
let routerSource;
|
|
2732
|
+
try {
|
|
2733
|
+
routerSource = readFileSync2(routerFilePath, "utf-8");
|
|
2734
|
+
} catch {
|
|
2735
|
+
continue;
|
|
2736
|
+
}
|
|
2737
|
+
if (!extractUrlsFromRouter(routerSource)) continue;
|
|
2562
2738
|
}
|
|
2563
2739
|
const routerBasename = pathBasename(routerFilePath).replace(
|
|
2564
2740
|
/\.(tsx?|jsx?)$/,
|
|
@@ -2784,6 +2960,68 @@ function createVersionPlugin() {
|
|
|
2784
2960
|
|
|
2785
2961
|
// src/vite/utils/shared-utils.ts
|
|
2786
2962
|
import * as Vite from "vite";
|
|
2963
|
+
|
|
2964
|
+
// src/vite/plugins/performance-tracks.ts
|
|
2965
|
+
import { readFile } from "node:fs/promises";
|
|
2966
|
+
var RSDW_PATCH_RE = /((?:var|let|const)\s+\w+\s*=\s*root\._children\s*,\s*(\w+)\s*=\s*root\._debugInfo\s*[;,])/;
|
|
2967
|
+
function buildPatchReplacement(match, debugInfoVar) {
|
|
2968
|
+
return `${match}
|
|
2969
|
+
if (${debugInfoVar} && 0 === ${debugInfoVar}.length && "fulfilled" === root.status) {
|
|
2970
|
+
var _resolved = "function" === typeof resolveLazy ? resolveLazy(root.value) : root.value;
|
|
2971
|
+
if ("object" === typeof _resolved && null !== _resolved && isArrayImpl(_resolved._debugInfo)) {
|
|
2972
|
+
${debugInfoVar} = _resolved._debugInfo;
|
|
2973
|
+
}
|
|
2974
|
+
}`;
|
|
2975
|
+
}
|
|
2976
|
+
function patchRsdwClientDebugInfoRecovery(code) {
|
|
2977
|
+
const match = code.match(RSDW_PATCH_RE);
|
|
2978
|
+
if (!match) {
|
|
2979
|
+
return { code, debugInfoVar: null };
|
|
2980
|
+
}
|
|
2981
|
+
return {
|
|
2982
|
+
code: code.replace(match[1], buildPatchReplacement(match[1], match[2])),
|
|
2983
|
+
debugInfoVar: match[2]
|
|
2984
|
+
};
|
|
2985
|
+
}
|
|
2986
|
+
function performanceTracksOptimizeDepsPlugin() {
|
|
2987
|
+
return {
|
|
2988
|
+
name: "@rangojs/router:performance-tracks-optimize-deps",
|
|
2989
|
+
setup(build) {
|
|
2990
|
+
build.onLoad(
|
|
2991
|
+
{
|
|
2992
|
+
filter: /react-server-dom-webpack-client\.browser\.(development|production)\.js$/
|
|
2993
|
+
},
|
|
2994
|
+
async (args) => {
|
|
2995
|
+
const code = await readFile(args.path, "utf8");
|
|
2996
|
+
const patched = patchRsdwClientDebugInfoRecovery(code);
|
|
2997
|
+
return {
|
|
2998
|
+
contents: patched.code,
|
|
2999
|
+
loader: "js"
|
|
3000
|
+
};
|
|
3001
|
+
}
|
|
3002
|
+
);
|
|
3003
|
+
}
|
|
3004
|
+
};
|
|
3005
|
+
}
|
|
3006
|
+
function performanceTracksPlugin() {
|
|
3007
|
+
return {
|
|
3008
|
+
name: "@rangojs/router:performance-tracks",
|
|
3009
|
+
transform(code, id) {
|
|
3010
|
+
if (!id.includes("react-server-dom") || !id.includes("client")) return;
|
|
3011
|
+
const patched = patchRsdwClientDebugInfoRecovery(code);
|
|
3012
|
+
if (!patched.debugInfoVar) return;
|
|
3013
|
+
if (process.env.INTERNAL_RANGO_DEBUG)
|
|
3014
|
+
console.log(
|
|
3015
|
+
"[perf-tracks] patched RSDW client (var:",
|
|
3016
|
+
patched.debugInfoVar,
|
|
3017
|
+
")"
|
|
3018
|
+
);
|
|
3019
|
+
return patched.code;
|
|
3020
|
+
}
|
|
3021
|
+
};
|
|
3022
|
+
}
|
|
3023
|
+
|
|
3024
|
+
// src/vite/utils/shared-utils.ts
|
|
2787
3025
|
var versionEsbuildPlugin = {
|
|
2788
3026
|
name: "@rangojs/router-version",
|
|
2789
3027
|
setup(build) {
|
|
@@ -2801,7 +3039,7 @@ var versionEsbuildPlugin = {
|
|
|
2801
3039
|
}
|
|
2802
3040
|
};
|
|
2803
3041
|
var sharedEsbuildOptions = {
|
|
2804
|
-
plugins: [versionEsbuildPlugin]
|
|
3042
|
+
plugins: [versionEsbuildPlugin, performanceTracksOptimizeDepsPlugin()]
|
|
2805
3043
|
};
|
|
2806
3044
|
function createVirtualEntriesPlugin(entries, routerPathRef) {
|
|
2807
3045
|
const virtualModules = {};
|
|
@@ -3007,6 +3245,8 @@ function createCjsToEsmPlugin() {
|
|
|
3007
3245
|
import { createServer as createViteServer } from "vite";
|
|
3008
3246
|
import { resolve as resolve8 } from "node:path";
|
|
3009
3247
|
import { readFileSync as readFileSync6 } from "node:fs";
|
|
3248
|
+
import { createRequire } from "node:module";
|
|
3249
|
+
import { pathToFileURL } from "node:url";
|
|
3010
3250
|
|
|
3011
3251
|
// src/vite/plugins/virtual-stub-plugin.ts
|
|
3012
3252
|
function createVirtualStubPlugin() {
|
|
@@ -3190,8 +3430,8 @@ function createDiscoveryState(entryPath, opts) {
|
|
|
3190
3430
|
perRouterManifestDataMap: /* @__PURE__ */ new Map(),
|
|
3191
3431
|
prerenderManifestEntries: null,
|
|
3192
3432
|
staticManifestEntries: null,
|
|
3193
|
-
|
|
3194
|
-
|
|
3433
|
+
handlerChunkInfoMap: /* @__PURE__ */ new Map(),
|
|
3434
|
+
staticHandlerChunkInfoMap: /* @__PURE__ */ new Map(),
|
|
3195
3435
|
rscEntryFileName: null,
|
|
3196
3436
|
resolvedPrerenderModules: void 0,
|
|
3197
3437
|
resolvedStaticModules: void 0,
|
|
@@ -3274,8 +3514,17 @@ function jsonParseExpression(value) {
|
|
|
3274
3514
|
}
|
|
3275
3515
|
|
|
3276
3516
|
// src/context-var.ts
|
|
3517
|
+
var NON_CACHEABLE_KEYS = /* @__PURE__ */ Symbol.for(
|
|
3518
|
+
"rango:non-cacheable-keys"
|
|
3519
|
+
);
|
|
3520
|
+
function getNonCacheableKeys(variables) {
|
|
3521
|
+
if (!variables[NON_CACHEABLE_KEYS]) {
|
|
3522
|
+
variables[NON_CACHEABLE_KEYS] = /* @__PURE__ */ new Set();
|
|
3523
|
+
}
|
|
3524
|
+
return variables[NON_CACHEABLE_KEYS];
|
|
3525
|
+
}
|
|
3277
3526
|
var FORBIDDEN_KEYS = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]);
|
|
3278
|
-
function contextSet(variables, keyOrVar, value) {
|
|
3527
|
+
function contextSet(variables, keyOrVar, value, options) {
|
|
3279
3528
|
if (typeof keyOrVar === "string") {
|
|
3280
3529
|
if (FORBIDDEN_KEYS.has(keyOrVar)) {
|
|
3281
3530
|
throw new Error(
|
|
@@ -3283,8 +3532,14 @@ function contextSet(variables, keyOrVar, value) {
|
|
|
3283
3532
|
);
|
|
3284
3533
|
}
|
|
3285
3534
|
variables[keyOrVar] = value;
|
|
3535
|
+
if (options?.cache === false) {
|
|
3536
|
+
getNonCacheableKeys(variables).add(keyOrVar);
|
|
3537
|
+
}
|
|
3286
3538
|
} else {
|
|
3287
3539
|
variables[keyOrVar.key] = value;
|
|
3540
|
+
if (options?.cache === false) {
|
|
3541
|
+
getNonCacheableKeys(variables).add(keyOrVar.key);
|
|
3542
|
+
}
|
|
3288
3543
|
}
|
|
3289
3544
|
}
|
|
3290
3545
|
|
|
@@ -3307,6 +3562,7 @@ function encodePathParam(value) {
|
|
|
3307
3562
|
}
|
|
3308
3563
|
function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
|
|
3309
3564
|
let result = pattern;
|
|
3565
|
+
let hadOmittedOptional = false;
|
|
3310
3566
|
for (const [key, value] of Object.entries(params)) {
|
|
3311
3567
|
const escaped = escapeRegExp2(key);
|
|
3312
3568
|
result = result.replace(
|
|
@@ -3315,6 +3571,15 @@ function substituteRouteParams(pattern, params, encode = encodeURIComponent) {
|
|
|
3315
3571
|
);
|
|
3316
3572
|
result = result.replace(`*${key}`, encode(value));
|
|
3317
3573
|
}
|
|
3574
|
+
result = result.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)(\([^)]*\))?\?/g, () => {
|
|
3575
|
+
hadOmittedOptional = true;
|
|
3576
|
+
return "";
|
|
3577
|
+
});
|
|
3578
|
+
if (hadOmittedOptional) {
|
|
3579
|
+
const hadTrailingSlash = pattern.length > 1 && pattern.endsWith("/");
|
|
3580
|
+
result = result.replace(/\/\/+/g, "/").replace(/\/+$/, "") || "/";
|
|
3581
|
+
if (hadTrailingSlash && !result.endsWith("/")) result += "/";
|
|
3582
|
+
}
|
|
3318
3583
|
return result;
|
|
3319
3584
|
}
|
|
3320
3585
|
async function runWithConcurrency(items, concurrency, fn) {
|
|
@@ -3423,84 +3688,126 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3423
3688
|
if (!params) return pattern;
|
|
3424
3689
|
return substituteRouteParams(pattern, params);
|
|
3425
3690
|
};
|
|
3691
|
+
let resolvedRoutes = 0;
|
|
3692
|
+
let totalDynamic = 0;
|
|
3426
3693
|
for (const { manifest } of allManifests) {
|
|
3427
3694
|
if (!manifest.prerenderRoutes) continue;
|
|
3428
|
-
const defs = manifest._prerenderDefs || {};
|
|
3429
3695
|
for (const routeName of manifest.prerenderRoutes) {
|
|
3430
3696
|
const pattern = manifest.routeManifest[routeName];
|
|
3431
|
-
if (
|
|
3432
|
-
|
|
3433
|
-
|
|
3434
|
-
|
|
3435
|
-
|
|
3436
|
-
|
|
3437
|
-
|
|
3438
|
-
|
|
3439
|
-
|
|
3440
|
-
|
|
3441
|
-
|
|
3442
|
-
|
|
3443
|
-
|
|
3444
|
-
|
|
3445
|
-
|
|
3446
|
-
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
|
|
3450
|
-
|
|
3451
|
-
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3458
|
-
|
|
3459
|
-
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3697
|
+
if (pattern && (pattern.includes(":") || pattern.includes("*"))) {
|
|
3698
|
+
totalDynamic++;
|
|
3699
|
+
}
|
|
3700
|
+
}
|
|
3701
|
+
}
|
|
3702
|
+
const paramsStart = performance.now();
|
|
3703
|
+
const progressInterval = totalDynamic > 0 ? setInterval(() => {
|
|
3704
|
+
const elapsed = ((performance.now() - paramsStart) / 1e3).toFixed(1);
|
|
3705
|
+
console.log(
|
|
3706
|
+
`[rsc-router] Resolving prerender params... ${resolvedRoutes}/${totalDynamic} routes (${elapsed}s)`
|
|
3707
|
+
);
|
|
3708
|
+
}, 5e3) : void 0;
|
|
3709
|
+
try {
|
|
3710
|
+
for (const { manifest } of allManifests) {
|
|
3711
|
+
if (!manifest.prerenderRoutes) continue;
|
|
3712
|
+
const defs = manifest._prerenderDefs || {};
|
|
3713
|
+
const passthroughSet = new Set(manifest.passthroughRoutes || []);
|
|
3714
|
+
for (const routeName of manifest.prerenderRoutes) {
|
|
3715
|
+
const pattern = manifest.routeManifest[routeName];
|
|
3716
|
+
if (!pattern) continue;
|
|
3717
|
+
const def = defs[routeName];
|
|
3718
|
+
const isPassthroughRoute = passthroughSet.has(routeName);
|
|
3719
|
+
const hasDynamic = pattern.includes(":") || pattern.includes("*");
|
|
3720
|
+
if (!hasDynamic) {
|
|
3721
|
+
entries.push({
|
|
3722
|
+
urlPath: pattern.replace(/\/$/, "") || "/",
|
|
3723
|
+
routeName,
|
|
3724
|
+
concurrency: 1,
|
|
3725
|
+
isPassthroughRoute
|
|
3726
|
+
});
|
|
3727
|
+
} else {
|
|
3728
|
+
if (def?.getParams) {
|
|
3729
|
+
try {
|
|
3730
|
+
const buildVars = {};
|
|
3731
|
+
const buildEnv = state.resolvedBuildEnv;
|
|
3732
|
+
const getParamsCtx = {
|
|
3733
|
+
build: true,
|
|
3734
|
+
dev: !state.isBuildMode,
|
|
3735
|
+
set: ((keyOrVar, value) => {
|
|
3736
|
+
contextSet(buildVars, keyOrVar, value);
|
|
3737
|
+
}),
|
|
3738
|
+
reverse: getParamsReverse,
|
|
3739
|
+
get env() {
|
|
3740
|
+
if (buildEnv !== void 0) return buildEnv;
|
|
3741
|
+
throw new Error(
|
|
3742
|
+
"[rsc-router] ctx.env is not available during build-time getParams(). Configure buildEnv in your rango() plugin options to enable build-time env access."
|
|
3743
|
+
);
|
|
3744
|
+
}
|
|
3745
|
+
};
|
|
3746
|
+
const paramsList = await def.getParams(getParamsCtx);
|
|
3747
|
+
const concurrency = def.options?.concurrency ?? 1;
|
|
3748
|
+
const hasBuildVars = Object.keys(buildVars).length > 0 || Object.getOwnPropertySymbols(buildVars).length > 0;
|
|
3749
|
+
for (const params of paramsList) {
|
|
3750
|
+
let url = substituteRouteParams(
|
|
3751
|
+
pattern,
|
|
3752
|
+
params,
|
|
3753
|
+
encodePathParam
|
|
3754
|
+
);
|
|
3755
|
+
if (url.includes("*")) {
|
|
3756
|
+
const wildcardValue = params["*"] ?? params.splat;
|
|
3757
|
+
if (wildcardValue !== void 0) {
|
|
3758
|
+
url = url.replace(
|
|
3759
|
+
/\*[^/]*$/,
|
|
3760
|
+
encodePathParam(wildcardValue)
|
|
3761
|
+
);
|
|
3762
|
+
}
|
|
3466
3763
|
}
|
|
3764
|
+
entries.push({
|
|
3765
|
+
urlPath: url.replace(/\/$/, "") || "/",
|
|
3766
|
+
routeName,
|
|
3767
|
+
concurrency,
|
|
3768
|
+
...hasBuildVars ? { buildVars } : {},
|
|
3769
|
+
isPassthroughRoute
|
|
3770
|
+
});
|
|
3467
3771
|
}
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
|
|
3477
|
-
|
|
3478
|
-
|
|
3479
|
-
|
|
3480
|
-
|
|
3481
|
-
|
|
3482
|
-
|
|
3483
|
-
|
|
3484
|
-
|
|
3485
|
-
|
|
3486
|
-
|
|
3487
|
-
true
|
|
3772
|
+
resolvedRoutes++;
|
|
3773
|
+
} catch (err) {
|
|
3774
|
+
resolvedRoutes++;
|
|
3775
|
+
if (err.name === "Skip") {
|
|
3776
|
+
console.log(
|
|
3777
|
+
`[rsc-router] SKIP route "${routeName}" - ${err.message}`
|
|
3778
|
+
);
|
|
3779
|
+
notifyOnError(
|
|
3780
|
+
registry,
|
|
3781
|
+
err,
|
|
3782
|
+
"prerender",
|
|
3783
|
+
routeName,
|
|
3784
|
+
void 0,
|
|
3785
|
+
true
|
|
3786
|
+
);
|
|
3787
|
+
continue;
|
|
3788
|
+
}
|
|
3789
|
+
console.error(
|
|
3790
|
+
`[rsc-router] Failed to get params for prerender route "${routeName}": ${err.message}`
|
|
3488
3791
|
);
|
|
3489
|
-
|
|
3792
|
+
notifyOnError(registry, err, "prerender", routeName);
|
|
3793
|
+
throw err;
|
|
3490
3794
|
}
|
|
3491
|
-
|
|
3492
|
-
|
|
3795
|
+
} else {
|
|
3796
|
+
console.warn(
|
|
3797
|
+
`[rsc-router] Dynamic prerender route "${routeName}" has no getParams(), skipping`
|
|
3493
3798
|
);
|
|
3494
|
-
notifyOnError(registry, err, "prerender", routeName);
|
|
3495
|
-
throw err;
|
|
3496
3799
|
}
|
|
3497
|
-
} else {
|
|
3498
|
-
console.warn(
|
|
3499
|
-
`[rsc-router] Dynamic prerender route "${routeName}" has no getParams(), skipping`
|
|
3500
|
-
);
|
|
3501
3800
|
}
|
|
3502
3801
|
}
|
|
3503
3802
|
}
|
|
3803
|
+
} finally {
|
|
3804
|
+
if (progressInterval) {
|
|
3805
|
+
clearInterval(progressInterval);
|
|
3806
|
+
const elapsed = ((performance.now() - paramsStart) / 1e3).toFixed(1);
|
|
3807
|
+
console.log(
|
|
3808
|
+
`[rsc-router] Resolved prerender params: ${resolvedRoutes}/${totalDynamic} routes (${elapsed}s)`
|
|
3809
|
+
);
|
|
3810
|
+
}
|
|
3504
3811
|
}
|
|
3505
3812
|
if (entries.length === 0) return;
|
|
3506
3813
|
const maxConcurrency = Math.max(...entries.map((e) => e.concurrency));
|
|
@@ -3527,7 +3834,8 @@ async function expandPrerenderRoutes(state, rscEnv, registry, allManifests) {
|
|
|
3527
3834
|
entry.urlPath,
|
|
3528
3835
|
{},
|
|
3529
3836
|
entry.buildVars,
|
|
3530
|
-
entry.isPassthroughRoute
|
|
3837
|
+
entry.isPassthroughRoute,
|
|
3838
|
+
state.resolvedBuildEnv
|
|
3531
3839
|
);
|
|
3532
3840
|
if (!result) continue;
|
|
3533
3841
|
if (result.passthrough) {
|
|
@@ -3651,7 +3959,9 @@ async function renderStaticHandlers(state, rscEnv, registry) {
|
|
|
3651
3959
|
const result = await routerInstance.renderStaticSegment(
|
|
3652
3960
|
def.handler,
|
|
3653
3961
|
def.$$id,
|
|
3654
|
-
def.$$routePrefix
|
|
3962
|
+
def.$$routePrefix,
|
|
3963
|
+
state.resolvedBuildEnv,
|
|
3964
|
+
!state.isBuildMode
|
|
3655
3965
|
);
|
|
3656
3966
|
if (result) {
|
|
3657
3967
|
const hasHandles = Object.keys(result.handles).length > 0;
|
|
@@ -3776,7 +4086,11 @@ async function discoverRouters(state, rscEnv) {
|
|
|
3776
4086
|
if (!router.urlpatterns || !generateManifestFull) {
|
|
3777
4087
|
continue;
|
|
3778
4088
|
}
|
|
3779
|
-
const manifest = generateManifestFull(
|
|
4089
|
+
const manifest = generateManifestFull(
|
|
4090
|
+
router.urlpatterns,
|
|
4091
|
+
routerMountIndex,
|
|
4092
|
+
router.__basename ? { urlPrefix: router.__basename } : void 0
|
|
4093
|
+
);
|
|
3780
4094
|
routerMountIndex++;
|
|
3781
4095
|
allManifests.push({ id, manifest });
|
|
3782
4096
|
const routeCount = Object.keys(manifest.routeManifest).length;
|
|
@@ -4225,48 +4539,45 @@ function postprocessBundle(state) {
|
|
|
4225
4539
|
);
|
|
4226
4540
|
const evictionTargets = [
|
|
4227
4541
|
{
|
|
4228
|
-
|
|
4542
|
+
infos: state.handlerChunkInfoMap.values(),
|
|
4229
4543
|
fnName: "Prerender",
|
|
4230
4544
|
brand: "prerenderHandler",
|
|
4231
4545
|
label: "handler code from RSC bundle"
|
|
4232
4546
|
},
|
|
4233
4547
|
{
|
|
4234
|
-
|
|
4548
|
+
infos: state.staticHandlerChunkInfoMap.values(),
|
|
4235
4549
|
fnName: "Static",
|
|
4236
4550
|
brand: "staticHandler",
|
|
4237
4551
|
label: "static handler code"
|
|
4238
4552
|
}
|
|
4239
4553
|
];
|
|
4240
4554
|
for (const target of evictionTargets) {
|
|
4241
|
-
|
|
4242
|
-
|
|
4243
|
-
|
|
4244
|
-
|
|
4245
|
-
|
|
4246
|
-
|
|
4247
|
-
|
|
4248
|
-
|
|
4249
|
-
|
|
4250
|
-
|
|
4251
|
-
|
|
4252
|
-
|
|
4253
|
-
|
|
4254
|
-
|
|
4255
|
-
|
|
4256
|
-
|
|
4257
|
-
|
|
4258
|
-
|
|
4259
|
-
|
|
4555
|
+
for (const info of target.infos) {
|
|
4556
|
+
const chunkPath = resolve7(state.projectRoot, "dist/rsc", info.fileName);
|
|
4557
|
+
try {
|
|
4558
|
+
const code = readFileSync5(chunkPath, "utf-8");
|
|
4559
|
+
const result = evictHandlerCode(
|
|
4560
|
+
code,
|
|
4561
|
+
info.exports,
|
|
4562
|
+
target.fnName,
|
|
4563
|
+
target.brand
|
|
4564
|
+
);
|
|
4565
|
+
if (result) {
|
|
4566
|
+
writeFileSync4(chunkPath, result.code);
|
|
4567
|
+
const savedKB = (result.savedBytes / 1024).toFixed(1);
|
|
4568
|
+
console.log(
|
|
4569
|
+
`[rsc-router] Evicted ${target.label} (${savedKB} KB saved): ${info.fileName}`
|
|
4570
|
+
);
|
|
4571
|
+
}
|
|
4572
|
+
} catch (replaceErr) {
|
|
4573
|
+
console.warn(
|
|
4574
|
+
`[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
|
|
4260
4575
|
);
|
|
4261
4576
|
}
|
|
4262
|
-
} catch (replaceErr) {
|
|
4263
|
-
console.warn(
|
|
4264
|
-
`[rsc-router] Failed to evict ${target.label}: ${replaceErr.message}`
|
|
4265
|
-
);
|
|
4266
4577
|
}
|
|
4267
4578
|
}
|
|
4268
|
-
state.
|
|
4269
|
-
state.
|
|
4579
|
+
state.handlerChunkInfoMap.clear();
|
|
4580
|
+
state.staticHandlerChunkInfoMap.clear();
|
|
4270
4581
|
if (hasPrerenderData && existsSync6(rscEntryPath)) {
|
|
4271
4582
|
const rscCode = readFileSync5(rscEntryPath, "utf-8");
|
|
4272
4583
|
if (!rscCode.includes("__prerender-manifest.js")) {
|
|
@@ -4309,7 +4620,7 @@ function postprocessBundle(state) {
|
|
|
4309
4620
|
}
|
|
4310
4621
|
if (hasStaticData && existsSync6(rscEntryPath)) {
|
|
4311
4622
|
const rscCode = readFileSync5(rscEntryPath, "utf-8");
|
|
4312
|
-
if (!rscCode.includes("
|
|
4623
|
+
if (!rscCode.includes("__static-manifest.js")) {
|
|
4313
4624
|
try {
|
|
4314
4625
|
const manifestEntries = [];
|
|
4315
4626
|
let totalBytes = copyStagedBuildAssets(
|
|
@@ -4378,8 +4689,67 @@ async function createTempRscServer(state, options = {}) {
|
|
|
4378
4689
|
]
|
|
4379
4690
|
});
|
|
4380
4691
|
}
|
|
4692
|
+
async function resolveBuildEnv(option, factoryCtx) {
|
|
4693
|
+
if (!option) return null;
|
|
4694
|
+
if (option === "auto") {
|
|
4695
|
+
if (factoryCtx.preset !== "cloudflare") {
|
|
4696
|
+
throw new Error(
|
|
4697
|
+
'[rsc-router] buildEnv: "auto" is only supported with preset: "cloudflare". Use a factory function or plain object for other presets.'
|
|
4698
|
+
);
|
|
4699
|
+
}
|
|
4700
|
+
try {
|
|
4701
|
+
const userRequire = createRequire(
|
|
4702
|
+
resolve8(factoryCtx.root, "package.json")
|
|
4703
|
+
);
|
|
4704
|
+
const wranglerPath = userRequire.resolve("wrangler");
|
|
4705
|
+
const { getPlatformProxy } = await import(pathToFileURL(wranglerPath).href);
|
|
4706
|
+
const proxy = await getPlatformProxy();
|
|
4707
|
+
return {
|
|
4708
|
+
env: proxy.env,
|
|
4709
|
+
dispose: proxy.dispose
|
|
4710
|
+
};
|
|
4711
|
+
} catch (err) {
|
|
4712
|
+
throw new Error(
|
|
4713
|
+
`[rsc-router] buildEnv: "auto" requires wrangler to be installed.
|
|
4714
|
+
Install it with: pnpm add -D wrangler
|
|
4715
|
+
${err.message}`
|
|
4716
|
+
);
|
|
4717
|
+
}
|
|
4718
|
+
}
|
|
4719
|
+
if (typeof option === "function") {
|
|
4720
|
+
return await option(factoryCtx);
|
|
4721
|
+
}
|
|
4722
|
+
return { env: option };
|
|
4723
|
+
}
|
|
4724
|
+
async function acquireBuildEnv(s, command, mode) {
|
|
4725
|
+
const option = s.opts?.buildEnv;
|
|
4726
|
+
if (!option) return false;
|
|
4727
|
+
const result = await resolveBuildEnv(option, {
|
|
4728
|
+
root: s.projectRoot,
|
|
4729
|
+
mode,
|
|
4730
|
+
command,
|
|
4731
|
+
preset: s.opts?.preset ?? "node"
|
|
4732
|
+
});
|
|
4733
|
+
if (!result) return false;
|
|
4734
|
+
s.resolvedBuildEnv = result.env;
|
|
4735
|
+
s.buildEnvDispose = result.dispose ?? null;
|
|
4736
|
+
return true;
|
|
4737
|
+
}
|
|
4738
|
+
async function releaseBuildEnv(s) {
|
|
4739
|
+
if (s.buildEnvDispose) {
|
|
4740
|
+
try {
|
|
4741
|
+
await s.buildEnvDispose();
|
|
4742
|
+
} catch (err) {
|
|
4743
|
+
console.warn(`[rsc-router] buildEnv dispose failed: ${err.message}`);
|
|
4744
|
+
}
|
|
4745
|
+
s.buildEnvDispose = null;
|
|
4746
|
+
}
|
|
4747
|
+
s.resolvedBuildEnv = void 0;
|
|
4748
|
+
}
|
|
4381
4749
|
function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
4382
4750
|
const s = createDiscoveryState(entryPath, opts);
|
|
4751
|
+
let viteCommand = "build";
|
|
4752
|
+
let viteMode = "production";
|
|
4383
4753
|
return {
|
|
4384
4754
|
name: "@rangojs/router:discovery",
|
|
4385
4755
|
config() {
|
|
@@ -4388,31 +4758,13 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4388
4758
|
__RANGO_DEBUG__: JSON.stringify(!!process.env.INTERNAL_RANGO_DEBUG)
|
|
4389
4759
|
}
|
|
4390
4760
|
};
|
|
4391
|
-
if (opts?.enableBuildPrerender) {
|
|
4392
|
-
config.environments = {
|
|
4393
|
-
rsc: {
|
|
4394
|
-
build: {
|
|
4395
|
-
rollupOptions: {
|
|
4396
|
-
output: {
|
|
4397
|
-
manualChunks(id) {
|
|
4398
|
-
if (s.resolvedPrerenderModules?.has(id)) {
|
|
4399
|
-
return "__prerender-handlers";
|
|
4400
|
-
}
|
|
4401
|
-
if (s.resolvedStaticModules?.has(id)) {
|
|
4402
|
-
return "__static-handlers";
|
|
4403
|
-
}
|
|
4404
|
-
}
|
|
4405
|
-
}
|
|
4406
|
-
}
|
|
4407
|
-
}
|
|
4408
|
-
}
|
|
4409
|
-
};
|
|
4410
|
-
}
|
|
4411
4761
|
return config;
|
|
4412
4762
|
},
|
|
4413
4763
|
configResolved(config) {
|
|
4414
4764
|
s.projectRoot = config.root;
|
|
4415
4765
|
s.isBuildMode = config.command === "build";
|
|
4766
|
+
viteCommand = config.command;
|
|
4767
|
+
viteMode = config.mode;
|
|
4416
4768
|
s.userResolveAlias = config.resolve.alias;
|
|
4417
4769
|
if (!s.resolvedEntryPath && opts?.routerPathRef?.path) {
|
|
4418
4770
|
s.resolvedEntryPath = opts.routerPathRef.path;
|
|
@@ -4457,6 +4809,8 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4457
4809
|
});
|
|
4458
4810
|
prerenderTempServer = null;
|
|
4459
4811
|
}
|
|
4812
|
+
releaseBuildEnv(s).catch(() => {
|
|
4813
|
+
});
|
|
4460
4814
|
});
|
|
4461
4815
|
async function getOrCreateTempServer() {
|
|
4462
4816
|
if (prerenderNodeRegistry) {
|
|
@@ -4487,6 +4841,7 @@ function createRouterDiscoveryPlugin(entryPath, opts) {
|
|
|
4487
4841
|
if (!rscEnv?.runner) {
|
|
4488
4842
|
s.devServerOrigin = getDevServerOrigin();
|
|
4489
4843
|
try {
|
|
4844
|
+
await acquireBuildEnv(s, viteCommand, viteMode);
|
|
4490
4845
|
const tempRscEnv = await getOrCreateTempServer();
|
|
4491
4846
|
if (tempRscEnv) {
|
|
4492
4847
|
await discoverRouters(s, tempRscEnv);
|
|
@@ -4502,6 +4857,7 @@ ${err.stack}`
|
|
|
4502
4857
|
return;
|
|
4503
4858
|
}
|
|
4504
4859
|
try {
|
|
4860
|
+
await acquireBuildEnv(s, viteCommand, viteMode);
|
|
4505
4861
|
const serverMod = await rscEnv.runner.import(
|
|
4506
4862
|
"@rangojs/router/server"
|
|
4507
4863
|
);
|
|
@@ -4566,7 +4922,26 @@ ${err.stack}`
|
|
|
4566
4922
|
res.end("Missing pathname");
|
|
4567
4923
|
return;
|
|
4568
4924
|
}
|
|
4569
|
-
|
|
4925
|
+
const rscEnv = server.environments?.rsc;
|
|
4926
|
+
let registry = null;
|
|
4927
|
+
if (rscEnv?.runner && s.resolvedEntryPath) {
|
|
4928
|
+
try {
|
|
4929
|
+
await rscEnv.runner.import(s.resolvedEntryPath);
|
|
4930
|
+
const serverMod = await rscEnv.runner.import(
|
|
4931
|
+
"@rangojs/router/server"
|
|
4932
|
+
);
|
|
4933
|
+
registry = serverMod.RouterRegistry ?? null;
|
|
4934
|
+
} catch (err) {
|
|
4935
|
+
console.warn(
|
|
4936
|
+
`[rsc-router] Dev prerender module refresh failed: ${err.message}`
|
|
4937
|
+
);
|
|
4938
|
+
res.statusCode = 500;
|
|
4939
|
+
res.end(`Prerender handler error: ${err.message}`);
|
|
4940
|
+
return;
|
|
4941
|
+
}
|
|
4942
|
+
} else {
|
|
4943
|
+
registry = mainRegistry;
|
|
4944
|
+
}
|
|
4570
4945
|
if (!registry) {
|
|
4571
4946
|
if (!prerenderNodeRegistry) {
|
|
4572
4947
|
await getOrCreateTempServer();
|
|
@@ -4588,7 +4963,10 @@ ${err.stack}`
|
|
|
4588
4963
|
pathname,
|
|
4589
4964
|
{},
|
|
4590
4965
|
void 0,
|
|
4591
|
-
wantPassthrough
|
|
4966
|
+
wantPassthrough,
|
|
4967
|
+
s.resolvedBuildEnv,
|
|
4968
|
+
true
|
|
4969
|
+
// devMode: check getParams for passthrough routes
|
|
4592
4970
|
);
|
|
4593
4971
|
if (!result) continue;
|
|
4594
4972
|
if (result.passthrough) continue;
|
|
@@ -4724,6 +5102,7 @@ ${err.stack}`
|
|
|
4724
5102
|
resetStagedBuildAssets(s.projectRoot);
|
|
4725
5103
|
s.prerenderManifestEntries = null;
|
|
4726
5104
|
s.staticManifestEntries = null;
|
|
5105
|
+
await acquireBuildEnv(s, viteCommand, viteMode);
|
|
4727
5106
|
let tempServer = null;
|
|
4728
5107
|
globalThis.__rscRouterDiscoveryActive = true;
|
|
4729
5108
|
try {
|
|
@@ -4763,6 +5142,7 @@ ${details}`
|
|
|
4763
5142
|
if (tempServer) {
|
|
4764
5143
|
await tempServer.close();
|
|
4765
5144
|
}
|
|
5145
|
+
await releaseBuildEnv(s);
|
|
4766
5146
|
}
|
|
4767
5147
|
},
|
|
4768
5148
|
// Virtual module: provides the pre-generated route manifest as a JS module
|
|
@@ -4805,20 +5185,30 @@ ${details}`
|
|
|
4805
5185
|
}
|
|
4806
5186
|
if (!s.resolvedPrerenderModules?.size && !s.resolvedStaticModules?.size)
|
|
4807
5187
|
return;
|
|
5188
|
+
s.handlerChunkInfoMap.clear();
|
|
5189
|
+
s.staticHandlerChunkInfoMap.clear();
|
|
4808
5190
|
for (const [fileName, chunk] of Object.entries(bundle)) {
|
|
4809
5191
|
if (chunk.type !== "chunk") continue;
|
|
4810
|
-
if (
|
|
5192
|
+
if (s.resolvedPrerenderModules?.size) {
|
|
4811
5193
|
const handlers = extractHandlerExportsFromChunk(
|
|
4812
5194
|
chunk.code,
|
|
4813
5195
|
s.resolvedPrerenderModules,
|
|
4814
5196
|
"Prerender",
|
|
4815
|
-
|
|
5197
|
+
false
|
|
4816
5198
|
);
|
|
4817
5199
|
if (handlers.length > 0) {
|
|
4818
|
-
|
|
5200
|
+
const existing = s.handlerChunkInfoMap.get(fileName);
|
|
5201
|
+
if (existing) {
|
|
5202
|
+
existing.exports.push(...handlers);
|
|
5203
|
+
} else {
|
|
5204
|
+
s.handlerChunkInfoMap.set(fileName, {
|
|
5205
|
+
fileName,
|
|
5206
|
+
exports: handlers
|
|
5207
|
+
});
|
|
5208
|
+
}
|
|
4819
5209
|
}
|
|
4820
5210
|
}
|
|
4821
|
-
if (
|
|
5211
|
+
if (s.resolvedStaticModules?.size) {
|
|
4822
5212
|
const handlers = extractHandlerExportsFromChunk(
|
|
4823
5213
|
chunk.code,
|
|
4824
5214
|
s.resolvedStaticModules,
|
|
@@ -4826,7 +5216,15 @@ ${details}`
|
|
|
4826
5216
|
false
|
|
4827
5217
|
);
|
|
4828
5218
|
if (handlers.length > 0) {
|
|
4829
|
-
|
|
5219
|
+
const existing = s.staticHandlerChunkInfoMap.get(fileName);
|
|
5220
|
+
if (existing) {
|
|
5221
|
+
existing.exports.push(...handlers);
|
|
5222
|
+
} else {
|
|
5223
|
+
s.staticHandlerChunkInfoMap.set(fileName, {
|
|
5224
|
+
fileName,
|
|
5225
|
+
exports: handlers
|
|
5226
|
+
});
|
|
5227
|
+
}
|
|
4830
5228
|
}
|
|
4831
5229
|
}
|
|
4832
5230
|
}
|
|
@@ -4853,7 +5251,16 @@ async function rango(options) {
|
|
|
4853
5251
|
const showBanner = resolvedOptions.banner ?? true;
|
|
4854
5252
|
const plugins = [];
|
|
4855
5253
|
const rangoAliases = getPackageAliases();
|
|
4856
|
-
const excludeDeps =
|
|
5254
|
+
const excludeDeps = [
|
|
5255
|
+
...getExcludeDeps(),
|
|
5256
|
+
// The public browser entry re-exports the RSDW browser client.
|
|
5257
|
+
// Excluding both keeps Vite from freezing the unpatched bundle into
|
|
5258
|
+
// .vite/deps before our source transforms run.
|
|
5259
|
+
"@vitejs/plugin-rsc/browser",
|
|
5260
|
+
// Keep the browser RSDW client out of Vite's dep optimizer so our
|
|
5261
|
+
// cjs-to-esm transform can patch the real file.
|
|
5262
|
+
"@vitejs/plugin-rsc/vendor/react-server-dom/client.browser"
|
|
5263
|
+
];
|
|
4857
5264
|
const routerRef = { path: void 0 };
|
|
4858
5265
|
const prerenderEnabled = true;
|
|
4859
5266
|
if (preset === "cloudflare") {
|
|
@@ -4949,6 +5356,7 @@ async function rango(options) {
|
|
|
4949
5356
|
}
|
|
4950
5357
|
});
|
|
4951
5358
|
plugins.push(createVirtualEntriesPlugin(finalEntries));
|
|
5359
|
+
plugins.push(performanceTracksPlugin());
|
|
4952
5360
|
plugins.push(
|
|
4953
5361
|
rsc({
|
|
4954
5362
|
entries: finalEntries,
|
|
@@ -5067,6 +5475,7 @@ ${list}`);
|
|
|
5067
5475
|
}
|
|
5068
5476
|
});
|
|
5069
5477
|
plugins.push(createVirtualEntriesPlugin(finalEntries, routerRef));
|
|
5478
|
+
plugins.push(performanceTracksPlugin());
|
|
5070
5479
|
plugins.push(
|
|
5071
5480
|
rsc({
|
|
5072
5481
|
entries: finalEntries
|
|
@@ -5107,7 +5516,8 @@ ${list}`);
|
|
|
5107
5516
|
createRouterDiscoveryPlugin(discoveryEntryPath, {
|
|
5108
5517
|
routerPathRef: discoveryRouterRef,
|
|
5109
5518
|
enableBuildPrerender: prerenderEnabled,
|
|
5110
|
-
|
|
5519
|
+
buildEnv: options?.buildEnv,
|
|
5520
|
+
preset
|
|
5111
5521
|
})
|
|
5112
5522
|
);
|
|
5113
5523
|
return plugins;
|
|
@@ -5120,29 +5530,75 @@ function poke() {
|
|
|
5120
5530
|
apply: "serve",
|
|
5121
5531
|
configureServer(server) {
|
|
5122
5532
|
const stdin = process.stdin;
|
|
5123
|
-
const
|
|
5533
|
+
const debug = process.env.RANGO_POKE_DEBUG === "1";
|
|
5534
|
+
const triggerReload = (source) => {
|
|
5535
|
+
server.hot.send({ type: "full-reload", path: "*" });
|
|
5536
|
+
server.config.logger.info(` browser reload (${source})`, {
|
|
5537
|
+
timestamp: true
|
|
5538
|
+
});
|
|
5539
|
+
};
|
|
5540
|
+
const toBuffer = (chunk) => {
|
|
5541
|
+
return typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
|
|
5542
|
+
};
|
|
5543
|
+
const formatChunk = (chunk) => {
|
|
5544
|
+
const data = toBuffer(chunk);
|
|
5545
|
+
const hex = Array.from(data).map((byte) => `0x${byte.toString(16).padStart(2, "0")}`).join(" ");
|
|
5546
|
+
const ascii = Array.from(data).map((byte) => {
|
|
5547
|
+
if (byte >= 32 && byte <= 126) return String.fromCharCode(byte);
|
|
5548
|
+
if (byte === 10) return "\\n";
|
|
5549
|
+
if (byte === 13) return "\\r";
|
|
5550
|
+
if (byte === 9) return "\\t";
|
|
5551
|
+
return ".";
|
|
5552
|
+
}).join("");
|
|
5553
|
+
return `len=${data.length} hex=[${hex}] ascii="${ascii}"`;
|
|
5554
|
+
};
|
|
5555
|
+
const readCtrlR = (chunk) => {
|
|
5556
|
+
const data = typeof chunk === "string" ? Buffer.from(chunk, "utf8") : chunk;
|
|
5557
|
+
return data.length === 1 && data[0] === 18;
|
|
5558
|
+
};
|
|
5559
|
+
const readSubmittedCommands = (chunk) => {
|
|
5560
|
+
const text = toBuffer(chunk).toString("utf8").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
5561
|
+
if (!text.includes("\n")) return [];
|
|
5562
|
+
const lines = text.split("\n");
|
|
5563
|
+
lines.pop();
|
|
5564
|
+
return lines;
|
|
5565
|
+
};
|
|
5566
|
+
if (debug) {
|
|
5567
|
+
server.config.logger.info(
|
|
5568
|
+
` poke debug enabled (isTTY=${stdin.isTTY ? "yes" : "no"}, isRaw=${stdin.isTTY ? stdin.isRaw ? "yes" : "no" : "n/a"})`,
|
|
5569
|
+
{ timestamp: true }
|
|
5570
|
+
);
|
|
5571
|
+
}
|
|
5124
5572
|
if (stdin.isTTY) {
|
|
5125
|
-
|
|
5573
|
+
server.config.logger.info(
|
|
5574
|
+
" poke ready: press e + enter to reload browser (ctrl+r also works when available)",
|
|
5575
|
+
{ timestamp: true }
|
|
5576
|
+
);
|
|
5126
5577
|
}
|
|
5127
5578
|
const onData = (data) => {
|
|
5128
|
-
if (
|
|
5129
|
-
|
|
5130
|
-
process.emit("SIGINT", "SIGINT");
|
|
5131
|
-
return;
|
|
5132
|
-
}
|
|
5133
|
-
if (data[0] === 18) {
|
|
5134
|
-
server.hot.send({ type: "full-reload", path: "*" });
|
|
5135
|
-
server.config.logger.info(" browser reload (ctrl+r)", {
|
|
5579
|
+
if (debug) {
|
|
5580
|
+
server.config.logger.info(` poke stdin ${formatChunk(data)}`, {
|
|
5136
5581
|
timestamp: true
|
|
5137
5582
|
});
|
|
5138
5583
|
}
|
|
5584
|
+
if (readCtrlR(data)) {
|
|
5585
|
+
triggerReload("ctrl+r");
|
|
5586
|
+
return;
|
|
5587
|
+
}
|
|
5588
|
+
for (const command of readSubmittedCommands(data)) {
|
|
5589
|
+
if (command === "e") {
|
|
5590
|
+
triggerReload("e+enter");
|
|
5591
|
+
return;
|
|
5592
|
+
}
|
|
5593
|
+
if (command === "\x1Br") {
|
|
5594
|
+
triggerReload("option+r+enter");
|
|
5595
|
+
return;
|
|
5596
|
+
}
|
|
5597
|
+
}
|
|
5139
5598
|
};
|
|
5140
5599
|
stdin.on("data", onData);
|
|
5141
5600
|
server.httpServer?.on("close", () => {
|
|
5142
5601
|
stdin.off("data", onData);
|
|
5143
|
-
if (stdin.isTTY && previousRawMode !== null) {
|
|
5144
|
-
stdin.setRawMode(previousRawMode);
|
|
5145
|
-
}
|
|
5146
5602
|
});
|
|
5147
5603
|
}
|
|
5148
5604
|
};
|