@x-oasis/emitter 0.3.0 → 0.4.0
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/dist/emitter.cjs.development.js +20 -0
- package/dist/emitter.cjs.development.js.map +1 -1
- package/dist/emitter.cjs.production.min.js +1 -1
- package/dist/emitter.cjs.production.min.js.map +1 -1
- package/dist/emitter.esm.js +20 -1
- package/dist/emitter.esm.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/operators/once.d.ts +1 -0
- package/package.json +3 -3
- package/src/index.ts +1 -0
- package/src/operators/once.ts +22 -0
|
@@ -227,8 +227,28 @@ function fromDomEvent(emitter, eventName) {
|
|
|
227
227
|
return event.subscribe;
|
|
228
228
|
}
|
|
229
229
|
|
|
230
|
+
var once = function once(event) {
|
|
231
|
+
return function (listener, args, disposable) {
|
|
232
|
+
var didFired = false;
|
|
233
|
+
var result = event(function (e) {
|
|
234
|
+
if (didFired) return;
|
|
235
|
+
if (result) {
|
|
236
|
+
result.dispose();
|
|
237
|
+
} else {
|
|
238
|
+
didFired = true;
|
|
239
|
+
}
|
|
240
|
+
return listener.call(args, e);
|
|
241
|
+
}, null, disposable);
|
|
242
|
+
if (didFired) {
|
|
243
|
+
result.dispose();
|
|
244
|
+
}
|
|
245
|
+
return result;
|
|
246
|
+
};
|
|
247
|
+
};
|
|
248
|
+
|
|
230
249
|
exports.Emitter = Emitter;
|
|
231
250
|
exports.Event = Event;
|
|
232
251
|
exports.fromDomEvent = fromDomEvent;
|
|
233
252
|
exports.fromNodeEvent = fromNodeEvent;
|
|
253
|
+
exports.once = once;
|
|
234
254
|
//# sourceMappingURL=emitter.cjs.development.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.cjs.development.js","sources":["../src/Event.ts","../src/Emitter.ts","../src/fromNodeEvent.ts","../src/fromDomEvent.ts"],"sourcesContent":["import { toDisposable } from '@x-oasis/disposable';\nimport { EventListener, EventProps } from './types';\n\nexport default class Event {\n readonly name: string;\n\n private _listeners: EventListener[] = [];\n\n private _onWillAddFirstListener?: Function;\n\n private _onDidAddFirstListener?: Function;\n\n private _onDidAddListener?: Function;\n\n private _onWillRemoveListener?: Function;\n\n private _onDidRemoveLastListener?: Function;\n\n private _coldTrigger?: boolean;\n\n private _cacheCurrentValue?: any[] | undefined;\n\n constructor(props: EventProps & { name: string }) {\n const {\n name,\n onWillAddFirstListener,\n onDidAddFirstListener,\n onDidAddListener,\n onWillRemoveListener,\n onDidRemoveLastListener,\n coldTrigger,\n } = props;\n\n this.name = name;\n\n this._coldTrigger = coldTrigger;\n this._onWillAddFirstListener = onWillAddFirstListener;\n this._onDidAddFirstListener = onDidAddFirstListener;\n this._onDidAddListener = onDidAddListener;\n this._onWillRemoveListener = onWillRemoveListener;\n this._onDidRemoveLastListener = onDidRemoveLastListener;\n this.subscribe = this.subscribe.bind(this);\n }\n\n subscribe(listener: EventListener) {\n if (!this._listeners.length) {\n this._onWillAddFirstListener?.();\n }\n\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n console.error('add a duplicate listener');\n } else {\n this._listeners.push(listener);\n if (this._listeners.length === 1) this._onDidAddFirstListener?.();\n this._onDidAddListener?.();\n if (this._coldTrigger && this._cacheCurrentValue)\n listener(...this._cacheCurrentValue);\n }\n\n return toDisposable(() => {\n this.removeListener(listener);\n });\n }\n\n removeListener(listener: EventListener) {\n const index = this._listeners.indexOf(listener);\n if (index === -1) return;\n this._onWillRemoveListener?.();\n\n this._listeners.splice(index, 1);\n if (!this._listeners.length) {\n this._onDidRemoveLastListener?.();\n }\n }\n\n dispose() {\n this._listeners = [];\n this._onDidRemoveLastListener?.();\n }\n\n fire(...args: any[]) {\n if (this._coldTrigger) {\n this._cacheCurrentValue = args;\n }\n for (const listener of this._listeners) {\n listener(...args);\n }\n }\n}\n","import Event from './Event';\nimport { EventProps } from './types';\n\nexport default class Emitter {\n private _events = new Map<string, Event>();\n\n private _disposed = false;\n\n private _name: string;\n\n constructor(props: { name: string }) {\n const { name } = props || {};\n this._name = name;\n }\n\n get name() {\n return this._name;\n }\n\n /**\n * 没有就注册,有就返回\n */\n register(eventName: string, eventProps?: EventProps) {\n if (this._events.has(eventName)) {\n return this._events.get(eventName) as Event;\n }\n\n this._events.set(\n eventName,\n new Event({\n ...(eventProps || {}),\n name: eventName,\n })\n );\n\n return this._events.get(eventName) as Event;\n }\n\n getEvent(eventName: string) {\n return this._events.get(eventName);\n }\n\n dispose() {\n if (this._disposed) return;\n for (const [_, event] of this._events) {\n event.dispose();\n }\n\n this._disposed = true;\n }\n}\n\nexport type IEvent = Event;\n","import Event from './Event';\n\nexport interface NodeEventEmitter {\n on(event: string | symbol, listener: Function): unknown;\n removeListener(event: string | symbol, listener: Function): unknown;\n}\n\n/**\n * Creates an {@link Event} from a node event emitter.\n */\nexport function fromNodeEvent(emitter: NodeEventEmitter, eventName: string) {\n // @ts-ignore\n const onFirstListenerAdd = () => emitter.on(eventName, fn);\n const onLastListenerRemove = () => emitter.removeListener(eventName, fn);\n const event = new Event({\n name: eventName,\n onWillAddFirstListener: onFirstListenerAdd,\n onDidRemoveLastListener: onLastListenerRemove,\n });\n\n const fn = (...args: any[]) => {\n return event.fire(...args);\n };\n\n return event.subscribe;\n}\n","import Event from './Event';\n\nexport interface DomEventEmitter {\n addEventListener(event: string | symbol, listener: Function): unknown;\n removeEventListener(event: string | symbol, listener: Function): unknown;\n}\n\n/**\n * Creates an {@link Event} from a window event emitter.\n */\nexport function fromDomEvent(emitter: DomEventEmitter, eventName: string) {\n // @ts-ignore\n const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn);\n const onLastListenerRemove = () => emitter.removeEventListener(eventName, fn);\n const event = new Event({\n name: eventName,\n onWillAddFirstListener: onFirstListenerAdd,\n onDidRemoveLastListener: onLastListenerRemove,\n });\n\n const fn = (...args: any[]) => {\n return event.fire(...args);\n };\n\n return event.subscribe;\n}\n"],"names":["Event","props","name","onWillAddFirstListener","onDidAddFirstListener","onDidAddListener","onWillRemoveListener","onDidRemoveLastListener","coldTrigger","_coldTrigger","_onWillAddFirstListener","_onDidAddFirstListener","_onDidAddListener","_onWillRemoveListener","_onDidRemoveLastListener","subscribe","bind","_proto","prototype","listener","_listeners","length","_this$_onWillAddFirst","call","index","indexOf","console","error","_this$_onDidAddFirstL","_this$_onDidAddListen","push","_cacheCurrentValue","apply","toDisposable","_this","removeListener","_this$_onWillRemoveLi","splice","_this$_onDidRemoveLas","dispose","_this$_onDidRemoveLas2","fire","args","Array","_len","_key","arguments","_iterator","_createForOfIteratorHelperLoose","_step","done","value","Emitter","Map","_ref","_name","register","eventName","eventProps","_events","has","get","set","_extends","getEvent","_disposed","_step$value","_","event","_createClass","key","fromNodeEvent","emitter","onFirstListenerAdd","on","fn","onLastListenerRemove","fromDomEvent","addEventListener","removeEventListener"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAGqBA,KAAK;EAmBxB,SAAAA,MAAYC,KAAoC;IAhBxC,eAAU,GAAoB,EAAE;IAiBtC,IACEC,IAAI,GAOFD,KAAK,CAPPC,IAAI;MACJC,sBAAsB,GAMpBF,KAAK,CANPE,sBAAsB;MACtBC,qBAAqB,GAKnBH,KAAK,CALPG,qBAAqB;MACrBC,gBAAgB,GAIdJ,KAAK,CAJPI,gBAAgB;MAChBC,oBAAoB,GAGlBL,KAAK,CAHPK,oBAAoB;MACpBC,uBAAuB,GAErBN,KAAK,CAFPM,uBAAuB;MACvBC,WAAW,GACTP,KAAK,CADPO,WAAW;IAGb,IAAI,CAACN,IAAI,GAAGA,IAAI;IAEhB,IAAI,CAACO,YAAY,GAAGD,WAAW;IAC/B,IAAI,CAACE,uBAAuB,GAAGP,sBAAsB;IACrD,IAAI,CAACQ,sBAAsB,GAAGP,qBAAqB;IACnD,IAAI,CAACQ,iBAAiB,GAAGP,gBAAgB;IACzC,IAAI,CAACQ,qBAAqB,GAAGP,oBAAoB;IACjD,IAAI,CAACQ,wBAAwB,GAAGP,uBAAuB;IACvD,IAAI,CAACQ,SAAS,GAAG,IAAI,CAACA,SAAS,CAACC,IAAI,CAAC,IAAI,CAAC;;EAC3C,IAAAC,MAAA,GAAAjB,KAAA,CAAAkB,SAAA;EAAAD,MAAA,CAEDF,SAAS,GAAT,SAAAA,UAAUI,QAAuB;;IAC/B,IAAI,CAAC,IAAI,CAACC,UAAU,CAACC,MAAM,EAAE;MAAA,IAAAC,qBAAA;MAC3B,CAAAA,qBAAA,OAAI,CAACZ,uBAAuB,qBAA5BY,qBAAA,CAAAC,IAAA,KAAI,CAA4B;;IAGlC,IAAMC,KAAK,GAAG,IAAI,CAACJ,UAAU,CAACK,OAAO,CAACN,QAAQ,CAAC;IAC/C,IAAIK,KAAK,KAAK,CAAC,CAAC,EAAE;MAChBE,OAAO,CAACC,KAAK,CAAC,0BAA0B,CAAC;KAC1C,MAAM;MAAA,IAAAC,qBAAA,EAAAC,qBAAA;MACL,IAAI,CAACT,UAAU,CAACU,IAAI,CAACX,QAAQ,CAAC;MAC9B,IAAI,IAAI,CAACC,UAAU,CAACC,MAAM,KAAK,CAAC,EAAE,CAAAO,qBAAA,OAAI,CAACjB,sBAAsB,qBAA3BiB,qBAAA,CAAAL,IAAA,KAAI,CAA2B;MACjE,CAAAM,qBAAA,OAAI,CAACjB,iBAAiB,qBAAtBiB,qBAAA,CAAAN,IAAA,KAAI,CAAsB;MAC1B,IAAI,IAAI,CAACd,YAAY,IAAI,IAAI,CAACsB,kBAAkB,EAC9CZ,QAAQ,CAAAa,KAAA,SAAI,IAAI,CAACD,kBAAkB,CAAC;;IAGxC,OAAOE,uBAAY,CAAC;MAClBC,KAAI,CAACC,cAAc,CAAChB,QAAQ,CAAC;KAC9B,CAAC;GACH;EAAAF,MAAA,CAEDkB,cAAc,GAAd,SAAAA,eAAehB,QAAuB;;IACpC,IAAMK,KAAK,GAAG,IAAI,CAACJ,UAAU,CAACK,OAAO,CAACN,QAAQ,CAAC;IAC/C,IAAIK,KAAK,KAAK,CAAC,CAAC,EAAE;IAClB,CAAAY,qBAAA,OAAI,CAACvB,qBAAqB,qBAA1BuB,qBAAA,CAAAb,IAAA,KAAI,CAA0B;IAE9B,IAAI,CAACH,UAAU,CAACiB,MAAM,CAACb,KAAK,EAAE,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,CAACJ,UAAU,CAACC,MAAM,EAAE;MAAA,IAAAiB,qBAAA;MAC3B,CAAAA,qBAAA,OAAI,CAACxB,wBAAwB,qBAA7BwB,qBAAA,CAAAf,IAAA,KAAI,CAA6B;;GAEpC;EAAAN,MAAA,CAEDsB,OAAO,GAAP,SAAAA;;IACE,IAAI,CAACnB,UAAU,GAAG,EAAE;IACpB,CAAAoB,sBAAA,OAAI,CAAC1B,wBAAwB,qBAA7B0B,sBAAA,CAAAjB,IAAA,KAAI,CAA6B;GAClC;EAAAN,MAAA,CAEDwB,IAAI,GAAJ,SAAAA;sCAAQC,IAAW,OAAAC,KAAA,CAAAC,IAAA,GAAAC,IAAA,MAAAA,IAAA,GAAAD,IAAA,EAAAC,IAAA;MAAXH,IAAW,CAAAG,IAAA,IAAAC,SAAA,CAAAD,IAAA;;IACjB,IAAI,IAAI,CAACpC,YAAY,EAAE;MACrB,IAAI,CAACsB,kBAAkB,GAAGW,IAAI;;IAEhC,SAAAK,SAAA,GAAAC,+BAAA,CAAuB,IAAI,CAAC5B,UAAU,GAAA6B,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;MAAA,IAA7B/B,QAAQ,GAAA8B,KAAA,CAAAE,KAAA;MACjBhC,QAAQ,CAAAa,KAAA,SAAIU,IAAI,CAAC;;GAEpB;EAAA,OAAA1C,KAAA;AAAA;;ICrFkBoD,OAAO;EAO1B,SAAAA,QAAYnD,KAAuB;IAN3B,YAAO,GAAG,IAAIoD,GAAG,EAAiB;IAElC,cAAS,GAAG,KAAK;IAKvB,IAAAC,IAAA,GAAiBrD,KAAK,IAAI,EAAE;MAApBC,IAAI,GAAAoD,IAAA,CAAJpD,IAAI;IACZ,IAAI,CAACqD,KAAK,GAAGrD,IAAI;;EAClB,IAAAe,MAAA,GAAAmC,OAAA,CAAAlC,SAAA;EAAAD,MAAA,CASDuC,QAAQ,GAAR,SAAAA,SAASC,SAAiB,EAAEC,UAAuB;IACjD,IAAI,IAAI,CAACC,OAAO,CAACC,GAAG,CAACH,SAAS,CAAC,EAAE;MAC/B,OAAO,IAAI,CAACE,OAAO,CAACE,GAAG,CAACJ,SAAS,CAAU;;IAG7C,IAAI,CAACE,OAAO,CAACG,GAAG,CACdL,SAAS,EACT,IAAIzD,KAAK,CAAA+D,QAAA,KACHL,UAAU,IAAI,EAAE;MACpBxD,IAAI,EAAEuD;OACN,CACH;IAED,OAAO,IAAI,CAACE,OAAO,CAACE,GAAG,CAACJ,SAAS,CAAU;GAC5C;EAAAxC,MAAA,CAED+C,QAAQ,GAAR,SAAAA,SAASP,SAAiB;IACxB,OAAO,IAAI,CAACE,OAAO,CAACE,GAAG,CAACJ,SAAS,CAAC;GACnC;EAAAxC,MAAA,CAEDsB,OAAO,GAAP,SAAAA;IACE,IAAI,IAAI,CAAC0B,SAAS,EAAE;IACpB,SAAAlB,SAAA,GAAAC,+BAAA,CAAyB,IAAI,CAACW,OAAO,GAAAV,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;MAAA,IAAAgB,WAAA,GAAAjB,KAAA,CAAAE,KAAA;QAA3BgB,AAAGC,KAAK,GAAAF,WAAA;MAClBE,KAAK,CAAC7B,OAAO,EAAE;;IAGjB,IAAI,CAAC0B,SAAS,GAAG,IAAI;GACtB;EAAAI,YAAA,CAAAjB,OAAA;IAAAkB,GAAA;IAAAT,GAAA,EAlCD,SAAAA;MACE,OAAO,IAAI,CAACN,KAAK;;;EAClB,OAAAH,OAAA;AAAA;;SCPamB,aAAaA,CAACC,OAAyB,EAAEf,SAAiB;EAExE,IAAMgB,kBAAkB,GAAG,SAArBA,kBAAkBA;IAAA,OAASD,OAAO,CAACE,EAAE,CAACjB,SAAS,EAAEkB,EAAE,CAAC;;EAC1D,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAoBA;IAAA,OAASJ,OAAO,CAACrC,cAAc,CAACsB,SAAS,EAAEkB,EAAE,CAAC;;EACxE,IAAMP,KAAK,GAAG,IAAIpE,KAAK,CAAC;IACtBE,IAAI,EAAEuD,SAAS;IACftD,sBAAsB,EAAEsE,kBAAkB;IAC1ClE,uBAAuB,EAAEqE;GAC1B,CAAC;EAEF,IAAMD,EAAE,GAAG,SAALA,EAAEA;IACN,OAAOP,KAAK,CAAC3B,IAAI,CAAAT,KAAA,CAAVoC,KAAK,EAAAtB,SAAA,CAAc;GAC3B;EAED,OAAOsB,KAAK,CAACrD,SAAS;AACxB;;SCfgB8D,YAAYA,CAACL,OAAwB,EAAEf,SAAiB;EAEtE,IAAMgB,kBAAkB,GAAG,SAArBA,kBAAkBA;IAAA,OAASD,OAAO,CAACM,gBAAgB,CAACrB,SAAS,EAAEkB,EAAE,CAAC;;EACxE,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAoBA;IAAA,OAASJ,OAAO,CAACO,mBAAmB,CAACtB,SAAS,EAAEkB,EAAE,CAAC;;EAC7E,IAAMP,KAAK,GAAG,IAAIpE,KAAK,CAAC;IACtBE,IAAI,EAAEuD,SAAS;IACftD,sBAAsB,EAAEsE,kBAAkB;IAC1ClE,uBAAuB,EAAEqE;GAC1B,CAAC;EAEF,IAAMD,EAAE,GAAG,SAALA,EAAEA;IACN,OAAOP,KAAK,CAAC3B,IAAI,CAAAT,KAAA,CAAVoC,KAAK,EAAAtB,SAAA,CAAc;GAC3B;EAED,OAAOsB,KAAK,CAACrD,SAAS;AACxB;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"emitter.cjs.development.js","sources":["../src/Event.ts","../src/Emitter.ts","../src/fromNodeEvent.ts","../src/fromDomEvent.ts","../src/operators/once.ts"],"sourcesContent":["import { toDisposable } from '@x-oasis/disposable';\nimport { EventListener, EventProps } from './types';\n\nexport default class Event {\n readonly name: string;\n\n private _listeners: EventListener[] = [];\n\n private _onWillAddFirstListener?: Function;\n\n private _onDidAddFirstListener?: Function;\n\n private _onDidAddListener?: Function;\n\n private _onWillRemoveListener?: Function;\n\n private _onDidRemoveLastListener?: Function;\n\n private _coldTrigger?: boolean;\n\n private _cacheCurrentValue?: any[] | undefined;\n\n constructor(props: EventProps & { name: string }) {\n const {\n name,\n onWillAddFirstListener,\n onDidAddFirstListener,\n onDidAddListener,\n onWillRemoveListener,\n onDidRemoveLastListener,\n coldTrigger,\n } = props;\n\n this.name = name;\n\n this._coldTrigger = coldTrigger;\n this._onWillAddFirstListener = onWillAddFirstListener;\n this._onDidAddFirstListener = onDidAddFirstListener;\n this._onDidAddListener = onDidAddListener;\n this._onWillRemoveListener = onWillRemoveListener;\n this._onDidRemoveLastListener = onDidRemoveLastListener;\n this.subscribe = this.subscribe.bind(this);\n }\n\n subscribe(listener: EventListener) {\n if (!this._listeners.length) {\n this._onWillAddFirstListener?.();\n }\n\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n console.error('add a duplicate listener');\n } else {\n this._listeners.push(listener);\n if (this._listeners.length === 1) this._onDidAddFirstListener?.();\n this._onDidAddListener?.();\n if (this._coldTrigger && this._cacheCurrentValue)\n listener(...this._cacheCurrentValue);\n }\n\n return toDisposable(() => {\n this.removeListener(listener);\n });\n }\n\n removeListener(listener: EventListener) {\n const index = this._listeners.indexOf(listener);\n if (index === -1) return;\n this._onWillRemoveListener?.();\n\n this._listeners.splice(index, 1);\n if (!this._listeners.length) {\n this._onDidRemoveLastListener?.();\n }\n }\n\n dispose() {\n this._listeners = [];\n this._onDidRemoveLastListener?.();\n }\n\n fire(...args: any[]) {\n if (this._coldTrigger) {\n this._cacheCurrentValue = args;\n }\n for (const listener of this._listeners) {\n listener(...args);\n }\n }\n}\n","import Event from './Event';\nimport { EventProps } from './types';\n\nexport default class Emitter {\n private _events = new Map<string, Event>();\n\n private _disposed = false;\n\n private _name: string;\n\n constructor(props: { name: string }) {\n const { name } = props || {};\n this._name = name;\n }\n\n get name() {\n return this._name;\n }\n\n /**\n * 没有就注册,有就返回\n */\n register(eventName: string, eventProps?: EventProps) {\n if (this._events.has(eventName)) {\n return this._events.get(eventName) as Event;\n }\n\n this._events.set(\n eventName,\n new Event({\n ...(eventProps || {}),\n name: eventName,\n })\n );\n\n return this._events.get(eventName) as Event;\n }\n\n getEvent(eventName: string) {\n return this._events.get(eventName);\n }\n\n dispose() {\n if (this._disposed) return;\n for (const [_, event] of this._events) {\n event.dispose();\n }\n\n this._disposed = true;\n }\n}\n\nexport type IEvent = Event;\n","import Event from './Event';\n\nexport interface NodeEventEmitter {\n on(event: string | symbol, listener: Function): unknown;\n removeListener(event: string | symbol, listener: Function): unknown;\n}\n\n/**\n * Creates an {@link Event} from a node event emitter.\n */\nexport function fromNodeEvent(emitter: NodeEventEmitter, eventName: string) {\n // @ts-ignore\n const onFirstListenerAdd = () => emitter.on(eventName, fn);\n const onLastListenerRemove = () => emitter.removeListener(eventName, fn);\n const event = new Event({\n name: eventName,\n onWillAddFirstListener: onFirstListenerAdd,\n onDidRemoveLastListener: onLastListenerRemove,\n });\n\n const fn = (...args: any[]) => {\n return event.fire(...args);\n };\n\n return event.subscribe;\n}\n","import Event from './Event';\n\nexport interface DomEventEmitter {\n addEventListener(event: string | symbol, listener: Function): unknown;\n removeEventListener(event: string | symbol, listener: Function): unknown;\n}\n\n/**\n * Creates an {@link Event} from a window event emitter.\n */\nexport function fromDomEvent(emitter: DomEventEmitter, eventName: string) {\n // @ts-ignore\n const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn);\n const onLastListenerRemove = () => emitter.removeEventListener(eventName, fn);\n const event = new Event({\n name: eventName,\n onWillAddFirstListener: onFirstListenerAdd,\n onDidRemoveLastListener: onLastListenerRemove,\n });\n\n const fn = (...args: any[]) => {\n return event.fire(...args);\n };\n\n return event.subscribe;\n}\n","export const once =\n (event: Function) => (listener: Function, args?: any, disposable?: any) => {\n let didFired = false;\n const result = event(\n (e: any) => {\n if (didFired) return;\n if (result) {\n result.dispose();\n } else {\n didFired = true;\n }\n return listener.call(args, e);\n },\n null,\n disposable\n );\n\n if (didFired) {\n result.dispose();\n }\n return result;\n };\n"],"names":["Event","props","name","onWillAddFirstListener","onDidAddFirstListener","onDidAddListener","onWillRemoveListener","onDidRemoveLastListener","coldTrigger","_coldTrigger","_onWillAddFirstListener","_onDidAddFirstListener","_onDidAddListener","_onWillRemoveListener","_onDidRemoveLastListener","subscribe","bind","_proto","prototype","listener","_listeners","length","_this$_onWillAddFirst","call","index","indexOf","console","error","_this$_onDidAddFirstL","_this$_onDidAddListen","push","_cacheCurrentValue","apply","toDisposable","_this","removeListener","_this$_onWillRemoveLi","splice","_this$_onDidRemoveLas","dispose","_this$_onDidRemoveLas2","fire","args","Array","_len","_key","arguments","_iterator","_createForOfIteratorHelperLoose","_step","done","value","Emitter","Map","_ref","_name","register","eventName","eventProps","_events","has","get","set","_extends","getEvent","_disposed","_step$value","_","event","_createClass","key","fromNodeEvent","emitter","onFirstListenerAdd","on","fn","onLastListenerRemove","fromDomEvent","addEventListener","removeEventListener","once","disposable","didFired","result","e"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@x-oasis/disposable");function t(){return(t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@x-oasis/disposable");function t(){return(t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function r(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return n(e,void 0);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,void 0):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var i=0;return function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i=function(){function t(e){this._listeners=[];var t=e.onWillAddFirstListener,n=e.onDidAddFirstListener,r=e.onDidAddListener,i=e.onWillRemoveListener,s=e.onDidRemoveLastListener,o=e.coldTrigger;this.name=e.name,this._coldTrigger=o,this._onWillAddFirstListener=t,this._onDidAddFirstListener=n,this._onDidAddListener=r,this._onWillRemoveListener=i,this._onDidRemoveLastListener=s,this.subscribe=this.subscribe.bind(this)}var n=t.prototype;return n.subscribe=function(t){var n,r,i,s=this;return this._listeners.length||null==(n=this._onWillAddFirstListener)||n.call(this),-1!==this._listeners.indexOf(t)?console.error("add a duplicate listener"):(this._listeners.push(t),1===this._listeners.length&&(null==(r=this._onDidAddFirstListener)||r.call(this)),null==(i=this._onDidAddListener)||i.call(this),this._coldTrigger&&this._cacheCurrentValue&&t.apply(void 0,this._cacheCurrentValue)),e.toDisposable((function(){s.removeListener(t)}))},n.removeListener=function(e){var t,n,r=this._listeners.indexOf(e);-1!==r&&(null==(t=this._onWillRemoveListener)||t.call(this),this._listeners.splice(r,1),this._listeners.length||null==(n=this._onDidRemoveLastListener)||n.call(this))},n.dispose=function(){var e;this._listeners=[],null==(e=this._onDidRemoveLastListener)||e.call(this)},n.fire=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];this._coldTrigger&&(this._cacheCurrentValue=t);for(var i,s=r(this._listeners);!(i=s()).done;){var o=i.value;o.apply(void 0,t)}},t}();exports.Emitter=function(){function e(e){this._events=new Map,this._disposed=!1,this._name=(e||{}).name}var n,s,o=e.prototype;return o.register=function(e,n){return this._events.has(e)||this._events.set(e,new i(t({},n||{},{name:e}))),this._events.get(e)},o.getEvent=function(e){return this._events.get(e)},o.dispose=function(){if(!this._disposed){for(var e,t=r(this._events);!(e=t()).done;)e.value[1].dispose();this._disposed=!0}},n=e,(s=[{key:"name",get:function(){return this._name}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,"symbol"==typeof(i=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(r.key))?i:String(i),r)}var i}(n.prototype,s),Object.defineProperty(n,"prototype",{writable:!1}),e}(),exports.Event=i,exports.fromDomEvent=function(e,t){var n=new i({name:t,onWillAddFirstListener:function(){return e.addEventListener(t,r)},onDidRemoveLastListener:function(){return e.removeEventListener(t,r)}}),r=function(){return n.fire.apply(n,arguments)};return n.subscribe},exports.fromNodeEvent=function(e,t){var n=new i({name:t,onWillAddFirstListener:function(){return e.on(t,r)},onDidRemoveLastListener:function(){return e.removeListener(t,r)}}),r=function(){return n.fire.apply(n,arguments)};return n.subscribe},exports.once=function(e){return function(t,n,r){var i=!1,s=e((function(e){if(!i)return s?s.dispose():i=!0,t.call(n,e)}),null,r);return i&&s.dispose(),s}};
|
|
2
2
|
//# sourceMappingURL=emitter.cjs.production.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.cjs.production.min.js","sources":["../src/Event.ts","../src/Emitter.ts","../src/fromDomEvent.ts","../src/fromNodeEvent.ts"],"sourcesContent":["import { toDisposable } from '@x-oasis/disposable';\nimport { EventListener, EventProps } from './types';\n\nexport default class Event {\n readonly name: string;\n\n private _listeners: EventListener[] = [];\n\n private _onWillAddFirstListener?: Function;\n\n private _onDidAddFirstListener?: Function;\n\n private _onDidAddListener?: Function;\n\n private _onWillRemoveListener?: Function;\n\n private _onDidRemoveLastListener?: Function;\n\n private _coldTrigger?: boolean;\n\n private _cacheCurrentValue?: any[] | undefined;\n\n constructor(props: EventProps & { name: string }) {\n const {\n name,\n onWillAddFirstListener,\n onDidAddFirstListener,\n onDidAddListener,\n onWillRemoveListener,\n onDidRemoveLastListener,\n coldTrigger,\n } = props;\n\n this.name = name;\n\n this._coldTrigger = coldTrigger;\n this._onWillAddFirstListener = onWillAddFirstListener;\n this._onDidAddFirstListener = onDidAddFirstListener;\n this._onDidAddListener = onDidAddListener;\n this._onWillRemoveListener = onWillRemoveListener;\n this._onDidRemoveLastListener = onDidRemoveLastListener;\n this.subscribe = this.subscribe.bind(this);\n }\n\n subscribe(listener: EventListener) {\n if (!this._listeners.length) {\n this._onWillAddFirstListener?.();\n }\n\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n console.error('add a duplicate listener');\n } else {\n this._listeners.push(listener);\n if (this._listeners.length === 1) this._onDidAddFirstListener?.();\n this._onDidAddListener?.();\n if (this._coldTrigger && this._cacheCurrentValue)\n listener(...this._cacheCurrentValue);\n }\n\n return toDisposable(() => {\n this.removeListener(listener);\n });\n }\n\n removeListener(listener: EventListener) {\n const index = this._listeners.indexOf(listener);\n if (index === -1) return;\n this._onWillRemoveListener?.();\n\n this._listeners.splice(index, 1);\n if (!this._listeners.length) {\n this._onDidRemoveLastListener?.();\n }\n }\n\n dispose() {\n this._listeners = [];\n this._onDidRemoveLastListener?.();\n }\n\n fire(...args: any[]) {\n if (this._coldTrigger) {\n this._cacheCurrentValue = args;\n }\n for (const listener of this._listeners) {\n listener(...args);\n }\n }\n}\n","import Event from './Event';\nimport { EventProps } from './types';\n\nexport default class Emitter {\n private _events = new Map<string, Event>();\n\n private _disposed = false;\n\n private _name: string;\n\n constructor(props: { name: string }) {\n const { name } = props || {};\n this._name = name;\n }\n\n get name() {\n return this._name;\n }\n\n /**\n * 没有就注册,有就返回\n */\n register(eventName: string, eventProps?: EventProps) {\n if (this._events.has(eventName)) {\n return this._events.get(eventName) as Event;\n }\n\n this._events.set(\n eventName,\n new Event({\n ...(eventProps || {}),\n name: eventName,\n })\n );\n\n return this._events.get(eventName) as Event;\n }\n\n getEvent(eventName: string) {\n return this._events.get(eventName);\n }\n\n dispose() {\n if (this._disposed) return;\n for (const [_, event] of this._events) {\n event.dispose();\n }\n\n this._disposed = true;\n }\n}\n\nexport type IEvent = Event;\n","import Event from './Event';\n\nexport interface DomEventEmitter {\n addEventListener(event: string | symbol, listener: Function): unknown;\n removeEventListener(event: string | symbol, listener: Function): unknown;\n}\n\n/**\n * Creates an {@link Event} from a window event emitter.\n */\nexport function fromDomEvent(emitter: DomEventEmitter, eventName: string) {\n // @ts-ignore\n const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn);\n const onLastListenerRemove = () => emitter.removeEventListener(eventName, fn);\n const event = new Event({\n name: eventName,\n onWillAddFirstListener: onFirstListenerAdd,\n onDidRemoveLastListener: onLastListenerRemove,\n });\n\n const fn = (...args: any[]) => {\n return event.fire(...args);\n };\n\n return event.subscribe;\n}\n","import Event from './Event';\n\nexport interface NodeEventEmitter {\n on(event: string | symbol, listener: Function): unknown;\n removeListener(event: string | symbol, listener: Function): unknown;\n}\n\n/**\n * Creates an {@link Event} from a node event emitter.\n */\nexport function fromNodeEvent(emitter: NodeEventEmitter, eventName: string) {\n // @ts-ignore\n const onFirstListenerAdd = () => emitter.on(eventName, fn);\n const onLastListenerRemove = () => emitter.removeListener(eventName, fn);\n const event = new Event({\n name: eventName,\n onWillAddFirstListener: onFirstListenerAdd,\n onDidRemoveLastListener: onLastListenerRemove,\n });\n\n const fn = (...args: any[]) => {\n return event.fire(...args);\n };\n\n return event.subscribe;\n}\n"],"names":["Event","props","this","onWillAddFirstListener","onDidAddFirstListener","onDidAddListener","onWillRemoveListener","onDidRemoveLastListener","coldTrigger","name","_coldTrigger","_onWillAddFirstListener","_onDidAddFirstListener","_onDidAddListener","_onWillRemoveListener","_onDidRemoveLastListener","subscribe","bind","_proto","prototype","listener","_this$_onWillAddFirst","_this$_onDidAddFirstL","_this$_onDidAddListen","_listeners","length","call","indexOf","console","error","push","_cacheCurrentValue","apply","toDisposable","_this","removeListener","_this$_onDidRemoveLas","index","_this$_onWillRemoveLi","splice","dispose","_this$_onDidRemoveLas2","fire","args","Array","_len","_key","arguments","_step","_iterator","_createForOfIteratorHelperLoose","done","value","Emitter","Map","_name","register","eventName","eventProps","_events","has","set","_extends","get","getEvent","_disposed","key","emitter","event","addEventListener","fn","removeEventListener","on"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"emitter.cjs.production.min.js","sources":["../src/Event.ts","../src/Emitter.ts","../src/fromDomEvent.ts","../src/fromNodeEvent.ts","../src/operators/once.ts"],"sourcesContent":["import { toDisposable } from '@x-oasis/disposable';\nimport { EventListener, EventProps } from './types';\n\nexport default class Event {\n readonly name: string;\n\n private _listeners: EventListener[] = [];\n\n private _onWillAddFirstListener?: Function;\n\n private _onDidAddFirstListener?: Function;\n\n private _onDidAddListener?: Function;\n\n private _onWillRemoveListener?: Function;\n\n private _onDidRemoveLastListener?: Function;\n\n private _coldTrigger?: boolean;\n\n private _cacheCurrentValue?: any[] | undefined;\n\n constructor(props: EventProps & { name: string }) {\n const {\n name,\n onWillAddFirstListener,\n onDidAddFirstListener,\n onDidAddListener,\n onWillRemoveListener,\n onDidRemoveLastListener,\n coldTrigger,\n } = props;\n\n this.name = name;\n\n this._coldTrigger = coldTrigger;\n this._onWillAddFirstListener = onWillAddFirstListener;\n this._onDidAddFirstListener = onDidAddFirstListener;\n this._onDidAddListener = onDidAddListener;\n this._onWillRemoveListener = onWillRemoveListener;\n this._onDidRemoveLastListener = onDidRemoveLastListener;\n this.subscribe = this.subscribe.bind(this);\n }\n\n subscribe(listener: EventListener) {\n if (!this._listeners.length) {\n this._onWillAddFirstListener?.();\n }\n\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n console.error('add a duplicate listener');\n } else {\n this._listeners.push(listener);\n if (this._listeners.length === 1) this._onDidAddFirstListener?.();\n this._onDidAddListener?.();\n if (this._coldTrigger && this._cacheCurrentValue)\n listener(...this._cacheCurrentValue);\n }\n\n return toDisposable(() => {\n this.removeListener(listener);\n });\n }\n\n removeListener(listener: EventListener) {\n const index = this._listeners.indexOf(listener);\n if (index === -1) return;\n this._onWillRemoveListener?.();\n\n this._listeners.splice(index, 1);\n if (!this._listeners.length) {\n this._onDidRemoveLastListener?.();\n }\n }\n\n dispose() {\n this._listeners = [];\n this._onDidRemoveLastListener?.();\n }\n\n fire(...args: any[]) {\n if (this._coldTrigger) {\n this._cacheCurrentValue = args;\n }\n for (const listener of this._listeners) {\n listener(...args);\n }\n }\n}\n","import Event from './Event';\nimport { EventProps } from './types';\n\nexport default class Emitter {\n private _events = new Map<string, Event>();\n\n private _disposed = false;\n\n private _name: string;\n\n constructor(props: { name: string }) {\n const { name } = props || {};\n this._name = name;\n }\n\n get name() {\n return this._name;\n }\n\n /**\n * 没有就注册,有就返回\n */\n register(eventName: string, eventProps?: EventProps) {\n if (this._events.has(eventName)) {\n return this._events.get(eventName) as Event;\n }\n\n this._events.set(\n eventName,\n new Event({\n ...(eventProps || {}),\n name: eventName,\n })\n );\n\n return this._events.get(eventName) as Event;\n }\n\n getEvent(eventName: string) {\n return this._events.get(eventName);\n }\n\n dispose() {\n if (this._disposed) return;\n for (const [_, event] of this._events) {\n event.dispose();\n }\n\n this._disposed = true;\n }\n}\n\nexport type IEvent = Event;\n","import Event from './Event';\n\nexport interface DomEventEmitter {\n addEventListener(event: string | symbol, listener: Function): unknown;\n removeEventListener(event: string | symbol, listener: Function): unknown;\n}\n\n/**\n * Creates an {@link Event} from a window event emitter.\n */\nexport function fromDomEvent(emitter: DomEventEmitter, eventName: string) {\n // @ts-ignore\n const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn);\n const onLastListenerRemove = () => emitter.removeEventListener(eventName, fn);\n const event = new Event({\n name: eventName,\n onWillAddFirstListener: onFirstListenerAdd,\n onDidRemoveLastListener: onLastListenerRemove,\n });\n\n const fn = (...args: any[]) => {\n return event.fire(...args);\n };\n\n return event.subscribe;\n}\n","import Event from './Event';\n\nexport interface NodeEventEmitter {\n on(event: string | symbol, listener: Function): unknown;\n removeListener(event: string | symbol, listener: Function): unknown;\n}\n\n/**\n * Creates an {@link Event} from a node event emitter.\n */\nexport function fromNodeEvent(emitter: NodeEventEmitter, eventName: string) {\n // @ts-ignore\n const onFirstListenerAdd = () => emitter.on(eventName, fn);\n const onLastListenerRemove = () => emitter.removeListener(eventName, fn);\n const event = new Event({\n name: eventName,\n onWillAddFirstListener: onFirstListenerAdd,\n onDidRemoveLastListener: onLastListenerRemove,\n });\n\n const fn = (...args: any[]) => {\n return event.fire(...args);\n };\n\n return event.subscribe;\n}\n","export const once =\n (event: Function) => (listener: Function, args?: any, disposable?: any) => {\n let didFired = false;\n const result = event(\n (e: any) => {\n if (didFired) return;\n if (result) {\n result.dispose();\n } else {\n didFired = true;\n }\n return listener.call(args, e);\n },\n null,\n disposable\n );\n\n if (didFired) {\n result.dispose();\n }\n return result;\n };\n"],"names":["Event","props","this","onWillAddFirstListener","onDidAddFirstListener","onDidAddListener","onWillRemoveListener","onDidRemoveLastListener","coldTrigger","name","_coldTrigger","_onWillAddFirstListener","_onDidAddFirstListener","_onDidAddListener","_onWillRemoveListener","_onDidRemoveLastListener","subscribe","bind","_proto","prototype","listener","_this$_onWillAddFirst","_this$_onDidAddFirstL","_this$_onDidAddListen","_listeners","length","call","indexOf","console","error","push","_cacheCurrentValue","apply","toDisposable","_this","removeListener","_this$_onDidRemoveLas","index","_this$_onWillRemoveLi","splice","dispose","_this$_onDidRemoveLas2","fire","args","Array","_len","_key","arguments","_step","_iterator","_createForOfIteratorHelperLoose","done","value","Emitter","Map","_name","register","eventName","eventProps","_events","has","set","_extends","get","getEvent","_disposed","key","emitter","event","addEventListener","fn","removeEventListener","on","disposable","didFired","result","e"],"mappings":"gpCAGqBA,aAmBnB,SAAAA,EAAYC,GAhBJC,gBAA8B,GAiBpC,IAEEC,EAMEF,EANFE,uBACAC,EAKEH,EALFG,sBACAC,EAIEJ,EAJFI,iBACAC,EAGEL,EAHFK,qBACAC,EAEEN,EAFFM,wBACAC,EACEP,EADFO,YAGFN,KAAKO,KAFDR,EAPFQ,KAWFP,KAAKQ,aAAeF,EACpBN,KAAKS,wBAA0BR,EAC/BD,KAAKU,uBAAyBR,EAC9BF,KAAKW,kBAAoBR,EACzBH,KAAKY,sBAAwBR,EAC7BJ,KAAKa,yBAA2BR,EAChCL,KAAKc,UAAYd,KAAKc,UAAUC,KAAKf,MACtC,IAAAgB,EAAAlB,EAAAmB,UA8CA,OA9CAD,EAEDF,UAAA,SAAUI,OACqBC,EAOtBC,EAAAC,SAQP,OAfKrB,KAAKsB,WAAWC,eACnBJ,OAAKV,0BAALU,EAAAK,YAIa,IADDxB,KAAKsB,WAAWG,QAAQP,GAEpCQ,QAAQC,MAAM,6BAEd3B,KAAKsB,WAAWM,KAAKV,GACU,IAA3BlB,KAAKsB,WAAWC,gBAAcH,OAAKV,yBAALU,EAAAI,mBAClCH,OAAKV,oBAALU,EAAAG,WACIxB,KAAKQ,cAAgBR,KAAK6B,oBAC5BX,EAAQY,aAAI9B,KAAK6B,qBAGdE,gBAAa,WAClBC,EAAKC,eAAef,OAEvBF,EAEDiB,eAAA,SAAef,SAMgBgB,EALvBC,EAAQnC,KAAKsB,WAAWG,QAAQP,IACvB,IAAXiB,WACJC,OAAKxB,wBAALwB,EAAAZ,WAEAxB,KAAKsB,WAAWe,OAAOF,EAAO,GACzBnC,KAAKsB,WAAWC,eACnBW,OAAKrB,2BAALqB,EAAAV,aAEHR,EAEDsB,QAAA,iBACEtC,KAAKsB,WAAa,UAClBiB,OAAK1B,2BAAL0B,EAAAf,YACDR,EAEDwB,KAAA,sCAAQC,MAAWC,MAAAC,GAAAC,IAAAA,EAAAD,EAAAC,IAAXH,EAAWG,GAAAC,UAAAD,GACb5C,KAAKQ,eACPR,KAAK6B,mBAAqBY,GAE5B,QAAsCK,EAAtCC,EAAAC,EAAuBhD,KAAKsB,cAAUwB,EAAAC,KAAAE,MAAE,CAAA,IAA7B/B,EAAQ4B,EAAAI,MACjBhC,EAAQY,aAAIW,KAEf3C,gCC9ED,SAAAqD,EAAYpD,GANJC,aAAU,IAAIoD,IAEdpD,gBAAY,EAMlBA,KAAKqD,OADYtD,GAAS,IAAlBQ,KAET,QAAAS,EAAAmC,EAAAlC,UAIA,OAJAD,EASDsC,SAAA,SAASC,EAAmBC,GAC1B,OAAIxD,KAAKyD,QAAQC,IAAIH,IAIrBvD,KAAKyD,QAAQE,IACXJ,EACA,IAAIzD,EAAK8D,KACHJ,GAAc,IAClBjD,KAAMgD,MAPDvD,KAAKyD,QAAQI,IAAIN,IAY3BvC,EAED8C,SAAA,SAASP,GACP,OAAOvD,KAAKyD,QAAQI,IAAIN,IACzBvC,EAEDsB,QAAA,WACE,IAAItC,KAAK+D,UAAT,CACA,QAAqCjB,EAArCC,EAAAC,EAAyBhD,KAAKyD,WAAOX,EAAAC,KAAAE,MAAEH,EAAAI,SAC/BZ,UAGRtC,KAAK+D,WAAY,MAClBZ,OAAAa,WAAAH,IAlCD,WACE,OAAO7D,KAAKqD,wgBACbF,mDCP0Bc,EAA0BV,GAErD,IAEMW,EAAQ,IAAIpE,EAAM,CACtBS,KAAMgD,EACNtD,uBAJyB,WAAH,OAASgE,EAAQE,iBAAiBZ,EAAWa,IAKnE/D,wBAJ2B,WAAH,OAAS4D,EAAQI,oBAAoBd,EAAWa,MAOpEA,EAAK,WACT,OAAOF,EAAM1B,KAAIV,MAAVoC,EAAKrB,YAGd,OAAOqB,EAAMpD,0CCdemD,EAA2BV,GAEvD,IAEMW,EAAQ,IAAIpE,EAAM,CACtBS,KAAMgD,EACNtD,uBAJyB,WAAH,OAASgE,EAAQK,GAAGf,EAAWa,IAKrD/D,wBAJ2B,WAAH,OAAS4D,EAAQhC,eAAesB,EAAWa,MAO/DA,EAAK,WACT,OAAOF,EAAM1B,KAAIV,MAAVoC,EAAKrB,YAGd,OAAOqB,EAAMpD,wBCvBb,SAACoD,GAAe,OAAK,SAAChD,EAAoBuB,EAAY8B,GACpD,IAAIC,GAAW,EACTC,EAASP,GACb,SAACQ,GACC,IAAIF,EAMJ,OALIC,EACFA,EAAOnC,UAEPkC,GAAW,EAENtD,EAASM,KAAKiB,EAAMiC,KAE7B,KACAH,GAMF,OAHIC,GACFC,EAAOnC,UAEFmC"}
|
package/dist/emitter.esm.js
CHANGED
|
@@ -223,5 +223,24 @@ function fromDomEvent(emitter, eventName) {
|
|
|
223
223
|
return event.subscribe;
|
|
224
224
|
}
|
|
225
225
|
|
|
226
|
-
|
|
226
|
+
var once = function once(event) {
|
|
227
|
+
return function (listener, args, disposable) {
|
|
228
|
+
var didFired = false;
|
|
229
|
+
var result = event(function (e) {
|
|
230
|
+
if (didFired) return;
|
|
231
|
+
if (result) {
|
|
232
|
+
result.dispose();
|
|
233
|
+
} else {
|
|
234
|
+
didFired = true;
|
|
235
|
+
}
|
|
236
|
+
return listener.call(args, e);
|
|
237
|
+
}, null, disposable);
|
|
238
|
+
if (didFired) {
|
|
239
|
+
result.dispose();
|
|
240
|
+
}
|
|
241
|
+
return result;
|
|
242
|
+
};
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
export { Emitter, Event, fromDomEvent, fromNodeEvent, once };
|
|
227
246
|
//# sourceMappingURL=emitter.esm.js.map
|
package/dist/emitter.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.esm.js","sources":["../src/Event.ts","../src/Emitter.ts","../src/fromNodeEvent.ts","../src/fromDomEvent.ts"],"sourcesContent":["import { toDisposable } from '@x-oasis/disposable';\nimport { EventListener, EventProps } from './types';\n\nexport default class Event {\n readonly name: string;\n\n private _listeners: EventListener[] = [];\n\n private _onWillAddFirstListener?: Function;\n\n private _onDidAddFirstListener?: Function;\n\n private _onDidAddListener?: Function;\n\n private _onWillRemoveListener?: Function;\n\n private _onDidRemoveLastListener?: Function;\n\n private _coldTrigger?: boolean;\n\n private _cacheCurrentValue?: any[] | undefined;\n\n constructor(props: EventProps & { name: string }) {\n const {\n name,\n onWillAddFirstListener,\n onDidAddFirstListener,\n onDidAddListener,\n onWillRemoveListener,\n onDidRemoveLastListener,\n coldTrigger,\n } = props;\n\n this.name = name;\n\n this._coldTrigger = coldTrigger;\n this._onWillAddFirstListener = onWillAddFirstListener;\n this._onDidAddFirstListener = onDidAddFirstListener;\n this._onDidAddListener = onDidAddListener;\n this._onWillRemoveListener = onWillRemoveListener;\n this._onDidRemoveLastListener = onDidRemoveLastListener;\n this.subscribe = this.subscribe.bind(this);\n }\n\n subscribe(listener: EventListener) {\n if (!this._listeners.length) {\n this._onWillAddFirstListener?.();\n }\n\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n console.error('add a duplicate listener');\n } else {\n this._listeners.push(listener);\n if (this._listeners.length === 1) this._onDidAddFirstListener?.();\n this._onDidAddListener?.();\n if (this._coldTrigger && this._cacheCurrentValue)\n listener(...this._cacheCurrentValue);\n }\n\n return toDisposable(() => {\n this.removeListener(listener);\n });\n }\n\n removeListener(listener: EventListener) {\n const index = this._listeners.indexOf(listener);\n if (index === -1) return;\n this._onWillRemoveListener?.();\n\n this._listeners.splice(index, 1);\n if (!this._listeners.length) {\n this._onDidRemoveLastListener?.();\n }\n }\n\n dispose() {\n this._listeners = [];\n this._onDidRemoveLastListener?.();\n }\n\n fire(...args: any[]) {\n if (this._coldTrigger) {\n this._cacheCurrentValue = args;\n }\n for (const listener of this._listeners) {\n listener(...args);\n }\n }\n}\n","import Event from './Event';\nimport { EventProps } from './types';\n\nexport default class Emitter {\n private _events = new Map<string, Event>();\n\n private _disposed = false;\n\n private _name: string;\n\n constructor(props: { name: string }) {\n const { name } = props || {};\n this._name = name;\n }\n\n get name() {\n return this._name;\n }\n\n /**\n * 没有就注册,有就返回\n */\n register(eventName: string, eventProps?: EventProps) {\n if (this._events.has(eventName)) {\n return this._events.get(eventName) as Event;\n }\n\n this._events.set(\n eventName,\n new Event({\n ...(eventProps || {}),\n name: eventName,\n })\n );\n\n return this._events.get(eventName) as Event;\n }\n\n getEvent(eventName: string) {\n return this._events.get(eventName);\n }\n\n dispose() {\n if (this._disposed) return;\n for (const [_, event] of this._events) {\n event.dispose();\n }\n\n this._disposed = true;\n }\n}\n\nexport type IEvent = Event;\n","import Event from './Event';\n\nexport interface NodeEventEmitter {\n on(event: string | symbol, listener: Function): unknown;\n removeListener(event: string | symbol, listener: Function): unknown;\n}\n\n/**\n * Creates an {@link Event} from a node event emitter.\n */\nexport function fromNodeEvent(emitter: NodeEventEmitter, eventName: string) {\n // @ts-ignore\n const onFirstListenerAdd = () => emitter.on(eventName, fn);\n const onLastListenerRemove = () => emitter.removeListener(eventName, fn);\n const event = new Event({\n name: eventName,\n onWillAddFirstListener: onFirstListenerAdd,\n onDidRemoveLastListener: onLastListenerRemove,\n });\n\n const fn = (...args: any[]) => {\n return event.fire(...args);\n };\n\n return event.subscribe;\n}\n","import Event from './Event';\n\nexport interface DomEventEmitter {\n addEventListener(event: string | symbol, listener: Function): unknown;\n removeEventListener(event: string | symbol, listener: Function): unknown;\n}\n\n/**\n * Creates an {@link Event} from a window event emitter.\n */\nexport function fromDomEvent(emitter: DomEventEmitter, eventName: string) {\n // @ts-ignore\n const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn);\n const onLastListenerRemove = () => emitter.removeEventListener(eventName, fn);\n const event = new Event({\n name: eventName,\n onWillAddFirstListener: onFirstListenerAdd,\n onDidRemoveLastListener: onLastListenerRemove,\n });\n\n const fn = (...args: any[]) => {\n return event.fire(...args);\n };\n\n return event.subscribe;\n}\n"],"names":["Event","props","name","onWillAddFirstListener","onDidAddFirstListener","onDidAddListener","onWillRemoveListener","onDidRemoveLastListener","coldTrigger","_coldTrigger","_onWillAddFirstListener","_onDidAddFirstListener","_onDidAddListener","_onWillRemoveListener","_onDidRemoveLastListener","subscribe","bind","_proto","prototype","listener","_listeners","length","_this$_onWillAddFirst","call","index","indexOf","console","error","_this$_onDidAddFirstL","_this$_onDidAddListen","push","_cacheCurrentValue","apply","toDisposable","_this","removeListener","_this$_onWillRemoveLi","splice","_this$_onDidRemoveLas","dispose","_this$_onDidRemoveLas2","fire","args","Array","_len","_key","arguments","_iterator","_createForOfIteratorHelperLoose","_step","done","value","Emitter","Map","_ref","_name","register","eventName","eventProps","_events","has","get","set","_extends","getEvent","_disposed","_step$value","_","event","_createClass","key","fromNodeEvent","emitter","onFirstListenerAdd","on","fn","onLastListenerRemove","fromDomEvent","addEventListener","removeEventListener"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"emitter.esm.js","sources":["../src/Event.ts","../src/Emitter.ts","../src/fromNodeEvent.ts","../src/fromDomEvent.ts","../src/operators/once.ts"],"sourcesContent":["import { toDisposable } from '@x-oasis/disposable';\nimport { EventListener, EventProps } from './types';\n\nexport default class Event {\n readonly name: string;\n\n private _listeners: EventListener[] = [];\n\n private _onWillAddFirstListener?: Function;\n\n private _onDidAddFirstListener?: Function;\n\n private _onDidAddListener?: Function;\n\n private _onWillRemoveListener?: Function;\n\n private _onDidRemoveLastListener?: Function;\n\n private _coldTrigger?: boolean;\n\n private _cacheCurrentValue?: any[] | undefined;\n\n constructor(props: EventProps & { name: string }) {\n const {\n name,\n onWillAddFirstListener,\n onDidAddFirstListener,\n onDidAddListener,\n onWillRemoveListener,\n onDidRemoveLastListener,\n coldTrigger,\n } = props;\n\n this.name = name;\n\n this._coldTrigger = coldTrigger;\n this._onWillAddFirstListener = onWillAddFirstListener;\n this._onDidAddFirstListener = onDidAddFirstListener;\n this._onDidAddListener = onDidAddListener;\n this._onWillRemoveListener = onWillRemoveListener;\n this._onDidRemoveLastListener = onDidRemoveLastListener;\n this.subscribe = this.subscribe.bind(this);\n }\n\n subscribe(listener: EventListener) {\n if (!this._listeners.length) {\n this._onWillAddFirstListener?.();\n }\n\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n console.error('add a duplicate listener');\n } else {\n this._listeners.push(listener);\n if (this._listeners.length === 1) this._onDidAddFirstListener?.();\n this._onDidAddListener?.();\n if (this._coldTrigger && this._cacheCurrentValue)\n listener(...this._cacheCurrentValue);\n }\n\n return toDisposable(() => {\n this.removeListener(listener);\n });\n }\n\n removeListener(listener: EventListener) {\n const index = this._listeners.indexOf(listener);\n if (index === -1) return;\n this._onWillRemoveListener?.();\n\n this._listeners.splice(index, 1);\n if (!this._listeners.length) {\n this._onDidRemoveLastListener?.();\n }\n }\n\n dispose() {\n this._listeners = [];\n this._onDidRemoveLastListener?.();\n }\n\n fire(...args: any[]) {\n if (this._coldTrigger) {\n this._cacheCurrentValue = args;\n }\n for (const listener of this._listeners) {\n listener(...args);\n }\n }\n}\n","import Event from './Event';\nimport { EventProps } from './types';\n\nexport default class Emitter {\n private _events = new Map<string, Event>();\n\n private _disposed = false;\n\n private _name: string;\n\n constructor(props: { name: string }) {\n const { name } = props || {};\n this._name = name;\n }\n\n get name() {\n return this._name;\n }\n\n /**\n * 没有就注册,有就返回\n */\n register(eventName: string, eventProps?: EventProps) {\n if (this._events.has(eventName)) {\n return this._events.get(eventName) as Event;\n }\n\n this._events.set(\n eventName,\n new Event({\n ...(eventProps || {}),\n name: eventName,\n })\n );\n\n return this._events.get(eventName) as Event;\n }\n\n getEvent(eventName: string) {\n return this._events.get(eventName);\n }\n\n dispose() {\n if (this._disposed) return;\n for (const [_, event] of this._events) {\n event.dispose();\n }\n\n this._disposed = true;\n }\n}\n\nexport type IEvent = Event;\n","import Event from './Event';\n\nexport interface NodeEventEmitter {\n on(event: string | symbol, listener: Function): unknown;\n removeListener(event: string | symbol, listener: Function): unknown;\n}\n\n/**\n * Creates an {@link Event} from a node event emitter.\n */\nexport function fromNodeEvent(emitter: NodeEventEmitter, eventName: string) {\n // @ts-ignore\n const onFirstListenerAdd = () => emitter.on(eventName, fn);\n const onLastListenerRemove = () => emitter.removeListener(eventName, fn);\n const event = new Event({\n name: eventName,\n onWillAddFirstListener: onFirstListenerAdd,\n onDidRemoveLastListener: onLastListenerRemove,\n });\n\n const fn = (...args: any[]) => {\n return event.fire(...args);\n };\n\n return event.subscribe;\n}\n","import Event from './Event';\n\nexport interface DomEventEmitter {\n addEventListener(event: string | symbol, listener: Function): unknown;\n removeEventListener(event: string | symbol, listener: Function): unknown;\n}\n\n/**\n * Creates an {@link Event} from a window event emitter.\n */\nexport function fromDomEvent(emitter: DomEventEmitter, eventName: string) {\n // @ts-ignore\n const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn);\n const onLastListenerRemove = () => emitter.removeEventListener(eventName, fn);\n const event = new Event({\n name: eventName,\n onWillAddFirstListener: onFirstListenerAdd,\n onDidRemoveLastListener: onLastListenerRemove,\n });\n\n const fn = (...args: any[]) => {\n return event.fire(...args);\n };\n\n return event.subscribe;\n}\n","export const once =\n (event: Function) => (listener: Function, args?: any, disposable?: any) => {\n let didFired = false;\n const result = event(\n (e: any) => {\n if (didFired) return;\n if (result) {\n result.dispose();\n } else {\n didFired = true;\n }\n return listener.call(args, e);\n },\n null,\n disposable\n );\n\n if (didFired) {\n result.dispose();\n }\n return result;\n };\n"],"names":["Event","props","name","onWillAddFirstListener","onDidAddFirstListener","onDidAddListener","onWillRemoveListener","onDidRemoveLastListener","coldTrigger","_coldTrigger","_onWillAddFirstListener","_onDidAddFirstListener","_onDidAddListener","_onWillRemoveListener","_onDidRemoveLastListener","subscribe","bind","_proto","prototype","listener","_listeners","length","_this$_onWillAddFirst","call","index","indexOf","console","error","_this$_onDidAddFirstL","_this$_onDidAddListen","push","_cacheCurrentValue","apply","toDisposable","_this","removeListener","_this$_onWillRemoveLi","splice","_this$_onDidRemoveLas","dispose","_this$_onDidRemoveLas2","fire","args","Array","_len","_key","arguments","_iterator","_createForOfIteratorHelperLoose","_step","done","value","Emitter","Map","_ref","_name","register","eventName","eventProps","_events","has","get","set","_extends","getEvent","_disposed","_step$value","_","event","_createClass","key","fromNodeEvent","emitter","onFirstListenerAdd","on","fn","onLastListenerRemove","fromDomEvent","addEventListener","removeEventListener","once","disposable","didFired","result","e"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const once: (event: Function) => (listener: Function, args?: any, disposable?: any) => any;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x-oasis/emitter",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "emitter function",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"tsdx": "^0.14.1"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@x-oasis/is-object": "0.
|
|
23
|
-
"@x-oasis/disposable": "0.
|
|
22
|
+
"@x-oasis/is-object": "0.4.0",
|
|
23
|
+
"@x-oasis/disposable": "0.4.0"
|
|
24
24
|
},
|
|
25
25
|
"scripts": {
|
|
26
26
|
"build": "tsdx build --tsconfig tsconfig.build.json",
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const once =
|
|
2
|
+
(event: Function) => (listener: Function, args?: any, disposable?: any) => {
|
|
3
|
+
let didFired = false;
|
|
4
|
+
const result = event(
|
|
5
|
+
(e: any) => {
|
|
6
|
+
if (didFired) return;
|
|
7
|
+
if (result) {
|
|
8
|
+
result.dispose();
|
|
9
|
+
} else {
|
|
10
|
+
didFired = true;
|
|
11
|
+
}
|
|
12
|
+
return listener.call(args, e);
|
|
13
|
+
},
|
|
14
|
+
null,
|
|
15
|
+
disposable
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
if (didFired) {
|
|
19
|
+
result.dispose();
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
};
|