@kevisual/query 0.0.40 → 0.0.41

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/query-ws.js CHANGED
@@ -1,6 +1,7 @@
1
- const createStoreImpl = (createState) => {
1
+ // node_modules/.pnpm/zustand@5.0.11/node_modules/zustand/esm/vanilla.mjs
2
+ var createStoreImpl = (createState) => {
2
3
  let state;
3
- const listeners = /* @__PURE__ */ new Set();
4
+ const listeners = /* @__PURE__ */ new Set;
4
5
  const setState = (partial, replace) => {
5
6
  const nextState = typeof partial === "function" ? partial(state) : partial;
6
7
  if (!Object.is(nextState, state)) {
@@ -19,199 +20,180 @@ const createStoreImpl = (createState) => {
19
20
  const initialState = state = createState(setState, getState, api);
20
21
  return api;
21
22
  };
22
- const createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);
23
+ var createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;
23
24
 
24
- const parseWsUrl = (url) => {
25
- try {
26
- new URL(url);
27
- return url;
25
+ // src/utils.ts
26
+ var parseWsUrl = (url) => {
27
+ try {
28
+ new URL(url);
29
+ return url;
30
+ } catch (e) {
31
+ const _url = new URL(url, location.origin);
32
+ if (_url.protocol === "http:") {
33
+ _url.protocol = "ws:";
28
34
  }
29
- catch (e) {
30
- const _url = new URL(url, location.origin);
31
- if (_url.protocol === 'http:') {
32
- _url.protocol = 'ws:';
33
- }
34
- if (_url.protocol === 'https:') {
35
- _url.protocol = 'wss:';
36
- }
37
- return _url.href;
35
+ if (_url.protocol === "https:") {
36
+ _url.protocol = "wss:";
38
37
  }
38
+ return _url.href;
39
+ }
39
40
  };
40
41
 
42
+ // src/ws.ts
41
43
  class QueryWs {
42
- url;
43
- store;
44
- ws;
45
- constructor(opts) {
46
- const url = opts?.url || '/api/router';
47
- if (opts?.store) {
48
- this.store = opts.store;
49
- }
50
- else {
51
- const store = createStore((set) => ({
52
- connected: false,
53
- status: 'connecting',
54
- setConnected: (connected) => set({ connected }),
55
- setStatus: (status) => set({ status }),
56
- }));
57
- this.store = store;
58
- }
59
- const wsUrl = parseWsUrl(url);
60
- if (opts?.ws && opts.ws instanceof WebSocket) {
61
- this.ws = opts.ws;
62
- }
63
- else {
64
- this.ws = new WebSocket(wsUrl);
65
- }
66
- this.connect();
44
+ url;
45
+ store;
46
+ ws;
47
+ constructor(opts) {
48
+ const url = opts?.url || "/api/router";
49
+ if (opts?.store) {
50
+ this.store = opts.store;
51
+ } else {
52
+ const store = createStore((set) => ({
53
+ connected: false,
54
+ status: "connecting",
55
+ setConnected: (connected) => set({ connected }),
56
+ setStatus: (status) => set({ status })
57
+ }));
58
+ this.store = store;
67
59
  }
68
- /**
69
- * 连接 WebSocket
70
- */
71
- async connect(opts) {
72
- const store = this.store;
73
- const that = this;
74
- const connected = store.getState().connected;
75
- if (connected) {
76
- return Promise.resolve(true);
77
- }
78
- return new Promise((resolve, reject) => {
79
- const ws = that.ws || new WebSocket(that.url);
80
- const timeout = opts?.timeout || 5 * 60 * 1000; // 默认 5 分钟
81
- let timer = setTimeout(() => {
82
- const isOpen = ws.readyState === WebSocket.OPEN;
83
- if (isOpen) {
84
- console.log('WebSocket 连接成功 in timer');
85
- resolve(true);
86
- return;
87
- }
88
- console.error('WebSocket 连接超时', that.url);
89
- resolve(false);
90
- }, timeout);
91
- ws.onopen = (ev) => {
92
- store.getState().setConnected(true);
93
- store.getState().setStatus('connected');
94
- resolve(true);
95
- clearTimeout(timer);
96
- };
97
- ws.onclose = (ev) => {
98
- store.getState().setConnected(false);
99
- store.getState().setStatus('disconnected');
100
- this.ws = null;
101
- };
102
- });
60
+ const wsUrl = parseWsUrl(url);
61
+ if (opts?.ws && opts.ws instanceof WebSocket) {
62
+ this.ws = opts.ws;
63
+ } else {
64
+ this.ws = new WebSocket(wsUrl);
103
65
  }
104
- /**
105
- * ws.onopen 必须用这个去获取,否者会丢失链接信息
106
- * @param callback
107
- * @returns
108
- */
109
- listenConnect(callback) {
110
- const store = this.store;
111
- const { connected } = store.getState();
112
- if (connected) {
113
- callback();
114
- return;
115
- }
116
- const subscriptionOne = (selector, listener) => {
117
- const unsubscribe = store.subscribe((newState, oldState) => {
118
- if (selector(newState) !== selector(oldState)) {
119
- listener(newState, oldState);
120
- unsubscribe();
121
- }
122
- });
123
- return unsubscribe;
124
- };
125
- const cancel = subscriptionOne((state) => state.connected, () => {
126
- callback();
127
- });
128
- return cancel;
66
+ this.connect();
67
+ }
68
+ async connect(opts) {
69
+ const store = this.store;
70
+ const that = this;
71
+ const connected = store.getState().connected;
72
+ if (connected) {
73
+ return Promise.resolve(true);
129
74
  }
130
- listenClose(callback) {
131
- const store = this.store;
132
- const { status } = store.getState();
133
- if (status === 'disconnected') {
134
- callback();
75
+ return new Promise((resolve, reject) => {
76
+ const ws = that.ws || new WebSocket(that.url);
77
+ const timeout = opts?.timeout || 5 * 60 * 1000;
78
+ let timer = setTimeout(() => {
79
+ const isOpen = ws.readyState === WebSocket.OPEN;
80
+ if (isOpen) {
81
+ console.log("WebSocket 连接成功 in timer");
82
+ resolve(true);
83
+ return;
135
84
  }
136
- const subscriptionOne = (selector, listener) => {
137
- const unsubscribe = store.subscribe((newState, oldState) => {
138
- if (selector(newState) !== selector(oldState)) {
139
- listener(newState, oldState);
140
- unsubscribe();
141
- }
142
- });
143
- return unsubscribe;
144
- };
145
- const cancel = subscriptionOne((state) => state.status, (newState, oldState) => {
146
- if (newState.status === 'disconnected') {
147
- callback();
148
- }
149
- });
150
- return cancel;
151
- }
152
- onMessage(fn, opts) {
153
- const ws = this.ws;
154
- const isJson = opts?.isJson ?? true;
155
- const selector = opts?.selector;
156
- const parseIfJson = (data) => {
157
- try {
158
- return JSON.parse(data);
159
- }
160
- catch (e) {
161
- return data;
162
- }
163
- };
164
- const listener = (event) => {
165
- const received = parseIfJson(event.data);
166
- if (typeof received === 'string' && !isJson) {
167
- fn(received, event);
168
- }
169
- else if (typeof received === 'object' && isJson) {
170
- fn(selector ? selector(received) : received, event);
171
- }
172
- else ;
173
- };
174
- ws.addEventListener('message', listener);
175
- return () => {
176
- ws.removeEventListener('message', listener);
177
- };
178
- }
179
- close() {
180
- const ws = this.ws;
181
- const store = this.store;
182
- ws?.close?.();
183
- this.ws = null;
85
+ console.error("WebSocket 连接超时", that.url);
86
+ resolve(false);
87
+ }, timeout);
88
+ ws.onopen = (ev) => {
89
+ store.getState().setConnected(true);
90
+ store.getState().setStatus("connected");
91
+ resolve(true);
92
+ clearTimeout(timer);
93
+ };
94
+ ws.onclose = (ev) => {
184
95
  store.getState().setConnected(false);
185
- store.getState().setStatus('disconnected');
96
+ store.getState().setStatus("disconnected");
97
+ this.ws = null;
98
+ };
99
+ });
100
+ }
101
+ listenConnect(callback) {
102
+ const store = this.store;
103
+ const { connected } = store.getState();
104
+ if (connected) {
105
+ callback();
106
+ return;
186
107
  }
187
- /**
188
- * 发送消息
189
- *
190
- * @param data
191
- * @param opts
192
- * @returns
193
- */
194
- send(data, opts) {
195
- const ws = this.ws;
196
- const isJson = opts?.isJson ?? true;
197
- const wrapper = opts?.wrapper;
198
- if (!ws || ws.readyState !== WebSocket.OPEN) {
199
- console.error('WebSocket is not open');
200
- return;
201
- }
202
- if (isJson) {
203
- ws.send(JSON.stringify(wrapper ? wrapper(data) : data));
204
- }
205
- else {
206
- ws.send(data);
108
+ const subscriptionOne = (selector, listener) => {
109
+ const unsubscribe = store.subscribe((newState, oldState) => {
110
+ if (selector(newState) !== selector(oldState)) {
111
+ listener(newState, oldState);
112
+ unsubscribe();
207
113
  }
114
+ });
115
+ return unsubscribe;
116
+ };
117
+ const cancel = subscriptionOne((state) => state.connected, () => {
118
+ callback();
119
+ });
120
+ return cancel;
121
+ }
122
+ listenClose(callback) {
123
+ const store = this.store;
124
+ const { status } = store.getState();
125
+ if (status === "disconnected") {
126
+ callback();
208
127
  }
209
- getOpen() {
210
- if (!this.ws) {
211
- return false;
128
+ const subscriptionOne = (selector, listener) => {
129
+ const unsubscribe = store.subscribe((newState, oldState) => {
130
+ if (selector(newState) !== selector(oldState)) {
131
+ listener(newState, oldState);
132
+ unsubscribe();
212
133
  }
213
- return this.ws.readyState === WebSocket.OPEN;
134
+ });
135
+ return unsubscribe;
136
+ };
137
+ const cancel = subscriptionOne((state) => state.status, (newState, oldState) => {
138
+ if (newState.status === "disconnected") {
139
+ callback();
140
+ }
141
+ });
142
+ return cancel;
143
+ }
144
+ onMessage(fn, opts) {
145
+ const ws = this.ws;
146
+ const isJson = opts?.isJson ?? true;
147
+ const selector = opts?.selector;
148
+ const parseIfJson = (data) => {
149
+ try {
150
+ return JSON.parse(data);
151
+ } catch (e) {
152
+ return data;
153
+ }
154
+ };
155
+ const listener = (event) => {
156
+ const received = parseIfJson(event.data);
157
+ if (typeof received === "string" && !isJson) {
158
+ fn(received, event);
159
+ } else if (typeof received === "object" && isJson) {
160
+ fn(selector ? selector(received) : received, event);
161
+ } else {}
162
+ };
163
+ ws.addEventListener("message", listener);
164
+ return () => {
165
+ ws.removeEventListener("message", listener);
166
+ };
167
+ }
168
+ close() {
169
+ const ws = this.ws;
170
+ const store = this.store;
171
+ ws?.close?.();
172
+ this.ws = null;
173
+ store.getState().setConnected(false);
174
+ store.getState().setStatus("disconnected");
175
+ }
176
+ send(data, opts) {
177
+ const ws = this.ws;
178
+ const isJson = opts?.isJson ?? true;
179
+ const wrapper = opts?.wrapper;
180
+ if (!ws || ws.readyState !== WebSocket.OPEN) {
181
+ console.error("WebSocket is not open");
182
+ return;
214
183
  }
184
+ if (isJson) {
185
+ ws.send(JSON.stringify(wrapper ? wrapper(data) : data));
186
+ } else {
187
+ ws.send(data);
188
+ }
189
+ }
190
+ getOpen() {
191
+ if (!this.ws) {
192
+ return false;
193
+ }
194
+ return this.ws.readyState === WebSocket.OPEN;
195
+ }
215
196
  }
216
-
217
- export { QueryWs };
197
+ export {
198
+ QueryWs
199
+ };
package/dist/query.d.ts CHANGED
@@ -250,13 +250,6 @@ declare class BaseQuery<T extends Query = Query, R extends {
250
250
  post<R = any, P = any>(data: P, options?: DataOpts): Promise<Result<R>>;
251
251
  get<R = any, P = any>(data: P, options?: DataOpts): Promise<Result<R>>;
252
252
  }
253
- /**
254
- * @deprecated
255
- * 前端调用后端QueryRouter, 默认路径 /client/router
256
- */
257
- declare class ClientQuery extends Query {
258
- constructor(opts?: QueryOpts);
259
- }
260
253
 
261
- export { BaseQuery, ClientQuery, Query, adapter, setBaseResponse, wrapperError };
254
+ export { BaseQuery, Query, adapter, setBaseResponse, wrapperError };
262
255
  export type { Data, DataOpts, Fn, QueryOptions, QueryOpts, Result };