@dxos/async 0.8.4-main.fd6878d → 0.8.4-staging.ac66bdf99f
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 +164 -67
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +164 -67
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +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/observable-value.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/task-scheduling.d.ts +29 -1
- package/dist/types/src/task-scheduling.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/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -7
- package/src/cleanup.ts +7 -4
- package/src/debounce.ts +69 -16
- package/src/event-emitter.test.ts +0 -1
- package/src/observable-value.ts +4 -2
- package/src/persistent-lifecycle.ts +2 -2
- package/src/task-scheduling.ts +95 -1
- package/src/timeout.ts +6 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/callback.ts":{"bytes":1595,"imports":[],"format":"esm"},"src/chain.ts":{"bytes":1619,"imports":[],"format":"esm"},"src/cleanup.ts":{"bytes":
|
|
1
|
+
{"inputs":{"src/callback.ts":{"bytes":1595,"imports":[],"format":"esm"},"src/chain.ts":{"bytes":1619,"imports":[],"format":"esm"},"src/cleanup.ts":{"bytes":6807,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/debounce.ts":{"bytes":9168,"imports":[],"format":"esm"},"src/errors.ts":{"bytes":2911,"imports":[],"format":"esm"},"src/timeout.ts":{"bytes":7598,"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":4155,"imports":[{"path":"src/timeout.ts","kind":"import-statement","original":"./timeout"}],"format":"esm"},"src/events.ts":{"bytes":39464,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true}],"format":"esm"},"src/mutex.ts":{"bytes":12647,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"src/trigger.ts":{"bytes":14052,"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":17824,"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":6444,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/track-leaks.ts":{"bytes":8414,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/task-scheduling.ts":{"bytes":23503,"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":12773,"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":5922,"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":4935,"imports":[],"format":"esm"},"src/test-stream.ts":{"bytes":5038,"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":8388,"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":5879,"imports":[{"path":"src/events.ts","kind":"import-statement","original":"./events"}],"format":"esm"},"src/update-scheduler.ts":{"bytes":9706,"imports":[{"path":"src/task-scheduling.ts","kind":"import-statement","original":"./task-scheduling"}],"format":"esm"},"src/index.ts":{"bytes":2335,"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":104247},"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":8703},"src/mutex.ts":{"bytesInOutput":2429},"src/observable.ts":{"bytesInOutput":3691},"src/trigger.ts":{"bytesInOutput":3014},"src/observable-value.ts":{"bytesInOutput":951},"src/persistent-lifecycle.ts":{"bytesInOutput":3536},"src/task-scheduling.ts":{"bytesInOutput":5099},"src/track-leaks.ts":{"bytesInOutput":2152},"src/push-iterable.ts":{"bytesInOutput":1389},"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":43966}}}
|
|
@@ -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);
|
|
@@ -453,12 +481,11 @@ var EventListener = class {
|
|
|
453
481
|
once;
|
|
454
482
|
weak;
|
|
455
483
|
callback;
|
|
456
|
-
_clearDispose;
|
|
484
|
+
_clearDispose = void 0;
|
|
457
485
|
constructor(event, listener, ctx, once, weak) {
|
|
458
486
|
this.ctx = ctx;
|
|
459
487
|
this.once = once;
|
|
460
488
|
this.weak = weak;
|
|
461
|
-
this._clearDispose = void 0;
|
|
462
489
|
this._clearDispose = ctx.onDispose(() => {
|
|
463
490
|
event._removeListener(this);
|
|
464
491
|
});
|
|
@@ -584,7 +611,7 @@ var MutexGuard = class {
|
|
|
584
611
|
this.release();
|
|
585
612
|
}
|
|
586
613
|
};
|
|
587
|
-
var classMutexSymbol = Symbol("class-mutex");
|
|
614
|
+
var classMutexSymbol = /* @__PURE__ */ Symbol("class-mutex");
|
|
588
615
|
var FORCE_DISABLE_WARNING = false;
|
|
589
616
|
var enableWarning = !FORCE_DISABLE_WARNING && globalThis.mochaExecutor;
|
|
590
617
|
var synchronized = (target, propertyName, descriptor) => {
|
|
@@ -631,23 +658,22 @@ var trigger = (timeout2) => {
|
|
|
631
658
|
resolver
|
|
632
659
|
];
|
|
633
660
|
};
|
|
634
|
-
var TriggerState = /* @__PURE__ */ function(TriggerState2) {
|
|
661
|
+
var TriggerState = /* @__PURE__ */ (function(TriggerState2) {
|
|
635
662
|
TriggerState2["WAITING"] = "WAITING";
|
|
636
663
|
TriggerState2["RESOLVED"] = "RESOLVED";
|
|
637
664
|
TriggerState2["REJECTED"] = "REJECTED";
|
|
638
665
|
return TriggerState2;
|
|
639
|
-
}({});
|
|
666
|
+
})({});
|
|
640
667
|
var Trigger = class {
|
|
641
668
|
_options;
|
|
642
669
|
_promise;
|
|
643
670
|
_resolve;
|
|
644
671
|
_reject;
|
|
645
|
-
_state;
|
|
672
|
+
_state = "WAITING";
|
|
646
673
|
constructor(_options = {
|
|
647
674
|
autoReset: false
|
|
648
675
|
}) {
|
|
649
676
|
this._options = _options;
|
|
650
|
-
this._state = "WAITING";
|
|
651
677
|
this.reset();
|
|
652
678
|
}
|
|
653
679
|
get state() {
|
|
@@ -757,23 +783,11 @@ var latch = ({ count = 1, timeout: timeout2 } = {}) => {
|
|
|
757
783
|
// src/observable.ts
|
|
758
784
|
var MulticastObservable = class _MulticastObservable extends Observable {
|
|
759
785
|
_value;
|
|
760
|
-
_observers;
|
|
786
|
+
_observers = /* @__PURE__ */ new Set();
|
|
761
787
|
_observable;
|
|
762
|
-
_completed;
|
|
788
|
+
_completed = new Trigger();
|
|
763
789
|
constructor(subscriber, _value) {
|
|
764
|
-
super((observer) => this._subscribe(observer)), this._value = _value
|
|
765
|
-
next: (value) => {
|
|
766
|
-
this._value = value;
|
|
767
|
-
this._observers.forEach((observer) => observer.next?.(value));
|
|
768
|
-
},
|
|
769
|
-
error: (err) => {
|
|
770
|
-
this._observers.forEach((observer) => observer.error?.(err));
|
|
771
|
-
},
|
|
772
|
-
complete: () => {
|
|
773
|
-
this._completed.wake();
|
|
774
|
-
this._observers.forEach((observer) => observer.complete?.());
|
|
775
|
-
}
|
|
776
|
-
};
|
|
790
|
+
super((observer) => this._subscribe(observer)), this._value = _value;
|
|
777
791
|
this._observable = typeof subscriber === "function" ? new Observable(subscriber) : subscriber;
|
|
778
792
|
this._observable.subscribe(this._handlers);
|
|
779
793
|
}
|
|
@@ -857,7 +871,19 @@ var MulticastObservable = class _MulticastObservable extends Observable {
|
|
|
857
871
|
this._observers.delete(observer);
|
|
858
872
|
};
|
|
859
873
|
}
|
|
860
|
-
_handlers
|
|
874
|
+
_handlers = {
|
|
875
|
+
next: (value) => {
|
|
876
|
+
this._value = value;
|
|
877
|
+
this._observers.forEach((observer) => observer.next?.(value));
|
|
878
|
+
},
|
|
879
|
+
error: (err) => {
|
|
880
|
+
this._observers.forEach((observer) => observer.error?.(err));
|
|
881
|
+
},
|
|
882
|
+
complete: () => {
|
|
883
|
+
this._completed.wake();
|
|
884
|
+
this._observers.forEach((observer) => observer.complete?.());
|
|
885
|
+
}
|
|
886
|
+
};
|
|
861
887
|
};
|
|
862
888
|
var EMPTY_OBSERVABLE = MulticastObservable.of(null);
|
|
863
889
|
|
|
@@ -890,9 +916,9 @@ var ObservableProvider = class {
|
|
|
890
916
|
};
|
|
891
917
|
var CancellableObservableProvider = class extends ObservableProvider {
|
|
892
918
|
_handleCancel;
|
|
893
|
-
_cancelled;
|
|
919
|
+
_cancelled = false;
|
|
894
920
|
constructor(_handleCancel) {
|
|
895
|
-
super(), this._handleCancel = _handleCancel
|
|
921
|
+
super(), this._handleCancel = _handleCancel;
|
|
896
922
|
}
|
|
897
923
|
get cancelled() {
|
|
898
924
|
return this._cancelled;
|
|
@@ -913,7 +939,7 @@ import { warnAfterTimeout as warnAfterTimeout2 } from "@dxos/debug";
|
|
|
913
939
|
import { log as log2 } from "@dxos/log";
|
|
914
940
|
|
|
915
941
|
// src/task-scheduling.ts
|
|
916
|
-
import { ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
|
|
942
|
+
import { Context as Context2, ContextDisposedError as ContextDisposedError2 } from "@dxos/context";
|
|
917
943
|
import { StackTrace as StackTrace2 } from "@dxos/debug";
|
|
918
944
|
|
|
919
945
|
// src/track-leaks.ts
|
|
@@ -922,7 +948,7 @@ import { log } from "@dxos/log";
|
|
|
922
948
|
var __dxlog_file3 = "/__w/dxos/dxos/packages/common/async/src/track-leaks.ts";
|
|
923
949
|
var enabled = typeof process !== "undefined" && !!process.env.DX_TRACK_LEAKS;
|
|
924
950
|
var openResources = /* @__PURE__ */ new Set();
|
|
925
|
-
var handleSymbol = Symbol("checkLeaksHandle");
|
|
951
|
+
var handleSymbol = /* @__PURE__ */ Symbol("checkLeaksHandle");
|
|
926
952
|
var trackResource = (resourceProvider) => {
|
|
927
953
|
if (!enabled) {
|
|
928
954
|
return () => {
|
|
@@ -1001,18 +1027,16 @@ if (enabled) {
|
|
|
1001
1027
|
}
|
|
1002
1028
|
|
|
1003
1029
|
// src/task-scheduling.ts
|
|
1030
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/common/async/src/task-scheduling.ts";
|
|
1004
1031
|
var DeferredTask = class {
|
|
1005
1032
|
_ctx;
|
|
1006
1033
|
_callback;
|
|
1007
|
-
_scheduled;
|
|
1008
|
-
_currentTask;
|
|
1009
|
-
_nextTask;
|
|
1034
|
+
_scheduled = false;
|
|
1035
|
+
_currentTask = null;
|
|
1036
|
+
_nextTask = new Trigger();
|
|
1010
1037
|
constructor(_ctx, _callback) {
|
|
1011
1038
|
this._ctx = _ctx;
|
|
1012
1039
|
this._callback = _callback;
|
|
1013
|
-
this._scheduled = false;
|
|
1014
|
-
this._currentTask = null;
|
|
1015
|
-
this._nextTask = new Trigger();
|
|
1016
1040
|
}
|
|
1017
1041
|
get scheduled() {
|
|
1018
1042
|
return this._scheduled;
|
|
@@ -1053,6 +1077,82 @@ var DeferredTask = class {
|
|
|
1053
1077
|
await this._currentTask;
|
|
1054
1078
|
}
|
|
1055
1079
|
};
|
|
1080
|
+
var AsyncTask = class {
|
|
1081
|
+
#callback;
|
|
1082
|
+
#ctx = void 0;
|
|
1083
|
+
#scheduled = false;
|
|
1084
|
+
#currentTask = null;
|
|
1085
|
+
#nextTask = new Trigger();
|
|
1086
|
+
constructor(callback) {
|
|
1087
|
+
this.#callback = callback;
|
|
1088
|
+
}
|
|
1089
|
+
get scheduled() {
|
|
1090
|
+
return this.#scheduled;
|
|
1091
|
+
}
|
|
1092
|
+
/**
|
|
1093
|
+
* Context of the resource that owns the task.
|
|
1094
|
+
* When the context is disposed, the task is cancelled and cannot be scheduled again.
|
|
1095
|
+
*/
|
|
1096
|
+
open() {
|
|
1097
|
+
this.#ctx = new Context2(void 0, {
|
|
1098
|
+
F: __dxlog_file4,
|
|
1099
|
+
L: 102
|
|
1100
|
+
});
|
|
1101
|
+
}
|
|
1102
|
+
/**
|
|
1103
|
+
* Closes the task and waits for it to finish if it is running.
|
|
1104
|
+
*/
|
|
1105
|
+
async close() {
|
|
1106
|
+
await this.#ctx?.dispose();
|
|
1107
|
+
await this.join();
|
|
1108
|
+
this.#ctx = void 0;
|
|
1109
|
+
}
|
|
1110
|
+
[Symbol.asyncDispose]() {
|
|
1111
|
+
return this.close();
|
|
1112
|
+
}
|
|
1113
|
+
/**
|
|
1114
|
+
* Schedule the task to run asynchronously.
|
|
1115
|
+
*/
|
|
1116
|
+
// TODO(dmaretskyi): Add scheduleAt. Where the earlier time will override the later one.
|
|
1117
|
+
schedule() {
|
|
1118
|
+
if (!this.#ctx || this.#ctx.disposed) {
|
|
1119
|
+
throw new Error("AsyncTask not open");
|
|
1120
|
+
}
|
|
1121
|
+
if (this.#scheduled) {
|
|
1122
|
+
return;
|
|
1123
|
+
}
|
|
1124
|
+
scheduleTask(this.#ctx, async () => {
|
|
1125
|
+
await this.#currentTask;
|
|
1126
|
+
if (!this.#ctx || this.#ctx.disposed) {
|
|
1127
|
+
return;
|
|
1128
|
+
}
|
|
1129
|
+
this.#scheduled = false;
|
|
1130
|
+
const completionTrigger = this.#nextTask;
|
|
1131
|
+
this.#nextTask = new Trigger();
|
|
1132
|
+
this.#currentTask = runInContextAsync(this.#ctx, () => this.#callback()).then(() => {
|
|
1133
|
+
completionTrigger.wake();
|
|
1134
|
+
});
|
|
1135
|
+
});
|
|
1136
|
+
this.#scheduled = true;
|
|
1137
|
+
}
|
|
1138
|
+
/**
|
|
1139
|
+
* Schedule the task to run and wait for it to finish.
|
|
1140
|
+
*/
|
|
1141
|
+
async runBlocking() {
|
|
1142
|
+
if (this.#ctx?.disposed) {
|
|
1143
|
+
throw new ContextDisposedError2();
|
|
1144
|
+
}
|
|
1145
|
+
this.schedule();
|
|
1146
|
+
await this.#nextTask.wait();
|
|
1147
|
+
}
|
|
1148
|
+
/**
|
|
1149
|
+
* Waits for the current task to finish if it is running.
|
|
1150
|
+
* Does not schedule a new task.
|
|
1151
|
+
*/
|
|
1152
|
+
async join() {
|
|
1153
|
+
await this.#currentTask;
|
|
1154
|
+
}
|
|
1155
|
+
};
|
|
1056
1156
|
var runInContext = (ctx, fn) => {
|
|
1057
1157
|
try {
|
|
1058
1158
|
fn();
|
|
@@ -1138,7 +1238,7 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
1138
1238
|
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;
|
|
1139
1239
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
1140
1240
|
}
|
|
1141
|
-
var
|
|
1241
|
+
var __dxlog_file5 = "/__w/dxos/dxos/packages/common/async/src/persistent-lifecycle.ts";
|
|
1142
1242
|
var INIT_RESTART_DELAY = 100;
|
|
1143
1243
|
var DEFAULT_MAX_RESTART_DELAY = 5e3;
|
|
1144
1244
|
var PersistentLifecycle = class extends Resource {
|
|
@@ -1167,7 +1267,7 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1167
1267
|
log2.warn("Restart failed", {
|
|
1168
1268
|
err
|
|
1169
1269
|
}, {
|
|
1170
|
-
F:
|
|
1270
|
+
F: __dxlog_file5,
|
|
1171
1271
|
L: 72,
|
|
1172
1272
|
S: this,
|
|
1173
1273
|
C: (f, a) => f(...a)
|
|
@@ -1179,7 +1279,7 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1179
1279
|
log2.warn("Start failed", {
|
|
1180
1280
|
err
|
|
1181
1281
|
}, {
|
|
1182
|
-
F:
|
|
1282
|
+
F: __dxlog_file5,
|
|
1183
1283
|
L: 78,
|
|
1184
1284
|
S: this,
|
|
1185
1285
|
C: (f, a) => f(...a)
|
|
@@ -1197,7 +1297,7 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1197
1297
|
log2(`restarting in ${this._restartAfter}ms`, {
|
|
1198
1298
|
state: this._lifecycleState
|
|
1199
1299
|
}, {
|
|
1200
|
-
F:
|
|
1300
|
+
F: __dxlog_file5,
|
|
1201
1301
|
L: 91,
|
|
1202
1302
|
S: this,
|
|
1203
1303
|
C: (f, a) => f(...a)
|
|
@@ -1220,7 +1320,7 @@ var PersistentLifecycle = class extends Resource {
|
|
|
1220
1320
|
await this._stop(this._currentState);
|
|
1221
1321
|
} catch (err) {
|
|
1222
1322
|
log2.catch(err, void 0, {
|
|
1223
|
-
F:
|
|
1323
|
+
F: __dxlog_file5,
|
|
1224
1324
|
L: 113,
|
|
1225
1325
|
S: this,
|
|
1226
1326
|
C: (f, a) => f(...a)
|
|
@@ -1248,7 +1348,7 @@ _ts_decorate([
|
|
|
1248
1348
|
|
|
1249
1349
|
// src/push-iterable.ts
|
|
1250
1350
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
1251
|
-
var
|
|
1351
|
+
var __dxlog_file6 = "/__w/dxos/dxos/packages/common/async/src/push-iterable.ts";
|
|
1252
1352
|
var makePushIterable = () => {
|
|
1253
1353
|
const buf = [];
|
|
1254
1354
|
const trigger2 = new Trigger({
|
|
@@ -1263,7 +1363,7 @@ var makePushIterable = () => {
|
|
|
1263
1363
|
}
|
|
1264
1364
|
const item = buf.shift();
|
|
1265
1365
|
invariant2(item, void 0, {
|
|
1266
|
-
F:
|
|
1366
|
+
F: __dxlog_file6,
|
|
1267
1367
|
L: 42,
|
|
1268
1368
|
S: this,
|
|
1269
1369
|
A: [
|
|
@@ -1449,13 +1549,11 @@ var untilError = (cb) => {
|
|
|
1449
1549
|
// src/timer.ts
|
|
1450
1550
|
var Timer = class {
|
|
1451
1551
|
_callback;
|
|
1452
|
-
_state;
|
|
1552
|
+
_state = new Event();
|
|
1453
1553
|
_timer;
|
|
1454
|
-
_count;
|
|
1554
|
+
_count = 0;
|
|
1455
1555
|
constructor(_callback) {
|
|
1456
1556
|
this._callback = _callback;
|
|
1457
|
-
this._state = new Event();
|
|
1458
|
-
this._count = 0;
|
|
1459
1557
|
}
|
|
1460
1558
|
get state() {
|
|
1461
1559
|
return this._state;
|
|
@@ -1508,16 +1606,13 @@ var UpdateScheduler = class {
|
|
|
1508
1606
|
* Promise that resolves when the callback is done.
|
|
1509
1607
|
* Never rejects.
|
|
1510
1608
|
*/
|
|
1511
|
-
_promise;
|
|
1512
|
-
_scheduled;
|
|
1513
|
-
_lastUpdateTime;
|
|
1609
|
+
_promise = null;
|
|
1610
|
+
_scheduled = false;
|
|
1611
|
+
_lastUpdateTime = -TIME_PERIOD;
|
|
1514
1612
|
constructor(_ctx, _callback, _params = {}) {
|
|
1515
1613
|
this._ctx = _ctx;
|
|
1516
1614
|
this._callback = _callback;
|
|
1517
1615
|
this._params = _params;
|
|
1518
|
-
this._promise = null;
|
|
1519
|
-
this._scheduled = false;
|
|
1520
|
-
this._lastUpdateTime = -TIME_PERIOD;
|
|
1521
1616
|
_ctx.onDispose(async () => {
|
|
1522
1617
|
await this._promise;
|
|
1523
1618
|
});
|
|
@@ -1530,13 +1625,13 @@ var UpdateScheduler = class {
|
|
|
1530
1625
|
await this._promise;
|
|
1531
1626
|
if (this._params.maxFrequency) {
|
|
1532
1627
|
const now = performance.now();
|
|
1533
|
-
const
|
|
1534
|
-
if (
|
|
1628
|
+
const delay2 = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
|
|
1629
|
+
if (delay2 > 0) {
|
|
1535
1630
|
await new Promise((resolve) => {
|
|
1536
1631
|
const timeoutId = setTimeout(() => {
|
|
1537
1632
|
clearContext();
|
|
1538
1633
|
resolve();
|
|
1539
|
-
},
|
|
1634
|
+
}, delay2);
|
|
1540
1635
|
const clearContext = this._ctx.onDispose(() => {
|
|
1541
1636
|
clearTimeout(timeoutId);
|
|
1542
1637
|
resolve();
|
|
@@ -1580,6 +1675,7 @@ var UpdateScheduler = class {
|
|
|
1580
1675
|
}
|
|
1581
1676
|
};
|
|
1582
1677
|
export {
|
|
1678
|
+
AsyncTask,
|
|
1583
1679
|
CancellableObservableProvider,
|
|
1584
1680
|
DeferredTask,
|
|
1585
1681
|
Event,
|
|
@@ -1606,6 +1702,7 @@ export {
|
|
|
1606
1702
|
combine,
|
|
1607
1703
|
debounce,
|
|
1608
1704
|
debounceAndThrottle,
|
|
1705
|
+
delay,
|
|
1609
1706
|
dumpLeaks,
|
|
1610
1707
|
interval,
|
|
1611
1708
|
latch,
|