@colyseus/core 0.15.1 → 0.15.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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/Utils.ts"],
4
- "sourcesContent": ["import nanoid from 'nanoid';\nimport { addExtension } from 'msgpackr';\n\nimport { debugAndPrintError } from '../Debug';\nimport { EventEmitter } from \"events\";\nimport { ServerOpts, Socket } from \"net\";\nimport { logger } from '../Logger';\nimport { Schema } from \"@colyseus/schema\";\n\n// remote room call timeouts\nexport const REMOTE_ROOM_SHORT_TIMEOUT = Number(process.env.COLYSEUS_PRESENCE_SHORT_TIMEOUT || 2000);\n\nexport function generateId(length: number = 9) {\n return nanoid(length);\n}\n\n//\n// nodemon sends SIGUSR2 before reloading\n// (https://github.com/remy/nodemon#controlling-shutdown-of-your-script)\n//\nconst signals: NodeJS.Signals[] = ['SIGINT', 'SIGTERM', 'SIGUSR2'];\n\nexport function registerGracefulShutdown(callback: (err?: Error) => void) {\n /**\n * Gracefully shutdown on uncaught errors\n */\n process.on('uncaughtException', (err) => {\n debugAndPrintError(err);\n callback(err);\n });\n\n signals.forEach((signal) =>\n process.once(signal, () => callback()));\n}\n\nexport function retry<T = any>(\n cb: Function,\n maxRetries: number = 3,\n errorWhiteList: any[] = [],\n retries: number = 0,\n) {\n return new Promise<T>((resolve, reject) => {\n cb()\n .then(resolve)\n .catch((e) => {\n if (\n errorWhiteList.indexOf(e.constructor) !== -1 &&\n retries++ < maxRetries\n ) {\n setTimeout(() => {\n retry<T>(cb, maxRetries, errorWhiteList, retries).\n then(resolve).\n catch((e2) => reject(e2));\n }, Math.floor(Math.random() * Math.pow(2, retries) * 400));\n\n } else {\n reject(e);\n }\n });\n });\n}\n\nexport function spliceOne(arr: any[], index: number): boolean {\n // manually splice availableRooms array\n // http://jsperf.com/manual-splice\n if (index === -1 || index >= arr.length) {\n return false;\n }\n\n const len = arr.length - 1;\n for (let i = index; i < len; i++) {\n arr[i] = arr[i + 1];\n }\n\n arr.length = len;\n return true;\n}\n\nexport class Deferred<T= any> {\n public promise: Promise<T>;\n\n public resolve: Function;\n public reject: Function;\n\n constructor() {\n this.promise = new Promise<T>((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n\n public then(func: (value: T) => any) {\n return this.promise.then.apply(this.promise, arguments);\n }\n\n public catch(func: (value: any) => any) {\n return this.promise.catch(func);\n }\n\n}\n\nexport function merge(a: any, ...objs: any[]): any {\n for (let i = 0, len = objs.length; i < len; i++) {\n const b = objs[i];\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n }\n return a;\n}\n\nexport class HybridArray<T> {\n public uniqueProperty: string;\n public hashedArray: { [key: string]: T } = {};\n public array: T[] = [];\n\n constructor(uniquePropertyName: string, items?: T[]) {\n this.uniqueProperty = uniquePropertyName;\n if (items) {\n this.array = this.array.concat(items);\n for (const element of items) {\n this.hashedArray[element[this.uniqueProperty]] = element;\n }\n }\n }\n\n public get length(): number {\n return this.array.length;\n }\n\n public add(item: T) {\n if (!this.hashedArray[item[this.uniqueProperty]]) {\n this.array.push(item);\n this.hashedArray[item[this.uniqueProperty]] = item;\n\n } else {\n logger.warn(`.add(): element already exists:`, item[this.uniqueProperty]);\n }\n }\n\n public at(index: number): T | undefined {\n if (index >= this.array.length) {\n this._badIndexWarning(index);\n\n } else {\n return this.array[index];\n }\n }\n\n public concat(items: T[]) {\n if (items) {\n for (const item of items) {\n this.hashedArray[item[this.uniqueProperty]] = item;\n }\n this.array.concat(items);\n }\n return this;\n }\n\n public find<S extends T>(predicate: (this: void, value: T, index: number, obj: T[]) => value is S, thisArg?: any): S;\n public find(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): T;\n public find(predicate: any, thisArg?: any): T | undefined {\n return this.array.find(predicate, thisArg);\n }\n\n public filter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[]\n public filter<S extends T>(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[] {\n return this.array.filter(predicate, thisArg);\n }\n\n public forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void {\n Array.prototype.forEach.call(this.array, callbackfn);\n }\n\n public get(key: string): T | undefined {\n return this.hashedArray[key];\n }\n\n public includes(element: T) {\n return this.hashedArray[element[this.uniqueProperty]] !== undefined;\n }\n\n public indexOf(element: T): number {\n return this.array.indexOf(element);\n }\n\n public map<U>(callback: (value: T, index: number, array: T[]) => U) {\n const result: U[] = [];\n for (let index = 0; index < this.array.length; index++) {\n result.push(callback(this.array[index], index, this.array));\n }\n return result;\n }\n\n public deleteAt(index: number) {\n if (index >= this.array.length) {\n this._badIndexWarning(index);\n return undefined;\n\n } else {\n const removable = this.spliceOne(index);\n delete this.hashedArray[removable[this.uniqueProperty]];\n return removable;\n }\n }\n\n public deleteByKey(key: string): T {\n if (!this.hashedArray[key]) {\n logger.error(`deleteByKey(): no such element for '${key}'.`);\n return undefined;\n } else {\n const removable = this.spliceOne(this.indexOf(this.hashedArray[key]));\n delete this.hashedArray[key];\n return removable;\n }\n }\n\n public delete(obj: T): T {\n if (this.hashedArray[obj[this.uniqueProperty]]) {\n return this.deleteByKey(obj[this.uniqueProperty]);\n\n } else if (this.indexOf(obj) != -1) {\n return this.deleteAt(this.indexOf(obj));\n\n } else {\n return undefined;\n }\n }\n\n private _badIndexWarning(index) {\n logger.warn(`Index out of range, index: ${index}`);\n }\n\n private spliceOne(index: number): T {\n // manually splice availableRooms array\n // http://jsperf.com/manual-splice\n if (index === -1 || index >= this.array.length) {\n this._badIndexWarning(index);\n return undefined;\n }\n\n const itemRemoved = this.array[index];\n\n const len = this.array.length - 1;\n for (let i = index; i < len; i++) {\n this.array[i] = this.array[i + 1];\n }\n this.array.length = len;\n\n return itemRemoved;\n }\n}\n\nexport declare interface DummyServer {\n constructor(options?: ServerOpts, connectionListener?: (socket: Socket) => void);\n\n listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this;\n close(callback?: (err?: Error) => void): this;\n}\n\nexport class DummyServer extends EventEmitter {}\n\n// Add msgpackr extension to avoid circular references when encoding\n// https://github.com/kriszyp/msgpackr#custom-extensions\naddExtension({\n Class: Schema,\n type: 0,\n\n read(datum: any): any {\n return datum;\n },\n\n write(instance: any): any {\n return instance.toJSON();\n }\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import nanoid from 'nanoid';\nimport { addExtension } from 'msgpackr';\n\nimport { debugAndPrintError } from '../Debug';\nimport { EventEmitter } from \"events\";\nimport { ServerOpts, Socket } from \"net\";\nimport { logger } from '../Logger';\nimport { Schema } from \"@colyseus/schema\";\n\n// remote room call timeouts\nexport const REMOTE_ROOM_SHORT_TIMEOUT = Number(process.env.COLYSEUS_PRESENCE_SHORT_TIMEOUT || 2000);\n\nexport function generateId(length: number = 9) {\n return nanoid(length);\n}\n\n//\n// nodemon sends SIGUSR2 before reloading\n// (https://github.com/remy/nodemon#controlling-shutdown-of-your-script)\n//\nconst signals: NodeJS.Signals[] = ['SIGINT', 'SIGTERM', 'SIGUSR2'];\n\nexport function registerGracefulShutdown(callback: (err?: Error) => void) {\n /**\n * Gracefully shutdown on uncaught errors\n */\n process.on('uncaughtException', (err) => {\n debugAndPrintError(err);\n callback(err);\n });\n\n signals.forEach((signal) =>\n process.once(signal, () => callback()));\n}\n\nexport function retry<T = any>(\n cb: Function,\n maxRetries: number = 3,\n errorWhiteList: any[] = [],\n retries: number = 0,\n) {\n return new Promise<T>((resolve, reject) => {\n cb()\n .then(resolve)\n .catch((e) => {\n if (\n errorWhiteList.indexOf(e.constructor) !== -1 &&\n retries++ < maxRetries\n ) {\n setTimeout(() => {\n retry<T>(cb, maxRetries, errorWhiteList, retries).\n then(resolve).\n catch((e2) => reject(e2));\n }, Math.floor(Math.random() * Math.pow(2, retries) * 400));\n\n } else {\n reject(e);\n }\n });\n });\n}\n\nexport function spliceOne(arr: any[], index: number): boolean {\n // manually splice availableRooms array\n // http://jsperf.com/manual-splice\n if (index === -1 || index >= arr.length) {\n return false;\n }\n\n const len = arr.length - 1;\n for (let i = index; i < len; i++) {\n arr[i] = arr[i + 1];\n }\n\n arr.length = len;\n return true;\n}\n\nexport class Deferred<T= any> {\n public promise: Promise<T>;\n\n public resolve: Function;\n public reject: Function;\n\n constructor() {\n this.promise = new Promise<T>((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n\n public then(func: (value: T) => any) {\n return this.promise.then.apply(this.promise, arguments);\n }\n\n public catch(func: (value: any) => any) {\n return this.promise.catch(func);\n }\n\n}\n\nexport function merge(a: any, ...objs: any[]): any {\n for (let i = 0, len = objs.length; i < len; i++) {\n const b = objs[i];\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n }\n return a;\n}\n\nexport declare interface DummyServer {\n constructor(options?: ServerOpts, connectionListener?: (socket: Socket) => void);\n\n listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this;\n close(callback?: (err?: Error) => void): this;\n}\n\nexport class DummyServer extends EventEmitter {}\n\n// Add msgpackr extension to avoid circular references when encoding\n// https://github.com/kriszyp/msgpackr#custom-extensions\naddExtension({\n Class: Schema,\n type: 0,\n\n read(datum: any): any {\n return datum;\n },\n\n write(instance: any): any {\n return instance.toJSON();\n }\n});\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;AACnB,sBAA6B;AAE7B,mBAAmC;AACnC,oBAA6B;AAG7B,oBAAuB;AAGhB,MAAM,4BAA4B,OAAO,QAAQ,IAAI,mCAAmC,GAAI;AAE5F,SAAS,WAAW,SAAiB,GAAG;AAC7C,aAAO,cAAAA,SAAO,MAAM;AACtB;AAMA,MAAM,UAA4B,CAAC,UAAU,WAAW,SAAS;AAE1D,SAAS,yBAAyB,UAAiC;AAIxE,UAAQ,GAAG,qBAAqB,CAAC,QAAQ;AACvC,yCAAmB,GAAG;AACtB,aAAS,GAAG;AAAA,EACd,CAAC;AAED,UAAQ,QAAQ,CAAC,WACf,QAAQ,KAAK,QAAQ,MAAM,SAAS,CAAC,CAAC;AAC1C;AAEO,SAAS,MACd,IACA,aAAqB,GACrB,iBAAwB,CAAC,GACzB,UAAkB,GAClB;AACA,SAAO,IAAI,QAAW,CAAC,SAAS,WAAW;AACzC,OAAG,EACA,KAAK,OAAO,EACZ,MAAM,CAAC,MAAM;AACZ,UACE,eAAe,QAAQ,EAAE,WAAW,MAAM,MAC1C,YAAY,YACZ;AACA,mBAAW,MAAM;AACf,gBAAS,IAAI,YAAY,gBAAgB,OAAO,EAC9C,KAAK,OAAO,EACZ,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC;AAAA,QAC5B,GAAG,KAAK,MAAM,KAAK,OAAO,IAAI,KAAK,IAAI,GAAG,OAAO,IAAI,GAAG,CAAC;AAAA,MAE3D,OAAO;AACL,eAAO,CAAC;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACL,CAAC;AACH;AAEO,SAAS,UAAU,KAAY,OAAwB;AAG5D,MAAI,UAAU,MAAM,SAAS,IAAI,QAAQ;AACvC,WAAO;AAAA,EACT;AAEA,QAAM,MAAM,IAAI,SAAS;AACzB,WAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAChC,QAAI,KAAK,IAAI,IAAI;AAAA,EACnB;AAEA,MAAI,SAAS;AACb,SAAO;AACT;AAEO,MAAM,SAAiB;AAAA,EACrB;AAAA,EAEA;AAAA,EACA;AAAA,EAEP,cAAc;AACZ,SAAK,UAAU,IAAI,QAAW,CAAC,SAAS,WAAW;AACjD,WAAK,UAAU;AACf,WAAK,SAAS;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEO,KAAK,MAAyB;AACnC,WAAO,KAAK,QAAQ,KAAK,MAAM,KAAK,SAAS,SAAS;AAAA,EACxD;AAAA,EAEO,MAAM,MAA2B;AACtC,WAAO,KAAK,QAAQ,MAAM,IAAI;AAAA,EAChC;AAEF;AAEO,SAAS,MAAM,MAAW,MAAkB;AACjD,WAAS,IAAI,GAAG,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,UAAM,IAAI,KAAK;AACf,eAAW,OAAO,GAAG;AACnB,UAAI,EAAE,eAAe,GAAG,GAAG;AACzB,UAAE,OAAO,EAAE;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AASO,MAAM,oBAAoB,2BAAa;AAAC;AAAA,IAI/C,8BAAa;AAAA,EACX,OAAO;AAAA,EACP,MAAM;AAAA,EAEN,KAAK,OAAiB;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,UAAoB;AACxB,WAAO,SAAS,OAAO;AAAA,EACzB;AACF,CAAC;",
6
6
  "names": ["nanoid"]
7
7
  }
