From b5d07dca72536e46b6bc582f11c875ca117a4cff Mon Sep 17 00:00:00 2001 From: Gerkin Date: Tue, 17 Oct 2017 17:34:55 +0200 Subject: [PATCH] Events hash created when building object --- dist/sequential-event.js | 11 ++++++----- dist/sequential-event.js.map | 2 +- dist/sequential-event.min.js | 4 ++-- docs/SequentialEvent.html | 2 +- docs/classes.list.html | 2 +- docs/index.html | 2 +- docs/quicksearch.html | 2 +- lib/sequential-event.js | 8 ++++---- 8 files changed, 17 insertions(+), 16 deletions(-) diff --git a/dist/sequential-event.js b/dist/sequential-event.js index 2cebb34..c30a461 100644 --- a/dist/sequential-event.js +++ b/dist/sequential-event.js @@ -2,7 +2,7 @@ * @file sequential-event * * This library is a variation of standard event emitters. Handlers are executed sequentialy, and may return Promises if it executes asynchronous code -* Built on 2017-10-17 17:14:10 +* Built on 2017-10-17 17:35:22 * * @license GPL-3.0 * @version 0.2.0-rc.1 @@ -144,6 +144,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons */ function SequentialEvent() { _classCallCheck(this, SequentialEvent); + + this.__events = {}; } /** @@ -158,7 +160,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons _createClass(SequentialEvent, [{ key: "on", value: function on(events, callback) { - var _events = this.__events = this.__events || {}; + var _events = this.__events; if ('object' === (typeof events === "undefined" ? "undefined" : _typeof(events))) { for (var event in events) { @@ -188,7 +190,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons }, { key: "off", value: function off(events, callback) { - var _events = this.__events = this.__events || {}; + var _events = this.__events; if ('object' === (typeof events === "undefined" ? "undefined" : _typeof(events))) { for (var event in events) { @@ -232,7 +234,7 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons value: function once(events, callback) { var _this = this; - var _events = this.__events = this.__events || {}; + var _events = this.__events; if ('object' === (typeof events === "undefined" ? "undefined" : _typeof(events))) { for (var event in events) { @@ -269,7 +271,6 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons } var handler = events[type]; - if (!handler) { return Promise.resolve(); } diff --git a/dist/sequential-event.js.map b/dist/sequential-event.js.map index 1f05c3c..a677f46 100644 --- a/dist/sequential-event.js.map +++ b/dist/sequential-event.js.map @@ -1 +1 @@ -{"version":3,"sources":["sequential-event.js"],"names":["f","exports","module","define","amd","g","window","global","self","SequentialEvent","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","emitHandlers","handlers","object","args","emitHandler","handlersLength","sourcePromise","Promise","resolve","reject","getNextPromise","prevResolve","stepArgs","concat","slice","newPromise","then","catch","handler","retVal","apply","onceify","target","eventName","eventFn","fn","off","events","callback","_events","__events","event","hasOwnProperty","push","split","forEach","index","indexOf","splice","type","retPromise"],"mappings":"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","file":"sequential-event.js","sourcesContent":["(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.SequentialEvent = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o {\n\t// Check if the provided handler is a single function or an array of functions\n\tif ( 'function' === typeof handlers ) {\n\t\treturn emitHandler( handlers, object, args );\n\t} else {\n\t\tlet i = 0;\n\t\tconst handlersLength = handlers.length;\n\n\t\tconst sourcePromise = new Promise(( resolve, reject ) => {\n\t\t\t/**\n\t\t\t * Generate next promise for sequence.\n\t\t\t *\n\t\t\t * @param {Any} prevResolve - Event chain resolved value.\n\t\t\t * @returns {undefined} *This function does not return anything*.\n\t\t\t * @memberof SequentialEvent\n\t\t\t * @author Gerkin\n\t\t\t * @inner\n\t\t\t */\n\t\t\tfunction getNextPromise( prevResolve ) {\n\t\t\t\tif ( i < handlersLength ) {\n\t\t\t\t\tconst stepArgs = 'undefined' !== typeof prevResolve ? args.concat([ prevResolve ]) : args.slice( 0 );\n\t\t\t\t\tconst newPromise = emitHandler( handlers[i], object, stepArgs );\n\t\t\t\t\tnewPromise.then( getNextPromise ).catch( reject );\n\t\t\t\t\ti++;\n\t\t\t\t} else {\n\t\t\t\t\treturn resolve.call( null, prevResolve );\n\t\t\t\t}\n\t\t\t}\n\t\t\tgetNextPromise();\n\t\t});\n\t\treturn sourcePromise;\n\t}\n};\n\n/**\n * Handle execution of a single handler.\n *\n * @param {Function} handler - Function to execute. It may return a Promise.\n * @param {EventEmitter} object - Object to call event on.\n * @param {Any[]} [args] - Arguments to pass to each called function.\n * @returns {Promise} Promise resolved once this function is done.\n * @memberof SequentialEvent\n * @author Gerkin\n * @private\n */\nconst emitHandler = ( handler, object, args ) => {\n\ttry {\n\t\tconst retVal = handler.apply( object, args );\n\t\tif ( 'object' === typeof retVal && 'function' === typeof retVal.then ) {\n\t\t\treturn retVal;\n\t\t} else {\n\t\t\treturn Promise.resolve( retVal );\n\t\t}\n\t} catch ( e ) {\n\t\treturn Promise.reject( e );\n\t}\n};\n\nconst onceify = ( target, eventName, eventFn ) => {\n\tconst fn = ( ...args ) => {\n\t\ttarget.off( eventName, fn );\n\t\treturn eventFn( ...args );\n\t};\n\treturn fn;\n};\n\n/**\n * Event emitter that guarantees sequential execution of handlers. Each handler may return a **Promise**.\n *\n * @see {@link https://nodejs.org/api/events.html Node EventEmitter}.\n */\nclass SequentialEvent {\n\t/**\n\t * Constructs a new SequentialEvent.\n\t *\n\t * @author Gerkin\n\t */\n\tconstructor() {\n\t}\n\n\t/**\n\t * Add one or many event handlers.\n\t *\n\t * @param {string|Object} events - Event name or hash of events.\n\t * @param {Function} [callback] - If provided an event name with `events`, function to associate with the event.\n\t * @returns {SequentialEvent} `this`.\n\t */\n\ton( events, callback ) {\n\t\tconst _events = ( this.__events = this.__events || {});\n\n\t\tif ( 'object' === typeof events ) {\n\t\t\tfor ( const event in events ) {\n\t\t\t\tif ( events.hasOwnProperty( event )) {\n\t\t\t\t\t_events[event] = _events[event] || [];\n\t\t\t\t\t_events[event].push( events[event]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tevents.split( ' ' ).forEach( event => {\n\t\t\t\t_events[event] = _events[event] || [];\n\t\t\t\t_events[event].push( callback );\n\t\t\t}, this );\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Remove one or many or all event handlers.\n\t *\n\t * @param {string|Object} [events] - Event name or hash of events.\n\t * @param {Function} [callback] - If provided an event name with `events`, function to associate with the event.\n\t * @returns {SequentialEvent} `this`.\n\t */\n\toff( events, callback ) {\n\t\tconst _events = this.__events = this.__events || {};\n\n\t\tif ( 'object' === typeof events ) {\n\t\t\tfor ( const event in events ) {\n\t\t\t\tif ( events.hasOwnProperty( event ) && ( event in _events )) {\n\t\t\t\t\tvar index = _events[event].indexOf( events[event]);\n\t\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\t\t_events[event].splice( index, 1 );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( events ) {\n\t\t\tevents.split( ' ' ).forEach( event => {\n\t\t\t\tif ( event in _events ) {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tvar index = _events[event].indexOf( callback );\n\t\t\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\t\t\t_events[event].splice( index, 1 );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_events[event].length = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this );\n\t\t} else {\n\t\t\tthis.__events = {};\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Add one or many event handlers that will be called only once.\n\t *\n\t * @param {string|Object} events - Event name or hash of events.\n\t * @param {Function} [callback] - If provided an event name with `events`, function to associate with the event.\n\t * @returns {SequentialEvent} `this`.\n\t */\n\tonce( events, callback ) {\n\t\tconst _events = this.__events = this.__events || {};\n\n\t\tif ( 'object' === typeof events ) {\n\t\t\tfor ( const event in events ) {\n\t\t\t\tif ( events.hasOwnProperty( event )) {\n\t\t\t\t\t_events[event] = _events[event] || [];\n\t\t\t\t\t_events[event].push( onceify( this, event, events[event]));\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tevents.split( ' ' ).forEach( event => {\n\t\t\t\t_events[event] = _events[event] || [];\n\t\t\t\t_events[event].push( onceify( this, event, callback ));\n\t\t\t}, this );\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Triggers each corresponding handlers in sequence.\n\t *\n\t * @param {Any} type - Name of the event to sequential-event.\n\t * @param {Any[]} [args] - Parameters to pass to handlers.\n\t * @returns {Promise} Returns a Promise resolved when then chain is done.\n\t * @author Gerkin\n\t */\n\temit( type, ...args ) {\n\t\tconst events = this.__events;\n\t\tif ( !events ) {\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tconst handler = events[type];\n\n\t\tif ( !handler ) {\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tconst retPromise = emitHandlers( handler, this, args );\n\n\t\treturn retPromise;\n\t}\n}\n\nmodule.exports = SequentialEvent;\n\n},{}]},{},[1])(1)\n});"]} \ No newline at end of file +{"version":3,"sources":["sequential-event.js"],"names":["f","exports","module","define","amd","g","window","global","self","SequentialEvent","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","emitHandlers","handlers","object","args","emitHandler","handlersLength","sourcePromise","Promise","resolve","reject","getNextPromise","prevResolve","stepArgs","concat","slice","newPromise","then","catch","handler","retVal","apply","onceify","target","eventName","eventFn","fn","off","__events","events","callback","_events","event","hasOwnProperty","push","split","forEach","index","indexOf","splice","type","retPromise"],"mappings":"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","file":"sequential-event.js","sourcesContent":["(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.SequentialEvent = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o {\n\t// Check if the provided handler is a single function or an array of functions\n\tif ( 'function' === typeof handlers ) {\n\t\treturn emitHandler( handlers, object, args );\n\t} else {\n\t\tlet i = 0;\n\t\tconst handlersLength = handlers.length;\n\n\t\tconst sourcePromise = new Promise(( resolve, reject ) => {\n\t\t\t/**\n\t\t\t * Generate next promise for sequence.\n\t\t\t *\n\t\t\t * @param {Any} prevResolve - Event chain resolved value.\n\t\t\t * @returns {undefined} *This function does not return anything*.\n\t\t\t * @memberof SequentialEvent\n\t\t\t * @author Gerkin\n\t\t\t * @inner\n\t\t\t */\n\t\t\tfunction getNextPromise( prevResolve ) {\n\t\t\t\tif ( i < handlersLength ) {\n\t\t\t\t\tconst stepArgs = 'undefined' !== typeof prevResolve ? args.concat([ prevResolve ]) : args.slice( 0 );\n\t\t\t\t\tconst newPromise = emitHandler( handlers[i], object, stepArgs );\n\t\t\t\t\tnewPromise.then( getNextPromise ).catch( reject );\n\t\t\t\t\ti++;\n\t\t\t\t} else {\n\t\t\t\t\treturn resolve.call( null, prevResolve );\n\t\t\t\t}\n\t\t\t}\n\t\t\tgetNextPromise();\n\t\t});\n\t\treturn sourcePromise;\n\t}\n};\n\n/**\n * Handle execution of a single handler.\n *\n * @param {Function} handler - Function to execute. It may return a Promise.\n * @param {EventEmitter} object - Object to call event on.\n * @param {Any[]} [args] - Arguments to pass to each called function.\n * @returns {Promise} Promise resolved once this function is done.\n * @memberof SequentialEvent\n * @author Gerkin\n * @private\n */\nconst emitHandler = ( handler, object, args ) => {\n\ttry {\n\t\tconst retVal = handler.apply( object, args );\n\t\tif ( 'object' === typeof retVal && 'function' === typeof retVal.then ) {\n\t\t\treturn retVal;\n\t\t} else {\n\t\t\treturn Promise.resolve( retVal );\n\t\t}\n\t} catch ( e ) {\n\t\treturn Promise.reject( e );\n\t}\n};\n\nconst onceify = ( target, eventName, eventFn ) => {\n\tconst fn = ( ...args ) => {\n\t\ttarget.off( eventName, fn );\n\t\treturn eventFn( ...args );\n\t};\n\treturn fn;\n};\n\n/**\n * Event emitter that guarantees sequential execution of handlers. Each handler may return a **Promise**.\n *\n * @see {@link https://nodejs.org/api/events.html Node EventEmitter}.\n */\nclass SequentialEvent {\n\t/**\n\t * Constructs a new SequentialEvent.\n\t *\n\t * @author Gerkin\n\t */\n\tconstructor() {\n\t\tthis.__events = {};\n\t}\n\n\t/**\n\t * Add one or many event handlers.\n\t *\n\t * @param {string|Object} events - Event name or hash of events.\n\t * @param {Function} [callback] - If provided an event name with `events`, function to associate with the event.\n\t * @returns {SequentialEvent} `this`.\n\t */\n\ton( events, callback ) {\n\t\tconst _events = this.__events;\n\n\t\tif ( 'object' === typeof events ) {\n\t\t\tfor ( const event in events ) {\n\t\t\t\tif ( events.hasOwnProperty( event )) {\n\t\t\t\t\t_events[event] = _events[event] || [];\n\t\t\t\t\t_events[event].push( events[event]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tevents.split( ' ' ).forEach( event => {\n\t\t\t\t_events[event] = _events[event] || [];\n\t\t\t\t_events[event].push( callback );\n\t\t\t}, this );\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Remove one or many or all event handlers.\n\t *\n\t * @param {string|Object} [events] - Event name or hash of events.\n\t * @param {Function} [callback] - If provided an event name with `events`, function to associate with the event.\n\t * @returns {SequentialEvent} `this`.\n\t */\n\toff( events, callback ) {\n\t\tconst _events = this.__events;\n\n\t\tif ( 'object' === typeof events ) {\n\t\t\tfor ( const event in events ) {\n\t\t\t\tif ( events.hasOwnProperty( event ) && ( event in _events )) {\n\t\t\t\t\tvar index = _events[event].indexOf( events[event]);\n\t\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\t\t_events[event].splice( index, 1 );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if ( events ) {\n\t\t\tevents.split( ' ' ).forEach( event => {\n\t\t\t\tif ( event in _events ) {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tvar index = _events[event].indexOf( callback );\n\t\t\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\t\t\t_events[event].splice( index, 1 );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_events[event].length = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this );\n\t\t} else {\n\t\t\tthis.__events = {};\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Add one or many event handlers that will be called only once.\n\t *\n\t * @param {string|Object} events - Event name or hash of events.\n\t * @param {Function} [callback] - If provided an event name with `events`, function to associate with the event.\n\t * @returns {SequentialEvent} `this`.\n\t */\n\tonce( events, callback ) {\n\t\tconst _events = this.__events;\n\n\t\tif ( 'object' === typeof events ) {\n\t\t\tfor ( const event in events ) {\n\t\t\t\tif ( events.hasOwnProperty( event )) {\n\t\t\t\t\t_events[event] = _events[event] || [];\n\t\t\t\t\t_events[event].push( onceify( this, event, events[event]));\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tevents.split( ' ' ).forEach( event => {\n\t\t\t\t_events[event] = _events[event] || [];\n\t\t\t\t_events[event].push( onceify( this, event, callback ));\n\t\t\t}, this );\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Triggers each corresponding handlers in sequence.\n\t *\n\t * @param {Any} type - Name of the event to sequential-event.\n\t * @param {Any[]} [args] - Parameters to pass to handlers.\n\t * @returns {Promise} Returns a Promise resolved when then chain is done.\n\t * @author Gerkin\n\t */\n\temit( type, ...args ) {\n\t\tconst events = this.__events;\n\t\tif ( !events ) {\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tconst handler = events[type];\n\t\tif ( !handler ) {\n\t\t\treturn Promise.resolve();\n\t\t}\n\n\t\tconst retPromise = emitHandlers( handler, this, args );\n\n\t\treturn retPromise;\n\t}\n}\n\nmodule.exports = SequentialEvent;\n\n},{}]},{},[1])(1)\n});"]} \ No newline at end of file diff --git a/dist/sequential-event.min.js b/dist/sequential-event.min.js index 23d9d6e..57876e1 100644 --- a/dist/sequential-event.min.js +++ b/dist/sequential-event.min.js @@ -2,10 +2,10 @@ * @file sequential-event * * This library is a variation of standard event emitters. Handlers are executed sequentialy, and may return Promises if it executes asynchronous code -* Built on 2017-10-17 17:14:10 +* Built on 2017-10-17 17:35:22 * * @license GPL-3.0 * @version 0.2.0-rc.1 * @author Gerkin */ -function _classCallCheck(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function e(e,n){for(var t=0;t1?o-1:0),f=1;f1?o-1:0),f=1;fSearch results Documentation generated by JSDoc 3.5.5 - on 2017-10-17T17:14:16+02:00 + on 2017-10-17T17:35:29+02:00 using the DocStrap template. diff --git a/docs/classes.list.html b/docs/classes.list.html index 3e852f0..594205e 100644 --- a/docs/classes.list.html +++ b/docs/classes.list.html @@ -195,7 +195,7 @@ Documentation generated by JSDoc 3.5.5 - on 2017-10-17T17:14:16+02:00 + on 2017-10-17T17:35:29+02:00 using the DocStrap template. diff --git a/docs/index.html b/docs/index.html index 44a0ff2..d5b66ae 100644 --- a/docs/index.html +++ b/docs/index.html @@ -283,7 +283,7 @@ Documentation generated by JSDoc 3.5.5 - on 2017-10-17T17:14:16+02:00 + on 2017-10-17T17:35:29+02:00 using the DocStrap template. diff --git a/docs/quicksearch.html b/docs/quicksearch.html index 957650c..7274725 100644 --- a/docs/quicksearch.html +++ b/docs/quicksearch.html @@ -7,7 +7,7 @@