@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.
Files changed (51) hide show
  1. package/dist/lib/browser/index.mjs +73 -57
  2. package/dist/lib/browser/index.mjs.map +3 -3
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +75 -57
  5. package/dist/lib/node/index.cjs.map +3 -3
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/lib/node-esm/index.mjs +73 -57
  8. package/dist/lib/node-esm/index.mjs.map +3 -3
  9. package/dist/lib/node-esm/meta.json +1 -1
  10. package/dist/types/src/callback.d.ts.map +1 -1
  11. package/dist/types/src/chain.d.ts.map +1 -1
  12. package/dist/types/src/cleanup.d.ts +2 -0
  13. package/dist/types/src/cleanup.d.ts.map +1 -1
  14. package/dist/types/src/debounce.d.ts.map +1 -1
  15. package/dist/types/src/errors.d.ts.map +1 -1
  16. package/dist/types/src/event-emitter.d.ts.map +1 -1
  17. package/dist/types/src/events.d.ts +5 -0
  18. package/dist/types/src/events.d.ts.map +1 -1
  19. package/dist/types/src/latch.d.ts.map +1 -1
  20. package/dist/types/src/mutex.d.ts.map +1 -1
  21. package/dist/types/src/observable-value.d.ts.map +1 -1
  22. package/dist/types/src/observable.d.ts.map +1 -1
  23. package/dist/types/src/persistent-lifecycle.d.ts.map +1 -1
  24. package/dist/types/src/push-iterable.d.ts.map +1 -1
  25. package/dist/types/src/sink.d.ts.map +1 -1
  26. package/dist/types/src/stream-to-array.d.ts.map +1 -1
  27. package/dist/types/src/task-scheduling.d.ts.map +1 -1
  28. package/dist/types/src/test-stream.d.ts.map +1 -1
  29. package/dist/types/src/testing.d.ts +2 -1
  30. package/dist/types/src/testing.d.ts.map +1 -1
  31. package/dist/types/src/timeout.d.ts.map +1 -1
  32. package/dist/types/src/timer.d.ts.map +1 -1
  33. package/dist/types/src/track-leaks.d.ts.map +1 -1
  34. package/dist/types/src/trigger.d.ts.map +1 -1
  35. package/dist/types/src/until.d.ts.map +1 -1
  36. package/dist/types/src/update-scheduler.d.ts.map +1 -1
  37. package/dist/types/tsconfig.tsbuildinfo +1 -1
  38. package/package.json +7 -7
  39. package/src/cleanup.ts +14 -4
  40. package/src/events.ts +21 -13
  41. package/src/mutex.test.ts +2 -2
  42. package/src/observable-value.ts +2 -2
  43. package/src/observable.ts +7 -4
  44. package/src/persistent-lifecycle.ts +5 -5
  45. package/src/task-scheduling.ts +3 -3
  46. package/src/test-stream.ts +2 -2
  47. package/src/testing.test.ts +7 -1
  48. package/src/testing.ts +8 -4
  49. package/src/timer.ts +2 -2
  50. package/src/trigger.ts +3 -3
  51. 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(timeout, label) {
72
- super(timeout ? `Timeout [${timeout.toLocaleString()}ms]${label === void 0 ? "" : `: ${label}`}` : "Timeout");
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, timeout, err) => {
108
+ var asyncTimeout = async (promise, timeout2, err) => {
101
109
  let timeoutId;
102
- const throwable = err === void 0 || typeof err === "string" ? new TimeoutError(timeout, err) : err;
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
- }, timeout);
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 timeout = setTimeout(() => {
137
+ const timeout2 = setTimeout(() => {
130
138
  clearDispose();
131
139
  resolve();
132
140
  }, ms);
133
141
  const clearDispose = ctx.onDispose(() => {
134
- clearTimeout(timeout);
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, timeout, error) => {
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 timeout ? asyncTimeout(promise, timeout, error ?? new Error()).finally(off) : promise.finally(off);
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(timeout = 0) {
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 > timeout ? timeout / 8 : timeout;
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 (timeout) {
530
+ if (timeout2) {
516
531
  t = setTimeout(() => {
517
- doReject(new Error(`Timed out after ${timeout.toLocaleString()}ms`));
518
- }, timeout);
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 = (timeout) => {
646
+ var trigger = (timeout2) => {
632
647
  let callback;
633
648
  const promise = new Promise((resolve, reject) => {
634
- if (timeout) {
635
- setTimeout(() => reject(new Error(`Timed out after ${timeout.toLocaleString()}ms`)), timeout);
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
- })(TriggerState || (TriggerState = {}));
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 (timeout) {
668
- return asyncTimeout(this._promise, timeout, new TimeoutError(timeout));
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 timeout = setTimeout(async () => {
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(timeout);
1055
+ clearTimeout(timeout2);
1047
1056
  });
1048
1057
  };
1049
- var scheduleTaskInterval = (ctx, task, interval) => {
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, interval);
1069
+ timeoutId = setTimeout(run, interval2);
1061
1070
  };
1062
- timeoutId = setTimeout(run, interval);
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 interval = initialInterval;
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
- interval *= 2;
1081
- timeoutId = setTimeout(repeat, interval);
1089
+ interval2 *= 2;
1090
+ timeoutId = setTimeout(repeat, interval2);
1082
1091
  };
1083
- timeoutId = setTimeout(repeat, interval);
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)), timeout);
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 = timeout ? Date.now() + timeout : 0;
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(interval);
1385
+ await sleep(interval2);
1374
1386
  }
1375
1387
  };
1376
1388
  setTimeout(waiter, 0);
1377
- return timeout ? asyncTimeout(trigger2.wait(), timeout, error ?? new Error("Timeout")) : trigger2.wait();
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 interval = (options.interval ?? 0) + Math.random() * (options.jitter ?? 0);
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
- }, interval);
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, timeout) => {
1443
+ var until = (cb, timeout2) => {
1430
1444
  return new Promise((resolve, reject) => {
1431
- const t = timeout && setTimeout(() => {
1445
+ const t = timeout2 && setTimeout(() => {
1432
1446
  reject(new Error(`Timeout after ${t}ms`));
1433
- }, timeout);
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,