@@ -2,7 +2,6 @@ import nanoid from "nanoid";
2
2
  import { addExtension } from "msgpackr";
3
3
  import { debugAndPrintError } from "../Debug";
4
4
  import { EventEmitter } from "events";
5
- import { logger } from "../Logger";
6
5
  import { Schema } from "@colyseus/schema";
7
6
  const REMOTE_ROOM_SHORT_TIMEOUT = Number(process.env.COLYSEUS_PRESENCE_SHORT_TIMEOUT || 2e3);
8
7
  function generateId(length = 9) {
@@ -68,117 +67,6 @@ function merge(a, ...objs) {
68
67
  }
69
68
  return a;
70
69
  }
71
- class HybridArray {
72
- uniqueProperty;
73
- hashedArray = {};
74
- array = [];
75
- constructor(uniquePropertyName, items) {
76
- this.uniqueProperty = uniquePropertyName;
77
- if (items) {
78
- this.array = this.array.concat(items);
79
- for (const element of items) {
80
- this.hashedArray[element[this.uniqueProperty]] = element;
81
- }
82
- }
83
- }
84
- get length() {
85
- return this.array.length;
86
- }
87
- add(item) {
88
- if (!this.hashedArray[item[this.uniqueProperty]]) {
89
- this.array.push(item);
90
- this.hashedArray[item[this.uniqueProperty]] = item;
91
- } else {
92
- logger.warn(`.add(): element already exists:`, item[this.uniqueProperty]);
93
- }
94
- }
95
- at(index) {
96
- if (index >= this.array.length) {
97
- this._badIndexWarning(index);
98
- } else {
99
- return this.array[index];
100
- }
101
- }
102
- concat(items) {
103
- if (items) {
104
- for (const item of items) {
105
- this.hashedArray[item[this.uniqueProperty]] = item;
106
- }
107
- this.array.concat(items);
108
- }
109
- return this;
110
- }
111
- find(predicate, thisArg) {
112
- return this.array.find(predicate, thisArg);
113
- }
114
- filter(predicate, thisArg) {
115
- return this.array.filter(predicate, thisArg);
116
- }
117
- forEach(callbackfn, thisArg) {
118
- Array.prototype.forEach.call(this.array, callbackfn);
119
- }
120
- get(key) {
121
- return this.hashedArray[key];
122
- }
123
- includes(element) {
124
- return this.hashedArray[element[this.uniqueProperty]] !== void 0;
125
- }
126
- indexOf(element) {
127
- return this.array.indexOf(element);
128
- }
129
- map(callback) {
130
- const result = [];
131
- for (let index = 0; index < this.array.length; index++) {
132
- result.push(callback(this.array[index], index, this.array));
133
- }
134
- return result;
135
- }
136
- deleteAt(index) {
137
- if (index >= this.array.length) {
138
- this._badIndexWarning(index);
139
- return void 0;
140
- } else {
141
- const removable = this.spliceOne(index);
142
- delete this.hashedArray[removable[this.uniqueProperty]];
143
- return removable;
144
- }
145
- }
146
- deleteByKey(key) {
147
- if (!this.hashedArray[key]) {
148
- logger.error(`deleteByKey(): no such element for '${key}'.`);
149
- return void 0;
150
- } else {
151
- const removable = this.spliceOne(this.indexOf(this.hashedArray[key]));
152
- delete this.hashedArray[key];
153
- return removable;
154
- }
155
- }
156
- delete(obj) {
157
- if (this.hashedArray[obj[this.uniqueProperty]]) {
158
- return this.deleteByKey(obj[this.uniqueProperty]);
159
- } else if (this.indexOf(obj) != -1) {
160
- return this.deleteAt(this.indexOf(obj));
161
- } else {
162
- return void 0;
163
- }
164
- }
165
- _badIndexWarning(index) {
166
- logger.warn(`Index out of range, index: ${index}`);
167
- }
168
- spliceOne(index) {
169
- if (index === -1 || index >= this.array.length) {
170
- this._badIndexWarning(index);
171
- return void 0;
172
- }
173
- const itemRemoved = this.array[index];
174
- const len = this.array.length - 1;
175
- for (let i = index; i < len; i++) {
176
- this.array[i] = this.array[i + 1];
177
- }
178
- this.array.length = len;
179
- return itemRemoved;
180
- }
181
- }
182
70
  class DummyServer extends EventEmitter {
183
71
  }
