UNPKG

1.83 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7const chalk = require("chalk");
8/* eslint-disable shopify/typescript/prefer-pascal-case-enums */
9// Lower-cased names is a lazy way to accept `--log-level <level>` without
10// explicitly validating/converting inputs.
11
12
13var Verbosity;
14
15(function (Verbosity) {
16 Verbosity["debug"] = "debug";
17 Verbosity["info"] = "info";
18 Verbosity["warn"] = "warn";
19 Verbosity["error"] = "error";
20})(Verbosity = exports.Verbosity || (exports.Verbosity = {}));
21
22class Logger {
23 constructor(verbosity = Verbosity.info) {
24 this.verbosity = verbosity;
25 }
26
27 error(error) {
28 const {
29 message,
30 stack
31 } = error;
32 this.log(colors => `${colors.bold.red('[error]')} ${message}`, {
33 verbosity: Verbosity.error,
34 method: 'error'
35 });
36
37 if (stack) {
38 this.log(colors => colors.dim(stack), {
39 verbosity: Verbosity.debug,
40 method: 'log'
41 });
42 }
43 }
44
45 info(message) {
46 this.log(message, {
47 verbosity: Verbosity.info,
48 method: 'log'
49 });
50 }
51
52 warn(message) {
53 this.log(message, {
54 verbosity: Verbosity.warn,
55 method: 'warn'
56 });
57 }
58
59 debug(message) {
60 this.log(message, {
61 verbosity: Verbosity.debug,
62 method: 'log'
63 });
64 }
65
66 log(message, {
67 verbosity,
68 method = 'log'
69 }) {
70 const messageLevel = Object.keys(Verbosity).findIndex(enumKey => enumKey === verbosity);
71 const loggerLevel = Object.keys(Verbosity).findIndex(enumKey => enumKey === this.verbosity);
72
73 if (messageLevel < loggerLevel) {
74 return;
75 } // eslint-disable-next-line no-console
76
77
78 console[method](messageString(message));
79 }
80
81}
82
83exports.default = Logger;
84
85function messageString(message) {
86 return typeof message === 'function' ? message(chalk) : message;
87}
\No newline at end of file