@dxos/async 0.8.4-main.f5c0578 → 0.8.4-main.fbb7a13
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 +142 -52
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +142 -52
- 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 +1 -0
- package/dist/types/src/cleanup.d.ts.map +1 -1
- package/dist/types/src/debounce.d.ts +15 -0
- package/dist/types/src/debounce.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 +28 -0
- package/dist/types/src/task-scheduling.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -7
- package/src/cleanup.ts +1 -0
- package/src/debounce.ts +52 -4
- package/src/persistent-lifecycle.ts +2 -2
- package/src/task-scheduling.ts +93 -0
|
@@ -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":6635,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/debounce.ts":{"bytes":8209,"imports":[],"format":"esm"},"src/errors.ts":{"bytes":2911,"imports":[],"format":"esm"},"src/timeout.ts":{"bytes":8042,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"src/callback.ts","kind":"import-statement","original":"./callback"},{"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":6436,"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":23288,"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":103799},"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":1045},"src/debounce.ts":{"bytesInOutput":1032},"src/errors.ts":{"bytesInOutput":476},"src/timeout.ts":{"bytesInOutput":1486},"src/event-emitter.ts":{"bytesInOutput":697},"src/events.ts":{"bytesInOutput":8703},"src/mutex.ts":{"bytesInOutput":2413},"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":4915},"src/track-leaks.ts":{"bytesInOutput":2136},"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":43712}}}
|
|
@@ -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
|
|
|
@@ -453,12 +479,11 @@ var EventListener = class {
|
|
|
453
479
|
once;
|
|
454
480
|
weak;
|
|
455
481
|
callback;
|
|
456
|
-
_clearDispose;
|
|
482
|
+
_clearDispose = void 0;
|
|
457
483
|
constructor(event, listener, ctx, once, weak) {
|
|
458
484
|
this.ctx = ctx;
|
|
459
485
|
this.once = once;
|
|
460
486
|
this.weak = weak;
|
|
461
|
-
this._clearDispose = void 0;
|
|
462
487
|
this._clearDispose = ctx.onDispose(() => {
|
|
463
488
|
event._removeListener(this);
|
|
464
489
|
});
|
|
@@ -631,23 +656,22 @@ var trigger = (timeout2) => {
|
|
|
631
656
|
resolver
|
|
632
657
|
];
|
|
633
658
|
};
|
|
634
|
-
var TriggerState = /* @__PURE__ */ function(TriggerState2) {
|
|
659
|
+
var TriggerState = /* @__PURE__ */ (function(TriggerState2) {
|
|
635
660
|
TriggerState2["WAITING"] = "WAITING";
|
|
636
661
|
TriggerState2["RESOLVED"] = "RESOLVED";
|
|
637
662
|
TriggerState2["REJECTED"] = "REJECTED";
|
|
638
663
|
return TriggerState2;
|
|
639
|
-
}({});
|
|
664
|
+
})({});
|
|
640
665
|
var Trigger = class {
|
|
641
666
|
_options;
|
|
642
667
|
_promise;
|
|
643
668
|
_resolve;
|
|
644
669
|
_reject;
|
|
645
|
-
_state;
|
|
670
|
+
_state = "WAITING";
|
|
646
671
|
constructor(_options = {
|
|
647
672
|
autoReset: false
|
|
648
673
|
}) {
|
|
649
674
|
this._options = _options;
|
|
650
|
-
this._state = "WAITING";
|
|
651
675
|
this.reset();
|
|
652
676
|
}
|
|
653
677
|
get state() {
|
|
@@ -757,23 +781,11 @@ var latch = ({ count = 1, timeout: timeout2 } = {}) => {
|
|
|
757
781
|
// src/observable.ts
|
|
758
782
|
var MulticastObservable = class _MulticastObservable extends Observable {
|
|
759
783
|
_value;
|
|
760
|
-
_observers;
|
|
784
|
+
_observers = /* @__PURE__ */ new Set();
|
|
761
785
|
_observable;
|
|
762
|
-
_completed;
|
|
786
|
+
_completed = new Trigger();
|
|
763
787
|
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
|
-
};
|
|
788
|
+
super((observer) => this._subscribe(observer)), this._value = _value;
|
|
777
789
|
this._observable = typeof subscriber === "function" ? new Observable(subscriber) : subscriber;
|
|
778
790
|
this._observable.subscribe(this._handlers);
|
|
779
791
|
}
|
|
@@ -857,7 +869,19 @@ var MulticastObservable = class _MulticastObservable extends Observable {
|
|
|
857
869
|
this._observers.delete(observer);
|
|
858
870
|
};
|
|
859
871
|
}
|
|
860
|
-
_handlers
|
|
872
|
+
_handlers = {
|
|
873
|
+
next: (value) => {
|
|
874
|
+
this._value = value;
|
|
875
|
+
this._observers.forEach((observer) => observer.next?.(value));
|
|
876
|
+
},
|
|
877
|
+
error: (err) => {
|
|
878
|
+
this._observers.forEach((observer) => observer.error?.(err));
|
|
879
|
+
},
|
|
880
|
+
complete: () => {
|
|
881
|
+
this._completed.wake();
|
|
882
|
+
this._observers.forEach((observer) => observer.complete?.());
|
|
883
|
+
}
|
|
884
|
+
};
|
|
861
885
|
};
|
|
862
886
|
var EMPTY_OBSERVABLE = MulticastObservable.of(null);
|
|
863
887
|
|
|
@@ -890,9 +914,9 @@ var ObservableProvider = class {
|
|
|
890
914
|
};
|
|
891
915
|
var CancellableObservableProvider = class extends ObservableProvider {
|
|
892
916
|
_handleCancel;
|
|
893
|
-
_cancelled;
|
|
917
|
+
_cancelled = false;
|
|
894
918
|
constructor(_handleCancel) {
|
|
895
|
-
super(), this._handleCancel = _handleCancel
|
|
919
|
+
super(), this._handleCancel = _handleCancel;
|
|
896
920
|
}
|
|
897
921
|
get cancelled() {
|
|
898
922
|
return this._cancelled;
|
|
@@ -1004,15 +1028,12 @@ if (enabled) {
|
|
|
1004
1028
|
var DeferredTask = class {
|
|
1005
1029
|
_ctx;
|
|
1006
1030
|
_callback;
|
|
1007
|
-
_scheduled;
|
|
1008
|
-
_currentTask;
|
|
1009
|
-
_nextTask;
|
|
1031
|
+
_scheduled = false;
|
|
1032
|
+
_currentTask = null;
|
|
1033
|
+
_nextTask = new Trigger();
|
|
1010
1034
|
constructor(_ctx, _callback) {
|
|
1011
1035
|
this._ctx = _ctx;
|
|
1012
1036
|
this._callback = _callback;
|
|
1013
|
-
this._scheduled = false;
|
|
1014
|
-
this._currentTask = null;
|
|
1015
|
-
this._nextTask = new Trigger();
|
|
1016
1037
|
}
|
|
1017
1038
|
get scheduled() {
|
|
1018
1039
|
return this._scheduled;
|
|
@@ -1053,6 +1074,78 @@ var DeferredTask = class {
|
|
|
1053
1074
|
await this._currentTask;
|
|
1054
1075
|
}
|
|
1055
1076
|
};
|
|
1077
|
+
var AsyncTask = class {
|
|
1078
|
+
#callback;
|
|
1079
|
+
#ctx = void 0;
|
|
1080
|
+
#scheduled = false;
|
|
1081
|
+
#currentTask = null;
|
|
1082
|
+
#nextTask = new Trigger();
|
|
1083
|
+
constructor(callback) {
|
|
1084
|
+
this.#callback = callback;
|
|
1085
|
+
}
|
|
1086
|
+
get scheduled() {
|
|
1087
|
+
return this.#scheduled;
|
|
1088
|
+
}
|
|
1089
|
+
/**
|
|
1090
|
+
* Context of the resource that owns the task.
|
|
1091
|
+
* When the context is disposed, the task is cancelled and cannot be scheduled again.
|
|
1092
|
+
*/
|
|
1093
|
+
// TODO(dmaretskyi): We don't really need to pass ctx in here, since close will also signal dispose.
|
|
1094
|
+
open(ctx) {
|
|
1095
|
+
this.#ctx = ctx;
|
|
1096
|
+
}
|
|
1097
|
+
/**
|
|
1098
|
+
* Closes the task and waits for it to finish if it is running.
|
|
1099
|
+
*/
|
|
1100
|
+
async close() {
|
|
1101
|
+
this.#ctx = void 0;
|
|
1102
|
+
await this.join();
|
|
1103
|
+
}
|
|
1104
|
+
[Symbol.asyncDispose]() {
|
|
1105
|
+
return this.close();
|
|
1106
|
+
}
|
|
1107
|
+
/**
|
|
1108
|
+
* Schedule the task to run asynchronously.
|
|
1109
|
+
*/
|
|
1110
|
+
schedule() {
|
|
1111
|
+
if (!this.#ctx || this.#ctx.disposed) {
|
|
1112
|
+
throw new Error("AsyncTask not open");
|
|
1113
|
+
}
|
|
1114
|
+
if (this.#scheduled) {
|
|
1115
|
+
return;
|
|
1116
|
+
}
|
|
1117
|
+
scheduleTask(this.#ctx, async () => {
|
|
1118
|
+
await this.#currentTask;
|
|
1119
|
+
if (!this.#ctx || this.#ctx.disposed) {
|
|
1120
|
+
return;
|
|
1121
|
+
}
|
|
1122
|
+
this.#scheduled = false;
|
|
1123
|
+
const completionTrigger = this.#nextTask;
|
|
1124
|
+
this.#nextTask = new Trigger();
|
|
1125
|
+
this.#currentTask = runInContextAsync(this.#ctx, () => this.#callback()).then(() => {
|
|
1126
|
+
completionTrigger.wake();
|
|
1127
|
+
});
|
|
1128
|
+
});
|
|
1129
|
+
this.#scheduled = true;
|
|
1130
|
+
}
|
|
1131
|
+
/**
|
|
1132
|
+
* Schedule the task to run and wait for it to finish.
|
|
1133
|
+
*/
|
|
1134
|
+
async runBlocking() {
|
|
1135
|
+
if (this.#ctx?.disposed) {
|
|
1136
|
+
throw new ContextDisposedError2();
|
|
1137
|
+
}
|
|
1138
|
+
this.schedule();
|
|
1139
|
+
await this.#nextTask.wait();
|
|
1140
|
+
}
|
|
1141
|
+
/**
|
|
1142
|
+
* Waits for the current task to finish if it is running.
|
|
1143
|
+
* Does not schedule a new task.
|
|
1144
|
+
*/
|
|
1145
|
+
async join() {
|
|
1146
|
+
await this.#currentTask;
|
|
1147
|
+
}
|
|
1148
|
+
};
|
|
1056
1149
|
var runInContext = (ctx, fn) => {
|
|
1057
1150
|
try {
|
|
1058
1151
|
fn();
|
|
@@ -1449,13 +1542,11 @@ var untilError = (cb) => {
|
|
|
1449
1542
|
// src/timer.ts
|
|
1450
1543
|
var Timer = class {
|
|
1451
1544
|
_callback;
|
|
1452
|
-
_state;
|
|
1545
|
+
_state = new Event();
|
|
1453
1546
|
_timer;
|
|
1454
|
-
_count;
|
|
1547
|
+
_count = 0;
|
|
1455
1548
|
constructor(_callback) {
|
|
1456
1549
|
this._callback = _callback;
|
|
1457
|
-
this._state = new Event();
|
|
1458
|
-
this._count = 0;
|
|
1459
1550
|
}
|
|
1460
1551
|
get state() {
|
|
1461
1552
|
return this._state;
|
|
@@ -1508,16 +1599,13 @@ var UpdateScheduler = class {
|
|
|
1508
1599
|
* Promise that resolves when the callback is done.
|
|
1509
1600
|
* Never rejects.
|
|
1510
1601
|
*/
|
|
1511
|
-
_promise;
|
|
1512
|
-
_scheduled;
|
|
1513
|
-
_lastUpdateTime;
|
|
1602
|
+
_promise = null;
|
|
1603
|
+
_scheduled = false;
|
|
1604
|
+
_lastUpdateTime = -TIME_PERIOD;
|
|
1514
1605
|
constructor(_ctx, _callback, _params = {}) {
|
|
1515
1606
|
this._ctx = _ctx;
|
|
1516
1607
|
this._callback = _callback;
|
|
1517
1608
|
this._params = _params;
|
|
1518
|
-
this._promise = null;
|
|
1519
|
-
this._scheduled = false;
|
|
1520
|
-
this._lastUpdateTime = -TIME_PERIOD;
|
|
1521
1609
|
_ctx.onDispose(async () => {
|
|
1522
1610
|
await this._promise;
|
|
1523
1611
|
});
|
|
@@ -1530,13 +1618,13 @@ var UpdateScheduler = class {
|
|
|
1530
1618
|
await this._promise;
|
|
1531
1619
|
if (this._params.maxFrequency) {
|
|
1532
1620
|
const now = performance.now();
|
|
1533
|
-
const
|
|
1534
|
-
if (
|
|
1621
|
+
const delay2 = this._lastUpdateTime + TIME_PERIOD / this._params.maxFrequency - now;
|
|
1622
|
+
if (delay2 > 0) {
|
|
1535
1623
|
await new Promise((resolve) => {
|
|
1536
1624
|
const timeoutId = setTimeout(() => {
|
|
1537
1625
|
clearContext();
|
|
1538
1626
|
resolve();
|
|
1539
|
-
},
|
|
1627
|
+
}, delay2);
|
|
1540
1628
|
const clearContext = this._ctx.onDispose(() => {
|
|
1541
1629
|
clearTimeout(timeoutId);
|
|
1542
1630
|
resolve();
|
|
@@ -1580,6 +1668,7 @@ var UpdateScheduler = class {
|
|
|
1580
1668
|
}
|
|
1581
1669
|
};
|
|
1582
1670
|
export {
|
|
1671
|
+
AsyncTask,
|
|
1583
1672
|
CancellableObservableProvider,
|
|
1584
1673
|
DeferredTask,
|
|
1585
1674
|
Event,
|
|
@@ -1606,6 +1695,7 @@ export {
|
|
|
1606
1695
|
combine,
|
|
1607
1696
|
debounce,
|
|
1608
1697
|
debounceAndThrottle,
|
|
1698
|
+
delay,
|
|
1609
1699
|
dumpLeaks,
|
|
1610
1700
|
interval,
|
|
1611
1701
|
latch,
|