import { url } from "./url.js"; import { Manager } from "./manager.js"; import { Socket } from "./socket.js"; import debugModule from "debug"; // debug() const debug = debugModule("socket.io-client"); // debug() /** * Managers cache. */ const cache = {}; function lookup(uri, opts) { if (typeof uri === "object") { opts = uri; uri = undefined; } opts = opts || {}; const parsed = url(uri, 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; 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); } // so that "lookup" can be used both as a function (e.g. `io(...)`) and as a // namespace (e.g. `io.connect(...)`), for backward compatibility Object.assign(lookup, { Manager, Socket, io: lookup, connect: lookup, }); /** * Protocol version. * * @public */ export { protocol } from "socket.io-parser"; /** * Expose constructors for standalone build. * * @public */ export { Manager, Socket, lookup as io, lookup as connect, lookup as default, };