Convert src/runtime/internal/loop.ts to JavaScript

pull/8569/head
S. Elliott Johnson 3 years ago
parent 048ae8f32e
commit 3ae44e612b

@ -1,48 +1,50 @@
import { raf } from './environment';
export interface Task {
abort(): void;
promise: Promise<void>;
}
type TaskCallback = (now: number) => boolean | void;
type TaskEntry = { c: TaskCallback; f: () => void };
const tasks = new Set<TaskEntry>();
function run_tasks(now: number) {
tasks.forEach((task) => {
if (!task.c(now)) {
tasks.delete(task);
task.f();
}
});
if (tasks.size !== 0) raf(run_tasks);
const tasks = new Set();
/** @param {number} now
* @returns {void}
*/
function run_tasks(now) {
tasks.forEach((task) => {
if (!task.c(now)) {
tasks.delete(task);
task.f();
}
});
if (tasks.size !== 0)
raf(run_tasks);
}
/**
* For testing purposes only!
* @returns {void}
*/
export function clear_loops() {
tasks.clear();
tasks.clear();
}
/**
* Creates a new task that runs on each raf frame
* until it returns a falsy value or is aborted
* @param {TaskCallback} callback
* @returns {import("/Users/elliottjohnson/dev/sveltejs/svelte/loop.ts-to-jsdoc").Task}
*/
export function loop(callback: TaskCallback): Task {
let task: TaskEntry;
export function loop(callback) {
/** @type {TaskEntry} */
let task;
if (tasks.size === 0)
raf(run_tasks);
return {
promise: new Promise((fulfill) => {
tasks.add((task = { c: callback, f: fulfill }));
}),
abort() {
tasks.delete(task);
}
};
}
if (tasks.size === 0) raf(run_tasks);
return {
promise: new Promise((fulfill) => {
tasks.add((task = { c: callback, f: fulfill }));
}),
abort() {
tasks.delete(task);
}
};
}
/** @typedef {(now: number) => boolean | void} TaskCallback */
/** @typedef {{ c: TaskCallback; f: () => void }} TaskEntry */
/** @typedef {Object} Task
* @property {Promise<void>} promise
*/
Loading…
Cancel
Save