diff --git a/build/socket.js b/build/socket.js index 2ca1d5805..7ccf9e869 100644 --- a/build/socket.js +++ b/build/socket.js @@ -12,25 +12,19 @@ const component_bind_1 = __importDefault(require("component-bind")); const has_binary2_1 = __importDefault(require("has-binary2")); const debug = require("debug")("socket.io-client:socket"); /** - * Internal events (blacklisted). + * Internal events. * These events can't be emitted by the user. * * @api private */ -const events = { +const RESERVED_EVENTS = { connect: 1, - connect_error: 1, - connect_timeout: 1, - connecting: 1, disconnect: 1, + disconnecting: 1, error: 1, - reconnect: 1, - reconnect_attempt: 1, - reconnect_failed: 1, - reconnect_error: 1, - reconnecting: 1, - ping: 1, - pong: 1, + // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener + newListener: 1, + removeListener: 1, }; class Socket extends component_emitter_1.default { /** @@ -88,7 +82,7 @@ class Socket extends component_emitter_1.default { this.io.open(); // ensure open if ("open" === this.io.readyState) this.onopen(); - this.emit("connecting"); + super.emit("connecting"); return this; } connect() { @@ -99,7 +93,7 @@ class Socket extends component_emitter_1.default { this.io.open(); // ensure open if ("open" === this.io.readyState) this.onopen(); - this.emit("connecting"); + super.emit("connecting"); return this; } /** @@ -123,9 +117,8 @@ class Socket extends component_emitter_1.default { * @api public */ emit(ev) { - if (events.hasOwnProperty(ev)) { - super.emit.apply(this, arguments); - return this; + if (RESERVED_EVENTS.hasOwnProperty(ev)) { + throw new Error('"' + ev + '" is a reserved event name'); } const args = to_array_1.default(arguments); const packet = { @@ -294,7 +287,7 @@ class Socket extends component_emitter_1.default { this.id = id; this.connected = true; this.disconnected = false; - this.emit("connect"); + super.emit("connect"); this.emitBuffered(); } /** diff --git a/lib/socket.ts b/lib/socket.ts index c525b0b1b..faf1efa3a 100644 --- a/lib/socket.ts +++ b/lib/socket.ts @@ -9,26 +9,20 @@ import { Manager } from "./manager"; const debug = require("debug")("socket.io-client:socket"); /** - * Internal events (blacklisted). + * Internal events. * These events can't be emitted by the user. * * @api private */ -const events = { +const RESERVED_EVENTS = { connect: 1, - connect_error: 1, - connect_timeout: 1, - connecting: 1, disconnect: 1, + disconnecting: 1, error: 1, - reconnect: 1, - reconnect_attempt: 1, - reconnect_failed: 1, - reconnect_error: 1, - reconnecting: 1, - ping: 1, - pong: 1, + // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener + newListener: 1, + removeListener: 1, }; export class Socket extends Emitter { @@ -97,7 +91,7 @@ export class Socket extends Emitter { this.subEvents(); if (!this.io.reconnecting) this.io.open(); // ensure open if ("open" === this.io.readyState) this.onopen(); - this.emit("connecting"); + super.emit("connecting"); return this; } @@ -107,7 +101,7 @@ export class Socket extends Emitter { this.subEvents(); if (!this.io.reconnecting) this.io.open(); // ensure open if ("open" === this.io.readyState) this.onopen(); - this.emit("connecting"); + super.emit("connecting"); return this; } @@ -133,9 +127,8 @@ export class Socket extends Emitter { * @api public */ emit(ev) { - if (events.hasOwnProperty(ev)) { - super.emit.apply(this, arguments); - return this; + if (RESERVED_EVENTS.hasOwnProperty(ev)) { + throw new Error('"' + ev + '" is a reserved event name'); } const args = toArray(arguments); @@ -324,7 +317,7 @@ export class Socket extends Emitter { this.id = id; this.connected = true; this.disconnected = false; - this.emit("connect"); + super.emit("connect"); this.emitBuffered(); } diff --git a/test/socket.js b/test/socket.js index 04a734621..c4b8a548a 100644 --- a/test/socket.js +++ b/test/socket.js @@ -182,4 +182,12 @@ describe("socket", function () { done(); }); }); + + it("should throw on reserved event", () => { + const socket = io("/no", { forceNew: true }); + + expect(() => socket.emit("disconnecting", "goodbye")).to.throwException( + /"disconnecting" is a reserved event name/ + ); + }); });