@dxos/async 0.8.4-main.b97322e → 0.8.4-main.bc674ce

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":98361},"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":1059},"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":8711},"src/mutex.ts":{"bytesInOutput":2444},"src/observable.ts":{"bytesInOutput":3699},"src/trigger.ts":{"bytesInOutput":2972},"src/observable-value.ts":{"bytesInOutput":967},"src/persistent-lifecycle.ts":{"bytesInOutput":3504},"src/task-scheduling.ts":{"bytesInOutput":3151},"src/track-leaks.ts":{"bytesInOutput":2136},"src/push-iterable.ts":{"bytesInOutput":1389},"src/stream-to-array.ts":{"bytesInOutput":967},"src/test-stream.ts":{"bytesInOutput":976},"src/testing.ts":{"bytesInOutput":1419},"src/timer.ts":{"bytesInOutput":1056},"src/update-scheduler.ts":{"bytesInOutput":1855}},"bytes":41409}}}
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}}}
@@ -40,9 +40,7 @@ var addEventListener = (target, 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
  }
@@ -67,29 +66,55 @@ var SubscriptionSet = class {
67
66
  };
68
67
 
69
68
  // src/debounce.ts
70
- 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) => {
71
86
  let t;
72
87
  return (...args) => {
73
88
  clearTimeout(t);
74
- t = setTimeout(() => cb(...args), delay);
89
+ t = setTimeout(() => cb(...args), delay2);
75
90
  };
76
91
  };
