{
  "version": 3,
  "sources": ["../../../../src/matchmaker/driver/local/RoomData.ts"],
  "sourcesContent": ["import { spliceOne } from '../../../utils/Utils.js';\nimport { RoomCache, IRoomCache } from '../api.js';\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  private $rooms: RoomCache[];\n\n  constructor(initialValues: any, rooms: IRoomCache[]) {\n    this.createdAt = new Date();\n\n    for (const field in initialValues) {\n      if (initialValues.hasOwnProperty(field)) {\n        this[field] = initialValues[field];\n      }\n    }\n\n    // make $rooms non-enumerable, so it can be serialized (circular references)\n    Object.defineProperty(this, \"$rooms\", {\n      value: rooms,\n      enumerable: false,\n      writable: true,\n    });\n  }\n\n  public save() {\n    if (this.$rooms.indexOf(this) === -1) {\n      this.$rooms.push(this);\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\n  public remove() {\n    //\n    // WORKAROUND: prevent calling `.remove()` multiple times\n    // Seems to happen during disconnect + dispose: https://github.com/colyseus/colyseus/issues/390\n    //\n    if (!this.$rooms) { return; }\n\n    const roomIndex = this.$rooms.indexOf(this);\n    if (roomIndex === -1) { return; }\n\n    spliceOne(this.$rooms, roomIndex);\n    this.$rooms = null;\n  }\n}\n"],
  "mappings": ";AAAA,SAAS,iBAAiB;AAGnB,IAAM,WAAN,MAAoC;AAAA,EAezC,YAAY,eAAoB,OAAqB;AAdrD,SAAO,UAAkB;AACzB,SAAO,SAAkB;AACzB,SAAO,UAAmB;AAC1B,SAAO,aAAqB;AAO5B,SAAO,WAAoB;AAKzB,SAAK,YAAY,oBAAI,KAAK;AAE1B,eAAW,SAAS,eAAe;AACjC,UAAI,cAAc,eAAe,KAAK,GAAG;AACvC,aAAK,KAAK,IAAI,cAAc,KAAK;AAAA,MACnC;AAAA,IACF;AAGA,WAAO,eAAe,MAAM,UAAU;AAAA,MACpC,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEO,OAAO;AACZ,QAAI,KAAK,OAAO,QAAQ,IAAI,MAAM,IAAI;AACpC,WAAK,OAAO,KAAK,IAAI;AAAA,IACvB;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;AAAA,EACF;AAAA,EAEO,SAAS;AAKd,QAAI,CAAC,KAAK,QAAQ;AAAE;AAAA,IAAQ;AAE5B,UAAM,YAAY,KAAK,OAAO,QAAQ,IAAI;AAC1C,QAAI,cAAc,IAAI;AAAE;AAAA,IAAQ;AAEhC,cAAU,KAAK,QAAQ,SAAS;AAChC,SAAK,SAAS;AAAA,EAChB;AACF;",
  "names": []
}
