@dxos/async 0.8.2-main.85fa0e5 → 0.8.2-main.9f6ec58
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/lib/browser/index.mjs +73 -57
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +75 -57
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +73 -57
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/callback.d.ts.map +1 -1
- package/dist/types/src/chain.d.ts.map +1 -1
- package/dist/types/src/cleanup.d.ts +2 -0
- package/dist/types/src/cleanup.d.ts.map +1 -1
- package/dist/types/src/debounce.d.ts.map +1 -1
- package/dist/types/src/errors.d.ts.map +1 -1
- package/dist/types/src/event-emitter.d.ts.map +1 -1
- package/dist/types/src/events.d.ts +5 -0
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/latch.d.ts.map +1 -1
- package/dist/types/src/mutex.d.ts.map +1 -1
- package/dist/types/src/observable-value.d.ts.map +1 -1
- package/dist/types/src/observable.d.ts.map +1 -1
- package/dist/types/src/persistent-lifecycle.d.ts.map +1 -1
- package/dist/types/src/push-iterable.d.ts.map +1 -1
- package/dist/types/src/sink.d.ts.map +1 -1
- package/dist/types/src/stream-to-array.d.ts.map +1 -1
- package/dist/types/src/task-scheduling.d.ts.map +1 -1
- package/dist/types/src/test-stream.d.ts.map +1 -1
- package/dist/types/src/testing.d.ts +2 -1
- package/dist/types/src/testing.d.ts.map +1 -1
- package/dist/types/src/timeout.d.ts.map +1 -1
- package/dist/types/src/timer.d.ts.map +1 -1
- package/dist/types/src/track-leaks.d.ts.map +1 -1
- package/dist/types/src/trigger.d.ts.map +1 -1
- package/dist/types/src/until.d.ts.map +1 -1
- package/dist/types/src/update-scheduler.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/src/cleanup.ts +14 -4
- package/src/events.ts +21 -13
- package/src/mutex.test.ts +2 -2
- package/src/observable-value.ts +2 -2
- package/src/observable.ts +7 -4
- package/src/persistent-lifecycle.ts +5 -5
- package/src/task-scheduling.ts +3 -3
- package/src/test-stream.ts +2 -2
- package/src/testing.test.ts +7 -1
- package/src/testing.ts +8 -4
- package/src/timer.ts +2 -2
- package/src/trigger.ts +3 -3
- package/src/update-scheduler.ts +4 -4
|
@@ -25,6 +25,14 @@ var combine = (...cleanupFns) => {
|
|
|
25
25
|
cleanupFns.forEach((cleanupFn) => cleanupFn());
|
|
26
26
|
};
|
|
27
27
|
};
|
|
28
|
+
var timeout = (cb, ms = 0) => {
|
|
29
|
+
const t = setTimeout(cb, ms);
|
|
30
|
+
return () => clearTimeout(t);
|
|
31
|
+
};
|
|
32
|
+
var interval = (cb, ms) => {
|
|
33
|
+
const t = setInterval(cb, ms);
|
|
34
|
+
return () => clearInterval(t);
|
|
35
|
+
};
|
|
28
36
|
var addEventListener = (el, event, handler, options) => {
|
|
29
37
|
el.addEventListener(event, handler, options);
|
|
30
38
|
return () => el.removeEventListener(event, handler, options);
|
|
@@ -68,8 +76,8 @@ var debounce = (cb, wait = 100) => {
|
|
|
68
76
|
// packages/common/async/src/errors.ts
|
|
69
77
|
var toError = (err) => err === void 0 || typeof err === "string" ? new Error(err) : err;
|
|
70
78
|
var TimeoutError = class extends Error {
|
|
71
|
-
constructor(
|
|
72
|
-
super(
|
|
79
|
+
constructor(timeout2, label) {
|
|
80
|
+
super(timeout2 ? `Timeout [${timeout2.toLocaleString()}ms]${label === void 0 ? "" : `: ${label}`}` : "Timeout");
|
|
73
81
|
}
|
|
74
82
|
};
|
|
75
83
|
var observableError = (observable, err) => {
|
|
@@ -97,13 +105,13 @@ var sleep = (ms) => {
|
|
|
97
105
|
});
|
|
98
106
|
};
|
|
99
107
|
var asyncReturn = () => sleep(0);
|
|
100
|
-
var asyncTimeout = async (promise,
|
|
108
|
+
var asyncTimeout = async (promise, timeout2, err) => {
|
|
101
109
|
let timeoutId;
|
|
102
|
-
const throwable = err === void 0 || typeof err === "string" ? new TimeoutError(
|
|
110
|
+
const throwable = err === void 0 || typeof err === "string" ? new TimeoutError(timeout2, err) : err;
|
|
103
111
|
const timeoutPromise = new Promise((resolve, reject) => {
|
|
104
112
|
timeoutId = setTimeout(() => {
|
|
105
113
|
reject(throwable);
|
|
106
|
-
},
|
|
114
|
+
}, timeout2);
|
|
107
115
|
unrefTimeout(timeoutId);
|
|
108
116
|
});
|
|
109
117
|
const conditionTimeout = typeof promise === "function" ? createPromiseFromCallback(promise) : promise;
|
|
@@ -126,12 +134,12 @@ var sleepWithContext = (ctx, ms) => {
|
|
|
126
134
|
reject(error);
|
|
127
135
|
return;
|
|
128
136
|
}
|
|
129
|
-
const
|
|
137
|
+
const timeout2 = setTimeout(() => {
|
|
130
138
|
clearDispose();
|
|
131
139
|
resolve();
|
|
132
140
|
}, ms);
|
|
133
141
|
const clearDispose = ctx.onDispose(() => {
|
|
134
|
-
clearTimeout(
|
|
142
|
+
clearTimeout(timeout2);
|
|
135
143
|
reject(error);
|
|
136
144
|
});
|
|
137
145
|
});
|
|
@@ -148,7 +156,7 @@ var addListener = (eventEmitter, eventName, callback) => {
|
|
|
148
156
|
remove: () => off()
|
|
149
157
|
};
|
|
150
158
|
};
|
|
151
|
-
var waitForEvent = (eventEmitter, eventName, test,
|
|
159
|
+
var waitForEvent = (eventEmitter, eventName, test, timeout2, error) => {
|
|
152
160
|
let off;
|
|
153
161
|
const promise = new Promise((resolve) => {
|
|
154
162
|
off = onEvent(eventEmitter, eventName, (...args) => {
|
|
@@ -157,7 +165,7 @@ var waitForEvent = (eventEmitter, eventName, test, timeout, error) => {
|
|
|
157
165
|
}
|
|
158
166
|
});
|
|
159
167
|
});
|
|
160
|
-
return
|
|
168
|
+
return timeout2 ? asyncTimeout(promise, timeout2, error ?? new Error()).finally(off) : promise.finally(off);
|
|
161
169
|
};
|
|
162
170
|
|
|
163
171
|
// packages/common/async/src/events.ts
|
|
@@ -352,14 +360,14 @@ var Event = class _Event {
|
|
|
352
360
|
* the event is emitted after `timeout / 8` ms.
|
|
353
361
|
*/
|
|
354
362
|
// TODO(burdon): Factor out generic function.
|
|
355
|
-
debounce(
|
|
363
|
+
debounce(timeout2 = 0) {
|
|
356
364
|
let firing;
|
|
357
365
|
let lastFired;
|
|
358
366
|
const debouncedEvent = new _Event();
|
|
359
367
|
debouncedEvent.addEffect(() => {
|
|
360
368
|
const unsubscribe = this.on(() => {
|
|
361
369
|
if (!firing) {
|
|
362
|
-
const fireIn = !lastFired || Date.now() - lastFired >
|
|
370
|
+
const fireIn = !lastFired || Date.now() - lastFired > timeout2 ? timeout2 / 8 : timeout2;
|
|
363
371
|
firing = setTimeout(() => {
|
|
364
372
|
lastFired = Date.now();
|
|
365
373
|
firing = void 0;
|
|
@@ -381,6 +389,13 @@ var Event = class _Event {
|
|
|
381
389
|
return this;
|
|
382
390
|
}
|
|
383
391
|
/**
|
|
392
|
+
* Pipe the events into another event.
|
|
393
|
+
* @param event
|
|
394
|
+
*/
|
|
395
|
+
pipeInto(event) {
|
|
396
|
+
return this.on((data) => event.emit(data));
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
384
399
|
* Overridden to not return implementation details.
|
|
385
400
|
*/
|
|
386
401
|
toJSON() {
|
|
@@ -484,7 +499,7 @@ var weakListeners = () => {
|
|
|
484
499
|
// packages/common/async/src/latch.ts
|
|
485
500
|
import { invariant } from "@dxos/invariant";
|
|
486
501
|
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/common/async/src/latch.ts";
|
|
487
|
-
var latch = ({ count = 1, timeout } = {}) => {
|
|
502
|
+
var latch = ({ count = 1, timeout: timeout2 } = {}) => {
|
|
488
503
|
invariant(count >= 0, void 0, {
|
|
489
504
|
F: __dxlog_file2,
|
|
490
505
|
L: 19,
|
|
@@ -512,10 +527,10 @@ var latch = ({ count = 1, timeout } = {}) => {
|
|
|
512
527
|
doResolve(0);
|
|
513
528
|
});
|
|
514
529
|
} else {
|
|
515
|
-
if (
|
|
530
|
+
if (timeout2) {
|
|
516
531
|
t = setTimeout(() => {
|
|
517
|
-
doReject(new Error(`Timed out after ${
|
|
518
|
-
},
|
|
532
|
+
doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
|
|
533
|
+
}, timeout2);
|
|
519
534
|
}
|
|
520
535
|
}
|
|
521
536
|
let i = 0;
|
|
@@ -628,11 +643,11 @@ import Observable from "zen-observable";
|
|
|
628
643
|
import PushStream from "zen-push";
|
|
629
644
|
|
|
630
645
|
// packages/common/async/src/trigger.ts
|
|
631
|
-
var trigger = (
|
|
646
|
+
var trigger = (timeout2) => {
|
|
632
647
|
let callback;
|
|
633
648
|
const promise = new Promise((resolve, reject) => {
|
|
634
|
-
if (
|
|
635
|
-
setTimeout(() => reject(new Error(`Timed out after ${
|
|
649
|
+
if (timeout2) {
|
|
650
|
+
setTimeout(() => reject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`)), timeout2);
|
|
636
651
|
}
|
|
637
652
|
callback = resolve;
|
|
638
653
|
});
|
|
@@ -643,12 +658,12 @@ var trigger = (timeout) => {
|
|
|
643
658
|
resolver
|
|
644
659
|
];
|
|
645
660
|
};
|
|
646
|
-
var TriggerState
|
|
647
|
-
(function(TriggerState2) {
|
|
661
|
+
var TriggerState = /* @__PURE__ */ function(TriggerState2) {
|
|
648
662
|
TriggerState2["WAITING"] = "WAITING";
|
|
649
663
|
TriggerState2["RESOLVED"] = "RESOLVED";
|
|
650
664
|
TriggerState2["REJECTED"] = "REJECTED";
|
|
651
|
-
|
|
665
|
+
return TriggerState2;
|
|
666
|
+
}({});
|
|
652
667
|
var Trigger = class {
|
|
653
668
|
constructor(_options = {
|
|
654
669
|
autoReset: false
|
|
@@ -663,9 +678,9 @@ var Trigger = class {
|
|
|
663
678
|
/**
|
|
664
679
|
* Wait until wake is called, with optional timeout.
|
|
665
680
|
*/
|
|
666
|
-
async wait({ timeout } = {}) {
|
|
667
|
-
if (
|
|
668
|
-
return asyncTimeout(this._promise,
|
|
681
|
+
async wait({ timeout: timeout2 } = {}) {
|
|
682
|
+
if (timeout2) {
|
|
683
|
+
return asyncTimeout(this._promise, timeout2, new TimeoutError(timeout2));
|
|
669
684
|
} else {
|
|
670
685
|
return this._promise;
|
|
671
686
|
}
|
|
@@ -718,11 +733,7 @@ var Trigger = class {
|
|
|
718
733
|
// packages/common/async/src/observable.ts
|
|
719
734
|
var MulticastObservable = class _MulticastObservable extends Observable {
|
|
720
735
|
constructor(subscriber, _value) {
|
|
721
|
-
super((observer) => this._subscribe(observer))
|
|
722
|
-
this._value = _value;
|
|
723
|
-
this._observers = /* @__PURE__ */ new Set();
|
|
724
|
-
this._completed = new Trigger();
|
|
725
|
-
this._handlers = {
|
|
736
|
+
super((observer) => this._subscribe(observer)), this._value = _value, this._observers = /* @__PURE__ */ new Set(), this._completed = new Trigger(), this._handlers = {
|
|
726
737
|
next: (value) => {
|
|
727
738
|
this._value = value;
|
|
728
739
|
this._observers.forEach((observer) => observer.next?.(value));
|
|
@@ -772,9 +783,9 @@ var MulticastObservable = class _MulticastObservable extends Observable {
|
|
|
772
783
|
*
|
|
773
784
|
* @returns Promise that resolves to the value of the observable at the time of completion.
|
|
774
785
|
*/
|
|
775
|
-
async wait({ timeout } = {}) {
|
|
786
|
+
async wait({ timeout: timeout2 } = {}) {
|
|
776
787
|
await this._completed.wait({
|
|
777
|
-
timeout
|
|
788
|
+
timeout: timeout2
|
|
778
789
|
});
|
|
779
790
|
return this.get();
|
|
780
791
|
}
|
|
@@ -851,9 +862,7 @@ var ObservableProvider = class {
|
|
|
851
862
|
};
|
|
852
863
|
var CancellableObservableProvider = class extends ObservableProvider {
|
|
853
864
|
constructor(_handleCancel) {
|
|
854
|
-
super();
|
|
855
|
-
this._handleCancel = _handleCancel;
|
|
856
|
-
this._cancelled = false;
|
|
865
|
+
super(), this._handleCancel = _handleCancel, this._cancelled = false;
|
|
857
866
|
}
|
|
858
867
|
get cancelled() {
|
|
859
868
|
return this._cancelled;
|
|
@@ -1036,17 +1045,17 @@ var scheduleTask = (ctx, fn, afterMs) => {
|
|
|
1036
1045
|
name: `task (${fn.name || "anonymous"})`,
|
|
1037
1046
|
openStack: new StackTrace2()
|
|
1038
1047
|
}));
|
|
1039
|
-
const
|
|
1048
|
+
const timeout2 = setTimeout(async () => {
|
|
1040
1049
|
clearDispose();
|
|
1041
1050
|
await runInContextAsync(ctx, fn);
|
|
1042
1051
|
clearTracking();
|
|
1043
1052
|
}, afterMs);
|
|
1044
1053
|
const clearDispose = ctx.onDispose(() => {
|
|
1045
1054
|
clearTracking();
|
|
1046
|
-
clearTimeout(
|
|
1055
|
+
clearTimeout(timeout2);
|
|
1047
1056
|
});
|
|
1048
1057
|
};
|
|
1049
|
-
var scheduleTaskInterval = (ctx, task,
|
|
1058
|
+
var scheduleTaskInterval = (ctx, task, interval2) => {
|
|
1050
1059
|
const clearTracking = trackResource(() => ({
|
|
1051
1060
|
name: `repeating task (${task.name || "anonymous"})`,
|
|
1052
1061
|
openStack: new StackTrace2()
|
|
@@ -1057,9 +1066,9 @@ var scheduleTaskInterval = (ctx, task, interval) => {
|
|
|
1057
1066
|
if (ctx.disposed) {
|
|
1058
1067
|
return;
|
|
1059
1068
|
}
|
|
1060
|
-
timeoutId = setTimeout(run,
|
|
1069
|
+
timeoutId = setTimeout(run, interval2);
|
|
1061
1070
|
};
|
|
1062
|
-
timeoutId = setTimeout(run,
|
|
1071
|
+
timeoutId = setTimeout(run, interval2);
|
|
1063
1072
|
ctx.onDispose(() => {
|
|
1064
1073
|
clearTracking();
|
|
1065
1074
|
clearTimeout(timeoutId);
|
|
@@ -1071,16 +1080,16 @@ var scheduleExponentialBackoffTaskInterval = (ctx, task, initialInterval) => {
|
|
|
1071
1080
|
openStack: new StackTrace2()
|
|
1072
1081
|
}));
|
|
1073
1082
|
let timeoutId;
|
|
1074
|
-
let
|
|
1083
|
+
let interval2 = initialInterval;
|
|
1075
1084
|
const repeat = async () => {
|
|
1076
1085
|
await runInContextAsync(ctx, task);
|
|
1077
1086
|
if (ctx.disposed) {
|
|
1078
1087
|
return;
|
|
1079
1088
|
}
|
|
1080
|
-
|
|
1081
|
-
timeoutId = setTimeout(repeat,
|
|
1089
|
+
interval2 *= 2;
|
|
1090
|
+
timeoutId = setTimeout(repeat, interval2);
|
|
1082
1091
|
};
|
|
1083
|
-
timeoutId = setTimeout(repeat,
|
|
1092
|
+
timeoutId = setTimeout(repeat, interval2);
|
|
1084
1093
|
ctx.onDispose(() => {
|
|
1085
1094
|
clearTracking();
|
|
1086
1095
|
clearTimeout(timeoutId);
|
|
@@ -1328,15 +1337,15 @@ var TestStream = class extends Duplex {
|
|
|
1328
1337
|
this._received = Buffer.alloc(0);
|
|
1329
1338
|
this._onWrite = new Event();
|
|
1330
1339
|
}
|
|
1331
|
-
static async assertConnectivity(stream1, stream2, { timeout = 200 } = {}) {
|
|
1340
|
+
static async assertConnectivity(stream1, stream2, { timeout: timeout2 = 200 } = {}) {
|
|
1332
1341
|
stream1.push("ping");
|
|
1333
1342
|
stream2.push("pong");
|
|
1334
1343
|
await Promise.all([
|
|
1335
1344
|
stream2.assertReceivedAsync("ping", {
|
|
1336
|
-
timeout
|
|
1345
|
+
timeout: timeout2
|
|
1337
1346
|
}),
|
|
1338
1347
|
stream1.assertReceivedAsync("pong", {
|
|
1339
|
-
timeout
|
|
1348
|
+
timeout: timeout2
|
|
1340
1349
|
})
|
|
1341
1350
|
]);
|
|
1342
1351
|
}
|
|
@@ -1350,15 +1359,15 @@ var TestStream = class extends Duplex {
|
|
|
1350
1359
|
}
|
|
1351
1360
|
_read(size) {
|
|
1352
1361
|
}
|
|
1353
|
-
assertReceivedAsync(data, { timeout = 200 } = {}) {
|
|
1362
|
+
assertReceivedAsync(data, { timeout: timeout2 = 200 } = {}) {
|
|
1354
1363
|
const dataBuffer = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
1355
|
-
return asyncTimeout(this._onWrite.waitForCondition(() => this._received.equals(dataBuffer)),
|
|
1364
|
+
return asyncTimeout(this._onWrite.waitForCondition(() => this._received.equals(dataBuffer)), timeout2);
|
|
1356
1365
|
}
|
|
1357
1366
|
};
|
|
1358
1367
|
|
|
1359
1368
|
// packages/common/async/src/testing.ts
|
|
1360
|
-
var waitForCondition = ({ condition, timeout = 0, interval = 10, error }) => {
|
|
1361
|
-
const stopTime =
|
|
1369
|
+
var waitForCondition = ({ condition, timeout: timeout2 = 0, interval: interval2 = 10, error, breakOnError = false }) => {
|
|
1370
|
+
const stopTime = timeout2 ? Date.now() + timeout2 : 0;
|
|
1362
1371
|
const trigger2 = new Trigger();
|
|
1363
1372
|
const waiter = async () => {
|
|
1364
1373
|
while (!stopTime || Date.now() < stopTime) {
|
|
@@ -1369,12 +1378,17 @@ var waitForCondition = ({ condition, timeout = 0, interval = 10, error }) => {
|
|
|
1369
1378
|
break;
|
|
1370
1379
|
}
|
|
1371
1380
|
} catch (err) {
|
|
1381
|
+
if (breakOnError === true) {
|
|
1382
|
+
trigger2.throw(err);
|
|
1383
|
+
}
|
|
1372
1384
|
}
|
|
1373
|
-
await sleep(
|
|
1385
|
+
await sleep(interval2);
|
|
1374
1386
|
}
|
|
1375
1387
|
};
|
|
1376
1388
|
setTimeout(waiter, 0);
|
|
1377
|
-
return
|
|
1389
|
+
return trigger2.wait({
|
|
1390
|
+
timeout: timeout2
|
|
1391
|
+
});
|
|
1378
1392
|
};
|
|
1379
1393
|
|
|
1380
1394
|
// packages/common/async/src/timer.ts
|
|
@@ -1405,11 +1419,11 @@ var Timer = class {
|
|
|
1405
1419
|
if (this._count >= (options.count ?? 0)) {
|
|
1406
1420
|
stop();
|
|
1407
1421
|
} else {
|
|
1408
|
-
const
|
|
1422
|
+
const interval2 = (options.interval ?? 0) + Math.random() * (options.jitter ?? 0);
|
|
1409
1423
|
this._timer = setTimeout(async () => {
|
|
1410
1424
|
await this._callback(this._count++);
|
|
1411
1425
|
run();
|
|
1412
|
-
},
|
|
1426
|
+
}, interval2);
|
|
1413
1427
|
}
|
|
1414
1428
|
};
|
|
1415
1429
|
this._state.emit(true);
|
|
@@ -1426,11 +1440,11 @@ var Timer = class {
|
|
|
1426
1440
|
};
|
|
1427
1441
|
|
|
1428
1442
|
// packages/common/async/src/until.ts
|
|
1429
|
-
var until = (cb,
|
|
1443
|
+
var until = (cb, timeout2) => {
|
|
1430
1444
|
return new Promise((resolve, reject) => {
|
|
1431
|
-
const t =
|
|
1445
|
+
const t = timeout2 && setTimeout(() => {
|
|
1432
1446
|
reject(new Error(`Timeout after ${t}ms`));
|
|
1433
|
-
},
|
|
1447
|
+
}, timeout2);
|
|
1434
1448
|
setTimeout(async () => {
|
|
1435
1449
|
try {
|
|
1436
1450
|
await cb((value) => {
|
|
@@ -1559,6 +1573,7 @@ export {
|
|
|
1559
1573
|
createPromiseFromCallback,
|
|
1560
1574
|
debounce,
|
|
1561
1575
|
dumpLeaks,
|
|
1576
|
+
interval,
|
|
1562
1577
|
latch,
|
|
1563
1578
|
makePushIterable,
|
|
1564
1579
|
observableError,
|
|
@@ -1574,6 +1589,7 @@ export {
|
|
|
1574
1589
|
sleepWithContext,
|
|
1575
1590
|
streamToArray,
|
|
1576
1591
|
synchronized,
|
|
1592
|
+
timeout,
|
|
1577
1593
|
toError,
|
|
1578
1594
|
trackLeaks,
|
|
1579
1595
|
trackResource,
|