@colyseus/core 0.17.2 → 0.17.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/package.json +5 -5
  2. package/build/matchmaker/driver/api.js +0 -48
  3. package/build/matchmaker/driver/api.js.map +0 -7
  4. package/build/matchmaker/driver/api.mjs +0 -24
  5. package/build/matchmaker/driver/api.mjs.map +0 -7
  6. package/build/matchmaker/driver/local/LocalDriver.js +0 -94
  7. package/build/matchmaker/driver/local/LocalDriver.js.map +0 -7
  8. package/build/matchmaker/driver/local/LocalDriver.mjs +0 -71
  9. package/build/matchmaker/driver/local/LocalDriver.mjs.map +0 -7
  10. package/build/matchmaker/driver/local/Query.js +0 -111
  11. package/build/matchmaker/driver/local/Query.js.map +0 -7
  12. package/build/matchmaker/driver/local/Query.mjs +0 -88
  13. package/build/matchmaker/driver/local/Query.mjs.map +0 -7
  14. package/build/matchmaker/routes.js +0 -79
  15. package/build/matchmaker/routes.js.map +0 -7
  16. package/build/matchmaker/routes.mjs +0 -45
  17. package/build/matchmaker/routes.mjs.map +0 -7
  18. package/build/rooms/createRoom.js +0 -51
  19. package/build/rooms/createRoom.js.map +0 -7
  20. package/build/rooms/createRoom.mjs +0 -28
  21. package/build/rooms/createRoom.mjs.map +0 -7
  22. package/build/src/matchmaker/driver/api.d.ts +0 -145
  23. package/build/src/matchmaker/driver/local/LocalDriver.d.ts +0 -17
  24. package/build/src/matchmaker/driver/local/Query.d.ts +0 -12
  25. package/build/src/matchmaker/routes.d.ts +0 -92
  26. package/build/src/rooms/createRoom.d.ts +0 -65
  27. /package/build/{Debug.js → Debug.cjs} +0 -0
  28. /package/build/{Debug.js.map → Debug.cjs.map} +0 -0
  29. /package/build/{src/Debug.d.ts → Debug.d.ts} +0 -0
  30. /package/build/{IPC.js → IPC.cjs} +0 -0
  31. /package/build/{IPC.js.map → IPC.cjs.map} +0 -0
  32. /package/build/{src/IPC.d.ts → IPC.d.ts} +0 -0
  33. /package/build/{Logger.js → Logger.cjs} +0 -0
  34. /package/build/{Logger.js.map → Logger.cjs.map} +0 -0
  35. /package/build/{src/Logger.d.ts → Logger.d.ts} +0 -0
  36. /package/build/{MatchMaker.js → MatchMaker.cjs} +0 -0
  37. /package/build/{MatchMaker.js.map → MatchMaker.cjs.map} +0 -0
  38. /package/build/{src/MatchMaker.d.ts → MatchMaker.d.ts} +0 -0
  39. /package/build/{Protocol.js → Protocol.cjs} +0 -0
  40. /package/build/{Protocol.js.map → Protocol.cjs.map} +0 -0
  41. /package/build/{src/Protocol.d.ts → Protocol.d.ts} +0 -0
  42. /package/build/{Room.js → Room.cjs} +0 -0
  43. /package/build/{Room.js.map → Room.cjs.map} +0 -0
  44. /package/build/{src/Room.d.ts → Room.d.ts} +0 -0
  45. /package/build/{Server.js → Server.cjs} +0 -0
  46. /package/build/{Server.js.map → Server.cjs.map} +0 -0
  47. /package/build/{src/Server.d.ts → Server.d.ts} +0 -0
  48. /package/build/{Stats.js → Stats.cjs} +0 -0
  49. /package/build/{Stats.js.map → Stats.cjs.map} +0 -0
  50. /package/build/{src/Stats.d.ts → Stats.d.ts} +0 -0
  51. /package/build/{Transport.js → Transport.cjs} +0 -0
  52. /package/build/{Transport.js.map → Transport.cjs.map} +0 -0
  53. /package/build/{src/Transport.d.ts → Transport.d.ts} +0 -0
  54. /package/build/errors/{RoomExceptions.js → RoomExceptions.cjs} +0 -0
  55. /package/build/errors/{RoomExceptions.js.map → RoomExceptions.cjs.map} +0 -0
  56. /package/build/{src/errors → errors}/RoomExceptions.d.ts +0 -0
  57. /package/build/errors/{SeatReservationError.js → SeatReservationError.cjs} +0 -0
  58. /package/build/errors/{SeatReservationError.js.map → SeatReservationError.cjs.map} +0 -0
  59. /package/build/{src/errors → errors}/SeatReservationError.d.ts +0 -0
  60. /package/build/errors/{ServerError.js → ServerError.cjs} +0 -0
  61. /package/build/errors/{ServerError.js.map → ServerError.cjs.map} +0 -0
  62. /package/build/{src/errors → errors}/ServerError.d.ts +0 -0
  63. /package/build/{index.js → index.cjs} +0 -0
  64. /package/build/{index.js.map → index.cjs.map} +0 -0
  65. /package/build/{src/index.d.ts → index.d.ts} +0 -0
  66. /package/build/matchmaker/{Lobby.js → Lobby.cjs} +0 -0
  67. /package/build/matchmaker/{Lobby.js.map → Lobby.cjs.map} +0 -0
  68. /package/build/{src/matchmaker → matchmaker}/Lobby.d.ts +0 -0
  69. /package/build/matchmaker/LocalDriver/{LocalDriver.js → LocalDriver.cjs} +0 -0
  70. /package/build/matchmaker/LocalDriver/{LocalDriver.js.map → LocalDriver.cjs.map} +0 -0
  71. /package/build/{src/matchmaker → matchmaker}/LocalDriver/LocalDriver.d.ts +0 -0
  72. /package/build/matchmaker/LocalDriver/{Query.js → Query.cjs} +0 -0
  73. /package/build/matchmaker/LocalDriver/{Query.js.map → Query.cjs.map} +0 -0
  74. /package/build/{src/matchmaker → matchmaker}/LocalDriver/Query.d.ts +0 -0
  75. /package/build/matchmaker/{RegisteredHandler.js → RegisteredHandler.cjs} +0 -0
  76. /package/build/matchmaker/{RegisteredHandler.js.map → RegisteredHandler.cjs.map} +0 -0
  77. /package/build/{src/matchmaker → matchmaker}/RegisteredHandler.d.ts +0 -0
  78. /package/build/matchmaker/{controller.js → controller.cjs} +0 -0
  79. /package/build/matchmaker/{controller.js.map → controller.cjs.map} +0 -0
  80. /package/build/{src/matchmaker → matchmaker}/controller.d.ts +0 -0
  81. /package/build/matchmaker/{driver.js → driver.cjs} +0 -0
  82. /package/build/matchmaker/{driver.js.map → driver.cjs.map} +0 -0
  83. /package/build/{src/matchmaker → matchmaker}/driver.d.ts +0 -0
  84. /package/build/presence/{LocalPresence.js → LocalPresence.cjs} +0 -0
  85. /package/build/presence/{LocalPresence.js.map → LocalPresence.cjs.map} +0 -0
  86. /package/build/{src/presence → presence}/LocalPresence.d.ts +0 -0
  87. /package/build/presence/{Presence.js → Presence.cjs} +0 -0
  88. /package/build/presence/{Presence.js.map → Presence.cjs.map} +0 -0
  89. /package/build/{src/presence → presence}/Presence.d.ts +0 -0
  90. /package/build/rooms/{LobbyRoom.js → LobbyRoom.cjs} +0 -0
  91. /package/build/rooms/{LobbyRoom.js.map → LobbyRoom.cjs.map} +0 -0
  92. /package/build/{src/rooms → rooms}/LobbyRoom.d.ts +0 -0
  93. /package/build/rooms/{RankedQueueRoom.js → RankedQueueRoom.cjs} +0 -0
  94. /package/build/rooms/{RankedQueueRoom.js.map → RankedQueueRoom.cjs.map} +0 -0
  95. /package/build/{src/rooms → rooms}/RankedQueueRoom.d.ts +0 -0
  96. /package/build/rooms/{RelayRoom.js → RelayRoom.cjs} +0 -0
  97. /package/build/rooms/{RelayRoom.js.map → RelayRoom.cjs.map} +0 -0
  98. /package/build/{src/rooms → rooms}/RelayRoom.d.ts +0 -0
  99. /package/build/router/{default_routes.js → default_routes.cjs} +0 -0
  100. /package/build/router/{default_routes.js.map → default_routes.cjs.map} +0 -0
  101. /package/build/{src/router → router}/default_routes.d.ts +0 -0
  102. /package/build/router/{index.js → index.cjs} +0 -0
  103. /package/build/router/{index.js.map → index.cjs.map} +0 -0
  104. /package/build/{src/router → router}/index.d.ts +0 -0
  105. /package/build/serializer/{NoneSerializer.js → NoneSerializer.cjs} +0 -0
  106. /package/build/serializer/{NoneSerializer.js.map → NoneSerializer.cjs.map} +0 -0
  107. /package/build/{src/serializer → serializer}/NoneSerializer.d.ts +0 -0
  108. /package/build/serializer/{SchemaSerializer.js → SchemaSerializer.cjs} +0 -0
  109. /package/build/serializer/{SchemaSerializer.js.map → SchemaSerializer.cjs.map} +0 -0
  110. /package/build/{src/serializer → serializer}/SchemaSerializer.d.ts +0 -0
  111. /package/build/serializer/{SchemaSerializerDebug.js → SchemaSerializerDebug.cjs} +0 -0
  112. /package/build/serializer/{SchemaSerializerDebug.js.map → SchemaSerializerDebug.cjs.map} +0 -0
  113. /package/build/{src/serializer → serializer}/SchemaSerializerDebug.d.ts +0 -0
  114. /package/build/serializer/{Serializer.js → Serializer.cjs} +0 -0
  115. /package/build/serializer/{Serializer.js.map → Serializer.cjs.map} +0 -0
  116. /package/build/{src/serializer → serializer}/Serializer.d.ts +0 -0
  117. /package/build/utils/{DevMode.js → DevMode.cjs} +0 -0
  118. /package/build/utils/{DevMode.js.map → DevMode.cjs.map} +0 -0
  119. /package/build/{src/utils → utils}/DevMode.d.ts +0 -0
  120. /package/build/utils/{StandardSchema.js → StandardSchema.cjs} +0 -0
  121. /package/build/utils/{StandardSchema.js.map → StandardSchema.cjs.map} +0 -0
  122. /package/build/{src/utils → utils}/StandardSchema.d.ts +0 -0
  123. /package/build/utils/{Utils.js → Utils.cjs} +0 -0
  124. /package/build/utils/{Utils.js.map → Utils.cjs.map} +0 -0
  125. /package/build/{src/utils → utils}/Utils.d.ts +0 -0
  126. /package/build/utils/{nanoevents.js → nanoevents.cjs} +0 -0
  127. /package/build/utils/{nanoevents.js.map → nanoevents.cjs.map} +0 -0
  128. /package/build/{src/utils → utils}/nanoevents.d.ts +0 -0
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@colyseus/core",
3
- "version": "0.17.2",
3
+ "version": "0.17.4",
4
4
  "description": "Multiplayer Framework for Node.js.",
