@dxos/async 0.8.3 → 0.8.4-main.28f8d3d
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 +214 -181
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +214 -181
- 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 +19 -1
- package/dist/types/src/debounce.d.ts.map +1 -1
- package/dist/types/src/debounce.test.d.ts +2 -0
- package/dist/types/src/debounce.test.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +0 -4
- 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 +115 -0
- package/src/debounce.ts +40 -4
- package/src/event-emitter.test.ts +2 -1
- package/src/events.test.ts +1 -1
- package/src/index.ts +0 -4
- 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/lib/node/index.cjs +0 -1638
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -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/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/types.ts +0 -5
- package/src/until.test.ts +0 -47
- package/src/until.ts +0 -58
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
//
|
|
2
|
-
var
|
|
1
|
+
// src/callback.ts
|
|
2
|
+
var promiseFromCallback = (run) => new Promise((resolve, reject) => {
|
|
3
3
|
run((error, value) => {
|
|
4
4
|
if (error) {
|
|
5
5
|
reject(error);
|
|
@@ -9,16 +9,16 @@ var createPromiseFromCallback = (run) => new Promise((resolve, reject) => {
|
|
|
9
9
|
});
|
|
10
10
|
});
|
|
11
11
|
|
|
12
|
-
//
|
|
13
|
-
var
|
|
12
|
+
// src/chain.ts
|
|
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;
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
//
|
|
21
|
+
// src/cleanup.ts
|
|
22
22
|
import { ComplexMap } from "@dxos/util";
|
|
23
23
|
var combine = (...cleanupFns) => {
|
|
24
24
|
return () => {
|
|
@@ -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,16 +63,34 @@ var SubscriptionSet = class {
|
|
|
64
63
|
}
|
|
65
64
|
};
|
|
66
65
|
|
|
67
|
-
//
|
|
68
|
-
var debounce = (cb,
|
|
66
|
+
// src/debounce.ts
|
|
67
|
+
var debounce = (cb, delay = 100) => {
|
|
69
68
|
let t;
|
|
70
69
|
return (...args) => {
|
|
71
70
|
clearTimeout(t);
|
|
72
|
-
t = setTimeout(() => cb(...args),
|
|
71
|
+
t = setTimeout(() => cb(...args), delay);
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
var throttle = (cb, delay = 100) => {
|
|
75
|
+
let lastCall = 0;
|
|
76
|
+
return (...args) => {
|
|
77
|
+
const now = Date.now();
|
|
78
|
+
if (now - lastCall >= delay) {
|
|
79
|
+
cb(...args);
|
|
80
|
+
lastCall = now;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
var debounceAndThrottle = (cb, delay = 100) => {
|
|
85
|
+
const debounced = debounce(cb, delay);
|
|
86
|
+
const throttled = throttle(cb, delay);
|
|
87
|
+
return (...args) => {
|
|
88
|
+
debounced(...args);
|
|
89
|
+
throttled(...args);
|
|
73
90
|
};
|
|
74
91
|
};
|
|
75
92
|
|
|
76
|
-
//
|
|
93
|
+
// src/errors.ts
|
|
77
94
|
var toError = (err) => err === void 0 || typeof err === "string" ? new Error(err) : err;
|
|
78
95
|
var TimeoutError = class extends Error {
|
|
79
96
|
constructor(timeout2, label) {
|
|
@@ -88,7 +105,7 @@ var observableError = (observable, err) => {
|
|
|
88
105
|
}
|
|
89
106
|
};
|
|
90
107
|
|
|
91
|
-
//
|
|
108
|
+
// src/timeout.ts
|
|
92
109
|
import { ContextDisposedError } from "@dxos/context";
|
|
93
110
|
var sleep = (ms) => {
|
|
94
111
|
return new Promise((resolve) => {
|
|
@@ -104,6 +121,23 @@ var sleep = (ms) => {
|
|
|
104
121
|
sleeper();
|
|
105
122
|
});
|
|
106
123
|
};
|
|
124
|
+
var sleepWithContext = (ctx, ms) => {
|
|
125
|
+
const error = new ContextDisposedError();
|
|
126
|
+
return new Promise((resolve, reject) => {
|
|
127
|
+
if (ctx.disposed) {
|
|
128
|
+
reject(error);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
const timeout2 = setTimeout(() => {
|
|
132
|
+
clearDispose();
|
|
133
|
+
resolve();
|
|
134
|
+
}, ms);
|
|
135
|
+
const clearDispose = ctx.onDispose(() => {
|
|
136
|
+
clearTimeout(timeout2);
|
|
137
|
+
reject(error);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
};
|
|
107
141
|
var asyncReturn = () => sleep(0);
|
|
108
142
|
var asyncTimeout = async (promise, timeout2, err) => {
|
|
109
143
|
let timeoutId;
|
|
@@ -114,7 +148,7 @@ var asyncTimeout = async (promise, timeout2, err) => {
|
|
|
114
148
|
}, timeout2);
|
|
115
149
|
unrefTimeout(timeoutId);
|
|
116
150
|
});
|
|
117
|
-
const conditionTimeout = typeof promise === "function" ?
|
|
151
|
+
const conditionTimeout = typeof promise === "function" ? promiseFromCallback(promise) : promise;
|
|
118
152
|
return await Promise.race([
|
|
119
153
|
conditionTimeout,
|
|
120
154
|
timeoutPromise
|
|
@@ -127,25 +161,8 @@ var unrefTimeout = (timeoutId) => {
|
|
|
127
161
|
timeoutId.unref();
|
|
128
162
|
}
|
|
129
163
|
};
|
|
130
|
-
var sleepWithContext = (ctx, ms) => {
|
|
131
|
-
const error = new ContextDisposedError();
|
|
132
|
-
return new Promise((resolve, reject) => {
|
|
133
|
-
if (ctx.disposed) {
|
|
134
|
-
reject(error);
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
const timeout2 = setTimeout(() => {
|
|
138
|
-
clearDispose();
|
|
139
|
-
resolve();
|
|
140
|
-
}, ms);
|
|
141
|
-
const clearDispose = ctx.onDispose(() => {
|
|
142
|
-
clearTimeout(timeout2);
|
|
143
|
-
reject(error);
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
};
|
|
147
164
|
|
|
148
|
-
//
|
|
165
|
+
// src/event-emitter.ts
|
|
149
166
|
var onEvent = (eventEmitter, eventName, callback) => {
|
|
150
167
|
eventEmitter.on(eventName, callback);
|
|
151
168
|
return () => eventEmitter.off(eventName, callback);
|
|
@@ -168,15 +185,11 @@ var waitForEvent = (eventEmitter, eventName, test, timeout2, error) => {
|
|
|
168
185
|
return timeout2 ? asyncTimeout(promise, timeout2, error ?? new Error()).finally(off) : promise.finally(off);
|
|
169
186
|
};
|
|
170
187
|
|
|
171
|
-
//
|
|
188
|
+
// src/events.ts
|
|
172
189
|
import { Context } from "@dxos/context";
|
|
173
|
-
var __dxlog_file = "/
|
|
190
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/common/async/src/events.ts";
|
|
174
191
|
var DO_NOT_ERROR_ON_ASYNC_CALLBACK = true;
|
|
175
192
|
var Event = class _Event {
|
|
176
|
-
constructor() {
|
|
177
|
-
this._listeners = /* @__PURE__ */ new Set();
|
|
178
|
-
this._effects = /* @__PURE__ */ new Set();
|
|
179
|
-
}
|
|
180
193
|
/**
|
|
181
194
|
* Wrap objects that have on/off style event emitters.
|
|
182
195
|
*/
|
|
@@ -189,6 +202,8 @@ var Event = class _Event {
|
|
|
189
202
|
});
|
|
190
203
|
return event;
|
|
191
204
|
}
|
|
205
|
+
_listeners = /* @__PURE__ */ new Set();
|
|
206
|
+
_effects = /* @__PURE__ */ new Set();
|
|
192
207
|
/**
|
|
193
208
|
* Emit an event.
|
|
194
209
|
* In most cases should only be called by the class or entity containing the event.
|
|
@@ -432,6 +447,11 @@ var Event = class _Event {
|
|
|
432
447
|
}
|
|
433
448
|
};
|
|
434
449
|
var EventListener = class {
|
|
450
|
+
ctx;
|
|
451
|
+
once;
|
|
452
|
+
weak;
|
|
453
|
+
callback;
|
|
454
|
+
_clearDispose;
|
|
435
455
|
constructor(event, listener, ctx, once, weak) {
|
|
436
456
|
this.ctx = ctx;
|
|
437
457
|
this.once = once;
|
|
@@ -496,65 +516,13 @@ var weakListeners = () => {
|
|
|
496
516
|
};
|
|
497
517
|
};
|
|
498
518
|
|
|
499
|
-
//
|
|
500
|
-
import { invariant } from "@dxos/invariant";
|
|
501
|
-
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/common/async/src/latch.ts";
|
|
502
|
-
var latch = ({ count = 1, timeout: timeout2 } = {}) => {
|
|
503
|
-
invariant(count >= 0, void 0, {
|
|
504
|
-
F: __dxlog_file2,
|
|
505
|
-
L: 19,
|
|
506
|
-
S: void 0,
|
|
507
|
-
A: [
|
|
508
|
-
"count >= 0",
|
|
509
|
-
""
|
|
510
|
-
]
|
|
511
|
-
});
|
|
512
|
-
let t;
|
|
513
|
-
let doResolve;
|
|
514
|
-
let doReject;
|
|
515
|
-
const promise = new Promise((resolve, reject) => {
|
|
516
|
-
doResolve = (value) => {
|
|
517
|
-
clearTimeout(t);
|
|
518
|
-
resolve(value);
|
|
519
|
-
};
|
|
520
|
-
doReject = (err) => {
|
|
521
|
-
clearTimeout(t);
|
|
522
|
-
reject(err);
|
|
523
|
-
};
|
|
524
|
-
});
|
|
525
|
-
if (count === 0) {
|
|
526
|
-
setTimeout(() => {
|
|
527
|
-
doResolve(0);
|
|
528
|
-
});
|
|
529
|
-
} else {
|
|
530
|
-
if (timeout2) {
|
|
531
|
-
t = setTimeout(() => {
|
|
532
|
-
doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
|
|
533
|
-
}, timeout2);
|
|
534
|
-
}
|
|
535
|
-
}
|
|
536
|
-
let i = 0;
|
|
537
|
-
return [
|
|
538
|
-
async () => await promise,
|
|
539
|
-
() => {
|
|
540
|
-
if (++i === count) {
|
|
541
|
-
doResolve(i);
|
|
542
|
-
}
|
|
543
|
-
return i;
|
|
544
|
-
},
|
|
545
|
-
(err) => doReject(err)
|
|
546
|
-
];
|
|
547
|
-
};
|
|
548
|
-
|
|
549
|
-
// packages/common/async/src/mutex.ts
|
|
519
|
+
// src/mutex.ts
|
|
550
520
|
import "@dxos/util";
|
|
551
521
|
import { warnAfterTimeout } from "@dxos/debug";
|
|
552
522
|
var Mutex = class {
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
this._tag = null;
|
|
557
|
-
}
|
|
523
|
+
_queue = Promise.resolve();
|
|
524
|
+
_queueLength = 0;
|
|
525
|
+
_tag = null;
|
|
558
526
|
get tag() {
|
|
559
527
|
return this._tag;
|
|
560
528
|
}
|
|
@@ -600,6 +568,7 @@ var Mutex = class {
|
|
|
600
568
|
}
|
|
601
569
|
};
|
|
602
570
|
var MutexGuard = class {
|
|
571
|
+
_release;
|
|
603
572
|
constructor(_release) {
|
|
604
573
|
this._release = _release;
|
|
605
574
|
}
|
|
@@ -638,11 +607,13 @@ var synchronized = (target, propertyName, descriptor) => {
|
|
|
638
607
|
});
|
|
639
608
|
};
|
|
640
609
|
|
|
641
|
-
//
|
|
610
|
+
// src/observable.ts
|
|
642
611
|
import Observable from "zen-observable";
|
|
643
612
|
import PushStream from "zen-push";
|
|
644
613
|
|
|
645
|
-
//
|
|
614
|
+
// src/trigger.ts
|
|
615
|
+
import { invariant } from "@dxos/invariant";
|
|
616
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/trigger.ts";
|
|
646
617
|
var trigger = (timeout2) => {
|
|
647
618
|
let callback;
|
|
648
619
|
const promise = new Promise((resolve, reject) => {
|
|
@@ -665,6 +636,11 @@ var TriggerState = /* @__PURE__ */ function(TriggerState2) {
|
|
|
665
636
|
return TriggerState2;
|
|
666
637
|
}({});
|
|
667
638
|
var Trigger = class {
|
|
639
|
+
_options;
|
|
640
|
+
_promise;
|
|
641
|
+
_resolve;
|
|
642
|
+
_reject;
|
|
643
|
+
_state;
|
|
668
644
|
constructor(_options = {
|
|
669
645
|
autoReset: false
|
|
670
646
|
}) {
|
|
@@ -729,9 +705,59 @@ var Trigger = class {
|
|
|
729
705
|
return this;
|
|
730
706
|
}
|
|
731
707
|
};
|
|
708
|
+
var latch = ({ count = 1, timeout: timeout2 } = {}) => {
|
|
709
|
+
invariant(count >= 0, void 0, {
|
|
710
|
+
F: __dxlog_file2,
|
|
711
|
+
L: 139,
|
|
712
|
+
S: void 0,
|
|
713
|
+
A: [
|
|
714
|
+
"count >= 0",
|
|
715
|
+
""
|
|
716
|
+
]
|
|
717
|
+
});
|
|
718
|
+
let t;
|
|
719
|
+
let doResolve;
|
|
720
|
+
let doReject;
|
|
721
|
+
const promise = new Promise((resolve, reject) => {
|
|
722
|
+
doResolve = (value) => {
|
|
723
|
+
clearTimeout(t);
|
|
724
|
+
resolve(value);
|
|
725
|
+
};
|
|
726
|
+
doReject = (err) => {
|
|
727
|
+
clearTimeout(t);
|
|
728
|
+
reject(err);
|
|
729
|
+
};
|
|
730
|
+
});
|
|
731
|
+
if (count === 0) {
|
|
732
|
+
setTimeout(() => {
|
|
733
|
+
doResolve(0);
|
|
734
|
+
});
|
|
735
|
+
} else {
|
|
736
|
+
if (timeout2) {
|
|
737
|
+
t = setTimeout(() => {
|
|
738
|
+
doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
|
|
739
|
+
}, timeout2);
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
let i = 0;
|
|
743
|
+
return [
|
|
744
|
+
async () => await promise,
|
|
745
|
+
() => {
|
|
746
|
+
if (++i === count) {
|
|
747
|
+
doResolve(i);
|
|
748
|
+
}
|
|
749
|
+
return i;
|
|
750
|
+
},
|
|
751
|
+
(err) => doReject(err)
|
|
752
|
+
];
|
|
753
|
+
};
|
|
732
754
|
|
|
733
|
-
//
|
|
755
|
+
// src/observable.ts
|
|
734
756
|
var MulticastObservable = class _MulticastObservable extends Observable {
|
|
757
|
+
_value;
|
|
758
|
+
_observers;
|
|
759
|
+
_observable;
|
|
760
|
+
_completed;
|
|
735
761
|
constructor(subscriber, _value) {
|
|
736
762
|
super((observer) => this._subscribe(observer)), this._value = _value, this._observers = /* @__PURE__ */ new Set(), this._completed = new Trigger(), this._handlers = {
|
|
737
763
|
next: (value) => {
|
|
@@ -829,18 +855,18 @@ var MulticastObservable = class _MulticastObservable extends Observable {
|
|
|
829
855
|
this._observers.delete(observer);
|
|
830
856
|
};
|
|
831
857
|
}
|
|
858
|
+
_handlers;
|
|
832
859
|
};
|
|
833
860
|
var EMPTY_OBSERVABLE = MulticastObservable.of(null);
|
|
834
861
|
|
|
835
|
-
//
|
|
862
|
+
// src/observable-value.ts
|
|
836
863
|
import { createSetDispatch } from "@dxos/util";
|
|
837
864
|
var ObservableProvider = class {
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
this.
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
}
|
|
865
|
+
_handlers = /* @__PURE__ */ new Set();
|
|
866
|
+
_proxy = createSetDispatch({
|
|
867
|
+
handlers: this._handlers
|
|
868
|
+
});
|
|
869
|
+
_value;
|
|
844
870
|
/**
|
|
845
871
|
* Proxy used to dispatch callbacks to each subscription.
|
|
846
872
|
*/
|
|
@@ -861,6 +887,8 @@ var ObservableProvider = class {
|
|
|
861
887
|
}
|
|
862
888
|
};
|
|
863
889
|
var CancellableObservableProvider = class extends ObservableProvider {
|
|
890
|
+
_handleCancel;
|
|
891
|
+
_cancelled;
|
|
864
892
|
constructor(_handleCancel) {
|
|
865
893
|
super(), this._handleCancel = _handleCancel, this._cancelled = false;
|
|
866
894
|
}
|
|
@@ -877,19 +905,19 @@ var CancellableObservableProvider = class extends ObservableProvider {
|
|
|
877
905
|
}
|
|
878
906
|
};
|
|
879
907
|
|
|
880
|
-
//
|
|
908
|
+
// src/persistent-lifecycle.ts
|
|
881
909
|
import { LifecycleState, Resource, cancelWithContext } from "@dxos/context";
|
|
882
910
|
import { warnAfterTimeout as warnAfterTimeout2 } from "@dxos/debug";
|
|
883
911
|
import { log as log2 } from "@dxos/log";
|
|
884
912
|
|
|
885
|
-
//
|
|
913
|
+
// src/task-scheduling.ts
|
|
886
914
|
import { ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
|
|
887
915
|
import { StackTrace as StackTrace2 } from "@dxos/debug";
|
|
888
916
|
|
|
889
|
-
//
|
|
917
|
+
// src/track-leaks.ts
|
|
890
918
|
import { StackTrace } from "@dxos/debug";
|
|
891
919
|
import { log } from "@dxos/log";
|
|
892
|
-
var __dxlog_file3 = "/
|
|
920
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/common/async/src/track-leaks.ts";
|
|
893
921
|
var enabled = typeof process !== "undefined" && !!process.env.DX_TRACK_LEAKS;
|
|
894
922
|
var openResources = /* @__PURE__ */ new Set();
|
|
895
923
|
var handleSymbol = Symbol("checkLeaksHandle");
|
|
@@ -970,8 +998,13 @@ if (enabled) {
|
|
|
970
998
|
global.dxDumpLeaks = dumpLeaks;
|
|
971
999
|
}
|
|
972
1000
|
|
|
973
|
-
//
|
|
1001
|
+
// src/task-scheduling.ts
|
|
974
1002
|
var DeferredTask = class {
|
|
1003
|
+
_ctx;
|
|
1004
|
+
_callback;
|
|
1005
|
+
_scheduled;
|
|
1006
|
+
_currentTask;
|
|
1007
|
+
_nextTask;
|
|
975
1008
|
constructor(_ctx, _callback) {
|
|
976
1009
|
this._ctx = _ctx;
|
|
977
1010
|
this._callback = _callback;
|
|
@@ -1096,22 +1129,26 @@ var scheduleExponentialBackoffTaskInterval = (ctx, task, initialInterval) => {
|
|
|
1096
1129
|
});
|
|
1097
1130
|
};
|
|
1098
1131
|
|
|
1099
|
-
//
|
|
1132
|
+
// src/persistent-lifecycle.ts
|
|
1100
1133
|
function _ts_decorate(decorators, target, key, desc) {
|
|
1101
1134
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
1102
1135
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
1103
1136
|
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;
|
|
1104
1137
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1105
1138
|
}
|
|
1106
|
-
var __dxlog_file4 = "/
|
|
1139
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
|
|
1107
1140
|
var INIT_RESTART_DELAY = 100;
|
|
1108
1141
|
var DEFAULT_MAX_RESTART_DELAY = 5e3;
|
|
1109
1142
|
var PersistentLifecycle = class extends Resource {
|
|
1143
|
+
_start;
|
|
1144
|
+
_stop;
|
|
1145
|
+
_onRestart;
|
|
1146
|
+
_maxRestartDelay;
|
|
1147
|
+
_currentState = void 0;
|
|
1148
|
+
_restartTask = void 0;
|
|
1149
|
+
_restartAfter = 0;
|
|
1110
1150
|
constructor({ start, stop, onRestart, maxRestartDelay = DEFAULT_MAX_RESTART_DELAY }) {
|
|
1111
1151
|
super();
|
|
1112
|
-
this._currentState = void 0;
|
|
1113
|
-
this._restartTask = void 0;
|
|
1114
|
-
this._restartAfter = 0;
|
|
1115
1152
|
this._start = start;
|
|
1116
1153
|
this._stop = stop;
|
|
1117
1154
|
this._onRestart = onRestart;
|
|
@@ -1207,9 +1244,9 @@ _ts_decorate([
|
|
|
1207
1244
|
synchronized
|
|
1208
1245
|
], PersistentLifecycle.prototype, "scheduleRestart", null);
|
|
1209
1246
|
|
|
1210
|
-
//
|
|
1247
|
+
// src/push-iterable.ts
|
|
1211
1248
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
1212
|
-
var __dxlog_file5 = "/
|
|
1249
|
+
var __dxlog_file5 = "/__w/dxos/dxos/packages/common/async/src/push-iterable.ts";
|
|
1213
1250
|
var makePushIterable = () => {
|
|
1214
1251
|
const buf = [];
|
|
1215
1252
|
const trigger2 = new Trigger({
|
|
@@ -1273,21 +1310,7 @@ var makePushIterable = () => {
|
|
|
1273
1310
|
};
|
|
1274
1311
|
};
|
|
1275
1312
|
|
|
1276
|
-
//
|
|
1277
|
-
var sink = (emitter, event, count = 1) => {
|
|
1278
|
-
const [getPromise, resolve] = trigger();
|
|
1279
|
-
let counter = 0;
|
|
1280
|
-
const listener = () => {
|
|
1281
|
-
if (++counter === count) {
|
|
1282
|
-
emitter.off(event, listener);
|
|
1283
|
-
resolve();
|
|
1284
|
-
}
|
|
1285
|
-
};
|
|
1286
|
-
emitter.on(event, listener);
|
|
1287
|
-
return getPromise();
|
|
1288
|
-
};
|
|
1289
|
-
|
|
1290
|
-
// packages/common/async/src/stream-to-array.ts
|
|
1313
|
+
// src/stream-to-array.ts
|
|
1291
1314
|
var streamToArray = (stream) => {
|
|
1292
1315
|
let deferred;
|
|
1293
1316
|
if (!stream.readable) {
|
|
@@ -1329,14 +1352,9 @@ var streamToArray = (stream) => {
|
|
|
1329
1352
|
return deferred;
|
|
1330
1353
|
};
|
|
1331
1354
|
|
|
1332
|
-
//
|
|
1355
|
+
// src/test-stream.ts
|
|
1333
1356
|
import { Duplex } from "@dxos/node-std/stream";
|
|
1334
1357
|
var TestStream = class extends Duplex {
|
|
1335
|
-
constructor() {
|
|
1336
|
-
super(...arguments);
|
|
1337
|
-
this._received = Buffer.alloc(0);
|
|
1338
|
-
this._onWrite = new Event();
|
|
1339
|
-
}
|
|
1340
1358
|
static async assertConnectivity(stream1, stream2, { timeout: timeout2 = 200 } = {}) {
|
|
1341
1359
|
stream1.push("ping");
|
|
1342
1360
|
stream2.push("pong");
|
|
@@ -1349,6 +1367,8 @@ var TestStream = class extends Duplex {
|
|
|
1349
1367
|
})
|
|
1350
1368
|
]);
|
|
1351
1369
|
}
|
|
1370
|
+
_received = Buffer.alloc(0);
|
|
1371
|
+
_onWrite = new Event();
|
|
1352
1372
|
_write(chunk, encoding, callback) {
|
|
1353
1373
|
this._received = Buffer.concat([
|
|
1354
1374
|
this._received,
|
|
@@ -1365,7 +1385,7 @@ var TestStream = class extends Duplex {
|
|
|
1365
1385
|
}
|
|
1366
1386
|
};
|
|
1367
1387
|
|
|
1368
|
-
//
|
|
1388
|
+
// src/testing.ts
|
|
1369
1389
|
var waitForCondition = ({ condition, timeout: timeout2 = 0, interval: interval2 = 10, error, breakOnError = false }) => {
|
|
1370
1390
|
const stopTime = timeout2 ? Date.now() + timeout2 : 0;
|
|
1371
1391
|
const trigger2 = new Trigger();
|
|
@@ -1390,9 +1410,46 @@ var waitForCondition = ({ condition, timeout: timeout2 = 0, interval: interval2
|
|
|
1390
1410
|
timeout: timeout2
|
|
1391
1411
|
});
|
|
1392
1412
|
};
|
|
1413
|
+
var until = (cb, timeout2) => {
|
|
1414
|
+
return new Promise((resolve, reject) => {
|
|
1415
|
+
const t = timeout2 && setTimeout(() => {
|
|
1416
|
+
reject(new Error(`Timeout after ${t}ms`));
|
|
1417
|
+
}, timeout2);
|
|
1418
|
+
setTimeout(async () => {
|
|
1419
|
+
try {
|
|
1420
|
+
await cb((value) => {
|
|
1421
|
+
t && clearTimeout(t);
|
|
1422
|
+
resolve(value);
|
|
1423
|
+
}, (error) => {
|
|
1424
|
+
t && clearTimeout(t);
|
|
1425
|
+
reject(error);
|
|
1426
|
+
});
|
|
1427
|
+
} catch (err) {
|
|
1428
|
+
reject(err);
|
|
1429
|
+
}
|
|
1430
|
+
});
|
|
1431
|
+
});
|
|
1432
|
+
};
|
|
1433
|
+
var untilPromise = (cb) => cb();
|
|
1434
|
+
var untilError = (cb) => {
|
|
1435
|
+
return new Promise((resolve, reject) => {
|
|
1436
|
+
setTimeout(async () => {
|
|
1437
|
+
try {
|
|
1438
|
+
await cb();
|
|
1439
|
+
reject(new Error("No error was thrown."));
|
|
1440
|
+
} catch (err) {
|
|
1441
|
+
resolve(err);
|
|
1442
|
+
}
|
|
1443
|
+
});
|
|
1444
|
+
});
|
|
1445
|
+
};
|
|
1393
1446
|
|
|
1394
|
-
//
|
|
1447
|
+
// src/timer.ts
|
|
1395
1448
|
var Timer = class {
|
|
1449
|
+
_callback;
|
|
1450
|
+
_state;
|
|
1451
|
+
_timer;
|
|
1452
|
+
_count;
|
|
1396
1453
|
constructor(_callback) {
|
|
1397
1454
|
this._callback = _callback;
|
|
1398
1455
|
this._state = new Event();
|
|
@@ -1439,44 +1496,19 @@ var Timer = class {
|
|
|
1439
1496
|
}
|
|
1440
1497
|
};
|
|
1441
1498
|
|
|
1442
|
-
//
|
|
1443
|
-
var until = (cb, timeout2) => {
|
|
1444
|
-
return new Promise((resolve, reject) => {
|
|
1445
|
-
const t = timeout2 && setTimeout(() => {
|
|
1446
|
-
reject(new Error(`Timeout after ${t}ms`));
|
|
1447
|
-
}, timeout2);
|
|
1448
|
-
setTimeout(async () => {
|
|
1449
|
-
try {
|
|
1450
|
-
await cb((value) => {
|
|
1451
|
-
t && clearTimeout(t);
|
|
1452
|
-
resolve(value);
|
|
1453
|
-
}, (error) => {
|
|
1454
|
-
t && clearTimeout(t);
|
|
1455
|
-
reject(error);
|
|
1456
|
-
});
|
|
1457
|
-
} catch (err) {
|
|
1458
|
-
reject(err);
|
|
1459
|
-
}
|
|
1460
|
-
});
|
|
1461
|
-
});
|
|
1462
|
-
};
|
|
1463
|
-
var untilPromise = (cb) => cb();
|
|
1464
|
-
var untilError = (cb) => {
|
|
1465
|
-
return new Promise((resolve, reject) => {
|
|
1466
|
-
setTimeout(async () => {
|
|
1467
|
-
try {
|
|
1468
|
-
await cb();
|
|
1469
|
-
reject(new Error("No error was thrown."));
|
|
1470
|
-
} catch (err) {
|
|
1471
|
-
resolve(err);
|
|
1472
|
-
}
|
|
1473
|
-
});
|
|
1474
|
-
});
|
|
1475
|
-
};
|
|
1476
|
-
|
|
1477
|
-
// packages/common/async/src/update-scheduler.ts
|
|
1499
|
+
// src/update-scheduler.ts
|
|
1478
1500
|
var TIME_PERIOD = 1e3;
|
|
1479
1501
|
var UpdateScheduler = class {
|
|
1502
|
+
_ctx;
|
|
1503
|
+
_callback;
|
|
1504
|
+
_params;
|
|
1505
|
+
/**
|
|
1506
|
+
* Promise that resolves when the callback is done.
|
|
1507
|
+
* Never rejects.
|
|
1508
|
+
*/
|
|
1509
|
+
_promise;
|
|
1510
|
+
_scheduled;
|
|
1511
|
+
_lastUpdateTime;
|
|
1480
1512
|
constructor(_ctx, _callback, _params = {}) {
|
|
1481
1513
|
this._ctx = _ctx;
|
|
1482
1514
|
this._callback = _callback;
|
|
@@ -1566,29 +1598,30 @@ export {
|
|
|
1566
1598
|
UpdateScheduler,
|
|
1567
1599
|
addEventListener,
|
|
1568
1600
|
addListener,
|
|
1569
|
-
asyncChain,
|
|
1570
1601
|
asyncReturn,
|
|
1571
1602
|
asyncTimeout,
|
|
1603
|
+
chain,
|
|
1572
1604
|
combine,
|
|
1573
|
-
createPromiseFromCallback,
|
|
1574
1605
|
debounce,
|
|
1606
|
+
debounceAndThrottle,
|
|
1575
1607
|
dumpLeaks,
|
|
1576
1608
|
interval,
|
|
1577
1609
|
latch,
|
|
1578
1610
|
makePushIterable,
|
|
1579
1611
|
observableError,
|
|
1580
1612
|
onEvent,
|
|
1613
|
+
promiseFromCallback,
|
|
1581
1614
|
runInContext,
|
|
1582
1615
|
runInContextAsync,
|
|
1583
1616
|
scheduleExponentialBackoffTaskInterval,
|
|
1584
1617
|
scheduleMicroTask,
|
|
1585
1618
|
scheduleTask,
|
|
1586
1619
|
scheduleTaskInterval,
|
|
1587
|
-
sink,
|
|
1588
1620
|
sleep,
|
|
1589
1621
|
sleepWithContext,
|
|
1590
1622
|
streamToArray,
|
|
1591
1623
|
synchronized,
|
|
1624
|
+
throttle,
|
|
1592
1625
|
timeout,
|
|
1593
1626
|
toError,
|
|
1594
1627
|
trackLeaks,
|