{"version":3,"file":"chainEventHandlers.mjs","names":["chainEventHandlers","first","rest","result","obj","key","value","prev","args"],"sources":["src/chainEventHandlers.ts"],"sourcesContent":["type Assign<A, B> = {\n  [K in keyof A | keyof B]: K extends keyof A ?\n    K extends keyof B ?\n      NonNullable<A[K]> extends (...args: any[]) => any ?\n        NonNullable<B[K]> extends (...args: any[]) => any ?\n          A[K] | B[K]\n        : B[K]\n      : B[K]\n    : A[K]\n  : K extends keyof B ? B[K]\n  : never\n}\n\ntype MergeObjectsArray<T extends object[]> =\n  T extends [infer F, ...infer R] ?\n    Assign<F, R extends object[] ? MergeObjectsArray<R> : NonNullable<unknown>>\n  : NonNullable<unknown>\n\ntype PrettyObject<T> = { [K in keyof T]: T[K] } & NonNullable<unknown>\n\nexport function chainEventHandlers<\n  First extends Record<string, any>,\n  Rest extends Record<string, any>[],\n>(\n  first: First,\n  ...rest: Rest\n): PrettyObject<MergeObjectsArray<[First, ...Rest]>> {\n  const result: Record<string, any> = { ...first }\n  for (const obj of rest) {\n    for (const key in obj) {\n      const value = obj[key]\n      const prev = result[key]\n      if (typeof prev === 'function' && typeof value === 'function') {\n        result[key] = (...args: any[]) => {\n          prev(...args)\n          return value(...args)\n        }\n      } else {\n        result[key] = value\n      }\n    }\n  }\n  return result as MergeObjectsArray<[First, ...Rest]>\n}\n"],"mappings":"AAoBA,OAAO,SAASA,kBAAkBA,CAIhCC,KAAY,EACZ,GAAGC,IAAU,EACsC;EACnD,MAAMC,MAA2B,GAAG;IAAE,GAAGF;EAAM,CAAC;EAChD,KAAK,MAAMG,GAAG,IAAIF,IAAI,EAAE;IACtB,KAAK,MAAMG,GAAG,IAAID,GAAG,EAAE;MACrB,MAAME,KAAK,GAAGF,GAAG,CAACC,GAAG,CAAC;MACtB,MAAME,IAAI,GAAGJ,MAAM,CAACE,GAAG,CAAC;MACxB,IAAI,OAAOE,IAAI,KAAK,UAAU,IAAI,OAAOD,KAAK,KAAK,UAAU,EAAE;QAC7DH,MAAM,CAACE,GAAG,CAAC,GAAG,CAAC,GAAGG,IAAW,KAAK;UAChCD,IAAI,CAAC,GAAGC,IAAI,CAAC;UACb,OAAOF,KAAK,CAAC,GAAGE,IAAI,CAAC;QACvB,CAAC;MACH,CAAC,MAAM;QACLL,MAAM,CAACE,GAAG,CAAC,GAAGC,KAAK;MACrB;IACF;EACF;EACA,OAAOH,MAAM;AACf","ignoreList":[]}
