UNPKG

@shockpkg/core

Version:
1 lines 3.51 kB
{"version":3,"sources":["dispatcher.ts"],"names":["property","Dispatcher","Object","constructor","context","_context","on","handler","_handlers","add","off","delete","triggerSync","event","self","i","cb","call","triggerAsync","triggerOrThrowSync","triggerOrThrowAsync","Set"],"mappings":";;;;;;AAAA,SAAQA,QAAR,QAAuB,kBAAvB;AAEA;;;;;;AAKA,WAAaC,UAAb,WAKED,QAAQ,CAAC,KAAD,CALV,UAWEA,QAAQ,CAAC,KAAD,CAXV,qBAAO,MAAMC,UAAN,SAA4BC,MAA5B,CAAmC;AAEzC;;;;AAMA;;;AAMAC,EAAAA,WAAW,CAACC,OAAD,EAAe;AACzB;;AADyB;;AAAA;;AAGzB,SAAKC,QAAL,GAAgBD,OAAhB;AACA;AAED;;;;;;;AAKOE,EAAAA,EAAP,CAAUC,OAAV,EAAsC;AACrC,SAAKC,SAAL,CAAeC,GAAf,CAAmBF,OAAnB;AACA;AAED;;;;;;;AAKOG,EAAAA,GAAP,CAAWH,OAAX,EAAuC;AACtC,SAAKC,SAAL,CAAeG,MAAf,CAAsBJ,OAAtB;AACA;AAED;;;;;;;;AAMOK,EAAAA,WAAP,CAAmBC,KAAnB,EAA6B;AAC5B,UAAMC,IAAI,GAAG,KAAKT,QAAlB;AACA,QAAIU,CAAC,GAAG,CAAR;;AACA,SAAK,MAAMC,EAAX,IAAiB,KAAKR,SAAtB,EAAiC;AAChCQ,MAAAA,EAAE,CAACC,IAAH,CAAQH,IAAR,EAAcD,KAAd;AACAE,MAAAA,CAAC;AACD;;AACD,WAAOA,CAAP;AACA;AAED;;;;;;;;AAMA,QAAaG,YAAb,CAA0BL,KAA1B,EAAoC;AACnC,UAAMC,IAAI,GAAG,KAAKT,QAAlB;AACA,QAAIU,CAAC,GAAG,CAAR;;AACA,SAAK,MAAMC,EAAX,IAAiB,KAAKR,SAAtB,EAAiC;AAChC,YAAMQ,EAAE,CAACC,IAAH,CAAQH,IAAR,EAAcD,KAAd,CAAN;AACAE,MAAAA,CAAC;AACD;;AACD,WAAOA,CAAP;AACA;AAED;;;;;;;;AAMOI,EAAAA,kBAAP,CAA0BN,KAA1B,EAAoC;AACnC,QAAI,CAAC,KAAKD,WAAL,CAAiBC,KAAjB,CAAL,EAA8B;AAC7B,YAAMA,KAAN;AACA;AACD;AAED;;;;;;;;AAMA,QAAaO,mBAAb,CAAiCP,KAAjC,EAA2C;AAC1C,QAAI,EAAC,MAAM,KAAKK,YAAL,CAAkBL,KAAlB,CAAP,CAAJ,EAAqC;AACpC,YAAMA,KAAN;AACA;AACD;;AA5FwC,CAA1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAYgC,IAAIQ,GAAJ,EAZhC;AAAA;AAAA","sourcesContent":["import {property} from './decorators';\n\n/**\n * Event dispatcher.\n *\n * @param context Context object.\n */\nexport class Dispatcher<T> extends Object {\n\n\t/**\n\t * Event context.\n\t */\n\t@property(false)\n\tprotected readonly _context: any;\n\n\t/**\n\t * Event handlers.\n\t */\n\t@property(false)\n\tprotected readonly _handlers = new Set<(event: T) => any>();\n\n\tconstructor(context: any) {\n\t\tsuper();\n\n\t\tthis._context = context;\n\t}\n\n\t/**\n\t * Add listener.\n\t *\n\t * @param handler Event handler.\n\t */\n\tpublic on(handler: (event: T) => any) {\n\t\tthis._handlers.add(handler);\n\t}\n\n\t/**\n\t * Remove listener.\n\t *\n\t * @param handler Event handler.\n\t */\n\tpublic off(handler: (event: T) => any) {\n\t\tthis._handlers.delete(handler);\n\t}\n\n\t/**\n\t * Trigger, sync.\n\t *\n\t * @param handler Event data.\n\t * @return Handler count.\n\t */\n\tpublic triggerSync(event: T) {\n\t\tconst self = this._context;\n\t\tlet i = 0;\n\t\tfor (const cb of this._handlers) {\n\t\t\tcb.call(self, event);\n\t\t\ti++;\n\t\t}\n\t\treturn i;\n\t}\n\n\t/**\n\t * Trigger, async.\n\t *\n\t * @param handler Event data.\n\t * @return Handler count.\n\t */\n\tpublic async triggerAsync(event: T) {\n\t\tconst self = this._context;\n\t\tlet i = 0;\n\t\tfor (const cb of this._handlers) {\n\t\t\tawait cb.call(self, event);\n\t\t\ti++;\n\t\t}\n\t\treturn i;\n\t}\n\n\t/**\n\t * Trigger or throw, sync.\n\t *\n\t * @param handler Event data.\n\t * @return Handler count.\n\t */\n\tpublic triggerOrThrowSync(event: T) {\n\t\tif (!this.triggerSync(event)) {\n\t\t\tthrow event;\n\t\t}\n\t}\n\n\t/**\n\t * Trigger or throw, sync.\n\t *\n\t * @param handler Event data.\n\t * @return Handler count.\n\t */\n\tpublic async triggerOrThrowAsync(event: T) {\n\t\tif (!await this.triggerAsync(event)) {\n\t\t\tthrow event;\n\t\t}\n\t}\n}\n"],"file":"dispatcher.mjs","sourceRoot":"../src"}