diff --git a/.changeset/merry-christmas-tree.md b/.changeset/merry-christmas-tree.md new file mode 100644 index 00000000..4e82035e --- /dev/null +++ b/.changeset/merry-christmas-tree.md @@ -0,0 +1,4 @@ +--- +"@nodesecure/scanner": patch +--- +feat(extractor): use standard error event hook \ No newline at end of file diff --git a/workspaces/scanner/src/extractors/payload.ts b/workspaces/scanner/src/extractors/payload.ts index 5178684e..39cc3c03 100644 --- a/workspaces/scanner/src/extractors/payload.ts +++ b/workspaces/scanner/src/extractors/payload.ts @@ -109,11 +109,36 @@ export class Payload[]> extends EventTarget { on( e: T, listener: ExtractorListener + ): this; + on( + e: "error", + listener: ErrorListener + ): this; + on< + TEvent extends ProbeExtractorLevel | "error", + TListener = TEvent extends ProbeExtractorLevel ? ExtractorListener : ErrorListener>( + e: TEvent, + listener: TListener ): this { + if (e === "error") { + function wrappedErrorListener(event: Event) { + const customErrorEvent = event as CustomEvent; + try { + (listener as ErrorListener)(customErrorEvent.detail); + } + catch (error) { + console.warn("Something went wrong in error listener", { cause: error }); + } + } + this.addEventListener(e, wrappedErrorListener); + + return this; + } + const wrappedListener = (event: Event) => { - const customEvent = event as CustomEvent>; + const customEvent = event as CustomEvent>; try { - listener(...customEvent.detail); + (listener as ExtractorListener)(...customEvent.detail); } catch (error) { this.#emitError(new Error(`An error occured during ${e} event`, { cause: error })); @@ -124,19 +149,6 @@ export class Payload[]> extends EventTarget { return this; } - onError(listener: (e: Error) => void) { - function wrappedListener(event: Event) { - const customErrorEvent = event as CustomEvent; - try { - listener(customErrorEvent.detail); - } - catch (error) { - console.warn("Something went wrong in error listener", { cause: error }); - } - } - this.addEventListener("error", wrappedListener); - } - #emit( event: T, ...extractionDetails: unknown[] @@ -189,6 +201,8 @@ export type ExtractorListener = ( ...events: CustomEvent>["detail"] ) => void; +type ErrorListener = (e: Error) => void; + function noop() { return void 0; } diff --git a/workspaces/scanner/test/extractors/payload.spec.ts b/workspaces/scanner/test/extractors/payload.spec.ts index 992f2647..3f818bd6 100644 --- a/workspaces/scanner/test/extractors/payload.spec.ts +++ b/workspaces/scanner/test/extractors/payload.spec.ts @@ -297,7 +297,7 @@ describe("Extractors.Payload events", () => { const packumentListenerErrors: Error[] = []; - extractor.onError((error) => { + extractor.on("error", (error) => { packumentListenerErrors.push(error.cause as Error); });