{"version":3,"file":"index.mjs","names":["createBaseContext"],"sources":["../../../src/adapters/event-emitter/internal.ts","../../../src/adapters/event-emitter/shared.ts","../../../src/adapters/event-emitter/index.ts"],"sourcesContent":["import type { EventTag } from '../..'\nimport type { Payload as CustomEventDetailDetail } from './shared'\n\nimport { nanoid } from '../..'\n\nexport function generatePayload<T>(type: EventTag<any, any>, payload: T): CustomEventDetailDetail<T> {\n  return {\n    id: nanoid(),\n    type,\n    payload,\n  }\n}\n\nexport function parsePayload<T>(data: unknown): CustomEventDetailDetail<T> {\n  return data as CustomEventDetailDetail<T>\n}\n","import type { EventTag } from '../../eventa'\n\nimport { defineEventa } from '../../eventa'\n\nexport interface Payload<T> {\n  id: string\n  type: EventTag<any, any>\n  payload: T\n}\n\nexport const errorEvent = { ...defineEventa<{ error: unknown }>() }\n","import type { EventContext } from '../../context'\nimport type { DirectionalEventa, Eventa } from '../../eventa'\n\nimport { createContext as createBaseContext } from '../../context'\nimport { and, defineInboundEventa, defineOutboundEventa, EventaFlowDirection, matchBy } from '../../eventa'\nimport { generatePayload, parsePayload } from './internal'\nimport { errorEvent } from './shared'\n\nfunction withRemoval(eventTarget: NodeJS.EventEmitter, type: string, listener: Parameters<NodeJS.EventEmitter['on']>[1]) {\n  eventTarget.on(type, listener)\n\n  return {\n    remove: () => {\n      eventTarget.off(type, listener)\n    },\n  }\n}\n\nexport function createContext(eventTarget: NodeJS.EventEmitter, options?: {\n  messageEventName?: string | false\n  errorEventName?: string | false\n  extraListeners?: Record<string, (event: Event) => void | Promise<void>>\n}) {\n  const ctx = createBaseContext() as EventContext<any, { raw: { event: CustomEvent | Event | unknown } }>\n\n  const {\n    messageEventName = 'message',\n    errorEventName = 'error',\n    extraListeners = {},\n  } = options || {}\n\n  const cleanupRemoval: Array<{ remove: () => void }> = []\n\n  ctx.on(and(\n    matchBy((e: DirectionalEventa<any>) => e._flowDirection === EventaFlowDirection.Outbound || !e._flowDirection),\n    matchBy('*'),\n  ), (event) => {\n    const detail = generatePayload(event.id, { ...defineOutboundEventa(event.type), ...event })\n    eventTarget.emit(event.id, detail)\n  })\n\n  if (messageEventName) {\n    cleanupRemoval.push(withRemoval(eventTarget, messageEventName, (event) => {\n      try {\n        const { type, payload } = parsePayload<Eventa<any>>((event as CustomEvent).detail)\n        ctx.emit(defineInboundEventa(type), payload.body, { raw: { event } })\n      }\n      catch (error) {\n        console.error('Failed to parse EventEmitter message:', error)\n        ctx.emit(errorEvent, { error }, { raw: { event } })\n      }\n    }))\n  }\n\n  if (errorEventName) {\n    cleanupRemoval.push(withRemoval(eventTarget, errorEventName, (error) => {\n      ctx.emit(errorEvent, { error }, { raw: { event: error } })\n    }))\n  }\n\n  for (const [eventName, listener] of Object.entries(extraListeners)) {\n    cleanupRemoval.push(withRemoval(eventTarget, eventName, listener))\n  }\n\n  return {\n    context: ctx,\n    dispose: (reason?: unknown) => {\n      ctx.abort(reason ?? new Error('eventa: invoke cancelled, EventEmitter adapter disposed'))\n      cleanupRemoval.forEach(removal => removal.remove())\n    },\n  }\n}\n\nexport type * from './shared'\n"],"mappings":";;;AAKA,SAAgB,gBAAmB,MAA0B,SAAwC;CACnG,OAAO;EACL,IAAI,OAAO;EACX;EACA;CACF;AACF;AAEA,SAAgB,aAAgB,MAA2C;CACzE,OAAO;AACT;;;ACLA,MAAa,aAAa,EAAE,GAAG,aAAiC,EAAE;;;ACFlE,SAAS,YAAY,aAAkC,MAAc,UAAoD;CACvH,YAAY,GAAG,MAAM,QAAQ;CAE7B,OAAO,EACL,cAAc;EACZ,YAAY,IAAI,MAAM,QAAQ;CAChC,EACF;AACF;AAEA,SAAgB,cAAc,aAAkC,SAI7D;CACD,MAAM,MAAMA,gBAAkB;CAE9B,MAAM,EACJ,mBAAmB,WACnB,iBAAiB,SACjB,iBAAiB,CAAC,MAChB,WAAW,CAAC;CAEhB,MAAM,iBAAgD,CAAC;CAEvD,IAAI,GAAG,IACL,SAAS,MAA8B,EAAE,mBAAA,cAAmD,CAAC,EAAE,cAAc,GAC7G,QAAQ,GAAG,CACb,IAAI,UAAU;EACZ,MAAM,SAAS,gBAAgB,MAAM,IAAI;GAAE,GAAG,qBAAqB,MAAM,IAAI;GAAG,GAAG;EAAM,CAAC;EAC1F,YAAY,KAAK,MAAM,IAAI,MAAM;CACnC,CAAC;CAED,IAAI,kBACF,eAAe,KAAK,YAAY,aAAa,mBAAmB,UAAU;EACxE,IAAI;GACF,MAAM,EAAE,MAAM,YAAY,aAA2B,MAAsB,MAAM;GACjF,IAAI,KAAK,oBAAoB,IAAI,GAAG,QAAQ,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;EACtE,SACO,OAAO;GACZ,QAAQ,MAAM,yCAAyC,KAAK;GAC5D,IAAI,KAAK,YAAY,EAAE,MAAM,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;EACpD;CACF,CAAC,CAAC;CAGJ,IAAI,gBACF,eAAe,KAAK,YAAY,aAAa,iBAAiB,UAAU;EACtE,IAAI,KAAK,YAAY,EAAE,MAAM,GAAG,EAAE,KAAK,EAAE,OAAO,MAAM,EAAE,CAAC;CAC3D,CAAC,CAAC;CAGJ,KAAK,MAAM,CAAC,WAAW,aAAa,OAAO,QAAQ,cAAc,GAC/D,eAAe,KAAK,YAAY,aAAa,WAAW,QAAQ,CAAC;CAGnE,OAAO;EACL,SAAS;EACT,UAAU,WAAqB;GAC7B,IAAI,MAAM,0BAAU,IAAI,MAAM,yDAAyD,CAAC;GACxF,eAAe,SAAQ,YAAW,QAAQ,OAAO,CAAC;EACpD;CACF;AACF"}