@supercat1337/event-emitter 1.0.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.
@@ -0,0 +1,75 @@
1
+ class EventEmitter {
2
+ /**
3
+ * Creates an instance of EventEmitter.
4
+ *
5
+ * @constructor
6
+ */
7
+ constructor() {
8
+ this.events = {};
9
+ }
10
+ /**
11
+ *
12
+ * @method
13
+ * @param {string} event
14
+ * @param {TListener} listener
15
+ * @returns {Unsubscriber}
16
+ */
17
+ on(event, listener) {
18
+ if (typeof this.events[event] !== "object") {
19
+ this.events[event] = [];
20
+ }
21
+ this.events[event].push(listener);
22
+ let that = this;
23
+ let unsubscriber = function() {
24
+ that.removeListener(event, listener);
25
+ };
26
+ return unsubscriber;
27
+ }
28
+ /**
29
+ *
30
+ * @param {string} event
31
+ * @param {TListener} listener
32
+ */
33
+ removeListener(event, listener) {
34
+ var idx;
35
+ if (typeof this.events[event] === "object") {
36
+ idx = this.events[event].indexOf(listener);
37
+ if (idx > -1) {
38
+ this.events[event].splice(idx, 1);
39
+ }
40
+ }
41
+ }
42
+ /**
43
+ *
44
+ * @param {string} event
45
+ */
46
+ emit(event) {
47
+ if (typeof this.events[event] !== "object")
48
+ return;
49
+ var i, listeners, length, args = [].slice.call(arguments, 1);
50
+ listeners = this.events[event].slice();
51
+ length = listeners.length;
52
+ for (i = 0; i < length; i++) {
53
+ try {
54
+ listeners[i].apply(this, args);
55
+ } catch (e) {
56
+ console.error(event, args);
57
+ console.error(e);
58
+ }
59
+ }
60
+ }
61
+ /**
62
+ *
63
+ * @method
64
+ * @param {string} event
65
+ * @param {TListener} listener
66
+ * @returns {Unsubscriber}
67
+ */
68
+ once(event, listener) {
69
+ return this.on(event, function g() {
70
+ this.removeListener(event, g);
71
+ listener.apply(this, arguments);
72
+ });
73
+ }
74
+ }
75
+ export { EventEmitter };
@@ -0,0 +1 @@
1
+ class o{constructor(){this.events={}}on(t,e){typeof this.events[t]!="object"&&(this.events[t]=[]),this.events[t].push(e);let s=this;return function(){s.removeListener(t,e)}}removeListener(t,e){var s;typeof this.events[t]=="object"&&(s=this.events[t].indexOf(e),s>-1&&this.events[t].splice(s,1))}emit(t){if(typeof this.events[t]=="object"){var e,s,i,r=[].slice.call(arguments,1);for(s=this.events[t].slice(),i=s.length,e=0;e<i;e++)try{s[e].apply(this,r)}catch(n){console.error(t,r),console.error(n)}}}once(t,e){return this.on(t,function s(){this.removeListener(t,s),e.apply(this,arguments)})}}export{o as EventEmitter};
package/index.js ADDED
@@ -0,0 +1,2 @@
1
+ // @ts-check
2
+ export { EventEmitter } from "./src/EventEmitter.js";
package/jsconfig.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "compilerOptions": {
3
+ "baseUrl": ".",
4
+ "paths": {
5
+ "src/*": ["./src/*", "./node_modules/*"]
6
+ },
7
+ "target": "ESNext",
8
+ "module": "ES6",
9
+ "noEmit": true,
10
+ "lib": [
11
+ "DOM",
12
+ "ES2020"
13
+ ],
14
+ },
15
+ //Add any build/compiled folders here to stop vscode searching those
16
+ "exclude": ["node_modules", "dist"]
17
+ }
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@supercat1337/event-emitter",
3
+ "version": "1.0.0",
4
+ "description": "Event Emitter",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "ava",
8
+ "build": "npm run build_esm && npm run build_min_esm",
9
+ "build_esm": "esbuild src/EventEmitter.js --outfile=dist/event-emitter.esm.js",
10
+ "build_min_esm": "esbuild src/EventEmitter.js --minify --outfile=dist/event-emitter.min.esm.js"
11
+ },
12
+ "author": "Supercat",
13
+ "license": "MIT",
14
+ "devDependencies": {
15
+ "ava": "^6.1.2",
16
+ "esbuild": "^0.20.2"
17
+ },
18
+ "type": "module",
19
+ "moduleResolution": "Node",
20
+ "keywords": ["event emitter", "event bus"],
21
+ "publishConfig": {
22
+ "registry": "https://registry.npmjs.org"
23
+ },
24
+ "homepage": "https://github.com/supercat911/event-emitter"
25
+ }
@@ -0,0 +1,109 @@
1
+ // @ts-check
2
+
3
+ /** @module EventEmitter */
4
+
5
+ /**
6
+ * @typedef {Function} TListener
7
+ */
8
+
9
+ /** @typedef {()=>void} Unsubscriber */
10
+
11
+ /**
12
+ *
13
+ * @class
14
+ * */
15
+ class EventEmitter {
16
+ /**
17
+ * Creates an instance of EventEmitter.
18
+ *
19
+ * @constructor
20
+ */
21
+ constructor() {
22
+
23
+ /**
24
+ * @type {Object.<string, TListener[]>}
25
+ */
26
+ this.events = {};
27
+ }
28
+
29
+ /**
30
+ *
31
+ * @method
32
+ * @param {string} event
33
+ * @param {TListener} listener
34
+ * @returns {Unsubscriber}
35
+ */
36
+ on(event, listener) {
37
+
38
+ if (typeof this.events[event] !== 'object') {
39
+ this.events[event] = [];
40
+ }
41
+
42
+ this.events[event].push(listener);
43
+
44
+ let that = this;
45
+
46
+ let unsubscriber = function () {
47
+ that.removeListener(event, listener);
48
+ };
49
+
50
+ return unsubscriber;
51
+ }
52
+ /**
53
+ *
54
+ * @param {string} event
55
+ * @param {TListener} listener
56
+ */
57
+ removeListener(event, listener) {
58
+ var idx;
59
+
60
+ if (typeof this.events[event] === 'object') {
61
+ idx = this.events[event].indexOf(listener);
62
+
63
+ if (idx > -1) {
64
+ this.events[event].splice(idx, 1);
65
+ }
66
+ }
67
+
68
+ }
69
+ /**
70
+ *
71
+ * @param {string} event
72
+ */
73
+ emit(event) {
74
+ if (typeof this.events[event] !== 'object') return;
75
+
76
+ var i, listeners, length, args = [].slice.call(arguments, 1);
77
+
78
+ listeners = this.events[event].slice();
79
+ length = listeners.length;
80
+
81
+ for (i = 0; i < length; i++) {
82
+
83
+ try {
84
+ listeners[i].apply(this, args);
85
+ }
86
+ catch (e) {
87
+ console.error(event, args);
88
+ console.error(e);
89
+ }
90
+
91
+ }
92
+ }
93
+
94
+ /**
95
+ *
96
+ * @method
97
+ * @param {string} event
98
+ * @param {TListener} listener
99
+ * @returns {Unsubscriber}
100
+ */
101
+ once(event, listener) {
102
+ return this.on(event, function g() {
103
+ this.removeListener(event, g);
104
+ listener.apply(this, arguments);
105
+ });
106
+ }
107
+ }
108
+
109
+ export { EventEmitter };
package/tests/test.js ADDED
@@ -0,0 +1,78 @@
1
+ //@ts-check
2
+
3
+ //import test from "ava";
4
+ import { EventEmitter } from "./../index.js";
5
+ import test from "./../node_modules/ava/entrypoints/main.mjs";
6
+
7
+
8
+
9
+ test("on(), emit()", t => {
10
+ var ev = new EventEmitter;
11
+ ev.on("foo", () => {
12
+ t.pass();
13
+ });
14
+
15
+ ev.emit("bar");
16
+ ev.emit("foo");
17
+
18
+ });
19
+
20
+ test("once(), emit()", t => {
21
+ var ev = new EventEmitter;
22
+ var foo = 0
23
+ ev.once("foo", () => {
24
+ foo++;
25
+ });
26
+
27
+ ev.emit("foo");
28
+ ev.emit("foo");
29
+ ev.emit("foo");
30
+
31
+ if (foo == 1) {
32
+ t.pass();
33
+ } else {
34
+ t.fail()
35
+ }
36
+ });
37
+
38
+ test("removeListener()", t => {
39
+ var ev = new EventEmitter;
40
+ var foo = 0
41
+ var action = () => {
42
+ foo++;
43
+ };
44
+
45
+ ev.on("foo", action);
46
+ ev.removeListener("foo", action);
47
+
48
+ ev.emit("foo");
49
+ ev.emit("foo");
50
+
51
+ if (foo == 0) {
52
+ t.pass();
53
+ } else {
54
+ t.fail()
55
+ }
56
+ });
57
+
58
+ test("Call unsubscriber", t => {
59
+ var ev = new EventEmitter;
60
+ var foo = 0
61
+ var action = () => {
62
+ foo++;
63
+ };
64
+
65
+ var unsubscriber = ev.on("foo", action);
66
+
67
+
68
+ ev.emit("foo");
69
+ unsubscriber();
70
+
71
+ ev.emit("foo");
72
+
73
+ if (foo == 1) {
74
+ t.pass();
75
+ } else {
76
+ t.fail()
77
+ }
78
+ });