@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.
@@ -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":"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"}
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 r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function n(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return r(e,void 0);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,void 0):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);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,r=e.onDidAddFirstListener,n=e.onDidAddListener,i=e.onWillRemoveListener,s=e.onDidRemoveLastListener,o=e.coldTrigger;this.name=e.name,this._coldTrigger=o,this._onWillAddFirstListener=t,this._onDidAddFirstListener=r,this._onDidAddListener=n,this._onWillRemoveListener=i,this._onDidRemoveLastListener=s,this.subscribe=this.subscribe.bind(this)}var r=t.prototype;return r.subscribe=function(t){var r,n,i,s=this;return this._listeners.length||null==(r=this._onWillAddFirstListener)||r.call(this),-1!==this._listeners.indexOf(t)?console.error("add a duplicate listener"):(this._listeners.push(t),1===this._listeners.length&&(null==(n=this._onDidAddFirstListener)||n.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)}))},r.removeListener=function(e){var t,r,n=this._listeners.indexOf(e);-1!==n&&(null==(t=this._onWillRemoveListener)||t.call(this),this._listeners.splice(n,1),this._listeners.length||null==(r=this._onDidRemoveLastListener)||r.call(this))},r.dispose=function(){var e;this._listeners=[],null==(e=this._onDidRemoveLastListener)||e.call(this)},r.fire=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];this._coldTrigger&&(this._cacheCurrentValue=t);for(var i,s=n(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 r,s,o=e.prototype;return o.register=function(e,r){return this._events.has(e)||this._events.set(e,new i(t({},r||{},{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=n(this._events);!(e=t()).done;)e.value[1].dispose();this._disposed=!0}},r=e,(s=[{key:"name",get:function(){return this._name}}])&&function(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,"symbol"==typeof(i=function(e,t){if("object"!=typeof e||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(n.key))?i:String(i),n)}var i}(r.prototype,s),Object.defineProperty(r,"prototype",{writable:!1}),e}(),exports.Event=i,exports.fromDomEvent=function(e,t){var r=new i({name:t,onWillAddFirstListener:function(){return e.addEventListener(t,n)},onDidRemoveLastListener:function(){return e.removeEventListener(t,n)}}),n=function(){return r.fire.apply(r,arguments)};return r.subscribe},exports.fromNodeEvent=function(e,t){var r=new i({name:t,onWillAddFirstListener:function(){return e.on(t,n)},onDidRemoveLastListener:function(){return e.removeListener(t,n)}}),n=function(){return r.fire.apply(r,arguments)};return r.subscribe};
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":"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"}
@@ -223,5 +223,24 @@ function fromDomEvent(emitter, eventName) {
223
223
  return event.subscribe;
224
224
  }
225
225
 
226
- export { Emitter, Event, fromDomEvent, fromNodeEvent };
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
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,YAAY,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.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
@@ -2,3 +2,4 @@ export { default as Emitter } from './Emitter';
2
2
  export { fromNodeEvent } from './fromNodeEvent';
3
3
  export { fromDomEvent } from './fromDomEvent';
4
4
  export { default as Event } from './Event';
5
+ export { once } from './operators/once';
@@ -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.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.3.0",
23
- "@x-oasis/disposable": "0.3.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
@@ -2,3 +2,4 @@ export { default as Emitter } from './Emitter';
2
2
  export { fromNodeEvent } from './fromNodeEvent';
3
3
  export { fromDomEvent } from './fromDomEvent';
4
4
  export { default as Event } from './Event';
5
+ export { once } from './operators/once';
@@ -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
+ };