@dxos/async 0.8.3 → 0.8.4-main.28f8d3d

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 +214 -181
  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 +214 -181
  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 +19 -1
  14. package/dist/types/src/debounce.d.ts.map +1 -1
  15. package/dist/types/src/debounce.test.d.ts +2 -0
  16. package/dist/types/src/debounce.test.d.ts.map +1 -0
  17. package/dist/types/src/index.d.ts +0 -4
  18. package/dist/types/src/index.d.ts.map +1 -1
  19. package/dist/types/src/task-scheduling.d.ts.map +1 -1
  20. package/dist/types/src/testing.d.ts +13 -0
  21. package/dist/types/src/testing.d.ts.map +1 -1
  22. package/dist/types/src/timeout.d.ts +1 -1
  23. package/dist/types/src/timeout.d.ts.map +1 -1
  24. package/dist/types/src/trigger.d.ts +11 -0
  25. package/dist/types/src/trigger.d.ts.map +1 -1
  26. package/dist/types/tsconfig.tsbuildinfo +1 -1
  27. package/package.json +9 -9
  28. package/src/callback.ts +3 -3
  29. package/src/chain.ts +1 -1
  30. package/src/cleanup.ts +3 -3
  31. package/src/debounce.test.ts +115 -0
  32. package/src/debounce.ts +40 -4
  33. package/src/event-emitter.test.ts +2 -1
  34. package/src/events.test.ts +1 -1
  35. package/src/index.ts +0 -4
  36. package/src/observable-value.test.ts +1 -1
  37. package/src/persistent-lifecycle.test.ts +1 -1
  38. package/src/task-scheduling.ts +1 -1
  39. package/src/testing.test.ts +41 -1
  40. package/src/testing.ts +53 -0
  41. package/src/timeout.ts +23 -22
  42. package/src/trigger.ts +58 -1
  43. package/src/update-scheduler.ts +1 -1
  44. package/dist/lib/node/index.cjs +0 -1638
  45. package/dist/lib/node/index.cjs.map +0 -7
  46. package/dist/lib/node/meta.json +0 -1
  47. package/dist/types/src/latch.d.ts +0 -11
  48. package/dist/types/src/latch.d.ts.map +0 -1
  49. package/dist/types/src/sink.d.ts +0 -6
  50. package/dist/types/src/sink.d.ts.map +0 -1
  51. package/dist/types/src/types.d.ts +0 -2
  52. package/dist/types/src/types.d.ts.map +0 -1
  53. package/dist/types/src/until.d.ts +0 -14
  54. package/dist/types/src/until.d.ts.map +0 -1
  55. package/dist/types/src/until.test.d.ts +0 -2
  56. package/dist/types/src/until.test.d.ts.map +0 -1
  57. package/src/latch.ts +0 -60
  58. package/src/sink.ts +0 -26
  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
