@dxos/async 0.8.1 → 0.8.2-main.10c050d
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 +79 -58
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +82 -58
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +79 -58
- 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 +11 -0
- package/dist/types/src/cleanup.d.ts.map +1 -1
- 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 +5 -0
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/latch.d.ts.map +1 -1
- package/dist/types/src/mutex.d.ts +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 +1 -1
- package/dist/types/src/persistent-lifecycle.d.ts.map +1 -1
- package/dist/types/src/push-iterable.d.ts.map +1 -1
- package/dist/types/src/sink.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.map +1 -1
- package/dist/types/src/test-stream.d.ts.map +1 -1
- package/dist/types/src/testing.d.ts +2 -1
- package/dist/types/src/testing.d.ts.map +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/until.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 +7 -7
- package/src/cleanup.ts +32 -4
- package/src/events.ts +21 -13
- package/src/mutex.test.ts +2 -2
- package/src/mutex.ts +1 -1
- package/src/observable-value.ts +2 -2
- package/src/observable.ts +7 -4
- package/src/persistent-lifecycle.test.ts +2 -2
- package/src/persistent-lifecycle.ts +5 -5
- package/src/task-scheduling.ts +3 -3
- package/src/test-stream.ts +2 -2
- package/src/testing.test.ts +7 -1
- package/src/testing.ts +8 -4
- package/src/timeout.ts +1 -0
- package/src/timer.ts +2 -2
- package/src/trigger.ts +3 -3
- package/src/update-scheduler.ts +4 -4
|
@@ -27,6 +27,18 @@ var combine = (...cleanupFns) => {
|
|
|
27
27
|
cleanupFns.forEach((cleanupFn) => cleanupFn());
|
|
28
28
|
};
|
|
29
29
|
};
|
|
30
|
+
var timeout = (cb, ms = 0) => {
|
|
31
|
+
const t = setTimeout(cb, ms);
|
|
32
|
+
return () => clearTimeout(t);
|
|
33
|
+
};
|
|
34
|
+
var interval = (cb, ms) => {
|
|
35
|
+
const t = setInterval(cb, ms);
|
|
36
|
+
return () => clearInterval(t);
|
|
37
|
+
};
|
|
38
|
+
var addEventListener = (el, event, handler, options) => {
|
|
39
|
+
el.addEventListener(event, handler, options);
|
|
40
|
+
return () => el.removeEventListener(event, handler, options);
|
|
41
|
+
};
|
|
30
42
|
var SubscriptionList = class {
|
|
31
43
|
constructor() {
|
|
32
44
|
this._cleanups = [];
|
|
@@ -66,8 +78,8 @@ var debounce = (cb, wait = 100) => {
|
|
|
66
78
|
// packages/common/async/src/errors.ts
|
|
67
79
|
var toError = (err) => err === void 0 || typeof err === "string" ? new Error(err) : err;
|
|
68
80
|
var TimeoutError = class extends Error {
|
|
69
|
-
constructor(
|
|
70
|
-
super(
|
|
81
|
+
constructor(timeout2, label) {
|
|
82
|
+
super(timeout2 ? `Timeout [${timeout2.toLocaleString()}ms]${label === void 0 ? "" : `: ${label}`}` : "Timeout");
|
|
71
83
|
}
|
|
72
84
|
};
|
|
73
85
|
var observableError = (observable, err) => {
|
|
@@ -95,13 +107,13 @@ var sleep = (ms) => {
|
|
|
95
107
|
});
|
|
96
108
|
};
|
|
97
109
|
var asyncReturn = () => sleep(0);
|
|
98
|
-
var asyncTimeout = async (promise,
|
|
110
|
+
var asyncTimeout = async (promise, timeout2, err) => {
|
|
99
111
|
let timeoutId;
|
|
100
|
-
const throwable = err === void 0 || typeof err === "string" ? new TimeoutError(
|
|
112
|
+
const throwable = err === void 0 || typeof err === "string" ? new TimeoutError(timeout2, err) : err;
|
|
101
113
|
const timeoutPromise = new Promise((resolve, reject) => {
|
|
102
114
|
timeoutId = setTimeout(() => {
|
|
103
115
|
reject(throwable);
|
|
104
|
-
},
|
|
116
|
+
}, timeout2);
|
|
105
117
|
unrefTimeout(timeoutId);
|
|
106
118
|
});
|
|
107
119
|
const conditionTimeout = typeof promise === "function" ? createPromiseFromCallback(promise) : promise;
|
|
@@ -124,12 +136,12 @@ var sleepWithContext = (ctx, ms) => {
|
|
|
124
136
|
reject(error);
|
|
125
137
|
return;
|
|
126
138
|
}
|
|
127
|
-
const
|
|
139
|
+
const timeout2 = setTimeout(() => {
|
|
128
140
|
clearDispose();
|
|
129
141
|
resolve();
|
|
130
142
|
}, ms);
|
|
131
143
|
const clearDispose = ctx.onDispose(() => {
|
|
132
|
-
clearTimeout(
|
|
144
|
+
clearTimeout(timeout2);
|
|
133
145
|
reject(error);
|
|
134
146
|
});
|
|
135
147
|
});
|
|
@@ -146,7 +158,7 @@ var addListener = (eventEmitter, eventName, callback) => {
|
|
|
146
158
|
remove: () => off()
|
|
147
159
|
};
|
|
148
160
|
};
|
|
149
|
-
var waitForEvent = (eventEmitter, eventName, test,
|
|
161
|
+
var waitForEvent = (eventEmitter, eventName, test, timeout2, error) => {
|
|
150
162
|
let off;
|
|
151
163
|
const promise = new Promise((resolve) => {
|
|
152
164
|
off = onEvent(eventEmitter, eventName, (...args) => {
|
|
@@ -155,7 +167,7 @@ var waitForEvent = (eventEmitter, eventName, test, timeout, error) => {
|
|
|
155
167
|
}
|
|
156
168
|
});
|
|
157
169
|
});
|
|
158
|
-
return
|
|
170
|
+
return timeout2 ? asyncTimeout(promise, timeout2, error ?? new Error()).finally(off) : promise.finally(off);
|
|
159
171
|
};
|
|
160
172
|
|
|
161
173
|
// packages/common/async/src/events.ts
|
|
@@ -350,14 +362,14 @@ var Event = class _Event {
|
|
|
350
362
|
* the event is emitted after `timeout / 8` ms.
|
|
351
363
|
*/
|
|
352
364
|
// TODO(burdon): Factor out generic function.
|
|
353
|
-
debounce(
|
|
365
|
+
debounce(timeout2 = 0) {
|
|
354
366
|
let firing;
|
|
355
367
|
let lastFired;
|
|
356
368
|
const debouncedEvent = new _Event();
|
|
357
369
|
debouncedEvent.addEffect(() => {
|
|
358
370
|
const unsubscribe = this.on(() => {
|
|
359
371
|
if (!firing) {
|
|
360
|
-
const fireIn = !lastFired || Date.now() - lastFired >
|
|
372
|
+
const fireIn = !lastFired || Date.now() - lastFired > timeout2 ? timeout2 / 8 : timeout2;
|
|
361
373
|
firing = setTimeout(() => {
|
|
362
374
|
lastFired = Date.now();
|
|
363
375
|
firing = void 0;
|
|
@@ -379,6 +391,13 @@ var Event = class _Event {
|
|
|
379
391
|
return this;
|
|
380
392
|
}
|
|
381
393
|
/**
|
|
394
|
+
* Pipe the events into another event.
|
|
395
|
+
* @param event
|
|
396
|
+
*/
|
|
397
|
+
pipeInto(event) {
|
|
398
|
+
return this.on((data) => event.emit(data));
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
382
401
|
* Overridden to not return implementation details.
|
|
383
402
|
*/
|
|
384
403
|
toJSON() {
|
|
@@ -482,7 +501,7 @@ var weakListeners = () => {
|
|
|
482
501
|
// packages/common/async/src/latch.ts
|
|
483
502
|
import { invariant } from "@dxos/invariant";
|
|
484
503
|
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/common/async/src/latch.ts";
|
|
485
|
-
var latch = ({ count = 1, timeout } = {}) => {
|
|
504
|
+
var latch = ({ count = 1, timeout: timeout2 } = {}) => {
|
|
486
505
|
invariant(count >= 0, void 0, {
|
|
487
506
|
F: __dxlog_file2,
|
|
488
507
|
L: 19,
|
|
@@ -510,10 +529,10 @@ var latch = ({ count = 1, timeout } = {}) => {
|
|
|
510
529
|
doResolve(0);
|
|
511
530
|
});
|
|
512
531
|
} else {
|
|
513
|
-
if (
|
|
532
|
+
if (timeout2) {
|
|
514
533
|
t = setTimeout(() => {
|
|
515
|
-
doReject(new Error(`Timed out after ${
|
|
516
|
-
},
|
|
534
|
+
doReject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`));
|
|
535
|
+
}, timeout2);
|
|
517
536
|
}
|
|
518
537
|
}
|
|
519
538
|
let i = 0;
|
|
@@ -626,11 +645,11 @@ import Observable from "zen-observable";
|
|
|
626
645
|
import PushStream from "zen-push";
|
|
627
646
|
|
|
628
647
|
// packages/common/async/src/trigger.ts
|
|
629
|
-
var trigger = (
|
|
648
|
+
var trigger = (timeout2) => {
|
|
630
649
|
let callback;
|
|
631
650
|
const promise = new Promise((resolve, reject) => {
|
|
632
|
-
if (
|
|
633
|
-
setTimeout(() => reject(new Error(`Timed out after ${
|
|
651
|
+
if (timeout2) {
|
|
652
|
+
setTimeout(() => reject(new Error(`Timed out after ${timeout2.toLocaleString()}ms`)), timeout2);
|
|
634
653
|
}
|
|
635
654
|
callback = resolve;
|
|
636
655
|
});
|
|
@@ -641,12 +660,12 @@ var trigger = (timeout) => {
|
|
|
641
660
|
resolver
|
|
642
661
|
];
|
|
643
662
|
};
|
|
644
|
-
var TriggerState
|
|
645
|
-
(function(TriggerState2) {
|
|
663
|
+
var TriggerState = /* @__PURE__ */ function(TriggerState2) {
|
|
646
664
|
TriggerState2["WAITING"] = "WAITING";
|
|
647
665
|
TriggerState2["RESOLVED"] = "RESOLVED";
|
|
648
666
|
TriggerState2["REJECTED"] = "REJECTED";
|
|
649
|
-
|
|
667
|
+
return TriggerState2;
|
|
668
|
+
}({});
|
|
650
669
|
var Trigger = class {
|
|
651
670
|
constructor(_options = {
|
|
652
671
|
autoReset: false
|
|
@@ -661,9 +680,9 @@ var Trigger = class {
|
|
|
661
680
|
/**
|
|
662
681
|
* Wait until wake is called, with optional timeout.
|
|
663
682
|
*/
|
|
664
|
-
async wait({ timeout } = {}) {
|
|
665
|
-
if (
|
|
666
|
-
return asyncTimeout(this._promise,
|
|
683
|
+
async wait({ timeout: timeout2 } = {}) {
|
|
684
|
+
if (timeout2) {
|
|
685
|
+
return asyncTimeout(this._promise, timeout2, new TimeoutError(timeout2));
|
|
667
686
|
} else {
|
|
668
687
|
return this._promise;
|
|
669
688
|
}
|
|
@@ -716,11 +735,7 @@ var Trigger = class {
|
|
|
716
735
|
// packages/common/async/src/observable.ts
|
|
717
736
|
var MulticastObservable = class _MulticastObservable extends Observable {
|
|
718
737
|
constructor(subscriber, _value) {
|
|
719
|
-
super((observer) => this._subscribe(observer))
|
|
720
|
-
this._value = _value;
|
|
721
|
-
this._observers = /* @__PURE__ */ new Set();
|
|
722
|
-
this._completed = new Trigger();
|
|
723
|
-
this._handlers = {
|
|
738
|
+
super((observer) => this._subscribe(observer)), this._value = _value, this._observers = /* @__PURE__ */ new Set(), this._completed = new Trigger(), this._handlers = {
|
|
724
739
|
next: (value) => {
|
|
725
740
|
this._value = value;
|
|
726
741
|
this._observers.forEach((observer) => observer.next?.(value));
|
|
@@ -770,9 +785,9 @@ var MulticastObservable = class _MulticastObservable extends Observable {
|
|
|
770
785
|
*
|
|
771
786
|
* @returns Promise that resolves to the value of the observable at the time of completion.
|
|
772
787
|
*/
|
|
773
|
-
async wait({ timeout } = {}) {
|
|
788
|
+
async wait({ timeout: timeout2 } = {}) {
|
|
774
789
|
await this._completed.wait({
|
|
775
|
-
timeout
|
|
790
|
+
timeout: timeout2
|
|
776
791
|
});
|
|
777
792
|
return this.get();
|
|
778
793
|
}
|
|
@@ -849,9 +864,7 @@ var ObservableProvider = class {
|
|
|
849
864
|
};
|
|
850
865
|
var CancellableObservableProvider = class extends ObservableProvider {
|
|
851
866
|
constructor(_handleCancel) {
|
|
852
|
-
super();
|
|
853
|
-
this._handleCancel = _handleCancel;
|
|
854
|
-
this._cancelled = false;
|
|
867
|
+
super(), this._handleCancel = _handleCancel, this._cancelled = false;
|
|
855
868
|
}
|
|
856
869
|
get cancelled() {
|
|
857
870
|
return this._cancelled;
|
|
@@ -1034,17 +1047,17 @@ var scheduleTask = (ctx, fn, afterMs) => {
|
|
|
1034
1047
|
name: `task (${fn.name || "anonymous"})`,
|
|
1035
1048
|
openStack: new StackTrace2()
|
|
1036
1049
|
}));
|
|
1037
|
-
const
|
|
1050
|
+
const timeout2 = setTimeout(async () => {
|
|
1038
1051
|
clearDispose();
|
|
1039
1052
|
await runInContextAsync(ctx, fn);
|
|
1040
1053
|
clearTracking();
|
|
1041
1054
|
}, afterMs);
|
|
1042
1055
|
const clearDispose = ctx.onDispose(() => {
|
|
1043
1056
|
clearTracking();
|
|
1044
|
-
clearTimeout(
|
|
1057
|
+
clearTimeout(timeout2);
|
|
1045
1058
|
});
|
|
1046
1059
|
};
|
|
1047
|
-
var scheduleTaskInterval = (ctx, task,
|
|
1060
|
+
var scheduleTaskInterval = (ctx, task, interval2) => {
|
|
1048
1061
|
const clearTracking = trackResource(() => ({
|
|
1049
1062
|
name: `repeating task (${task.name || "anonymous"})`,
|
|
1050
1063
|
openStack: new StackTrace2()
|
|
@@ -1055,9 +1068,9 @@ var scheduleTaskInterval = (ctx, task, interval) => {
|
|
|
1055
1068
|
if (ctx.disposed) {
|
|
1056
1069
|
return;
|
|
1057
1070
|
}
|
|
1058
|
-
timeoutId = setTimeout(run,
|
|
1071
|
+
timeoutId = setTimeout(run, interval2);
|
|
1059
1072
|
};
|
|
1060
|
-
timeoutId = setTimeout(run,
|
|
1073
|
+
timeoutId = setTimeout(run, interval2);
|
|
1061
1074
|
ctx.onDispose(() => {
|
|
1062
1075
|
clearTracking();
|
|
1063
1076
|
clearTimeout(timeoutId);
|
|
@@ -1069,16 +1082,16 @@ var scheduleExponentialBackoffTaskInterval = (ctx, task, initialInterval) => {
|
|
|
1069
1082
|
openStack: new StackTrace2()
|
|
1070
1083
|
}));
|
|
1071
1084
|
let timeoutId;
|
|
1072
|
-
let
|
|
1085
|
+
let interval2 = initialInterval;
|
|
1073
1086
|
const repeat = async () => {
|
|
1074
1087
|
await runInContextAsync(ctx, task);
|
|
1075
1088
|
if (ctx.disposed) {
|
|
1076
1089
|
return;
|
|
1077
1090
|
}
|
|
1078
|
-
|
|
1079
|
-
timeoutId = setTimeout(repeat,
|
|
1091
|
+
interval2 *= 2;
|
|
1092
|
+
timeoutId = setTimeout(repeat, interval2);
|
|
1080
1093
|
};
|
|
1081
|
-
timeoutId = setTimeout(repeat,
|
|
1094
|
+
timeoutId = setTimeout(repeat, interval2);
|
|
1082
1095
|
ctx.onDispose(() => {
|
|
1083
1096
|
clearTracking();
|
|
1084
1097
|
clearTimeout(timeoutId);
|
|
@@ -1182,7 +1195,7 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1182
1195
|
/**
|
|
1183
1196
|
* Scheduling restart should be done from outside.
|
|
1184
1197
|
*/
|
|
1185
|
-
scheduleRestart() {
|
|
1198
|
+
async scheduleRestart() {
|
|
1186
1199
|
if (this._lifecycleState !== LifecycleState.OPEN) {
|
|
1187
1200
|
return;
|
|
1188
1201
|
}
|
|
@@ -1326,15 +1339,15 @@ var TestStream = class extends Duplex {
|
|
|
1326
1339
|
this._received = Buffer.alloc(0);
|
|
1327
1340
|
this._onWrite = new Event();
|
|
1328
1341
|
}
|
|
1329
|
-
static async assertConnectivity(stream1, stream2, { timeout = 200 } = {}) {
|
|
1342
|
+
static async assertConnectivity(stream1, stream2, { timeout: timeout2 = 200 } = {}) {
|
|
1330
1343
|
stream1.push("ping");
|
|
1331
1344
|
stream2.push("pong");
|
|
1332
1345
|
await Promise.all([
|
|
1333
1346
|
stream2.assertReceivedAsync("ping", {
|
|
1334
|
-
timeout
|
|
1347
|
+
timeout: timeout2
|
|
1335
1348
|
}),
|
|
1336
1349
|
stream1.assertReceivedAsync("pong", {
|
|
1337
|
-
timeout
|
|
1350
|
+
timeout: timeout2
|
|
1338
1351
|
})
|
|
1339
1352
|
]);
|
|
1340
1353
|
}
|
|
@@ -1348,15 +1361,15 @@ var TestStream = class extends Duplex {
|
|
|
1348
1361
|
}
|
|
1349
1362
|
_read(size) {
|
|
1350
1363
|
}
|
|
1351
|
-
assertReceivedAsync(data, { timeout = 200 } = {}) {
|
|
1364
|
+
assertReceivedAsync(data, { timeout: timeout2 = 200 } = {}) {
|
|
1352
1365
|
const dataBuffer = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
1353
|
-
return asyncTimeout(this._onWrite.waitForCondition(() => this._received.equals(dataBuffer)),
|
|
1366
|
+
return asyncTimeout(this._onWrite.waitForCondition(() => this._received.equals(dataBuffer)), timeout2);
|
|
1354
1367
|
}
|
|
1355
1368
|
};
|
|
1356
1369
|
|
|
1357
1370
|
// packages/common/async/src/testing.ts
|
|
1358
|
-
var waitForCondition = ({ condition, timeout = 0, interval = 10, error }) => {
|
|
1359
|
-
const stopTime =
|
|
1371
|
+
var waitForCondition = ({ condition, timeout: timeout2 = 0, interval: interval2 = 10, error, breakOnError = false }) => {
|
|
1372
|
+
const stopTime = timeout2 ? Date.now() + timeout2 : 0;
|
|
1360
1373
|
const trigger2 = new Trigger();
|
|
1361
1374
|
const waiter = async () => {
|
|
1362
1375
|
while (!stopTime || Date.now() < stopTime) {
|
|
@@ -1367,12 +1380,17 @@ var waitForCondition = ({ condition, timeout = 0, interval = 10, error }) => {
|
|
|
1367
1380
|
break;
|
|
1368
1381
|
}
|
|
1369
1382
|
} catch (err) {
|
|
1383
|
+
if (breakOnError === true) {
|
|
1384
|
+
trigger2.throw(err);
|
|
1385
|
+
}
|
|
1370
1386
|
}
|
|
1371
|
-
await sleep(
|
|
1387
|
+
await sleep(interval2);
|
|
1372
1388
|
}
|
|
1373
1389
|
};
|
|
1374
1390
|
setTimeout(waiter, 0);
|
|
1375
|
-
return
|
|
1391
|
+
return trigger2.wait({
|
|
1392
|
+
timeout: timeout2
|
|
1393
|
+
});
|
|
1376
1394
|
};
|
|
1377
1395
|
|
|
1378
1396
|
// packages/common/async/src/timer.ts
|
|
@@ -1403,11 +1421,11 @@ var Timer = class {
|
|
|
1403
1421
|
if (this._count >= (options.count ?? 0)) {
|
|
1404
1422
|
stop();
|
|
1405
1423
|
} else {
|
|
1406
|
-
const
|
|
1424
|
+
const interval2 = (options.interval ?? 0) + Math.random() * (options.jitter ?? 0);
|
|
1407
1425
|
this._timer = setTimeout(async () => {
|
|
1408
1426
|
await this._callback(this._count++);
|
|
1409
1427
|
run();
|
|
1410
|
-
},
|
|
1428
|
+
}, interval2);
|
|
1411
1429
|
}
|
|
1412
1430
|
};
|
|
1413
1431
|
this._state.emit(true);
|
|
@@ -1424,11 +1442,11 @@ var Timer = class {
|
|
|
1424
1442
|
};
|
|
1425
1443
|
|
|
1426
1444
|
// packages/common/async/src/until.ts
|
|
1427
|
-
var until = (cb,
|
|
1445
|
+
var until = (cb, timeout2) => {
|
|
1428
1446
|
return new Promise((resolve, reject) => {
|
|
1429
|
-
const t =
|
|
1447
|
+
const t = timeout2 && setTimeout(() => {
|
|
1430
1448
|
reject(new Error(`Timeout after ${t}ms`));
|
|
1431
|
-
},
|
|
1449
|
+
}, timeout2);
|
|
1432
1450
|
setTimeout(async () => {
|
|
1433
1451
|
try {
|
|
1434
1452
|
await cb((value) => {
|
|
@@ -1548,6 +1566,7 @@ export {
|
|
|
1548
1566
|
Trigger,
|
|
1549
1567
|
TriggerState,
|
|
1550
1568
|
UpdateScheduler,
|
|
1569
|
+
addEventListener,
|
|
1551
1570
|
addListener,
|
|
1552
1571
|
asyncChain,
|
|
1553
1572
|
asyncReturn,
|
|
@@ -1556,6 +1575,7 @@ export {
|
|
|
1556
1575
|
createPromiseFromCallback,
|
|
1557
1576
|
debounce,
|
|
1558
1577
|
dumpLeaks,
|
|
1578
|
+
interval,
|
|
1559
1579
|
latch,
|
|
1560
1580
|
makePushIterable,
|
|
1561
1581
|
observableError,
|
|
@@ -1571,6 +1591,7 @@ export {
|
|
|
1571
1591
|
sleepWithContext,
|
|
1572
1592
|
streamToArray,
|
|
1573
1593
|
synchronized,
|
|
1594
|
+
timeout,
|
|
1574
1595
|
toError,
|
|
1575
1596
|
trackLeaks,
|
|
1576
1597
|
trackResource,
|