@dxos/async 0.8.4-main.dedc0f3 → 0.8.4-main.e00bdcdb52
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 +265 -374
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +265 -374
- 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 +11 -10
- 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 +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,20 +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
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/common/async/src/events.ts";
|
|
219
218
|
var DO_NOT_ERROR_ON_ASYNC_CALLBACK = true;
|
|
220
219
|
var Event = class _Event {
|
|
221
220
|
/**
|
|
@@ -230,6 +229,8 @@ var Event = class _Event {
|
|
|
230
229
|
});
|
|
231
230
|
return event;
|
|
232
231
|
}
|
|
232
|
+
_listeners = /* @__PURE__ */ new Set();
|
|
233
|
+
_effects = /* @__PURE__ */ new Set();
|
|
233
234
|
/**
|
|
234
235
|
* Emit an event.
|
|
235
236
|
* In most cases should only be called by the class or entity containing the event.
|
|
@@ -268,10 +269,7 @@ var Event = class _Event {
|
|
|
268
269
|
_ctx,
|
|
269
270
|
_callback
|
|
270
271
|
] : [
|
|
271
|
-
new Context(
|
|
272
|
-
F: __dxlog_file,
|
|
273
|
-
L: 132
|
|
274
|
-
}),
|
|
272
|
+
new Context(),
|
|
275
273
|
_ctx
|
|
276
274
|
];
|
|
277
275
|
const weak = !!options?.weak;
|
|
@@ -301,10 +299,7 @@ var Event = class _Event {
|
|
|
301
299
|
_ctx,
|
|
302
300
|
_callback
|
|
303
301
|
] : [
|
|
304
|
-
new Context(
|
|
305
|
-
F: __dxlog_file,
|
|
306
|
-
L: 169
|
|
307
|
-
}),
|
|
302
|
+
new Context(),
|
|
308
303
|
_ctx
|
|
309
304
|
];
|
|
310
305
|
const listener = new EventListener(this, callback, ctx, true, false);
|
|
@@ -471,12 +466,30 @@ var Event = class _Event {
|
|
|
471
466
|
handle.cleanup = void 0;
|
|
472
467
|
}
|
|
473
468
|
}
|
|
474
|
-
constructor() {
|
|
475
|
-
_define_property2(this, "_listeners", /* @__PURE__ */ new Set());
|
|
476
|
-
_define_property2(this, "_effects", /* @__PURE__ */ new Set());
|
|
477
|
-
}
|
|
478
469
|
};
|
|
479
470
|
var EventListener = class {
|
|
471
|
+
ctx;
|
|
472
|
+
once;
|
|
473
|
+
weak;
|
|
474
|
+
callback;
|
|
475
|
+
_clearDispose = void 0;
|
|
476
|
+
constructor(event, listener, ctx, once, weak) {
|
|
477
|
+
this.ctx = ctx;
|
|
478
|
+
this.once = once;
|
|
479
|
+
this.weak = weak;
|
|
480
|
+
this._clearDispose = ctx.onDispose(() => {
|
|
481
|
+
event._removeListener(this);
|
|
482
|
+
});
|
|
483
|
+
if (weak) {
|
|
484
|
+
this.callback = new WeakRef(listener);
|
|
485
|
+
weakListeners().registry?.register(listener, {
|
|
486
|
+
event: new WeakRef(event),
|
|
487
|
+
listener: this
|
|
488
|
+
}, this);
|
|
489
|
+
} else {
|
|
490
|
+
this.callback = listener;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
480
493
|
derefCallback() {
|
|
481
494
|
return this.weak ? this.callback.deref() : this.callback;
|
|
482
495
|
}
|
|
@@ -506,29 +519,6 @@ var EventListener = class {
|
|
|
506
519
|
this._clearDispose?.();
|
|
507
520
|
weakListeners().registry?.unregister(this);
|
|
508
521
|
}
|
|
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
522
|
};
|
|
533
523
|
var weakListenersState = null;
|
|
534
524
|
var FINALIZATION_REGISTRY_SUPPORTED = !!globalThis.FinalizationRegistry;
|
|
@@ -538,9 +528,9 @@ var weakListeners = () => {
|
|
|
538
528
|
registry: void 0
|
|
539
529
|
};
|
|
540
530
|
}
|
|
541
|
-
weakListenersState
|
|
531
|
+
weakListenersState ??= new FinalizationRegistry(({ event, listener }) => {
|
|
542
532
|
event.deref()?._removeListener(listener);
|
|
543
|
-
})
|
|
533
|
+
});
|
|
544
534
|
return {
|
|
545
535
|
registry: weakListenersState
|
|
546
536
|
};
|
|
@@ -549,20 +539,10 @@ var weakListeners = () => {
|
|
|
549
539
|
// src/mutex.ts
|
|
550
540
|
import "@dxos/util";
|
|
551
541
|
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
542
|
var Mutex = class {
|
|
543
|
+
_queue = Promise.resolve();
|
|
544
|
+
_queueLength = 0;
|
|
545
|
+
_tag = null;
|
|
566
546
|
get tag() {
|
|
567
547
|
return this._tag;
|
|
568
548
|
}
|
|
@@ -606,13 +586,12 @@ var Mutex = class {
|
|
|
606
586
|
guard.release();
|
|
607
587
|
}
|
|
608
588
|
}
|
|
609
|
-
constructor() {
|
|
610
|
-
_define_property3(this, "_queue", Promise.resolve());
|
|
611
|
-
_define_property3(this, "_queueLength", 0);
|
|
612
|
-
_define_property3(this, "_tag", null);
|
|
613
|
-
}
|
|
614
589
|
};
|
|
615
590
|
var MutexGuard = class {
|
|
591
|
+
_release;
|
|
592
|
+
constructor(_release) {
|
|
593
|
+
this._release = _release;
|
|
594
|
+
}
|
|
616
595
|
/**
|
|
617
596
|
* Releases the lock.
|
|
618
597
|
*/
|
|
@@ -622,19 +601,14 @@ var MutexGuard = class {
|
|
|
622
601
|
[Symbol.dispose]() {
|
|
623
602
|
this.release();
|
|
624
603
|
}
|
|
625
|
-
constructor(_release) {
|
|
626
|
-
_define_property3(this, "_release", void 0);
|
|
627
|
-
this._release = _release;
|
|
628
|
-
}
|
|
629
604
|
};
|
|
630
|
-
var classMutexSymbol = Symbol("class-mutex");
|
|
605
|
+
var classMutexSymbol = /* @__PURE__ */ Symbol("class-mutex");
|
|
631
606
|
var FORCE_DISABLE_WARNING = false;
|
|
632
607
|
var enableWarning = !FORCE_DISABLE_WARNING && globalThis.mochaExecutor;
|
|
633
608
|
var synchronized = (target, propertyName, descriptor) => {
|
|
634
609
|
const method = descriptor.value;
|
|
635
610
|
descriptor.value = async function synchronizedMethod(...args) {
|
|
636
|
-
|
|
637
|
-
const mutex = this[_classMutexSymbol = classMutexSymbol] ?? (this[_classMutexSymbol] = new Mutex());
|
|
611
|
+
const mutex = this[classMutexSymbol] ??= new Mutex();
|
|
638
612
|
const tag = `${target.constructor.name}.${propertyName}`;
|
|
639
613
|
let guard;
|
|
640
614
|
if (!enableWarning) {
|
|
@@ -659,20 +633,6 @@ import PushStream from "zen-push";
|
|
|
659
633
|
|
|
660
634
|
// src/trigger.ts
|
|
661
635
|
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
|
-
var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/trigger.ts";
|
|
676
636
|
var trigger = (timeout2) => {
|
|
677
637
|
let callback;
|
|
678
638
|
const promise = new Promise((resolve, reject) => {
|
|
@@ -688,13 +648,24 @@ var trigger = (timeout2) => {
|
|
|
688
648
|
resolver
|
|
689
649
|
];
|
|
690
650
|
};
|
|
691
|
-
var TriggerState = /* @__PURE__ */ function(TriggerState2) {
|
|
651
|
+
var TriggerState = /* @__PURE__ */ (function(TriggerState2) {
|
|
692
652
|
TriggerState2["WAITING"] = "WAITING";
|
|
693
653
|
TriggerState2["RESOLVED"] = "RESOLVED";
|
|
694
654
|
TriggerState2["REJECTED"] = "REJECTED";
|
|
695
655
|
return TriggerState2;
|
|
696
|
-
}({});
|
|
656
|
+
})({});
|
|
697
657
|
var Trigger = class {
|
|
658
|
+
_options;
|
|
659
|
+
_promise;
|
|
660
|
+
_resolve;
|
|
661
|
+
_reject;
|
|
662
|
+
_state = "WAITING";
|
|
663
|
+
constructor(_options = {
|
|
664
|
+
autoReset: false
|
|
665
|
+
}) {
|
|
666
|
+
this._options = _options;
|
|
667
|
+
this.reset();
|
|
668
|
+
}
|
|
698
669
|
get state() {
|
|
699
670
|
return this._state;
|
|
700
671
|
}
|
|
@@ -751,29 +722,9 @@ var Trigger = class {
|
|
|
751
722
|
}
|
|
752
723
|
return this;
|
|
753
724
|
}
|
|
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
725
|
};
|
|
767
726
|
var latch = ({ count = 1, timeout: timeout2 } = {}) => {
|
|
768
|
-
invariant(count >= 0
|
|
769
|
-
F: __dxlog_file2,
|
|
770
|
-
L: 139,
|
|
771
|
-
S: void 0,
|
|
772
|
-
A: [
|
|
773
|
-
"count >= 0",
|
|
774
|
-
""
|
|
775
|
-
]
|
|
776
|
-
});
|
|
727
|
+
invariant(count >= 0);
|
|
777
728
|
let t;
|
|
778
729
|
let doResolve;
|
|
779
730
|
let doReject;
|
|
@@ -812,20 +763,16 @@ var latch = ({ count = 1, timeout: timeout2 } = {}) => {
|
|
|
812
763
|
};
|
|
813
764
|
|
|
814
765
|
// 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
766
|
var MulticastObservable = class _MulticastObservable extends Observable {
|
|
767
|
+
_value;
|
|
768
|
+
_observers = /* @__PURE__ */ new Set();
|
|
769
|
+
_observable;
|
|
770
|
+
_completed = new Trigger();
|
|
771
|
+
constructor(subscriber, _value) {
|
|
772
|
+
super((observer) => this._subscribe(observer)), this._value = _value;
|
|
773
|
+
this._observable = typeof subscriber === "function" ? new Observable(subscriber) : subscriber;
|
|
774
|
+
this._observable.subscribe(this._handlers);
|
|
775
|
+
}
|
|
829
776
|
static from(value, initialValue) {
|
|
830
777
|
if ("emit" in value) {
|
|
831
778
|
return new _MulticastObservable((observer) => {
|
|
@@ -906,42 +853,30 @@ var MulticastObservable = class _MulticastObservable extends Observable {
|
|
|
906
853
|
this._observers.delete(observer);
|
|
907
854
|
};
|
|
908
855
|
}
|
|
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
|
-
}
|
|
856
|
+
_handlers = {
|
|
857
|
+
next: (value) => {
|
|
858
|
+
this._value = value;
|
|
859
|
+
this._observers.forEach((observer) => observer.next?.(value));
|
|
860
|
+
},
|
|
861
|
+
error: (err) => {
|
|
862
|
+
this._observers.forEach((observer) => observer.error?.(err));
|
|
863
|
+
},
|
|
864
|
+
complete: () => {
|
|
865
|
+
this._completed.wake();
|
|
866
|
+
this._observers.forEach((observer) => observer.complete?.());
|
|
867
|
+
}
|
|
868
|
+
};
|
|
926
869
|
};
|
|
927
870
|
var EMPTY_OBSERVABLE = MulticastObservable.of(null);
|
|
928
871
|
|
|
929
872
|
// src/observable-value.ts
|
|
930
873
|
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
874
|
var ObservableProvider = class {
|
|
875
|
+
_handlers = /* @__PURE__ */ new Set();
|
|
876
|
+
_proxy = createSetDispatch({
|
|
877
|
+
handlers: this._handlers
|
|
878
|
+
});
|
|
879
|
+
_value;
|
|
945
880
|
/**
|
|
946
881
|
* Proxy used to dispatch callbacks to each subscription.
|
|
947
882
|
*/
|
|
@@ -960,15 +895,13 @@ var ObservableProvider = class {
|
|
|
960
895
|
this._handlers.delete(handler);
|
|
961
896
|
};
|
|
962
897
|
}
|
|
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
898
|
};
|
|
971
899
|
var CancellableObservableProvider = class extends ObservableProvider {
|
|
900
|
+
_handleCancel;
|
|
901
|
+
_cancelled = false;
|
|
902
|
+
constructor(_handleCancel) {
|
|
903
|
+
super(), this._handleCancel = _handleCancel;
|
|
904
|
+
}
|
|
972
905
|
get cancelled() {
|
|
973
906
|
return this._cancelled;
|
|
974
907
|
}
|
|
@@ -980,9 +913,6 @@ var CancellableObservableProvider = class extends ObservableProvider {
|
|
|
980
913
|
await this._handleCancel?.();
|
|
981
914
|
this.callback.onCancelled?.();
|
|
982
915
|
}
|
|
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
916
|
};
|
|
987
917
|
|
|
988
918
|
// src/persistent-lifecycle.ts
|
|
@@ -991,16 +921,15 @@ import { warnAfterTimeout as warnAfterTimeout2 } from "@dxos/debug";
|
|
|
991
921
|
import { log as log2 } from "@dxos/log";
|
|
992
922
|
|
|
993
923
|
// src/task-scheduling.ts
|
|
994
|
-
import { ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
|
|
924
|
+
import { Context as Context2, ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
|
|
995
925
|
import { StackTrace as StackTrace2 } from "@dxos/debug";
|
|
996
926
|
|
|
997
927
|
// src/track-leaks.ts
|
|
998
928
|
import { StackTrace } from "@dxos/debug";
|
|
999
929
|
import { log } from "@dxos/log";
|
|
1000
|
-
var __dxlog_file3 = "/__w/dxos/dxos/packages/common/async/src/track-leaks.ts";
|
|
1001
930
|
var enabled = typeof process !== "undefined" && !!process.env.DX_TRACK_LEAKS;
|
|
1002
931
|
var openResources = /* @__PURE__ */ new Set();
|
|
1003
|
-
var handleSymbol = Symbol("checkLeaksHandle");
|
|
932
|
+
var handleSymbol = /* @__PURE__ */ Symbol("checkLeaksHandle");
|
|
1004
933
|
var trackResource = (resourceProvider) => {
|
|
1005
934
|
if (!enabled) {
|
|
1006
935
|
return () => {
|
|
@@ -1047,31 +976,11 @@ var dumpLeaks = () => {
|
|
|
1047
976
|
if (!enabled) {
|
|
1048
977
|
return;
|
|
1049
978
|
}
|
|
1050
|
-
log.info(`Leaked resources ${openResources.size}
|
|
1051
|
-
F: __dxlog_file3,
|
|
1052
|
-
L: 82,
|
|
1053
|
-
S: void 0,
|
|
1054
|
-
C: (f, a) => f(...a)
|
|
1055
|
-
});
|
|
979
|
+
log.info(`Leaked resources ${openResources.size}:`);
|
|
1056
980
|
for (const resource of openResources) {
|
|
1057
|
-
log.info(`- ${resource.name} at
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
S: void 0,
|
|
1061
|
-
C: (f, a) => f(...a)
|
|
1062
|
-
});
|
|
1063
|
-
log.info(resource.openStack.getStack(1), void 0, {
|
|
1064
|
-
F: __dxlog_file3,
|
|
1065
|
-
L: 85,
|
|
1066
|
-
S: void 0,
|
|
1067
|
-
C: (f, a) => f(...a)
|
|
1068
|
-
});
|
|
1069
|
-
log.info("\n", void 0, {
|
|
1070
|
-
F: __dxlog_file3,
|
|
1071
|
-
L: 86,
|
|
1072
|
-
S: void 0,
|
|
1073
|
-
C: (f, a) => f(...a)
|
|
1074
|
-
});
|
|
981
|
+
log.info(`- ${resource.name} at`);
|
|
982
|
+
log.info(resource.openStack.getStack(1));
|
|
983
|
+
log.info("\n");
|
|
1075
984
|
}
|
|
1076
985
|
};
|
|
1077
986
|
if (enabled) {
|
|
@@ -1079,20 +988,16 @@ if (enabled) {
|
|
|
1079
988
|
}
|
|
1080
989
|
|
|
1081
990
|
// src/task-scheduling.ts
|
|
1082
|
-
function _define_property7(obj, key, value) {
|
|
1083
|
-
if (key in obj) {
|
|
1084
|
-
Object.defineProperty(obj, key, {
|
|
1085
|
-
value,
|
|
1086
|
-
enumerable: true,
|
|
1087
|
-
configurable: true,
|
|
1088
|
-
writable: true
|
|
1089
|
-
});
|
|
1090
|
-
} else {
|
|
1091
|
-
obj[key] = value;
|
|
1092
|
-
}
|
|
1093
|
-
return obj;
|
|
1094
|
-
}
|
|
1095
991
|
var DeferredTask = class {
|
|
992
|
+
_ctx;
|
|
993
|
+
_callback;
|
|
994
|
+
_scheduled = false;
|
|
995
|
+
_currentTask = null;
|
|
996
|
+
_nextTask = new Trigger();
|
|
997
|
+
constructor(_ctx, _callback) {
|
|
998
|
+
this._ctx = _ctx;
|
|
999
|
+
this._callback = _callback;
|
|
1000
|
+
}
|
|
1096
1001
|
get scheduled() {
|
|
1097
1002
|
return this._scheduled;
|
|
1098
1003
|
}
|
|
@@ -1131,17 +1036,78 @@ var DeferredTask = class {
|
|
|
1131
1036
|
async join() {
|
|
1132
1037
|
await this._currentTask;
|
|
1133
1038
|
}
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
this
|
|
1143
|
-
|
|
1144
|
-
|
|
1039
|
+
};
|
|
1040
|
+
var AsyncTask = class {
|
|
1041
|
+
#callback;
|
|
1042
|
+
#ctx = void 0;
|
|
1043
|
+
#scheduled = false;
|
|
1044
|
+
#currentTask = null;
|
|
1045
|
+
#nextTask = new Trigger();
|
|
1046
|
+
constructor(callback) {
|
|
1047
|
+
this.#callback = callback;
|
|
1048
|
+
}
|
|
1049
|
+
get scheduled() {
|
|
1050
|
+
return this.#scheduled;
|
|
1051
|
+
}
|
|
1052
|
+
/**
|
|
1053
|
+
* Context of the resource that owns the task.
|
|
1054
|
+
* When the context is disposed, the task is cancelled and cannot be scheduled again.
|
|
1055
|
+
*/
|
|
1056
|
+
open() {
|
|
1057
|
+
this.#ctx = new Context2();
|
|
1058
|
+
}
|
|
1059
|
+
/**
|
|
1060
|
+
* Closes the task and waits for it to finish if it is running.
|
|
1061
|
+
*/
|
|
1062
|
+
async close() {
|
|
1063
|
+
await this.#ctx?.dispose();
|
|
1064
|
+
await this.join();
|
|
1065
|
+
this.#ctx = void 0;
|
|
1066
|
+
}
|
|
1067
|
+
[Symbol.asyncDispose]() {
|
|
1068
|
+
return this.close();
|
|
1069
|
+
}
|
|
1070
|
+
/**
|
|
1071
|
+
* Schedule the task to run asynchronously.
|
|
1072
|
+
*/
|
|
1073
|
+
// TODO(dmaretskyi): Add scheduleAt. Where the earlier time will override the later one.
|
|
1074
|
+
schedule() {
|
|
1075
|
+
if (!this.#ctx || this.#ctx.disposed) {
|
|
1076
|
+
throw new Error("AsyncTask not open");
|
|
1077
|
+
}
|
|
1078
|
+
if (this.#scheduled) {
|
|
1079
|
+
return;
|
|
1080
|
+
}
|
|
1081
|
+
scheduleTask(this.#ctx, async () => {
|
|
1082
|
+
await this.#currentTask;
|
|
1083
|
+
if (!this.#ctx || this.#ctx.disposed) {
|
|
1084
|
+
return;
|
|
1085
|
+
}
|
|
1086
|
+
this.#scheduled = false;
|
|
1087
|
+
const completionTrigger = this.#nextTask;
|
|
1088
|
+
this.#nextTask = new Trigger();
|
|
1089
|
+
this.#currentTask = runInContextAsync(this.#ctx, () => this.#callback()).then(() => {
|
|
1090
|
+
completionTrigger.wake();
|
|
1091
|
+
});
|
|
1092
|
+
});
|
|
1093
|
+
this.#scheduled = true;
|
|
1094
|
+
}
|
|
1095
|
+
/**
|
|
1096
|
+
* Schedule the task to run and wait for it to finish.
|
|
1097
|
+
*/
|
|
1098
|
+
async runBlocking() {
|
|
1099
|
+
if (this.#ctx?.disposed) {
|
|
1100
|
+
throw new ContextDisposedError2();
|
|
1101
|
+
}
|
|
1102
|
+
this.schedule();
|
|
1103
|
+
await this.#nextTask.wait();
|
|
1104
|
+
}
|
|
1105
|
+
/**
|
|
1106
|
+
* Waits for the current task to finish if it is running.
|
|
1107
|
+
* Does not schedule a new task.
|
|
1108
|
+
*/
|
|
1109
|
+
async join() {
|
|
1110
|
+
await this.#currentTask;
|
|
1145
1111
|
}
|
|
1146
1112
|
};
|
|
1147
1113
|
var runInContext = (ctx, fn) => {
|
|
@@ -1223,29 +1189,29 @@ var scheduleExponentialBackoffTaskInterval = (ctx, task, initialInterval) => {
|
|
|
1223
1189
|
};
|
|
1224
1190
|
|
|
1225
1191
|
// 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
1192
|
function _ts_decorate(decorators, target, key, desc) {
|
|
1240
1193
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1241
1194
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1242
1195
|
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
1196
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1244
1197
|
}
|
|
1245
|
-
var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
|
|
1246
1198
|
var INIT_RESTART_DELAY = 100;
|
|
1247
1199
|
var DEFAULT_MAX_RESTART_DELAY = 5e3;
|
|
1248
1200
|
var PersistentLifecycle = class extends Resource {
|
|
1201
|
+
_start;
|
|
1202
|
+
_stop;
|
|
1203
|
+
_onRestart;
|
|
1204
|
+
_maxRestartDelay;
|
|
1205
|
+
_currentState = void 0;
|
|
1206
|
+
_restartTask = void 0;
|
|
1207
|
+
_restartAfter = 0;
|
|
1208
|
+
constructor({ start, stop, onRestart, maxRestartDelay = DEFAULT_MAX_RESTART_DELAY }) {
|
|
1209
|
+
super();
|
|
1210
|
+
this._start = start;
|
|
1211
|
+
this._stop = stop;
|
|
1212
|
+
this._onRestart = onRestart;
|
|
1213
|
+
this._maxRestartDelay = maxRestartDelay;
|
|
1214
|
+
}
|
|
1249
1215
|
get state() {
|
|
1250
1216
|
return this._currentState;
|
|
1251
1217
|
}
|
|
@@ -1256,11 +1222,6 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1256
1222
|
} catch (err) {
|
|
1257
1223
|
log2.warn("Restart failed", {
|
|
1258
1224
|
err
|
|
1259
|
-
}, {
|
|
1260
|
-
F: __dxlog_file4,
|
|
1261
|
-
L: 72,
|
|
1262
|
-
S: this,
|
|
1263
|
-
C: (f, a) => f(...a)
|
|
1264
1225
|
});
|
|
1265
1226
|
this._restartTask?.schedule();
|
|
1266
1227
|
}
|
|
@@ -1268,11 +1229,6 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1268
1229
|
this._currentState = await this._start().catch((err) => {
|
|
1269
1230
|
log2.warn("Start failed", {
|
|
1270
1231
|
err
|
|
1271
|
-
}, {
|
|
1272
|
-
F: __dxlog_file4,
|
|
1273
|
-
L: 78,
|
|
1274
|
-
S: this,
|
|
1275
|
-
C: (f, a) => f(...a)
|
|
1276
1232
|
});
|
|
1277
1233
|
this._restartTask?.schedule();
|
|
1278
1234
|
return void 0;
|
|
@@ -1286,11 +1242,6 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1286
1242
|
async _restart() {
|
|
1287
1243
|
log2(`restarting in ${this._restartAfter}ms`, {
|
|
1288
1244
|
state: this._lifecycleState
|
|
1289
|
-
}, {
|
|
1290
|
-
F: __dxlog_file4,
|
|
1291
|
-
L: 91,
|
|
1292
|
-
S: this,
|
|
1293
|
-
C: (f, a) => f(...a)
|
|
1294
1245
|
});
|
|
1295
1246
|
await this._stopCurrentState();
|
|
1296
1247
|
if (this._lifecycleState !== LifecycleState.OPEN) {
|
|
@@ -1309,12 +1260,7 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1309
1260
|
try {
|
|
1310
1261
|
await this._stop(this._currentState);
|
|
1311
1262
|
} catch (err) {
|
|
1312
|
-
log2.catch(err
|
|
1313
|
-
F: __dxlog_file4,
|
|
1314
|
-
L: 113,
|
|
1315
|
-
S: this,
|
|
1316
|
-
C: (f, a) => f(...a)
|
|
1317
|
-
});
|
|
1263
|
+
log2.catch(err);
|
|
1318
1264
|
}
|
|
1319
1265
|
this._currentState = void 0;
|
|
1320
1266
|
}
|
|
@@ -1328,13 +1274,6 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1328
1274
|
}
|
|
1329
1275
|
this._restartTask.schedule();
|
|
1330
1276
|
}
|
|
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
1277
|
};
|
|
1339
1278
|
_ts_decorate([
|
|
1340
1279
|
synchronized
|
|
@@ -1345,7 +1284,6 @@ _ts_decorate([
|
|
|
1345
1284
|
|
|
1346
1285
|
// src/push-iterable.ts
|
|
1347
1286
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
1348
|
-
var __dxlog_file5 = "/__w/dxos/dxos/packages/common/async/src/push-iterable.ts";
|
|
1349
1287
|
var makePushIterable = () => {
|
|
1350
1288
|
const buf = [];
|
|
1351
1289
|
const trigger2 = new Trigger({
|
|
@@ -1359,15 +1297,7 @@ var makePushIterable = () => {
|
|
|
1359
1297
|
await trigger2.wait();
|
|
1360
1298
|
}
|
|
1361
1299
|
const item = buf.shift();
|
|
1362
|
-
invariant2(item
|
|
1363
|
-
F: __dxlog_file5,
|
|
1364
|
-
L: 42,
|
|
1365
|
-
S: this,
|
|
1366
|
-
A: [
|
|
1367
|
-
"item",
|
|
1368
|
-
""
|
|
1369
|
-
]
|
|
1370
|
-
});
|
|
1300
|
+
invariant2(item);
|
|
1371
1301
|
switch (item.kind) {
|
|
1372
1302
|
case "next":
|
|
1373
1303
|
return {
|
|
@@ -1453,19 +1383,6 @@ var streamToArray = (stream) => {
|
|
|
1453
1383
|
|
|
1454
1384
|
// src/test-stream.ts
|
|
1455
1385
|
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
1386
|
var TestStream = class extends Duplex {
|
|
1470
1387
|
static async assertConnectivity(stream1, stream2, { timeout: timeout2 = 200 } = {}) {
|
|
1471
1388
|
stream1.push("ping");
|
|
@@ -1479,6 +1396,8 @@ var TestStream = class extends Duplex {
|
|
|
1479
1396
|
})
|
|
1480
1397
|
]);
|
|
1481
1398
|
}
|
|
1399
|
+
_received = Buffer.alloc(0);
|
|
1400
|
+
_onWrite = new Event();
|
|
1482
1401
|
_write(chunk, encoding, callback) {
|
|
1483
1402
|
this._received = Buffer.concat([
|
|
1484
1403
|
this._received,
|
|
@@ -1493,9 +1412,6 @@ var TestStream = class extends Duplex {
|
|
|
1493
1412
|
const dataBuffer = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
1494
1413
|
return asyncTimeout(this._onWrite.waitForCondition(() => this._received.equals(dataBuffer)), timeout2);
|
|
1495
1414
|
}
|
|
1496
|
-
constructor(...args) {
|
|
1497
|
-
super(...args), _define_property9(this, "_received", Buffer.alloc(0)), _define_property9(this, "_onWrite", new Event());
|
|
1498
|
-
}
|
|
1499
1415
|
};
|
|
1500
1416
|
|
|
1501
1417
|
// src/testing.ts
|
|
@@ -1558,20 +1474,14 @@ var untilError = (cb) => {
|
|
|
1558
1474
|
};
|
|
1559
1475
|
|
|
1560
1476
|
// 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
1477
|
var Timer = class {
|
|
1478
|
+
_callback;
|
|
1479
|
+
_state = new Event();
|
|
1480
|
+
_timer;
|
|
1481
|
+
_count = 0;
|
|
1482
|
+
constructor(_callback) {
|
|
1483
|
+
this._callback = _callback;
|
|
1484
|
+
}
|
|
1575
1485
|
get state() {
|
|
1576
1486
|
return this._state;
|
|
1577
1487
|
}
|
|
@@ -1611,33 +1521,29 @@ var Timer = class {
|
|
|
1611
1521
|
this._state.emit(false);
|
|
1612
1522
|
return this;
|
|
1613
1523
|
}
|
|
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
1524
|
};
|
|
1624
1525
|
|
|
1625
1526
|
// 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
1527
|
var TIME_PERIOD = 1e3;
|
|
1640
1528
|
var UpdateScheduler = class {
|
|
1529
|
+
_ctx;
|
|
1530
|
+
_callback;
|
|
1531
|
+
_params;
|
|
1532
|
+
/**
|
|
1533
|
+
* Promise that resolves when the callback is done.
|
|
1534
|
+
* Never rejects.
|
|
1535
|
+
*/
|
|
1536
|
+
_promise = null;
|
|
1537
|
+
_scheduled = false;
|
|
1538
|
+
_lastUpdateTime = -TIME_PERIOD;
|
|
1539
|
+
constructor(_ctx, _callback, _params = {}) {
|
|
1540
|
+
this._ctx = _ctx;
|
|
1541
|
+
this._callback = _callback;
|
|
1542
|
+
this._params = _params;
|
|
1543
|
+
_ctx.onDispose(async () => {
|
|
1544
|
+
await this._promise;
|
|
1545
|
+
});
|
|
1546
|
+
}
|
|
1641
1547
|
trigger() {
|
|
1642
1548
|
if (this._scheduled) {
|
|
1643
1549
|
return;
|
|
@@ -1646,13 +1552,13 @@ var UpdateScheduler = class {
|
|
|
1646
1552
|
await this._promise;
|
|
1647
1553
|
if (this._params.maxFrequency) {
|
|
1648
1554
|
const now = performance.now();
|
|
1649
|
-
const
|
|
1650
|
-
if (
|
|
1555
|
+
const delay2 = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
|
|
1556
|
+
if (delay2 > 0) {
|
|
1651
1557
|
await new Promise((resolve) => {
|
|
1652
1558
|
const timeoutId = setTimeout(() => {
|
|
1653
1559
|
clearContext();
|
|
1654
1560
|
resolve();
|
|
1655
|
-
},
|
|
1561
|
+
}, delay2);
|
|
1656
1562
|
const clearContext = this._ctx.onDispose(() => {
|
|
1657
1563
|
clearTimeout(timeoutId);
|
|
1658
1564
|
resolve();
|
|
@@ -1694,25 +1600,9 @@ var UpdateScheduler = class {
|
|
|
1694
1600
|
this._promise = this._callback();
|
|
1695
1601
|
await this._promise;
|
|
1696
1602
|
}
|
|
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
1603
|
};
|
|
1715
1604
|
export {
|
|
1605
|
+
AsyncTask,
|
|
1716
1606
|
CancellableObservableProvider,
|
|
1717
1607
|
DeferredTask,
|
|
1718
1608
|
Event,
|
|
@@ -1739,6 +1629,7 @@ export {
|
|
|
1739
1629
|
combine,
|
|
1740
1630
|
debounce,
|
|
1741
1631
|
debounceAndThrottle,
|
|
1632
|
+
delay,
|
|
1742
1633
|
dumpLeaks,
|
|
1743
1634
|
interval,
|
|
1744
1635
|
latch,
|