got 10.5.7 → 11.0.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.
Files changed (60) hide show
  1. package/dist/source/{calculate-retry-delay.d.ts → as-promise/calculate-retry-delay.d.ts} +0 -0
  2. package/dist/source/{calculate-retry-delay.js → as-promise/calculate-retry-delay.js} +6 -7
  3. package/dist/source/as-promise/core.d.ts +13 -0
  4. package/dist/source/as-promise/core.js +124 -0
  5. package/dist/source/as-promise/create-rejection.d.ts +2 -0
  6. package/dist/source/as-promise/create-rejection.js +30 -0
  7. package/dist/source/as-promise/index.d.ts +5 -0
  8. package/dist/source/as-promise/index.js +203 -0
  9. package/dist/source/as-promise/types.d.ts +77 -0
  10. package/dist/source/as-promise/types.js +27 -0
  11. package/dist/source/core/index.d.ts +272 -0
  12. package/dist/source/core/index.js +1091 -0
  13. package/dist/source/{utils → core/utils}/get-body-size.d.ts +0 -0
  14. package/dist/source/{utils → core/utils}/get-body-size.js +0 -0
  15. package/dist/source/core/utils/is-form-data.d.ts +8 -0
  16. package/dist/source/{utils → core/utils}/is-form-data.js +0 -0
  17. package/dist/source/core/utils/options-to-url.d.ts +15 -0
  18. package/dist/source/{utils → core/utils}/options-to-url.js +5 -34
  19. package/dist/source/core/utils/proxy-events.d.ts +3 -0
  20. package/dist/source/core/utils/proxy-events.js +17 -0
  21. package/dist/source/{utils → core/utils}/timed-out.d.ts +0 -0
  22. package/dist/source/{utils → core/utils}/timed-out.js +2 -5
  23. package/dist/source/{utils → core/utils}/unhandle.d.ts +1 -1
  24. package/dist/source/{utils → core/utils}/unhandle.js +0 -0
  25. package/dist/source/{utils → core/utils}/url-to-options.d.ts +0 -0
  26. package/dist/source/{utils → core/utils}/url-to-options.js +0 -0
  27. package/dist/source/core/utils/weakable-map.d.ts +8 -0
  28. package/dist/source/core/utils/weakable-map.js +29 -0
  29. package/dist/source/create.d.ts +3 -79
  30. package/dist/source/create.js +83 -39
  31. package/dist/source/index.d.ts +3 -6
  32. package/dist/source/index.js +13 -19
  33. package/dist/source/types.d.ts +84 -198
  34. package/dist/source/types.js +0 -1
  35. package/package.json +41 -37
  36. package/readme.md +211 -97
  37. package/dist/source/as-promise.d.ts +0 -3
  38. package/dist/source/as-promise.js +0 -152
  39. package/dist/source/as-stream.d.ts +0 -7
  40. package/dist/source/as-stream.js +0 -121
  41. package/dist/source/errors.d.ts +0 -41
  42. package/dist/source/errors.js +0 -103
  43. package/dist/source/get-response.d.ts +0 -6
  44. package/dist/source/get-response.js +0 -25
  45. package/dist/source/known-hook-events.d.ts +0 -88
  46. package/dist/source/known-hook-events.js +0 -11
  47. package/dist/source/normalize-arguments.d.ts +0 -19
  48. package/dist/source/normalize-arguments.js +0 -436
  49. package/dist/source/progress.d.ts +0 -4
  50. package/dist/source/progress.js +0 -40
  51. package/dist/source/request-as-event-emitter.d.ts +0 -12
  52. package/dist/source/request-as-event-emitter.js +0 -284
  53. package/dist/source/utils/dynamic-require.d.ts +0 -3
  54. package/dist/source/utils/dynamic-require.js +0 -4
  55. package/dist/source/utils/is-form-data.d.ts +0 -3
  56. package/dist/source/utils/merge.d.ts +0 -6
  57. package/dist/source/utils/merge.js +0 -35
  58. package/dist/source/utils/options-to-url.d.ts +0 -19
  59. package/dist/source/utils/supports-brotli.d.ts +0 -2
  60. package/dist/source/utils/supports-brotli.js +0 -4
