Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .changeset/merry-christmas-tree.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
"@nodesecure/scanner": patch
---
feat(extractor): use standard error event hook
44 changes: 29 additions & 15 deletions workspaces/scanner/src/extractors/payload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,36 @@ export class Payload<T extends ProbeExtractor<any>[]> extends EventTarget {
on<T extends ProbeExtractorLevel>(
e: T,
listener: ExtractorListener<T>
): this;
on(
e: "error",
listener: ErrorListener
): this;
on<
TEvent extends ProbeExtractorLevel | "error",
TListener = TEvent extends ProbeExtractorLevel ? ExtractorListener<TEvent> : ErrorListener>(
e: TEvent,
listener: TListener
): this {
if (e === "error") {
function wrappedErrorListener(event: Event) {
const customErrorEvent = event as CustomEvent<Error>;
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<ExtractorCallbackParams<T>>;
const customEvent = event as CustomEvent<ExtractorCallbackParams<ProbeExtractorLevel>>;
try {
listener(...customEvent.detail);
(listener as ExtractorListener<ProbeExtractorLevel>)(...customEvent.detail);
}
catch (error) {
this.#emitError(new Error(`An error occured during ${e} event`, { cause: error }));
Expand All @@ -124,19 +149,6 @@ export class Payload<T extends ProbeExtractor<any>[]> extends EventTarget {
return this;
}

onError(listener: (e: Error) => void) {
function wrappedListener(event: Event) {
const customErrorEvent = event as CustomEvent<Error>;
try {
listener(customErrorEvent.detail);
}
catch (error) {
console.warn("Something went wrong in error listener", { cause: error });
}
}
this.addEventListener("error", wrappedListener);
}

#emit<T extends ProbeExtractorLevel>(
event: T,
...extractionDetails: unknown[]
Expand Down Expand Up @@ -189,6 +201,8 @@ export type ExtractorListener<T extends ProbeExtractorLevel> = (
...events: CustomEvent<ExtractorCallbackParams<T>>["detail"]
) => void;

type ErrorListener = (e: Error) => void;

function noop() {
return void 0;
}
2 changes: 1 addition & 1 deletion workspaces/scanner/test/extractors/payload.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ describe("Extractors.Payload events", () => {

const packumentListenerErrors: Error[] = [];

extractor.onError((error) => {
extractor.on("error", (error) => {
packumentListenerErrors.push(error.cause as Error);
});

Expand Down