@dxos/async 0.8.4-main.e098934 → 0.8.4-main.e250131250

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.
@@ -22,22 +22,9 @@ var chain = (chain2) => async (elements) => {
22
22
 
23
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
- }
38
25
  var combine = (...cleanupFns) => {
39
26
  return () => {
40
- cleanupFns.flat().forEach((cleanupFn) => cleanupFn());
27
+ cleanupFns.flat().filter((f) => typeof f === "function").forEach((cleanupFn) => cleanupFn());
41
28
  };
42
29
  };
43
30
  var timeout = (cb, ms = 0) => {
@@ -53,19 +40,21 @@ var addEventListener = (target, type, listener, options) => {
53
40
  return () => target.removeEventListener(type, listener, options);
54
41
  };
55
42
  var SubscriptionList = class {
56
- add(cb) {
57
- this._cleanups.push(cb);
43
+ _cleanups = [];
44
+ add(...cb) {
45
+ this._cleanups.push(...cb);
58
46
  return this;
59
47
  }
60
48
  clear() {
61
49
  this._cleanups.forEach((cb) => cb());
62
50
  this._cleanups.length = 0;
63
51
  }
64
- constructor() {
65
- _define_property(this, "_cleanups", []);
66
- }
67
52
  };
68
53
  var SubscriptionSet = class {
54
+ _cleanupMap;
55
+ constructor(keyProjection) {
56
+ this._cleanupMap = new ComplexMap(keyProjection);
57
+ }
69
58
  set(key, cb) {
70
59
  this._cleanupMap.set(key, cb);
71
60
  return this;
@@ -74,36 +63,58 @@ var SubscriptionSet = class {
74
63
  this._cleanupMap.forEach((cb) => cb());
75
64
  this._cleanupMap.clear();
76
65
  }
77
- constructor(keyProjection) {
78
- _define_property(this, "_cleanupMap", void 0);
79
- this._cleanupMap = new ComplexMap(keyProjection);
80
- }
81
66
  };
82
67
 
83
68
  // src/debounce.ts
84
- 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) => {
85
86
  let t;
86
87
  return (...args) => {
87
88
  clearTimeout(t);
88
- t = setTimeout(() => cb(...args), delay);
89
+ t = setTimeout(() => cb(...args), delay2);
89
90
  };
90
91
  };
91
- var throttle = (cb, delay = 100) => {
92
+ var throttle = (cb, delay2 = 100) => {
92
93
  let lastCall = 0;
93
94
  return (...args) => {
94
95
  const now = Date.now();
95
- if (now - lastCall >= delay) {
96
+ if (now - lastCall >= delay2) {
96
97
  cb(...args);
97
98
  lastCall = now;
98
99
  }
99
100
  };
100
101
  };
101
- var debounceAndThrottle = (cb, delay = 100) => {
102
- const debounced = debounce(cb, delay);
103
- const throttled = throttle(cb, delay);
102
+ var debounceAndThrottle = (cb, delay2 = 100) => {
103
+ let timeout2;
104
+ let lastCall = 0;
104
105
  return (...args) => {
105
- debounced(...args);
106
- 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
+ }
107
118
  };
108
119
  };
109
120
 
@@ -157,6 +168,9 @@ var sleepWithContext = (ctx, ms) => {
157
168
  };
158
169
  var asyncReturn = () => sleep(0);
159
170
  var asyncTimeout = async (promise, timeout2, err) => {
171
+ if (typeof promise === "function") {
172
+ throw new Error("First argument must be a promise.");
173
+ }
160
174
  let timeoutId;
161
175
  const throwable = err === void 0 || typeof err === "string" ? new TimeoutError(timeout2, err) : err;
162
176
  const timeoutPromise = new Promise((resolve, reject) => {
@@ -165,9 +179,8 @@ var asyncTimeout = async (promise, timeout2, err) => {
165
179
  }, timeout2);
166
180
  unrefTimeout(timeoutId);
167
181
  });
168
- const conditionTimeout = typeof promise === "function" ? promiseFromCallback(promise) : promise;
169
182
  return await Promise.race([
170
- conditionTimeout,
183
+ promise,
171
184
  timeoutPromise
172
185
  ]).finally(() => {
173
186
  clearTimeout(timeoutId);
@@ -204,19 +217,6 @@ var waitForEvent = (eventEmitter, eventName, test, timeout2, error) => {
204
217
 
205
218
  // src/events.ts
206
219
  import { Context } from "@dxos/context";
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
220
  var __dxlog_file = "/__w/dxos/dxos/packages/common/async/src/events.ts";
221
221
  var DO_NOT_ERROR_ON_ASYNC_CALLBACK = true;
222
222
  var Event = class _Event {
@@ -232,6 +232,8 @@ var Event = class _Event {
232
232
  });
233
233
  return event;
234
234
  }
235
+ _listeners = /* @__PURE__ */ new Set();
236
+ _effects = /* @__PURE__ */ new Set();
235
237
  /**
236
238
  * Emit an event.
237
239
  * In most cases should only be called by the class or entity containing the event.
@@ -473,12 +475,30 @@ var Event = class _Event {
473
475
  handle.cleanup = void 0;
474
476
  }
475
477
  }
476
- constructor() {
477
- _define_property2(this, "_listeners", /* @__PURE__ */ new Set());
478
- _define_property2(this, "_effects", /* @__PURE__ */ new Set());
479
- }
480
478
  };
481
479
  var EventListener = class {
480
+ ctx;
481
+ once;
482
+ weak;
483
+ callback;
484
+ _clearDispose = void 0;
485
+ constructor(event, listener, ctx, once, weak) {
486
+ this.ctx = ctx;
487
+ this.once = once;
488
+ this.weak = weak;
489
+ this._clearDispose = ctx.onDispose(() => {
490
+ event._removeListener(this);
491
+ });
492
+ if (weak) {
493
+ this.callback = new WeakRef(listener);
494
+ weakListeners().registry?.register(listener, {
495
+ event: new WeakRef(event),
496
+ listener: this
497
+ }, this);
498
+ } else {
499
+ this.callback = listener;
500
+ }
501
+ }
482
502
  derefCallback() {
483
503
  return this.weak ? this.callback.deref() : this.callback;
484
504
  }
@@ -508,29 +528,6 @@ var EventListener = class {
508
528
  this._clearDispose?.();
509
529
  weakListeners().registry?.unregister(this);
510
530
  }
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
- }
534
531
  };
535
532
  var weakListenersState = null;
536
533
  var FINALIZATION_REGISTRY_SUPPORTED = !!globalThis.FinalizationRegistry;
@@ -540,9 +537,9 @@ var weakListeners = () => {
540
537
  registry: void 0
541
538
  };
542
539
  }
543
- weakListenersState ?? (weakListenersState = new FinalizationRegistry(({ event, listener }) => {
540
+ weakListenersState ??= new FinalizationRegistry(({ event, listener }) => {
544
541
  event.deref()?._removeListener(listener);
545
- }));
542
+ });
546
543
  return {
547
544
  registry: weakListenersState
548
545
  };
@@ -551,20 +548,10 @@ var weakListeners = () => {
551
548
  // src/mutex.ts
552
549
  import "@dxos/util";
553
550
  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
561
- });
562
- } else {
563
- obj[key] = value;
564
- }
565
- return obj;
566
- }
567
551
  var Mutex = class {
552
+ _queue = Promise.resolve();
553
+ _queueLength = 0;
554
+ _tag = null;
568
555
  get tag() {
569
556
  return this._tag;
570
557
  }
@@ -608,13 +595,12 @@ var Mutex = class {
608
595
  guard.release();
609
596
  }
610
597
  }
