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