{"version":3,"sources":["../../../src/adaptors/electron/main.ts"],"sourcesContent":["import EventEmitter from 'eventemitter3'\r\n\r\nimport { BrowserWindow, ipcMain } from 'electron'\r\nimport { Adaptor, AdaptorPackageData } from '../../adaptor'\r\nimport { isRemoteAdaptorData } from '../../remote'\r\nimport { KEYOF_GET_ID, MESSENGER_EVENT_NAME } from './constants'\r\n\r\nclass RemoteEventManager extends EventEmitter<{\r\n  [key: string]: [AdaptorPackageData]\r\n}> {\r\n  EVERY_EVENT_NAME = '__remote_every__'\r\n\r\n  constructor() {\r\n    super()\r\n    ipcMain.on(MESSENGER_EVENT_NAME, (_, data) => {\r\n      if (isRemoteAdaptorData(data)) {\r\n        this.emit(data.name, data)\r\n        // 一定要抛出 every 事件，remote 包基于此处理远端的响应\r\n        this.emit(this.EVERY_EVENT_NAME, data)\r\n      }\r\n    })\r\n  }\r\n\r\n  onEvery(fn: (data: AdaptorPackageData) => void) {\r\n    this.on(this.EVERY_EVENT_NAME, fn)\r\n  }\r\n}\r\n\r\nexport function onElectronMainEmit(data: AdaptorPackageData) {\r\n  // 主进程通过 webContents 发送消息到渲染进程\r\n  const allWindows = BrowserWindow.getAllWindows()\r\n  const win = allWindows.find(\r\n    (w) => w.webContents.id.toString() === data.targetDeviceId\r\n  )\r\n  win?.webContents.send(MESSENGER_EVENT_NAME, data)\r\n}\r\n\r\ninterface Options {\r\n  onEmit?: (data: AdaptorPackageData) => void\r\n}\r\n\r\nexport function createElectronMainAdaptor(options?: Options) {\r\n  const onEmit = options?.onEmit ?? onElectronMainEmit\r\n  const remoteEventManager = new RemoteEventManager()\r\n\r\n  const adaptor: Adaptor = {\r\n    every: remoteEventManager.onEvery.bind(remoteEventManager),\r\n    on: remoteEventManager.on.bind(remoteEventManager),\r\n    once: remoteEventManager.once.bind(remoteEventManager),\r\n    off: remoteEventManager.off.bind(remoteEventManager),\r\n    emit: onEmit,\r\n  }\r\n\r\n  return adaptor\r\n}\r\n\r\nexport function initMessengerInMain() {\r\n  ipcMain.handle(KEYOF_GET_ID, (event) => event.sender.id.toString())\r\n}\r\n"],"mappings":"AAAA,OAAOA,MAAkB,gBAEzB,OAAS,iBAAAC,EAAe,WAAAC,MAAe,WAEvC,OAAS,uBAAAC,MAA2B,eACpC,OAAS,gBAAAC,EAAc,wBAAAC,MAA4B,cAEnD,MAAMC,UAA2BN,CAE9B,CACD,iBAAmB,mBAEnB,aAAc,CACZ,MAAM,EACNE,EAAQ,GAAGG,EAAsB,CAACE,EAAGC,IAAS,CACxCL,EAAoBK,CAAI,IAC1B,KAAK,KAAKA,EAAK,KAAMA,CAAI,EAEzB,KAAK,KAAK,KAAK,iBAAkBA,CAAI,EAEzC,CAAC,CACH,CAEA,QAAQC,EAAwC,CAC9C,KAAK,GAAG,KAAK,iBAAkBA,CAAE,CACnC,CACF,CAEO,SAASC,EAAmBF,EAA0B,CAG3D,MAAMG,EADaV,EAAc,cAAc,EACxB,KACpBW,GAAMA,EAAE,YAAY,GAAG,SAAS,IAAMJ,EAAK,cAC9C,EACAG,GAAA,MAAAA,EAAK,YAAY,KAAKN,EAAsBG,EAC9C,CAMO,SAASK,EAA0BC,EAAmB,CAC3D,MAAMC,GAASD,GAAA,YAAAA,EAAS,SAAUJ,EAC5BM,EAAqB,IAAIV,EAU/B,MARyB,CACvB,MAAOU,EAAmB,QAAQ,KAAKA,CAAkB,EACzD,GAAIA,EAAmB,GAAG,KAAKA,CAAkB,EACjD,KAAMA,EAAmB,KAAK,KAAKA,CAAkB,EACrD,IAAKA,EAAmB,IAAI,KAAKA,CAAkB,EACnD,KAAMD,CACR,CAGF,CAEO,SAASE,GAAsB,CACpCf,EAAQ,OAAOE,EAAec,GAAUA,EAAM,OAAO,GAAG,SAAS,CAAC,CACpE","names":["EventEmitter","BrowserWindow","ipcMain","isRemoteAdaptorData","KEYOF_GET_ID","MESSENGER_EVENT_NAME","RemoteEventManager","_","data","fn","onElectronMainEmit","win","w","createElectronMainAdaptor","options","onEmit","remoteEventManager","initMessengerInMain","event"]}