chore(cli)!: replace node-fetch with undici#306
Conversation
so0k
left a comment
There was a problem hiding this comment.
LGTM, noticed this is flagged as breaking change (due to Node version bump?)
|
Shouldn't be a breaking change. The |
I had marked as a breaking change due to the part in the PR description: I don't really see that as a problem as I expect the next release to come with a major version bump regardless. |
|
OK Jon, I've restored the breaking change marker in the PR title. |
|
LGTM, added docs PR - see preview environment - merging now Docs: open-constructs/cdk-terrain-docs#28 — bumps the Node.js prerequisite to 22.19+ in the install and deploy-applications tutorials. |
1ae4192 to
a4b3db7
Compare
|
Non-blocking follow-up: undici v8.7.0 is now available and retains the same Node.js >=22.19.0 requirement as the v8.6.0 version introduced here. After this transport migration merges, a small dependency-only update to v8.7.0 would be straightforward. |
Description
@cdktn/cli-coredepended on the legacynode-fetchpackage and its proxy helperhttps-proxy-agent. This PR replaces that with theundicipackage — a modern, actively maintainedfetchimplementation with first-class proxy and mocking support — and removesnode-fetch,@types/node-fetch, andhttps-proxy-agent.Changes
Fetch →
undici. All three files nowimport { fetch } from "undici"instead ofnode-fetch. We use undici's exportedfetchrather than the globalfetchdeliberately: it keeps the whole HTTP stack — code and test mocks — on a single undici instance.globalThis.fetchuses Node's internal undici, which is a different instance from theundicinpm package, so mocking has to target the same one the code uses.Proxy → undici
ProxyAgentvia thedispatcheroption.node-fetch'sagentoption (a Nodehttp.Agentfromhttps-proxy-agent) is replaced by an undiciProxyAgentbuilt from the samehttp_proxy/HTTP_PROXYenv vars and passed as the requestdispatcher.Proxy support extended to
package-manager.ts. Previously onlyregistry-api.tsandprebuilt-providers.tshonoured a proxy;package-manager.ts(the PyPI / NuGet / Maven Central / GitHub / npm availability probes) never did. It now uses the samedispatcher, so all registry traffic respects a corporate proxy consistently.undici@8.6.0dependency + Node floor.undiciis added to@cdktn/cli-core. undici 8 requires Node ≥ 22.19.0, so both published packages (@cdktn/cli-coreandcdktn-cli) declare"engines": { "node": ">=22.19.0" }— surfacing a clear install-time warning on older Node instead of an opaque runtime failure.Tests → undici
MockAgent.prebuilt-providers.test.tsandpackage-manager.test.tsexercise undici'sfetch, so theirnockscopes are replaced with an undiciMockAgentwired viasetGlobalDispatcher.Checklist