Refactor Cordova events into ES6 class
authorChristopher J. Brody <chris.brody@gmail.com>
Wed, 19 Dec 2018 03:14:34 +0000 (22:14 -0500)
committerChristopher J. Brody <chris.brody@gmail.com>
Wed, 19 Dec 2018 03:17:12 +0000 (22:17 -0500)
and replace var with const & let

Co-authored-by: Christopher J. Brody <chris.brody@gmail.com>
Co-authored-by: Darryl Pogue <darryl@dpogue.ca>
src/events.js

index 7038643..2856f00 100644 (file)
     under the License.
 */
 
-var EventEmitter = require('events').EventEmitter;
+const EventEmitter = require('events').EventEmitter;
 
-var INSTANCE = new EventEmitter();
-INSTANCE.setMaxListeners(20);
-var EVENTS_RECEIVER;
+let EVENTS_RECEIVER = null;
 
-module.exports = INSTANCE;
+class CordovaEventEmitter extends EventEmitter {
+    /**
+     * Sets up current instance to forward emitted events to another EventEmitter
+     *   instance.
+     *
+     * @param   {EventEmitter}  [eventEmitter]  The emitter instance to forward
+     *   events to. Falsy value, when passed, disables forwarding.
+     */
+    forwardEventsTo (eventEmitter) {
+        // If no argument is specified disable events forwarding
+        if (!eventEmitter) {
+            EVENTS_RECEIVER = undefined;
+            return;
+        }
 
-/**
- * Sets up current instance to forward emitted events to another EventEmitter
- *   instance.
- *
- * @param   {EventEmitter}  [eventEmitter]  The emitter instance to forward
- *   events to. Falsy value, when passed, disables forwarding.
- */
-module.exports.forwardEventsTo = function (eventEmitter) {
+        if (!(eventEmitter instanceof EventEmitter)) {
+            throw new Error('Cordova events can be redirected to another EventEmitter instance only');
+        }
 
-    // If no argument is specified disable events forwarding
-    if (!eventEmitter) {
-        EVENTS_RECEIVER = undefined;
-        return;
+        // CB-10940 Skipping forwarding to self to avoid infinite recursion.
+        // This is the case when the modules are npm-linked.
+        if (this !== eventEmitter) {
+            EVENTS_RECEIVER = eventEmitter;
+        } else {
+            // Reset forwarding if we are subscribing to self
+            EVENTS_RECEIVER = undefined;
+        }
     }
 
-    if (!(eventEmitter instanceof EventEmitter)) { throw new Error('Cordova events can be redirected to another EventEmitter instance only'); }
+    /**
+     * Sets up current instance to forward emitted events to another EventEmitter
+     *   instance.
+     *
+     * @param   {EventEmitter}  [eventEmitter]  The emitter instance to forward
+     *   events to. Falsy value, when passed, disables forwarding.
+     */
+    emit (eventName, ...args) {
+        if (EVENTS_RECEIVER) {
+            EVENTS_RECEIVER.emit(eventName, ...args);
+        }
 
-    // CB-10940 Skipping forwarding to self to avoid infinite recursion.
-    // This is the case when the modules are npm-linked.
-    if (this !== eventEmitter) {
-        EVENTS_RECEIVER = eventEmitter;
-    } else {
-        // Reset forwarding if we are subscribing to self
-        EVENTS_RECEIVER = undefined;
+        return super.emit(eventName, ...args);
     }
-};
-
-var emit = INSTANCE.emit;
-
-/**
- * This method replaces original 'emit' method to allow events forwarding.
- *
- * @return  {eventEmitter}  Current instance to allow calls chaining, as
- *   original 'emit' does
- */
-module.exports.emit = function () {
-
-    var args = Array.prototype.slice.call(arguments);
+}
 
-    if (EVENTS_RECEIVER) {
-        EVENTS_RECEIVER.emit.apply(EVENTS_RECEIVER, args);
-    }
+const INSTANCE = new CordovaEventEmitter();
+INSTANCE.setMaxListeners(20);
 
-    return emit.apply(this, args);
-};
+module.exports = INSTANCE;