@asaidimu/utils-events 1.0.0 → 1.0.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/index.d.mts +9 -5
- package/index.d.ts +9 -5
- package/index.js +1 -1
- package/index.mjs +1 -1
- package/package.json +1 -1
package/index.d.mts
CHANGED
|
@@ -126,14 +126,18 @@ interface EventError extends Error {
|
|
|
126
126
|
payload?: unknown;
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
129
|
+
declare const createEventBus: <TEventMap extends Record<string, any>>(options?: {
|
|
130
|
+
batch: boolean;
|
|
131
|
+
batchSize: number;
|
|
132
|
+
batchDelay: number;
|
|
133
|
+
errorHandler: (error: EventError) => void;
|
|
134
|
+
crossTab: boolean;
|
|
135
|
+
channelName: string;
|
|
136
|
+
}) => EventBus<TEventMap>;
|
|
133
137
|
|
|
134
138
|
declare class Events<TEventMap extends Record<string, any>> implements EventBus<TEventMap> {
|
|
135
139
|
private bus;
|
|
136
|
-
constructor(options?:
|
|
140
|
+
constructor(options?: any);
|
|
137
141
|
/**
|
|
138
142
|
* Subscribes to a specific event by name.
|
|
139
143
|
* @param eventName - The name of the event to subscribe to.
|
package/index.d.ts
CHANGED
|
@@ -126,14 +126,18 @@ interface EventError extends Error {
|
|
|
126
126
|
payload?: unknown;
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
129
|
+
declare const createEventBus: <TEventMap extends Record<string, any>>(options?: {
|
|
130
|
+
batch: boolean;
|
|
131
|
+
batchSize: number;
|
|
132
|
+
batchDelay: number;
|
|
133
|
+
errorHandler: (error: EventError) => void;
|
|
134
|
+
crossTab: boolean;
|
|
135
|
+
channelName: string;
|
|
136
|
+
}) => EventBus<TEventMap>;
|
|
133
137
|
|
|
134
138
|
declare class Events<TEventMap extends Record<string, any>> implements EventBus<TEventMap> {
|
|
135
139
|
private bus;
|
|
136
|
-
constructor(options?:
|
|
140
|
+
constructor(options?: any);
|
|
137
141
|
/**
|
|
138
142
|
* Subscribes to a specific event by name.
|
|
139
143
|
* @param eventName - The name of the event to subscribe to.
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=
|
|
1
|
+
"use strict";var e=(e={batch:!1,batchSize:1e3,batchDelay:16,errorHandler:e=>console.error("EventBus Error:",e),crossTab:!1,channelName:"event-bus-channel"})=>{const t=new Map;let a=[],r=0,s=0;const n=new Map,o=new Map;let c=null;e.crossTab&&"undefined"!=typeof BroadcastChannel?c=new BroadcastChannel(e.channelName):e.crossTab&&console.warn("BroadcastChannel is not supported in this browser. Cross-tab notifications are disabled.");const l=(e,t)=>{r++,s+=t,n.set(e,(n.get(e)||0)+1)},i=()=>{const t=a;a=[],t.forEach((({name:t,payload:a})=>{const r=performance.now();try{(o.get(t)||[]).forEach((e=>e(a)))}catch(r){e.errorHandler({...r,eventName:t,payload:a})}l(t,performance.now()-r)}))},u=(()=>{let t;return()=>{clearTimeout(t),t=setTimeout(i,e.batchDelay)}})(),d=e=>{const a=t.get(e);a?o.set(e,Array.from(a)):o.delete(e)};return c&&(c.onmessage=e=>{const{name:t,payload:a}=e.data;(o.get(t)||[]).forEach((e=>e(a)))}),{once:(e,a)=>{let r;const s=e=>{r(),a(e)};return r=(()=>{t.has(e)||t.set(e,new Set);const a=t.get(e);return a.add(s),()=>{a.delete(s),0===a.size&&t.delete(e)}})(),r},subscribe:(e,a)=>{t.has(e)||t.set(e,new Set);const r=t.get(e);return r.add(a),d(e),()=>{r.delete(a),0===r.size?(t.delete(e),o.delete(e)):d(e)}},emit:({name:t,payload:r})=>{if(e.batch)return a.push({name:t,payload:r}),a.length>=e.batchSize?i():u(),void(c&&c.postMessage({name:t,payload:r}));const s=performance.now();try{(o.get(t)||[]).forEach((e=>e(r))),c&&c.postMessage({name:t,payload:r})}catch(a){e.errorHandler({...a,eventName:t,payload:r})}l(t,performance.now()-s)},metrics:()=>({totalEvents:r,activeSubscriptions:Array.from(t.values()).reduce(((e,t)=>e+t.size),0),eventCounts:n,averageEmitDuration:r>0?s/r:0}),clear:()=>{t.clear(),o.clear(),a=[],r=0,s=0,n.clear(),c&&(c.close(),c=null)}}};exports.Events=class{bus;constructor(t){this.bus=e(t)}subscribe(e,t){return this.bus.subscribe(e,t)}once(e,t){return this.bus.once(e,t)}emit(e){return this.bus.emit(e)}metrics(){return this.bus.metrics()}clear(){return this.bus.clear()}},exports.createEventBus=e;
|
package/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=
|
|
1
|
+
var e=(e={batch:!1,batchSize:1e3,batchDelay:16,errorHandler:e=>console.error("EventBus Error:",e),crossTab:!1,channelName:"event-bus-channel"})=>{const t=new Map;let a=[],r=0,n=0;const s=new Map,o=new Map;let c=null;e.crossTab&&"undefined"!=typeof BroadcastChannel?c=new BroadcastChannel(e.channelName):e.crossTab&&console.warn("BroadcastChannel is not supported in this browser. Cross-tab notifications are disabled.");const l=(e,t)=>{r++,n+=t,s.set(e,(s.get(e)||0)+1)},i=()=>{const t=a;a=[],t.forEach((({name:t,payload:a})=>{const r=performance.now();try{(o.get(t)||[]).forEach((e=>e(a)))}catch(r){e.errorHandler({...r,eventName:t,payload:a})}l(t,performance.now()-r)}))},u=(()=>{let t;return()=>{clearTimeout(t),t=setTimeout(i,e.batchDelay)}})(),d=e=>{const a=t.get(e);a?o.set(e,Array.from(a)):o.delete(e)};return c&&(c.onmessage=e=>{const{name:t,payload:a}=e.data;(o.get(t)||[]).forEach((e=>e(a)))}),{once:(e,a)=>{let r;const n=e=>{r(),a(e)};return r=(()=>{t.has(e)||t.set(e,new Set);const a=t.get(e);return a.add(n),()=>{a.delete(n),0===a.size&&t.delete(e)}})(),r},subscribe:(e,a)=>{t.has(e)||t.set(e,new Set);const r=t.get(e);return r.add(a),d(e),()=>{r.delete(a),0===r.size?(t.delete(e),o.delete(e)):d(e)}},emit:({name:t,payload:r})=>{if(e.batch)return a.push({name:t,payload:r}),a.length>=e.batchSize?i():u(),void(c&&c.postMessage({name:t,payload:r}));const n=performance.now();try{(o.get(t)||[]).forEach((e=>e(r))),c&&c.postMessage({name:t,payload:r})}catch(a){e.errorHandler({...a,eventName:t,payload:r})}l(t,performance.now()-n)},metrics:()=>({totalEvents:r,activeSubscriptions:Array.from(t.values()).reduce(((e,t)=>e+t.size),0),eventCounts:s,averageEmitDuration:r>0?n/r:0}),clear:()=>{t.clear(),o.clear(),a=[],r=0,n=0,s.clear(),c&&(c.close(),c=null)}}},t=class{bus;constructor(t){this.bus=e(t)}subscribe(e,t){return this.bus.subscribe(e,t)}once(e,t){return this.bus.once(e,t)}emit(e){return this.bus.emit(e)}metrics(){return this.bus.metrics()}clear(){return this.bus.clear()}};export{t as Events,e as createEventBus};
|