@colyseus/core 0.17.1 → 0.17.3

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 (63) hide show
  1. package/build/rooms/RankedQueueRoom.js.map +2 -2
  2. package/build/rooms/RankedQueueRoom.mjs.map +2 -2
  3. package/package.json +6 -4
  4. package/src/rooms/RankedQueueRoom.ts +1 -1
  5. package/build/matchmaker/driver/api.js +0 -48
  6. package/build/matchmaker/driver/api.js.map +0 -7
  7. package/build/matchmaker/driver/api.mjs +0 -24
  8. package/build/matchmaker/driver/api.mjs.map +0 -7
  9. package/build/matchmaker/driver/local/LocalDriver.js +0 -94
  10. package/build/matchmaker/driver/local/LocalDriver.js.map +0 -7
  11. package/build/matchmaker/driver/local/LocalDriver.mjs +0 -71
  12. package/build/matchmaker/driver/local/LocalDriver.mjs.map +0 -7
  13. package/build/matchmaker/driver/local/Query.js +0 -111
  14. package/build/matchmaker/driver/local/Query.js.map +0 -7
  15. package/build/matchmaker/driver/local/Query.mjs +0 -88
  16. package/build/matchmaker/driver/local/Query.mjs.map +0 -7
  17. package/build/matchmaker/routes.js +0 -79
  18. package/build/matchmaker/routes.js.map +0 -7
  19. package/build/matchmaker/routes.mjs +0 -45
  20. package/build/matchmaker/routes.mjs.map +0 -7
  21. package/build/rooms/createRoom.js +0 -51
  22. package/build/rooms/createRoom.js.map +0 -7
  23. package/build/rooms/createRoom.mjs +0 -28
  24. package/build/rooms/createRoom.mjs.map +0 -7
  25. package/build/src/matchmaker/driver/api.d.ts +0 -145
  26. package/build/src/matchmaker/driver/local/LocalDriver.d.ts +0 -17
  27. package/build/src/matchmaker/driver/local/Query.d.ts +0 -12
  28. package/build/src/matchmaker/routes.d.ts +0 -92
  29. package/build/src/rooms/createRoom.d.ts +0 -65
  30. /package/build/{src/Debug.d.ts → Debug.d.ts} +0 -0
  31. /package/build/{src/IPC.d.ts → IPC.d.ts} +0 -0
  32. /package/build/{src/Logger.d.ts → Logger.d.ts} +0 -0
  33. /package/build/{src/MatchMaker.d.ts → MatchMaker.d.ts} +0 -0
  34. /package/build/{src/Protocol.d.ts → Protocol.d.ts} +0 -0
  35. /package/build/{src/Room.d.ts → Room.d.ts} +0 -0
  36. /package/build/{src/Server.d.ts → Server.d.ts} +0 -0
  37. /package/build/{src/Stats.d.ts → Stats.d.ts} +0 -0
  38. /package/build/{src/Transport.d.ts → Transport.d.ts} +0 -0
  39. /package/build/{src/errors → errors}/RoomExceptions.d.ts +0 -0
  40. /package/build/{src/errors → errors}/SeatReservationError.d.ts +0 -0
  41. /package/build/{src/errors → errors}/ServerError.d.ts +0 -0
  42. /package/build/{src/index.d.ts → index.d.ts} +0 -0
  43. /package/build/{src/matchmaker → matchmaker}/Lobby.d.ts +0 -0
  44. /package/build/{src/matchmaker → matchmaker}/LocalDriver/LocalDriver.d.ts +0 -0
  45. /package/build/{src/matchmaker → matchmaker}/LocalDriver/Query.d.ts +0 -0
  46. /package/build/{src/matchmaker → matchmaker}/RegisteredHandler.d.ts +0 -0
  47. /package/build/{src/matchmaker → matchmaker}/controller.d.ts +0 -0
  48. /package/build/{src/matchmaker → matchmaker}/driver.d.ts +0 -0
  49. /package/build/{src/presence → presence}/LocalPresence.d.ts +0 -0
  50. /package/build/{src/presence → presence}/Presence.d.ts +0 -0
  51. /package/build/{src/rooms → rooms}/LobbyRoom.d.ts +0 -0
  52. /package/build/{src/rooms → rooms}/RankedQueueRoom.d.ts +0 -0
  53. /package/build/{src/rooms → rooms}/RelayRoom.d.ts +0 -0
  54. /package/build/{src/router → router}/default_routes.d.ts +0 -0
  55. /package/build/{src/router → router}/index.d.ts +0 -0
  56. /package/build/{src/serializer → serializer}/NoneSerializer.d.ts +0 -0
  57. /package/build/{src/serializer → serializer}/SchemaSerializer.d.ts +0 -0
  58. /package/build/{src/serializer → serializer}/SchemaSerializerDebug.d.ts +0 -0
  59. /package/build/{src/serializer → serializer}/Serializer.d.ts +0 -0
  60. /package/build/{src/utils → utils}/DevMode.d.ts +0 -0
  61. /package/build/{src/utils → utils}/StandardSchema.d.ts +0 -0
  62. /package/build/{src/utils → utils}/Utils.d.ts +0 -0
  63. /package/build/{src/utils → utils}/nanoevents.d.ts +0 -0
