mirror of
https://github.com/socketio/socket.io.git
synced 2026-01-08 22:48:20 -05:00
chore: use prettier v3 everywhere (#5169)
This commit is contained in:
31
package-lock.json
generated
31
package-lock.json
generated
@@ -4,6 +4,7 @@
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "socket.io",
|
||||
"workspaces": [
|
||||
"packages/socket.io-component-emitter",
|
||||
"packages/engine.io-parser",
|
||||
@@ -51,7 +52,7 @@
|
||||
"mocha": "^10.6.0",
|
||||
"node-forge": "^1.3.1",
|
||||
"nyc": "^17.0.0",
|
||||
"prettier": "^2.8.8",
|
||||
"prettier": "^3.3.2",
|
||||
"redis": "^4.6.15",
|
||||
"rimraf": "^6.0.0",
|
||||
"rollup": "^2.79.1",
|
||||
@@ -11320,15 +11321,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/prettier": {
|
||||
"version": "2.8.8",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
|
||||
"integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
|
||||
"version": "3.3.3",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
|
||||
"integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"prettier": "bin-prettier.js"
|
||||
"prettier": "bin/prettier.cjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.13.0"
|
||||
"node": ">=14"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/prettier/prettier?sponsor=1"
|
||||
@@ -15200,28 +15201,10 @@
|
||||
"packages/engine.io-parser": {
|
||||
"version": "5.2.3",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"prettier": "^3.3.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
}
|
||||
},
|
||||
"packages/engine.io-parser/node_modules/prettier": {
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz",
|
||||
"integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"prettier": "bin/prettier.cjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/prettier/prettier?sponsor=1"
|
||||
}
|
||||
},
|
||||
"packages/engine.io/node_modules/debug": {
|
||||
"version": "4.3.3",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"name": "socket.io",
|
||||
"private": true,
|
||||
"workspaces": [
|
||||
"packages/socket.io-component-emitter",
|
||||
@@ -52,7 +53,7 @@
|
||||
"mocha": "^10.6.0",
|
||||
"node-forge": "^1.3.1",
|
||||
"nyc": "^17.0.0",
|
||||
"prettier": "^2.8.8",
|
||||
"prettier": "^3.3.2",
|
||||
"redis": "^4.6.15",
|
||||
"rimraf": "^6.0.0",
|
||||
"rollup": "^2.79.1",
|
||||
|
||||
@@ -55,7 +55,7 @@ export function parse(setCookieString: string): Cookie {
|
||||
case "Max-Age":
|
||||
const expiration = new Date();
|
||||
expiration.setUTCSeconds(
|
||||
expiration.getUTCSeconds() + parseInt(value, 10)
|
||||
expiration.getUTCSeconds() + parseInt(value, 10),
|
||||
);
|
||||
cookie.expires = expiration;
|
||||
break;
|
||||
|
||||
@@ -381,8 +381,8 @@ export class SocketWithoutUpgrade extends Emitter<
|
||||
(typeof location !== "undefined" && location.port
|
||||
? location.port
|
||||
: this.secure
|
||||
? "443"
|
||||
: "80");
|
||||
? "443"
|
||||
: "80");
|
||||
|
||||
this.transports = [];
|
||||
this._transportsByName = {};
|
||||
@@ -408,7 +408,7 @@ export class SocketWithoutUpgrade extends Emitter<
|
||||
transportOptions: {},
|
||||
closeOnBeforeunload: false,
|
||||
},
|
||||
opts
|
||||
opts,
|
||||
);
|
||||
|
||||
this.opts.path =
|
||||
@@ -434,7 +434,7 @@ export class SocketWithoutUpgrade extends Emitter<
|
||||
addEventListener(
|
||||
"beforeunload",
|
||||
this._beforeunloadEventListener,
|
||||
false
|
||||
false,
|
||||
);
|
||||
}
|
||||
if (this.hostname !== "localhost") {
|
||||
@@ -484,7 +484,7 @@ export class SocketWithoutUpgrade extends Emitter<
|
||||
secure: this.secure,
|
||||
port: this.port,
|
||||
},
|
||||
this.opts.transportOptions[name]
|
||||
this.opts.transportOptions[name],
|
||||
);
|
||||
|
||||
debug("options: %j", opts);
|
||||
@@ -749,7 +749,7 @@ export class SocketWithoutUpgrade extends Emitter<
|
||||
type: PacketType,
|
||||
data?: RawData,
|
||||
options?: WriteOptions,
|
||||
fn?: () => void
|
||||
fn?: () => void,
|
||||
) {
|
||||
if ("function" === typeof data) {
|
||||
fn = data;
|
||||
@@ -874,7 +874,7 @@ export class SocketWithoutUpgrade extends Emitter<
|
||||
removeEventListener(
|
||||
"beforeunload",
|
||||
this._beforeunloadEventListener,
|
||||
false
|
||||
false,
|
||||
);
|
||||
removeEventListener("offline", this._offlineEventListener, false);
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ export class TransportError extends Error {
|
||||
constructor(
|
||||
reason: string,
|
||||
readonly description: any,
|
||||
readonly context: any
|
||||
readonly context: any,
|
||||
) {
|
||||
super(reason);
|
||||
}
|
||||
@@ -79,7 +79,7 @@ export abstract class Transport extends Emitter<
|
||||
protected onError(reason: string, description: any, context?: any) {
|
||||
super.emitReserved(
|
||||
"error",
|
||||
new TransportError(reason, description, context)
|
||||
new TransportError(reason, description, context),
|
||||
);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -15,12 +15,12 @@ export class XHR extends BaseXHR {
|
||||
Object.assign(
|
||||
opts,
|
||||
{ xd: this.xd, cookieJar: this.socket?._cookieJar },
|
||||
this.opts
|
||||
this.opts,
|
||||
);
|
||||
return new Request(
|
||||
(opts) => new XMLHttpRequest(opts),
|
||||
this.uri(),
|
||||
opts as RequestOptions
|
||||
opts as RequestOptions,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,7 +122,7 @@ export class Request extends Emitter<
|
||||
constructor(
|
||||
private readonly createRequest: (opts: RequestOptions) => XMLHttpRequest,
|
||||
uri: string,
|
||||
opts: RequestOptions
|
||||
opts: RequestOptions,
|
||||
) {
|
||||
super();
|
||||
installTimerFunctions(this, opts);
|
||||
@@ -151,7 +151,7 @@ export class Request extends Emitter<
|
||||
"ca",
|
||||
"ciphers",
|
||||
"rejectUnauthorized",
|
||||
"autoUnref"
|
||||
"autoUnref",
|
||||
);
|
||||
opts.xdomain = !!this._opts.xd;
|
||||
|
||||
@@ -197,7 +197,7 @@ export class Request extends Emitter<
|
||||
if (xhr.readyState === 3) {
|
||||
this._opts.cookieJar?.parseCookies(
|
||||
// @ts-ignore
|
||||
xhr.getResponseHeader("set-cookie")
|
||||
xhr.getResponseHeader("set-cookie"),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -354,7 +354,7 @@ function newRequest(opts) {
|
||||
if (!xdomain) {
|
||||
try {
|
||||
return new globalThis[["Active"].concat("Object").join("X")](
|
||||
"Microsoft.XMLHTTP"
|
||||
"Microsoft.XMLHTTP",
|
||||
);
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ export class WS extends BaseWS {
|
||||
createSocket(
|
||||
uri: string,
|
||||
protocols: string | string[] | undefined,
|
||||
opts: Record<string, any>
|
||||
opts: Record<string, any>,
|
||||
) {
|
||||
if (this.socket?._cookieJar) {
|
||||
opts.headers = opts.headers || {};
|
||||
|
||||
@@ -43,7 +43,7 @@ export abstract class BaseWS extends Transport {
|
||||
"origin",
|
||||
"maxPayload",
|
||||
"family",
|
||||
"checkServerIdentity"
|
||||
"checkServerIdentity",
|
||||
);
|
||||
|
||||
if (this.opts.extraHeaders) {
|
||||
@@ -64,7 +64,7 @@ export abstract class BaseWS extends Transport {
|
||||
abstract createSocket(
|
||||
uri: string,
|
||||
protocols: string | string[] | undefined,
|
||||
opts: Record<string, any>
|
||||
opts: Record<string, any>,
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -166,7 +166,7 @@ export class WS extends BaseWS {
|
||||
createSocket(
|
||||
uri: string,
|
||||
protocols: string | string[] | undefined,
|
||||
opts: Record<string, any>
|
||||
opts: Record<string, any>,
|
||||
) {
|
||||
return !isReactNative
|
||||
? protocols
|
||||
|
||||
@@ -30,7 +30,7 @@ export class WT extends Transport {
|
||||
// @ts-ignore
|
||||
this._transport = new WebTransport(
|
||||
this.createUri("https"),
|
||||
this.opts.transportOptions[this.name]
|
||||
this.opts.transportOptions[this.name],
|
||||
);
|
||||
} catch (err) {
|
||||
return this.emitReserved("error", err);
|
||||
@@ -51,7 +51,7 @@ export class WT extends Transport {
|
||||
this._transport.createBidirectionalStream().then((stream) => {
|
||||
const decoderStream = createPacketDecoderStream(
|
||||
Number.MAX_SAFE_INTEGER,
|
||||
this.socket.binaryType
|
||||
this.socket.binaryType,
|
||||
);
|
||||
const reader = stream.readable.pipeThrough(decoderStream).getReader();
|
||||
|
||||
|
||||
@@ -34,12 +34,12 @@ describe("connection", function () {
|
||||
const socket = new Socket();
|
||||
socket.on("open", () => {
|
||||
socket.send(
|
||||
"\uD800\uDC00-\uDB7F\uDFFF\uDB80\uDC00-\uDBFF\uDFFF\uE000-\uF8FF"
|
||||
"\uD800\uDC00-\uDB7F\uDFFF\uDB80\uDC00-\uDBFF\uDFFF\uE000-\uF8FF",
|
||||
);
|
||||
socket.on("message", (data) => {
|
||||
if ("hi" === data) return;
|
||||
expect(data).to.be(
|
||||
"\uD800\uDC00-\uDB7F\uDFFF\uDB80\uDC00-\uDBFF\uDFFF\uE000-\uF8FF"
|
||||
"\uD800\uDC00-\uDB7F\uDFFF\uDB80\uDC00-\uDBFF\uDFFF\uE000-\uF8FF",
|
||||
);
|
||||
socket.close();
|
||||
done();
|
||||
|
||||
@@ -90,7 +90,7 @@ describe("Socket", function () {
|
||||
|
||||
socket.on("error", (err) => {
|
||||
expect(err.message).to.eql(
|
||||
useFetch ? "fetch read error" : "xhr poll error"
|
||||
useFetch ? "fetch read error" : "xhr poll error",
|
||||
);
|
||||
done();
|
||||
});
|
||||
@@ -237,7 +237,7 @@ describe("Socket", function () {
|
||||
// err.context is a XMLHttpRequest object
|
||||
expect(err.context.readyState).to.eql(4);
|
||||
expect(err.context.responseText).to.eql(
|
||||
'{"code":1,"message":"Session ID unknown"}'
|
||||
'{"code":1,"message":"Session ID unknown"}',
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -21,7 +21,7 @@ exports.mochaHooks = {
|
||||
maxHttpBufferSize: 100,
|
||||
allowRequest: (req, fn) => {
|
||||
const denyRequest = new URL(`http://${req.url}`).searchParams.has(
|
||||
"deny"
|
||||
"deny",
|
||||
);
|
||||
fn(null, !denyRequest);
|
||||
},
|
||||
|
||||
@@ -100,7 +100,7 @@ describe("Transport", () => {
|
||||
timestampRequests: false,
|
||||
});
|
||||
expect(polling.uri()).to.contain(
|
||||
"http://localhost:3000/engine.io?sid=test"
|
||||
"http://localhost:3000/engine.io?sid=test",
|
||||
);
|
||||
});
|
||||
|
||||
@@ -124,7 +124,7 @@ describe("Transport", () => {
|
||||
timestampRequests: true,
|
||||
});
|
||||
expect(polling.uri()).to.match(
|
||||
/http:\/\/localhost\/engine\.io\?(j=[0-9]+&)?(t=[0-9A-Za-z-_]+)/
|
||||
/http:\/\/localhost\/engine\.io\?(j=[0-9]+&)?(t=[0-9A-Za-z-_]+)/,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -180,7 +180,7 @@ describe("Transport", () => {
|
||||
timestampRequests: true,
|
||||
});
|
||||
expect(ws.uri()).to.match(
|
||||
/ws:\/\/localhost\/engine\.io\?woot=[0-9A-Za-z-_]+/
|
||||
/ws:\/\/localhost\/engine\.io\?woot=[0-9A-Za-z-_]+/,
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ async function setup(opts, cb) {
|
||||
[{ shortName: "CN", value: "localhost" }],
|
||||
{
|
||||
days: 14, // the total length of the validity period MUST NOT exceed two weeks (https://w3c.github.io/webtransport/#custom-certificate-requirements)
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const engine = new Server(opts);
|
||||
@@ -73,8 +73,8 @@ function createSocket(port, certificate, opts) {
|
||||
},
|
||||
},
|
||||
},
|
||||
opts
|
||||
)
|
||||
opts,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -113,7 +113,7 @@ describe("WebTransport", () => {
|
||||
httpServer.close();
|
||||
success(engine, h3Server, done);
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -137,7 +137,7 @@ describe("WebTransport", () => {
|
||||
httpServer.close();
|
||||
success(engine, h3Server, done);
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -160,7 +160,7 @@ describe("WebTransport", () => {
|
||||
success(engine, h3Server, done);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -10,9 +10,6 @@
|
||||
"require": "./build/cjs/index.js"
|
||||
},
|
||||
"types": "build/esm/index.d.ts",
|
||||
"devDependencies": {
|
||||
"prettier": "^3.3.2"
|
||||
},
|
||||
"scripts": {
|
||||
"compile": "rimraf ./build && tsc && tsc -p tsconfig.esm.json && ./postcompile.sh",
|
||||
"test": "npm run format:check && npm run compile && if test \"$BROWSERS\" = \"1\" ; then npm run test:browser; else npm run test:node; fi",
|
||||
|
||||
@@ -78,7 +78,7 @@ export interface ServerOptions {
|
||||
*/
|
||||
allowRequest?: (
|
||||
req: IncomingMessage,
|
||||
fn: (err: string | null | undefined, success: boolean) => void
|
||||
fn: (err: string | null | undefined, success: boolean) => void,
|
||||
) => void;
|
||||
/**
|
||||
* The low-level transports that are enabled. WebTransport is disabled by default and must be manually enabled:
|
||||
@@ -146,7 +146,7 @@ export interface ServerOptions {
|
||||
type Middleware = (
|
||||
req: IncomingMessage,
|
||||
res: ServerResponse,
|
||||
next: (err?: any) => void
|
||||
next: (err?: any) => void,
|
||||
) => void;
|
||||
|
||||
function parseSessionId(data: string) {
|
||||
@@ -192,7 +192,7 @@ export abstract class BaseServer extends EventEmitter {
|
||||
cors: false,
|
||||
allowEIO3: false,
|
||||
},
|
||||
opts
|
||||
opts,
|
||||
);
|
||||
|
||||
if (opts.cookie) {
|
||||
@@ -204,7 +204,7 @@ export abstract class BaseServer extends EventEmitter {
|
||||
httpOnly: opts.cookie.path !== false,
|
||||
sameSite: "lax",
|
||||
},
|
||||
opts.cookie
|
||||
opts.cookie,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -217,7 +217,7 @@ export abstract class BaseServer extends EventEmitter {
|
||||
{
|
||||
threshold: 1024,
|
||||
},
|
||||
opts.perMessageDeflate
|
||||
opts.perMessageDeflate,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -263,7 +263,7 @@ export abstract class BaseServer extends EventEmitter {
|
||||
protected verify(
|
||||
req: any,
|
||||
upgrade: boolean,
|
||||
fn: (errorCode?: number, errorContext?: any) => void
|
||||
fn: (errorCode?: number, errorContext?: any) => void,
|
||||
) {
|
||||
// transport check
|
||||
const transport = req._query.transport;
|
||||
@@ -361,7 +361,7 @@ export abstract class BaseServer extends EventEmitter {
|
||||
protected _applyMiddlewares(
|
||||
req: IncomingMessage,
|
||||
res: ServerResponse,
|
||||
callback: (err?: any) => void
|
||||
callback: (err?: any) => void,
|
||||
) {
|
||||
if (this.middlewares.length === 0) {
|
||||
debug("no middleware to apply, skipping");
|
||||
@@ -424,7 +424,7 @@ export abstract class BaseServer extends EventEmitter {
|
||||
protected async handshake(
|
||||
transportName: string,
|
||||
req: any,
|
||||
closeConnection: (errorCode?: number, errorContext?: any) => void
|
||||
closeConnection: (errorCode?: number, errorContext?: any) => void,
|
||||
) {
|
||||
const protocol = req._query.EIO === "4" ? 4 : 3; // 3rd revision by default
|
||||
if (protocol === 3 && !this.opts.allowEIO3) {
|
||||
@@ -519,7 +519,7 @@ export abstract class BaseServer extends EventEmitter {
|
||||
public async onWebTransportSession(session: any) {
|
||||
const timeout = setTimeout(() => {
|
||||
debug(
|
||||
"the client failed to establish a bidirectional stream in the given period"
|
||||
"the client failed to establish a bidirectional stream in the given period",
|
||||
);
|
||||
session.close();
|
||||
}, this.opts.upgradeTimeout);
|
||||
@@ -535,7 +535,7 @@ export abstract class BaseServer extends EventEmitter {
|
||||
const stream = result.value;
|
||||
const transformStream = createPacketDecoderStream(
|
||||
this.opts.maxHttpBufferSize,
|
||||
"nodebuffer"
|
||||
"nodebuffer",
|
||||
);
|
||||
const reader = stream.readable.pipeThrough(transformStream).getReader();
|
||||
|
||||
@@ -632,7 +632,10 @@ export abstract class BaseServer extends EventEmitter {
|
||||
* @see https://nodejs.org/api/http.html#class-httpserverresponse
|
||||
*/
|
||||
class WebSocketResponse {
|
||||
constructor(readonly req, readonly socket: Duplex) {
|
||||
constructor(
|
||||
readonly req,
|
||||
readonly socket: Duplex,
|
||||
) {
|
||||
// temporarily store the response headers on the req object (see the "headers" event)
|
||||
req[kResponseHeaders] = {};
|
||||
}
|
||||
@@ -776,7 +779,7 @@ export class Server extends BaseServer {
|
||||
public handleUpgrade(
|
||||
req: EngineRequest,
|
||||
socket: Duplex,
|
||||
upgradeHead: Buffer
|
||||
upgradeHead: Buffer,
|
||||
) {
|
||||
this.prepare(req);
|
||||
|
||||
@@ -953,7 +956,7 @@ function abortRequest(res, errorCode, errorContext) {
|
||||
JSON.stringify({
|
||||
code: errorCode,
|
||||
message,
|
||||
})
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -968,7 +971,7 @@ function abortRequest(res, errorCode, errorContext) {
|
||||
function abortUpgrade(
|
||||
socket,
|
||||
errorCode,
|
||||
errorContext: { message?: string } = {}
|
||||
errorContext: { message?: string } = {},
|
||||
) {
|
||||
socket.on("error", () => {
|
||||
debug("ignoring error from closed connection");
|
||||
@@ -984,7 +987,7 @@ function abortUpgrade(
|
||||
length +
|
||||
"\r\n" +
|
||||
"\r\n" +
|
||||
message
|
||||
message,
|
||||
);
|
||||
}
|
||||
socket.destroy();
|
||||
|
||||
@@ -80,7 +80,7 @@ export class Socket extends EventEmitter {
|
||||
server: BaseServer,
|
||||
transport: Transport,
|
||||
req: EngineRequest,
|
||||
protocol: number
|
||||
protocol: number,
|
||||
) {
|
||||
super();
|
||||
this.id = id;
|
||||
@@ -125,7 +125,7 @@ export class Socket extends EventEmitter {
|
||||
pingInterval: this.server.opts.pingInterval,
|
||||
pingTimeout: this.server.opts.pingTimeout,
|
||||
maxPayload: this.server.opts.maxHttpBufferSize,
|
||||
})
|
||||
}),
|
||||
);
|
||||
|
||||
if (this.server.opts.initialPacket) {
|
||||
@@ -212,7 +212,7 @@ export class Socket extends EventEmitter {
|
||||
this.pingIntervalTimer = setTimeout(() => {
|
||||
debug(
|
||||
"writing ping packet - expecting pong within %sms",
|
||||
this.server.opts.pingTimeout
|
||||
this.server.opts.pingTimeout,
|
||||
);
|
||||
this.sendPacket("ping");
|
||||
this.resetPingTimeout();
|
||||
@@ -233,7 +233,7 @@ export class Socket extends EventEmitter {
|
||||
},
|
||||
this.protocol === 3
|
||||
? this.server.opts.pingInterval + this.server.opts.pingTimeout
|
||||
: this.server.opts.pingTimeout
|
||||
: this.server.opts.pingTimeout,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -293,7 +293,7 @@ export class Socket extends EventEmitter {
|
||||
debug(
|
||||
'might upgrade socket transport from "%s" to "%s"',
|
||||
this.transport.name,
|
||||
transport.name
|
||||
transport.name,
|
||||
);
|
||||
|
||||
this.upgrading = true;
|
||||
@@ -468,7 +468,7 @@ export class Socket extends EventEmitter {
|
||||
type: PacketType,
|
||||
data?: RawData,
|
||||
options: SendOptions = {},
|
||||
callback?: SendCallback
|
||||
callback?: SendCallback,
|
||||
) {
|
||||
if ("function" === typeof options) {
|
||||
callback = options;
|
||||
@@ -561,7 +561,7 @@ export class Socket extends EventEmitter {
|
||||
if (this.writeBuffer.length) {
|
||||
debug(
|
||||
"there are %d remaining packets in the buffer, waiting for the 'drain' event",
|
||||
this.writeBuffer.length
|
||||
this.writeBuffer.length,
|
||||
);
|
||||
this.once("drain", () => {
|
||||
debug("all packets have been sent, closing the transport");
|
||||
|
||||
@@ -69,7 +69,7 @@ export abstract class Transport extends EventEmitter {
|
||||
"readyState updated from %s to %s (%s)",
|
||||
this._readyState,
|
||||
state,
|
||||
this.name
|
||||
this.name,
|
||||
);
|
||||
this._readyState = state;
|
||||
}
|
||||
|
||||
@@ -54,13 +54,13 @@ export class WebSocket extends Transport {
|
||||
this.socket._sender.sendFrame(
|
||||
// @ts-ignore
|
||||
packet.options.wsPreEncodedFrame,
|
||||
isLast ? this._onSentLast : this._onSent
|
||||
isLast ? this._onSentLast : this._onSent,
|
||||
);
|
||||
} else {
|
||||
this.parser.encodePacket(
|
||||
packet,
|
||||
this.supportsBinary,
|
||||
isLast ? this._doSendLast : this._doSend
|
||||
isLast ? this._doSendLast : this._doSend,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,11 @@ const debug = debugModule("engine:webtransport");
|
||||
export class WebTransport extends Transport {
|
||||
private readonly writer;
|
||||
|
||||
constructor(private readonly session, stream, reader) {
|
||||
constructor(
|
||||
private readonly session,
|
||||
stream,
|
||||
reader,
|
||||
) {
|
||||
super({ _query: { EIO: "4" } });
|
||||
|
||||
const transformStream = createPacketEncoderStream();
|
||||
|
||||
@@ -64,7 +64,7 @@ export class uServer extends BaseServer {
|
||||
*/
|
||||
public attach(
|
||||
app /* : TemplatedApp */,
|
||||
options: AttachOptions & uOptions = {}
|
||||
options: AttachOptions & uOptions = {},
|
||||
) {
|
||||
const path = this._computePath(options);
|
||||
(app as TemplatedApp)
|
||||
@@ -84,7 +84,7 @@ export class uServer extends BaseServer {
|
||||
},
|
||||
message: (ws, message, isBinary) => {
|
||||
ws.getUserData().transport.onData(
|
||||
isBinary ? message : Buffer.from(message).toString()
|
||||
isBinary ? message : Buffer.from(message).toString(),
|
||||
);
|
||||
},
|
||||
close: (ws, code, message) => {
|
||||
@@ -96,7 +96,7 @@ export class uServer extends BaseServer {
|
||||
override _applyMiddlewares(
|
||||
req: any,
|
||||
res: any,
|
||||
callback: (err?: any) => void
|
||||
callback: (err?: any) => void,
|
||||
): void {
|
||||
if (this.middlewares.length === 0) {
|
||||
return callback();
|
||||
@@ -116,7 +116,7 @@ export class uServer extends BaseServer {
|
||||
|
||||
private handleRequest(
|
||||
res: HttpResponse,
|
||||
req: HttpRequest & { res: any; _query: any }
|
||||
req: HttpRequest & { res: any; _query: any },
|
||||
) {
|
||||
debug('handling "%s" http request "%s"', req.getMethod(), req.getUrl());
|
||||
this.prepare(req, res);
|
||||
@@ -158,7 +158,7 @@ export class uServer extends BaseServer {
|
||||
private handleUpgrade(
|
||||
res: HttpResponse,
|
||||
req: HttpRequest & { res: any; _query: any },
|
||||
context
|
||||
context,
|
||||
) {
|
||||
debug("on upgrade");
|
||||
|
||||
@@ -202,7 +202,7 @@ export class uServer extends BaseServer {
|
||||
req._query.transport,
|
||||
req,
|
||||
(errorCode, errorContext) =>
|
||||
this.abortRequest(res, errorCode, errorContext)
|
||||
this.abortRequest(res, errorCode, errorContext),
|
||||
);
|
||||
if (!transport) {
|
||||
return;
|
||||
@@ -219,7 +219,7 @@ export class uServer extends BaseServer {
|
||||
req.getHeader("sec-websocket-key"),
|
||||
req.getHeader("sec-websocket-protocol"),
|
||||
req.getHeader("sec-websocket-extensions"),
|
||||
context
|
||||
context,
|
||||
);
|
||||
};
|
||||
|
||||
@@ -235,7 +235,7 @@ export class uServer extends BaseServer {
|
||||
private abortRequest(
|
||||
res: HttpResponse | ResponseWrapper,
|
||||
errorCode,
|
||||
errorContext
|
||||
errorContext,
|
||||
) {
|
||||
const statusCode =
|
||||
errorCode === Server.errors.FORBIDDEN
|
||||
@@ -252,7 +252,7 @@ export class uServer extends BaseServer {
|
||||
JSON.stringify({
|
||||
code: errorCode,
|
||||
message,
|
||||
})
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ describe("engine", () => {
|
||||
"Upgrade: IRC/6.9",
|
||||
"",
|
||||
"",
|
||||
].join("\r\n")
|
||||
].join("\r\n"),
|
||||
);
|
||||
|
||||
const check = setTimeout(() => {
|
||||
@@ -122,7 +122,7 @@ describe("engine", () => {
|
||||
"Upgrade: IRC/6.9",
|
||||
"",
|
||||
"",
|
||||
].join("\r\n")
|
||||
].join("\r\n"),
|
||||
);
|
||||
|
||||
setTimeout(() => {
|
||||
@@ -154,7 +154,7 @@ describe("engine", () => {
|
||||
"Upgrade: IRC/6.9",
|
||||
"",
|
||||
"",
|
||||
].join("\r\n")
|
||||
].join("\r\n"),
|
||||
);
|
||||
|
||||
// send from client to server
|
||||
@@ -198,7 +198,7 @@ describe("engine", () => {
|
||||
"Upgrade: IRC/6.9",
|
||||
"",
|
||||
"",
|
||||
].join("\r\n")
|
||||
].join("\r\n"),
|
||||
);
|
||||
|
||||
// test that socket is still open by writing after the timeout period
|
||||
@@ -245,7 +245,7 @@ describe("engine", () => {
|
||||
server.once("close", done);
|
||||
server.close();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -38,7 +38,7 @@ describe("middlewares", () => {
|
||||
});
|
||||
|
||||
const socket = new WebSocket(
|
||||
`ws://localhost:${port}/engine.io/?EIO=4&transport=websocket`
|
||||
`ws://localhost:${port}/engine.io/?EIO=4&transport=websocket`,
|
||||
);
|
||||
|
||||
socket.on("upgrade", (res) => {
|
||||
@@ -131,7 +131,7 @@ describe("middlewares", () => {
|
||||
});
|
||||
|
||||
const socket = new WebSocket(
|
||||
`ws://localhost:${port}/engine.io/?EIO=4&transport=websocket`
|
||||
`ws://localhost:${port}/engine.io/?EIO=4&transport=websocket`,
|
||||
);
|
||||
|
||||
socket.addEventListener("error", () => {
|
||||
@@ -169,7 +169,7 @@ describe("middlewares", () => {
|
||||
engine.use(helmet());
|
||||
|
||||
const socket = new WebSocket(
|
||||
`ws://localhost:${port}/engine.io/?EIO=4&transport=websocket`
|
||||
`ws://localhost:${port}/engine.io/?EIO=4&transport=websocket`,
|
||||
);
|
||||
|
||||
socket.on("upgrade", (res) => {
|
||||
@@ -196,7 +196,7 @@ describe("middlewares", () => {
|
||||
resave: false,
|
||||
saveUninitialized: true,
|
||||
cookie: {},
|
||||
})
|
||||
}),
|
||||
);
|
||||
|
||||
request
|
||||
@@ -206,7 +206,7 @@ describe("middlewares", () => {
|
||||
expect(err).to.be(null);
|
||||
// expect(res.status).to.eql(200);
|
||||
expect(res.headers["set-cookie"][0].startsWith("connect.sid=")).to.be(
|
||||
true
|
||||
true,
|
||||
);
|
||||
|
||||
if (engine.httpServer) {
|
||||
@@ -225,16 +225,16 @@ describe("middlewares", () => {
|
||||
resave: false,
|
||||
saveUninitialized: true,
|
||||
cookie: {},
|
||||
})
|
||||
}),
|
||||
);
|
||||
|
||||
const socket = new WebSocket(
|
||||
`ws://localhost:${port}/engine.io/?EIO=4&transport=websocket`
|
||||
`ws://localhost:${port}/engine.io/?EIO=4&transport=websocket`,
|
||||
);
|
||||
|
||||
socket.on("upgrade", (res) => {
|
||||
expect(res.headers["set-cookie"][0].startsWith("connect.sid=")).to.be(
|
||||
true
|
||||
true,
|
||||
);
|
||||
|
||||
if (engine.httpServer) {
|
||||
@@ -280,7 +280,7 @@ describe("middlewares", () => {
|
||||
});
|
||||
|
||||
const socket = new WebSocket(
|
||||
`ws://localhost:${port}/engine.io/?EIO=4&transport=websocket`
|
||||
`ws://localhost:${port}/engine.io/?EIO=4&transport=websocket`,
|
||||
);
|
||||
|
||||
socket.addEventListener("error", () => {
|
||||
|
||||
@@ -16,7 +16,7 @@ describe("parser", () => {
|
||||
expect(decoded.data).to.eql("€€€€");
|
||||
done();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -143,7 +143,7 @@ describe("server", () => {
|
||||
expect(res.body.message).to.be("Thou shall not pass");
|
||||
partialDone();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -161,7 +161,7 @@ describe("server", () => {
|
||||
client.on("error", () => {
|
||||
done();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -243,7 +243,7 @@ describe("server", () => {
|
||||
});
|
||||
|
||||
const socket = new WebSocket(
|
||||
`ws://localhost:${port}/engine.io/?EIO=4&transport=__proto__`
|
||||
`ws://localhost:${port}/engine.io/?EIO=4&transport=__proto__`,
|
||||
);
|
||||
|
||||
socket.onerror = partialDone;
|
||||
@@ -262,7 +262,7 @@ describe("server", () => {
|
||||
// hack-obtain sid
|
||||
const sid = res.text.match(/"sid":"([^"]+)"/)[1];
|
||||
expect(res.headers["set-cookie"][0]).to.be(
|
||||
`io=${sid}; Path=/; HttpOnly; SameSite=Lax`
|
||||
`io=${sid}; Path=/; HttpOnly; SameSite=Lax`,
|
||||
);
|
||||
done();
|
||||
});
|
||||
@@ -278,7 +278,7 @@ describe("server", () => {
|
||||
expect(err).to.be(null);
|
||||
const sid = res.text.match(/"sid":"([^"]+)"/)[1];
|
||||
expect(res.headers["set-cookie"][0]).to.be(
|
||||
`woot=${sid}; Path=/; HttpOnly; SameSite=Lax`
|
||||
`woot=${sid}; Path=/; HttpOnly; SameSite=Lax`,
|
||||
);
|
||||
done();
|
||||
});
|
||||
@@ -294,7 +294,7 @@ describe("server", () => {
|
||||
expect(err).to.be(null);
|
||||
const sid = res.text.match(/"sid":"([^"]+)"/)[1];
|
||||
expect(res.headers["set-cookie"][0]).to.be(
|
||||
`io=${sid}; Path=/custom; HttpOnly; SameSite=Lax`
|
||||
`io=${sid}; Path=/custom; HttpOnly; SameSite=Lax`,
|
||||
);
|
||||
done();
|
||||
});
|
||||
@@ -310,7 +310,7 @@ describe("server", () => {
|
||||
expect(err).to.be(null);
|
||||
const sid = res.text.match(/"sid":"([^"]+)"/)[1];
|
||||
expect(res.headers["set-cookie"][0]).to.be(
|
||||
`io=${sid}; SameSite=Lax`
|
||||
`io=${sid}; SameSite=Lax`,
|
||||
);
|
||||
done();
|
||||
});
|
||||
@@ -326,7 +326,7 @@ describe("server", () => {
|
||||
expect(err).to.be(null);
|
||||
const sid = res.text.match(/"sid":"([^"]+)"/)[1];
|
||||
expect(res.headers["set-cookie"][0]).to.be(
|
||||
`io=${sid}; Path=/; HttpOnly; SameSite=Lax`
|
||||
`io=${sid}; Path=/; HttpOnly; SameSite=Lax`,
|
||||
);
|
||||
done();
|
||||
});
|
||||
@@ -342,7 +342,7 @@ describe("server", () => {
|
||||
expect(err).to.be(null);
|
||||
const sid = res.text.match(/"sid":"([^"]+)"/)[1];
|
||||
expect(res.headers["set-cookie"][0]).to.be(
|
||||
`io=${sid}; Path=/; HttpOnly; SameSite=Strict`
|
||||
`io=${sid}; Path=/; HttpOnly; SameSite=Strict`,
|
||||
);
|
||||
done();
|
||||
});
|
||||
@@ -358,7 +358,7 @@ describe("server", () => {
|
||||
expect(err).to.be(null);
|
||||
const sid = res.text.match(/"sid":"([^"]+)"/)[1];
|
||||
expect(res.headers["set-cookie"][0]).to.be(
|
||||
`io=${sid}; Path=/; SameSite=Lax`
|
||||
`io=${sid}; Path=/; SameSite=Lax`,
|
||||
);
|
||||
done();
|
||||
});
|
||||
@@ -374,7 +374,7 @@ describe("server", () => {
|
||||
expect(err).to.be(null);
|
||||
const sid = res.text.match(/"sid":"([^"]+)"/)[1];
|
||||
expect(res.headers["set-cookie"][0]).to.be(
|
||||
`io=${sid}; Path=/; HttpOnly; SameSite=Lax`
|
||||
`io=${sid}; Path=/; HttpOnly; SameSite=Lax`,
|
||||
);
|
||||
done();
|
||||
});
|
||||
@@ -681,14 +681,14 @@ describe("server", () => {
|
||||
expect(res.body.code).to.be(3);
|
||||
expect(res.body.message).to.be("Bad request");
|
||||
expect(res.header["access-control-allow-credentials"]).to.be(
|
||||
"true"
|
||||
"true",
|
||||
);
|
||||
expect(res.header["access-control-allow-origin"]).to.be(
|
||||
"http://engine.io"
|
||||
"http://engine.io",
|
||||
);
|
||||
partialDone();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -1130,7 +1130,7 @@ describe("server", () => {
|
||||
expect(res.statusCode).to.eql(400);
|
||||
res.resume();
|
||||
res.on("end", done);
|
||||
}
|
||||
},
|
||||
);
|
||||
req.end();
|
||||
});
|
||||
@@ -1174,7 +1174,7 @@ describe("server", () => {
|
||||
// OPENED readyState is expected - we are actually polling
|
||||
expect(
|
||||
socket.transport.pollXhr[IS_CLIENT_V3 ? "xhr" : "_xhr"]
|
||||
.readyState
|
||||
.readyState,
|
||||
).to.be(1);
|
||||
|
||||
// 2 requests sent to the server over an unique port means
|
||||
@@ -1194,7 +1194,7 @@ describe("server", () => {
|
||||
}, 50);
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
it("should not trigger with connection: close header", ($done) => {
|
||||
@@ -1260,7 +1260,7 @@ describe("server", () => {
|
||||
done();
|
||||
}, 200);
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
it(
|
||||
@@ -1295,7 +1295,7 @@ describe("server", () => {
|
||||
done();
|
||||
}, 100);
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
it(
|
||||
@@ -1331,7 +1331,7 @@ describe("server", () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
if (IS_CLIENT_V3) {
|
||||
@@ -1370,7 +1370,7 @@ describe("server", () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
} else {
|
||||
it(
|
||||
@@ -1408,7 +1408,7 @@ describe("server", () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1435,7 +1435,7 @@ describe("server", () => {
|
||||
socket.send("test");
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
// tests https://github.com/LearnBoost/engine.io-client/issues/207
|
||||
@@ -1727,7 +1727,7 @@ describe("server", () => {
|
||||
engine.on("connection", (conn) => {
|
||||
conn.on("message", (msg) => {
|
||||
done(
|
||||
new Error("Test invalidation (message is longer than allowed)")
|
||||
new Error("Test invalidation (message is longer than allowed)"),
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -1749,7 +1749,7 @@ describe("server", () => {
|
||||
engine.on("connection", (conn) => {
|
||||
conn.on("message", (msg) => {
|
||||
done(
|
||||
new Error("Test invalidation (message is longer than allowed)")
|
||||
new Error("Test invalidation (message is longer than allowed)"),
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -2060,7 +2060,7 @@ describe("server", () => {
|
||||
client.on("open", () => {
|
||||
client.send("a".repeat(1e6));
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -2202,7 +2202,7 @@ describe("server", () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
it("should support chinese", (done) => {
|
||||
@@ -2546,7 +2546,7 @@ describe("server", () => {
|
||||
j,
|
||||
((value) => {
|
||||
j++;
|
||||
})(j)
|
||||
})(j),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2585,7 +2585,7 @@ describe("server", () => {
|
||||
j,
|
||||
((value) => {
|
||||
j++;
|
||||
})(j)
|
||||
})(j),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2999,7 +2999,7 @@ describe("server", () => {
|
||||
done();
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -3031,7 +3031,7 @@ describe("server", () => {
|
||||
done();
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -3174,11 +3174,11 @@ describe("server", () => {
|
||||
.on("error", done)
|
||||
.on("end", done)
|
||||
.resume();
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -3212,11 +3212,11 @@ describe("server", () => {
|
||||
.on("error", done)
|
||||
.on("end", done)
|
||||
.resume();
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -3250,11 +3250,11 @@ describe("server", () => {
|
||||
(res) => {
|
||||
expect(res.headers["content-encoding"]).to.equal("gzip");
|
||||
done();
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -3284,11 +3284,11 @@ describe("server", () => {
|
||||
(res) => {
|
||||
expect(res.headers["content-encoding"]).to.be(undefined);
|
||||
done();
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -3318,11 +3318,11 @@ describe("server", () => {
|
||||
(res) => {
|
||||
expect(res.headers["content-encoding"]).to.be(undefined);
|
||||
done();
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -3352,11 +3352,11 @@ describe("server", () => {
|
||||
(res) => {
|
||||
expect(res.headers["content-encoding"]).to.be(undefined);
|
||||
done();
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -3599,20 +3599,20 @@ describe("server", () => {
|
||||
expect(res.status).to.be(204);
|
||||
expect(res.body).to.be.empty();
|
||||
expect(res.header["access-control-allow-origin"]).to.be(
|
||||
"http://engine.io"
|
||||
"http://engine.io",
|
||||
);
|
||||
expect(res.header["access-control-allow-methods"]).to.be(
|
||||
"GET,HEAD,PUT,PATCH,POST,DELETE"
|
||||
"GET,HEAD,PUT,PATCH,POST,DELETE",
|
||||
);
|
||||
expect(res.header["access-control-allow-headers"]).to.be(
|
||||
"my-header"
|
||||
"my-header",
|
||||
);
|
||||
expect(res.header["access-control-allow-credentials"]).to.be(
|
||||
"true"
|
||||
"true",
|
||||
);
|
||||
done();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -3629,20 +3629,20 @@ describe("server", () => {
|
||||
expect(res.status).to.be(200);
|
||||
expect(res.body).to.be.empty();
|
||||
expect(res.header["access-control-allow-origin"]).to.be(
|
||||
"http://engine.io"
|
||||
"http://engine.io",
|
||||
);
|
||||
expect(res.header["access-control-allow-methods"]).to.be(
|
||||
undefined
|
||||
undefined,
|
||||
);
|
||||
expect(res.header["access-control-allow-headers"]).to.be(
|
||||
undefined
|
||||
undefined,
|
||||
);
|
||||
expect(res.header["access-control-allow-credentials"]).to.be(
|
||||
"true"
|
||||
"true",
|
||||
);
|
||||
done();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -3663,14 +3663,14 @@ describe("server", () => {
|
||||
expect(res.status).to.be(204);
|
||||
expect(res.body).to.be.empty();
|
||||
expect(res.header["access-control-allow-origin"]).to.be(
|
||||
undefined
|
||||
undefined,
|
||||
);
|
||||
expect(res.header["access-control-allow-credentials"]).to.be(
|
||||
undefined
|
||||
undefined,
|
||||
);
|
||||
done();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -3697,24 +3697,24 @@ describe("server", () => {
|
||||
expect(res.status).to.be(200);
|
||||
expect(res.body).to.be.empty();
|
||||
expect(res.header["access-control-allow-origin"]).to.be(
|
||||
"http://good-domain.com"
|
||||
"http://good-domain.com",
|
||||
);
|
||||
expect(res.header["access-control-allow-methods"]).to.be(
|
||||
"GET,PUT,POST"
|
||||
"GET,PUT,POST",
|
||||
);
|
||||
expect(res.header["access-control-allow-headers"]).to.be(
|
||||
"my-header"
|
||||
"my-header",
|
||||
);
|
||||
expect(res.header["access-control-expose-headers"]).to.be(
|
||||
"my-exposed-header"
|
||||
"my-exposed-header",
|
||||
);
|
||||
expect(res.header["access-control-allow-credentials"]).to.be(
|
||||
"true"
|
||||
"true",
|
||||
);
|
||||
expect(res.header["access-control-max-age"]).to.be("123");
|
||||
done();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -3739,7 +3739,7 @@ describe("server", () => {
|
||||
client.close();
|
||||
done();
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -3767,7 +3767,7 @@ describe("server", () => {
|
||||
done();
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -31,7 +31,7 @@ async function setupServer(opts, cb) {
|
||||
[{ shortName: "CN", value: "localhost" }],
|
||||
{
|
||||
days: 14, // the total length of the validity period MUST NOT exceed two weeks (https://w3c.github.io/webtransport/#custom-certificate-requirements)
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const engine = new eio.Server(opts);
|
||||
@@ -76,7 +76,7 @@ function setup(opts, cb) {
|
||||
value: certificate.hash,
|
||||
},
|
||||
],
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
await client.ready;
|
||||
@@ -106,7 +106,7 @@ describe("WebTransport", () => {
|
||||
setupServer({}, async ({ engine, h3Server, certificate }) => {
|
||||
const partialDone = createPartialDone(
|
||||
() => success(engine, h3Server, done),
|
||||
2
|
||||
2,
|
||||
);
|
||||
|
||||
engine.on("connection", (socket) => {
|
||||
@@ -123,7 +123,7 @@ describe("WebTransport", () => {
|
||||
value: certificate.hash,
|
||||
},
|
||||
],
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
await client.ready;
|
||||
@@ -188,7 +188,7 @@ describe("WebTransport", () => {
|
||||
value: certificate.hash,
|
||||
},
|
||||
],
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
await client.ready;
|
||||
@@ -216,14 +216,14 @@ describe("WebTransport", () => {
|
||||
|
||||
await writer.write(Uint8Array.of(31));
|
||||
await writer.write(
|
||||
TEXT_ENCODER.encode(`0{"sid":"${payload.sid}"}`)
|
||||
TEXT_ENCODER.encode(`0{"sid":"${payload.sid}"}`),
|
||||
);
|
||||
await writer.write(Uint8Array.of(6));
|
||||
await writer.write(TEXT_ENCODER.encode(`2probe`));
|
||||
await writer.write(Uint8Array.of(1));
|
||||
await writer.write(TEXT_ENCODER.encode(`5`));
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -242,7 +242,7 @@ describe("WebTransport", () => {
|
||||
value: certificate.hash,
|
||||
},
|
||||
],
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
await client.ready;
|
||||
@@ -250,7 +250,7 @@ describe("WebTransport", () => {
|
||||
client.closed.then(() => {
|
||||
success(engine, h3Server, done);
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -269,7 +269,7 @@ describe("WebTransport", () => {
|
||||
value: certificate.hash,
|
||||
},
|
||||
],
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
await client.ready;
|
||||
@@ -281,7 +281,7 @@ describe("WebTransport", () => {
|
||||
client.closed.then(() => {
|
||||
success(engine, h3Server, done);
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -304,7 +304,7 @@ describe("WebTransport", () => {
|
||||
}
|
||||
|
||||
success(engine, h3Server, done);
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -322,7 +322,7 @@ describe("WebTransport", () => {
|
||||
});
|
||||
|
||||
client.closed.then(() => success(engine, h3Server, partialDone));
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
@@ -440,7 +440,7 @@ describe("WebTransport", () => {
|
||||
|
||||
const header = await reader.read();
|
||||
expect(header.value).to.eql(
|
||||
Uint8Array.of(255, 0, 0, 0, 0, 0, 15, 66, 64)
|
||||
Uint8Array.of(255, 0, 0, 0, 0, 0, 15, 66, 64),
|
||||
);
|
||||
|
||||
const chunk1 = await reader.read();
|
||||
|
||||
@@ -203,7 +203,7 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
"[%s] new event of type %d from %s",
|
||||
this.uid,
|
||||
message.type,
|
||||
message.uid
|
||||
message.uid,
|
||||
);
|
||||
|
||||
switch (message.type) {
|
||||
@@ -217,7 +217,7 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
debug(
|
||||
"[%s] waiting for %d client acknowledgements",
|
||||
this.uid,
|
||||
clientCount
|
||||
clientCount,
|
||||
);
|
||||
this.publishResponse(message.uid, {
|
||||
type: MessageType.BROADCAST_CLIENT_COUNT,
|
||||
@@ -231,7 +231,7 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
debug(
|
||||
"[%s] received acknowledgement with value %j",
|
||||
this.uid,
|
||||
arg
|
||||
arg,
|
||||
);
|
||||
this.publishResponse(message.uid, {
|
||||
type: MessageType.BROADCAST_ACK,
|
||||
@@ -240,7 +240,7 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
packet: arg,
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
} else {
|
||||
const packet = message.data.packet;
|
||||
@@ -264,7 +264,7 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
case MessageType.DISCONNECT_SOCKETS:
|
||||
super.disconnectSockets(
|
||||
decodeOptions(message.data.opts),
|
||||
message.data.close
|
||||
message.data.close,
|
||||
);
|
||||
break;
|
||||
|
||||
@@ -272,7 +272,7 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
debug(
|
||||
"[%s] calling fetchSockets with opts %j",
|
||||
this.uid,
|
||||
message.data.opts
|
||||
message.data.opts,
|
||||
);
|
||||
super
|
||||
.fetchSockets(decodeOptions(message.data.opts))
|
||||
@@ -356,7 +356,7 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
"[%s] received response %s to request %s",
|
||||
this.uid,
|
||||
response.type,
|
||||
requestId
|
||||
requestId,
|
||||
);
|
||||
|
||||
switch (response.type) {
|
||||
@@ -381,7 +381,7 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
|
||||
request.current++;
|
||||
response.data.sockets.forEach((socket) =>
|
||||
request.responses.push(socket)
|
||||
request.responses.push(socket),
|
||||
);
|
||||
|
||||
if (request.current === request.expected) {
|
||||
@@ -433,7 +433,7 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
return debug(
|
||||
"[%s] error while broadcasting message: %s",
|
||||
this.uid,
|
||||
e.message
|
||||
e.message,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -453,7 +453,7 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
private addOffsetIfNecessary(
|
||||
packet: any,
|
||||
opts: BroadcastOptions,
|
||||
offset: Offset
|
||||
offset: Offset,
|
||||
) {
|
||||
if (!this.nsp.server.opts.connectionStateRecovery) {
|
||||
return;
|
||||
@@ -473,7 +473,7 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
packet: any,
|
||||
opts: BroadcastOptions,
|
||||
clientCountCallback: (clientCount: number) => void,
|
||||
ack: (...args: any[]) => void
|
||||
ack: (...args: any[]) => void,
|
||||
) {
|
||||
const onlyLocal = opts?.flags?.local;
|
||||
if (!onlyLocal) {
|
||||
@@ -582,8 +582,8 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
if (storedRequest) {
|
||||
reject(
|
||||
new Error(
|
||||
`timeout reached: only ${storedRequest.current} responses received out of ${storedRequest.expected}`
|
||||
)
|
||||
`timeout reached: only ${storedRequest.current} responses received out of ${storedRequest.expected}`,
|
||||
),
|
||||
);
|
||||
this.requests.delete(requestId);
|
||||
}
|
||||
@@ -627,7 +627,7 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
debug(
|
||||
'[%s] waiting for %d responses to "serverSideEmit" request',
|
||||
this.uid,
|
||||
expectedResponseCount
|
||||
expectedResponseCount,
|
||||
);
|
||||
|
||||
if (expectedResponseCount <= 0) {
|
||||
@@ -641,9 +641,9 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
if (storedRequest) {
|
||||
ack(
|
||||
new Error(
|
||||
`timeout reached: only ${storedRequest.current} responses received out of ${storedRequest.expected}`
|
||||
`timeout reached: only ${storedRequest.current} responses received out of ${storedRequest.expected}`,
|
||||
),
|
||||
storedRequest.responses
|
||||
storedRequest.responses,
|
||||
);
|
||||
this.requests.delete(requestId);
|
||||
}
|
||||
@@ -669,7 +669,7 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
}
|
||||
|
||||
protected publish(
|
||||
message: DistributiveOmit<ClusterMessage, "nsp" | "uid">
|
||||
message: DistributiveOmit<ClusterMessage, "nsp" | "uid">,
|
||||
): void {
|
||||
this.publishAndReturnOffset(message).catch((err) => {
|
||||
debug("[%s] error while publishing message: %s", this.uid, err);
|
||||
@@ -677,7 +677,7 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
}
|
||||
|
||||
protected publishAndReturnOffset(
|
||||
message: DistributiveOmit<ClusterMessage, "nsp" | "uid">
|
||||
message: DistributiveOmit<ClusterMessage, "nsp" | "uid">,
|
||||
) {
|
||||
(message as ClusterMessage).uid = this.uid;
|
||||
(message as ClusterMessage).nsp = this.nsp.name;
|
||||
@@ -695,14 +695,14 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
|
||||
protected publishResponse(
|
||||
requesterUid: ServerId,
|
||||
response: Omit<ClusterResponse, "nsp" | "uid">
|
||||
response: Omit<ClusterResponse, "nsp" | "uid">,
|
||||
) {
|
||||
(response as ClusterResponse).uid = this.uid;
|
||||
(response as ClusterResponse).nsp = this.nsp.name;
|
||||
this.doPublishResponse(requesterUid, response as ClusterResponse).catch(
|
||||
(err) => {
|
||||
debug("[%s] error while publishing response: %s", this.uid, err);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -715,7 +715,7 @@ export abstract class ClusterAdapter extends Adapter {
|
||||
*/
|
||||
protected abstract doPublishResponse(
|
||||
requesterUid: ServerId,
|
||||
response: ClusterResponse
|
||||
response: ClusterResponse,
|
||||
): Promise<void>;
|
||||
}
|
||||
|
||||
@@ -742,7 +742,7 @@ export abstract class ClusterAdapterWithHeartbeat extends ClusterAdapter {
|
||||
heartbeatInterval: 5_000,
|
||||
heartbeatTimeout: 10_000,
|
||||
},
|
||||
opts
|
||||
opts,
|
||||
);
|
||||
this.cleanupTimer = setInterval(() => {
|
||||
const now = Date.now();
|
||||
@@ -798,7 +798,7 @@ export abstract class ClusterAdapterWithHeartbeat extends ClusterAdapter {
|
||||
"[%s] new event of type %d from %s",
|
||||
this.uid,
|
||||
message.type,
|
||||
message.uid
|
||||
message.uid,
|
||||
);
|
||||
|
||||
switch (message.type) {
|
||||
@@ -846,7 +846,7 @@ export abstract class ClusterAdapterWithHeartbeat extends ClusterAdapter {
|
||||
debug(
|
||||
'[%s] waiting for %d responses to "serverSideEmit" request',
|
||||
this.uid,
|
||||
expectedResponseCount
|
||||
expectedResponseCount,
|
||||
);
|
||||
|
||||
if (expectedResponseCount <= 0) {
|
||||
@@ -860,9 +860,9 @@ export abstract class ClusterAdapterWithHeartbeat extends ClusterAdapter {
|
||||
if (storedRequest) {
|
||||
ack(
|
||||
new Error(
|
||||
`timeout reached: missing ${storedRequest.missingUids.size} responses`
|
||||
`timeout reached: missing ${storedRequest.missingUids.size} responses`,
|
||||
),
|
||||
storedRequest.responses
|
||||
storedRequest.responses,
|
||||
);
|
||||
this.customRequests.delete(requestId);
|
||||
}
|
||||
@@ -911,8 +911,8 @@ export abstract class ClusterAdapterWithHeartbeat extends ClusterAdapter {
|
||||
if (storedRequest) {
|
||||
reject(
|
||||
new Error(
|
||||
`timeout reached: missing ${storedRequest.missingUids.size} responses`
|
||||
)
|
||||
`timeout reached: missing ${storedRequest.missingUids.size} responses`,
|
||||
),
|
||||
);
|
||||
this.customRequests.delete(requestId);
|
||||
}
|
||||
@@ -944,7 +944,7 @@ export abstract class ClusterAdapterWithHeartbeat extends ClusterAdapter {
|
||||
"[%s] received response %s to request %s",
|
||||
this.uid,
|
||||
response.type,
|
||||
requestId
|
||||
requestId,
|
||||
);
|
||||
|
||||
switch (response.type) {
|
||||
@@ -956,7 +956,7 @@ export abstract class ClusterAdapterWithHeartbeat extends ClusterAdapter {
|
||||
}
|
||||
|
||||
(response.data.sockets as any[]).forEach((socket) =>
|
||||
request.responses.push(socket)
|
||||
request.responses.push(socket),
|
||||
);
|
||||
|
||||
request.missingUids.delete(response.uid);
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
const alphabet =
|
||||
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_".split(
|
||||
""
|
||||
"",
|
||||
),
|
||||
length = 64,
|
||||
map = {};
|
||||
|
||||
@@ -198,7 +198,7 @@ export class Adapter extends EventEmitter {
|
||||
packet: any,
|
||||
opts: BroadcastOptions,
|
||||
clientCountCallback: (clientCount: number) => void,
|
||||
ack: (...args: any[]) => void
|
||||
ack: (...args: any[]) => void,
|
||||
) {
|
||||
const flags = opts.flags || {};
|
||||
const packetOpts = {
|
||||
@@ -375,7 +375,7 @@ export class Adapter extends EventEmitter {
|
||||
*/
|
||||
public serverSideEmit(packet: any[]): void {
|
||||
console.warn(
|
||||
"this adapter does not support the serverSideEmit() functionality"
|
||||
"this adapter does not support the serverSideEmit() functionality",
|
||||
);
|
||||
}
|
||||
|
||||
@@ -391,7 +391,7 @@ export class Adapter extends EventEmitter {
|
||||
*/
|
||||
public restoreSession(
|
||||
pid: PrivateSessionId,
|
||||
offset: string
|
||||
offset: string,
|
||||
): Promise<Session> {
|
||||
return null;
|
||||
}
|
||||
@@ -444,7 +444,7 @@ export class SessionAwareAdapter extends Adapter {
|
||||
|
||||
override restoreSession(
|
||||
pid: PrivateSessionId,
|
||||
offset: string
|
||||
offset: string,
|
||||
): Promise<Session> {
|
||||
const session = this.sessions.get(pid);
|
||||
if (!session) {
|
||||
@@ -500,7 +500,7 @@ export class SessionAwareAdapter extends Adapter {
|
||||
|
||||
function shouldIncludePacket(
|
||||
sessionRooms: Room[],
|
||||
opts: BroadcastOptions
|
||||
opts: BroadcastOptions,
|
||||
): boolean {
|
||||
const included =
|
||||
opts.rooms.size === 0 || sessionRooms.some((room) => opts.rooms.has(room));
|
||||
|
||||
@@ -16,7 +16,10 @@ const NODES_COUNT = 3;
|
||||
class EventEmitterAdapter extends ClusterAdapterWithHeartbeat {
|
||||
private offset = 1;
|
||||
|
||||
constructor(nsp, readonly eventBus) {
|
||||
constructor(
|
||||
nsp,
|
||||
readonly eventBus,
|
||||
) {
|
||||
super(nsp, {});
|
||||
this.eventBus.on("message", (message) => {
|
||||
this.onMessage(message as ClusterMessage);
|
||||
@@ -30,7 +33,7 @@ class EventEmitterAdapter extends ClusterAdapterWithHeartbeat {
|
||||
|
||||
protected doPublishResponse(
|
||||
requesterUid: string,
|
||||
response: ClusterResponse
|
||||
response: ClusterResponse,
|
||||
): Promise<void> {
|
||||
this.eventBus.emit("message", response);
|
||||
return Promise.resolve();
|
||||
|
||||
@@ -153,7 +153,7 @@ describe("socket.io-adapter", () => {
|
||||
expect(opts.wsPreEncodedFrame.length).to.eql(2);
|
||||
expect(opts.wsPreEncodedFrame[0]).to.eql(Buffer.from([129, 4]));
|
||||
expect(opts.wsPreEncodedFrame[1]).to.eql(
|
||||
Buffer.from([52, 49, 50, 51])
|
||||
Buffer.from([52, 49, 50, 51]),
|
||||
);
|
||||
},
|
||||
},
|
||||
@@ -352,7 +352,7 @@ describe("socket.io-adapter", () => {
|
||||
{
|
||||
rooms: new Set(),
|
||||
except: new Set(),
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const offset = packetData[1];
|
||||
@@ -398,7 +398,7 @@ describe("socket.io-adapter", () => {
|
||||
{
|
||||
rooms: new Set(),
|
||||
except: new Set(),
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
adapter.broadcast(
|
||||
@@ -410,7 +410,7 @@ describe("socket.io-adapter", () => {
|
||||
{
|
||||
rooms: new Set(),
|
||||
except: new Set(),
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
adapter.broadcast(
|
||||
@@ -422,7 +422,7 @@ describe("socket.io-adapter", () => {
|
||||
{
|
||||
rooms: new Set(["r1"]),
|
||||
except: new Set(),
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
adapter.broadcast(
|
||||
@@ -434,7 +434,7 @@ describe("socket.io-adapter", () => {
|
||||
{
|
||||
rooms: new Set(),
|
||||
except: new Set(["r2"]),
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
adapter.broadcast(
|
||||
@@ -446,7 +446,7 @@ describe("socket.io-adapter", () => {
|
||||
{
|
||||
rooms: new Set(),
|
||||
except: new Set(["r3"]),
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
adapter.broadcast(
|
||||
@@ -459,7 +459,7 @@ describe("socket.io-adapter", () => {
|
||||
{
|
||||
rooms: new Set(),
|
||||
except: new Set(),
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
adapter.broadcast(
|
||||
@@ -471,7 +471,7 @@ describe("socket.io-adapter", () => {
|
||||
{
|
||||
rooms: new Set(),
|
||||
except: new Set(),
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
adapter.broadcast(
|
||||
@@ -486,7 +486,7 @@ describe("socket.io-adapter", () => {
|
||||
flags: {
|
||||
volatile: true,
|
||||
},
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
const offset = packetData[1];
|
||||
|
||||
@@ -25,11 +25,11 @@ const cache: Record<string, Manager> = {};
|
||||
function lookup(opts?: Partial<ManagerOptions & SocketOptions>): Socket;
|
||||
function lookup(
|
||||
uri: string,
|
||||
opts?: Partial<ManagerOptions & SocketOptions>
|
||||
opts?: Partial<ManagerOptions & SocketOptions>,
|
||||
): Socket;
|
||||
function lookup(
|
||||
uri?: string | Partial<ManagerOptions & SocketOptions>,
|
||||
opts?: Partial<ManagerOptions & SocketOptions>
|
||||
opts?: Partial<ManagerOptions & SocketOptions>,
|
||||
): Socket {
|
||||
if (typeof uri === "object") {
|
||||
opts = uri;
|
||||
|
||||
@@ -100,7 +100,7 @@ interface ManagerReservedEvents {
|
||||
|
||||
export class Manager<
|
||||
ListenEvents extends EventsMap = DefaultEventsMap,
|
||||
EmitEvents extends EventsMap = ListenEvents
|
||||
EmitEvents extends EventsMap = ListenEvents,
|
||||
> extends Emitter<{}, {}, ManagerReservedEvents> {
|
||||
/**
|
||||
* The Engine.IO client instance
|
||||
@@ -152,11 +152,11 @@ export class Manager<
|
||||
constructor(uri?: string, opts?: Partial<ManagerOptions>);
|
||||
constructor(
|
||||
uri?: string | Partial<ManagerOptions>,
|
||||
opts?: Partial<ManagerOptions>
|
||||
opts?: Partial<ManagerOptions>,
|
||||
);
|
||||
constructor(
|
||||
uri?: string | Partial<ManagerOptions>,
|
||||
opts?: Partial<ManagerOptions>
|
||||
opts?: Partial<ManagerOptions>,
|
||||
) {
|
||||
super();
|
||||
if (uri && "object" === typeof uri) {
|
||||
@@ -405,7 +405,7 @@ export class Manager<
|
||||
on(socket, "error", this.onerror.bind(this)),
|
||||
on(socket, "close", this.onclose.bind(this)),
|
||||
// @ts-ignore
|
||||
on(this.decoder, "decoded", this.ondecoded.bind(this))
|
||||
on(this.decoder, "decoded", this.ondecoded.bind(this)),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import { Emitter } from "@socket.io/component-emitter";
|
||||
export function on(
|
||||
obj: Emitter<any, any>,
|
||||
ev: string,
|
||||
fn: (err?: any) => any
|
||||
fn: (err?: any) => any,
|
||||
): VoidFunction {
|
||||
obj.on(ev, fn);
|
||||
return function subDestroy(): void {
|
||||
|
||||
@@ -116,7 +116,7 @@ interface SocketReservedEvents {
|
||||
connect_error: (err: Error) => void;
|
||||
disconnect: (
|
||||
reason: Socket.DisconnectReason,
|
||||
description?: DisconnectDescription
|
||||
description?: DisconnectDescription,
|
||||
) => void;
|
||||
}
|
||||
|
||||
@@ -146,7 +146,7 @@ interface SocketReservedEvents {
|
||||
*/
|
||||
export class Socket<
|
||||
ListenEvents extends EventsMap = DefaultEventsMap,
|
||||
EmitEvents extends EventsMap = ListenEvents
|
||||
EmitEvents extends EventsMap = ListenEvents,
|
||||
> extends Emitter<ListenEvents, EmitEvents, SocketReservedEvents> {
|
||||
public readonly io: Manager<ListenEvents, EmitEvents>;
|
||||
|
||||
@@ -554,7 +554,7 @@ export class Socket<
|
||||
debug(
|
||||
"packet [%d] is discarded after %d tries",
|
||||
packet.id,
|
||||
packet.tryCount
|
||||
packet.tryCount,
|
||||
);
|
||||
this._queue.shift();
|
||||
if (ack) {
|
||||
@@ -591,7 +591,7 @@ export class Socket<
|
||||
if (packet.pending && !force) {
|
||||
debug(
|
||||
"packet [%d] has already been sent and is waiting for an ack",
|
||||
packet.id
|
||||
packet.id,
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -665,7 +665,7 @@ export class Socket<
|
||||
*/
|
||||
private onclose(
|
||||
reason: Socket.DisconnectReason,
|
||||
description?: DisconnectDescription
|
||||
description?: DisconnectDescription,
|
||||
): void {
|
||||
debug("close (%s)", reason);
|
||||
this.connected = false;
|
||||
@@ -683,7 +683,7 @@ export class Socket<
|
||||
private _clearAcks() {
|
||||
Object.keys(this.acks).forEach((id) => {
|
||||
const isBuffered = this.sendBuffer.some(
|
||||
(packet) => String(packet.id) === id
|
||||
(packet) => String(packet.id) === id,
|
||||
);
|
||||
if (!isBuffered) {
|
||||
// note: handlers that do not accept an error as first argument are ignored here
|
||||
@@ -716,8 +716,8 @@ export class Socket<
|
||||
this.emitReserved(
|
||||
"connect_error",
|
||||
new Error(
|
||||
"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"
|
||||
)
|
||||
"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)",
|
||||
),
|
||||
);
|
||||
}
|
||||
break;
|
||||
@@ -967,7 +967,7 @@ export class Socket<
|
||||
* @returns self
|
||||
*/
|
||||
public timeout(
|
||||
timeout: number
|
||||
timeout: number,
|
||||
): Socket<ListenEvents, DecorateAcknowledgements<EmitEvents>> {
|
||||
this.flags.timeout = timeout;
|
||||
return this;
|
||||
|
||||
@@ -39,7 +39,7 @@ type ParsedUrl = {
|
||||
export function url(
|
||||
uri: string | ParsedUrl,
|
||||
path: string = "",
|
||||
loc?: Location
|
||||
loc?: Location,
|
||||
): ParsedUrl {
|
||||
let obj = uri as ParsedUrl;
|
||||
|
||||
|
||||
@@ -576,7 +576,7 @@ describe("connection", () => {
|
||||
reconnectionAttempts: 2,
|
||||
});
|
||||
let delay = Math.floor(
|
||||
manager.reconnectionDelay() * manager.randomizationFactor() * 0.5
|
||||
manager.reconnectionDelay() * manager.randomizationFactor() * 0.5,
|
||||
);
|
||||
delay = Math.max(delay, 10);
|
||||
|
||||
|
||||
@@ -336,7 +336,7 @@ describe("socket", () => {
|
||||
const socket = io(BASE_URL + "/no", { forceNew: true });
|
||||
|
||||
expect(() => socket.emit("disconnecting", "goodbye")).to.throwException(
|
||||
/"disconnecting" is a reserved event name/
|
||||
/"disconnecting" is a reserved event name/,
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -92,7 +92,7 @@ describe("typed events", () => {
|
||||
const value = await socket.emitWithAck(
|
||||
"ackFromClientSingleArg",
|
||||
"1",
|
||||
2
|
||||
2,
|
||||
);
|
||||
expectType<any>(value);
|
||||
|
||||
@@ -155,12 +155,12 @@ describe("typed events", () => {
|
||||
ackFromClient: (
|
||||
a: string,
|
||||
b: number,
|
||||
ack: (c: string, d: boolean) => void
|
||||
ack: (c: string, d: boolean) => void,
|
||||
) => void;
|
||||
ackFromClientSingleArg: (
|
||||
a: string,
|
||||
b: number,
|
||||
ack: (c: string) => void
|
||||
ack: (c: string) => void,
|
||||
) => void;
|
||||
ackFromClientNoArg: (ack: () => void) => void;
|
||||
}
|
||||
@@ -232,7 +232,7 @@ describe("typed events", () => {
|
||||
const value = await socket.emitWithAck(
|
||||
"ackFromClientSingleArg",
|
||||
"1",
|
||||
2
|
||||
2,
|
||||
);
|
||||
expectType<string>(value);
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ if (process.env.CI === "true") {
|
||||
{
|
||||
appiumVersion: "2.0.0",
|
||||
},
|
||||
BASE_SAUCE_OPTIONS
|
||||
BASE_SAUCE_OPTIONS,
|
||||
),
|
||||
},
|
||||
{
|
||||
@@ -92,7 +92,7 @@ if (process.env.CI === "true") {
|
||||
{
|
||||
appiumVersion: "2.0.0",
|
||||
},
|
||||
BASE_SAUCE_OPTIONS
|
||||
BASE_SAUCE_OPTIONS,
|
||||
),
|
||||
},
|
||||
];
|
||||
|
||||
@@ -107,7 +107,7 @@ type ClusterRequest = {
|
||||
function isClientLockable(
|
||||
client: Socket,
|
||||
transportName: string,
|
||||
lockType: "read" | "write"
|
||||
lockType: "read" | "write",
|
||||
) {
|
||||
switch (transportName) {
|
||||
case "polling":
|
||||
@@ -166,7 +166,7 @@ export abstract class ClusterEngine extends Server {
|
||||
noopUpgradeInterval: 200,
|
||||
delayedConnectionTimeout: 300,
|
||||
},
|
||||
opts
|
||||
opts,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -188,7 +188,7 @@ export abstract class ClusterEngine extends Server {
|
||||
const success = isClientLockable(
|
||||
client,
|
||||
transportName,
|
||||
message.data.type
|
||||
message.data.type,
|
||||
);
|
||||
|
||||
this.publishMessage({
|
||||
@@ -340,7 +340,7 @@ export abstract class ClusterEngine extends Server {
|
||||
private _forwardFlushWhenPolling(
|
||||
client: Socket,
|
||||
sid: SessionId,
|
||||
senderId: NodeId
|
||||
senderId: NodeId,
|
||||
) {
|
||||
// @ts-expect-error req is private
|
||||
client.transport.req = true;
|
||||
@@ -370,7 +370,7 @@ export abstract class ClusterEngine extends Server {
|
||||
private _forwardFlushWhenWebSocket(
|
||||
client: Socket,
|
||||
sid: SessionId,
|
||||
senderId: NodeId
|
||||
senderId: NodeId,
|
||||
) {
|
||||
client.transport.writable = true;
|
||||
client.transport.send = (packets) => {
|
||||
@@ -392,7 +392,7 @@ export abstract class ClusterEngine extends Server {
|
||||
override verify(
|
||||
req: IncomingMessage & { _query: Record<string, string> },
|
||||
upgrade: boolean,
|
||||
fn: (errorCode?: number, context?: any) => void
|
||||
fn: (errorCode?: number, context?: any) => void,
|
||||
): void {
|
||||
super.verify(req, upgrade, (errorCode: number, errorContext: any) => {
|
||||
if (errorCode !== Server.errors.UNKNOWN_SID) {
|
||||
@@ -419,7 +419,7 @@ export abstract class ClusterEngine extends Server {
|
||||
};
|
||||
|
||||
this._acquireLock(sid, transportName, lockType, onSuccess, () =>
|
||||
fn(errorCode, errorContext)
|
||||
fn(errorCode, errorContext),
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -429,7 +429,7 @@ export abstract class ClusterEngine extends Server {
|
||||
transportName: string,
|
||||
lockType: "read" | "write",
|
||||
onSuccess: (senderId: NodeId) => void,
|
||||
onError: () => void
|
||||
onError: () => void,
|
||||
) {
|
||||
const requestId = ++this._requestCount as RequestId;
|
||||
|
||||
@@ -460,27 +460,27 @@ export abstract class ClusterEngine extends Server {
|
||||
sid: SessionId,
|
||||
transport: Transport,
|
||||
lockType: "read" | "write",
|
||||
senderId: NodeId
|
||||
senderId: NodeId,
|
||||
) {
|
||||
if (lockType === "read") {
|
||||
this._remoteTransports.set(sid, transport);
|
||||
}
|
||||
|
||||
transport.on("packet", async (packet: Packet) =>
|
||||
this._onPacket(sid, senderId, packet)
|
||||
this._onPacket(sid, senderId, packet),
|
||||
);
|
||||
transport.once("error", () =>
|
||||
this._onClose(sid, senderId, "transport error")
|
||||
this._onClose(sid, senderId, "transport error"),
|
||||
);
|
||||
transport.once("close", () =>
|
||||
this._onClose(sid, senderId, "transport close")
|
||||
this._onClose(sid, senderId, "transport close"),
|
||||
);
|
||||
}
|
||||
|
||||
private _tryUpgrade(
|
||||
transport: Transport,
|
||||
onSuccess: () => void,
|
||||
onError: () => void
|
||||
onError: () => void,
|
||||
) {
|
||||
debug("starting upgrade process");
|
||||
|
||||
@@ -532,7 +532,7 @@ export abstract class ClusterEngine extends Server {
|
||||
private _onClose(
|
||||
sid: SessionId,
|
||||
senderId: NodeId,
|
||||
reason: "transport error" | "transport close"
|
||||
reason: "transport error" | "transport close",
|
||||
) {
|
||||
this.publishMessage({
|
||||
senderId: this._nodeId,
|
||||
@@ -563,7 +563,7 @@ export abstract class ClusterEngine extends Server {
|
||||
() => this._onUpgradeSuccess(sid, transport, req, senderId),
|
||||
() => {
|
||||
debug("upgrade failure");
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -571,7 +571,7 @@ export abstract class ClusterEngine extends Server {
|
||||
sid: SessionId,
|
||||
transport: Transport,
|
||||
req: any,
|
||||
senderId: NodeId
|
||||
senderId: NodeId,
|
||||
) {
|
||||
debug("upgrade success");
|
||||
this._hookTransport(sid, transport, "read", senderId);
|
||||
@@ -655,7 +655,7 @@ export abstract class ClusterEngine extends Server {
|
||||
|
||||
socket[kDelayedTimer] = setTimeout(
|
||||
() => this._doConnect(socket),
|
||||
this._opts.delayedConnectionTimeout
|
||||
this._opts.delayedConnectionTimeout,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -664,7 +664,7 @@ export abstract class ClusterEngine extends Server {
|
||||
return;
|
||||
}
|
||||
debug(
|
||||
"the client has not upgraded yet, so the connection process is completed here"
|
||||
"the client has not upgraded yet, so the connection process is completed here",
|
||||
);
|
||||
socket[kDelayed] = false;
|
||||
socket.off("packet", socket[kPacketListener]);
|
||||
|
||||
@@ -31,7 +31,7 @@ function channelName(prefix: string, nodeId?: string) {
|
||||
export function setupPrimaryWithRedis(
|
||||
pubClient: any,
|
||||
subClient: any,
|
||||
opts?: PrimaryWithRedisOptions
|
||||
opts?: PrimaryWithRedisOptions,
|
||||
) {
|
||||
const primaryId = randomUUID();
|
||||
const prefix = opts?.channelPrefix || "engine.io";
|
||||
@@ -81,7 +81,7 @@ export function setupPrimaryWithRedis(
|
||||
"message",
|
||||
(
|
||||
sourceWorker,
|
||||
message: Message & { _source?: string; _primaryId?: string }
|
||||
message: Message & { _source?: string; _primaryId?: string },
|
||||
) => {
|
||||
if (message._source !== MESSAGE_SOURCE) {
|
||||
debug("ignore message from unknown source");
|
||||
@@ -117,7 +117,7 @@ export function setupPrimaryWithRedis(
|
||||
|
||||
debug("publish message to channel %s", channel);
|
||||
pubClient.publish(channel, encode(message));
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -179,14 +179,14 @@ const RETURN_BUFFERS = true;
|
||||
function SUBSCRIBE(
|
||||
redisClient: any,
|
||||
channels: string[],
|
||||
listener: (message: Buffer) => void
|
||||
listener: (message: Buffer) => void,
|
||||
) {
|
||||
if (isRedisClient(redisClient)) {
|
||||
redisClient.subscribe(channels, listener, RETURN_BUFFERS);
|
||||
} else {
|
||||
redisClient.subscribe(channels);
|
||||
redisClient.on("messageBuffer", (_channel: Buffer, message: Buffer) =>
|
||||
listener(message)
|
||||
listener(message),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,10 @@ import { type ServerOptions } from "engine.io";
|
||||
import { url, handshake } from "./util";
|
||||
|
||||
class InMemoryEngine extends ClusterEngine {
|
||||
constructor(readonly eventBus: EventEmitter, opts?: ServerOptions) {
|
||||
constructor(
|
||||
readonly eventBus: EventEmitter,
|
||||
opts?: ServerOptions,
|
||||
) {
|
||||
super(opts);
|
||||
eventBus.on("message", (message) => this.onMessage(message));
|
||||
}
|
||||
@@ -290,7 +293,7 @@ describe("in-memory", () => {
|
||||
const sid = await handshake(3000);
|
||||
|
||||
const socket = new WebSocket(
|
||||
`ws://localhost:3001/engine.io/?EIO=4&transport=websocket&sid=${sid}`
|
||||
`ws://localhost:3001/engine.io/?EIO=4&transport=websocket&sid=${sid}`,
|
||||
);
|
||||
|
||||
socket.onopen = () => {
|
||||
@@ -338,7 +341,7 @@ describe("in-memory", () => {
|
||||
expect(res.status).to.eql(200);
|
||||
|
||||
const socket = new WebSocket(
|
||||
`ws://localhost:3001/engine.io/?EIO=4&transport=websocket&sid=${sid}`
|
||||
`ws://localhost:3001/engine.io/?EIO=4&transport=websocket&sid=${sid}`,
|
||||
);
|
||||
|
||||
socket.onopen = () => {
|
||||
|
||||
@@ -5,12 +5,12 @@ const BlobBuilderImpl =
|
||||
typeof BlobBuilder !== "undefined"
|
||||
? BlobBuilder
|
||||
: typeof WebKitBlobBuilder !== "undefined"
|
||||
? WebKitBlobBuilder
|
||||
: typeof MSBlobBuilder !== "undefined"
|
||||
? MSBlobBuilder
|
||||
: typeof MozBlobBuilder !== "undefined"
|
||||
? MozBlobBuilder
|
||||
: false;
|
||||
? WebKitBlobBuilder
|
||||
: typeof MSBlobBuilder !== "undefined"
|
||||
? MSBlobBuilder
|
||||
: typeof MozBlobBuilder !== "undefined"
|
||||
? MozBlobBuilder
|
||||
: false;
|
||||
|
||||
describe("Blob", () => {
|
||||
it("encodes a Blob", () => {
|
||||
|
||||
@@ -15,12 +15,12 @@ const BlobBuilderImpl =
|
||||
typeof BlobBuilder !== "undefined"
|
||||
? BlobBuilder
|
||||
: typeof WebKitBlobBuilder !== "undefined"
|
||||
? WebKitBlobBuilder
|
||||
: typeof MSBlobBuilder !== "undefined"
|
||||
? MSBlobBuilder
|
||||
: typeof MozBlobBuilder !== "undefined"
|
||||
? MozBlobBuilder
|
||||
: false;
|
||||
? WebKitBlobBuilder
|
||||
: typeof MSBlobBuilder !== "undefined"
|
||||
? MSBlobBuilder
|
||||
: typeof MozBlobBuilder !== "undefined"
|
||||
? MozBlobBuilder
|
||||
: false;
|
||||
const blobBuilderSupported =
|
||||
!!BlobBuilderImpl &&
|
||||
!!BlobBuilderImpl.prototype.append &&
|
||||
|
||||
@@ -110,7 +110,7 @@ describe("socket.io-parser", () => {
|
||||
it("throw an error upon parsing error", () => {
|
||||
const isInvalidPayload = (str) =>
|
||||
expect(() => new Decoder().add(str)).to.throwException(
|
||||
/^invalid payload$/
|
||||
/^invalid payload$/,
|
||||
);
|
||||
|
||||
isInvalidPayload('442["some","data"');
|
||||
@@ -126,11 +126,11 @@ describe("socket.io-parser", () => {
|
||||
isInvalidPayload('2["disconnect","123"]');
|
||||
|
||||
expect(() => new Decoder().add("999")).to.throwException(
|
||||
/^unknown packet type 9$/
|
||||
/^unknown packet type 9$/,
|
||||
);
|
||||
|
||||
expect(() => new Decoder().add(999)).to.throwException(
|
||||
/^Unknown type: 999$/
|
||||
/^Unknown type: 999$/,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -154,7 +154,7 @@ describe("socket.io-parser", () => {
|
||||
isPacketValid({
|
||||
type: 0,
|
||||
nsp: "/",
|
||||
})
|
||||
}),
|
||||
).to.eql(true);
|
||||
|
||||
expect(
|
||||
@@ -162,7 +162,7 @@ describe("socket.io-parser", () => {
|
||||
type: 0,
|
||||
nsp: "/admin",
|
||||
data: "invalid",
|
||||
})
|
||||
}),
|
||||
).to.eql(false);
|
||||
|
||||
expect(
|
||||
@@ -170,7 +170,7 @@ describe("socket.io-parser", () => {
|
||||
type: 0,
|
||||
nsp: "/",
|
||||
data: [],
|
||||
})
|
||||
}),
|
||||
).to.eql(false);
|
||||
|
||||
expect(
|
||||
@@ -178,7 +178,7 @@ describe("socket.io-parser", () => {
|
||||
type: 1,
|
||||
nsp: "/admin",
|
||||
data: {},
|
||||
})
|
||||
}),
|
||||
).to.eql(false);
|
||||
|
||||
expect(
|
||||
@@ -186,7 +186,7 @@ describe("socket.io-parser", () => {
|
||||
type: 2,
|
||||
nsp: "/admin",
|
||||
data: "invalid",
|
||||
})
|
||||
}),
|
||||
).to.eql(false);
|
||||
|
||||
expect(
|
||||
@@ -194,7 +194,7 @@ describe("socket.io-parser", () => {
|
||||
type: 2,
|
||||
nsp: "/admin",
|
||||
data: {},
|
||||
})
|
||||
}),
|
||||
).to.eql(false);
|
||||
|
||||
expect(
|
||||
@@ -202,7 +202,7 @@ describe("socket.io-parser", () => {
|
||||
type: 2,
|
||||
nsp: "/",
|
||||
data: { toString: "foo" },
|
||||
})
|
||||
}),
|
||||
).to.eql(false);
|
||||
|
||||
expect(
|
||||
@@ -210,7 +210,7 @@ describe("socket.io-parser", () => {
|
||||
type: 2,
|
||||
nsp: "/",
|
||||
data: [true, "foo"],
|
||||
})
|
||||
}),
|
||||
).to.eql(false);
|
||||
|
||||
expect(
|
||||
@@ -218,7 +218,7 @@ describe("socket.io-parser", () => {
|
||||
type: 2,
|
||||
nsp: "/",
|
||||
data: [null, "bar"],
|
||||
})
|
||||
}),
|
||||
).to.eql(false);
|
||||
|
||||
expect(
|
||||
@@ -226,7 +226,7 @@ describe("socket.io-parser", () => {
|
||||
type: 2,
|
||||
nsp: "/",
|
||||
data: ["connect"],
|
||||
})
|
||||
}),
|
||||
).to.eql(false);
|
||||
|
||||
expect(
|
||||
@@ -234,7 +234,7 @@ describe("socket.io-parser", () => {
|
||||
type: 2,
|
||||
nsp: "/",
|
||||
data: ["disconnect", "123"],
|
||||
})
|
||||
}),
|
||||
).to.eql(false);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -72,7 +72,7 @@ if (process.env.CI === "true") {
|
||||
{
|
||||
appiumVersion: "2.0.0",
|
||||
},
|
||||
BASE_SAUCE_OPTIONS
|
||||
BASE_SAUCE_OPTIONS,
|
||||
),
|
||||
},
|
||||
{
|
||||
@@ -85,7 +85,7 @@ if (process.env.CI === "true") {
|
||||
{
|
||||
appiumVersion: "2.0.0",
|
||||
},
|
||||
BASE_SAUCE_OPTIONS
|
||||
BASE_SAUCE_OPTIONS,
|
||||
),
|
||||
},
|
||||
];
|
||||
|
||||
@@ -23,7 +23,7 @@ export class BroadcastOperator<EmitEvents extends EventsMap, SocketData>
|
||||
private readonly exceptRooms: Set<Room> = new Set<Room>(),
|
||||
private readonly flags: BroadcastFlags & {
|
||||
expectSingleResponse?: boolean;
|
||||
} = {}
|
||||
} = {},
|
||||
) {}
|
||||
|
||||
/**
|
||||
@@ -53,7 +53,7 @@ export class BroadcastOperator<EmitEvents extends EventsMap, SocketData>
|
||||
this.adapter,
|
||||
rooms,
|
||||
this.exceptRooms,
|
||||
this.flags
|
||||
this.flags,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ export class BroadcastOperator<EmitEvents extends EventsMap, SocketData>
|
||||
this.adapter,
|
||||
this.rooms,
|
||||
exceptRooms,
|
||||
this.flags
|
||||
this.flags,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ export class BroadcastOperator<EmitEvents extends EventsMap, SocketData>
|
||||
this.adapter,
|
||||
this.rooms,
|
||||
this.exceptRooms,
|
||||
flags
|
||||
flags,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -137,7 +137,7 @@ export class BroadcastOperator<EmitEvents extends EventsMap, SocketData>
|
||||
this.adapter,
|
||||
this.rooms,
|
||||
this.exceptRooms,
|
||||
flags
|
||||
flags,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -156,7 +156,7 @@ export class BroadcastOperator<EmitEvents extends EventsMap, SocketData>
|
||||
this.adapter,
|
||||
this.rooms,
|
||||
this.exceptRooms,
|
||||
flags
|
||||
flags,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -276,7 +276,7 @@ export class BroadcastOperator<EmitEvents extends EventsMap, SocketData>
|
||||
// each client sends an acknowledgement
|
||||
responses.push(clientResponse);
|
||||
checkCompleteness();
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
this.adapter.serverCount().then((serverCount) => {
|
||||
@@ -326,7 +326,7 @@ export class BroadcastOperator<EmitEvents extends EventsMap, SocketData>
|
||||
public allSockets(): Promise<Set<SocketId>> {
|
||||
if (!this.adapter) {
|
||||
throw new Error(
|
||||
"No adapter for this namespace, are you trying to get the list of clients of a dynamic namespace?"
|
||||
"No adapter for this namespace, are you trying to get the list of clients of a dynamic namespace?",
|
||||
);
|
||||
}
|
||||
return this.adapter.sockets(this.rooms);
|
||||
@@ -371,7 +371,7 @@ export class BroadcastOperator<EmitEvents extends EventsMap, SocketData>
|
||||
} else {
|
||||
return new RemoteSocket(
|
||||
this.adapter,
|
||||
socket as SocketDetails<SocketData>
|
||||
socket as SocketDetails<SocketData>,
|
||||
);
|
||||
}
|
||||
});
|
||||
@@ -400,7 +400,7 @@ export class BroadcastOperator<EmitEvents extends EventsMap, SocketData>
|
||||
except: this.exceptRooms,
|
||||
flags: this.flags,
|
||||
},
|
||||
Array.isArray(room) ? room : [room]
|
||||
Array.isArray(room) ? room : [room],
|
||||
);
|
||||
}
|
||||
|
||||
@@ -425,7 +425,7 @@ export class BroadcastOperator<EmitEvents extends EventsMap, SocketData>
|
||||
except: this.exceptRooms,
|
||||
flags: this.flags,
|
||||
},
|
||||
Array.isArray(room) ? room : [room]
|
||||
Array.isArray(room) ? room : [room],
|
||||
);
|
||||
}
|
||||
|
||||
@@ -450,7 +450,7 @@ export class BroadcastOperator<EmitEvents extends EventsMap, SocketData>
|
||||
except: this.exceptRooms,
|
||||
flags: this.flags,
|
||||
},
|
||||
close
|
||||
close,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -489,7 +489,7 @@ export class RemoteSocket<EmitEvents extends EventsMap, SocketData>
|
||||
new Set(),
|
||||
{
|
||||
expectSingleResponse: true, // so that remoteSocket.emit() with acknowledgement behaves like socket.emit()
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -517,7 +517,7 @@ export class RemoteSocket<EmitEvents extends EventsMap, SocketData>
|
||||
* @param timeout
|
||||
*/
|
||||
public timeout(
|
||||
timeout: number
|
||||
timeout: number,
|
||||
): BroadcastOperator<DecorateAcknowledgements<EmitEvents>, SocketData> {
|
||||
return this.operator.timeout(timeout);
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ export class Client<
|
||||
ListenEvents extends EventsMap,
|
||||
EmitEvents extends EventsMap,
|
||||
ServerSideEvents extends EventsMap,
|
||||
SocketData = any
|
||||
SocketData = any,
|
||||
> {
|
||||
public readonly conn: RawSocket;
|
||||
|
||||
@@ -61,7 +61,7 @@ export class Client<
|
||||
*/
|
||||
constructor(
|
||||
server: Server<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
|
||||
conn: any
|
||||
conn: any,
|
||||
) {
|
||||
this.server = server;
|
||||
this.conn = conn;
|
||||
@@ -126,7 +126,7 @@ export class Client<
|
||||
(
|
||||
dynamicNspName:
|
||||
| Namespace<ListenEvents, EmitEvents, ServerSideEvents, SocketData>
|
||||
| false
|
||||
| false,
|
||||
) => {
|
||||
if (dynamicNspName) {
|
||||
this.doConnect(name, auth);
|
||||
@@ -140,7 +140,7 @@ export class Client<
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -185,7 +185,7 @@ export class Client<
|
||||
* @private
|
||||
*/
|
||||
_remove(
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
|
||||
): void {
|
||||
if (this.sockets.has(socket.id)) {
|
||||
const nsp = this.sockets.get(socket.id)!.nsp.name;
|
||||
@@ -229,11 +229,11 @@ export class Client<
|
||||
|
||||
private writeToEngine(
|
||||
encodedPackets: Array<string | Buffer>,
|
||||
opts: WriteOptions
|
||||
opts: WriteOptions,
|
||||
): void {
|
||||
if (opts.volatile && !this.conn.transport.writable) {
|
||||
debug(
|
||||
"volatile packet is discarded since the transport is not currently writable"
|
||||
"volatile packet is discarded since the transport is not currently writable",
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -316,7 +316,7 @@ export class Client<
|
||||
*/
|
||||
private onclose(
|
||||
reason: CloseReason | "forced server close",
|
||||
description?: any
|
||||
description?: any,
|
||||
): void {
|
||||
debug("client close with reason %s", reason);
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ const dotMapRegex = /\.map/;
|
||||
type ParentNspNameMatchFn = (
|
||||
name: string,
|
||||
auth: { [key: string]: any },
|
||||
fn: (err: Error | null, success: boolean) => void
|
||||
fn: (err: Error | null, success: boolean) => void,
|
||||
) => void;
|
||||
|
||||
type AdapterConstructor = typeof Adapter | ((nsp: Namespace) => Adapter);
|
||||
@@ -144,7 +144,7 @@ export class Server<
|
||||
ListenEvents extends EventsMap = DefaultEventsMap,
|
||||
EmitEvents extends EventsMap = ListenEvents,
|
||||
ServerSideEvents extends EventsMap = DefaultEventsMap,
|
||||
SocketData = any
|
||||
SocketData = any,
|
||||
> extends StrictEventEmitter<
|
||||
ServerSideEvents,
|
||||
RemoveAcknowledgements<EmitEvents>,
|
||||
@@ -218,7 +218,7 @@ export class Server<
|
||||
private _corsMiddleware: (
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse,
|
||||
next: () => void
|
||||
next: () => void,
|
||||
) => void;
|
||||
|
||||
/**
|
||||
@@ -231,11 +231,11 @@ export class Server<
|
||||
constructor(srv?: TServerInstance | number, opts?: Partial<ServerOptions>);
|
||||
constructor(
|
||||
srv: undefined | Partial<ServerOptions> | TServerInstance | number,
|
||||
opts?: Partial<ServerOptions>
|
||||
opts?: Partial<ServerOptions>,
|
||||
);
|
||||
constructor(
|
||||
srv: undefined | Partial<ServerOptions> | TServerInstance | number,
|
||||
opts: Partial<ServerOptions> = {}
|
||||
opts: Partial<ServerOptions> = {},
|
||||
) {
|
||||
super();
|
||||
if (
|
||||
@@ -258,7 +258,7 @@ export class Server<
|
||||
maxDisconnectionDuration: 2 * 60 * 1000,
|
||||
skipMiddlewares: true,
|
||||
},
|
||||
opts.connectionStateRecovery
|
||||
opts.connectionStateRecovery,
|
||||
);
|
||||
this.adapter(opts.adapter || SessionAwareAdapter);
|
||||
} else {
|
||||
@@ -308,8 +308,8 @@ export class Server<
|
||||
fn: (
|
||||
nsp:
|
||||
| Namespace<ListenEvents, EmitEvents, ServerSideEvents, SocketData>
|
||||
| false
|
||||
) => void
|
||||
| false,
|
||||
) => void,
|
||||
): void {
|
||||
if (this.parentNsps.size === 0) return fn(false);
|
||||
|
||||
@@ -356,7 +356,7 @@ export class Server<
|
||||
this.clientPathRegex = new RegExp(
|
||||
"^" +
|
||||
escapedPath +
|
||||
"/socket\\.io(\\.msgpack|\\.esm)?(\\.min)?\\.js(\\.map)?(?:\\?|$)"
|
||||
"/socket\\.io(\\.msgpack|\\.esm)?(\\.min)?\\.js(\\.map)?(?:\\?|$)",
|
||||
);
|
||||
return this;
|
||||
}
|
||||
@@ -383,7 +383,7 @@ export class Server<
|
||||
public adapter(): AdapterConstructor | undefined;
|
||||
public adapter(v: AdapterConstructor): this;
|
||||
public adapter(
|
||||
v?: AdapterConstructor
|
||||
v?: AdapterConstructor,
|
||||
): AdapterConstructor | undefined | this {
|
||||
if (!arguments.length) return this._adapter;
|
||||
this._adapter = v;
|
||||
@@ -402,7 +402,7 @@ export class Server<
|
||||
*/
|
||||
public listen(
|
||||
srv: TServerInstance | number,
|
||||
opts: Partial<ServerOptions> = {}
|
||||
opts: Partial<ServerOptions> = {},
|
||||
): this {
|
||||
return this.attach(srv, opts);
|
||||
}
|
||||
@@ -416,7 +416,7 @@ export class Server<
|
||||
*/
|
||||
public attach(
|
||||
srv: TServerInstance | number,
|
||||
opts: Partial<ServerOptions> = {}
|
||||
opts: Partial<ServerOptions> = {},
|
||||
): this {
|
||||
if ("function" == typeof srv) {
|
||||
const msg =
|
||||
@@ -501,7 +501,7 @@ export class Server<
|
||||
res.writeHeader("cache-control", "public, max-age=0");
|
||||
res.writeHeader(
|
||||
"content-type",
|
||||
"application/" + (isMap ? "json" : "javascript") + "; charset=utf-8"
|
||||
"application/" + (isMap ? "json" : "javascript") + "; charset=utf-8",
|
||||
);
|
||||
res.writeHeader("etag", expectedEtag);
|
||||
|
||||
@@ -522,7 +522,7 @@ export class Server<
|
||||
*/
|
||||
private initEngine(
|
||||
srv: TServerInstance,
|
||||
opts: EngineOptions & AttachOptions
|
||||
opts: EngineOptions & AttachOptions,
|
||||
): void {
|
||||
// initialize engine
|
||||
debug("creating engine.io instance with opts %j", opts);
|
||||
@@ -598,7 +598,7 @@ export class Server<
|
||||
res.setHeader("Cache-Control", "public, max-age=0");
|
||||
res.setHeader(
|
||||
"Content-Type",
|
||||
"application/" + (isMap ? "json" : "javascript") + "; charset=utf-8"
|
||||
"application/" + (isMap ? "json" : "javascript") + "; charset=utf-8",
|
||||
);
|
||||
res.setHeader("ETag", expectedEtag);
|
||||
|
||||
@@ -614,10 +614,10 @@ export class Server<
|
||||
private static sendFile(
|
||||
filename: string,
|
||||
req: http.IncomingMessage,
|
||||
res: http.ServerResponse
|
||||
res: http.ServerResponse,
|
||||
): void {
|
||||
const readStream = createReadStream(
|
||||
path.join(__dirname, "../client-dist/", filename)
|
||||
path.join(__dirname, "../client-dist/", filename),
|
||||
);
|
||||
const encoding = accepts(req).encodings(["br", "gzip", "deflate"]);
|
||||
|
||||
@@ -696,8 +696,8 @@ export class Server<
|
||||
public of(
|
||||
name: string | RegExp | ParentNspNameMatchFn,
|
||||
fn?: (
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>
|
||||
) => void
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
|
||||
) => void,
|
||||
): Namespace<ListenEvents, EmitEvents, ServerSideEvents, SocketData> {
|
||||
if (typeof name === "function" || name instanceof RegExp) {
|
||||
const parentNsp = new ParentNamespace(this);
|
||||
@@ -707,7 +707,7 @@ export class Server<
|
||||
} else {
|
||||
this.parentNsps.set(
|
||||
(nsp, conn, next) => next(null, (name as RegExp).test(nsp)),
|
||||
parentNsp
|
||||
parentNsp,
|
||||
);
|
||||
this.parentNamespacesFromRegExp.set(name, parentNsp);
|
||||
}
|
||||
@@ -754,7 +754,7 @@ export class Server<
|
||||
});
|
||||
|
||||
await nsp.adapter.close();
|
||||
})
|
||||
}),
|
||||
);
|
||||
|
||||
this.engine.close();
|
||||
@@ -783,8 +783,8 @@ export class Server<
|
||||
public use(
|
||||
fn: (
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
|
||||
next: (err?: ExtendedError) => void
|
||||
) => void
|
||||
next: (err?: ExtendedError) => void,
|
||||
) => void,
|
||||
): this {
|
||||
this.sockets.use(fn);
|
||||
return this;
|
||||
@@ -1093,11 +1093,11 @@ export class Server<
|
||||
* Expose main namespace (/).
|
||||
*/
|
||||
|
||||
const emitterMethods = Object.keys(EventEmitter.prototype).filter(function (
|
||||
key
|
||||
) {
|
||||
return typeof EventEmitter.prototype[key] === "function";
|
||||
});
|
||||
const emitterMethods = Object.keys(EventEmitter.prototype).filter(
|
||||
function (key) {
|
||||
return typeof EventEmitter.prototype[key] === "function";
|
||||
},
|
||||
);
|
||||
|
||||
emitterMethods.forEach(function (fn) {
|
||||
Server.prototype[fn] = function () {
|
||||
|
||||
@@ -31,13 +31,13 @@ export interface NamespaceReservedEventsMap<
|
||||
ListenEvents extends EventsMap,
|
||||
EmitEvents extends EventsMap,
|
||||
ServerSideEvents extends EventsMap,
|
||||
SocketData
|
||||
SocketData,
|
||||
> {
|
||||
connect: (
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
|
||||
) => void;
|
||||
connection: (
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
|
||||
) => void;
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ export interface ServerReservedEventsMap<
|
||||
ListenEvents extends EventsMap,
|
||||
EmitEvents extends EventsMap,
|
||||
ServerSideEvents extends EventsMap,
|
||||
SocketData
|
||||
SocketData,
|
||||
> extends NamespaceReservedEventsMap<
|
||||
ListenEvents,
|
||||
EmitEvents,
|
||||
@@ -53,7 +53,12 @@ export interface ServerReservedEventsMap<
|
||||
SocketData
|
||||
> {
|
||||
new_namespace: (
|
||||
namespace: Namespace<ListenEvents, EmitEvents, ServerSideEvents, SocketData>
|
||||
namespace: Namespace<
|
||||
ListenEvents,
|
||||
EmitEvents,
|
||||
ServerSideEvents,
|
||||
SocketData
|
||||
>,
|
||||
) => void;
|
||||
}
|
||||
|
||||
@@ -118,7 +123,7 @@ export class Namespace<
|
||||
ListenEvents extends EventsMap = DefaultEventsMap,
|
||||
EmitEvents extends EventsMap = ListenEvents,
|
||||
ServerSideEvents extends EventsMap = DefaultEventsMap,
|
||||
SocketData = any
|
||||
SocketData = any,
|
||||
> extends StrictEventEmitter<
|
||||
ServerSideEvents,
|
||||
RemoveAcknowledgements<EmitEvents>,
|
||||
@@ -149,7 +154,7 @@ export class Namespace<
|
||||
_fns: Array<
|
||||
(
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
|
||||
next: (err?: ExtendedError) => void
|
||||
next: (err?: ExtendedError) => void,
|
||||
) => void
|
||||
> = [];
|
||||
|
||||
@@ -164,7 +169,7 @@ export class Namespace<
|
||||
*/
|
||||
constructor(
|
||||
server: Server<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
|
||||
name: string
|
||||
name: string,
|
||||
) {
|
||||
super();
|
||||
this.server = server;
|
||||
@@ -200,8 +205,8 @@ export class Namespace<
|
||||
public use(
|
||||
fn: (
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
|
||||
next: (err?: ExtendedError) => void
|
||||
) => void
|
||||
next: (err?: ExtendedError) => void,
|
||||
) => void,
|
||||
): this {
|
||||
this._fns.push(fn);
|
||||
return this;
|
||||
@@ -216,7 +221,7 @@ export class Namespace<
|
||||
*/
|
||||
private run(
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
|
||||
fn: (err: ExtendedError | null) => void
|
||||
fn: (err: ExtendedError | null) => void,
|
||||
) {
|
||||
const fns = this._fns.slice(0);
|
||||
if (!fns.length) return fn(null);
|
||||
@@ -316,8 +321,8 @@ export class Namespace<
|
||||
client: Client<ListenEvents, EmitEvents, ServerSideEvents>,
|
||||
auth: Record<string, unknown>,
|
||||
fn: (
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>
|
||||
) => void
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
|
||||
) => void,
|
||||
) {
|
||||
debug("adding socket to nsp %s", this.name);
|
||||
const socket = await this._createSocket(client, auth);
|
||||
@@ -359,7 +364,7 @@ export class Namespace<
|
||||
|
||||
private async _createSocket(
|
||||
client: Client<ListenEvents, EmitEvents, ServerSideEvents>,
|
||||
auth: Record<string, unknown>
|
||||
auth: Record<string, unknown>,
|
||||
) {
|
||||
const sessionId = auth.pid;
|
||||
const offset = auth.offset;
|
||||
@@ -386,8 +391,8 @@ export class Namespace<
|
||||
private _doConnect(
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
|
||||
fn: (
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>
|
||||
) => void
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
|
||||
) => void,
|
||||
) {
|
||||
// track socket
|
||||
this.sockets.set(socket.id, socket);
|
||||
@@ -410,7 +415,7 @@ export class Namespace<
|
||||
* @private
|
||||
*/
|
||||
_remove(
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>
|
||||
socket: Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
|
||||
): void {
|
||||
if (this.sockets.has(socket.id)) {
|
||||
this.sockets.delete(socket.id);
|
||||
@@ -447,7 +452,7 @@ export class Namespace<
|
||||
): boolean {
|
||||
return new BroadcastOperator<EmitEvents, SocketData>(this.adapter).emit(
|
||||
ev,
|
||||
...args
|
||||
...args,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -563,7 +568,7 @@ export class Namespace<
|
||||
});
|
||||
this.serverSideEmit(
|
||||
ev,
|
||||
...(args as any[] as EventParams<ServerSideEvents, Ev>)
|
||||
...(args as any[] as EventParams<ServerSideEvents, Ev>),
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -587,7 +592,7 @@ export class Namespace<
|
||||
*/
|
||||
public allSockets(): Promise<Set<SocketId>> {
|
||||
return new BroadcastOperator<EmitEvents, SocketData>(
|
||||
this.adapter
|
||||
this.adapter,
|
||||
).allSockets();
|
||||
}
|
||||
|
||||
@@ -697,7 +702,7 @@ export class Namespace<
|
||||
*/
|
||||
public fetchSockets() {
|
||||
return new BroadcastOperator<EmitEvents, SocketData>(
|
||||
this.adapter
|
||||
this.adapter,
|
||||
).fetchSockets();
|
||||
}
|
||||
|
||||
@@ -719,7 +724,7 @@ export class Namespace<
|
||||
*/
|
||||
public socketsJoin(room: Room | Room[]) {
|
||||
return new BroadcastOperator<EmitEvents, SocketData>(
|
||||
this.adapter
|
||||
this.adapter,
|
||||
).socketsJoin(room);
|
||||
}
|
||||
|
||||
@@ -741,7 +746,7 @@ export class Namespace<
|
||||
*/
|
||||
public socketsLeave(room: Room | Room[]) {
|
||||
return new BroadcastOperator<EmitEvents, SocketData>(
|
||||
this.adapter
|
||||
this.adapter,
|
||||
).socketsLeave(room);
|
||||
}
|
||||
|
||||
@@ -763,7 +768,7 @@ export class Namespace<
|
||||
*/
|
||||
public disconnectSockets(close: boolean = false) {
|
||||
return new BroadcastOperator<EmitEvents, SocketData>(
|
||||
this.adapter
|
||||
this.adapter,
|
||||
).disconnectSockets(close);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ export class ParentNamespace<
|
||||
ListenEvents extends EventsMap = DefaultEventsMap,
|
||||
EmitEvents extends EventsMap = ListenEvents,
|
||||
ServerSideEvents extends EventsMap = DefaultEventsMap,
|
||||
SocketData = any
|
||||
SocketData = any,
|
||||
> extends Namespace<ListenEvents, EmitEvents, ServerSideEvents, SocketData> {
|
||||
private static count: number = 0;
|
||||
private readonly children: Set<
|
||||
@@ -39,7 +39,7 @@ export class ParentNamespace<
|
||||
> = new Set();
|
||||
|
||||
constructor(
|
||||
server: Server<ListenEvents, EmitEvents, ServerSideEvents, SocketData>
|
||||
server: Server<ListenEvents, EmitEvents, ServerSideEvents, SocketData>,
|
||||
) {
|
||||
super(server, "/_" + ParentNamespace.count++);
|
||||
}
|
||||
@@ -63,16 +63,16 @@ export class ParentNamespace<
|
||||
}
|
||||
|
||||
createChild(
|
||||
name: string
|
||||
name: string,
|
||||
): Namespace<ListenEvents, EmitEvents, ServerSideEvents, SocketData> {
|
||||
debug("creating child namespace %s", name);
|
||||
const namespace = new Namespace(this.server, name);
|
||||
namespace._fns = this._fns.slice(0);
|
||||
this.listeners("connect").forEach((listener) =>
|
||||
namespace.on("connect", listener)
|
||||
namespace.on("connect", listener),
|
||||
);
|
||||
this.listeners("connection").forEach((listener) =>
|
||||
namespace.on("connection", listener)
|
||||
namespace.on("connection", listener),
|
||||
);
|
||||
this.children.add(namespace);
|
||||
|
||||
|
||||
@@ -66,11 +66,11 @@ export interface SocketReservedEventsMap {
|
||||
export interface EventEmitterReservedEventsMap {
|
||||
newListener: (
|
||||
eventName: string | Symbol,
|
||||
listener: (...args: any[]) => void
|
||||
listener: (...args: any[]) => void,
|
||||
) => void;
|
||||
removeListener: (
|
||||
eventName: string | Symbol,
|
||||
listener: (...args: any[]) => void
|
||||
listener: (...args: any[]) => void,
|
||||
) => void;
|
||||
}
|
||||
|
||||
@@ -180,7 +180,7 @@ export class Socket<
|
||||
ListenEvents extends EventsMap = DefaultEventsMap,
|
||||
EmitEvents extends EventsMap = ListenEvents,
|
||||
ServerSideEvents extends EventsMap = DefaultEventsMap,
|
||||
SocketData = any
|
||||
SocketData = any,
|
||||
> extends StrictEventEmitter<
|
||||
ListenEvents,
|
||||
EmitEvents,
|
||||
@@ -252,7 +252,7 @@ export class Socket<
|
||||
readonly nsp: Namespace<ListenEvents, EmitEvents, ServerSideEvents>,
|
||||
readonly client: Client<ListenEvents, EmitEvents, ServerSideEvents>,
|
||||
auth: Record<string, unknown>,
|
||||
previousSession?: Session
|
||||
previousSession?: Session,
|
||||
) {
|
||||
super();
|
||||
this.server = nsp.server;
|
||||
@@ -529,7 +529,7 @@ export class Socket<
|
||||
*/
|
||||
private packet(
|
||||
packet: Omit<Packet, "nsp"> & Partial<Pick<Packet, "nsp">>,
|
||||
opts: any = {}
|
||||
opts: any = {},
|
||||
): void {
|
||||
packet.nsp = this.nsp.name;
|
||||
opts.compress = false !== opts.compress;
|
||||
@@ -556,7 +556,7 @@ export class Socket<
|
||||
|
||||
return this.adapter.addAll(
|
||||
this.id,
|
||||
new Set(Array.isArray(rooms) ? rooms : [rooms])
|
||||
new Set(Array.isArray(rooms) ? rooms : [rooms]),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -893,7 +893,7 @@ export class Socket<
|
||||
* @returns self
|
||||
*/
|
||||
public timeout(
|
||||
timeout: number
|
||||
timeout: number,
|
||||
): Socket<
|
||||
ListenEvents,
|
||||
DecorateAcknowledgements<EmitEvents>,
|
||||
|
||||
@@ -27,7 +27,7 @@ export type EventNames<Map extends EventsMap> = keyof Map & (string | symbol);
|
||||
*/
|
||||
export type EventNamesWithAck<
|
||||
Map extends EventsMap,
|
||||
K extends EventNames<Map> = EventNames<Map>
|
||||
K extends EventNames<Map> = EventNames<Map>,
|
||||
> = IfAny<
|
||||
Last<Parameters<Map[K]>> | Map[K],
|
||||
K,
|
||||
@@ -48,17 +48,17 @@ export type EventNamesWithAck<
|
||||
*/
|
||||
export type EventNamesWithoutAck<
|
||||
Map extends EventsMap,
|
||||
K extends EventNames<Map> = EventNames<Map>
|
||||
K extends EventNames<Map> = EventNames<Map>,
|
||||
> = IfAny<
|
||||
Last<Parameters<Map[K]>> | Map[K],
|
||||
K,
|
||||
K extends (Parameters<Map[K]> extends never[] ? K : never)
|
||||
? K
|
||||
: K extends (
|
||||
Last<Parameters<Map[K]>> extends (...args: any[]) => any ? never : K
|
||||
)
|
||||
? K
|
||||
: never
|
||||
Last<Parameters<Map[K]>> extends (...args: any[]) => any ? never : K
|
||||
)
|
||||
? K
|
||||
: never
|
||||
>;
|
||||
|
||||
export type RemoveAcknowledgements<E extends EventsMap> = {
|
||||
@@ -67,7 +67,7 @@ export type RemoveAcknowledgements<E extends EventsMap> = {
|
||||
|
||||
export type EventNamesWithError<
|
||||
Map extends EventsMap,
|
||||
K extends EventNamesWithAck<Map> = EventNamesWithAck<Map>
|
||||
K extends EventNamesWithAck<Map> = EventNamesWithAck<Map>,
|
||||
> = IfAny<
|
||||
Last<Parameters<Map[K]>> | Map[K],
|
||||
K,
|
||||
@@ -81,7 +81,7 @@ export type EventNamesWithError<
|
||||
/** The tuple type representing the parameters of an event listener */
|
||||
export type EventParams<
|
||||
Map extends EventsMap,
|
||||
Ev extends EventNames<Map>
|
||||
Ev extends EventNames<Map>,
|
||||
> = Parameters<Map[Ev]>;
|
||||
|
||||
/**
|
||||
@@ -89,7 +89,7 @@ export type EventParams<
|
||||
*/
|
||||
export type ReservedOrUserEventNames<
|
||||
ReservedEventsMap extends EventsMap,
|
||||
UserEvents extends EventsMap
|
||||
UserEvents extends EventsMap,
|
||||
> = EventNames<ReservedEventsMap> | EventNames<UserEvents>;
|
||||
|
||||
/**
|
||||
@@ -99,13 +99,13 @@ export type ReservedOrUserEventNames<
|
||||
export type ReservedOrUserListener<
|
||||
ReservedEvents extends EventsMap,
|
||||
UserEvents extends EventsMap,
|
||||
Ev extends ReservedOrUserEventNames<ReservedEvents, UserEvents>
|
||||
Ev extends ReservedOrUserEventNames<ReservedEvents, UserEvents>,
|
||||
> = FallbackToUntypedListener<
|
||||
Ev extends EventNames<ReservedEvents>
|
||||
? ReservedEvents[Ev]
|
||||
: Ev extends EventNames<UserEvents>
|
||||
? UserEvents[Ev]
|
||||
: never
|
||||
? UserEvents[Ev]
|
||||
: never
|
||||
>;
|
||||
|
||||
/**
|
||||
@@ -145,7 +145,7 @@ export interface TypedEventBroadcaster<EmitEvents extends EventsMap> {
|
||||
export abstract class StrictEventEmitter<
|
||||
ListenEvents extends EventsMap,
|
||||
EmitEvents extends EventsMap,
|
||||
ReservedEvents extends EventsMap = {}
|
||||
ReservedEvents extends EventsMap = {},
|
||||
>
|
||||
extends EventEmitter
|
||||
implements TypedEventBroadcaster<EmitEvents>
|
||||
@@ -158,7 +158,7 @@ export abstract class StrictEventEmitter<
|
||||
*/
|
||||
on<Ev extends ReservedOrUserEventNames<ReservedEvents, ListenEvents>>(
|
||||
ev: Ev,
|
||||
listener: ReservedOrUserListener<ReservedEvents, ListenEvents, Ev>
|
||||
listener: ReservedOrUserListener<ReservedEvents, ListenEvents, Ev>,
|
||||
): this {
|
||||
return super.on(ev, listener);
|
||||
}
|
||||
@@ -171,7 +171,7 @@ export abstract class StrictEventEmitter<
|
||||
*/
|
||||
once<Ev extends ReservedOrUserEventNames<ReservedEvents, ListenEvents>>(
|
||||
ev: Ev,
|
||||
listener: ReservedOrUserListener<ReservedEvents, ListenEvents, Ev>
|
||||
listener: ReservedOrUserListener<ReservedEvents, ListenEvents, Ev>,
|
||||
): this {
|
||||
return super.once(ev, listener);
|
||||
}
|
||||
@@ -226,7 +226,7 @@ export abstract class StrictEventEmitter<
|
||||
* @returns Array of listeners subscribed to `event`
|
||||
*/
|
||||
listeners<Ev extends ReservedOrUserEventNames<ReservedEvents, ListenEvents>>(
|
||||
event: Ev
|
||||
event: Ev,
|
||||
): ReservedOrUserListener<ReservedEvents, ListenEvents, Ev>[] {
|
||||
return super.listeners(event) as ReservedOrUserListener<
|
||||
ReservedEvents,
|
||||
@@ -255,9 +255,8 @@ type IsAny<T> = 0 extends 1 & T ? true : false;
|
||||
* @author sindresorhus
|
||||
* @link https://github.com/sindresorhus/type-fest
|
||||
*/
|
||||
type IfAny<T, TypeIfAny = true, TypeIfNotAny = false> = IsAny<T> extends true
|
||||
? TypeIfAny
|
||||
: TypeIfNotAny;
|
||||
type IfAny<T, TypeIfAny = true, TypeIfNotAny = false> =
|
||||
IsAny<T> extends true ? TypeIfAny : TypeIfNotAny;
|
||||
|
||||
/**
|
||||
* Extracts the type of the last element of an array.
|
||||
@@ -271,10 +270,10 @@ export type Last<ValueType extends readonly unknown[]> =
|
||||
ValueType extends readonly [infer ElementType]
|
||||
? ElementType
|
||||
: ValueType extends readonly [infer _, ...infer Tail]
|
||||
? Last<Tail>
|
||||
: ValueType extends ReadonlyArray<infer ElementType>
|
||||
? ElementType
|
||||
: never;
|
||||
? Last<Tail>
|
||||
: ValueType extends ReadonlyArray<infer ElementType>
|
||||
? ElementType
|
||||
: never;
|
||||
|
||||
export type FirstNonErrorTuple<T extends unknown[]> = T[0] extends Error
|
||||
? T[1]
|
||||
@@ -316,13 +315,15 @@ type ExpectMultipleResponses<T extends any[]> = {
|
||||
? Params extends [Error]
|
||||
? (err: Error) => Result
|
||||
: Params extends [Error, ...infer Rest]
|
||||
? (
|
||||
err: Error,
|
||||
...args: InferFirstAndPreserveLabel<MultiplyArray<Rest>>
|
||||
) => Result
|
||||
: Params extends []
|
||||
? () => Result
|
||||
: (...args: InferFirstAndPreserveLabel<MultiplyArray<Params>>) => Result
|
||||
? (
|
||||
err: Error,
|
||||
...args: InferFirstAndPreserveLabel<MultiplyArray<Rest>>
|
||||
) => Result
|
||||
: Params extends []
|
||||
? () => Result
|
||||
: (
|
||||
...args: InferFirstAndPreserveLabel<MultiplyArray<Params>>
|
||||
) => Result
|
||||
: T[K];
|
||||
};
|
||||
/**
|
||||
|
||||
@@ -76,7 +76,7 @@ export function patchAdapter(app /* : TemplatedApp */) {
|
||||
app.publish(
|
||||
topic,
|
||||
isBinary ? encodedPacket : "4" + encodedPacket,
|
||||
isBinary
|
||||
isBinary,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -93,7 +93,7 @@ function subscribe(
|
||||
namespaceName: string,
|
||||
socket: Socket,
|
||||
isNew: boolean,
|
||||
rooms: Set<Room>
|
||||
rooms: Set<Room>,
|
||||
) {
|
||||
// @ts-ignore
|
||||
const sessionId = socket.conn.id;
|
||||
@@ -144,7 +144,7 @@ export function serveFile(res /* : HttpResponse */, filepath: string) {
|
||||
res.onWritable((offset) => {
|
||||
const [ok, done] = res.tryEnd(
|
||||
arrayBufferChunk.slice(offset - lastOffset),
|
||||
size
|
||||
size,
|
||||
);
|
||||
|
||||
if (!done && ok) {
|
||||
|
||||
@@ -59,7 +59,7 @@ describe("connection state recovery", () => {
|
||||
await eioPush(
|
||||
httpServer,
|
||||
newSid,
|
||||
`40{"pid":"${pid}","offset":"${offset}"}`
|
||||
`40{"pid":"${pid}","offset":"${offset}"}`,
|
||||
);
|
||||
|
||||
const payload = await eioPoll(httpServer, newSid);
|
||||
|
||||
@@ -22,11 +22,11 @@ describe("handshake", () => {
|
||||
expect(res.status).to.be(204);
|
||||
|
||||
expect(res.headers["access-control-allow-origin"]).to.be(
|
||||
"http://localhost:54023"
|
||||
"http://localhost:54023",
|
||||
);
|
||||
expect(res.headers["access-control-allow-methods"]).to.be("GET,POST");
|
||||
expect(res.headers["access-control-allow-headers"]).to.be(
|
||||
"content-type"
|
||||
"content-type",
|
||||
);
|
||||
expect(res.headers["access-control-allow-credentials"]).to.be("true");
|
||||
success(done, io);
|
||||
@@ -50,7 +50,7 @@ describe("handshake", () => {
|
||||
expect(res.status).to.be(200);
|
||||
|
||||
expect(res.headers["access-control-allow-origin"]).to.be(
|
||||
"http://localhost:54024"
|
||||
"http://localhost:54024",
|
||||
);
|
||||
expect(res.headers["access-control-allow-credentials"]).to.be("true");
|
||||
success(done, io);
|
||||
|
||||
@@ -17,7 +17,7 @@ describe("messaging many", () => {
|
||||
|
||||
const partialDone = createPartialDone(
|
||||
2,
|
||||
successFn(done, io, socket1, socket2, socket3)
|
||||
successFn(done, io, socket1, socket2, socket3),
|
||||
);
|
||||
|
||||
socket1.on("a", (a) => {
|
||||
@@ -53,7 +53,7 @@ describe("messaging many", () => {
|
||||
|
||||
const partialDone = createPartialDone(
|
||||
2,
|
||||
successFn(done, io, socket1, socket2, socket3)
|
||||
successFn(done, io, socket1, socket2, socket3),
|
||||
);
|
||||
|
||||
socket1.on("bin", (a) => {
|
||||
@@ -142,7 +142,7 @@ describe("messaging many", () => {
|
||||
|
||||
const partialDone = createPartialDone(
|
||||
2,
|
||||
successFn(done, io, socket1, socket2)
|
||||
successFn(done, io, socket1, socket2),
|
||||
);
|
||||
|
||||
socket2.on("a", () => {
|
||||
@@ -178,7 +178,7 @@ describe("messaging many", () => {
|
||||
|
||||
const partialDone = createPartialDone(
|
||||
2,
|
||||
successFn(done, io, socket1, socket2, socket3)
|
||||
successFn(done, io, socket1, socket2, socket3),
|
||||
);
|
||||
|
||||
socket1.emit("join", "woot");
|
||||
@@ -221,7 +221,7 @@ describe("messaging many", () => {
|
||||
|
||||
const partialDone = createPartialDone(
|
||||
2,
|
||||
successFn(done, io, socket1, socket2, socket3)
|
||||
successFn(done, io, socket1, socket2, socket3),
|
||||
);
|
||||
|
||||
socket1.emit("join", "woot");
|
||||
|
||||
@@ -179,7 +179,7 @@ describe("middleware", () => {
|
||||
|
||||
const partialDone = createPartialDone(
|
||||
2,
|
||||
successFn(done, io, socket1, socket2)
|
||||
successFn(done, io, socket1, socket2),
|
||||
);
|
||||
|
||||
io.of("/chat").use((socket, next) => {
|
||||
|
||||
@@ -389,7 +389,7 @@ describe("namespaces", () => {
|
||||
const io = new Server();
|
||||
|
||||
expect(() => io.emit("connect")).to.throwException(
|
||||
/"connect" is a reserved event name/
|
||||
/"connect" is a reserved event name/,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -660,7 +660,9 @@ describe("namespaces", () => {
|
||||
|
||||
c2.on("connect_error", () => {
|
||||
done(
|
||||
new Error("Client got error when connecting to dynamic namespace")
|
||||
new Error(
|
||||
"Client got error when connecting to dynamic namespace",
|
||||
),
|
||||
);
|
||||
});
|
||||
}, 100);
|
||||
|
||||
@@ -17,7 +17,7 @@ describe("server attachment", () => {
|
||||
.end((err, res) => {
|
||||
if (err) return done(err);
|
||||
expect(res.headers["content-type"]).to.be(
|
||||
"application/javascript; charset=utf-8"
|
||||
"application/javascript; charset=utf-8",
|
||||
);
|
||||
expect(res.headers.etag).to.be('"' + clientVersion + '"');
|
||||
expect(res.headers["x-sourcemap"]).to.be(undefined);
|
||||
@@ -36,7 +36,7 @@ describe("server attachment", () => {
|
||||
.end((err, res) => {
|
||||
if (err) return done(err);
|
||||
expect(res.headers["content-type"]).to.be(
|
||||
"application/json; charset=utf-8"
|
||||
"application/json; charset=utf-8",
|
||||
);
|
||||
expect(res.headers.etag).to.be('"' + clientVersion + '"');
|
||||
expect(res.text).to.match(/engine\.io/);
|
||||
@@ -48,7 +48,7 @@ describe("server attachment", () => {
|
||||
it("should serve client", testSource("socket.io.js"));
|
||||
it(
|
||||
"should serve client with query string",
|
||||
testSource("socket.io.js?buster=" + Date.now())
|
||||
testSource("socket.io.js?buster=" + Date.now()),
|
||||
);
|
||||
it("should serve source map", testSourceMap("socket.io.js.map"));
|
||||
it("should serve client (min)", testSource("socket.io.min.js"));
|
||||
@@ -99,7 +99,7 @@ describe("server attachment", () => {
|
||||
.end((err, res) => {
|
||||
if (err) return done(err);
|
||||
expect(res.headers["access-control-allow-origin"]).to.be(
|
||||
"https://good-origin.com"
|
||||
"https://good-origin.com",
|
||||
);
|
||||
expect(res.status).to.be(200);
|
||||
done();
|
||||
@@ -108,19 +108,19 @@ describe("server attachment", () => {
|
||||
|
||||
it(
|
||||
"should serve bundle with msgpack parser",
|
||||
testSource("socket.io.msgpack.min.js")
|
||||
testSource("socket.io.msgpack.min.js"),
|
||||
);
|
||||
|
||||
it(
|
||||
"should serve source map for bundle with msgpack parser",
|
||||
testSourceMap("socket.io.msgpack.min.js.map")
|
||||
testSourceMap("socket.io.msgpack.min.js.map"),
|
||||
);
|
||||
|
||||
it("should serve the ESM bundle", testSource("socket.io.esm.min.js"));
|
||||
|
||||
it(
|
||||
"should serve the source map for the ESM bundle",
|
||||
testSourceMap("socket.io.esm.min.js.map")
|
||||
testSourceMap("socket.io.esm.min.js.map"),
|
||||
);
|
||||
|
||||
it("should handle 304", (done) => {
|
||||
|
||||
@@ -123,7 +123,7 @@ describe("server", () => {
|
||||
const value1 = await s.emitWithAck(
|
||||
"ackFromServerSingleArg",
|
||||
true,
|
||||
"123"
|
||||
"123",
|
||||
);
|
||||
expectType<any>(value1);
|
||||
});
|
||||
@@ -158,7 +158,7 @@ describe("server", () => {
|
||||
it("does not accept arguments of wrong types", (done) => {
|
||||
const srv = createServer();
|
||||
const sio = new Server<BidirectionalEvents, BidirectionalEvents, {}>(
|
||||
srv
|
||||
srv,
|
||||
);
|
||||
// @ts-expect-error - shouldn't accept arguments of the wrong types
|
||||
sio.on("random", (a, b, c) => {});
|
||||
@@ -184,7 +184,7 @@ describe("server", () => {
|
||||
) => boolean;
|
||||
type ToEmitWithAck<
|
||||
Map extends EventsMap,
|
||||
Ev extends keyof Map = keyof Map
|
||||
Ev extends keyof Map = keyof Map,
|
||||
> = (ev: Ev, ...args: Parameters<Map[Ev]>) => ReturnType<Map[Ev]>;
|
||||
interface ClientToServerEvents {
|
||||
noArgs: () => void;
|
||||
@@ -192,7 +192,7 @@ describe("server", () => {
|
||||
ackFromClient: (
|
||||
a: string,
|
||||
b: number,
|
||||
ack: (c: string, d: number) => void
|
||||
ack: (c: string, d: number) => void,
|
||||
) => void;
|
||||
}
|
||||
|
||||
@@ -202,12 +202,12 @@ describe("server", () => {
|
||||
ackFromServer: (
|
||||
a: boolean,
|
||||
b: string,
|
||||
ack: (c: boolean, d: string) => void
|
||||
ack: (c: boolean, d: string) => void,
|
||||
) => void;
|
||||
ackFromServerSingleArg: (
|
||||
a: boolean,
|
||||
b: string,
|
||||
ack: (c: string) => void
|
||||
ack: (c: string) => void,
|
||||
) => void;
|
||||
onlyCallback: (a: () => void) => void;
|
||||
}
|
||||
@@ -226,12 +226,12 @@ describe("server", () => {
|
||||
ackFromServer: (
|
||||
a: boolean,
|
||||
b: string,
|
||||
ack: (err: Error, c: boolean, d: string) => void
|
||||
ack: (err: Error, c: boolean, d: string) => void,
|
||||
) => void;
|
||||
ackFromServerSingleArg: (
|
||||
a: boolean,
|
||||
b: string,
|
||||
ack: (err: Error, c: string) => void
|
||||
ack: (err: Error, c: string) => void,
|
||||
) => void;
|
||||
onlyCallback: (a: (err: Error) => void) => void;
|
||||
}
|
||||
@@ -243,7 +243,7 @@ describe("server", () => {
|
||||
ackFromServerSingleArg: (
|
||||
a: boolean,
|
||||
b: string,
|
||||
ack: (c: string[]) => void
|
||||
ack: (c: string[]) => void,
|
||||
) => void;
|
||||
onlyCallback: (a: () => void) => void;
|
||||
}
|
||||
@@ -253,12 +253,12 @@ describe("server", () => {
|
||||
ackFromServer: (
|
||||
a: boolean,
|
||||
b: string,
|
||||
ack: (err: Error, c: boolean[]) => void
|
||||
ack: (err: Error, c: boolean[]) => void,
|
||||
) => void;
|
||||
ackFromServerSingleArg: (
|
||||
a: boolean,
|
||||
b: string,
|
||||
ack: (err: Error, c: string[]) => void
|
||||
ack: (err: Error, c: string[]) => void,
|
||||
) => void;
|
||||
onlyCallback: (a: (err: Error) => void) => void;
|
||||
}
|
||||
@@ -315,7 +315,7 @@ describe("server", () => {
|
||||
untyped.of("/").emit("random2", 2, "string", Server);
|
||||
expectType<Promise<any>>(untyped.to("1").emitWithAck("random", "test"));
|
||||
expectType<(ev: string, ...args: any[]) => Promise<any>>(
|
||||
untyped.to("1").emitWithAck<string>
|
||||
untyped.to("1").emitWithAck<string>,
|
||||
);
|
||||
});
|
||||
it("has the correct types", () => {
|
||||
@@ -326,25 +326,25 @@ describe("server", () => {
|
||||
const nio = sio.of("/");
|
||||
for (const emitter of [sio, nio]) {
|
||||
expectType<BroadcastOperator<ServerToClientEventsWithMultiple, any>>(
|
||||
emitter.to("1")
|
||||
emitter.to("1"),
|
||||
);
|
||||
expectType<BroadcastOperator<ServerToClientEventsWithMultiple, any>>(
|
||||
emitter.in("1")
|
||||
emitter.in("1"),
|
||||
);
|
||||
expectType<BroadcastOperator<ServerToClientEventsWithMultiple, any>>(
|
||||
emitter.except("1")
|
||||
emitter.except("1"),
|
||||
);
|
||||
expectType<BroadcastOperator<ServerToClientEventsWithMultiple, any>>(
|
||||
emitter.except("1")
|
||||
emitter.except("1"),
|
||||
);
|
||||
expectType<BroadcastOperator<ServerToClientEventsWithMultiple, any>>(
|
||||
emitter.compress(true)
|
||||
emitter.compress(true),
|
||||
);
|
||||
expectType<BroadcastOperator<ServerToClientEventsWithMultiple, any>>(
|
||||
emitter.volatile
|
||||
emitter.volatile,
|
||||
);
|
||||
expectType<BroadcastOperator<ServerToClientEventsWithMultiple, any>>(
|
||||
emitter.local
|
||||
emitter.local,
|
||||
);
|
||||
expectType<
|
||||
BroadcastOperator<ServerToClientEventsWithMultipleAndError, any>
|
||||
@@ -367,16 +367,16 @@ describe("server", () => {
|
||||
>(s.timeout(0).broadcast);
|
||||
// ensure that turning socket to a broadcast works correctly
|
||||
expectType<BroadcastOperator<ServerToClientEventsWithMultiple, any>>(
|
||||
s.broadcast
|
||||
s.broadcast,
|
||||
);
|
||||
expectType<BroadcastOperator<ServerToClientEventsWithMultiple, any>>(
|
||||
s.in("1")
|
||||
s.in("1"),
|
||||
);
|
||||
expectType<BroadcastOperator<ServerToClientEventsWithMultiple, any>>(
|
||||
s.except("1")
|
||||
s.except("1"),
|
||||
);
|
||||
expectType<BroadcastOperator<ServerToClientEventsWithMultiple, any>>(
|
||||
s.to("1")
|
||||
s.to("1"),
|
||||
);
|
||||
// Ensure that adding a timeout to a broadcast works after the fact
|
||||
expectType<
|
||||
@@ -391,7 +391,7 @@ describe("server", () => {
|
||||
it("has the correct types for `emit`", () => {
|
||||
const sio = new Server<ClientToServerEvents, ServerToClientEvents>();
|
||||
expectType<ToEmit<ServerToClientEventsWithMultipleAndError, "noArgs">>(
|
||||
sio.timeout(0).emit<"noArgs">
|
||||
sio.timeout(0).emit<"noArgs">,
|
||||
);
|
||||
expectType<
|
||||
ToEmit<ServerToClientEventsWithMultipleAndError, "helloFromServer">
|
||||
@@ -414,7 +414,7 @@ describe("server", () => {
|
||||
const sansTimeout = sio.in("1");
|
||||
// Without timeout, `emitWithAck` shouldn't accept any events
|
||||
expectType<never>(
|
||||
undefined as Parameters<(typeof sansTimeout)["emitWithAck"]>[0]
|
||||
undefined as Parameters<(typeof sansTimeout)["emitWithAck"]>[0],
|
||||
);
|
||||
// @ts-expect-error - "noArgs" doesn't have a callback and is thus excluded
|
||||
sio.timeout(0).emitWithAck("noArgs");
|
||||
@@ -441,33 +441,33 @@ describe("server", () => {
|
||||
const sio = new Server<ClientToServerEvents, ServerToClientEvents>();
|
||||
const nio = sio.of("/test");
|
||||
expectType<ToEmit<ServerToClientEventsNoAck, "noArgs">>(
|
||||
sio.emit<"noArgs">
|
||||
sio.emit<"noArgs">,
|
||||
);
|
||||
expectType<ToEmit<ServerToClientEventsNoAck, "noArgs">>(
|
||||
nio.emit<"noArgs">
|
||||
nio.emit<"noArgs">,
|
||||
);
|
||||
expectType<ToEmit<ServerToClientEventsNoAck, "helloFromServer">>(
|
||||
// These errors will dissapear once the TS version is updated from 4.7.4
|
||||
// the TSD instance is using a newer version of TS than the workspace version
|
||||
// to enable the ability to compare against `any`
|
||||
sio.emit<"helloFromServer">
|
||||
sio.emit<"helloFromServer">,
|
||||
);
|
||||
expectType<ToEmit<ServerToClientEventsNoAck, "helloFromServer">>(
|
||||
nio.emit<"helloFromServer">
|
||||
nio.emit<"helloFromServer">,
|
||||
);
|
||||
sio.on("connection", (s) => {
|
||||
expectType<ToEmit<ServerToClientEvents, "noArgs">>(s.emit<"noArgs">);
|
||||
expectType<ToEmit<ServerToClientEvents, "helloFromServer">>(
|
||||
s.emit<"helloFromServer">
|
||||
s.emit<"helloFromServer">,
|
||||
);
|
||||
expectType<ToEmit<ServerToClientEvents, "ackFromServerSingleArg">>(
|
||||
s.emit<"ackFromServerSingleArg">
|
||||
s.emit<"ackFromServerSingleArg">,
|
||||
);
|
||||
expectType<ToEmit<ServerToClientEvents, "ackFromServer">>(
|
||||
s.emit<"ackFromServer">
|
||||
s.emit<"ackFromServer">,
|
||||
);
|
||||
expectType<ToEmit<ServerToClientEvents, "onlyCallback">>(
|
||||
s.emit<"onlyCallback">
|
||||
s.emit<"onlyCallback">,
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -631,7 +631,7 @@ describe("server", () => {
|
||||
|
||||
const value = await sio.serverSideEmitWithAck(
|
||||
"ackFromServerToServer",
|
||||
"foo"
|
||||
"foo",
|
||||
);
|
||||
expectType<number[]>(value);
|
||||
|
||||
@@ -652,7 +652,10 @@ describe("server", () => {
|
||||
io.adapter(Adapter);
|
||||
|
||||
class MyCustomAdapter extends Adapter {
|
||||
constructor(nsp, readonly opts) {
|
||||
constructor(
|
||||
nsp,
|
||||
readonly opts,
|
||||
) {
|
||||
super(nsp);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -807,7 +807,7 @@ describe("socket", () => {
|
||||
io.on("connection", (s) => {
|
||||
s.conn.on("upgrade", () => {
|
||||
console.log(
|
||||
"\u001b[96mNote: warning expected and normal in test.\u001b[39m"
|
||||
"\u001b[96mNote: warning expected and normal in test.\u001b[39m",
|
||||
);
|
||||
// @ts-ignore
|
||||
socket.io.engine.write("5woooot");
|
||||
@@ -825,7 +825,7 @@ describe("socket", () => {
|
||||
io.on("connection", (s) => {
|
||||
s.conn.on("upgrade", () => {
|
||||
console.log(
|
||||
"\u001b[96mNote: warning expected and normal in test.\u001b[39m"
|
||||
"\u001b[96mNote: warning expected and normal in test.\u001b[39m",
|
||||
);
|
||||
// @ts-ignore
|
||||
socket.io.engine.write('44["handle me please"]');
|
||||
@@ -883,7 +883,7 @@ describe("socket", () => {
|
||||
const socket = createClient(io);
|
||||
io.on("connection", (s) => {
|
||||
expect(() => s.emit("connect_error")).to.throwException(
|
||||
/"connect_error" is a reserved event name/
|
||||
/"connect_error" is a reserved event name/,
|
||||
);
|
||||
socket.close();
|
||||
success(done, io, socket);
|
||||
@@ -1112,7 +1112,7 @@ describe("socket", () => {
|
||||
|
||||
const partialDone = createPartialDone(
|
||||
3,
|
||||
successFn(done, io, socket1, socket2, socket3)
|
||||
successFn(done, io, socket1, socket2, socket3),
|
||||
);
|
||||
|
||||
socket1.on("disconnect", partialDone);
|
||||
|
||||
@@ -25,7 +25,7 @@ expect.Assertion.prototype.contain = function (...args) {
|
||||
},
|
||||
function () {
|
||||
return "expected " + i(this.obj) + " to not contain " + i(obj);
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
return this;
|
||||
@@ -35,11 +35,11 @@ expect.Assertion.prototype.contain = function (...args) {
|
||||
|
||||
export function createClient<
|
||||
CTS extends EventsMap = DefaultEventsMap,
|
||||
STC extends EventsMap = DefaultEventsMap
|
||||
STC extends EventsMap = DefaultEventsMap,
|
||||
>(
|
||||
io: Server,
|
||||
nsp: string = "/",
|
||||
opts?: Partial<ManagerOptions & SocketOptions>
|
||||
opts?: Partial<ManagerOptions & SocketOptions>,
|
||||
): ClientSocket<STC, CTS> {
|
||||
const port = (io.httpServer.address() as AddressInfo).port;
|
||||
return ioc(`http://localhost:${port}${nsp}`, opts);
|
||||
|
||||
@@ -47,7 +47,7 @@ describe("utility methods", () => {
|
||||
ioc(`http://localhost:${port}`, {
|
||||
// FIXME needed so that clients are properly closed
|
||||
transports: ["websocket"],
|
||||
})
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -212,7 +212,7 @@ describe("socket.io with uWebSocket.js-based engine", () => {
|
||||
.end((err, res) => {
|
||||
if (err) return done(err);
|
||||
expect(res.headers["content-type"]).to.be(
|
||||
"application/javascript; charset=utf-8"
|
||||
"application/javascript; charset=utf-8",
|
||||
);
|
||||
expect(res.headers.etag).to.be('"' + clientVersion + '"');
|
||||
expect(res.headers["x-sourcemap"]).to.be(undefined);
|
||||
|
||||
@@ -32,7 +32,7 @@ describe("v2 compatibility", () => {
|
||||
`http://localhost:${getPort(io)}/the-namespace`,
|
||||
{
|
||||
multiplex: false,
|
||||
}
|
||||
},
|
||||
);
|
||||
clientSocket.query = { test: "123" };
|
||||
|
||||
|
||||
Reference in New Issue
Block a user