mirror of
https://github.com/socketio/socket.io.git
synced 2026-04-30 03:00:39 -04:00
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
106 lines
2.2 KiB
TypeScript
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;
|