Skip to content

Commit ec5a596

Browse files
refactor: improve typings
Note: `readyState` and `writeBuffer` are set to public, as they might be useful for the end user.
1 parent 2ddcb82 commit ec5a596

File tree

4 files changed

+129
-137
lines changed

4 files changed

+129
-137
lines changed

lib/socket.ts

Lines changed: 57 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,14 @@ import { decode } from "./contrib/parseqs.js";
44
import { parse } from "./contrib/parseuri.js";
55
import debugModule from "debug"; // debug()
66
import { Emitter } from "@socket.io/component-emitter";
7-
import { protocol } from "engine.io-parser";
8-
import { CloseDetails } from "./transport.js";
7+
import {
8+
protocol,
9+
type Packet,
10+
type BinaryType,
11+
type PacketType,
12+
RawData,
13+
} from "engine.io-parser";
14+
import { CloseDetails, Transport } from "./transport.js";
915

1016
const debug = debugModule("engine.io-client:socket"); // debug()
1117

@@ -221,11 +227,19 @@ export interface SocketOptions {
221227
protocols: string | string[];
222228
}
223229

230+
interface HandshakeData {
231+
sid: string;
232+
upgrades: string[];
233+
pingInterval: number;
234+
pingTimeout: number;
235+
maxPayload: number;
236+
}
237+
224238
interface SocketReservedEvents {
225239
open: () => void;
226-
handshake: (data) => void;
227-
packet: (packet) => void;
228-
packetCreate: (packet) => void;
240+
handshake: (data: HandshakeData) => void;
241+
packet: (packet: Packet) => void;
242+
packetCreate: (packet: Packet) => void;
229243
data: (data) => void;
230244
message: (data) => void;
231245
drain: () => void;
@@ -240,13 +254,19 @@ interface SocketReservedEvents {
240254
close: (reason: string, description?: CloseDetails | Error) => void;
241255
}
242256

243-
export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
257+
type SocketState = "opening" | "open" | "closing" | "closed";
258+
259+
export class Socket extends Emitter<
260+
Record<never, never>,
261+
Record<never, never>,
262+
SocketReservedEvents
263+
> {
244264
public id: string;
245-
public transport: any;
246-
public binaryType: string;
265+
public transport: Transport;
266+
public binaryType: BinaryType;
267+
public readyState: SocketState;
268+
public writeBuffer: Packet[] = [];
247269

248-
private readyState: string;
249-
private writeBuffer;
250270
private prevBufferLen: number;
251271
private upgrades;
252272
private pingInterval: number;
@@ -271,9 +291,8 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
271291
/**
272292
* Socket constructor.
273293
*
274-
* @param {String|Object} uri or options
294+
* @param {String|Object} uri - uri or options
275295
* @param {Object} opts - options
276-
* @api public
277296
*/
278297
constructor(uri, opts: Partial<SocketOptions> = {}) {
279298
super();
@@ -317,7 +336,6 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
317336
: "80");
318337

319338
this.transports = opts.transports || ["polling", "websocket"];
320-
this.readyState = "";
321339
this.writeBuffer = [];
322340
this.prevBufferLen = 0;
323341

@@ -387,9 +405,9 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
387405
/**
388406
* Creates transport of the given type.
389407
*
390-
* @param {String} transport name
408+
* @param {String} name - transport name
391409
* @return {Transport}
392-
* @api private
410+
* @private
393411
*/
394412
private createTransport(name) {
395413
debug('creating transport "%s"', name);
@@ -425,7 +443,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
425443
/**
426444
* Initializes transport to use and starts probe.
427445
*
428-
* @api private
446+
* @private
429447
*/
430448
private open() {
431449
let transport;
@@ -463,7 +481,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
463481
/**
464482
* Sets the current transport. Disables the existing one (if any).
465483
*
466-
* @api private
484+
* @private
467485
*/
468486
private setTransport(transport) {
469487
debug("setting transport %s", transport.name);
@@ -487,8 +505,8 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
487505
/**
488506
* Probes a transport.
489507
*
490-
* @param {String} transport name
491-
* @api private
508+
* @param {String} name - transport name
509+
* @private
492510
*/
493511
private probe(name) {
494512
debug('probing transport "%s"', name);
@@ -600,7 +618,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
600618
/**
601619
* Called when connection is deemed open.
602620
*
603-
* @api private
621+
* @private
604622
*/
605623
private onOpen() {
606624
debug("socket open");
@@ -611,11 +629,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
611629

612630
// we check for `readyState` in case an `open`
613631
// listener already closed the socket
614-
if (
615-
"open" === this.readyState &&
616-
this.opts.upgrade &&
617-
this.transport.pause
618-
) {
632+
if ("open" === this.readyState && this.opts.upgrade) {
619633
debug("starting upgrade probes");
620634
let i = 0;
621635
const l = this.upgrades.length;
@@ -628,7 +642,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
628642
/**
629643
* Handles a packet.
630644
*
631-
* @api private
645+
* @private
632646
*/
633647
private onPacket(packet) {
634648
if (
@@ -676,9 +690,9 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
676690
* Called upon handshake completion.
677691
*
678692
* @param {Object} data - handshake obj
679-
* @api private
693+
* @private
680694
*/
681-
private onHandshake(data) {
695+
private onHandshake(data: HandshakeData) {
682696
this.emitReserved("handshake", data);
683697
this.id = data.sid;
684698
this.transport.query.sid = data.sid;
@@ -695,7 +709,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
695709
/**
696710
* Sets and resets ping timeout timer based on server pings.
697711
*
698-
* @api private
712+
* @private
699713
*/
700714
private resetPingTimeout() {
701715
this.clearTimeoutFn(this.pingTimeoutTimer);
@@ -710,7 +724,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
710724
/**
711725
* Called on `drain` event
712726
*
713-
* @api private
727+
* @private
714728
*/
715729
private onDrain() {
716730
this.writeBuffer.splice(0, this.prevBufferLen);
@@ -730,7 +744,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
730744
/**
731745
* Flush write buffers.
732746
*
733-
* @api private
747+
* @private
734748
*/
735749
private flush() {
736750
if (
@@ -782,32 +796,31 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
782796
/**
783797
* Sends a message.
784798
*
785-
* @param {String} message.
786-
* @param {Function} callback function.
799+
* @param {String} msg - message.
787800
* @param {Object} options.
801+
* @param {Function} callback function.
788802
* @return {Socket} for chaining.
789-
* @api public
790803
*/
791-
public write(msg, options, fn?) {
804+
public write(msg: RawData, options?, fn?) {
792805
this.sendPacket("message", msg, options, fn);
793806
return this;
794807
}
795808

796-
public send(msg, options, fn?) {
809+
public send(msg: RawData, options?, fn?) {
797810
this.sendPacket("message", msg, options, fn);
798811
return this;
799812
}
800813

801814
/**
802815
* Sends a packet.
803816
*
804-
* @param {String} packet type.
817+
* @param {String} type: packet type.
805818
* @param {String} data.
806819
* @param {Object} options.
807-
* @param {Function} callback function.
808-
* @api private
820+
* @param {Function} fn - callback function.
821+
* @private
809822
*/
810-
private sendPacket(type, data?, options?, fn?) {
823+
private sendPacket(type: PacketType, data?: RawData, options?, fn?) {
811824
if ("function" === typeof data) {
812825
fn = data;
813826
data = undefined;
@@ -838,8 +851,6 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
838851

839852
/**
840853
* Closes the connection.
841-
*
842-
* @api public
843854
*/
844855
public close() {
845856
const close = () => {
@@ -884,7 +895,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
884895
/**
885896
* Called upon transport error
886897
*
887-
* @api private
898+
* @private
888899
*/
889900
private onError(err) {
890901
debug("socket error %j", err);
@@ -896,7 +907,7 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
896907
/**
897908
* Called upon transport close.
898909
*
899-
* @api private
910+
* @private
900911
*/
901912
private onClose(reason: string, description?: CloseDetails | Error) {
902913
if (
@@ -946,9 +957,8 @@ export class Socket extends Emitter<{}, {}, SocketReservedEvents> {
946957
/**
947958
* Filters upgrades, returning only those matching client transports.
948959
*
949-
* @param {Array} server upgrades
950-
* @api private
951-
*
960+
* @param {Array} upgrades - server upgrades
961+
* @private
952962
*/
953963
private filterUpgrades(upgrades) {
954964
const filteredUpgrades = [];

0 commit comments

Comments
 (0)