611
- constructor() {
612
- _define_property3(this, "_queue", Promise.resolve());
613
- _define_property3(this, "_queueLength", 0);
614
- _define_property3(this, "_tag", null);
615
- }
616
598
  };
617
599
  var MutexGuard = class {
600
+ _release;
601
+ constructor(_release) {
602
+ this._release = _release;
603
+ }
618
604
  /**
619
605
  * Releases the lock.
620
606
  */
@@ -624,19 +610,14 @@ var MutexGuard = class {
624
610
  [Symbol.dispose]() {
625
611
  this.release();
626
612
  }
627
- constructor(_release) {
628
- _define_property3(this, "_release", void 0);
629
- this._release = _release;
630
- }
631
613
  };
632
- var classMutexSymbol = Symbol("class-mutex");
614
+ var classMutexSymbol = /* @__PURE__ */ Symbol("class-mutex");
633
615
  var FORCE_DISABLE_WARNING = false;
634
616
  var enableWarning = !FORCE_DISABLE_WARNING && globalThis.mochaExecutor;
635
617
  var synchronized = (target, propertyName, descriptor) => {
636
618
  const method = descriptor.value;
637
619
  descriptor.value = async function synchronizedMethod(...args) {
638
- var _classMutexSymbol;
639
- const mutex = this[_classMutexSymbol = classMutexSymbol] ?? (this[_classMutexSymbol] = new Mutex());
620
+ const mutex = this[classMutexSymbol] ??= new Mutex();
640
621
  const tag = `${target.constructor.name}.${propertyName}`;
641
622
  let guard;
642
623
  if (!enableWarning) {
@@ -661,19 +642,6 @@ import PushStream from "zen-push";
661
642
 
662
643
  // src/trigger.ts
663
644
  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
645
  var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/trigger.ts";
678
646
  var trigger = (timeout2) => {
679
647
  let callback;
@@ -690,13 +658,24 @@ var trigger = (timeout2) => {
690
658
  resolver
691
659
  ];
692
660
  };
693
- var TriggerState = /* @__PURE__ */ function(TriggerState2) {
661
+ var TriggerState = /* @__PURE__ */ (function(TriggerState2) {
694
662
  TriggerState2["WAITING"] = "WAITING";
695
663
  TriggerState2["RESOLVED"] = "RESOLVED";
696
664
  TriggerState2["REJECTED"] = "REJECTED";
697
665
  return TriggerState2;
698
- }({});
666
+ })({});
699
667
  var Trigger = class {
668
+ _options;
669
+ _promise;
670
+ _resolve;
671
+ _reject;
672
+ _state = "WAITING";
673
+ constructor(_options = {
674
+ autoReset: false
675
+ }) {
676
+ this._options = _options;
677
+ this.reset();
678
+ }
700
679
  get state() {
701
680
  return this._state;
702
681
  }
@@ -753,18 +732,6 @@ var Trigger = class {
753
732
  }
754
733
  return this;
755
734
  }
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
- }
768
735
  };
769
736
  var latch = ({ count = 1, timeout: timeout2 } = {}) => {
770
737
  invariant(count >= 0, void 0, {
@@ -814,20 +781,16 @@ var latch = ({ count = 1, timeout: timeout2 } = {}) => {
814
781
  };
815
782
 
816
783
  // 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;
827
- }
828
- return obj;
829
- }
830
784
  var MulticastObservable = class _MulticastObservable extends Observable {
785
+ _value;
786
+ _observers = /* @__PURE__ */ new Set();
787
+ _observable;
788
+ _completed = new Trigger();
789
+ constructor(subscriber, _value) {
790
+ super((observer) => this._subscribe(observer)), this._value = _value;
791
+ this._observable = typeof subscriber === "function" ? new Observable(subscriber) : subscriber;
792
+ this._observable.subscribe(this._handlers);
793
+ }
831
794
  static from(value, initialValue) {
832
795
  if ("emit" in value) {
833
796
  return new _MulticastObservable((observer) => {
@@ -908,42 +871,30 @@ var MulticastObservable = class _MulticastObservable extends Observable {
908
871
  this._observers.delete(observer);
909
872
  };
910
873
  }
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
- }
874
+ _handlers = {
875
+ next: (value) => {
876
+ this._value = value;
877
+ this._observers.forEach((observer) => observer.next?.(value));
878
+ },
879
+ error: (err) => {
880
+ this._observers.forEach((observer) => observer.error?.(err));
881
+ },
882
+ complete: () => {
883
+ this._completed.wake();
884
+ this._observers.forEach((observer) => observer.complete?.());
885
+ }
886
+ };
928
887
  };
929
888
  var EMPTY_OBSERVABLE = MulticastObservable.of(null);
930
889
 
931
890
  // src/observable-value.ts
932
891
  import { createSetDispatch } from "@dxos/util";
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
940
- });
941
- } else {
942
- obj[key] = value;
943
- }
944
- return obj;
945
- }
946
892
  var ObservableProvider = class {
893
+ _handlers = /* @__PURE__ */ new Set();
894
+ _proxy = createSetDispatch({
895
+ handlers: this._handlers
896
+ });
897
+ _value;
947
898
  /**
948
899
  * Proxy used to dispatch callbacks to each subscription.
949
900
  */
@@ -962,15 +913,13 @@ var ObservableProvider = class {
962
913
  this._handlers.delete(handler);
963
914
  };
964
915
  }
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
- }
972
916
  };
