@rfkit/json-rpc-websocket 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 优化的 MessagePack 反序列化器
3
+ * 性能优化:
4
+ * - 添加边界检查
5
+ * - 类型安全
6
+ * - 优化读取逻辑
7
+ */
8
+ import type { DeserializeOptions } from './types';
9
+ export declare function deserialize<T = unknown>(array: Uint8Array | ArrayBuffer | number[], options?: DeserializeOptions): T;
10
+ //# sourceMappingURL=deserializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deserializer.d.ts","sourceRoot":"","sources":["../../src/pack/deserializer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAiB,MAAM,SAAS,CAAC;AAKjE,wBAAgB,WAAW,CAAC,CAAC,GAAG,OAAO,EACrC,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,MAAM,EAAE,EAC1C,OAAO,CAAC,EAAE,kBAAkB,GAC3B,CAAC,CA4PH"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * MessagePack 编解码(优化版本)
3
+ */
4
+ import { deserialize as deserializeFunc } from './deserializer';
5
+ import { serialize as serializeFunc } from './serializer';
6
+ export declare const serialize: typeof serializeFunc;
7
+ export declare const deserialize: typeof deserializeFunc;
8
+ export declare const encode: typeof serializeFunc;
9
+ export declare const decode: typeof deserializeFunc;
10
+ export type { SerializeOptions, DeserializeOptions } from './types';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pack/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,cAAc,CAAC;AAE1D,eAAO,MAAM,SAAS,sBAAgB,CAAC;AACvC,eAAO,MAAM,WAAW,wBAAkB,CAAC;AAG3C,eAAO,MAAM,MAAM,sBAAgB,CAAC;AACpC,eAAO,MAAM,MAAM,wBAAkB,CAAC;AAGtC,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 优化的 MessagePack 序列化器
3
+ * 性能优化:
4
+ * - 类型安全(移除 any)
5
+ * - 优化的 buffer 增长策略(1.5倍)
6
+ * - 预分配常见大小
7
+ */
8
+ import type { SerializeOptions } from './types';
9
+ /**
10
+ * 可序列化的值类型
11
+ * 使用 unknown 保持类型安全,运行时检查具体类型
12
+ */
13
+ type SerializableValue = unknown;
14
+ export declare function serialize(data: SerializableValue | SerializableValue[], options?: SerializeOptions): Uint8Array;
15
+ export {};
16
+ //# sourceMappingURL=serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/pack/serializer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGhD;;;GAGG;AACH,KAAK,iBAAiB,GAAG,OAAO,CAAC;AAKjC,wBAAgB,SAAS,CACvB,IAAI,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,EAC7C,OAAO,CAAC,EAAE,gBAAgB,GACzB,UAAU,CAwSZ"}
@@ -0,0 +1,15 @@
1
+ export interface SerializeOptions {
2
+ multiple?: boolean;
3
+ invalidTypeReplacement?: ((value: unknown) => boolean | number | string | [] | object | null) | boolean | number | string | [] | object | null;
4
+ }
5
+ export interface DeserializeOptions {
6
+ multiple?: boolean;
7
+ }
8
+ export type SerializableValue = undefined | null | boolean | number | string | Date | Uint8Array | Uint8ClampedArray | Int8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | SerializableValue[] | {
9
+ [key: string]: SerializableValue;
10
+ };
11
+ export interface ExtensionData {
12
+ type: number;
13
+ data: Uint8Array;
14
+ }
15
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/pack/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sBAAsB,CAAC,EACnB,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,GACpE,OAAO,GACP,MAAM,GACN,MAAM,GACN,EAAE,GACF,MAAM,GACN,IAAI,CAAC;CACV;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,IAAI,GACJ,UAAU,GACV,iBAAiB,GACjB,SAAS,GACT,UAAU,GACV,WAAW,GACX,UAAU,GACV,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,iBAAiB,EAAE,GACnB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAAA;CAAE,CAAC;AAEzC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;CAClB"}
package/pack/utf8.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 优化的 UTF-8 编解码
3
+ * 性能优化:
4
+ * - ASCII 快速路径(零拷贝)
5
+ * - 动态内存分配策略(1.5倍增长)
6
+ * - 减少边界检查次数
7
+ */
8
+ /**
9
+ * 编码 UTF-8(优化版本)
10
+ */
11
+ export declare function encodeUtf8(str: string): Uint8Array;
12
+ /**
13
+ * 解码 UTF-8(优化版本)
14
+ */
15
+ export declare function decodeUtf8(bytes: Uint8Array, start: number, length: number): string;
16
+ //# sourceMappingURL=utf8.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utf8.d.ts","sourceRoot":"","sources":["../../src/pack/utf8.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAoElD;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,MAAM,CAyER"}
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "types": "index.d.ts",
6
6
  "author": "Hxgh",
