xref: /expo/packages/create-expo/src/log.ts (revision b7d15820)
1import chalk from 'chalk';
2
3import { ExitError } from './error';
4
5export function error(...message: string[]): void {
6  console.error(...message);
7}
8
9/** Print an error and provide additional info (the stack trace) in debug mode. */
10export function exception(e: Error): void {
11  const { env } = require('./utils/env');
12  error(chalk.red(e.toString()) + (env.EXPO_DEBUG ? '\n' + chalk.gray(e.stack) : ''));
13}
14
15export function log(...message: string[]): void {
16  console.log(...message);
17}
18
19/** Log a message and exit the current process. If the `code` is non-zero then `console.error` will be used instead of `console.log`. */
20export function exit(message: string | Error, code: number = 1): never {
21  if (message instanceof Error) {
22    exception(message);
23  } else if (message) {
24    if (code === 0) {
25      log(message);
26    } else {
27      error(message);
28    }
29  }
30
31  if (code !== 0) {
32    throw new ExitError(message, code);
33  }
34  process.exit(code);
35}
36
37// The re-export makes auto importing easier.
38export const Log = {
39  error,
40  exception,
41  log,
42  exit,
43};
44