{"version":3,"file":"syncHook.cjs","names":[],"sources":["../../../src/utils/hooks/syncHook.ts"],"sourcesContent":["export type Callback<T, K> = (...args: ArgsType<T>) => K;\nexport type ArgsType<T> = T extends Array<any> ? T : Array<any>;\n\nexport class SyncHook<T, K> {\n  type = '';\n  listeners = new Set<Callback<T, K>>();\n\n  constructor(type?: string) {\n    if (type) {\n      this.type = type;\n    }\n  }\n\n  on(fn: Callback<T, K>): void {\n    if (typeof fn === 'function') {\n      this.listeners.add(fn);\n    }\n  }\n\n  once(fn: Callback<T, K>): void {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const self = this;\n    this.on(function wrapper(...args) {\n      self.remove(wrapper);\n      // eslint-disable-next-line prefer-spread\n      return fn.apply(null, args);\n    });\n  }\n\n  emit(...data: ArgsType<T>): void | K | Promise<any> {\n    let result;\n    if (this.listeners.size > 0) {\n      // eslint-disable-next-line prefer-spread\n      this.listeners.forEach((fn) => {\n        const nextResult = fn(...data);\n        if (nextResult !== undefined) {\n          result = nextResult;\n        }\n      });\n    }\n    return result;\n  }\n\n  remove(fn: Callback<T, K>): void {\n    this.listeners.delete(fn);\n  }\n\n  removeAll(): void {\n    this.listeners.clear();\n  }\n}\n"],"mappings":";;AAGA,IAAa,WAAb,MAA4B;CAI1B,YAAY,MAAe;cAHpB;mCACK,IAAI,KAAqB;AAGnC,MAAI,KACF,MAAK,OAAO;;CAIhB,GAAG,IAA0B;AAC3B,MAAI,OAAO,OAAO,WAChB,MAAK,UAAU,IAAI,GAAG;;CAI1B,KAAK,IAA0B;EAE7B,MAAM,OAAO;AACb,OAAK,GAAG,SAAS,QAAQ,GAAG,MAAM;AAChC,QAAK,OAAO,QAAQ;AAEpB,UAAO,GAAG,MAAM,MAAM,KAAK;IAC3B;;CAGJ,KAAK,GAAG,MAA4C;EAClD,IAAI;AACJ,MAAI,KAAK,UAAU,OAAO,EAExB,MAAK,UAAU,SAAS,OAAO;GAC7B,MAAM,aAAa,GAAG,GAAG,KAAK;AAC9B,OAAI,eAAe,OACjB,UAAS;IAEX;AAEJ,SAAO;;CAGT,OAAO,IAA0B;AAC/B,OAAK,UAAU,OAAO,GAAG;;CAG3B,YAAkB;AAChB,OAAK,UAAU,OAAO"}