@linkdlab/funcnodes_react_flow 0.1.1 → 0.1.2

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.
Files changed (198) hide show
  1. package/dist/frontend/datarenderer/images.d.ts +11 -0
  2. package/dist/frontend/datarenderer/images.js +13 -0
  3. package/dist/frontend/datarenderer/images.js.map +1 -0
  4. package/dist/frontend/datarenderer/index.d.ts +16 -0
  5. package/dist/frontend/datarenderer/index.js +26 -0
  6. package/dist/frontend/datarenderer/index.js.map +1 -0
  7. package/dist/frontend/datarenderer/plotly.d.ts +14 -0
  8. package/dist/frontend/datarenderer/plotly.js +53 -0
  9. package/dist/frontend/datarenderer/plotly.js.map +1 -0
  10. package/dist/frontend/dialog.d.ts +17 -0
  11. package/dist/frontend/dialog.js +26 -0
  12. package/dist/frontend/dialog.js.map +1 -0
  13. package/dist/frontend/edge.d.ts +5 -0
  14. package/dist/frontend/edge.js +40 -0
  15. package/dist/frontend/edge.js.map +1 -0
  16. package/dist/frontend/funcnodesreactflow/index.d.ts +6 -0
  17. package/dist/frontend/funcnodesreactflow/index.js +94 -0
  18. package/dist/frontend/funcnodesreactflow/index.js.map +1 -0
  19. package/dist/frontend/funcnodesreactflow/react_flow_layer.d.ts +5 -0
  20. package/dist/frontend/funcnodesreactflow/react_flow_layer.js +149 -0
  21. package/dist/frontend/funcnodesreactflow/react_flow_layer.js.map +1 -0
  22. package/dist/frontend/header/index.d.ts +4 -0
  23. package/dist/frontend/header/index.js +227 -0
  24. package/dist/frontend/header/index.js.map +1 -0
  25. package/{module/src/frontend/index.tsx → dist/frontend/index.d.ts} +1 -2
  26. package/dist/frontend/index.js +4 -0
  27. package/dist/frontend/index.js.map +1 -0
  28. package/dist/frontend/lib.d.ts +10 -0
  29. package/dist/frontend/lib.js +107 -0
  30. package/dist/frontend/lib.js.map +1 -0
  31. package/{module/src/frontend/node/index.tsx → dist/frontend/node/index.d.ts} +0 -1
  32. package/dist/frontend/node/index.js +3 -0
  33. package/dist/frontend/node/index.js.map +1 -0
  34. package/dist/frontend/node/io/default_input_renderer.d.ts +11 -0
  35. package/dist/frontend/node/io/default_input_renderer.js +235 -0
  36. package/dist/frontend/node/io/default_input_renderer.js.map +1 -0
  37. package/dist/frontend/node/io/default_output_render.d.ts +6 -0
  38. package/dist/frontend/node/io/default_output_render.js +23 -0
  39. package/dist/frontend/node/io/default_output_render.js.map +1 -0
  40. package/dist/frontend/node/io/handle_renderer.d.ts +6 -0
  41. package/dist/frontend/node/io/handle_renderer.js +70 -0
  42. package/dist/frontend/node/io/handle_renderer.js.map +1 -0
  43. package/{module/src/frontend/node/io/index.tsx → dist/frontend/node/io/index.d.ts} +0 -1
  44. package/dist/frontend/node/io/index.js +4 -0
  45. package/dist/frontend/node/io/index.js.map +1 -0
  46. package/dist/frontend/node/io/io.d.ts +16 -0
  47. package/dist/frontend/node/io/io.js +98 -0
  48. package/dist/frontend/node/io/io.js.map +1 -0
  49. package/dist/frontend/node/io/nodeinput.d.ts +6 -0
  50. package/dist/frontend/node/io/nodeinput.js +74 -0
  51. package/dist/frontend/node/io/nodeinput.js.map +1 -0
  52. package/dist/frontend/node/io/nodeoutput.d.ts +6 -0
  53. package/dist/frontend/node/io/nodeoutput.js +19 -0
  54. package/dist/frontend/node/io/nodeoutput.js.map +1 -0
  55. package/dist/frontend/node/node.d.ts +20 -0
  56. package/dist/frontend/node/node.js +118 -0
  57. package/dist/frontend/node/node.js.map +1 -0
  58. package/dist/frontend/utils/colorpicker.d.ts +19 -0
  59. package/dist/frontend/utils/colorpicker.js +209 -0
  60. package/dist/frontend/utils/colorpicker.js.map +1 -0
  61. package/dist/frontend/utils/jsondata.d.ts +6 -0
  62. package/dist/frontend/utils/jsondata.js +8 -0
  63. package/dist/frontend/utils/jsondata.js.map +1 -0
  64. package/dist/frontend/utils/table.d.ts +11 -0
  65. package/dist/frontend/utils/table.js +108 -0
  66. package/dist/frontend/utils/table.js.map +1 -0
  67. package/dist/funcnodes/funcnodesworker.d.ts +72 -0
  68. package/dist/funcnodes/funcnodesworker.js +532 -0
  69. package/dist/funcnodes/funcnodesworker.js.map +1 -0
  70. package/dist/funcnodes/index.js +5 -0
  71. package/dist/funcnodes/index.js.map +1 -0
  72. package/dist/funcnodes/websocketworker.d.ts +27 -0
  73. package/dist/funcnodes/websocketworker.js +224 -0
  74. package/dist/funcnodes/websocketworker.js.map +1 -0
  75. package/dist/funcnodes/workermanager.d.ts +32 -0
  76. package/dist/funcnodes/workermanager.js +241 -0
  77. package/dist/funcnodes/workermanager.js.map +1 -0
  78. package/dist/index.d.ts +2 -0
  79. package/dist/index.js +3 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/states/edge.d.ts +7 -0
  82. package/dist/states/edge.js +6 -0
  83. package/dist/states/edge.js.map +1 -0
  84. package/{module/src/states/edge.t.ts → dist/states/edge.t.d.ts} +8 -12
  85. package/dist/states/edge.t.js +2 -0
  86. package/dist/states/edge.t.js.map +1 -0
  87. package/dist/states/fnrfzst.d.ts +10 -0
  88. package/dist/states/fnrfzst.js +378 -0
  89. package/dist/states/fnrfzst.js.map +1 -0
  90. package/dist/states/fnrfzst.t.d.ts +100 -0
  91. package/dist/states/fnrfzst.t.js +2 -0
  92. package/dist/states/fnrfzst.t.js.map +1 -0
  93. package/dist/states/index.js +6 -0
  94. package/dist/states/index.js.map +1 -0
  95. package/dist/states/lib.d.ts +3 -0
  96. package/dist/states/lib.js +14 -0
  97. package/dist/states/lib.js.map +1 -0
  98. package/dist/states/lib.t.d.ts +24 -0
  99. package/dist/states/lib.t.js +2 -0
  100. package/dist/states/lib.t.js.map +1 -0
  101. package/dist/states/node.d.ts +4 -0
  102. package/dist/states/node.js +43 -0
  103. package/dist/states/node.js.map +1 -0
  104. package/{module/src/states/node.t.ts → dist/states/node.t.d.ts} +33 -58
  105. package/dist/states/node.t.js +2 -0
  106. package/dist/states/node.t.js.map +1 -0
  107. package/dist/states/nodeio.t.d.ts +67 -0
  108. package/dist/states/nodeio.t.js +2 -0
  109. package/dist/states/nodeio.t.js.map +1 -0
  110. package/dist/states/nodespace.d.ts +3 -0
  111. package/{module/src/states/nodespace.ts → dist/states/nodespace.js} +17 -30
  112. package/dist/states/nodespace.js.map +1 -0
  113. package/dist/states/nodespace.t.d.ts +16 -0
  114. package/dist/states/nodespace.t.js +2 -0
  115. package/dist/states/nodespace.t.js.map +1 -0
  116. package/dist/states/reactflow.d.ts +8 -0
  117. package/dist/states/reactflow.js +33 -0
  118. package/dist/states/reactflow.js.map +1 -0
  119. package/dist/states/reactflow.t.d.ts +11 -0
  120. package/dist/states/reactflow.t.js +2 -0
  121. package/dist/states/reactflow.t.js.map +1 -0
  122. package/{module/src/types/rendering.t.ts → dist/types/rendering.t.d.ts} +4 -7
  123. package/dist/types/rendering.t.js +2 -0
  124. package/dist/types/rendering.t.js.map +1 -0
  125. package/{module/src/utils/index.ts → dist/utils/index.d.ts} +0 -1
  126. package/dist/utils/index.js +3 -0
  127. package/dist/utils/index.js.map +1 -0
  128. package/dist/utils/objects.d.ts +19 -0
  129. package/dist/utils/objects.js +118 -0
  130. package/dist/utils/objects.js.map +1 -0
  131. package/package.json +32 -23
  132. package/app/public/favicon.ico +0 -0
  133. package/app/public/index.html +0 -43
  134. package/app/public/logo192.png +0 -0
  135. package/app/public/logo512.png +0 -0
  136. package/app/public/manifest.json +0 -25
  137. package/app/public/robots.txt +0 -3
  138. package/app/public/worker_manager +0 -1
  139. package/app/src/App.css +0 -38
  140. package/app/src/App.test.tsx +0 -9
  141. package/app/src/App.tsx +0 -22
  142. package/app/src/index.css +0 -13
  143. package/app/src/index.tsx +0 -19
  144. package/app/src/react-app-env.d.ts +0 -1
  145. package/app/src/reportWebVitals.ts +0 -15
  146. package/app/src/setupTests.ts +0 -5
  147. package/app/tsconfig.app.json +0 -10
  148. package/app/webpack.config.js +0 -143
  149. package/module/src/frontend/datarenderer/images.tsx +0 -28
  150. package/module/src/frontend/datarenderer/index.tsx +0 -54
  151. package/module/src/frontend/datarenderer/plotly.tsx +0 -82
  152. package/module/src/frontend/dialog.scss +0 -88
  153. package/module/src/frontend/dialog.tsx +0 -71
  154. package/module/src/frontend/edge.scss +0 -15
  155. package/module/src/frontend/edge.tsx +0 -32
  156. package/module/src/frontend/funcnodesreactflow/funcnodesreactflow.scss +0 -63
  157. package/module/src/frontend/funcnodesreactflow/index.tsx +0 -68
  158. package/module/src/frontend/funcnodesreactflow/react_flow_layer.tsx +0 -212
  159. package/module/src/frontend/header/header.scss +0 -48
  160. package/module/src/frontend/header/index.tsx +0 -269
  161. package/module/src/frontend/layout/htmlelements.scss +0 -63
  162. package/module/src/frontend/lib.scss +0 -157
  163. package/module/src/frontend/lib.tsx +0 -199
  164. package/module/src/frontend/node/io/default_input_renderer.tsx +0 -329
  165. package/module/src/frontend/node/io/default_output_render.tsx +0 -25
  166. package/module/src/frontend/node/io/handle_renderer.tsx +0 -94
  167. package/module/src/frontend/node/io/io.scss +0 -91
  168. package/module/src/frontend/node/io/io.tsx +0 -115
  169. package/module/src/frontend/node/io/nodeinput.tsx +0 -127
  170. package/module/src/frontend/node/io/nodeoutput.tsx +0 -43
  171. package/module/src/frontend/node/node.scss +0 -265
  172. package/module/src/frontend/node/node.tsx +0 -209
  173. package/module/src/frontend/utils/colorpicker.scss +0 -37
  174. package/module/src/frontend/utils/colorpicker.tsx +0 -342
  175. package/module/src/frontend/utils/jsondata.tsx +0 -19
  176. package/module/src/frontend/utils/table.scss +0 -22
  177. package/module/src/frontend/utils/table.tsx +0 -160
  178. package/module/src/funcnodes/funcnodesworker.ts +0 -456
  179. package/module/src/funcnodes/websocketworker.ts +0 -152
  180. package/module/src/funcnodes/workermanager.ts +0 -233
  181. package/module/src/index.tsx +0 -4
  182. package/module/src/states/edge.ts +0 -15
  183. package/module/src/states/fnrfzst.t.ts +0 -117
  184. package/module/src/states/fnrfzst.ts +0 -415
  185. package/module/src/states/lib.t.ts +0 -30
  186. package/module/src/states/lib.ts +0 -16
  187. package/module/src/states/node.ts +0 -46
  188. package/module/src/states/nodeio.t.ts +0 -103
  189. package/module/src/states/nodespace.t.ts +0 -57
  190. package/module/src/states/reactflow.t.ts +0 -27
  191. package/module/src/states/reactflow.ts +0 -49
  192. package/module/src/types/funcnodesreactflow.d.ts +0 -1
  193. package/module/src/utils/objects.ts +0 -131
  194. package/module/tsconfig.module.json +0 -15
  195. package/module/webpack.config.js +0 -140
  196. package/tsconfig.json +0 -18
  197. /package/{module/src/funcnodes/index.ts → dist/funcnodes/index.d.ts} +0 -0
  198. /package/{module/src/states/index.ts → dist/states/index.d.ts} +0 -0
