1 | import c, { Kleur } from 'kleur'
|
2 |
|
3 | import { getCurrentPrestaInstance } from './currentPrestaInstance'
|
4 | import { Env } from './constants'
|
5 |
|
6 | export enum Levels {
|
7 | Debug = 'debug',
|
8 | Info = 'info',
|
9 | Warn = 'warn',
|
10 | Err = 'error',
|
11 | }
|
12 |
|
13 | export type Message = {
|
14 | level?: Levels
|
15 | label: string | number
|
16 | message?: string
|
17 | duration?: string | number
|
18 | error?: Error
|
19 | }
|
20 |
|
21 | let logs: any[] = []
|
22 |
|
23 | const colors = {
|
24 | [Levels.Debug]: 'magenta',
|
25 | [Levels.Info]: 'blue',
|
26 | [Levels.Warn]: 'yellow',
|
27 | [Levels.Err]: 'red',
|
28 | }
|
29 |
|
30 | export { c as colors }
|
31 |
|
32 | export function getLogs() {
|
33 | if (!process.env.TESTING) {
|
34 | throw new Error('Internal method was called outside test mode')
|
35 | }
|
36 |
|
37 | return logs
|
38 | }
|
39 |
|
40 | export function logger(message: Message) {
|
41 | if (process.env.TESTING) {
|
42 | logs.push(message)
|
43 | } else {
|
44 | const debug = getCurrentPrestaInstance().debug
|
45 | const context = getCurrentPrestaInstance().env === Env.PRODUCTION ? 'prod' : 'dev'
|
46 |
|
47 | if (!debug && message.level === Levels.Debug) return
|
48 |
|
49 | console.log(
|
50 | [
|
51 | c.gray(context),
|
52 | c[colors[message.level || 'info'] as keyof Kleur](message.label),
|
53 | message.message,
|
54 | message.duration ? c.gray('+' + message.duration) : '',
|
55 | message.error ? `\n\n${message.error.stack || message.error}\n\n` : '',
|
56 | ]
|
57 | .filter(Boolean)
|
58 | .join(' ')
|
59 | )
|
60 | }
|
61 | }
|
62 |
|
63 | export function debug(message: Message) {
|
64 | logger({ level: Levels.Debug, ...message })
|
65 | }
|
66 |
|
67 | export function info(message: Message) {
|
68 | logger({ level: Levels.Info, ...message })
|
69 | }
|
70 |
|
71 | export function warn(message: Message) {
|
72 | logger({ level: Levels.Warn, ...message })
|
73 | }
|
74 |
|
75 | export function error(message: Message) {
|
76 | logger({ level: Levels.Err, ...message })
|
77 | }
|
78 |
|
79 | export function raw(...args: any[]) {
|
80 | if (process.env.TESTING) {
|
81 | logs.push(args)
|
82 | } else {
|
83 | console.log(...args)
|
84 | }
|
85 | }
|
86 |
|
87 | export function newline() {
|
88 | if (process.env.TESTING) return
|
89 | console.log('')
|
90 | }
|