@dxos/async 0.8.3-staging.0fa589b → 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,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
 
3
- // packages/common/async/src/callback.ts
4
- var createPromiseFromCallback = (run) => new Promise((resolve, reject) => {
3
+ // src/callback.ts
4
+ var promiseFromCallback = (run) => new Promise((resolve, reject) => {
5
5
  run((error, value) => {
6
6
  if (error) {
7
7
  reject(error);
@@ -11,16 +11,16 @@ var createPromiseFromCallback = (run) => new Promise((resolve, reject) => {
11
11
  });
12
12
  });
13
13
 
14
- // packages/common/async/src/chain.ts
15
- var asyncChain = (chain) => async (elements) => {
14
+ // src/chain.ts
15
+ var chain = (chain2) => async (elements) => {
16
16
  let result = await elements;
17
- for (const part of chain) {
17
+ for (const part of chain2) {
18
18
  result = await Promise.all(result.map(async (element) => await part(element)));
19
19
  }
20
20
  return result;
21
21
  };
22
22
 
23
- // packages/common/async/src/cleanup.ts
23
+ // src/cleanup.ts
24
24
  import { ComplexMap } from "@dxos/util";
25
25
  var combine = (...cleanupFns) => {
26
26
  return () => {
@@ -35,14 +35,12 @@ var interval = (cb, ms) => {
35
35
  const t = setInterval(cb, ms);
36
36
  return () => clearInterval(t);
37
37
  };
38
- function addEventListener(target, type, listener, options) {
38
+ var addEventListener = (target, type, listener, options) => {
39
39
  target.addEventListener(type, listener, options);
40
40
  return () => target.removeEventListener(type, listener, options);
41
- }
41
+ };
42
42
  var SubscriptionList = class {
43
- constructor() {
44
- this._cleanups = [];
45
- }
43
+ _cleanups = [];
46
44
  add(cb) {
47
45
  this._cleanups.push(cb);
48
46
  return this;
@@ -53,6 +51,7 @@ var SubscriptionList = class {
53
51
  }
54
52
  };
55
53
  var SubscriptionSet = class {
54
+ _cleanupMap;
56
55
  constructor(keyProjection) {
57
56
  this._cleanupMap = new ComplexMap(keyProjection);
58
57
  }
@@ -66,16 +65,34 @@ var SubscriptionSet = class {
66
65
  }
67
66
  };
68
67
 
69
- // packages/common/async/src/debounce.ts
70
- var debounce = (cb, wait = 100) => {
68
+ // src/debounce.ts
69
+ var debounce = (cb, delay = 100) => {
71
70
  let t;
72
71
  return (...args) => {
73
72
  clearTimeout(t);
74
- t = setTimeout(() => cb(...args), wait);
73
+ t = setTimeout(() => cb(...args), delay);
74
+ };
75
+ };
76
+ var throttle = (cb, delay = 100) => {
77
+ let lastCall = 0;
78
+ return (...args) => {
79
+ const now = Date.now();
80
+ if (now - lastCall >= delay) {
81
+ cb(...args);
82
+ lastCall = now;
83
+ }
84
+ };
85
+ };
86
+ var debounceAndThrottle = (cb, delay = 100) => {
87
+ const debounced = debounce(cb, delay);
88
+ const throttled = throttle(cb, delay);
89
+ return (...args) => {
90
+ debounced(...args);
91
+ throttled(...args);
75
92
  };
76
93
  };
77
94
 
78
- // packages/common/async/src/errors.ts
95
+ // src/errors.ts
79
96
  var toError = (err) => err === void 0 || typeof err === "string" ? new Error(err) : err;
80
97
  var TimeoutError = class extends Error {
81
98
  constructor(timeout2, label) {
@@ -90,7 +107,7 @@ var observableError = (observable, err) => {
90
107
  }
91
108
  };
92
109
 
93
- // packages/common/async/src/timeout.ts
110
+ // src/timeout.ts
94
111
  import { ContextDisposedError } from "@dxos/context";
95
112
  var sleep = (ms) => {
96
113
  return new Promise((resolve) => {
@@ -106,6 +123,23 @@ var sleep = (ms) => {
106
123
  sleeper();
107
124
  });
108
125
  };
126
+ var sleepWithContext = (ctx, ms) => {
127
+ const error = new ContextDisposedError();
128
+ return new Promise((resolve, reject) => {
129
+ if (ctx.disposed) {
130
+ reject(error);
131
+ return;
132
+ }
133
+ const timeout2 = setTimeout(() => {
134
+ clearDispose();
135
+ resolve();
136
+ }, ms);
137
+ const clearDispose = ctx.onDispose(() => {
138
+ clearTimeout(timeout2);
139
+ reject(error);
140
+ });
141
+ });
142
+ };
109
143
  var asyncReturn = () => sleep(0);
110
144
  var asyncTimeout = async (promise, timeout2, err) => {
111
145
  let timeoutId;
@@ -116,7 +150,7 @@ var asyncTimeout = async (promise, timeout2, err) => {
116
150
  }, timeout2);
117
151
  unrefTimeout(timeoutId);
118
152
  });
119
- const conditionTimeout = typeof promise === "function" ? createPromiseFromCallback(promise) : promise;
153
+ const conditionTimeout = typeof promise === "function" ? promiseFromCallback(promise) : promise;
120
154
  return await Promise.race([
121
155
  conditionTimeout,
122
156
  timeoutPromise
@@ -129,25 +163,8 @@ var unrefTimeout = (timeoutId) => {
129
163
  timeoutId.unref();
130
164
  }
131
165
  };
132
- var sleepWithContext = (ctx, ms) => {
133
- const error = new ContextDisposedError();
134
- return new Promise((resolve, reject) => {
135
- if (ctx.disposed) {
136
- reject(error);
137
- return;
138
- }
139
- const timeout2 = setTimeout(() => {
140
- clearDispose();
141
- resolve();
142
- }, ms);
143
- const clearDispose = ctx.onDispose(() => {
144
- clearTimeout(timeout2);
145
- reject(error);
146
- });
147
- });
148
- };
149
166
 
150
- // packages/common/async/src/event-emitter.ts
167
+ // src/event-emitter.ts
151
168
  var onEvent = (eventEmitter, eventName, callback) => {
152
169
  eventEmitter.on(eventName, callback);
153
170
  return () => eventEmitter.off(eventName, callback);
@@ -170,15 +187,11 @@ var waitForEvent = (eventEmitter, eventName, test, timeout2, error) => {
170
187
  return timeout2 ? asyncTimeout(promise, timeout2, error ?? new Error()).finally(off) : promise.finally(off);
171
188
  };
172
189
 
173
- // packages/common/async/src/events.ts
190
+ // src/events.ts
174
191
  import { Context } from "@dxos/context";
175
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/common/async/src/events.ts";
192
+ var __dxlog_file = "/__w/dxos/dxos/packages/common/async/src/events.ts";
176
193
  var DO_NOT_ERROR_ON_ASYNC_CALLBACK = true;
177
194
  var Event = class _Event {
178
- constructor() {
179
- this._listeners = /* @__PURE__ */ new Set();
180
- this._effects = /* @__PURE__ */ new Set();
181
- }
182
195
  /**
183
196
  * Wrap objects that have on/off style event emitters.
184
197
  */
@@ -191,6 +204,8 @@ var Event = class _Event {
191
204
  });
192
205
  return event;
193
206
  }
207
+ _listeners = /* @__PURE__ */ new Set();
208
+ _effects = /* @__PURE__ */ new Set();
194
209
  /**
195
210
  * Emit an event.
196
211
  * In most cases should only be called by the class or entity containing the event.
@@ -434,6 +449,11 @@ var Event = class _Event {
434
449
  }
435
450
  };
436
451
  var EventListener = class {
452
+ ctx;
453
+ once;
454
+ weak;
455
+ callback;
456
+ _clearDispose;
437
457
  constructor(event, listener, ctx, once, weak) {
438
458
  this.ctx = ctx;
439
459
  this.once = once;
@@ -498,65 +518,13 @@ var weakListeners = () => {
498
518
  };
499
519
  };
500
520
 
501
- // packages/common/async/src/latch.ts
502
- import { invariant } from "@dxos/invariant";
503
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/common/async/src/latch.ts";
504
- var latch = ({ count = 1, timeout: timeout2 } = {}) => {
505
- invariant(count >= 0, void 0, {
506
- F: __dxlog_file2,
507
- L: 19,
508
- S: void 0,
509
- A: [
510
- "count >= 0",
511
- ""
512
- ]
513
- });
514
- let t;
515
- let doResolve;
516
- let doReject;
517
- const promise = new Promise((resolve, reject) => {
518
- doResolve = (value) => {
519
- clearTimeout(t);
520
- resolve(value);
521
- };
522
- doReject = (err) => {
523
- clearTimeout(t);
524
- reject(err);
525
- };
526
- });
527
- if (count === 0) {
528
- setTimeout(() => {
529
- doResolve(0);
530
- });
531
- } else {
532
- if (timeout2) {
533
- t = setTimeout(() => {
534
- doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
535
- }, timeout2);
536
- }
537
- }
538
- let i = 0;
539
- return [
540
- async () => await promise,
541
- () => {
542
- if (++i === count) {
543
- doResolve(i);
544
- }
545
- return i;
546
- },
547
- (err) => doReject(err)
548
- ];
549
- };
550
-
551
- // packages/common/async/src/mutex.ts
521
+ // src/mutex.ts
552
522
  import "@dxos/util";
553
523
  import { warnAfterTimeout } from "@dxos/debug";
554
524
  var Mutex = class {
555
- constructor() {
556
- this._queue = Promise.resolve();
557
- this._queueLength = 0;
558
- this._tag = null;
559
- }
525
+ _queue = Promise.resolve();
526
+ _queueLength = 0;
527
+ _tag = null;
560
528
  get tag() {
561
529
  return this._tag;
562
530
  }
@@ -602,6 +570,7 @@ var Mutex = class {
602
570
  }
603
571
  };
604
572
  var MutexGuard = class {
573
+ _release;
605
574
  constructor(_release) {
606
575
  this._release = _release;
607
576
  }
@@ -640,11 +609,13 @@ var synchronized = (target, propertyName, descriptor) => {
640
609
  });
641
610
  };
642
611
 
643
- // packages/common/async/src/observable.ts
612
+ // src/observable.ts
644
613
  import Observable from "zen-observable";
645
614
  import PushStream from "zen-push";
646
615
 
647
- // packages/common/async/src/trigger.ts
616
+ // src/trigger.ts
617
+ import { invariant } from "@dxos/invariant";
618
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/trigger.ts";
648
619
  var trigger = (timeout2) => {
649
620
  let callback;
650
621
  const promise = new Promise((resolve, reject) => {
@@ -667,6 +638,11 @@ var TriggerState = /* @__PURE__ */ function(TriggerState2) {
667
638
  return TriggerState2;
668
639
  }({});
669
640
  var Trigger = class {
641
+ _options;
642
+ _promise;
643
+ _resolve;
644
+ _reject;
645
+ _state;
670
646
  constructor(_options = {
671
647
  autoReset: false
672
648
  }) {
@@ -731,9 +707,59 @@ var Trigger = class {
731
707
  return this;
732
708
  }
733
709
  };
710
+ var latch = ({ count = 1, timeout: timeout2 } = {}) => {
711
+ invariant(count >= 0, void 0, {
712
+ F: __dxlog_file2,
713
+ L: 139,
714
+ S: void 0,
715
+ A: [
716
+ "count >= 0",
717
+ ""
718
+ ]
719
+ });
720
+ let t;
721
+ let doResolve;
722
+ let doReject;
723
+ const promise = new Promise((resolve, reject) => {
724
+ doResolve = (value) => {
725
+ clearTimeout(t);
726
+ resolve(value);
727
+ };
728
+ doReject = (err) => {
729
+ clearTimeout(t);
730
+ reject(err);
731
+ };
732
+ });
733
+ if (count === 0) {
734
+ setTimeout(() => {
735
+ doResolve(0);
736
+ });
737
+ } else {
738
+ if (timeout2) {
739
+ t = setTimeout(() => {
740
+ doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
741
+ }, timeout2);
742
+ }
743
+ }
744
+ let i = 0;
745
+ return [
746
+ async () => await promise,
747
+ () => {
748
+ if (++i === count) {
749
+ doResolve(i);
750
+ }
751
+ return i;
752
+ },
753
+ (err) => doReject(err)
754
+ ];
755
+ };
734
756
 
735
- // packages/common/async/src/observable.ts
757
+ // src/observable.ts
736
758
  var MulticastObservable = class _MulticastObservable extends Observable {
759
+ _value;
760
+ _observers;
761
+ _observable;
762
+ _completed;
737
763
  constructor(subscriber, _value) {
738
764
  super((observer) => this._subscribe(observer)), this._value = _value, this._observers = /* @__PURE__ */ new Set(), this._completed = new Trigger(), this._handlers = {
739
765
  next: (value) => {
@@ -831,18 +857,18 @@ var MulticastObservable = class _MulticastObservable extends Observable {
831
857
  this._observers.delete(observer);
832
858
  };
833
859
  }
860
+ _handlers;
834
861
  };
835
862
  var EMPTY_OBSERVABLE = MulticastObservable.of(null);
836
863
 
837
- // packages/common/async/src/observable-value.ts
864
+ // src/observable-value.ts
838
865
  import { createSetDispatch } from "@dxos/util";
839
866
  var ObservableProvider = class {
840
- constructor() {
841
- this._handlers = /* @__PURE__ */ new Set();
842
- this._proxy = createSetDispatch({
843
- handlers: this._handlers
844
- });
845
- }
867
+ _handlers = /* @__PURE__ */ new Set();
868
+ _proxy = createSetDispatch({
869
+ handlers: this._handlers
870
+ });
871
+ _value;
846
872
  /**
847
873
  * Proxy used to dispatch callbacks to each subscription.
848
874
  */
@@ -863,6 +889,8 @@ var ObservableProvider = class {
863
889
  }
864
890
  };
865
891
  var CancellableObservableProvider = class extends ObservableProvider {
892
+ _handleCancel;
893
+ _cancelled;
866
894
  constructor(_handleCancel) {
867
895
  super(), this._handleCancel = _handleCancel, this._cancelled = false;
868
896
  }
@@ -879,19 +907,19 @@ var CancellableObservableProvider = class extends ObservableProvider {
879
907
  }
880
908
  };
881
909
 
882
- // packages/common/async/src/persistent-lifecycle.ts
910
+ // src/persistent-lifecycle.ts
883
911
  import { LifecycleState, Resource, cancelWithContext } from "@dxos/context";
884
912
  import { warnAfterTimeout as warnAfterTimeout2 } from "@dxos/debug";
885
913
  import { log as log2 } from "@dxos/log";
886
914
 
887
- // packages/common/async/src/task-scheduling.ts
915
+ // src/task-scheduling.ts
888
916
  import { ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
889
917
  import { StackTrace as StackTrace2 } from "@dxos/debug";
890
918
 
891
- // packages/common/async/src/track-leaks.ts
919
+ // src/track-leaks.ts
892
920
  import { StackTrace } from "@dxos/debug";
893
921
  import { log } from "@dxos/log";
894
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/common/async/src/track-leaks.ts";
922
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/common/async/src/track-leaks.ts";
895
923
  var enabled = typeof process !== "undefined" && !!process.env.DX_TRACK_LEAKS;
896
924
  var openResources = /* @__PURE__ */ new Set();
897
925
  var handleSymbol = Symbol("checkLeaksHandle");
@@ -972,8 +1000,13 @@ if (enabled) {
972
1000
  global.dxDumpLeaks = dumpLeaks;
973
1001
  }
974
1002
 
975
- // packages/common/async/src/task-scheduling.ts
1003
+ // src/task-scheduling.ts
976
1004
  var DeferredTask = class {
1005
+ _ctx;
1006
+ _callback;
1007
+ _scheduled;
1008
+ _currentTask;
1009
+ _nextTask;
977
1010
  constructor(_ctx, _callback) {
978
1011
  this._ctx = _ctx;
979
1012
  this._callback = _callback;
@@ -1098,22 +1131,26 @@ var scheduleExponentialBackoffTaskInterval = (ctx, task, initialInterval) => {
1098
1131
  });
1099
1132
  };
1100
1133
 
1101
- // packages/common/async/src/persistent-lifecycle.ts
1134
+ // src/persistent-lifecycle.ts
1102
1135
  function _ts_decorate(decorators, target, key, desc) {
1103
1136
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1104
1137
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1105
1138
  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;
1106
1139
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1107
1140
  }
1108
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
1141
+ var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
1109
1142
  var INIT_RESTART_DELAY = 100;
1110
1143
  var DEFAULT_MAX_RESTART_DELAY = 5e3;
1111
1144
  var PersistentLifecycle = class extends Resource {
1145
+ _start;
1146
+ _stop;
1147
+ _onRestart;
1148
+ _maxRestartDelay;
1149
+ _currentState = void 0;
1150
+ _restartTask = void 0;
1151
+ _restartAfter = 0;
1112
1152
  constructor({ start, stop, onRestart, maxRestartDelay = DEFAULT_MAX_RESTART_DELAY }) {
1113
1153
  super();
1114
- this._currentState = void 0;
1115
- this._restartTask = void 0;
1116
- this._restartAfter = 0;
1117
1154
  this._start = start;
1118
1155
  this._stop = stop;
1119
1156
  this._onRestart = onRestart;
@@ -1209,9 +1246,9 @@ _ts_decorate([
1209
1246
  synchronized
1210
1247
  ], PersistentLifecycle.prototype, "scheduleRestart", null);
1211
1248
 
1212
- // packages/common/async/src/push-iterable.ts
1249
+ // src/push-iterable.ts
1213
1250
  import { invariant as invariant2 } from "@dxos/invariant";
1214
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/common/async/src/push-iterable.ts";
1251
+ var __dxlog_file5 = "/__w/dxos/dxos/packages/common/async/src/push-iterable.ts";
1215
1252
  var makePushIterable = () => {
1216
1253
  const buf = [];
1217
1254
  const trigger2 = new Trigger({
@@ -1275,21 +1312,7 @@ var makePushIterable = () => {
1275
1312
  };
1276
1313
  };
1277
1314
 
1278
- // packages/common/async/src/sink.ts
1279
- var sink = (emitter, event, count = 1) => {
1280
- const [getPromise, resolve] = trigger();
1281
- let counter = 0;
1282
- const listener = () => {
1283
- if (++counter === count) {
1284
- emitter.off(event, listener);
1285
- resolve();
1286
- }
1287
- };
1288
- emitter.on(event, listener);
1289
- return getPromise();
1290
- };
1291
-
1292
- // packages/common/async/src/stream-to-array.ts
1315
+ // src/stream-to-array.ts
1293
1316
  var streamToArray = (stream) => {
1294
1317
  let deferred;
1295
1318
  if (!stream.readable) {
@@ -1331,14 +1354,9 @@ var streamToArray = (stream) => {
1331
1354
  return deferred;
1332
1355
  };
1333
1356
 
1334
- // packages/common/async/src/test-stream.ts
1357
+ // src/test-stream.ts
1335
1358
  import { Duplex } from "node:stream";
1336
1359
  var TestStream = class extends Duplex {
1337
- constructor() {
1338
- super(...arguments);
1339
- this._received = Buffer.alloc(0);
1340
- this._onWrite = new Event();
1341
- }
1342
1360
  static async assertConnectivity(stream1, stream2, { timeout: timeout2 = 200 } = {}) {
1343
1361
  stream1.push("ping");
1344
1362
  stream2.push("pong");
@@ -1351,6 +1369,8 @@ var TestStream = class extends Duplex {
1351
1369
  })
1352
1370
  ]);
1353
1371
  }
1372
+ _received = Buffer.alloc(0);
1373
+ _onWrite = new Event();
1354
1374
  _write(chunk, encoding, callback) {
1355
1375
  this._received = Buffer.concat([
1356
1376
  this._received,
@@ -1367,7 +1387,7 @@ var TestStream = class extends Duplex {
1367
1387
  }
1368
1388
  };
1369
1389
 
1370
- // packages/common/async/src/testing.ts
1390
+ // src/testing.ts
1371
1391
  var waitForCondition = ({ condition, timeout: timeout2 = 0, interval: interval2 = 10, error, breakOnError = false }) => {
1372
1392
  const stopTime = timeout2 ? Date.now() + timeout2 : 0;
1373
1393
  const trigger2 = new Trigger();
@@ -1392,9 +1412,46 @@ var waitForCondition = ({ condition, timeout: timeout2 = 0, interval: interval2
1392
1412
  timeout: timeout2
1393
1413
  });
1394
1414
  };
1415
+ var until = (cb, timeout2) => {
1416
+ return new Promise((resolve, reject) => {
1417
+ const t = timeout2 && setTimeout(() => {
1418
+ reject(new Error(`Timeout after ${t}ms`));
1419
+ }, timeout2);
1420
+ setTimeout(async () => {
1421
+ try {
1422
+ await cb((value) => {
1423
+ t && clearTimeout(t);
1424
+ resolve(value);
1425
+ }, (error) => {
1426
+ t && clearTimeout(t);
1427
+ reject(error);
1428
+ });
1429
+ } catch (err) {
1430
+ reject(err);
1431
+ }
1432
+ });
1433
+ });
1434
+ };
1435
+ var untilPromise = (cb) => cb();
1436
+ var untilError = (cb) => {
1437
+ return new Promise((resolve, reject) => {
1438
+ setTimeout(async () => {
1439
+ try {
1440
+ await cb();
1441
+ reject(new Error("No error was thrown."));
1442
+ } catch (err) {
1443
+ resolve(err);
1444
+ }
1445
+ });
1446
+ });
1447
+ };
1395
1448
 
1396
- // packages/common/async/src/timer.ts
1449
+ // src/timer.ts
1397
1450
  var Timer = class {
1451
+ _callback;
1452
+ _state;
1453
+ _timer;
1454
+ _count;
1398
1455
  constructor(_callback) {
1399
1456
  this._callback = _callback;
1400
1457
  this._state = new Event();
@@ -1441,44 +1498,19 @@ var Timer = class {
1441
1498
  }
1442
1499
  };
1443
1500
 
1444
- // packages/common/async/src/until.ts
1445
- var until = (cb, timeout2) => {
1446
- return new Promise((resolve, reject) => {
1447
- const t = timeout2 && setTimeout(() => {
1448
- reject(new Error(`Timeout after ${t}ms`));
1449
- }, timeout2);
1450
- setTimeout(async () => {
1451
- try {
1452
- await cb((value) => {
1453
- t && clearTimeout(t);
1454
- resolve(value);
1455
- }, (error) => {
1456
- t && clearTimeout(t);
1457
- reject(error);
1458
- });
1459
- } catch (err) {
1460
- reject(err);
1461
- }
1462
- });
1463
- });
1464
- };
1465
- var untilPromise = (cb) => cb();
1466
- var untilError = (cb) => {
1467
- return new Promise((resolve, reject) => {
1468
- setTimeout(async () => {
1469
- try {
1470
- await cb();
1471
- reject(new Error("No error was thrown."));
1472
- } catch (err) {
1473
- resolve(err);
1474
- }
1475
- });
1476
- });
1477
- };
1478
-
1479
- // packages/common/async/src/update-scheduler.ts
1501
+ // src/update-scheduler.ts
1480
1502
  var TIME_PERIOD = 1e3;
1481
1503
  var UpdateScheduler = class {
1504
+ _ctx;
1505
+ _callback;
1506
+ _params;
1507
+ /**
1508
+ * Promise that resolves when the callback is done.
1509
+ * Never rejects.
1510
+ */
1511
+ _promise;
1512
+ _scheduled;
1513
+ _lastUpdateTime;
1482
1514
  constructor(_ctx, _callback, _params = {}) {
1483
1515
  this._ctx = _ctx;
1484
1516
  this._callback = _callback;
@@ -1568,29 +1600,30 @@ export {
1568
1600
  UpdateScheduler,
1569
1601
  addEventListener,
1570
1602
  addListener,
1571
- asyncChain,
1572
1603
  asyncReturn,
1573
1604
  asyncTimeout,
1605
+ chain,
1574
1606
  combine,
1575
- createPromiseFromCallback,
1576
1607
  debounce,
1608
+ debounceAndThrottle,
1577
1609
  dumpLeaks,
1578
1610
  interval,
1579
1611
  latch,
1580
1612
  makePushIterable,
1581
1613
  observableError,
1582
1614
  onEvent,
1615
+ promiseFromCallback,
1583
1616
  runInContext,
1584
1617
  runInContextAsync,
1585
1618
  scheduleExponentialBackoffTaskInterval,
1586
1619
  scheduleMicroTask,
1587
1620
  scheduleTask,
1588
1621
  scheduleTaskInterval,
1589
- sink,
1590
1622
  sleep,
1591
1623
  sleepWithContext,
1592
1624
  streamToArray,
1593
1625
  synchronized,
1626
+ throttle,
1594
1627
  timeout,
1595
1628
  toError,
1596
1629
  trackLeaks,