UNPKG

nstdlib-nightly

Version:

Node.js standard library converted to runtime-agnostic ES modules.

59 lines (49 loc) 1.85 kB
// Source: https://github.com/nodejs/node/blob/65eff1eb/lib/readline/promises.js import { Readline } from "nstdlib/lib/internal/readline/promises"; import { Interface as _Interface, kQuestion, kQuestionCancel, } from "nstdlib/lib/internal/readline/interface"; import { AbortError } from "nstdlib/lib/internal/errors"; import { validateAbortSignal } from "nstdlib/lib/internal/validators"; import { kEmptyObject } from "nstdlib/lib/internal/util"; import * as __hoisted_internal_events_abort_listener__ from "nstdlib/lib/internal/events/abort_listener"; let addAbortListener; class Interface extends _Interface { // eslint-disable-next-line no-useless-constructor constructor(input, output, completer, terminal) { super(input, output, completer, terminal); } question(query, options = kEmptyObject) { return new Promise((resolve, reject) => { let cb = resolve; if (options?.signal) { validateAbortSignal(options.signal, "options.signal"); if (options.signal.aborted) { return reject( new AbortError(undefined, { cause: options.signal.reason }), ); } const onAbort = () => { this[kQuestionCancel](); reject(new AbortError(undefined, { cause: options.signal.reason })); }; addAbortListener ??= __hoisted_internal_events_abort_listener__.addAbortListener; const disposable = addAbortListener(options.signal, onAbort); cb = (answer) => { disposable[Symbol.for("nodejs.dispose")](); resolve(answer); }; } this[kQuestion](query, cb); }); } } function createInterface(input, output, completer, terminal) { return new Interface(input, output, completer, terminal); } export { Interface }; export { Readline }; export { createInterface };