184
72
  addExtension({
@@ -194,7 +82,6 @@ addExtension({
194
82
  export {
195
83
  Deferred,
196
84
  DummyServer,
197
- HybridArray,
198
85
  REMOTE_ROOM_SHORT_TIMEOUT,
199
86
  generateId,
200
87
  merge,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/Utils.ts"],
4
- "sourcesContent": ["import nanoid from 'nanoid';\nimport { addExtension } from 'msgpackr';\n\nimport { debugAndPrintError } from '../Debug';\nimport { EventEmitter } from \"events\";\nimport { ServerOpts, Socket } from \"net\";\nimport { logger } from '../Logger';\nimport { Schema } from \"@colyseus/schema\";\n\n// remote room call timeouts\nexport const REMOTE_ROOM_SHORT_TIMEOUT = Number(process.env.COLYSEUS_PRESENCE_SHORT_TIMEOUT || 2000);\n\nexport function generateId(length: number = 9) {\n return nanoid(length);\n}\n\n//\n// nodemon sends SIGUSR2 before reloading\n// (https://github.com/remy/nodemon#controlling-shutdown-of-your-script)\n//\nconst signals: NodeJS.Signals[] = ['SIGINT', 'SIGTERM', 'SIGUSR2'];\n\nexport function registerGracefulShutdown(callback: (err?: Error) => void) {\n /**\n * Gracefully shutdown on uncaught errors\n */\n process.on('uncaughtException', (err) => {\n debugAndPrintError(err);\n callback(err);\n });\n\n signals.forEach((signal) =>\n process.once(signal, () => callback()));\n}\n\nexport function retry<T = any>(\n cb: Function,\n maxRetries: number = 3,\n errorWhiteList: any[] = [],\n retries: number = 0,\n) {\n return new Promise<T>((resolve, reject) => {\n cb()\n .then(resolve)\n .catch((e) => {\n if (\n errorWhiteList.indexOf(e.constructor) !== -1 &&\n retries++ < maxRetries\n ) {\n setTimeout(() => {\n retry<T>(cb, maxRetries, errorWhiteList, retries).\n then(resolve).\n catch((e2) => reject(e2));\n }, Math.floor(Math.random() * Math.pow(2, retries) * 400));\n\n } else {\n reject(e);\n }\n });\n });\n}\n\nexport function spliceOne(arr: any[], index: number): boolean {\n // manually splice availableRooms array\n // http://jsperf.com/manual-splice\n if (index === -1 || index >= arr.length) {\n return false;\n }\n\n const len = arr.length - 1;\n for (let i = index; i < len; i++) {\n arr[i] = arr[i + 1];\n }\n\n arr.length = len;\n return true;\n}\n\nexport class Deferred<T= any> {\n public promise: Promise<T>;\n\n public resolve: Function;\n public reject: Function;\n\n constructor() {\n this.promise = new Promise<T>((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n\n public then(func: (value: T) => any) {\n return this.promise.then.apply(this.promise, arguments);\n }\n\n public catch(func: (value: any) => any) {\n return this.promise.catch(func);\n }\n\n}\n\nexport function merge(a: any, ...objs: any[]): any {\n for (let i = 0, len = objs.length; i < len; i++) {\n const b = objs[i];\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n }\n return a;\n}\n\nexport class HybridArray<T> {\n public uniqueProperty: string;\n public hashedArray: { [key: string]: T } = {};\n public array: T[] = [];\n\n constructor(uniquePropertyName: string, items?: T[]) {\n this.uniqueProperty = uniquePropertyName;\n if (items) {\n this.array = this.array.concat(items);\n for (const element of items) {\n this.hashedArray[element[this.uniqueProperty]] = element;\n }\n }\n }\n\n public get length(): number {\n return this.array.length;\n }\n\n public add(item: T) {\n if (!this.hashedArray[item[this.uniqueProperty]]) {\n this.array.push(item);\n this.hashedArray[item[this.uniqueProperty]] = item;\n\n } else {\n logger.warn(`.add(): element already exists:`, item[this.uniqueProperty]);\n }\n }\n\n public at(index: number): T | undefined {\n if (index >= this.array.length) {\n this._badIndexWarning(index);\n\n } else {\n return this.array[index];\n }\n }\n\n public concat(items: T[]) {\n if (items) {\n for (const item of items) {\n this.hashedArray[item[this.uniqueProperty]] = item;\n }\n this.array.concat(items);\n }\n return this;\n }\n\n public find<S extends T>(predicate: (this: void, value: T, index: number, obj: T[]) => value is S, thisArg?: any): S;\n public find(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): T;\n public find(predicate: any, thisArg?: any): T | undefined {\n return this.array.find(predicate, thisArg);\n }\n\n public filter(predicate: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[]\n public filter<S extends T>(predicate: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[] {\n return this.array.filter(predicate, thisArg);\n }\n\n public forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void {\n Array.prototype.forEach.call(this.array, callbackfn);\n }\n\n public get(key: string): T | undefined {\n return this.hashedArray[key];\n }\n\n public includes(element: T) {\n return this.hashedArray[element[this.uniqueProperty]] !== undefined;\n }\n\n public indexOf(element: T): number {\n return this.array.indexOf(element);\n }\n\n public map<U>(callback: (value: T, index: number, array: T[]) => U) {\n const result: U[] = [];\n for (let index = 0; index < this.array.length; index++) {\n result.push(callback(this.array[index], index, this.array));\n }\n return result;\n }\n\n public deleteAt(index: number) {\n if (index >= this.array.length) {\n this._badIndexWarning(index);\n return undefined;\n\n } else {\n const removable = this.spliceOne(index);\n delete this.hashedArray[removable[this.uniqueProperty]];\n return removable;\n }\n }\n\n public deleteByKey(key: string): T {\n if (!this.hashedArray[key]) {\n logger.error(`deleteByKey(): no such element for '${key}'.`);\n return undefined;\n } else {\n const removable = this.spliceOne(this.indexOf(this.hashedArray[key]));\n delete this.hashedArray[key];\n return removable;\n }\n }\n\n public delete(obj: T): T {\n if (this.hashedArray[obj[this.uniqueProperty]]) {\n return this.deleteByKey(obj[this.uniqueProperty]);\n\n } else if (this.indexOf(obj) != -1) {\n return this.deleteAt(this.indexOf(obj));\n\n } else {\n return undefined;\n }\n }\n\n private _badIndexWarning(index) {\n logger.warn(`Index out of range, index: ${index}`);\n }\n\n private spliceOne(index: number): T {\n // manually splice availableRooms array\n // http://jsperf.com/manual-splice\n if (index === -1 || index >= this.array.length) {\n this._badIndexWarning(index);\n return undefined;\n }\n\n const itemRemoved = this.array[index];\n\n const len = this.array.length - 1;\n for (let i = index; i < len; i++) {\n this.array[i] = this.array[i + 1];\n }\n this.array.length = len;\n\n return itemRemoved;\n }\n}\n\nexport declare interface DummyServer {\n constructor(options?: ServerOpts, connectionListener?: (socket: Socket) => void);\n\n listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this;\n close(callback?: (err?: Error) => void): this;\n}\n\nexport class DummyServer extends EventEmitter {}\n\n// Add msgpackr extension to avoid circular references when encoding\n// https://github.com/kriszyp/msgpackr#custom-extensions\naddExtension({\n Class: Schema,\n type: 0,\n\n read(datum: any): any {\n return datum;\n },\n\n write(instance: any): any {\n return instance.toJSON();\n }\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import nanoid from 'nanoid';\nimport { addExtension } from 'msgpackr';\n\nimport { debugAndPrintError } from '../Debug';\nimport { EventEmitter } from \"events\";\nimport { ServerOpts, Socket } from \"net\";\nimport { logger } from '../Logger';\nimport { Schema } from \"@colyseus/schema\";\n\n// remote room call timeouts\nexport const REMOTE_ROOM_SHORT_TIMEOUT = Number(process.env.COLYSEUS_PRESENCE_SHORT_TIMEOUT || 2000);\n\nexport function generateId(length: number = 9) {\n return nanoid(length);\n}\n\n//\n// nodemon sends SIGUSR2 before reloading\n// (https://github.com/remy/nodemon#controlling-shutdown-of-your-script)\n//\nconst signals: NodeJS.Signals[] = ['SIGINT', 'SIGTERM', 'SIGUSR2'];\n\nexport function registerGracefulShutdown(callback: (err?: Error) => void) {\n /**\n * Gracefully shutdown on uncaught errors\n */\n process.on('uncaughtException', (err) => {\n debugAndPrintError(err);\n callback(err);\n });\n\n signals.forEach((signal) =>\n process.once(signal, () => callback()));\n}\n\nexport function retry<T = any>(\n cb: Function,\n maxRetries: number = 3,\n errorWhiteList: any[] = [],\n retries: number = 0,\n) {\n return new Promise<T>((resolve, reject) => {\n cb()\n .then(resolve)\n .catch((e) => {\n if (\n errorWhiteList.indexOf(e.constructor) !== -1 &&\n retries++ < maxRetries\n ) {\n setTimeout(() => {\n retry<T>(cb, maxRetries, errorWhiteList, retries).\n then(resolve).\n catch((e2) => reject(e2));\n }, Math.floor(Math.random() * Math.pow(2, retries) * 400));\n\n } else {\n reject(e);\n }\n });\n });\n}\n\nexport function spliceOne(arr: any[], index: number): boolean {\n // manually splice availableRooms array\n // http://jsperf.com/manual-splice\n if (index === -1 || index >= arr.length) {\n return false;\n }\n\n const len = arr.length - 1;\n for (let i = index; i < len; i++) {\n arr[i] = arr[i + 1];\n }\n\n arr.length = len;\n return true;\n}\n\nexport class Deferred<T= any> {\n public promise: Promise<T>;\n\n public resolve: Function;\n public reject: Function;\n\n constructor() {\n this.promise = new Promise<T>((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n\n public then(func: (value: T) => any) {\n return this.promise.then.apply(this.promise, arguments);\n }\n\n public catch(func: (value: any) => any) {\n return this.promise.catch(func);\n }\n\n}\n\nexport function merge(a: any, ...objs: any[]): any {\n for (let i = 0, len = objs.length; i < len; i++) {\n const b = objs[i];\n for (const key in b) {\n if (b.hasOwnProperty(key)) {\n a[key] = b[key];\n }\n }\n }\n return a;\n}\n\nexport declare interface DummyServer {\n constructor(options?: ServerOpts, connectionListener?: (socket: Socket) => void);\n\n listen(port?: number, hostname?: string, backlog?: number, listeningListener?: () => void): this;\n close(callback?: (err?: Error) => void): this;\n}\n\nexport class DummyServer extends EventEmitter {}\n\n// Add msgpackr extension to avoid circular references when encoding\n// https://github.com/kriszyp/msgpackr#custom-extensions\naddExtension({\n Class: Schema,\n type: 0,\n\n read(datum: any): any {\n return datum;\n },\n\n write(instance: any): any {\n return instance.toJSON();\n }\n});\n"],
5
+ "mappings": "AAAA,OAAO,YAAY;AACnB,SAAS,oBAAoB;AAE7B,SAAS,0BAA0B;AACnC,SAAS,oBAAoB;AAG7B,SAAS,cAAc;AAGhB,MAAM,4BAA4B,OAAO,QAAQ,IAAI,mCAAmC,GAAI;AAE5F,SAAS,WAAW,SAAiB,GAAG;AAC7C,SAAO,OAAO,MAAM;AACtB;AAMA,MAAM,UAA4B,CAAC,UAAU,WAAW,SAAS;AAE1D,SAAS,yBAAyB,UAAiC;AAIxE,UAAQ,GAAG,qBAAqB,CAAC,QAAQ;AACvC,uBAAmB,GAAG;AACtB,aAAS,GAAG;AAAA,EACd,CAAC;AAED,UAAQ,QAAQ,CAAC,WACf,QAAQ,KAAK,QAAQ,MAAM,SAAS,CAAC,CAAC;AAC1C;AAEO,SAAS,MACd,IACA,aAAqB,GACrB,iBAAwB,CAAC,GACzB,UAAkB,GAClB;AACA,SAAO,IAAI,QAAW,CAAC,SAAS,WAAW;AACzC,OAAG,EACA,KAAK,OAAO,EACZ,MAAM,CAAC,MAAM;AACZ,UACE,eAAe,QAAQ,EAAE,WAAW,MAAM,MAC1C,YAAY,YACZ;AACA,mBAAW,MAAM;AACf,gBAAS,IAAI,YAAY,gBAAgB,OAAO,EAC9C,KAAK,OAAO,EACZ,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC;AAAA,QAC5B,GAAG,KAAK,MAAM,KAAK,OAAO,IAAI,KAAK,IAAI,GAAG,OAAO,IAAI,GAAG,CAAC;AAAA,MAE3D,OAAO;AACL,eAAO,CAAC;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACL,CAAC;AACH;AAEO,SAAS,UAAU,KAAY,OAAwB;AAG5D,MAAI,UAAU,MAAM,SAAS,IAAI,QAAQ;AACvC,WAAO;AAAA,EACT;AAEA,QAAM,MAAM,IAAI,SAAS;AACzB,WAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAChC,QAAI,KAAK,IAAI,IAAI;AAAA,EACnB;AAEA,MAAI,SAAS;AACb,SAAO;AACT;AAEO,MAAM,SAAiB;AAAA,EACrB;AAAA,EAEA;AAAA,EACA;AAAA,EAEP,cAAc;AACZ,SAAK,UAAU,IAAI,QAAW,CAAC,SAAS,WAAW;AACjD,WAAK,UAAU;AACf,WAAK,SAAS;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEO,KAAK,MAAyB;AACnC,WAAO,KAAK,QAAQ,KAAK,MAAM,KAAK,SAAS,SAAS;AAAA,EACxD;AAAA,EAEO,MAAM,MAA2B;AACtC,WAAO,KAAK,QAAQ,MAAM,IAAI;AAAA,EAChC;AAEF;AAEO,SAAS,MAAM,MAAW,MAAkB;AACjD,WAAS,IAAI,GAAG,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,UAAM,IAAI,KAAK;AACf,eAAW,OAAO,GAAG;AACnB,UAAI,EAAE,eAAe,GAAG,GAAG;AACzB,UAAE,OAAO,EAAE;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AASO,MAAM,oBAAoB,aAAa;AAAC;AAI/C,aAAa;AAAA,EACX,OAAO;AAAA,EACP,MAAM;AAAA,EAEN,KAAK,OAAiB;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,UAAoB;AACxB,WAAO,SAAS,OAAO;AAAA,EACzB;AACF,CAAC;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@colyseus/core",
3
- "version": "0.15.1",
3
+ "version": "0.15.3",
4
4
  "description": "Multiplayer Framework for Node.js.",
5
5
  "input": "./src/index.ts",
6
6
  "main": "./build/index.js",
@@ -46,5 +46,5 @@
46
46
  "publishConfig": {
47
47
  "access": "public"
48
48
  },
49
- "gitHead": "59b0541879c5480ea76c1f0cc6c5e40cbcda9cb5"
49
+ "gitHead": "cc90da8c921231fd50ac776f8c15db670dfbc299"
50
50
  }