socket.io
Advanced tools
Comparing version 4.7.2 to 4.7.3
/*! | ||
* Socket.IO v4.7.2 | ||
* (c) 2014-2023 Guillermo Rauch | ||
* Socket.IO v4.7.3 | ||
* (c) 2014-2024 Guillermo Rauch | ||
* Released under the MIT License. | ||
@@ -5,0 +5,0 @@ */ |
/*! | ||
* Socket.IO v4.7.2 | ||
* (c) 2014-2023 Guillermo Rauch | ||
* Socket.IO v4.7.3 | ||
* (c) 2014-2024 Guillermo Rauch | ||
* Released under the MIT License. | ||
@@ -5,0 +5,0 @@ */ |
/*! | ||
* Socket.IO v4.7.2 | ||
* (c) 2014-2023 Guillermo Rauch | ||
* Socket.IO v4.7.3 | ||
* (c) 2014-2024 Guillermo Rauch | ||
* Released under the MIT License. | ||
@@ -5,0 +5,0 @@ */ |
import type { BroadcastFlags, Room, SocketId } from "socket.io-adapter"; | ||
import { Handshake } from "./socket"; | ||
import type { Adapter } from "socket.io-adapter"; | ||
import type { EventParams, EventNames, EventsMap, TypedEventBroadcaster, DecorateAcknowledgements, DecorateAcknowledgementsWithTimeoutAndMultipleResponses, AllButLast, Last, SecondArg } from "./typed-events"; | ||
import type { EventParams, EventNames, EventsMap, TypedEventBroadcaster, DecorateAcknowledgements, AllButLast, Last, FirstNonErrorArg, EventNamesWithError } from "./typed-events"; | ||
export declare class BroadcastOperator<EmitEvents extends EventsMap, SocketData> implements TypedEventBroadcaster<EmitEvents> { | ||
@@ -103,3 +103,3 @@ private readonly adapter; | ||
*/ | ||
timeout(timeout: number): BroadcastOperator<DecorateAcknowledgementsWithTimeoutAndMultipleResponses<EmitEvents>, SocketData>; | ||
timeout(timeout: number): BroadcastOperator<DecorateAcknowledgements<EmitEvents>, SocketData>; | ||
/** | ||
@@ -140,3 +140,3 @@ * Emits to all clients. | ||
*/ | ||
emitWithAck<Ev extends EventNames<EmitEvents>>(ev: Ev, ...args: AllButLast<EventParams<EmitEvents, Ev>>): Promise<SecondArg<Last<EventParams<EmitEvents, Ev>>>>; | ||
emitWithAck<Ev extends EventNamesWithError<EmitEvents>>(ev: Ev, ...args: AllButLast<EventParams<EmitEvents, Ev>>): Promise<FirstNonErrorArg<Last<EventParams<EmitEvents, Ev>>>>; | ||
/** | ||
@@ -143,0 +143,0 @@ * Gets a list of clients. |
@@ -196,3 +196,3 @@ "use strict"; | ||
null, | ||
this.flags.expectSingleResponse ? null : responses, | ||
this.flags.expectSingleResponse ? responses[0] : responses, | ||
]); | ||
@@ -199,0 +199,0 @@ } |
@@ -6,3 +6,3 @@ /// <reference types="node" /> | ||
import type { Server as HTTPSServer } from "https"; | ||
import type { Http2SecureServer } from "http2"; | ||
import type { Http2SecureServer, Http2Server } from "http2"; | ||
import type { ServerOptions as EngineOptions, AttachOptions, BaseServer } from "engine.io"; | ||
@@ -15,3 +15,3 @@ import { ExtendedError, Namespace, ServerReservedEventsMap } from "./namespace"; | ||
import type { BroadcastOperator, RemoteSocket } from "./broadcast-operator"; | ||
import { EventsMap, DefaultEventsMap, EventParams, StrictEventEmitter, EventNames, DecorateAcknowledgementsWithTimeoutAndMultipleResponses, AllButLast, Last, FirstArg, SecondArg } from "./typed-events"; | ||
import { EventsMap, DefaultEventsMap, EventParams, StrictEventEmitter, EventNames, DecorateAcknowledgementsWithTimeoutAndMultipleResponses, AllButLast, Last, RemoveAcknowledgements, EventNamesWithAck, FirstNonErrorArg } from "./typed-events"; | ||
declare type ParentNspNameMatchFn = (name: string, auth: { | ||
@@ -21,2 +21,3 @@ [key: string]: any; | ||
declare type AdapterConstructor = typeof Adapter | ((nsp: Namespace) => Adapter); | ||
declare type TServerInstance = http.Server | HTTPSServer | Http2SecureServer | Http2Server; | ||
interface ServerOptions extends EngineOptions, AttachOptions { | ||
@@ -99,3 +100,3 @@ /** | ||
*/ | ||
export declare class Server<ListenEvents extends EventsMap = DefaultEventsMap, EmitEvents extends EventsMap = ListenEvents, ServerSideEvents extends EventsMap = DefaultEventsMap, SocketData = any> extends StrictEventEmitter<ServerSideEvents, EmitEvents, ServerReservedEventsMap<ListenEvents, EmitEvents, ServerSideEvents, SocketData>> { | ||
export declare class Server<ListenEvents extends EventsMap = DefaultEventsMap, EmitEvents extends EventsMap = ListenEvents, ServerSideEvents extends EventsMap = DefaultEventsMap, SocketData = any> extends StrictEventEmitter<ServerSideEvents, RemoveAcknowledgements<EmitEvents>, ServerReservedEventsMap<ListenEvents, EmitEvents, ServerSideEvents, SocketData>> { | ||
readonly sockets: Namespace<ListenEvents, EmitEvents, ServerSideEvents, SocketData>; | ||
@@ -145,4 +146,4 @@ /** | ||
constructor(opts?: Partial<ServerOptions>); | ||
constructor(srv?: http.Server | HTTPSServer | Http2SecureServer | number, opts?: Partial<ServerOptions>); | ||
constructor(srv: undefined | Partial<ServerOptions> | http.Server | HTTPSServer | Http2SecureServer | number, opts?: Partial<ServerOptions>); | ||
constructor(srv?: TServerInstance | number, opts?: Partial<ServerOptions>); | ||
constructor(srv: undefined | Partial<ServerOptions> | TServerInstance | number, opts?: Partial<ServerOptions>); | ||
get _opts(): Partial<ServerOptions>; | ||
@@ -201,3 +202,3 @@ /** | ||
*/ | ||
listen(srv: http.Server | HTTPSServer | Http2SecureServer | number, opts?: Partial<ServerOptions>): this; | ||
listen(srv: TServerInstance | number, opts?: Partial<ServerOptions>): this; | ||
/** | ||
@@ -210,3 +211,3 @@ * Attaches socket.io to a server or port. | ||
*/ | ||
attach(srv: http.Server | HTTPSServer | Http2SecureServer | number, opts?: Partial<ServerOptions>): this; | ||
attach(srv: TServerInstance | number, opts?: Partial<ServerOptions>): this; | ||
attachApp(app: any, opts?: Partial<ServerOptions>): void; | ||
@@ -311,3 +312,3 @@ /** | ||
*/ | ||
to(room: Room | Room[]): BroadcastOperator<EmitEvents, SocketData>; | ||
to(room: Room | Room[]): BroadcastOperator<import("./typed-events").DecorateAcknowledgementsWithMultipleResponses<EmitEvents>, SocketData>; | ||
/** | ||
@@ -323,3 +324,3 @@ * Targets a room when emitting. Similar to `to()`, but might feel clearer in some cases: | ||
*/ | ||
in(room: Room | Room[]): BroadcastOperator<EmitEvents, SocketData>; | ||
in(room: Room | Room[]): BroadcastOperator<import("./typed-events").DecorateAcknowledgementsWithMultipleResponses<EmitEvents>, SocketData>; | ||
/** | ||
@@ -341,18 +342,4 @@ * Excludes a room when emitting. | ||
*/ | ||
except(room: Room | Room[]): BroadcastOperator<EmitEvents, SocketData>; | ||
except(room: Room | Room[]): BroadcastOperator<import("./typed-events").DecorateAcknowledgementsWithMultipleResponses<EmitEvents>, SocketData>; | ||
/** | ||
* Emits an event and waits for an acknowledgement from all clients. | ||
* | ||
* @example | ||
* try { | ||
* const responses = await io.timeout(1000).emitWithAck("some-event"); | ||
* console.log(responses); // one response per client | ||
* } catch (e) { | ||
* // some clients did not acknowledge the event in the given delay | ||
* } | ||
* | ||
* @return a Promise that will be fulfilled when all clients have acknowledged the event | ||
*/ | ||
emitWithAck<Ev extends EventNames<EmitEvents>>(ev: Ev, ...args: AllButLast<EventParams<EmitEvents, Ev>>): Promise<SecondArg<Last<EventParams<EmitEvents, Ev>>>>; | ||
/** | ||
* Sends a `message` event to all clients. | ||
@@ -422,3 +409,3 @@ * | ||
*/ | ||
serverSideEmitWithAck<Ev extends EventNames<ServerSideEvents>>(ev: Ev, ...args: AllButLast<EventParams<ServerSideEvents, Ev>>): Promise<FirstArg<Last<EventParams<ServerSideEvents, Ev>>>[]>; | ||
serverSideEmitWithAck<Ev extends EventNamesWithAck<ServerSideEvents>>(ev: Ev, ...args: AllButLast<EventParams<ServerSideEvents, Ev>>): Promise<FirstNonErrorArg<Last<EventParams<ServerSideEvents, Ev>>>[]>; | ||
/** | ||
@@ -440,3 +427,3 @@ * Gets a list of socket ids. | ||
*/ | ||
compress(compress: boolean): BroadcastOperator<EmitEvents, SocketData>; | ||
compress(compress: boolean): BroadcastOperator<import("./typed-events").DecorateAcknowledgementsWithMultipleResponses<EmitEvents>, SocketData>; | ||
/** | ||
@@ -452,3 +439,3 @@ * Sets a modifier for a subsequent event emission that the event data may be lost if the client is not ready to | ||
*/ | ||
get volatile(): BroadcastOperator<EmitEvents, SocketData>; | ||
get volatile(): BroadcastOperator<import("./typed-events").DecorateAcknowledgementsWithMultipleResponses<EmitEvents>, SocketData>; | ||
/** | ||
@@ -463,3 +450,3 @@ * Sets a modifier for a subsequent event emission that the event data will only be broadcast to the current node. | ||
*/ | ||
get local(): BroadcastOperator<EmitEvents, SocketData>; | ||
get local(): BroadcastOperator<import("./typed-events").DecorateAcknowledgementsWithMultipleResponses<EmitEvents>, SocketData>; | ||
/** | ||
@@ -479,3 +466,3 @@ * Adds a timeout in milliseconds for the next operation. | ||
*/ | ||
timeout(timeout: number): BroadcastOperator<DecorateAcknowledgementsWithTimeoutAndMultipleResponses<EmitEvents>, SocketData>; | ||
timeout(timeout: number): BroadcastOperator<import("./typed-events").DecorateAcknowledgements<import("./typed-events").DecorateAcknowledgementsWithMultipleResponses<EmitEvents>>, SocketData>; | ||
/** | ||
@@ -482,0 +469,0 @@ * Returns the matching socket instances. |
@@ -563,18 +563,2 @@ "use strict"; | ||
/** | ||
* Emits an event and waits for an acknowledgement from all clients. | ||
* | ||
* @example | ||
* try { | ||
* const responses = await io.timeout(1000).emitWithAck("some-event"); | ||
* console.log(responses); // one response per client | ||
* } catch (e) { | ||
* // some clients did not acknowledge the event in the given delay | ||
* } | ||
* | ||
* @return a Promise that will be fulfilled when all clients have acknowledged the event | ||
*/ | ||
emitWithAck(ev, ...args) { | ||
return this.sockets.emitWithAck(ev, ...args); | ||
} | ||
/** | ||
* Sends a `message` event to all clients. | ||
@@ -595,2 +579,4 @@ * | ||
send(...args) { | ||
// This type-cast is needed because EmitEvents likely doesn't have `message` as a key. | ||
// if you specify the EmitEvents, the type of args will be never. | ||
this.sockets.emit("message", ...args); | ||
@@ -605,2 +591,4 @@ return this; | ||
write(...args) { | ||
// This type-cast is needed because EmitEvents likely doesn't have `message` as a key. | ||
// if you specify the EmitEvents, the type of args will be never. | ||
this.sockets.emit("message", ...args); | ||
@@ -607,0 +595,0 @@ return this; |
import { Socket } from "./socket"; | ||
import type { Server } from "./index"; | ||
import { EventParams, EventNames, EventsMap, StrictEventEmitter, DefaultEventsMap, DecorateAcknowledgementsWithTimeoutAndMultipleResponses, AllButLast, Last, FirstArg, SecondArg } from "./typed-events"; | ||
import { EventParams, EventNames, EventsMap, StrictEventEmitter, DefaultEventsMap, DecorateAcknowledgementsWithTimeoutAndMultipleResponses, AllButLast, Last, DecorateAcknowledgementsWithMultipleResponses, DecorateAcknowledgements, RemoveAcknowledgements, EventNamesWithAck, FirstNonErrorArg, EventNamesWithoutAck } from "./typed-events"; | ||
import type { Client } from "./client"; | ||
@@ -71,3 +71,3 @@ import type { Adapter, Room, SocketId } from "socket.io-adapter"; | ||
*/ | ||
export declare class Namespace<ListenEvents extends EventsMap = DefaultEventsMap, EmitEvents extends EventsMap = ListenEvents, ServerSideEvents extends EventsMap = DefaultEventsMap, SocketData = any> extends StrictEventEmitter<ServerSideEvents, EmitEvents, NamespaceReservedEventsMap<ListenEvents, EmitEvents, ServerSideEvents, SocketData>> { | ||
export declare class Namespace<ListenEvents extends EventsMap = DefaultEventsMap, EmitEvents extends EventsMap = ListenEvents, ServerSideEvents extends EventsMap = DefaultEventsMap, SocketData = any> extends StrictEventEmitter<ServerSideEvents, RemoveAcknowledgements<EmitEvents>, NamespaceReservedEventsMap<ListenEvents, EmitEvents, ServerSideEvents, SocketData>> { | ||
readonly name: string; | ||
@@ -137,3 +137,3 @@ readonly sockets: Map<SocketId, Socket<ListenEvents, EmitEvents, ServerSideEvents, SocketData>>; | ||
*/ | ||
to(room: Room | Room[]): BroadcastOperator<EmitEvents, SocketData>; | ||
to(room: Room | Room[]): BroadcastOperator<DecorateAcknowledgementsWithMultipleResponses<EmitEvents>, SocketData>; | ||
/** | ||
@@ -151,3 +151,3 @@ * Targets a room when emitting. Similar to `to()`, but might feel clearer in some cases: | ||
*/ | ||
in(room: Room | Room[]): BroadcastOperator<EmitEvents, SocketData>; | ||
in(room: Room | Room[]): BroadcastOperator<DecorateAcknowledgementsWithMultipleResponses<EmitEvents>, SocketData>; | ||
/** | ||
@@ -171,3 +171,3 @@ * Excludes a room when emitting. | ||
*/ | ||
except(room: Room | Room[]): BroadcastOperator<EmitEvents, SocketData>; | ||
except(room: Room | Room[]): BroadcastOperator<DecorateAcknowledgementsWithMultipleResponses<EmitEvents>, SocketData>; | ||
/** | ||
@@ -210,20 +210,4 @@ * Adds a new client. | ||
*/ | ||
emit<Ev extends EventNames<EmitEvents>>(ev: Ev, ...args: EventParams<EmitEvents, Ev>): boolean; | ||
emit<Ev extends EventNamesWithoutAck<EmitEvents>>(ev: Ev, ...args: EventParams<EmitEvents, Ev>): boolean; | ||
/** | ||
* Emits an event and waits for an acknowledgement from all clients. | ||
* | ||
* @example | ||
* const myNamespace = io.of("/my-namespace"); | ||
* | ||
* try { | ||
* const responses = await myNamespace.timeout(1000).emitWithAck("some-event"); | ||
* console.log(responses); // one response per client | ||
* } catch (e) { | ||
* // some clients did not acknowledge the event in the given delay | ||
* } | ||
* | ||
* @return a Promise that will be fulfilled when all clients have acknowledged the event | ||
*/ | ||
emitWithAck<Ev extends EventNames<EmitEvents>>(ev: Ev, ...args: AllButLast<EventParams<EmitEvents, Ev>>): Promise<SecondArg<Last<EventParams<EmitEvents, Ev>>>>; | ||
/** | ||
* Sends a `message` event to all clients. | ||
@@ -299,3 +283,3 @@ * | ||
*/ | ||
serverSideEmitWithAck<Ev extends EventNames<ServerSideEvents>>(ev: Ev, ...args: AllButLast<EventParams<ServerSideEvents, Ev>>): Promise<FirstArg<Last<EventParams<ServerSideEvents, Ev>>>[]>; | ||
serverSideEmitWithAck<Ev extends EventNamesWithAck<ServerSideEvents>>(ev: Ev, ...args: AllButLast<EventParams<ServerSideEvents, Ev>>): Promise<FirstNonErrorArg<Last<EventParams<ServerSideEvents, Ev>>>[]>; | ||
/** | ||
@@ -327,3 +311,3 @@ * Called when a packet is received from another Socket.IO server | ||
*/ | ||
compress(compress: boolean): BroadcastOperator<EmitEvents, SocketData>; | ||
compress(compress: boolean): BroadcastOperator<DecorateAcknowledgementsWithMultipleResponses<EmitEvents>, SocketData>; | ||
/** | ||
@@ -341,3 +325,3 @@ * Sets a modifier for a subsequent event emission that the event data may be lost if the client is not ready to | ||
*/ | ||
get volatile(): BroadcastOperator<EmitEvents, SocketData>; | ||
get volatile(): BroadcastOperator<DecorateAcknowledgementsWithMultipleResponses<EmitEvents>, SocketData>; | ||
/** | ||
@@ -354,3 +338,3 @@ * Sets a modifier for a subsequent event emission that the event data will only be broadcast to the current node. | ||
*/ | ||
get local(): BroadcastOperator<EmitEvents, SocketData>; | ||
get local(): BroadcastOperator<DecorateAcknowledgementsWithMultipleResponses<EmitEvents>, SocketData>; | ||
/** | ||
@@ -372,3 +356,3 @@ * Adds a timeout in milliseconds for the next operation. | ||
*/ | ||
timeout(timeout: number): BroadcastOperator<DecorateAcknowledgementsWithTimeoutAndMultipleResponses<EmitEvents>, SocketData>; | ||
timeout(timeout: number): BroadcastOperator<DecorateAcknowledgements<DecorateAcknowledgementsWithMultipleResponses<EmitEvents>>, SocketData>; | ||
/** | ||
@@ -375,0 +359,0 @@ * Returns the matching socket instances. |
@@ -310,20 +310,2 @@ "use strict"; | ||
/** | ||
* Emits an event and waits for an acknowledgement from all clients. | ||
* | ||
* @example | ||
* const myNamespace = io.of("/my-namespace"); | ||
* | ||
* try { | ||
* const responses = await myNamespace.timeout(1000).emitWithAck("some-event"); | ||
* console.log(responses); // one response per client | ||
* } catch (e) { | ||
* // some clients did not acknowledge the event in the given delay | ||
* } | ||
* | ||
* @return a Promise that will be fulfilled when all clients have acknowledged the event | ||
*/ | ||
emitWithAck(ev, ...args) { | ||
return new broadcast_operator_1.BroadcastOperator(this.adapter).emitWithAck(ev, ...args); | ||
} | ||
/** | ||
* Sends a `message` event to all clients. | ||
@@ -346,2 +328,4 @@ * | ||
send(...args) { | ||
// This type-cast is needed because EmitEvents likely doesn't have `message` as a key. | ||
// if you specify the EmitEvents, the type of args will be never. | ||
this.emit("message", ...args); | ||
@@ -356,2 +340,4 @@ return this; | ||
write(...args) { | ||
// This type-cast is needed because EmitEvents likely doesn't have `message` as a key. | ||
// if you specify the EmitEvents, the type of args will be never. | ||
this.emit("message", ...args); | ||
@@ -358,0 +344,0 @@ return this; |
import { Namespace } from "./namespace"; | ||
import type { Server, RemoteSocket } from "./index"; | ||
import type { EventParams, EventNames, EventsMap, DefaultEventsMap } from "./typed-events"; | ||
import type { EventParams, EventsMap, DefaultEventsMap, EventNamesWithoutAck } from "./typed-events"; | ||
/** | ||
@@ -27,5 +27,5 @@ * A parent namespace is a special {@link Namespace} that holds a list of child namespaces which were created either | ||
_initAdapter(): void; | ||
emit<Ev extends EventNames<EmitEvents>>(ev: Ev, ...args: EventParams<EmitEvents, Ev>): boolean; | ||
emit<Ev extends EventNamesWithoutAck<EmitEvents>>(ev: Ev, ...args: EventParams<EmitEvents, Ev>): boolean; | ||
createChild(name: string): Namespace<ListenEvents, EmitEvents, ServerSideEvents, SocketData>; | ||
fetchSockets(): Promise<RemoteSocket<EmitEvents, SocketData>[]>; | ||
} |
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
import { Packet } from "socket.io-parser"; | ||
import { AllButLast, DecorateAcknowledgements, DecorateAcknowledgementsWithMultipleResponses, DefaultEventsMap, EventNames, EventParams, EventsMap, FirstArg, Last, StrictEventEmitter } from "./typed-events"; | ||
import { AllButLast, DecorateAcknowledgements, DecorateAcknowledgementsWithMultipleResponses, DefaultEventsMap, EventNames, EventNamesWithAck, EventParams, EventsMap, FirstNonErrorArg, Last, StrictEventEmitter } from "./typed-events"; | ||
import type { Client } from "./client"; | ||
@@ -200,3 +200,3 @@ import type { Namespace } from "./namespace"; | ||
*/ | ||
emitWithAck<Ev extends EventNames<EmitEvents>>(ev: Ev, ...args: AllButLast<EventParams<EmitEvents, Ev>>): Promise<FirstArg<Last<EventParams<EmitEvents, Ev>>>>; | ||
emitWithAck<Ev extends EventNamesWithAck<EmitEvents>>(ev: Ev, ...args: AllButLast<EventParams<EmitEvents, Ev>>): Promise<FirstNonErrorArg<Last<EventParams<EmitEvents, Ev>>>>; | ||
/** | ||
@@ -203,0 +203,0 @@ * @private |
@@ -21,2 +21,18 @@ /// <reference types="node" /> | ||
export declare type EventNames<Map extends EventsMap> = keyof Map & (string | symbol); | ||
/** | ||
* Returns a union type containing all the keys of an event map that have an acknowledgement callback. | ||
* | ||
* That also have *some* data coming in. | ||
*/ | ||
export declare type EventNamesWithAck<Map extends EventsMap, K extends EventNames<Map> = EventNames<Map>> = IfAny<Last<Parameters<Map[K]>> | Map[K], K, K extends (Last<Parameters<Map[K]>> extends (...args: any[]) => any ? FirstNonErrorArg<Last<Parameters<Map[K]>>> extends void ? never : K : never) ? K : never>; | ||
/** | ||
* Returns a union type containing all the keys of an event map that have an acknowledgement callback. | ||
* | ||
* That also have *some* data coming in. | ||
*/ | ||
export declare type EventNamesWithoutAck<Map extends EventsMap, K extends EventNames<Map> = EventNames<Map>> = IfAny<Last<Parameters<Map[K]>> | Map[K], K, K extends (Last<Parameters<Map[K]>> extends (...args: any[]) => any ? never : K) ? K : never>; | ||
export declare type RemoveAcknowledgements<E extends EventsMap> = { | ||
[K in EventNamesWithoutAck<E>]: E[K]; | ||
}; | ||
export declare type EventNamesWithError<Map extends EventsMap, K extends EventNamesWithAck<Map> = EventNamesWithAck<Map>> = IfAny<Last<Parameters<Map[K]>> | Map[K], K, K extends (LooseParameters<Last<Parameters<Map[K]>>>[0] extends Error ? K : never) ? K : never>; | ||
/** The tuple type representing the parameters of an event listener */ | ||
@@ -111,11 +127,51 @@ export declare type EventParams<Map extends EventsMap, Ev extends EventNames<Map>> = Parameters<Map[Ev]>; | ||
} | ||
export declare type Last<T extends any[]> = T extends [...infer H, infer L] ? L : any; | ||
/** | ||
* Returns a boolean for whether the given type is `any`. | ||
* | ||
* @link https://stackoverflow.com/a/49928360/1490091 | ||
* | ||
* Useful in type utilities, such as disallowing `any`s to be passed to a function. | ||
* | ||
* @author sindresorhus | ||
* @link https://github.com/sindresorhus/type-fest | ||
*/ | ||
declare type IsAny<T> = 0 extends 1 & T ? true : false; | ||
/** | ||
* An if-else-like type that resolves depending on whether the given type is `any`. | ||
* | ||
* @see {@link IsAny} | ||
* | ||
* @author sindresorhus | ||
* @link https://github.com/sindresorhus/type-fest | ||
*/ | ||
declare type IfAny<T, TypeIfAny = true, TypeIfNotAny = false> = IsAny<T> extends true ? TypeIfAny : TypeIfNotAny; | ||
/** | ||
* Extracts the type of the last element of an array. | ||
* | ||
* Use-case: Defining the return type of functions that extract the last element of an array, for example [`lodash.last`](https://lodash.com/docs/4.17.15#last). | ||
* | ||
* @author sindresorhus | ||
* @link https://github.com/sindresorhus/type-fest | ||
*/ | ||
export declare 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; | ||
export declare type FirstNonErrorTuple<T extends unknown[]> = T[0] extends Error ? T[1] : T[0]; | ||
export declare type AllButLast<T extends any[]> = T extends [...infer H, infer L] ? H : any[]; | ||
export declare type FirstArg<T> = T extends (arg: infer Param) => infer Result ? Param : any; | ||
export declare type SecondArg<T> = T extends (err: Error, arg: infer Param) => infer Result ? Param : any; | ||
/** | ||
* Like `Parameters<T>`, but doesn't require `T` to be a function ahead of time. | ||
*/ | ||
declare type LooseParameters<T> = T extends (...args: infer P) => any ? P : never; | ||
export declare type FirstNonErrorArg<T> = T extends (...args: infer Params) => any ? FirstNonErrorTuple<Params> : any; | ||
declare type PrependTimeoutError<T extends any[]> = { | ||
[K in keyof T]: T[K] extends (...args: infer Params) => infer Result ? (err: Error, ...args: Params) => Result : T[K]; | ||
[K in keyof T]: T[K] extends (...args: infer Params) => infer Result ? Params[0] extends Error ? T[K] : (err: Error, ...args: Params) => Result : T[K]; | ||
}; | ||
export declare type MultiplyArray<T extends unknown[]> = { | ||
[K in keyof T]: T[K][]; | ||
}; | ||
declare type InferFirstAndPreserveLabel<T extends any[]> = T extends [any, ...infer R] ? T extends [...infer H, ...R] ? H : never : never; | ||
/** | ||
* Utility type to decorate the acknowledgement callbacks multiple values | ||
* on the first non error element while removing any elements after | ||
*/ | ||
declare type ExpectMultipleResponses<T extends any[]> = { | ||
[K in keyof T]: T[K] extends (err: Error, arg: infer Param) => infer Result ? (err: Error, arg: Param[]) => Result : T[K]; | ||
[K in keyof T]: T[K] extends (...args: infer Params) => infer Result ? 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 : T[K]; | ||
}; | ||
@@ -122,0 +178,0 @@ /** |
{ | ||
"name": "socket.io", | ||
"version": "4.7.2", | ||
"version": "4.7.3", | ||
"description": "node.js realtime framework server", | ||
@@ -69,3 +69,3 @@ "keywords": [ | ||
"ts-node": "^10.2.1", | ||
"tsd": "^0.21.0", | ||
"tsd": "^0.27.0", | ||
"typescript": "^4.4.2", | ||
@@ -72,0 +72,0 @@ "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.30.0" |
@@ -25,2 +25,3 @@ # socket.io | ||
- [Rust](https://github.com/1c3t3a/rust-socketio) | ||
- [PHP](https://github.com/ElephantIO/elephant.io) | ||
@@ -27,0 +28,0 @@ Its main features are: |
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
1318695
10533
272