diff --git a/package-lock.json b/package-lock.json index bca5e4750..10f8db3de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@xmldom/xmldom": "^0.8.0", "cbor-js": "^0.1.0", - "eventemitter2": "^6.4.0", + "eventemitter3": "^5.0.1", "object-assign": "^4.0.0", "pngparse": "^2.0.0", "webworkify": "^1.5.0", @@ -2255,16 +2255,10 @@ "node": ">=0.10.0" } }, - "node_modules/eventemitter2": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.5.tgz", - "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==" - }, "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, "node_modules/events": { "version": "3.3.0", @@ -3533,6 +3527,12 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/http-proxy/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, "node_modules/https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -9434,16 +9434,10 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "eventemitter2": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.5.tgz", - "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==" - }, "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, "events": { "version": "3.3.0", @@ -10383,6 +10377,14 @@ "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + } } }, "http-proxy-agent": { diff --git a/package.json b/package.json index ed0499168..30398fbd2 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "dependencies": { "@xmldom/xmldom": "^0.8.0", "cbor-js": "^0.1.0", - "eventemitter2": "^6.4.0", + "eventemitter3": "^5.0.1", "object-assign": "^4.0.0", "pngparse": "^2.0.0", "webworkify": "^1.5.0", diff --git a/src/actionlib/ActionClient.js b/src/actionlib/ActionClient.js index 6a9f5ad60..dfd2f268e 100644 --- a/src/actionlib/ActionClient.js +++ b/src/actionlib/ActionClient.js @@ -5,7 +5,7 @@ var Topic = require('../core/Topic'); var Message = require('../core/Message'); -var EventEmitter2 = require('eventemitter2').EventEmitter2; +var EventEmitter = require('eventemitter3').EventEmitter; var Ros = require('../core/Ros'); /** @@ -18,7 +18,7 @@ var Ros = require('../core/Ros'); * * 'result' - The result returned from the action server. * */ -class ActionClient extends EventEmitter2 { +class ActionClient extends EventEmitter { /** * @param {Object} options * @param {Ros} options.ros - The ROSLIB.Ros connection handle. diff --git a/src/actionlib/ActionListener.js b/src/actionlib/ActionListener.js index 06f212459..59b553f6b 100644 --- a/src/actionlib/ActionListener.js +++ b/src/actionlib/ActionListener.js @@ -6,7 +6,7 @@ var Topic = require('../core/Topic'); var Message = require('../core/Message'); -var EventEmitter2 = require('eventemitter2').EventEmitter2; +var EventEmitter = require('eventemitter3').EventEmitter; var Ros = require('../core/Ros'); /** @@ -19,7 +19,7 @@ var Ros = require('../core/Ros'); * */ -class ActionListener extends EventEmitter2 { +class ActionListener extends EventEmitter { /** * @param {Object} options * @param {Ros} options.ros - The ROSLIB.Ros connection handle. diff --git a/src/actionlib/Goal.js b/src/actionlib/Goal.js index eee451cf0..6f453131c 100644 --- a/src/actionlib/Goal.js +++ b/src/actionlib/Goal.js @@ -4,7 +4,7 @@ */ var Message = require('../core/Message'); -var EventEmitter2 = require('eventemitter2').EventEmitter2; +var EventEmitter = require('eventemitter3').EventEmitter; var ActionClient = require('./ActionClient'); /** @@ -13,7 +13,7 @@ var ActionClient = require('./ActionClient'); * Emits the following events: * * 'timeout' - If a timeout occurred while sending a goal. */ -class Goal extends EventEmitter2 { +class Goal extends EventEmitter { /** * @param {Object} options * @param {ActionClient} options.actionClient - The ROSLIB.ActionClient to use with this goal. diff --git a/src/actionlib/SimpleActionServer.js b/src/actionlib/SimpleActionServer.js index 311e4ffd3..86dcc08dd 100644 --- a/src/actionlib/SimpleActionServer.js +++ b/src/actionlib/SimpleActionServer.js @@ -5,7 +5,7 @@ var Topic = require('../core/Topic'); var Message = require('../core/Message'); -var EventEmitter2 = require('eventemitter2').EventEmitter2; +var EventEmitter = require('eventemitter3').EventEmitter; var Ros = require('../core/Ros'); /** @@ -15,7 +15,7 @@ var Ros = require('../core/Ros'); * * 'goal' - Goal sent by action client. * * 'cancel' - Action client has canceled the request. */ -class SimpleActionServer extends EventEmitter2 { +class SimpleActionServer extends EventEmitter { /** * @param {Object} options * @param {Ros} options.ros - The ROSLIB.Ros connection handle. diff --git a/src/core/Action.js b/src/core/Action.js index 28606c98c..597142649 100644 --- a/src/core/Action.js +++ b/src/core/Action.js @@ -3,14 +3,14 @@ * @author Sebastian Castro - sebastian.castro@picknik.ai */ -var EventEmitter2 = require('eventemitter2').EventEmitter2; +var EventEmitter = require('eventemitter3').EventEmitter; var Ros = require('../core/Ros'); /** * A ROS 2 action client. * @template TGoal, TFeedback, TResult */ -class Action extends EventEmitter2 { +class Action extends EventEmitter { /** * @param {Object} options * @param {Ros} options.ros - The ROSLIB.Ros connection handle. diff --git a/src/core/Ros.js b/src/core/Ros.js index 0873f4511..6c4ee42bd 100644 --- a/src/core/Ros.js +++ b/src/core/Ros.js @@ -16,7 +16,7 @@ const Topic = require('./Topic'); const Param = require('./Param'); const { TFClient } = require('../tf'); const { ActionClient, SimpleActionServer } = require('../actionlib'); -var EventEmitter2 = require('eventemitter2').EventEmitter2; +var EventEmitter = require('eventemitter3').EventEmitter; /** * Manages connection to the server and all interactions with ROS. @@ -28,7 +28,7 @@ var EventEmitter2 = require('eventemitter2').EventEmitter2; * * <topicName> - A message came from rosbridge with the given topic name. * * <serviceID> - A service response came from rosbridge with the given ID. */ -class Ros extends EventEmitter2 { +class Ros extends EventEmitter { /** * @param {Object} [options] * @param {string} [options.url] - The WebSocket URL for rosbridge. Can be specified later with `connect`. @@ -55,9 +55,6 @@ class Ros extends EventEmitter2 { this.groovyCompatibility = options.groovyCompatibility; } - // Sets unlimited event listeners. - this.setMaxListeners(0); - // begin by checking if a URL was given if (options.url) { this.connect(options.url); diff --git a/src/core/Service.js b/src/core/Service.js index 22b9fa237..8cdab2bfe 100644 --- a/src/core/Service.js +++ b/src/core/Service.js @@ -5,14 +5,14 @@ var ServiceResponse = require('./ServiceResponse'); var ServiceRequest = require('./ServiceRequest'); -var EventEmitter2 = require('eventemitter2').EventEmitter2; +var EventEmitter = require('eventemitter3').EventEmitter; var Ros = require('../core/Ros'); /** * A ROS service client. * @template TRequest, TResponse */ -class Service extends EventEmitter2 { +class Service extends EventEmitter { /** * @param {Object} options * @param {Ros} options.ros - The ROSLIB.Ros connection handle. diff --git a/src/core/Topic.js b/src/core/Topic.js index d245797a6..43c3303e4 100644 --- a/src/core/Topic.js +++ b/src/core/Topic.js @@ -3,7 +3,7 @@ * @author Brandon Alexander - baalexander@gmail.com */ -var EventEmitter2 = require('eventemitter2').EventEmitter2; +var EventEmitter = require('eventemitter3').EventEmitter; var Message = require('./Message'); var Ros = require('../core/Ros'); @@ -15,7 +15,7 @@ var Ros = require('../core/Ros'); * * 'message' - The message data from rosbridge. * @template T */ -class Topic extends EventEmitter2 { +class Topic extends EventEmitter { /** * @param {Object} options * @param {Ros} options.ros - The ROSLIB.Ros connection handle. @@ -130,7 +130,7 @@ class Topic extends EventEmitter2 { * and remove all subscribe callbacks. To remove a callback, you must * explicitly pass the callback function in. * - * @param {import('eventemitter2').ListenerFn} [callback] - The callback to unregister, if + * @param {import('eventemitter3').EventEmitter.ListenerFn} [callback] - The callback to unregister, if * provided and other listeners are registered the topic won't * unsubscribe, just stop emitting to the passed listener. */ diff --git a/src/tf/TFClient.js b/src/tf/TFClient.js index 79ccbf9e5..8d95579e4 100644 --- a/src/tf/TFClient.js +++ b/src/tf/TFClient.js @@ -3,7 +3,7 @@ * @author David Gossow - dgossow@willowgarage.com */ -const { EventEmitter2 } = require('eventemitter2'); +var EventEmitter = require('eventemitter3').EventEmitter; var ActionClient = require('../actionlib/ActionClient'); var Goal = require('../actionlib/Goal'); @@ -18,7 +18,7 @@ var Ros = require('../core/Ros'); /** * A TF Client that listens to TFs from tf2_web_republisher. */ -class TFClient extends EventEmitter2 { +class TFClient extends EventEmitter { /** * @param {Object} options * @param {Ros} options.ros - The ROSLIB.Ros connection handle. diff --git a/test/require-shim.js b/test/require-shim.js index a4c25983f..75a486d12 100644 --- a/test/require-shim.js +++ b/test/require-shim.js @@ -1,6 +1,6 @@ window.require = function require(path) { switch (path) { - case 'eventemitter2': return EventEmitter2; + case 'eventemitter3': return EventEmitter3; case '@xmldom/xmldom': return {DOMParser: DOMParser}; case 'cbor-js': return CBOR; case '../src/util/cborTypedArrayTags.js': return cborTypedArrayTagger; diff --git a/test/ros.test.js b/test/ros.test.js deleted file mode 100644 index 1f90e85ea..000000000 --- a/test/ros.test.js +++ /dev/null @@ -1,37 +0,0 @@ -var expect = require('chai').expect; -var EventEmitter2 = require('eventemitter2').EventEmitter2; -var ROSLIB = require('..'); - -describe('ROS', function() { - - describe('callOnConnection', function() { - it('should accept more than EventEmitter2\'s default listeners', function() { - // By default, EventEmitter2 only accepts 10 listeners. When more than - // the default, a 'warn' property is set on the listener. The firt part - // of this test proves the 'warn' property will be set with default - // EventEmitter2 settings. - var callCount = 50; - var eventEmitter = new EventEmitter2(); - for (var i = 0; i < callCount; i++) { - eventEmitter.on('foo', function () {}); - } - // @ts-expect-error -- hidden property - expect(eventEmitter._events['foo']).to.have.length(callCount); - // @ts-expect-error -- hidden property - expect(eventEmitter._events['foo']).to.have.property('warned'); - - // The next part of this test shows that the 'warn' property is not set - // for Ros, even with the same number of listeners as above. - var ros = new ROSLIB.Ros(); - for (var i = 0; i < callCount; i++) { - ros.callOnConnection({}); - } - // @ts-expect-error -- hidden property - expect(ros._events['connection']).to.have.length(callCount); - // @ts-expect-error -- hidden property - expect(ros._events['connection']).to.not.have.property('warned'); - }); - }); - -}); -