Socket
Socket
Sign inDemoInstall

multi-event

Package Overview
Dependencies
0
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.0.0 to 1.0.1

src/multi-event-es6.js

0

bower.json

@@ -0,0 +0,0 @@ {

355

dist/multi-event.js

@@ -7,3 +7,3 @@ // multi-event 1.0.0

Object.defineProperty(exports, '__esModule', {
value: true
value: true
});

@@ -13,213 +13,192 @@

function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
function eventType(eventName) {
var ret = {
valid: false,
type: 'mono', //molti/mono
var helpers = {
eventType: function eventType(eventName) {
var ret = {
valid: false,
type: 'mono', //molti/mono
splited: []
};
ret.splited = eventName.split('.');
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
splited: []
};
ret.splited = eventName.split('.');
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = ret.splited[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var part = _step.value;
try {
for (var _iterator = ret.splited[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var part = _step.value;
var ok = /^[a-z0-9]+$/i.test(part);
var ast = part === '*';
if (!(ok || ast)) {
return ret;
}
if (ast) {
ret.type = 'multi';
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator['return']) {
_iterator['return']();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var ok = /^[a-z0-9]+$/i.test(part);
var ast = part === '*';
if (!(ok || ast)) {
return ret;
}
if (ast) {
ret.type = 'multi';
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator['return']) {
_iterator['return']();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
ret.valid = true;
ret.name = eventName;
return ret;
}
ret.valid = true;
ret.name = eventName;
var Eventy = (function () {
function Eventy() {
_classCallCheck(this, Eventy);
return ret;
},
matches: function matches(pattern) {
return function (eName) {
var patternCurrent = eName.split('.');
if (pattern.length !== patternCurrent.length) {
return false;
} else {
for (var i in pattern) {
if (patternCurrent[i] !== '*' && patternCurrent[i] !== pattern[i]) {
return false;
}
}
}
this._events = {};
this._multiEvents = {};
return true;
};
}
};
this._mapMonoMulti = {};
}
var MultiEvent = (function () {
function MultiEvent() {
_classCallCheck(this, MultiEvent);
_createClass(Eventy, [{
key: 'getNamesMatchs',
value: function getNamesMatchs(patternS) {
var eventNames = Object.keys(this._events);
var matchs = eventNames.filter(function (eName) {
var patternSCurrent = eName.split('.');
if (patternS.length !== patternSCurrent.length) {
return false;
} else {
for (var i in patternS) {
if (patternS[i] !== '*' && patternSCurrent[i] !== patternS[i]) {
return false;
}
}
}
this._mapMono = new Map();
this._mapMulti = new Map();
}
return true;
});
_createClass(MultiEvent, [{
key: 'on',
value: function on(eventName, callBack) {
var infos = helpers.eventType(eventName);
if (!infos.valid) {
throw 'invalid name';
}
if (typeof callBack !== 'function') {
throw 'you must give me a function';
}
return matchs;
}
}, {
key: 'on',
value: function on(eventName, callBack) {
var infos = eventType(eventName);
if (!infos.valid) {
throw 'invalid name';
}
if (typeof callBack !== 'function') {
throw 'you must give me a function';
}
var putOn = this._events;
if (infos.type === 'multi') {
putOn = this._multiEvents;
}
putOn[eventName] = putOn[eventName] || [];
if (-1 === putOn[eventName].indexOf(callBack)) {
putOn[eventName].push(callBack);
if (infos.type === 'multi') {
this.updateMapSet(infos);
}
}
var mapOfSet = undefined;
if (infos['type'] !== 'multi') {
mapOfSet = this._mapMono;
} else {
mapOfSet = this._mapMulti;
}
return this;
}
}, {
key: 'updateMapSet',
value: function updateMapSet(infos) {
var eventMatchs = this.getNamesMatchs(infos.splited);
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
var setMulti = undefined;
if (mapOfSet.has(eventName)) {
setMulti = mapOfSet.get(eventName);
} else {
setMulti = new Set();
mapOfSet.set(eventName, setMulti);
}
try {
for (var _iterator2 = eventMatchs[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var _name = _step2.value;
setMulti.add(callBack);
var set = this._mapMonoMulti[_name] = this._mapMonoMulti[_name] || new Set();
set.add(infos.name);
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2['return']) {
_iterator2['return']();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
}
}, {
key: 'emit',
value: function emit(eventName) {
var _this = this;
var infos = eventType(eventName);
if (!infos.valid) {
throw 'invalid event';
}
if (infos.type === 'multi') {
throw 'you can not emit multiple events, may be in the next version';
}
var listeners = [];
Array.prototype.push.apply(listeners, this._events[eventName] || []);
// let args = Array.prototype.slice.call(arguments, 1);
var set = this._mapMonoMulti[eventName];
if (set) {
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
return this;
}
}, {
key: 'emit',
value: function emit(eventName) {
var infos = helpers.eventType(eventName);
if (!infos.valid) {
throw 'invalid event';
}
if (infos.type === 'multi') {
throw 'you can not emit multiple events, may be in the next version';
}
try {
for (var _iterator3 = set[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var _eventName = _step3.value;
// get mono callBacks
var monoCallBacks = this._mapMono.has(eventName) ? [].concat(_toConsumableArray(this._mapMono.get(eventName))) : [];
// get multi callBacks
var allMultiNames = [].concat(_toConsumableArray(this._mapMulti.keys()));
var listenersMulti = _this._multiEvents[_eventName];
Array.prototype.push.apply(listeners, listenersMulti);
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3['return']) {
_iterator3['return']();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
}
var _iteratorNormalCompletion4 = true;
var _didIteratorError4 = false;
var _iteratorError4 = undefined;
var multiNamesMatches = allMultiNames.filter(helpers.matches(infos.splited));
try {
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
var multiCallBacks = [];
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
for (var _iterator4 = listeners[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
var listener = _step4.value;
try {
for (var _iterator2 = multiNamesMatches[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var multiNamesMatch = _step2.value;
listener.apply({ eventName: eventName }, args);
}
} catch (err) {
_didIteratorError4 = true;
_iteratorError4 = err;
} finally {
try {
if (!_iteratorNormalCompletion4 && _iterator4['return']) {
_iterator4['return']();
}
} finally {
if (_didIteratorError4) {
throw _iteratorError4;
}
}
}
Array.prototype.push.apply(multiCallBacks, [].concat(_toConsumableArray(this._mapMulti.get(multiNamesMatch))));
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2['return']) {
_iterator2['return']();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return this;
}
}]);
var callBacks = monoCallBacks.concat(multiCallBacks);
return Eventy;
//execute callBacks
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
for (var _iterator3 = callBacks[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var callBack = _step3.value;
callBack.apply({ eventName: eventName }, args);
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3['return']) {
_iterator3['return']();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
return this;
}
}]);
return MultiEvent;
})();
exports['default'] = Eventy;
exports['default'] = MultiEvent;
module.exports = exports['default'];

@@ -1,2 +0,2 @@

/*! multi-event 2015-09-02 */
"use strict";function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function eventType(a){var b={valid:!1,type:"mono",splited:[]};b.splited=a.split(".");var c=!0,d=!1,e=void 0;try{for(var f,g=b.splited[Symbol.iterator]();!(c=(f=g.next()).done);c=!0){var h=f.value,i=/^[a-z0-9]+$/i.test(h),j="*"===h;if(!i&&!j)return b;j&&(b.type="multi")}}catch(k){d=!0,e=k}finally{try{!c&&g["return"]&&g["return"]()}finally{if(d)throw e}}return b.valid=!0,b.name=a,b}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),Eventy=function(){function a(){_classCallCheck(this,a),this._events={},this._multiEvents={},this._mapMonoMulti={}}return _createClass(a,[{key:"getNamesMatchs",value:function(a){var b=Object.keys(this._events),c=b.filter(function(b){var c=b.split(".");if(a.length!==c.length)return!1;for(var d in a)if("*"!==a[d]&&c[d]!==a[d])return!1;return!0});return c}},{key:"on",value:function(a,b){var c=eventType(a);if(!c.valid)throw"invalid name";if("function"!=typeof b)throw"you must give me a function";var d=this._events;return"multi"===c.type&&(d=this._multiEvents),d[a]=d[a]||[],-1===d[a].indexOf(b)&&(d[a].push(b),"multi"===c.type&&this.updateMapSet(c)),this}},{key:"updateMapSet",value:function(a){var b=this.getNamesMatchs(a.splited),c=!0,d=!1,e=void 0;try{for(var f,g=b[Symbol.iterator]();!(c=(f=g.next()).done);c=!0){var h=f.value,i=this._mapMonoMulti[h]=this._mapMonoMulti[h]||new Set;i.add(a.name)}}catch(j){d=!0,e=j}finally{try{!c&&g["return"]&&g["return"]()}finally{if(d)throw e}}}},{key:"emit",value:function(a){var b=this,c=eventType(a);if(!c.valid)throw"invalid event";if("multi"===c.type)throw"you can not emit multiple events, may be in the next version";var d=[];Array.prototype.push.apply(d,this._events[a]||[]);var e=this._mapMonoMulti[a];if(e){var f=!0,g=!1,h=void 0;try{for(var i,j=e[Symbol.iterator]();!(f=(i=j.next()).done);f=!0){var k=i.value,l=b._multiEvents[k];Array.prototype.push.apply(d,l)}}catch(m){g=!0,h=m}finally{try{!f&&j["return"]&&j["return"]()}finally{if(g)throw h}}}var n=!0,o=!1,p=void 0;try{for(var q=arguments.length,r=Array(q>1?q-1:0),s=1;q>s;s++)r[s-1]=arguments[s];for(var t,u=d[Symbol.iterator]();!(n=(t=u.next()).done);n=!0){var v=t.value;v.apply({eventName:a},r)}}catch(m){o=!0,p=m}finally{try{!n&&u["return"]&&u["return"]()}finally{if(o)throw p}}return this}}]),a}();exports["default"]=Eventy,module.exports=exports["default"];
/*! multi-event 2015-09-04 */
"use strict";function _toConsumableArray(a){if(Array.isArray(a)){for(var b=0,c=Array(a.length);b<a.length;b++)c[b]=a[b];return c}return Array.from(a)}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(exports,"__esModule",{value:!0});var _createClass=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),helpers={eventType:function(a){var b={valid:!1,type:"mono",splited:[]};b.splited=a.split(".");var c=!0,d=!1,e=void 0;try{for(var f,g=b.splited[Symbol.iterator]();!(c=(f=g.next()).done);c=!0){var h=f.value,i=/^[a-z0-9]+$/i.test(h),j="*"===h;if(!i&&!j)return b;j&&(b.type="multi")}}catch(k){d=!0,e=k}finally{try{!c&&g["return"]&&g["return"]()}finally{if(d)throw e}}return b.valid=!0,b.name=a,b},matches:function(a){return function(b){var c=b.split(".");if(a.length!==c.length)return!1;for(var d in a)if("*"!==c[d]&&c[d]!==a[d])return!1;return!0}}},MultiEvent=function(){function a(){_classCallCheck(this,a),this._mapMono=new Map,this._mapMulti=new Map}return _createClass(a,[{key:"on",value:function(a,b){var c=helpers.eventType(a);if(!c.valid)throw"invalid name";if("function"!=typeof b)throw"you must give me a function";var d=void 0;d="multi"!==c.type?this._mapMono:this._mapMulti;var e=void 0;return d.has(a)?e=d.get(a):(e=new Set,d.set(a,e)),e.add(b),this}},{key:"emit",value:function(a){var b=helpers.eventType(a);if(!b.valid)throw"invalid event";if("multi"===b.type)throw"you can not emit multiple events, may be in the next version";var c=this._mapMono.has(a)?[].concat(_toConsumableArray(this._mapMono.get(a))):[],d=[].concat(_toConsumableArray(this._mapMulti.keys())),e=d.filter(helpers.matches(b.splited)),f=[],g=!0,h=!1,i=void 0;try{for(var j,k=e[Symbol.iterator]();!(g=(j=k.next()).done);g=!0){var l=j.value;Array.prototype.push.apply(f,[].concat(_toConsumableArray(this._mapMulti.get(l))))}}catch(m){h=!0,i=m}finally{try{!g&&k["return"]&&k["return"]()}finally{if(h)throw i}}var n=c.concat(f),o=!0,p=!1,q=void 0;try{for(var r=arguments.length,s=Array(r>1?r-1:0),t=1;r>t;t++)s[t-1]=arguments[t];for(var u,v=n[Symbol.iterator]();!(o=(u=v.next()).done);o=!0){var w=u.value;w.apply({eventName:a},s)}}catch(m){p=!0,q=m}finally{try{!o&&v["return"]&&v["return"]()}finally{if(p)throw q}}return this}}]),a}();exports["default"]=MultiEvent,module.exports=exports["default"];

@@ -21,8 +21,27 @@ module.exports = function(grunt) {

files: {
'dist/multi-event.js': 'src/multi-event.js'
'dist/multi-event.js': 'src/multi-event-es6.js'
}
}
},
'watch': {
files: ['src/multi-event-es6.js', 'test.js'],
tasks: ['mochaTest', 'babel', 'uglify']
},
'mochaTest': {
test: {
options: {
reporter: 'spec',
require: 'babel/register'
},
src: ['test.js']
}
}
});
// Add the grunt-mocha-test tasks.
grunt.loadNpmTasks('grunt-mocha-test');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-uglify');

@@ -29,0 +48,0 @@

{
"name": "multi-event",
"version": "1.0.0",
"version": "1.0.1",
"description": "",

@@ -13,7 +13,9 @@ "main": "dist/multi-event.js",

"grunt": "^0.4.5",
"grunt-contrib-uglify": "^0.9.2"
"grunt-contrib-uglify": "^0.9.2",
"grunt-mocha-test": "^0.12.7"
},
"scripts": {
"test": "mocha --compilers js:babel/register",
"build" :"grunt"
"watch": "grunt watch",
"build": "grunt"
},

@@ -34,3 +36,3 @@ "repository": {

],
"author": "yousfi.saad@gmail.com",
"author": "Saad Y <yousfi.saad@gmail.com> (https://github.com/yousfiSaad/)",
"license": "ISC",

@@ -37,0 +39,0 @@ "bugs": {

[![Build Status](https://travis-ci.org/yousfiSaad/multi-event.svg?branch=master)](https://travis-ci.org/yousfiSaad/multi-event)
# Installation
- **Node.js, browserify** `npm install multi-event --save`
- **Require.js** `require(["multi-event"], ...`
# Examples
```javascript
var MultiEvent = require('multi-event'); // require it
var myEvents = new MultiEvent();
// Implement listener
var callBack = function (arg) {
console.log(arg);
};
// Register callBack event listener
myEvents.on('event', callBack);
myEvents.emit('event', 'this will be passed to the callback');
// shows 'this will be passed to the callback' in console
```
# Multiple events Examples
```javascript
var MultiEvent = require('multi-event'); // require it
var myEvents = new MultiEvent();
// Implement listener
var callBack1 = function (arg) {
console.log('callBack1 says : '+ arg);
};
var callBack2 = function (arg) {
console.log('callBack2 says : '+ arg);
};
var callBack = function (arg) {
console.log('callBack says : '+ arg);
};
// Register callBack event listener
myEvents.on('event.subevent1', callBack1)
.on('event.subevent2', callBack2);
.on('event.*', callBack); // this callnack is trigged to all 'event' sub-events
myEvents.emit('event.subevent1', 'this string will be logged twice');
// the following will be displayed on the console
// callBack1 says : this string will be logged twice
// callBack says : this string will be logged twice
myEvents.emit('event.subevent2', 'this string will be logged twice');
// the following will be displayed on the console
// callBack2 says : this string will be logged twice
// callBack says : this string will be logged twice
```
# EcmaScript6
This module is writed in ES6, you can find the in `src/multi-event-es6.js`
For building your modification run `npm build`, the files `multi-event.js` and `multi-event.min.js` are created in `dist` folder
## Build and test
- **Build** `npm run build`
- **Test** `npm run test`
- **Watch changes and run tests and buil** `npm run watch`
var assert = require('assert');
import EventEmitter from './src/multi-event';
import EventEmitter from './src/multi-event-es6';
///// some tests from https://github.com/alexanderGugel/micro-events
var _noop = function() {};
var _noop = () => {};
describe('EventEmitter', function() {
it('#on() and #emit()', function(done) {
describe('EventEmitter', () => {
it('#on() and #emit()', (done) => {
var eventEmitter = new EventEmitter();

@@ -20,3 +19,3 @@ var originalEvent = {};

it('#emit() should work with multiple events in arguments', function(done) {
it('#emit() should work with multiple events in arguments', (done) => {
var eventEmitter = new EventEmitter();

@@ -37,3 +36,3 @@ var originalEvent1 = {};

it('#on() should only register handler once', function(done) {
it('#on() should only register handler once', (done) => {
var eventEmitter = new EventEmitter();

@@ -50,3 +49,3 @@ var originalEvent = {};

it('functions should return this', function() {
it('functions should return this', () => {
var eventEmitter = new EventEmitter();

@@ -57,11 +56,11 @@ assert(eventEmitter.on('boom', _noop), eventEmitter);

it('functions should check arguments', function() {
it('functions should check arguments', () => {
var eventEmitter = new EventEmitter();
assert.throws(function() {
assert.throws(() => {
eventEmitter.on();
});
assert.throws(function() {
assert.throws(() => {
eventEmitter.on('boom', 'Not a function');
});
assert.throws(function() {
assert.throws(() => {
eventEmitter.emit();

@@ -77,14 +76,25 @@ });

it('#on() and #emit() multi', (done) => {
let multiEventEmitter = new EventEmitter();
let multiEventEmitter = new EventEmitter();
multiEventEmitter
// .on('a.*.c', function(args){
// console.log('lgi chi 7ajat');
// })
.on('a.b.c', function(args){
// console.log('lgi chi 7aja');
done();
});
multiEventEmitter.emit('a.b.c');
multiEventEmitter
.on('a.*.c', function multi(args) {
done();
});
multiEventEmitter.emit('a.b.c');
});
it('#on() and #emit() listen on two events', (done) => {
let multiEventEmitter = new EventEmitter();
let countCalls = 0;
multiEventEmitter
.on('a.b.*', function multi(args) {
countCalls ++;
});
multiEventEmitter.emit('a.b.x');
multiEventEmitter.emit('a.b.y');
assert(countCalls, 2);
done();
});
});

@@ -0,0 +0,0 @@ import Eventy from './src/multi-event'

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc