@dxos/async 0.8.4-main.ead640a → 0.8.4-main.effb148878
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/LICENSE +102 -5
- package/dist/lib/browser/index.mjs +269 -372
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +269 -372
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/callback.d.ts.map +1 -1
- package/dist/types/src/chain.d.ts.map +1 -1
- package/dist/types/src/cleanup.d.ts +2 -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/errors.d.ts.map +1 -1
- package/dist/types/src/event-emitter.d.ts.map +1 -1
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/mutex.d.ts.map +1 -1
- package/dist/types/src/observable-value.d.ts.map +1 -1
- package/dist/types/src/observable.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/stream-to-array.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/test-stream.d.ts.map +1 -1
- package/dist/types/src/testing.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/src/timer.d.ts.map +1 -1
- package/dist/types/src/track-leaks.d.ts.map +1 -1
- package/dist/types/src/trigger.d.ts.map +1 -1
- package/dist/types/src/update-scheduler.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -11
- package/src/cleanup.ts +7 -4
- package/src/debounce.ts +69 -16
- package/src/event-emitter.test.ts +0 -1
- package/src/observable-value.ts +4 -2
- package/src/persistent-lifecycle.ts +10 -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,20 +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
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/common/async/src/events.ts";
|
|
221
220
|
var DO_NOT_ERROR_ON_ASYNC_CALLBACK = true;
|
|
222
221
|
var Event = class _Event {
|
|
223
222
|
/**
|
|
@@ -232,6 +231,8 @@ var Event = class _Event {
|
|
|
232
231
|
});
|
|
233
232
|
return event;
|
|
234
233
|
}
|
|
234
|
+
_listeners = /* @__PURE__ */ new Set();
|
|
235
|
+
_effects = /* @__PURE__ */ new Set();
|
|
235
236
|
/**
|
|
236
237
|
* Emit an event.
|
|
237
238
|
* In most cases should only be called by the class or entity containing the event.
|
|
@@ -270,10 +271,7 @@ var Event = class _Event {
|
|
|
270
271
|
_ctx,
|
|
271
272
|
_callback
|
|
272
273
|
] : [
|
|
273
|
-
new Context(
|
|
274
|
-
F: __dxlog_file,
|
|
275
|
-
L: 132
|
|
276
|
-
}),
|
|
274
|
+
new Context(),
|
|
277
275
|
_ctx
|
|
278
276
|
];
|
|
279
277
|
const weak = !!options?.weak;
|
|
@@ -303,10 +301,7 @@ var Event = class _Event {
|
|
|
303
301
|
_ctx,
|
|
304
302
|
_callback
|
|
305
303
|
] : [
|
|
306
|
-
new Context(
|
|
307
|
-
F: __dxlog_file,
|
|
308
|
-
L: 169
|
|
309
|
-
}),
|
|
304
|
+
new Context(),
|
|
310
305
|
_ctx
|
|
311
306
|
];
|
|
312
307
|
const listener = new EventListener(this, callback, ctx, true, false);
|
|
@@ -473,12 +468,30 @@ var Event = class _Event {
|
|
|
473
468
|
handle.cleanup = void 0;
|
|
474
469
|
}
|
|
475
470
|
}
|
|
476
|
-
constructor() {
|
|
477
|
-
_define_property2(this, "_listeners", /* @__PURE__ */ new Set());
|
|
478
|
-
_define_property2(this, "_effects", /* @__PURE__ */ new Set());
|
|
479
|
-
}
|
|
480
471
|
};
|
|
481
472
|
var EventListener = class {
|
|
473
|
+
ctx;
|
|
474
|
+
once;
|
|
475
|
+
weak;
|
|
476
|
+
callback;
|
|
477
|
+
_clearDispose = void 0;
|
|
478
|
+
constructor(event, listener, ctx, once, weak) {
|
|
479
|
+
this.ctx = ctx;
|
|
480
|
+
this.once = once;
|
|
481
|
+
this.weak = weak;
|
|
482
|
+
this._clearDispose = ctx.onDispose(() => {
|
|
483
|
+
event._removeListener(this);
|
|
484
|
+
});
|
|
485
|
+
if (weak) {
|
|
486
|
+
this.callback = new WeakRef(listener);
|
|
487
|
+
weakListeners().registry?.register(listener, {
|
|
488
|
+
event: new WeakRef(event),
|
|
489
|
+
listener: this
|
|
490
|
+
}, this);
|
|
491
|
+
} else {
|
|
492
|
+
this.callback = listener;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
482
495
|
derefCallback() {
|
|
483
496
|
return this.weak ? this.callback.deref() : this.callback;
|
|
484
497
|
}
|
|
@@ -508,29 +521,6 @@ var EventListener = class {
|
|
|
508
521
|
this._clearDispose?.();
|
|
509
522
|
weakListeners().registry?.unregister(this);
|
|
510
523
|
}
|
|
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
524
|
};
|
|
535
525
|
var weakListenersState = null;
|
|
536
526
|
var FINALIZATION_REGISTRY_SUPPORTED = !!globalThis.FinalizationRegistry;
|
|
@@ -540,9 +530,9 @@ var weakListeners = () => {
|
|
|
540
530
|
registry: void 0
|
|
541
531
|
};
|
|
542
532
|
}
|
|
543
|
-
weakListenersState
|
|
533
|
+
weakListenersState ??= new FinalizationRegistry(({ event, listener }) => {
|
|
544
534
|
event.deref()?._removeListener(listener);
|
|
545
|
-
})
|
|
535
|
+
});
|
|
546
536
|
return {
|
|
547
537
|
registry: weakListenersState
|
|
548
538
|
};
|
|
@@ -551,20 +541,10 @@ var weakListeners = () => {
|
|
|
551
541
|
// src/mutex.ts
|
|
552
542
|
import "@dxos/util";
|
|
553
543
|
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
544
|
var Mutex = class {
|
|
545
|
+
_queue = Promise.resolve();
|
|
546
|
+
_queueLength = 0;
|
|
547
|
+
_tag = null;
|
|
568
548
|
get tag() {
|
|
569
549
|
return this._tag;
|
|
570
550
|
}
|
|
@@ -608,13 +588,12 @@ var Mutex = class {
|
|
|
608
588
|
guard.release();
|
|
609
589
|
}
|
|
610
590
|
}
|
|
611
|
-
constructor() {
|
|
612
|
-
_define_property3(this, "_queue", Promise.resolve());
|
|
613
|
-
_define_property3(this, "_queueLength", 0);
|
|
614
|
-
_define_property3(this, "_tag", null);
|
|
615
|
-
}
|
|
616
591
|
};
|
|
617
592
|
var MutexGuard = class {
|
|
593
|
+
_release;
|
|
594
|
+
constructor(_release) {
|
|
595
|
+
this._release = _release;
|
|
596
|
+
}
|
|
618
597
|
/**
|
|
619
598
|
* Releases the lock.
|
|
620
599
|
*/
|
|
@@ -624,19 +603,14 @@ var MutexGuard = class {
|
|
|
624
603
|
[Symbol.dispose]() {
|
|
625
604
|
this.release();
|
|
626
605
|
}
|
|
627
|
-
constructor(_release) {
|
|
628
|
-
_define_property3(this, "_release", void 0);
|
|
629
|
-
this._release = _release;
|
|
630
|
-
}
|
|
631
606
|
};
|
|
632
|
-
var classMutexSymbol = Symbol("class-mutex");
|
|
607
|
+
var classMutexSymbol = /* @__PURE__ */ Symbol("class-mutex");
|
|
633
608
|
var FORCE_DISABLE_WARNING = false;
|
|
634
609
|
var enableWarning = !FORCE_DISABLE_WARNING && globalThis.mochaExecutor;
|
|
635
610
|
var synchronized = (target, propertyName, descriptor) => {
|
|
636
611
|
const method = descriptor.value;
|
|
637
612
|
descriptor.value = async function synchronizedMethod(...args) {
|
|
638
|
-
|
|
639
|
-
const mutex = this[_classMutexSymbol = classMutexSymbol] ?? (this[_classMutexSymbol] = new Mutex());
|
|
613
|
+
const mutex = this[classMutexSymbol] ??= new Mutex();
|
|
640
614
|
const tag = `${target.constructor.name}.${propertyName}`;
|
|
641
615
|
let guard;
|
|
642
616
|
if (!enableWarning) {
|
|
@@ -661,20 +635,6 @@ import PushStream from "zen-push";
|
|
|
661
635
|
|
|
662
636
|
// src/trigger.ts
|
|
663
637
|
import { invariant } from "@dxos/invariant";
|
|
664
|
-
function _define_property4(obj, key, value) {
|
|
665
|
-
if (key in obj) {
|
|
666
|
-
Object.defineProperty(obj, key, {
|
|
667
|
-
value,
|
|
668
|
-
enumerable: true,
|
|
669
|
-
configurable: true,
|
|
670
|
-
writable: true
|
|
671
|
-
});
|
|
672
|
-
} else {
|
|
673
|
-
obj[key] = value;
|
|
674
|
-
}
|
|
675
|
-
return obj;
|
|
676
|
-
}
|
|
677
|
-
var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/trigger.ts";
|
|
678
638
|
var trigger = (timeout2) => {
|
|
679
639
|
let callback;
|
|
680
640
|
const promise = new Promise((resolve, reject) => {
|
|
@@ -697,6 +657,17 @@ var TriggerState = /* @__PURE__ */ (function(TriggerState2) {
|
|
|
697
657
|
return TriggerState2;
|
|
698
658
|
})({});
|
|
699
659
|
var Trigger = class {
|
|
660
|
+
_options;
|
|
661
|
+
_promise;
|
|
662
|
+
_resolve;
|
|
663
|
+
_reject;
|
|
664
|
+
_state = "WAITING";
|
|
665
|
+
constructor(_options = {
|
|
666
|
+
autoReset: false
|
|
667
|
+
}) {
|
|
668
|
+
this._options = _options;
|
|
669
|
+
this.reset();
|
|
670
|
+
}
|
|
700
671
|
get state() {
|
|
701
672
|
return this._state;
|
|
702
673
|
}
|
|
@@ -753,29 +724,9 @@ var Trigger = class {
|
|
|
753
724
|
}
|
|
754
725
|
return this;
|
|
755
726
|
}
|
|
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
727
|
};
|
|
769
728
|
var latch = ({ count = 1, timeout: timeout2 } = {}) => {
|
|
770
|
-
invariant(count >= 0
|
|
771
|
-
F: __dxlog_file2,
|
|
772
|
-
L: 139,
|
|
773
|
-
S: void 0,
|
|
774
|
-
A: [
|
|
775
|
-
"count >= 0",
|
|
776
|
-
""
|
|
777
|
-
]
|
|
778
|
-
});
|
|
729
|
+
invariant(count >= 0);
|
|
779
730
|
let t;
|
|
780
731
|
let doResolve;
|
|
781
732
|
let doReject;
|
|
@@ -814,20 +765,16 @@ var latch = ({ count = 1, timeout: timeout2 } = {}) => {
|
|
|
814
765
|
};
|
|
815
766
|
|
|
816
767
|
// 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
768
|
var MulticastObservable = class _MulticastObservable extends Observable {
|
|
769
|
+
_value;
|
|
770
|
+
_observers = /* @__PURE__ */ new Set();
|
|
771
|
+
_observable;
|
|
772
|
+
_completed = new Trigger();
|
|
773
|
+
constructor(subscriber, _value) {
|
|
774
|
+
super((observer) => this._subscribe(observer)), this._value = _value;
|
|
775
|
+
this._observable = typeof subscriber === "function" ? new Observable(subscriber) : subscriber;
|
|
776
|
+
this._observable.subscribe(this._handlers);
|
|
777
|
+
}
|
|
831
778
|
static from(value, initialValue) {
|
|
832
779
|
if ("emit" in value) {
|
|
833
780
|
return new _MulticastObservable((observer) => {
|
|
@@ -908,42 +855,30 @@ var MulticastObservable = class _MulticastObservable extends Observable {
|
|
|
908
855
|
this._observers.delete(observer);
|
|
909
856
|
};
|
|
910
857
|
}
|
|
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
|
-
}
|
|
858
|
+
_handlers = {
|
|
859
|
+
next: (value) => {
|
|
860
|
+
this._value = value;
|
|
861
|
+
this._observers.forEach((observer) => observer.next?.(value));
|
|
862
|
+
},
|
|
863
|
+
error: (err) => {
|
|
864
|
+
this._observers.forEach((observer) => observer.error?.(err));
|
|
865
|
+
},
|
|
866
|
+
complete: () => {
|
|
867
|
+
this._completed.wake();
|
|
868
|
+
this._observers.forEach((observer) => observer.complete?.());
|
|
869
|
+
}
|
|
870
|
+
};
|
|
928
871
|
};
|
|
929
872
|
var EMPTY_OBSERVABLE = MulticastObservable.of(null);
|
|
930
873
|
|
|
931
874
|
// src/observable-value.ts
|
|
932
875
|
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
876
|
var ObservableProvider = class {
|
|
877
|
+
_handlers = /* @__PURE__ */ new Set();
|
|
878
|
+
_proxy = createSetDispatch({
|
|
879
|
+
handlers: this._handlers
|
|
880
|
+
});
|
|
881
|
+
_value;
|
|
947
882
|
/**
|
|
948
883
|
* Proxy used to dispatch callbacks to each subscription.
|
|
949
884
|
*/
|
|
@@ -962,15 +897,13 @@ var ObservableProvider = class {
|
|
|
962
897
|
this._handlers.delete(handler);
|
|
963
898
|
};
|
|
964
899
|
}
|
|
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
900
|
};
|
|
973
901
|
var CancellableObservableProvider = class extends ObservableProvider {
|
|
902
|
+
_handleCancel;
|
|
903
|
+
_cancelled = false;
|
|
904
|
+
constructor(_handleCancel) {
|
|
905
|
+
super(), this._handleCancel = _handleCancel;
|
|
906
|
+
}
|
|
974
907
|
get cancelled() {
|
|
975
908
|
return this._cancelled;
|
|
976
909
|
}
|
|
@@ -982,9 +915,6 @@ var CancellableObservableProvider = class extends ObservableProvider {
|
|
|
982
915
|
await this._handleCancel?.();
|
|
983
916
|
this.callback.onCancelled?.();
|
|
984
917
|
}
|
|
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
918
|
};
|
|
989
919
|
|
|
990
920
|
// src/persistent-lifecycle.ts
|
|
@@ -993,16 +923,15 @@ import { warnAfterTimeout as warnAfterTimeout2 } from "@dxos/debug";
|
|
|
993
923
|
import { log as log2 } from "@dxos/log";
|
|
994
924
|
|
|
995
925
|
// src/task-scheduling.ts
|
|
996
|
-
import { ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
|
|
926
|
+
import { Context as Context2, ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
|
|
997
927
|
import { StackTrace as StackTrace2 } from "@dxos/debug";
|
|
998
928
|
|
|
999
929
|
// src/track-leaks.ts
|
|
1000
930
|
import { StackTrace } from "@dxos/debug";
|
|
1001
931
|
import { log } from "@dxos/log";
|
|
1002
|
-
var __dxlog_file3 = "/__w/dxos/dxos/packages/common/async/src/track-leaks.ts";
|
|
1003
932
|
var enabled = typeof process !== "undefined" && !!process.env.DX_TRACK_LEAKS;
|
|
1004
933
|
var openResources = /* @__PURE__ */ new Set();
|
|
1005
|
-
var handleSymbol = Symbol("checkLeaksHandle");
|
|
934
|
+
var handleSymbol = /* @__PURE__ */ Symbol("checkLeaksHandle");
|
|
1006
935
|
var trackResource = (resourceProvider) => {
|
|
1007
936
|
if (!enabled) {
|
|
1008
937
|
return () => {
|
|
@@ -1049,31 +978,11 @@ var dumpLeaks = () => {
|
|
|
1049
978
|
if (!enabled) {
|
|
1050
979
|
return;
|
|
1051
980
|
}
|
|
1052
|
-
log.info(`Leaked resources ${openResources.size}
|
|
1053
|
-
F: __dxlog_file3,
|
|
1054
|
-
L: 82,
|
|
1055
|
-
S: void 0,
|
|
1056
|
-
C: (f, a) => f(...a)
|
|
1057
|
-
});
|
|
981
|
+
log.info(`Leaked resources ${openResources.size}:`);
|
|
1058
982
|
for (const resource of openResources) {
|
|
1059
|
-
log.info(`- ${resource.name} at
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
S: void 0,
|
|
1063
|
-
C: (f, a) => f(...a)
|
|
1064
|
-
});
|
|
1065
|
-
log.info(resource.openStack.getStack(1), void 0, {
|
|
1066
|
-
F: __dxlog_file3,
|
|
1067
|
-
L: 85,
|
|
1068
|
-
S: void 0,
|
|
1069
|
-
C: (f, a) => f(...a)
|
|
1070
|
-
});
|
|
1071
|
-
log.info("\n", void 0, {
|
|
1072
|
-
F: __dxlog_file3,
|
|
1073
|
-
L: 86,
|
|
1074
|
-
S: void 0,
|
|
1075
|
-
C: (f, a) => f(...a)
|
|
1076
|
-
});
|
|
983
|
+
log.info(`- ${resource.name} at`);
|
|
984
|
+
log.info(resource.openStack.getStack(1));
|
|
985
|
+
log.info("\n");
|
|
1077
986
|
}
|
|
1078
987
|
};
|
|
1079
988
|
if (enabled) {
|
|
@@ -1081,20 +990,16 @@ if (enabled) {
|
|
|
1081
990
|
}
|
|
1082
991
|
|
|
1083
992
|
// src/task-scheduling.ts
|
|
1084
|
-
function _define_property7(obj, key, value) {
|
|
1085
|
-
if (key in obj) {
|
|
1086
|
-
Object.defineProperty(obj, key, {
|
|
1087
|
-
value,
|
|
1088
|
-
enumerable: true,
|
|
1089
|
-
configurable: true,
|
|
1090
|
-
writable: true
|
|
1091
|
-
});
|
|
1092
|
-
} else {
|
|
1093
|
-
obj[key] = value;
|
|
1094
|
-
}
|
|
1095
|
-
return obj;
|
|
1096
|
-
}
|
|
1097
993
|
var DeferredTask = class {
|
|
994
|
+
_ctx;
|
|
995
|
+
_callback;
|
|
996
|
+
_scheduled = false;
|
|
997
|
+
_currentTask = null;
|
|
998
|
+
_nextTask = new Trigger();
|
|
999
|
+
constructor(_ctx, _callback) {
|
|
1000
|
+
this._ctx = _ctx;
|
|
1001
|
+
this._callback = _callback;
|
|
1002
|
+
}
|
|
1098
1003
|
get scheduled() {
|
|
1099
1004
|
return this._scheduled;
|
|
1100
1005
|
}
|
|
@@ -1133,17 +1038,78 @@ var DeferredTask = class {
|
|
|
1133
1038
|
async join() {
|
|
1134
1039
|
await this._currentTask;
|
|
1135
1040
|
}
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
this
|
|
1145
|
-
|
|
1146
|
-
|
|
1041
|
+
};
|
|
1042
|
+
var AsyncTask = class {
|
|
1043
|
+
#callback;
|
|
1044
|
+
#ctx = void 0;
|
|
1045
|
+
#scheduled = false;
|
|
1046
|
+
#currentTask = null;
|
|
1047
|
+
#nextTask = new Trigger();
|
|
1048
|
+
constructor(callback) {
|
|
1049
|
+
this.#callback = callback;
|
|
1050
|
+
}
|
|
1051
|
+
get scheduled() {
|
|
1052
|
+
return this.#scheduled;
|
|
1053
|
+
}
|
|
1054
|
+
/**
|
|
1055
|
+
* Context of the resource that owns the task.
|
|
1056
|
+
* When the context is disposed, the task is cancelled and cannot be scheduled again.
|
|
1057
|
+
*/
|
|
1058
|
+
open() {
|
|
1059
|
+
this.#ctx = new Context2();
|
|
1060
|
+
}
|
|
1061
|
+
/**
|
|
1062
|
+
* Closes the task and waits for it to finish if it is running.
|
|
1063
|
+
*/
|
|
1064
|
+
async close() {
|
|
1065
|
+
await this.#ctx?.dispose();
|
|
1066
|
+
await this.join();
|
|
1067
|
+
this.#ctx = void 0;
|
|
1068
|
+
}
|
|
1069
|
+
[Symbol.asyncDispose]() {
|
|
1070
|
+
return this.close();
|
|
1071
|
+
}
|
|
1072
|
+
/**
|
|
1073
|
+
* Schedule the task to run asynchronously.
|
|
1074
|
+
*/
|
|
1075
|
+
// TODO(dmaretskyi): Add scheduleAt. Where the earlier time will override the later one.
|
|
1076
|
+
schedule() {
|
|
1077
|
+
if (!this.#ctx || this.#ctx.disposed) {
|
|
1078
|
+
throw new Error("AsyncTask not open");
|
|
1079
|
+
}
|
|
1080
|
+
if (this.#scheduled) {
|
|
1081
|
+
return;
|
|
1082
|
+
}
|
|
1083
|
+
scheduleTask(this.#ctx, async () => {
|
|
1084
|
+
await this.#currentTask;
|
|
1085
|
+
if (!this.#ctx || this.#ctx.disposed) {
|
|
1086
|
+
return;
|
|
1087
|
+
}
|
|
1088
|
+
this.#scheduled = false;
|
|
1089
|
+
const completionTrigger = this.#nextTask;
|
|
1090
|
+
this.#nextTask = new Trigger();
|
|
1091
|
+
this.#currentTask = runInContextAsync(this.#ctx, () => this.#callback()).then(() => {
|
|
1092
|
+
completionTrigger.wake();
|
|
1093
|
+
});
|
|
1094
|
+
});
|
|
1095
|
+
this.#scheduled = true;
|
|
1096
|
+
}
|
|
1097
|
+
/**
|
|
1098
|
+
* Schedule the task to run and wait for it to finish.
|
|
1099
|
+
*/
|
|
1100
|
+
async runBlocking() {
|
|
1101
|
+
if (this.#ctx?.disposed) {
|
|
1102
|
+
throw new ContextDisposedError2();
|
|
1103
|
+
}
|
|
1104
|
+
this.schedule();
|
|
1105
|
+
await this.#nextTask.wait();
|
|
1106
|
+
}
|
|
1107
|
+
/**
|
|
1108
|
+
* Waits for the current task to finish if it is running.
|
|
1109
|
+
* Does not schedule a new task.
|
|
1110
|
+
*/
|
|
1111
|
+
async join() {
|
|
1112
|
+
await this.#currentTask;
|
|
1147
1113
|
}
|
|
1148
1114
|
};
|
|
1149
1115
|
var runInContext = (ctx, fn) => {
|
|
@@ -1225,29 +1191,29 @@ var scheduleExponentialBackoffTaskInterval = (ctx, task, initialInterval) => {
|
|
|
1225
1191
|
};
|
|
1226
1192
|
|
|
1227
1193
|
// 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
1194
|
function _ts_decorate(decorators, target, key, desc) {
|
|
1242
1195
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1243
1196
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1244
1197
|
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
1198
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1246
1199
|
}
|
|
1247
|
-
var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
|
|
1248
1200
|
var INIT_RESTART_DELAY = 100;
|
|
1249
1201
|
var DEFAULT_MAX_RESTART_DELAY = 5e3;
|
|
1250
1202
|
var PersistentLifecycle = class extends Resource {
|
|
1203
|
+
_start;
|
|
1204
|
+
_stop;
|
|
1205
|
+
_onRestart;
|
|
1206
|
+
_maxRestartDelay;
|
|
1207
|
+
_currentState = void 0;
|
|
1208
|
+
_restartTask = void 0;
|
|
1209
|
+
_restartAfter = 0;
|
|
1210
|
+
constructor({ start, stop, onRestart, maxRestartDelay = DEFAULT_MAX_RESTART_DELAY }) {
|
|
1211
|
+
super();
|
|
1212
|
+
this._start = start;
|
|
1213
|
+
this._stop = stop;
|
|
1214
|
+
this._onRestart = onRestart;
|
|
1215
|
+
this._maxRestartDelay = maxRestartDelay;
|
|
1216
|
+
}
|
|
1251
1217
|
get state() {
|
|
1252
1218
|
return this._currentState;
|
|
1253
1219
|
}
|
|
@@ -1256,25 +1222,21 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1256
1222
|
try {
|
|
1257
1223
|
await this._restart();
|
|
1258
1224
|
} catch (err) {
|
|
1225
|
+
if (this._ctx?.disposed) {
|
|
1226
|
+
return;
|
|
1227
|
+
}
|
|
1259
1228
|
log2.warn("Restart failed", {
|
|
1260
1229
|
err
|
|
1261
|
-
}, {
|
|
1262
|
-
F: __dxlog_file4,
|
|
1263
|
-
L: 72,
|
|
1264
|
-
S: this,
|
|
1265
|
-
C: (f, a) => f(...a)
|
|
1266
1230
|
});
|
|
1267
1231
|
this._restartTask?.schedule();
|
|
1268
1232
|
}
|
|
1269
1233
|
});
|
|
1270
1234
|
this._currentState = await this._start().catch((err) => {
|
|
1235
|
+
if (this._ctx?.disposed) {
|
|
1236
|
+
return void 0;
|
|
1237
|
+
}
|
|
1271
1238
|
log2.warn("Start failed", {
|
|
1272
1239
|
err
|
|
1273
|
-
}, {
|
|
1274
|
-
F: __dxlog_file4,
|
|
1275
|
-
L: 78,
|
|
1276
|
-
S: this,
|
|
1277
|
-
C: (f, a) => f(...a)
|
|
1278
1240
|
});
|
|
1279
1241
|
this._restartTask?.schedule();
|
|
1280
1242
|
return void 0;
|
|
@@ -1288,11 +1250,6 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1288
1250
|
async _restart() {
|
|
1289
1251
|
log2(`restarting in ${this._restartAfter}ms`, {
|
|
1290
1252
|
state: this._lifecycleState
|
|
1291
|
-
}, {
|
|
1292
|
-
F: __dxlog_file4,
|
|
1293
|
-
L: 91,
|
|
1294
|
-
S: this,
|
|
1295
|
-
C: (f, a) => f(...a)
|
|
1296
1253
|
});
|
|
1297
1254
|
await this._stopCurrentState();
|
|
1298
1255
|
if (this._lifecycleState !== LifecycleState.OPEN) {
|
|
@@ -1311,12 +1268,7 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1311
1268
|
try {
|
|
1312
1269
|
await this._stop(this._currentState);
|
|
1313
1270
|
} catch (err) {
|
|
1314
|
-
log2.catch(err
|
|
1315
|
-
F: __dxlog_file4,
|
|
1316
|
-
L: 113,
|
|
1317
|
-
S: this,
|
|
1318
|
-
C: (f, a) => f(...a)
|
|
1319
|
-
});
|
|
1271
|
+
log2.catch(err);
|
|
1320
1272
|
}
|
|
1321
1273
|
this._currentState = void 0;
|
|
1322
1274
|
}
|
|
@@ -1330,13 +1282,6 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1330
1282
|
}
|
|
1331
1283
|
this._restartTask.schedule();
|
|
1332
1284
|
}
|
|
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
1285
|
};
|
|
1341
1286
|
_ts_decorate([
|
|
1342
1287
|
synchronized
|
|
@@ -1347,7 +1292,6 @@ _ts_decorate([
|
|
|
1347
1292
|
|
|
1348
1293
|
// src/push-iterable.ts
|
|
1349
1294
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
1350
|
-
var __dxlog_file5 = "/__w/dxos/dxos/packages/common/async/src/push-iterable.ts";
|
|
1351
1295
|
var makePushIterable = () => {
|
|
1352
1296
|
const buf = [];
|
|
1353
1297
|
const trigger2 = new Trigger({
|
|
@@ -1361,15 +1305,7 @@ var makePushIterable = () => {
|
|
|
1361
1305
|
await trigger2.wait();
|
|
1362
1306
|
}
|
|
1363
1307
|
const item = buf.shift();
|
|
1364
|
-
invariant2(item
|
|
1365
|
-
F: __dxlog_file5,
|
|
1366
|
-
L: 42,
|
|
1367
|
-
S: this,
|
|
1368
|
-
A: [
|
|
1369
|
-
"item",
|
|
1370
|
-
""
|
|
1371
|
-
]
|
|
1372
|
-
});
|
|
1308
|
+
invariant2(item);
|
|
1373
1309
|
switch (item.kind) {
|
|
1374
1310
|
case "next":
|
|
1375
1311
|
return {
|
|
@@ -1455,19 +1391,6 @@ var streamToArray = (stream) => {
|
|
|
1455
1391
|
|
|
1456
1392
|
// src/test-stream.ts
|
|
1457
1393
|
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
1394
|
var TestStream = class extends Duplex {
|
|
1472
1395
|
static async assertConnectivity(stream1, stream2, { timeout: timeout2 = 200 } = {}) {
|
|
1473
1396
|
stream1.push("ping");
|
|
@@ -1481,6 +1404,8 @@ var TestStream = class extends Duplex {
|
|
|
1481
1404
|
})
|
|
1482
1405
|
]);
|
|
1483
1406
|
}
|
|
1407
|
+
_received = Buffer.alloc(0);
|
|
1408
|
+
_onWrite = new Event();
|
|
1484
1409
|
_write(chunk, encoding, callback) {
|
|
1485
1410
|
this._received = Buffer.concat([
|
|
1486
1411
|
this._received,
|
|
@@ -1495,9 +1420,6 @@ var TestStream = class extends Duplex {
|
|
|
1495
1420
|
const dataBuffer = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
1496
1421
|
return asyncTimeout(this._onWrite.waitForCondition(() => this._received.equals(dataBuffer)), timeout2);
|
|
1497
1422
|
}
|
|
1498
|
-
constructor(...args) {
|
|
1499
|
-
super(...args), _define_property9(this, "_received", Buffer.alloc(0)), _define_property9(this, "_onWrite", new Event());
|
|
1500
|
-
}
|
|
1501
1423
|
};
|
|
1502
1424
|
|
|
1503
1425
|
// src/testing.ts
|
|
@@ -1560,20 +1482,14 @@ var untilError = (cb) => {
|
|
|
1560
1482
|
};
|
|
1561
1483
|
|
|
1562
1484
|
// 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
1485
|
var Timer = class {
|
|
1486
|
+
_callback;
|
|
1487
|
+
_state = new Event();
|
|
1488
|
+
_timer;
|
|
1489
|
+
_count = 0;
|
|
1490
|
+
constructor(_callback) {
|
|
1491
|
+
this._callback = _callback;
|
|
1492
|
+
}
|
|
1577
1493
|
get state() {
|
|
1578
1494
|
return this._state;
|
|
1579
1495
|
}
|
|
@@ -1613,33 +1529,29 @@ var Timer = class {
|
|
|
1613
1529
|
this._state.emit(false);
|
|
1614
1530
|
return this;
|
|
1615
1531
|
}
|
|
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
1532
|
};
|
|
1626
1533
|
|
|
1627
1534
|
// 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
1535
|
var TIME_PERIOD = 1e3;
|
|
1642
1536
|
var UpdateScheduler = class {
|
|
1537
|
+
_ctx;
|
|
1538
|
+
_callback;
|
|
1539
|
+
_params;
|
|
1540
|
+
/**
|
|
1541
|
+
* Promise that resolves when the callback is done.
|
|
1542
|
+
* Never rejects.
|
|
1543
|
+
*/
|
|
1544
|
+
_promise = null;
|
|
1545
|
+
_scheduled = false;
|
|
1546
|
+
_lastUpdateTime = -TIME_PERIOD;
|
|
1547
|
+
constructor(_ctx, _callback, _params = {}) {
|
|
1548
|
+
this._ctx = _ctx;
|
|
1549
|
+
this._callback = _callback;
|
|
1550
|
+
this._params = _params;
|
|
1551
|
+
_ctx.onDispose(async () => {
|
|
1552
|
+
await this._promise;
|
|
1553
|
+
});
|
|
1554
|
+
}
|
|
1643
1555
|
trigger() {
|
|
1644
1556
|
if (this._scheduled) {
|
|
1645
1557
|
return;
|
|
@@ -1648,13 +1560,13 @@ var UpdateScheduler = class {
|
|
|
1648
1560
|
await this._promise;
|
|
1649
1561
|
if (this._params.maxFrequency) {
|
|
1650
1562
|
const now = performance.now();
|
|
1651
|
-
const
|
|
1652
|
-
if (
|
|
1563
|
+
const delay2 = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
|
|
1564
|
+
if (delay2 > 0) {
|
|
1653
1565
|
await new Promise((resolve) => {
|
|
1654
1566
|
const timeoutId = setTimeout(() => {
|
|
1655
1567
|
clearContext();
|
|
1656
1568
|
resolve();
|
|
1657
|
-
},
|
|
1569
|
+
}, delay2);
|
|
1658
1570
|
const clearContext = this._ctx.onDispose(() => {
|
|
1659
1571
|
clearTimeout(timeoutId);
|
|
1660
1572
|
resolve();
|
|
@@ -1696,25 +1608,9 @@ var UpdateScheduler = class {
|
|
|
1696
1608
|
this._promise = this._callback();
|
|
1697
1609
|
await this._promise;
|
|
1698
1610
|
}
|
|
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
1611
|
};
|
|
1717
1612
|
export {
|
|
1613
|
+
AsyncTask,
|
|
1718
1614
|
CancellableObservableProvider,
|
|
1719
1615
|
DeferredTask,
|
|
1720
1616
|
Event,
|
|
@@ -1741,6 +1637,7 @@ export {
|
|
|
1741
1637
|
combine,
|
|
1742
1638
|
debounce,
|
|
1743
1639
|
debounceAndThrottle,
|
|
1640
|
+
delay,
|
|
1744
1641
|
dumpLeaks,
|
|
1745
1642
|
interval,
|
|
1746
1643
|
latch,
|