{"version":3,"sources":["../../../src/api/subscribable/BaseSubject.ts"],"sourcesContent":["import { Unsubscribe } from \"../../types/Unsubscribe\";\n\nexport abstract class BaseSubject {\n  private _subscriptions = new Set<() => void>();\n  private _connection: Unsubscribe | undefined;\n\n  protected get isConnected() {\n    return !!this._connection;\n  }\n\n  protected abstract _connect(): Unsubscribe;\n\n  protected notifySubscribers() {\n    for (const callback of this._subscriptions) callback();\n  }\n\n  private _updateConnection() {\n    if (this._subscriptions.size > 0) {\n      if (this._connection) return;\n      this._connection = this._connect();\n    } else {\n      this._connection?.();\n      this._connection = undefined;\n    }\n  }\n\n  public subscribe(callback: () => void) {\n    this._subscriptions.add(callback);\n    this._updateConnection();\n\n    return () => {\n      this._subscriptions.delete(callback);\n      this._updateConnection();\n    };\n  }\n}\n"],"mappings":";AAEO,IAAe,cAAf,MAA2B;AAAA,EACxB,iBAAiB,oBAAI,IAAgB;AAAA,EACrC;AAAA,EAER,IAAc,cAAc;AAC1B,WAAO,CAAC,CAAC,KAAK;AAAA,EAChB;AAAA,EAIU,oBAAoB;AAC5B,eAAW,YAAY,KAAK,eAAgB,UAAS;AAAA,EACvD;AAAA,EAEQ,oBAAoB;AAC1B,QAAI,KAAK,eAAe,OAAO,GAAG;AAChC,UAAI,KAAK,YAAa;AACtB,WAAK,cAAc,KAAK,SAAS;AAAA,IACnC,OAAO;AACL,WAAK,cAAc;AACnB,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEO,UAAU,UAAsB;AACrC,SAAK,eAAe,IAAI,QAAQ;AAChC,SAAK,kBAAkB;AAEvB,WAAO,MAAM;AACX,WAAK,eAAe,OAAO,QAAQ;AACnC,WAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AACF;","names":[]}