@colyseus/core 0.14.29 → 0.14.30
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.
- package/build/presence/LocalPresence.d.ts +3 -3
- package/build/presence/LocalPresence.js +3 -1
- package/build/presence/LocalPresence.js.map +1 -1
- package/build/presence/LocalPresence.mjs +3 -1
- package/build/presence/LocalPresence.mjs.map +1 -1
- package/build/presence/Presence.d.ts +1 -1
- package/build/utils/Utils.js +12 -0
- package/build/utils/Utils.js.map +2 -2
- package/build/utils/Utils.mjs +12 -0
- package/build/utils/Utils.mjs.map +2 -2
- package/package.json +2 -2
|
@@ -33,15 +33,15 @@ export declare class LocalPresence implements Presence {
|
|
|
33
33
|
scard(key: string): number;
|
|
34
34
|
sinter(...keys: string[]): Promise<any[]>;
|
|
35
35
|
hset(key: string, field: string, value: string): void;
|
|
36
|
-
hincrby(key: string, field: string, value: number):
|
|
36
|
+
hincrby(key: string, field: string, value: number): number;
|
|
37
37
|
hget(key: string, field: string): Promise<string>;
|
|
38
38
|
hgetall(key: string): Promise<{
|
|
39
39
|
[key: string]: string;
|
|
40
40
|
}>;
|
|
41
41
|
hdel(key: string, field: any): void;
|
|
42
42
|
hlen(key: string): Promise<number>;
|
|
43
|
-
incr(key: string): Promise<
|
|
44
|
-
decr(key: string): Promise<
|
|
43
|
+
incr(key: string): Promise<number>;
|
|
44
|
+
decr(key: string): Promise<number>;
|
|
45
45
|
shutdown(): void;
|
|
46
46
|
}
|
|
47
47
|
export {};
|
|
@@ -117,7 +117,9 @@ class LocalPresence {
|
|
|
117
117
|
this.hash[key] = {};
|
|
118
118
|
}
|
|
119
119
|
const previousValue = Number(this.hash[key][field] || '0');
|
|
120
|
-
|
|
120
|
+
var incrby = (previousValue + value);
|
|
121
|
+
this.hash[key][field] = incrby.toString();
|
|
122
|
+
return incrby;
|
|
121
123
|
}
|
|
122
124
|
async hget(key, field) {
|
|
123
125
|
return this.hash[key] && this.hash[key][field];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalPresence.js","sources":["../../src/presence/LocalPresence.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { spliceOne } from '../Utils';\nimport { Presence } from './Presence';\n\ntype Callback = (...args: any[]) => void;\n\nexport class LocalPresence implements Presence {\n public channels = new EventEmitter();\n\n public data: {[roomName: string]: string[]} = {};\n public hash: {[roomName: string]: {[key: string]: string}} = {};\n\n public keys: {[name: string]: string | number} = {};\n\n protected subscriptions: {[id: string]: Callback[]} = {};\n private timeouts: {[name: string]: NodeJS.Timer} = {};\n\n public subscribe(topic: string, callback: (...args: any[]) => void) {\n if (!this.subscriptions[topic]) { this.subscriptions[topic] = []; }\n this.subscriptions[topic].push(callback);\n this.channels.on(topic, callback);\n return this;\n }\n\n public unsubscribe(topic: string, callback?: Callback) {\n const topicCallbacks = this.subscriptions[topic];\n if (!topicCallbacks) { return; }\n\n if (callback) {\n const idx = topicCallbacks.indexOf(callback);\n if (idx !== -1) {\n topicCallbacks.splice(idx, 1);\n this.channels.removeListener(topic, callback);\n }\n\n if (topicCallbacks.length === 0) {\n delete this.subscriptions[topic];\n }\n\n } else {\n topicCallbacks.forEach((cb) =>\n this.channels.removeListener(topic, cb));\n\n delete this.subscriptions[topic];\n }\n\n return this;\n }\n\n public publish(topic: string, data: any) {\n this.channels.emit(topic, data);\n return this;\n }\n\n public async exists(roomId: string): Promise<boolean> {\n return this.channels.listenerCount(roomId) > 0;\n }\n\n public setex(key: string, value: string, seconds: number) {\n // ensure previous timeout is clear before setting another one.\n if (this.timeouts[key]) {\n clearTimeout(this.timeouts[key]);\n }\n\n this.keys[key] = value;\n this.timeouts[key] = setTimeout(() => {\n delete this.keys[key];\n delete this.timeouts[key];\n }, seconds * 1000);\n }\n\n public get(key: string) {\n return this.keys[key];\n }\n\n public del(key: string) {\n delete this.keys[key];\n delete this.data[key];\n delete this.hash[key];\n }\n\n public sadd(key: string, value: any) {\n if (!this.data[key]) {\n this.data[key] = [];\n }\n\n if (this.data[key].indexOf(value) === -1) {\n this.data[key].push(value);\n }\n }\n\n public async smembers(key: string): Promise<string[]> {\n return this.data[key] || [];\n }\n\n public async sismember(key: string, field: string) {\n return this.data[key] && this.data[key].includes(field) ? 1 : 0;\n }\n\n public srem(key: string, value: any) {\n if (this.data[key]) {\n spliceOne(this.data[key], this.data[key].indexOf(value));\n }\n }\n\n public scard(key: string) {\n return (this.data[key] || []).length;\n }\n\n public async sinter(...keys: string[]) {\n const intersection: {[value: string]: number} = {};\n\n for (let i = 0, l = keys.length; i < l; i++) {\n (await this.smembers(keys[i])).forEach((member) => {\n if (!intersection[member]) {\n intersection[member] = 0;\n }\n\n intersection[member]++;\n });\n }\n\n return Object.keys(intersection).reduce((prev, curr) => {\n if (intersection[curr] > 1) {\n prev.push(curr);\n }\n return prev;\n }, []);\n }\n\n public hset(key: string, field: string, value: string) {\n if (!this.hash[key]) { this.hash[key] = {}; }\n this.hash[key][field] = value;\n }\n\n public hincrby(key: string, field: string, value: number) {\n if (!this.hash[key]) { this.hash[key] = {}; }\n const previousValue = Number(this.hash[key][field] || '0');\n this.hash[key][field] = (previousValue + value).toString();\n }\n\n public async hget(key: string, field: string) {\n return this.hash[key] && this.hash[key][field];\n }\n\n public async hgetall(key: string) {\n return this.hash[key] || {};\n }\n\n public hdel(key: string, field: any) {\n if (this.hash[key]) {\n delete this.hash[key][field];\n }\n }\n\n public async hlen(key: string) {\n return this.hash[key] && Object.keys(this.hash[key]).length || 0;\n }\n\n public async incr(key: string) {\n if (!this.keys[key]) {\n this.keys[key] = 0;\n }\n (this.keys[key] as number)++;\n return this.keys[key];\n }\n\n public async decr(key: string) {\n if (!this.keys[key]) {\n this.keys[key] = 0;\n }\n (this.keys[key] as number)--;\n return this.keys[key];\n }\n\n public shutdown() {\n // noop\n }\n\n}\n"],"names":["EventEmitter","spliceOne"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LocalPresence.js","sources":["../../src/presence/LocalPresence.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { spliceOne } from '../Utils';\nimport { Presence } from './Presence';\n\ntype Callback = (...args: any[]) => void;\n\nexport class LocalPresence implements Presence {\n public channels = new EventEmitter();\n\n public data: {[roomName: string]: string[]} = {};\n public hash: {[roomName: string]: {[key: string]: string}} = {};\n\n public keys: {[name: string]: string | number} = {};\n\n protected subscriptions: {[id: string]: Callback[]} = {};\n private timeouts: {[name: string]: NodeJS.Timer} = {};\n\n public subscribe(topic: string, callback: (...args: any[]) => void) {\n if (!this.subscriptions[topic]) { this.subscriptions[topic] = []; }\n this.subscriptions[topic].push(callback);\n this.channels.on(topic, callback);\n return this;\n }\n\n public unsubscribe(topic: string, callback?: Callback) {\n const topicCallbacks = this.subscriptions[topic];\n if (!topicCallbacks) { return; }\n\n if (callback) {\n const idx = topicCallbacks.indexOf(callback);\n if (idx !== -1) {\n topicCallbacks.splice(idx, 1);\n this.channels.removeListener(topic, callback);\n }\n\n if (topicCallbacks.length === 0) {\n delete this.subscriptions[topic];\n }\n\n } else {\n topicCallbacks.forEach((cb) =>\n this.channels.removeListener(topic, cb));\n\n delete this.subscriptions[topic];\n }\n\n return this;\n }\n\n public publish(topic: string, data: any) {\n this.channels.emit(topic, data);\n return this;\n }\n\n public async exists(roomId: string): Promise<boolean> {\n return this.channels.listenerCount(roomId) > 0;\n }\n\n public setex(key: string, value: string, seconds: number) {\n // ensure previous timeout is clear before setting another one.\n if (this.timeouts[key]) {\n clearTimeout(this.timeouts[key]);\n }\n\n this.keys[key] = value;\n this.timeouts[key] = setTimeout(() => {\n delete this.keys[key];\n delete this.timeouts[key];\n }, seconds * 1000);\n }\n\n public get(key: string) {\n return this.keys[key];\n }\n\n public del(key: string) {\n delete this.keys[key];\n delete this.data[key];\n delete this.hash[key];\n }\n\n public sadd(key: string, value: any) {\n if (!this.data[key]) {\n this.data[key] = [];\n }\n\n if (this.data[key].indexOf(value) === -1) {\n this.data[key].push(value);\n }\n }\n\n public async smembers(key: string): Promise<string[]> {\n return this.data[key] || [];\n }\n\n public async sismember(key: string, field: string) {\n return this.data[key] && this.data[key].includes(field) ? 1 : 0;\n }\n\n public srem(key: string, value: any) {\n if (this.data[key]) {\n spliceOne(this.data[key], this.data[key].indexOf(value));\n }\n }\n\n public scard(key: string) {\n return (this.data[key] || []).length;\n }\n\n public async sinter(...keys: string[]) {\n const intersection: {[value: string]: number} = {};\n\n for (let i = 0, l = keys.length; i < l; i++) {\n (await this.smembers(keys[i])).forEach((member) => {\n if (!intersection[member]) {\n intersection[member] = 0;\n }\n\n intersection[member]++;\n });\n }\n\n return Object.keys(intersection).reduce((prev, curr) => {\n if (intersection[curr] > 1) {\n prev.push(curr);\n }\n return prev;\n }, []);\n }\n\n public hset(key: string, field: string, value: string) {\n if (!this.hash[key]) { this.hash[key] = {}; }\n this.hash[key][field] = value;\n }\n\n public hincrby(key: string, field: string, value: number) {\n if (!this.hash[key]) { this.hash[key] = {}; }\n const previousValue = Number(this.hash[key][field] || '0');\n var incrby = (previousValue + value);\n this.hash[key][field] = incrby.toString();\n return incrby;\n }\n\n public async hget(key: string, field: string) {\n return this.hash[key] && this.hash[key][field];\n }\n\n public async hgetall(key: string) {\n return this.hash[key] || {};\n }\n\n public hdel(key: string, field: any) {\n if (this.hash[key]) {\n delete this.hash[key][field];\n }\n }\n\n public async hlen(key: string) {\n return this.hash[key] && Object.keys(this.hash[key]).length || 0;\n }\n\n public async incr(key: string) {\n if (!this.keys[key]) {\n this.keys[key] = 0;\n }\n (this.keys[key] as number)++;\n return this.keys[key] as number;\n }\n\n public async decr(key: string) {\n if (!this.keys[key]) {\n this.keys[key] = 0;\n }\n (this.keys[key] as number)--;\n return this.keys[key] as number;\n }\n\n public shutdown() {\n // noop\n }\n\n}\n"],"names":["EventEmitter","spliceOne"],"mappings":"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"}
|
|
@@ -113,7 +113,9 @@ class LocalPresence {
|
|
|
113
113
|
this.hash[key] = {};
|
|
114
114
|
}
|
|
115
115
|
const previousValue = Number(this.hash[key][field] || '0');
|
|
116
|
-
|
|
116
|
+
var incrby = (previousValue + value);
|
|
117
|
+
this.hash[key][field] = incrby.toString();
|
|
118
|
+
return incrby;
|
|
117
119
|
}
|
|
118
120
|
async hget(key, field) {
|
|
119
121
|
return this.hash[key] && this.hash[key][field];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalPresence.mjs","sources":["../../src/presence/LocalPresence.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { spliceOne } from '../Utils';\nimport { Presence } from './Presence';\n\ntype Callback = (...args: any[]) => void;\n\nexport class LocalPresence implements Presence {\n public channels = new EventEmitter();\n\n public data: {[roomName: string]: string[]} = {};\n public hash: {[roomName: string]: {[key: string]: string}} = {};\n\n public keys: {[name: string]: string | number} = {};\n\n protected subscriptions: {[id: string]: Callback[]} = {};\n private timeouts: {[name: string]: NodeJS.Timer} = {};\n\n public subscribe(topic: string, callback: (...args: any[]) => void) {\n if (!this.subscriptions[topic]) { this.subscriptions[topic] = []; }\n this.subscriptions[topic].push(callback);\n this.channels.on(topic, callback);\n return this;\n }\n\n public unsubscribe(topic: string, callback?: Callback) {\n const topicCallbacks = this.subscriptions[topic];\n if (!topicCallbacks) { return; }\n\n if (callback) {\n const idx = topicCallbacks.indexOf(callback);\n if (idx !== -1) {\n topicCallbacks.splice(idx, 1);\n this.channels.removeListener(topic, callback);\n }\n\n if (topicCallbacks.length === 0) {\n delete this.subscriptions[topic];\n }\n\n } else {\n topicCallbacks.forEach((cb) =>\n this.channels.removeListener(topic, cb));\n\n delete this.subscriptions[topic];\n }\n\n return this;\n }\n\n public publish(topic: string, data: any) {\n this.channels.emit(topic, data);\n return this;\n }\n\n public async exists(roomId: string): Promise<boolean> {\n return this.channels.listenerCount(roomId) > 0;\n }\n\n public setex(key: string, value: string, seconds: number) {\n // ensure previous timeout is clear before setting another one.\n if (this.timeouts[key]) {\n clearTimeout(this.timeouts[key]);\n }\n\n this.keys[key] = value;\n this.timeouts[key] = setTimeout(() => {\n delete this.keys[key];\n delete this.timeouts[key];\n }, seconds * 1000);\n }\n\n public get(key: string) {\n return this.keys[key];\n }\n\n public del(key: string) {\n delete this.keys[key];\n delete this.data[key];\n delete this.hash[key];\n }\n\n public sadd(key: string, value: any) {\n if (!this.data[key]) {\n this.data[key] = [];\n }\n\n if (this.data[key].indexOf(value) === -1) {\n this.data[key].push(value);\n }\n }\n\n public async smembers(key: string): Promise<string[]> {\n return this.data[key] || [];\n }\n\n public async sismember(key: string, field: string) {\n return this.data[key] && this.data[key].includes(field) ? 1 : 0;\n }\n\n public srem(key: string, value: any) {\n if (this.data[key]) {\n spliceOne(this.data[key], this.data[key].indexOf(value));\n }\n }\n\n public scard(key: string) {\n return (this.data[key] || []).length;\n }\n\n public async sinter(...keys: string[]) {\n const intersection: {[value: string]: number} = {};\n\n for (let i = 0, l = keys.length; i < l; i++) {\n (await this.smembers(keys[i])).forEach((member) => {\n if (!intersection[member]) {\n intersection[member] = 0;\n }\n\n intersection[member]++;\n });\n }\n\n return Object.keys(intersection).reduce((prev, curr) => {\n if (intersection[curr] > 1) {\n prev.push(curr);\n }\n return prev;\n }, []);\n }\n\n public hset(key: string, field: string, value: string) {\n if (!this.hash[key]) { this.hash[key] = {}; }\n this.hash[key][field] = value;\n }\n\n public hincrby(key: string, field: string, value: number) {\n if (!this.hash[key]) { this.hash[key] = {}; }\n const previousValue = Number(this.hash[key][field] || '0');\n this.hash[key][field] = (previousValue + value).toString();\n }\n\n public async hget(key: string, field: string) {\n return this.hash[key] && this.hash[key][field];\n }\n\n public async hgetall(key: string) {\n return this.hash[key] || {};\n }\n\n public hdel(key: string, field: any) {\n if (this.hash[key]) {\n delete this.hash[key][field];\n }\n }\n\n public async hlen(key: string) {\n return this.hash[key] && Object.keys(this.hash[key]).length || 0;\n }\n\n public async incr(key: string) {\n if (!this.keys[key]) {\n this.keys[key] = 0;\n }\n (this.keys[key] as number)++;\n return this.keys[key];\n }\n\n public async decr(key: string) {\n if (!this.keys[key]) {\n this.keys[key] = 0;\n }\n (this.keys[key] as number)--;\n return this.keys[key];\n }\n\n public shutdown() {\n // noop\n }\n\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LocalPresence.mjs","sources":["../../src/presence/LocalPresence.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { spliceOne } from '../Utils';\nimport { Presence } from './Presence';\n\ntype Callback = (...args: any[]) => void;\n\nexport class LocalPresence implements Presence {\n public channels = new EventEmitter();\n\n public data: {[roomName: string]: string[]} = {};\n public hash: {[roomName: string]: {[key: string]: string}} = {};\n\n public keys: {[name: string]: string | number} = {};\n\n protected subscriptions: {[id: string]: Callback[]} = {};\n private timeouts: {[name: string]: NodeJS.Timer} = {};\n\n public subscribe(topic: string, callback: (...args: any[]) => void) {\n if (!this.subscriptions[topic]) { this.subscriptions[topic] = []; }\n this.subscriptions[topic].push(callback);\n this.channels.on(topic, callback);\n return this;\n }\n\n public unsubscribe(topic: string, callback?: Callback) {\n const topicCallbacks = this.subscriptions[topic];\n if (!topicCallbacks) { return; }\n\n if (callback) {\n const idx = topicCallbacks.indexOf(callback);\n if (idx !== -1) {\n topicCallbacks.splice(idx, 1);\n this.channels.removeListener(topic, callback);\n }\n\n if (topicCallbacks.length === 0) {\n delete this.subscriptions[topic];\n }\n\n } else {\n topicCallbacks.forEach((cb) =>\n this.channels.removeListener(topic, cb));\n\n delete this.subscriptions[topic];\n }\n\n return this;\n }\n\n public publish(topic: string, data: any) {\n this.channels.emit(topic, data);\n return this;\n }\n\n public async exists(roomId: string): Promise<boolean> {\n return this.channels.listenerCount(roomId) > 0;\n }\n\n public setex(key: string, value: string, seconds: number) {\n // ensure previous timeout is clear before setting another one.\n if (this.timeouts[key]) {\n clearTimeout(this.timeouts[key]);\n }\n\n this.keys[key] = value;\n this.timeouts[key] = setTimeout(() => {\n delete this.keys[key];\n delete this.timeouts[key];\n }, seconds * 1000);\n }\n\n public get(key: string) {\n return this.keys[key];\n }\n\n public del(key: string) {\n delete this.keys[key];\n delete this.data[key];\n delete this.hash[key];\n }\n\n public sadd(key: string, value: any) {\n if (!this.data[key]) {\n this.data[key] = [];\n }\n\n if (this.data[key].indexOf(value) === -1) {\n this.data[key].push(value);\n }\n }\n\n public async smembers(key: string): Promise<string[]> {\n return this.data[key] || [];\n }\n\n public async sismember(key: string, field: string) {\n return this.data[key] && this.data[key].includes(field) ? 1 : 0;\n }\n\n public srem(key: string, value: any) {\n if (this.data[key]) {\n spliceOne(this.data[key], this.data[key].indexOf(value));\n }\n }\n\n public scard(key: string) {\n return (this.data[key] || []).length;\n }\n\n public async sinter(...keys: string[]) {\n const intersection: {[value: string]: number} = {};\n\n for (let i = 0, l = keys.length; i < l; i++) {\n (await this.smembers(keys[i])).forEach((member) => {\n if (!intersection[member]) {\n intersection[member] = 0;\n }\n\n intersection[member]++;\n });\n }\n\n return Object.keys(intersection).reduce((prev, curr) => {\n if (intersection[curr] > 1) {\n prev.push(curr);\n }\n return prev;\n }, []);\n }\n\n public hset(key: string, field: string, value: string) {\n if (!this.hash[key]) { this.hash[key] = {}; }\n this.hash[key][field] = value;\n }\n\n public hincrby(key: string, field: string, value: number) {\n if (!this.hash[key]) { this.hash[key] = {}; }\n const previousValue = Number(this.hash[key][field] || '0');\n var incrby = (previousValue + value);\n this.hash[key][field] = incrby.toString();\n return incrby;\n }\n\n public async hget(key: string, field: string) {\n return this.hash[key] && this.hash[key][field];\n }\n\n public async hgetall(key: string) {\n return this.hash[key] || {};\n }\n\n public hdel(key: string, field: any) {\n if (this.hash[key]) {\n delete this.hash[key][field];\n }\n }\n\n public async hlen(key: string) {\n return this.hash[key] && Object.keys(this.hash[key]).length || 0;\n }\n\n public async incr(key: string) {\n if (!this.keys[key]) {\n this.keys[key] = 0;\n }\n (this.keys[key] as number)++;\n return this.keys[key] as number;\n }\n\n public async decr(key: string) {\n if (!this.keys[key]) {\n this.keys[key] = 0;\n }\n (this.keys[key] as number)--;\n return this.keys[key] as number;\n }\n\n public shutdown() {\n // noop\n }\n\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ export interface Presence {
|
|
|
13
13
|
scard(key: string): any;
|
|
14
14
|
sinter(...keys: string[]): Promise<string[]>;
|
|
15
15
|
hset(key: string, field: string, value: string): any;
|
|
16
|
-
hincrby(key: string, field: string, value: number):
|
|
16
|
+
hincrby(key: string, field: string, value: number): number | Promise<number>;
|
|
17
17
|
hget(key: string, field: string): Promise<string>;
|
|
18
18
|
hgetall(key: string): Promise<{
|
|
19
19
|
[key: string]: string;
|
package/build/utils/Utils.js
CHANGED
|
@@ -32,9 +32,11 @@ __export(Utils_exports, {
|
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(Utils_exports);
|
|
34
34
|
var import_nanoid = __toESM(require("nanoid"));
|
|
35
|
+
var import_msgpackr = require("msgpackr");
|
|
35
36
|
var import_Debug = require("../Debug");
|
|
36
37
|
var import_events = require("events");
|
|
37
38
|
var import_Logger = require("../Logger");
|
|
39
|
+
var import_schema = require("@colyseus/schema");
|
|
38
40
|
const REMOTE_ROOM_SHORT_TIMEOUT = Number(process.env.COLYSEUS_PRESENCE_SHORT_TIMEOUT || 2e3);
|
|
39
41
|
function generateId(length = 9) {
|
|
40
42
|
return (0, import_nanoid.default)(length);
|
|
@@ -212,6 +214,16 @@ class HybridArray {
|
|
|
212
214
|
}
|
|
213
215
|
class DummyServer extends import_events.EventEmitter {
|
|
214
216
|
}
|
|
217
|
+
(0, import_msgpackr.addExtension)({
|
|
218
|
+
Class: import_schema.Schema,
|
|
219
|
+
type: 0,
|
|
220
|
+
read(datum) {
|
|
221
|
+
return datum;
|
|
222
|
+
},
|
|
223
|
+
write(instance) {
|
|
224
|
+
return instance.toJSON();
|
|
225
|
+
}
|
|
226
|
+
});
|
|
215
227
|
// Annotate the CommonJS export names for ESM import in node:
|
|
216
228
|
0 && (module.exports = {
|
|
217
229
|
Deferred,
|
package/build/utils/Utils.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/Utils.ts"],
|
|
4
|
-
"sourcesContent": ["import nanoid from 'nanoid';\n\nimport { debugAndPrintError } from '../Debug';\nimport { EventEmitter } from \"events\";\nimport { ServerOpts, Socket } from \"net\";\nimport { logger } from '../Logger';\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 {}"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmB;
|
|
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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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/utils/Utils.mjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import nanoid from "nanoid";
|
|
2
|
+
import { addExtension } from "msgpackr";
|
|
2
3
|
import { debugAndPrintError } from "../Debug";
|
|
3
4
|
import { EventEmitter } from "events";
|
|
4
5
|
import { logger } from "../Logger";
|
|
6
|
+
import { Schema } from "@colyseus/schema";
|
|
5
7
|
const REMOTE_ROOM_SHORT_TIMEOUT = Number(process.env.COLYSEUS_PRESENCE_SHORT_TIMEOUT || 2e3);
|
|
6
8
|
function generateId(length = 9) {
|
|
7
9
|
return nanoid(length);
|
|
@@ -179,6 +181,16 @@ class HybridArray {
|
|
|
179
181
|
}
|
|
180
182
|
class DummyServer extends EventEmitter {
|
|
181
183
|
}
|
|
184
|
+
addExtension({
|
|
185
|
+
Class: Schema,
|
|
186
|
+
type: 0,
|
|
187
|
+
read(datum) {
|
|
188
|
+
return datum;
|
|
189
|
+
},
|
|
190
|
+
write(instance) {
|
|
191
|
+
return instance.toJSON();
|
|
192
|
+
}
|
|
193
|
+
});
|
|
182
194
|
export {
|
|
183
195
|
Deferred,
|
|
184
196
|
DummyServer,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/Utils.ts"],
|
|
4
|
-
"sourcesContent": ["import nanoid from 'nanoid';\n\nimport { debugAndPrintError } from '../Debug';\nimport { EventEmitter } from \"events\";\nimport { ServerOpts, Socket } from \"net\";\nimport { logger } from '../Logger';\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 {}"],
|
|
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 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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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@colyseus/core",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.30",
|
|
4
4
|
"description": "Multiplayer Framework for Node.js.",
|
|
5
5
|
"input": "./src/index.ts",
|
|
6
6
|
"main": "./build/index.js",
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"publishConfig": {
|
|
45
45
|
"access": "public"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "81d40fa9a61b94f2eae34dd57c52da4b588ec6b2"
|
|
48
48
|
}
|