CoolFace
Apppublic

AK-21/Graphite-Industrial-Intelligence

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
readline.d.ts601 linesDownload Raw Back to node
1/**2 * The `node:readline` module provides an interface for reading data from a [Readable](https://nodejs.org/docs/latest-v24.x/api/stream.html#readable-streams) stream3 * (such as [`process.stdin`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstdin)) one line at a time.4 *5 * To use the promise-based APIs:6 *7 * ```js8 * import * as readline from 'node:readline/promises';9 * ```10 *11 * To use the callback and sync APIs:12 *13 * ```js14 * import * as readline from 'node:readline';15 * ```16 *17 * The following simple example illustrates the basic use of the `node:readline` module.18 *19 * ```js20 * import * as readline from 'node:readline/promises';21 * import { stdin as input, stdout as output } from 'node:process';22 *23 * const rl = readline.createInterface({ input, output });24 *25 * const answer = await rl.question('What do you think of Node.js? ');26 *27 * console.log(`Thank you for your valuable feedback: ${answer}`);28 *29 * rl.close();30 * ```31 *32 * Once this code is invoked, the Node.js application will not terminate until the `readline.Interface` is closed because the interface waits for data to be33 * received on the `input` stream.34 * @see [source](https://github.com/nodejs/node/blob/v24.x/lib/readline.js)35 */36declare module "readline" {37    import { Abortable, EventEmitter } from "node:events";38    import * as promises from "node:readline/promises";39    export { promises };40    export interface Key {41        sequence?: string | undefined;42        name?: string | undefined;43        ctrl?: boolean | undefined;44        meta?: boolean | undefined;45        shift?: boolean | undefined;46    }47    /**48     * Instances of the `readline.Interface` class are constructed using the `readline.createInterface()` method. Every instance is associated with a49     * single `input` [Readable](https://nodejs.org/docs/latest-v24.x/api/stream.html#readable-streams) stream and a single `output` [Writable](https://nodejs.org/docs/latest-v24.x/api/stream.html#writable-streams) stream.50     * The `output` stream is used to print prompts for user input that arrives on,51     * and is read from, the `input` stream.52     * @since v0.1.10453     */54    export class Interface extends EventEmitter implements Disposable {55        readonly terminal: boolean;56        /**57         * The current input data being processed by node.58         *59         * This can be used when collecting input from a TTY stream to retrieve the60         * current value that has been processed thus far, prior to the `line` event61         * being emitted. Once the `line` event has been emitted, this property will62         * be an empty string.63         *64         * Be aware that modifying the value during the instance runtime may have65         * unintended consequences if `rl.cursor` is not also controlled.66         *67         * **If not using a TTY stream for input, use the `'line'` event.**68         *69         * One possible use case would be as follows:70         *71         * ```js72         * const values = ['lorem ipsum', 'dolor sit amet'];73         * const rl = readline.createInterface(process.stdin);74         * const showResults = debounce(() => {75         *   console.log(76         *     '\n',77         *     values.filter((val) => val.startsWith(rl.line)).join(' '),78         *   );79         * }, 300);80         * process.stdin.on('keypress', (c, k) => {81         *   showResults();82         * });83         * ```84         * @since v0.1.9885         */86        readonly line: string;87        /**88         * The cursor position relative to `rl.line`.89         *90         * This will track where the current cursor lands in the input string, when91         * reading input from a TTY stream. The position of cursor determines the92         * portion of the input string that will be modified as input is processed,93         * as well as the column where the terminal caret will be rendered.94         * @since v0.1.9895         */96        readonly cursor: number;97        /**98         * NOTE: According to the documentation:99         *100         * > Instances of the `readline.Interface` class are constructed using the101         * > `readline.createInterface()` method.102         *103         * @see https://nodejs.org/dist/latest-v24.x/docs/api/readline.html#class-interfaceconstructor104         */105        protected constructor(106            input: NodeJS.ReadableStream,107            output?: NodeJS.WritableStream,108            completer?: Completer | AsyncCompleter,109            terminal?: boolean,110        );111        /**112         * NOTE: According to the documentation:113         *114         * > Instances of the `readline.Interface` class are constructed using the115         * > `readline.createInterface()` method.116         *117         * @see https://nodejs.org/dist/latest-v24.x/docs/api/readline.html#class-interfaceconstructor118         */119        protected constructor(options: ReadLineOptions);120        /**121         * The `rl.getPrompt()` method returns the current prompt used by `rl.prompt()`.122         * @since v15.3.0, v14.17.0123         * @return the current prompt string124         */125        getPrompt(): string;126        /**127         * The `rl.setPrompt()` method sets the prompt that will be written to `output` whenever `rl.prompt()` is called.128         * @since v0.1.98129         */130        setPrompt(prompt: string): void;131        /**132         * The `rl.prompt()` method writes the `Interface` instances configured`prompt` to a new line in `output` in order to provide a user with a new133         * location at which to provide input.134         *135         * When called, `rl.prompt()` will resume the `input` stream if it has been136         * paused.137         *138         * If the `Interface` was created with `output` set to `null` or `undefined` the prompt is not written.139         * @since v0.1.98140         * @param preserveCursor If `true`, prevents the cursor placement from being reset to `0`.141         */142        prompt(preserveCursor?: boolean): void;143        /**144         * The `rl.question()` method displays the `query` by writing it to the `output`,145         * waits for user input to be provided on `input`, then invokes the `callback` function passing the provided input as the first argument.146         *147         * When called, `rl.question()` will resume the `input` stream if it has been148         * paused.149         *150         * If the `Interface` was created with `output` set to `null` or `undefined` the `query` is not written.151         *152         * The `callback` function passed to `rl.question()` does not follow the typical153         * pattern of accepting an `Error` object or `null` as the first argument.154         * The `callback` is called with the provided answer as the only argument.155         *156         * An error will be thrown if calling `rl.question()` after `rl.close()`.157         *158         * Example usage:159         *160         * ```js161         * rl.question('What is your favorite food? ', (answer) => {162         *   console.log(`Oh, so your favorite food is ${answer}`);163         * });164         * ```165         *166         * Using an `AbortController` to cancel a question.167         *168         * ```js169         * const ac = new AbortController();170         * const signal = ac.signal;171         *172         * rl.question('What is your favorite food? ', { signal }, (answer) => {173         *   console.log(`Oh, so your favorite food is ${answer}`);174         * });175         *176         * signal.addEventListener('abort', () => {177         *   console.log('The food question timed out');178         * }, { once: true });179         *180         * setTimeout(() => ac.abort(), 10000);181         * ```182         * @since v0.3.3183         * @param query A statement or query to write to `output`, prepended to the prompt.184         * @param callback A callback function that is invoked with the user's input in response to the `query`.185         */186        question(query: string, callback: (answer: string) => void): void;187        question(query: string, options: Abortable, callback: (answer: string) => void): void;188        /**189         * The `rl.pause()` method pauses the `input` stream, allowing it to be resumed190         * later if necessary.191         *192         * Calling `rl.pause()` does not immediately pause other events (including `'line'`) from being emitted by the `Interface` instance.193         * @since v0.3.4194         */195        pause(): this;196        /**197         * The `rl.resume()` method resumes the `input` stream if it has been paused.198         * @since v0.3.4199         */200        resume(): this;201        /**202         * The `rl.close()` method closes the `Interface` instance and203         * relinquishes control over the `input` and `output` streams. When called,204         * the `'close'` event will be emitted.205         *206         * Calling `rl.close()` does not immediately stop other events (including `'line'`)207         * from being emitted by the `Interface` instance.208         * @since v0.1.98209         */210        close(): void;211        /**212         * Alias for `rl.close()`.213         * @since v22.15.0214         */215        [Symbol.dispose](): void;216        /**217         * The `rl.write()` method will write either `data` or a key sequence identified218         * by `key` to the `output`. The `key` argument is supported only if `output` is219         * a `TTY` text terminal. See `TTY keybindings` for a list of key220         * combinations.221         *222         * If `key` is specified, `data` is ignored.223         *224         * When called, `rl.write()` will resume the `input` stream if it has been225         * paused.226         *227         * If the `Interface` was created with `output` set to `null` or `undefined` the `data` and `key` are not written.228         *229         * ```js230         * rl.write('Delete this!');231         * // Simulate Ctrl+U to delete the line written previously232         * rl.write(null, { ctrl: true, name: 'u' });233         * ```234         *235         * The `rl.write()` method will write the data to the `readline` `Interface`'s `input` _as if it were provided by the user_.236         * @since v0.1.98237         */238        write(data: string | Buffer, key?: Key): void;239        write(data: undefined | null | string | Buffer, key: Key): void;240        /**241         * Returns the real position of the cursor in relation to the input242         * prompt + string. Long input (wrapping) strings, as well as multiple243         * line prompts are included in the calculations.244         * @since v13.5.0, v12.16.0245         */246        getCursorPos(): CursorPos;247        /**248         * events.EventEmitter249         * 1. close250         * 2. line251         * 3. pause252         * 4. resume253         * 5. SIGCONT254         * 6. SIGINT255         * 7. SIGTSTP256         * 8. history257         */258        addListener(event: string, listener: (...args: any[]) => void): this;259        addListener(event: "close", listener: () => void): this;260        addListener(event: "error", listener: (error: Error) => void): this;261        addListener(event: "line", listener: (input: string) => void): this;262        addListener(event: "pause", listener: () => void): this;263        addListener(event: "resume", listener: () => void): this;264        addListener(event: "SIGCONT", listener: () => void): this;265        addListener(event: "SIGINT", listener: () => void): this;266        addListener(event: "SIGTSTP", listener: () => void): this;267        addListener(event: "history", listener: (history: string[]) => void): this;268        emit(event: string | symbol, ...args: any[]): boolean;269        emit(event: "close"): boolean;270        emit(event: "error", error: Error): boolean;271        emit(event: "line", input: string): boolean;272        emit(event: "pause"): boolean;273        emit(event: "resume"): boolean;274        emit(event: "SIGCONT"): boolean;275        emit(event: "SIGINT"): boolean;276        emit(event: "SIGTSTP"): boolean;277        emit(event: "history", history: string[]): boolean;278        on(event: string, listener: (...args: any[]) => void): this;279        on(event: "close", listener: () => void): this;280        on(event: "error", listener: (error: Error) => void): this;281        on(event: "line", listener: (input: string) => void): this;282        on(event: "pause", listener: () => void): this;283        on(event: "resume", listener: () => void): this;284        on(event: "SIGCONT", listener: () => void): this;285        on(event: "SIGINT", listener: () => void): this;286        on(event: "SIGTSTP", listener: () => void): this;287        on(event: "history", listener: (history: string[]) => void): this;288        once(event: string, listener: (...args: any[]) => void): this;289        once(event: "close", listener: () => void): this;290        once(event: "error", listener: (error: Error) => void): this;291        once(event: "line", listener: (input: string) => void): this;292        once(event: "pause", listener: () => void): this;293        once(event: "resume", listener: () => void): this;294        once(event: "SIGCONT", listener: () => void): this;295        once(event: "SIGINT", listener: () => void): this;296        once(event: "SIGTSTP", listener: () => void): this;297        once(event: "history", listener: (history: string[]) => void): this;298        prependListener(event: string, listener: (...args: any[]) => void): this;299        prependListener(event: "close", listener: () => void): this;300        prependListener(event: "error", listener: (error: Error) => void): this;301        prependListener(event: "line", listener: (input: string) => void): this;302        prependListener(event: "pause", listener: () => void): this;303        prependListener(event: "resume", listener: () => void): this;304        prependListener(event: "SIGCONT", listener: () => void): this;305        prependListener(event: "SIGINT", listener: () => void): this;306        prependListener(event: "SIGTSTP", listener: () => void): this;307        prependListener(event: "history", listener: (history: string[]) => void): this;308        prependOnceListener(event: string, listener: (...args: any[]) => void): this;309        prependOnceListener(event: "close", listener: () => void): this;310        prependOnceListener(event: "error", listener: (error: Error) => void): this;311        prependOnceListener(event: "line", listener: (input: string) => void): this;312        prependOnceListener(event: "pause", listener: () => void): this;313        prependOnceListener(event: "resume", listener: () => void): this;314        prependOnceListener(event: "SIGCONT", listener: () => void): this;315        prependOnceListener(event: "SIGINT", listener: () => void): this;316        prependOnceListener(event: "SIGTSTP", listener: () => void): this;317        prependOnceListener(event: "history", listener: (history: string[]) => void): this;318        [Symbol.asyncIterator](): NodeJS.AsyncIterator<string>;319    }320    export type ReadLine = Interface; // type forwarded for backwards compatibility321    export type Completer = (line: string) => CompleterResult;322    export type AsyncCompleter = (323        line: string,324        callback: (err?: null | Error, result?: CompleterResult) => void,325    ) => void;326    export type CompleterResult = [string[], string];327    export interface ReadLineOptions {328        /**329         * The [`Readable`](https://nodejs.org/docs/latest-v24.x/api/stream.html#readable-streams) stream to listen to330         */331        input: NodeJS.ReadableStream;332        /**333         * The [`Writable`](https://nodejs.org/docs/latest-v24.x/api/stream.html#writable-streams) stream to write readline data to.334         */335        output?: NodeJS.WritableStream | undefined;336        /**337         * An optional function used for Tab autocompletion.338         */339        completer?: Completer | AsyncCompleter | undefined;340        /**341         * `true` if the `input` and `output` streams should be treated like a TTY,342         * and have ANSI/VT100 escape codes written to it.343         * Default: checking `isTTY` on the `output` stream upon instantiation.344         */345        terminal?: boolean | undefined;346        /**347         * Initial list of history lines.348         * This option makes sense only if `terminal` is set to `true` by the user or by an internal `output` check,349         * otherwise the history caching mechanism is not initialized at all.350         * @default []351         */352        history?: string[] | undefined;353        /**354         * Maximum number of history lines retained.355         * To disable the history set this value to `0`.356         * This option makes sense only if `terminal` is set to `true` by the user or by an internal `output` check,357         * otherwise the history caching mechanism is not initialized at all.358         * @default 30359         */360        historySize?: number | undefined;361        /**362         * If `true`, when a new input line added to the history list duplicates an older one,363         * this removes the older line from the list.364         * @default false365         */366        removeHistoryDuplicates?: boolean | undefined;367        /**368         * The prompt string to use.369         * @default "> "370         */371        prompt?: string | undefined;372        /**373         * If the delay between `\r` and `\n` exceeds `crlfDelay` milliseconds,374         * both `\r` and `\n` will be treated as separate end-of-line input.375         * `crlfDelay` will be coerced to a number no less than `100`.376         * It can be set to `Infinity`, in which case377         * `\r` followed by `\n` will always be considered a single newline378         * (which may be reasonable for [reading files](https://nodejs.org/docs/latest-v24.x/api/readline.html#example-read-file-stream-line-by-line) with `\r\n` line delimiter).379         * @default 100380         */381        crlfDelay?: number | undefined;382        /**383         * The duration `readline` will wait for a character384         * (when reading an ambiguous key sequence in milliseconds385         * one that can both form a complete key sequence using the input read so far386         * and can take additional input to complete a longer key sequence).387         * @default 500388         */389        escapeCodeTimeout?: number | undefined;390        /**391         * The number of spaces a tab is equal to (minimum 1).392         * @default 8393         */394        tabSize?: number | undefined;395        /**396         * Allows closing the interface using an AbortSignal.397         * Aborting the signal will internally call `close` on the interface.398         */399        signal?: AbortSignal | undefined;400    }401    /**402     * The `readline.createInterface()` method creates a new `readline.Interface` instance.403     *404     * ```js405     * import readline from 'node:readline';406     * const rl = readline.createInterface({407     *   input: process.stdin,408     *   output: process.stdout,409     * });410     * ```411     *412     * Once the `readline.Interface` instance is created, the most common case is to413     * listen for the `'line'` event:414     *415     * ```js416     * rl.on('line', (line) => {417     *   console.log(`Received: ${line}`);418     * });419     * ```420     *421     * If `terminal` is `true` for this instance then the `output` stream will get422     * the best compatibility if it defines an `output.columns` property and emits423     * a `'resize'` event on the `output` if or when the columns ever change424     * (`process.stdout` does this automatically when it is a TTY).425     *426     * When creating a `readline.Interface` using `stdin` as input, the program427     * will not terminate until it receives an [EOF character](https://en.wikipedia.org/wiki/End-of-file#EOF_character). To exit without428     * waiting for user input, call `process.stdin.unref()`.429     * @since v0.1.98430     */431    export function createInterface(432        input: NodeJS.ReadableStream,433        output?: NodeJS.WritableStream,434        completer?: Completer | AsyncCompleter,435        terminal?: boolean,436    ): Interface;437    export function createInterface(options: ReadLineOptions): Interface;438    /**439     * The `readline.emitKeypressEvents()` method causes the given `Readable` stream to begin emitting `'keypress'` events corresponding to received input.440     *441     * Optionally, `interface` specifies a `readline.Interface` instance for which442     * autocompletion is disabled when copy-pasted input is detected.443     *444     * If the `stream` is a `TTY`, then it must be in raw mode.445     *446     * This is automatically called by any readline instance on its `input` if the `input` is a terminal. Closing the `readline` instance does not stop447     * the `input` from emitting `'keypress'` events.448     *449     * ```js450     * readline.emitKeypressEvents(process.stdin);451     * if (process.stdin.isTTY)452     *   process.stdin.setRawMode(true);453     * ```454     *455     * ## Example: Tiny CLI456     *457     * The following example illustrates the use of `readline.Interface` class to458     * implement a small command-line interface:459     *460     * ```js461     * import readline from 'node:readline';462     * const rl = readline.createInterface({463     *   input: process.stdin,464     *   output: process.stdout,465     *   prompt: 'OHAI> ',466     * });467     *468     * rl.prompt();469     *470     * rl.on('line', (line) => {471     *   switch (line.trim()) {472     *     case 'hello':473     *       console.log('world!');474     *       break;475     *     default:476     *       console.log(`Say what? I might have heard '${line.trim()}'`);477     *       break;478     *   }479     *   rl.prompt();480     * }).on('close', () => {481     *   console.log('Have a great day!');482     *   process.exit(0);483     * });484     * ```485     *486     * ## Example: Read file stream line-by-Line487     *488     * A common use case for `readline` is to consume an input file one line at a489     * time. The easiest way to do so is leveraging the `fs.ReadStream` API as490     * well as a `for await...of` loop:491     *492     * ```js493     * import fs from 'node:fs';494     * import readline from 'node:readline';495     *496     * async function processLineByLine() {497     *   const fileStream = fs.createReadStream('input.txt');498     *499     *   const rl = readline.createInterface({500     *     input: fileStream,501     *     crlfDelay: Infinity,502     *   });503     *   // Note: we use the crlfDelay option to recognize all instances of CR LF504     *   // ('\r\n') in input.txt as a single line break.505     *506     *   for await (const line of rl) {507     *     // Each line in input.txt will be successively available here as `line`.508     *     console.log(`Line from file: ${line}`);509     *   }510     * }511     *512     * processLineByLine();513     * ```514     *515     * Alternatively, one could use the `'line'` event:516     *517     * ```js518     * import fs from 'node:fs';519     * import readline from 'node:readline';520     *521     * const rl = readline.createInterface({522     *   input: fs.createReadStream('sample.txt'),523     *   crlfDelay: Infinity,524     * });525     *526     * rl.on('line', (line) => {527     *   console.log(`Line from file: ${line}`);528     * });529     * ```530     *531     * Currently, `for await...of` loop can be a bit slower. If `async` / `await` flow and speed are both essential, a mixed approach can be applied:532     *533     * ```js534     * import { once } from 'node:events';535     * import { createReadStream } from 'node:fs';536     * import { createInterface } from 'node:readline';537     *538     * (async function processLineByLine() {539     *   try {540     *     const rl = createInterface({541     *       input: createReadStream('big-file.txt'),542     *       crlfDelay: Infinity,543     *     });544     *545     *     rl.on('line', (line) => {546     *       // Process the line.547     *     });548     *549     *     await once(rl, 'close');550     *551     *     console.log('File processed.');552     *   } catch (err) {553     *     console.error(err);554     *   }555     * })();556     * ```557     * @since v0.7.7558     */559    export function emitKeypressEvents(stream: NodeJS.ReadableStream, readlineInterface?: Interface): void;560    export type Direction = -1 | 0 | 1;561    export interface CursorPos {562        rows: number;563        cols: number;564    }565    /**566     * The `readline.clearLine()` method clears current line of given [TTY](https://nodejs.org/docs/latest-v24.x/api/tty.html) stream567     * in a specified direction identified by `dir`.568     * @since v0.7.7569     * @param callback Invoked once the operation completes.570     * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`.571     */572    export function clearLine(stream: NodeJS.WritableStream, dir: Direction, callback?: () => void): boolean;573    /**574     * The `readline.clearScreenDown()` method clears the given [TTY](https://nodejs.org/docs/latest-v24.x/api/tty.html) stream from575     * the current position of the cursor down.576     * @since v0.7.7577     * @param callback Invoked once the operation completes.578     * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`.579     */580    export function clearScreenDown(stream: NodeJS.WritableStream, callback?: () => void): boolean;581    /**582     * The `readline.cursorTo()` method moves cursor to the specified position in a583     * given [TTY](https://nodejs.org/docs/latest-v24.x/api/tty.html) `stream`.584     * @since v0.7.7585     * @param callback Invoked once the operation completes.586     * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`.587     */588    export function cursorTo(stream: NodeJS.WritableStream, x: number, y?: number, callback?: () => void): boolean;589    /**590     * The `readline.moveCursor()` method moves the cursor _relative_ to its current591     * position in a given [TTY](https://nodejs.org/docs/latest-v24.x/api/tty.html) `stream`.592     * @since v0.7.7593     * @param callback Invoked once the operation completes.594     * @return `false` if `stream` wishes for the calling code to wait for the `'drain'` event to be emitted before continuing to write additional data; otherwise `true`.595     */596    export function moveCursor(stream: NodeJS.WritableStream, dx: number, dy: number, callback?: () => void): boolean;597}598declare module "node:readline" {599    export * from "readline";600}601