{"version":3,"file":"index.mjs","names":["createBaseContext"],"sources":["../../../src/adapters/webworkers/index.ts"],"sourcesContent":["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 { toError } from '../errors'\nimport { generateWorkerPayload, parseWorkerPayload } from './internal'\nimport { isWorkerEventa, normalizeOnListenerParameters, workerErrorEvent } from './shared'\n\nexport function createContext(worker: Worker) {\n  const ctx = createBaseContext() as EventContext<\n    {\n      invokeRequest?: { transfer?: Transferable[] }\n      invokeResponse?: { transfer?: Transferable[] }\n    },\n    { raw: { message?: MessageEvent, error?: ErrorEvent, messageError?: MessageEvent }, 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      worker.postMessage(data, { transfer })\n      return\n    }\n\n    worker.postMessage(data)\n  })\n\n  worker.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: { message: event } })\n      }\n      else {\n        ctx.emit(defineInboundEventa(type), { message: payload.body }, { raw: { message: 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: { message: event } })\n    }\n  }\n\n  worker.onerror = (event) => {\n    // Fatal worker error (load / syntax / runtime). Abort lifetime so any\n    // in-flight invoke rejects; emit the business event for non-invoke listeners.\n    const error = toError(event, 'eventa: invoke cancelled, webworker error')\n    ctx.abort(error)\n    ctx.emit(workerErrorEvent, { kind: 'fatal', error }, { raw: { error: event } })\n  }\n\n  worker.onmessageerror = (event) => {\n    const error = toError(event, 'eventa: invoke cancelled, webworker 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 { defineOutboundWorkerEventa, defineWorkerEventa, isWorkerEventa, workerErrorEvent } from './shared'\nexport type * from './shared'\n"],"mappings":";;;;AASA,SAAgB,cAAc,QAAgB;CAC5C,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,OAAO,YAAY,MAAM,EAAE,SAAS,CAAC;GACrC;EACF;EAEA,OAAO,YAAY,IAAI;CACzB,CAAC;CAED,OAAO,aAAa,UAAU;EAC5B,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,SAAS,MAAM,EAAE,CAAC;QAG7E,IAAI,KAAK,oBAAoB,IAAI,GAAG,EAAE,SAAS,QAAQ,KAAK,GAAG,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;EAE9F,SACO,OAAO;GACZ,QAAQ,MAAM,sCAAsC,KAAK;GACzD,IAAI,KAAK,kBAAkB;IAAE,MAAM;IAAS,OAAO,QAAQ,OAAO,uCAAuC;GAAE,GAAG,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;EAC3I;CACF;CAEA,OAAO,WAAW,UAAU;EAG1B,MAAM,QAAQ,QAAQ,OAAO,2CAA2C;EACxE,IAAI,MAAM,KAAK;EACf,IAAI,KAAK,kBAAkB;GAAE,MAAM;GAAS;EAAM,GAAG,EAAE,KAAK,EAAE,OAAO,MAAM,EAAE,CAAC;CAChF;CAEA,OAAO,kBAAkB,UAAU;EACjC,MAAM,QAAQ,QAAQ,OAAO,kDAAkD;EAC/E,IAAI,MAAM,KAAK;EACf,IAAI,KAAK,kBAAkB;GAAE,MAAM;GAAgB;GAAO,SAAS;EAAM,GAAG,EAAE,KAAK,EAAE,cAAc,MAAM,EAAE,CAAC;CAC9G;CAEA,OAAO,EACL,SAAS,IACX;AACF"}