aboutsummaryrefslogtreecommitdiffstats
path: root/node_modules/rxjs/dist/esm/internal/scheduler/VirtualTimeScheduler.js
diff options
context:
space:
mode:
authorPinapelz <yukais@pinapelz.com>2025-06-28 17:26:46 -0700
committerPinapelz <yukais@pinapelz.com>2025-06-28 17:43:56 -0700
commite4fa1e69e7ebfb627c7198fd1a9881e9327ec4d4 (patch)
tree06284a538a6008eca75051399e47db4e5d50301c /node_modules/rxjs/dist/esm/internal/scheduler/VirtualTimeScheduler.js
initial commit: scaffolding
Diffstat (limited to 'node_modules/rxjs/dist/esm/internal/scheduler/VirtualTimeScheduler.js')
-rw-r--r--node_modules/rxjs/dist/esm/internal/scheduler/VirtualTimeScheduler.js89
1 files changed, 89 insertions, 0 deletions
diff --git a/node_modules/rxjs/dist/esm/internal/scheduler/VirtualTimeScheduler.js b/node_modules/rxjs/dist/esm/internal/scheduler/VirtualTimeScheduler.js
new file mode 100644
index 0000000..607ced6
--- /dev/null
+++ b/node_modules/rxjs/dist/esm/internal/scheduler/VirtualTimeScheduler.js
@@ -0,0 +1,89 @@
+import { AsyncAction } from './AsyncAction';
+import { Subscription } from '../Subscription';
+import { AsyncScheduler } from './AsyncScheduler';
+export class VirtualTimeScheduler extends AsyncScheduler {
+ constructor(schedulerActionCtor = VirtualAction, maxFrames = Infinity) {
+ super(schedulerActionCtor, () => this.frame);
+ this.maxFrames = maxFrames;
+ this.frame = 0;
+ this.index = -1;
+ }
+ flush() {
+ const { actions, maxFrames } = this;
+ let error;
+ let action;
+ while ((action = actions[0]) && action.delay <= maxFrames) {
+ actions.shift();
+ this.frame = action.delay;
+ if ((error = action.execute(action.state, action.delay))) {
+ break;
+ }
+ }
+ if (error) {
+ while ((action = actions.shift())) {
+ action.unsubscribe();
+ }
+ throw error;
+ }
+ }
+}
+VirtualTimeScheduler.frameTimeFactor = 10;
+export class VirtualAction extends AsyncAction {
+ constructor(scheduler, work, index = (scheduler.index += 1)) {
+ super(scheduler, work);
+ this.scheduler = scheduler;
+ this.work = work;
+ this.index = index;
+ this.active = true;
+ this.index = scheduler.index = index;
+ }
+ schedule(state, delay = 0) {
+ if (Number.isFinite(delay)) {
+ if (!this.id) {
+ return super.schedule(state, delay);
+ }
+ this.active = false;
+ const action = new VirtualAction(this.scheduler, this.work);
+ this.add(action);
+ return action.schedule(state, delay);
+ }
+ else {
+ return Subscription.EMPTY;
+ }
+ }
+ requestAsyncId(scheduler, id, delay = 0) {
+ this.delay = scheduler.frame + delay;
+ const { actions } = scheduler;
+ actions.push(this);
+ actions.sort(VirtualAction.sortActions);
+ return 1;
+ }
+ recycleAsyncId(scheduler, id, delay = 0) {
+ return undefined;
+ }
+ _execute(state, delay) {
+ if (this.active === true) {
+ return super._execute(state, delay);
+ }
+ }
+ static sortActions(a, b) {
+ if (a.delay === b.delay) {
+ if (a.index === b.index) {
+ return 0;
+ }
+ else if (a.index > b.index) {
+ return 1;
+ }
+ else {
+ return -1;
+ }
+ }
+ else if (a.delay > b.delay) {
+ return 1;
+ }
+ else {
+ return -1;
+ }
+ }
+}
+//# sourceMappingURL=VirtualTimeScheduler.js.map \ No newline at end of file
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage