Skip to content

Commit a2c498a

Browse files
authored
feat: use native AbortError (#1038)
1 parent d12e8e5 commit a2c498a

File tree

6 files changed

+22
-74
lines changed

6 files changed

+22
-74
lines changed

package-lock.json

+1-57
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+3-4
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
"lint": "prettier --check 'src/**/*.{ts,json}' 'scripts/**/*' 'test/**/*.ts' README.md package.json",
1414
"lint:fix": "prettier --write 'src/**/*.{ts,json}' 'scripts/**/*' 'test/**/*.ts' README.md package.json",
1515
"pretest": "npm run -s lint",
16-
"test": "vitest run --coverage",
17-
"validate:ts": "tsc --noEmit --noImplicitAny --target es2020 --esModuleInterop --moduleResolution node16 --module node16 --allowImportingTsExtensions test/typescript-validate.ts"
16+
"test": "vitest",
17+
"validate:ts": "tsc --noEmit --noImplicitAny --target es2023 --esModuleInterop --moduleResolution node16 --module node16 --allowImportingTsExtensions test/typescript-validate.ts"
1818
},
1919
"prettier": {
2020
"plugins": [
@@ -46,8 +46,7 @@
4646
"dependencies": {
4747
"@octokit/openapi-webhooks-types": "8.3.0",
4848
"@octokit/request-error": "^6.0.1",
49-
"@octokit/webhooks-methods": "^5.0.0",
50-
"aggregate-error": "^5.0.0"
49+
"@octokit/webhooks-methods": "^5.0.0"
5150
},
5251
"devDependencies": {
5352
"@octokit/openapi-webhooks": "8.3.0",

src/event-handler/receive.ts

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import AggregateError from "aggregate-error";
21
import type {
32
EmitterWebhookEvent,
43
State,
@@ -35,7 +34,7 @@ export function receiverHandle(
3534
const errorHandlers = state.hooks.error || [];
3635

3736
if (event instanceof Error) {
38-
const error = Object.assign(new AggregateError([event]), {
37+
const error = Object.assign(new AggregateError([event], event.message), {
3938
event,
4039
});
4140

@@ -44,11 +43,13 @@ export function receiverHandle(
4443
}
4544

4645
if (!event || !event.name) {
47-
throw new AggregateError(["Event name not passed"]);
46+
const error = new Error("Event name not passed");
47+
throw new AggregateError([error], error.message);
4848
}
4949

5050
if (!event.payload) {
51-
throw new AggregateError(["Event payload not passed"]);
51+
const error = new Error("Event name not passed");
52+
throw new AggregateError([error], error.message);
5253
}
5354

5455
// flatten arrays of event listeners and remove undefined values
@@ -83,7 +84,10 @@ export function receiverHandle(
8384
return;
8485
}
8586

86-
const error = new AggregateError(errors) as WebhookEventHandlerError;
87+
const error = new AggregateError(
88+
errors,
89+
errors.map((error) => error.message).join("\n"),
90+
) as WebhookEventHandlerError;
8791
Object.assign(error, {
8892
event,
8993
});

src/middleware/node/get-payload.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
// @ts-ignore to address #245
2-
import AggregateError from "aggregate-error";
3-
41
// remove type imports from http for Deno compatibility
52
// see https://github.com/octokit/octokit.js/issues/2075#issuecomment-817361886
63
// import type { IncomingMessage } from "node:http";
@@ -28,7 +25,9 @@ export function getPayload(request: IncomingMessage): Promise<string> {
2825
return new Promise((resolve, reject) => {
2926
let data: Buffer[] = [];
3027

31-
request.on("error", (error: Error) => reject(new AggregateError([error])));
28+
request.on("error", (error: Error) =>
29+
reject(new AggregateError([error], error.message)),
30+
);
3231
request.on("data", (chunk: Buffer) => data.push(chunk));
3332
request.on("end", () =>
3433
// setImmediate improves the throughput by reducing the pressure from

src/types.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import type { EventPayloadMap } from "./generated/webhook-identifiers.js";
44
import type { Logger } from "./createLogger.js";
55
import type { EventHandler } from "./event-handler/index.js";
66
import type { emitterEventNames } from "./generated/webhook-names.js";
7-
import type AggregateError from "aggregate-error";
87

98
export type WebhookEventName = keyof EventPayloadMap;
109
export type ExtractEvents<TEventName> =
@@ -70,9 +69,13 @@ export interface State extends Options<any> {
7069
*/
7170
export type WebhookError = Error & Partial<RequestError>;
7271

72+
export interface AggregateWebhookError extends AggregateError {
73+
errors: WebhookError[];
74+
}
75+
7376
// todo: rename to "EmitterErrorEvent"
7477
export interface WebhookEventHandlerError<TTransformed = unknown>
75-
extends AggregateError<WebhookError> {
78+
extends AggregateWebhookError {
7679
event: TTransformed extends unknown
7780
? EmitterWebhookEvent
7881
: EmitterWebhookEvent & TTransformed;

src/verify-and-receive.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import AggregateError from "aggregate-error";
21
import { verify } from "@octokit/webhooks-methods";
32

43
import type {
@@ -36,7 +35,7 @@ export async function verifyAndReceive(
3635
} catch (error: any) {
3736
error.message = "Invalid JSON";
3837
error.status = 400;
39-
throw new AggregateError([error]);
38+
throw new AggregateError([error], error.message);
4039
}
4140

4241
return state.eventHandler.receive({

0 commit comments

Comments
 (0)