Files
socket.io/lib/index.ts
Damien Arrachequesne e20d487ac0 fix: properly export the Socket class
Before this change, `require("socket.io-client").Socket` would return
"undefined".

Note: having access to the Socket class allows users to modify its
prototype.

Related: https://github.com/socketio/socket.io/issues/3726
2021-05-06 14:24:08 +02:00

106 lines
2.2 KiB
TypeScript

import { url } from "./url";
import { Manager, ManagerOptions } from "./manager";
import { Socket, SocketOptions } from "./socket";
const debug = require("debug")("socket.io-client");
/**
* Module exports.
*/
module.exports = exports = lookup;
/**
* Managers cache.
*/
const cache: Record<string, Manager> = (exports.managers = {});
/**
* Looks up an existing `Manager` for multiplexing.
* If the user summons:
*
* `io('http://localhost/a');`
* `io('http://localhost/b');`
*
* We reuse the existing instance based on same scheme/port/host,
* and we initialize sockets for each namespace.
*
* @public
*/
function lookup(opts?: Partial<ManagerOptions & SocketOptions>): Socket;
function lookup(
uri: string,
opts?: Partial<ManagerOptions & SocketOptions>
): Socket;
function lookup(
uri: string | Partial<ManagerOptions & SocketOptions>,
opts?: Partial<ManagerOptions & SocketOptions>
): Socket;
function lookup(
uri: string | Partial<ManagerOptions & SocketOptions>,
opts?: Partial<ManagerOptions & SocketOptions>
): Socket {
if (typeof uri === "object") {
opts = uri;
uri = undefined;
}
opts = opts || {};
const parsed = url(uri as string, opts.path || "/socket.io");
const source = parsed.source;
const id = parsed.id;
const path = parsed.path;
const sameNamespace = cache[id] && path in cache[id]["nsps"];
const newConnection =
opts.forceNew ||
opts["force new connection"] ||
false === opts.multiplex ||
sameNamespace;
let io: Manager;
if (newConnection) {
debug("ignoring socket cache for %s", source);
io = new Manager(source, opts);
} else {
if (!cache[id]) {
debug("new io instance for %s", source);
cache[id] = new Manager(source, opts);
}
io = cache[id];
}
if (parsed.query && !opts.query) {
opts.query = parsed.queryKey;
}
return io.socket(parsed.path, opts);
}
/**
* Protocol version.
*
* @public
*/
export { protocol } from "socket.io-parser";
/**
* `connect`.
*
* @param {String} uri
* @public
*/
exports.connect = lookup;
/**
* Expose constructors for standalone build.
*
* @public
*/
export { Manager, ManagerOptions } from "./manager";
export { Socket } from "./socket";
export { lookup as io, SocketOptions };
export default lookup;