xref: /expo/packages/@expo/cli/src/log.ts (revision 474a7a4b)
18d307f52SEvan Baconimport chalk from 'chalk';
28d307f52SEvan Bacon
38d307f52SEvan Baconexport function time(label?: string): void {
48d307f52SEvan Bacon  console.time(label);
58d307f52SEvan Bacon}
68d307f52SEvan Bacon
78d307f52SEvan Baconexport function timeEnd(label?: string): void {
88d307f52SEvan Bacon  console.timeEnd(label);
98d307f52SEvan Bacon}
108d307f52SEvan Bacon
118d307f52SEvan Baconexport function error(...message: string[]): void {
128d307f52SEvan Bacon  console.error(...message);
138d307f52SEvan Bacon}
148d307f52SEvan Bacon
158d307f52SEvan Bacon/** Print an error and provide additional info (the stack trace) in debug mode. */
168d307f52SEvan Baconexport function exception(e: Error): void {
17814b6fafSEvan Bacon  const { env } = require('./utils/env');
18814b6fafSEvan Bacon  error(chalk.red(e.toString()) + (env.EXPO_DEBUG ? '\n' + chalk.gray(e.stack) : ''));
198d307f52SEvan Bacon}
208d307f52SEvan Bacon
218d307f52SEvan Baconexport function warn(...message: string[]): void {
228d307f52SEvan Bacon  console.warn(...message.map((value) => chalk.yellow(value)));
238d307f52SEvan Bacon}
248d307f52SEvan Bacon
258d307f52SEvan Baconexport function log(...message: string[]): void {
268d307f52SEvan Bacon  console.log(...message);
278d307f52SEvan Bacon}
288d307f52SEvan Bacon
29*474a7a4bSEvan Bacon/** @deprecated use `debug` package with the `expo:` prefix instead.  */
3009bb6093SEvan Baconexport function debug(...message: any[]): void {
31814b6fafSEvan Bacon  if (require('./utils/env').env.EXPO_DEBUG) console.log(...message);
328d307f52SEvan Bacon}
338d307f52SEvan Bacon
348d307f52SEvan Bacon/** Clear the terminal of all text. */
358d307f52SEvan Baconexport function clear(): void {
368d307f52SEvan Bacon  process.stdout.write(process.platform === 'win32' ? '\x1B[2J\x1B[0f' : '\x1B[2J\x1B[3J\x1B[H');
378d307f52SEvan Bacon}
388d307f52SEvan Bacon
398d307f52SEvan Bacon/** Log a message and exit the current process. If the `code` is non-zero then `console.error` will be used instead of `console.log`. */
408d307f52SEvan Baconexport function exit(message: string | Error, code: number = 1): never {
418d307f52SEvan Bacon  if (message instanceof Error) {
428d307f52SEvan Bacon    exception(message);
438d307f52SEvan Bacon    process.exit(code);
448d307f52SEvan Bacon  }
458d307f52SEvan Bacon
46c94ad8a2SEvan Bacon  if (message) {
478d307f52SEvan Bacon    if (code === 0) {
488d307f52SEvan Bacon      log(message);
498d307f52SEvan Bacon    } else {
508d307f52SEvan Bacon      error(message);
518d307f52SEvan Bacon    }
52c94ad8a2SEvan Bacon  }
538d307f52SEvan Bacon
548d307f52SEvan Bacon  process.exit(code);
558d307f52SEvan Bacon}
564c50faceSEvan Bacon
574c50faceSEvan Bacon// The re-export makes auto importing easier.
584c50faceSEvan Baconexport const Log = {
594c50faceSEvan Bacon  time,
604c50faceSEvan Bacon  timeEnd,
614c50faceSEvan Bacon  error,
624c50faceSEvan Bacon  exception,
634c50faceSEvan Bacon  warn,
644c50faceSEvan Bacon  log,
654c50faceSEvan Bacon  debug,
664c50faceSEvan Bacon  clear,
674c50faceSEvan Bacon  exit,
684c50faceSEvan Bacon};
69