Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/engine.io-client/lib/globals.node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export function createCookieJar() {
return new CookieJar();
}

interface Cookie {
export interface Cookie {
name: string;
value: string;
expires?: Date;
Expand Down
11 changes: 9 additions & 2 deletions packages/engine.io-client/lib/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,23 @@ import { Socket } from "./socket.js";

export { Socket };
export {
HandshakeData,
SocketOptions,
SocketReservedEvents,
SocketWithoutUpgrade,
SocketWithUpgrade,
WriteOptions,
} from "./socket.js";
export const protocol = Socket.protocol;
export { Transport, TransportError } from "./transport.js";
export {
Transport,
TransportError,
TransportReservedEvents,
} from "./transport.js";
export { transports } from "./transports/index.js";
export { installTimerFunctions } from "./util.js";
export { parse } from "./contrib/parseuri.js";
export { nextTick } from "./globals.node.js";
export { Cookie, nextTick } from "./globals.node.js";

export { Fetch } from "./transports/polling-fetch.js";
export { XHR as NodeXHR } from "./transports/polling-xhr.node.js";
Expand Down
6 changes: 3 additions & 3 deletions packages/engine.io-client/lib/socket.ts
Original file line number Diff line number Diff line change
Expand Up @@ -266,15 +266,15 @@ type BaseSocketOptions = Omit<SocketOptions, "transports"> & {
transports: TransportCtor[];
};

interface HandshakeData {
export interface HandshakeData {
sid: string;
upgrades: string[];
pingInterval: number;
pingTimeout: number;
maxPayload: number;
}

interface SocketReservedEvents {
export interface SocketReservedEvents {
open: () => void;
handshake: (data: HandshakeData) => void;
packet: (packet: Packet) => void;
Expand All @@ -295,7 +295,7 @@ interface SocketReservedEvents {

type SocketState = "opening" | "open" | "closing" | "closed";

interface WriteOptions {
export interface WriteOptions {
compress?: boolean;
}

Expand Down
2 changes: 1 addition & 1 deletion packages/engine.io-client/lib/transport.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export interface CloseDetails {
context?: unknown; // context should be typed as CloseEvent | XMLHttpRequest, but these types are not available on non-browser platforms
}

interface TransportReservedEvents {
export interface TransportReservedEvents {
open: () => void;
error: (err: TransportError) => void;
packet: (packet: Packet) => void;
Expand Down
11 changes: 9 additions & 2 deletions packages/socket.io-client/lib/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import { url } from "./url.js";
import { Manager, ManagerOptions } from "./manager.js";
import { DisconnectDescription, Socket, SocketOptions } from "./socket.js";
import { Manager, ManagerOptions, ManagerReservedEvents } from "./manager.js";
import {
DisconnectDescription,
Socket,
SocketOptions,
SocketReservedEvents,
} from "./socket.js";
import debugModule from "debug"; // debug()

const debug = debugModule("socket.io-client"); // debug()
Expand Down Expand Up @@ -94,8 +99,10 @@ export {
DisconnectDescription,
Manager,
ManagerOptions,
ManagerReservedEvents,
Socket,
SocketOptions,
SocketReservedEvents,
lookup as io,
lookup as connect,
lookup as default,
Expand Down
2 changes: 1 addition & 1 deletion packages/socket.io-client/lib/manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ export interface ManagerOptions extends EngineOptions {
parser: any;
}

interface ManagerReservedEvents {
export interface ManagerReservedEvents {
open: () => void;
error: (err: Error) => void;
ping: () => void;
Expand Down
2 changes: 1 addition & 1 deletion packages/socket.io-client/lib/socket.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ export type DisconnectDescription =
context?: unknown; // context should be typed as CloseEvent | XMLHttpRequest, but these types are not available on non-browser platforms
};

interface SocketReservedEvents {
export interface SocketReservedEvents {
connect: () => void;
connect_error: (err: Error) => void;
disconnect: (
Expand Down
18 changes: 18 additions & 0 deletions packages/socket.io-client/test/types/ts4023.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { io } from "socket.io-client";

// Reproduces https://github.com/socketio/socket.io/issues/5307
//
// The public types of Socket / Manager (and the underlying Engine.IO Socket and
// its Transport) are parameterized by "reserved events" maps (SocketReservedEvents,
// ManagerReservedEvents, TransportReservedEvents, ...) that were not exported.
// An exported value whose inferred type references those maps therefore cannot
// be named during declaration emit: `tsc --declaration` fails with ts(4023).
const socket = io("https://example.com");

// `listeners` / `write` return (or accept) types that reference the reserved-events
// maps, forcing the declaration emitter to name them.
export const socketListeners = socket.listeners;
export const managerListeners = socket.io.listeners;
export const engineListeners = socket.io.engine.listeners;
export const transportListeners = socket.io.engine.transport.listeners;
export const engineWrite = socket.io.engine.write;
30 changes: 30 additions & 0 deletions packages/socket.io-client/test/types/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"compilerOptions": {
"target": "es2018",
"module": "esnext",
"moduleResolution": "bundler",
"esModuleInterop": true,
"strict": false,
"skipLibCheck": true,
"declaration": true,
"noEmit": true,
"types": ["node"],
"lib": ["es2018", "dom"],
"paths": {
"@socket.io/component-emitter": [
"../../../../packages/socket.io-component-emitter/lib/cjs/index.d.ts"
],
"socket.io-client": [
"../../../../packages/socket.io-client/lib/index.ts"
],
"engine.io-client": [
"../../../../packages/engine.io-client/lib/index.ts"
],
"socket.io-parser": [
"../../../../packages/socket.io-parser/lib/index.ts"
],
"engine.io-parser": ["../../../../packages/engine.io-parser/lib/index.ts"]
}
},
"include": ["ts4023.test.ts"]
}