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

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 +224 -196
  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 +224 -196
  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 +31 -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 +82 -13
  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,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
 
3
3
  // src/callback.ts
4
- var createPromiseFromCallback = (run) => new Promise((resolve, reject) => {
4
+ var promiseFromCallback = (run) => new Promise((resolve, reject) => {
5
5
  run((error, value) => {
6
6
  if (error) {
7
7
  reject(error);
@@ -12,9 +12,9 @@ var createPromiseFromCallback = (run) => new Promise((resolve, reject) => {
12
12
  });
13
13
 
14
14
  // src/chain.ts
15
- var asyncChain = (chain) => async (elements) => {
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;
@@ -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,32 +65,56 @@ var SubscriptionSet = class {
66
65
  }
67
66
  };
68
67
 
69
- // src/throttle.ts
70
- var throttle = (cb, wait = 100) => {
71
- let lastCall = 0;
68
+ // src/debounce.ts
69
+ var delay = (cb, delay2 = 100) => {
70
+ let pending = false;
72
71
  return (...args) => {
73
- const now = Date.now();
74
- if (now - lastCall >= wait) {
75
- cb(...args);
76
- lastCall = now;
72
+ if (pending) {
73
+ return;
77
74
  }
75
+ pending = true;
76
+ setTimeout(() => {
77
+ try {
78
+ cb(...args);
79
+ } finally {
80
+ pending = false;
81
+ }
82
+ }, delay2);
78
83
  };
79
84
  };
80
-
81
- // src/debounce.ts
82
- var debounce = (cb, wait = 100) => {
85
+ var debounce = (cb, delay2 = 100) => {
83
86
  let t;
84
87
  return (...args) => {
85
88
  clearTimeout(t);
86
- t = setTimeout(() => cb(...args), wait);
89
+ t = setTimeout(() => cb(...args), delay2);
87
90
  };
88
91
  };
89
- var debounceAndThrottle = (cb, wait = 100) => {
90
- const debounced = debounce(cb, wait);
91
- const throttled = throttle(cb, wait);
92
+ var throttle = (cb, delay2 = 100) => {
93
+ let lastCall = 0;
92
94
  return (...args) => {
93
- debounced(...args);
94
- throttled(...args);
95
+ const now = Date.now();
96
+ if (now - lastCall >= delay2) {
97
+ cb(...args);
98
+ lastCall = now;
99
+ }
100
+ };
101
+ };
102
+ var debounceAndThrottle = (cb, delay2 = 100) => {
103
+ let timeout2;
104
+ let lastCall = 0;
105
+ return (...args) => {
106
+ const now = Date.now();
107
+ const delta = now - lastCall;
108
+ clearTimeout(timeout2);
109
+ if (delta >= delay2) {
110
+ cb(...args);
111
+ lastCall = now;
112
+ } else {
113
+ timeout2 = setTimeout(() => {
114
+ cb(...args);
115
+ lastCall = Date.now();
116
+ }, delay2 - delta);
117
+ }
95
118
  };
96
119
  };
97
120
 
@@ -126,6 +149,23 @@ var sleep = (ms) => {
126
149
  sleeper();
127
150
  });
128
151
  };
152
+ var sleepWithContext = (ctx, ms) => {
153
+ const error = new ContextDisposedError();
154
+ return new Promise((resolve, reject) => {
155
+ if (ctx.disposed) {
156
+ reject(error);
157
+ return;
158
+ }
159
+ const timeout2 = setTimeout(() => {
160
+ clearDispose();
161
+ resolve();
162
+ }, ms);
163
+ const clearDispose = ctx.onDispose(() => {
164
+ clearTimeout(timeout2);
165
+ reject(error);
166
+ });
167
+ });
168
+ };
129
169
  var asyncReturn = () => sleep(0);
130
170
  var asyncTimeout = async (promise, timeout2, err) => {
131
171
  let timeoutId;
@@ -136,7 +176,7 @@ var asyncTimeout = async (promise, timeout2, err) => {
136
176
  }, timeout2);
137
177
  unrefTimeout(timeoutId);
138
178
  });
139
- const conditionTimeout = typeof promise === "function" ? createPromiseFromCallback(promise) : promise;
179
+ const conditionTimeout = typeof promise === "function" ? promiseFromCallback(promise) : promise;
140
180
  return await Promise.race([
141
181
  conditionTimeout,
142
182
  timeoutPromise
@@ -149,23 +189,6 @@ var unrefTimeout = (timeoutId) => {
149
189
  timeoutId.unref();
150
190
  }
151
191
  };
152
- var sleepWithContext = (ctx, ms) => {
153
- const error = new ContextDisposedError();
154
- return new Promise((resolve, reject) => {
155
- if (ctx.disposed) {
156
- reject(error);
157
- return;
158
- }
159
- const timeout2 = setTimeout(() => {
160
- clearDispose();
161
- resolve();
162
- }, ms);
163
- const clearDispose = ctx.onDispose(() => {
164
- clearTimeout(timeout2);
165
- reject(error);
166
- });
167
- });
168
- };
169
192
 
170
193
  // src/event-emitter.ts
171
194
  var onEvent = (eventEmitter, eventName, callback) => {
@@ -195,10 +218,6 @@ import { Context } from "@dxos/context";
195
218
  var __dxlog_file = "/__w/dxos/dxos/packages/common/async/src/events.ts";
196
219
  var DO_NOT_ERROR_ON_ASYNC_CALLBACK = true;
197
220
  var Event = class _Event {
198
- constructor() {
199
- this._listeners = /* @__PURE__ */ new Set();
200
- this._effects = /* @__PURE__ */ new Set();
201
- }
202
221
  /**
203
222
  * Wrap objects that have on/off style event emitters.
204
223
  */
@@ -211,6 +230,8 @@ var Event = class _Event {
211
230
  });
212
231
  return event;
213
232
  }
233
+ _listeners = /* @__PURE__ */ new Set();
234
+ _effects = /* @__PURE__ */ new Set();
214
235
  /**
215
236
  * Emit an event.
216
237
  * In most cases should only be called by the class or entity containing the event.
@@ -454,11 +475,15 @@ var Event = class _Event {
454
475
  }
455
476
  };
456
477
  var EventListener = class {
478
+ ctx;
479
+ once;
480
+ weak;
481
+ callback;
482
+ _clearDispose = void 0;
457
483
  constructor(event, listener, ctx, once, weak) {
458
484
  this.ctx = ctx;
459
485
  this.once = once;
460
486
  this.weak = weak;
461
- this._clearDispose = void 0;
462
487
  this._clearDispose = ctx.onDispose(() => {
463
488
  event._removeListener(this);
464
489
  });
@@ -518,65 +543,13 @@ var weakListeners = () => {
518
543
  };
519
544
  };
520
545
 
521
- // src/latch.ts
522
- import { invariant } from "@dxos/invariant";
523
- var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/latch.ts";
524
- var latch = ({ count = 1, timeout: timeout2 } = {}) => {
525
- invariant(count >= 0, void 0, {
526
- F: __dxlog_file2,
527
- L: 19,
528
- S: void 0,
529
- A: [
530
- "count >= 0",
531
- ""
532
- ]
533
- });
534
- let t;
535
- let doResolve;
536
- let doReject;
537
- const promise = new Promise((resolve, reject) => {
538
- doResolve = (value) => {
539
- clearTimeout(t);
540
- resolve(value);
541
- };
542
- doReject = (err) => {
543
- clearTimeout(t);
544
- reject(err);
545
- };
546
- });
547
- if (count === 0) {
548
- setTimeout(() => {
549
- doResolve(0);
550
- });
551
- } else {
552
- if (timeout2) {
553
- t = setTimeout(() => {
554
- doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
555
- }, timeout2);
556
- }
557
- }
558
- let i = 0;
559
- return [
560
- async () => await promise,
561
- () => {
562
- if (++i === count) {
563
- doResolve(i);
564
- }
565
- return i;
566
- },
567
- (err) => doReject(err)
568
- ];
569
- };
570
-
571
546
  // src/mutex.ts
572
547
  import "@dxos/util";
573
548
  import { warnAfterTimeout } from "@dxos/debug";
574
549
  var Mutex = class {
575
- constructor() {
576
- this._queue = Promise.resolve();
577
- this._queueLength = 0;
578
- this._tag = null;
579
- }
550
+ _queue = Promise.resolve();
551
+ _queueLength = 0;
552
+ _tag = null;
580
553
  get tag() {
581
554
  return this._tag;
582
555
  }
@@ -622,6 +595,7 @@ var Mutex = class {
622
595
  }
623
596
  };
624
597
  var MutexGuard = class {
598
+ _release;
625
599
  constructor(_release) {
626
600
  this._release = _release;
627
601
  }
@@ -665,6 +639,8 @@ import Observable from "zen-observable";
665
639
  import PushStream from "zen-push";
666
640
 
667
641
  // src/trigger.ts
642
+ import { invariant } from "@dxos/invariant";
643
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/trigger.ts";
668
644
  var trigger = (timeout2) => {
669
645
  let callback;
670
646
  const promise = new Promise((resolve, reject) => {
@@ -680,18 +656,22 @@ var trigger = (timeout2) => {
680
656
  resolver
681
657
  ];
682
658
  };
683
- var TriggerState = /* @__PURE__ */ function(TriggerState2) {
659
+ var TriggerState = /* @__PURE__ */ (function(TriggerState2) {
684
660
  TriggerState2["WAITING"] = "WAITING";
685
661
  TriggerState2["RESOLVED"] = "RESOLVED";
686
662
  TriggerState2["REJECTED"] = "REJECTED";
687
663
  return TriggerState2;
688
- }({});
664
+ })({});
689
665
  var Trigger = class {
666
+ _options;
667
+ _promise;
668
+ _resolve;
669
+ _reject;
670
+ _state = "WAITING";
690
671
  constructor(_options = {
691
672
  autoReset: false
692
673
  }) {
693
674
  this._options = _options;
694
- this._state = "WAITING";
695
675
  this.reset();
696
676
  }
697
677
  get state() {
@@ -751,23 +731,61 @@ var Trigger = class {
751
731
  return this;
752
732
  }
753
733
  };
734
+ var latch = ({ count = 1, timeout: timeout2 } = {}) => {
735
+ invariant(count >= 0, void 0, {
736
+ F: __dxlog_file2,
737
+ L: 139,
738
+ S: void 0,
739
+ A: [
740
+ "count >= 0",
741
+ ""
742
+ ]
743
+ });
744
+ let t;
745
+ let doResolve;
746
+ let doReject;
747
+ const promise = new Promise((resolve, reject) => {
748
+ doResolve = (value) => {
749
+ clearTimeout(t);
750
+ resolve(value);
751
+ };
752
+ doReject = (err) => {
753
+ clearTimeout(t);
754
+ reject(err);
755
+ };
756
+ });
757
+ if (count === 0) {
758
+ setTimeout(() => {
759
+ doResolve(0);
760
+ });
761
+ } else {
762
+ if (timeout2) {
763
+ t = setTimeout(() => {
764
+ doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
765
+ }, timeout2);
766
+ }
767
+ }
768
+ let i = 0;
769
+ return [
770
+ async () => await promise,
771
+ () => {
772
+ if (++i === count) {
773
+ doResolve(i);
774
+ }
775
+ return i;
776
+ },
777
+ (err) => doReject(err)
778
+ ];
779
+ };
754
780
 
755
781
  // src/observable.ts
756
782
  var MulticastObservable = class _MulticastObservable extends Observable {
783
+ _value;
784
+ _observers = /* @__PURE__ */ new Set();
785
+ _observable;
786
+ _completed = new Trigger();
757
787
  constructor(subscriber, _value) {
758
- super((observer) => this._subscribe(observer)), this._value = _value, this._observers = /* @__PURE__ */ new Set(), this._completed = new Trigger(), this._handlers = {
759
- next: (value) => {
760
- this._value = value;
761
- this._observers.forEach((observer) => observer.next?.(value));
762
- },
763
- error: (err) => {
764
- this._observers.forEach((observer) => observer.error?.(err));
765
- },
766
- complete: () => {
767
- this._completed.wake();
768
- this._observers.forEach((observer) => observer.complete?.());
769
- }
770
- };
788
+ super((observer) => this._subscribe(observer)), this._value = _value;
771
789
  this._observable = typeof subscriber === "function" ? new Observable(subscriber) : subscriber;
772
790
  this._observable.subscribe(this._handlers);
773
791
  }
@@ -851,18 +869,30 @@ var MulticastObservable = class _MulticastObservable extends Observable {
851
869
  this._observers.delete(observer);
852
870
  };
853
871
  }
872
+ _handlers = {
873
+ next: (value) => {
874
+ this._value = value;
875
+ this._observers.forEach((observer) => observer.next?.(value));
876
+ },
877
+ error: (err) => {
878
+ this._observers.forEach((observer) => observer.error?.(err));
879
+ },
880
+ complete: () => {
881
+ this._completed.wake();
882
+ this._observers.forEach((observer) => observer.complete?.());
883
+ }
884
+ };
854
885
  };
855
886
  var EMPTY_OBSERVABLE = MulticastObservable.of(null);
856
887
 
857
888
  // src/observable-value.ts
858
889
  import { createSetDispatch } from "@dxos/util";
859
890
  var ObservableProvider = class {
860
- constructor() {
861
- this._handlers = /* @__PURE__ */ new Set();
862
- this._proxy = createSetDispatch({
863
- handlers: this._handlers
864
- });
865
- }
891
+ _handlers = /* @__PURE__ */ new Set();
892
+ _proxy = createSetDispatch({
893
+ handlers: this._handlers
894
+ });
895
+ _value;
866
896
  /**
867
897
  * Proxy used to dispatch callbacks to each subscription.
868
898
  */
@@ -883,8 +913,10 @@ var ObservableProvider = class {
883
913
  }
884
914
  };
885
915
  var CancellableObservableProvider = class extends ObservableProvider {
916
+ _handleCancel;
917
+ _cancelled = false;
886
918
  constructor(_handleCancel) {
887
- super(), this._handleCancel = _handleCancel, this._cancelled = false;
919
+ super(), this._handleCancel = _handleCancel;
888
920
  }
889
921
  get cancelled() {
890
922
  return this._cancelled;
@@ -994,12 +1026,14 @@ if (enabled) {
994
1026
 
995
1027
  // src/task-scheduling.ts
996
1028
  var DeferredTask = class {
1029
+ _ctx;
1030
+ _callback;
1031
+ _scheduled = false;
1032
+ _currentTask = null;
1033
+ _nextTask = new Trigger();
997
1034
  constructor(_ctx, _callback) {
998
1035
  this._ctx = _ctx;
999
1036
  this._callback = _callback;
1000
- this._scheduled = false;
1001
- this._currentTask = null;
1002
- this._nextTask = new Trigger();
1003
1037
  }
1004
1038
  get scheduled() {
1005
1039
  return this._scheduled;
@@ -1129,11 +1163,15 @@ var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecyc
1129
1163
  var INIT_RESTART_DELAY = 100;
1130
1164
  var DEFAULT_MAX_RESTART_DELAY = 5e3;
1131
1165
  var PersistentLifecycle = class extends Resource {
1166
+ _start;
1167
+ _stop;
1168
+ _onRestart;
1169
+ _maxRestartDelay;
1170
+ _currentState = void 0;
1171
+ _restartTask = void 0;
1172
+ _restartAfter = 0;
1132
1173
  constructor({ start, stop, onRestart, maxRestartDelay = DEFAULT_MAX_RESTART_DELAY }) {
1133
1174
  super();
1134
- this._currentState = void 0;
1135
- this._restartTask = void 0;
1136
- this._restartAfter = 0;
1137
1175
  this._start = start;
1138
1176
  this._stop = stop;
1139
1177
  this._onRestart = onRestart;
@@ -1295,20 +1333,6 @@ var makePushIterable = () => {
1295
1333
  };
1296
1334
  };
1297
1335
 
1298
- // src/sink.ts
1299
- var sink = (emitter, event, count = 1) => {
1300
- const [getPromise, resolve] = trigger();
1301
- let counter = 0;
1302
- const listener = () => {
1303
- if (++counter === count) {
1304
- emitter.off(event, listener);
1305
- resolve();
1306
- }
1307
- };
1308
- emitter.on(event, listener);
1309
- return getPromise();
1310
- };
1311
-
1312
1336
  // src/stream-to-array.ts
1313
1337
  var streamToArray = (stream) => {
1314
1338
  let deferred;
@@ -1354,11 +1378,6 @@ var streamToArray = (stream) => {
1354
1378
  // src/test-stream.ts
1355
1379
  import { Duplex } from "node:stream";
1356
1380
  var TestStream = class extends Duplex {
1357
- constructor() {
1358
- super(...arguments);
1359
- this._received = Buffer.alloc(0);
1360
- this._onWrite = new Event();
1361
- }
1362
1381
  static async assertConnectivity(stream1, stream2, { timeout: timeout2 = 200 } = {}) {
1363
1382
  stream1.push("ping");
1364
1383
  stream2.push("pong");
@@ -1371,6 +1390,8 @@ var TestStream = class extends Duplex {
1371
1390
  })
1372
1391
  ]);
1373
1392
  }
1393
+ _received = Buffer.alloc(0);
1394
+ _onWrite = new Event();
1374
1395
  _write(chunk, encoding, callback) {
1375
1396
  this._received = Buffer.concat([
1376
1397
  this._received,
@@ -1412,13 +1433,48 @@ var waitForCondition = ({ condition, timeout: timeout2 = 0, interval: interval2
1412
1433
  timeout: timeout2
1413
1434
  });
1414
1435
  };
1436
+ var until = (cb, timeout2) => {
1437
+ return new Promise((resolve, reject) => {
1438
+ const t = timeout2 && setTimeout(() => {
1439
+ reject(new Error(`Timeout after ${t}ms`));
1440
+ }, timeout2);
1441
+ setTimeout(async () => {
1442
+ try {
1443
+ await cb((value) => {
1444
+ t && clearTimeout(t);
1445
+ resolve(value);
1446
+ }, (error) => {
1447
+ t && clearTimeout(t);
1448
+ reject(error);
1449
+ });
1450
+ } catch (err) {
1451
+ reject(err);
1452
+ }
1453
+ });
1454
+ });
1455
+ };
1456
+ var untilPromise = (cb) => cb();
1457
+ var untilError = (cb) => {
1458
+ return new Promise((resolve, reject) => {
1459
+ setTimeout(async () => {
1460
+ try {
1461
+ await cb();
1462
+ reject(new Error("No error was thrown."));
1463
+ } catch (err) {
1464
+ resolve(err);
1465
+ }
1466
+ });
1467
+ });
1468
+ };
1415
1469
 
1416
1470
  // src/timer.ts
1417
1471
  var Timer = class {
1472
+ _callback;
1473
+ _state = new Event();
1474
+ _timer;
1475
+ _count = 0;
1418
1476
  constructor(_callback) {
1419
1477
  this._callback = _callback;
1420
- this._state = new Event();
1421
- this._count = 0;
1422
1478
  }
1423
1479
  get state() {
1424
1480
  return this._state;
@@ -1461,51 +1517,23 @@ var Timer = class {
1461
1517
  }
1462
1518
  };
1463
1519
 
1464
- // src/until.ts
1465
- var until = (cb, timeout2) => {
1466
- return new Promise((resolve, reject) => {
1467
- const t = timeout2 && setTimeout(() => {
1468
- reject(new Error(`Timeout after ${t}ms`));
1469
- }, timeout2);
1470
- setTimeout(async () => {
1471
- try {
1472
- await cb((value) => {
1473
- t && clearTimeout(t);
1474
- resolve(value);
1475
- }, (error) => {
1476
- t && clearTimeout(t);
1477
- reject(error);
1478
- });
1479
- } catch (err) {
1480
- reject(err);
1481
- }
1482
- });
1483
- });
1484
- };
1485
- var untilPromise = (cb) => cb();
1486
- var untilError = (cb) => {
1487
- return new Promise((resolve, reject) => {
1488
- setTimeout(async () => {
1489
- try {
1490
- await cb();
1491
- reject(new Error("No error was thrown."));
1492
- } catch (err) {
1493
- resolve(err);
1494
- }
1495
- });
1496
- });
1497
- };
1498
-
1499
1520
  // src/update-scheduler.ts
1500
1521
  var TIME_PERIOD = 1e3;
1501
1522
  var UpdateScheduler = class {
1523
+ _ctx;
1524
+ _callback;
1525
+ _params;
1526
+ /**
1527
+ * Promise that resolves when the callback is done.
1528
+ * Never rejects.
1529
+ */
1530
+ _promise = null;
1531
+ _scheduled = false;
1532
+ _lastUpdateTime = -TIME_PERIOD;
1502
1533
  constructor(_ctx, _callback, _params = {}) {
1503
1534
  this._ctx = _ctx;
1504
1535
  this._callback = _callback;
1505
1536
  this._params = _params;
1506
- this._promise = null;
1507
- this._scheduled = false;
1508
- this._lastUpdateTime = -TIME_PERIOD;
1509
1537
  _ctx.onDispose(async () => {
1510
1538
  await this._promise;
1511
1539
  });
@@ -1518,13 +1546,13 @@ var UpdateScheduler = class {
1518
1546
  await this._promise;
1519
1547
  if (this._params.maxFrequency) {
1520
1548
  const now = performance.now();
1521
- const delay = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
1522
- if (delay > 0) {
1549
+ const delay2 = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
1550
+ if (delay2 > 0) {
1523
1551
  await new Promise((resolve) => {
1524
1552
  const timeoutId = setTimeout(() => {
1525
1553
  clearContext();
1526
1554
  resolve();
1527
- }, delay);
1555
+ }, delay2);
1528
1556
  const clearContext = this._ctx.onDispose(() => {
1529
1557
  clearTimeout(timeoutId);
1530
1558
  resolve();
@@ -1588,26 +1616,26 @@ export {
1588
1616
  UpdateScheduler,
1589
1617
  addEventListener,
1590
1618
  addListener,
1591
- asyncChain,
1592
1619
  asyncReturn,
1593
1620
  asyncTimeout,
1621
+ chain,
1594
1622
  combine,
1595
- createPromiseFromCallback,
1596
1623
  debounce,
1597
1624
  debounceAndThrottle,
1625
+ delay,
1598
1626
  dumpLeaks,
1599
1627
  interval,
1600
1628
  latch,
1601
1629
  makePushIterable,
1602
1630
  observableError,
1603
1631
  onEvent,
1632
+ promiseFromCallback,
1604
1633
  runInContext,
1605
1634
  runInContextAsync,
1606
1635
  scheduleExponentialBackoffTaskInterval,
1607
1636
  scheduleMicroTask,
1608
1637
  scheduleTask,
1609
1638
  scheduleTaskInterval,
1610
- sink,
1611
1639
  sleep,
1612
1640
  sleepWithContext,
1613
1641
  streamToArray,