Skip to content

Commit

Permalink
Merge ac58185 into 4be7446
Browse files Browse the repository at this point in the history
  • Loading branch information
sindresorhus committed Jul 7, 2020
2 parents 4be7446 + ac58185 commit 6434643
Show file tree
Hide file tree
Showing 29 changed files with 194 additions and 184 deletions.
24 changes: 12 additions & 12 deletions benchmark/index.ts
Expand Up @@ -67,44 +67,44 @@ const suite = new Benchmark.Suite();
// Benchmarking
suite.add('got - promise', {
defer: true,
fn: async (deferred: {resolve(): void}) => {
fn: async (deferred: {resolve: () => void}) => {
await got(url, gotOptions);
deferred.resolve();
}
}).add('got - stream', {
defer: true,
fn: async (deferred: {resolve(): void}) => {
fn: async (deferred: {resolve: () => void}) => {
got.stream(url, gotOptions).resume().once('end', () => {
deferred.resolve();
});
}
}).add('got - promise core', {
defer: true,
fn: async (deferred: {resolve(): void}) => {
fn: async (deferred: {resolve: () => void}) => {
const stream = new PromisableRequest(url, gotOptions);
stream.resume().once('end', () => {
deferred.resolve();
});
}
}).add('got - stream core', {
defer: true,
fn: async (deferred: {resolve(): void}) => {
fn: async (deferred: {resolve: () => void}) => {
const stream = new Request(url, gotOptions);
stream.resume().once('end', () => {
deferred.resolve();
});
}
}).add('got - stream core - normalized options', {
defer: true,
fn: async (deferred: {resolve(): void}) => {
fn: async (deferred: {resolve: () => void}) => {
const stream = new Request(undefined as any, normalizedGotOptions);
stream.resume().once('end', () => {
deferred.resolve();
});
}
}).add('request - callback', {
defer: true,
fn: (deferred: {resolve(): void}) => {
fn: (deferred: {resolve: () => void}) => {
request(urlString, requestOptions, (error: Error) => {
if (error) {
throw error;
Expand All @@ -115,7 +115,7 @@ suite.add('got - promise', {
}
}).add('request - stream', {
defer: true,
fn: (deferred: {resolve(): void}) => {
fn: (deferred: {resolve: () => void}) => {
const stream = request(urlString, requestOptions);
stream.resume();
stream.once('end', () => {
Expand All @@ -124,15 +124,15 @@ suite.add('got - promise', {
}
}).add('node-fetch - promise', {
defer: true,
fn: async (deferred: {resolve(): void}) => {
fn: async (deferred: {resolve: () => void}) => {
const response = await fetch(url, fetchOptions);
await response.text();

deferred.resolve();
}
}).add('node-fetch - stream', {
defer: true,
fn: async (deferred: {resolve(): void}) => {
fn: async (deferred: {resolve: () => void}) => {
const {body} = await fetch(url, fetchOptions);

body.resume();
Expand All @@ -142,13 +142,13 @@ suite.add('got - promise', {
}
}).add('axios - promise', {
defer: true,
fn: async (deferred: {resolve(): void}) => {
fn: async (deferred: {resolve: () => void}) => {
await axios.request(axiosOptions);
deferred.resolve();
}
}).add('axios - stream', {
defer: true,
fn: async (deferred: {resolve(): void}) => {
fn: async (deferred: {resolve: () => void}) => {
const {data} = await axios.request(axiosStreamOptions);
data.resume();
data.once('end', () => {
Expand All @@ -157,7 +157,7 @@ suite.add('got - promise', {
}
}).add('https - stream', {
defer: true,
fn: (deferred: {resolve(): void}) => {
fn: (deferred: {resolve: () => void}) => {
https.request(urlString, httpsOptions, response => {
response.resume();
response.once('end', () => {
Expand Down
2 changes: 1 addition & 1 deletion benchmark/server.ts
@@ -1,6 +1,6 @@
import {AddressInfo} from 'net';
import https = require('https');
// @ts-ignore No types
// @ts-expect-error No types
import createCert = require('create-cert');

(async () => {
Expand Down
35 changes: 16 additions & 19 deletions package.json
Expand Up @@ -43,7 +43,7 @@
"ky"
],
"dependencies": {
"@sindresorhus/is": "^2.1.1",
"@sindresorhus/is": "^3.0.0",
"@szmarczak/http-timer": "^4.0.5",
"@types/cacheable-request": "^6.0.1",
"@types/responselike": "^1.0.0",
Expand All @@ -59,35 +59,35 @@
"@ava/typescript": "^1.1.1",
"@sindresorhus/tsconfig": "^0.7.0",
"@sinonjs/fake-timers": "^6.0.1",
"@types/benchmark": "^1.0.31",
"@types/benchmark": "^1.0.33",
"@types/express": "^4.17.6",
"@types/node": "^14.0.11",
"@types/node-fetch": "^2.5.5",
"@types/request": "^2.48.4",
"@types/sinon": "^9.0.0",
"@types/node": "^14.0.14",
"@types/node-fetch": "^2.5.7",
"@types/request": "^2.48.5",
"@types/sinon": "^9.0.4",
"@types/tough-cookie": "^4.0.0",
"ava": "^3.6.0",
"ava": "^3.10.0",
"axios": "^0.19.2",
"benchmark": "^2.1.4",
"coveralls": "^3.0.4",
"coveralls": "^3.1.0",
"create-test-server": "^3.0.1",
"del-cli": "^3.0.0",
"del-cli": "^3.0.1",
"delay": "^4.3.0",
"express": "^4.17.1",
"form-data": "^3.0.0",
"get-stream": "^5.1.0",
"nock": "^12.0.0",
"nock": "^13.0.2",
"node-fetch": "^2.6.0",
"np": "^6.0.0",
"nyc": "^15.0.1",
"p-event": "^4.1.0",
"np": "^6.3.0",
"nyc": "^15.1.0",
"p-event": "^4.2.0",
"sinon": "^9.0.2",
"slow-stream": "0.0.4",
"tempy": "^0.5.0",
"to-readable-stream": "^2.1.0",
"tough-cookie": "^4.0.0",
"typescript": "3.9.6",
"xo": "^0.30.0"
"xo": "^0.32.1"
},
"types": "dist/source",
"sideEffects": false,
Expand Down Expand Up @@ -116,13 +116,10 @@
],
"rules": {
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-base-to-string": "off",
"node/prefer-global/url": "off",
"node/prefer-global/url-search-params": "off",
"@typescript-eslint/prefer-readonly-parameter-types": "off",
"@typescript-eslint/no-floating-promises": "off",
"@typescript-eslint/method-signature-style": "off",
"unicorn/no-fn-reference-in-iterator": "off"
"import/no-anonymous-default-export": "off",
"@typescript-eslint/no-invalid-void-type": "off"
}
},
"runkitExampleFilename": "./documentation/examples/runkit-example.js"
Expand Down
5 changes: 3 additions & 2 deletions source/as-promise/core.ts
Expand Up @@ -21,7 +21,6 @@ if (!knownHookEvents.includes('beforeRetry' as any)) {

export const knownBodyTypes = ['json', 'buffer', 'text'];

// @ts-ignore The error is: Not all code paths return a value.
export const parseBody = (response: Response, responseType: ResponseType, parseJson: ParseJsonFunction, encoding?: BufferEncoding): unknown => {
const {rawBody} = response;

Expand Down Expand Up @@ -100,6 +99,8 @@ export default class PromisableRequest extends Request {

if (is.undefined(options.retry.maxRetryAfter)) {
options.retry.maxRetryAfter = Math.min(
// TypeScript is not smart enough to handle `.filter(x => is.number(x))`.
// eslint-disable-next-line unicorn/no-fn-reference-in-iterator
...[options.timeout.request, options.timeout.connect].filter(is.number)
);
}
Expand Down Expand Up @@ -150,7 +151,7 @@ export default class PromisableRequest extends Request {
return mergedOptions!;
}

async _beforeError(error: Error): Promise<void> {
_beforeError(error: Error): void {
if (this.destroyed) {
return;
}
Expand Down
28 changes: 15 additions & 13 deletions source/as-promise/index.ts
Expand Up @@ -42,18 +42,20 @@ export default function asPromise<T>(options: NormalizedOptions): CancelableRequ
request._noPipe = true;
onCancel(() => request.destroy());

const reject = async (error: RequestError) => {
try {
for (const hook of options.hooks.beforeError) {
// eslint-disable-next-line no-await-in-loop
error = await hook(error);
const reject = (error: RequestError): void => {
void (async () => {
try {
for (const hook of options.hooks.beforeError) {
// eslint-disable-next-line no-await-in-loop
error = await hook(error);
}
} catch (error_) {
_reject(new RequestError(error_.message, error_, request));
return;
}
} catch (error_) {
_reject(new RequestError(error_.message, error_, request));
return;
}

_reject(error);
_reject(error);
})();
};

globalRequest = request;
Expand All @@ -79,7 +81,7 @@ export default function asPromise<T>(options: NormalizedOptions): CancelableRequ
rawBody = await getBuffer(request);

response.rawBody = rawBody;
} catch (_) {
} catch {
// The same error is caught below.
// See request.once('error')
return;
Expand Down Expand Up @@ -108,7 +110,7 @@ export default function asPromise<T>(options: NormalizedOptions): CancelableRequ

try {
for (const [index, hook] of options.hooks.afterResponse.entries()) {
// @ts-ignore TS doesn't notice that CancelableRequest is a Promise
// @ts-expect-error TS doesn't notice that CancelableRequest is a Promise
// eslint-disable-next-line no-await-in-loop
response = await hook(response, async (updatedOptions): CancelableRequest<Response> => {
const typedOptions = PromisableRequest.normalizeArguments(undefined, {
Expand Down Expand Up @@ -223,7 +225,7 @@ export default function asPromise<T>(options: NormalizedOptions): CancelableRequ

if (error instanceof HTTPError) {
// The error will be handled by the `response` event
onResponse(request._response as Response);
void onResponse(request._response as Response);

// Reattach the error handler, because there may be a timeout later.
process.nextTick(() => {
Expand Down
6 changes: 3 additions & 3 deletions source/as-promise/types.ts
Expand Up @@ -98,9 +98,9 @@ export class ParseError extends RequestError {
}

export interface CancelableRequest<T extends Response | Response['body'] = Response['body']> extends PCancelable<T>, RequestEvents<CancelableRequest<T>> {
json<ReturnType>(): CancelableRequest<ReturnType>;
buffer(): CancelableRequest<Buffer>;
text(): CancelableRequest<string>;
json: <ReturnType>() => CancelableRequest<ReturnType>;
buffer: () => CancelableRequest<Buffer>;
text: () => CancelableRequest<string>;
}

export {CancelError};
Expand Down

0 comments on commit 6434643

Please sign in to comment.