@kevisual/query 0.0.6 → 0.0.7-alpha.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.
- package/dist/index.d.ts +4 -2
- package/dist/index.js +34 -14
- package/dist/ws.d.ts +5 -2
- package/dist/ws.js +27 -12
- package/package.json +1 -1
- package/dist/node-adapter.d.ts +0 -8
- package/dist/node-adapter.js +0 -49
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { adapter } from './adapter.ts';
|
|
2
|
-
import { QueryWs } from './ws.ts';
|
|
3
|
-
export { QueryOpts };
|
|
2
|
+
import { QueryWs, QueryWsOpts } from './ws.ts';
|
|
3
|
+
export { QueryOpts, QueryWs };
|
|
4
4
|
type Fn = (opts: {
|
|
5
5
|
url?: string;
|
|
6
6
|
headers?: Record<string, string>;
|
|
@@ -63,7 +63,9 @@ export declare class QueryClient<U = any, V = any> extends Query<U, V> {
|
|
|
63
63
|
constructor(opts?: QueryOpts & {
|
|
64
64
|
tokenName?: string;
|
|
65
65
|
storage?: Storage;
|
|
66
|
+
io?: boolean;
|
|
66
67
|
});
|
|
68
|
+
createWs(opts?: QueryWsOpts): void;
|
|
67
69
|
getToken(): string;
|
|
68
70
|
saveToken(token: string): void;
|
|
69
71
|
removeToken(): void;
|
package/dist/index.js
CHANGED
|
@@ -117,22 +117,31 @@ class QueryWs {
|
|
|
117
117
|
/**
|
|
118
118
|
* 连接 WebSocket
|
|
119
119
|
*/
|
|
120
|
-
connect() {
|
|
120
|
+
async connect(opts) {
|
|
121
121
|
const store = this.store;
|
|
122
122
|
const connected = store.getState().connected;
|
|
123
123
|
if (connected) {
|
|
124
|
-
return;
|
|
124
|
+
return Promise.resolve(true);
|
|
125
125
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
126
|
+
return new Promise((resolve, reject) => {
|
|
127
|
+
const ws = this.ws || new WebSocket(this.url);
|
|
128
|
+
const timeout = opts?.timeout || 5 * 60 * 1000; // 默认 2 分钟
|
|
129
|
+
let timer = setTimeout(() => {
|
|
130
|
+
console.error('WebSocket 连接超时');
|
|
131
|
+
reject('timeout');
|
|
132
|
+
}, timeout);
|
|
133
|
+
ws.onopen = () => {
|
|
134
|
+
store.getState().setConnected(true);
|
|
135
|
+
store.getState().setStatus('connected');
|
|
136
|
+
resolve(true);
|
|
137
|
+
clearTimeout(timer);
|
|
138
|
+
};
|
|
139
|
+
ws.onclose = () => {
|
|
140
|
+
store.getState().setConnected(false);
|
|
141
|
+
store.getState().setStatus('disconnected');
|
|
142
|
+
this.ws = null;
|
|
143
|
+
};
|
|
144
|
+
});
|
|
136
145
|
}
|
|
137
146
|
listenConnect(callback) {
|
|
138
147
|
const store = this.store;
|
|
@@ -205,6 +214,12 @@ class QueryWs {
|
|
|
205
214
|
ws.send(data);
|
|
206
215
|
}
|
|
207
216
|
}
|
|
217
|
+
getOpen() {
|
|
218
|
+
if (!this.ws) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
return this.ws.readyState === WebSocket.OPEN;
|
|
222
|
+
}
|
|
208
223
|
}
|
|
209
224
|
|
|
210
225
|
/**
|
|
@@ -287,7 +302,12 @@ class QueryClient extends Query {
|
|
|
287
302
|
}
|
|
288
303
|
return opts;
|
|
289
304
|
};
|
|
290
|
-
|
|
305
|
+
if (opts?.io) {
|
|
306
|
+
this.createWs();
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
createWs(opts) {
|
|
310
|
+
this.qws = new QueryWs({ url: this.url });
|
|
291
311
|
}
|
|
292
312
|
getToken() {
|
|
293
313
|
return this.storage.getItem(this.tokenName);
|
|
@@ -300,4 +320,4 @@ class QueryClient extends Query {
|
|
|
300
320
|
}
|
|
301
321
|
}
|
|
302
322
|
|
|
303
|
-
export { Query, QueryClient, adapter };
|
|
323
|
+
export { Query, QueryClient, QueryWs, adapter };
|
package/dist/ws.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ type QueryWsStore = {
|
|
|
7
7
|
};
|
|
8
8
|
export type QuerySelectState = 'connecting' | 'connected' | 'disconnected';
|
|
9
9
|
export type QueryWsStoreListener = (newState: QueryWsStore, oldState: QueryWsStore) => void;
|
|
10
|
-
type QueryWsOpts = {
|
|
10
|
+
export type QueryWsOpts = {
|
|
11
11
|
url?: string;
|
|
12
12
|
store?: StoreApi<QueryWsStore>;
|
|
13
13
|
ws?: WebSocket;
|
|
@@ -28,7 +28,9 @@ export declare class QueryWs {
|
|
|
28
28
|
/**
|
|
29
29
|
* 连接 WebSocket
|
|
30
30
|
*/
|
|
31
|
-
connect(
|
|
31
|
+
connect(opts?: {
|
|
32
|
+
timeout?: number;
|
|
33
|
+
}): Promise<unknown>;
|
|
32
34
|
listenConnect(callback: () => void): () => void;
|
|
33
35
|
onMessage<T = any, U = any>(fn: (data: U, event: MessageEvent) => void, opts?: {
|
|
34
36
|
isJson?: boolean;
|
|
@@ -39,5 +41,6 @@ export declare class QueryWs {
|
|
|
39
41
|
isJson?: boolean;
|
|
40
42
|
wrapper?: (data: T) => U;
|
|
41
43
|
}): void;
|
|
44
|
+
getOpen(): boolean;
|
|
42
45
|
}
|
|
43
46
|
export {};
|
package/dist/ws.js
CHANGED
|
@@ -76,22 +76,31 @@ class QueryWs {
|
|
|
76
76
|
/**
|
|
77
77
|
* 连接 WebSocket
|
|
78
78
|
*/
|
|
79
|
-
connect() {
|
|
79
|
+
async connect(opts) {
|
|
80
80
|
const store = this.store;
|
|
81
81
|
const connected = store.getState().connected;
|
|
82
82
|
if (connected) {
|
|
83
|
-
return;
|
|
83
|
+
return Promise.resolve(true);
|
|
84
84
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
85
|
+
return new Promise((resolve, reject) => {
|
|
86
|
+
const ws = this.ws || new WebSocket(this.url);
|
|
87
|
+
const timeout = opts?.timeout || 5 * 60 * 1000; // 默认 2 分钟
|
|
88
|
+
let timer = setTimeout(() => {
|
|
89
|
+
console.error('WebSocket 连接超时');
|
|
90
|
+
reject('timeout');
|
|
91
|
+
}, timeout);
|
|
92
|
+
ws.onopen = () => {
|
|
93
|
+
store.getState().setConnected(true);
|
|
94
|
+
store.getState().setStatus('connected');
|
|
95
|
+
resolve(true);
|
|
96
|
+
clearTimeout(timer);
|
|
97
|
+
};
|
|
98
|
+
ws.onclose = () => {
|
|
99
|
+
store.getState().setConnected(false);
|
|
100
|
+
store.getState().setStatus('disconnected');
|
|
101
|
+
this.ws = null;
|
|
102
|
+
};
|
|
103
|
+
});
|
|
95
104
|
}
|
|
96
105
|
listenConnect(callback) {
|
|
97
106
|
const store = this.store;
|
|
@@ -164,6 +173,12 @@ class QueryWs {
|
|
|
164
173
|
ws.send(data);
|
|
165
174
|
}
|
|
166
175
|
}
|
|
176
|
+
getOpen() {
|
|
177
|
+
if (!this.ws) {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
return this.ws.readyState === WebSocket.OPEN;
|
|
181
|
+
}
|
|
167
182
|
}
|
|
168
183
|
|
|
169
184
|
export { QueryWs };
|
package/package.json
CHANGED
package/dist/node-adapter.d.ts
DELETED
package/dist/node-adapter.js
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import http from 'http';
|
|
2
|
-
|
|
3
|
-
const nodeAdapter = async (opts) => {
|
|
4
|
-
return new Promise((resolve, reject) => {
|
|
5
|
-
const postData = JSON.stringify(opts.body || '');
|
|
6
|
-
const _url = new URL(opts.url);
|
|
7
|
-
const { hostname, port, pathname } = _url;
|
|
8
|
-
const options = {
|
|
9
|
-
hostname: hostname,
|
|
10
|
-
port: port,
|
|
11
|
-
path: pathname || '/api/router',
|
|
12
|
-
method: 'POST', // Assuming it's a POST request
|
|
13
|
-
headers: {
|
|
14
|
-
'Content-Type': 'application/json',
|
|
15
|
-
'Content-Length': Buffer.byteLength(postData),
|
|
16
|
-
...opts.headers,
|
|
17
|
-
},
|
|
18
|
-
};
|
|
19
|
-
const req = http.request(options, (res) => {
|
|
20
|
-
let data = '';
|
|
21
|
-
// Collect data chunks
|
|
22
|
-
res.on('data', (chunk) => {
|
|
23
|
-
data += chunk;
|
|
24
|
-
});
|
|
25
|
-
// Resolve when the response is complete
|
|
26
|
-
res.on('end', () => {
|
|
27
|
-
try {
|
|
28
|
-
const parsedData = JSON.parse(data);
|
|
29
|
-
resolve(parsedData);
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
reject(error);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
// Handle request errors
|
|
37
|
-
req.on('error', (error) => {
|
|
38
|
-
reject(error);
|
|
39
|
-
});
|
|
40
|
-
// Write the request body and end the request
|
|
41
|
-
if (opts.body) {
|
|
42
|
-
req.write(postData);
|
|
43
|
-
}
|
|
44
|
-
req.end();
|
|
45
|
-
});
|
|
46
|
-
};
|
|
47
|
-
const adapter = nodeAdapter;
|
|
48
|
-
|
|
49
|
-
export { adapter, nodeAdapter };
|