@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.
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
@@ -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(timeout, label) {
74
- super(timeout ? `Timeout [${timeout.toLocaleString()}ms]${label === void 0 ? "" : `: ${label}`}` : "Timeout");
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, timeout, err) => {
110
+ var asyncTimeout = async (promise, timeout2, err) => {
103
111
  let timeoutId;
104
- const throwable = err === void 0 || typeof err === "string" ? new TimeoutError(timeout, err) : err;
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
- }, timeout);
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 timeout = setTimeout(() => {
139
+ const timeout2 = setTimeout(() => {
132
140
  clearDispose();
133
141
  resolve();
134
142
  }, ms);
135
143
  const clearDispose = ctx.onDispose(() => {
136
- clearTimeout(timeout);
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, timeout, error) => {
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 timeout ? asyncTimeout(promise, timeout, error ?? new Error()).finally(off) : promise.finally(off);
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(timeout = 0) {
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 > timeout ? timeout / 8 : timeout;
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 (timeout) {
532
+ if (timeout2) {
518
533
  t = setTimeout(() => {
519
- doReject(new Error(`Timed out after ${timeout.toLocaleString()}ms`));
520
- }, timeout);
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 = (timeout) => {
648
+ var trigger = (timeout2) => {
634
649
  let callback;
635
650
  const promise = new Promise((resolve, reject) => {
636
- if (timeout) {
637
- setTimeout(() => reject(new Error(`Timed out after ${timeout.toLocaleString()}ms`)), timeout);
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
- })(TriggerState || (TriggerState = {}));
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 (timeout) {
670
- return asyncTimeout(this._promise, timeout, new TimeoutError(timeout));
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 timeout = setTimeout(async () => {
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(timeout);
1057
+ clearTimeout(timeout2);
1049
1058
  });
1050
1059
  };
1051
- var scheduleTaskInterval = (ctx, task, interval) => {
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, interval);
1071
+ timeoutId = setTimeout(run, interval2);
1063
1072
  };
1064
- timeoutId = setTimeout(run, interval);
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 interval = initialInterval;
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
- interval *= 2;
1083
- timeoutId = setTimeout(repeat, interval);
1091
+ interval2 *= 2;
1092
+ timeoutId = setTimeout(repeat, interval2);
1084
1093
  };
1085
- timeoutId = setTimeout(repeat, interval);
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)), timeout);
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 = timeout ? Date.now() + timeout : 0;
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(interval);
1387
+ await sleep(interval2);
1376
1388
  }
1377
1389
  };
1378
1390
  setTimeout(waiter, 0);
1379
- return timeout ? asyncTimeout(trigger2.wait(), timeout, error ?? new Error("Timeout")) : trigger2.wait();
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 interval = (options.interval ?? 0) + Math.random() * (options.jitter ?? 0);
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
- }, interval);
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, timeout) => {
1445
+ var until = (cb, timeout2) => {
1432
1446
  return new Promise((resolve, reject) => {
1433
- const t = timeout && setTimeout(() => {
1447
+ const t = timeout2 && setTimeout(() => {
1434
1448
  reject(new Error(`Timeout after ${t}ms`));
1435
- }, timeout);
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,