- // packages/common/async/src/callback.ts
2
- var createPromiseFromCallback = (run) => new Promise((resolve, reject) => {
1
+ // src/callback.ts
2
+ var promiseFromCallback = (run) => new Promise((resolve, reject) => {
3
3
  run((error, value) => {
4
4
  if (error) {
5
5
  reject(error);
@@ -9,16 +9,16 @@ var createPromiseFromCallback = (run) => new Promise((resolve, reject) => {
9
9
  });
10
10
  });
11
11
 
12
- // packages/common/async/src/chain.ts
13
- var asyncChain = (chain) => async (elements) => {
12
+ // src/chain.ts
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;
19
19
  };
20
20
 
21
- // packages/common/async/src/cleanup.ts
21
+ // src/cleanup.ts
22
22
  import { ComplexMap } from "@dxos/util";
23
23
  var combine = (...cleanupFns) => {
24
24
  return () => {
@@ -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,16 +63,34 @@ var SubscriptionSet = class {
64
63
  }
65
64
  };
66
65
 
67
- // packages/common/async/src/debounce.ts
68
- var debounce = (cb, wait = 100) => {
66
+ // src/debounce.ts
67
+ var debounce = (cb, delay = 100) => {
69
68
  let t;
70
69
  return (...args) => {
71
70
  clearTimeout(t);
72
- t = setTimeout(() => cb(...args), wait);
71
+ t = setTimeout(() => cb(...args), delay);
72
+ };
73
+ };
74
+ var throttle = (cb, delay = 100) => {
75
+ let lastCall = 0;
76
+ return (...args) => {
77
+ const now = Date.now();
78
+ if (now - lastCall >= delay) {
79
+ cb(...args);
80
+ lastCall = now;
81
+ }
82
+ };
83
+ };
84
+ var debounceAndThrottle = (cb, delay = 100) => {
85
+ const debounced = debounce(cb, delay);
86
+ const throttled = throttle(cb, delay);
87
+ return (...args) => {
88
+ debounced(...args);
89
+ throttled(...args);
73
90
  };
74
91
  };
75
92
 
76
- // packages/common/async/src/errors.ts
93
+ // src/errors.ts
77
94
  var toError = (err) => err === void 0 || typeof err === "string" ? new Error(err) : err;
78
95
  var TimeoutError = class extends Error {
79
96
  constructor(timeout2, label) {
@@ -88,7 +105,7 @@ var observableError = (observable, err) => {
88
105
  }
89
106
  };
90
107
 
91
- // packages/common/async/src/timeout.ts
108
+ // src/timeout.ts
92
109
  import { ContextDisposedError } from "@dxos/context";
93
110
  var sleep = (ms) => {
94
111
  return new Promise((resolve) => {
@@ -104,6 +121,23 @@ var sleep = (ms) => {
104
121
  sleeper();
105
122
  });
106
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
+ };
107
141
  var asyncReturn = () => sleep(0);
108
142
  var asyncTimeout = async (promise, timeout2, err) => {
109
143
  let timeoutId;
@@ -114,7 +148,7 @@ var asyncTimeout = async (promise, timeout2, err) => {
114
148
  }, timeout2);
115
149
  unrefTimeout(timeoutId);
116
150
  });
117
- const conditionTimeout = typeof promise === "function" ? createPromiseFromCallback(promise) : promise;
151
+ const conditionTimeout = typeof promise === "function" ? promiseFromCallback(promise) : promise;
118
152
  return await Promise.race([
119
153
  conditionTimeout,
120
154
  timeoutPromise
@@ -127,25 +161,8 @@ var unrefTimeout = (timeoutId) => {
127
161
  timeoutId.unref();
128
162
  }
129
163
  };
130
- var sleepWithContext = (ctx, ms) => {
131
- const error = new ContextDisposedError();
132
- return new Promise((resolve, reject) => {
133
- if (ctx.disposed) {
134
- reject(error);
135
- return;
136
- }
137
- const timeout2 = setTimeout(() => {
138
- clearDispose();
139
- resolve();
140
- }, ms);
141
- const clearDispose = ctx.onDispose(() => {
142
- clearTimeout(timeout2);
143
- reject(error);
144
- });
145
- });
146
- };
147
164
 
148
- // packages/common/async/src/event-emitter.ts
165
+ // src/event-emitter.ts
149
166
  var onEvent = (eventEmitter, eventName, callback) => {
150
167
  eventEmitter.on(eventName, callback);
151
168
  return () => eventEmitter.off(eventName, callback);
@@ -168,15 +185,11 @@ var waitForEvent = (eventEmitter, eventName, test, timeout2, error) => {
168
185
  return timeout2 ? asyncTimeout(promise, timeout2, error ?? new Error()).finally(off) : promise.finally(off);
169
186
  };
170
187
 
171
- // packages/common/async/src/events.ts
188
+ // src/events.ts
172
189
  import { Context } from "@dxos/context";
173
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/common/async/src/events.ts";
190
+ var __dxlog_file = "/__w/dxos/dxos/packages/common/async/src/events.ts";
174
191
  var DO_NOT_ERROR_ON_ASYNC_CALLBACK = true;
175
192
  var Event = class _Event {
176
- constructor() {
177
- this._listeners = /* @__PURE__ */ new Set();
178
- this._effects = /* @__PURE__ */ new Set();
179
- }
180
193
  /**
181
194
  * Wrap objects that have on/off style event emitters.
182
195
  */
@@ -189,6 +202,8 @@ var Event = class _Event {
189
202
  });
190
203
  return event;
191
204
  }
205
+ _listeners = /* @__PURE__ */ new Set();
206
+ _effects = /* @__PURE__ */ new Set();
192
207
  /**
193
208
  * Emit an event.
194
209
  * In most cases should only be called by the class or entity containing the event.
@@ -432,6 +447,11 @@ var Event = class _Event {
432
447
  }
433
448
  };
434
449
  var EventListener = class {
450
+ ctx;
451
+ once;
452
+ weak;
453
+ callback;
454
+ _clearDispose;
435
455
  constructor(event, listener, ctx, once, weak) {
436
456
  this.ctx = ctx;
437
457
  this.once = once;
@@ -496,65 +516,13 @@ var weakListeners = () => {
496
516
  };
497
517
  };
498
518
 
499
- // packages/common/async/src/latch.ts
500
- import { invariant } from "@dxos/invariant";
501
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/common/async/src/latch.ts";
502
- var latch = ({ count = 1, timeout: timeout2 } = {}) => {
503
- invariant(count >= 0, void 0, {
504
- F: __dxlog_file2,
505
- L: 19,
506
- S: void 0,
507
- A: [
508
- "count >= 0",
509
- ""
510
- ]
511
- });
512
- let t;
513
- let doResolve;
514
- let doReject;
515
- const promise = new Promise((resolve, reject) => {
516
- doResolve = (value) => {
517
- clearTimeout(t);
518
- resolve(value);
519
- };
520
- doReject = (err) => {
521
- clearTimeout(t);
522
- reject(err);
523
- };
524
- });
525
- if (count === 0) {
526
- setTimeout(() => {
527
- doResolve(0);
528
- });
529
- } else {
530
- if (timeout2) {
531
- t = setTimeout(() => {
532
- doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
533
- }, timeout2);
534
- }
535
- }
536
- let i = 0;
537
- return [
538
- async () => await promise,
539
- () => {
540
- if (++i === count) {
541
- doResolve(i);
542
- }
543
- return i;
544
- },
545
- (err) => doReject(err)
546
- ];
547
- };
548
-
549
- // packages/common/async/src/mutex.ts
519
+ // src/mutex.ts
550
520
  import "@dxos/util";
551
521
  import { warnAfterTimeout } from "@dxos/debug";
552
522
  var Mutex = class {
553
- constructor() {
554
- this._queue = Promise.resolve();
555
- this._queueLength = 0;
556
- this._tag = null;
557
- }
523
+ _queue = Promise.resolve();
524
+ _queueLength = 0;
525
+ _tag = null;
558
526
  get tag() {
559
527
  return this._tag;
560
528
  }
@@ -600,6 +568,7 @@ var Mutex = class {
600
568
  }
601
569
  };
602
570
  var MutexGuard = class {
571
+ _release;
603
572
  constructor(_release) {
604
573
  this._release = _release;
605
574
  }
@@ -638,11 +607,13 @@ var synchronized = (target, propertyName, descriptor) => {
638
607
  });
639
608
  };
640
609
 
641
- // packages/common/async/src/observable.ts
610
+ // src/observable.ts
642
611
  import Observable from "zen-observable";
643
612
  import PushStream from "zen-push";
644
613
 
645
- // packages/common/async/src/trigger.ts
614
+ // src/trigger.ts
615
+ import { invariant } from "@dxos/invariant";
616
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/trigger.ts";
646
617
  var trigger = (timeout2) => {
647
618
  let callback;
648
619
  const promise = new Promise((resolve, reject) => {
@@ -665,6 +636,11 @@ var TriggerState = /* @__PURE__ */ function(TriggerState2) {
665
636
  return TriggerState2;
666
637
  }({});
667
638
  var Trigger = class {
639
+ _options;
640
+ _promise;
641
+ _resolve;
642
+ _reject;
643
+ _state;
668
644
  constructor(_options = {
669
645
  autoReset: false
670
646
  }) {
@@ -729,9 +705,59 @@ var Trigger = class {
729
705
  return this;
730
706
  }
731
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
+ };
732
754
 
733
- // packages/common/async/src/observable.ts
755
+ // src/observable.ts
734
756
  var MulticastObservable = class _MulticastObservable extends Observable {
757
+ _value;
758
+ _observers;
759
+ _observable;
760
+ _completed;
735
761
  constructor(subscriber, _value) {
736
762
  super((observer) => this._subscribe(observer)), this._value = _value, this._observers = /* @__PURE__ */ new Set(), this._completed = new Trigger(), this._handlers = {
737
763
  next: (value) => {
@@ -829,18 +855,18 @@ var MulticastObservable = class _MulticastObservable extends Observable {
829
855
  this._observers.delete(observer);
830
856
  };
831
857
  }
858
+ _handlers;
832
859
  };
833
860
  var EMPTY_OBSERVABLE = MulticastObservable.of(null);
834
861
 
835
- // packages/common/async/src/observable-value.ts
862
+ // src/observable-value.ts
836
863
  import { createSetDispatch } from "@dxos/util";
837
864
  var ObservableProvider = class {
838
- constructor() {
839
- this._handlers = /* @__PURE__ */ new Set();
840
- this._proxy = createSetDispatch({
841
- handlers: this._handlers
842
- });
843
- }
865
+ _handlers = /* @__PURE__ */ new Set();
866
+ _proxy = createSetDispatch({
867
+ handlers: this._handlers
868
+ });
869
+ _value;
844
870
  /**
845
871
  * Proxy used to dispatch callbacks to each subscription.
846
872
  */
@@ -861,6 +887,8 @@ var ObservableProvider = class {
861
887
  }
862
888
  };
863
889
  var CancellableObservableProvider = class extends ObservableProvider {
890
+ _handleCancel;
891
+ _cancelled;
864
892
  constructor(_handleCancel) {
865
893
  super(), this._handleCancel = _handleCancel, this._cancelled = false;
866
894
  }
@@ -877,19 +905,19 @@ var CancellableObservableProvider = class extends ObservableProvider {
877
905
  }
878
906
  };
879
907
 
880
- // packages/common/async/src/persistent-lifecycle.ts
908
+ // src/persistent-lifecycle.ts
881
909
  import { LifecycleState, Resource, cancelWithContext } from "@dxos/context";
882
910
  import { warnAfterTimeout as warnAfterTimeout2 } from "@dxos/debug";
883
911
  import { log as log2 } from "@dxos/log";
884
912
 
885
- // packages/common/async/src/task-scheduling.ts
913
+ // src/task-scheduling.ts
886
914
  import { ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
887
915
  import { StackTrace as StackTrace2 } from "@dxos/debug";
888
916
 
889
- // packages/common/async/src/track-leaks.ts
917
+ // src/track-leaks.ts
890
918
  import { StackTrace } from "@dxos/debug";
891
919
  import { log } from "@dxos/log";
892
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/common/async/src/track-leaks.ts";
920
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/common/async/src/track-leaks.ts";
893
921
  var enabled = typeof process !== "undefined" && !!process.env.DX_TRACK_LEAKS;
894
922
  var openResources = /* @__PURE__ */ new Set();
895
923
  var handleSymbol = Symbol("checkLeaksHandle");
@@ -970,8 +998,13 @@ if (enabled) {
970
998
  global.dxDumpLeaks = dumpLeaks;
971
999
  }
972
1000
 
973
- // packages/common/async/src/task-scheduling.ts
1001
+ // src/task-scheduling.ts
974
1002
  var DeferredTask = class {
1003
+ _ctx;
1004
+ _callback;
1005
+ _scheduled;
1006
+ _currentTask;
1007
+ _nextTask;
975
1008
  constructor(_ctx, _callback) {
976
1009
  this._ctx = _ctx;
977
1010
  this._callback = _callback;
@@ -1096,22 +1129,26 @@ var scheduleExponentialBackoffTaskInterval = (ctx, task, initialInterval) => {
1096
1129
  });
1097
1130
  };
1098
1131
 
1099
- // packages/common/async/src/persistent-lifecycle.ts
1132
+ // src/persistent-lifecycle.ts
1100
1133
  function _ts_decorate(decorators, target, key, desc) {
1101
1134
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1102
1135
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1103
1136
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1104
1137
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1105
1138
  }
1106
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
1139
+ var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
1107
1140
  var INIT_RESTART_DELAY = 100;
1108
1141
  var DEFAULT_MAX_RESTART_DELAY = 5e3;
1109
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;
1110
1150
  constructor({ start, stop, onRestart, maxRestartDelay = DEFAULT_MAX_RESTART_DELAY }) {
1111
1151
  super();
1112
- this._currentState = void 0;
1113
- this._restartTask = void 0;
1114
- this._restartAfter = 0;
1115
1152
  this._start = start;
1116
1153
  this._stop = stop;
1117
1154
  this._onRestart = onRestart;
@@ -1207,9 +1244,9 @@ _ts_decorate([
1207
1244
  synchronized
1208
1245
  ], PersistentLifecycle.prototype, "scheduleRestart", null);
1209
1246
 
1210
- // packages/common/async/src/push-iterable.ts
1247
+ // src/push-iterable.ts
1211
1248
  import { invariant as invariant2 } from "@dxos/invariant";
1212
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/common/async/src/push-iterable.ts";
1249
+ var __dxlog_file5 = "/__w/dxos/dxos/packages/common/async/src/push-iterable.ts";
1213
1250
  var makePushIterable = () => {
1214
1251
  const buf = [];
1215
1252
  const trigger2 = new Trigger({
@@ -1273,21 +1310,7 @@ var makePushIterable = () => {
1273
1310
  };
1274
1311
  };
1275
1312
 
1276
- // packages/common/async/src/sink.ts
1277
- var sink = (emitter, event, count = 1) => {
1278
- const [getPromise, resolve] = trigger();
1279
- let counter = 0;
1280
- const listener = () => {
1281
- if (++counter === count) {
1282
- emitter.off(event, listener);
1283
- resolve();
1284
- }
1285
- };
1286
- emitter.on(event, listener);
1287
- return getPromise();
1288
- };
1289
-
1290
- // packages/common/async/src/stream-to-array.ts
1313
+ // src/stream-to-array.ts
1291
1314
  var streamToArray = (stream) => {
1292
1315
  let deferred;
1293
1316
  if (!stream.readable) {
@@ -1329,14 +1352,9 @@ var streamToArray = (stream) => {
1329
1352
  return deferred;
1330
1353
  };
1331
1354
 
1332
- // packages/common/async/src/test-stream.ts
1355
+ // src/test-stream.ts
1333
1356
  import { Duplex } from "@dxos/node-std/stream";
1334
1357
  var TestStream = class extends Duplex {
1335
- constructor() {
1336
- super(...arguments);
1337
- this._received = Buffer.alloc(0);
1338
- this._onWrite = new Event();
1339
- }
1340
1358
  static async assertConnectivity(stream1, stream2, { timeout: timeout2 = 200 } = {}) {
1341
1359
  stream1.push("ping");
1342
1360
  stream2.push("pong");
@@ -1349,6 +1367,8 @@ var TestStream = class extends Duplex {
1349
1367
  })
1350
1368
  ]);
1351
1369
  }
1370
+ _received = Buffer.alloc(0);
1371
+ _onWrite = new Event();
1352
1372
  _write(chunk, encoding, callback) {
1353
1373
  this._received = Buffer.concat([
1354
1374
  this._received,
@@ -1365,7 +1385,7 @@ var TestStream = class extends Duplex {
1365
1385
  }
1366
1386
  };
1367
1387
 
1368
- // packages/common/async/src/testing.ts
1388
+ // src/testing.ts
1369
1389
  var waitForCondition = ({ condition, timeout: timeout2 = 0, interval: interval2 = 10, error, breakOnError = false }) => {
1370
1390
  const stopTime = timeout2 ? Date.now() + timeout2 : 0;
1371
1391
  const trigger2 = new Trigger();
@@ -1390,9 +1410,46 @@ var waitForCondition = ({ condition, timeout: timeout2 = 0, interval: interval2
1390
1410
  timeout: timeout2
1391
1411
  });
1392
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
+ };
1393
1446
 
1394
- // packages/common/async/src/timer.ts
1447
+ // src/timer.ts
1395
1448
  var Timer = class {
1449
+ _callback;
1450
+ _state;
1451
+ _timer;
1452
+ _count;
1396
1453
  constructor(_callback) {
1397
1454
  this._callback = _callback;
1398
1455
  this._state = new Event();
@@ -1439,44 +1496,19 @@ var Timer = class {
1439
1496
  }
1440
1497
  };
1441
1498
 
1442
- // packages/common/async/src/until.ts
1443
- var until = (cb, timeout2) => {
1444
- return new Promise((resolve, reject) => {
1445
- const t = timeout2 && setTimeout(() => {
1446
- reject(new Error(`Timeout after ${t}ms`));
1447
- }, timeout2);
1448
- setTimeout(async () => {
1449
- try {
1450
- await cb((value) => {
1451
- t && clearTimeout(t);
1452
- resolve(value);
1453
- }, (error) => {
1454
- t && clearTimeout(t);
1455
- reject(error);
1456
- });
1457
- } catch (err) {
1458
- reject(err);
1459
- }
1460
- });
1461
- });
1462
- };
1463
- var untilPromise = (cb) => cb();
1464
- var untilError = (cb) => {
1465
- return new Promise((resolve, reject) => {
1466
- setTimeout(async () => {
1467
- try {
1468
- await cb();
1469
- reject(new Error("No error was thrown."));
1470
- } catch (err) {
1471
- resolve(err);
1472
- }
1473
- });
1474
- });
1475
- };
1476
-
1477
- // packages/common/async/src/update-scheduler.ts
1499
+ // src/update-scheduler.ts
1478
1500
  var TIME_PERIOD = 1e3;
1479
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;
1480
1512
  constructor(_ctx, _callback, _params = {}) {
1481
1513
  this._ctx = _ctx;
1482
1514
  this._callback = _callback;
@@ -1566,29 +1598,30 @@ export {
1566
1598
  UpdateScheduler,
1567
1599
  addEventListener,
1568
1600
  addListener,
1569
- asyncChain,
1570
1601
  asyncReturn,
1571
1602
  asyncTimeout,
1603
+ chain,
1572
1604
  combine,
1573
- createPromiseFromCallback,
1574
1605
  debounce,
1606
+ debounceAndThrottle,
1575
1607
  dumpLeaks,
1576
1608
  interval,
1577
1609
  latch,
1578
1610
  makePushIterable,
1579
1611
  observableError,
1580
1612
  onEvent,
1613
+ promiseFromCallback,
1581
1614
  runInContext,
1582
1615
  runInContextAsync,
1583
1616
  scheduleExponentialBackoffTaskInterval,
1584
1617
  scheduleMicroTask,
1585
1618
  scheduleTask,
1586
1619
  scheduleTaskInterval,
1587
- sink,
1588
1620
  sleep,
1589
1621
  sleepWithContext,
1590
1622
  streamToArray,
1591
1623
  synchronized,
1624
+ throttle,
1592
1625
  timeout,
1593
1626
  toError,
1594
1627
  trackLeaks,