@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.
- 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
|
@@ -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
|
-
|
|
55
|
-
|
|
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
|
|
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),
|
|
87
|
+
t = setTimeout(() => cb(...args), delay2);
|
|
87
88
|
};
|
|
88
89
|
};
|
|
89
|
-
var throttle = (cb,
|
|
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 >=
|
|
94
|
+
if (now - lastCall >= delay2) {
|
|
94
95
|
cb(...args);
|
|
95
96
|
lastCall = now;
|
|
96
97
|
}
|
|
97
98
|
};
|
|
98
99
|
};
|
|
99
|
-
var debounceAndThrottle = (cb,
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
var debounceAndThrottle = (cb, delay2 = 100) => {
|
|
101
|
+
let timeout2;
|
|
102
|
+
let lastCall = 0;
|
|
102
103
|
return (...args) => {
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
this
|
|
1143
|
-
|
|
1144
|
-
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
1650
|
-
if (
|
|
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
|
-
},
|
|
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,
|