77
- var throttle = (cb, delay = 100) => {
92
+ var throttle = (cb, delay2 = 100) => {
78
93
  let lastCall = 0;
79
94
  return (...args) => {
80
95
  const now = Date.now();
81
- if (now - lastCall >= delay) {
96
+ if (now - lastCall >= delay2) {
82
97
  cb(...args);
83
98
  lastCall = now;
84
99
  }
85
100
  };
86
101
  };
87
- var debounceAndThrottle = (cb, delay = 100) => {
88
- const debounced = debounce(cb, delay);
89
- const throttled = throttle(cb, delay);
102
+ var debounceAndThrottle = (cb, delay2 = 100) => {
103
+ let timeout2;
104
+ let lastCall = 0;
90
105
  return (...args) => {
91
- debounced(...args);
92
- 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
+ }
93
118
  };
94
119
  };
95
120
 
@@ -193,10 +218,6 @@ import { Context } from "@dxos/context";
193
218
  var __dxlog_file = "/__w/dxos/dxos/packages/common/async/src/events.ts";
194
219
  var DO_NOT_ERROR_ON_ASYNC_CALLBACK = true;
195
220
  var Event = class _Event {
196
- constructor() {
197
- this._listeners = /* @__PURE__ */ new Set();
198
- this._effects = /* @__PURE__ */ new Set();
199
- }
200
221
  /**
201
222
  * Wrap objects that have on/off style event emitters.
202
223
  */
@@ -209,6 +230,8 @@ var Event = class _Event {
209
230
  });
210
231
  return event;
211
232
  }
233
+ _listeners = /* @__PURE__ */ new Set();
234
+ _effects = /* @__PURE__ */ new Set();
212
235
  /**
213
236
  * Emit an event.
214
237
  * In most cases should only be called by the class or entity containing the event.
@@ -452,11 +475,15 @@ var Event = class _Event {
452
475
  }
453
476
  };
454
477
  var EventListener = class {
478
+ ctx;
479
+ once;
480
+ weak;
481
+ callback;
482
+ _clearDispose = void 0;
455
483
  constructor(event, listener, ctx, once, weak) {
456
484
  this.ctx = ctx;
457
485
  this.once = once;
458
486
  this.weak = weak;
459
- this._clearDispose = void 0;
460
487
  this._clearDispose = ctx.onDispose(() => {
461
488
  event._removeListener(this);
462
489
  });
@@ -520,11 +547,9 @@ var weakListeners = () => {
520
547
  import "@dxos/util";
521
548
  import { warnAfterTimeout } from "@dxos/debug";
522
549
  var Mutex = class {
523
- constructor() {
524
- this._queue = Promise.resolve();
525
- this._queueLength = 0;
526
- this._tag = null;
527
- }
550
+ _queue = Promise.resolve();
551
+ _queueLength = 0;
552
+ _tag = null;
528
553
  get tag() {
529
554
  return this._tag;
530
555
  }
@@ -570,6 +595,7 @@ var Mutex = class {
570
595
  }
571
596
  };
572
597
  var MutexGuard = class {
598
+ _release;
573
599
  constructor(_release) {
574
600
  this._release = _release;
575
601
  }
@@ -630,18 +656,22 @@ var trigger = (timeout2) => {
630
656
  resolver
631
657
  ];
632
658
  };
633
- var TriggerState = /* @__PURE__ */ function(TriggerState2) {
659
+ var TriggerState = /* @__PURE__ */ (function(TriggerState2) {
634
660
  TriggerState2["WAITING"] = "WAITING";
635
661
  TriggerState2["RESOLVED"] = "RESOLVED";
636
662
  TriggerState2["REJECTED"] = "REJECTED";
637
663
  return TriggerState2;
638
- }({});
664
+ })({});
639
665
  var Trigger = class {
666
+ _options;
667
+ _promise;
668
+ _resolve;
669
+ _reject;
670
+ _state = "WAITING";
640
671
  constructor(_options = {
641
672
  autoReset: false
642
673
  }) {
643
674
  this._options = _options;
644
- this._state = "WAITING";
645
675
  this.reset();
646
676
  }
647
677
  get state() {
@@ -750,20 +780,12 @@ var latch = ({ count = 1, timeout: timeout2 } = {}) => {
750
780
 
751
781
  // src/observable.ts
752
782
  var MulticastObservable = class _MulticastObservable extends Observable {
783
+ _value;
784
+ _observers = /* @__PURE__ */ new Set();
785
+ _observable;
786
+ _completed = new Trigger();
753
787
  constructor(subscriber, _value) {
754
- super((observer) => this._subscribe(observer)), this._value = _value, this._observers = /* @__PURE__ */ new Set(), this._completed = new Trigger(), this._handlers = {
755
- next: (value) => {
756
- this._value = value;
757
- this._observers.forEach((observer) => observer.next?.(value));
758
- },
759
- error: (err) => {
760
- this._observers.forEach((observer) => observer.error?.(err));
761
- },
762
- complete: () => {
763
- this._completed.wake();
764
- this._observers.forEach((observer) => observer.complete?.());
765
- }
766
- };
788
+ super((observer) => this._subscribe(observer)), this._value = _value;
767
789
  this._observable = typeof subscriber === "function" ? new Observable(subscriber) : subscriber;
768
790
  this._observable.subscribe(this._handlers);
769
791
  }
@@ -847,18 +869,30 @@ var MulticastObservable = class _MulticastObservable extends Observable {
847
869
  this._observers.delete(observer);
848
870
  };
849
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
+ };
850
885
  };
851
886
  var EMPTY_OBSERVABLE = MulticastObservable.of(null);
852
887
 
853
888
  // src/observable-value.ts
854
889
  import { createSetDispatch } from "@dxos/util";
855
890
  var ObservableProvider = class {
856
- constructor() {
857
- this._handlers = /* @__PURE__ */ new Set();
858
- this._proxy = createSetDispatch({
859
- handlers: this._handlers
860
- });
861
- }
891
+ _handlers = /* @__PURE__ */ new Set();
892
+ _proxy = createSetDispatch({
893
+ handlers: this._handlers
894
+ });
895
+ _value;
862
896
  /**
863
897
  * Proxy used to dispatch callbacks to each subscription.
864
898
  */
@@ -879,8 +913,10 @@ var ObservableProvider = class {
879
913
  }
880
914
  };
881
915
  var CancellableObservableProvider = class extends ObservableProvider {
916
+ _handleCancel;
917
+ _cancelled = false;
882
918
  constructor(_handleCancel) {
883
- super(), this._handleCancel = _handleCancel, this._cancelled = false;
919
+ super(), this._handleCancel = _handleCancel;
884
920
  }
885
921
  get cancelled() {
886
922
  return this._cancelled;
@@ -990,12 +1026,14 @@ if (enabled) {
990
1026
 
991
1027
  // src/task-scheduling.ts
992
1028
  var DeferredTask = class {
1029
+ _ctx;
1030
+ _callback;
1031
+ _scheduled = false;
1032
+ _currentTask = null;
1033
+ _nextTask = new Trigger();
993
1034
  constructor(_ctx, _callback) {
994
1035
  this._ctx = _ctx;
995
1036
  this._callback = _callback;
996
- this._scheduled = false;
997
- this._currentTask = null;
998
- this._nextTask = new Trigger();
999
1037
  }
1000
1038
  get scheduled() {
1001
1039
  return this._scheduled;
@@ -1036,6 +1074,78 @@ var DeferredTask = class {
1036
1074
  await this._currentTask;
1037
1075
  }
1038
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
+ };
1039
1149
  var runInContext = (ctx, fn) => {
1040
1150
  try {
1041
1151
  fn();
@@ -1125,11 +1235,15 @@ var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecyc
1125
1235
  var INIT_RESTART_DELAY = 100;
1126
1236
  var DEFAULT_MAX_RESTART_DELAY = 5e3;
1127
1237
  var PersistentLifecycle = class extends Resource {
1238
+ _start;
1239
+ _stop;
1240
+ _onRestart;
1241
+ _maxRestartDelay;
1242
+ _currentState = void 0;
1243
+ _restartTask = void 0;
1244
+ _restartAfter = 0;
1128
1245
  constructor({ start, stop, onRestart, maxRestartDelay = DEFAULT_MAX_RESTART_DELAY }) {
1129
1246
  super();
1130
- this._currentState = void 0;
1131
- this._restartTask = void 0;
1132
- this._restartAfter = 0;
1133
1247
  this._start = start;
1134
1248
  this._stop = stop;
1135
1249
  this._onRestart = onRestart;
@@ -1336,11 +1450,6 @@ var streamToArray = (stream) => {
1336
1450
  // src/test-stream.ts
1337
1451
  import { Duplex } from "node:stream";
1338
1452
  var TestStream = class extends Duplex {
1339
- constructor() {
1340
- super(...arguments);
1341
- this._received = Buffer.alloc(0);
1342
- this._onWrite = new Event();
1343
- }
1344
1453
  static async assertConnectivity(stream1, stream2, { timeout: timeout2 = 200 } = {}) {
1345
1454
  stream1.push("ping");
1346
1455
  stream2.push("pong");
@@ -1353,6 +1462,8 @@ var TestStream = class extends Duplex {
1353
1462
  })
1354
1463
  ]);
1355
1464
  }
1465
+ _received = Buffer.alloc(0);
1466
+ _onWrite = new Event();
1356
1467
  _write(chunk, encoding, callback) {
1357
1468
  this._received = Buffer.concat([
1358
1469
  this._received,
@@ -1430,10 +1541,12 @@ var untilError = (cb) => {
1430
1541
 
1431
1542
  // src/timer.ts
1432
1543
  var Timer = class {
1544
+ _callback;
1545
+ _state = new Event();
1546
+ _timer;
1547
+ _count = 0;
1433
1548
  constructor(_callback) {
1434
1549
  this._callback = _callback;
1435
- this._state = new Event();
1436
- this._count = 0;
1437
1550
  }
1438
1551
  get state() {
1439
1552
  return this._state;
@@ -1479,13 +1592,20 @@ var Timer = class {
1479
1592
  // src/update-scheduler.ts
1480
1593
  var TIME_PERIOD = 1e3;
1481
1594
  var UpdateScheduler = class {
1595
+ _ctx;
1596
+ _callback;
1597
+ _params;
1598
+ /**
1599
+ * Promise that resolves when the callback is done.
1600
+ * Never rejects.
1601
+ */
1602
+ _promise = null;
1603
+ _scheduled = false;
1604
+ _lastUpdateTime = -TIME_PERIOD;
1482
1605
  constructor(_ctx, _callback, _params = {}) {
1483
1606
  this._ctx = _ctx;
1484
1607
  this._callback = _callback;
1485
1608
  this._params = _params;
1486
- this._promise = null;
1487
- this._scheduled = false;
1488
- this._lastUpdateTime = -TIME_PERIOD;
1489
1609
  _ctx.onDispose(async () => {
1490
1610
  await this._promise;
1491
1611
  });
@@ -1498,13 +1618,13 @@ var UpdateScheduler = class {
1498
1618
  await this._promise;
1499
1619
  if (this._params.maxFrequency) {
1500
1620
  const now = performance.now();
1501
- const delay = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
1502
- if (delay > 0) {
1621
+ const delay2 = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
1622
+ if (delay2 > 0) {
1503
1623
  await new Promise((resolve) => {
1504
1624
  const timeoutId = setTimeout(() => {
1505
1625
  clearContext();
1506
1626
  resolve();
1507
- }, delay);
1627
+ }, delay2);
1508
1628
  const clearContext = this._ctx.onDispose(() => {
1509
1629
  clearTimeout(timeoutId);
1510
1630
  resolve();
@@ -1548,6 +1668,7 @@ var UpdateScheduler = class {
1548
1668
  }
1549
1669
  };
1550
1670
  export {
1671
+ AsyncTask,
1551
1672
  CancellableObservableProvider,
1552
1673
  DeferredTask,
1553
1674
  Event,
@@ -1574,6 +1695,7 @@ export {
1574
1695
  combine,
1575
1696
  debounce,
1576
1697
  debounceAndThrottle,
1698
+ delay,
1577
1699
  dumpLeaks,
1578
1700
  interval,
1579
1701
  latch,