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