got 14.2.1 → 14.4.0

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.
@@ -3,7 +3,7 @@ import is from '@sindresorhus/is';
3
3
  import PCancelable from 'p-cancelable';
4
4
  import { HTTPError, RetryError, } from '../core/errors.js';
5
5
  import Request from '../core/index.js';
6
- import { parseBody, isResponseOk, ParseError } from '../core/response.js';
6
+ import { parseBody, isResponseOk, ParseError, } from '../core/response.js';
7
7
  import proxyEvents from '../core/utils/proxy-events.js';
8
8
  import { CancelError } from './types.js';
9
9
  const proxiedRequestEvents = [
@@ -130,12 +130,12 @@ export default function asPromise(firstRequest) {
130
130
  };
131
131
  makeRequest(0);
132
132
  });
133
- promise.on = (event, fn) => {
134
- emitter.on(event, fn);
133
+ promise.on = (event, function_) => {
134
+ emitter.on(event, function_);
135
135
  return promise;
136
136
  };
137
- promise.off = (event, fn) => {
138
- emitter.off(event, fn);
137
+ promise.off = (event, function_) => {
138
+ emitter.off(event, function_);
139
139
  return promise;
140
140
  };
141
141
  const shortcut = (responseType) => {
@@ -1,4 +1,4 @@
1
1
  import type { RetryFunction } from './options.js';
2
- type Returns<T extends (...args: any) => unknown, V> = (...args: Parameters<T>) => V;
2
+ type Returns<T extends (...arguments_: any) => unknown, V> = (...arguments_: Parameters<T>) => V;
3
3
  declare const calculateRetryDelay: Returns<RetryFunction, number>;
4
4
  export default calculateRetryDelay;
@@ -824,9 +824,7 @@ export default class Request extends Duplex {
824
824
  break;
825
825
  }
826
826
  }
827
- if (!request) {
828
- request = options.getRequestFunction();
829
- }
827
+ request ||= options.getRequestFunction();
830
828
  const url = options.url;
831
829
  this._requestOptions = options.createNativeRequestOptions();
832
830
  if (options.cache) {
@@ -836,11 +834,11 @@ export default class Request extends Duplex {
836
834
  this._prepareCache(options.cache);
837
835
  }
838
836
  // Cache support
839
- const fn = options.cache ? this._createCacheableRequest : request;
837
+ const function_ = options.cache ? this._createCacheableRequest : request;
840
838
  try {
841
839
  // We can't do `await fn(...)`,
842
840
  // because stream `error` event can be emitted before `Promise.resolve()`.
843
- let requestOrResponse = fn(url, this._requestOptions);
841
+ let requestOrResponse = function_(url, this._requestOptions);
844
842
  if (is.promise(requestOrResponse)) {
845
843
  requestOrResponse = await requestOrResponse;
846
844
  }
@@ -38,8 +38,8 @@ export type Agents = {
38
38
  };
39
39
  export type Headers = Record<string, string | string[] | undefined>;
40
40
  export type ToughCookieJar = {
41
- getCookieString: ((currentUrl: string, options: Record<string, unknown>, cb: (error: Error | null, cookies: string) => void) => void) & ((url: string, callback: (error: Error | null, cookieHeader: string) => void) => void);
42
- setCookie: ((cookieOrString: unknown, currentUrl: string, options: Record<string, unknown>, cb: (error: Error | null, cookie: unknown) => void) => void) & ((rawCookie: string, url: string, callback: (error: Error | null, result: unknown) => void) => void);
41
+ getCookieString: ((currentUrl: string, options: Record<string, unknown>, callback: (error: Error | null, cookies: string) => void) => void) & ((url: string, callback: (error: Error | null, cookieHeader: string) => void) => void);
42
+ setCookie: ((cookieOrString: unknown, currentUrl: string, options: Record<string, unknown>, callback: (error: Error | null, cookie: unknown) => void) => void) & ((rawCookie: string, url: string, callback: (error: Error | null, result: unknown) => void) => void);
43
43
  };
44
44
  export type PromiseCookieJar = {
45
45
  getCookieString: (url: string) => Promise<string>;
@@ -174,7 +174,7 @@ const defaultInternals = {
174
174
  shouldContinue: () => true,
175
175
  countLimit: Number.POSITIVE_INFINITY,
176
176
  backoff: 0,
177
- requestLimit: 10000,
177
+ requestLimit: 10_000,
178
178
  stackAllItems: false,
179
179
  },
180
180
  setHost: true,
@@ -1,8 +1,8 @@
1
1
  export default function proxyEvents(from, to, events) {
2
2
  const eventFunctions = {};
3
3
  for (const event of events) {
4
- const eventFunction = (...args) => {
5
- to.emit(event, ...args);
4
+ const eventFunction = (...arguments_) => {
5
+ to.emit(event, ...arguments_);
6
6
  };
7
7
  eventFunctions[event] = eventFunction;
8
8
  from.on(event, eventFunction);
@@ -2,9 +2,9 @@
2
2
  import type { EventEmitter } from 'node:events';
3
3
  type Origin = EventEmitter;
4
4
  type Event = string | symbol;
5
- type Fn = (...args: any[]) => void;
5
+ type AnyFunction = (...arguments_: any[]) => void;
6
6
  type Unhandler = {
7
- once: (origin: Origin, event: Event, fn: Fn) => void;
7
+ once: (origin: Origin, event: Event, function_: AnyFunction) => void;
8
8
  unhandleAll: () => void;
9
9
  };
10
10
  export default function unhandle(): Unhandler;
@@ -5,9 +5,9 @@
5
5
  export default function unhandle() {
6
6
  const handlers = [];
7
7
  return {
8
- once(origin, event, fn) {
9
- origin.once(event, fn);
10
- handlers.push({ origin, event, fn });
8
+ once(origin, event, function_) {
9
+ origin.once(event, function_);
10
+ handlers.push({ origin, event, fn: function_ });
11
11
  },
12
12
  unhandleAll() {
13
13
  for (const handler of handlers) {
@@ -38,9 +38,7 @@ const create = (defaults) => {
38
38
  if (normalized.isStream) {
39
39
  return request;
40
40
  }
41
- if (!promise) {
42
- promise = asPromise(request);
43
- }
41
+ promise ||= asPromise(request);
44
42
  return promise;
45
43
  };
46
44
  let iteration = 0;
@@ -48,9 +46,7 @@ const create = (defaults) => {
48
46
  const handler = defaults.handlers[iteration++] ?? lastHandler;
49
47
  const result = handler(newOptions, iterateHandlers);
50
48
  if (is.promise(result) && !request.options.isStream) {
51
- if (!promise) {
52
- promise = asPromise(request);
53
- }
49
+ promise ||= asPromise(request);
54
50
  if (result !== promise) {
55
51
  const descriptors = Object.getOwnPropertyDescriptors(promise);
56
52
  for (const key in descriptors) {
@@ -1,5 +1,6 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
2
  import type { Buffer } from 'node:buffer';
3
+ import type { Spread } from 'type-fest';
3
4
  import type { CancelableRequest } from './as-promise/types.js';
4
5
  import type { Response } from './core/response.js';
5
6
  import type Options from './core/options.js';
@@ -60,32 +61,10 @@ export type ExtendOptions = {
60
61
  */
61
62
  mutableDefaults?: boolean;
62
63
  } & OptionsInit;
63
- export type OptionsOfTextResponseBody = Merge<OptionsInit, {
64
- isStream?: false;
65
- resolveBodyOnly?: false;
66
- responseType?: 'text';
67
- }>;
68
- export type OptionsOfJSONResponseBody = Merge<OptionsInit, {
69
- isStream?: false;
70
- resolveBodyOnly?: false;
71
- responseType?: 'json';
72
- }>;
73
- export type OptionsOfBufferResponseBody = Merge<OptionsInit, {
74
- isStream?: false;
75
- resolveBodyOnly?: false;
76
- responseType: 'buffer';
77
- }>;
78
- export type OptionsOfUnknownResponseBody = Merge<OptionsInit, {
79
- isStream?: false;
80
- resolveBodyOnly?: false;
81
- }>;
82
64
  export type StrictOptions = Except<OptionsInit, 'isStream' | 'responseType' | 'resolveBodyOnly'>;
83
65
  export type StreamOptions = Merge<OptionsInit, {
84
66
  isStream?: true;
85
67
  }>;
86
- type ResponseBodyOnly = {
87
- resolveBodyOnly: true;
88
- };
89
68
  export type OptionsWithPagination<T = unknown, R = unknown> = Merge<OptionsInit, {
90
69
  pagination?: PaginationOptions<T, R>;
91
70
  }>;
@@ -145,21 +124,84 @@ export type GotPaginate = {
145
124
  */
146
125
  all: (<T, R = unknown>(url: string | URL, options?: OptionsWithPagination<T, R>) => Promise<T[]>) & (<T, R = unknown>(options?: OptionsWithPagination<T, R>) => Promise<T[]>);
147
126
  };
148
- export type GotRequestFunction = {
149
- (url: string | URL, options?: OptionsOfTextResponseBody): CancelableRequest<Response<string>>;
150
- <T>(url: string | URL, options?: OptionsOfJSONResponseBody): CancelableRequest<Response<T>>;
151
- (url: string | URL, options?: OptionsOfBufferResponseBody): CancelableRequest<Response<Buffer>>;
152
- (url: string | URL, options?: OptionsOfUnknownResponseBody): CancelableRequest<Response>;
153
- (options: OptionsOfTextResponseBody): CancelableRequest<Response<string>>;
154
- <T>(options: OptionsOfJSONResponseBody): CancelableRequest<Response<T>>;
155
- (options: OptionsOfBufferResponseBody): CancelableRequest<Response<Buffer>>;
156
- (options: OptionsOfUnknownResponseBody): CancelableRequest<Response>;
157
- (url: string | URL, options?: (Merge<OptionsOfTextResponseBody, ResponseBodyOnly>)): CancelableRequest<string>;
158
- <T>(url: string | URL, options?: (Merge<OptionsOfJSONResponseBody, ResponseBodyOnly>)): CancelableRequest<T>;
159
- (url: string | URL, options?: (Merge<OptionsOfBufferResponseBody, ResponseBodyOnly>)): CancelableRequest<Buffer>;
160
- (options: (Merge<OptionsOfTextResponseBody, ResponseBodyOnly>)): CancelableRequest<string>;
161
- <T>(options: (Merge<OptionsOfJSONResponseBody, ResponseBodyOnly>)): CancelableRequest<T>;
162
- (options: (Merge<OptionsOfBufferResponseBody, ResponseBodyOnly>)): CancelableRequest<Buffer>;
127
+ export type OptionsOfTextResponseBody = Merge<StrictOptions, {
128
+ isStream?: false;
129
+ responseType?: 'text';
130
+ }>;
131
+ export type OptionsOfTextResponseBodyOnly = Merge<StrictOptions, {
132
+ isStream?: false;
133
+ resolveBodyOnly: true;
134
+ responseType?: 'text';
135
+ }>;
136
+ export type OptionsOfTextResponseBodyWrapped = Merge<StrictOptions, {
137
+ isStream?: false;
138
+ resolveBodyOnly: false;
139
+ responseType?: 'text';
140
+ }>;
141
+ export type OptionsOfJSONResponseBody = Merge<StrictOptions, {
142
+ isStream?: false;
143
+ responseType?: 'json';
144
+ }>;
145
+ export type OptionsOfJSONResponseBodyOnly = Merge<StrictOptions, {
146
+ isStream?: false;
147
+ resolveBodyOnly: true;
148
+ responseType?: 'json';
149
+ }>;
150
+ export type OptionsOfJSONResponseBodyWrapped = Merge<StrictOptions, {
151
+ isStream?: false;
152
+ resolveBodyOnly: false;
153
+ responseType?: 'json';
154
+ }>;
155
+ export type OptionsOfBufferResponseBody = Merge<StrictOptions, {
156
+ isStream?: false;
157
+ responseType?: 'buffer';
158
+ }>;
159
+ export type OptionsOfBufferResponseBodyOnly = Merge<StrictOptions, {
160
+ isStream?: false;
161
+ resolveBodyOnly: true;
162
+ responseType?: 'buffer';
163
+ }>;
164
+ export type OptionsOfBufferResponseBodyWrapped = Merge<StrictOptions, {
165
+ isStream?: false;
166
+ resolveBodyOnly: false;
167
+ responseType?: 'buffer';
168
+ }>;
169
+ export type OptionsOfUnknownResponseBody = Merge<StrictOptions, {
170
+ isStream?: false;
171
+ }>;
172
+ export type OptionsOfUnknownResponseBodyOnly = Merge<StrictOptions, {
173
+ isStream?: false;
174
+ resolveBodyOnly: true;
175
+ }>;
176
+ export type OptionsOfUnknownResponseBodyWrapped = Merge<StrictOptions, {
177
+ isStream?: false;
178
+ resolveBodyOnly: false;
179
+ }>;
180
+ export type GotRequestFunction<U extends ExtendOptions = Record<string, unknown>> = {
181
+ (url: string | URL, options?: OptionsOfTextResponseBody): U['resolveBodyOnly'] extends true ? CancelableRequest<string> : CancelableRequest<Response<string>>;
182
+ <T>(url: string | URL, options?: OptionsOfJSONResponseBody): U['resolveBodyOnly'] extends true ? CancelableRequest<T> : CancelableRequest<Response<T>>;
183
+ (url: string | URL, options?: OptionsOfBufferResponseBody): U['resolveBodyOnly'] extends true ? CancelableRequest<Buffer> : CancelableRequest<Response<Buffer>>;
184
+ (url: string | URL, options?: OptionsOfUnknownResponseBody): U['resolveBodyOnly'] extends true ? CancelableRequest : CancelableRequest<Response>;
185
+ (url: string | URL, options?: OptionsOfTextResponseBodyWrapped): CancelableRequest<Response<string>>;
186
+ <T>(url: string | URL, options?: OptionsOfJSONResponseBodyWrapped): CancelableRequest<Response<T>>;
187
+ (url: string | URL, options?: OptionsOfBufferResponseBodyWrapped): CancelableRequest<Response<Buffer>>;
188
+ (url: string | URL, options?: OptionsOfUnknownResponseBodyWrapped): CancelableRequest<Response>;
189
+ (url: string | URL, options?: OptionsOfTextResponseBodyOnly): CancelableRequest<string>;
190
+ <T>(url: string | URL, options?: OptionsOfJSONResponseBodyOnly): CancelableRequest<T>;
191
+ (url: string | URL, options?: OptionsOfBufferResponseBodyOnly): CancelableRequest<Buffer>;
192
+ (url: string | URL, options?: OptionsOfUnknownResponseBodyOnly): CancelableRequest;
193
+ (options: OptionsOfTextResponseBody): U['resolveBodyOnly'] extends true ? CancelableRequest<string> : CancelableRequest<Response<string>>;
194
+ <T>(options: OptionsOfJSONResponseBody): U['resolveBodyOnly'] extends true ? CancelableRequest<T> : CancelableRequest<Response<T>>;
195
+ (options: OptionsOfBufferResponseBody): U['resolveBodyOnly'] extends true ? CancelableRequest<Buffer> : CancelableRequest<Response<Buffer>>;
196
+ (options: OptionsOfUnknownResponseBody): U['resolveBodyOnly'] extends true ? CancelableRequest : CancelableRequest<Response>;
197
+ (options: OptionsOfTextResponseBodyWrapped): CancelableRequest<Response<string>>;
198
+ <T>(options: OptionsOfJSONResponseBodyWrapped): CancelableRequest<Response<T>>;
199
+ (options: OptionsOfBufferResponseBodyWrapped): CancelableRequest<Response<Buffer>>;
200
+ (options: OptionsOfUnknownResponseBodyWrapped): CancelableRequest<Response>;
201
+ (options: OptionsOfTextResponseBodyOnly): CancelableRequest<string>;
202
+ <T>(options: OptionsOfJSONResponseBodyOnly): CancelableRequest<T>;
203
+ (options: OptionsOfBufferResponseBodyOnly): CancelableRequest<Buffer>;
204
+ (options: OptionsOfUnknownResponseBodyOnly): CancelableRequest;
163
205
  (url: string | URL, options?: Merge<OptionsInit, {
164
206
  isStream: true;
165
207
  }>): Request;
@@ -186,7 +228,7 @@ export type GotStream = GotStreamFunction & Record<HTTPAlias, GotStreamFunction>
186
228
  /**
187
229
  An instance of `got`.
188
230
  */
189
- export type Got = {
231
+ export type Got<GotOptions extends ExtendOptions = ExtendOptions> = {
190
232
  /**
191
233
  Sets `options.isStream` to `true`.
192
234
 
@@ -256,6 +298,11 @@ export type Got = {
256
298
  // x-unicorn: rainbow
257
299
  ```
258
300
  */
259
- extend: (...instancesOrOptions: Array<Got | ExtendOptions>) => Got;
260
- } & Record<HTTPAlias, GotRequestFunction> & GotRequestFunction;
301
+ extend<T extends Array<Got | ExtendOptions>>(...instancesOrOptions: T): Got<MergeExtendsConfig<T>>;
302
+ } & Record<HTTPAlias, GotRequestFunction<GotOptions>> & GotRequestFunction<GotOptions>;
303
+ export type ExtractExtendOptions<T> = T extends Got<infer GotOptions> ? GotOptions : T;
304
+ /**
305
+ Merges the options of multiple Got instances.
306
+ */
307
+ export type MergeExtendsConfig<Value extends Array<Got | ExtendOptions>> = Value extends readonly [Value[0], ...infer NextValue] ? NextValue[0] extends undefined ? Value[0] extends infer OnlyValue ? OnlyValue extends ExtendOptions ? OnlyValue : OnlyValue extends Got<infer GotOptions> ? GotOptions : OnlyValue : never : ExtractExtendOptions<Value[0]> extends infer FirstArg extends ExtendOptions ? ExtractExtendOptions<NextValue[0] extends ExtendOptions | Got ? NextValue[0] : never> extends infer NextArg extends ExtendOptions ? Spread<FirstArg, NextArg> extends infer Merged extends ExtendOptions ? NextValue extends [NextValue[0], ...infer NextRest] ? NextRest extends Array<Got | ExtendOptions> ? MergeExtendsConfig<[Merged, ...NextRest]> : never : never : never : never : never : never;
261
308
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "got",
3
- "version": "14.2.1",
3
+ "version": "14.4.0",
4
4
  "description": "Human-friendly and powerful HTTP request library for Node.js",
5
5
  "license": "MIT",
6
6
  "repository": "sindresorhus/got",
@@ -48,10 +48,10 @@
48
48
  "ky"
49
49
  ],
50
50
  "dependencies": {
51
- "@sindresorhus/is": "^6.1.0",
51
+ "@sindresorhus/is": "^6.3.1",
52
52
  "@szmarczak/http-timer": "^5.0.1",
53
53
  "cacheable-lookup": "^7.0.0",
54
- "cacheable-request": "^10.2.14",
54
+ "cacheable-request": "^12.0.1",
55
55
  "decompress-response": "^6.0.0",
56
56
  "form-data-encoder": "^4.0.2",
57
57
  "get-stream": "^8.0.1",
@@ -66,14 +66,14 @@
66
66
  "@sinonjs/fake-timers": "^11.2.2",
67
67
  "@types/benchmark": "^2.1.5",
68
68
  "@types/express": "^4.17.21",
69
- "@types/node": "^20.10.0",
69
+ "@types/node": "^20.12.12",
70
70
  "@types/pem": "^1.14.4",
71
- "@types/readable-stream": "^4.0.9",
71
+ "@types/readable-stream": "^4.0.14",
72
72
  "@types/request": "^2.48.12",
73
73
  "@types/sinon": "^17.0.2",
74
74
  "@types/sinonjs__fake-timers": "^8.1.5",
75
75
  "ava": "^5.3.1",
76
- "axios": "^1.6.2",
76
+ "axios": "^1.6.8",
77
77
  "benchmark": "^2.1.4",
78
78
  "bluebird": "^3.7.2",
79
79
  "body-parser": "^1.20.2",
@@ -81,33 +81,35 @@
81
81
  "create-test-server": "^3.0.1",
82
82
  "del-cli": "^5.1.0",
83
83
  "delay": "^6.0.0",
84
- "express": "^4.18.2",
84
+ "expect-type": "^0.19.0",
85
+ "express": "^4.19.2",
85
86
  "form-data": "^4.0.0",
86
87
  "formdata-node": "^6.0.3",
87
- "nock": "^13.4.0",
88
+ "nock": "^13.5.4",
88
89
  "node-fetch": "^3.3.2",
89
- "np": "^9.0.0",
90
+ "np": "^10.0.5",
90
91
  "nyc": "^15.1.0",
91
- "p-event": "^6.0.0",
92
+ "p-event": "^6.0.1",
92
93
  "pem": "^1.14.8",
93
94
  "pify": "^6.1.0",
94
95
  "readable-stream": "^4.4.2",
95
96
  "request": "^2.88.2",
96
- "sinon": "^17.0.1",
97
+ "sinon": "^18.0.0",
97
98
  "slow-stream": "0.0.4",
98
99
  "tempy": "^3.1.0",
99
100
  "then-busboy": "^5.2.1",
100
- "tough-cookie": "^4.1.3",
101
- "tsx": "^4.6.0",
101
+ "tough-cookie": "^4.1.4",
102
+ "tsx": "^4.10.4",
102
103
  "type-fest": "^4.8.2",
103
- "typescript": "^5.3.2",
104
+ "typescript": "^5.4.5",
104
105
  "xo": "^0.56.0"
105
106
  },
106
107
  "ava": {
107
108
  "files": [
108
- "test/*"
109
+ "test/*",
110
+ "!test/*.types.ts"
109
111
  ],
110
- "timeout": "1m",
112
+ "timeout": "10m",
111
113
  "extensions": {
112
114
  "ts": "module"
113
115
  },
package/readme.md CHANGED
@@ -12,11 +12,13 @@
12
12
  </sup>
13
13
  </p>
14
14
  <br>
15
+ <br>
15
16
  <a href="https://retool.com/?utm_campaign=sindresorhus">
16
- <img src="https://sindresorhus.com/assets/thanks/retool-logo.svg" width="210">
17
+ <img src="https://sindresorhus.com/assets/thanks/retool-logo.svg" width="220">
17
18
  </a>
18
19
  <br>
19
20
  <br>
21
+ <br>
20
22
  <a href="https://strapi.io/?ref=sindresorhus">
21
23
  <div>
22
24
  <img src="https://sindresorhus.com/assets/thanks/strapi-logo-white-bg.png" width="200" alt="Strapi">
@@ -45,26 +47,18 @@
45
47
  <br>
46
48
  <br>
47
49
  <br>
48
- <a href="https://dutchis.net/?ref=sindresorhus#gh-light-mode-only">
49
- <div>
50
- <img src="https://sindresorhus.com/assets/thanks/dutchis-logo-light.png" width="200" alt="DutchIS">
51
- </div>
52
- <br>
53
- <b>VPS hosting with taste 😛</b>
50
+ <br>
51
+ <a href="https://www.fame.fi#gh-light-mode-only">
52
+ <img src="https://sindresorhus.com/assets/thanks/fame-logo-light.svg" width="200" alt="Fame Helsinki">
54
53
  </a>
55
- <a href="https://dutchis.net/?ref=sindresorhus#gh-dark-mode-only">
56
- <div>
57
- <img src="https://sindresorhus.com/assets/thanks/dutchis-logo-dark.png" width="200" alt="DutchIS">
58
- </div>
59
- <br>
60
- <b>VPS hosting with taste 😛</b>
54
+ <a href="https://www.fame.fi#gh-dark-mode-only">
55
+ <img src="https://sindresorhus.com/assets/thanks/fame-logo-dark.svg" width="200" alt="Fame Helsinki">
61
56
  </a>
62
57
  <br>
63
58
  <br>
64
59
  <br>
65
60
  <br>
66
61
  <br>
67
- <br>
68
62
  </p>
69
63
  <br>
70
64
  <br>