import * as _vueuse_core0 from "@vueuse/core"; import { MaybeRefOrGetter, Ref, ShallowRef } from "vue"; //#region src/use-web-socket.d.ts /** * WebSocket 连接状态类型 * - CONNECTING: 连接中 * - OPEN: 已连接 * - CLOSING: 关闭中 * - CLOSED: 已关闭 * - PENDING: 待连接 */ type State = 'CONNECTING' | 'OPEN' | 'CLOSING' | 'CLOSED' | 'PENDING'; /** * 自动重试配置类型 * - boolean: 是否启用自动重试 * - object: 详细配置 * - retries?: 最大重试次数,默认为 3 * - delay?: 重试延迟(毫秒),默认为 1000 * - onFailed?: 重试失败回调 */ type AutoRetry = boolean | { /** 最大重试次数,默认为 3 */retries?: number; /** 重试延迟(毫秒),默认为 1000 */ delay?: number; /** 重试失败回调 */ onFailed?: () => void; }; /** * 原始消息类型 * - string: 文本消息 * - ArrayBuffer: 二进制消息 * - Blob: 二进制大对象 */ type MessageRaw = string | ArrayBuffer | Blob; /** * WebSocket 选项类型 * @template T 处理器类型 * @example * const options: UseWebsocketOptions = { * protocols: 'chat', * manual: false, * autoRetry: true, * parseMessage: true, * handlerKey: 'type', * maxRecordSize: 100 * } */ type UseWebsocketOptions = { /** WebSocket 协议,默认为 undefined */protocols?: string | string[]; /** 是否手动连接,默认为 false(自动连接) */ manual?: boolean; /** 自动重试配置,默认为 undefined */ autoRetry?: AutoRetry; /** * 消息解析配置 * - boolean: 是否解析为 JSON * - function: 自定义解析函数 * 默认为 false */ parseMessage?: boolean | ((raw: MessageRaw) => Record | Promise>); /** 消息处理器键名,默认为 'type' */ handlerKey?: string; /** 最大记录大小,默认为 100 */ maxRecordSize?: number; }; /** * 消息处理器类型 * 定义消息类型的键值对结构 */ type HandlerType = { [key: string]: unknown; }; /** * 返回处理器类型 * @template U 处理器类型 * @example * type MyHandler = ReturnHandlerType<{ * ping: { timestamp: number } * pong: { timestamp: number } * }> */ type ReturnHandlerType = { [K in keyof U]: { [key: string]: unknown; /** 消息类型 */ type: K; /** 消息负载 */ payload: U[K]; } }[keyof U]; /** * WebSocket 工具函数 * 提供 WebSocket 连接管理、消息发送与接收、自动重试等功能 * * @template T 处理器类型 * @template D 消息数据类型 * @param url WebSocket 连接地址,支持响应式引用 * @param options WebSocket 配置选项 * @returns WebSocket 实例及相关方法 * * @example * // 基本用法 * const { status, data, send, onMessage } = useWebSocket('wss://echo.websocket.org') * * onMessage((event) => { * console.log('收到消息:', event.data) * }) * * send({ type: 'ping', timestamp: Date.now() }) * * @example * // 带类型定义的用法 * interface MessageTypes { * ping: { timestamp: number } * pong: { timestamp: number } * } * * const { registerHandler } = useWebSocket('wss://echo.websocket.org', { * parseMessage: true * }) * * registerHandler('pong', (data) => { * console.log('收到 pong 消息:', data.timestamp) * }) */ declare function useWebSocket(url?: MaybeRefOrGetter, options?: UseWebsocketOptions): { socket: ShallowRef; url: Ref; status: Ref; data: Ref; dataRecord: Ref; messageEvent: Ref | null, MessageEvent | null>; messageEventRecord: Ref[], MessageEvent[]>; error: Ref; controller: ShallowRef; connect: (url?: string | URL, protocols?: string | string[]) => void; close: () => void; sendRaw: (data: D_1) => void; send: (data: D_1) => void; destroy: () => void; registerHandler: (type: K, handler: (data: T[K]) => void) => () => void; cancelHandler: (type: K, handler: (data: T[K]) => void) => void; registerEvent: (type: string, handler: (ev: Event) => void) => void; onOpen: _vueuse_core0.EventHookOn<[Event]>; onMessage: _vueuse_core0.EventHookOn<[MessageEvent]>; onClose: _vueuse_core0.EventHookOn<[CloseEvent]>; onError: _vueuse_core0.EventHookOn<[Event]>; onFailed: _vueuse_core0.EventHookOn<[Event]>; }; /** * useWebSocket 函数返回类型 * 包含 WebSocket 实例、状态、方法和事件钩子 * @example * const ws: UseWebSocketReturns = useWebSocket('wss://example.com') */ type UseWebSocketReturns = ReturnType; //#endregion export { ReturnHandlerType, UseWebSocketReturns, UseWebsocketOptions, useWebSocket };