This MR contains the following updates:
Package | Change | Age | Adoption | Passing | Confidence |
---|---|---|---|---|---|
got | ^11.8.1 -> ^12.0.0 |
Release Notes
sindresorhus/got
v12.6.0
v12.5.3
v12.5.2
v12.5.1
- Fix compatibility with TypeScript and ESM
3b3ea67
- Fix request body not being properly cached (#2150)
3e9d3af
v12.5.0
- Disable method rewriting on 307 and 308 status codes (#2145)
e049e94
- Upgrade dependencies
8630815
f0ac0b3
4c3762a
v12.4.1
Fixes
- Fix
options.context
being not extensibleb671480
- Don't emit
uploadProgress
after promise cancelation693de21
v12.4.0
Improvements
Fixes
v12.3.1
v12.3.0
v12.2.0
-
Support
AbortController
(#2020)6a6d2a9
- Add
enableUnixSockets
option (#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
v12.0.4
- Remove stream lock - unreliable since Node 17.3.0
bb8eca9
v12.0.3
v12.0.2
v12.0.1
- Fix
nock
compatibility (#1959)bf39d2c
- Fix missing export of
Request
TypeScript type (#1940)0f9f2b8
v12.0.0
🎉
Introducing Got v12.0.0 Long time no see! The latest Got version (v11.8.2) was released just in February
If you find Got useful, you might want to sponsor the Got maintainers.
This package is now pure ESM
Please read this. Also see https://github.com/sindresorhus/got/issues/1789.
-
Please don't open issues about
[ERR_REQUIRE_ESM]
andMust use import to load ES Module
errors. 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-length
on ReadStream (#1510)472b8ef
- Fix promise shortcuts in case of error status code (#1543)
ff918fb
1107cc6
- Invert the
methodRewriting
option51d88a0
- Fix
url
not 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.complete
when using cache9e15d88
- Fix
Cannot call end
error whenrequest
returns aWritable
226cc39
- 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
https
module (#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
username
andpassword
encoding in URL (#1169 #1317)d65d0ca
- Clone raw options
1c4cefc
- Fix invalid
afterResponse
return checkcbc8902
- Fix
https.alpnProtocols
not having an effecte1099fb
Improvements
- Make the
context
option mergeable (#1459)2b8ed1f
- Add generic argument to AfterResponseHook TypeScript type (#1589)
6fc04a9
- Add read timeout (#1518)
e943672
(blocked by https://github.com/nodejs/node/issues/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.backoffLimit
option41c4136
- Add
noise
retry optione830077
- Enable more HTTPS options
83575d5
fe723a0
(thanks @Giotino) - Define
error.code
f27e8d3
- Set
options.url
even if some options are invalid8d6a680
- Improve memory usage when merging options
2db5ec5
- Support async generators as body
854430f
3df52f3
- Add missing
once
types for Stream API3c23eea
- New error type:
RetryError
which always triggers a new retry when thrown3c23eea
-
error.options
is now enumerable3c23eea
-
defaults.handlers
don't need a default handler now3c23eea
- Add a parser for the
Link
header3c23eea
- General code improvements
a5dd9aa
Breaking changes
Improved option normalization
- Got exports an
Option
class 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
init
hook now accepts a second argument:self
, which points to anOptions
instance.
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
init
hooks 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 hooks
-
options.merge()
replacedgot.mergeOptions
andRequest.normalizeArguments
- got.defaults.options = got.mergeOptions(got.defaults.options, {…});
+ got.defaults.options.merge(…);
This fixes issues like #1450
- Legacy
Url
instances 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})
-
dnsLookupIpVersion
is now a number (4 or 6) or undefined
- await got('https://example.com', {dnsLookupIpVersion: 'ipv4'})
+ await got('https://example.com', {dnsLookupIpVersion: 4})
-
redirectUrls
andrequestUrl
now 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.aborted
torequest.isAborted
- request.aborted
+ request.isAborted
Reason: consistency with options.isStream
.
- Renamed the
lookup
option todnsLookup
- await got('https://example.com', {lookup: cacheable.lookup})
+ await got('https://example.com', {dnsLookup: cacheable.lookup})
- The
beforeRetry
hook now accepts only two arguments:error
andretryCount
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
beforeRedirect
hook's first argument (options) is now a cloned instance of the Request options.
This was done to make retrieving the original options possible: plainResponse.request.options
.
await got('http://szmarczak.com', {
hooks: {
beforeRedirect: [
(options, response) => {
- console.log(options === response.request.options); //=> true [invalid! our original options were overriden]
+ console.log(options === response.request.options); //=> false [we can access the original options now]
}
]
}
})
- The
redirect
event now takes two arguments in this order:updatedOptions
andplainResponse
.
- stream.on('redirect', (response, options) => …)
+ stream.on('redirect', (options, response) => …)
Reason: consistency with the beforeRedirect
hook.
- The
socketPath
option has been removed. Use theunix:
protocol instead.
- got('/containers/json', {socketPath: '/var/run/docker.sock'})
+ got('unix:/var/run/docker.sock:/containers/json')
+ got('http://unix:/var/run/docker.sock:/containers/json')
- The
retryWithMergedOptions
function in anafterResponse
hook no longer returns aPromise
.
It now throws RetryError
, so this should this should be the last function being executed.
This was done to allow beforeRetry
hooks getting called.
- You can no longer set
options.agent
tofalse
. To do so, you need to define all theoptions.agent
properties:http
,https
andhttp2
.
await got('https://example.com', {
- agent: false
+ agent: {
+ http: false,
+ https: false,
+ http2: false
+ }
})
- When passing a
url
option when paginating, it now needs to be an absolute URL - theprefixUrl
option is always reset from now on. The same when retrying in anafterResponse
hook.
- return {url: '/location'};
+ return {url: new URL('/location', response.request.options.url)};
There was confusion around the prefixUrl
option. It was counterintuitive if used with the Pagination API. For example, it worked fine if the server replied with a relative URL, but if it was an absolute URL then the prefixUrl
would end up duplicated. In order to fix this, Got now requires an absolute URL - no prefixUrl
will be applied.
-
got.extend(…)
will throw when passing some options that don't accept undefined - undefined no longer retains the old value, as setting undefined explicitly may reset the option
Documentation
We have redesigned the documentation so it's easier to navigate and find exactly what you are looking for. We hope you like it
v11.8.6
- Destroy request object after successful response
v11.8.5
- Backport security fix https://github.com/sindresorhus/got/commit/861ccd9ac2237df762a9e2beed7edd88c60782dc
v11.8.3
Configuration
-
If you want to rebase/retry this MR, check this box
This MR has been generated by Renovate Bot.