@dxos/async 0.8.4-main.ae835ea → 0.8.4-main.bc2380dfbc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +102 -5
- package/dist/lib/browser/index.mjs +138 -96
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +138 -96
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/callback.d.ts.map +1 -1
- package/dist/types/src/chain.d.ts.map +1 -1
- package/dist/types/src/cleanup.d.ts +2 -2
- package/dist/types/src/cleanup.d.ts.map +1 -1
- package/dist/types/src/debounce.d.ts +29 -9
- package/dist/types/src/debounce.d.ts.map +1 -1
- package/dist/types/src/errors.d.ts.map +1 -1
- package/dist/types/src/event-emitter.d.ts.map +1 -1
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/mutex.d.ts.map +1 -1
- package/dist/types/src/observable-value.d.ts.map +1 -1
- package/dist/types/src/observable.d.ts.map +1 -1
- package/dist/types/src/persistent-lifecycle.d.ts +2 -2
- package/dist/types/src/persistent-lifecycle.d.ts.map +1 -1
- package/dist/types/src/stream-to-array.d.ts.map +1 -1
- package/dist/types/src/task-scheduling.d.ts +29 -1
- package/dist/types/src/task-scheduling.d.ts.map +1 -1
- package/dist/types/src/test-stream.d.ts.map +1 -1
- package/dist/types/src/testing.d.ts.map +1 -1
- package/dist/types/src/timeout.d.ts +1 -1
- package/dist/types/src/timeout.d.ts.map +1 -1
- package/dist/types/src/timer.d.ts.map +1 -1
- package/dist/types/src/track-leaks.d.ts.map +1 -1
- package/dist/types/src/trigger.d.ts.map +1 -1
- package/dist/types/src/update-scheduler.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -11
- package/src/cleanup.ts +7 -4
- package/src/debounce.ts +69 -16
- package/src/event-emitter.test.ts +0 -1
- package/src/observable-value.ts +4 -2
- package/src/persistent-lifecycle.ts +10 -2
- package/src/task-scheduling.ts +95 -1
- package/src/timeout.ts +6 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/callback.ts":{"bytes":
|
|
1
|
+
{"inputs":{"src/callback.ts":{"bytes":1516,"imports":[],"format":"esm"},"src/chain.ts":{"bytes":1547,"imports":[],"format":"esm"},"src/cleanup.ts":{"bytes":6733,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/debounce.ts":{"bytes":9093,"imports":[],"format":"esm"},"src/errors.ts":{"bytes":2838,"imports":[],"format":"esm"},"src/timeout.ts":{"bytes":7524,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"src/errors.ts","kind":"import-statement","original":"./errors"}],"format":"esm"},"src/event-emitter.ts":{"bytes":4075,"imports":[{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/events.ts":{"bytes":39225,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true}],"format":"esm"},"src/mutex.ts":{"bytes":12575,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"src/trigger.ts":{"bytes":13827,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/observable.ts":{"bytes":17747,"imports":[{"path":"zen-observable","kind":"import-statement","external":true},{"path":"zen-push","kind":"import-statement","external":true},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/observable-value.ts":{"bytes":6361,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/track-leaks.ts":{"bytes":7844,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/task-scheduling.ts":{"bytes":23346,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"src/track-leaks.ts","kind":"import-statement","original":"./track-leaks"},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/persistent-lifecycle.ts":{"bytes":13027,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/mutex.ts","kind":"import-statement","original":"./mutex"},{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/push-iterable.ts":{"bytes":5570,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/stream-to-array.ts":{"bytes":4853,"imports":[],"format":"esm"},"src/test-stream.ts":{"bytes":4960,"imports":[{"path":"@dxos/node-std/stream","kind":"import-statement","external":true},{"path":"src/events.ts","kind":"import-statement","original":"./events"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/testing.ts":{"bytes":8314,"imports":[{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"}],"format":"esm"},"src/timer.ts":{"bytes":5803,"imports":[{"path":"src/events.ts","kind":"import-statement","original":"./events"}],"format":"esm"},"src/update-scheduler.ts":{"bytes":9619,"imports":[{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"}],"format":"esm"},"src/index.ts":{"bytes":2259,"imports":[{"path":"src/callback.ts","kind":"import-statement","original":"./callback"},{"path":"src/chain.ts","kind":"import-statement","original":"./chain"},{"path":"src/cleanup.ts","kind":"import-statement","original":"./cleanup"},{"path":"src/debounce.ts","kind":"import-statement","original":"./debounce"},{"path":"src/errors.ts","kind":"import-statement","original":"./errors"},{"path":"src/event-emitter.ts","kind":"import-statement","original":"./event-emitter"},{"path":"src/events.ts","kind":"import-statement","original":"./events"},{"path":"src/mutex.ts","kind":"import-statement","original":"./mutex"},{"path":"src/observable.ts","kind":"import-statement","original":"./observable"},{"path":"src/observable-value.ts","kind":"import-statement","original":"./observable-value"},{"path":"src/persistent-lifecycle.ts","kind":"import-statement","original":"./persistent-lifecycle"},{"path":"src/push-iterable.ts","kind":"import-statement","original":"./push-iterable"},{"path":"src/stream-to-array.ts","kind":"import-statement","original":"./stream-to-array"},{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"},{"path":"src/test-stream.ts","kind":"import-statement","original":"./test-stream"},{"path":"src/testing.ts","kind":"import-statement","original":"./testing"},{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"},{"path":"src/timer.ts","kind":"import-statement","original":"./timer"},{"path":"src/track-leaks.ts","kind":"import-statement","original":"./track-leaks"},{"path":"src/trigger.ts","kind":"import-statement","original":"./trigger"},{"path":"src/update-scheduler.ts","kind":"import-statement","original":"./update-scheduler"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":104455},"dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"zen-observable","kind":"import-statement","external":true},{"path":"zen-push","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/node-std/stream","kind":"import-statement","external":true}],"exports":["AsyncTask","CancellableObservableProvider","DeferredTask","Event","MulticastObservable","Mutex","MutexGuard","Observable","ObservableProvider","PersistentLifecycle","PushStream","SubscriptionList","SubscriptionSet","TestStream","TimeoutError","Timer","Trigger","TriggerState","UpdateScheduler","addEventListener","addListener","asyncReturn","asyncTimeout","chain","combine","debounce","debounceAndThrottle","delay","dumpLeaks","interval","latch","makePushIterable","observableError","onEvent","promiseFromCallback","runInContext","runInContextAsync","scheduleExponentialBackoffTaskInterval","scheduleMicroTask","scheduleTask","scheduleTaskInterval","sleep","sleepWithContext","streamToArray","synchronized","throttle","timeout","toError","trackLeaks","trackResource","trigger","unrefTimeout","until","untilError","untilPromise","waitForCondition","waitForEvent"],"entryPoint":"src/index.ts","inputs":{"src/callback.ts":{"bytesInOutput":185},"src/index.ts":{"bytesInOutput":0},"src/chain.ts":{"bytesInOutput":216},"src/cleanup.ts":{"bytesInOutput":1090},"src/debounce.ts":{"bytesInOutput":1032},"src/errors.ts":{"bytesInOutput":476},"src/timeout.ts":{"bytesInOutput":1479},"src/event-emitter.ts":{"bytesInOutput":697},"src/events.ts":{"bytesInOutput":8516},"src/mutex.ts":{"bytesInOutput":2429},"src/observable.ts":{"bytesInOutput":3691},"src/trigger.ts":{"bytesInOutput":2831},"src/observable-value.ts":{"bytesInOutput":951},"src/persistent-lifecycle.ts":{"bytesInOutput":3164},"src/task-scheduling.ts":{"bytesInOutput":4964},"src/track-leaks.ts":{"bytesInOutput":1691},"src/push-iterable.ts":{"bytesInOutput":1145},"src/stream-to-array.ts":{"bytesInOutput":967},"src/test-stream.ts":{"bytesInOutput":915},"src/testing.ts":{"bytesInOutput":1419},"src/timer.ts":{"bytesInOutput":1065},"src/update-scheduler.ts":{"bytesInOutput":1952}},"bytes":42384}}}
|
|
@@ -24,7 +24,7 @@ var chain = (chain2) => async (elements) => {
|
|
|
24
24
|
import { ComplexMap } from "@dxos/util";
|
|
25
25
|
var combine = (...cleanupFns) => {
|
|
26
26
|
return () => {
|
|
27
|
-
cleanupFns.flat().forEach((cleanupFn) => cleanupFn());
|
|
27
|
+
cleanupFns.flat().filter((f) => typeof f === "function").forEach((cleanupFn) => cleanupFn());
|
|
28
28
|
};
|
|
29
29
|
};
|
|
30
30
|
var timeout = (cb, ms = 0) => {
|
|
@@ -41,8 +41,8 @@ var addEventListener = (target, type, listener, options) => {
|
|
|
41
41
|
};
|
|
42
42
|
var SubscriptionList = class {
|
|
43
43
|
_cleanups = [];
|
|
44
|
-
add(cb) {
|
|
45
|
-
this._cleanups.push(cb);
|
|
44
|
+
add(...cb) {
|
|
45
|
+
this._cleanups.push(...cb);
|
|
46
46
|
return this;
|
|
47
47
|
}
|
|
48
48
|
clear() {
|
|
@@ -66,29 +66,55 @@ var SubscriptionSet = class {
|
|
|
66
66
|
};
|
|
67
67
|
|
|
68
68
|
// src/debounce.ts
|
|
69
|
-
var
|
|
69
|
+
var delay = (cb, delay2 = 100) => {
|
|
70
|
+
let pending = false;
|
|
71
|
+
return (...args) => {
|
|
72
|
+
if (pending) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
pending = true;
|
|
76
|
+
setTimeout(() => {
|
|
77
|
+
try {
|
|
78
|
+
cb(...args);
|
|
79
|
+
} finally {
|
|
80
|
+
pending = false;
|
|
81
|
+
}
|
|
82
|
+
}, delay2);
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
var debounce = (cb, delay2 = 100) => {
|
|
70
86
|
let t;
|
|
71
87
|
return (...args) => {
|
|
72
88
|
clearTimeout(t);
|
|
73
|
-
t = setTimeout(() => cb(...args),
|
|
89
|
+
t = setTimeout(() => cb(...args), delay2);
|
|
74
90
|
};
|
|
75
91
|
};
|
|
76
|
-
var throttle = (cb,
|
|
92
|
+
var throttle = (cb, delay2 = 100) => {
|
|
77
93
|
let lastCall = 0;
|
|
78
94
|
return (...args) => {
|
|
79
95
|
const now = Date.now();
|
|
80
|
-
if (now - lastCall >=
|
|
96
|
+
if (now - lastCall >= delay2) {
|
|
81
97
|
cb(...args);
|
|
82
98
|
lastCall = now;
|
|
83
99
|
}
|
|
84
100
|
};
|
|
85
101
|
};
|
|
86
|
-
var debounceAndThrottle = (cb,
|
|
87
|
-
|
|
88
|
-
|
|
102
|
+
var debounceAndThrottle = (cb, delay2 = 100) => {
|
|
103
|
+
let timeout2;
|
|
104
|
+
let lastCall = 0;
|
|
89
105
|
return (...args) => {
|
|
90
|
-
|
|
91
|
-
|
|
106
|
+
const now = Date.now();
|
|
107
|
+
const delta = now - lastCall;
|
|
108
|
+
clearTimeout(timeout2);
|
|
109
|
+
if (delta >= delay2) {
|
|
110
|
+
cb(...args);
|
|
111
|
+
lastCall = now;
|
|
112
|
+
} else {
|
|
113
|
+
timeout2 = setTimeout(() => {
|
|
114
|
+
cb(...args);
|
|
115
|
+
lastCall = Date.now();
|
|
116
|
+
}, delay2 - delta);
|
|
117
|
+
}
|
|
92
118
|
};
|
|
93
119
|
};
|
|
94
120
|
|
|
@@ -142,6 +168,9 @@ var sleepWithContext = (ctx, ms) => {
|
|
|
142
168
|
};
|
|
143
169
|
var asyncReturn = () => sleep(0);
|
|
144
170
|
var asyncTimeout = async (promise, timeout2, err) => {
|
|
171
|
+
if (typeof promise === "function") {
|
|
172
|
+
throw new Error("First argument must be a promise.");
|
|
173
|
+
}
|
|
145
174
|
let timeoutId;
|
|
146
175
|
const throwable = err === void 0 || typeof err === "string" ? new TimeoutError(timeout2, err) : err;
|
|
147
176
|
const timeoutPromise = new Promise((resolve, reject) => {
|
|
@@ -150,9 +179,8 @@ var asyncTimeout = async (promise, timeout2, err) => {
|
|
|
150
179
|
}, timeout2);
|
|
151
180
|
unrefTimeout(timeoutId);
|
|
152
181
|
});
|
|
153
|
-
const conditionTimeout = typeof promise === "function" ? promiseFromCallback(promise) : promise;
|
|
154
182
|
return await Promise.race([
|
|
155
|
-
|
|
183
|
+
promise,
|
|
156
184
|
timeoutPromise
|
|
157
185
|
]).finally(() => {
|
|
158
186
|
clearTimeout(timeoutId);
|
|
@@ -189,7 +217,6 @@ var waitForEvent = (eventEmitter, eventName, test, timeout2, error) => {
|
|
|
189
217
|
|
|
190
218
|
// src/events.ts
|
|
191
219
|
import { Context } from "@dxos/context";
|
|
192
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/common/async/src/events.ts";
|
|
193
220
|
var DO_NOT_ERROR_ON_ASYNC_CALLBACK = true;
|
|
194
221
|
var Event = class _Event {
|
|
195
222
|
/**
|
|
@@ -244,10 +271,7 @@ var Event = class _Event {
|
|
|
244
271
|
_ctx,
|
|
245
272
|
_callback
|
|
246
273
|
] : [
|
|
247
|
-
new Context(
|
|
248
|
-
F: __dxlog_file,
|
|
249
|
-
L: 132
|
|
250
|
-
}),
|
|
274
|
+
new Context(),
|
|
251
275
|
_ctx
|
|
252
276
|
];
|
|
253
277
|
const weak = !!options?.weak;
|
|
@@ -277,10 +301,7 @@ var Event = class _Event {
|
|
|
277
301
|
_ctx,
|
|
278
302
|
_callback
|
|
279
303
|
] : [
|
|
280
|
-
new Context(
|
|
281
|
-
F: __dxlog_file,
|
|
282
|
-
L: 169
|
|
283
|
-
}),
|
|
304
|
+
new Context(),
|
|
284
305
|
_ctx
|
|
285
306
|
];
|
|
286
307
|
const listener = new EventListener(this, callback, ctx, true, false);
|
|
@@ -583,7 +604,7 @@ var MutexGuard = class {
|
|
|
583
604
|
this.release();
|
|
584
605
|
}
|
|
585
606
|
};
|
|
586
|
-
var classMutexSymbol = Symbol("class-mutex");
|
|
607
|
+
var classMutexSymbol = /* @__PURE__ */ Symbol("class-mutex");
|
|
587
608
|
var FORCE_DISABLE_WARNING = false;
|
|
588
609
|
var enableWarning = !FORCE_DISABLE_WARNING && globalThis.mochaExecutor;
|
|
589
610
|
var synchronized = (target, propertyName, descriptor) => {
|
|
@@ -614,7 +635,6 @@ import PushStream from "zen-push";
|
|
|
614
635
|
|
|
615
636
|
// src/trigger.ts
|
|
616
637
|
import { invariant } from "@dxos/invariant";
|
|
617
|
-
var __dxlog_file2 = "/__w/dxos/dxos/packages/common/async/src/trigger.ts";
|
|
618
638
|
var trigger = (timeout2) => {
|
|
619
639
|
let callback;
|
|
620
640
|
const promise = new Promise((resolve, reject) => {
|
|
@@ -706,15 +726,7 @@ var Trigger = class {
|
|
|
706
726
|
}
|
|
707
727
|
};
|
|
708
728
|
var latch = ({ count = 1, timeout: timeout2 } = {}) => {
|
|
709
|
-
invariant(count >= 0
|
|
710
|
-
F: __dxlog_file2,
|
|
711
|
-
L: 139,
|
|
712
|
-
S: void 0,
|
|
713
|
-
A: [
|
|
714
|
-
"count >= 0",
|
|
715
|
-
""
|
|
716
|
-
]
|
|
717
|
-
});
|
|
729
|
+
invariant(count >= 0);
|
|
718
730
|
let t;
|
|
719
731
|
let doResolve;
|
|
720
732
|
let doReject;
|
|
@@ -911,16 +923,15 @@ import { warnAfterTimeout as warnAfterTimeout2 } from "@dxos/debug";
|
|
|
911
923
|
import { log as log2 } from "@dxos/log";
|
|
912
924
|
|
|
913
925
|
// src/task-scheduling.ts
|
|
914
|
-
import { ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
|
|
926
|
+
import { Context as Context2, ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
|
|
915
927
|
import { StackTrace as StackTrace2 } from "@dxos/debug";
|
|
916
928
|
|
|
917
929
|
// src/track-leaks.ts
|
|
918
930
|
import { StackTrace } from "@dxos/debug";
|
|
919
931
|
import { log } from "@dxos/log";
|
|
920
|
-
var __dxlog_file3 = "/__w/dxos/dxos/packages/common/async/src/track-leaks.ts";
|
|
921
932
|
var enabled = typeof process !== "undefined" && !!process.env.DX_TRACK_LEAKS;
|
|
922
933
|
var openResources = /* @__PURE__ */ new Set();
|
|
923
|
-
var handleSymbol = Symbol("checkLeaksHandle");
|
|
934
|
+
var handleSymbol = /* @__PURE__ */ Symbol("checkLeaksHandle");
|
|
924
935
|
var trackResource = (resourceProvider) => {
|
|
925
936
|
if (!enabled) {
|
|
926
937
|
return () => {
|
|
@@ -967,31 +978,11 @@ var dumpLeaks = () => {
|
|
|
967
978
|
if (!enabled) {
|
|
968
979
|
return;
|
|
969
980
|
}
|
|
970
|
-
log.info(`Leaked resources ${openResources.size}
|
|
971
|
-
F: __dxlog_file3,
|
|
972
|
-
L: 82,
|
|
973
|
-
S: void 0,
|
|
974
|
-
C: (f, a) => f(...a)
|
|
975
|
-
});
|
|
981
|
+
log.info(`Leaked resources ${openResources.size}:`);
|
|
976
982
|
for (const resource of openResources) {
|
|
977
|
-
log.info(`- ${resource.name} at
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
S: void 0,
|
|
981
|
-
C: (f, a) => f(...a)
|
|
982
|
-
});
|
|
983
|
-
log.info(resource.openStack.getStack(1), void 0, {
|
|
984
|
-
F: __dxlog_file3,
|
|
985
|
-
L: 85,
|
|
986
|
-
S: void 0,
|
|
987
|
-
C: (f, a) => f(...a)
|
|
988
|
-
});
|
|
989
|
-
log.info("\n", void 0, {
|
|
990
|
-
F: __dxlog_file3,
|
|
991
|
-
L: 86,
|
|
992
|
-
S: void 0,
|
|
993
|
-
C: (f, a) => f(...a)
|
|
994
|
-
});
|
|
983
|
+
log.info(`- ${resource.name} at`);
|
|
984
|
+
log.info(resource.openStack.getStack(1));
|
|
985
|
+
log.info("\n");
|
|
995
986
|
}
|
|
996
987
|
};
|
|
997
988
|
if (enabled) {
|
|
@@ -1048,6 +1039,79 @@ var DeferredTask = class {
|
|
|
1048
1039
|
await this._currentTask;
|
|
1049
1040
|
}
|
|
1050
1041
|
};
|
|
1042
|
+
var AsyncTask = class {
|
|
1043
|
+
#callback;
|
|
1044
|
+
#ctx = void 0;
|
|
1045
|
+
#scheduled = false;
|
|
1046
|
+
#currentTask = null;
|
|
1047
|
+
#nextTask = new Trigger();
|
|
1048
|
+
constructor(callback) {
|
|
1049
|
+
this.#callback = callback;
|
|
1050
|
+
}
|
|
1051
|
+
get scheduled() {
|
|
1052
|
+
return this.#scheduled;
|
|
1053
|
+
}
|
|
1054
|
+
/**
|
|
1055
|
+
* Context of the resource that owns the task.
|
|
1056
|
+
* When the context is disposed, the task is cancelled and cannot be scheduled again.
|
|
1057
|
+
*/
|
|
1058
|
+
open() {
|
|
1059
|
+
this.#ctx = new Context2();
|
|
1060
|
+
}
|
|
1061
|
+
/**
|
|
1062
|
+
* Closes the task and waits for it to finish if it is running.
|
|
1063
|
+
*/
|
|
1064
|
+
async close() {
|
|
1065
|
+
await this.#ctx?.dispose();
|
|
1066
|
+
await this.join();
|
|
1067
|
+
this.#ctx = void 0;
|
|
1068
|
+
}
|
|
1069
|
+
[Symbol.asyncDispose]() {
|
|
1070
|
+
return this.close();
|
|
1071
|
+
}
|
|
1072
|
+
/**
|
|
1073
|
+
* Schedule the task to run asynchronously.
|
|
1074
|
+
*/
|
|
1075
|
+
// TODO(dmaretskyi): Add scheduleAt. Where the earlier time will override the later one.
|
|
1076
|
+
schedule() {
|
|
1077
|
+
if (!this.#ctx || this.#ctx.disposed) {
|
|
1078
|
+
throw new Error("AsyncTask not open");
|
|
1079
|
+
}
|
|
1080
|
+
if (this.#scheduled) {
|
|
1081
|
+
return;
|
|
1082
|
+
}
|
|
1083
|
+
scheduleTask(this.#ctx, async () => {
|
|
1084
|
+
await this.#currentTask;
|
|
1085
|
+
if (!this.#ctx || this.#ctx.disposed) {
|
|
1086
|
+
return;
|
|
1087
|
+
}
|
|
1088
|
+
this.#scheduled = false;
|
|
1089
|
+
const completionTrigger = this.#nextTask;
|
|
1090
|
+
this.#nextTask = new Trigger();
|
|
1091
|
+
this.#currentTask = runInContextAsync(this.#ctx, () => this.#callback()).then(() => {
|
|
1092
|
+
completionTrigger.wake();
|
|
1093
|
+
});
|
|
1094
|
+
});
|
|
1095
|
+
this.#scheduled = true;
|
|
1096
|
+
}
|
|
1097
|
+
/**
|
|
1098
|
+
* Schedule the task to run and wait for it to finish.
|
|
1099
|
+
*/
|
|
1100
|
+
async runBlocking() {
|
|
1101
|
+
if (this.#ctx?.disposed) {
|
|
1102
|
+
throw new ContextDisposedError2();
|
|
1103
|
+
}
|
|
1104
|
+
this.schedule();
|
|
1105
|
+
await this.#nextTask.wait();
|
|
1106
|
+
}
|
|
1107
|
+
/**
|
|
1108
|
+
* Waits for the current task to finish if it is running.
|
|
1109
|
+
* Does not schedule a new task.
|
|
1110
|
+
*/
|
|
1111
|
+
async join() {
|
|
1112
|
+
await this.#currentTask;
|
|
1113
|
+
}
|
|
1114
|
+
};
|
|
1051
1115
|
var runInContext = (ctx, fn) => {
|
|
1052
1116
|
try {
|
|
1053
1117
|
fn();
|
|
@@ -1133,7 +1197,6 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
1133
1197
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
1134
1198
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1135
1199
|
}
|
|
1136
|
-
var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
|
|
1137
1200
|
var INIT_RESTART_DELAY = 100;
|
|
1138
1201
|
var DEFAULT_MAX_RESTART_DELAY = 5e3;
|
|
1139
1202
|
var PersistentLifecycle = class extends Resource {
|
|
@@ -1159,25 +1222,21 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1159
1222
|
try {
|
|
1160
1223
|
await this._restart();
|
|
1161
1224
|
} catch (err) {
|
|
1225
|
+
if (this._ctx?.disposed) {
|
|
1226
|
+
return;
|
|
1227
|
+
}
|
|
1162
1228
|
log2.warn("Restart failed", {
|
|
1163
1229
|
err
|
|
1164
|
-
}, {
|
|
1165
|
-
F: __dxlog_file4,
|
|
1166
|
-
L: 72,
|
|
1167
|
-
S: this,
|
|
1168
|
-
C: (f, a) => f(...a)
|
|
1169
1230
|
});
|
|
1170
1231
|
this._restartTask?.schedule();
|
|
1171
1232
|
}
|
|
1172
1233
|
});
|
|
1173
1234
|
this._currentState = await this._start().catch((err) => {
|
|
1235
|
+
if (this._ctx?.disposed) {
|
|
1236
|
+
return void 0;
|
|
1237
|
+
}
|
|
1174
1238
|
log2.warn("Start failed", {
|
|
1175
1239
|
err
|
|
1176
|
-
}, {
|
|
1177
|
-
F: __dxlog_file4,
|
|
1178
|
-
L: 78,
|
|
1179
|
-
S: this,
|
|
1180
|
-
C: (f, a) => f(...a)
|
|
1181
1240
|
});
|
|
1182
1241
|
this._restartTask?.schedule();
|
|
1183
1242
|
return void 0;
|
|
@@ -1191,11 +1250,6 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1191
1250
|
async _restart() {
|
|
1192
1251
|
log2(`restarting in ${this._restartAfter}ms`, {
|
|
1193
1252
|
state: this._lifecycleState
|
|
1194
|
-
}, {
|
|
1195
|
-
F: __dxlog_file4,
|
|
1196
|
-
L: 91,
|
|
1197
|
-
S: this,
|
|
1198
|
-
C: (f, a) => f(...a)
|
|
1199
1253
|
});
|
|
1200
1254
|
await this._stopCurrentState();
|
|
1201
1255
|
if (this._lifecycleState !== LifecycleState.OPEN) {
|
|
@@ -1214,12 +1268,7 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1214
1268
|
try {
|
|
1215
1269
|
await this._stop(this._currentState);
|
|
1216
1270
|
} catch (err) {
|
|
1217
|
-
log2.catch(err
|
|
1218
|
-
F: __dxlog_file4,
|
|
1219
|
-
L: 113,
|
|
1220
|
-
S: this,
|
|
1221
|
-
C: (f, a) => f(...a)
|
|
1222
|
-
});
|
|
1271
|
+
log2.catch(err);
|
|
1223
1272
|
}
|
|
1224
1273
|
this._currentState = void 0;
|
|
1225
1274
|
}
|
|
@@ -1243,7 +1292,6 @@ _ts_decorate([
|
|
|
1243
1292
|
|
|
1244
1293
|
// src/push-iterable.ts
|
|
1245
1294
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
1246
|
-
var __dxlog_file5 = "/__w/dxos/dxos/packages/common/async/src/push-iterable.ts";
|
|
1247
1295
|
var makePushIterable = () => {
|
|
1248
1296
|
const buf = [];
|
|
1249
1297
|
const trigger2 = new Trigger({
|
|
@@ -1257,15 +1305,7 @@ var makePushIterable = () => {
|
|
|
1257
1305
|
await trigger2.wait();
|
|
1258
1306
|
}
|
|
1259
1307
|
const item = buf.shift();
|
|
1260
|
-
invariant2(item
|
|
1261
|
-
F: __dxlog_file5,
|
|
1262
|
-
L: 42,
|
|
1263
|
-
S: this,
|
|
1264
|
-
A: [
|
|
1265
|
-
"item",
|
|
1266
|
-
""
|
|
1267
|
-
]
|
|
1268
|
-
});
|
|
1308
|
+
invariant2(item);
|
|
1269
1309
|
switch (item.kind) {
|
|
1270
1310
|
case "next":
|
|
1271
1311
|
return {
|
|
@@ -1520,13 +1560,13 @@ var UpdateScheduler = class {
|
|
|
1520
1560
|
await this._promise;
|
|
1521
1561
|
if (this._params.maxFrequency) {
|
|
1522
1562
|
const now = performance.now();
|
|
1523
|
-
const
|
|
1524
|
-
if (
|
|
1563
|
+
const delay2 = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
|
|
1564
|
+
if (delay2 > 0) {
|
|
1525
1565
|
await new Promise((resolve) => {
|
|
1526
1566
|
const timeoutId = setTimeout(() => {
|
|
1527
1567
|
clearContext();
|
|
1528
1568
|
resolve();
|
|
1529
|
-
},
|
|
1569
|
+
}, delay2);
|
|
1530
1570
|
const clearContext = this._ctx.onDispose(() => {
|
|
1531
1571
|
clearTimeout(timeoutId);
|
|
1532
1572
|
resolve();
|
|
@@ -1570,6 +1610,7 @@ var UpdateScheduler = class {
|
|
|
1570
1610
|
}
|
|
1571
1611
|
};
|
|
1572
1612
|
export {
|
|
1613
|
+
AsyncTask,
|
|
1573
1614
|
CancellableObservableProvider,
|
|
1574
1615
|
DeferredTask,
|
|
1575
1616
|
Event,
|
|
@@ -1596,6 +1637,7 @@ export {
|
|
|
1596
1637
|
combine,
|
|
1597
1638
|
debounce,
|
|
1598
1639
|
debounceAndThrottle,
|
|
1640
|
+
delay,
|
|
1599
1641
|
dumpLeaks,
|
|
1600
1642
|
interval,
|
|
1601
1643
|
latch,
|