UNPKG

colyseus.js

Version:

Colyseus Multiplayer SDK for JavaScript/TypeScript

1 lines 3.72 kB
{"version":3,"file":"signal.mjs","sources":["../../../src/core/signal.ts"],"sourcesContent":["type FunctionParameters<T extends (...args: any[]) => any> =\n T extends (...args: infer P) => any\n ? P\n : never;\n\nexport class EventEmitter<CallbackSignature extends (...args: any[]) => any> {\n handlers: Array<CallbackSignature> = [];\n\n register(cb: CallbackSignature, once: boolean = false) {\n this.handlers.push(cb);\n return this;\n }\n\n invoke(...args: FunctionParameters<CallbackSignature>) {\n this.handlers.forEach((handler) => handler.apply(this, args));\n }\n\n invokeAsync(...args: FunctionParameters<CallbackSignature>) {\n return Promise.all(this.handlers.map((handler) => handler.apply(this, args)));\n }\n\n remove (cb: CallbackSignature) {\n const index = this.handlers.indexOf(cb);\n this.handlers[index] = this.handlers[this.handlers.length - 1];\n this.handlers.pop();\n }\n\n clear() {\n this.handlers = [];\n }\n}\n\nexport function createSignal<CallbackSignature extends (...args: any[]) => void | Promise<any>>()\n : \n {\n once: (cb: CallbackSignature) => void;\n remove: (cb: CallbackSignature) => void,\n invoke: (...args: FunctionParameters<CallbackSignature>) => void,\n invokeAsync: (...args: FunctionParameters<CallbackSignature>) => Promise<any[]>,\n clear: () => void,\n } & ((this: any, cb: CallbackSignature) => EventEmitter<CallbackSignature> )\n {\n const emitter = new EventEmitter<CallbackSignature>();\n\n function register(this: any, cb: CallbackSignature): EventEmitter<CallbackSignature> {\n return emitter.register(cb, this === null);\n };\n\n register.once = (cb: CallbackSignature) => {\n const callback: any = function (...args: any[]) {\n cb.apply(this, args);\n emitter.remove(callback);\n }\n emitter.register(callback);\n }\n register.remove = (cb: CallbackSignature) => emitter.remove(cb)\n register.invoke = (...args: FunctionParameters<CallbackSignature>) => emitter.invoke(...args);\n register.invokeAsync = (...args: FunctionParameters<CallbackSignature>) => emitter.invokeAsync(...args);\n register.clear = () => emitter.clear();\n\n return register;\n}"],"names":[],"mappings":";MAKa,YAAY,CAAA;IACvB,QAAQ,GAA6B,EAAE;AAEvC,IAAA,QAAQ,CAAC,EAAqB,EAAE,IAAA,GAAgB,KAAK,EAAA;AACnD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;AACtB,QAAA,OAAO,IAAI;;IAGb,MAAM,CAAC,GAAG,IAA2C,EAAA;AACnD,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;IAG/D,WAAW,CAAC,GAAG,IAA2C,EAAA;QACxD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;;AAG/E,IAAA,MAAM,CAAE,EAAqB,EAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;;IAGrB,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAErB;SAEe,YAAY,GAAA;AAU1B,IAAA,MAAM,OAAO,GAAG,IAAI,YAAY,EAAqB;IAErD,SAAS,QAAQ,CAAY,EAAqB,EAAA;QAChD,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,KAAK,IAAI,CAAC;;AAG5C,IAAA,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAqB,KAAI;AACxC,QAAA,MAAM,QAAQ,GAAQ,UAAU,GAAG,IAAW,EAAA;AAC5C,YAAA,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;AACpB,YAAA,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC1B,SAAC;AACD,QAAA,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC5B,KAAC;AACD,IAAA,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAqB,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AAC/D,IAAA,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,IAA2C,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AAC7F,IAAA,QAAQ,CAAC,WAAW,GAAG,CAAC,GAAG,IAA2C,KAAK,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACvG,QAAQ,CAAC,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE;AAEtC,IAAA,OAAO,QAAQ;AACjB;;;;"}