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