Releases: sindresorhus/got
v12.2.0
- Support
AbortController(#2020) 6a6d2a9 - Add
enableUnixSocketsoption (#2062) 461b3d4
v12.1.0
Improvements
- Add
response.ok(#2043) 22d58fb- This is only useful if you have
{throwHttpErrors: false}
- This is only useful if you have
Fixes
v11.8.5
- Backport security fix 861ccd9
v12.0.4
v12.0.3
v12.0.2
v12.0.1
v12.0.0
Introducing Got v12.0.0 🎉
Long time no see! The latest Got version (v11.8.2) was released just in February ❄️
We have been working hard on squashing bugs and improving overall experience.
If you find Got useful, you might want to sponsor the Got maintainers.
This package is now pure ESM
Please read this. Also see #1789.
- Please don't open issues about
[ERR_REQUIRE_ESM]andMust use import to load ES Moduleerrors. This is a problem with your setup, not Got. - Please don't open issues about using Got with Jest. Jest does not fully support ESM.
- Pretty much any problem with loading this package is a problem with your bundler, test framework, etc, not Got.
- If you use TypeScript, you will want to stay on Got v11 until TypeScript 4.6 is out. Why.
- If you use a bundler, make sure it supports ESM and that you have correctly configured it for ESM.
- The Got issue tracker is not a support channel for your favorite build/bundler tool.
Required Node.js >=14
While working with streams, we encountered more Node.js bugs that needed workarounds.
In order to keep our code clean, we had to drop Node.js v12 as the code would get more messy.
We strongly recommend that you update Node.js to v14 LTS.
HTTP/2 support
Every Node.js release, the native http2 module gets more stable.
Unfortunately there are still some issues on the Node.js side, so we decided to keep HTTP/2 disabled for now.
We may enable it by default in Got v13. It is still possible to turn it on via the http2 option.
To run HTTP/2 requests, it is required to use Node.js v15.10 or above.
Bug fixes
Woah, we possibly couldn't make a release if we didn't fix some bugs!
- Do not throw on custom stack traces (#1491) 49c16ee
- Remove automatic
content-lengthon ReadStream (#1510) 472b8ef - Fix promise shortcuts in case of error status code (#1543) ff918fb 1107cc6
- Invert the
methodRewritingoption 51d88a0 - Fix
urlnot being reused on retry in rare case (#1487) 462bc63 - Fix hanging promise on HTTP/2 timeout (#1492) a59fac4
- Prevent uncaught ParseErrors on initial successful response (#1527) 77df9c3
- Throw an error when retrying with consumed body (#1507) 62305d7
- Fix a Node.js 16 bug that hangs Got streams 06a2d3d
- Fix default pagination handling for empty Link header (#1768) 1e1e506
- Fix incorrect
response.completewhen using cache 9e15d88 - Fix
Cannot call enderror whenrequestreturns aWritable226cc39 - Fix Request options not being reused on retry 3c23eea
- Fix types being not compatible with CommonJS 3c23eea
- Fix
got.paginate does not call init hooks(#1574) 3c23eea - Generate a new object when passing options to the native
httpsmodule (#1567) 3c23eea - Remove stream reuse check (#1803) 9ecc5ee
- Fix merging
searchParams(#1814) 1018c20 732e9bd - Fix unhandled exception when lookup returns invalid IP early (#1737) 2453e5e
- Fix relative URLs when paginating 439fb82
- Require url to be an instance of URL when paginating (#1818) eda69ff
- Fix
usernameandpasswordencoding in URL (#1169 #1317) d65d0ca - Clone raw options 1c4cefc
- Fix invalid
afterResponsereturn check cbc8902 - Fix
https.alpnProtocolsnot having an effect e1099fb
Improvements
- Make the
contextoption mergeable (#1459) 2b8ed1f - Add generic argument to AfterResponseHook TypeScript type (#1589) 6fc04a9
- Add read timeout (#1518) e943672 (blocked by nodejs/node#35923)
- Improve the pagination API (#1644) 2675046
- Change the stackAllItems option to be false by default (#1645) 1120370
- Throw when afterResponse hook returns an invalid value 4f21eb3
- Add
retry.backoffLimitoption 41c4136 - Add
noiseretry option e830077 - Enable more HTTPS options 83575d5 fe723a0 (thanks @Giotino)
- Define
error.codef27e8d3 - Set
options.urleven if some options are invalid 8d6a680 - Improve memory usage when merging options 2db5ec5
- Support async generators as body 854430f 3df52f3
- Add missing
oncetypes for Stream API 3c23eea - New error type:
RetryErrorwhich always triggers a new retry when thrown 3c23eea error.optionsis now enumerable 3c23eeadefaults.handlersdon't need a default handler now 3c23eea- Add a parser for the
Linkheader 3c23eea - General code improvements a5dd9aa
Breaking changes
Improved option normalization
- Got exports an
Optionclass that is specifically designed to parse and validate Got options.
It is made of setters and getters that provide fast normalization and more consistent behavior.
When passing an option does not exist, Got will throw an error. In order to retrieve the options before the error, use error.options.
import got from 'got';
try {
await got('https://httpbin.org/anything', {
thisOptionDoesNotExist: true
});
} catch (error) {
console.error(error);
console.error(error.options.url.href);
// Unexpected option: thisOptionDoesNotExist
// https://httpbin.org/anything
}- The
inithook now accepts a second argument:self, which points to anOptionsinstance.
In order to define your own options, you have to move them to options.context in an init hook or store them in options.context directly.
- The
inithooks are ran only when passing an options object explicitly.
- await got('https://example.com'); // this will *not* trigger the init hooks
+ await got('https://example.com', {}); // this *will** trigger init hooksoptions.merge()replacedgot.mergeOptionsandRequest.normalizeArguments
- got.defaults.options = got.mergeOptions(got.defaults.options, {…});
+ got.defaults.options.merge(…);This fixes issues like #1450
- Legacy
Urlinstances are not supported anymore. You need to use WHATWG URL instead.
- await got(string, {port: 8443});
+ const url = new URL(string);
+ url.port = 8443;
+ await got(url);- No implicit timeout declaration.
- await got('https://example.com', {timeout: 5000})
+ await got('https://example.com', {timeout: {request: 5000})- No implicit retry declaration.
- await got('https://example.com', {retry: 5})
+ await got('https://example.com', {retry: {limit: 5})dnsLookupIpVersionis now a number (4 or 6) or undefined
- await got('https://example.com', {dnsLookupIpVersion: 'ipv4'})
+ await got('https://example.com', {dnsLookupIpVersion: 4})redirectUrlsandrequestUrlnow give URL instances
- request.requestUrl
+ request.requestUrl.origin
+ request.requestUrl.href
+ request.requestUrl.toString()- request.redirectUrls[0]
+ request.redirectUrls[0].origin
+ request.redirectUrls[0].href
+ request.redirectUrls[0].toString()- Renamed
request.abortedtorequest.isAborted
- request.aborted
+ request.isAbortedReason: consistency with options.isStream.
- Renamed the
lookupoption todnsLookup
- await got('https://example.com', {lookup: cacheable.lookup})
+ await got('https://example.com', {dnsLookup: cacheable.lookup})- The
beforeRetryhook now accepts only two arguments:errorandretryCount
await got('https://example.com', {
hooks: {
beforeRetry: [
- (options, error, retryCount) => {
- console.log(options, error, retryCount);
- }
+ (error, retryCount) => {
+ console.log(error.options, error, retryCount);
+ }
]
}
})The options argument has been removed, however it's still accessible via error.options. All modifications on error.options will be reflected in the next requests (no behavior change, same as with Got 11).
- The
beforeRedirecthook's first argument (options) is now a cloned instance of the Request options.
This was done to make retrieving the original options possible: `plainResponse.re...