@dxos/async 0.8.4-main.f9ba587 → 0.8.4-main.fffef41
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 +224 -196
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +224 -196
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/callback.d.ts +2 -1
- package/dist/types/src/callback.d.ts.map +1 -1
- package/dist/types/src/chain.d.ts +1 -1
- package/dist/types/src/chain.d.ts.map +1 -1
- package/dist/types/src/cleanup.d.ts +1 -1
- package/dist/types/src/cleanup.d.ts.map +1 -1
- package/dist/types/src/debounce.d.ts +31 -2
- package/dist/types/src/debounce.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +0 -5
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/task-scheduling.d.ts.map +1 -1
- package/dist/types/src/testing.d.ts +13 -0
- 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/trigger.d.ts +11 -0
- package/dist/types/src/trigger.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -9
- package/src/callback.ts +3 -3
- package/src/chain.ts +1 -1
- package/src/cleanup.ts +3 -3
- package/src/debounce.test.ts +69 -12
- package/src/debounce.ts +82 -13
- package/src/event-emitter.test.ts +2 -1
- package/src/index.ts +0 -5
- package/src/observable-value.test.ts +1 -1
- package/src/persistent-lifecycle.test.ts +1 -1
- package/src/task-scheduling.ts +1 -1
- package/src/testing.test.ts +41 -1
- package/src/testing.ts +53 -0
- package/src/timeout.ts +23 -22
- package/src/trigger.ts +58 -1
- package/src/update-scheduler.ts +1 -1
- package/dist/types/src/latch.d.ts +0 -11
- package/dist/types/src/latch.d.ts.map +0 -1
- package/dist/types/src/sink.d.ts +0 -6
- package/dist/types/src/sink.d.ts.map +0 -1
- package/dist/types/src/throttle.d.ts +0 -2
- package/dist/types/src/throttle.d.ts.map +0 -1
- package/dist/types/src/throttle.test.d.ts +0 -2
- package/dist/types/src/throttle.test.d.ts.map +0 -1
- package/dist/types/src/types.d.ts +0 -2
- package/dist/types/src/types.d.ts.map +0 -1
- package/dist/types/src/until.d.ts +0 -14
- package/dist/types/src/until.d.ts.map +0 -1
- package/dist/types/src/until.test.d.ts +0 -2
- package/dist/types/src/until.test.d.ts.map +0 -1
- package/src/latch.ts +0 -60
- package/src/sink.ts +0 -26
- package/src/throttle.test.ts +0 -65
- package/src/throttle.ts +0 -14
- package/src/types.ts +0 -5
- package/src/until.test.ts +0 -47
- package/src/until.ts +0 -58
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/callback.ts
|
|
2
|
-
var
|
|
2
|
+
var promiseFromCallback = (run) => new Promise((resolve, reject) => {
|
|
3
3
|
run((error, value) => {
|
|
4
4
|
if (error) {
|
|
5
5
|
reject(error);
|
|
@@ -10,9 +10,9 @@ var createPromiseFromCallback = (run) => new Promise((resolve, reject) => {
|
|
|
10
10
|
});
|
|
11
11
|
|
|
12
12
|
// src/chain.ts
|
|
13
|
-
var
|
|
13
|
+
var chain = (chain2) => async (elements) => {
|
|
14
14
|
let result = await elements;
|
|
15
|
-
for (const part of
|
|
15
|
+
for (const part of chain2) {
|
|
16
16
|
result = await Promise.all(result.map(async (element) => await part(element)));
|
|
17
17
|
}
|
|
18
18
|
return result;
|
|
@@ -33,14 +33,12 @@ var interval = (cb, ms) => {
|
|
|
33
33
|
const t = setInterval(cb, ms);
|
|
34
34
|
return () => clearInterval(t);
|
|
35
35
|
};
|
|
36
|
-
|
|
36
|
+
var addEventListener = (target, type, listener, options) => {
|
|
37
37
|
target.addEventListener(type, listener, options);
|
|
38
38
|
return () => target.removeEventListener(type, listener, options);
|
|
39
|
-
}
|
|
39
|
+
};
|
|
40
40
|
var SubscriptionList = class {
|
|
41
|
-
|
|
42
|
-
this._cleanups = [];
|
|
43
|
-
}
|
|
41
|
+
_cleanups = [];
|
|
44
42
|
add(cb) {
|
|
45
43
|
this._cleanups.push(cb);
|
|
46
44
|
return this;
|
|
@@ -51,6 +49,7 @@ var SubscriptionList = class {
|
|
|
51
49
|
}
|
|
52
50
|
};
|
|
53
51
|
var SubscriptionSet = class {
|
|
52
|
+
_cleanupMap;
|
|
54
53
|
constructor(keyProjection) {
|
|
55
54
|
this._cleanupMap = new ComplexMap(keyProjection);
|
|
56
55
|
}
|
|
@@ -64,32 +63,56 @@ var SubscriptionSet = class {
|
|
|
64
63
|
}
|
|
65
64
|
};
|
|
66
65
|
|
|
67
|
-
// src/
|
|
68
|
-
var
|
|
69
|
-
let
|
|
66
|
+
// src/debounce.ts
|
|
67
|
+
var delay = (cb, delay2 = 100) => {
|
|
68
|
+
let pending = false;
|
|
70
69
|
return (...args) => {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
cb(...args);
|
|
74
|
-
lastCall = now;
|
|
70
|
+
if (pending) {
|
|
71
|
+
return;
|
|
75
72
|
}
|
|
73
|
+
pending = true;
|
|
74
|
+
setTimeout(() => {
|
|
75
|
+
try {
|
|
76
|
+
cb(...args);
|
|
77
|
+
} finally {
|
|
78
|
+
pending = false;
|
|
79
|
+
}
|
|
80
|
+
}, delay2);
|
|
76
81
|
};
|
|
77
82
|
};
|
|
78
|
-
|
|
79
|
-
// src/debounce.ts
|
|
80
|
-
var debounce = (cb, wait = 100) => {
|
|
83
|
+
var debounce = (cb, delay2 = 100) => {
|
|
81
84
|
let t;
|
|
82
85
|
return (...args) => {
|
|
83
86
|
clearTimeout(t);
|
|
84
|
-
t = setTimeout(() => cb(...args),
|
|
87
|
+
t = setTimeout(() => cb(...args), delay2);
|
|
85
88
|
};
|
|
86
89
|
};
|
|
87
|
-
var
|
|
88
|
-
|
|
89
|
-
const throttled = throttle(cb, wait);
|
|
90
|
+
var throttle = (cb, delay2 = 100) => {
|
|
91
|
+
let lastCall = 0;
|
|
90
92
|
return (...args) => {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
const now = Date.now();
|
|
94
|
+
if (now - lastCall >= delay2) {
|
|
95
|
+
cb(...args);
|
|
96
|
+
lastCall = now;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
var debounceAndThrottle = (cb, delay2 = 100) => {
|
|
101
|
+
let timeout2;
|
|
102
|
+
let lastCall = 0;
|
|
103
|
+
return (...args) => {
|
|
104
|
+
const now = Date.now();
|
|
105
|
+
const delta = now - lastCall;
|
|
106
|
+
clearTimeout(timeout2);
|
|
107
|
+
if (delta >= delay2) {
|
|
108
|
+
cb(...args);
|
|
109
|
+
lastCall = now;
|
|
110
|
+
} else {
|
|
111
|
+
timeout2 = setTimeout(() => {
|
|
112
|
+
cb(...args);
|
|
113
|
+
lastCall = Date.now();
|
|
114
|
+
}, delay2 - delta);
|
|
115
|
+
}
|
|
93
116
|
};
|
|
94
117
|
};
|
|
95
118
|
|
|
@@ -124,6 +147,23 @@ var sleep = (ms) => {
|
|
|
124
147
|
sleeper();
|
|
125
148
|
});
|
|
126
149
|
};
|
|
150
|
+
var sleepWithContext = (ctx, ms) => {
|
|
151
|
+
const error = new ContextDisposedError();
|
|
152
|
+
return new Promise((resolve, reject) => {
|
|
153
|
+
if (ctx.disposed) {
|
|
154
|
+
reject(error);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const timeout2 = setTimeout(() => {
|
|
158
|
+
clearDispose();
|
|
159
|
+
resolve();
|
|
160
|
+
}, ms);
|
|
161
|
+
const clearDispose = ctx.onDispose(() => {
|
|
162
|
+
clearTimeout(timeout2);
|
|
163
|
+
reject(error);
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
};
|
|
127
167
|
var asyncReturn = () => sleep(0);
|
|
128
168
|
var asyncTimeout = async (promise, timeout2, err) => {
|
|
129
169
|
let timeoutId;
|
|
@@ -134,7 +174,7 @@ var asyncTimeout = async (promise, timeout2, err) => {
|
|
|
134
174
|
}, timeout2);
|
|
135
175
|
unrefTimeout(timeoutId);
|
|
136
176
|
});
|
|
137
|
-
const conditionTimeout = typeof promise === "function" ?
|
|
177
|
+
const conditionTimeout = typeof promise === "function" ? promiseFromCallback(promise) : promise;
|
|
138
178
|
return await Promise.race([
|
|
139
179
|
conditionTimeout,
|
|
140
180
|
timeoutPromise
|
|
@@ -147,23 +187,6 @@ var unrefTimeout = (timeoutId) => {
|
|
|
147
187
|
timeoutId.unref();
|
|
148
188
|
}
|
|
149
189
|
};
|
|
150
|
-
var sleepWithContext = (ctx, ms) => {
|
|
151
|
-
const error = new ContextDisposedError();
|
|
152
|
-
return new Promise((resolve, reject) => {
|
|
153
|
-
if (ctx.disposed) {
|
|
154
|
-
reject(error);
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
const timeout2 = setTimeout(() => {
|
|
158
|
-
clearDispose();
|
|
159
|
-
resolve();
|
|
160
|
-
}, ms);
|
|
161
|
-
const clearDispose = ctx.onDispose(() => {
|
|
162
|
-
clearTimeout(timeout2);
|
|
163
|
-
reject(error);
|
|
164
|
-
});
|
|
165
|
-
});
|
|
166
|
-
};
|
|
167
190
|
|
|
168
191
|
// src/event-emitter.ts
|
|
169
192
|
var onEvent = (eventEmitter, eventName, callback) => {
|
|
@@ -193,10 +216,6 @@ import { Context } from "@dxos/context";
|
|
|
193
216
|
var __dxlog_file = "/__w/dxos/dxos/packages/common/async/src/events.ts";
|
|
194
217
|
var DO_NOT_ERROR_ON_ASYNC_CALLBACK = true;
|
|
195
218
|
var Event = class _Event {
|
|
196
|
-
constructor() {
|
|
197
|
-
this._listeners = /* @__PURE__ */ new Set();
|
|
198
|
-
this._effects = /* @__PURE__ */ new Set();
|
|
199
|
-
}
|
|
200
219
|
/**
|
|
201
220
|
* Wrap objects that have on/off style event emitters.
|
|
202
221
|
*/
|
|
@@ -209,6 +228,8 @@ var Event = class _Event {
|
|
|
209
228
|
});
|
|
210
229
|
return event;
|
|
211
230
|
}
|
|
231
|
+
_listeners = /* @__PURE__ */ new Set();
|
|
232
|
+
_effects = /* @__PURE__ */ new Set();
|
|
212
233
|
/**
|
|
213
234
|
* Emit an event.
|
|
214
235
|
* In most cases should only be called by the class or entity containing the event.
|
|
@@ -452,11 +473,15 @@ var Event = class _Event {
|
|
|
452
473
|
}
|
|
453
474
|
};
|
|
454
475
|
var EventListener = class {
|
|
476
|
+
ctx;
|
|
477
|
+
once;
|
|
478
|
+
weak;
|
|
479
|
+
callback;
|
|
480
|
+
_clearDispose = void 0;
|
|
455
481
|
constructor(event, listener, ctx, once, weak) {
|
|
456
482
|
this.ctx = ctx;
|
|
457
483
|
this.once = once;
|
|
458
484
|
this.weak = weak;
|
|
459
|
-
this._clearDispose = void 0;
|
|
460
485
|
this._clearDispose = ctx.onDispose(() => {
|
|
461
486
|
event._removeListener(this);
|
|
462
487
|
});
|
|
@@ -516,65 +541,13 @@ var weakListeners = () => {
|
|
|
516
541
|
};
|
|
517
542
|
};
|
|
518
543
|
|
|
519
|
-
// src/latch.ts
|
|
520
|
-
import { invariant } from "@dxos/invariant";
|
|
521
|
-
var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/latch.ts";
|
|
522
|
-
var latch = ({ count = 1, timeout: timeout2 } = {}) => {
|
|
523
|
-
invariant(count >= 0, void 0, {
|
|
524
|
-
F: __dxlog_file2,
|
|
525
|
-
L: 19,
|
|
526
|
-
S: void 0,
|
|
527
|
-
A: [
|
|
528
|
-
"count >= 0",
|
|
529
|
-
""
|
|
530
|
-
]
|
|
531
|
-
});
|
|
532
|
-
let t;
|
|
533
|
-
let doResolve;
|
|
534
|
-
let doReject;
|
|
535
|
-
const promise = new Promise((resolve, reject) => {
|
|
536
|
-
doResolve = (value) => {
|
|
537
|
-
clearTimeout(t);
|
|
538
|
-
resolve(value);
|
|
539
|
-
};
|
|
540
|
-
doReject = (err) => {
|
|
541
|
-
clearTimeout(t);
|
|
542
|
-
reject(err);
|
|
543
|
-
};
|
|
544
|
-
});
|
|
545
|
-
if (count === 0) {
|
|
546
|
-
setTimeout(() => {
|
|
547
|
-
doResolve(0);
|
|
548
|
-
});
|
|
549
|
-
} else {
|
|
550
|
-
if (timeout2) {
|
|
551
|
-
t = setTimeout(() => {
|
|
552
|
-
doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
|
|
553
|
-
}, timeout2);
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
let i = 0;
|
|
557
|
-
return [
|
|
558
|
-
async () => await promise,
|
|
559
|
-
() => {
|
|
560
|
-
if (++i === count) {
|
|
561
|
-
doResolve(i);
|
|
562
|
-
}
|
|
563
|
-
return i;
|
|
564
|
-
},
|
|
565
|
-
(err) => doReject(err)
|
|
566
|
-
];
|
|
567
|
-
};
|
|
568
|
-
|
|
569
544
|
// src/mutex.ts
|
|
570
545
|
import "@dxos/util";
|
|
571
546
|
import { warnAfterTimeout } from "@dxos/debug";
|
|
572
547
|
var Mutex = class {
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
this._tag = null;
|
|
577
|
-
}
|
|
548
|
+
_queue = Promise.resolve();
|
|
549
|
+
_queueLength = 0;
|
|
550
|
+
_tag = null;
|
|
578
551
|
get tag() {
|
|
579
552
|
return this._tag;
|
|
580
553
|
}
|
|
@@ -620,6 +593,7 @@ var Mutex = class {
|
|
|
620
593
|
}
|
|
621
594
|
};
|
|
622
595
|
var MutexGuard = class {
|
|
596
|
+
_release;
|
|
623
597
|
constructor(_release) {
|
|
624
598
|
this._release = _release;
|
|
625
599
|
}
|
|
@@ -663,6 +637,8 @@ import Observable from "zen-observable";
|
|
|
663
637
|
import PushStream from "zen-push";
|
|
664
638
|
|
|
665
639
|
// src/trigger.ts
|
|
640
|
+
import { invariant } from "@dxos/invariant";
|
|
641
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/trigger.ts";
|
|
666
642
|
var trigger = (timeout2) => {
|
|
667
643
|
let callback;
|
|
668
644
|
const promise = new Promise((resolve, reject) => {
|
|
@@ -678,18 +654,22 @@ var trigger = (timeout2) => {
|
|
|
678
654
|
resolver
|
|
679
655
|
];
|
|
680
656
|
};
|
|
681
|
-
var TriggerState = /* @__PURE__ */ function(TriggerState2) {
|
|
657
|
+
var TriggerState = /* @__PURE__ */ (function(TriggerState2) {
|
|
682
658
|
TriggerState2["WAITING"] = "WAITING";
|
|
683
659
|
TriggerState2["RESOLVED"] = "RESOLVED";
|
|
684
660
|
TriggerState2["REJECTED"] = "REJECTED";
|
|
685
661
|
return TriggerState2;
|
|
686
|
-
}({});
|
|
662
|
+
})({});
|
|
687
663
|
var Trigger = class {
|
|
664
|
+
_options;
|
|
665
|
+
_promise;
|
|
666
|
+
_resolve;
|
|
667
|
+
_reject;
|
|
668
|
+
_state = "WAITING";
|
|
688
669
|
constructor(_options = {
|
|
689
670
|
autoReset: false
|
|
690
671
|
}) {
|
|
691
672
|
this._options = _options;
|
|
692
|
-
this._state = "WAITING";
|
|
693
673
|
this.reset();
|
|
694
674
|
}
|
|
695
675
|
get state() {
|
|
@@ -749,23 +729,61 @@ var Trigger = class {
|
|
|
749
729
|
return this;
|
|
750
730
|
}
|
|
751
731
|
};
|
|
732
|
+
var latch = ({ count = 1, timeout: timeout2 } = {}) => {
|
|
733
|
+
invariant(count >= 0, void 0, {
|
|
734
|
+
F: __dxlog_file2,
|
|
735
|
+
L: 139,
|
|
736
|
+
S: void 0,
|
|
737
|
+
A: [
|
|
738
|
+
"count >= 0",
|
|
739
|
+
""
|
|
740
|
+
]
|
|
741
|
+
});
|
|
742
|
+
let t;
|
|
743
|
+
let doResolve;
|
|
744
|
+
let doReject;
|
|
745
|
+
const promise = new Promise((resolve, reject) => {
|
|
746
|
+
doResolve = (value) => {
|
|
747
|
+
clearTimeout(t);
|
|
748
|
+
resolve(value);
|
|
749
|
+
};
|
|
750
|
+
doReject = (err) => {
|
|
751
|
+
clearTimeout(t);
|
|
752
|
+
reject(err);
|
|
753
|
+
};
|
|
754
|
+
});
|
|
755
|
+
if (count === 0) {
|
|
756
|
+
setTimeout(() => {
|
|
757
|
+
doResolve(0);
|
|
758
|
+
});
|
|
759
|
+
} else {
|
|
760
|
+
if (timeout2) {
|
|
761
|
+
t = setTimeout(() => {
|
|
762
|
+
doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
|
|
763
|
+
}, timeout2);
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
let i = 0;
|
|
767
|
+
return [
|
|
768
|
+
async () => await promise,
|
|
769
|
+
() => {
|
|
770
|
+
if (++i === count) {
|
|
771
|
+
doResolve(i);
|
|
772
|
+
}
|
|
773
|
+
return i;
|
|
774
|
+
},
|
|
775
|
+
(err) => doReject(err)
|
|
776
|
+
];
|
|
777
|
+
};
|
|
752
778
|
|
|
753
779
|
// src/observable.ts
|
|
754
780
|
var MulticastObservable = class _MulticastObservable extends Observable {
|
|
781
|
+
_value;
|
|
782
|
+
_observers = /* @__PURE__ */ new Set();
|
|
783
|
+
_observable;
|
|
784
|
+
_completed = new Trigger();
|
|
755
785
|
constructor(subscriber, _value) {
|
|
756
|
-
super((observer) => this._subscribe(observer)), this._value = _value
|
|
757
|
-
next: (value) => {
|
|
758
|
-
this._value = value;
|
|
759
|
-
this._observers.forEach((observer) => observer.next?.(value));
|
|
760
|
-
},
|
|
761
|
-
error: (err) => {
|
|
762
|
-
this._observers.forEach((observer) => observer.error?.(err));
|
|
763
|
-
},
|
|
764
|
-
complete: () => {
|
|
765
|
-
this._completed.wake();
|
|
766
|
-
this._observers.forEach((observer) => observer.complete?.());
|
|
767
|
-
}
|
|
768
|
-
};
|
|
786
|
+
super((observer) => this._subscribe(observer)), this._value = _value;
|
|
769
787
|
this._observable = typeof subscriber === "function" ? new Observable(subscriber) : subscriber;
|
|
770
788
|
this._observable.subscribe(this._handlers);
|
|
771
789
|
}
|
|
@@ -849,18 +867,30 @@ var MulticastObservable = class _MulticastObservable extends Observable {
|
|
|
849
867
|
this._observers.delete(observer);
|
|
850
868
|
};
|
|
851
869
|
}
|
|
870
|
+
_handlers = {
|
|
871
|
+
next: (value) => {
|
|
872
|
+
this._value = value;
|
|
873
|
+
this._observers.forEach((observer) => observer.next?.(value));
|
|
874
|
+
},
|
|
875
|
+
error: (err) => {
|
|
876
|
+
this._observers.forEach((observer) => observer.error?.(err));
|
|
877
|
+
},
|
|
878
|
+
complete: () => {
|
|
879
|
+
this._completed.wake();
|
|
880
|
+
this._observers.forEach((observer) => observer.complete?.());
|
|
881
|
+
}
|
|
882
|
+
};
|
|
852
883
|
};
|
|
853
884
|
var EMPTY_OBSERVABLE = MulticastObservable.of(null);
|
|
854
885
|
|
|
855
886
|
// src/observable-value.ts
|
|
856
887
|
import { createSetDispatch } from "@dxos/util";
|
|
857
888
|
var ObservableProvider = class {
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
this.
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
}
|
|
889
|
+
_handlers = /* @__PURE__ */ new Set();
|
|
890
|
+
_proxy = createSetDispatch({
|
|
891
|
+
handlers: this._handlers
|
|
892
|
+
});
|
|
893
|
+
_value;
|
|
864
894
|
/**
|
|
865
895
|
* Proxy used to dispatch callbacks to each subscription.
|
|
866
896
|
*/
|
|
@@ -881,8 +911,10 @@ var ObservableProvider = class {
|
|
|
881
911
|
}
|
|
882
912
|
};
|
|
883
913
|
var CancellableObservableProvider = class extends ObservableProvider {
|
|
914
|
+
_handleCancel;
|
|
915
|
+
_cancelled = false;
|
|
884
916
|
constructor(_handleCancel) {
|
|
885
|
-
super(), this._handleCancel = _handleCancel
|
|
917
|
+
super(), this._handleCancel = _handleCancel;
|
|
886
918
|
}
|
|
887
919
|
get cancelled() {
|
|
888
920
|
return this._cancelled;
|
|
@@ -992,12 +1024,14 @@ if (enabled) {
|
|
|
992
1024
|
|
|
993
1025
|
// src/task-scheduling.ts
|
|
994
1026
|
var DeferredTask = class {
|
|
1027
|
+
_ctx;
|
|
1028
|
+
_callback;
|
|
1029
|
+
_scheduled = false;
|
|
1030
|
+
_currentTask = null;
|
|
1031
|
+
_nextTask = new Trigger();
|
|
995
1032
|
constructor(_ctx, _callback) {
|
|
996
1033
|
this._ctx = _ctx;
|
|
997
1034
|
this._callback = _callback;
|
|
998
|
-
this._scheduled = false;
|
|
999
|
-
this._currentTask = null;
|
|
1000
|
-
this._nextTask = new Trigger();
|
|
1001
1035
|
}
|
|
1002
1036
|
get scheduled() {
|
|
1003
1037
|
return this._scheduled;
|
|
@@ -1127,11 +1161,15 @@ var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecyc
|
|
|
1127
1161
|
var INIT_RESTART_DELAY = 100;
|
|
1128
1162
|
var DEFAULT_MAX_RESTART_DELAY = 5e3;
|
|
1129
1163
|
var PersistentLifecycle = class extends Resource {
|
|
1164
|
+
_start;
|
|
1165
|
+
_stop;
|
|
1166
|
+
_onRestart;
|
|
1167
|
+
_maxRestartDelay;
|
|
1168
|
+
_currentState = void 0;
|
|
1169
|
+
_restartTask = void 0;
|
|
1170
|
+
_restartAfter = 0;
|
|
1130
1171
|
constructor({ start, stop, onRestart, maxRestartDelay = DEFAULT_MAX_RESTART_DELAY }) {
|
|
1131
1172
|
super();
|
|
1132
|
-
this._currentState = void 0;
|
|
1133
|
-
this._restartTask = void 0;
|
|
1134
|
-
this._restartAfter = 0;
|
|
1135
1173
|
this._start = start;
|
|
1136
1174
|
this._stop = stop;
|
|
1137
1175
|
this._onRestart = onRestart;
|
|
@@ -1293,20 +1331,6 @@ var makePushIterable = () => {
|
|
|
1293
1331
|
};
|
|
1294
1332
|
};
|
|
1295
1333
|
|
|
1296
|
-
// src/sink.ts
|
|
1297
|
-
var sink = (emitter, event, count = 1) => {
|
|
1298
|
-
const [getPromise, resolve] = trigger();
|
|
1299
|
-
let counter = 0;
|
|
1300
|
-
const listener = () => {
|
|
1301
|
-
if (++counter === count) {
|
|
1302
|
-
emitter.off(event, listener);
|
|
1303
|
-
resolve();
|
|
1304
|
-
}
|
|
1305
|
-
};
|
|
1306
|
-
emitter.on(event, listener);
|
|
1307
|
-
return getPromise();
|
|
1308
|
-
};
|
|
1309
|
-
|
|
1310
1334
|
// src/stream-to-array.ts
|
|
1311
1335
|
var streamToArray = (stream) => {
|
|
1312
1336
|
let deferred;
|
|
@@ -1352,11 +1376,6 @@ var streamToArray = (stream) => {
|
|
|
1352
1376
|
// src/test-stream.ts
|
|
1353
1377
|
import { Duplex } from "@dxos/node-std/stream";
|
|
1354
1378
|
var TestStream = class extends Duplex {
|
|
1355
|
-
constructor() {
|
|
1356
|
-
super(...arguments);
|
|
1357
|
-
this._received = Buffer.alloc(0);
|
|
1358
|
-
this._onWrite = new Event();
|
|
1359
|
-
}
|
|
1360
1379
|
static async assertConnectivity(stream1, stream2, { timeout: timeout2 = 200 } = {}) {
|
|
1361
1380
|
stream1.push("ping");
|
|
1362
1381
|
stream2.push("pong");
|
|
@@ -1369,6 +1388,8 @@ var TestStream = class extends Duplex {
|
|
|
1369
1388
|
})
|
|
1370
1389
|
]);
|
|
1371
1390
|
}
|
|
1391
|
+
_received = Buffer.alloc(0);
|
|
1392
|
+
_onWrite = new Event();
|
|
1372
1393
|
_write(chunk, encoding, callback) {
|
|
1373
1394
|
this._received = Buffer.concat([
|
|
1374
1395
|
this._received,
|
|
@@ -1410,13 +1431,48 @@ var waitForCondition = ({ condition, timeout: timeout2 = 0, interval: interval2
|
|
|
1410
1431
|
timeout: timeout2
|
|
1411
1432
|
});
|
|
1412
1433
|
};
|
|
1434
|
+
var until = (cb, timeout2) => {
|
|
1435
|
+
return new Promise((resolve, reject) => {
|
|
1436
|
+
const t = timeout2 && setTimeout(() => {
|
|
1437
|
+
reject(new Error(`Timeout after ${t}ms`));
|
|
1438
|
+
}, timeout2);
|
|
1439
|
+
setTimeout(async () => {
|
|
1440
|
+
try {
|
|
1441
|
+
await cb((value) => {
|
|
1442
|
+
t && clearTimeout(t);
|
|
1443
|
+
resolve(value);
|
|
1444
|
+
}, (error) => {
|
|
1445
|
+
t && clearTimeout(t);
|
|
1446
|
+
reject(error);
|
|
1447
|
+
});
|
|
1448
|
+
} catch (err) {
|
|
1449
|
+
reject(err);
|
|
1450
|
+
}
|
|
1451
|
+
});
|
|
1452
|
+
});
|
|
1453
|
+
};
|
|
1454
|
+
var untilPromise = (cb) => cb();
|
|
1455
|
+
var untilError = (cb) => {
|
|
1456
|
+
return new Promise((resolve, reject) => {
|
|
1457
|
+
setTimeout(async () => {
|
|
1458
|
+
try {
|
|
1459
|
+
await cb();
|
|
1460
|
+
reject(new Error("No error was thrown."));
|
|
1461
|
+
} catch (err) {
|
|
1462
|
+
resolve(err);
|
|
1463
|
+
}
|
|
1464
|
+
});
|
|
1465
|
+
});
|
|
1466
|
+
};
|
|
1413
1467
|
|
|
1414
1468
|
// src/timer.ts
|
|
1415
1469
|
var Timer = class {
|
|
1470
|
+
_callback;
|
|
1471
|
+
_state = new Event();
|
|
1472
|
+
_timer;
|
|
1473
|
+
_count = 0;
|
|
1416
1474
|
constructor(_callback) {
|
|
1417
1475
|
this._callback = _callback;
|
|
1418
|
-
this._state = new Event();
|
|
1419
|
-
this._count = 0;
|
|
1420
1476
|
}
|
|
1421
1477
|
get state() {
|
|
1422
1478
|
return this._state;
|
|
@@ -1459,51 +1515,23 @@ var Timer = class {
|
|
|
1459
1515
|
}
|
|
1460
1516
|
};
|
|
1461
1517
|
|
|
1462
|
-
// src/until.ts
|
|
1463
|
-
var until = (cb, timeout2) => {
|
|
1464
|
-
return new Promise((resolve, reject) => {
|
|
1465
|
-
const t = timeout2 && setTimeout(() => {
|
|
1466
|
-
reject(new Error(`Timeout after ${t}ms`));
|
|
1467
|
-
}, timeout2);
|
|
1468
|
-
setTimeout(async () => {
|
|
1469
|
-
try {
|
|
1470
|
-
await cb((value) => {
|
|
1471
|
-
t && clearTimeout(t);
|
|
1472
|
-
resolve(value);
|
|
1473
|
-
}, (error) => {
|
|
1474
|
-
t && clearTimeout(t);
|
|
1475
|
-
reject(error);
|
|
1476
|
-
});
|
|
1477
|
-
} catch (err) {
|
|
1478
|
-
reject(err);
|
|
1479
|
-
}
|
|
1480
|
-
});
|
|
1481
|
-
});
|
|
1482
|
-
};
|
|
1483
|
-
var untilPromise = (cb) => cb();
|
|
1484
|
-
var untilError = (cb) => {
|
|
1485
|
-
return new Promise((resolve, reject) => {
|
|
1486
|
-
setTimeout(async () => {
|
|
1487
|
-
try {
|
|
1488
|
-
await cb();
|
|
1489
|
-
reject(new Error("No error was thrown."));
|
|
1490
|
-
} catch (err) {
|
|
1491
|
-
resolve(err);
|
|
1492
|
-
}
|
|
1493
|
-
});
|
|
1494
|
-
});
|
|
1495
|
-
};
|
|
1496
|
-
|
|
1497
1518
|
// src/update-scheduler.ts
|
|
1498
1519
|
var TIME_PERIOD = 1e3;
|
|
1499
1520
|
var UpdateScheduler = class {
|
|
1521
|
+
_ctx;
|
|
1522
|
+
_callback;
|
|
1523
|
+
_params;
|
|
1524
|
+
/**
|
|
1525
|
+
* Promise that resolves when the callback is done.
|
|
1526
|
+
* Never rejects.
|
|
1527
|
+
*/
|
|
1528
|
+
_promise = null;
|
|
1529
|
+
_scheduled = false;
|
|
1530
|
+
_lastUpdateTime = -TIME_PERIOD;
|
|
1500
1531
|
constructor(_ctx, _callback, _params = {}) {
|
|
1501
1532
|
this._ctx = _ctx;
|
|
1502
1533
|
this._callback = _callback;
|
|
1503
1534
|
this._params = _params;
|
|
1504
|
-
this._promise = null;
|
|
1505
|
-
this._scheduled = false;
|
|
1506
|
-
this._lastUpdateTime = -TIME_PERIOD;
|
|
1507
1535
|
_ctx.onDispose(async () => {
|
|
1508
1536
|
await this._promise;
|
|
1509
1537
|
});
|
|
@@ -1516,13 +1544,13 @@ var UpdateScheduler = class {
|
|
|
1516
1544
|
await this._promise;
|
|
1517
1545
|
if (this._params.maxFrequency) {
|
|
1518
1546
|
const now = performance.now();
|
|
1519
|
-
const
|
|
1520
|
-
if (
|
|
1547
|
+
const delay2 = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
|
|
1548
|
+
if (delay2 > 0) {
|
|
1521
1549
|
await new Promise((resolve) => {
|
|
1522
1550
|
const timeoutId = setTimeout(() => {
|
|
1523
1551
|
clearContext();
|
|
1524
1552
|
resolve();
|
|
1525
|
-
},
|
|
1553
|
+
}, delay2);
|
|
1526
1554
|
const clearContext = this._ctx.onDispose(() => {
|
|
1527
1555
|
clearTimeout(timeoutId);
|
|
1528
1556
|
resolve();
|
|
@@ -1586,26 +1614,26 @@ export {
|
|
|
1586
1614
|
UpdateScheduler,
|
|
1587
1615
|
addEventListener,
|
|
1588
1616
|
addListener,
|
|
1589
|
-
asyncChain,
|
|
1590
1617
|
asyncReturn,
|
|
1591
1618
|
asyncTimeout,
|
|
1619
|
+
chain,
|
|
1592
1620
|
combine,
|
|
1593
|
-
createPromiseFromCallback,
|
|
1594
1621
|
debounce,
|
|
1595
1622
|
debounceAndThrottle,
|
|
1623
|
+
delay,
|
|
1596
1624
|
dumpLeaks,
|
|
1597
1625
|
interval,
|
|
1598
1626
|
latch,
|
|
1599
1627
|
makePushIterable,
|
|
1600
1628
|
observableError,
|
|
1601
1629
|
onEvent,
|
|
1630
|
+
promiseFromCallback,
|
|
1602
1631
|
runInContext,
|
|
1603
1632
|
runInContextAsync,
|
|
1604
1633
|
scheduleExponentialBackoffTaskInterval,
|
|
1605
1634
|
scheduleMicroTask,
|
|
1606
1635
|
scheduleTask,
|
|
1607
1636
|
scheduleTaskInterval,
|
|
1608
|
-
sink,
|
|
1609
1637
|
sleep,
|
|
1610
1638
|
sleepWithContext,
|
|
1611
1639
|
streamToArray,
|