{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/utils/hooks/index.ts"],"sourcesContent":["import type { SoapOptions } from '../../soap.js';\nimport type { SoapQueryHook } from './hooks.js';\n\ntype SoapQuery<Input, Output> = (\n  input: Input,\n  options?: SoapOptions,\n) => Promise<Output>;\n\nexport function applyHooks<TInput, TOutput>({\n  service,\n  query,\n  hooks,\n  queryFn,\n}: {\n  service: string;\n  query: string;\n  hooks: Array<SoapQueryHook>;\n  queryFn: SoapQuery<TInput, TOutput>;\n}) {\n  async function executeOnStartHooks({ input }: { input: TInput }) {\n    const onSuccessHooks = [];\n    const onErrorHooks = [];\n\n    for (const onRequestStart of hooks) {\n      const hookResult = await onRequestStart({ service, query, input });\n\n      if (hookResult?.onRequestSuccess) {\n        onSuccessHooks.unshift(hookResult.onRequestSuccess);\n      }\n\n      if (hookResult?.onRequestError) {\n        onErrorHooks.unshift(hookResult.onRequestError);\n      }\n    }\n\n    return { onSuccessHooks, onErrorHooks };\n  }\n\n  const executeQuery: SoapQuery<TInput, TOutput> = async function (\n    input,\n    options,\n  ) {\n    const { onSuccessHooks, onErrorHooks } = await executeOnStartHooks({\n      input,\n    });\n\n    try {\n      const result = await queryFn(input, options);\n\n      for (const onSuccess of onSuccessHooks) {\n        await onSuccess({\n          service,\n          query,\n          response: result,\n        });\n      }\n\n      return result;\n    } catch (err: unknown) {\n      for (const onError of onErrorHooks) {\n        await onError({\n          service,\n          query,\n          error:\n            err instanceof Error\n              ? err\n              : new Error('Unknown error', { cause: err }),\n        });\n      }\n\n      throw err;\n    }\n  };\n\n  return executeQuery;\n}\n"],"mappings":";AAQA,SAAgB,WAA4B,EAC1C,SACA,OACA,OACA,WAMC;CACD,eAAe,oBAAoB,EAAE,SAA4B;EAC/D,MAAM,iBAAiB,EAAE;EACzB,MAAM,eAAe,EAAE;AAEvB,OAAK,MAAM,kBAAkB,OAAO;GAClC,MAAM,aAAa,MAAM,eAAe;IAAE;IAAS;IAAO;IAAO,CAAC;AAElE,OAAI,YAAY,iBACd,gBAAe,QAAQ,WAAW,iBAAiB;AAGrD,OAAI,YAAY,eACd,cAAa,QAAQ,WAAW,eAAe;;AAInD,SAAO;GAAE;GAAgB;GAAc;;CAGzC,MAAM,eAA2C,eAC/C,OACA,SACA;EACA,MAAM,EAAE,gBAAgB,iBAAiB,MAAM,oBAAoB,EACjE,OACD,CAAC;AAEF,MAAI;GACF,MAAM,SAAS,MAAM,QAAQ,OAAO,QAAQ;AAE5C,QAAK,MAAM,aAAa,eACtB,OAAM,UAAU;IACd;IACA;IACA,UAAU;IACX,CAAC;AAGJ,UAAO;WACA,KAAc;AACrB,QAAK,MAAM,WAAW,aACpB,OAAM,QAAQ;IACZ;IACA;IACA,OACE,eAAe,QACX,MACA,IAAI,MAAM,iBAAiB,EAAE,OAAO,KAAK,CAAC;IACjD,CAAC;AAGJ,SAAM;;;AAIV,QAAO"}