{
  "version": 3,
  "sources": ["../src/RoomData.ts"],
  "sourcesContent": ["import { RoomCache, logger } from '@colyseus/core';\nimport Redis, { Cluster } from 'ioredis';\n\nexport class RoomData implements RoomCache {\n  public clients: number = 0;\n  public locked: boolean = false;\n  public private: boolean = false;\n  public maxClients: number = Infinity;\n  public metadata: any;\n  public name: string;\n  public publicAddress: string;\n  public processId: string;\n  public roomId: string;\n  public createdAt: Date;\n  public unlisted: boolean = false;\n\n  #client: Redis | Cluster;\n  #removed: boolean = false;\n\n  constructor(\n    initialValues: any,\n    client: Redis | Cluster\n  ) {\n    this.#client = client;\n\n    this.createdAt = (initialValues && initialValues.createdAt)\n      ? new Date(initialValues.createdAt)\n      : new Date();\n\n    for (const field in initialValues) {\n      if (initialValues.hasOwnProperty(field)) {\n        this[field] = initialValues[field];\n      }\n    }\n  }\n\n  public toJSON() {\n    return {\n      clients: this.clients,\n      createdAt: this.createdAt,\n      maxClients: this.maxClients,\n      metadata: this.metadata,\n      name: this.name,\n      publicAddress: this.publicAddress,\n      processId: this.processId,\n      roomId: this.roomId,\n    };\n  }\n\n  public async save() {\n    // skip if already removed.\n    if (this.#removed) { return; }\n\n    if (this.roomId) {\n      // FIXME: workaround so JSON.stringify() stringifies all dynamic fields.\n      const toJSON = this.toJSON;\n      this.toJSON = undefined;\n\n      const roomcache = JSON.stringify(this);\n      this.toJSON = toJSON;\n\n      await this.hset('roomcaches', this.roomId, roomcache);\n\n    } else {\n      logger.warn(\"RedisDriver: can't .save() without a `roomId`\")\n    }\n  }\n\n  public updateOne(operations: any) {\n    if (operations.$set) {\n      for (const field in operations.$set) {\n        if (operations.$set.hasOwnProperty(field)) {\n          this[field] = operations.$set[field];\n        }\n      }\n    }\n\n    if (operations.$inc) {\n      for (const field in operations.$inc) {\n        if (operations.$inc.hasOwnProperty(field)) {\n          this[field] += operations.$inc[field];\n        }\n      }\n    }\n\n    return this.save();\n  }\n\n  public remove() {\n    if (this.roomId) {\n      this.#removed = true;\n      return this.hdel('roomcaches', this.roomId);\n    }\n  }\n\n  private async hset(key: string, field: string, value: string) {\n    return await this.#client.hset(key, field, value);\n  }\n\n  private async hdel(key: string, field: string) {\n    return await this.#client.hdel(key, field);\n  }\n}\n"],
  "mappings": ";AAAA,SAAoB,cAAc;AAG3B,IAAM,WAAN,MAAoC;AAAA,EAgBzC,YACE,eACA,QACA;AAlBF,SAAO,UAAkB;AACzB,SAAO,SAAkB;AACzB,SAAO,UAAmB;AAC1B,SAAO,aAAqB;AAO5B,SAAO,WAAoB;AAG3B,oBAAoB;AAMlB,SAAK,UAAU;AAEf,SAAK,YAAa,iBAAiB,cAAc,YAC7C,IAAI,KAAK,cAAc,SAAS,IAChC,oBAAI,KAAK;AAEb,eAAW,SAAS,eAAe;AACjC,UAAI,cAAc,eAAe,KAAK,GAAG;AACvC,aAAK,KAAK,IAAI,cAAc,KAAK;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EAlBA;AAAA,EACA;AAAA,EAmBO,SAAS;AACd,WAAO;AAAA,MACL,SAAS,KAAK;AAAA,MACd,WAAW,KAAK;AAAA,MAChB,YAAY,KAAK;AAAA,MACjB,UAAU,KAAK;AAAA,MACf,MAAM,KAAK;AAAA,MACX,eAAe,KAAK;AAAA,MACpB,WAAW,KAAK;AAAA,MAChB,QAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAa,OAAO;AAElB,QAAI,KAAK,UAAU;AAAE;AAAA,IAAQ;AAE7B,QAAI,KAAK,QAAQ;AAEf,YAAM,SAAS,KAAK;AACpB,WAAK,SAAS;AAEd,YAAM,YAAY,KAAK,UAAU,IAAI;AACrC,WAAK,SAAS;AAEd,YAAM,KAAK,KAAK,cAAc,KAAK,QAAQ,SAAS;AAAA,IAEtD,OAAO;AACL,aAAO,KAAK,+CAA+C;AAAA,IAC7D;AAAA,EACF;AAAA,EAEO,UAAU,YAAiB;AAChC,QAAI,WAAW,MAAM;AACnB,iBAAW,SAAS,WAAW,MAAM;AACnC,YAAI,WAAW,KAAK,eAAe,KAAK,GAAG;AACzC,eAAK,KAAK,IAAI,WAAW,KAAK,KAAK;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAEA,QAAI,WAAW,MAAM;AACnB,iBAAW,SAAS,WAAW,MAAM;AACnC,YAAI,WAAW,KAAK,eAAe,KAAK,GAAG;AACzC,eAAK,KAAK,KAAK,WAAW,KAAK,KAAK;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAEA,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEO,SAAS;AACd,QAAI,KAAK,QAAQ;AACf,WAAK,WAAW;AAChB,aAAO,KAAK,KAAK,cAAc,KAAK,MAAM;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,MAAc,KAAK,KAAa,OAAe,OAAe;AAC5D,WAAO,MAAM,KAAK,QAAQ,KAAK,KAAK,OAAO,KAAK;AAAA,EAClD;AAAA,EAEA,MAAc,KAAK,KAAa,OAAe;AAC7C,WAAO,MAAM,KAAK,QAAQ,KAAK,KAAK,KAAK;AAAA,EAC3C;AACF;",
  "names": []
}
