@dgac/nmb2b-client
Version:
EUROCONTROL Network Manager B2B SOAP client
44 lines (43 loc) • 1.18 kB
JavaScript
//#region src/utils/hooks/index.ts
function applyHooks({ service, query, hooks, queryFn }) {
async function executeOnStartHooks({ input }) {
const onSuccessHooks = [];
const onErrorHooks = [];
for (const onRequestStart of hooks) {
const hookResult = await onRequestStart({
service,
query,
input
});
if (hookResult?.onRequestSuccess) onSuccessHooks.unshift(hookResult.onRequestSuccess);
if (hookResult?.onRequestError) onErrorHooks.unshift(hookResult.onRequestError);
}
return {
onSuccessHooks,
onErrorHooks
};
}
const executeQuery = async function(input, options) {
const { onSuccessHooks, onErrorHooks } = await executeOnStartHooks({ input });
try {
const result = await queryFn(input, options);
for (const onSuccess of onSuccessHooks) await onSuccess({
service,
query,
response: result
});
return result;
} catch (err) {
for (const onError of onErrorHooks) await onError({
service,
query,
error: err instanceof Error ? err : new Error("Unknown error", { cause: err })
});
throw err;
}
};
return executeQuery;
}
//#endregion
export { applyHooks };
//# sourceMappingURL=index.mjs.map