/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format * @oncall react_native */ import type {Socket} from 'net'; import type {Writable} from 'stream'; type UnderlyingStream = Socket | Writable; /** * We don't just print things to the console, sometimes we also want to show * and update progress. This utility just ensures the output stays neat: no * missing newlines, no mangled log lines. * * const terminal = Terminal.default; * terminal.status('Updating... 38%'); * terminal.log('warning: Something happened.'); * terminal.status('Updating, done.'); * terminal.persistStatus(); * * The final output: * * warning: Something happened. * Updating, done. * * Without the status feature, we may get a mangled output: * * Updating... 38%warning: Something happened. * Updating, done. * * This is meant to be user-readable and TTY-oriented. We use stdout by default * because it's more about status information than diagnostics/errors (stderr). * * Do not add any higher-level functionality in this class such as "warning" and * "error" printers, as it is not meant for formatting/reporting. It has the * single responsibility of handling status messages. */ declare class Terminal { constructor(stream: UnderlyingStream, opts?: {ttyPrint?: boolean}); waitForUpdates(): Promise; /** * Useful for calling console/stdout directly after terminal logs * Otherwise, you could end up with mangled output when the queued * update starts writing to stream after a delay. */ flush(): Promise; /** * Shows some text that is meant to be overriden later. Return the previous * status that was shown and is no more. Calling `status()` with no argument * removes the status altogether. The status is never shown in a * non-interactive terminal: for example, if the output is redirected to a * file, then we don't care too much about having a progress bar. */ status(format: string, ...args: Array): string; /** * Similar to `console.log`, except it moves the status/progress text out of * the way correctly. In non-interactive terminals this is the same as * `console.log`. */ log(format: string, ...args: Array): void; /** * Log the current status and start from scratch. This is useful if the last * status was the last one of a series of updates. */ persistStatus(): void; } export default Terminal;