@dxos/async 0.8.4-main.fd6878d → 0.8.4-staging.ac66bdf99f

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":6807,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/debounce.ts":{"bytes":9168,"imports":[],"format":"esm"},"src/errors.ts":{"bytes":2911,"imports":[],"format":"esm"},"src/timeout.ts":{"bytes":7598,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"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":6444,"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":23503,"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":104247},"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":1090},"src/debounce.ts":{"bytesInOutput":1032},"src/errors.ts":{"bytesInOutput":476},"src/timeout.ts":{"bytesInOutput":1479},"src/event-emitter.ts":{"bytesInOutput":697},"src/events.ts":{"bytesInOutput":8703},"src/mutex.ts":{"bytesInOutput":2429},"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":5099},"src/track-leaks.ts":{"bytesInOutput":2152},"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":43966}}}
@@ -24,7 +24,7 @@ var chain = (chain2) => async (elements) => {
24
24
  import { ComplexMap } from "@dxos/util";
25
25
  var combine = (...cleanupFns) => {
26
26
  return () => {
27
- cleanupFns.flat().forEach((cleanupFn) => cleanupFn());
27
+ cleanupFns.flat().filter((f) => typeof f === "function").forEach((cleanupFn) => cleanupFn());
28
28
  };
29
29
  };
30
30
  var timeout = (cb, ms = 0) => {
@@ -41,8 +41,8 @@ var addEventListener = (target, type, listener, options) => {
41
41
  };
42
42
  var SubscriptionList = class {
43
43
  _cleanups = [];
44
- add(cb) {
45
- this._cleanups.push(cb);
44
+ add(...cb) {
45
+ this._cleanups.push(...cb);
46
46
  return this;
47
47
  }
48
48
  clear() {
@@ -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
 
@@ -142,6 +168,9 @@ var sleepWithContext = (ctx, ms) => {
142
168
  };
143
169
  var asyncReturn = () => sleep(0);
144
170
  var asyncTimeout = async (promise, timeout2, err) => {
171
+ if (typeof promise === "function") {
172
+ throw new Error("First argument must be a promise.");
173
+ }
145
174
  let timeoutId;
146
175
  const throwable = err === void 0 || typeof err === "string" ? new TimeoutError(timeout2, err) : err;
147
176
  const timeoutPromise = new Promise((resolve, reject) => {
@@ -150,9 +179,8 @@ var asyncTimeout = async (promise, timeout2, err) => {
150
179
  }, timeout2);
151
180
  unrefTimeout(timeoutId);
152
181
  });
153
- const conditionTimeout = typeof promise === "function" ? promiseFromCallback(promise) : promise;
154
182
  return await Promise.race([
155
- conditionTimeout,
183
+ promise,
156
184
  timeoutPromise
157
185
  ]).finally(() => {
158
186
  clearTimeout(timeoutId);
@@ -453,12 +481,11 @@ var EventListener = class {
453
481
  once;
454
482
  weak;
455
483
  callback;
456
- _clearDispose;
484
+ _clearDispose = void 0;
457
485
  constructor(event, listener, ctx, once, weak) {
458
486
  this.ctx = ctx;
459
487
  this.once = once;
460
488
  this.weak = weak;
461
- this._clearDispose = void 0;
462
489
  this._clearDispose = ctx.onDispose(() => {
463
490
  event._removeListener(this);
464
491
  });
@@ -584,7 +611,7 @@ var MutexGuard = class {
584
611
  this.release();
585
612
  }
586
613
  };
587
- var classMutexSymbol = Symbol("class-mutex");
614
+ var classMutexSymbol = /* @__PURE__ */ Symbol("class-mutex");
588
615
  var FORCE_DISABLE_WARNING = false;
589
616
  var enableWarning = !FORCE_DISABLE_WARNING && globalThis.mochaExecutor;
590
617
  var synchronized = (target, propertyName, descriptor) => {
@@ -631,23 +658,22 @@ var trigger = (timeout2) => {
631
658
  resolver
632
659
  ];
633
660
  };
634
- var TriggerState = /* @__PURE__ */ function(TriggerState2) {
661
+ var TriggerState = /* @__PURE__ */ (function(TriggerState2) {
635
662
  TriggerState2["WAITING"] = "WAITING";
636
663
  TriggerState2["RESOLVED"] = "RESOLVED";
637
664
  TriggerState2["REJECTED"] = "REJECTED";
638
665
  return TriggerState2;
639
- }({});
666
+ })({});
640
667
  var Trigger = class {
641
668
  _options;
642
669
  _promise;
643
670
  _resolve;
644
671
  _reject;
645
- _state;
672
+ _state = "WAITING";
646
673
  constructor(_options = {
647
674
  autoReset: false
648
675
  }) {
649
676
  this._options = _options;
650
- this._state = "WAITING";
651
677
  this.reset();
652
678
  }
653
679
  get state() {
@@ -757,23 +783,11 @@ var latch = ({ count = 1, timeout: timeout2 } = {}) => {
757
783
  // src/observable.ts
758
784
  var MulticastObservable = class _MulticastObservable extends Observable {
759
785
  _value;
760
- _observers;
786
+ _observers = /* @__PURE__ */ new Set();
761
787
  _observable;
762
- _completed;
788
+ _completed = new Trigger();
763
789
  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
- };
790
+ super((observer) => this._subscribe(observer)), this._value = _value;
777
791
  this._observable = typeof subscriber === "function" ? new Observable(subscriber) : subscriber;
778
792
  this._observable.subscribe(this._handlers);
779
793
  }
@@ -857,7 +871,19 @@ var MulticastObservable = class _MulticastObservable extends Observable {
857
871
  this._observers.delete(observer);
858
872
  };
859
873
  }
860
- _handlers;
874
+ _handlers = {
875
+ next: (value) => {
876
+ this._value = value;
877
+ this._observers.forEach((observer) => observer.next?.(value));
878
+ },
879
+ error: (err) => {
880
+ this._observers.forEach((observer) => observer.error?.(err));
881
+ },
882
+ complete: () => {
883
+ this._completed.wake();
884
+ this._observers.forEach((observer) => observer.complete?.());
885
+ }
886
+ };
861
887
  };
862
888
  var EMPTY_OBSERVABLE = MulticastObservable.of(null);
863
889
 
@@ -890,9 +916,9 @@ var ObservableProvider = class {
890
916
  };
891
917
  var CancellableObservableProvider = class extends ObservableProvider {
892
918
  _handleCancel;
893
- _cancelled;
919
+ _cancelled = false;
894
920
  constructor(_handleCancel) {
895
- super(), this._handleCancel = _handleCancel, this._cancelled = false;
921
+ super(), this._handleCancel = _handleCancel;
896
922
  }
897
923
  get cancelled() {
898
924
  return this._cancelled;
@@ -913,7 +939,7 @@ import { warnAfterTimeout as warnAfterTimeout2 } from "@dxos/debug";
913
939
  import { log as log2 } from "@dxos/log";
914
940
 
915
941
  // src/task-scheduling.ts
916
- import { ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
942
+ import { Context as Context2, ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
917
943
  import { StackTrace as StackTrace2 } from "@dxos/debug";
918
944
 
919
945
  // src/track-leaks.ts
@@ -922,7 +948,7 @@ import { log } from "@dxos/log";
922
948
  var __dxlog_file3 = "/__w/dxos/dxos/packages/common/async/src/track-leaks.ts";
923
949
  var enabled = typeof process !== "undefined" && !!process.env.DX_TRACK_LEAKS;
924
950
  var openResources = /* @__PURE__ */ new Set();
925
- var handleSymbol = Symbol("checkLeaksHandle");
951
+ var handleSymbol = /* @__PURE__ */ Symbol("checkLeaksHandle");
926
952
  var trackResource = (resourceProvider) => {
927
953
  if (!enabled) {
928
954
  return () => {
@@ -1001,18 +1027,16 @@ if (enabled) {
1001
1027
  }
1002
1028
 
1003
1029
  // src/task-scheduling.ts
1030
+ var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/task-scheduling.ts";
1004
1031
  var DeferredTask = class {
1005
1032
  _ctx;
1006
1033
  _callback;
1007
- _scheduled;
1008
- _currentTask;
1009
- _nextTask;
1034
+ _scheduled = false;
1035
+ _currentTask = null;
1036
+ _nextTask = new Trigger();
1010
1037
  constructor(_ctx, _callback) {
1011
1038
  this._ctx = _ctx;
1012
1039
  this._callback = _callback;
1013
- this._scheduled = false;
1014
- this._currentTask = null;
1015
- this._nextTask = new Trigger();
1016
1040
  }
1017
1041
  get scheduled() {
1018
1042
  return this._scheduled;
@@ -1053,6 +1077,82 @@ var DeferredTask = class {
1053
1077
  await this._currentTask;
1054
1078
  }
1055
1079
  };
1080
+ var AsyncTask = class {
1081
+ #callback;
1082
+ #ctx = void 0;
1083
+ #scheduled = false;
1084
+ #currentTask = null;
1085
+ #nextTask = new Trigger();
1086
+ constructor(callback) {
1087
+ this.#callback = callback;
1088
+ }
1089
+ get scheduled() {
1090
+ return this.#scheduled;
1091
+ }
1092
+ /**
1093
+ * Context of the resource that owns the task.
1094
+ * When the context is disposed, the task is cancelled and cannot be scheduled again.
1095
+ */
1096
+ open() {
1097
+ this.#ctx = new Context2(void 0, {
1098
+ F: __dxlog_file4,
1099
+ L: 102
1100
+ });
1101
+ }
1102
+ /**
1103
+ * Closes the task and waits for it to finish if it is running.
1104
+ */
1105
+ async close() {
1106
+ await this.#ctx?.dispose();
1107
+ await this.join();
1108
+ this.#ctx = void 0;
1109
+ }
1110
+ [Symbol.asyncDispose]() {
1111
+ return this.close();
1112
+ }
1113
+ /**
1114
+ * Schedule the task to run asynchronously.
1115
+ */
1116
+ // TODO(dmaretskyi): Add scheduleAt. Where the earlier time will override the later one.
1117
+ schedule() {
1118
+ if (!this.#ctx || this.#ctx.disposed) {
1119
+ throw new Error("AsyncTask not open");
1120
+ }
1121
+ if (this.#scheduled) {
1122
+ return;
1123
+ }
1124
+ scheduleTask(this.#ctx, async () => {
1125
+ await this.#currentTask;
1126
+ if (!this.#ctx || this.#ctx.disposed) {
1127
+ return;
1128
+ }
1129
+ this.#scheduled = false;
1130
+ const completionTrigger = this.#nextTask;
1131
+ this.#nextTask = new Trigger();
1132
+ this.#currentTask = runInContextAsync(this.#ctx, () => this.#callback()).then(() => {
1133
+ completionTrigger.wake();
1134
+ });
1135
+ });
1136
+ this.#scheduled = true;
1137
+ }
1138
+ /**
1139
+ * Schedule the task to run and wait for it to finish.
1140
+ */
1141
+ async runBlocking() {
1142
+ if (this.#ctx?.disposed) {
1143
+ throw new ContextDisposedError2();
1144
+ }
1145
+ this.schedule();
1146
+ await this.#nextTask.wait();
1147
+ }
1148
+ /**
1149
+ * Waits for the current task to finish if it is running.
1150
+ * Does not schedule a new task.
1151
+ */
1152
+ async join() {
1153
+ await this.#currentTask;
1154
+ }
1155
+ };
1056
1156
  var runInContext = (ctx, fn) => {
1057
1157
  try {
1058
1158
  fn();
@@ -1138,7 +1238,7 @@ function _ts_decorate(decorators, target, key, desc) {
1138
1238
  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;
1139
1239
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1140
1240
  }
1141
- var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
1241
+ var __dxlog_file5 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
1142
1242
  var INIT_RESTART_DELAY = 100;
1143
1243
  var DEFAULT_MAX_RESTART_DELAY = 5e3;
1144
1244
  var PersistentLifecycle = class extends Resource {
@@ -1167,7 +1267,7 @@ var PersistentLifecycle = class extends Resource {
1167
1267
  log2.warn("Restart failed", {
1168
1268
  err
1169
1269
  }, {
1170
- F: __dxlog_file4,
1270
+ F: __dxlog_file5,
1171
1271
  L: 72,
1172
1272
  S: this,
1173
1273
  C: (f, a) => f(...a)
@@ -1179,7 +1279,7 @@ var PersistentLifecycle = class extends Resource {
1179
1279
  log2.warn("Start failed", {
1180
1280
  err
1181
1281
  }, {
1182
- F: __dxlog_file4,
1282
+ F: __dxlog_file5,
1183
1283
  L: 78,
1184
1284
  S: this,
1185
1285
  C: (f, a) => f(...a)
@@ -1197,7 +1297,7 @@ var PersistentLifecycle = class extends Resource {
1197
1297
  log2(`restarting in ${this._restartAfter}ms`, {
1198
1298
  state: this._lifecycleState
1199
1299
  }, {
1200
- F: __dxlog_file4,
1300
+ F: __dxlog_file5,
1201
1301
  L: 91,
1202
1302
  S: this,
1203
1303
  C: (f, a) => f(...a)
@@ -1220,7 +1320,7 @@ var PersistentLifecycle = class extends Resource {
1220
1320
  await this._stop(this._currentState);
1221
1321
  } catch (err) {
1222
1322
  log2.catch(err, void 0, {
1223
- F: __dxlog_file4,
1323
+ F: __dxlog_file5,
1224
1324
  L: 113,
1225
1325
  S: this,
1226
1326
  C: (f, a) => f(...a)
@@ -1248,7 +1348,7 @@ _ts_decorate([
1248
1348
 
1249
1349
  // src/push-iterable.ts
1250
1350
  import { invariant as invariant2 } from "@dxos/invariant";
1251
- var __dxlog_file5 = "/__w/dxos/dxos/packages/common/async/src/push-iterable.ts";
1351
+ var __dxlog_file6 = "/__w/dxos/dxos/packages/common/async/src/push-iterable.ts";
1252
1352
  var makePushIterable = () => {
1253
1353
  const buf = [];
1254
1354
  const trigger2 = new Trigger({
@@ -1263,7 +1363,7 @@ var makePushIterable = () => {
1263
1363
  }
1264
1364
  const item = buf.shift();
1265
1365
  invariant2(item, void 0, {
1266
- F: __dxlog_file5,
1366
+ F: __dxlog_file6,
1267
1367
  L: 42,
1268
1368
  S: this,
1269
1369
  A: [
@@ -1449,13 +1549,11 @@ var untilError = (cb) => {
1449
1549
  // src/timer.ts
1450
1550
  var Timer = class {
1451
1551
  _callback;
1452
- _state;
1552
+ _state = new Event();
1453
1553
  _timer;
1454
- _count;
1554
+ _count = 0;
1455
1555
  constructor(_callback) {
1456
1556
  this._callback = _callback;
1457
- this._state = new Event();
1458
- this._count = 0;
1459
1557
  }
1460
1558
  get state() {
1461
1559
  return this._state;
@@ -1508,16 +1606,13 @@ var UpdateScheduler = class {
1508
1606
  * Promise that resolves when the callback is done.
1509
1607
  * Never rejects.
1510
1608
  */
1511
- _promise;
1512
- _scheduled;
1513
- _lastUpdateTime;
1609
+ _promise = null;
1610
+ _scheduled = false;
1611
+ _lastUpdateTime = -TIME_PERIOD;
1514
1612
  constructor(_ctx, _callback, _params = {}) {
1515
1613
  this._ctx = _ctx;
1516
1614
  this._callback = _callback;
1517
1615
  this._params = _params;
1518
- this._promise = null;
1519
- this._scheduled = false;
1520
- this._lastUpdateTime = -TIME_PERIOD;
1521
1616
  _ctx.onDispose(async () => {
1522
1617
  await this._promise;
1523
1618
  });
@@ -1530,13 +1625,13 @@ var UpdateScheduler = class {
1530
1625
  await this._promise;
1531
1626
  if (this._params.maxFrequency) {
1532
1627
  const now = performance.now();
1533
- const delay = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
1534
- if (delay > 0) {
1628
+ const delay2 = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
1629
+ if (delay2 > 0) {
1535
1630
  await new Promise((resolve) => {
1536
1631
  const timeoutId = setTimeout(() => {
1537
1632
  clearContext();
1538
1633
  resolve();
1539
- }, delay);
1634
+ }, delay2);
1540
1635
  const clearContext = this._ctx.onDispose(() => {
1541
1636
  clearTimeout(timeoutId);
1542
1637
  resolve();
@@ -1580,6 +1675,7 @@ var UpdateScheduler = class {
1580
1675
  }
1581
1676
  };
1582
1677
  export {
1678
+ AsyncTask,
1583
1679
  CancellableObservableProvider,
1584
1680
  DeferredTask,
1585
1681
  Event,
@@ -1606,6 +1702,7 @@ export {
1606
1702
  combine,
1607
1703
  debounce,
1608
1704
  debounceAndThrottle,
1705
+ delay,
1609
1706
  dumpLeaks,
1610
1707
  interval,
1611
1708
  latch,