5
5
  "type": "module",
6
6
  "input": "./src/index.ts",
7
- "main": "./build/index.js",
7
+ "main": "./build/index.cjs",
8
8
  "module": "./src/index.ts",
9
9
  "typings": "./build/index.d.ts",
10
10
  "exports": {
@@ -12,13 +12,13 @@
12
12
  "@source": "./src/index.ts",
13
13
  "types": "./build/index.d.ts",
14
14
  "import": "./build/index.mjs",
15
- "require": "./build/index.js"
15
+ "require": "./build/index.cjs"
16
16
  },
17
17
  "./*": {
18
18
  "@source": "./src/*.ts",
19
19
  "types": "./build/*.d.ts",
20
20
  "import": "./build/*.mjs",
21
- "require": "./build/*.js"
21
+ "require": "./build/*.cjs"
22
22
  }
23
23
  },
24
24
  "funding": "https://github.com/sponsors/endel",
@@ -51,7 +51,7 @@
51
51
  "debug": "^4.3.4",
52
52
  "nanoid": "^3.3.11",
53
53
  "@colyseus/better-call": "^1.0.26",
54
- "@colyseus/greeting-banner": "^3.0.2"
54
+ "@colyseus/greeting-banner": "^3.0.4"
55
55
  },
56
56
  "devDependencies": {
57
57
  "@colyseus/schema": "^4.0.1"
@@ -1,48 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var api_exports = {};
20
- __export(api_exports, {
21
- getLockId: () => getLockId,
22
- initializeRoomCache: () => initializeRoomCache
23
- });
24
- module.exports = __toCommonJS(api_exports);
25
- function getLockId(filterOptions) {
26
- return Object.keys(filterOptions).map((key) => `${key}:${filterOptions[key]}`).join("-");
27
- }
28
- function initializeRoomCache(initialValues = {}) {
29
- return {
30
- clients: 0,
31
- maxClients: Infinity,
32
- locked: false,
33
- private: false,
34
- metadata: void 0,
35
- // name: '',
36
- // publicAddress: '',
37
- // processId: '',
38
- // roomId: '',
39
- createdAt: initialValues && initialValues.createdAt ? new Date(initialValues.createdAt) : /* @__PURE__ */ new Date(),
40
- unlisted: false,
41
- ...initialValues
42
- };
43
- }
44
- // Annotate the CommonJS export names for ESM import in node:
45
- 0 && (module.exports = {
46
- getLockId,
47
- initializeRoomCache
48
- });
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/matchmaker/driver/api.ts"],
4
- "sourcesContent": ["import type { Room } from \"@colyseus/core\";\nimport type { Type } from \"../../utils/Utils.ts\";\n\n/**\n * Sort options for room queries.\n */\nexport interface SortOptions {\n [fieldName: string]: 1 | -1 | 'asc' | 'desc' | 'ascending' | 'descending';\n}\n\n/**\n * Built-in room cache fields that can be used for sorting.\n */\nexport type IRoomCacheSortByKeys = 'clients' | 'maxClients' | 'createdAt';\n\n/**\n * Built-in room cache fields that can be used for filtering.\n */\nexport type IRoomCacheFilterByKeys = 'clients' | 'maxClients' | 'processId';\n\n/**\n * Extract metadata type from Room type\n */\nexport type ExtractMetadata<RoomType extends Room> =\n RoomType extends Room<infer M> ? M : any;\n\n/**\n * Generates a unique lock ID based on filter options.\n */\nexport function getLockId(filterOptions: any) {\n return Object.keys(filterOptions).map((key) => `${key}:${filterOptions[key]}`).join(\"-\");\n}\n\n/**\n * Initialize a room cache which contains CRUD operations for room listings.\n *\n * @internal\n * @param initialValues - Predefined room properties.\n * @returns RoomData - New room cache.\n */\nexport function initializeRoomCache(initialValues: Partial<IRoomCache> = {}): IRoomCache {\n return {\n clients: 0,\n maxClients: Infinity,\n locked: false,\n private: false,\n metadata: undefined,\n // name: '',\n // publicAddress: '',\n // processId: '',\n // roomId: '',\n createdAt: (initialValues && initialValues.createdAt) ? new Date(initialValues.createdAt) : new Date(),\n unlisted: false,\n ...initialValues,\n } as IRoomCache;\n}\n\nexport interface IRoomCache<Metadata = any> {\n /**\n * Room name.\n */\n name: string;\n\n /**\n * Unique identifier for the room.\n */\n roomId: string;\n\n /**\n * Process id where the room is running.\n */\n processId: string;\n\n /**\n * Number of clients connected to this room.\n */\n clients: number;\n\n /**\n * Maximum number of clients allowed to join the room.\n */\n maxClients: number;\n\n /**\n * Indicates if the room is locked (i.e. join requests are rejected).\n */\n locked?: boolean;\n\n /**\n * Indicates if the room is private\n * Private rooms can't be joined via `join()` or `joinOrCreate()`.\n */\n private?: boolean;\n\n /**\n * Public address of the server.\n */\n publicAddress?: string;\n\n /**\n * Do not show this room in lobby listing.\n */\n unlisted?: boolean;\n\n /**\n * Metadata associated with the room.\n */\n metadata?: Metadata;\n\n /**\n * When the room was created.\n */\n createdAt?: Date;\n}\n\nexport interface MatchMakerDriver {\n /**\n * Check if a room exists in room cache.\n *\n * @param roomId - The room id.\n *\n * @returns Promise<boolean> | boolean - A promise or a boolean value indicating if the room exists.\n */\n has(roomId: string): Promise<boolean> | boolean;\n\n /**\n * Query rooms in room cache for given conditions.\n *\n * @param conditions - Filtering conditions.\n *\n * @returns Promise<IRoomCache[]> | IRoomCache[] - A promise or an object contaning room metadata list.\n */\n query<T extends Room = any>(\n conditions: Partial<IRoomCache & ExtractMetadata<T>>,\n sortOptions?: SortOptions\n ): Promise<Array<IRoomCache<ExtractMetadata<T>>>> | Array<IRoomCache<ExtractMetadata<T>>>;\n\n /**\n * Clean up rooms in room cache by process id.\n * @param processId - The process id.\n */\n cleanup?(processId: string): Promise<void>;\n\n /**\n * Query for a room in room cache for given conditions.\n *\n * @param conditions - Filtering conditions.\n *\n * @returns `IRoomCache` - An object contaning filtered room metadata.\n */\n findOne<T extends Room = any>(\n conditions: Partial<IRoomCache & ExtractMetadata<T>>,\n sortOptions?: SortOptions\n ): Promise<IRoomCache<ExtractMetadata<T>>>;\n\n /**\n * Remove a room from room cache.\n *\n * @param roomId - The room id.\n */\n remove(roomId: string): Promise<boolean> | boolean;\n\n /**\n * Update a room in room cache.\n *\n * @param IRoomCache - The room to update.\n * @param operations - The operations to update the room.\n */\n update(\n room: IRoomCache,\n operations: Partial<{ $set: Partial<IRoomCache>, $inc: Partial<IRoomCache> }>\n ): Promise<boolean> | boolean;\n\n /**\n * Persist a room in room cache.\n *\n * @param room - The room to persist.\n * @param create - If true, create a new record. If false (default), update existing record.\n */\n persist(room: IRoomCache, create?: boolean): Promise<boolean> | boolean;\n\n /**\n * Empty the room cache. Used for testing purposes only.\n * @internal Do not call this method yourself.\n */\n clear(): void;\n\n /**\n * Boot the room cache medium (if available).\n */\n boot?(): Promise<void>;\n\n /**\n * Dispose the connection of the room cache medium.\n */\n shutdown(): void;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BO,SAAS,UAAU,eAAoB;AAC5C,SAAO,OAAO,KAAK,aAAa,EAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,cAAc,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG;AACzF;AASO,SAAS,oBAAoB,gBAAqC,CAAC,GAAe;AACvF,SAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,IAKV,WAAY,iBAAiB,cAAc,YAAa,IAAI,KAAK,cAAc,SAAS,IAAI,oBAAI,KAAK;AAAA,IACrG,UAAU;AAAA,IACV,GAAG;AAAA,EACL;AACF;",
6
- "names": []
7
- }
@@ -1,24 +0,0 @@
1
- // packages/core/src/matchmaker/driver/api.ts
2
- function getLockId(filterOptions) {
3
- return Object.keys(filterOptions).map((key) => `${key}:${filterOptions[key]}`).join("-");
4
- }
5
- function initializeRoomCache(initialValues = {}) {
6
- return {
7
- clients: 0,
8
- maxClients: Infinity,
9
- locked: false,
10
- private: false,
11
- metadata: void 0,
12
- // name: '',
13
- // publicAddress: '',
14
- // processId: '',
15
- // roomId: '',
16
- createdAt: initialValues && initialValues.createdAt ? new Date(initialValues.createdAt) : /* @__PURE__ */ new Date(),
17
- unlisted: false,
18
- ...initialValues
19
- };
20
- }
21
- export {
22
- getLockId,
23
- initializeRoomCache
24
- };
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/matchmaker/driver/api.ts"],
4
- "sourcesContent": ["import type { Room } from \"@colyseus/core\";\nimport type { Type } from \"../../utils/Utils.ts\";\n\n/**\n * Sort options for room queries.\n */\nexport interface SortOptions {\n [fieldName: string]: 1 | -1 | 'asc' | 'desc' | 'ascending' | 'descending';\n}\n\n/**\n * Built-in room cache fields that can be used for sorting.\n */\nexport type IRoomCacheSortByKeys = 'clients' | 'maxClients' | 'createdAt';\n\n/**\n * Built-in room cache fields that can be used for filtering.\n */\nexport type IRoomCacheFilterByKeys = 'clients' | 'maxClients' | 'processId';\n\n/**\n * Extract metadata type from Room type\n */\nexport type ExtractMetadata<RoomType extends Room> =\n RoomType extends Room<infer M> ? M : any;\n\n/**\n * Generates a unique lock ID based on filter options.\n */\nexport function getLockId(filterOptions: any) {\n return Object.keys(filterOptions).map((key) => `${key}:${filterOptions[key]}`).join(\"-\");\n}\n\n/**\n * Initialize a room cache which contains CRUD operations for room listings.\n *\n * @internal\n * @param initialValues - Predefined room properties.\n * @returns RoomData - New room cache.\n */\nexport function initializeRoomCache(initialValues: Partial<IRoomCache> = {}): IRoomCache {\n return {\n clients: 0,\n maxClients: Infinity,\n locked: false,\n private: false,\n metadata: undefined,\n // name: '',\n // publicAddress: '',\n // processId: '',\n // roomId: '',\n createdAt: (initialValues && initialValues.createdAt) ? new Date(initialValues.createdAt) : new Date(),\n unlisted: false,\n ...initialValues,\n } as IRoomCache;\n}\n\nexport interface IRoomCache<Metadata = any> {\n /**\n * Room name.\n */\n name: string;\n\n /**\n * Unique identifier for the room.\n */\n roomId: string;\n\n /**\n * Process id where the room is running.\n */\n processId: string;\n\n /**\n * Number of clients connected to this room.\n */\n clients: number;\n\n /**\n * Maximum number of clients allowed to join the room.\n */\n maxClients: number;\n\n /**\n * Indicates if the room is locked (i.e. join requests are rejected).\n */\n locked?: boolean;\n\n /**\n * Indicates if the room is private\n * Private rooms can't be joined via `join()` or `joinOrCreate()`.\n */\n private?: boolean;\n\n /**\n * Public address of the server.\n */\n publicAddress?: string;\n\n /**\n * Do not show this room in lobby listing.\n */\n unlisted?: boolean;\n\n /**\n * Metadata associated with the room.\n */\n metadata?: Metadata;\n\n /**\n * When the room was created.\n */\n createdAt?: Date;\n}\n\nexport interface MatchMakerDriver {\n /**\n * Check if a room exists in room cache.\n *\n * @param roomId - The room id.\n *\n * @returns Promise<boolean> | boolean - A promise or a boolean value indicating if the room exists.\n */\n has(roomId: string): Promise<boolean> | boolean;\n\n /**\n * Query rooms in room cache for given conditions.\n *\n * @param conditions - Filtering conditions.\n *\n * @returns Promise<IRoomCache[]> | IRoomCache[] - A promise or an object contaning room metadata list.\n */\n query<T extends Room = any>(\n conditions: Partial<IRoomCache & ExtractMetadata<T>>,\n sortOptions?: SortOptions\n ): Promise<Array<IRoomCache<ExtractMetadata<T>>>> | Array<IRoomCache<ExtractMetadata<T>>>;\n\n /**\n * Clean up rooms in room cache by process id.\n * @param processId - The process id.\n */\n cleanup?(processId: string): Promise<void>;\n\n /**\n * Query for a room in room cache for given conditions.\n *\n * @param conditions - Filtering conditions.\n *\n * @returns `IRoomCache` - An object contaning filtered room metadata.\n */\n findOne<T extends Room = any>(\n conditions: Partial<IRoomCache & ExtractMetadata<T>>,\n sortOptions?: SortOptions\n ): Promise<IRoomCache<ExtractMetadata<T>>>;\n\n /**\n * Remove a room from room cache.\n *\n * @param roomId - The room id.\n */\n remove(roomId: string): Promise<boolean> | boolean;\n\n /**\n * Update a room in room cache.\n *\n * @param IRoomCache - The room to update.\n * @param operations - The operations to update the room.\n */\n update(\n room: IRoomCache,\n operations: Partial<{ $set: Partial<IRoomCache>, $inc: Partial<IRoomCache> }>\n ): Promise<boolean> | boolean;\n\n /**\n * Persist a room in room cache.\n *\n * @param room - The room to persist.\n * @param create - If true, create a new record. If false (default), update existing record.\n */\n persist(room: IRoomCache, create?: boolean): Promise<boolean> | boolean;\n\n /**\n * Empty the room cache. Used for testing purposes only.\n * @internal Do not call this method yourself.\n */\n clear(): void;\n\n /**\n * Boot the room cache medium (if available).\n */\n boot?(): Promise<void>;\n\n /**\n * Dispose the connection of the room cache medium.\n */\n shutdown(): void;\n}\n"],
5
- "mappings": ";AA6BO,SAAS,UAAU,eAAoB;AAC5C,SAAO,OAAO,KAAK,aAAa,EAAE,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,cAAc,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG;AACzF;AASO,SAAS,oBAAoB,gBAAqC,CAAC,GAAe;AACvF,SAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,IAKV,WAAY,iBAAiB,cAAc,YAAa,IAAI,KAAK,cAAc,SAAS,IAAI,oBAAI,KAAK;AAAA,IACrG,UAAU;AAAA,IACV,GAAG;AAAA,EACL;AACF;",
6
- "names": []
7
- }
@@ -1,94 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var LocalDriver_exports = {};
20
- __export(LocalDriver_exports, {
21
- LocalDriver: () => LocalDriver
22
- });
23
- module.exports = __toCommonJS(LocalDriver_exports);
24
- var import_Debug = require("../../../Debug.ts");
25
- var import_Query = require("./Query.ts");
26
- class LocalDriver {
27
- constructor() {
28
- this.rooms = [];
29
- }
30
- has(roomId) {
31
- return this.rooms.some((room) => room.roomId === roomId);
32
- }
33
- query(conditions, sortOptions) {
34
- const query = new import_Query.Query(this.rooms, conditions);
35
- if (sortOptions) {
36
- query.sort(sortOptions);
37
- }
38
- return query.filter(conditions);
39
- }
40
- cleanup(processId) {
41
- const cachedRooms = this.query({ processId });
42
- (0, import_Debug.debugMatchMaking)("removing stale rooms by processId %s (%s rooms found)", processId, cachedRooms.length);
43
- cachedRooms.forEach((room) => this.remove(room.roomId));
44
- return Promise.resolve();
45
- }
46
- findOne(conditions, sortOptions) {
47
- const query = new import_Query.Query(this.rooms, conditions);
48
- if (sortOptions) {
49
- query.sort(sortOptions);
50
- }
51
- return query;
52
- }
53
- update(room, operations) {
54
- if (operations.$set) {
55
- for (const field in operations.$set) {
56
- if (operations.$set.hasOwnProperty(field)) {
57
- room[field] = operations.$set[field];
58
- }
59
- }
60
- }
61
- if (operations.$inc) {
62
- for (const field in operations.$inc) {
63
- if (operations.$inc.hasOwnProperty(field)) {
64
- room[field] += operations.$inc[field];
65
- }
66
- }
67
- }
68
- return true;
69
- }
70
- persist(room, create = false) {
71
- if (!create) {
72
- return false;
73
- }
74
- this.rooms.push(room);
75
- return true;
76
- }
77
- remove(roomId) {
78
- const roomIndex = this.rooms.findIndex((room) => room.roomId === roomId);
79
- if (roomIndex !== -1) {
80
- this.rooms.splice(roomIndex, 1);
81
- return true;
82
- }
83
- return false;
84
- }
85
- clear() {
86
- this.rooms = [];
87
- }
88
- shutdown() {
89
- }
90
- }
91
- // Annotate the CommonJS export names for ESM import in node:
92
- 0 && (module.exports = {
93
- LocalDriver
94
- });
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/matchmaker/driver/local/LocalDriver.ts"],
4
- "sourcesContent": ["import { debugMatchMaking } from '../../../Debug.ts';\nimport type { IRoomCache, SortOptions, MatchMakerDriver } from '../api.ts';\nimport { Query } from './Query.ts';\n\n// re-export\nexport type { IRoomCache, SortOptions, MatchMakerDriver };\n\nexport class LocalDriver implements MatchMakerDriver {\n public rooms: IRoomCache[] = [];\n\n public has(roomId: string) {\n return this.rooms.some((room) => room.roomId === roomId);\n }\n\n public query(conditions: Partial<IRoomCache>, sortOptions?: SortOptions) {\n const query = new Query<IRoomCache>(this.rooms, conditions);\n\n if (sortOptions) {\n query.sort(sortOptions);\n }\n\n return query.filter(conditions);\n }\n\n public cleanup(processId: string) {\n const cachedRooms = this.query({ processId });\n debugMatchMaking(\"removing stale rooms by processId %s (%s rooms found)\", processId, cachedRooms.length);\n\n cachedRooms.forEach((room) => this.remove(room.roomId));\n return Promise.resolve();\n }\n\n public findOne(conditions: Partial<IRoomCache>, sortOptions?: SortOptions) {\n const query = new Query<IRoomCache>(this.rooms, conditions);\n\n if (sortOptions) {\n query.sort(sortOptions);\n }\n\n return query as unknown as Promise<IRoomCache>;\n }\n\n public update(room: IRoomCache, operations: Partial<{ $set: Partial<IRoomCache>, $inc: Partial<IRoomCache> }>) {\n if (operations.$set) {\n for (const field in operations.$set) {\n if (operations.$set.hasOwnProperty(field)) {\n room[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 room[field] += operations.$inc[field];\n }\n }\n }\n\n return true;\n }\n\n public persist(room: IRoomCache, create: boolean = false) {\n // if (this.rooms.indexOf(room) !== -1) {\n // // already in the list\n // return true;\n // }\n\n if (!create) { return false; }\n\n // add to the list\n this.rooms.push(room);\n\n return true;\n }\n\n public remove(roomId: string) {\n const roomIndex = this.rooms.findIndex((room) => room.roomId === roomId);\n if (roomIndex !== -1) {\n this.rooms.splice(roomIndex, 1);\n return true;\n }\n return false;\n }\n\n public clear() {\n this.rooms = [];\n }\n\n public shutdown() {\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAiC;AAEjC,mBAAsB;AAKf,MAAM,YAAwC;AAAA,EAA9C;AACL,SAAO,QAAsB,CAAC;AAAA;AAAA,EAEvB,IAAI,QAAgB;AACzB,WAAO,KAAK,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,MAAM;AAAA,EACzD;AAAA,EAEO,MAAM,YAAiC,aAA2B;AACvE,UAAM,QAAQ,IAAI,mBAAkB,KAAK,OAAO,UAAU;AAE1D,QAAI,aAAa;AACf,YAAM,KAAK,WAAW;AAAA,IACxB;AAEA,WAAO,MAAM,OAAO,UAAU;AAAA,EAChC;AAAA,EAEO,QAAQ,WAAmB;AAChC,UAAM,cAAc,KAAK,MAAM,EAAE,UAAU,CAAC;AAC5C,uCAAiB,yDAAyD,WAAW,YAAY,MAAM;AAEvG,gBAAY,QAAQ,CAAC,SAAS,KAAK,OAAO,KAAK,MAAM,CAAC;AACtD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,QAAQ,YAAiC,aAA2B;AACzE,UAAM,QAAQ,IAAI,mBAAkB,KAAK,OAAO,UAAU;AAE1D,QAAI,aAAa;AACf,YAAM,KAAK,WAAW;AAAA,IACxB;AAEA,WAAO;AAAA,EACT;AAAA,EAEO,OAAO,MAAkB,YAA+E;AAC7G,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;AAAA,EACT;AAAA,EAEO,QAAQ,MAAkB,SAAkB,OAAO;AAMxD,QAAI,CAAC,QAAQ;AAAE,aAAO;AAAA,IAAO;AAG7B,SAAK,MAAM,KAAK,IAAI;AAEpB,WAAO;AAAA,EACT;AAAA,EAEO,OAAO,QAAgB;AAC5B,UAAM,YAAY,KAAK,MAAM,UAAU,CAAC,SAAS,KAAK,WAAW,MAAM;AACvE,QAAI,cAAc,IAAI;AACpB,WAAK,MAAM,OAAO,WAAW,CAAC;AAC9B,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEO,QAAQ;AACb,SAAK,QAAQ,CAAC;AAAA,EAChB;AAAA,EAEO,WAAW;AAAA,EAClB;AACF;",
6
- "names": []
7
- }
@@ -1,71 +0,0 @@
1
- // packages/core/src/matchmaker/driver/local/LocalDriver.ts
2
- import { debugMatchMaking } from "../../../Debug.mjs";
3
- import { Query } from "./Query.mjs";
4
- var LocalDriver = class {
5
- constructor() {
6
- this.rooms = [];
7
- }
8
- has(roomId) {
9
- return this.rooms.some((room) => room.roomId === roomId);
10
- }
11
- query(conditions, sortOptions) {
12
- const query = new Query(this.rooms, conditions);
13
- if (sortOptions) {
14
- query.sort(sortOptions);
15
- }
16
- return query.filter(conditions);
17
- }
18
- cleanup(processId) {
19
- const cachedRooms = this.query({ processId });
20
- debugMatchMaking("removing stale rooms by processId %s (%s rooms found)", processId, cachedRooms.length);
21
- cachedRooms.forEach((room) => this.remove(room.roomId));
22
- return Promise.resolve();
23
- }
24
- findOne(conditions, sortOptions) {
25
- const query = new Query(this.rooms, conditions);
26
- if (sortOptions) {
27
- query.sort(sortOptions);
28
- }
29
- return query;
30
- }
31
- update(room, operations) {
32
- if (operations.$set) {
33
- for (const field in operations.$set) {
34
- if (operations.$set.hasOwnProperty(field)) {
35
- room[field] = operations.$set[field];
36
- }
37
- }
38
- }
39
- if (operations.$inc) {
40
- for (const field in operations.$inc) {
41
- if (operations.$inc.hasOwnProperty(field)) {
42
- room[field] += operations.$inc[field];
43
- }
44
- }
45
- }
46
- return true;
47
- }
48
- persist(room, create = false) {
49
- if (!create) {
50
- return false;
51
- }
52
- this.rooms.push(room);
53
- return true;
54
- }
55
- remove(roomId) {
56
- const roomIndex = this.rooms.findIndex((room) => room.roomId === roomId);
57
- if (roomIndex !== -1) {
58
- this.rooms.splice(roomIndex, 1);
59
- return true;
60
- }
61
- return false;
62
- }
63
- clear() {
64
- this.rooms = [];
65
- }
66
- shutdown() {
67
- }
68
- };
69
- export {
70
- LocalDriver
71
- };
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/matchmaker/driver/local/LocalDriver.ts"],
4
- "sourcesContent": ["import { debugMatchMaking } from '../../../Debug.ts';\nimport type { IRoomCache, SortOptions, MatchMakerDriver } from '../api.ts';\nimport { Query } from './Query.ts';\n\n// re-export\nexport type { IRoomCache, SortOptions, MatchMakerDriver };\n\nexport class LocalDriver implements MatchMakerDriver {\n public rooms: IRoomCache[] = [];\n\n public has(roomId: string) {\n return this.rooms.some((room) => room.roomId === roomId);\n }\n\n public query(conditions: Partial<IRoomCache>, sortOptions?: SortOptions) {\n const query = new Query<IRoomCache>(this.rooms, conditions);\n\n if (sortOptions) {\n query.sort(sortOptions);\n }\n\n return query.filter(conditions);\n }\n\n public cleanup(processId: string) {\n const cachedRooms = this.query({ processId });\n debugMatchMaking(\"removing stale rooms by processId %s (%s rooms found)\", processId, cachedRooms.length);\n\n cachedRooms.forEach((room) => this.remove(room.roomId));\n return Promise.resolve();\n }\n\n public findOne(conditions: Partial<IRoomCache>, sortOptions?: SortOptions) {\n const query = new Query<IRoomCache>(this.rooms, conditions);\n\n if (sortOptions) {\n query.sort(sortOptions);\n }\n\n return query as unknown as Promise<IRoomCache>;\n }\n\n public update(room: IRoomCache, operations: Partial<{ $set: Partial<IRoomCache>, $inc: Partial<IRoomCache> }>) {\n if (operations.$set) {\n for (const field in operations.$set) {\n if (operations.$set.hasOwnProperty(field)) {\n room[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 room[field] += operations.$inc[field];\n }\n }\n }\n\n return true;\n }\n\n public persist(room: IRoomCache, create: boolean = false) {\n // if (this.rooms.indexOf(room) !== -1) {\n // // already in the list\n // return true;\n // }\n\n if (!create) { return false; }\n\n // add to the list\n this.rooms.push(room);\n\n return true;\n }\n\n public remove(roomId: string) {\n const roomIndex = this.rooms.findIndex((room) => room.roomId === roomId);\n if (roomIndex !== -1) {\n this.rooms.splice(roomIndex, 1);\n return true;\n }\n return false;\n }\n\n public clear() {\n this.rooms = [];\n }\n\n public shutdown() {\n }\n}\n"],
5
- "mappings": ";AAAA,SAAS,wBAAwB;AAEjC,SAAS,aAAa;AAKf,IAAM,cAAN,MAA8C;AAAA,EAA9C;AACL,SAAO,QAAsB,CAAC;AAAA;AAAA,EAEvB,IAAI,QAAgB;AACzB,WAAO,KAAK,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,MAAM;AAAA,EACzD;AAAA,EAEO,MAAM,YAAiC,aAA2B;AACvE,UAAM,QAAQ,IAAI,MAAkB,KAAK,OAAO,UAAU;AAE1D,QAAI,aAAa;AACf,YAAM,KAAK,WAAW;AAAA,IACxB;AAEA,WAAO,MAAM,OAAO,UAAU;AAAA,EAChC;AAAA,EAEO,QAAQ,WAAmB;AAChC,UAAM,cAAc,KAAK,MAAM,EAAE,UAAU,CAAC;AAC5C,qBAAiB,yDAAyD,WAAW,YAAY,MAAM;AAEvG,gBAAY,QAAQ,CAAC,SAAS,KAAK,OAAO,KAAK,MAAM,CAAC;AACtD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEO,QAAQ,YAAiC,aAA2B;AACzE,UAAM,QAAQ,IAAI,MAAkB,KAAK,OAAO,UAAU;AAE1D,QAAI,aAAa;AACf,YAAM,KAAK,WAAW;AAAA,IACxB;AAEA,WAAO;AAAA,EACT;AAAA,EAEO,OAAO,MAAkB,YAA+E;AAC7G,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;AAAA,EACT;AAAA,EAEO,QAAQ,MAAkB,SAAkB,OAAO;AAMxD,QAAI,CAAC,QAAQ;AAAE,aAAO;AAAA,IAAO;AAG7B,SAAK,MAAM,KAAK,IAAI;AAEpB,WAAO;AAAA,EACT;AAAA,EAEO,OAAO,QAAgB;AAC5B,UAAM,YAAY,KAAK,MAAM,UAAU,CAAC,SAAS,KAAK,WAAW,MAAM;AACvE,QAAI,cAAc,IAAI;AACpB,WAAK,MAAM,OAAO,WAAW,CAAC;AAC9B,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEO,QAAQ;AACb,SAAK,QAAQ,CAAC;AAAA,EAChB;AAAA,EAEO,WAAW;AAAA,EAClB;AACF;",
6
- "names": []
7
- }
@@ -1,111 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var Query_exports = {};
20
- __export(Query_exports, {
21
- Query: () => Query
22
- });
23
- module.exports = __toCommonJS(Query_exports);
24
- class Query {
25
- constructor(rooms, conditions) {
26
- this.$rooms = rooms.slice(0);
27
- this.conditions = conditions;
28
- }
29
- sort(options) {
30
- this.sortOptions = options;
31
- return this;
32
- }
33
- applySort(rooms) {
34
- if (!this.sortOptions) {
35
- return rooms;
36
- }
37
- return rooms.sort((room1, room2) => {
38
- for (const field in this.sortOptions) {
39
- const direction = this.sortOptions[field];
40
- if (room1.hasOwnProperty(field)) {
41
- if (direction === 1 || direction === "asc" || direction === "ascending") {
42
- if (room1[field] > room2[field]) {
43
- return 1;
44
- }
45
- if (room1[field] < room2[field]) {
46
- return -1;
47
- }
48
- } else {
49
- if (room1[field] > room2[field]) {
50
- return -1;
51
- }
52
- if (room1[field] < room2[field]) {
53
- return 1;
54
- }
55
- }
56
- } else if (room1.metadata?.hasOwnProperty(field)) {
57
- if (direction === 1 || direction === "asc" || direction === "ascending") {
58
- if (room1.metadata[field] > room2.metadata[field]) {
59
- return 1;
60
- }
61
- if (room1.metadata[field] < room2.metadata[field]) {
62
- return -1;
63
- }
64
- } else {
65
- if (room1.metadata[field] > room2.metadata[field]) {
66
- return -1;
67
- }
68
- if (room1.metadata[field] < room2.metadata[field]) {
69
- return 1;
70
- }
71
- }
72
- }
73
- }
74
- return 0;
75
- });
76
- }
77
- applyFilter(rooms, conditions) {
78
- return rooms.filter((room) => {
79
- for (const field in conditions) {
80
- if (conditions.hasOwnProperty(field)) {
81
- if (room.hasOwnProperty(field)) {
82
- if (room[field] !== conditions[field]) {
83
- return false;
84
- }
85
- } else if (room.metadata?.hasOwnProperty(field)) {
86
- if (room.metadata[field] !== conditions[field]) {
87
- return false;
88
- }
89
- } else {
90
- return false;
91
- }
92
- }
93
- }
94
- return true;
95
- });
96
- }
97
- filter(conditions) {
98
- const filtered = this.applyFilter(this.$rooms, conditions);
99
- return this.applySort(filtered);
100
- }
101
- then(resolve, reject) {
102
- const filtered = this.applyFilter(this.$rooms, this.conditions);
103
- const sorted = this.applySort(filtered);
104
- const result = sorted[0];
105
- return resolve(result);
106
- }
107
- }
108
- // Annotate the CommonJS export names for ESM import in node:
109
- 0 && (module.exports = {
110
- Query
111
- });
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/matchmaker/driver/local/Query.ts"],
4
- "sourcesContent": ["import type { IRoomCache, SortOptions } from '../api.ts';\n\nexport class Query<T extends IRoomCache> {\n private $rooms: T[];\n private conditions: any;\n private sortOptions?: SortOptions;\n\n constructor(rooms: any[], conditions) {\n this.$rooms = rooms.slice(0);\n this.conditions = conditions;\n }\n\n public sort(options: SortOptions) {\n // Store sort options instead of sorting immediately\n // This allows filtering first, then sorting fewer items\n this.sortOptions = options;\n return this;\n }\n\n private applySort(rooms: T[]): T[] {\n if (!this.sortOptions) {\n return rooms;\n }\n\n return rooms.sort((room1: T, room2: T) => {\n for (const field in this.sortOptions) {\n const direction = this.sortOptions[field];\n if (room1.hasOwnProperty(field)) {\n /**\n * IRoomCache field\n */\n if (direction === 1 || direction === 'asc' || direction === 'ascending') {\n if (room1[field] > room2[field]) { return 1; }\n if (room1[field] < room2[field]) { return -1; }\n\n } else {\n if (room1[field] > room2[field]) { return -1; }\n if (room1[field] < room2[field]) { return 1; }\n }\n } else if (room1.metadata?.hasOwnProperty(field)) {\n /**\n * metadata field\n */\n if (direction === 1 || direction === 'asc' || direction === 'ascending') {\n if (room1.metadata[field] > room2.metadata[field]) { return 1; }\n if (room1.metadata[field] < room2.metadata[field]) { return -1; }\n } else {\n if (room1.metadata[field] > room2.metadata[field]) { return -1; }\n if (room1.metadata[field] < room2.metadata[field]) { return 1; }\n }\n }\n }\n return 0;\n });\n }\n\n private applyFilter(rooms: T[], conditions: any): T[] {\n return rooms.filter(((room) => {\n for (const field in conditions) {\n if (conditions.hasOwnProperty(field)) {\n // Check if field exists in room (IRoomCache base fields)\n if (room.hasOwnProperty(field)) {\n if (room[field] !== conditions[field]) {\n return false;\n }\n } else if (room.metadata?.hasOwnProperty(field)) {\n // Check if field exists in metadata\n if (room.metadata[field] !== conditions[field]) {\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 public filter(conditions: any) {\n // Filter first to reduce the number of items to sort\n const filtered = this.applyFilter(this.$rooms, conditions);\n return this.applySort(filtered);\n }\n\n public then(resolve, reject) {\n // Filter first to reduce the number of items to sort\n const filtered = this.applyFilter(this.$rooms, this.conditions);\n const sorted = this.applySort(filtered);\n const result: any = sorted[0];\n return resolve(result);\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,MAA4B;AAAA,EAKvC,YAAY,OAAc,YAAY;AACpC,SAAK,SAAS,MAAM,MAAM,CAAC;AAC3B,SAAK,aAAa;AAAA,EACpB;AAAA,EAEO,KAAK,SAAsB;AAGhC,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EAEQ,UAAU,OAAiB;AACjC,QAAI,CAAC,KAAK,aAAa;AACrB,aAAO;AAAA,IACT;AAEA,WAAO,MAAM,KAAK,CAAC,OAAU,UAAa;AACxC,iBAAW,SAAS,KAAK,aAAa;AACpC,cAAM,YAAY,KAAK,YAAY,KAAK;AACxC,YAAI,MAAM,eAAe,KAAK,GAAG;AAI/B,cAAI,cAAc,KAAK,cAAc,SAAS,cAAc,aAAa;AACvE,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAC7C,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAAA,UAEhD,OAAO;AACL,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAC9C,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAAA,UAC/C;AAAA,QACF,WAAW,MAAM,UAAU,eAAe,KAAK,GAAG;AAIhD,cAAI,cAAc,KAAK,cAAc,SAAS,cAAc,aAAa;AACvE,gBAAI,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAC/D,gBAAI,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAAA,UAClE,OAAO;AACL,gBAAI,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAChE,gBAAI,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAAA,UACjE;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEQ,YAAY,OAAY,YAAsB;AACpD,WAAO,MAAM,OAAQ,CAAC,SAAS;AAC7B,iBAAW,SAAS,YAAY;AAC9B,YAAI,WAAW,eAAe,KAAK,GAAG;AAEpC,cAAI,KAAK,eAAe,KAAK,GAAG;AAC9B,gBAAI,KAAK,KAAK,MAAM,WAAW,KAAK,GAAG;AACrC,qBAAO;AAAA,YACT;AAAA,UACF,WAAW,KAAK,UAAU,eAAe,KAAK,GAAG;AAE/C,gBAAI,KAAK,SAAS,KAAK,MAAM,WAAW,KAAK,GAAG;AAC9C,qBAAO;AAAA,YACT;AAAA,UACF,OAAO;AAEL,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAE;AAAA,EACJ;AAAA,EAEO,OAAO,YAAiB;AAE7B,UAAM,WAAW,KAAK,YAAY,KAAK,QAAQ,UAAU;AACzD,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EAEO,KAAK,SAAS,QAAQ;AAE3B,UAAM,WAAW,KAAK,YAAY,KAAK,QAAQ,KAAK,UAAU;AAC9D,UAAM,SAAS,KAAK,UAAU,QAAQ;AACtC,UAAM,SAAc,OAAO,CAAC;AAC5B,WAAO,QAAQ,MAAM;AAAA,EACvB;AACF;",
6
- "names": []
7
- }
@@ -1,88 +0,0 @@
1
- // packages/core/src/matchmaker/driver/local/Query.ts
2
- var Query = class {
3
- constructor(rooms, conditions) {
4
- this.$rooms = rooms.slice(0);
5
- this.conditions = conditions;
6
- }
7
- sort(options) {
8
- this.sortOptions = options;
9
- return this;
10
- }
11
- applySort(rooms) {
12
- if (!this.sortOptions) {
13
- return rooms;
14
- }
15
- return rooms.sort((room1, room2) => {
16
- for (const field in this.sortOptions) {
17
- const direction = this.sortOptions[field];
18
- if (room1.hasOwnProperty(field)) {
19
- if (direction === 1 || direction === "asc" || direction === "ascending") {
20
- if (room1[field] > room2[field]) {
21
- return 1;
22
- }
23
- if (room1[field] < room2[field]) {
24
- return -1;
25
- }
26
- } else {
27
- if (room1[field] > room2[field]) {
28
- return -1;
29
- }
30
- if (room1[field] < room2[field]) {
31
- return 1;
32
- }
33
- }
34
- } else if (room1.metadata?.hasOwnProperty(field)) {
35
- if (direction === 1 || direction === "asc" || direction === "ascending") {
36
- if (room1.metadata[field] > room2.metadata[field]) {
37
- return 1;
38
- }
39
- if (room1.metadata[field] < room2.metadata[field]) {
40
- return -1;
41
- }
42
- } else {
43
- if (room1.metadata[field] > room2.metadata[field]) {
44
- return -1;
45
- }
46
- if (room1.metadata[field] < room2.metadata[field]) {
47
- return 1;
48
- }
49
- }
50
- }
51
- }
52
- return 0;
53
- });
54
- }
55
- applyFilter(rooms, conditions) {
56
- return rooms.filter((room) => {
57
- for (const field in conditions) {
58
- if (conditions.hasOwnProperty(field)) {
59
- if (room.hasOwnProperty(field)) {
60
- if (room[field] !== conditions[field]) {
61
- return false;
62
- }
63
- } else if (room.metadata?.hasOwnProperty(field)) {
64
- if (room.metadata[field] !== conditions[field]) {
65
- return false;
66
- }
67
- } else {
68
- return false;
69
- }
70
- }
71
- }
72
- return true;
73
- });
74
- }
75
- filter(conditions) {
76
- const filtered = this.applyFilter(this.$rooms, conditions);
77
- return this.applySort(filtered);
78
- }
79
- then(resolve, reject) {
80
- const filtered = this.applyFilter(this.$rooms, this.conditions);
81
- const sorted = this.applySort(filtered);
82
- const result = sorted[0];
83
- return resolve(result);
84
- }
85
- };
86
- export {
87
- Query
88
- };
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/matchmaker/driver/local/Query.ts"],
4
- "sourcesContent": ["import type { IRoomCache, SortOptions } from '../api.ts';\n\nexport class Query<T extends IRoomCache> {\n private $rooms: T[];\n private conditions: any;\n private sortOptions?: SortOptions;\n\n constructor(rooms: any[], conditions) {\n this.$rooms = rooms.slice(0);\n this.conditions = conditions;\n }\n\n public sort(options: SortOptions) {\n // Store sort options instead of sorting immediately\n // This allows filtering first, then sorting fewer items\n this.sortOptions = options;\n return this;\n }\n\n private applySort(rooms: T[]): T[] {\n if (!this.sortOptions) {\n return rooms;\n }\n\n return rooms.sort((room1: T, room2: T) => {\n for (const field in this.sortOptions) {\n const direction = this.sortOptions[field];\n if (room1.hasOwnProperty(field)) {\n /**\n * IRoomCache field\n */\n if (direction === 1 || direction === 'asc' || direction === 'ascending') {\n if (room1[field] > room2[field]) { return 1; }\n if (room1[field] < room2[field]) { return -1; }\n\n } else {\n if (room1[field] > room2[field]) { return -1; }\n if (room1[field] < room2[field]) { return 1; }\n }\n } else if (room1.metadata?.hasOwnProperty(field)) {\n /**\n * metadata field\n */\n if (direction === 1 || direction === 'asc' || direction === 'ascending') {\n if (room1.metadata[field] > room2.metadata[field]) { return 1; }\n if (room1.metadata[field] < room2.metadata[field]) { return -1; }\n } else {\n if (room1.metadata[field] > room2.metadata[field]) { return -1; }\n if (room1.metadata[field] < room2.metadata[field]) { return 1; }\n }\n }\n }\n return 0;\n });\n }\n\n private applyFilter(rooms: T[], conditions: any): T[] {\n return rooms.filter(((room) => {\n for (const field in conditions) {\n if (conditions.hasOwnProperty(field)) {\n // Check if field exists in room (IRoomCache base fields)\n if (room.hasOwnProperty(field)) {\n if (room[field] !== conditions[field]) {\n return false;\n }\n } else if (room.metadata?.hasOwnProperty(field)) {\n // Check if field exists in metadata\n if (room.metadata[field] !== conditions[field]) {\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 public filter(conditions: any) {\n // Filter first to reduce the number of items to sort\n const filtered = this.applyFilter(this.$rooms, conditions);\n return this.applySort(filtered);\n }\n\n public then(resolve, reject) {\n // Filter first to reduce the number of items to sort\n const filtered = this.applyFilter(this.$rooms, this.conditions);\n const sorted = this.applySort(filtered);\n const result: any = sorted[0];\n return resolve(result);\n }\n}\n"],
5
- "mappings": ";AAEO,IAAM,QAAN,MAAkC;AAAA,EAKvC,YAAY,OAAc,YAAY;AACpC,SAAK,SAAS,MAAM,MAAM,CAAC;AAC3B,SAAK,aAAa;AAAA,EACpB;AAAA,EAEO,KAAK,SAAsB;AAGhC,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EAEQ,UAAU,OAAiB;AACjC,QAAI,CAAC,KAAK,aAAa;AACrB,aAAO;AAAA,IACT;AAEA,WAAO,MAAM,KAAK,CAAC,OAAU,UAAa;AACxC,iBAAW,SAAS,KAAK,aAAa;AACpC,cAAM,YAAY,KAAK,YAAY,KAAK;AACxC,YAAI,MAAM,eAAe,KAAK,GAAG;AAI/B,cAAI,cAAc,KAAK,cAAc,SAAS,cAAc,aAAa;AACvE,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAC7C,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAAA,UAEhD,OAAO;AACL,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAC9C,gBAAI,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAAA,UAC/C;AAAA,QACF,WAAW,MAAM,UAAU,eAAe,KAAK,GAAG;AAIhD,cAAI,cAAc,KAAK,cAAc,SAAS,cAAc,aAAa;AACvE,gBAAI,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAC/D,gBAAI,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAAA,UAClE,OAAO;AACL,gBAAI,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAI;AAChE,gBAAI,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,KAAK,GAAG;AAAE,qBAAO;AAAA,YAAG;AAAA,UACjE;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEQ,YAAY,OAAY,YAAsB;AACpD,WAAO,MAAM,OAAQ,CAAC,SAAS;AAC7B,iBAAW,SAAS,YAAY;AAC9B,YAAI,WAAW,eAAe,KAAK,GAAG;AAEpC,cAAI,KAAK,eAAe,KAAK,GAAG;AAC9B,gBAAI,KAAK,KAAK,MAAM,WAAW,KAAK,GAAG;AACrC,qBAAO;AAAA,YACT;AAAA,UACF,WAAW,KAAK,UAAU,eAAe,KAAK,GAAG;AAE/C,gBAAI,KAAK,SAAS,KAAK,MAAM,WAAW,KAAK,GAAG;AAC9C,qBAAO;AAAA,YACT;AAAA,UACF,OAAO;AAEL,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAE;AAAA,EACJ;AAAA,EAEO,OAAO,YAAiB;AAE7B,UAAM,WAAW,KAAK,YAAY,KAAK,QAAQ,UAAU;AACzD,WAAO,KAAK,UAAU,QAAQ;AAAA,EAChC;AAAA,EAEO,KAAK,SAAS,QAAQ;AAE3B,UAAM,WAAW,KAAK,YAAY,KAAK,QAAQ,KAAK,UAAU;AAC9D,UAAM,SAAS,KAAK,UAAU,QAAQ;AACtC,UAAM,SAAc,OAAO,CAAC;AAC5B,WAAO,QAAQ,MAAM;AAAA,EACvB;AACF;",
6
- "names": []
7
- }
@@ -1,79 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var routes_exports = {};
30
- __export(routes_exports, {
31
- getDefaultRouter: () => getDefaultRouter,
32
- postMatchmakeMethod: () => postMatchmakeMethod
33
- });
34
- module.exports = __toCommonJS(routes_exports);
35
- var import_better_call = require("@colyseus/better-call");
36
- var matchMaker = __toESM(require("../MatchMaker.ts"), 1);
37
- var import_Utils = require("../utils/Utils.ts");
38
- const postMatchmakeMethod = (0, import_better_call.createEndpoint)("/matchmake/:method/:roomName", { method: "POST" }, async (ctx) => {
39
- if (matchMaker.state === matchMaker.MatchMakerState.SHUTTING_DOWN) {
40
- throw ctx.error(503);
41
- }
42
- const requestHeaders = ctx.request.headers;
43
- const headers = Object.assign(
44
- {},
45
- matchMaker.controller.DEFAULT_CORS_HEADERS,
46
- matchMaker.controller.getCorsHeaders(requestHeaders)
47
- );
48
- const method = ctx.params.method;
49
- const roomName = ctx.params.roomName;
50
- Object.entries(headers).forEach(([key, value]) => {
51
- ctx.setHeader(key, value);
52
- });
53
- ctx.setHeader("Content-Type", "application/json");
54
- try {
55
- const clientOptions = ctx.body;
56
- const response = await matchMaker.controller.invokeMethod(
57
- method,
58
- roomName,
59
- clientOptions,
60
- {
61
- token: (0, import_Utils.getBearerToken)(ctx.request.headers.get("authorization")),
62
- headers: ctx.request.headers,
63
- ip: requestHeaders.get("x-forwarded-for") ?? requestHeaders.get("x-client-ip") ?? requestHeaders.get("x-real-ip"),
64
- req: ctx.request
65
- }
66
- );
67
- return response;
68
- } catch (e) {
69
- throw ctx.error(e.code, { code: e.code, error: e.message });
70
- }
71
- });
72
- function getDefaultRouter() {
73
- return (0, import_better_call.createRouter)({ postMatchmakeMethod });
74
- }
75
- // Annotate the CommonJS export names for ESM import in node:
76
- 0 && (module.exports = {
77
- getDefaultRouter,
78
- postMatchmakeMethod
79
- });