UNPKG

@ayonli/jsext

Version:

A JavaScript extension package for building strong and modern applications.

91 lines (86 loc) 2.52 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var env = require('../env.js'); var error = require('../error.js'); /** * Displays a dialog with a progress bar indicating the ongoing state of the * `fn` function, and to wait until the job finishes or the user cancels the * dialog. * * @param onAbort If provided, the dialog will show a cancel button (or listen * for Escape in CLI) that allows the user to abort the task. This function can * either return a default/fallback result or throw an error to indicate the * cancellation. * * @example * ```ts * // default usage * import { progress } from "@ayonli/jsext/dialog"; * * const result = await progress("Processing...", async () => { * // ... some long-running task * return { ok: true }; * }); * * console.log(result); // { ok: true } * ``` * * @example * ```ts * // update state * import { progress } from "@ayonli/jsext/dialog"; * * const result = await progress("Processing...", async (set) => { * set({ percent: 0 }); * // ... some long-running task * set({ percent: 50, message: "Halfway there!" }); * // ... some long-running task * set({ percent: 100 }); * * return { ok: true }; * }); * * console.log(result); // { ok: true } * ``` * * @example * ```ts * // abortable * import { progress } from "@ayonli/jsext/dialog"; * * const result = await progress("Processing...", async (set, signal) => { * set({ percent: 0 }); * * if (!signal.aborted) { * // ... some long-running task * set({ percent: 50, message: "Halfway there!" }); * } * * if (!signal.aborted) { * // ... some long-running task * set({ percent: 100 }); * } * * return { ok: true }; * }, () => { * return { ok: false }; * }); * * console.log(result); // { ok: true } or { ok: false } * ``` */ async function progress(message, fn, onAbort = undefined) { if (env.isBrowserWindow) { const { progress } = await Promise.resolve().then(function () { return require('./web.js'); }); return await progress(message, fn, onAbort); } else if (env.isDeno || env.isNodeLike) { const { default: progress } = await Promise.resolve().then(function () { return require('./cli/progress.js'); }); return await progress(message, fn, onAbort); } else { error.throwUnsupportedRuntimeError(); } } exports.default = progress; //# sourceMappingURL=progress.js.map