@dxos/async 0.8.4-main.dedc0f3 → 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.
- package/dist/lib/browser/index.mjs +267 -305
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +267 -305
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/cleanup.d.ts +3 -2
- package/dist/types/src/cleanup.d.ts.map +1 -1
- package/dist/types/src/debounce.d.ts +29 -9
- package/dist/types/src/debounce.d.ts.map +1 -1
- package/dist/types/src/observable-value.d.ts.map +1 -1
- package/dist/types/src/persistent-lifecycle.d.ts +2 -2
- package/dist/types/src/persistent-lifecycle.d.ts.map +1 -1
- package/dist/types/src/task-scheduling.d.ts +29 -1
- package/dist/types/src/task-scheduling.d.ts.map +1 -1
- package/dist/types/src/timeout.d.ts +1 -1
- package/dist/types/src/timeout.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -7
- package/src/cleanup.ts +8 -4
- package/src/debounce.ts +69 -16
- package/src/observable-value.ts +4 -2
- package/src/persistent-lifecycle.ts +2 -2
- package/src/task-scheduling.ts +95 -1
- package/src/timeout.ts +6 -9
|
@@ -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
|
-
|
|
57
|
-
|
|
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
|
|
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),
|
|
89
|
+
t = setTimeout(() => cb(...args), delay2);
|
|
89
90
|
};
|
|
90
91
|
};
|
|
91
|
-
var throttle = (cb,
|
|
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 >=
|
|
96
|
+
if (now - lastCall >= delay2) {
|
|
96
97
|
cb(...args);
|
|
97
98
|
lastCall = now;
|
|
98
99
|
}
|
|
99
100
|
};
|
|
100
101
|
};
|
|
101
|
-
var debounceAndThrottle = (cb,
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
var debounceAndThrottle = (cb, delay2 = 100) => {
|
|
103
|
+
let timeout2;
|
|
104
|
+
let lastCall = 0;
|
|
104
105
|
return (...args) => {
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
this
|
|
1145
|
-
|
|
1146
|
-
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
1652
|
-
if (
|
|
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
|
-
},
|
|
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,
|