@@ -1,456 +0,0 @@
1
- import { v4 as uuidv4 } from "uuid";
2
- import {
3
- FullState,
4
- FuncNodesReactFlowZustandInterface,
5
- JSONMessage,
6
- NodeSpaceEvent,
7
- } from "../states/fnrfzst.t";
8
- import { NodeActionUpdate, NodeType, PartialNodeType } from "../states/node.t"; // Import the missing type
9
- import { deep_merge } from "../utils";
10
- type CmdMessage = {
11
- type: string;
12
- cmd: string;
13
- kwargs: any;
14
- id?: string;
15
- };
16
-
17
- interface WorkerProps {
18
- zustand: FuncNodesReactFlowZustandInterface;
19
- uuid: string;
20
- on_error?: (error: string | Error) => void;
21
- }
22
-
23
- class FuncNodesWorker {
24
- messagePromises: Map<string, any>;
25
- _zustand: FuncNodesReactFlowZustandInterface;
26
- _nodeupdates: Map<string, PartialNodeType>;
27
- _nodeupdatetimer: NodeJS.Timeout;
28
- uuid: string;
29
- is_open: boolean;
30
- on_error: (error: any) => void;
31
- constructor(data: WorkerProps) {
32
- this.uuid = data.uuid;
33
- this.on_error = data.on_error || console.error;
34
- this.messagePromises = new Map();
35
- this._zustand = data.zustand;
36
- this._nodeupdates = new Map();
37
- this._nodeupdatetimer = setTimeout(() => {
38
- this.perform_update();
39
- }, 1000);
40
- this.is_open = true;
41
- }
42
- async fullsync() {
43
- const resp = (await this._send_cmd({ cmd: "full_state" })) as FullState;
44
- console.log("Full state", resp);
45
- this._zustand.lib.libstate.getState().set(resp.backend.lib);
46
- if (resp.view.renderoptions)
47
- this._zustand.update_render_options(resp.view.renderoptions);
48
- const nodeview = resp.view.nodes;
49
- for (const node of resp.backend.nodes) {
50
- if (nodeview[node.id] !== undefined) {
51
- node.frontend = nodeview[node.id];
52
- }
53
- this._recieve_node_added(node);
54
- }
55
- for (const edge of resp.backend.edges) {
56
- this._recieve_edge_added(...edge);
57
- }
58
- }
59
-
60
- async _recieve_edge_added(
61
- src_nid: string,
62
- src_ioid: string,
63
- trg_nid: string,
64
- trg_ioid: string
65
- ) {
66
- this._zustand.on_edge_action({
67
- type: "add",
68
- from_remote: true,
69
- ...{ src_nid, src_ioid, trg_nid, trg_ioid },
70
- });
71
- }
72
-
73
- async trigger_node(node_id: string) {
74
- await this._send_cmd({
75
- cmd: "trigger_node",
76
- kwargs: { nid: node_id },
77
- wait_for_response: false,
78
- });
79
- }
80
-
81
- async add_node(node_id: string) {
82
- const resp = await this._send_cmd({
83
- cmd: "add_node",
84
- kwargs: { id: node_id },
85
- });
86
- this._recieve_node_added(resp as NodeType);
87
- }
88
-
89
- async remove_node(node_id: string) {
90
- const resp = await this._send_cmd({
91
- cmd: "remove_node",
92
- kwargs: { id: node_id },
93
- });
94
- }
95
-
96
- async _recieve_node_added(data: NodeType) {
97
- this._zustand.on_node_action({
98
- type: "add",
99
- node: data,
100
- id: data.id,
101
- from_remote: true,
102
- });
103
- }
104
-
105
- add_edge({
106
- src_nid,
107
- src_ioid,
108
- trg_nid,
109
- trg_ioid,
110
- replace = false,
111
- }: {
112
- src_nid: string;
113
- src_ioid: string;
114
- trg_nid: string;
115
- trg_ioid: string;
116
- replace?: boolean;
117
- }) {
118
- return this._send_cmd({
119
- cmd: "add_edge",
120
- kwargs: { src_nid, src_ioid, trg_nid, trg_ioid, replace },
121
- });
122
- }
123
-
124
- remove_edge({
125
- src_nid,
126
- src_ioid,
127
- trg_nid,
128
- trg_ioid,
129
- }: {
130
- src_nid: string;
131
- src_ioid: string;
132
- trg_nid: string;
133
- trg_ioid: string;
134
- }) {
135
- return this._send_cmd({
136
- cmd: "remove_edge",
137
- kwargs: { src_nid, src_ioid, trg_nid, trg_ioid },
138
- });
139
- }
140
-
141
- perform_update() {
142
- clearTimeout(this._nodeupdatetimer);
143
- this._nodeupdates.forEach(async (node, id) => {
144
- const ans = await this._send_cmd({
145
- cmd: "update_node",
146
- kwargs: { nid: id, data: node },
147
- wait_for_response: true,
148
- });
149
- this._zustand.on_node_action({
150
- type: "update",
151
- node: ans,
152
- id: id,
153
- from_remote: true,
154
- });
155
- });
156
- this._nodeupdates.clear();
157
- this._nodeupdatetimer = setTimeout(() => {
158
- this.perform_update();
159
- }, 1000);
160
- }
161
-
162
- update_node(action: NodeActionUpdate) {
163
- // Add the type to the parameter
164
- const currentstate = this._nodeupdates.get(action.id);
165
- if (currentstate) {
166
- const { new_obj, change } = deep_merge(currentstate, action.node);
167
- if (change) {
168
- this._nodeupdates.set(action.id, new_obj);
169
- }
170
- } else {
171
- this._nodeupdates.set(action.id, action.node);
172
- }
173
- if (action.immediate) {
174
- this.perform_update();
175
- }
176
- }
177
-
178
- set_io_value({
179
- nid,
180
- ioid,
181
- value,
182
- set_default,
183
- }: {
184
- nid: string;
185
- ioid: string;
186
- value: any;
187
- set_default?: boolean;
188
- }) {
189
- return this._send_cmd({
190
- cmd: "set_io_value",
191
- kwargs: { nid, ioid, value, set_default },
192
- wait_for_response: true,
193
- });
194
- }
195
-
196
- clear() {
197
- return this._send_cmd({ cmd: "clear" });
198
- }
199
-
200
- save() {
201
- return this._send_cmd({ cmd: "save", wait_for_response: true });
202
- }
203
-
204
- load(data: any) {
205
- return this._send_cmd({
206
- cmd: "load_data",
207
- kwargs: { data },
208
- wait_for_response: true,
209
- }).then(() => {
210
- this.fullsync();
211
- });
212
- }
213
-
214
- get_io_value({ nid, ioid }: { nid: string; ioid: string }) {
215
- return this._send_cmd({
216
- cmd: "get_io_value",
217
- kwargs: { nid, ioid },
218
- wait_for_response: true,
219
- });
220
- }
221
-
222
- async _send_cmd({
223
- cmd,
224
- kwargs,
225
- wait_for_response = true,
226
- response_timeout = 5000,
227
- }: {
228
- cmd: string;
229
- kwargs?: any;
230
- wait_for_response?: boolean;
231
- response_timeout?: number;
232
- }) {
233
- const msg: CmdMessage = {
234
- type: "cmd",
235
- cmd,
236
- kwargs: kwargs || {},
237
- };
238
-
239
- // await self.assert_connection()
240
- if (wait_for_response) {
241
- const msid = msg.id || uuidv4();
242
- msg.id = msid;
243
- const promise = new Promise<any>((resolve, reject) => {
244
- const timeout = setTimeout(() => {
245
- reject("Timeout");
246
- }, response_timeout);
247
- this.messagePromises.set(msid, {
248
- resolve: (data: any) => {
249
- clearTimeout(timeout);
250
- resolve(data);
251
- this.messagePromises.delete(msid);
252
- },
253
- reject: (err: any) => {
254
- clearTimeout(timeout);
255
- reject(err);
256
- this.messagePromises.delete(msid);
257
- },
258
- });
259
- });
260
- await this.send(msg);
261
- return promise;
262
- }
263
- return this.send(msg);
264
- }
265
-
266
- async send(data: any) {
267
- // this is the abstract method that should be implemented by subclasses
268
- throw new Error("Not implemented");
269
- }
270
-
271
- async recieve_nodespace_event({ event, data }: NodeSpaceEvent) {
272
- switch (event) {
273
- case "after_set_value":
274
- return this._zustand.on_node_action({
275
- type: "update",
276
- node: {
277
- id: data.node,
278
- io: {
279
- [data.io]: {
280
- value: data.result,
281
- },
282
- },
283
- },
284
- id: data.node,
285
- from_remote: true,
286
- });
287
- case "after_update_value_options":
288
- return this._zustand.on_node_action({
289
- type: "update",
290
- node: {
291
- id: data.node,
292
- io: {
293
- [data.io]: {
294
- value_options: data.result,
295
- },
296
- },
297
- },
298
- id: data.node,
299
- from_remote: true,
300
- });
301
-
302
- case "triggerstart":
303
- return this._zustand.on_node_action({
304
- type: "update",
305
- node: {
306
- id: data.node,
307
- in_trigger: true,
308
- },
309
- id: data.node,
310
- from_remote: true,
311
- });
312
-
313
- case "triggerdone":
314
- return this._zustand.on_node_action({
315
- type: "update",
316
- node: {
317
- id: data.node,
318
- in_trigger: false,
319
- },
320
- id: data.node,
321
- from_remote: true,
322
- });
323
-
324
- case "node_trigger_error":
325
- return this._zustand.on_node_action({
326
- type: "error",
327
- errortype: "trigger",
328
- error: data.error,
329
- id: data.node,
330
- from_remote: true,
331
- });
332
-
333
- case "node_removed":
334
- return this._zustand.on_node_action({
335
- type: "delete",
336
- id: data.node,
337
- from_remote: true,
338
- });
339
-
340
- case "node_added":
341
- return this._recieve_node_added(data.node as NodeType);
342
-
343
- case "after_disconnect":
344
- if (!data.result) return;
345
- if (!Array.isArray(data.result)) return;
346
- if (data.result.length !== 4) return;
347
- return this._zustand.on_edge_action({
348
- type: "delete",
349
- from_remote: true,
350
- src_nid: data.result[0],
351
- src_ioid: data.result[1],
352
- trg_nid: data.result[2],
353
- trg_ioid: data.result[3],
354
- });
355
-
356
- case "after_connect":
357
- if (!data.result) return;
358
- if (!Array.isArray(data.result)) return;
359
- if (data.result.length !== 4) return;
360
- return this._recieve_edge_added(
361
- ...(data.result as [string, string, string, string])
362
- );
363
-
364
- case "after_add_shelf":
365
- if (!data.result) return;
366
- return this._zustand.lib.libstate.getState().set(data.result);
367
-
368
- default:
369
- console.warn("Unhandled nodepsace event", event, data);
370
- break;
371
- }
372
- }
373
-
374
- async add_lib(lib: string) {
375
- const ans = await this._send_cmd({
376
- cmd: "add_shelf",
377
- kwargs: { src: lib },
378
- wait_for_response: false,
379
- });
380
- return ans;
381
- }
382
-
383
- async recieve(data: JSONMessage) {
384
- let promise;
385
- switch (data.type) {
386
- case "nsevent":
387
- return await this.recieve_nodespace_event(data);
388
- case "result":
389
- promise = data.id && this.messagePromises.get(data.id);
390
- if (promise) {
391
- return promise.resolve(data.result);
392
- }
393
- break;
394
- case "error":
395
- this.on_error(data.tb + "\n" + data.error);
396
- promise = data.id && this.messagePromises.get(data.id);
397
- if (promise) {
398
- return promise.reject(data.error);
399
- }
400
- break;
401
- case "progress":
402
- this._zustand.set_progress(data);
403
- break;
404
- default:
405
- console.warn("Unhandled message", data);
406
- break;
407
- }
408
- }
409
-
410
- disconnect() {}
411
-
412
- onclose() {
413
- this.is_open = false;
414
- this._zustand.auto_progress();
415
- }
416
-
417
- async reconnect() {}
418
-
419
- async stop() {
420
- await this._send_cmd({ cmd: "stop_worker", wait_for_response: false });
421
- const oldonclose = this.onclose.bind(this);
422
- this.onclose = () => {
423
- oldonclose();
424
- if (this._zustand.worker === this) {
425
- this._zustand.clear_all();
426
- }
427
- this.onclose = oldonclose;
428
- };
429
- }
430
-
431
- async get_io_full_value({ nid, ioid }: { nid: string; ioid: string }) {
432
- const res = await this._send_cmd({
433
- cmd: "get_io_full_value",
434
- kwargs: { nid, ioid },
435
- wait_for_response: true,
436
- });
437
- //console.log("Full value", res);
438
-
439
- this._zustand.on_node_action({
440
- type: "update",
441
- node: {
442
- io: {
443
- [ioid]: {
444
- fullvalue: res,
445
- },
446
- },
447
- },
448
- id: nid,
449
- from_remote: true,
450
- });
451
- return res;
452
- }
453
- }
454
-
455
- export default FuncNodesWorker;
456
- export type { WorkerProps };
@@ -1,152 +0,0 @@
1
- import FuncNodesWorker, { WorkerProps } from "./funcnodesworker";
2
-
3
- interface WebSocketWorkerProps extends WorkerProps {
4
- url: string;
5
- }
6
- class WebSocketWorker extends FuncNodesWorker {
7
- private _url: string;
8
- private _websocket: WebSocket | null = null;
9
- private reconnectAttempts: number = 0;
10
- private maxReconnectAttempts: number = 999;
11
- private initialTimeout: number = 200; // Initial reconnect delay in ms
12
- private maxTimeout: number = 5000; // Maximum reconnect delay
13
- private _reconnect: boolean = true;
14
- constructor(data: WebSocketWorkerProps) {
15
- super(data);
16
- this._url = data.url;
17
- this.connect();
18
- this._zustand.auto_progress();
19
- }
20
-
21
- private connect(): void {
22
- console.log("Connecting to websocket");
23
- this.is_open = false;
24
- this._websocket = new WebSocket(this._url);
25
-
26
- this._websocket.onopen = () => {
27
- this.onopen();
28
- };
29
-
30
- this._websocket.onclose = () => {
31
- this.onclose();
32
- };
33
-
34
- this._websocket.onerror = () => {
35
- this.on_ws_error();
36
- };
37
-
38
- this._websocket.onmessage = (event) => {
39
- this.onmessage(event.data);
40
- };
41
- }
42
-
43
- private calculateReconnectTimeout(): number {
44
- // Increase timeout exponentially, capped at maxTimeout
45
- let timeout = Math.min(
46
- this.initialTimeout * Math.pow(2, this.reconnectAttempts),
47
- this.maxTimeout
48
- );
49
- return timeout;
50
- }
51
- private auto_reconnect(): void {
52
- if (this.reconnectAttempts < this.maxReconnectAttempts) {
53
- let timeout = this.calculateReconnectTimeout();
54
- console.log(`Attempting to reconnect in ${timeout} ms`);
55
-
56
- setTimeout(() => {
57
- if (this._websocket) {
58
- if (this._websocket.readyState === WebSocket.OPEN) {
59
- return;
60
- }
61
- }
62
- this.reconnectAttempts++;
63
- this.connect();
64
- }, timeout);
65
- } else {
66
- console.warn("Maximum reconnect attempts reached. Giving up.");
67
- }
68
- }
69
-
70
- async onmessage(data: string) {
71
- await this.recieve(JSON.parse(data));
72
- }
73
-
74
- onopen() {
75
- console.log("Websocket opened");
76
- this.is_open = true;
77
- this._zustand.auto_progress();
78
- this.reconnectAttempts = 0;
79
- this.fullsync();
80
- }
81
- onclose() {
82
- console.log("Websocket closed", this);
83
- super.onclose();
84
- if (this._reconnect) {
85
- console.log("Websocket closed,reconnecting");
86
- this.auto_reconnect(); // Attempt to reconnect
87
- }
88
- }
89
-
90
- on_ws_error() {
91
- console.warn("Websocket error");
92
- if (this._websocket) {
93
- this._websocket.close(); // Ensure the connection is closed before attempting to reconnect
94
- } else {
95
- this.auto_reconnect();
96
- }
97
- }
98
-
99
- async send(data: any) {
100
- if (!this._websocket || this._websocket.readyState !== WebSocket.OPEN) {
101
- throw new Error("Websocket not connected");
102
- }
103
-
104
- this._websocket.send(JSON.stringify(data));
105
- }
106
-
107
- async stop() {
108
- await super.stop();
109
- this._reconnect = false;
110
- // this.close();
111
- }
112
- close() {
113
- if (this._websocket) this._websocket.close();
114
- }
115
- disconnect() {
116
- super.disconnect();
117
- this._reconnect = false;
118
- this.close();
119
- }
120
-
121
- async reconnect() {
122
- await super.reconnect();
123
- this._reconnect = true;
124
- if (this._websocket) {
125
- console.log("Reconnecting", this._websocket.readyState);
126
- if (
127
- this._websocket.readyState === WebSocket.OPEN ||
128
- this._websocket.readyState === WebSocket.CONNECTING
129
- ) {
130
- if (this._websocket.readyState === WebSocket.CONNECTING) {
131
- //await to ensure the websocket is connected, with a timeout of 2 seconds
132
- await new Promise((resolve, reject) => {
133
- let timeout = setTimeout(() => {
134
- reject("Timeout");
135
- }, 2000);
136
- this._websocket?.addEventListener("open", () => {
137
- clearTimeout(timeout);
138
- resolve(null);
139
- });
140
- });
141
- }
142
- if (this._websocket.readyState === WebSocket.OPEN) {
143
- this.fullsync();
144
- return;
145
- }
146
- }
147
- }
148
- this.connect();
149
- }
150
- }
151
-
152
- export default WebSocketWorker;