@dxos/async 0.8.4-main.f9ba587 → 0.8.4-main.fd6878d

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 (61) hide show
  1. package/dist/lib/browser/index.mjs +177 -166
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +177 -166
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/callback.d.ts +2 -1
  8. package/dist/types/src/callback.d.ts.map +1 -1
  9. package/dist/types/src/chain.d.ts +1 -1
  10. package/dist/types/src/chain.d.ts.map +1 -1
  11. package/dist/types/src/cleanup.d.ts +1 -1
  12. package/dist/types/src/cleanup.d.ts.map +1 -1
  13. package/dist/types/src/debounce.d.ts +16 -2
  14. package/dist/types/src/debounce.d.ts.map +1 -1
  15. package/dist/types/src/index.d.ts +0 -5
  16. package/dist/types/src/index.d.ts.map +1 -1
  17. package/dist/types/src/task-scheduling.d.ts.map +1 -1
  18. package/dist/types/src/testing.d.ts +13 -0
  19. package/dist/types/src/testing.d.ts.map +1 -1
  20. package/dist/types/src/timeout.d.ts +1 -1
  21. package/dist/types/src/timeout.d.ts.map +1 -1
  22. package/dist/types/src/trigger.d.ts +11 -0
  23. package/dist/types/src/trigger.d.ts.map +1 -1
  24. package/dist/types/tsconfig.tsbuildinfo +1 -1
  25. package/package.json +9 -9
  26. package/src/callback.ts +3 -3
  27. package/src/chain.ts +1 -1
  28. package/src/cleanup.ts +3 -3
  29. package/src/debounce.test.ts +69 -12
  30. package/src/debounce.ts +32 -11
  31. package/src/event-emitter.test.ts +2 -1
  32. package/src/index.ts +0 -5
  33. package/src/observable-value.test.ts +1 -1
  34. package/src/persistent-lifecycle.test.ts +1 -1
  35. package/src/task-scheduling.ts +1 -1
  36. package/src/testing.test.ts +41 -1
  37. package/src/testing.ts +53 -0
  38. package/src/timeout.ts +23 -22
  39. package/src/trigger.ts +58 -1
  40. package/src/update-scheduler.ts +1 -1
  41. package/dist/types/src/latch.d.ts +0 -11
  42. package/dist/types/src/latch.d.ts.map +0 -1
  43. package/dist/types/src/sink.d.ts +0 -6
  44. package/dist/types/src/sink.d.ts.map +0 -1
  45. package/dist/types/src/throttle.d.ts +0 -2
  46. package/dist/types/src/throttle.d.ts.map +0 -1
  47. package/dist/types/src/throttle.test.d.ts +0 -2
  48. package/dist/types/src/throttle.test.d.ts.map +0 -1
  49. package/dist/types/src/types.d.ts +0 -2
  50. package/dist/types/src/types.d.ts.map +0 -1
  51. package/dist/types/src/until.d.ts +0 -14
  52. package/dist/types/src/until.d.ts.map +0 -1
  53. package/dist/types/src/until.test.d.ts +0 -2
  54. package/dist/types/src/until.test.d.ts.map +0 -1
  55. package/src/latch.ts +0 -60
  56. package/src/sink.ts +0 -26
  57. package/src/throttle.test.ts +0 -65
  58. package/src/throttle.ts +0 -14
  59. package/src/types.ts +0 -5
  60. package/src/until.test.ts +0 -47
  61. package/src/until.ts +0 -58
@@ -1,5 +1,5 @@
1
1
  // src/callback.ts
