mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-11 17:13:31 +01:00
refactor: use interfaces for AsyncEventEmitter event maps (#10044)
* refactor: use interfaces for AsyncEventEmitter event maps * refactor: apply suggestions from code review and add tests * refactor: better errors on missing dispatch types
This commit is contained in:
@@ -9,11 +9,13 @@ import {
|
||||
type RESTGetAPIGatewayBotResult,
|
||||
type GatewayIntentBits,
|
||||
type GatewaySendPayload,
|
||||
type GatewayDispatchPayload,
|
||||
type GatewayReadyDispatchData,
|
||||
} from 'discord-api-types/v10';
|
||||
import type { IShardingStrategy } from '../strategies/sharding/IShardingStrategy.js';
|
||||
import type { IIdentifyThrottler } from '../throttling/IIdentifyThrottler.js';
|
||||
import { DefaultWebSocketManagerOptions, type CompressionMethod, type Encoding } from '../utils/constants.js';
|
||||
import type { WebSocketShardDestroyOptions, WebSocketShardEventsMap } from './WebSocketShard.js';
|
||||
import type { WebSocketShardDestroyOptions, WebSocketShardEvents } from './WebSocketShard.js';
|
||||
|
||||
/**
|
||||
* Represents a range of shard ids
|
||||
@@ -178,13 +180,24 @@ export interface OptionalWebSocketManagerOptions {
|
||||
version: string;
|
||||
}
|
||||
|
||||
export type WebSocketManagerOptions = OptionalWebSocketManagerOptions & RequiredWebSocketManagerOptions;
|
||||
export interface WebSocketManagerOptions extends OptionalWebSocketManagerOptions, RequiredWebSocketManagerOptions {}
|
||||
|
||||
export type ManagerShardEventsMap = {
|
||||
[K in keyof WebSocketShardEventsMap]: [
|
||||
WebSocketShardEventsMap[K] extends [] ? { shardId: number } : WebSocketShardEventsMap[K][0] & { shardId: number },
|
||||
export interface CreateWebSocketManagerOptions
|
||||
extends Partial<OptionalWebSocketManagerOptions>,
|
||||
RequiredWebSocketManagerOptions {}
|
||||
|
||||
export interface ManagerShardEventsMap {
|
||||
[WebSocketShardEvents.Closed]: [{ code: number; shardId: number }];
|
||||
[WebSocketShardEvents.Debug]: [payload: { message: string; shardId: number }];
|
||||
[WebSocketShardEvents.Dispatch]: [payload: { data: GatewayDispatchPayload; shardId: number }];
|
||||
[WebSocketShardEvents.Error]: [payload: { error: Error; shardId: number }];
|
||||
[WebSocketShardEvents.Hello]: [{ shardId: number }];
|
||||
[WebSocketShardEvents.Ready]: [payload: { data: GatewayReadyDispatchData; shardId: number }];
|
||||
[WebSocketShardEvents.Resumed]: [{ shardId: number }];
|
||||
[WebSocketShardEvents.HeartbeatComplete]: [
|
||||
payload: { ackAt: number; heartbeatAt: number; latency: number; shardId: number },
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
export class WebSocketManager extends AsyncEventEmitter<ManagerShardEventsMap> {
|
||||
/**
|
||||
@@ -212,7 +225,7 @@ export class WebSocketManager extends AsyncEventEmitter<ManagerShardEventsMap> {
|
||||
*/
|
||||
private readonly strategy: IShardingStrategy;
|
||||
|
||||
public constructor(options: Partial<OptionalWebSocketManagerOptions> & RequiredWebSocketManagerOptions) {
|
||||
public constructor(options: CreateWebSocketManagerOptions) {
|
||||
super();
|
||||
this.options = { ...DefaultWebSocketManagerOptions, ...options };
|
||||
this.strategy = this.options.buildStrategy(this);
|
||||
|
||||
@@ -52,8 +52,7 @@ export enum WebSocketShardDestroyRecovery {
|
||||
Resume,
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
|
||||
export type WebSocketShardEventsMap = {
|
||||
export interface WebSocketShardEventsMap {
|
||||
[WebSocketShardEvents.Closed]: [{ code: number }];
|
||||
[WebSocketShardEvents.Debug]: [payload: { message: string }];
|
||||
[WebSocketShardEvents.Dispatch]: [payload: { data: GatewayDispatchPayload }];
|
||||
@@ -62,7 +61,7 @@ export type WebSocketShardEventsMap = {
|
||||
[WebSocketShardEvents.Ready]: [payload: { data: GatewayReadyDispatchData }];
|
||||
[WebSocketShardEvents.Resumed]: [];
|
||||
[WebSocketShardEvents.HeartbeatComplete]: [payload: { ackAt: number; heartbeatAt: number; latency: number }];
|
||||
};
|
||||
}
|
||||
|
||||
export interface WebSocketShardDestroyOptions {
|
||||
code?: number;
|
||||
|
||||
Reference in New Issue
Block a user