@@ -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
- });
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/matchmaker/routes.ts"],
4
- "sourcesContent": ["import { createEndpoint, createRouter } from \"@colyseus/better-call\";\nimport * as matchMaker from \"../MatchMaker.ts\";\nimport { getBearerToken } from \"../utils/Utils.ts\";\n\nexport const postMatchmakeMethod = createEndpoint(\"/matchmake/:method/:roomName\", { method: \"POST\" }, async (ctx) => {\n // do not accept matchmaking requests if already shutting down\n if (matchMaker.state === matchMaker.MatchMakerState.SHUTTING_DOWN) {\n throw ctx.error(503);\n }\n\n const requestHeaders = ctx.request.headers;\n const headers = Object.assign(\n {},\n matchMaker.controller.DEFAULT_CORS_HEADERS,\n matchMaker.controller.getCorsHeaders(requestHeaders)\n );\n\n const method = ctx.params.method;\n const roomName = ctx.params.roomName;\n\n Object.entries(headers).forEach(([key, value]) => {\n ctx.setHeader(key, value);\n })\n ctx.setHeader('Content-Type', 'application/json');\n\n try {\n const clientOptions = ctx.body;\n const response = await matchMaker.controller.invokeMethod(\n method,\n roomName,\n clientOptions,\n {\n token: getBearerToken(ctx.request.headers.get('authorization')),\n headers: ctx.request.headers,\n ip: requestHeaders.get('x-forwarded-for') ?? requestHeaders.get('x-client-ip') ?? requestHeaders.get('x-real-ip'),\n req: ctx.request as any,\n },\n );\n\n //\n // TODO: respond with protocol, if available\n //\n // // specify protocol, if available.\n // if (this.transport.protocol !== undefined) {\n // response.protocol = this.transport.protocol;\n // }\n\n return response;\n\n } catch (e: any) {\n throw ctx.error(e.code, { code: e.code, error: e.message, });\n }\n\n});\n\nexport function getDefaultRouter() {\n return createRouter({ postMatchmakeMethod });\n}"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA6C;AAC7C,iBAA4B;AAC5B,mBAA+B;AAExB,MAAM,0BAAsB,mCAAe,gCAAgC,EAAE,QAAQ,OAAO,GAAG,OAAO,QAAQ;AAEnH,MAAI,WAAW,UAAU,WAAW,gBAAgB,eAAe;AACjE,UAAM,IAAI,MAAM,GAAG;AAAA,EACrB;AAEA,QAAM,iBAAiB,IAAI,QAAQ;AACnC,QAAM,UAAU,OAAO;AAAA,IACrB,CAAC;AAAA,IACD,WAAW,WAAW;AAAA,IACtB,WAAW,WAAW,eAAe,cAAc;AAAA,EACrD;AAEA,QAAM,SAAS,IAAI,OAAO;AAC1B,QAAM,WAAW,IAAI,OAAO;AAE5B,SAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAChD,QAAI,UAAU,KAAK,KAAK;AAAA,EAC1B,CAAC;AACD,MAAI,UAAU,gBAAgB,kBAAkB;AAEhD,MAAI;AACF,UAAM,gBAAgB,IAAI;AAC1B,UAAM,WAAW,MAAM,WAAW,WAAW;AAAA,MAC3C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,WAAO,6BAAe,IAAI,QAAQ,QAAQ,IAAI,eAAe,CAAC;AAAA,QAC9D,SAAS,IAAI,QAAQ;AAAA,QACrB,IAAI,eAAe,IAAI,iBAAiB,KAAK,eAAe,IAAI,aAAa,KAAK,eAAe,IAAI,WAAW;AAAA,QAChH,KAAK,IAAI;AAAA,MACX;AAAA,IACF;AAUA,WAAO;AAAA,EAET,SAAS,GAAQ;AACf,UAAM,IAAI,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,EAAE,QAAS,CAAC;AAAA,EAC7D;AAEF,CAAC;AAEM,SAAS,mBAAmB;AACjC,aAAO,iCAAa,EAAE,oBAAoB,CAAC;AAC7C;",
6
- "names": []
7
- }
@@ -1,45 +0,0 @@
1
- // packages/core/src/matchmaker/routes.ts
2
- import { createEndpoint, createRouter } from "@colyseus/better-call";
3
- import * as matchMaker from "../MatchMaker.mjs";
4
- import { getBearerToken } from "../utils/Utils.mjs";
5
- var postMatchmakeMethod = createEndpoint("/matchmake/:method/:roomName", { method: "POST" }, async (ctx) => {
6
- if (matchMaker.state === matchMaker.MatchMakerState.SHUTTING_DOWN) {
7
- throw ctx.error(503);
8
- }
9
- const requestHeaders = ctx.request.headers;
10
- const headers = Object.assign(
11
- {},
12
- matchMaker.controller.DEFAULT_CORS_HEADERS,
13
- matchMaker.controller.getCorsHeaders(requestHeaders)
14
- );
15
- const method = ctx.params.method;
16
- const roomName = ctx.params.roomName;
17
- Object.entries(headers).forEach(([key, value]) => {
18
- ctx.setHeader(key, value);
19
- });
20
- ctx.setHeader("Content-Type", "application/json");
21
- try {
22
- const clientOptions = ctx.body;
23
- const response = await matchMaker.controller.invokeMethod(
24
- method,
25
- roomName,
26
- clientOptions,
27
- {
28
- token: getBearerToken(ctx.request.headers.get("authorization")),
29
- headers: ctx.request.headers,
30
- ip: requestHeaders.get("x-forwarded-for") ?? requestHeaders.get("x-client-ip") ?? requestHeaders.get("x-real-ip"),
31
- req: ctx.request
32
- }
33
- );
34
- return response;
35
- } catch (e) {
36
- throw ctx.error(e.code, { code: e.code, error: e.message });
37
- }
38
- });
39
- function getDefaultRouter() {
40
- return createRouter({ postMatchmakeMethod });
41
- }
42
- export {
43
- getDefaultRouter,
44
- postMatchmakeMethod
45
- };
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/matchmaker/routes.ts"],
4
- "sourcesContent": ["import { createEndpoint, createRouter } from \"@colyseus/better-call\";\nimport * as matchMaker from \"../MatchMaker.ts\";\nimport { getBearerToken } from \"../utils/Utils.ts\";\n\nexport const postMatchmakeMethod = createEndpoint(\"/matchmake/:method/:roomName\", { method: \"POST\" }, async (ctx) => {\n // do not accept matchmaking requests if already shutting down\n if (matchMaker.state === matchMaker.MatchMakerState.SHUTTING_DOWN) {\n throw ctx.error(503);\n }\n\n const requestHeaders = ctx.request.headers;\n const headers = Object.assign(\n {},\n matchMaker.controller.DEFAULT_CORS_HEADERS,\n matchMaker.controller.getCorsHeaders(requestHeaders)\n );\n\n const method = ctx.params.method;\n const roomName = ctx.params.roomName;\n\n Object.entries(headers).forEach(([key, value]) => {\n ctx.setHeader(key, value);\n })\n ctx.setHeader('Content-Type', 'application/json');\n\n try {\n const clientOptions = ctx.body;\n const response = await matchMaker.controller.invokeMethod(\n method,\n roomName,\n clientOptions,\n {\n token: getBearerToken(ctx.request.headers.get('authorization')),\n headers: ctx.request.headers,\n ip: requestHeaders.get('x-forwarded-for') ?? requestHeaders.get('x-client-ip') ?? requestHeaders.get('x-real-ip'),\n req: ctx.request as any,\n },\n );\n\n //\n // TODO: respond with protocol, if available\n //\n // // specify protocol, if available.\n // if (this.transport.protocol !== undefined) {\n // response.protocol = this.transport.protocol;\n // }\n\n return response;\n\n } catch (e: any) {\n throw ctx.error(e.code, { code: e.code, error: e.message, });\n }\n\n});\n\nexport function getDefaultRouter() {\n return createRouter({ postMatchmakeMethod });\n}"],
5
- "mappings": ";AAAA,SAAS,gBAAgB,oBAAoB;AAC7C,YAAY,gBAAgB;AAC5B,SAAS,sBAAsB;AAExB,IAAM,sBAAsB,eAAe,gCAAgC,EAAE,QAAQ,OAAO,GAAG,OAAO,QAAQ;AAEnH,MAAe,qBAAqB,2BAAgB,eAAe;AACjE,UAAM,IAAI,MAAM,GAAG;AAAA,EACrB;AAEA,QAAM,iBAAiB,IAAI,QAAQ;AACnC,QAAM,UAAU,OAAO;AAAA,IACrB,CAAC;AAAA,IACU,sBAAW;AAAA,IACX,sBAAW,eAAe,cAAc;AAAA,EACrD;AAEA,QAAM,SAAS,IAAI,OAAO;AAC1B,QAAM,WAAW,IAAI,OAAO;AAE5B,SAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAChD,QAAI,UAAU,KAAK,KAAK;AAAA,EAC1B,CAAC;AACD,MAAI,UAAU,gBAAgB,kBAAkB;AAEhD,MAAI;AACF,UAAM,gBAAgB,IAAI;AAC1B,UAAM,WAAW,MAAiB,sBAAW;AAAA,MAC3C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,OAAO,eAAe,IAAI,QAAQ,QAAQ,IAAI,eAAe,CAAC;AAAA,QAC9D,SAAS,IAAI,QAAQ;AAAA,QACrB,IAAI,eAAe,IAAI,iBAAiB,KAAK,eAAe,IAAI,aAAa,KAAK,eAAe,IAAI,WAAW;AAAA,QAChH,KAAK,IAAI;AAAA,MACX;AAAA,IACF;AAUA,WAAO;AAAA,EAET,SAAS,GAAQ;AACf,UAAM,IAAI,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,EAAE,QAAS,CAAC;AAAA,EAC7D;AAEF,CAAC;AAEM,SAAS,mBAAmB;AACjC,SAAO,aAAa,EAAE,oBAAoB,CAAC;AAC7C;",
6
- "names": []
7
- }
@@ -1,51 +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 createRoom_exports = {};
20
- __export(createRoom_exports, {
21
- createRoom: () => createRoom
22
- });
23
- module.exports = __toCommonJS(createRoom_exports);
24
- var import_core = require("@colyseus/core");
25
- function createRoom(options) {
26
- class _ extends import_core.Room {
27
- constructor() {
28
- super();
29
- if (options.state && typeof options.state === "function") {
30
- this.state = options.state();
31
- }
32
- }
33
- onCreate(opts) {
34
- return options.onCreate?.call(this, opts);
35
- }
36
- onJoin(client, opts) {
37
- return options.onJoin?.call(this, client, opts);
38
- }
39
- onLeave(client, code) {
40
- return options.onLeave?.call(this, client, code);
41
- }
42
- onDispose() {
43
- return options.onDispose?.call(this);
44
- }
45
- }
46
- return _;
47
- }
48
- // Annotate the CommonJS export names for ESM import in node:
49
- 0 && (module.exports = {
50
- createRoom
51
- });
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/rooms/createRoom.ts"],
4
- "sourcesContent": ["/**\n * Exploration: defineRoom() factory function\n *\n * Goal: Allow users to define rooms without explicit generic parameters,\n * while still getting full type inference for broadcast() and client.send()\n */\n\nimport { Room, type Client, type AuthContext } from \"@colyseus/core\";\n\n/**\n * Helper type for cleaner Client typing with messages.\n * Reduces boilerplate from `Client<{ messages: M }>` to `MessageClient<M>`.\n *\n * @example\n * ```typescript\n * type MyClient = MessageClient<{\n * chat: { text: string };\n * move: { x: number; y: number };\n * }>;\n * ```\n */\nexport type MessageClient<Messages extends Record<string, any>> = Client<{ messages: Messages }>;\n\n// =============================================================================\n// APPROACH 2: Object-based config (Vue-style)\n// =============================================================================\n\n/**\n * Options for createRoom factory function.\n */\ninterface DefineRoomOptions<\n TClient extends Client = Client,\n State extends object = any,\n JoinOptions = any\n> {\n state?: State | (() => State);\n onCreate?(this: Room<State, any, TClient>, options: any): void | Promise<void>;\n onJoin?(this: Room<State, any, TClient>, client: TClient, options: JoinOptions): void | Promise<void>;\n onLeave?(this: Room<State, any, TClient>, client: TClient, code?: number): void | Promise<void>;\n onDispose?(this: Room<State, any, TClient>): void | Promise<void>;\n}\n\n/**\n * Create a Room class from an options object.\n * Provides Vue-style object configuration with full type inference.\n *\n * @example\n * ```typescript\n * type MyClient = Client<{\n * userData: { rank: number };\n * auth: { odToken: string };\n * messages: {\n * chat: { text: string };\n * move: { x: number; y: number };\n * };\n * }>;\n *\n * const MyRoom = createRoom<MyClient, MyState>({\n * state: () => new MyState(),\n *\n * onCreate() {\n * console.log(\"Room created\");\n * },\n *\n * onJoin(client, options) {\n * client.send(\"chat\", { text: \"Welcome!\" }); // \u2705 typed!\n * this.broadcast(\"move\", { x: 0, y: 0 }); // \u2705 typed!\n * client.userData.rank; // \u2705 typed!\n * client.auth.odToken; // \u2705 typed!\n * }\n * });\n * ```\n */\nexport function createRoom<\n TClient extends Client = Client,\n State extends object = any,\n JoinOptions = any\n>(options: DefineRoomOptions<TClient, State, JoinOptions>) {\n type TRoom = Room<State, any, TClient>;\n\n class _ extends Room<State, any, TClient> {\n constructor() {\n super();\n if (options.state && typeof options.state === 'function') {\n this.state = options.state();\n }\n }\n\n onCreate(opts: any) {\n return options.onCreate?.call(this as TRoom, opts);\n }\n\n onJoin(client: TClient, opts: JoinOptions) {\n return options.onJoin?.call(this as TRoom, client, opts);\n }\n\n onLeave(client: TClient, code?: number) {\n return options.onLeave?.call(this as TRoom, client, code);\n }\n\n onDispose() {\n return options.onDispose?.call(this as TRoom);\n }\n }\n\n return _ as typeof Room<State, any, TClient>;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,kBAAoD;AAkE7C,SAAS,WAId,SAAyD;AAAA,EAGzD,MAAM,UAAU,iBAA0B;AAAA,IACxC,cAAc;AACZ,YAAM;AACN,UAAI,QAAQ,SAAS,OAAO,QAAQ,UAAU,YAAY;AACxD,aAAK,QAAQ,QAAQ,MAAM;AAAA,MAC7B;AAAA,IACF;AAAA,IAEA,SAAS,MAAW;AAClB,aAAO,QAAQ,UAAU,KAAK,MAAe,IAAI;AAAA,IACnD;AAAA,IAEA,OAAO,QAAiB,MAAmB;AACzC,aAAO,QAAQ,QAAQ,KAAK,MAAe,QAAQ,IAAI;AAAA,IACzD;AAAA,IAEA,QAAQ,QAAiB,MAAe;AACtC,aAAO,QAAQ,SAAS,KAAK,MAAe,QAAQ,IAAI;AAAA,IAC1D;AAAA,IAEA,YAAY;AACV,aAAO,QAAQ,WAAW,KAAK,IAAa;AAAA,IAC9C;AAAA,EACF;AAEA,SAAO;AACT;",
6
- "names": []
7
- }
@@ -1,28 +0,0 @@
1
- // packages/core/src/rooms/createRoom.ts
2
- import { Room } from "@colyseus/core";
3
- function createRoom(options) {
4
- class _ extends Room {
5
- constructor() {
6
- super();
7
- if (options.state && typeof options.state === "function") {
8
- this.state = options.state();
9
- }
10
- }
11
- onCreate(opts) {
12
- return options.onCreate?.call(this, opts);
13
- }
14
- onJoin(client, opts) {
15
- return options.onJoin?.call(this, client, opts);
16
- }
17
- onLeave(client, code) {
18
- return options.onLeave?.call(this, client, code);
19
- }
20
- onDispose() {
21
- return options.onDispose?.call(this);
22
- }
23
- }
24
- return _;
25
- }
26
- export {
27
- createRoom
28
- };
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/rooms/createRoom.ts"],
4
- "sourcesContent": ["/**\n * Exploration: defineRoom() factory function\n *\n * Goal: Allow users to define rooms without explicit generic parameters,\n * while still getting full type inference for broadcast() and client.send()\n */\n\nimport { Room, type Client, type AuthContext } from \"@colyseus/core\";\n\n/**\n * Helper type for cleaner Client typing with messages.\n * Reduces boilerplate from `Client<{ messages: M }>` to `MessageClient<M>`.\n *\n * @example\n * ```typescript\n * type MyClient = MessageClient<{\n * chat: { text: string };\n * move: { x: number; y: number };\n * }>;\n * ```\n */\nexport type MessageClient<Messages extends Record<string, any>> = Client<{ messages: Messages }>;\n\n// =============================================================================\n// APPROACH 2: Object-based config (Vue-style)\n// =============================================================================\n\n/**\n * Options for createRoom factory function.\n */\ninterface DefineRoomOptions<\n TClient extends Client = Client,\n State extends object = any,\n JoinOptions = any\n> {\n state?: State | (() => State);\n onCreate?(this: Room<State, any, TClient>, options: any): void | Promise<void>;\n onJoin?(this: Room<State, any, TClient>, client: TClient, options: JoinOptions): void | Promise<void>;\n onLeave?(this: Room<State, any, TClient>, client: TClient, code?: number): void | Promise<void>;\n onDispose?(this: Room<State, any, TClient>): void | Promise<void>;\n}\n\n/**\n * Create a Room class from an options object.\n * Provides Vue-style object configuration with full type inference.\n *\n * @example\n * ```typescript\n * type MyClient = Client<{\n * userData: { rank: number };\n * auth: { odToken: string };\n * messages: {\n * chat: { text: string };\n * move: { x: number; y: number };\n * };\n * }>;\n *\n * const MyRoom = createRoom<MyClient, MyState>({\n * state: () => new MyState(),\n *\n * onCreate() {\n * console.log(\"Room created\");\n * },\n *\n * onJoin(client, options) {\n * client.send(\"chat\", { text: \"Welcome!\" }); // \u2705 typed!\n * this.broadcast(\"move\", { x: 0, y: 0 }); // \u2705 typed!\n * client.userData.rank; // \u2705 typed!\n * client.auth.odToken; // \u2705 typed!\n * }\n * });\n * ```\n */\nexport function createRoom<\n TClient extends Client = Client,\n State extends object = any,\n JoinOptions = any\n>(options: DefineRoomOptions<TClient, State, JoinOptions>) {\n type TRoom = Room<State, any, TClient>;\n\n class _ extends Room<State, any, TClient> {\n constructor() {\n super();\n if (options.state && typeof options.state === 'function') {\n this.state = options.state();\n }\n }\n\n onCreate(opts: any) {\n return options.onCreate?.call(this as TRoom, opts);\n }\n\n onJoin(client: TClient, opts: JoinOptions) {\n return options.onJoin?.call(this as TRoom, client, opts);\n }\n\n onLeave(client: TClient, code?: number) {\n return options.onLeave?.call(this as TRoom, client, code);\n }\n\n onDispose() {\n return options.onDispose?.call(this as TRoom);\n }\n }\n\n return _ as typeof Room<State, any, TClient>;\n}\n"],
5
- "mappings": ";AAOA,SAAS,YAA2C;AAkE7C,SAAS,WAId,SAAyD;AAAA,EAGzD,MAAM,UAAU,KAA0B;AAAA,IACxC,cAAc;AACZ,YAAM;AACN,UAAI,QAAQ,SAAS,OAAO,QAAQ,UAAU,YAAY;AACxD,aAAK,QAAQ,QAAQ,MAAM;AAAA,MAC7B;AAAA,IACF;AAAA,IAEA,SAAS,MAAW;AAClB,aAAO,QAAQ,UAAU,KAAK,MAAe,IAAI;AAAA,IACnD;AAAA,IAEA,OAAO,QAAiB,MAAmB;AACzC,aAAO,QAAQ,QAAQ,KAAK,MAAe,QAAQ,IAAI;AAAA,IACzD;AAAA,IAEA,QAAQ,QAAiB,MAAe;AACtC,aAAO,QAAQ,SAAS,KAAK,MAAe,QAAQ,IAAI;AAAA,IAC1D;AAAA,IAEA,YAAY;AACV,aAAO,QAAQ,WAAW,KAAK,IAAa;AAAA,IAC9C;AAAA,EACF;AAEA,SAAO;AACT;",
6
- "names": []
7
- }
@@ -1,145 +0,0 @@
1
- import type { Room } from "@colyseus/core";
2
- /**
3
- * Sort options for room queries.
4
- */
5
- export interface SortOptions {
6
- [fieldName: string]: 1 | -1 | 'asc' | 'desc' | 'ascending' | 'descending';
7
- }
8
- /**
9
- * Built-in room cache fields that can be used for sorting.
10
- */
11
- export type IRoomCacheSortByKeys = 'clients' | 'maxClients' | 'createdAt';
12
- /**
13
- * Built-in room cache fields that can be used for filtering.
14
- */
15
- export type IRoomCacheFilterByKeys = 'clients' | 'maxClients' | 'processId';
16
- /**
17
- * Extract metadata type from Room type
18
- */
19
- export type ExtractMetadata<RoomType extends Room> = RoomType extends Room<infer M> ? M : any;
20
- /**
21
- * Generates a unique lock ID based on filter options.
22
- */
23
- export declare function getLockId(filterOptions: any): string;
24
- /**
25
- * Initialize a room cache which contains CRUD operations for room listings.
26
- *
27
- * @internal
28
- * @param initialValues - Predefined room properties.
29
- * @returns RoomData - New room cache.
30
- */
31
- export declare function initializeRoomCache(initialValues?: Partial<IRoomCache>): IRoomCache;
32
- export interface IRoomCache<Metadata = any> {
33
- /**
34
- * Room name.
35
- */
36
- name: string;
37
- /**
38
- * Unique identifier for the room.
39
- */
40
- roomId: string;
41
- /**
42
- * Process id where the room is running.
43
- */
44
- processId: string;
45
- /**
46
- * Number of clients connected to this room.
47
- */
48
- clients: number;
49
- /**
50
- * Maximum number of clients allowed to join the room.
51
- */
52
- maxClients: number;
53
- /**
54
- * Indicates if the room is locked (i.e. join requests are rejected).
55
- */
56
- locked?: boolean;
57
- /**
58
- * Indicates if the room is private
59
- * Private rooms can't be joined via `join()` or `joinOrCreate()`.
60
- */
61
- private?: boolean;
62
- /**
63
- * Public address of the server.
64
- */
65
- publicAddress?: string;
66
- /**
67
- * Do not show this room in lobby listing.
68
- */
69
- unlisted?: boolean;
70
- /**
71
- * Metadata associated with the room.
72
- */
73
- metadata?: Metadata;
74
- /**
75
- * When the room was created.
76
- */
77
- createdAt?: Date;
78
- }
79
- export interface MatchMakerDriver {
80
- /**
81
- * Check if a room exists in room cache.
82
- *
83
- * @param roomId - The room id.
84
- *
85
- * @returns Promise<boolean> | boolean - A promise or a boolean value indicating if the room exists.
86
- */
87
- has(roomId: string): Promise<boolean> | boolean;
88
- /**
89
- * Query rooms in room cache for given conditions.
90
- *
91
- * @param conditions - Filtering conditions.
92
- *
93
- * @returns Promise<IRoomCache[]> | IRoomCache[] - A promise or an object contaning room metadata list.
94
- */
95
- query<T extends Room = any>(conditions: Partial<IRoomCache & ExtractMetadata<T>>, sortOptions?: SortOptions): Promise<Array<IRoomCache<ExtractMetadata<T>>>> | Array<IRoomCache<ExtractMetadata<T>>>;
96
- /**
97
- * Clean up rooms in room cache by process id.
98
- * @param processId - The process id.
99
- */
100
- cleanup?(processId: string): Promise<void>;
101
- /**
102
- * Query for a room in room cache for given conditions.
103
- *
104
- * @param conditions - Filtering conditions.
105
- *
106
- * @returns `IRoomCache` - An object contaning filtered room metadata.
107
- */
108
- findOne<T extends Room = any>(conditions: Partial<IRoomCache & ExtractMetadata<T>>, sortOptions?: SortOptions): Promise<IRoomCache<ExtractMetadata<T>>>;
109
- /**
110
- * Remove a room from room cache.
111
- *
112
- * @param roomId - The room id.
113
- */
114
- remove(roomId: string): Promise<boolean> | boolean;
115
- /**
116
- * Update a room in room cache.
117
- *
118
- * @param IRoomCache - The room to update.
119
- * @param operations - The operations to update the room.
120
- */
121
- update(room: IRoomCache, operations: Partial<{
122
- $set: Partial<IRoomCache>;
123
- $inc: Partial<IRoomCache>;
124
- }>): Promise<boolean> | boolean;
125
- /**
126
- * Persist a room in room cache.
127
- *
128
- * @param room - The room to persist.
129
- * @param create - If true, create a new record. If false (default), update existing record.
130
- */
131
- persist(room: IRoomCache, create?: boolean): Promise<boolean> | boolean;
132
- /**
133
- * Empty the room cache. Used for testing purposes only.
134
- * @internal Do not call this method yourself.
135
- */
136
- clear(): void;
137
- /**
138
- * Boot the room cache medium (if available).
139
- */
140
- boot?(): Promise<void>;
141
- /**
142
- * Dispose the connection of the room cache medium.
143
- */
144
- shutdown(): void;
145
- }
@@ -1,17 +0,0 @@
1
- import type { IRoomCache, SortOptions, MatchMakerDriver } from '../api.ts';
2
- export type { IRoomCache, SortOptions, MatchMakerDriver };
3
- export declare class LocalDriver implements MatchMakerDriver {
4
- rooms: IRoomCache[];
5
- has(roomId: string): boolean;
6
- query(conditions: Partial<IRoomCache>, sortOptions?: SortOptions): IRoomCache<any>[];
7
- cleanup(processId: string): Promise<void>;
8
- findOne(conditions: Partial<IRoomCache>, sortOptions?: SortOptions): Promise<IRoomCache>;
9
- update(room: IRoomCache, operations: Partial<{
10
- $set: Partial<IRoomCache>;
11
- $inc: Partial<IRoomCache>;
12
- }>): boolean;
13
- persist(room: IRoomCache, create?: boolean): boolean;
14
- remove(roomId: string): boolean;
15
- clear(): void;
16
- shutdown(): void;
17
- }