973
917
  var CancellableObservableProvider = class extends ObservableProvider {
918
+ _handleCancel;
919
+ _cancelled = false;
920
+ constructor(_handleCancel) {
921
+ super(), this._handleCancel = _handleCancel;
922
+ }
974
923
  get cancelled() {
975
924
  return this._cancelled;
976
925
  }
@@ -982,9 +931,6 @@ var CancellableObservableProvider = class extends ObservableProvider {
982
931
  await this._handleCancel?.();
983
932
  this.callback.onCancelled?.();
984
933
  }
985
- constructor(_handleCancel) {
986
- super(), _define_property6(this, "_handleCancel", void 0), _define_property6(this, "_cancelled", void 0), this._handleCancel = _handleCancel, this._cancelled = false;
987
- }
988
934
  };
989
935
 
990
936
  // src/persistent-lifecycle.ts
@@ -993,7 +939,7 @@ import { warnAfterTimeout as warnAfterTimeout2 } from "@dxos/debug";
993
939
  import { log as log2 } from "@dxos/log";
994
940
 
995
941
  // src/task-scheduling.ts
996
- import { ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
942
+ import { Context as Context2, ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
997
943
  import { StackTrace as StackTrace2 } from "@dxos/debug";
998
944
 
999
945
  // src/track-leaks.ts
@@ -1002,7 +948,7 @@ import { log } from "@dxos/log";
1002
948
  var __dxlog_file3 = "/__w/dxos/dxos/packages/common/async/src/track-leaks.ts";
1003
949
  var enabled = typeof process !== "undefined" && !!process.env.DX_TRACK_LEAKS;
1004
950
  var openResources = /* @__PURE__ */ new Set();
1005
- var handleSymbol = Symbol("checkLeaksHandle");
951
+ var handleSymbol = /* @__PURE__ */ Symbol("checkLeaksHandle");
1006
952
  var trackResource = (resourceProvider) => {
1007
953
  if (!enabled) {
1008
954
  return () => {
@@ -1081,20 +1027,17 @@ if (enabled) {
1081
1027
  }
1082
1028
 
1083
1029
  // 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;
1094
- }
1095
- return obj;
1096
- }
1030
+ var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/task-scheduling.ts";
1097
1031
  var DeferredTask = class {
1032
+ _ctx;
1033
+ _callback;
1034
+ _scheduled = false;
1035
+ _currentTask = null;
1036
+ _nextTask = new Trigger();
1037
+ constructor(_ctx, _callback) {
1038
+ this._ctx = _ctx;
1039
+ this._callback = _callback;
1040
+ }
1098
1041
  get scheduled() {
1099
1042
  return this._scheduled;
1100
1043
  }
@@ -1133,17 +1076,81 @@ var DeferredTask = class {
1133
1076
  async join() {
1134
1077
  await this._currentTask;
1135
1078
  }
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();
1079
+ };
1080
+ var AsyncTask = class {
1081
+ #callback;
1082
+ #ctx = void 0;
1083
+ #scheduled = false;
1084
+ #currentTask = null;
1085
+ #nextTask = new Trigger();
1086
+ constructor(callback) {
1087
+ this.#callback = callback;
1088
+ }
1089
+ get scheduled() {
1090
+ return this.#scheduled;
1091
+ }
1092
+ /**
1093
+ * Context of the resource that owns the task.
1094
+ * When the context is disposed, the task is cancelled and cannot be scheduled again.
1095
+ */
1096
+ open() {
1097
+ this.#ctx = new Context2(void 0, {
1098
+ F: __dxlog_file4,
1099
+ L: 102
1100
+ });
1101
+ }
1102
+ /**
1103
+ * Closes the task and waits for it to finish if it is running.
1104
+ */
1105
+ async close() {
1106
+ await this.#ctx?.dispose();
1107
+ await this.join();
1108
+ this.#ctx = void 0;
1109
+ }
1110
+ [Symbol.asyncDispose]() {
1111
+ return this.close();
1112
+ }
1113
+ /**
1114
+ * Schedule the task to run asynchronously.
1115
+ */
1116
+ // TODO(dmaretskyi): Add scheduleAt. Where the earlier time will override the later one.
1117
+ schedule() {
1118
+ if (!this.#ctx || this.#ctx.disposed) {
1119
+ throw new Error("AsyncTask not open");
1120
+ }
1121
+ if (this.#scheduled) {
1122
+ return;
1123
+ }
1124
+ scheduleTask(this.#ctx, async () => {
1125
+ await this.#currentTask;
1126
+ if (!this.#ctx || this.#ctx.disposed) {
1127
+ return;
1128
+ }
1129
+ this.#scheduled = false;
1130
+ const completionTrigger = this.#nextTask;
1131
+ this.#nextTask = new Trigger();
1132
+ this.#currentTask = runInContextAsync(this.#ctx, () => this.#callback()).then(() => {
1133
+ completionTrigger.wake();
1134
+ });
1135
+ });
1136
+ this.#scheduled = true;
1137
+ }
1138
+ /**
1139
+ * Schedule the task to run and wait for it to finish.
1140
+ */
1141
+ async runBlocking() {
1142
+ if (this.#ctx?.disposed) {
1143
+ throw new ContextDisposedError2();
1144
+ }
1145
+ this.schedule();
1146
+ await this.#nextTask.wait();
1147
+ }
1148
+ /**
1149
+ * Waits for the current task to finish if it is running.
1150
+ * Does not schedule a new task.
1151
+ */
1152
+ async join() {
1153
+ await this.#currentTask;
1147
1154
  }
