@dxos/async 0.8.4-main.f5c0578 → 0.8.4-main.fbb7a13

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.
@@ -1 +1 @@
1
- {"inputs":{"src/callback.ts":{"bytes":1595,"imports":[],"format":"esm"},"src/chain.ts":{"bytes":1619,"imports":[],"format":"esm"},"src/cleanup.ts":{"bytes":6540,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/debounce.ts":{"bytes":4306,"imports":[],"format":"esm"},"src/errors.ts":{"bytes":2911,"imports":[],"format":"esm"},"src/timeout.ts":{"bytes":8042,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"src/callback.ts","kind":"import-statement","original":"./callback"},{"path":"src/errors.ts","kind":"import-statement","original":"./errors"}],"format":"esm"},"src/event-emitter.ts":{"bytes":4155,"imports":[{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/events.ts":{"bytes":39504,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true}],"format":"esm"},"src/mutex.ts":{"bytes":12647,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"src/trigger.ts":{"bytes":14081,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/observable.ts":{"bytes":17950,"imports":[{"path":"zen-observable","kind":"import-statement","external":true},{"path":"zen-push","kind":"import-statement","external":true},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/observable-value.ts":{"bytes":6465,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/track-leaks.ts":{"bytes":8414,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/task-scheduling.ts":{"bytes":15492,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"src/track-leaks.ts","kind":"import-statement","original":"./track-leaks"},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/persistent-lifecycle.ts":{"bytes":12777,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/mutex.ts","kind":"import-statement","original":"./mutex"},{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/push-iterable.ts":{"bytes":5922,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/stream-to-array.ts":{"bytes":4935,"imports":[],"format":"esm"},"src/test-stream.ts":{"bytes":5038,"imports":[{"path":"@dxos/node-std/stream","kind":"import-statement","external":true},{"path":"src/events.ts","kind":"import-statement","original":"./events"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/testing.ts":{"bytes":8388,"imports":[{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/timer.ts":{"bytes":5937,"imports":[{"path":"src/events.ts","kind":"import-statement","original":"./events"}],"format":"esm"},"src/update-scheduler.ts":{"bytes":9812,"imports":[{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"}],"format":"esm"},"src/index.ts":{"bytes":2335,"imports":[{"path":"src/callback.ts","kind":"import-statement","original":"./callback"},{"path":"src/chain.ts","kind":"import-statement","original":"./chain"},{"path":"src/cleanup.ts","kind":"import-statement","original":"./cleanup"},{"path":"src/debounce.ts","kind":"import-statement","original":"./debounce"},{"path":"src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"src/event-emitter.ts","kind":"import-statement","original":"./event-emitter"},{"path":"src/events.ts","kind":"import-statement","original":"./events"},{"path":"src/mutex.ts","kind":"import-statement","original":"./mutex"},{"path":"src/observable.ts","kind":"import-statement","original":"./observable"},{"path":"src/observable-value.ts","kind":"import-statement","original":"./observable-value"},{"path":"src/persistent-lifecycle.ts","kind":"import-statement","original":"./persistent-lifecycle"},{"path":"src/push-iterable.ts","kind":"import-statement","original":"./push-iterable"},{"path":"src/stream-to-array.ts","kind":"import-statement","original":"./stream-to-array"},{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"},{"path":"src/test-stream.ts","kind":"import-statement","original":"./test-stream"},{"path":"src/testing.ts","kind":"import-statement","original":"./testing"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"},{"path":"src/timer.ts","kind":"import-statement","original":"./timer"},{"path":"src/track-leaks.ts","kind":"import-statement","original":"./track-leaks"},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"},{"path":"src/update-scheduler.ts","kind":"import-statement","original":"./update-scheduler"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":98484},"dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"zen-observable","kind":"import-statement","external":true},{"path":"zen-push","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/node-std/stream","kind":"import-statement","external":true}],"exports":["CancellableObservableProvider","DeferredTask","Event","MulticastObservable","Mutex","MutexGuard","Observable","ObservableProvider","PersistentLifecycle","PushStream","SubscriptionList","SubscriptionSet","TestStream","TimeoutError","Timer","Trigger","TriggerState","UpdateScheduler","addEventListener","addListener","asyncReturn","asyncTimeout","chain","combine","debounce","debounceAndThrottle","dumpLeaks","interval","latch","makePushIterable","observableError","onEvent","promiseFromCallback","runInContext","runInContextAsync","scheduleExponentialBackoffTaskInterval","scheduleMicroTask","scheduleTask","scheduleTaskInterval","sleep","sleepWithContext","streamToArray","synchronized","throttle","timeout","toError","trackLeaks","trackResource","trigger","unrefTimeout","until","untilError","untilPromise","waitForCondition","waitForEvent"],"entryPoint":"src/index.ts","inputs":{"src/callback.ts":{"bytesInOutput":185},"src/index.ts":{"bytesInOutput":0},"src/chain.ts":{"bytesInOutput":216},"src/cleanup.ts":{"bytesInOutput":1045},"src/debounce.ts":{"bytesInOutput":557},"src/errors.ts":{"bytesInOutput":476},"src/timeout.ts":{"bytesInOutput":1486},"src/event-emitter.ts":{"bytesInOutput":697},"src/events.ts":{"bytesInOutput":8727},"src/mutex.ts":{"bytesInOutput":2413},"src/observable.ts":{"bytesInOutput":3765},"src/trigger.ts":{"bytesInOutput":3029},"src/observable-value.ts":{"bytesInOutput":968},"src/persistent-lifecycle.ts":{"bytesInOutput":3536},"src/task-scheduling.ts":{"bytesInOutput":3215},"src/track-leaks.ts":{"bytesInOutput":2136},"src/push-iterable.ts":{"bytesInOutput":1389},"src/stream-to-array.ts":{"bytesInOutput":967},"src/test-stream.ts":{"bytesInOutput":915},"src/testing.ts":{"bytesInOutput":1419},"src/timer.ts":{"bytesInOutput":1099},"src/update-scheduler.ts":{"bytesInOutput":2015}},"bytes":41742}}}
1
+ {"inputs":{"src/callback.ts":{"bytes":1595,"imports":[],"format":"esm"},"src/chain.ts":{"bytes":1619,"imports":[],"format":"esm"},"src/cleanup.ts":{"bytes":6635,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/debounce.ts":{"bytes":8209,"imports":[],"format":"esm"},"src/errors.ts":{"bytes":2911,"imports":[],"format":"esm"},"src/timeout.ts":{"bytes":8042,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"src/callback.ts","kind":"import-statement","original":"./callback"},{"path":"src/errors.ts","kind":"import-statement","original":"./errors"}],"format":"esm"},"src/event-emitter.ts":{"bytes":4155,"imports":[{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/events.ts":{"bytes":39464,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true}],"format":"esm"},"src/mutex.ts":{"bytes":12647,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"src/trigger.ts":{"bytes":14052,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/observable.ts":{"bytes":17824,"imports":[{"path":"zen-observable","kind":"import-statement","external":true},{"path":"zen-push","kind":"import-statement","external":true},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/observable-value.ts":{"bytes":6436,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/track-leaks.ts":{"bytes":8414,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/task-scheduling.ts":{"bytes":23288,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"src/track-leaks.ts","kind":"import-statement","original":"./track-leaks"},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/persistent-lifecycle.ts":{"bytes":12773,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/mutex.ts","kind":"import-statement","original":"./mutex"},{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/push-iterable.ts":{"bytes":5922,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/stream-to-array.ts":{"bytes":4935,"imports":[],"format":"esm"},"src/test-stream.ts":{"bytes":5038,"imports":[{"path":"@dxos/node-std/stream","kind":"import-statement","external":true},{"path":"src/events.ts","kind":"import-statement","original":"./events"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/testing.ts":{"bytes":8388,"imports":[{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/timer.ts":{"bytes":5879,"imports":[{"path":"src/events.ts","kind":"import-statement","original":"./events"}],"format":"esm"},"src/update-scheduler.ts":{"bytes":9706,"imports":[{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"}],"format":"esm"},"src/index.ts":{"bytes":2335,"imports":[{"path":"src/callback.ts","kind":"import-statement","original":"./callback"},{"path":"src/chain.ts","kind":"import-statement","original":"./chain"},{"path":"src/cleanup.ts","kind":"import-statement","original":"./cleanup"},{"path":"src/debounce.ts","kind":"import-statement","original":"./debounce"},{"path":"src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"src/event-emitter.ts","kind":"import-statement","original":"./event-emitter"},{"path":"src/events.ts","kind":"import-statement","original":"./events"},{"path":"src/mutex.ts","kind":"import-statement","original":"./mutex"},{"path":"src/observable.ts","kind":"import-statement","original":"./observable"},{"path":"src/observable-value.ts","kind":"import-statement","original":"./observable-value"},{"path":"src/persistent-lifecycle.ts","kind":"import-statement","original":"./persistent-lifecycle"},{"path":"src/push-iterable.ts","kind":"import-statement","original":"./push-iterable"},{"path":"src/stream-to-array.ts","kind":"import-statement","original":"./stream-to-array"},{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"},{"path":"src/test-stream.ts","kind":"import-statement","original":"./test-stream"},{"path":"src/testing.ts","kind":"import-statement","original":"./testing"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"},{"path":"src/timer.ts","kind":"import-statement","original":"./timer"},{"path":"src/track-leaks.ts","kind":"import-statement","original":"./track-leaks"},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"},{"path":"src/update-scheduler.ts","kind":"import-statement","original":"./update-scheduler"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":103799},"dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"zen-observable","kind":"import-statement","external":true},{"path":"zen-push","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/node-std/stream","kind":"import-statement","external":true}],"exports":["AsyncTask","CancellableObservableProvider","DeferredTask","Event","MulticastObservable","Mutex","MutexGuard","Observable","ObservableProvider","PersistentLifecycle","PushStream","SubscriptionList","SubscriptionSet","TestStream","TimeoutError","Timer","Trigger","TriggerState","UpdateScheduler","addEventListener","addListener","asyncReturn","asyncTimeout","chain","combine","debounce","debounceAndThrottle","delay","dumpLeaks","interval","latch","makePushIterable","observableError","onEvent","promiseFromCallback","runInContext","runInContextAsync","scheduleExponentialBackoffTaskInterval","scheduleMicroTask","scheduleTask","scheduleTaskInterval","sleep","sleepWithContext","streamToArray","synchronized","throttle","timeout","toError","trackLeaks","trackResource","trigger","unrefTimeout","until","untilError","untilPromise","waitForCondition","waitForEvent"],"entryPoint":"src/index.ts","inputs":{"src/callback.ts":{"bytesInOutput":185},"src/index.ts":{"bytesInOutput":0},"src/chain.ts":{"bytesInOutput":216},"src/cleanup.ts":{"bytesInOutput":1045},"src/debounce.ts":{"bytesInOutput":1032},"src/errors.ts":{"bytesInOutput":476},"src/timeout.ts":{"bytesInOutput":1486},"src/event-emitter.ts":{"bytesInOutput":697},"src/events.ts":{"bytesInOutput":8703},"src/mutex.ts":{"bytesInOutput":2413},"src/observable.ts":{"bytesInOutput":3691},"src/trigger.ts":{"bytesInOutput":3014},"src/observable-value.ts":{"bytesInOutput":951},"src/persistent-lifecycle.ts":{"bytesInOutput":3536},"src/task-scheduling.ts":{"bytesInOutput":4915},"src/track-leaks.ts":{"bytesInOutput":2136},"src/push-iterable.ts":{"bytesInOutput":1389},"src/stream-to-array.ts":{"bytesInOutput":967},"src/test-stream.ts":{"bytesInOutput":915},"src/testing.ts":{"bytesInOutput":1419},"src/timer.ts":{"bytesInOutput":1065},"src/update-scheduler.ts":{"bytesInOutput":1952}},"bytes":43712}}}
@@ -66,29 +66,55 @@ var SubscriptionSet = class {
66
66
  };
67
67
 
68
68
  // src/debounce.ts
69
- var debounce = (cb, delay = 100) => {
69
+ var delay = (cb, delay2 = 100) => {
70
+ let pending = false;
71
+ return (...args) => {
72
+ if (pending) {
73
+ return;
74
+ }
75
+ pending = true;
76
+ setTimeout(() => {
77
+ try {
78
+ cb(...args);
79
+ } finally {
80
+ pending = false;
81
+ }
82
+ }, delay2);
83
+ };
84
+ };
85
+ var debounce = (cb, delay2 = 100) => {
70
86
  let t;
71
87
  return (...args) => {
72
88
  clearTimeout(t);
73
- t = setTimeout(() => cb(...args), delay);
89
+ t = setTimeout(() => cb(...args), delay2);
74
90
  };
75
91
  };
76
- var throttle = (cb, delay = 100) => {
92
+ var throttle = (cb, delay2 = 100) => {
77
93
  let lastCall = 0;
78
94
  return (...args) => {
79
95
  const now = Date.now();
80
- if (now - lastCall >= delay) {
96
+ if (now - lastCall >= delay2) {
81
97
  cb(...args);
82
98
  lastCall = now;
83
99
  }
84
100
  };
85
101
  };
86
- var debounceAndThrottle = (cb, delay = 100) => {
87
- const debounced = debounce(cb, delay);
88
- const throttled = throttle(cb, delay);
102
+ var debounceAndThrottle = (cb, delay2 = 100) => {
103
+ let timeout2;
104
+ let lastCall = 0;
89
105
  return (...args) => {
90
- debounced(...args);
91
- throttled(...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
+ }
92
118
  };
93
119
  };
94
120
 
@@ -453,12 +479,11 @@ var EventListener = class {
453
479
  once;
454
480
  weak;
455
481
  callback;
456
- _clearDispose;
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
  });
@@ -631,23 +656,22 @@ var trigger = (timeout2) => {
631
656
  resolver
632
657
  ];
633
658
  };
634
- var TriggerState = /* @__PURE__ */ function(TriggerState2) {
659
+ var TriggerState = /* @__PURE__ */ (function(TriggerState2) {
635
660
  TriggerState2["WAITING"] = "WAITING";
636
661
  TriggerState2["RESOLVED"] = "RESOLVED";
637
662
  TriggerState2["REJECTED"] = "REJECTED";
638
663
  return TriggerState2;
639
- }({});
664
+ })({});
640
665
  var Trigger = class {
641
666
  _options;
642
667
  _promise;
643
668
  _resolve;
644
669
  _reject;
645
- _state;
670
+ _state = "WAITING";
646
671
  constructor(_options = {
647
672
  autoReset: false
648
673
  }) {
649
674
  this._options = _options;
650
- this._state = "WAITING";
651
675
  this.reset();
652
676
  }
653
677
  get state() {
@@ -757,23 +781,11 @@ var latch = ({ count = 1, timeout: timeout2 } = {}) => {
757
781
  // src/observable.ts
758
782
  var MulticastObservable = class _MulticastObservable extends Observable {
759
783
  _value;
760
- _observers;
784
+ _observers = /* @__PURE__ */ new Set();
761
785
  _observable;
762
- _completed;
786
+ _completed = new Trigger();
763
787
  constructor(subscriber, _value) {
764
- super((observer) => this._subscribe(observer)), this._value = _value, this._observers = /* @__PURE__ */ new Set(), this._completed = new Trigger(), this._handlers = {
765
- next: (value) => {
766
- this._value = value;
767
- this._observers.forEach((observer) => observer.next?.(value));
768
- },
769
- error: (err) => {
770
- this._observers.forEach((observer) => observer.error?.(err));
771
- },
772
- complete: () => {
773
- this._completed.wake();
774
- this._observers.forEach((observer) => observer.complete?.());
775
- }
776
- };
788
+ super((observer) => this._subscribe(observer)), this._value = _value;
777
789
  this._observable = typeof subscriber === "function" ? new Observable(subscriber) : subscriber;
778
790
  this._observable.subscribe(this._handlers);
779
791
  }
@@ -857,7 +869,19 @@ var MulticastObservable = class _MulticastObservable extends Observable {
857
869
  this._observers.delete(observer);
858
870
  };
859
871
  }
860
- _handlers;
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
+ };
861
885
  };
862
886
  var EMPTY_OBSERVABLE = MulticastObservable.of(null);
863
887
 
@@ -890,9 +914,9 @@ var ObservableProvider = class {
890
914
  };
891
915
  var CancellableObservableProvider = class extends ObservableProvider {
892
916
  _handleCancel;
893
- _cancelled;
917
+ _cancelled = false;
894
918
  constructor(_handleCancel) {
895
- super(), this._handleCancel = _handleCancel, this._cancelled = false;
919
+ super(), this._handleCancel = _handleCancel;
896
920
  }
897
921
  get cancelled() {
898
922
  return this._cancelled;
@@ -1004,15 +1028,12 @@ if (enabled) {
1004
1028
  var DeferredTask = class {
1005
1029
  _ctx;
1006
1030
  _callback;
1007
- _scheduled;
1008
- _currentTask;
1009
- _nextTask;
1031
+ _scheduled = false;
1032
+ _currentTask = null;
1033
+ _nextTask = new Trigger();
1010
1034
  constructor(_ctx, _callback) {
1011
1035
  this._ctx = _ctx;
1012
1036
  this._callback = _callback;
1013
- this._scheduled = false;
1014
- this._currentTask = null;
1015
- this._nextTask = new Trigger();
1016
1037
  }
1017
1038
  get scheduled() {
1018
1039
  return this._scheduled;
@@ -1053,6 +1074,78 @@ var DeferredTask = class {
1053
1074
  await this._currentTask;
1054
1075
  }
1055
1076
  };
1077
+ var AsyncTask = class {
1078
+ #callback;
1079
+ #ctx = void 0;
1080
+ #scheduled = false;
1081
+ #currentTask = null;
1082
+ #nextTask = new Trigger();
1083
+ constructor(callback) {
1084
+ this.#callback = callback;
1085
+ }
1086
+ get scheduled() {
1087
+ return this.#scheduled;
1088
+ }
1089
+ /**
1090
+ * Context of the resource that owns the task.
1091
+ * When the context is disposed, the task is cancelled and cannot be scheduled again.
1092
+ */
1093
+ // TODO(dmaretskyi): We don't really need to pass ctx in here, since close will also signal dispose.
1094
+ open(ctx) {
1095
+ this.#ctx = ctx;
1096
+ }
1097
+ /**
1098
+ * Closes the task and waits for it to finish if it is running.
1099
+ */
1100
+ async close() {
1101
+ this.#ctx = void 0;
1102
+ await this.join();
1103
+ }
1104
+ [Symbol.asyncDispose]() {
1105
+ return this.close();
1106
+ }
1107
+ /**
1108
+ * Schedule the task to run asynchronously.
1109
+ */
1110
+ schedule() {
1111
+ if (!this.#ctx || this.#ctx.disposed) {
1112
+ throw new Error("AsyncTask not open");
1113
+ }
1114
+ if (this.#scheduled) {
1115
+ return;
1116
+ }
1117
+ scheduleTask(this.#ctx, async () => {
1118
+ await this.#currentTask;
1119
+ if (!this.#ctx || this.#ctx.disposed) {
1120
+ return;
1121
+ }
1122
+ this.#scheduled = false;
1123
+ const completionTrigger = this.#nextTask;
1124
+ this.#nextTask = new Trigger();
1125
+ this.#currentTask = runInContextAsync(this.#ctx, () => this.#callback()).then(() => {
1126
+ completionTrigger.wake();
1127
+ });
1128
+ });
1129
+ this.#scheduled = true;
1130
+ }
1131
+ /**
1132
+ * Schedule the task to run and wait for it to finish.
1133
+ */
1134
+ async runBlocking() {
1135
+ if (this.#ctx?.disposed) {
1136
+ throw new ContextDisposedError2();
1137
+ }
1138
+ this.schedule();
1139
+ await this.#nextTask.wait();
1140
+ }
1141
+ /**
1142
+ * Waits for the current task to finish if it is running.
1143
+ * Does not schedule a new task.
1144
+ */
1145
+ async join() {
1146
+ await this.#currentTask;
1147
+ }
1148
+ };
1056
1149
  var runInContext = (ctx, fn) => {
1057
1150
  try {
1058
1151
  fn();
@@ -1449,13 +1542,11 @@ var untilError = (cb) => {
1449
1542
  // src/timer.ts
1450
1543
  var Timer = class {
1451
1544
  _callback;
1452
- _state;
1545
+ _state = new Event();
1453
1546
  _timer;
1454
- _count;
1547
+ _count = 0;
1455
1548
  constructor(_callback) {
1456
1549
  this._callback = _callback;
1457
- this._state = new Event();
1458
- this._count = 0;
1459
1550
  }
1460
1551
  get state() {
1461
1552
  return this._state;
@@ -1508,16 +1599,13 @@ var UpdateScheduler = class {
1508
1599
  * Promise that resolves when the callback is done.
1509
1600
  * Never rejects.
1510
1601
  */
1511
- _promise;
1512
- _scheduled;
1513
- _lastUpdateTime;
1602
+ _promise = null;
1603
+ _scheduled = false;
1604
+ _lastUpdateTime = -TIME_PERIOD;
1514
1605
  constructor(_ctx, _callback, _params = {}) {
1515
1606
  this._ctx = _ctx;
1516
1607
  this._callback = _callback;
1517
1608
  this._params = _params;
1518
- this._promise = null;
1519
- this._scheduled = false;
1520
- this._lastUpdateTime = -TIME_PERIOD;
1521
1609
  _ctx.onDispose(async () => {
1522
1610
  await this._promise;
1523
1611
  });
@@ -1530,13 +1618,13 @@ var UpdateScheduler = class {
1530
1618
  await this._promise;
1531
1619
  if (this._params.maxFrequency) {
1532
1620
  const now = performance.now();
1533
- const delay = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
1534
- if (delay > 0) {
1621
+ const delay2 = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
1622
+ if (delay2 > 0) {
1535
1623
  await new Promise((resolve) => {
1536
1624
  const timeoutId = setTimeout(() => {
1537
1625
  clearContext();
1538
1626
  resolve();
1539
- }, delay);
1627
+ }, delay2);
1540
1628
  const clearContext = this._ctx.onDispose(() => {
1541
1629
  clearTimeout(timeoutId);
1542
1630
  resolve();
@@ -1580,6 +1668,7 @@ var UpdateScheduler = class {
1580
1668
  }
1581
1669
  };
1582
1670
  export {
1671
+ AsyncTask,
1583
1672
  CancellableObservableProvider,
1584
1673
  DeferredTask,
1585
1674
  Event,
@@ -1606,6 +1695,7 @@ export {
1606
1695
  combine,
1607
1696
  debounce,
1608
1697
  debounceAndThrottle,
1698
+ delay,
1609
1699
  dumpLeaks,
1610
1700
  interval,
1611
1701
  latch,