{"version":3,"file":"index.mjs","names":["createBaseContext"],"sources":["../../../../src/adapters/worker-threads/worker/index.ts"],"sourcesContent":["import type { MessagePort, Transferable } from 'node:worker_threads'\n\nimport type { EventContext } from '../../../context'\nimport type { DirectionalEventa, Eventa } from '../../../eventa'\n\nimport { parentPort } from 'node:worker_threads'\n\nimport { createContext as createBaseContext } from '../../../context'\nimport { and, defineInboundEventa, defineOutboundEventa, EventaFlowDirection, matchBy } from '../../../eventa'\nimport { toError } from '../../errors'\nimport { generateWorkerPayload, parseWorkerPayload } from '../../webworkers/internal'\nimport { isWorkerEventa, normalizeOnListenerParameters, workerErrorEvent } from '../../webworkers/shared'\n\nexport function createContext(options?: {\n  messagePort?: MessagePort\n}) {\n  const messagePort = options?.messagePort ?? parentPort\n  if (!messagePort) {\n    throw new Error('Node worker context requires a MessagePort (parentPort is null).')\n  }\n\n  const ctx = createBaseContext() as EventContext<\n    {\n      invokeRequest?: { transfer?: Transferable[] }\n      invokeResponse?: { transfer?: Transferable[] }\n    },\n    { raw: { message?: unknown, error?: unknown, messageError?: unknown }, transfer?: Transferable[] }\n  >\n\n  ctx.on(and(\n    matchBy((e: DirectionalEventa<any>) => e._flowDirection === EventaFlowDirection.Outbound || !e._flowDirection),\n    matchBy('*'),\n  ), (event, options) => {\n    const { body, transfer } = normalizeOnListenerParameters(event, options)\n    const data = generateWorkerPayload(event.id, { ...defineOutboundEventa(event.type), ...event, body })\n    if (transfer != null) {\n      messagePort.postMessage(data, transfer as unknown as Transferable[])\n      return\n    }\n\n    messagePort.postMessage(data)\n  })\n\n  messagePort.on('message', (message) => {\n    try {\n      const { type, payload } = parseWorkerPayload<Eventa<any>>(message)\n      if (!isWorkerEventa(payload)) {\n        ctx.emit(defineInboundEventa(type), payload.body, { raw: { message } })\n      }\n      else {\n        ctx.emit(defineInboundEventa(type), { message: payload.body }, { raw: { message } })\n      }\n    }\n    catch (error) {\n      console.error('Failed to parse Node worker message:', error)\n      ctx.emit(workerErrorEvent, { kind: 'parse', error: toError(error, 'eventa: node worker message parse error') }, { raw: { message } })\n    }\n  })\n\n  messagePort.on('error', (event) => {\n    // Fatal port error. Abort lifetime so any in-flight invoke rejects;\n    // emit the business event for non-invoke listeners.\n    const error = toError(event, 'eventa: invoke cancelled, node worker port error')\n    ctx.abort(error)\n    ctx.emit(workerErrorEvent, { kind: 'fatal', error }, { raw: { error: event } })\n  })\n\n  messagePort.on('messageerror', (event) => {\n    const error = toError(event, 'eventa: invoke cancelled, node worker port messageerror')\n    ctx.abort(error)\n    ctx.emit(workerErrorEvent, { kind: 'messageerror', error, message: event }, { raw: { messageError: event } })\n  })\n\n  return {\n    context: ctx,\n  }\n}\n\nexport { workerErrorEvent } from '../../webworkers/shared'\nexport type { AdapterErrorKind, AdapterErrorPayload } from '../../webworkers/shared'\n"],"mappings":";;;;;AAaA,SAAgB,cAAc,SAE3B;CACD,MAAM,cAAc,SAAS,eAAe;CAC5C,IAAI,CAAC,aACH,MAAM,IAAI,MAAM,kEAAkE;CAGpF,MAAM,MAAMA,gBAAkB;CAQ9B,IAAI,GAAG,IACL,SAAS,MAA8B,EAAE,mBAAA,cAAmD,CAAC,EAAE,cAAc,GAC7G,QAAQ,GAAG,CACb,IAAI,OAAO,YAAY;EACrB,MAAM,EAAE,MAAM,aAAa,8BAA8B,OAAO,OAAO;EACvE,MAAM,OAAO,sBAAsB,MAAM,IAAI;GAAE,GAAG,qBAAqB,MAAM,IAAI;GAAG,GAAG;GAAO;EAAK,CAAC;EACpG,IAAI,YAAY,MAAM;GACpB,YAAY,YAAY,MAAM,QAAqC;GACnE;EACF;EAEA,YAAY,YAAY,IAAI;CAC9B,CAAC;CAED,YAAY,GAAG,YAAY,YAAY;EACrC,IAAI;GACF,MAAM,EAAE,MAAM,YAAY,mBAAgC,OAAO;GACjE,IAAI,CAAC,eAAe,OAAO,GACzB,IAAI,KAAK,oBAAoB,IAAI,GAAG,QAAQ,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAGtE,IAAI,KAAK,oBAAoB,IAAI,GAAG,EAAE,SAAS,QAAQ,KAAK,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;EAEvF,SACO,OAAO;GACZ,QAAQ,MAAM,wCAAwC,KAAK;GAC3D,IAAI,KAAK,kBAAkB;IAAE,MAAM;IAAS,OAAO,QAAQ,OAAO,yCAAyC;GAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;EACtI;CACF,CAAC;CAED,YAAY,GAAG,UAAU,UAAU;EAGjC,MAAM,QAAQ,QAAQ,OAAO,kDAAkD;EAC/E,IAAI,MAAM,KAAK;EACf,IAAI,KAAK,kBAAkB;GAAE,MAAM;GAAS;EAAM,GAAG,EAAE,KAAK,EAAE,OAAO,MAAM,EAAE,CAAC;CAChF,CAAC;CAED,YAAY,GAAG,iBAAiB,UAAU;EACxC,MAAM,QAAQ,QAAQ,OAAO,yDAAyD;EACtF,IAAI,MAAM,KAAK;EACf,IAAI,KAAK,kBAAkB;GAAE,MAAM;GAAgB;GAAO,SAAS;EAAM,GAAG,EAAE,KAAK,EAAE,cAAc,MAAM,EAAE,CAAC;CAC9G,CAAC;CAED,OAAO,EACL,SAAS,IACX;AACF"}