1148
1155
  };
1149
1156
  var runInContext = (ctx, fn) => {
@@ -1225,29 +1232,30 @@ var scheduleExponentialBackoffTaskInterval = (ctx, task, initialInterval) => {
1225
1232
  };
1226
1233
 
1227
1234
  // 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
- }
1241
1235
  function _ts_decorate(decorators, target, key, desc) {
1242
1236
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1243
1237
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1244
1238
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1245
1239
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1246
1240
  }
1247
- var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
1241
+ var __dxlog_file5 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
1248
1242
  var INIT_RESTART_DELAY = 100;
1249
1243
  var DEFAULT_MAX_RESTART_DELAY = 5e3;
1250
1244
  var PersistentLifecycle = class extends Resource {
1245
+ _start;
1246
+ _stop;
1247
+ _onRestart;
1248
+ _maxRestartDelay;
1249
+ _currentState = void 0;
1250
+ _restartTask = void 0;
1251
+ _restartAfter = 0;
1252
+ constructor({ start, stop, onRestart, maxRestartDelay = DEFAULT_MAX_RESTART_DELAY }) {
1253
+ super();
1254
+ this._start = start;
1255
+ this._stop = stop;
1256
+ this._onRestart = onRestart;
1257
+ this._maxRestartDelay = maxRestartDelay;
1258
+ }
1251
1259
  get state() {
1252
1260
  return this._currentState;
1253
1261
  }
@@ -1259,7 +1267,7 @@ var PersistentLifecycle = class extends Resource {
1259
1267
  log2.warn("Restart failed", {
1260
1268
  err
1261
1269
  }, {
1262
- F: __dxlog_file4,
1270
+ F: __dxlog_file5,
1263
1271
  L: 72,
1264
1272
  S: this,
1265
1273
  C: (f, a) => f(...a)
@@ -1271,7 +1279,7 @@ var PersistentLifecycle = class extends Resource {
1271
1279
  log2.warn("Start failed", {
1272
1280
  err
1273
1281
  }, {
1274
- F: __dxlog_file4,
1282
+ F: __dxlog_file5,
1275
1283
  L: 78,
1276
1284
  S: this,
1277
1285
  C: (f, a) => f(...a)
@@ -1289,7 +1297,7 @@ var PersistentLifecycle = class extends Resource {
1289
1297
  log2(`restarting in ${this._restartAfter}ms`, {
1290
1298
  state: this._lifecycleState
1291
1299
  }, {
1292
- F: __dxlog_file4,
1300
+ F: __dxlog_file5,
1293
1301
  L: 91,
1294
1302
  S: this,
1295
1303
  C: (f, a) => f(...a)
@@ -1312,7 +1320,7 @@ var PersistentLifecycle = class extends Resource {
1312
1320
  await this._stop(this._currentState);
1313
1321
  } catch (err) {
1314
1322
  log2.catch(err, void 0, {
1315
- F: __dxlog_file4,
1323
+ F: __dxlog_file5,
1316
1324
  L: 113,
1317
1325
  S: this,
1318
1326
  C: (f, a) => f(...a)
@@ -1330,13 +1338,6 @@ var PersistentLifecycle = class extends Resource {
1330
1338
  }
1331
1339
  this._restartTask.schedule();
1332
1340
  }
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
- }
1340
1341
  };
1341
1342
  _ts_decorate([
1342
1343
  synchronized
@@ -1347,7 +1348,7 @@ _ts_decorate([
1347
1348
 
1348
1349
  // src/push-iterable.ts
1349
1350
  import { invariant as invariant2 } from "@dxos/invariant";
1350
- var __dxlog_file5 = "/__w/dxos/dxos/packages/common/async/src/push-iterable.ts";
1351
+ var __dxlog_file6 = "/__w/dxos/dxos/packages/common/async/src/push-iterable.ts";
1351
1352
  var makePushIterable = () => {
1352
1353
  const buf = [];
1353
1354
  const trigger2 = new Trigger({
@@ -1362,7 +1363,7 @@ var makePushIterable = () => {
1362
1363
  }
1363
1364
  const item = buf.shift();
1364
1365
  invariant2(item, void 0, {
1365
- F: __dxlog_file5,
1366
+ F: __dxlog_file6,
1366
1367
  L: 42,
1367
1368
  S: this,
1368
1369
  A: [
@@ -1455,19 +1456,6 @@ var streamToArray = (stream) => {
1455
1456
 
1456
1457
  // src/test-stream.ts
1457
1458
  import { Duplex } from "node:stream";
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;
1468
- }
1469
- return obj;
1470
- }
1471
1459
  var TestStream = class extends Duplex {
1472
1460
  static async assertConnectivity(stream1, stream2, { timeout: timeout2 = 200 } = {}) {
1473
1461
  stream1.push("ping");
@@ -1481,6 +1469,8 @@ var TestStream = class extends Duplex {
1481
1469
  })
1482
1470
  ]);
1483
1471
  }
1472
+ _received = Buffer.alloc(0);
1473
+ _onWrite = new Event();
1484
1474
  _write(chunk, encoding, callback) {
1485
1475
  this._received = Buffer.concat([
1486
1476
  this._received,
@@ -1495,9 +1485,6 @@ var TestStream = class extends Duplex {
1495
1485
  const dataBuffer = Buffer.isBuffer(data) ? data : Buffer.from(data);
1496
1486
  return asyncTimeout(this._onWrite.waitForCondition(() => this._received.equals(dataBuffer)), timeout2);
1497
1487
  }
1498
- constructor(...args) {
1499
- super(...args), _define_property9(this, "_received", Buffer.alloc(0)), _define_property9(this, "_onWrite", new Event());
1500
- }
1501
1488
  };
1502
1489
 
1503
1490
  // src/testing.ts
@@ -1560,20 +1547,14 @@ var untilError = (cb) => {
1560
1547
  };
1561
1548
 
1562
1549
  // 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;
1573
- }
1574
- return obj;
1575
- }
1576
1550
  var Timer = class {
1551
+ _callback;
1552
+ _state = new Event();
1553
+ _timer;
1554
+ _count = 0;
1555
+ constructor(_callback) {
1556
+ this._callback = _callback;
1557
+ }
1577
1558
  get state() {
1578
1559
  return this._state;
1579
1560
  }
@@ -1613,33 +1594,29 @@ var Timer = class {
1613
1594
  this._state.emit(false);
1614
1595
  return this;
1615
1596
  }
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
- }
1625
1597
  };
1626
1598
 
1627
1599
  // 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
1635
- });
1636
- } else {
1637
- obj[key] = value;
1638
- }
1639
- return obj;
1640
- }
1641
1600
  var TIME_PERIOD = 1e3;
1642
1601
  var UpdateScheduler = class {
1602
+ _ctx;
1603
+ _callback;
1604
+ _params;
1605
+ /**
1606
+ * Promise that resolves when the callback is done.
1607
+ * Never rejects.
1608
+ */
1609
+ _promise = null;
1610
+ _scheduled = false;
1611
+ _lastUpdateTime = -TIME_PERIOD;
1612
+ constructor(_ctx, _callback, _params = {}) {
1613
+ this._ctx = _ctx;
1614
+ this._callback = _callback;
1615
+ this._params = _params;
1616
+ _ctx.onDispose(async () => {
1617
+ await this._promise;
1618
+ });
1619
+ }
1643
1620
  trigger() {
1644
1621
  if (this._scheduled) {
1645
1622
  return;
@@ -1648,13 +1625,13 @@ var UpdateScheduler = class {
1648
1625
  await this._promise;
1649
1626
  if (this._params.maxFrequency) {
1650
1627
  const now = performance.now();
1651
- const delay = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
1652
- if (delay > 0) {
1628
+ const delay2 = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
1629
+ if (delay2 > 0) {
1653
1630
  await new Promise((resolve) => {
1654
1631
  const timeoutId = setTimeout(() => {
1655
1632
  clearContext();
1656
1633
  resolve();
1657
- }, delay);
1634
+ }, delay2);
1658
1635
  const clearContext = this._ctx.onDispose(() => {
1659
1636
  clearTimeout(timeoutId);
1660
1637
  resolve();
@@ -1696,25 +1673,9 @@ var UpdateScheduler = class {
1696
1673
  this._promise = this._callback();
1697
1674
  await this._promise;
1698
1675
  }
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
- }
1716
1676
  };
1717
1677
  export {
1678
+ AsyncTask,
1718
1679
  CancellableObservableProvider,
1719
1680
  DeferredTask,
1720
1681
  Event,
@@ -1741,6 +1702,7 @@ export {
1741
1702
  combine,
1742
1703
  debounce,
1743
1704
  debounceAndThrottle,
1705
+ delay,
1744
1706
  dumpLeaks,
1745
1707
  interval,
1746
1708
  latch,