hemmiter 0.1.0 → 0.1.1
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/README.md +1 -1
- package/hemmiter.d.ts +1 -0
- package/hemmiter.d.ts.map +1 -1
- package/hemmiter.js.map +2 -2
- package/index.cjs.map +2 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -59,7 +59,7 @@ Event names and listener arguments are inferred and checked from the `Events` ty
|
|
|
59
59
|
- `listeners(event)` — get a snapshot of the listeners registered for an event.
|
|
60
60
|
- `listenerCount(event)` — get the number of listeners registered for an event.
|
|
61
61
|
- `removeAllListeners(event?)` — remove listeners for one event or all events.
|
|
62
|
-
- `emit(event, ...args)` — dispatch an event. `emit` is `protected`, allowing subclasses to control event emission.
|
|
62
|
+
- `emit(event, ...args)` — dispatch an event. `emit` is `protected`, allowing subclasses to control event emission. If a listener throws, its exception is rethrown and the remaining listeners for that dispatch are not invoked.
|
|
63
63
|
|
|
64
64
|
## Type-safe events
|
|
65
65
|
|
package/hemmiter.d.ts
CHANGED
|
@@ -73,6 +73,7 @@ export declare class MiniEmitter<Events extends {
|
|
|
73
73
|
* @en Dispatch an event to its listeners.
|
|
74
74
|
* @param event Event name.
|
|
75
75
|
* @param args Event arguments.
|
|
76
|
+
* @throws Rethrows any exception thrown by a listener and stops dispatching the current event.
|
|
76
77
|
*/
|
|
77
78
|
protected emit<K extends keyof Events>(event: K, ...args: Events[K]): void;
|
|
78
79
|
}
|
package/hemmiter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hemmiter.d.ts","sourceRoot":"","sources":["../src/hemmiter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,aAAa,CAAC,IAAI,SAAS,SAAS,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAMrF;;;;GAIG;AACH,qBAAa,WAAW,CAAC,MAAM,SAAS;KAAG,CAAC,IAAI,MAAM,MAAM,GAAG,SAAS,OAAO,EAAE;CAAE;IACjF,OAAO,CAAC,WAAW,CAAC,CAAwC;IAE5D;;;;;;OAMG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAO7E;IAED;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAEtF;IAED;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAuB9E;IAED;;;;;;OAMG;IACH,cAAc,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAEzF;IAED;;;;;;OAMG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAQ/E;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAQ1D;IAED;;;;;OAKG;IACH,SAAS,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAUtE;IAED,aAAa,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAEtD;IAED
|
|
1
|
+
{"version":3,"file":"hemmiter.d.ts","sourceRoot":"","sources":["../src/hemmiter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,aAAa,CAAC,IAAI,SAAS,SAAS,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAMrF;;;;GAIG;AACH,qBAAa,WAAW,CAAC,MAAM,SAAS;KAAG,CAAC,IAAI,MAAM,MAAM,GAAG,SAAS,OAAO,EAAE;CAAE;IACjF,OAAO,CAAC,WAAW,CAAC,CAAwC;IAE5D;;;;;;OAMG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAO7E;IAED;;;;;;OAMG;IACH,WAAW,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAEtF;IAED;;;;;;OAMG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAuB9E;IAED;;;;;;OAMG;IACH,cAAc,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAEzF;IAED;;;;;;OAMG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAQ/E;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAQ1D;IAED;;;;;OAKG;IACH,SAAS,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAUtE;IAED,aAAa,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAEtD;IAED;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAgBzE;CACF"}
|
package/hemmiter.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/hemmiter.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * @ru \u0422\u0438\u043F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0441 \u0442\u0438\u043F\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u043C\u0438 \u0430\u0440\u0433\u0443\u043C\u0435\u043D\u0442\u0430\u043C\u0438.\n * @en Event listener type with typed arguments.\n * @template Args Event argument tuple.\n */\nexport type EventListener<Args extends readonly unknown[]> = (...args: Args) => void;\n\ntype AnyEventListener = (...args: readonly unknown[]) => void;\nconst onceOriginal = Symbol(\"hemmiter.onceOriginal\");\ntype OnceListener = AnyEventListener & { [onceOriginal]: AnyEventListener };\n\n/**\n * @ru \u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0442\u0438\u043F\u043E\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439 emitter \u0441\u043E\u0431\u044B\u0442\u0438\u0439.\n * @en Minimal type-safe event emitter.\n * @template Events Event map where each value is an argument tuple.\n */\nexport class MiniEmitter<Events extends { [K in keyof Events]: readonly unknown[] }> {\n private listenerMap?: Map<keyof Events, AnyEventListener[]>;\n\n /**\n * @ru \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Register an event listener.\n * @param event Event name.\n * @param listener Event listener.\n * @returns This emitter instance.\n */\n on<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n const target = listener as AnyEventListener;\n const listeners = (this.listenerMap ??= new Map());\n const list = listeners.get(event);\n if (list) list.push(target);\n else listeners.set(event, [target]);\n return this;\n }\n\n /**\n * @ru \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Register an event listener.\n * @param event Event name.\n * @param listener Event listener.\n * @returns This emitter instance.\n */\n addListener<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n return this.on(event, listener);\n }\n\n /**\n * @ru \u0421\u043D\u044F\u0442\u044C \u043E\u0434\u043D\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Remove one registration of an event listener.\n * @param event Event name.\n * @param listener Event listener to remove.\n * @returns This emitter instance.\n */\n off<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n const list = this.listenerMap?.get(event);\n if (!list) return this;\n\n const target = listener as AnyEventListener;\n let index = -1;\n for (let i = 0; i < list.length; i++) {\n const registered = list[i];\n if (\n registered &&\n (registered === target || (registered as OnceListener)[onceOriginal] === target)\n ) {\n index = i;\n break;\n }\n }\n\n if (index !== -1) {\n list.splice(index, 1);\n if (list.length === 0) this.listenerMap?.delete(event);\n }\n\n return this;\n }\n\n /**\n * @ru \u0421\u043D\u044F\u0442\u044C \u043E\u0434\u043D\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Remove one registration of an event listener.\n * @param event Event name.\n * @param listener Event listener to remove.\n * @returns This emitter instance.\n */\n removeListener<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n return this.off(event, listener);\n }\n\n /**\n * @ru \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0441\u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043E\u0434\u0438\u043D \u0440\u0430\u0437.\n * @en Register a listener that runs once.\n * @param event Event name.\n * @param listener Event listener.\n * @returns This emitter instance.\n */\n once<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n const target = listener as AnyEventListener;\n const wrapper = ((...args: Events[K]) => {\n this.off(event, wrapper);\n listener(...args);\n }) as OnceListener;\n wrapper[onceOriginal] = target;\n return this.on(event, wrapper);\n }\n\n /**\n * @ru \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0438 \u043E\u0434\u043D\u043E\u0433\u043E \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0438\u043B\u0438 \u0432\u0441\u0435\u0445 \u0441\u043E\u0431\u044B\u0442\u0438\u0439.\n * @en Remove listeners for one event or for all events.\n * @param event Optional event name.\n * @returns This emitter instance.\n */\n removeAllListeners<K extends keyof Events>(event?: K): this {\n if (event === undefined) {\n this.listenerMap?.clear();\n } else {\n this.listenerMap?.delete(event);\n }\n\n return this;\n }\n\n /**\n * @ru \u041F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u043A\u043E\u043F\u0438\u044E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u043E\u0432 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Get a snapshot of the listeners for an event.\n * @param event Event name.\n * @returns A new array containing the registered listeners.\n */\n listeners<K extends keyof Events>(event: K): EventListener<Events[K]>[] {\n const list = this.listenerMap?.get(event);\n if (!list) return [];\n\n const result = list.slice();\n for (let i = 0; i < list.length; i++) {\n const listener = list[i];\n result[i] = (listener as OnceListener)[onceOriginal] ?? listener;\n }\n return result as EventListener<Events[K]>[];\n }\n\n listenerCount<K extends keyof Events>(event: K): number {\n return this.listenerMap?.get(event)?.length ?? 0;\n }\n\n /**\n * @ru \u0412\u044B\u0437\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0438 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Dispatch an event to its listeners.\n * @param event Event name.\n * @param args Event arguments.\n */\n protected emit<K extends keyof Events>(event: K, ...args: Events[K]): void {\n const listeners = this.listenerMap;\n if (!listeners) return;\n\n const list = listeners.get(event);\n if (!list) return;\n\n if (list.length === 1) {\n list[0]!(...args);\n return;\n }\n\n const targets = list.slice();\n for (const listener of targets) {\n listener(...args);\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "aAQA,MAAMA,EAAe,OAAO,uBAAuB,EAQ7C,aAAO,WAAW,CACd,YASR,GAA2BC,EAAUC,EAAkC,CACrE,MAAMC,EAASD,EACTE,EAAa,KAAK,cAAgB,IAAI,IACtCC,EAAOD,EAAU,IAAIH,CAAK,EAChC,OAAII,EAAMA,EAAK,KAAKF,CAAM,EACrBC,EAAU,IAAIH,EAAO,CAACE,CAAM,CAAC,EAC3B,IACT,CASA,YAAoCF,EAAUC,EAAkC,CAC9E,OAAO,KAAK,GAAGD,EAAOC,CAAQ,CAChC,CASA,IAA4BD,EAAUC,EAAkC,CACtE,MAAMG,EAAO,KAAK,aAAa,IAAIJ,CAAK,EACxC,GAAI,CAACI,EAAM,OAAO,KAElB,MAAMF,EAASD,EACf,IAAII,EAAQ,GACZ,QAASC,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAAK,CACpC,MAAMC,EAAaH,EAAKE,CAAC,EACzB,GACEC,IACCA,IAAeL,GAAWK,EAA4BR,CAAY,IAAMG,GACzE,CACAG,EAAQC,EACR,KACF,CACF,CAEA,OAAID,IAAU,KACZD,EAAK,OAAOC,EAAO,CAAC,EAChBD,EAAK,SAAW,GAAG,KAAK,aAAa,OAAOJ,CAAK,GAGhD,IACT,CASA,eAAuCA,EAAUC,EAAkC,CACjF,OAAO,KAAK,IAAID,EAAOC,CAAQ,CACjC,CASA,KAA6BD,EAAUC,EAAkC,CACvE,MAAMC,EAASD,EACTO,GAAW,IAAIC,IAAmB,CACtC,KAAK,IAAIT,EAAOQ,CAAO,EACvBP,EAAS,GAAGQ,CAAI,CAClB,GACA,OAAAD,EAAQT,CAAY,EAAIG,EACjB,KAAK,GAAGF,EAAOQ,CAAO,CAC/B,CAQA,mBAA2CR,EAAS,CAClD,OAAIA,IAAU,OACZ,KAAK,aAAa,MAAK,EAEvB,KAAK,aAAa,OAAOA,CAAK,EAGzB,IACT,CAQA,UAAkCA,EAAQ,CACxC,MAAMI,EAAO,KAAK,aAAa,IAAIJ,CAAK,EACxC,GAAI,CAACI,EAAM,MAAO,CAAA,EAElB,MAAMM,EAASN,EAAK,MAAK,EACzB,QAASE,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAAK,CACpC,MAAML,EAAWG,EAAKE,CAAC,EACvBI,EAAOJ,CAAC,EAAKL,EAA0BF,CAAY,GAAKE,CAC1D,CACA,OAAOS,CACT,CAEA,cAAsCV,EAAQ,CAC5C,OAAO,KAAK,aAAa,IAAIA,CAAK,GAAG,QAAU,CACjD,
|
|
4
|
+
"sourcesContent": ["/**\n * @ru \u0422\u0438\u043F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0441 \u0442\u0438\u043F\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u043C\u0438 \u0430\u0440\u0433\u0443\u043C\u0435\u043D\u0442\u0430\u043C\u0438.\n * @en Event listener type with typed arguments.\n * @template Args Event argument tuple.\n */\nexport type EventListener<Args extends readonly unknown[]> = (...args: Args) => void;\n\ntype AnyEventListener = (...args: readonly unknown[]) => void;\nconst onceOriginal = Symbol(\"hemmiter.onceOriginal\");\ntype OnceListener = AnyEventListener & { [onceOriginal]: AnyEventListener };\n\n/**\n * @ru \u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0442\u0438\u043F\u043E\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439 emitter \u0441\u043E\u0431\u044B\u0442\u0438\u0439.\n * @en Minimal type-safe event emitter.\n * @template Events Event map where each value is an argument tuple.\n */\nexport class MiniEmitter<Events extends { [K in keyof Events]: readonly unknown[] }> {\n private listenerMap?: Map<keyof Events, AnyEventListener[]>;\n\n /**\n * @ru \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Register an event listener.\n * @param event Event name.\n * @param listener Event listener.\n * @returns This emitter instance.\n */\n on<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n const target = listener as AnyEventListener;\n const listeners = (this.listenerMap ??= new Map());\n const list = listeners.get(event);\n if (list) list.push(target);\n else listeners.set(event, [target]);\n return this;\n }\n\n /**\n * @ru \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Register an event listener.\n * @param event Event name.\n * @param listener Event listener.\n * @returns This emitter instance.\n */\n addListener<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n return this.on(event, listener);\n }\n\n /**\n * @ru \u0421\u043D\u044F\u0442\u044C \u043E\u0434\u043D\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Remove one registration of an event listener.\n * @param event Event name.\n * @param listener Event listener to remove.\n * @returns This emitter instance.\n */\n off<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n const list = this.listenerMap?.get(event);\n if (!list) return this;\n\n const target = listener as AnyEventListener;\n let index = -1;\n for (let i = 0; i < list.length; i++) {\n const registered = list[i];\n if (\n registered &&\n (registered === target || (registered as OnceListener)[onceOriginal] === target)\n ) {\n index = i;\n break;\n }\n }\n\n if (index !== -1) {\n list.splice(index, 1);\n if (list.length === 0) this.listenerMap?.delete(event);\n }\n\n return this;\n }\n\n /**\n * @ru \u0421\u043D\u044F\u0442\u044C \u043E\u0434\u043D\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Remove one registration of an event listener.\n * @param event Event name.\n * @param listener Event listener to remove.\n * @returns This emitter instance.\n */\n removeListener<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n return this.off(event, listener);\n }\n\n /**\n * @ru \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0441\u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043E\u0434\u0438\u043D \u0440\u0430\u0437.\n * @en Register a listener that runs once.\n * @param event Event name.\n * @param listener Event listener.\n * @returns This emitter instance.\n */\n once<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n const target = listener as AnyEventListener;\n const wrapper = ((...args: Events[K]) => {\n this.off(event, wrapper);\n listener(...args);\n }) as OnceListener;\n wrapper[onceOriginal] = target;\n return this.on(event, wrapper);\n }\n\n /**\n * @ru \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0438 \u043E\u0434\u043D\u043E\u0433\u043E \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0438\u043B\u0438 \u0432\u0441\u0435\u0445 \u0441\u043E\u0431\u044B\u0442\u0438\u0439.\n * @en Remove listeners for one event or for all events.\n * @param event Optional event name.\n * @returns This emitter instance.\n */\n removeAllListeners<K extends keyof Events>(event?: K): this {\n if (event === undefined) {\n this.listenerMap?.clear();\n } else {\n this.listenerMap?.delete(event);\n }\n\n return this;\n }\n\n /**\n * @ru \u041F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u043A\u043E\u043F\u0438\u044E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u043E\u0432 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Get a snapshot of the listeners for an event.\n * @param event Event name.\n * @returns A new array containing the registered listeners.\n */\n listeners<K extends keyof Events>(event: K): EventListener<Events[K]>[] {\n const list = this.listenerMap?.get(event);\n if (!list) return [];\n\n const result = list.slice();\n for (let i = 0; i < list.length; i++) {\n const listener = list[i];\n result[i] = (listener as OnceListener)[onceOriginal] ?? listener;\n }\n return result as EventListener<Events[K]>[];\n }\n\n listenerCount<K extends keyof Events>(event: K): number {\n return this.listenerMap?.get(event)?.length ?? 0;\n }\n\n /**\n * @ru \u0412\u044B\u0437\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0438 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Dispatch an event to its listeners.\n * @param event Event name.\n * @param args Event arguments.\n * @throws Rethrows any exception thrown by a listener and stops dispatching the current event.\n */\n protected emit<K extends keyof Events>(event: K, ...args: Events[K]): void {\n const listeners = this.listenerMap;\n if (!listeners) return;\n\n const list = listeners.get(event);\n if (!list) return;\n\n if (list.length === 1) {\n list[0]!(...args);\n return;\n }\n\n const targets = list.slice();\n for (const listener of targets) {\n listener(...args);\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "aAQA,MAAMA,EAAe,OAAO,uBAAuB,EAQ7C,aAAO,WAAW,CACd,YASR,GAA2BC,EAAUC,EAAkC,CACrE,MAAMC,EAASD,EACTE,EAAa,KAAK,cAAgB,IAAI,IACtCC,EAAOD,EAAU,IAAIH,CAAK,EAChC,OAAII,EAAMA,EAAK,KAAKF,CAAM,EACrBC,EAAU,IAAIH,EAAO,CAACE,CAAM,CAAC,EAC3B,IACT,CASA,YAAoCF,EAAUC,EAAkC,CAC9E,OAAO,KAAK,GAAGD,EAAOC,CAAQ,CAChC,CASA,IAA4BD,EAAUC,EAAkC,CACtE,MAAMG,EAAO,KAAK,aAAa,IAAIJ,CAAK,EACxC,GAAI,CAACI,EAAM,OAAO,KAElB,MAAMF,EAASD,EACf,IAAII,EAAQ,GACZ,QAASC,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAAK,CACpC,MAAMC,EAAaH,EAAKE,CAAC,EACzB,GACEC,IACCA,IAAeL,GAAWK,EAA4BR,CAAY,IAAMG,GACzE,CACAG,EAAQC,EACR,KACF,CACF,CAEA,OAAID,IAAU,KACZD,EAAK,OAAOC,EAAO,CAAC,EAChBD,EAAK,SAAW,GAAG,KAAK,aAAa,OAAOJ,CAAK,GAGhD,IACT,CASA,eAAuCA,EAAUC,EAAkC,CACjF,OAAO,KAAK,IAAID,EAAOC,CAAQ,CACjC,CASA,KAA6BD,EAAUC,EAAkC,CACvE,MAAMC,EAASD,EACTO,GAAW,IAAIC,IAAmB,CACtC,KAAK,IAAIT,EAAOQ,CAAO,EACvBP,EAAS,GAAGQ,CAAI,CAClB,GACA,OAAAD,EAAQT,CAAY,EAAIG,EACjB,KAAK,GAAGF,EAAOQ,CAAO,CAC/B,CAQA,mBAA2CR,EAAS,CAClD,OAAIA,IAAU,OACZ,KAAK,aAAa,MAAK,EAEvB,KAAK,aAAa,OAAOA,CAAK,EAGzB,IACT,CAQA,UAAkCA,EAAQ,CACxC,MAAMI,EAAO,KAAK,aAAa,IAAIJ,CAAK,EACxC,GAAI,CAACI,EAAM,MAAO,CAAA,EAElB,MAAMM,EAASN,EAAK,MAAK,EACzB,QAASE,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAAK,CACpC,MAAML,EAAWG,EAAKE,CAAC,EACvBI,EAAOJ,CAAC,EAAKL,EAA0BF,CAAY,GAAKE,CAC1D,CACA,OAAOS,CACT,CAEA,cAAsCV,EAAQ,CAC5C,OAAO,KAAK,aAAa,IAAIA,CAAK,GAAG,QAAU,CACjD,CASU,KAA6BA,KAAaS,EAAe,CACjE,MAAMN,EAAY,KAAK,YACvB,GAAI,CAACA,EAAW,OAEhB,MAAMC,EAAOD,EAAU,IAAIH,CAAK,EAChC,GAAI,CAACI,EAAM,OAEX,GAAIA,EAAK,SAAW,EAAG,CACrBA,EAAK,CAAC,EAAG,GAAGK,CAAI,EAChB,MACF,CAEA,MAAME,EAAUP,EAAK,MAAK,EAC1B,UAAWH,KAAYU,EACrBV,EAAS,GAAGQ,CAAI,CAEpB",
|
|
6
6
|
"names": ["onceOriginal", "event", "listener", "target", "listeners", "list", "index", "i", "registered", "wrapper", "args", "result", "targets"]
|
|
7
7
|
}
|
package/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/hemmiter.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * @ru \u0422\u0438\u043F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0441 \u0442\u0438\u043F\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u043C\u0438 \u0430\u0440\u0433\u0443\u043C\u0435\u043D\u0442\u0430\u043C\u0438.\n * @en Event listener type with typed arguments.\n * @template Args Event argument tuple.\n */\nexport type EventListener<Args extends readonly unknown[]> = (...args: Args) => void;\n\ntype AnyEventListener = (...args: readonly unknown[]) => void;\nconst onceOriginal = Symbol(\"hemmiter.onceOriginal\");\ntype OnceListener = AnyEventListener & { [onceOriginal]: AnyEventListener };\n\n/**\n * @ru \u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0442\u0438\u043F\u043E\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439 emitter \u0441\u043E\u0431\u044B\u0442\u0438\u0439.\n * @en Minimal type-safe event emitter.\n * @template Events Event map where each value is an argument tuple.\n */\nexport class MiniEmitter<Events extends { [K in keyof Events]: readonly unknown[] }> {\n private listenerMap?: Map<keyof Events, AnyEventListener[]>;\n\n /**\n * @ru \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Register an event listener.\n * @param event Event name.\n * @param listener Event listener.\n * @returns This emitter instance.\n */\n on<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n const target = listener as AnyEventListener;\n const listeners = (this.listenerMap ??= new Map());\n const list = listeners.get(event);\n if (list) list.push(target);\n else listeners.set(event, [target]);\n return this;\n }\n\n /**\n * @ru \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Register an event listener.\n * @param event Event name.\n * @param listener Event listener.\n * @returns This emitter instance.\n */\n addListener<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n return this.on(event, listener);\n }\n\n /**\n * @ru \u0421\u043D\u044F\u0442\u044C \u043E\u0434\u043D\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Remove one registration of an event listener.\n * @param event Event name.\n * @param listener Event listener to remove.\n * @returns This emitter instance.\n */\n off<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n const list = this.listenerMap?.get(event);\n if (!list) return this;\n\n const target = listener as AnyEventListener;\n let index = -1;\n for (let i = 0; i < list.length; i++) {\n const registered = list[i];\n if (\n registered &&\n (registered === target || (registered as OnceListener)[onceOriginal] === target)\n ) {\n index = i;\n break;\n }\n }\n\n if (index !== -1) {\n list.splice(index, 1);\n if (list.length === 0) this.listenerMap?.delete(event);\n }\n\n return this;\n }\n\n /**\n * @ru \u0421\u043D\u044F\u0442\u044C \u043E\u0434\u043D\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Remove one registration of an event listener.\n * @param event Event name.\n * @param listener Event listener to remove.\n * @returns This emitter instance.\n */\n removeListener<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n return this.off(event, listener);\n }\n\n /**\n * @ru \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0441\u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043E\u0434\u0438\u043D \u0440\u0430\u0437.\n * @en Register a listener that runs once.\n * @param event Event name.\n * @param listener Event listener.\n * @returns This emitter instance.\n */\n once<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n const target = listener as AnyEventListener;\n const wrapper = ((...args: Events[K]) => {\n this.off(event, wrapper);\n listener(...args);\n }) as OnceListener;\n wrapper[onceOriginal] = target;\n return this.on(event, wrapper);\n }\n\n /**\n * @ru \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0438 \u043E\u0434\u043D\u043E\u0433\u043E \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0438\u043B\u0438 \u0432\u0441\u0435\u0445 \u0441\u043E\u0431\u044B\u0442\u0438\u0439.\n * @en Remove listeners for one event or for all events.\n * @param event Optional event name.\n * @returns This emitter instance.\n */\n removeAllListeners<K extends keyof Events>(event?: K): this {\n if (event === undefined) {\n this.listenerMap?.clear();\n } else {\n this.listenerMap?.delete(event);\n }\n\n return this;\n }\n\n /**\n * @ru \u041F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u043A\u043E\u043F\u0438\u044E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u043E\u0432 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Get a snapshot of the listeners for an event.\n * @param event Event name.\n * @returns A new array containing the registered listeners.\n */\n listeners<K extends keyof Events>(event: K): EventListener<Events[K]>[] {\n const list = this.listenerMap?.get(event);\n if (!list) return [];\n\n const result = list.slice();\n for (let i = 0; i < list.length; i++) {\n const listener = list[i];\n result[i] = (listener as OnceListener)[onceOriginal] ?? listener;\n }\n return result as EventListener<Events[K]>[];\n }\n\n listenerCount<K extends keyof Events>(event: K): number {\n return this.listenerMap?.get(event)?.length ?? 0;\n }\n\n /**\n * @ru \u0412\u044B\u0437\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0438 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Dispatch an event to its listeners.\n * @param event Event name.\n * @param args Event arguments.\n */\n protected emit<K extends keyof Events>(event: K, ...args: Events[K]): void {\n const listeners = this.listenerMap;\n if (!listeners) return;\n\n const list = listeners.get(event);\n if (!list) return;\n\n if (list.length === 1) {\n list[0]!(...args);\n return;\n }\n\n const targets = list.slice();\n for (const listener of targets) {\n listener(...args);\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "+dAQA,IAAMA,EAAe,OAAO,uBAAuB,EAQtCC,EAAP,KAAkB,CACd,YASR,GAA2BC,EAAUC,EAAkC,CACrE,IAAMC,EAASD,EACTE,EAAa,KAAK,cAAgB,IAAI,IACtCC,EAAOD,EAAU,IAAIH,CAAK,EAChC,OAAII,EAAMA,EAAK,KAAKF,CAAM,EACrBC,EAAU,IAAIH,EAAO,CAACE,CAAM,CAAC,EAC3B,IACT,CASA,YAAoCF,EAAUC,EAAkC,CAC9E,OAAO,KAAK,GAAGD,EAAOC,CAAQ,CAChC,CASA,IAA4BD,EAAUC,EAAkC,CACtE,IAAMG,EAAO,KAAK,aAAa,IAAIJ,CAAK,EACxC,GAAI,CAACI,EAAM,OAAO,KAElB,IAAMF,EAASD,EACXI,EAAQ,GACZ,QAASC,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAAK,CACpC,IAAMC,EAAaH,EAAKE,CAAC,EACzB,GACEC,IACCA,IAAeL,GAAWK,EAA4BT,CAAY,IAAMI,GACzE,CACAG,EAAQC,EACR,KACF,CACF,CAEA,OAAID,IAAU,KACZD,EAAK,OAAOC,EAAO,CAAC,EAChBD,EAAK,SAAW,GAAG,KAAK,aAAa,OAAOJ,CAAK,GAGhD,IACT,CASA,eAAuCA,EAAUC,EAAkC,CACjF,OAAO,KAAK,IAAID,EAAOC,CAAQ,CACjC,CASA,KAA6BD,EAAUC,EAAkC,CACvE,IAAMC,EAASD,EACTO,GAAW,IAAIC,IAAmB,CACtC,KAAK,IAAIT,EAAOQ,CAAO,EACvBP,EAAS,GAAGQ,CAAI,CAClB,GACA,OAAAD,EAAQV,CAAY,EAAII,EACjB,KAAK,GAAGF,EAAOQ,CAAO,CAC/B,CAQA,mBAA2CR,EAAS,CAClD,OAAIA,IAAU,OACZ,KAAK,aAAa,MAAK,EAEvB,KAAK,aAAa,OAAOA,CAAK,EAGzB,IACT,CAQA,UAAkCA,EAAQ,CACxC,IAAMI,EAAO,KAAK,aAAa,IAAIJ,CAAK,EACxC,GAAI,CAACI,EAAM,MAAO,CAAA,EAElB,IAAMM,EAASN,EAAK,MAAK,EACzB,QAASE,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAAK,CACpC,IAAML,EAAWG,EAAKE,CAAC,EACvBI,EAAOJ,CAAC,EAAKL,EAA0BH,CAAY,GAAKG,CAC1D,CACA,OAAOS,CACT,CAEA,cAAsCV,EAAQ,CAC5C,OAAO,KAAK,aAAa,IAAIA,CAAK,GAAG,QAAU,CACjD,
|
|
4
|
+
"sourcesContent": ["/**\n * @ru \u0422\u0438\u043F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0441 \u0442\u0438\u043F\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u043C\u0438 \u0430\u0440\u0433\u0443\u043C\u0435\u043D\u0442\u0430\u043C\u0438.\n * @en Event listener type with typed arguments.\n * @template Args Event argument tuple.\n */\nexport type EventListener<Args extends readonly unknown[]> = (...args: Args) => void;\n\ntype AnyEventListener = (...args: readonly unknown[]) => void;\nconst onceOriginal = Symbol(\"hemmiter.onceOriginal\");\ntype OnceListener = AnyEventListener & { [onceOriginal]: AnyEventListener };\n\n/**\n * @ru \u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0442\u0438\u043F\u043E\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439 emitter \u0441\u043E\u0431\u044B\u0442\u0438\u0439.\n * @en Minimal type-safe event emitter.\n * @template Events Event map where each value is an argument tuple.\n */\nexport class MiniEmitter<Events extends { [K in keyof Events]: readonly unknown[] }> {\n private listenerMap?: Map<keyof Events, AnyEventListener[]>;\n\n /**\n * @ru \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Register an event listener.\n * @param event Event name.\n * @param listener Event listener.\n * @returns This emitter instance.\n */\n on<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n const target = listener as AnyEventListener;\n const listeners = (this.listenerMap ??= new Map());\n const list = listeners.get(event);\n if (list) list.push(target);\n else listeners.set(event, [target]);\n return this;\n }\n\n /**\n * @ru \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Register an event listener.\n * @param event Event name.\n * @param listener Event listener.\n * @returns This emitter instance.\n */\n addListener<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n return this.on(event, listener);\n }\n\n /**\n * @ru \u0421\u043D\u044F\u0442\u044C \u043E\u0434\u043D\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Remove one registration of an event listener.\n * @param event Event name.\n * @param listener Event listener to remove.\n * @returns This emitter instance.\n */\n off<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n const list = this.listenerMap?.get(event);\n if (!list) return this;\n\n const target = listener as AnyEventListener;\n let index = -1;\n for (let i = 0; i < list.length; i++) {\n const registered = list[i];\n if (\n registered &&\n (registered === target || (registered as OnceListener)[onceOriginal] === target)\n ) {\n index = i;\n break;\n }\n }\n\n if (index !== -1) {\n list.splice(index, 1);\n if (list.length === 0) this.listenerMap?.delete(event);\n }\n\n return this;\n }\n\n /**\n * @ru \u0421\u043D\u044F\u0442\u044C \u043E\u0434\u043D\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0430 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Remove one registration of an event listener.\n * @param event Event name.\n * @param listener Event listener to remove.\n * @returns This emitter instance.\n */\n removeListener<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n return this.off(event, listener);\n }\n\n /**\n * @ru \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0441\u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043E\u0434\u0438\u043D \u0440\u0430\u0437.\n * @en Register a listener that runs once.\n * @param event Event name.\n * @param listener Event listener.\n * @returns This emitter instance.\n */\n once<K extends keyof Events>(event: K, listener: EventListener<Events[K]>): this {\n const target = listener as AnyEventListener;\n const wrapper = ((...args: Events[K]) => {\n this.off(event, wrapper);\n listener(...args);\n }) as OnceListener;\n wrapper[onceOriginal] = target;\n return this.on(event, wrapper);\n }\n\n /**\n * @ru \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0438 \u043E\u0434\u043D\u043E\u0433\u043E \u0441\u043E\u0431\u044B\u0442\u0438\u044F \u0438\u043B\u0438 \u0432\u0441\u0435\u0445 \u0441\u043E\u0431\u044B\u0442\u0438\u0439.\n * @en Remove listeners for one event or for all events.\n * @param event Optional event name.\n * @returns This emitter instance.\n */\n removeAllListeners<K extends keyof Events>(event?: K): this {\n if (event === undefined) {\n this.listenerMap?.clear();\n } else {\n this.listenerMap?.delete(event);\n }\n\n return this;\n }\n\n /**\n * @ru \u041F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u043A\u043E\u043F\u0438\u044E \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u043E\u0432 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Get a snapshot of the listeners for an event.\n * @param event Event name.\n * @returns A new array containing the registered listeners.\n */\n listeners<K extends keyof Events>(event: K): EventListener<Events[K]>[] {\n const list = this.listenerMap?.get(event);\n if (!list) return [];\n\n const result = list.slice();\n for (let i = 0; i < list.length; i++) {\n const listener = list[i];\n result[i] = (listener as OnceListener)[onceOriginal] ?? listener;\n }\n return result as EventListener<Events[K]>[];\n }\n\n listenerCount<K extends keyof Events>(event: K): number {\n return this.listenerMap?.get(event)?.length ?? 0;\n }\n\n /**\n * @ru \u0412\u044B\u0437\u0432\u0430\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0438 \u0441\u043E\u0431\u044B\u0442\u0438\u044F.\n * @en Dispatch an event to its listeners.\n * @param event Event name.\n * @param args Event arguments.\n * @throws Rethrows any exception thrown by a listener and stops dispatching the current event.\n */\n protected emit<K extends keyof Events>(event: K, ...args: Events[K]): void {\n const listeners = this.listenerMap;\n if (!listeners) return;\n\n const list = listeners.get(event);\n if (!list) return;\n\n if (list.length === 1) {\n list[0]!(...args);\n return;\n }\n\n const targets = list.slice();\n for (const listener of targets) {\n listener(...args);\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "+dAQA,IAAMA,EAAe,OAAO,uBAAuB,EAQtCC,EAAP,KAAkB,CACd,YASR,GAA2BC,EAAUC,EAAkC,CACrE,IAAMC,EAASD,EACTE,EAAa,KAAK,cAAgB,IAAI,IACtCC,EAAOD,EAAU,IAAIH,CAAK,EAChC,OAAII,EAAMA,EAAK,KAAKF,CAAM,EACrBC,EAAU,IAAIH,EAAO,CAACE,CAAM,CAAC,EAC3B,IACT,CASA,YAAoCF,EAAUC,EAAkC,CAC9E,OAAO,KAAK,GAAGD,EAAOC,CAAQ,CAChC,CASA,IAA4BD,EAAUC,EAAkC,CACtE,IAAMG,EAAO,KAAK,aAAa,IAAIJ,CAAK,EACxC,GAAI,CAACI,EAAM,OAAO,KAElB,IAAMF,EAASD,EACXI,EAAQ,GACZ,QAASC,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAAK,CACpC,IAAMC,EAAaH,EAAKE,CAAC,EACzB,GACEC,IACCA,IAAeL,GAAWK,EAA4BT,CAAY,IAAMI,GACzE,CACAG,EAAQC,EACR,KACF,CACF,CAEA,OAAID,IAAU,KACZD,EAAK,OAAOC,EAAO,CAAC,EAChBD,EAAK,SAAW,GAAG,KAAK,aAAa,OAAOJ,CAAK,GAGhD,IACT,CASA,eAAuCA,EAAUC,EAAkC,CACjF,OAAO,KAAK,IAAID,EAAOC,CAAQ,CACjC,CASA,KAA6BD,EAAUC,EAAkC,CACvE,IAAMC,EAASD,EACTO,GAAW,IAAIC,IAAmB,CACtC,KAAK,IAAIT,EAAOQ,CAAO,EACvBP,EAAS,GAAGQ,CAAI,CAClB,GACA,OAAAD,EAAQV,CAAY,EAAII,EACjB,KAAK,GAAGF,EAAOQ,CAAO,CAC/B,CAQA,mBAA2CR,EAAS,CAClD,OAAIA,IAAU,OACZ,KAAK,aAAa,MAAK,EAEvB,KAAK,aAAa,OAAOA,CAAK,EAGzB,IACT,CAQA,UAAkCA,EAAQ,CACxC,IAAMI,EAAO,KAAK,aAAa,IAAIJ,CAAK,EACxC,GAAI,CAACI,EAAM,MAAO,CAAA,EAElB,IAAMM,EAASN,EAAK,MAAK,EACzB,QAASE,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAAK,CACpC,IAAML,EAAWG,EAAKE,CAAC,EACvBI,EAAOJ,CAAC,EAAKL,EAA0BH,CAAY,GAAKG,CAC1D,CACA,OAAOS,CACT,CAEA,cAAsCV,EAAQ,CAC5C,OAAO,KAAK,aAAa,IAAIA,CAAK,GAAG,QAAU,CACjD,CASU,KAA6BA,KAAaS,EAAe,CACjE,IAAMN,EAAY,KAAK,YACvB,GAAI,CAACA,EAAW,OAEhB,IAAMC,EAAOD,EAAU,IAAIH,CAAK,EAChC,GAAI,CAACI,EAAM,OAEX,GAAIA,EAAK,SAAW,EAAG,CACrBA,EAAK,CAAC,EAAG,GAAGK,CAAI,EAChB,MACF,CAEA,IAAME,EAAUP,EAAK,MAAK,EAC1B,QAAWH,KAAYU,EACrBV,EAAS,GAAGQ,CAAI,CAEpB,CAAA",
|
|
6
6
|
"names": ["onceOriginal", "MiniEmitter", "event", "listener", "target", "listeners", "list", "index", "i", "registered", "wrapper", "args", "result", "targets"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hemmiter",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "A tiny type-safe event emitter for TypeScript.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"events",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
},
|
|
20
20
|
"type": "module",
|
|
21
21
|
"sideEffects": false,
|
|
22
|
-
"main": "./index
|
|
22
|
+
"main": "./index.cjs",
|
|
23
23
|
"module": "./index.js",
|
|
24
24
|
"types": "./index.d.ts",
|
|
25
25
|
"exports": {
|