@workglow/util 0.0.126 → 0.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.
- package/dist/browser.js +65 -22
- package/dist/browser.js.map +8 -8
- package/dist/bun.js +65 -22
- package/dist/bun.js.map +8 -8
- package/dist/compress/compress.node.d.ts +1 -1
- package/dist/compress/compress.node.d.ts.map +1 -1
- package/dist/compress-node.js.map +1 -1
- package/dist/di/Container.d.ts.map +1 -1
- package/dist/events/EventEmitter.d.ts.map +1 -1
- package/dist/graph/directedAcyclicGraph.d.ts.map +1 -1
- package/dist/graph/directedGraph.d.ts.map +1 -1
- package/dist/graph/errors.d.ts.map +1 -1
- package/dist/graph/graph.d.ts +4 -0
- package/dist/graph/graph.d.ts.map +1 -1
- package/dist/graph-entry.js +43 -22
- package/dist/graph-entry.js.map +7 -7
- package/dist/json-schema/SchemaUtils.d.ts.map +1 -1
- package/dist/node.js +65 -22
- package/dist/node.js.map +8 -8
- package/dist/schema-entry.js.map +3 -3
- package/dist/utilities/objectOfArraysAsArrayOfObjects.d.ts.map +1 -1
- package/dist/vector/VectorUtils.d.ts +6 -1
- package/dist/vector/VectorUtils.d.ts.map +1 -1
- package/dist/worker/WorkerManager.d.ts.map +1 -1
- package/dist/worker/WorkerServerBase.d.ts +6 -0
- package/dist/worker/WorkerServerBase.d.ts.map +1 -1
- package/dist/worker-browser.js +52 -18
- package/dist/worker-browser.js.map +5 -5
- package/dist/worker-bun.js +52 -18
- package/dist/worker-bun.js.map +5 -5
- package/dist/worker-node.js +52 -18
- package/dist/worker-node.js.map +5 -5
- package/package.json +1 -1
package/dist/bun.js
CHANGED
|
@@ -216,10 +216,19 @@ class EventEmitter {
|
|
|
216
216
|
emit(event, ...args) {
|
|
217
217
|
const listeners = this.listeners[event];
|
|
218
218
|
if (listeners) {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
})
|
|
219
|
+
const snapshot = [...listeners];
|
|
220
|
+
const errors = [];
|
|
221
|
+
for (const { listener } of snapshot) {
|
|
222
|
+
try {
|
|
223
|
+
listener(...args);
|
|
224
|
+
} catch (e) {
|
|
225
|
+
errors.push(e);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
222
228
|
this.listeners[event] = listeners.filter((l) => !l.once);
|
|
229
|
+
if (errors.length > 0) {
|
|
230
|
+
throw errors[0];
|
|
231
|
+
}
|
|
223
232
|
}
|
|
224
233
|
}
|
|
225
234
|
subscribe(event, listener) {
|
|
@@ -767,10 +776,23 @@ class WorkerManager {
|
|
|
767
776
|
worker.addEventListener("messageerror", (event) => {
|
|
768
777
|
console.error("Worker message error:", event);
|
|
769
778
|
});
|
|
770
|
-
const readyPromise = new Promise((resolve) => {
|
|
779
|
+
const readyPromise = new Promise((resolve, reject) => {
|
|
780
|
+
const timeout = setTimeout(() => {
|
|
781
|
+
worker.removeEventListener("message", handleReady);
|
|
782
|
+
worker.removeEventListener("error", handleError);
|
|
783
|
+
reject(new Error(`Worker "${name}" did not become ready within 10s`));
|
|
784
|
+
}, 1e4);
|
|
785
|
+
const handleError = (event) => {
|
|
786
|
+
clearTimeout(timeout);
|
|
787
|
+
worker.removeEventListener("message", handleReady);
|
|
788
|
+
worker.removeEventListener("error", handleError);
|
|
789
|
+
reject(new Error(`Worker "${name}" initialization error: ${event.message ?? "unknown error"}`));
|
|
790
|
+
};
|
|
771
791
|
const handleReady = (event) => {
|
|
772
792
|
if (event.data?.type === "ready") {
|
|
793
|
+
clearTimeout(timeout);
|
|
773
794
|
worker.removeEventListener("message", handleReady);
|
|
795
|
+
worker.removeEventListener("error", handleError);
|
|
774
796
|
this.workerFunctions.set(name, new Set(event.data.functions ?? []));
|
|
775
797
|
this.workerStreamFunctions.set(name, new Set(event.data.streamFunctions ?? []));
|
|
776
798
|
this.workerReactiveFunctions.set(name, new Set(event.data.reactiveFunctions ?? []));
|
|
@@ -778,6 +800,7 @@ class WorkerManager {
|
|
|
778
800
|
}
|
|
779
801
|
};
|
|
780
802
|
worker.addEventListener("message", handleReady);
|
|
803
|
+
worker.addEventListener("error", handleError);
|
|
781
804
|
});
|
|
782
805
|
this.readyWorkers.set(name, readyPromise);
|
|
783
806
|
}
|
|
@@ -836,7 +859,10 @@ class WorkerManager {
|
|
|
836
859
|
} else if (type === "error") {
|
|
837
860
|
cleanup();
|
|
838
861
|
getLogger().debug(`Worker ${workerName} function ${functionName} error.`, { data });
|
|
839
|
-
|
|
862
|
+
const err = typeof data === "object" && data !== null ? Object.assign(new Error(data.message ?? String(data)), {
|
|
863
|
+
name: data.name ?? "Error"
|
|
864
|
+
}) : new Error(String(data));
|
|
865
|
+
reject(err);
|
|
840
866
|
}
|
|
841
867
|
};
|
|
842
868
|
const handleAbort = () => {
|
|
@@ -1163,7 +1189,7 @@ var SALT_LENGTH = 16;
|
|
|
1163
1189
|
async function deriveKey(passphrase, salt) {
|
|
1164
1190
|
const enc = new TextEncoder;
|
|
1165
1191
|
const keyMaterial = await crypto.subtle.importKey("raw", enc.encode(passphrase), "PBKDF2", false, ["deriveKey"]);
|
|
1166
|
-
return crypto.subtle.deriveKey({ name: "PBKDF2", salt, iterations:
|
|
1192
|
+
return crypto.subtle.deriveKey({ name: "PBKDF2", salt, iterations: 600000, hash: "SHA-256" }, keyMaterial, { name: "AES-GCM", length: 256 }, false, ["encrypt", "decrypt"]);
|
|
1167
1193
|
}
|
|
1168
1194
|
async function encrypt(plaintext, passphrase, keyCache) {
|
|
1169
1195
|
const enc = new TextEncoder;
|
|
@@ -1418,12 +1444,20 @@ class WorkerServerBase {
|
|
|
1418
1444
|
const uniqueTransferables = [...new Set(transferables)];
|
|
1419
1445
|
postMessage({ id, type: "complete", data: result }, uniqueTransferables);
|
|
1420
1446
|
};
|
|
1421
|
-
postError = (id,
|
|
1447
|
+
postError = (id, error) => {
|
|
1422
1448
|
if (this.completedRequests.has(id)) {
|
|
1423
1449
|
return;
|
|
1424
1450
|
}
|
|
1425
1451
|
this.completedRequests.add(id);
|
|
1426
|
-
|
|
1452
|
+
let data;
|
|
1453
|
+
if (typeof error === "string") {
|
|
1454
|
+
data = { message: error, name: "Error" };
|
|
1455
|
+
} else if (error instanceof Error) {
|
|
1456
|
+
data = { message: error.message, name: error.name };
|
|
1457
|
+
} else {
|
|
1458
|
+
data = { message: String(error), name: "Error" };
|
|
1459
|
+
}
|
|
1460
|
+
postMessage({ id, type: "error", data });
|
|
1427
1461
|
};
|
|
1428
1462
|
postStreamChunk = (id, event) => {
|
|
1429
1463
|
if (this.completedRequests.has(id)) {
|
|
@@ -1469,6 +1503,7 @@ class WorkerServerBase {
|
|
|
1469
1503
|
controller?.abort();
|
|
1470
1504
|
this.requestControllers.delete(id);
|
|
1471
1505
|
this.postError(id, "Operation aborted");
|
|
1506
|
+
this.scheduleCompletedRequestCleanup(id);
|
|
1472
1507
|
}
|
|
1473
1508
|
}
|
|
1474
1509
|
async handleReactiveCall(id, functionName, [input, output, model]) {
|
|
@@ -1481,7 +1516,7 @@ class WorkerServerBase {
|
|
|
1481
1516
|
const result = await fn(input, output, model);
|
|
1482
1517
|
this.postResult(id, result);
|
|
1483
1518
|
} catch (error) {
|
|
1484
|
-
this.postError(id, error
|
|
1519
|
+
this.postError(id, error);
|
|
1485
1520
|
}
|
|
1486
1521
|
}
|
|
1487
1522
|
async handleCall(id, functionName, [input, model]) {
|
|
@@ -1501,12 +1536,10 @@ class WorkerServerBase {
|
|
|
1501
1536
|
const result = await fn(input, model, postProgress, abortController.signal);
|
|
1502
1537
|
this.postResult(id, result);
|
|
1503
1538
|
} catch (error) {
|
|
1504
|
-
this.postError(id, error
|
|
1539
|
+
this.postError(id, error);
|
|
1505
1540
|
} finally {
|
|
1506
1541
|
this.requestControllers.delete(id);
|
|
1507
|
-
|
|
1508
|
-
this.completedRequests.delete(id);
|
|
1509
|
-
}, 1000);
|
|
1542
|
+
this.scheduleCompletedRequestCleanup(id);
|
|
1510
1543
|
}
|
|
1511
1544
|
}
|
|
1512
1545
|
async handleStreamCall(id, functionName, [input, model]) {
|
|
@@ -1523,12 +1556,10 @@ class WorkerServerBase {
|
|
|
1523
1556
|
}
|
|
1524
1557
|
this.postResult(id, undefined);
|
|
1525
1558
|
} catch (error) {
|
|
1526
|
-
this.postError(id, error
|
|
1559
|
+
this.postError(id, error);
|
|
1527
1560
|
} finally {
|
|
1528
1561
|
this.requestControllers.delete(id);
|
|
1529
|
-
|
|
1530
|
-
this.completedRequests.delete(id);
|
|
1531
|
-
}, 1000);
|
|
1562
|
+
this.scheduleCompletedRequestCleanup(id);
|
|
1532
1563
|
}
|
|
1533
1564
|
} else if (functionName in this.functions) {
|
|
1534
1565
|
try {
|
|
@@ -1540,17 +1571,29 @@ class WorkerServerBase {
|
|
|
1540
1571
|
this.postStreamChunk(id, { type: "finish", data: result });
|
|
1541
1572
|
this.postResult(id, undefined);
|
|
1542
1573
|
} catch (error) {
|
|
1543
|
-
this.postError(id, error
|
|
1574
|
+
this.postError(id, error);
|
|
1544
1575
|
} finally {
|
|
1545
1576
|
this.requestControllers.delete(id);
|
|
1546
|
-
|
|
1547
|
-
this.completedRequests.delete(id);
|
|
1548
|
-
}, 1000);
|
|
1577
|
+
this.scheduleCompletedRequestCleanup(id);
|
|
1549
1578
|
}
|
|
1550
1579
|
} else {
|
|
1551
1580
|
this.postError(id, `Function ${functionName} not found`);
|
|
1552
1581
|
}
|
|
1553
1582
|
}
|
|
1583
|
+
scheduleCompletedRequestCleanup(id) {
|
|
1584
|
+
setTimeout(() => {
|
|
1585
|
+
this.completedRequests.delete(id);
|
|
1586
|
+
}, 5000);
|
|
1587
|
+
if (this.completedRequests.size > 1e4) {
|
|
1588
|
+
const iter = this.completedRequests.values();
|
|
1589
|
+
for (let i = 0;i < 5000; i++) {
|
|
1590
|
+
const entry = iter.next();
|
|
1591
|
+
if (entry.done)
|
|
1592
|
+
break;
|
|
1593
|
+
this.completedRequests.delete(entry.value);
|
|
1594
|
+
}
|
|
1595
|
+
}
|
|
1596
|
+
}
|
|
1554
1597
|
}
|
|
1555
1598
|
|
|
1556
1599
|
// src/worker/Worker.bun.ts
|
|
@@ -1623,4 +1666,4 @@ export {
|
|
|
1623
1666
|
BaseError
|
|
1624
1667
|
};
|
|
1625
1668
|
|
|
1626
|
-
//# debugId=
|
|
1669
|
+
//# debugId=98A19D1FE1EE3D8D64756E2164756E21
|