@dxos/async 0.8.3 → 0.8.4-main.1da679c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/lib/browser/index.mjs +432 -264
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +432 -264
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/callback.d.ts +2 -1
  8. package/dist/types/src/callback.d.ts.map +1 -1
  9. package/dist/types/src/chain.d.ts +1 -1
  10. package/dist/types/src/chain.d.ts.map +1 -1
  11. package/dist/types/src/cleanup.d.ts +1 -1
  12. package/dist/types/src/cleanup.d.ts.map +1 -1
  13. package/dist/types/src/debounce.d.ts +19 -1
  14. package/dist/types/src/debounce.d.ts.map +1 -1
  15. package/dist/types/src/debounce.test.d.ts +2 -0
  16. package/dist/types/src/debounce.test.d.ts.map +1 -0
  17. package/dist/types/src/index.d.ts +0 -4
  18. package/dist/types/src/index.d.ts.map +1 -1
  19. package/dist/types/src/task-scheduling.d.ts.map +1 -1
  20. package/dist/types/src/testing.d.ts +13 -0
  21. package/dist/types/src/testing.d.ts.map +1 -1
  22. package/dist/types/src/timeout.d.ts +1 -1
  23. package/dist/types/src/timeout.d.ts.map +1 -1
  24. package/dist/types/src/trigger.d.ts +11 -0
  25. package/dist/types/src/trigger.d.ts.map +1 -1
  26. package/dist/types/tsconfig.tsbuildinfo +1 -1
  27. package/package.json +9 -9
  28. package/src/callback.ts +3 -3
  29. package/src/chain.ts +1 -1
  30. package/src/cleanup.ts +3 -3
  31. package/src/debounce.test.ts +115 -0
  32. package/src/debounce.ts +40 -4
  33. package/src/event-emitter.test.ts +2 -1
  34. package/src/events.test.ts +1 -1
  35. package/src/index.ts +0 -4
  36. package/src/observable-value.test.ts +1 -1
  37. package/src/persistent-lifecycle.test.ts +1 -1
  38. package/src/task-scheduling.ts +1 -1
  39. package/src/testing.test.ts +41 -1
  40. package/src/testing.ts +53 -0
  41. package/src/timeout.ts +23 -22
  42. package/src/trigger.ts +58 -1
  43. package/src/update-scheduler.ts +1 -1
  44. package/dist/lib/node/index.cjs +0 -1638
  45. package/dist/lib/node/index.cjs.map +0 -7
  46. package/dist/lib/node/meta.json +0 -1
  47. package/dist/types/src/latch.d.ts +0 -11
  48. package/dist/types/src/latch.d.ts.map +0 -1
  49. package/dist/types/src/sink.d.ts +0 -6
  50. package/dist/types/src/sink.d.ts.map +0 -1
  51. package/dist/types/src/types.d.ts +0 -2
  52. package/dist/types/src/types.d.ts.map +0 -1
  53. package/dist/types/src/until.d.ts +0 -14
  54. package/dist/types/src/until.d.ts.map +0 -1
  55. package/dist/types/src/until.test.d.ts +0 -2
  56. package/dist/types/src/until.test.d.ts.map +0 -1
  57. package/src/latch.ts +0 -60
  58. package/src/sink.ts +0 -26
  59. package/src/types.ts +0 -5
  60. package/src/until.test.ts +0 -47
  61. package/src/until.ts +0 -58
