mirror of
https://github.com/github/codeql-action.git
synced 2025-12-27 09:40:17 +08:00
62 lines
1.8 KiB
JavaScript
62 lines
1.8 KiB
JavaScript
import { wrapErrorHandler } from "./wrap-error-handler.js";
|
|
function getHooks(state, eventPayloadAction, eventName) {
|
|
const hooks = [state.hooks[eventName], state.hooks["*"]];
|
|
if (eventPayloadAction) {
|
|
hooks.unshift(state.hooks[`${eventName}.${eventPayloadAction}`]);
|
|
}
|
|
return [].concat(...hooks.filter(Boolean));
|
|
}
|
|
function receiverHandle(state, event) {
|
|
const errorHandlers = state.hooks.error || [];
|
|
if (event instanceof Error) {
|
|
const error = Object.assign(new AggregateError([event], event.message), {
|
|
event
|
|
});
|
|
errorHandlers.forEach((handler) => wrapErrorHandler(handler, error));
|
|
return Promise.reject(error);
|
|
}
|
|
if (!event || !event.name) {
|
|
const error = new Error("Event name not passed");
|
|
throw new AggregateError([error], error.message);
|
|
}
|
|
if (!event.payload) {
|
|
const error = new Error("Event name not passed");
|
|
throw new AggregateError([error], error.message);
|
|
}
|
|
const hooks = getHooks(
|
|
state,
|
|
"action" in event.payload ? event.payload.action : null,
|
|
event.name
|
|
);
|
|
if (hooks.length === 0) {
|
|
return Promise.resolve();
|
|
}
|
|
const errors = [];
|
|
const promises = hooks.map((handler) => {
|
|
let promise = Promise.resolve(event);
|
|
if (state.transform) {
|
|
promise = promise.then(state.transform);
|
|
}
|
|
return promise.then((event2) => {
|
|
return handler(event2);
|
|
}).catch((error) => errors.push(Object.assign(error, { event })));
|
|
});
|
|
return Promise.all(promises).then(() => {
|
|
if (errors.length === 0) {
|
|
return;
|
|
}
|
|
const error = new AggregateError(
|
|
errors,
|
|
errors.map((error2) => error2.message).join("\n")
|
|
);
|
|
Object.assign(error, {
|
|
event
|
|
});
|
|
errorHandlers.forEach((handler) => wrapErrorHandler(handler, error));
|
|
throw error;
|
|
});
|
|
}
|
|
export {
|
|
receiverHandle
|
|
};
|