{"version":3,"file":"index.mjs","names":["createBaseContext"],"sources":["../../../../src/adapters/webworkers/worker/index.ts"],"sourcesContent":["/* eslint-disable no-restricted-globals */\nimport 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 { toError } from '../../errors'\nimport { generateWorkerPayload, parseWorkerPayload } from '../internal'\nimport { isWorkerEventa, normalizeOnListenerParameters, workerErrorEvent } from '../shared'\n\nexport function createContext(options?: {\n  messagePort?: Omit<Worker, 'close' | 'start'>\n}) {\n  const {\n    messagePort = self,\n  } = options || {}\n\n  const ctx = createBaseContext() as EventContext<\n    {\n      invokeRequest?: { transfer?: Transferable[] }\n      invokeResponse?: { transfer?: Transferable[] }\n    },\n    {\n      raw: { event?: any, error?: string | Event }\n      transfer?: Transferable[]\n    }\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 })\n      return\n    }\n\n    messagePort.postMessage(data)\n  })\n\n  self.onerror = (event) => {\n    // Fatal worker-side 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, webworker self error')\n    ctx.abort(error)\n    ctx.emit(workerErrorEvent, { kind: 'fatal', error }, { raw: { error: event } })\n  }\n\n  self.onmessage = (event) => {\n    try {\n      const { type, payload } = parseWorkerPayload<Eventa<any>>(event.data)\n      if (!isWorkerEventa(payload)) {\n        ctx.emit(defineInboundEventa(type), payload.body, { raw: { event } })\n      }\n      else {\n        ctx.emit(defineInboundEventa(type), { message: payload.body }, { raw: { event } })\n      }\n    }\n    catch (error) {\n      console.error('Failed to parse WebWorker message:', error)\n      ctx.emit(workerErrorEvent, { kind: 'parse', error: toError(error, 'eventa: webworker message parse error') }, { raw: { event } })\n    }\n  }\n\n  return {\n    context: ctx,\n  }\n}\n\nexport { workerErrorEvent } from '../shared'\nexport type { AdapterErrorKind, AdapterErrorPayload } from '../shared'\n"],"mappings":";;;;AAUA,SAAgB,cAAc,SAE3B;CACD,MAAM,EACJ,cAAc,SACZ,WAAW,CAAC;CAEhB,MAAM,MAAMA,gBAAkB;CAW9B,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,EAAE,SAAS,CAAC;GAC1C;EACF;EAEA,YAAY,YAAY,IAAI;CAC9B,CAAC;CAED,KAAK,WAAW,UAAU;EAGxB,MAAM,QAAQ,QAAQ,OAAO,gDAAgD;EAC7E,IAAI,MAAM,KAAK;EACf,IAAI,KAAK,kBAAkB;GAAE,MAAM;GAAS;EAAM,GAAG,EAAE,KAAK,EAAE,OAAO,MAAM,EAAE,CAAC;CAChF;CAEA,KAAK,aAAa,UAAU;EAC1B,IAAI;GACF,MAAM,EAAE,MAAM,YAAY,mBAAgC,MAAM,IAAI;GACpE,IAAI,CAAC,eAAe,OAAO,GACzB,IAAI,KAAK,oBAAoB,IAAI,GAAG,QAAQ,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAGpE,IAAI,KAAK,oBAAoB,IAAI,GAAG,EAAE,SAAS,QAAQ,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;EAErF,SACO,OAAO;GACZ,QAAQ,MAAM,sCAAsC,KAAK;GACzD,IAAI,KAAK,kBAAkB;IAAE,MAAM;IAAS,OAAO,QAAQ,OAAO,uCAAuC;GAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;EAClI;CACF;CAEA,OAAO,EACL,SAAS,IACX;AACF"}