7
7
  "license": "MIT",
8
- "version": "0.2.0",
8
+ "version": "0.2.1",
9
9
  "private": false,
10
10
  "keywords": [
11
11
  "json-rpc",
package/tools.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * 生成四位随机数(十六进制)
3
+ * @returns {string} 四位十六进制随机数
4
+ */
5
+ export declare const generateHexSegment: () => string;
6
+ /**
7
+ * 生成全局唯一标识符(UUID)
8
+ * 格式: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
9
+ * @returns {string} 符合RFC4122标准的UUID字符串
10
+ */
11
+ export declare const generateUUID: () => string;
12
+ /**
13
+ * 生成简单的唯一ID(更短的标识符)
14
+ * @param {number} [length=8] ID的长度
15
+ * @returns {string} 指定长度的随机ID
16
+ */
17
+ export declare const generateId: (length?: number) => string;
18
+ //# sourceMappingURL=tools.d.ts.map
package/tools.d.ts.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAO,MAC2B,CAAC;AAElE;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAAO,MAQ/B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,eAAU,KAAG,MAWvC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 导出所有类型定义
3
+ */
4
+ export * from './jsonrpc';
5
+ export * from './socket';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * JSON-RPC 2.0 核心类型定义
3
+ * 完全符合规范: https://www.jsonrpc.org/specification
4
+ */
5
+ /**
6
+ * JSON-RPC 2.0 请求
7
+ */
8
+ export interface JsonRpcRequest<T = unknown> {
9
+ jsonrpc: '2.0';
10
+ method: string;
11
+ params?: T;
12
+ id?: string | number | null;
13
+ }
14
+ /**
15
+ * JSON-RPC 2.0 成功响应
16
+ */
17
+ export interface JsonRpcSuccess<T = unknown> {
18
+ jsonrpc: '2.0';
19
+ result: T;
20
+ id: string | number | null;
21
+ }
22
+ /**
23
+ * JSON-RPC 2.0 错误响应
24
+ */
25
+ export interface JsonRpcError {
26
+ jsonrpc: '2.0';
27
+ error: {
28
+ code: number;
29
+ message: string;
30
+ data?: unknown;
31
+ };
32
+ id: string | number | null;
33
+ }
34
+ /**
35
+ * JSON-RPC 2.0 通知(无需响应)
36
+ */
37
+ export interface JsonRpcNotification<T = unknown> {
38
+ jsonrpc: '2.0';
39
+ method: string;
40
+ params?: T;
41
+ }
42
+ /**
43
+ * JSON-RPC 2.0 响应(成功或错误)
44
+ */
45
+ export type JsonRpcResponse<T = unknown> = JsonRpcSuccess<T> | JsonRpcError;
46
+ /**
47
+ * JSON-RPC 2.0 消息(请求、响应或通知)
48
+ */
49
+ export type JsonRpcMessage<T = unknown> = JsonRpcRequest<T> | JsonRpcResponse<T> | JsonRpcNotification<T>;
50
+ /**
51
+ * 标准错误码
52
+ */
53
+ export declare enum JsonRpcErrorCode {
54
+ ParseError = -32700,
55
+ InvalidRequest = -32600,
56
+ MethodNotFound = -32601,
57
+ InvalidParams = -32602,
58
+ InternalError = -32603,
59
+ ServerError = -32000,
60
+ Timeout = -32001,
61
+ ConnectionClosed = -32002
62
+ }
63
+ /**
64
+ * 创建错误响应
65
+ */
66
+ export declare function createErrorResponse(id: string | number | null, code: JsonRpcErrorCode, message: string, data?: unknown): JsonRpcError;
67
+ /**
68
+ * 创建成功响应
69
+ */
70
+ export declare function createSuccessResponse<T>(id: string | number | null, result: T): JsonRpcSuccess<T>;
71
+ /**
72
+ * 类型守卫:检查是否为错误响应
73
+ */
74
+ export declare function isJsonRpcError(response: JsonRpcResponse): response is JsonRpcError;
75
+ /**
76
+ * 类型守卫:检查是否为成功响应
77
+ */
78
+ export declare function isJsonRpcSuccess<T>(response: JsonRpcResponse<T>): response is JsonRpcSuccess<T>;
79
+ /**
80
+ * 类型守卫:检查是否为通知
81
+ */
82
+ export declare function isJsonRpcNotification(message: JsonRpcMessage): message is JsonRpcNotification;
83
+ //# sourceMappingURL=jsonrpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonrpc.d.ts","sourceRoot":"","sources":["../../src/types/jsonrpc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,CAAC,CAAC;IACV,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,OAAO;IAC9C,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,CAAC,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,OAAO,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;AAE5E;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAClC,cAAc,CAAC,CAAC,CAAC,GACjB,eAAe,CAAC,CAAC,CAAC,GAClB,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAE3B;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,UAAU,SAAS;IACnB,cAAc,SAAS;IACvB,cAAc,SAAS;IACvB,aAAa,SAAS;IACtB,aAAa,SAAS;IACtB,WAAW,SAAS;IACpB,OAAO,SAAS;IAChB,gBAAgB,SAAS;CAC1B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAC1B,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,OAAO,GACb,YAAY,CAMd;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAC1B,MAAM,EAAE,CAAC,GACR,cAAc,CAAC,CAAC,CAAC,CAMnB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,eAAe,GACxB,QAAQ,IAAI,YAAY,CAE1B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,GAC3B,QAAQ,IAAI,cAAc,CAAC,CAAC,CAAC,CAE/B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,GACtB,OAAO,IAAI,mBAAmB,CAEhC"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * WebSocket 客户端类型定义
3
+ */
4
+ import type { JsonRpcResponse } from './jsonrpc';
5
+ /**
6
+ * WebSocket 连接状态
7
+ */
8
+ export declare enum ConnectionState {
9
+ Connecting = 0,
10
+ Open = 1,
11
+ Closing = 2,
12
+ Closed = 3
13
+ }
14
+ /**
15
+ * 连接配置
16
+ */
17
+ export interface ConnectionOptions {
18
+ /** WebSocket URL */
19
+ url: string;
20
+ /** WebSocket 协议 */
21
+ protocols?: string | string[];
22
+ /** 自动重连 */
23
+ autoReconnect?: boolean;
24
+ /** 重连间隔(毫秒) */
25
+ reconnectInterval?: number;
26
+ /** 最大重连次数 */
27
+ maxReconnectAttempts?: number;
28
+ /** 默认超时时间(毫秒) */
29
+ defaultTimeout?: number;
30
+ /** 心跳间隔(毫秒),0 表示禁用 */
31
+ heartbeatInterval?: number;
32
+ /** 心跳方法名 */
33
+ heartbeatMethod?: string;
34
+ /** 是否启用调试日志 */
35
+ debug?: boolean;
36
+ }
37
+ /**
38
+ * 请求配置
39
+ */
40
+ export interface RequestOptions<TParams = unknown> {
41
+ /** 方法名 */
42
+ method: string;
43
+ /** 参数 */
44
+ params?: TParams;
45
+ /** 超时时间(毫秒) */
46
+ timeout?: number;
47
+ /** 请求 ID(可选,自动生成) */
48
+ id?: string | number;
49
+ }
50
+ /**
51
+ * 通知配置(不需要响应)
52
+ */
53
+ export interface NotificationOptions<TParams = unknown> {
54
+ /** 方法名 */
55
+ method: string;
56
+ /** 参数 */
57
+ params?: TParams;
58
+ }
59
+ /**
60
+ * 流式请求配置
61
+ */
62
+ export interface StreamOptions<TParams = unknown> {
63
+ /** 方法名 */
64
+ method: string;
65
+ /** 参数 */
66
+ params?: TParams;
67
+ /** 流 ID(可选,自动生成) */
68
+ id?: string | number;
69
+ }
70
+ /**
71
+ * 流式响应控制器
72
+ */
73
+ export interface StreamController {
74
+ /** 流 ID */
75
+ readonly id: string | number;
76
+ /** 关闭流 */
77
+ close(): void;
78
+ /** 流是否已关闭 */
79
+ readonly closed: boolean;
80
+ }
81
+ /**
82
+ * 消息事件数据(包含原始数据用于转发)
83
+ */
84
+ export interface MessageEventData {
85
+ /** 解码后的消息 */
86
+ data: JsonRpcResponse;
87
+ /** 原始二进制数据(用于转发) */
88
+ rawData: ArrayBuffer;
89
+ }
90
+ /**
91
+ * 事件名称常量
92
+ */
93
+ export declare const SocketEvent: {
94
+ readonly Open: "open";
95
+ readonly Close: "close";
96
+ readonly Error: "error";
97
+ readonly Message: "message";
98
+ readonly Reconnecting: "reconnecting";
99
+ readonly Reconnected: "reconnected";
100
+ readonly ReconnectFailed: "reconnect_failed";
101
+ };
102
+ /**
103
+ * 事件类型
104
+ */
105
+ export interface SocketEvents extends Record<string, unknown> {
106
+ /** 连接打开 */
107
+ open: Event;
108
+ /** 连接关闭 */
109
+ close: CloseEvent;
110
+ /** 连接错误 */
111
+ error: Event;
112
+ /** 收到消息 */
113
+ message: MessageEventData;
114
+ /** 重连中 */
115
+ reconnecting: {
116
+ attempt: number;
117
+ maxAttempts: number;
118
+ };
119
+ /** 重连成功 */
120
+ reconnected: undefined;
121
+ /** 重连失败 */
122
+ reconnect_failed: undefined;
123
+ }
124
+ /**
125
+ * 事件监听器
126
+ */
127
+ export type EventListener<T = unknown> = (data: T) => void;
128
+ /**
129
+ * 请求元数据
130
+ */
131
+ export interface RequestMetadata {
132
+ /** 请求 ID */
133
+ id: string | number;
134
+ /** 发送时间戳 */
135
+ timestamp: number;
136
+ /** 超时定时器 */
137
+ timeoutId: NodeJS.Timeout;
138
+ /** 成功回调 */
139
+ resolve: (value: unknown) => void;
140
+ /** 失败回调 */
141
+ reject: (error: Error) => void;
142
+ }
143
+ /**
144
+ * 性能统计
145
+ */
146
+ export interface PerformanceStats {
147
+ /** 发送的请求总数 */
148
+ requestsSent: number;
149
+ /** 接收的响应总数 */
150
+ responsesReceived: number;
151
+ /** 超时的请求数 */
152
+ timeouts: number;
153
+ /** 错误的响应数 */
154
+ errors: number;
155
+ /** 平均响应时间(毫秒) */
156
+ averageResponseTime: number;
157
+ /** 当前待处理请求数 */
158
+ pendingRequests: number;
159
+ /** 重连次数 */
160
+ reconnectCount: number;
161
+ }
162
+ //# sourceMappingURL=socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/types/socket.ts"],"names":[],"mappings":"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"}