Skip to content

Commit

Permalink
Fix prependListener in wildcard mode
Browse files Browse the repository at this point in the history
  • Loading branch information
Mikhail Shilov committed Feb 14, 2021
1 parent 90a37aa commit aab7c88
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 4 deletions.
10 changes: 7 additions & 3 deletions lib/eventemitter2.js
Original file line number Diff line number Diff line change
Expand Up @@ -599,7 +599,7 @@
return listeners;
}

function growListenerTree(type, listener) {
function growListenerTree(type, listener, prepend) {
var len = 0, j = 0, i, delimiter = this.delimiter, dl= delimiter.length, ns;

if(typeof type==='string') {
Expand Down Expand Up @@ -648,7 +648,11 @@
tree._listeners = [tree._listeners];
}

tree._listeners.push(listener);
if (prepend) {
tree._listeners.unshift(listener);
} else {
tree._listeners.push(listener);
}

if (
!tree._listeners.warned &&
Expand Down Expand Up @@ -1229,7 +1233,7 @@
}

if (this.wildcard) {
growListenerTree.call(this, type, listener);
growListenerTree.call(this, type, listener, prepend);
return returnValue;
}

Expand Down
30 changes: 29 additions & 1 deletion test/wildcardEvents/addListener.js
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,34 @@ module.exports = simpleEvents({

test.expect(5);
test.done();
}
},


'13. Use prepend on wildcards mode.': function (test) {

var emitter = new EventEmitter2({
wildcard: true
});

var type = ['some', 'listener', 'bar'];

const function1 = function () {
test.ok(true, 'The event was raised');
}

const function2 = function () {
test.ok(true, 'The event was raised');
}

emitter.on(type, function2);

emitter.prependListener(type, function1);

test.equal(emitter.listeners(type)[0], function1, 'Prepended listener is first');

test.expect(1);
test.done();

},

});

0 comments on commit aab7c88

Please sign in to comment.