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