@@ -1,30 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const is_1 = require("@sindresorhus/is");
4
- const errors_1 = require("./errors");
3
+ const types_1 = require("./types");
5
4
  const retryAfterStatusCodes = new Set([413, 429, 503]);
6
- const isErrorWithResponse = (error) => (error instanceof errors_1.HTTPError || error instanceof errors_1.ParseError || error instanceof errors_1.MaxRedirectsError);
5
+ const isErrorWithResponse = (error) => (error instanceof types_1.HTTPError || error instanceof types_1.ParseError || error instanceof types_1.MaxRedirectsError);
7
6
  const calculateRetryDelay = ({ attemptCount, retryOptions, error }) => {
8
7
  if (attemptCount > retryOptions.limit) {
9
8
  return 0;
10
9
  }
11
10
  const hasMethod = retryOptions.methods.includes(error.options.method);
12
- const hasErrorCode = Reflect.has(error, 'code') && retryOptions.errorCodes.includes(error.code);
11
+ const hasErrorCode = retryOptions.errorCodes.includes(error.code);
13
12
  const hasStatusCode = isErrorWithResponse(error) && retryOptions.statusCodes.includes(error.response.statusCode);
14
13
  if (!hasMethod || (!hasErrorCode && !hasStatusCode)) {
15
14
  return 0;
16
15
  }
17
16
  if (isErrorWithResponse(error)) {
18
17
  const { response } = error;
19
- if (response && Reflect.has(response.headers, 'retry-after') && retryAfterStatusCodes.has(response.statusCode)) {
18
+ if (response && 'retry-after' in response.headers && retryAfterStatusCodes.has(response.statusCode)) {
20
19
  let after = Number(response.headers['retry-after']);
21
- if (is_1.default.nan(after)) {
20
+ if (Number.isNaN(after)) {
22
21
  after = Date.parse(response.headers['retry-after']) - Date.now();
23
22
  }
24
23
  else {
25
24
  after *= 1000;
26
25
  }
27
- if (after > retryOptions.maxRetryAfter) {
26
+ if (retryOptions.maxRetryAfter === undefined || after > retryOptions.maxRetryAfter) {
28
27
  return 0;
29
28
  }
30
29
  return after;
@@ -0,0 +1,13 @@
1
+ /// <reference types="node" />
2
+ import { URL } from 'url';
3
+ import { Options, NormalizedOptions, Defaults, ResponseType, Response } from './types';
4
+ import Request from '../core';
5
+ export declare const knownBodyTypes: string[];
6
+ export declare const parseBody: (response: Response<unknown>, responseType: ResponseType, encoding?: string | undefined) => unknown;
7
+ export default class PromisableRequest extends Request {
8
+ ['constructor']: typeof PromisableRequest;
9
+ options: NormalizedOptions;
10
+ static normalizeArguments(url?: string | URL, nonNormalizedOptions?: Options, defaults?: Defaults): NormalizedOptions;
11
+ static mergeOptions(...sources: Options[]): NormalizedOptions;
12
+ _beforeError(error: Error): Promise<void>;
13
+ }
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const is_1 = require("@sindresorhus/is");
4
+ const types_1 = require("./types");
5
+ const core_1 = require("../core");
6
+ if (!core_1.knownHookEvents.includes('beforeRetry')) {
7
+ core_1.knownHookEvents.push('beforeRetry', 'afterResponse');
8
+ }
9
+ exports.knownBodyTypes = ['json', 'buffer', 'text'];
10
+ // @ts-ignore The error is: Not all code paths return a value.
11
+ exports.parseBody = (response, responseType, encoding) => {
12
+ const { rawBody } = response;
13
+ try {
14
+ if (responseType === 'text') {
15
+ return rawBody.toString(encoding);
16
+ }
17
+ if (responseType === 'json') {
18
+ return rawBody.length === 0 ? '' : JSON.parse(rawBody.toString());
19
+ }
20
+ if (responseType === 'buffer') {
21
+ return Buffer.from(rawBody);
22
+ }
23
+ if (!exports.knownBodyTypes.includes(responseType)) {
24
+ throw new TypeError(`Unknown body type '${responseType}'`);
25
+ }
26
+ }
27
+ catch (error) {
28
+ throw new types_1.ParseError(error, response);
29
+ }
30
+ };
31
+ class PromisableRequest extends core_1.default {
32
+ static normalizeArguments(url, nonNormalizedOptions, defaults) {
33
+ const options = super.normalizeArguments(url, nonNormalizedOptions, defaults);
34
+ if (is_1.default.null_(options.encoding)) {
35
+ throw new TypeError('To get a Buffer, set `options.responseType` to `buffer` instead');
36
+ }
37
+ is_1.assert.any([is_1.default.string, is_1.default.undefined], options.encoding);
38
+ is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.resolveBodyOnly);
39
+ is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.methodRewriting);
40
+ is_1.assert.any([is_1.default.boolean, is_1.default.undefined], options.isStream);
41
+ // `options.retry`
42
+ const { retry } = options;
43
+ if (defaults) {
44
+ options.retry = { ...defaults.retry };
45
+ }
46
+ else {
47
+ options.retry = {
48
+ calculateDelay: retryObject => retryObject.computedValue,
49
+ limit: 0,
50
+ methods: [],
51
+ statusCodes: [],
52
+ errorCodes: [],
53
+ maxRetryAfter: undefined
54
+ };
55
+ }
56
+ if (is_1.default.object(retry)) {
57
+ options.retry = {
58
+ ...options.retry,
59
+ ...retry
60
+ };
61
+ options.retry.methods = [...new Set(options.retry.methods.map(method => method.toUpperCase()))];
62
+ options.retry.statusCodes = [...new Set(options.retry.statusCodes)];
63
+ options.retry.errorCodes = [...new Set(options.retry.errorCodes)];
64
+ }
65
+ else if (is_1.default.number(retry)) {
66
+ options.retry.limit = retry;
67
+ }
68
+ if (is_1.default.undefined(options.retry.maxRetryAfter)) {
69
+ options.retry.maxRetryAfter = Math.min(...[options.timeout.request, options.timeout.connect].filter(is_1.default.number));
70
+ }
71
+ // `options.pagination`
72
+ if (is_1.default.object(options.pagination)) {
73
+ if (defaults) {
74
+ options.pagination = {
75
+ ...defaults.pagination,
76
+ ...options.pagination
77
+ };
78
+ }
79
+ const { pagination } = options;
80
+ if (!is_1.default.function_(pagination.transform)) {
81
+ throw new Error('`options.pagination.transform` must be implemented');
82
+ }
83
+ if (!is_1.default.function_(pagination.shouldContinue)) {
84
+ throw new Error('`options.pagination.shouldContinue` must be implemented');
85
+ }
86
+ if (!is_1.default.function_(pagination.filter)) {
87
+ throw new TypeError('`options.pagination.filter` must be implemented');
88
+ }
89
+ if (!is_1.default.function_(pagination.paginate)) {
90
+ throw new Error('`options.pagination.paginate` must be implemented');
91
+ }
92
+ }
93
+ // JSON mode
94
+ if (options.responseType === 'json' && options.headers.accept === undefined) {
95
+ options.headers.accept = 'application/json';
96
+ }
97
+ return options;
98
+ }
99
+ static mergeOptions(...sources) {
100
+ let mergedOptions;
101
+ for (const source of sources) {
102
+ mergedOptions = PromisableRequest.normalizeArguments(undefined, source, mergedOptions);
103
+ }
104
+ return mergedOptions;
105
+ }
106
+ async _beforeError(error) {
107
+ if (!(error instanceof core_1.RequestError)) {
108
+ error = new core_1.RequestError(error.message, error, this);
109
+ }
110
+ try {
111
+ for (const hook of this.options.hooks.beforeError) {
112
+ // eslint-disable-next-line no-await-in-loop
113
+ error = await hook(error);
114
+ }
115
+ }
116
+ catch (error_) {
117
+ this.destroy(new core_1.RequestError(error_.message, error_, this));
118
+ return;
119
+ }
120
+ // Let the promise decide whether to abort or not
121
+ this.emit('error', error);
122
+ }
123
+ }
124
+ exports.default = PromisableRequest;
@@ -0,0 +1,2 @@
1
+ import { CancelableRequest, BeforeErrorHook } from './types';
2
+ export default function createRejection(error: Error, ...beforeErrorGroups: Array<BeforeErrorHook[] | undefined>): CancelableRequest<never>;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const types_1 = require("./types");
4
+ function createRejection(error, ...beforeErrorGroups) {
5
+ const promise = (async () => {
6
+ if (error instanceof types_1.RequestError) {
7
+ try {
8
+ for (const hooks of beforeErrorGroups) {
9
+ if (hooks) {
10
+ for (const hook of hooks) {
11
+ // eslint-disable-next-line no-await-in-loop
12
+ error = await hook(error);
13
+ }
14
+ }
15
+ }
16
+ }
17
+ catch (error_) {
18
+ error = error_;
19
+ }
20
+ }
21
+ throw error;
22
+ })();
23
+ const returnPromise = () => promise;
24
+ promise.json = returnPromise;
25
+ promise.text = returnPromise;
26
+ promise.buffer = returnPromise;
27
+ promise.on = returnPromise;
28
+ return promise;
29
+ }
30
+ exports.default = createRejection;
@@ -0,0 +1,5 @@
1
+ import { NormalizedOptions, CancelableRequest } from './types';
2
+ import PromisableRequest from './core';
3
+ export default function asPromise<T>(options: NormalizedOptions): CancelableRequest<T>;
4
+ export * from './types';
5
+ export { PromisableRequest };
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ function __export(m) {
3
+ for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
4
+ }
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const events_1 = require("events");
7
+ const getStream = require("get-stream");
8
+ const PCancelable = require("p-cancelable");
9
+ const calculate_retry_delay_1 = require("./calculate-retry-delay");
10
+ const types_1 = require("./types");
11
+ const core_1 = require("./core");
12
+ exports.PromisableRequest = core_1.default;
13
+ const proxy_events_1 = require("../core/utils/proxy-events");
14
+ const proxiedRequestEvents = [
15
+ 'request',
16
+ 'response',
17
+ 'redirect',
18
+ 'uploadProgress',
19
+ 'downloadProgress'
20
+ ];
21
+ function asPromise(options) {
22
+ let retryCount = 0;
23
+ let globalRequest;
24
+ let globalResponse;
25
+ const emitter = new events_1.EventEmitter();
26
+ const promise = new PCancelable((resolve, reject, onCancel) => {
27
+ const makeRequest = () => {
28
+ // Support retries
29
+ // `options.throwHttpErrors` needs to be always true,
30
+ // so the HTTP errors are caught and the request is retried.
31
+ // The error is **eventually** thrown if the user value is true.
32
+ const { throwHttpErrors } = options;
33
+ if (!throwHttpErrors) {
34
+ options.throwHttpErrors = true;
35
+ }
36
+ const request = new core_1.default(options.url, options);
37
+ request._noPipe = true;
38
+ onCancel(() => request.destroy());
39
+ globalRequest = request;
40
+ request.once('response', async (response) => {
41
+ response.retryCount = retryCount;
42
+ if (response.request.aborted) {
43
+ // Canceled while downloading - will throw a `CancelError` or `TimeoutError` error
44
+ return;
45
+ }
46
+ const isOk = () => {
47
+ const { statusCode } = response;
48
+ const limitStatusCode = options.followRedirect ? 299 : 399;
49
+ return (statusCode >= 200 && statusCode <= limitStatusCode) || statusCode === 304;
50
+ };
51
+ // Download body
52
+ let rawBody;
53
+ try {
54
+ rawBody = await getStream.buffer(request);
55
+ response.rawBody = rawBody;
56
+ }
57
+ catch (error) {
58
+ request._beforeError(new types_1.ReadError(error, request));
59
+ return;
60
+ }
61
+ // Parse body
62
+ try {
63
+ response.body = core_1.parseBody(response, options.responseType, options.encoding);
64
+ }
65
+ catch (error) {
66
+ // Fallback to `utf8`
67
+ response.body = rawBody.toString();
68
+ if (isOk()) {
69
+ request._beforeError(error);
70
+ return;
71
+ }
72
+ }
73
+ try {
74
+ for (const [index, hook] of options.hooks.afterResponse.entries()) {
75
+ // @ts-ignore TS doesn't notice that CancelableRequest is a Promise
76
+ // eslint-disable-next-line no-await-in-loop
77
+ response = await hook(response, async (updatedOptions) => {
78
+ request.destroy();
79
+ const typedOptions = core_1.default.normalizeArguments(undefined, {
80
+ ...updatedOptions,
81
+ retry: {
82
+ calculateDelay: () => 0
83
+ },
84
+ throwHttpErrors: false,
85
+ resolveBodyOnly: false
86
+ }, options);
87
+ // Remove any further hooks for that request, because we'll call them anyway.
88
+ // The loop continues. We don't want duplicates (asPromise recursion).
89
+ typedOptions.hooks.afterResponse = typedOptions.hooks.afterResponse.slice(0, index);
90
+ for (const hook of typedOptions.hooks.beforeRetry) {
91
+ // eslint-disable-next-line no-await-in-loop
92
+ await hook(typedOptions);
93
+ }
94
+ const promise = asPromise(typedOptions);
95
+ onCancel(() => {
96
+ promise.catch(() => { });
97
+ promise.cancel();
98
+ });
99
+ return promise;
100
+ });
101
+ }
102
+ }
103
+ catch (error) {
104
+ request._beforeError(error);
105
+ return;
106
+ }
107
+ if (throwHttpErrors && !isOk()) {
108
+ reject(new types_1.HTTPError(response));
109
+ return;
110
+ }
111
+ globalResponse = response;
112
+ resolve(options.resolveBodyOnly ? response.body : response);
113
+ });
114
+ request.once('error', (error) => {
115
+ if (promise.isCanceled) {
116
+ return;
117
+ }
118
+ if (!request.options) {
119
+ reject(error);
120
+ return;
121
+ }
122
+ let backoff;
123
+ retryCount++;
124
+ try {
125
+ backoff = options.retry.calculateDelay({
126
+ attemptCount: retryCount,
127
+ retryOptions: options.retry,
128
+ error,
129
+ computedValue: calculate_retry_delay_1.default({
130
+ attemptCount: retryCount,
131
+ retryOptions: options.retry,
132
+ error,
133
+ computedValue: 0
134
+ })
135
+ });
136
+ }
137
+ catch (error_) {
138
+ // Don't emit the `response` event
139
+ request.destroy();
140
+ reject(new types_1.RequestError(error_.message, error, request));
141
+ return;
142
+ }
143
+ if (backoff) {
144
+ // Don't emit the `response` event
145
+ request.destroy();
146
+ const retry = async () => {
147
+ options.throwHttpErrors = throwHttpErrors;
148
+ try {
149
+ for (const hook of options.hooks.beforeRetry) {
150
+ // eslint-disable-next-line no-await-in-loop
151
+ await hook(options, error, retryCount);
152
+ }
153
+ }
154
+ catch (error_) {
155
+ // Don't emit the `response` event
156
+ request.destroy();
157
+ reject(new types_1.RequestError(error_.message, error, request));
158
+ return;
159
+ }
160
+ makeRequest();
161
+ };
162
+ setTimeout(retry, backoff);
163
+ return;
164
+ }
165
+ // The retry has not been made
166
+ retryCount--;
167
+ if (error instanceof types_1.HTTPError) {
168
+ // It will be handled by the `response` event
169
+ return;
170
+ }
171
+ // Don't emit the `response` event
172
+ request.destroy();
173
+ reject(error);
174
+ });
175
+ proxy_events_1.default(request, emitter, proxiedRequestEvents);
176
+ };
177
+ makeRequest();
178
+ });
179
+ promise.on = (event, fn) => {
180
+ emitter.on(event, fn);
181
+ return promise;
182
+ };
183
+ const shortcut = (responseType) => {
184
+ const newPromise = (async () => {
185
+ // Wait until downloading has ended
186
+ await promise;
187
+ return core_1.parseBody(globalResponse, responseType, options.encoding);
188
+ })();
189
+ Object.defineProperties(newPromise, Object.getOwnPropertyDescriptors(promise));
190
+ return newPromise;
191
+ };
192
+ promise.json = () => {
193
+ if (!globalRequest.writableFinished && options.headers.accept === undefined) {
194
+ options.headers.accept = 'application/json';
195
+ }
196
+ return shortcut('json');
197
+ };
198
+ promise.buffer = () => shortcut('buffer');
199
+ promise.text = () => shortcut('text');
200
+ return promise;
201
+ }
202
+ exports.default = asPromise;
203
+ __export(require("./types"));
@@ -0,0 +1,77 @@
1
+ /// <reference types="node" />
2
+ import PCancelable = require('p-cancelable');
3
+ import { CancelError } from 'p-cancelable';
4
+ import { Options as RequestOptions, NormalizedOptions as RequestNormalizedOptions, Defaults as RequestDefaults, Hooks as RequestHooks, Response as RequestResponse, RequestError, MaxRedirectsError, CacheError, UploadError, TimeoutError, HTTPError, ReadError, UnsupportedProtocolError, HookEvent as RequestHookEvent, InitHook, BeforeRequestHook, BeforeRedirectHook, BeforeErrorHook, Progress, Headers, RequestFunction, Method, RequestEvents } from '../core';
5
+ import PromisableRequest from './core';
6
+ export declare type ResponseType = 'json' | 'buffer' | 'text';
7
+ export interface Response<T = unknown> extends RequestResponse<T> {
8
+ request: PromisableRequest;
9
+ }
10
+ export interface RetryObject {
11
+ attemptCount: number;
12
+ retryOptions: RequiredRetryOptions;
13
+ error: TimeoutError | RequestError;
14
+ computedValue: number;
15
+ }
16
+ export declare type RetryFunction = (retryObject: RetryObject) => number;
17
+ export interface RequiredRetryOptions {
18
+ limit: number;
19
+ methods: Method[];
20
+ statusCodes: number[];
21
+ errorCodes: string[];
22
+ calculateDelay: RetryFunction;
23
+ maxRetryAfter?: number;
24
+ }
25
+ export declare type BeforeRetryHook = (options: NormalizedOptions, error?: RequestError, retryCount?: number) => void | Promise<void>;
26
+ export declare type AfterResponseHook = (response: Response, retryWithMergedOptions: (options: Options) => CancelableRequest<Response>) => Response | CancelableRequest<Response> | Promise<Response | CancelableRequest<Response>>;
27
+ export interface Hooks extends RequestHooks {
28
+ beforeRetry?: BeforeRetryHook[];
29
+ afterResponse?: AfterResponseHook[];
30
+ }
31
+ export interface PaginationOptions<T> {
32
+ pagination?: {
33
+ transform?: (response: Response) => Promise<T[]> | T[];
34
+ filter?: (item: T, allItems: T[], currentItems: T[]) => boolean;
35
+ paginate?: (response: Response, allItems: T[], currentItems: T[]) => Options | false;
36
+ shouldContinue?: (item: T, allItems: T[], currentItems: T[]) => boolean;
37
+ countLimit?: number;
38
+ };
39
+ }
40
+ export interface Options extends RequestOptions, PaginationOptions<unknown> {
41
+ hooks?: Hooks;
42
+ responseType?: ResponseType;
43
+ resolveBodyOnly?: boolean;
44
+ retry?: Partial<RequiredRetryOptions> | number;
45
+ isStream?: boolean;
46
+ encoding?: BufferEncoding;
47
+ }
48
+ export interface NormalizedOptions extends RequestNormalizedOptions {
49
+ hooks: Required<Hooks>;
50
+ responseType: ResponseType;
51
+ resolveBodyOnly: boolean;
52
+ retry: RequiredRetryOptions;
53
+ isStream: boolean;
54
+ encoding?: BufferEncoding;
55
+ pagination?: Required<PaginationOptions<unknown>['pagination']>;
56
+ }
57
+ export interface Defaults extends RequestDefaults {
58
+ hooks: Required<Hooks>;
59
+ responseType: ResponseType;
60
+ resolveBodyOnly: boolean;
61
+ retry: RequiredRetryOptions;
62
+ isStream: boolean;
63
+ pagination?: Required<PaginationOptions<unknown>['pagination']>;
64
+ }
65
+ export declare class ParseError extends RequestError {
66
+ readonly response: Response;
67
+ constructor(error: Error, response: Response);
68
+ }
69
+ export interface CancelableRequest<T extends Response | Response['body'] = Response['body']> extends PCancelable<T>, RequestEvents<CancelableRequest<T>> {
70
+ json<ReturnType>(): CancelableRequest<ReturnType>;
71
+ buffer(): CancelableRequest<Buffer>;
72
+ text(): CancelableRequest<string>;
73
+ }
74
+ export declare type HookEvent = RequestHookEvent | 'beforeRetry' | 'afterResponse';
75
+ export { RequestError, MaxRedirectsError, CacheError, UploadError, TimeoutError, HTTPError, ReadError, UnsupportedProtocolError, CancelError };
76
+ export { InitHook, BeforeRequestHook, BeforeRedirectHook, BeforeErrorHook };
77
+ export { Progress, Headers, RequestFunction };
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const p_cancelable_1 = require("p-cancelable");
4
+ exports.CancelError = p_cancelable_1.CancelError;
5
+ const core_1 = require("../core");
6
+ exports.RequestError =
7
+ // Errors to be exported
8
+ core_1.RequestError;
9
+ exports.MaxRedirectsError = core_1.MaxRedirectsError;
10
+ exports.CacheError = core_1.CacheError;
11
+ exports.UploadError = core_1.UploadError;
12
+ exports.TimeoutError = core_1.TimeoutError;
13
+ exports.HTTPError = core_1.HTTPError;
14
+ exports.ReadError = core_1.ReadError;
15
+ exports.UnsupportedProtocolError = core_1.UnsupportedProtocolError;
16
+ class ParseError extends core_1.RequestError {
17
+ constructor(error, response) {
18
+ const { options } = response.request;
19
+ super(`${error.message} in "${options.url.toString()}"`, error, response.request);
20
+ this.name = 'ParseError';
21
+ Object.defineProperty(this, 'response', {
22
+ enumerable: false,
23
+ value: response
24
+ });
25
+ }
26
+ }
27
+ exports.ParseError = ParseError;