nstdlib-nightly
Version:
Node.js standard library converted to runtime-agnostic ES modules.
59 lines (49 loc) • 1.85 kB
JavaScript
// 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 };