diff --git a/src/runtime/internal/loop.ts b/src/runtime/internal/loop.ts index 46fab8d567..e476879951 100644 --- a/src/runtime/internal/loop.ts +++ b/src/runtime/internal/loop.ts @@ -1,48 +1,50 @@ import { raf } from './environment'; - -export interface Task { - abort(): void; - promise: Promise; -} - -type TaskCallback = (now: number) => boolean | void; -type TaskEntry = { c: TaskCallback; f: () => void }; - -const tasks = new Set(); - -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} promise + */ \ No newline at end of file