diff options
Diffstat (limited to 'src/js/out/modules_dev/node/readline.js')
-rw-r--r-- | src/js/out/modules_dev/node/readline.js | 1665 |
1 files changed, 1665 insertions, 0 deletions
diff --git a/src/js/out/modules_dev/node/readline.js b/src/js/out/modules_dev/node/readline.js new file mode 100644 index 000000000..3ccc142c3 --- /dev/null +++ b/src/js/out/modules_dev/node/readline.js @@ -0,0 +1,1665 @@ +var stripVTControlCharacters = function(str) { + return validateString(str, "str"), RegExpPrototypeSymbolReplace.call(ansi, str, ""); +}, promisify = function(original) { + if (validateFunction(original, "original"), original[kCustomPromisifiedSymbol]) { + var fn = original[kCustomPromisifiedSymbol]; + return validateFunction(fn, "util.promisify.custom"), ObjectDefineProperty(fn, kCustomPromisifiedSymbol, { + __proto__: null, + value: fn, + enumerable: !1, + writable: !1, + configurable: !0 + }); + } + var argumentNames = original[kCustomPromisifyArgsSymbol]; + function fn(...args) { + return new Promise((resolve, reject) => { + ArrayPrototypePush.call(args, (err, ...values) => { + if (err) + return reject(err); + if (argumentNames !== void 0 && values.length > 1) { + var obj = {}; + for (var i2 = 0;i2 < argumentNames.length; i2++) + obj[argumentNames[i2]] = values[i2]; + resolve(obj); + } else + resolve(values[0]); + }), ReflectApply(original, this, args); + }); + } + ObjectSetPrototypeOf(fn, ObjectGetPrototypeOf(original)), ObjectDefineProperty(fn, kCustomPromisifiedSymbol, { + __proto__: null, + value: fn, + enumerable: !1, + writable: !1, + configurable: !0 + }); + var descriptors = ObjectGetOwnPropertyDescriptors(original), propertiesValues = ObjectValues(descriptors); + for (var i = 0;i < propertiesValues.length; i++) + ObjectSetPrototypeOf(propertiesValues[i], null); + return ObjectDefineProperties(fn, descriptors); +}, getNodeErrorByName = function(typeName) { + var base = errorBases[typeName]; + if (base) + return base; + if (!ObjectKeys(VALID_NODE_ERROR_BASES).includes(typeName)) + throw new Error("Invalid NodeError type"); + var Base = VALID_NODE_ERROR_BASES[typeName]; + + class NodeError extends Base { + [kIsNodeError] = !0; + code; + constructor(msg, opts) { + super(msg, opts); + this.code = opts?.code || "ERR_GENERIC"; + } + toString() { + return `${this.name} [${this.code}]: ${this.message}`; + } + } + return errorBases[typeName] = NodeError, NodeError; +}, validateFunction = function(value, name) { + if (typeof value !== "function") + throw new ERR_INVALID_ARG_TYPE(name, "Function", value); +}, validateAbortSignal = function(signal, name) { + if (signal !== void 0 && (signal === null || typeof signal !== "object" || !("aborted" in signal))) + throw new ERR_INVALID_ARG_TYPE(name, "AbortSignal", signal); +}, validateArray = function(value, name, minLength = 0) { + if (!ArrayIsArray(value)) + throw new ERR_INVALID_ARG_TYPE(name, "Array", value); + if (value.length < minLength) { + var reason = `must be longer than ${minLength}`; + throw new ERR_INVALID_ARG_VALUE(name, value, reason); + } +}, validateString = function(value, name) { + if (typeof value !== "string") + throw new ERR_INVALID_ARG_TYPE(name, "string", value); +}, validateBoolean = function(value, name) { + if (typeof value !== "boolean") + throw new ERR_INVALID_ARG_TYPE(name, "boolean", value); +}; +var validateInteger = function(value, name, min = NumberMIN_SAFE_INTEGER, max = NumberMAX_SAFE_INTEGER) { + if (typeof value !== "number") + throw new ERR_INVALID_ARG_TYPE(name, "number", value); + if (!NumberIsInteger(value)) + throw new ERR_OUT_OF_RANGE(name, "an integer", value); + if (value < min || value > max) + throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value); +}, validateUint32 = function(value, name, positive = !1) { + if (typeof value !== "number") + throw new ERR_INVALID_ARG_TYPE(name, "number", value); + if (!NumberIsInteger(value)) + throw new ERR_OUT_OF_RANGE(name, "an integer", value); + var min = positive ? 1 : 0, max = 4294967295; + if (value < min || value > max) + throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value); +}, CSI = function(strings, ...args) { + var ret = `${kEscape}[`; + for (var n = 0;n < strings.length; n++) + if (ret += strings[n], n < args.length) + ret += args[n]; + return ret; +}, charLengthLeft = function(str, i) { + if (i <= 0) + return 0; + if (i > 1 && StringPrototypeCodePointAt.call(str, i - 2) >= kUTF16SurrogateThreshold || StringPrototypeCodePointAt.call(str, i - 1) >= kUTF16SurrogateThreshold) + return 2; + return 1; +}, charLengthAt = function(str, i) { + if (str.length <= i) + return 1; + return StringPrototypeCodePointAt.call(str, i) >= kUTF16SurrogateThreshold ? 2 : 1; +}; +function* emitKeys(stream) { + while (!0) { + var ch = yield, s = ch, escaped = !1, keySeq = null, keyName, keyCtrl2 = !1, keyMeta = !1, keyShift = !1; + if (ch === kEscape) { + if (escaped = !0, s += ch = yield, ch === kEscape) + s += ch = yield; + } + if (escaped && (ch === "O" || ch === "[")) { + var code = ch, modifier = 0; + if (ch === "O") { + if (s += ch = yield, ch >= "0" && ch <= "9") + modifier = (ch >> 0) - 1, s += ch = yield; + code += ch; + } else if (ch === "[") { + if (s += ch = yield, ch === "[") + code += ch, s += ch = yield; + var cmdStart = s.length - 1; + if (ch >= "0" && ch <= "9") { + if (s += ch = yield, ch >= "0" && ch <= "9") + s += ch = yield; + } + if (ch === ";") { + if (s += ch = yield, ch >= "0" && ch <= "9") + s += yield; + } + var cmd = StringPrototypeSlice.call(s, cmdStart), match; + if (match = RegExpPrototypeExec.call(/^(\d\d?)(;(\d))?([~^$])$/, cmd)) + code += match[1] + match[4], modifier = (match[3] || 1) - 1; + else if (match = RegExpPrototypeExec.call(/^((\d;)?(\d))?([A-Za-z])$/, cmd)) + code += match[4], modifier = (match[3] || 1) - 1; + else + code += cmd; + } + switch (keyCtrl2 = !!(modifier & 4), keyMeta = !!(modifier & 10), keyShift = !!(modifier & 1), keyCode = code, code) { + case "[P": + keyName = "f1"; + break; + case "[Q": + keyName = "f2"; + break; + case "[R": + keyName = "f3"; + break; + case "[S": + keyName = "f4"; + break; + case "OP": + keyName = "f1"; + break; + case "OQ": + keyName = "f2"; + break; + case "OR": + keyName = "f3"; + break; + case "OS": + keyName = "f4"; + break; + case "[11~": + keyName = "f1"; + break; + case "[12~": + keyName = "f2"; + break; + case "[13~": + keyName = "f3"; + break; + case "[14~": + keyName = "f4"; + break; + case "[[A": + keyName = "f1"; + break; + case "[[B": + keyName = "f2"; + break; + case "[[C": + keyName = "f3"; + break; + case "[[D": + keyName = "f4"; + break; + case "[[E": + keyName = "f5"; + break; + case "[15~": + keyName = "f5"; + break; + case "[17~": + keyName = "f6"; + break; + case "[18~": + keyName = "f7"; + break; + case "[19~": + keyName = "f8"; + break; + case "[20~": + keyName = "f9"; + break; + case "[21~": + keyName = "f10"; + break; + case "[23~": + keyName = "f11"; + break; + case "[24~": + keyName = "f12"; + break; + case "[A": + keyName = "up"; + break; + case "[B": + keyName = "down"; + break; + case "[C": + keyName = "right"; + break; + case "[D": + keyName = "left"; + break; + case "[E": + keyName = "clear"; + break; + case "[F": + keyName = "end"; + break; + case "[H": + keyName = "home"; + break; + case "OA": + keyName = "up"; + break; + case "OB": + keyName = "down"; + break; + case "OC": + keyName = "right"; + break; + case "OD": + keyName = "left"; + break; + case "OE": + keyName = "clear"; + break; + case "OF": + keyName = "end"; + break; + case "OH": + keyName = "home"; + break; + case "[1~": + keyName = "home"; + break; + case "[2~": + keyName = "insert"; + break; + case "[3~": + keyName = "delete"; + break; + case "[4~": + keyName = "end"; + break; + case "[5~": + keyName = "pageup"; + break; + case "[6~": + keyName = "pagedown"; + break; + case "[[5~": + keyName = "pageup"; + break; + case "[[6~": + keyName = "pagedown"; + break; + case "[7~": + keyName = "home"; + break; + case "[8~": + keyName = "end"; + break; + case "[a": + keyName = "up", keyShift = !0; + break; + case "[b": + keyName = "down", keyShift = !0; + break; + case "[c": + keyName = "right", keyShift = !0; + break; + case "[d": + keyName = "left", keyShift = !0; + break; + case "[e": + keyName = "clear", keyShift = !0; + break; + case "[2$": + keyName = "insert", keyShift = !0; + break; + case "[3$": + keyName = "delete", keyShift = !0; + break; + case "[5$": + keyName = "pageup", keyShift = !0; + break; + case "[6$": + keyName = "pagedown", keyShift = !0; + break; + case "[7$": + keyName = "home", keyShift = !0; + break; + case "[8$": + keyName = "end", keyShift = !0; + break; + case "Oa": + keyName = "up", keyCtrl2 = !0; + break; + case "Ob": + keyName = "down", keyCtrl2 = !0; + break; + case "Oc": + keyName = "right", keyCtrl2 = !0; + break; + case "Od": + keyName = "left", keyCtrl2 = !0; + break; + case "Oe": + keyName = "clear", keyCtrl2 = !0; + break; + case "[2^": + keyName = "insert", keyCtrl2 = !0; + break; + case "[3^": + keyName = "delete", keyCtrl2 = !0; + break; + case "[5^": + keyName = "pageup", keyCtrl2 = !0; + break; + case "[6^": + keyName = "pagedown", keyCtrl2 = !0; + break; + case "[7^": + keyName = "home", keyCtrl2 = !0; + break; + case "[8^": + keyName = "end", keyCtrl2 = !0; + break; + case "[Z": + keyName = "tab", keyShift = !0; + break; + default: + keyName = "undefined"; + break; + } + } else if (ch === "\r") + keyName = "return", keyMeta = escaped; + else if (ch === "\n") + keyName = "enter", keyMeta = escaped; + else if (ch === "\t") + keyName = "tab", keyMeta = escaped; + else if (ch === "\b" || ch === "\x7F") + keyName = "backspace", keyMeta = escaped; + else if (ch === kEscape) + keyName = "escape", keyMeta = escaped; + else if (ch === " ") + keyName = "space", keyMeta = escaped; + else if (!escaped && ch <= "\x1A") + keyName = StringFromCharCode(StringPrototypeCharCodeAt.call(ch) + StringPrototypeCharCodeAt.call("a") - 1), keyCtrl2 = !0; + else if (RegExpPrototypeExec.call(/^[0-9A-Za-z]$/, ch) !== null) + keyName = StringPrototypeToLowerCase.call(ch), keyShift = RegExpPrototypeExec.call(/^[A-Z]$/, ch) !== null, keyMeta = escaped; + else if (escaped) + keyName = ch.length ? void 0 : "escape", keyMeta = !0; + if (keySeq = s, s.length !== 0 && (keyName !== void 0 || escaped)) + stream.emit("keypress", escaped ? void 0 : s, { + sequence: keySeq, + name: keyName, + ctrl: keyCtrl2, + meta: keyMeta, + shift: keyShift + }); + else if (charLengthAt(s, 0) === s.length) + stream.emit("keypress", s, { + sequence: keySeq, + name: keyName, + ctrl: keyCtrl2, + meta: keyMeta, + shift: keyShift + }); + } +} +var commonPrefix = function(strings) { + if (strings.length === 0) + return ""; + if (strings.length === 1) + return strings[0]; + var sorted = ArrayPrototypeSort.call(ArrayPrototypeSlice.call(strings)), min = sorted[0], max = sorted[sorted.length - 1]; + for (var i = 0;i < min.length; i++) + if (min[i] !== max[i]) + return StringPrototypeSlice.call(min, 0, i); + return min; +}, cursorTo = function(stream, x, y, callback) { + if (callback !== void 0) + validateFunction(callback, "callback"); + if (typeof y === "function") + callback = y, y = void 0; + if (NumberIsNaN(x)) + throw new ERR_INVALID_ARG_VALUE("x", x); + if (NumberIsNaN(y)) + throw new ERR_INVALID_ARG_VALUE("y", y); + if (stream == null || typeof x !== "number" && typeof y !== "number") { + if (typeof callback === "function") + process.nextTick(callback, null); + return !0; + } + if (typeof x !== "number") + throw new ERR_INVALID_CURSOR_POS; + var data = typeof y !== "number" ? CSI`${x + 1}G` : CSI`${y + 1};${x + 1}H`; + return stream.write(data, callback); +}, moveCursor = function(stream, dx, dy, callback) { + if (callback !== void 0) + validateFunction(callback, "callback"); + if (stream == null || !(dx || dy)) { + if (typeof callback === "function") + process.nextTick(callback, null); + return !0; + } + var data = ""; + if (dx < 0) + data += CSI`${-dx}D`; + else if (dx > 0) + data += CSI`${dx}C`; + if (dy < 0) + data += CSI`${-dy}A`; + else if (dy > 0) + data += CSI`${dy}B`; + return stream.write(data, callback); +}, clearLine = function(stream, dir, callback) { + if (callback !== void 0) + validateFunction(callback, "callback"); + if (stream === null || stream === void 0) { + if (typeof callback === "function") + process.nextTick(callback, null); + return !0; + } + var type = dir < 0 ? kClearToLineBeginning : dir > 0 ? kClearToLineEnd : kClearLine; + return stream.write(type, callback); +}, clearScreenDown = function(stream, callback) { + if (callback !== void 0) + validateFunction(callback, "callback"); + if (stream === null || stream === void 0) { + if (typeof callback === "function") + process.nextTick(callback, null); + return !0; + } + return stream.write(kClearScreenDown, callback); +}, emitKeypressEvents = function(stream, iface = {}) { + if (stream[KEYPRESS_DECODER]) + return; + stream[KEYPRESS_DECODER] = new StringDecoder("utf8"), stream[ESCAPE_DECODER] = emitKeys(stream), stream[ESCAPE_DECODER].next(); + var triggerEscape = () => stream[ESCAPE_DECODER].next(""), { escapeCodeTimeout = ESCAPE_CODE_TIMEOUT } = iface, timeoutId; + function onData(input) { + if (stream.listenerCount("keypress") > 0) { + var string = stream[KEYPRESS_DECODER].write(input); + if (string) { + clearTimeout(timeoutId), iface[kSawKeyPress] = charLengthAt(string, 0) === string.length, iface.isCompletionEnabled = !1; + var length = 0; + for (var character of new SafeStringIterator(string)) { + if (length += character.length, length === string.length) + iface.isCompletionEnabled = !0; + try { + if (stream[ESCAPE_DECODER].next(character), length === string.length && character === kEscape) + timeoutId = setTimeout(triggerEscape, escapeCodeTimeout); + } catch (err) { + throw stream[ESCAPE_DECODER] = emitKeys(stream), stream[ESCAPE_DECODER].next(), err; + } + } + } + } else + stream.removeListener("data", onData), stream.on("newListener", onNewListener); + } + function onNewListener(event) { + if (event === "keypress") + stream.on("data", onData), stream.removeListener("newListener", onNewListener); + } + if (stream.listenerCount("keypress") > 0) + stream.on("data", onData); + else + stream.on("newListener", onNewListener); +}, onSelfCloseWithTerminal = function() { + var input = this.input, output = this.output; + if (!input) + throw new Error("Input not set, invalid state for readline!"); + if (input.removeListener("keypress", this[kOnKeyPress]), input.removeListener("error", this[kOnError]), input.removeListener("end", this[kOnTermEnd]), output !== null && output !== void 0) + output.removeListener("resize", this[kOnResize]); +}, onSelfCloseWithoutTerminal = function() { + var input = this.input; + if (!input) + throw new Error("Input not set, invalid state for readline!"); + input.removeListener("data", this[kOnData]), input.removeListener("error", this[kOnError]), input.removeListener("end", this[kOnEnd]); +}, onError = function(err) { + this.emit("error", err); +}, onData = function(data) { + debug("onData"), this[kNormalWrite](data); +}, onEnd = function() { + if (debug("onEnd"), typeof this[kLine_buffer] === "string" && this[kLine_buffer].length > 0) + this.emit("line", this[kLine_buffer]); + this.close(); +}, onTermEnd = function() { + if (debug("onTermEnd"), typeof this.line === "string" && this.line.length > 0) + this.emit("line", this.line); + this.close(); +}, onKeyPress = function(s, key) { + if (this[kTtyWrite](s, key), key && key.sequence) { + var ch = StringPrototypeCodePointAt.call(key.sequence, 0); + if (ch >= 55296 && ch <= 57343) + this[kRefreshLine](); + } +}, onResize = function() { + this[kRefreshLine](); +}, InterfaceConstructor = function(input, output, completer, terminal) { + if (!(this instanceof InterfaceConstructor)) + return new InterfaceConstructor(input, output, completer, terminal); + EventEmitter.call(this), this[kOnSelfCloseWithoutTerminal] = onSelfCloseWithoutTerminal.bind(this), this[kOnSelfCloseWithTerminal] = onSelfCloseWithTerminal.bind(this), this[kOnError] = onError.bind(this), this[kOnData] = onData.bind(this), this[kOnEnd] = onEnd.bind(this), this[kOnTermEnd] = onTermEnd.bind(this), this[kOnKeyPress] = onKeyPress.bind(this), this[kOnResize] = onResize.bind(this), this[kSawReturnAt] = 0, this.isCompletionEnabled = !0, this[kSawKeyPress] = !1, this[kPreviousKey] = null, this.escapeCodeTimeout = ESCAPE_CODE_TIMEOUT, this.tabSize = 8; + var history, historySize, removeHistoryDuplicates = !1, crlfDelay, prompt = "> ", signal; + if (input?.input) { + output = input.output, completer = input.completer, terminal = input.terminal, history = input.history, historySize = input.historySize, signal = input.signal; + var tabSize = input.tabSize; + if (tabSize !== void 0) + validateUint32(tabSize, "tabSize", !0), this.tabSize = tabSize; + removeHistoryDuplicates = input.removeHistoryDuplicates; + var inputPrompt = input.prompt; + if (inputPrompt !== void 0) + prompt = inputPrompt; + var inputEscapeCodeTimeout = input.escapeCodeTimeout; + if (inputEscapeCodeTimeout !== void 0) + if (NumberIsFinite(inputEscapeCodeTimeout)) + this.escapeCodeTimeout = inputEscapeCodeTimeout; + else + throw new ERR_INVALID_ARG_VALUE("input.escapeCodeTimeout", this.escapeCodeTimeout); + if (signal) + validateAbortSignal(signal, "options.signal"); + crlfDelay = input.crlfDelay, input = input.input; + } + if (completer !== void 0 && typeof completer !== "function") + throw new ERR_INVALID_ARG_VALUE("completer", completer); + if (history === void 0) + history = []; + else + validateArray(history, "history"); + if (historySize === void 0) + historySize = kHistorySize; + if (typeof historySize !== "number" || NumberIsNaN(historySize) || historySize < 0) + throw new ERR_INVALID_ARG_VALUE("historySize", historySize); + if (terminal === void 0 && !(output === null || output === void 0)) + terminal = !!output.isTTY; + if (this.line = "", this[kSubstringSearch] = null, this.output = output, this.input = input, this[kUndoStack] = [], this[kRedoStack] = [], this.history = history, this.historySize = historySize, this[kKillRing] = [], this[kKillRingCursor] = 0, this.removeHistoryDuplicates = !!removeHistoryDuplicates, this.crlfDelay = crlfDelay ? MathMax(kMincrlfDelay, crlfDelay) : kMincrlfDelay, this.completer = completer, this.setPrompt(prompt), this.terminal = !!terminal, this[kLineObjectStream] = void 0, input.on("error", this[kOnError]), !this.terminal) + input.on("data", this[kOnData]), input.on("end", this[kOnEnd]), this.once("close", this[kOnSelfCloseWithoutTerminal]), this[kDecoder] = new StringDecoder("utf8"); + else { + if (emitKeypressEvents(input, this), input.on("keypress", this[kOnKeyPress]), input.on("end", this[kOnTermEnd]), this[kSetRawMode](!0), this.terminal = !0, this.cursor = 0, this.historyIndex = -1, output !== null && output !== void 0) + output.on("resize", this[kOnResize]); + this.once("close", this[kOnSelfCloseWithTerminal]); + } + if (signal) { + var onAborted = (() => this.close()).bind(this); + if (signal.aborted) + process.nextTick(onAborted); + else + signal.addEventListener("abort", onAborted, { once: !0 }), this.once("close", () => signal.removeEventListener("abort", onAborted)); + } + this.line = "", input.resume(); +}, Interface = function(input, output, completer, terminal) { + if (!(this instanceof Interface)) + return new Interface(input, output, completer, terminal); + if (input?.input && typeof input.completer === "function" && input.completer.length !== 2) { + var { completer } = input; + input.completer = (v, cb) => cb(null, completer(v)); + } else if (typeof completer === "function" && completer.length !== 2) { + var realCompleter = completer; + completer = (v, cb) => cb(null, realCompleter(v)); + } + InterfaceConstructor.call(this, input, output, completer, terminal); +}, createInterface = function(input, output, completer, terminal) { + return new Interface(input, output, completer, terminal); +}; +var { Array, RegExp, String, Bun } = import.meta.primordials, EventEmitter = import.meta.require("node:events"), { clearTimeout, setTimeout } = import.meta.require("timers"), { StringDecoder } = import.meta.require("string_decoder"), isWritable, { inspect } = Bun, debug = process.env.BUN_JS_DEBUG ? console.log : () => { +}, SymbolAsyncIterator = Symbol.asyncIterator, SymbolIterator = Symbol.iterator, SymbolFor = Symbol.for, SymbolReplace = Symbol.replace, ArrayFrom = Array.from, ArrayIsArray = Array.isArray, ArrayPrototypeFilter = Array.prototype.filter, ArrayPrototypeSort = Array.prototype.sort, ArrayPrototypeIndexOf = Array.prototype.indexOf, ArrayPrototypeJoin = Array.prototype.join, ArrayPrototypeMap = Array.prototype.map, ArrayPrototypePop = Array.prototype.pop, ArrayPrototypePush = Array.prototype.push, ArrayPrototypeSlice = Array.prototype.slice, ArrayPrototypeSplice = Array.prototype.splice, ArrayPrototypeReverse = Array.prototype.reverse, ArrayPrototypeShift = Array.prototype.shift, ArrayPrototypeUnshift = Array.prototype.unshift, RegExpPrototypeExec = RegExp.prototype.exec, RegExpPrototypeSymbolReplace = RegExp.prototype[SymbolReplace], StringFromCharCode = String.fromCharCode, StringPrototypeCharCodeAt = String.prototype.charCodeAt, StringPrototypeCodePointAt = String.prototype.codePointAt, StringPrototypeSlice = String.prototype.slice, StringPrototypeToLowerCase = String.prototype.toLowerCase, StringPrototypeEndsWith = String.prototype.endsWith, StringPrototypeRepeat = String.prototype.repeat, StringPrototypeStartsWith = String.prototype.startsWith, StringPrototypeTrim = String.prototype.trim, StringPrototypeNormalize = String.prototype.normalize, NumberIsNaN = Number.isNaN, NumberIsFinite = Number.isFinite, NumberIsInteger = Number.isInteger, NumberMAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER, NumberMIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER, MathCeil = Math.ceil, MathFloor = Math.floor, MathMax = Math.max, MathMaxApply = Math.max.apply, DateNow = Date.now, FunctionPrototype = Function.prototype, StringPrototype = String.prototype, StringPrototypeSymbolIterator = StringPrototype[SymbolIterator], StringIteratorPrototypeNext = StringPrototypeSymbolIterator.call("").next, ObjectSetPrototypeOf = Object.setPrototypeOf, ObjectDefineProperty = Object.defineProperty, ObjectDefineProperties = Object.defineProperties, ObjectFreeze = Object.freeze; +var { create: ObjectCreate, keys: ObjectKeys } = Object; +var createSafeIterator = (factory, next) => { + class SafeIterator { + #iterator; + constructor(iterable) { + this.#iterator = factory.call(iterable); + } + next() { + return next.call(this.#iterator); + } + [SymbolIterator]() { + return this; + } + } + return ObjectSetPrototypeOf(SafeIterator.prototype, null), ObjectFreeze(SafeIterator.prototype), ObjectFreeze(SafeIterator), SafeIterator; +}, SafeStringIterator = createSafeIterator(StringPrototypeSymbolIterator, StringIteratorPrototypeNext), isFullWidthCodePoint = (code) => { + return code >= 4352 && (code <= 4447 || code === 9001 || code === 9002 || code >= 11904 && code <= 12871 && code !== 12351 || code >= 12880 && code <= 19903 || code >= 19968 && code <= 42182 || code >= 43360 && code <= 43388 || code >= 44032 && code <= 55203 || code >= 63744 && code <= 64255 || code >= 65040 && code <= 65049 || code >= 65072 && code <= 65131 || code >= 65281 && code <= 65376 || code >= 65504 && code <= 65510 || code >= 110592 && code <= 110593 || code >= 127488 && code <= 127569 || code >= 127744 && code <= 128591 || code >= 131072 && code <= 262141); +}, isZeroWidthCodePoint = (code) => { + return code <= 31 || code >= 127 && code <= 159 || code >= 768 && code <= 879 || code >= 8203 && code <= 8207 || code >= 8400 && code <= 8447 || code >= 65024 && code <= 65039 || code >= 65056 && code <= 65071 || code >= 917760 && code <= 917999; +}, getStringWidth = function getStringWidth2(str, removeControlChars = !0) { + var width = 0; + if (removeControlChars) + str = stripVTControlCharacters(str); + str = StringPrototypeNormalize.call(str, "NFC"); + for (var char of new SafeStringIterator(str)) { + var code = StringPrototypeCodePointAt.call(char, 0); + if (isFullWidthCodePoint(code)) + width += 2; + else if (!isZeroWidthCodePoint(code)) + width++; + } + return width; +}, ansiPattern = "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))", ansi = new RegExp(ansiPattern, "g"), kCustomPromisifiedSymbol = SymbolFor("nodejs.util.promisify.custom"), kCustomPromisifyArgsSymbol = Symbol("customPromisifyArgs"); +promisify.custom = kCustomPromisifiedSymbol; +var kUTF16SurrogateThreshold = 65536, kEscape = "\x1B", kSubstringSearch = Symbol("kSubstringSearch"), kIsNodeError = Symbol("kIsNodeError"), errorBases = {}, VALID_NODE_ERROR_BASES = { + TypeError, + RangeError, + Error +}, NodeError = getNodeErrorByName("Error"), NodeTypeError = getNodeErrorByName("TypeError"), NodeRangeError = getNodeErrorByName("RangeError"); + +class ERR_INVALID_ARG_TYPE extends NodeTypeError { + constructor(name, type, value) { + super(`The "${name}" argument must be of type ${type}. Received type ${typeof value}`, { + code: "ERR_INVALID_ARG_TYPE" + }); + } +} + +class ERR_INVALID_ARG_VALUE extends NodeTypeError { + constructor(name, value, reason = "not specified") { + super(`The value "${String(value)}" is invalid for argument '${name}'. Reason: ${reason}`, { + code: "ERR_INVALID_ARG_VALUE" + }); + } +} + +class ERR_INVALID_CURSOR_POS extends NodeTypeError { + constructor() { + super("Cannot set cursor row without setting its column", { + code: "ERR_INVALID_CURSOR_POS" + }); + } +} + +class ERR_OUT_OF_RANGE extends NodeRangeError { + constructor(name, range, received) { + super(`The value of "${name}" is out of range. It must be ${range}. Received ${received}`, { + code: "ERR_OUT_OF_RANGE" + }); + } +} + +class ERR_USE_AFTER_CLOSE extends NodeError { + constructor() { + super("This socket has been ended by the other party", { + code: "ERR_USE_AFTER_CLOSE" + }); + } +} + +class AbortError extends Error { + code; + constructor() { + super("The operation was aborted"); + this.code = "ABORT_ERR"; + } +} +var kClearLine, kClearScreenDown, kClearToLineBeginning, kClearToLineEnd; +CSI.kEscape = kEscape; +CSI.kClearLine = kClearLine = CSI`2K`; +CSI.kClearScreenDown = kClearScreenDown = CSI`0J`; +CSI.kClearToLineBeginning = kClearToLineBeginning = CSI`1K`; +CSI.kClearToLineEnd = kClearToLineEnd = CSI`0K`; +var KEYPRESS_DECODER = Symbol("keypress-decoder"), ESCAPE_DECODER = Symbol("escape-decoder"), ESCAPE_CODE_TIMEOUT = 500, kEmptyObject = ObjectFreeze(ObjectCreate(null)), kHistorySize = 30, kMaxUndoRedoStackSize = 2048, kMincrlfDelay = 100, lineEnding = /\r?\n|\r(?!\n)/g, kMaxLengthOfKillRing = 32, kLineObjectStream = Symbol("line object stream"), kQuestionCancel = Symbol("kQuestionCancel"), kQuestion = Symbol("kQuestion"), kAddHistory = Symbol("_addHistory"), kBeforeEdit = Symbol("_beforeEdit"), kDecoder = Symbol("_decoder"), kDeleteLeft = Symbol("_deleteLeft"), kDeleteLineLeft = Symbol("_deleteLineLeft"), kDeleteLineRight = Symbol("_deleteLineRight"), kDeleteRight = Symbol("_deleteRight"), kDeleteWordLeft = Symbol("_deleteWordLeft"), kDeleteWordRight = Symbol("_deleteWordRight"), kGetDisplayPos = Symbol("_getDisplayPos"), kHistoryNext = Symbol("_historyNext"), kHistoryPrev = Symbol("_historyPrev"), kInsertString = Symbol("_insertString"), kLine = Symbol("_line"), kLine_buffer = Symbol("_line_buffer"), kKillRing = Symbol("_killRing"), kKillRingCursor = Symbol("_killRingCursor"), kMoveCursor = Symbol("_moveCursor"), kNormalWrite = Symbol("_normalWrite"), kOldPrompt = Symbol("_oldPrompt"), kOnLine = Symbol("_onLine"), kPreviousKey = Symbol("_previousKey"), kPrompt = Symbol("_prompt"), kPushToKillRing = Symbol("_pushToKillRing"), kPushToUndoStack = Symbol("_pushToUndoStack"), kQuestionCallback = Symbol("_questionCallback"), kRedo = Symbol("_redo"), kRedoStack = Symbol("_redoStack"), kRefreshLine = Symbol("_refreshLine"), kSawKeyPress = Symbol("_sawKeyPress"), kSawReturnAt = Symbol("_sawReturnAt"), kSetRawMode = Symbol("_setRawMode"), kTabComplete = Symbol("_tabComplete"), kTabCompleter = Symbol("_tabCompleter"), kTtyWrite = Symbol("_ttyWrite"), kUndo = Symbol("_undo"), kUndoStack = Symbol("_undoStack"), kWordLeft = Symbol("_wordLeft"), kWordRight = Symbol("_wordRight"), kWriteToOutput = Symbol("_writeToOutput"), kYank = Symbol("_yank"), kYanking = Symbol("_yanking"), kYankPop = Symbol("_yankPop"), kFirstEventParam = Symbol("nodejs.kFirstEventParam"), kOnSelfCloseWithTerminal = Symbol("_onSelfCloseWithTerminal"), kOnSelfCloseWithoutTerminal = Symbol("_onSelfCloseWithoutTerminal"), kOnKeyPress = Symbol("_onKeyPress"), kOnError = Symbol("_onError"), kOnData = Symbol("_onData"), kOnEnd = Symbol("_onEnd"), kOnTermEnd = Symbol("_onTermEnd"), kOnResize = Symbol("_onResize"); +ObjectSetPrototypeOf(InterfaceConstructor.prototype, EventEmitter.prototype); +ObjectSetPrototypeOf(InterfaceConstructor, EventEmitter); +var _Interface = class Interface2 extends InterfaceConstructor { + constructor(input, output, completer, terminal) { + super(input, output, completer, terminal); + } + get columns() { + var output = this.output; + if (output && output.columns) + return output.columns; + return Infinity; + } + setPrompt(prompt) { + this[kPrompt] = prompt; + } + getPrompt() { + return this[kPrompt]; + } + [kSetRawMode](mode) { + var input = this.input, { setRawMode, wasInRawMode } = input; + return debug("setRawMode", mode, "set!"), wasInRawMode; + } + prompt(preserveCursor) { + if (this.paused) + this.resume(); + if (this.terminal) { + if (!preserveCursor) + this.cursor = 0; + this[kRefreshLine](); + } else + this[kWriteToOutput](this[kPrompt]); + } + [kQuestion](query, cb) { + if (this.closed) + throw new ERR_USE_AFTER_CLOSE("readline"); + if (this[kQuestionCallback]) + this.prompt(); + else + this[kOldPrompt] = this[kPrompt], this.setPrompt(query), this[kQuestionCallback] = cb, this.prompt(); + } + [kOnLine](line) { + if (this[kQuestionCallback]) { + var cb = this[kQuestionCallback]; + this[kQuestionCallback] = null, this.setPrompt(this[kOldPrompt]), cb(line); + } else + this.emit("line", line); + } + [kBeforeEdit](oldText, oldCursor) { + this[kPushToUndoStack](oldText, oldCursor); + } + [kQuestionCancel]() { + if (this[kQuestionCallback]) + this[kQuestionCallback] = null, this.setPrompt(this[kOldPrompt]), this.clearLine(); + } + [kWriteToOutput](stringToWrite) { + if (validateString(stringToWrite, "stringToWrite"), this.output !== null && this.output !== void 0) + this.output.write(stringToWrite); + } + [kAddHistory]() { + if (this.line.length === 0) + return ""; + if (this.historySize === 0) + return this.line; + if (StringPrototypeTrim.call(this.line).length === 0) + return this.line; + if (this.history.length === 0 || this.history[0] !== this.line) { + if (this.removeHistoryDuplicates) { + var dupIndex = ArrayPrototypeIndexOf.call(this.history, this.line); + if (dupIndex !== -1) + ArrayPrototypeSplice.call(this.history, dupIndex, 1); + } + if (ArrayPrototypeUnshift.call(this.history, this.line), this.history.length > this.historySize) + ArrayPrototypePop.call(this.history); + } + this.historyIndex = -1; + var line = this.history[0]; + return this.emit("history", this.history), line; + } + [kRefreshLine]() { + var line = this[kPrompt] + this.line, dispPos = this[kGetDisplayPos](line), lineCols = dispPos.cols, lineRows = dispPos.rows, cursorPos = this.getCursorPos(), prevRows = this.prevRows || 0; + if (prevRows > 0) + moveCursor(this.output, 0, -prevRows); + if (cursorTo(this.output, 0), clearScreenDown(this.output), this[kWriteToOutput](line), lineCols === 0) + this[kWriteToOutput](" "); + cursorTo(this.output, cursorPos.cols); + var diff = lineRows - cursorPos.rows; + if (diff > 0) + moveCursor(this.output, 0, -diff); + this.prevRows = cursorPos.rows; + } + close() { + if (this.closed) + return; + if (this.pause(), this.terminal) + this[kSetRawMode](!1); + this.closed = !0, this.emit("close"); + } + pause() { + if (this.paused) + return; + return this.input.pause(), this.paused = !0, this.emit("pause"), this; + } + resume() { + if (!this.paused) + return; + return this.input.resume(), this.paused = !1, this.emit("resume"), this; + } + write(d, key) { + if (this.paused) + this.resume(); + if (this.terminal) + this[kTtyWrite](d, key); + else + this[kNormalWrite](d); + } + [kNormalWrite](b) { + if (b === void 0) + return; + var string = this[kDecoder].write(b); + if (this[kSawReturnAt] && DateNow() - this[kSawReturnAt] <= this.crlfDelay) { + if (StringPrototypeCodePointAt.call(string) === 10) + string = StringPrototypeSlice.call(string, 1); + this[kSawReturnAt] = 0; + } + var newPartContainsEnding = RegExpPrototypeExec.call(lineEnding, string); + if (newPartContainsEnding !== null) { + if (this[kLine_buffer]) + string = this[kLine_buffer] + string, this[kLine_buffer] = null, newPartContainsEnding = RegExpPrototypeExec.call(lineEnding, string); + this[kSawReturnAt] = StringPrototypeEndsWith.call(string, "\r") ? DateNow() : 0; + var indexes = [0, newPartContainsEnding.index, lineEnding.lastIndex], nextMatch; + while ((nextMatch = RegExpPrototypeExec.call(lineEnding, string)) !== null) + ArrayPrototypePush.call(indexes, nextMatch.index, lineEnding.lastIndex); + var lastIndex = indexes.length - 1; + this[kLine_buffer] = StringPrototypeSlice.call(string, indexes[lastIndex]); + for (var i = 1;i < lastIndex; i += 2) + this[kOnLine](StringPrototypeSlice.call(string, indexes[i - 1], indexes[i])); + } else if (string) + if (this[kLine_buffer]) + this[kLine_buffer] += string; + else + this[kLine_buffer] = string; + } + [kInsertString](c) { + if (this[kBeforeEdit](this.line, this.cursor), this.cursor < this.line.length) { + var beg = StringPrototypeSlice.call(this.line, 0, this.cursor), end = StringPrototypeSlice.call(this.line, this.cursor, this.line.length); + this.line = beg + c + end, this.cursor += c.length, this[kRefreshLine](); + } else { + var oldPos = this.getCursorPos(); + this.line += c, this.cursor += c.length; + var newPos = this.getCursorPos(); + if (oldPos.rows < newPos.rows) + this[kRefreshLine](); + else + this[kWriteToOutput](c); + } + } + async[kTabComplete](lastKeypressWasTab) { + this.pause(); + var string = StringPrototypeSlice.call(this.line, 0, this.cursor), value; + try { + value = await this.completer(string); + } catch (err) { + this[kWriteToOutput](`Tab completion error: ${inspect(err)}`); + return; + } finally { + this.resume(); + } + this[kTabCompleter](lastKeypressWasTab, value); + } + [kTabCompleter](lastKeypressWasTab, { 0: completions, 1: completeOn }) { + if (!completions || completions.length === 0) + return; + var prefix = commonPrefix(ArrayPrototypeFilter.call(completions, (e) => e !== "")); + if (StringPrototypeStartsWith.call(prefix, completeOn) && prefix.length > completeOn.length) { + this[kInsertString](StringPrototypeSlice.call(prefix, completeOn.length)); + return; + } else if (!StringPrototypeStartsWith.call(completeOn, prefix)) { + this.line = StringPrototypeSlice.call(this.line, 0, this.cursor - completeOn.length) + prefix + StringPrototypeSlice.call(this.line, this.cursor, this.line.length), this.cursor = this.cursor - completeOn.length + prefix.length, this._refreshLine(); + return; + } + if (!lastKeypressWasTab) + return; + this[kBeforeEdit](this.line, this.cursor); + var completionsWidth = ArrayPrototypeMap.call(completions, (e) => getStringWidth(e)), width = MathMaxApply(completionsWidth) + 2, maxColumns = MathFloor(this.columns / width) || 1; + if (maxColumns === Infinity) + maxColumns = 1; + var output = "\r\n", lineIndex = 0, whitespace = 0; + for (var i = 0;i < completions.length; i++) { + var completion = completions[i]; + if (completion === "" || lineIndex === maxColumns) + output += "\r\n", lineIndex = 0, whitespace = 0; + else + output += StringPrototypeRepeat.call(" ", whitespace); + if (completion !== "") + output += completion, whitespace = width - completionsWidth[i], lineIndex++; + else + output += "\r\n"; + } + if (lineIndex !== 0) + output += "\r\n\r\n"; + this[kWriteToOutput](output), this[kRefreshLine](); + } + [kWordLeft]() { + if (this.cursor > 0) { + var leading = StringPrototypeSlice.call(this.line, 0, this.cursor), reversed = ArrayPrototypeJoin.call(ArrayPrototypeReverse.call(ArrayFrom(leading)), ""), match = RegExpPrototypeExec.call(/^\s*(?:[^\w\s]+|\w+)?/, reversed); + this[kMoveCursor](-match[0].length); + } + } + [kWordRight]() { + if (this.cursor < this.line.length) { + var trailing = StringPrototypeSlice.call(this.line, this.cursor), match = RegExpPrototypeExec.call(/^(?:\s+|[^\w\s]+|\w+)\s*/, trailing); + this[kMoveCursor](match[0].length); + } + } + [kDeleteLeft]() { + if (this.cursor > 0 && this.line.length > 0) { + this[kBeforeEdit](this.line, this.cursor); + var charSize = charLengthLeft(this.line, this.cursor); + this.line = StringPrototypeSlice.call(this.line, 0, this.cursor - charSize) + StringPrototypeSlice.call(this.line, this.cursor, this.line.length), this.cursor -= charSize, this[kRefreshLine](); + } + } + [kDeleteRight]() { + if (this.cursor < this.line.length) { + this[kBeforeEdit](this.line, this.cursor); + var charSize = charLengthAt(this.line, this.cursor); + this.line = StringPrototypeSlice.call(this.line, 0, this.cursor) + StringPrototypeSlice.call(this.line, this.cursor + charSize, this.line.length), this[kRefreshLine](); + } + } + [kDeleteWordLeft]() { + if (this.cursor > 0) { + this[kBeforeEdit](this.line, this.cursor); + var leading = StringPrototypeSlice.call(this.line, 0, this.cursor), reversed = ArrayPrototypeJoin.call(ArrayPrototypeReverse.call(ArrayFrom(leading)), ""), match = RegExpPrototypeExec.call(/^\s*(?:[^\w\s]+|\w+)?/, reversed); + leading = StringPrototypeSlice.call(leading, 0, leading.length - match[0].length), this.line = leading + StringPrototypeSlice.call(this.line, this.cursor, this.line.length), this.cursor = leading.length, this[kRefreshLine](); + } + } + [kDeleteWordRight]() { + if (this.cursor < this.line.length) { + this[kBeforeEdit](this.line, this.cursor); + var trailing = StringPrototypeSlice.call(this.line, this.cursor), match = RegExpPrototypeExec.call(/^(?:\s+|\W+|\w+)\s*/, trailing); + this.line = StringPrototypeSlice.call(this.line, 0, this.cursor) + StringPrototypeSlice.call(trailing, match[0].length), this[kRefreshLine](); + } + } + [kDeleteLineLeft]() { + this[kBeforeEdit](this.line, this.cursor); + var del = StringPrototypeSlice.call(this.line, 0, this.cursor); + this.line = StringPrototypeSlice.call(this.line, this.cursor), this.cursor = 0, this[kPushToKillRing](del), this[kRefreshLine](); + } + [kDeleteLineRight]() { + this[kBeforeEdit](this.line, this.cursor); + var del = StringPrototypeSlice.call(this.line, this.cursor); + this.line = StringPrototypeSlice.call(this.line, 0, this.cursor), this[kPushToKillRing](del), this[kRefreshLine](); + } + [kPushToKillRing](del) { + if (!del || del === this[kKillRing][0]) + return; + ArrayPrototypeUnshift.call(this[kKillRing], del), this[kKillRingCursor] = 0; + while (this[kKillRing].length > kMaxLengthOfKillRing) + ArrayPrototypePop.call(this[kKillRing]); + } + [kYank]() { + if (this[kKillRing].length > 0) + this[kYanking] = !0, this[kInsertString](this[kKillRing][this[kKillRingCursor]]); + } + [kYankPop]() { + if (!this[kYanking]) + return; + if (this[kKillRing].length > 1) { + var lastYank = this[kKillRing][this[kKillRingCursor]]; + if (this[kKillRingCursor]++, this[kKillRingCursor] >= this[kKillRing].length) + this[kKillRingCursor] = 0; + var currentYank = this[kKillRing][this[kKillRingCursor]], head = StringPrototypeSlice.call(this.line, 0, this.cursor - lastYank.length), tail = StringPrototypeSlice.call(this.line, this.cursor); + this.line = head + currentYank + tail, this.cursor = head.length + currentYank.length, this[kRefreshLine](); + } + } + clearLine() { + this[kMoveCursor](Infinity), this[kWriteToOutput]("\r\n"), this.line = "", this.cursor = 0, this.prevRows = 0; + } + [kLine]() { + var line = this[kAddHistory](); + this[kUndoStack] = [], this[kRedoStack] = [], this.clearLine(), this[kOnLine](line); + } + [kPushToUndoStack](text, cursor) { + if (ArrayPrototypePush.call(this[kUndoStack], { text, cursor }) > kMaxUndoRedoStackSize) + ArrayPrototypeShift.call(this[kUndoStack]); + } + [kUndo]() { + if (this[kUndoStack].length <= 0) + return; + ArrayPrototypePush.call(this[kRedoStack], { + text: this.line, + cursor: this.cursor + }); + var entry = ArrayPrototypePop.call(this[kUndoStack]); + this.line = entry.text, this.cursor = entry.cursor, this[kRefreshLine](); + } + [kRedo]() { + if (this[kRedoStack].length <= 0) + return; + ArrayPrototypePush.call(this[kUndoStack], { + text: this.line, + cursor: this.cursor + }); + var entry = ArrayPrototypePop.call(this[kRedoStack]); + this.line = entry.text, this.cursor = entry.cursor, this[kRefreshLine](); + } + [kHistoryNext]() { + if (this.historyIndex >= 0) { + this[kBeforeEdit](this.line, this.cursor); + var search = this[kSubstringSearch] || "", index = this.historyIndex - 1; + while (index >= 0 && (!StringPrototypeStartsWith.call(this.history[index], search) || this.line === this.history[index])) + index--; + if (index === -1) + this.line = search; + else + this.line = this.history[index]; + this.historyIndex = index, this.cursor = this.line.length, this[kRefreshLine](); + } + } + [kHistoryPrev]() { + if (this.historyIndex < this.history.length && this.history.length) { + this[kBeforeEdit](this.line, this.cursor); + var search = this[kSubstringSearch] || "", index = this.historyIndex + 1; + while (index < this.history.length && (!StringPrototypeStartsWith.call(this.history[index], search) || this.line === this.history[index])) + index++; + if (index === this.history.length) + this.line = search; + else + this.line = this.history[index]; + this.historyIndex = index, this.cursor = this.line.length, this[kRefreshLine](); + } + } + [kGetDisplayPos](str) { + var offset = 0, col = this.columns, rows = 0; + str = stripVTControlCharacters(str); + for (var char of new SafeStringIterator(str)) { + if (char === "\n") { + rows += MathCeil(offset / col) || 1, offset = 0; + continue; + } + if (char === "\t") { + offset += this.tabSize - offset % this.tabSize; + continue; + } + var width = getStringWidth(char, !1); + if (width === 0 || width === 1) + offset += width; + else { + if ((offset + 1) % col === 0) + offset++; + offset += 2; + } + } + var cols = offset % col; + return rows += (offset - cols) / col, { cols, rows }; + } + getCursorPos() { + var strBeforeCursor = this[kPrompt] + StringPrototypeSlice.call(this.line, 0, this.cursor); + return this[kGetDisplayPos](strBeforeCursor); + } + [kMoveCursor](dx) { + if (dx === 0) + return; + var oldPos = this.getCursorPos(); + if (this.cursor += dx, this.cursor < 0) + this.cursor = 0; + else if (this.cursor > this.line.length) + this.cursor = this.line.length; + var newPos = this.getCursorPos(); + if (oldPos.rows === newPos.rows) { + var diffWidth = newPos.cols - oldPos.cols; + moveCursor(this.output, diffWidth, 0); + } else + this[kRefreshLine](); + } + [kTtyWrite](s, key) { + var previousKey = this[kPreviousKey]; + key = key || kEmptyObject, this[kPreviousKey] = key; + var { name: keyName, meta: keyMeta, ctrl: keyCtrl2, shift: keyShift, sequence: keySeq } = key; + if (!keyMeta || keyName !== "y") + this[kYanking] = !1; + if ((keyName === "up" || keyName === "down") && !keyCtrl2 && !keyMeta && !keyShift) { + if (this[kSubstringSearch] === null) + this[kSubstringSearch] = StringPrototypeSlice.call(this.line, 0, this.cursor); + } else if (this[kSubstringSearch] !== null) { + if (this[kSubstringSearch] = null, this.history.length === this.historyIndex) + this.historyIndex = -1; + } + if (typeof keySeq === "string") + switch (StringPrototypeCodePointAt.call(keySeq, 0)) { + case 31: + this[kUndo](); + return; + case 30: + this[kRedo](); + return; + default: + break; + } + if (keyName === "escape") + return; + if (keyCtrl2 && keyShift) + switch (keyName) { + case "backspace": + this[kDeleteLineLeft](); + break; + case "delete": + this[kDeleteLineRight](); + break; + } + else if (keyCtrl2) + switch (keyName) { + case "c": + if (this.listenerCount("SIGINT") > 0) + this.emit("SIGINT"); + else + this.close(); + break; + case "h": + this[kDeleteLeft](); + break; + case "d": + if (this.cursor === 0 && this.line.length === 0) + this.close(); + else if (this.cursor < this.line.length) + this[kDeleteRight](); + break; + case "u": + this[kDeleteLineLeft](); + break; + case "k": + this[kDeleteLineRight](); + break; + case "a": + this[kMoveCursor]((-Infinity)); + break; + case "e": + this[kMoveCursor](Infinity); + break; + case "b": + this[kMoveCursor](-charLengthLeft(this.line, this.cursor)); + break; + case "f": + this[kMoveCursor](+charLengthAt(this.line, this.cursor)); + break; + case "l": + cursorTo(this.output, 0, 0), clearScreenDown(this.output), this[kRefreshLine](); + break; + case "n": + this[kHistoryNext](); + break; + case "p": + this[kHistoryPrev](); + break; + case "y": + this[kYank](); + break; + case "z": + if (this.listenerCount("SIGTSTP") > 0) + this.emit("SIGTSTP"); + else + process.once("SIGCONT", () => { + if (!this.paused) + this.pause(), this.emit("SIGCONT"); + this[kSetRawMode](!0), this[kRefreshLine](); + }), this[kSetRawMode](!1), process.kill(process.pid, "SIGTSTP"); + break; + case "w": + case "backspace": + this[kDeleteWordLeft](); + break; + case "delete": + this[kDeleteWordRight](); + break; + case "left": + this[kWordLeft](); + break; + case "right": + this[kWordRight](); + break; + } + else if (keyMeta) + switch (keyName) { + case "b": + this[kWordLeft](); + break; + case "f": + this[kWordRight](); + break; + case "d": + case "delete": + this[kDeleteWordRight](); + break; + case "backspace": + this[kDeleteWordLeft](); + break; + case "y": + this[kYankPop](); + break; + } + else { + if (this[kSawReturnAt] && keyName !== "enter") + this[kSawReturnAt] = 0; + switch (keyName) { + case "return": + this[kSawReturnAt] = DateNow(), this[kLine](); + break; + case "enter": + if (this[kSawReturnAt] === 0 || DateNow() - this[kSawReturnAt] > this.crlfDelay) + this[kLine](); + this[kSawReturnAt] = 0; + break; + case "backspace": + this[kDeleteLeft](); + break; + case "delete": + this[kDeleteRight](); + break; + case "left": + this[kMoveCursor](-charLengthLeft(this.line, this.cursor)); + break; + case "right": + this[kMoveCursor](+charLengthAt(this.line, this.cursor)); + break; + case "home": + this[kMoveCursor]((-Infinity)); + break; + case "end": + this[kMoveCursor](Infinity); + break; + case "up": + this[kHistoryPrev](); + break; + case "down": + this[kHistoryNext](); + break; + case "tab": + if (typeof this.completer === "function" && this.isCompletionEnabled) { + var lastKeypressWasTab = previousKey && previousKey.name === "tab"; + this[kTabComplete](lastKeypressWasTab); + break; + } + default: + if (typeof s === "string" && s) { + var nextMatch = RegExpPrototypeExec.call(lineEnding, s); + if (nextMatch !== null) { + this[kInsertString](StringPrototypeSlice.call(s, 0, nextMatch.index)); + var { lastIndex } = lineEnding; + while ((nextMatch = RegExpPrototypeExec.call(lineEnding, s)) !== null) + this[kLine](), this[kInsertString](StringPrototypeSlice.call(s, lastIndex, nextMatch.index)), { lastIndex } = lineEnding; + if (lastIndex === s.length) + this[kLine](); + } else + this[kInsertString](s); + } + } + } + } + [SymbolAsyncIterator]() { + if (this[kLineObjectStream] === void 0) + this[kLineObjectStream] = EventEmitter.on(this, "line", { + close: ["close"], + highWatermark: 1024, + [kFirstEventParam]: !0 + }); + return this[kLineObjectStream]; + } +}; +ObjectSetPrototypeOf(Interface.prototype, _Interface.prototype); +ObjectSetPrototypeOf(Interface, _Interface); +Interface.prototype.question = function question(query, options, cb) { + if (cb = typeof options === "function" ? options : cb, options === null || typeof options !== "object") + options = kEmptyObject; + var signal = options?.signal; + if (signal) { + if (validateAbortSignal(signal, "options.signal"), signal.aborted) + return; + var onAbort = () => { + this[kQuestionCancel](); + }; + signal.addEventListener("abort", onAbort, { once: !0 }); + var cleanup = () => { + signal.removeEventListener("abort", onAbort); + }, originalCb = cb; + cb = typeof cb === "function" ? (answer) => { + return cleanup(), originalCb(answer); + } : cleanup; + } + if (typeof cb === "function") + this[kQuestion](query, cb); +}; +Interface.prototype.question[promisify.custom] = function question2(query, options) { + if (options === null || typeof options !== "object") + options = kEmptyObject; + var signal = options?.signal; + if (signal && signal.aborted) + return PromiseReject(new AbortError(void 0, { cause: signal.reason })); + return new Promise((resolve, reject) => { + var cb = resolve; + if (signal) { + var onAbort = () => { + reject(new AbortError(void 0, { cause: signal.reason })); + }; + signal.addEventListener("abort", onAbort, { once: !0 }), cb = (answer) => { + signal.removeEventListener("abort", onAbort), resolve(answer); + }; + } + this.question(query, options, cb); + }); +}; +ObjectDefineProperties(Interface.prototype, { + [kSetRawMode]: { + __proto__: null, + get() { + return this._setRawMode; + } + }, + [kOnLine]: { + __proto__: null, + get() { + return this._onLine; + } + }, + [kWriteToOutput]: { + __proto__: null, + get() { + return this._writeToOutput; + } + }, + [kAddHistory]: { + __proto__: null, + get() { + return this._addHistory; + } + }, + [kRefreshLine]: { + __proto__: null, + get() { + return this._refreshLine; + } + }, + [kNormalWrite]: { + __proto__: null, + get() { + return this._normalWrite; + } + }, + [kInsertString]: { + __proto__: null, + get() { + return this._insertString; + } + }, + [kTabComplete]: { + __proto__: null, + get() { + return this._tabComplete; + } + }, + [kWordLeft]: { + __proto__: null, + get() { + return this._wordLeft; + } + }, + [kWordRight]: { + __proto__: null, + get() { + return this._wordRight; + } + }, + [kDeleteLeft]: { + __proto__: null, + get() { + return this._deleteLeft; + } + }, + [kDeleteRight]: { + __proto__: null, + get() { + return this._deleteRight; + } + }, + [kDeleteWordLeft]: { + __proto__: null, + get() { + return this._deleteWordLeft; + } + }, + [kDeleteWordRight]: { + __proto__: null, + get() { + return this._deleteWordRight; + } + }, + [kDeleteLineLeft]: { + __proto__: null, + get() { + return this._deleteLineLeft; + } + }, + [kDeleteLineRight]: { + __proto__: null, + get() { + return this._deleteLineRight; + } + }, + [kLine]: { + __proto__: null, + get() { + return this._line; + } + }, + [kHistoryNext]: { + __proto__: null, + get() { + return this._historyNext; + } + }, + [kHistoryPrev]: { + __proto__: null, + get() { + return this._historyPrev; + } + }, + [kGetDisplayPos]: { + __proto__: null, + get() { + return this._getDisplayPos; + } + }, + [kMoveCursor]: { + __proto__: null, + get() { + return this._moveCursor; + } + }, + [kTtyWrite]: { + __proto__: null, + get() { + return this._ttyWrite; + } + }, + _decoder: { + __proto__: null, + get() { + return this[kDecoder]; + }, + set(value) { + this[kDecoder] = value; + } + }, + _line_buffer: { + __proto__: null, + get() { + return this[kLine_buffer]; + }, + set(value) { + this[kLine_buffer] = value; + } + }, + _oldPrompt: { + __proto__: null, + get() { + return this[kOldPrompt]; + }, + set(value) { + this[kOldPrompt] = value; + } + }, + _previousKey: { + __proto__: null, + get() { + return this[kPreviousKey]; + }, + set(value) { + this[kPreviousKey] = value; + } + }, + _prompt: { + __proto__: null, + get() { + return this[kPrompt]; + }, + set(value) { + this[kPrompt] = value; + } + }, + _questionCallback: { + __proto__: null, + get() { + return this[kQuestionCallback]; + }, + set(value) { + this[kQuestionCallback] = value; + } + }, + _sawKeyPress: { + __proto__: null, + get() { + return this[kSawKeyPress]; + }, + set(value) { + this[kSawKeyPress] = value; + } + }, + _sawReturnAt: { + __proto__: null, + get() { + return this[kSawReturnAt]; + }, + set(value) { + this[kSawReturnAt] = value; + } + } +}); +Interface.prototype._setRawMode = _Interface.prototype[kSetRawMode]; +Interface.prototype._onLine = _Interface.prototype[kOnLine]; +Interface.prototype._writeToOutput = _Interface.prototype[kWriteToOutput]; +Interface.prototype._addHistory = _Interface.prototype[kAddHistory]; +Interface.prototype._refreshLine = _Interface.prototype[kRefreshLine]; +Interface.prototype._normalWrite = _Interface.prototype[kNormalWrite]; +Interface.prototype._insertString = _Interface.prototype[kInsertString]; +Interface.prototype._tabComplete = function(lastKeypressWasTab) { + this.pause(); + var string = StringPrototypeSlice.call(this.line, 0, this.cursor); + this.completer(string, (err, value) => { + if (this.resume(), err) { + this._writeToOutput(`Tab completion error: ${inspect(err)}`); + return; + } + this[kTabCompleter](lastKeypressWasTab, value); + }); +}; +Interface.prototype._wordLeft = _Interface.prototype[kWordLeft]; +Interface.prototype._wordRight = _Interface.prototype[kWordRight]; +Interface.prototype._deleteLeft = _Interface.prototype[kDeleteLeft]; +Interface.prototype._deleteRight = _Interface.prototype[kDeleteRight]; +Interface.prototype._deleteWordLeft = _Interface.prototype[kDeleteWordLeft]; +Interface.prototype._deleteWordRight = _Interface.prototype[kDeleteWordRight]; +Interface.prototype._deleteLineLeft = _Interface.prototype[kDeleteLineLeft]; +Interface.prototype._deleteLineRight = _Interface.prototype[kDeleteLineRight]; +Interface.prototype._line = _Interface.prototype[kLine]; +Interface.prototype._historyNext = _Interface.prototype[kHistoryNext]; +Interface.prototype._historyPrev = _Interface.prototype[kHistoryPrev]; +Interface.prototype._getDisplayPos = _Interface.prototype[kGetDisplayPos]; +Interface.prototype._getCursorPos = _Interface.prototype.getCursorPos; +Interface.prototype._moveCursor = _Interface.prototype[kMoveCursor]; +Interface.prototype._ttyWrite = _Interface.prototype[kTtyWrite]; + +class Readline { + #autoCommit = !1; + #stream; + #todo = []; + constructor(stream, options = void 0) { + if (isWritable ??= import.meta.require("node:stream").isWritable, !isWritable(stream)) + throw new ERR_INVALID_ARG_TYPE("stream", "Writable", stream); + if (this.#stream = stream, options?.autoCommit != null) + validateBoolean(options.autoCommit, "options.autoCommit"), this.#autoCommit = options.autoCommit; + } + cursorTo(x, y = void 0) { + if (validateInteger(x, "x"), y != null) + validateInteger(y, "y"); + var data = y == null ? CSI`${x + 1}G` : CSI`${y + 1};${x + 1}H`; + if (this.#autoCommit) + process.nextTick(() => this.#stream.write(data)); + else + ArrayPrototypePush.call(this.#todo, data); + return this; + } + moveCursor(dx, dy) { + if (dx || dy) { + validateInteger(dx, "dx"), validateInteger(dy, "dy"); + var data = ""; + if (dx < 0) + data += CSI`${-dx}D`; + else if (dx > 0) + data += CSI`${dx}C`; + if (dy < 0) + data += CSI`${-dy}A`; + else if (dy > 0) + data += CSI`${dy}B`; + if (this.#autoCommit) + process.nextTick(() => this.#stream.write(data)); + else + ArrayPrototypePush.call(this.#todo, data); + } + return this; + } + clearLine(dir) { + validateInteger(dir, "dir", -1, 1); + var data = dir < 0 ? kClearToLineBeginning : dir > 0 ? kClearToLineEnd : kClearLine; + if (this.#autoCommit) + process.nextTick(() => this.#stream.write(data)); + else + ArrayPrototypePush.call(this.#todo, data); + return this; + } + clearScreenDown() { + if (this.#autoCommit) + process.nextTick(() => this.#stream.write(kClearScreenDown)); + else + ArrayPrototypePush.call(this.#todo, kClearScreenDown); + return this; + } + commit() { + return new Promise((resolve) => { + this.#stream.write(ArrayPrototypeJoin.call(this.#todo, ""), resolve), this.#todo = []; + }); + } + rollback() { + return this.#todo = [], this; + } +} +var PromisesInterface = class Interface3 extends _Interface { + constructor(input, output, completer, terminal) { + super(input, output, completer, terminal); + } + question(query, options = kEmptyObject) { + var signal = options?.signal; + if (signal) { + if (validateAbortSignal(signal, "options.signal"), signal.aborted) + return PromiseReject(new AbortError(void 0, { cause: signal.reason })); + } + return new Promise((resolve, reject) => { + var cb = resolve; + if (options?.signal) { + var onAbort = () => { + this[kQuestionCancel](), reject(new AbortError(void 0, { cause: signal.reason })); + }; + signal.addEventListener("abort", onAbort, { once: !0 }), cb = (answer) => { + signal.removeEventListener("abort", onAbort), resolve(answer); + }; + } + this[kQuestion](query, cb); + }); + } +}, Interface = Interface, clearLine = clearLine, clearScreenDown = clearScreenDown, createInterface = createInterface, cursorTo = cursorTo, emitKeypressEvents = emitKeypressEvents, moveCursor = moveCursor, promises = { + Readline, + Interface: PromisesInterface, + createInterface(input, output, completer, terminal) { + return new PromisesInterface(input, output, completer, terminal); + } +}, readline_default = { + Interface, + clearLine, + clearScreenDown, + createInterface, + cursorTo, + emitKeypressEvents, + moveCursor, + promises, + [SymbolFor("__BUN_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED__")]: { + CSI, + utils: { + getStringWidth, + stripVTControlCharacters + } + }, + [SymbolFor("CommonJS")]: 0 +}; +export { + promises, + moveCursor, + emitKeypressEvents, + readline_default as default, + cursorTo, + createInterface, + clearScreenDown, + clearLine, + Interface +}; + +//# debugId=5BDE0B4B2FE1B52064756e2164756e21 |