{"version":3,"file":"channel-resilient.cjs","names":["Channel","useDisposeWithUtils"],"sources":["../../../src/common/msg/channel-resilient.ts"],"sourcesContent":["import { useDisposeWithUtils } from '../dispose-utils'\nimport { Channel } from './channel'\n\n/**\n * Channel that buffers if not connected.\n * The actual channel can be removed and replaced.\n */\nexport class ResillientChannel extends Channel {\n  private channel?: Channel\n  private buffer: (Uint8Array | string)[] = []\n\n  dispose = useDisposeWithUtils()\n\n  private postMessageRaw(data: Uint8Array | string): boolean {\n    try {\n      if (this.channel?.isConnected) {\n        this.channel.postMessage(data)\n        return true\n      }\n    }\n    catch (err) {\n      // log.warn('send failed', err)\n    }\n    return false\n  }\n\n  /** Post all buffered messages */\n  flushBuffer() {\n    while (this.buffer.length) {\n      const data = this.buffer.shift()\n      if (data && !this.postMessageRaw(data)) {\n        this.buffer.unshift(data)\n        break\n      }\n    }\n  }\n\n  /** Reset buffer without force sending */\n  emptyBuffer() {\n    this.buffer = []\n  }\n\n  /**\n   * Set a new channel and flush buffer\n   */\n  setChannel(channel?: Channel) {\n    void this.dispose()\n    this.channel = channel\n    if (channel) {\n      this.dispose.add(channel.on('message', msg => this.emit('message', msg)))\n      if (channel.isConnected)\n        this.flushBuffer()\n      else\n        this.dispose.add(channel.on('connect', () => this.flushBuffer()))\n      // channel.on('close', () => this.channels.delete(channel))\n    }\n  }\n\n  /** @deprecated use `setChannel(undefined)` */\n  deleteChannel() {\n    this.setChannel()\n  }\n\n  postMessage(data: Uint8Array | string): void {\n    this.flushBuffer()\n    if (!this.postMessageRaw(data))\n      this.buffer.push(data)\n  }\n\n  get isConnected() {\n    return this.channel?.isConnected === true\n  }\n}\n"],"mappings":";;;;;;;;;AAOA,IAAa,oBAAb,cAAuCA,mCAAQ;CAC7C,AAAQ;CACR,AAAQ,SAAkC,EAAE;CAE5C,UAAUC,kDAAqB;CAE/B,AAAQ,eAAe,MAAoC;AACzD,MAAI;AACF,OAAI,KAAK,SAAS,aAAa;AAC7B,SAAK,QAAQ,YAAY,KAAK;AAC9B,WAAO;;WAGJ,KAAK;AAGZ,SAAO;;;CAIT,cAAc;AACZ,SAAO,KAAK,OAAO,QAAQ;GACzB,MAAM,OAAO,KAAK,OAAO,OAAO;AAChC,OAAI,QAAQ,CAAC,KAAK,eAAe,KAAK,EAAE;AACtC,SAAK,OAAO,QAAQ,KAAK;AACzB;;;;;CAMN,cAAc;AACZ,OAAK,SAAS,EAAE;;;;;CAMlB,WAAW,SAAmB;AAC5B,EAAK,KAAK,SAAS;AACnB,OAAK,UAAU;AACf,MAAI,SAAS;AACX,QAAK,QAAQ,IAAI,QAAQ,GAAG,YAAW,QAAO,KAAK,KAAK,WAAW,IAAI,CAAC,CAAC;AACzE,OAAI,QAAQ,YACV,MAAK,aAAa;OAElB,MAAK,QAAQ,IAAI,QAAQ,GAAG,iBAAiB,KAAK,aAAa,CAAC,CAAC;;;;CAMvE,gBAAgB;AACd,OAAK,YAAY;;CAGnB,YAAY,MAAiC;AAC3C,OAAK,aAAa;AAClB,MAAI,CAAC,KAAK,eAAe,KAAK,CAC5B,MAAK,OAAO,KAAK,KAAK;;CAG1B,IAAI,cAAc;AAChB,SAAO,KAAK,SAAS,gBAAgB"}