@colyseus/redis-driver
Version:
<div align="center"> <a href="https://github.com/colyseus/colyseus"> <img src="media/logo.svg?raw=true" width="60%" height="300" /> </a> <br> <br> <a href="https://npmjs.com/package/colyseus"> <img src="https://img.shields.io/npm/dm/coly
8 lines (7 loc) • 4.35 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../src/Query.ts"],
"sourcesContent": ["import type { SortOptions } from '@colyseus/core';\n\nexport class Query<T> {\n private readonly rooms: Promise<T[]>;\n private conditions: any;\n protected order: Map<string, 1 | -1> = new Map();\n\n constructor(rooms: Promise<T[]>, conditions) {\n this.conditions = conditions;\n this.rooms = rooms;\n }\n\n public sort(options: SortOptions) {\n this.order.clear();\n\n const fields = Object.entries(options);\n\n if (fields.length) {\n for (const [field, direction] of fields) {\n if (direction === 1 || direction === 'asc' || direction === 'ascending') {\n this.order.set(field, 1);\n\n } else {\n this.order.set(field, -1);\n }\n }\n }\n\n return this;\n }\n\n private filterRooms(rooms: T[]): T[] {\n const conditions = Object.entries(this.conditions);\n const withConditions = conditions.length > 0;\n\n return rooms.filter((room: any) => {\n if (withConditions) {\n for (let [field, value] of conditions) {\n // Check if field exists in room (IRoomCache base fields)\n if (room.hasOwnProperty(field)) {\n if (room[field] !== value) {\n return false;\n }\n } else if (room.metadata?.hasOwnProperty(field)) {\n // Check if field exists in metadata\n if (room.metadata[field] !== value) {\n return false;\n }\n } else {\n // Field doesn't exist in room or metadata\n return false;\n }\n }\n }\n return true;\n });\n }\n\n private sortRooms(rooms: T[]): T[] {\n if (this.order.size) {\n rooms.sort((room1: any, room2: any) => {\n for (const [field, direction] of this.order) {\n // Check if field exists in room or metadata\n const val1 = room1.hasOwnProperty(field) ? room1[field] : room1.metadata?.[field];\n const val2 = room2.hasOwnProperty(field) ? room2[field] : room2.metadata?.[field];\n\n if (direction === 1) {\n if (val1 > val2) return 1;\n if (val1 < val2) return -1;\n } else {\n if (val1 > val2) return -1;\n if (val1 < val2) return 1;\n }\n }\n return 0;\n });\n }\n return rooms;\n }\n\n public all(): Promise<T[]> {\n return this.rooms.then(rooms => {\n return this.sortRooms(this.filterRooms(rooms));\n });\n }\n\n public then(resolve, reject) {\n return this.rooms.then(rooms => {\n return this.sortRooms(this.filterRooms(rooms))[0];\n }).then(resolve, reject);\n }\n}"],
"mappings": ";AAEO,IAAM,QAAN,MAAe;AAAA,EAKpB,YAAY,OAAqB,YAAY;AAF7C,SAAU,QAA6B,oBAAI,IAAI;AAG7C,SAAK,aAAa;AAClB,SAAK,QAAQ;AAAA,EACf;AAAA,EAEO,KAAK,SAAsB;AAChC,SAAK,MAAM,MAAM;AAEjB,UAAM,SAAS,OAAO,QAAQ,OAAO;AAErC,QAAI,OAAO,QAAQ;AACjB,iBAAW,CAAC,OAAO,SAAS,KAAK,QAAQ;AACvC,YAAI,cAAc,KAAK,cAAc,SAAS,cAAc,aAAa;AACvE,eAAK,MAAM,IAAI,OAAO,CAAC;AAAA,QAEzB,OAAO;AACL,eAAK,MAAM,IAAI,OAAO,EAAE;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,YAAY,OAAiB;AACnC,UAAM,aAAa,OAAO,QAAQ,KAAK,UAAU;AACjD,UAAM,iBAAiB,WAAW,SAAS;AAE3C,WAAO,MAAM,OAAO,CAAC,SAAc;AACjC,UAAI,gBAAgB;AAClB,iBAAS,CAAC,OAAO,KAAK,KAAK,YAAY;AAErC,cAAI,KAAK,eAAe,KAAK,GAAG;AAC9B,gBAAI,KAAK,KAAK,MAAM,OAAO;AACzB,qBAAO;AAAA,YACT;AAAA,UACF,WAAW,KAAK,UAAU,eAAe,KAAK,GAAG;AAE/C,gBAAI,KAAK,SAAS,KAAK,MAAM,OAAO;AAClC,qBAAO;AAAA,YACT;AAAA,UACF,OAAO;AAEL,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEQ,UAAU,OAAiB;AACjC,QAAI,KAAK,MAAM,MAAM;AACnB,YAAM,KAAK,CAAC,OAAY,UAAe;AACrC,mBAAW,CAAC,OAAO,SAAS,KAAK,KAAK,OAAO;AAE3C,gBAAM,OAAO,MAAM,eAAe,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,WAAW,KAAK;AAChF,gBAAM,OAAO,MAAM,eAAe,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM,WAAW,KAAK;AAEhF,cAAI,cAAc,GAAG;AACnB,gBAAI,OAAO,KAAM,QAAO;AACxB,gBAAI,OAAO,KAAM,QAAO;AAAA,UAC1B,OAAO;AACL,gBAAI,OAAO,KAAM,QAAO;AACxB,gBAAI,OAAO,KAAM,QAAO;AAAA,UAC1B;AAAA,QACF;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEO,MAAoB;AACzB,WAAO,KAAK,MAAM,KAAK,WAAS;AAC9B,aAAO,KAAK,UAAU,KAAK,YAAY,KAAK,CAAC;AAAA,IAC/C,CAAC;AAAA,EACH;AAAA,EAEO,KAAK,SAAS,QAAQ;AAC3B,WAAO,KAAK,MAAM,KAAK,WAAS;AAC9B,aAAO,KAAK,UAAU,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;AAAA,IAClD,CAAC,EAAE,KAAK,SAAS,MAAM;AAAA,EACzB;AACF;",
"names": []
}