2
- var createPromiseFromCallback = (run) => new Promise((resolve, reject) => {
2
+ var promiseFromCallback = (run) => new Promise((resolve, reject) => {
3
3
  run((error, value) => {
4
4
  if (error) {
5
5
  reject(error);
@@ -10,9 +10,9 @@ var createPromiseFromCallback = (run) => new Promise((resolve, reject) => {
10
10
  });
11
11
 
12
12
  // src/chain.ts
13
- var asyncChain = (chain) => async (elements) => {
13
+ var chain = (chain2) => async (elements) => {
14
14
  let result = await elements;
15
- for (const part of chain) {
15
+ for (const part of chain2) {
16
16
  result = await Promise.all(result.map(async (element) => await part(element)));
17
17
  }
18
18
  return result;
@@ -33,14 +33,12 @@ var interval = (cb, ms) => {
33
33
  const t = setInterval(cb, ms);
34
34
  return () => clearInterval(t);
35
35
  };
36
- function addEventListener(target, type, listener, options) {
36
+ var addEventListener = (target, type, listener, options) => {
37
37
  target.addEventListener(type, listener, options);
38
38
  return () => target.removeEventListener(type, listener, options);
39
- }
39
+ };
40
40
  var SubscriptionList = class {
41
- constructor() {
42
- this._cleanups = [];
43
- }
41
+ _cleanups = [];
44
42
  add(cb) {
45
43
  this._cleanups.push(cb);
46
44
  return this;
@@ -51,6 +49,7 @@ var SubscriptionList = class {
51
49
  }
52
50
  };
53
51
  var SubscriptionSet = class {
52
+ _cleanupMap;
54
53
  constructor(keyProjection) {
55
54
  this._cleanupMap = new ComplexMap(keyProjection);
56
55
  }
@@ -64,29 +63,27 @@ var SubscriptionSet = class {
64
63
  }
65
64
  };
66
65
 
67
- // src/throttle.ts
68
- var throttle = (cb, wait = 100) => {
66
+ // src/debounce.ts
67
+ var debounce = (cb, delay = 100) => {
68
+ let t;
69
+ return (...args) => {
70
+ clearTimeout(t);
71
+ t = setTimeout(() => cb(...args), delay);
72
+ };
73
+ };
74
+ var throttle = (cb, delay = 100) => {
69
75
  let lastCall = 0;
70
76
  return (...args) => {
71
77
  const now = Date.now();
72
- if (now - lastCall >= wait) {
78
+ if (now - lastCall >= delay) {
73
79
  cb(...args);
74
80
  lastCall = now;
75
81
  }
76
82
  };
77
83
  };
78
-
79
- // src/debounce.ts
80
- var debounce = (cb, wait = 100) => {
81
- let t;
82
- return (...args) => {
83
- clearTimeout(t);
84
- t = setTimeout(() => cb(...args), wait);
85
- };
86
- };
87
- var debounceAndThrottle = (cb, wait = 100) => {
88
- const debounced = debounce(cb, wait);
89
- const throttled = throttle(cb, wait);
84
+ var debounceAndThrottle = (cb, delay = 100) => {
85
+ const debounced = debounce(cb, delay);
86
+ const throttled = throttle(cb, delay);
90
87
  return (...args) => {
91
88
  debounced(...args);
92
89
  throttled(...args);
@@ -124,6 +121,23 @@ var sleep = (ms) => {
124
121
  sleeper();
125
122
  });
126
123
  };
124
+ var sleepWithContext = (ctx, ms) => {
125
+ const error = new ContextDisposedError();
126
+ return new Promise((resolve, reject) => {
127
+ if (ctx.disposed) {
128
+ reject(error);
129
+ return;
130
+ }
131
+ const timeout2 = setTimeout(() => {
132
+ clearDispose();
133
+ resolve();
134
+ }, ms);
135
+ const clearDispose = ctx.onDispose(() => {
136
+ clearTimeout(timeout2);
137
+ reject(error);
138
+ });
139
+ });
140
+ };
127
141
  var asyncReturn = () => sleep(0);
128
142
  var asyncTimeout = async (promise, timeout2, err) => {
129
143
  let timeoutId;
@@ -134,7 +148,7 @@ var asyncTimeout = async (promise, timeout2, err) => {
134
148
  }, timeout2);
135
149
  unrefTimeout(timeoutId);
136
150
  });
137
- const conditionTimeout = typeof promise === "function" ? createPromiseFromCallback(promise) : promise;
151
+ const conditionTimeout = typeof promise === "function" ? promiseFromCallback(promise) : promise;
138
152
  return await Promise.race([
139
153
  conditionTimeout,
140
154
  timeoutPromise
@@ -147,23 +161,6 @@ var unrefTimeout = (timeoutId) => {
147
161
  timeoutId.unref();
148
162
  }
149
163
  };
150
- var sleepWithContext = (ctx, ms) => {
151
- const error = new ContextDisposedError();
152
- return new Promise((resolve, reject) => {
153
- if (ctx.disposed) {
154
- reject(error);
155
- return;
156
- }
157
- const timeout2 = setTimeout(() => {
158
- clearDispose();
159
- resolve();
160
- }, ms);
161
- const clearDispose = ctx.onDispose(() => {
162
- clearTimeout(timeout2);
163
- reject(error);
164
- });
165
- });
166
- };
167
164
 
168
165
  // src/event-emitter.ts
169
166
  var onEvent = (eventEmitter, eventName, callback) => {
@@ -193,10 +190,6 @@ import { Context } from "@dxos/context";
193
190
  var __dxlog_file = "/__w/dxos/dxos/packages/common/async/src/events.ts";
194
191
  var DO_NOT_ERROR_ON_ASYNC_CALLBACK = true;
195
192
  var Event = class _Event {
196
- constructor() {
197
- this._listeners = /* @__PURE__ */ new Set();
198
- this._effects = /* @__PURE__ */ new Set();
199
- }
200
193
  /**
201
194
  * Wrap objects that have on/off style event emitters.
202
195
  */
@@ -209,6 +202,8 @@ var Event = class _Event {
209
202
  });
210
203
  return event;
211
204
  }
205
+ _listeners = /* @__PURE__ */ new Set();
206
+ _effects = /* @__PURE__ */ new Set();
212
207
  /**
213
208
  * Emit an event.
214
209
  * In most cases should only be called by the class or entity containing the event.
@@ -452,6 +447,11 @@ var Event = class _Event {
452
447
  }
453
448
  };
454
449
  var EventListener = class {
450
+ ctx;
451
+ once;
452
+ weak;
453
+ callback;
454
+ _clearDispose;
455
455
  constructor(event, listener, ctx, once, weak) {
456
456
  this.ctx = ctx;
457
457
  this.once = once;
@@ -516,65 +516,13 @@ var weakListeners = () => {
516
516
  };
517
517
  };
518
518
 
519
- // src/latch.ts
520
- import { invariant } from "@dxos/invariant";
521
- var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/latch.ts";
522
- var latch = ({ count = 1, timeout: timeout2 } = {}) => {
523
- invariant(count >= 0, void 0, {
524
- F: __dxlog_file2,
525
- L: 19,
526
- S: void 0,
527
- A: [
528
- "count >= 0",
529
- ""
530
- ]
531
- });
532
- let t;
533
- let doResolve;
534
- let doReject;
535
- const promise = new Promise((resolve, reject) => {
536
- doResolve = (value) => {
537
- clearTimeout(t);
538
- resolve(value);
539
- };
540
- doReject = (err) => {
541
- clearTimeout(t);
542
- reject(err);
543
- };
544
- });
545
- if (count === 0) {
546
- setTimeout(() => {
547
- doResolve(0);
548
- });
549
- } else {
550
- if (timeout2) {
551
- t = setTimeout(() => {
552
- doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
553
- }, timeout2);
554
- }
555
- }
556
- let i = 0;
557
- return [
558
- async () => await promise,
559
- () => {
560
- if (++i === count) {
561
- doResolve(i);
562
- }
563
- return i;
564
- },
565
- (err) => doReject(err)
566
- ];
567
- };
568
-
569
519
  // src/mutex.ts
570
520
  import "@dxos/util";
571
521
  import { warnAfterTimeout } from "@dxos/debug";
572
522
  var Mutex = class {
573
- constructor() {
574
- this._queue = Promise.resolve();
575
- this._queueLength = 0;
576
- this._tag = null;
577
- }
523
+ _queue = Promise.resolve();
524
+ _queueLength = 0;
525
+ _tag = null;
578
526
  get tag() {
579
527
  return this._tag;
580
528
  }
@@ -620,6 +568,7 @@ var Mutex = class {
620
568
  }
621
569
  };
622
570
  var MutexGuard = class {
571
+ _release;
623
572
  constructor(_release) {
624
573
  this._release = _release;
625
574
  }
@@ -663,6 +612,8 @@ import Observable from "zen-observable";
663
612
  import PushStream from "zen-push";
664
613
 
665
614
  // src/trigger.ts
615
+ import { invariant } from "@dxos/invariant";
616
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/trigger.ts";
666
617
  var trigger = (timeout2) => {
667
618
  let callback;
668
619
  const promise = new Promise((resolve, reject) => {
@@ -685,6 +636,11 @@ var TriggerState = /* @__PURE__ */ function(TriggerState2) {
685
636
  return TriggerState2;
686
637
  }({});
687
638
  var Trigger = class {
639
+ _options;
640
+ _promise;
641
+ _resolve;
642
+ _reject;
643
+ _state;
688
644
  constructor(_options = {
689
645
  autoReset: false
690
646
  }) {
@@ -749,9 +705,59 @@ var Trigger = class {
749
705
  return this;
750
706
  }
751
707
  };
708
+ var latch = ({ count = 1, timeout: timeout2 } = {}) => {
709
+ invariant(count >= 0, void 0, {
710
+ F: __dxlog_file2,
711
+ L: 139,
712
+ S: void 0,
713
+ A: [
714
+ "count >= 0",
715
+ ""
716
+ ]
717
+ });
718
+ let t;
719
+ let doResolve;
720
+ let doReject;
721
+ const promise = new Promise((resolve, reject) => {
722
+ doResolve = (value) => {
723
+ clearTimeout(t);
724
+ resolve(value);
725
+ };
726
+ doReject = (err) => {
727
+ clearTimeout(t);
728
+ reject(err);
729
+ };
730
+ });
731
+ if (count === 0) {
732
+ setTimeout(() => {
733
+ doResolve(0);
734
+ });
735
+ } else {
736
+ if (timeout2) {
737
+ t = setTimeout(() => {
738
+ doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
739
+ }, timeout2);
740
+ }
741
+ }
742
+ let i = 0;
743
+ return [
744
+ async () => await promise,
745
+ () => {
746
+ if (++i === count) {
747
+ doResolve(i);
748
+ }
749
+ return i;
750
+ },
751
+ (err) => doReject(err)
752
+ ];
753
+ };
752
754
 
753
755
  // src/observable.ts
754
756
  var MulticastObservable = class _MulticastObservable extends Observable {
757
+ _value;
758
+ _observers;
759
+ _observable;
760
+ _completed;
755
761
  constructor(subscriber, _value) {
756
762
  super((observer) => this._subscribe(observer)), this._value = _value, this._observers = /* @__PURE__ */ new Set(), this._completed = new Trigger(), this._handlers = {
757
763
  next: (value) => {
@@ -849,18 +855,18 @@ var MulticastObservable = class _MulticastObservable extends Observable {
849
855
  this._observers.delete(observer);
850
856
  };
851
857
  }
858
+ _handlers;
852
859
  };
853
860
  var EMPTY_OBSERVABLE = MulticastObservable.of(null);
854
861
 
855
862
  // src/observable-value.ts
856
863
  import { createSetDispatch } from "@dxos/util";
857
864
  var ObservableProvider = class {
858
- constructor() {
859
- this._handlers = /* @__PURE__ */ new Set();
860
- this._proxy = createSetDispatch({
861
- handlers: this._handlers
862
- });
863
- }
865
+ _handlers = /* @__PURE__ */ new Set();
866
+ _proxy = createSetDispatch({
867
+ handlers: this._handlers
868
+ });
869
+ _value;
864
870
  /**
865
871
  * Proxy used to dispatch callbacks to each subscription.
866
872
  */
@@ -881,6 +887,8 @@ var ObservableProvider = class {
881
887
  }
882
888
  };
883
889
  var CancellableObservableProvider = class extends ObservableProvider {
890
+ _handleCancel;
891
+ _cancelled;
884
892
  constructor(_handleCancel) {
885
893
  super(), this._handleCancel = _handleCancel, this._cancelled = false;
886
894
  }
@@ -992,6 +1000,11 @@ if (enabled) {
992
1000
 
993
1001
  // src/task-scheduling.ts
994
1002
  var DeferredTask = class {
1003
+ _ctx;
1004
+ _callback;
1005
+ _scheduled;
1006
+ _currentTask;
1007
+ _nextTask;
995
1008
  constructor(_ctx, _callback) {
996
1009
  this._ctx = _ctx;
997
1010
  this._callback = _callback;
@@ -1127,11 +1140,15 @@ var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecyc
1127
1140
  var INIT_RESTART_DELAY = 100;
1128
1141
  var DEFAULT_MAX_RESTART_DELAY = 5e3;
1129
1142
  var PersistentLifecycle = class extends Resource {
1143
+ _start;
1144
+ _stop;
1145
+ _onRestart;
1146
+ _maxRestartDelay;
1147
+ _currentState = void 0;
1148
+ _restartTask = void 0;
1149
+ _restartAfter = 0;
1130
1150
  constructor({ start, stop, onRestart, maxRestartDelay = DEFAULT_MAX_RESTART_DELAY }) {
1131
1151
  super();
1132
- this._currentState = void 0;
1133
- this._restartTask = void 0;
1134
- this._restartAfter = 0;
1135
1152
  this._start = start;
1136
1153
  this._stop = stop;
1137
1154
  this._onRestart = onRestart;
@@ -1293,20 +1310,6 @@ var makePushIterable = () => {
1293
1310
  };
1294
1311
  };
1295
1312
 
1296
- // src/sink.ts
1297
- var sink = (emitter, event, count = 1) => {
1298
- const [getPromise, resolve] = trigger();
1299
- let counter = 0;
1300
- const listener = () => {
1301
- if (++counter === count) {
1302
- emitter.off(event, listener);
1303
- resolve();
1304
- }
1305
- };
1306
- emitter.on(event, listener);
1307
- return getPromise();
1308
- };
1309
-
1310
1313
  // src/stream-to-array.ts
1311
1314
  var streamToArray = (stream) => {
1312
1315
  let deferred;
@@ -1352,11 +1355,6 @@ var streamToArray = (stream) => {
1352
1355
  // src/test-stream.ts
1353
1356
  import { Duplex } from "@dxos/node-std/stream";
1354
1357
  var TestStream = class extends Duplex {
1355
- constructor() {
1356
- super(...arguments);
1357
- this._received = Buffer.alloc(0);
1358
- this._onWrite = new Event();
1359
- }
1360
1358
  static async assertConnectivity(stream1, stream2, { timeout: timeout2 = 200 } = {}) {
1361
1359
  stream1.push("ping");
1362
1360
  stream2.push("pong");
@@ -1369,6 +1367,8 @@ var TestStream = class extends Duplex {
1369
1367
  })
1370
1368
  ]);
1371
1369
  }
1370
+ _received = Buffer.alloc(0);
1371
+ _onWrite = new Event();
1372
1372
  _write(chunk, encoding, callback) {
1373
1373
  this._received = Buffer.concat([
1374
1374
  this._received,
@@ -1410,9 +1410,46 @@ var waitForCondition = ({ condition, timeout: timeout2 = 0, interval: interval2
1410
1410
  timeout: timeout2
1411
1411
  });
1412
1412
  };
1413
+ var until = (cb, timeout2) => {
1414
+ return new Promise((resolve, reject) => {
1415
+ const t = timeout2 && setTimeout(() => {
1416
+ reject(new Error(`Timeout after ${t}ms`));
1417
+ }, timeout2);
1418
+ setTimeout(async () => {
1419
+ try {
1420
+ await cb((value) => {
1421
+ t && clearTimeout(t);
1422
+ resolve(value);
1423
+ }, (error) => {
1424
+ t && clearTimeout(t);
1425
+ reject(error);
1426
+ });
1427
+ } catch (err) {
1428
+ reject(err);
1429
+ }
1430
+ });
1431
+ });
1432
+ };
1433
+ var untilPromise = (cb) => cb();
1434
+ var untilError = (cb) => {
1435
+ return new Promise((resolve, reject) => {
1436
+ setTimeout(async () => {
1437
+ try {
1438
+ await cb();
1439
+ reject(new Error("No error was thrown."));
1440
+ } catch (err) {
1441
+ resolve(err);
1442
+ }
1443
+ });
1444
+ });
1445
+ };
1413
1446
 
1414
1447
  // src/timer.ts
1415
1448
  var Timer = class {
1449
+ _callback;
1450
+ _state;
1451
+ _timer;
1452
+ _count;
1416
1453
  constructor(_callback) {
1417
1454
  this._callback = _callback;
1418
1455
  this._state = new Event();
@@ -1459,44 +1496,19 @@ var Timer = class {
1459
1496
  }
1460
1497
  };
1461
1498
 
1462
- // src/until.ts
1463
- var until = (cb, timeout2) => {
1464
- return new Promise((resolve, reject) => {
1465
- const t = timeout2 && setTimeout(() => {
1466
- reject(new Error(`Timeout after ${t}ms`));
1467
- }, timeout2);
1468
- setTimeout(async () => {
1469
- try {
1470
- await cb((value) => {
1471
- t && clearTimeout(t);
1472
- resolve(value);
1473
- }, (error) => {
1474
- t && clearTimeout(t);
1475
- reject(error);
1476
- });
1477
- } catch (err) {
1478
- reject(err);
1479
- }
1480
- });
1481
- });
1482
- };
1483
- var untilPromise = (cb) => cb();
1484
- var untilError = (cb) => {
1485
- return new Promise((resolve, reject) => {
1486
- setTimeout(async () => {
1487
- try {
1488
- await cb();
1489
- reject(new Error("No error was thrown."));
1490
- } catch (err) {
1491
- resolve(err);
1492
- }
1493
- });
1494
- });
1495
- };
1496
-
1497
1499
  // src/update-scheduler.ts
1498
1500
  var TIME_PERIOD = 1e3;
1499
1501
  var UpdateScheduler = class {
1502
+ _ctx;
1503
+ _callback;
1504
+ _params;
1505
+ /**
1506
+ * Promise that resolves when the callback is done.
1507
+ * Never rejects.
1508
+ */
1509
+ _promise;
1510
+ _scheduled;
1511
+ _lastUpdateTime;
1500
1512
  constructor(_ctx, _callback, _params = {}) {
1501
1513
  this._ctx = _ctx;
1502
1514
  this._callback = _callback;
@@ -1586,11 +1598,10 @@ export {
1586
1598
  UpdateScheduler,
1587
1599
  addEventListener,
1588
1600
  addListener,
1589
- asyncChain,
1590
1601
  asyncReturn,
1591
1602
  asyncTimeout,
1603
+ chain,
1592
1604
  combine,
1593
- createPromiseFromCallback,
1594
1605
  debounce,
1595
1606
  debounceAndThrottle,
1596
1607
  dumpLeaks,
@@ -1599,13 +1610,13 @@ export {
1599
1610
  makePushIterable,
1600
1611
  observableError,
1601
1612
  onEvent,
1613
+ promiseFromCallback,
1602
1614
  runInContext,
1603
1615
  runInContextAsync,
1604
1616
  scheduleExponentialBackoffTaskInterval,
1605
1617
  scheduleMicroTask,
1606
1618
  scheduleTask,
1607
1619
  scheduleTaskInterval,
1608
- sink,
1609
1620
  sleep,
1610
1621
  sleepWithContext,
1611
1622
  streamToArray,