diff --git a/package-lock.json b/package-lock.json index 94e2fc1b..3f74336c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,8 +11,7 @@ "dependencies": { "@octokit/openapi-webhooks-types": "8.3.0", "@octokit/request-error": "^6.0.1", - "@octokit/webhooks-methods": "^5.0.0", - "aggregate-error": "^5.0.0" + "@octokit/webhooks-methods": "^5.0.0" }, "devDependencies": { "@octokit/openapi-webhooks": "8.3.0", @@ -1251,22 +1250,6 @@ "node": ">=0.4.0" } }, - "node_modules/aggregate-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", - "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", - "license": "MIT", - "dependencies": { - "clean-stack": "^5.2.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", @@ -1437,21 +1420,6 @@ "node": ">= 16" } }, - "node_modules/clean-stack": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.2.0.tgz", - "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "5.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1736,18 +1704,6 @@ "dev": true, "license": "MIT" }, - "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", @@ -2154,18 +2110,6 @@ "node": ">= 4" } }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", diff --git a/package.json b/package.json index 4b73430a..219d3292 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,8 @@ "lint": "prettier --check 'src/**/*.{ts,json}' 'scripts/**/*' 'test/**/*.ts' README.md package.json", "lint:fix": "prettier --write 'src/**/*.{ts,json}' 'scripts/**/*' 'test/**/*.ts' README.md package.json", "pretest": "npm run -s lint", - "test": "vitest run --coverage", - "validate:ts": "tsc --noEmit --noImplicitAny --target es2020 --esModuleInterop --moduleResolution node16 --module node16 --allowImportingTsExtensions test/typescript-validate.ts" + "test": "vitest", + "validate:ts": "tsc --noEmit --noImplicitAny --target es2023 --esModuleInterop --moduleResolution node16 --module node16 --allowImportingTsExtensions test/typescript-validate.ts" }, "prettier": { "plugins": [ @@ -46,8 +46,7 @@ "dependencies": { "@octokit/openapi-webhooks-types": "8.3.0", "@octokit/request-error": "^6.0.1", - "@octokit/webhooks-methods": "^5.0.0", - "aggregate-error": "^5.0.0" + "@octokit/webhooks-methods": "^5.0.0" }, "devDependencies": { "@octokit/openapi-webhooks": "8.3.0", diff --git a/src/event-handler/receive.ts b/src/event-handler/receive.ts index 38b1519f..7640c45b 100644 --- a/src/event-handler/receive.ts +++ b/src/event-handler/receive.ts @@ -1,4 +1,3 @@ -import AggregateError from "aggregate-error"; import type { EmitterWebhookEvent, State, @@ -35,7 +34,7 @@ export function receiverHandle( const errorHandlers = state.hooks.error || []; if (event instanceof Error) { - const error = Object.assign(new AggregateError([event]), { + const error = Object.assign(new AggregateError([event], event.message), { event, }); @@ -44,11 +43,13 @@ export function receiverHandle( } if (!event || !event.name) { - throw new AggregateError(["Event name not passed"]); + const error = new Error("Event name not passed"); + throw new AggregateError([error], error.message); } if (!event.payload) { - throw new AggregateError(["Event payload not passed"]); + const error = new Error("Event name not passed"); + throw new AggregateError([error], error.message); } // flatten arrays of event listeners and remove undefined values @@ -83,7 +84,10 @@ export function receiverHandle( return; } - const error = new AggregateError(errors) as WebhookEventHandlerError; + const error = new AggregateError( + errors, + errors.map((error) => error.message).join("\n"), + ) as WebhookEventHandlerError; Object.assign(error, { event, }); diff --git a/src/middleware/node/get-payload.ts b/src/middleware/node/get-payload.ts index cead47c0..815fff4f 100644 --- a/src/middleware/node/get-payload.ts +++ b/src/middleware/node/get-payload.ts @@ -1,6 +1,3 @@ -// @ts-ignore to address #245 -import AggregateError from "aggregate-error"; - // remove type imports from http for Deno compatibility // see https://github.com/octokit/octokit.js/issues/2075#issuecomment-817361886 // import type { IncomingMessage } from "node:http"; @@ -28,7 +25,9 @@ export function getPayload(request: IncomingMessage): Promise { return new Promise((resolve, reject) => { let data: Buffer[] = []; - request.on("error", (error: Error) => reject(new AggregateError([error]))); + request.on("error", (error: Error) => + reject(new AggregateError([error], error.message)), + ); request.on("data", (chunk: Buffer) => data.push(chunk)); request.on("end", () => // setImmediate improves the throughput by reducing the pressure from diff --git a/src/types.ts b/src/types.ts index 9220d0cb..8a371b2a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -4,7 +4,6 @@ import type { EventPayloadMap } from "./generated/webhook-identifiers.js"; import type { Logger } from "./createLogger.js"; import type { EventHandler } from "./event-handler/index.js"; import type { emitterEventNames } from "./generated/webhook-names.js"; -import type AggregateError from "aggregate-error"; export type WebhookEventName = keyof EventPayloadMap; export type ExtractEvents = @@ -70,9 +69,13 @@ export interface State extends Options { */ export type WebhookError = Error & Partial; +export interface AggregateWebhookError extends AggregateError { + errors: WebhookError[]; +} + // todo: rename to "EmitterErrorEvent" export interface WebhookEventHandlerError - extends AggregateError { + extends AggregateWebhookError { event: TTransformed extends unknown ? EmitterWebhookEvent : EmitterWebhookEvent & TTransformed; diff --git a/src/verify-and-receive.ts b/src/verify-and-receive.ts index 3f78c07c..d162a73b 100644 --- a/src/verify-and-receive.ts +++ b/src/verify-and-receive.ts @@ -1,4 +1,3 @@ -import AggregateError from "aggregate-error"; import { verify } from "@octokit/webhooks-methods"; import type { @@ -36,7 +35,7 @@ export async function verifyAndReceive( } catch (error: any) { error.message = "Invalid JSON"; error.status = 400; - throw new AggregateError([error]); + throw new AggregateError([error], error.message); } return state.eventHandler.receive({