@xuzhiyang/syncvar 1.1.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,317 @@
1
+ /**
2
+ * WaterBear SDK - WebSocket 变量同步 SDK
3
+ * @version 1.1.1
4
+ */
5
+
6
+ /**
7
+ * 数据传输格式
8
+ */
9
+ export const NetPackFormat: Readonly<{
10
+ JsonString: 0;
11
+ MessagePack: 1;
12
+ }>;
13
+
14
+ /**
15
+ * WebSocketClient 连接配置
16
+ */
17
+ export interface WebSocketClientOptions {
18
+ /** WebSocket 服务地址,默认 wss://varserver.popx.com/ws/syncvar */
19
+ url?: string;
20
+ /** 命名空间/房间,隔离不同业务 */
21
+ namespace?: string;
22
+ /** 客户端 GUID,用于恢复会话或追踪 */
23
+ guid?: string;
24
+ /** 数据传输格式,0 为 JSON,1 为 MessagePack,默认 1 */
25
+ packFormat?: 0 | 1;
26
+ /** 连接成功后的回调 */
27
+ onopen?: (ws: WebSocket, event: Event) => void;
28
+ /** 连接关闭时的回调 */
29
+ onclose?: (event: CloseEvent) => void;
30
+ /** 连接或消息处理异常时的回调 */
31
+ onerror?: (error: Error) => void;
32
+ /** 连接超时时间(毫秒),默认 5000 */
33
+ timeout?: number;
34
+ /** 最大重连次数,默认 100 */
35
+ maxReconnectCount?: number;
36
+ }
37
+
38
+ /**
39
+ * WebSocket 实例扩展接口
40
+ */
41
+ export interface WebSocketWithExtensions extends WebSocket {
42
+ /** 客户端 ID */
43
+ id?: string;
44
+ }
45
+
46
+ /**
47
+ * 创建 WebSocket 客户端
48
+ */
49
+ export function WebSocketClient(options: WebSocketClientOptions): Promise<WebSocketWithExtensions>;
50
+ export function WebSocketClient(host: string, params?: WebSocketClientOptions): Promise<WebSocketWithExtensions>;
51
+
52
+ /**
53
+ * SyncVar 配置选项
54
+ */
55
+ export interface SyncVarOptions {
56
+ /** 变更打包延迟(毫秒),合并频繁修改,默认 50 */
57
+ delay?: number;
58
+ /** 与服务端交互的 Promise 超时时间(毫秒),默认 10000 */
59
+ promiseTimeout?: number;
60
+ }
61
+
62
+ /**
63
+ * SyncVar 同步选项
64
+ */
65
+ export interface SyncVarSyncOptions {
66
+ /** 重置变量的初始值 */
67
+ reset?: Record<string, any>;
68
+ /** 存储变量到本地 */
69
+ store?: boolean;
70
+ }
71
+
72
+ /**
73
+ * 代理对象扩展接口
74
+ */
75
+ export interface ProxyObject {
76
+ /** 获取分布式锁 */
77
+ lock?(options?: { timeout?: number }): Promise<ProxyObject>;
78
+ /** 释放锁 */
79
+ unlock?(): void;
80
+ /** 注册更新回调 */
81
+ watch(callback: (value: any) => void): void;
82
+ }
83
+
84
+ /**
85
+ * 变量同步类
86
+ */
87
+ export class SyncVar {
88
+ /** 获取 WebSocket 实例 */
89
+ get ws(): WebSocketWithExtensions | null;
90
+ /** 获取客户端 ID */
91
+ get id(): string | undefined;
92
+
93
+ /**
94
+ * 创建 SyncVar 实例
95
+ */
96
+ constructor(options?: SyncVarOptions);
97
+
98
+ /**
99
+ * 绑定 WebSocket 连接
100
+ */
101
+ bind(ws: WebSocketWithExtensions): Promise<SyncVar>;
102
+
103
+ /**
104
+ * 关闭 WebSocket 连接
105
+ */
106
+ close(): void;
107
+
108
+ /**
109
+ * 销毁 SyncVar 实例
110
+ */
111
+ destroy(): void;
112
+
113
+ /**
114
+ * 等待服务器确认写入完成
115
+ */
116
+ waitUpdated(): Promise<void>;
117
+
118
+ /**
119
+ * 绑定 RPC 函数(必须使用命名函数)
120
+ */
121
+ rpcBind(func: Function): Promise<void>;
122
+
123
+ /**
124
+ * 调用远程 RPC 函数
125
+ */
126
+ rpcCall<T = any>(name: string, params: any): Promise<T>;
127
+
128
+ /**
129
+ * 同步变量
130
+ */
131
+ sync<T extends Record<string, any>>(
132
+ names: string | string[],
133
+ options?: SyncVarSyncOptions
134
+ ): Promise<T>;
135
+ }
136
+
137
+ /**
138
+ * Worker 配置选项
139
+ */
140
+ export interface WorkerOptions {
141
+ /** 接收服务端日志 */
142
+ onlog?: (...args: any[]) => void;
143
+ /** 接收服务端错误 */
144
+ onerror?: (error: any) => void;
145
+ /** 接收 worker 退出事件 */
146
+ onexit?: (exitInfo: any) => void;
147
+ /** 操作超时时间(毫秒),默认 10000 */
148
+ promiseTimeout?: number;
149
+ }
150
+
151
+ /**
152
+ * Worker 运行参数
153
+ */
154
+ export interface WorkerRunOptions {
155
+ /** 要执行的代码 */
156
+ code: string;
157
+ /** Worker 名称 */
158
+ name: string;
159
+ /** Worker 数据 */
160
+ workerData?: any;
161
+ }
162
+
163
+ /**
164
+ * Worker 执行类
165
+ */
166
+ export class Worker {
167
+ /**
168
+ * 创建 Worker 实例
169
+ */
170
+ constructor(options?: WorkerOptions);
171
+
172
+ /**
173
+ * 绑定 WebSocket 连接
174
+ */
175
+ bind(ws: WebSocketWithExtensions): Promise<Worker>;
176
+
177
+ /**
178
+ * 处理 WebSocket 消息
179
+ */
180
+ onMessage(msg: any): void;
181
+
182
+ /**
183
+ * 运行 Worker
184
+ */
185
+ run(options: WorkerRunOptions): Promise<string>;
186
+
187
+ /**
188
+ * 终止 Worker
189
+ */
190
+ kill(options: { name: string }): Promise<void>;
191
+
192
+ /**
193
+ * 关联到已存在的 Worker
194
+ */
195
+ attach(options: { name: string }): Promise<void>;
196
+
197
+ /**
198
+ * 获取所有 Worker 列表
199
+ */
200
+ lists(): Promise<any[]>;
201
+ }
202
+
203
+ /**
204
+ * SSE 配置选项
205
+ */
206
+ export interface SSEOptions {
207
+ /** SSE 服务地址 */
208
+ host?: string;
209
+ /** 命名空间 */
210
+ namespace?: string;
211
+ /** 错误回调 */
212
+ onError?: (error: Error) => void;
213
+ }
214
+
215
+ /**
216
+ * SSE 监听配置
217
+ */
218
+ export interface SSEWatchOptions {
219
+ /** 变量监听配置(字符串数组、函数数组或对象) */
220
+ vars?: string[] | Function[] | Record<string, Function>;
221
+ /** 事件监听配置(字符串数组、函数数组或对象) */
222
+ events?: string[] | Function[] | Record<string, Function>;
223
+ }
224
+
225
+ /**
226
+ * SSE 变量更新回调参数
227
+ */
228
+ export interface SSEVariableUpdate {
229
+ /** 变量名 */
230
+ name: string;
231
+ /** 变量值 */
232
+ value: any;
233
+ }
234
+
235
+ /**
236
+ * SSE(服务器发送事件)类
237
+ */
238
+ export class SSE {
239
+ /**
240
+ * 创建 SSE 实例
241
+ */
242
+ constructor(options?: SSEOptions);
243
+
244
+ /**
245
+ * 发送事件到服务器(静态方法)
246
+ */
247
+ static emit(event: string, data: any, options?: SSEOptions): Promise<Response>;
248
+
249
+ /**
250
+ * 监听变量和事件
251
+ */
252
+ watch(options: SSEWatchOptions): Promise<SSE>;
253
+
254
+ /**
255
+ * 注册事件监听器
256
+ */
257
+ onEvent(event: string, listener: Function, options?: any): void;
258
+
259
+ /**
260
+ * 移除事件监听器
261
+ */
262
+ offEvent(event: string, listener: Function, options?: any): void;
263
+
264
+ /**
265
+ * 发送事件到服务器
266
+ */
267
+ emit(event: string, data: any): Promise<Response>;
268
+
269
+ /**
270
+ * 关闭 SSE 连接
271
+ */
272
+ close(): void;
273
+
274
+ /**
275
+ * 获取所有变量快照
276
+ */
277
+ getAll(): Map<string, any>;
278
+
279
+ /**
280
+ * 获取单个变量的当前值
281
+ */
282
+ get(name: string): any;
283
+ }
284
+
285
+ /**
286
+ * 版本信息类
287
+ */
288
+ export class VersionInfo {
289
+ /** SDK 版本号 */
290
+ static readonly Version: string;
291
+ /** 构建时间 */
292
+ static readonly BuildTime: string;
293
+
294
+ /**
295
+ * 打印版本信息到控制台
296
+ */
297
+ static printInfo(): void;
298
+ }
299
+
300
+ /**
301
+ * 全局类型扩展(浏览器环境)
302
+ */
303
+ declare global {
304
+ interface Window {
305
+ /** WaterBear SDK 全局对象(UMD 模式) */
306
+ WaterBear?: {
307
+ WebSocketClient: typeof WebSocketClient;
308
+ SyncVar: typeof SyncVar;
309
+ Worker: typeof Worker;
310
+ SSE: typeof SSE;
311
+ VersionInfo: typeof VersionInfo;
312
+ NetPackFormat: typeof NetPackFormat;
313
+ };
314
+ }
315
+ }
316
+
317
+ export {};
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@xuzhiyang/syncvar",
3
+ "version": "1.1.1",
4
+ "description": "WaterBear SDK - WebSocket 变量同步、锁、RPC、事件订阅和 Worker 执行能力",
5
+ "main": "./dist/syncvar.mjs",
6
+ "module": "./dist/syncvar.mjs",
7
+ "browser": "./dist/syncvar.js",
8
+ "types": "./dist/types.d.ts",
9
+ "type": "module",
10
+ "exports": {
11
+ ".": {
12
+ "import": "./dist/syncvar.mjs",
13
+ "require": "./dist/syncvar.js",
14
+ "types": "./dist/types.d.ts"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "README.md",
20
+ "LICENSE"
21
+ ],
22
+ "scripts": {
23
+ "build": "rollup -c",
24
+ "public": "npm publish --access=public",
25
+ "prepublishOnly": "npm run build"
26
+ },
27
+ "keywords": [
28
+ "websocket",
29
+ "realtime",
30
+ "sync",
31
+ "variables",
32
+ "rpc",
33
+ "sse",
34
+ "worker",
35
+ "messagepack",
36
+ "collaboration",
37
+ "state-sync"
38
+ ],
39
+ "author": "xuzhiyang",
40
+ "license": "ISC",
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "https://webdev.popx.com/v3/project/xuzhiyang/SyncVar"
44
+ },
45
+ "homepage": "https://webdev.popx.com/v3/project/xuzhiyang/SyncVar",
46
+ "bugs": {
47
+ "url": "https://webdev.popx.com/v3/project/xuzhiyang/SyncVar"
48
+ },
49
+ "dependencies": {
50
+ "@msgpack/msgpack": "^3.1.3",
51
+ "eventsource": "^4.1.0"
52
+ },
53
+ "devDependencies": {
54
+ "@babel/core": "^7.28.5",
55
+ "@rollup/plugin-babel": "^6.1.0",
56
+ "@rollup/plugin-commonjs": "^29.0.0",
57
+ "@rollup/plugin-node-resolve": "^16.0.3",
58
+ "@rollup/plugin-replace": "^6.0.3",
59
+ "@rollup/plugin-terser": "^0.4.4",
60
+ "dts-bundle-generator": "^9.5.1",
61
+ "rollup": "^4.54.0",
62
+ "rollup-plugin-copy": "^3.5.0",
63
+ "rollup-plugin-dts": "^6.3.0",
64
+ "tsconfig-paths": "^4.2.0",
65
+ "typescript": "^5.9.3"
66
+ }
67
+ }