@node-cli/logger 1.3.1 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Logger.d.ts CHANGED
@@ -26,12 +26,12 @@ export declare class Logger {
26
26
  set timestamp(flag: boolean);
27
27
  set inMemory(flag: boolean);
28
28
  /**
29
- * Get the accumulated logs as a string
29
+ * Get the accumulated logs as a string.
30
30
  * @returns {string} All logs joined by the separator
31
31
  */
32
32
  getMemoryLogs(): string;
33
33
  /**
34
- * Clear all accumulated logs from memory
34
+ * Clear all accumulated logs from memory.
35
35
  */
36
36
  clearMemoryLogs(): void;
37
37
  info(...arguments_: any): void;
@@ -40,13 +40,14 @@ export declare class Logger {
40
40
  warn(...arguments_: any): void;
41
41
  error(...arguments_: any): void;
42
42
  /**
43
- * Log multiple error messages at the prompt using `console.error` behind the scenes.
43
+ * Log multiple error messages at the prompt using `console.error` behind the
44
+ * scenes.
44
45
  * @param {string[]} errorMessages array of error message to display line by line
45
46
  * @param {number} [exitStatus] the process will exit with this value if provided
46
47
  */
47
48
  printErrorsAndExit(errorMessages: string[], exitStatus?: number): void;
48
49
  /**
49
- * Print sets of logs in a box (wrapper to Boxen)
50
+ * Print sets of logs in a box (wrapper to Boxen).
50
51
  * @param messages Messages to print
51
52
  * @param options
52
53
  */
package/dist/Logger.js CHANGED
@@ -1,7 +1,7 @@
1
- import boxen from "boxen";
2
- import ora from "ora";
3
1
  import util from "node:util";
2
+ import boxen from "boxen";
4
3
  import kleur from "kleur";
4
+ import ora from "ora";
5
5
  export class Logger {
6
6
  #shouldLog;
7
7
  #globalPrefix;
@@ -15,7 +15,7 @@ export class Logger {
15
15
  this.#showTimestamp = timestamp;
16
16
  this.#inMemory = inMemory;
17
17
  this.#memoryLogs = [];
18
- // When in memory mode, we disable colors
18
+ // When in memory mode, we disable colors.
19
19
  this.#printOptions = {
20
20
  colors: !boring && !inMemory,
21
21
  compact: false,
@@ -26,7 +26,7 @@ export class Logger {
26
26
  this.#shouldLog = !flag;
27
27
  }
28
28
  set boring(flag) {
29
- // Only set colors if not in memory mode
29
+ // Only set colors if not in memory mode.
30
30
  if (!this.#inMemory) {
31
31
  this.#printOptions.colors = !flag;
32
32
  }
@@ -39,19 +39,19 @@ export class Logger {
39
39
  }
40
40
  set inMemory(flag) {
41
41
  this.#inMemory = flag;
42
- // When enabling in-memory mode, disable colors
42
+ // When enabling in-memory mode, disable colors.
43
43
  if (flag) {
44
44
  this.#printOptions.colors = false;
45
45
  }
46
46
  }
47
47
  /**
48
- * Get the accumulated logs as a string
48
+ * Get the accumulated logs as a string.
49
49
  * @returns {string} All logs joined by the separator
50
50
  */ getMemoryLogs() {
51
51
  return this.#memoryLogs.join("\n");
52
52
  }
53
53
  /**
54
- * Clear all accumulated logs from memory
54
+ * Clear all accumulated logs from memory.
55
55
  */ clearMemoryLogs() {
56
56
  this.#memoryLogs = [];
57
57
  }
@@ -70,11 +70,11 @@ export class Logger {
70
70
  }
71
71
  message = util.formatWithOptions(this.#printOptions, prefix.join(" "), ...arguments_);
72
72
  }
73
- // Store in memory if enabled
73
+ // Store in memory if enabled.
74
74
  if (this.#inMemory) {
75
75
  this.#memoryLogs.push(message);
76
76
  }
77
- // Still output to console if not in memory-only mode
77
+ // Still output to console if not in memory-only mode.
78
78
  if (!this.#inMemory) {
79
79
  console[type.method](this.#printOptions.colors ? `${type.color(message)}` : message);
80
80
  }
@@ -111,7 +111,8 @@ export class Logger {
111
111
  }, ...arguments_);
112
112
  }
113
113
  /**
114
- * Log multiple error messages at the prompt using `console.error` behind the scenes.
114
+ * Log multiple error messages at the prompt using `console.error` behind the
115
+ * scenes.
115
116
  * @param {string[]} errorMessages array of error message to display line by line
116
117
  * @param {number} [exitStatus] the process will exit with this value if provided
117
118
  */ printErrorsAndExit(errorMessages, exitStatus) {
@@ -128,7 +129,7 @@ export class Logger {
128
129
  }
129
130
  }
130
131
  /**
131
- * Print sets of logs in a box (wrapper to Boxen)
132
+ * Print sets of logs in a box (wrapper to Boxen).
132
133
  * @param messages Messages to print
133
134
  * @param options
134
135
  */ printBox(messages, options = {}) {
@@ -138,8 +139,7 @@ export class Logger {
138
139
  ...options
139
140
  };
140
141
  /**
141
- * Setting some sensible Boxen options if
142
- * not provided by the user.
142
+ * Setting some sensible Boxen options if not provided by the user.
143
143
  */ const borderColor = options.borderColor || "yellow";
144
144
  const boxenOptions = {
145
145
  ...options,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Logger.ts"],"sourcesContent":["import boxen, { Options as BoxenOptions } from \"boxen\";\nimport ora, { Ora, Options as OraOptions } from \"ora\";\n\nimport util from \"node:util\";\nimport kleur from \"kleur\";\n\nexport type PrintBoxOptions = {\n\tnewLineAfter?: boolean;\n\tnewLineBefore?: boolean;\n} & BoxenOptions;\n\nexport type LoggerOptions = {\n\tboring?: boolean;\n\tsilent?: boolean;\n\tprefix?: string;\n\ttimestamp?: boolean;\n\tinMemory?: boolean;\n};\n\nexport class Logger {\n\t#shouldLog: boolean;\n\t#globalPrefix: string;\n\t#showTimestamp: boolean;\n\t#printOptions: { colors: boolean; compact: boolean; depth: number };\n\t#inMemory: boolean;\n\t#memoryLogs: string[];\n\n\tconstructor({\n\t\tboring = false,\n\t\tsilent = false,\n\t\tprefix = \"\",\n\t\ttimestamp = false,\n\t\tinMemory = false,\n\t} = {}) {\n\t\tthis.#shouldLog = !silent;\n\t\tthis.#globalPrefix = prefix;\n\t\tthis.#showTimestamp = timestamp;\n\t\tthis.#inMemory = inMemory;\n\t\tthis.#memoryLogs = [];\n\n\t\t// When in memory mode, we disable colors\n\t\tthis.#printOptions = {\n\t\t\tcolors: !boring && !inMemory,\n\t\t\tcompact: false,\n\t\t\tdepth: 5,\n\t\t};\n\t}\n\n\tset silent(flag: boolean) {\n\t\tthis.#shouldLog = !flag;\n\t}\n\n\tset boring(flag: boolean) {\n\t\t// Only set colors if not in memory mode\n\t\tif (!this.#inMemory) {\n\t\t\tthis.#printOptions.colors = !flag;\n\t\t}\n\t}\n\n\tset prefix(prefix: string) {\n\t\tthis.#globalPrefix = prefix;\n\t}\n\n\tset timestamp(flag: boolean) {\n\t\tthis.#showTimestamp = flag;\n\t}\n\n\tset inMemory(flag: boolean) {\n\t\tthis.#inMemory = flag;\n\t\t// When enabling in-memory mode, disable colors\n\t\tif (flag) {\n\t\t\tthis.#printOptions.colors = false;\n\t\t}\n\t}\n\n\t/**\n\t * Get the accumulated logs as a string\n\t * @returns {string} All logs joined by the separator\n\t */\n\tgetMemoryLogs(): string {\n\t\treturn this.#memoryLogs.join(\"\\n\");\n\t}\n\n\t/**\n\t * Clear all accumulated logs from memory\n\t */\n\tclearMemoryLogs(): void {\n\t\tthis.#memoryLogs = [];\n\t}\n\n\t#_log(\n\t\ttype: { method: string | number; color: (argument0: any) => any },\n\t\t...arguments_: string[]\n\t) {\n\t\tif (this.#shouldLog) {\n\t\t\tlet message: string;\n\t\t\tif (!this.#showTimestamp && !this.#globalPrefix) {\n\t\t\t\tmessage = util.formatWithOptions(this.#printOptions, ...arguments_);\n\t\t\t} else {\n\t\t\t\tconst prefix = this.#globalPrefix ? [this.#globalPrefix] : [];\n\t\t\t\tif (this.#showTimestamp) {\n\t\t\t\t\tconst now = new Date();\n\t\t\t\t\tprefix.push(\n\t\t\t\t\t\tthis.#printOptions.colors\n\t\t\t\t\t\t\t? `${kleur.grey(\n\t\t\t\t\t\t\t\t\t`[ ${now.toDateString()} ${now.toLocaleTimeString()} ]`,\n\t\t\t\t\t\t\t\t)}`\n\t\t\t\t\t\t\t: `[ ${now.toDateString()} ${now.toLocaleTimeString()} ]`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tmessage = util.formatWithOptions(\n\t\t\t\t\tthis.#printOptions,\n\t\t\t\t\tprefix.join(\" \"),\n\t\t\t\t\t...arguments_,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Store in memory if enabled\n\t\t\tif (this.#inMemory) {\n\t\t\t\tthis.#memoryLogs.push(message);\n\t\t\t}\n\n\t\t\t// Still output to console if not in memory-only mode\n\t\t\tif (!this.#inMemory) {\n\t\t\t\tconsole[type.method](\n\t\t\t\t\tthis.#printOptions.colors ? `${type.color(message)}` : message,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tinfo(...arguments_: any) {\n\t\tthis.#_log({ method: \"info\", color: kleur.blue }, ...arguments_);\n\t}\n\n\tlog(...arguments_: any) {\n\t\tthis.#_log({ method: \"log\", color: kleur.white }, ...arguments_);\n\t}\n\n\tdebug(...arguments_: any) {\n\t\tthis.#_log({ method: \"debug\", color: kleur.grey }, ...arguments_);\n\t}\n\n\twarn(...arguments_: any) {\n\t\tthis.#_log({ method: \"warn\", color: kleur.yellow }, ...arguments_);\n\t}\n\n\terror(...arguments_: any) {\n\t\tthis.#_log({ method: \"error\", color: kleur.red }, ...arguments_);\n\t}\n\n\t/**\n\t * Log multiple error messages at the prompt using `console.error` behind the scenes.\n\t * @param {string[]} errorMessages array of error message to display line by line\n\t * @param {number} [exitStatus] the process will exit with this value if provided\n\t */\n\tprintErrorsAndExit(errorMessages: string[], exitStatus?: number) {\n\t\tif (errorMessages && errorMessages.length > 0) {\n\t\t\tthis.log();\n\t\t\tfor (const message of errorMessages) {\n\t\t\t\tthis.error(message);\n\t\t\t}\n\t\t\tthis.log();\n\n\t\t\tif (typeof exitStatus === \"number\") {\n\t\t\t\t// eslint-disable-next-line unicorn/no-process-exit\n\t\t\t\tprocess.exit(exitStatus);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Print sets of logs in a box (wrapper to Boxen)\n\t * @param messages Messages to print\n\t * @param options\n\t */\n\tprintBox(messages: string | string[], options: PrintBoxOptions = {}) {\n\t\tconst { newLineAfter, newLineBefore } = {\n\t\t\tnewLineAfter: true,\n\t\t\tnewLineBefore: true,\n\t\t\t...options,\n\t\t};\n\n\t\t/**\n\t\t * Setting some sensible Boxen options if\n\t\t * not provided by the user.\n\t\t */\n\t\tconst borderColor = options.borderColor || \"yellow\";\n\t\tconst boxenOptions: BoxenOptions = {\n\t\t\t...options,\n\t\t\tborderColor: this.#printOptions.colors ? borderColor : \"white\",\n\t\t\tpadding: typeof options.padding === \"number\" ? options.padding : 1,\n\t\t\ttextAlignment: options.textAlignment || \"center\",\n\t\t};\n\n\t\tconst oldPrefix = this.#globalPrefix;\n\t\tconst oldTimestamp = this.#showTimestamp;\n\n\t\tthis.#globalPrefix = \"\";\n\t\tthis.#showTimestamp = false;\n\n\t\tnewLineBefore && this.log();\n\t\tthis.log(\n\t\t\tboxen(\n\t\t\t\ttypeof messages === \"string\" ? messages : messages.join(\"\\n\"),\n\t\t\t\tboxenOptions,\n\t\t\t),\n\t\t);\n\t\tnewLineAfter && this.log();\n\n\t\tthis.#showTimestamp = oldTimestamp;\n\t\tthis.#globalPrefix = oldPrefix;\n\t}\n}\n\n/* v8 ignore next 48 */\nexport class Spinner {\n\tspinner: Ora;\n\n\tconstructor(options?: OraOptions) {\n\t\tthis.spinner = ora({\n\t\t\t...options,\n\t\t\tisSilent: process.env.NODE_ENV === \"test\",\n\t\t});\n\t}\n\n\tset text(message: string) {\n\t\tthis.spinner.text = message;\n\t}\n\n\tstart(message?: string) {\n\t\tthis.spinner.start(message);\n\t}\n\n\tstop(message?: string, type?: string) {\n\t\tswitch (type) {\n\t\t\tcase Spinner.ERROR: {\n\t\t\t\tthis.spinner.fail(message);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Spinner.WARNING: {\n\t\t\t\tthis.spinner.warn(message);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Spinner.INFO: {\n\t\t\t\tthis.spinner.info(message);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.spinner.succeed(message);\n\t\t\t\t}, 1000);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic SUCCESS = \"success\";\n\tstatic ERROR = \"fail\";\n\tstatic WARNING = \"warn\";\n\tstatic INFO = \"info\";\n}\n"],"names":["boxen","ora","util","kleur","Logger","constructor","boring","silent","prefix","timestamp","inMemory","colors","compact","depth","flag","getMemoryLogs","join","clearMemoryLogs","type","arguments_","message","formatWithOptions","now","Date","push","grey","toDateString","toLocaleTimeString","console","method","color","info","blue","log","white","debug","warn","yellow","error","red","printErrorsAndExit","errorMessages","exitStatus","length","process","exit","printBox","messages","options","newLineAfter","newLineBefore","borderColor","boxenOptions","padding","textAlignment","oldPrefix","oldTimestamp","Spinner","spinner","isSilent","env","NODE_ENV","text","start","stop","ERROR","fail","WARNING","INFO","setTimeout","succeed","SUCCESS"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/Logger.ts"],"sourcesContent":["import util from \"node:util\";\nimport boxen, { Options as BoxenOptions } from \"boxen\";\nimport kleur from \"kleur\";\nimport ora, { Ora, Options as OraOptions } from \"ora\";\n\nexport type PrintBoxOptions = {\n\tnewLineAfter?: boolean;\n\tnewLineBefore?: boolean;\n} & BoxenOptions;\n\nexport type LoggerOptions = {\n\tboring?: boolean;\n\tsilent?: boolean;\n\tprefix?: string;\n\ttimestamp?: boolean;\n\tinMemory?: boolean;\n};\n\nexport class Logger {\n\t#shouldLog: boolean;\n\t#globalPrefix: string;\n\t#showTimestamp: boolean;\n\t#printOptions: { colors: boolean; compact: boolean; depth: number };\n\t#inMemory: boolean;\n\t#memoryLogs: string[];\n\n\tconstructor({\n\t\tboring = false,\n\t\tsilent = false,\n\t\tprefix = \"\",\n\t\ttimestamp = false,\n\t\tinMemory = false,\n\t} = {}) {\n\t\tthis.#shouldLog = !silent;\n\t\tthis.#globalPrefix = prefix;\n\t\tthis.#showTimestamp = timestamp;\n\t\tthis.#inMemory = inMemory;\n\t\tthis.#memoryLogs = [];\n\n\t\t// When in memory mode, we disable colors.\n\t\tthis.#printOptions = {\n\t\t\tcolors: !boring && !inMemory,\n\t\t\tcompact: false,\n\t\t\tdepth: 5,\n\t\t};\n\t}\n\n\tset silent(flag: boolean) {\n\t\tthis.#shouldLog = !flag;\n\t}\n\n\tset boring(flag: boolean) {\n\t\t// Only set colors if not in memory mode.\n\t\tif (!this.#inMemory) {\n\t\t\tthis.#printOptions.colors = !flag;\n\t\t}\n\t}\n\n\tset prefix(prefix: string) {\n\t\tthis.#globalPrefix = prefix;\n\t}\n\n\tset timestamp(flag: boolean) {\n\t\tthis.#showTimestamp = flag;\n\t}\n\n\tset inMemory(flag: boolean) {\n\t\tthis.#inMemory = flag;\n\t\t// When enabling in-memory mode, disable colors.\n\t\tif (flag) {\n\t\t\tthis.#printOptions.colors = false;\n\t\t}\n\t}\n\n\t/**\n\t * Get the accumulated logs as a string.\n\t * @returns {string} All logs joined by the separator\n\t */\n\tgetMemoryLogs(): string {\n\t\treturn this.#memoryLogs.join(\"\\n\");\n\t}\n\n\t/**\n\t * Clear all accumulated logs from memory.\n\t */\n\tclearMemoryLogs(): void {\n\t\tthis.#memoryLogs = [];\n\t}\n\n\t#_log(\n\t\ttype: { method: string | number; color: (argument0: any) => any },\n\t\t...arguments_: string[]\n\t) {\n\t\tif (this.#shouldLog) {\n\t\t\tlet message: string;\n\t\t\tif (!this.#showTimestamp && !this.#globalPrefix) {\n\t\t\t\tmessage = util.formatWithOptions(this.#printOptions, ...arguments_);\n\t\t\t} else {\n\t\t\t\tconst prefix = this.#globalPrefix ? [this.#globalPrefix] : [];\n\t\t\t\tif (this.#showTimestamp) {\n\t\t\t\t\tconst now = new Date();\n\t\t\t\t\tprefix.push(\n\t\t\t\t\t\tthis.#printOptions.colors\n\t\t\t\t\t\t\t? `${kleur.grey(\n\t\t\t\t\t\t\t\t\t`[ ${now.toDateString()} ${now.toLocaleTimeString()} ]`,\n\t\t\t\t\t\t\t\t)}`\n\t\t\t\t\t\t\t: `[ ${now.toDateString()} ${now.toLocaleTimeString()} ]`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tmessage = util.formatWithOptions(\n\t\t\t\t\tthis.#printOptions,\n\t\t\t\t\tprefix.join(\" \"),\n\t\t\t\t\t...arguments_,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Store in memory if enabled.\n\t\t\tif (this.#inMemory) {\n\t\t\t\tthis.#memoryLogs.push(message);\n\t\t\t}\n\n\t\t\t// Still output to console if not in memory-only mode.\n\t\t\tif (!this.#inMemory) {\n\t\t\t\tconsole[type.method](\n\t\t\t\t\tthis.#printOptions.colors ? `${type.color(message)}` : message,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tinfo(...arguments_: any) {\n\t\tthis.#_log({ method: \"info\", color: kleur.blue }, ...arguments_);\n\t}\n\n\tlog(...arguments_: any) {\n\t\tthis.#_log({ method: \"log\", color: kleur.white }, ...arguments_);\n\t}\n\n\tdebug(...arguments_: any) {\n\t\tthis.#_log({ method: \"debug\", color: kleur.grey }, ...arguments_);\n\t}\n\n\twarn(...arguments_: any) {\n\t\tthis.#_log({ method: \"warn\", color: kleur.yellow }, ...arguments_);\n\t}\n\n\terror(...arguments_: any) {\n\t\tthis.#_log({ method: \"error\", color: kleur.red }, ...arguments_);\n\t}\n\n\t/**\n\t * Log multiple error messages at the prompt using `console.error` behind the\n\t * scenes.\n\t * @param {string[]} errorMessages array of error message to display line by line\n\t * @param {number} [exitStatus] the process will exit with this value if provided\n\t */\n\tprintErrorsAndExit(errorMessages: string[], exitStatus?: number) {\n\t\tif (errorMessages && errorMessages.length > 0) {\n\t\t\tthis.log();\n\t\t\tfor (const message of errorMessages) {\n\t\t\t\tthis.error(message);\n\t\t\t}\n\t\t\tthis.log();\n\n\t\t\tif (typeof exitStatus === \"number\") {\n\t\t\t\t// eslint-disable-next-line unicorn/no-process-exit\n\t\t\t\tprocess.exit(exitStatus);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Print sets of logs in a box (wrapper to Boxen).\n\t * @param messages Messages to print\n\t * @param options\n\t */\n\tprintBox(messages: string | string[], options: PrintBoxOptions = {}) {\n\t\tconst { newLineAfter, newLineBefore } = {\n\t\t\tnewLineAfter: true,\n\t\t\tnewLineBefore: true,\n\t\t\t...options,\n\t\t};\n\n\t\t/**\n\t\t * Setting some sensible Boxen options if not provided by the user.\n\t\t */\n\t\tconst borderColor = options.borderColor || \"yellow\";\n\t\tconst boxenOptions: BoxenOptions = {\n\t\t\t...options,\n\t\t\tborderColor: this.#printOptions.colors ? borderColor : \"white\",\n\t\t\tpadding: typeof options.padding === \"number\" ? options.padding : 1,\n\t\t\ttextAlignment: options.textAlignment || \"center\",\n\t\t};\n\n\t\tconst oldPrefix = this.#globalPrefix;\n\t\tconst oldTimestamp = this.#showTimestamp;\n\n\t\tthis.#globalPrefix = \"\";\n\t\tthis.#showTimestamp = false;\n\n\t\tnewLineBefore && this.log();\n\t\tthis.log(\n\t\t\tboxen(\n\t\t\t\ttypeof messages === \"string\" ? messages : messages.join(\"\\n\"),\n\t\t\t\tboxenOptions,\n\t\t\t),\n\t\t);\n\t\tnewLineAfter && this.log();\n\n\t\tthis.#showTimestamp = oldTimestamp;\n\t\tthis.#globalPrefix = oldPrefix;\n\t}\n}\n\n/* v8 ignore next 48 */\nexport class Spinner {\n\tspinner: Ora;\n\n\tconstructor(options?: OraOptions) {\n\t\tthis.spinner = ora({\n\t\t\t...options,\n\t\t\tisSilent: process.env.NODE_ENV === \"test\",\n\t\t});\n\t}\n\n\tset text(message: string) {\n\t\tthis.spinner.text = message;\n\t}\n\n\tstart(message?: string) {\n\t\tthis.spinner.start(message);\n\t}\n\n\tstop(message?: string, type?: string) {\n\t\tswitch (type) {\n\t\t\tcase Spinner.ERROR: {\n\t\t\t\tthis.spinner.fail(message);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Spinner.WARNING: {\n\t\t\t\tthis.spinner.warn(message);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Spinner.INFO: {\n\t\t\t\tthis.spinner.info(message);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.spinner.succeed(message);\n\t\t\t\t}, 1000);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic SUCCESS = \"success\";\n\tstatic ERROR = \"fail\";\n\tstatic WARNING = \"warn\";\n\tstatic INFO = \"info\";\n}\n"],"names":["util","boxen","kleur","ora","Logger","boring","silent","prefix","timestamp","inMemory","colors","compact","depth","flag","getMemoryLogs","join","clearMemoryLogs","type","arguments_","message","formatWithOptions","now","Date","push","grey","toDateString","toLocaleTimeString","console","method","color","info","blue","log","white","debug","warn","yellow","error","red","printErrorsAndExit","errorMessages","exitStatus","length","process","exit","printBox","messages","options","newLineAfter","newLineBefore","borderColor","boxenOptions","padding","textAlignment","oldPrefix","oldTimestamp","Spinner","spinner","isSilent","env","NODE_ENV","text","start","stop","ERROR","fail","WARNING","INFO","setTimeout","succeed","SUCCESS"],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@node-cli/logger",
3
- "version": "1.3.1",
3
+ "version": "1.3.2",
4
4
  "license": "MIT",
5
5
  "author": "Arno Versini",
6
6
  "description": "A tiny console logger for nodejs CLI apps",
7
7
  "type": "module",
8
8
  "exports": "./dist/Logger.js",
9
9
  "files": [
10
- "dist"
10
+ "dist",
11
+ "README.md"
11
12
  ],
12
13
  "node": ">=16",
13
14
  "dependencies": {
@@ -21,7 +22,9 @@
21
22
  "build:js": "swc --strip-leading-paths --source-maps --out-dir dist src",
22
23
  "build:types": "tsc",
23
24
  "clean": "rimraf dist types coverage",
25
+ "comments:fix": "comments --merge-line-comments 'src/**/*.ts'",
24
26
  "lint": "biome lint src",
27
+ "lint:fix": "biome check src --write --no-errors-on-unmatched",
25
28
  "test": "vitest run --globals",
26
29
  "test:coverage": "vitest run --coverage --globals",
27
30
  "test:watch": "vitest --globals",
@@ -31,8 +34,9 @@
31
34
  "access": "public"
32
35
  },
33
36
  "devDependencies": {
37
+ "@node-cli/comments": "0.2.0",
34
38
  "@vitest/coverage-v8": "3.2.4",
35
39
  "vitest": "3.2.4"
36
40
  },
37
- "gitHead": "2cef8f88aa5316a1789caad2bd7327ca908ccb9f"
41
+ "gitHead": "d90392dcb766dd605bc3eeabc7c7a7ab0c8e6da6"
38
42
  }