@@ -1,5 +1,5 @@
1
- // packages/common/async/src/callback.ts
2
- var createPromiseFromCallback = (run) => new Promise((resolve, reject) => {
1
+ // src/callback.ts
2
+ var promiseFromCallback = (run) => new Promise((resolve, reject) => {
3
3
  run((error, value) => {
4
4
  if (error) {
5
5
  reject(error);
@@ -9,17 +9,30 @@ var createPromiseFromCallback = (run) => new Promise((resolve, reject) => {
9
9
  });
10
10
  });
11
11
 
12
- // packages/common/async/src/chain.ts
13
- var asyncChain = (chain) => async (elements) => {
12
+ // src/chain.ts
13
+ var chain = (chain2) => async (elements) => {
14
14
  let result = await elements;
15
- for (const part of chain) {
15
+ for (const part of chain2) {
16
16
  result = await Promise.all(result.map(async (element) => await part(element)));
17
17
  }
18
18
  return result;
19
19
  };
20
20
 
21
- // packages/common/async/src/cleanup.ts
21
+ // src/cleanup.ts
22
22
  import { ComplexMap } from "@dxos/util";
23
+ function _define_property(obj, key, value) {
24
+ if (key in obj) {
25
+ Object.defineProperty(obj, key, {
26
+ value,
27
+ enumerable: true,
28
+ configurable: true,
29
+ writable: true
30
+ });
31
+ } else {
32
+ obj[key] = value;
33
+ }
34
+ return obj;
35
+ }
23
36
  var combine = (...cleanupFns) => {
24
37
  return () => {
25
38
  cleanupFns.flat().forEach((cleanupFn) => cleanupFn());
@@ -33,14 +46,11 @@ var interval = (cb, ms) => {
33
46
  const t = setInterval(cb, ms);
34
47
  return () => clearInterval(t);
35
48
  };
36
- function addEventListener(target, type, listener, options) {
49
+ var addEventListener = (target, type, listener, options) => {
37
50
  target.addEventListener(type, listener, options);
38
51
  return () => target.removeEventListener(type, listener, options);
39
- }
52
+ };
40
53
  var SubscriptionList = class {
41
- constructor() {
42
- this._cleanups = [];
43
- }
44
54
  add(cb) {
45
55
  this._cleanups.push(cb);
46
56
  return this;
@@ -49,11 +59,11 @@ var SubscriptionList = class {
49
59
  this._cleanups.forEach((cb) => cb());
50
60
  this._cleanups.length = 0;
51
61
  }
62
+ constructor() {
63
+ _define_property(this, "_cleanups", []);
64
+ }
52
65
  };
53
66
  var SubscriptionSet = class {
54
- constructor(keyProjection) {
55
- this._cleanupMap = new ComplexMap(keyProjection);
56
- }
57
67
  set(key, cb) {
58
68
  this._cleanupMap.set(key, cb);
59
69
  return this;
@@ -62,18 +72,40 @@ var SubscriptionSet = class {
62
72
  this._cleanupMap.forEach((cb) => cb());
63
73
  this._cleanupMap.clear();
64
74
  }
75
+ constructor(keyProjection) {
76
+ _define_property(this, "_cleanupMap", void 0);
77
+ this._cleanupMap = new ComplexMap(keyProjection);
78
+ }
65
79
  };
66
80
 
67
- // packages/common/async/src/debounce.ts
68
- var debounce = (cb, wait = 100) => {
81
+ // src/debounce.ts
82
+ var debounce = (cb, delay = 100) => {
69
83
  let t;
70
84
  return (...args) => {
71
85
  clearTimeout(t);
72
- t = setTimeout(() => cb(...args), wait);
86
+ t = setTimeout(() => cb(...args), delay);
87
+ };
88
+ };
89
+ var throttle = (cb, delay = 100) => {
90
+ let lastCall = 0;
91
+ return (...args) => {
92
+ const now = Date.now();
93
+ if (now - lastCall >= delay) {
94
+ cb(...args);
95
+ lastCall = now;
96
+ }
97
+ };
98
+ };
99
+ var debounceAndThrottle = (cb, delay = 100) => {
100
+ const debounced = debounce(cb, delay);
101
+ const throttled = throttle(cb, delay);
102
+ return (...args) => {
103
+ debounced(...args);
104
+ throttled(...args);
73
105
  };
74
106
  };
75
107
 
76
- // packages/common/async/src/errors.ts
108
+ // src/errors.ts
77
109
  var toError = (err) => err === void 0 || typeof err === "string" ? new Error(err) : err;
78
110
  var TimeoutError = class extends Error {
79
111
  constructor(timeout2, label) {
@@ -88,7 +120,7 @@ var observableError = (observable, err) => {
88
120
  }
89
121
  };
90
122
 
91
- // packages/common/async/src/timeout.ts
123
+ // src/timeout.ts
92
124
  import { ContextDisposedError } from "@dxos/context";
93
125
  var sleep = (ms) => {
94
126
  return new Promise((resolve) => {
@@ -104,6 +136,23 @@ var sleep = (ms) => {
104
136
  sleeper();
105
137
  });
106
138
  };
139
+ var sleepWithContext = (ctx, ms) => {
140
+ const error = new ContextDisposedError();
141
+ return new Promise((resolve, reject) => {
142
+ if (ctx.disposed) {
143
+ reject(error);
144
+ return;
145
+ }
146
+ const timeout2 = setTimeout(() => {
147
+ clearDispose();
148
+ resolve();
149
+ }, ms);
150
+ const clearDispose = ctx.onDispose(() => {
151
+ clearTimeout(timeout2);
152
+ reject(error);
153
+ });
154
+ });
155
+ };
107
156
  var asyncReturn = () => sleep(0);
108
157
  var asyncTimeout = async (promise, timeout2, err) => {
109
158
  let timeoutId;
@@ -114,7 +163,7 @@ var asyncTimeout = async (promise, timeout2, err) => {
114
163
  }, timeout2);
115
164
  unrefTimeout(timeoutId);
116
165
  });
117
- const conditionTimeout = typeof promise === "function" ? createPromiseFromCallback(promise) : promise;
166
+ const conditionTimeout = typeof promise === "function" ? promiseFromCallback(promise) : promise;
118
167
  return await Promise.race([
119
168
  conditionTimeout,
120
169
  timeoutPromise
@@ -127,25 +176,8 @@ var unrefTimeout = (timeoutId) => {
127
176
  timeoutId.unref();
128
177
  }
129
178
  };
130
- var sleepWithContext = (ctx, ms) => {
131
- const error = new ContextDisposedError();
132
- return new Promise((resolve, reject) => {
133
- if (ctx.disposed) {
134
- reject(error);
135
- return;
136
- }
137
- const timeout2 = setTimeout(() => {
138
- clearDispose();
139
- resolve();
140
- }, ms);
141
- const clearDispose = ctx.onDispose(() => {
142
- clearTimeout(timeout2);
143
- reject(error);
144
- });
145
- });
146
- };
147
179
 
148
- // packages/common/async/src/event-emitter.ts
180
+ // src/event-emitter.ts
149
181
  var onEvent = (eventEmitter, eventName, callback) => {
150
182
  eventEmitter.on(eventName, callback);
151
183
  return () => eventEmitter.off(eventName, callback);
@@ -168,15 +200,24 @@ var waitForEvent = (eventEmitter, eventName, test, timeout2, error) => {
168
200
  return timeout2 ? asyncTimeout(promise, timeout2, error ?? new Error()).finally(off) : promise.finally(off);
169
201
  };
170
202
 
171
- // packages/common/async/src/events.ts
203
+ // src/events.ts
172
204
  import { Context } from "@dxos/context";
173
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/common/async/src/events.ts";
205
+ function _define_property2(obj, key, value) {
206
+ if (key in obj) {
207
+ Object.defineProperty(obj, key, {
208
+ value,
209
+ enumerable: true,
210
+ configurable: true,
211
+ writable: true
212
+ });
213
+ } else {
214
+ obj[key] = value;
215
+ }
216
+ return obj;
217
+ }
218
+ var __dxlog_file = "/__w/dxos/dxos/packages/common/async/src/events.ts";
174
219
  var DO_NOT_ERROR_ON_ASYNC_CALLBACK = true;
175
220
  var Event = class _Event {
176
- constructor() {
177
- this._listeners = /* @__PURE__ */ new Set();
178
- this._effects = /* @__PURE__ */ new Set();
179
- }
180
221
  /**
181
222
  * Wrap objects that have on/off style event emitters.
182
223
  */
@@ -430,26 +471,12 @@ var Event = class _Event {
430
471
  handle.cleanup = void 0;
431
472
  }
432
473
  }
474
+ constructor() {
475
+ _define_property2(this, "_listeners", /* @__PURE__ */ new Set());
476
+ _define_property2(this, "_effects", /* @__PURE__ */ new Set());
477
+ }
433
478
  };
434
479
  var EventListener = class {
435
- constructor(event, listener, ctx, once, weak) {
436
- this.ctx = ctx;
437
- this.once = once;
438
- this.weak = weak;
439
- this._clearDispose = void 0;
440
- this._clearDispose = ctx.onDispose(() => {
441
- event._removeListener(this);
442
- });
443
- if (weak) {
444
- this.callback = new WeakRef(listener);
445
- weakListeners().registry?.register(listener, {
446
- event: new WeakRef(event),
447
- listener: this
448
- }, this);
449
- } else {
450
- this.callback = listener;
451
- }
452
- }
453
480
  derefCallback() {
454
481
  return this.weak ? this.callback.deref() : this.callback;
455
482
  }
@@ -479,6 +506,29 @@ var EventListener = class {
479
506
  this._clearDispose?.();
480
507
  weakListeners().registry?.unregister(this);
481
508
  }
509
+ constructor(event, listener, ctx, once, weak) {
510
+ _define_property2(this, "ctx", void 0);
511
+ _define_property2(this, "once", void 0);
512
+ _define_property2(this, "weak", void 0);
513
+ _define_property2(this, "callback", void 0);
514
+ _define_property2(this, "_clearDispose", void 0);
515
+ this.ctx = ctx;
516
+ this.once = once;
517
+ this.weak = weak;
518
+ this._clearDispose = void 0;
519
+ this._clearDispose = ctx.onDispose(() => {
520
+ event._removeListener(this);
521
+ });
522
+ if (weak) {
523
+ this.callback = new WeakRef(listener);
524
+ weakListeners().registry?.register(listener, {
525
+ event: new WeakRef(event),
526
+ listener: this
527
+ }, this);
528
+ } else {
529
+ this.callback = listener;
530
+ }
531
+ }
482
532
  };
483
533
  var weakListenersState = null;
484
534
  var FINALIZATION_REGISTRY_SUPPORTED = !!globalThis.FinalizationRegistry;
@@ -488,73 +538,31 @@ var weakListeners = () => {
488
538
  registry: void 0
489
539
  };
490
540
  }
491
- weakListenersState ??= new FinalizationRegistry(({ event, listener }) => {
541
+ weakListenersState ?? (weakListenersState = new FinalizationRegistry(({ event, listener }) => {
492
542
  event.deref()?._removeListener(listener);
493
- });
543
+ }));
494
544
  return {
495
545
  registry: weakListenersState
496
546
  };
497
547
  };
498
548
 
499
- // packages/common/async/src/latch.ts
500
- import { invariant } from "@dxos/invariant";
501
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/common/async/src/latch.ts";
502
- var latch = ({ count = 1, timeout: timeout2 } = {}) => {
503
- invariant(count >= 0, void 0, {
504
- F: __dxlog_file2,
505
- L: 19,
506
- S: void 0,
507
- A: [
508
- "count >= 0",
509
- ""
510
- ]
511
- });
512
- let t;
513
- let doResolve;
514
- let doReject;
515
- const promise = new Promise((resolve, reject) => {
516
- doResolve = (value) => {
517
- clearTimeout(t);
518
- resolve(value);
519
- };
520
- doReject = (err) => {
521
- clearTimeout(t);
522
- reject(err);
523
- };
524
- });
525
- if (count === 0) {
526
- setTimeout(() => {
527
- doResolve(0);
549
+ // src/mutex.ts
550
+ import "@dxos/util";
551
+ import { warnAfterTimeout } from "@dxos/debug";
552
+ function _define_property3(obj, key, value) {
553
+ if (key in obj) {
554
+ Object.defineProperty(obj, key, {
555
+ value,
556
+ enumerable: true,
557
+ configurable: true,
558
+ writable: true
528
559
  });
529
560
  } else {
530
- if (timeout2) {
531
- t = setTimeout(() => {
532
- doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
533
- }, timeout2);
534
- }
561
+ obj[key] = value;
535
562
  }
536
- let i = 0;
537
- return [
538
- async () => await promise,
539
- () => {
540
- if (++i === count) {
541
- doResolve(i);
542
- }
543
- return i;
544
- },
545
- (err) => doReject(err)
546
- ];
547
- };
548
-
549
- // packages/common/async/src/mutex.ts
550
- import "@dxos/util";
551
- import { warnAfterTimeout } from "@dxos/debug";
563
+ return obj;
564
+ }
552
565
  var Mutex = class {
553
- constructor() {
554
- this._queue = Promise.resolve();
555
- this._queueLength = 0;
556
- this._tag = null;
557
- }
558
566
  get tag() {
559
567
  return this._tag;
560
568
  }
@@ -598,11 +606,13 @@ var Mutex = class {
598
606
  guard.release();
599
607
  }
600
608
  }
609
+ constructor() {
610
+ _define_property3(this, "_queue", Promise.resolve());
611
+ _define_property3(this, "_queueLength", 0);
612
+ _define_property3(this, "_tag", null);
613
+ }
601
614
  };
602
615
  var MutexGuard = class {
603
- constructor(_release) {
604
- this._release = _release;
605
- }
606
616
  /**
607
617
  * Releases the lock.
608
618
  */
@@ -612,6 +622,10 @@ var MutexGuard = class {
612
622
  [Symbol.dispose]() {
613
623
  this.release();
614
624
  }
625
+ constructor(_release) {
626
+ _define_property3(this, "_release", void 0);
627
+ this._release = _release;
628
+ }
615
629
  };
616
630
  var classMutexSymbol = Symbol("class-mutex");
617
631
  var FORCE_DISABLE_WARNING = false;
@@ -619,7 +633,8 @@ var enableWarning = !FORCE_DISABLE_WARNING && globalThis.mochaExecutor;
619
633
  var synchronized = (target, propertyName, descriptor) => {
620
634
  const method = descriptor.value;
621
635
  descriptor.value = async function synchronizedMethod(...args) {
622
- const mutex = this[classMutexSymbol] ??= new Mutex();
636
+ var _classMutexSymbol;
637
+ const mutex = this[_classMutexSymbol = classMutexSymbol] ?? (this[_classMutexSymbol] = new Mutex());
623
638
  const tag = `${target.constructor.name}.${propertyName}`;
624
639
  let guard;
625
640
  if (!enableWarning) {
@@ -638,11 +653,26 @@ var synchronized = (target, propertyName, descriptor) => {
638
653
  });
639
654
  };
640
655
 
641
- // packages/common/async/src/observable.ts
656
+ // src/observable.ts
642
657
  import Observable from "zen-observable";
643
658
  import PushStream from "zen-push";
644
659
 
645
- // packages/common/async/src/trigger.ts
660
+ // src/trigger.ts
661
+ import { invariant } from "@dxos/invariant";
662
+ function _define_property4(obj, key, value) {
663
+ if (key in obj) {
664
+ Object.defineProperty(obj, key, {
665
+ value,
666
+ enumerable: true,
667
+ configurable: true,
668
+ writable: true
669
+ });
670
+ } else {
671
+ obj[key] = value;
672
+ }
673
+ return obj;
674
+ }
675
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/trigger.ts";
646
676
  var trigger = (timeout2) => {
647
677
  let callback;
648
678
  const promise = new Promise((resolve, reject) => {
@@ -658,20 +688,13 @@ var trigger = (timeout2) => {
658
688
  resolver
659
689
  ];
660
690
  };
661
- var TriggerState = /* @__PURE__ */ function(TriggerState2) {
691
+ var TriggerState = /* @__PURE__ */ (function(TriggerState2) {
662
692
  TriggerState2["WAITING"] = "WAITING";
663
693
  TriggerState2["RESOLVED"] = "RESOLVED";
664
694
  TriggerState2["REJECTED"] = "REJECTED";
665
695
  return TriggerState2;
666
- }({});
696
+ })({});
667
697
  var Trigger = class {
668
- constructor(_options = {
669
- autoReset: false
670
- }) {
671
- this._options = _options;
672
- this._state = "WAITING";
673
- this.reset();
674
- }
675
698
  get state() {
676
699
  return this._state;
677
700
  }
@@ -728,27 +751,81 @@ var Trigger = class {
728
751
  }
729
752
  return this;
730
753
  }
754
+ constructor(_options = {
755
+ autoReset: false
756
+ }) {
757
+ _define_property4(this, "_options", void 0);
758
+ _define_property4(this, "_promise", void 0);
759
+ _define_property4(this, "_resolve", void 0);
760
+ _define_property4(this, "_reject", void 0);
761
+ _define_property4(this, "_state", void 0);
762
+ this._options = _options;
763
+ this._state = "WAITING";
764
+ this.reset();
765
+ }
731
766
  };
732
-
733
- // packages/common/async/src/observable.ts
734
- var MulticastObservable = class _MulticastObservable extends Observable {
735
- constructor(subscriber, _value) {
736
- super((observer) => this._subscribe(observer)), this._value = _value, this._observers = /* @__PURE__ */ new Set(), this._completed = new Trigger(), this._handlers = {
737
- next: (value) => {
738
- this._value = value;
739
- this._observers.forEach((observer) => observer.next?.(value));
740
- },
741
- error: (err) => {
742
- this._observers.forEach((observer) => observer.error?.(err));
743
- },
744
- complete: () => {
745
- this._completed.wake();
746
- this._observers.forEach((observer) => observer.complete?.());
747
- }
767
+ var latch = ({ count = 1, timeout: timeout2 } = {}) => {
768
+ invariant(count >= 0, void 0, {
769
+ F: __dxlog_file2,
770
+ L: 139,
771
+ S: void 0,
772
+ A: [
773
+ "count >= 0",
774
+ ""
775
+ ]
776
+ });
777
+ let t;
778
+ let doResolve;
779
+ let doReject;
780
+ const promise = new Promise((resolve, reject) => {
781
+ doResolve = (value) => {
782
+ clearTimeout(t);
783
+ resolve(value);
748
784
  };
749
- this._observable = typeof subscriber === "function" ? new Observable(subscriber) : subscriber;
750
- this._observable.subscribe(this._handlers);
785
+ doReject = (err) => {
786
+ clearTimeout(t);
787
+ reject(err);
788
+ };
789
+ });
790
+ if (count === 0) {
791
+ setTimeout(() => {
792
+ doResolve(0);
793
+ });
794
+ } else {
795
+ if (timeout2) {
796
+ t = setTimeout(() => {
797
+ doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
798
+ }, timeout2);
799
+ }
800
+ }
801
+ let i = 0;
802
+ return [
803
+ async () => await promise,
804
+ () => {
805
+ if (++i === count) {
806
+ doResolve(i);
807
+ }
808
+ return i;
809
+ },
810
+ (err) => doReject(err)
811
+ ];
812
+ };
813
+
814
+ // src/observable.ts
815
+ function _define_property5(obj, key, value) {
816
+ if (key in obj) {
817
+ Object.defineProperty(obj, key, {
818
+ value,
819
+ enumerable: true,
820
+ configurable: true,
821
+ writable: true
822
+ });
823
+ } else {
824
+ obj[key] = value;
751
825
  }
826
+ return obj;
827
+ }
828
+ var MulticastObservable = class _MulticastObservable extends Observable {
752
829
  static from(value, initialValue) {
753
830
  if ("emit" in value) {
754
831
  return new _MulticastObservable((observer) => {
@@ -829,18 +906,42 @@ var MulticastObservable = class _MulticastObservable extends Observable {
829
906
  this._observers.delete(observer);
830
907
  };
831
908
  }
909
+ constructor(subscriber, _value) {
910
+ super((observer) => this._subscribe(observer)), _define_property5(this, "_value", void 0), _define_property5(this, "_observers", void 0), _define_property5(this, "_observable", void 0), _define_property5(this, "_completed", void 0), _define_property5(this, "_handlers", void 0), this._value = _value, this._observers = /* @__PURE__ */ new Set(), this._completed = new Trigger(), this._handlers = {
911
+ next: (value) => {
912
+ this._value = value;
913
+ this._observers.forEach((observer) => observer.next?.(value));
914
+ },
915
+ error: (err) => {
916
+ this._observers.forEach((observer) => observer.error?.(err));
917
+ },
918
+ complete: () => {
919
+ this._completed.wake();
920
+ this._observers.forEach((observer) => observer.complete?.());
921
+ }
922
+ };
923
+ this._observable = typeof subscriber === "function" ? new Observable(subscriber) : subscriber;
924
+ this._observable.subscribe(this._handlers);
925
+ }
832
926
  };
833
927
  var EMPTY_OBSERVABLE = MulticastObservable.of(null);
834
928
 
835
- // packages/common/async/src/observable-value.ts
929
+ // src/observable-value.ts
836
930
  import { createSetDispatch } from "@dxos/util";
837
- var ObservableProvider = class {
838
- constructor() {
839
- this._handlers = /* @__PURE__ */ new Set();
840
- this._proxy = createSetDispatch({
841
- handlers: this._handlers
931
+ function _define_property6(obj, key, value) {
932
+ if (key in obj) {
933
+ Object.defineProperty(obj, key, {
934
+ value,
935
+ enumerable: true,
936
+ configurable: true,
937
+ writable: true
842
938
  });
939
+ } else {
940
+ obj[key] = value;
843
941
  }
942
+ return obj;
943
+ }
944
+ var ObservableProvider = class {
844
945
  /**
845
946
  * Proxy used to dispatch callbacks to each subscription.
846
947
  */
@@ -859,11 +960,15 @@ var ObservableProvider = class {
859
960
  this._handlers.delete(handler);
860
961
  };
861
962
  }
963
+ constructor() {
964
+ _define_property6(this, "_handlers", /* @__PURE__ */ new Set());
965
+ _define_property6(this, "_proxy", createSetDispatch({
966
+ handlers: this._handlers
967
+ }));
968
+ _define_property6(this, "_value", void 0);
969
+ }
862
970
  };
863
971
  var CancellableObservableProvider = class extends ObservableProvider {
864
- constructor(_handleCancel) {
865
- super(), this._handleCancel = _handleCancel, this._cancelled = false;
866
- }
867
972
  get cancelled() {
868
973
  return this._cancelled;
869
974
  }
@@ -875,21 +980,24 @@ var CancellableObservableProvider = class extends ObservableProvider {
875
980
  await this._handleCancel?.();
876
981
  this.callback.onCancelled?.();
877
982
  }
983
+ constructor(_handleCancel) {
984
+ super(), _define_property6(this, "_handleCancel", void 0), _define_property6(this, "_cancelled", void 0), this._handleCancel = _handleCancel, this._cancelled = false;
985
+ }
878
986
  };
879
987
 
880
- // packages/common/async/src/persistent-lifecycle.ts
988
+ // src/persistent-lifecycle.ts
881
989
  import { LifecycleState, Resource, cancelWithContext } from "@dxos/context";
882
990
  import { warnAfterTimeout as warnAfterTimeout2 } from "@dxos/debug";
883
991
  import { log as log2 } from "@dxos/log";
884
992
 
885
- // packages/common/async/src/task-scheduling.ts
993
+ // src/task-scheduling.ts
886
994
  import { ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
887
995
  import { StackTrace as StackTrace2 } from "@dxos/debug";
888
996
 
889
- // packages/common/async/src/track-leaks.ts
997
+ // src/track-leaks.ts
890
998
  import { StackTrace } from "@dxos/debug";
891
999
  import { log } from "@dxos/log";
892
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/common/async/src/track-leaks.ts";
1000
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/common/async/src/track-leaks.ts";
893
1001
  var enabled = typeof process !== "undefined" && !!process.env.DX_TRACK_LEAKS;
894
1002
  var openResources = /* @__PURE__ */ new Set();
895
1003
  var handleSymbol = Symbol("checkLeaksHandle");
@@ -970,15 +1078,21 @@ if (enabled) {
970
1078
  global.dxDumpLeaks = dumpLeaks;
971
1079
  }
972
1080
 
973
- // packages/common/async/src/task-scheduling.ts
974
- var DeferredTask = class {
975
- constructor(_ctx, _callback) {
976
- this._ctx = _ctx;
977
- this._callback = _callback;
978
- this._scheduled = false;
979
- this._currentTask = null;
980
- this._nextTask = new Trigger();
1081
+ // src/task-scheduling.ts
1082
+ function _define_property7(obj, key, value) {
1083
+ if (key in obj) {
1084
+ Object.defineProperty(obj, key, {
1085
+ value,
1086
+ enumerable: true,
1087
+ configurable: true,
1088
+ writable: true
1089
+ });
1090
+ } else {
1091
+ obj[key] = value;
981
1092
  }
1093
+ return obj;
1094
+ }
1095
+ var DeferredTask = class {
982
1096
  get scheduled() {
983
1097
  return this._scheduled;
984
1098
  }
@@ -1017,6 +1131,18 @@ var DeferredTask = class {
1017
1131
  async join() {
1018
1132
  await this._currentTask;
1019
1133
  }
1134
+ constructor(_ctx, _callback) {
1135
+ _define_property7(this, "_ctx", void 0);
1136
+ _define_property7(this, "_callback", void 0);
1137
+ _define_property7(this, "_scheduled", void 0);
1138
+ _define_property7(this, "_currentTask", void 0);
1139
+ _define_property7(this, "_nextTask", void 0);
1140
+ this._ctx = _ctx;
1141
+ this._callback = _callback;
1142
+ this._scheduled = false;
1143
+ this._currentTask = null;
1144
+ this._nextTask = new Trigger();
1145
+ }
1020
1146
  };
1021
1147
  var runInContext = (ctx, fn) => {
1022
1148
  try {
@@ -1096,27 +1222,30 @@ var scheduleExponentialBackoffTaskInterval = (ctx, task, initialInterval) => {
1096
1222
  });
1097
1223
  };
1098
1224
 
1099
- // packages/common/async/src/persistent-lifecycle.ts
1225
+ // src/persistent-lifecycle.ts
1226
+ function _define_property8(obj, key, value) {
1227
+ if (key in obj) {
1228
+ Object.defineProperty(obj, key, {
1229
+ value,
1230
+ enumerable: true,
1231
+ configurable: true,
1232
+ writable: true
1233
+ });
1234
+ } else {
1235
+ obj[key] = value;
1236
+ }
1237
+ return obj;
1238
+ }
1100
1239
  function _ts_decorate(decorators, target, key, desc) {
1101
1240
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1102
1241
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1103
1242
  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;
1104
1243
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1105
1244
  }
1106
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
1245
+ var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
1107
1246
  var INIT_RESTART_DELAY = 100;
1108
1247
  var DEFAULT_MAX_RESTART_DELAY = 5e3;
1109
1248
  var PersistentLifecycle = class extends Resource {
1110
- constructor({ start, stop, onRestart, maxRestartDelay = DEFAULT_MAX_RESTART_DELAY }) {
1111
- super();
1112
- this._currentState = void 0;
1113
- this._restartTask = void 0;
1114
- this._restartAfter = 0;
1115
- this._start = start;
1116
- this._stop = stop;
1117
- this._onRestart = onRestart;
1118
- this._maxRestartDelay = maxRestartDelay;
1119
- }
1120
1249
  get state() {
1121
1250
  return this._currentState;
1122
1251
  }
@@ -1199,6 +1328,13 @@ var PersistentLifecycle = class extends Resource {
1199
1328
  }
1200
1329
  this._restartTask.schedule();
1201
1330
  }
1331
+ constructor({ start, stop, onRestart, maxRestartDelay = DEFAULT_MAX_RESTART_DELAY }) {
1332
+ super(), _define_property8(this, "_start", void 0), _define_property8(this, "_stop", void 0), _define_property8(this, "_onRestart", void 0), _define_property8(this, "_maxRestartDelay", void 0), _define_property8(this, "_currentState", void 0), _define_property8(this, "_restartTask", void 0), _define_property8(this, "_restartAfter", 0);
1333
+ this._start = start;
1334
+ this._stop = stop;
1335
+ this._onRestart = onRestart;
1336
+ this._maxRestartDelay = maxRestartDelay;
1337
+ }
1202
1338
  };
1203
1339
  _ts_decorate([
1204
1340
  synchronized
@@ -1207,9 +1343,9 @@ _ts_decorate([
1207
1343
  synchronized
1208
1344
  ], PersistentLifecycle.prototype, "scheduleRestart", null);
1209
1345
 
1210
- // packages/common/async/src/push-iterable.ts
1346
+ // src/push-iterable.ts
1211
1347
  import { invariant as invariant2 } from "@dxos/invariant";
1212
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/common/async/src/push-iterable.ts";
1348
+ var __dxlog_file5 = "/__w/dxos/dxos/packages/common/async/src/push-iterable.ts";
1213
1349
  var makePushIterable = () => {
1214
1350
  const buf = [];
1215
1351
  const trigger2 = new Trigger({
@@ -1273,21 +1409,7 @@ var makePushIterable = () => {
1273
1409
  };
1274
1410
  };
1275
1411
 
1276
- // packages/common/async/src/sink.ts
1277
- var sink = (emitter, event, count = 1) => {
1278
- const [getPromise, resolve] = trigger();
1279
- let counter = 0;
1280
- const listener = () => {
1281
- if (++counter === count) {
1282
- emitter.off(event, listener);
1283
- resolve();
1284
- }
1285
- };
1286
- emitter.on(event, listener);
1287
- return getPromise();
1288
- };
1289
-
1290
- // packages/common/async/src/stream-to-array.ts
1412
+ // src/stream-to-array.ts
1291
1413
  var streamToArray = (stream) => {
1292
1414
  let deferred;
1293
1415
  if (!stream.readable) {
@@ -1329,14 +1451,22 @@ var streamToArray = (stream) => {
1329
1451
  return deferred;
1330
1452
  };
1331
1453
 
1332
- // packages/common/async/src/test-stream.ts
1454
+ // src/test-stream.ts
1333
1455
  import { Duplex } from "@dxos/node-std/stream";
1334
- var TestStream = class extends Duplex {
1335
- constructor() {
1336
- super(...arguments);
1337
- this._received = Buffer.alloc(0);
1338
- this._onWrite = new Event();
1456
+ function _define_property9(obj, key, value) {
1457
+ if (key in obj) {
1458
+ Object.defineProperty(obj, key, {
1459
+ value,
1460
+ enumerable: true,
1461
+ configurable: true,
1462
+ writable: true
1463
+ });
1464
+ } else {
1465
+ obj[key] = value;
1339
1466
  }
1467
+ return obj;
1468
+ }
1469
+ var TestStream = class extends Duplex {
1340
1470
  static async assertConnectivity(stream1, stream2, { timeout: timeout2 = 200 } = {}) {
1341
1471
  stream1.push("ping");
1342
1472
  stream2.push("pong");
@@ -1363,9 +1493,12 @@ var TestStream = class extends Duplex {
1363
1493
  const dataBuffer = Buffer.isBuffer(data) ? data : Buffer.from(data);
1364
1494
  return asyncTimeout(this._onWrite.waitForCondition(() => this._received.equals(dataBuffer)), timeout2);
1365
1495
  }
1496
+ constructor(...args) {
1497
+ super(...args), _define_property9(this, "_received", Buffer.alloc(0)), _define_property9(this, "_onWrite", new Event());
1498
+ }
1366
1499
  };
1367
1500
 
1368
- // packages/common/async/src/testing.ts
1501
+ // src/testing.ts
1369
1502
  var waitForCondition = ({ condition, timeout: timeout2 = 0, interval: interval2 = 10, error, breakOnError = false }) => {
1370
1503
  const stopTime = timeout2 ? Date.now() + timeout2 : 0;
1371
1504
  const trigger2 = new Trigger();
@@ -1390,14 +1523,55 @@ var waitForCondition = ({ condition, timeout: timeout2 = 0, interval: interval2
1390
1523
  timeout: timeout2
1391
1524
  });
1392
1525
  };
1526
+ var until = (cb, timeout2) => {
1527
+ return new Promise((resolve, reject) => {
1528
+ const t = timeout2 && setTimeout(() => {
1529
+ reject(new Error(`Timeout after ${t}ms`));
1530
+ }, timeout2);
1531
+ setTimeout(async () => {
1532
+ try {
1533
+ await cb((value) => {
1534
+ t && clearTimeout(t);
1535
+ resolve(value);
1536
+ }, (error) => {
1537
+ t && clearTimeout(t);
1538
+ reject(error);
1539
+ });
1540
+ } catch (err) {
1541
+ reject(err);
1542
+ }
1543
+ });
1544
+ });
1545
+ };
1546
+ var untilPromise = (cb) => cb();
1547
+ var untilError = (cb) => {
1548
+ return new Promise((resolve, reject) => {
1549
+ setTimeout(async () => {
1550
+ try {
1551
+ await cb();
1552
+ reject(new Error("No error was thrown."));
1553
+ } catch (err) {
1554
+ resolve(err);
1555
+ }
1556
+ });
1557
+ });
1558
+ };
1393
1559
 
1394
- // packages/common/async/src/timer.ts
1395
- var Timer = class {
1396
- constructor(_callback) {
1397
- this._callback = _callback;
1398
- this._state = new Event();
1399
- this._count = 0;
1560
+ // src/timer.ts
1561
+ function _define_property10(obj, key, value) {
1562
+ if (key in obj) {
1563
+ Object.defineProperty(obj, key, {
1564
+ value,
1565
+ enumerable: true,
1566
+ configurable: true,
1567
+ writable: true
1568
+ });
1569
+ } else {
1570
+ obj[key] = value;
1400
1571
  }
1572
+ return obj;
1573
+ }
1574
+ var Timer = class {
1401
1575
  get state() {
1402
1576
  return this._state;
1403
1577
  }
@@ -1437,57 +1611,33 @@ var Timer = class {
1437
1611
  this._state.emit(false);
1438
1612
  return this;
1439
1613
  }
1614
+ constructor(_callback) {
1615
+ _define_property10(this, "_callback", void 0);
1616
+ _define_property10(this, "_state", void 0);
1617
+ _define_property10(this, "_timer", void 0);
1618
+ _define_property10(this, "_count", void 0);
1619
+ this._callback = _callback;
1620
+ this._state = new Event();
1621
+ this._count = 0;
1622
+ }
1440
1623
  };
1441
1624
 
1442
- // packages/common/async/src/until.ts
1443
- var until = (cb, timeout2) => {
1444
- return new Promise((resolve, reject) => {
1445
- const t = timeout2 && setTimeout(() => {
1446
- reject(new Error(`Timeout after ${t}ms`));
1447
- }, timeout2);
1448
- setTimeout(async () => {
1449
- try {
1450
- await cb((value) => {
1451
- t && clearTimeout(t);
1452
- resolve(value);
1453
- }, (error) => {
1454
- t && clearTimeout(t);
1455
- reject(error);
1456
- });
1457
- } catch (err) {
1458
- reject(err);
1459
- }
1625
+ // src/update-scheduler.ts
1626
+ function _define_property11(obj, key, value) {
1627
+ if (key in obj) {
1628
+ Object.defineProperty(obj, key, {
1629
+ value,
1630
+ enumerable: true,
1631
+ configurable: true,
1632
+ writable: true
1460
1633
  });
1461
- });
1462
- };
1463
- var untilPromise = (cb) => cb();
1464
- var untilError = (cb) => {
1465
- return new Promise((resolve, reject) => {
1466
- setTimeout(async () => {
1467
- try {
1468
- await cb();
1469
- reject(new Error("No error was thrown."));
1470
- } catch (err) {
1471
- resolve(err);
1472
- }
1473
- });
1474
- });
1475
- };
1476
-
1477
- // packages/common/async/src/update-scheduler.ts
1634
+ } else {
1635
+ obj[key] = value;
1636
+ }
1637
+ return obj;
1638
+ }
1478
1639
  var TIME_PERIOD = 1e3;
1479
1640
  var UpdateScheduler = class {
1480
- constructor(_ctx, _callback, _params = {}) {
1481
- this._ctx = _ctx;
1482
- this._callback = _callback;
1483
- this._params = _params;
1484
- this._promise = null;
1485
- this._scheduled = false;
1486
- this._lastUpdateTime = -TIME_PERIOD;
1487
- _ctx.onDispose(async () => {
1488
- await this._promise;
1489
- });
1490
- }
1491
1641
  trigger() {
1492
1642
  if (this._scheduled) {
1493
1643
  return;
@@ -1544,6 +1694,23 @@ var UpdateScheduler = class {
1544
1694
  this._promise = this._callback();
1545
1695
  await this._promise;
1546
1696
  }
1697
+ constructor(_ctx, _callback, _params = {}) {
1698
+ _define_property11(this, "_ctx", void 0);
1699
+ _define_property11(this, "_callback", void 0);
1700
+ _define_property11(this, "_params", void 0);
1701
+ _define_property11(this, "_promise", void 0);
1702
+ _define_property11(this, "_scheduled", void 0);
1703
+ _define_property11(this, "_lastUpdateTime", void 0);
1704
+ this._ctx = _ctx;
1705
+ this._callback = _callback;
1706
+ this._params = _params;
1707
+ this._promise = null;
1708
+ this._scheduled = false;
1709
+ this._lastUpdateTime = -TIME_PERIOD;
1710
+ _ctx.onDispose(async () => {
1711
+ await this._promise;
1712
+ });
1713
+ }
1547
1714
  };
1548
1715
  export {
1549
1716
  CancellableObservableProvider,
@@ -1566,29 +1733,30 @@ export {
1566
1733
  UpdateScheduler,
1567
1734
  addEventListener,
1568
1735
  addListener,
1569
- asyncChain,
1570
1736
  asyncReturn,
1571
1737
  asyncTimeout,
1738
+ chain,
1572
1739
  combine,
1573
- createPromiseFromCallback,
1574
1740
  debounce,
1741
+ debounceAndThrottle,
1575
1742
  dumpLeaks,
1576
1743
  interval,
1577
1744
  latch,
1578
1745
  makePushIterable,
1579
1746
  observableError,
1580
1747
  onEvent,
1748
+ promiseFromCallback,
1581
1749
  runInContext,
1582
1750
  runInContextAsync,
1583
1751
  scheduleExponentialBackoffTaskInterval,
1584
1752
  scheduleMicroTask,
1585
1753
  scheduleTask,
1586
1754
  scheduleTaskInterval,
1587
- sink,
1588
1755
  sleep,
1589
1756
  sleepWithContext,
1590
1757
  streamToArray,
1591
1758
  synchronized,
1759
+ throttle,
1592
1760
  timeout,
1593
1761
  toError,
1594
1762
  trackLeaks,