UNPKG

1.91 kBPlain TextView Raw
1import c, { Kleur } from 'kleur'
2
3import { getCurrentPrestaInstance } from './currentPrestaInstance'
4import { Env } from './constants'
5
6export enum Levels {
7 Debug = 'debug',
8 Info = 'info',
9 Warn = 'warn',
10 Err = 'error',
11}
12
13export type Message = {
14 level?: Levels
15 label: string | number
16 message?: string
17 duration?: string | number
18 error?: Error
19}
20
21let logs: any[] = []
22
23const colors = {
24 [Levels.Debug]: 'magenta',
25 [Levels.Info]: 'blue',
26 [Levels.Warn]: 'yellow',
27 [Levels.Err]: 'red',
28}
29
30export { c as colors }
31
32export 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
40export 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
63export function debug(message: Message) {
64 logger({ level: Levels.Debug, ...message })
65}
66
67export function info(message: Message) {
68 logger({ level: Levels.Info, ...message })
69}
70
71export function warn(message: Message) {
72 logger({ level: Levels.Warn, ...message })
73}
74
75export function error(message: Message) {
76 logger({ level: Levels.Err, ...message })
77}
78
79export function raw(...args: any[]) {
80 if (process.env.TESTING) {
81 logs.push(args)
82 } else {
83 console.log(...args)
84 }
85}
86
87export function newline() {
88 if (process.env.TESTING) return
89 console.log('')
90}