@node-cli/logger
Advanced tools
+5
-4
@@ -29,3 +29,3 @@ import { Options as BoxenOptions } from "boxen"; | ||
| /** | ||
| * Get the accumulated logs as a string | ||
| * Get the accumulated logs as a string. | ||
| * @returns {string} All logs joined by the separator | ||
@@ -35,3 +35,3 @@ */ | ||
| /** | ||
| * Clear all accumulated logs from memory | ||
| * Clear all accumulated logs from memory. | ||
| */ | ||
@@ -45,3 +45,4 @@ clearMemoryLogs(): void; | ||
| /** | ||
| * Log multiple error messages at the prompt using `console.error` behind the scenes. | ||
| * Log multiple error messages at the prompt using `console.error` behind the | ||
| * scenes. | ||
| * @param {string[]} errorMessages array of error message to display line by line | ||
@@ -52,3 +53,3 @@ * @param {number} [exitStatus] the process will exit with this value if provided | ||
| /** | ||
| * Print sets of logs in a box (wrapper to Boxen) | ||
| * Print sets of logs in a box (wrapper to Boxen). | ||
| * @param messages Messages to print | ||
@@ -55,0 +56,0 @@ * @param options |
+13
-13
@@ -0,5 +1,5 @@ | ||
| import util from "node:util"; | ||
| import boxen from "boxen"; | ||
| import kleur from "kleur"; | ||
| import ora from "ora"; | ||
| import util from "node:util"; | ||
| import kleur from "kleur"; | ||
| export class Logger { | ||
@@ -18,3 +18,3 @@ #shouldLog; | ||
| this.#memoryLogs = []; | ||
| // When in memory mode, we disable colors | ||
| // When in memory mode, we disable colors. | ||
| this.#printOptions = { | ||
@@ -30,3 +30,3 @@ colors: !boring && !inMemory, | ||
| set boring(flag) { | ||
| // Only set colors if not in memory mode | ||
| // Only set colors if not in memory mode. | ||
| if (!this.#inMemory) { | ||
@@ -44,3 +44,3 @@ this.#printOptions.colors = !flag; | ||
| this.#inMemory = flag; | ||
| // When enabling in-memory mode, disable colors | ||
| // When enabling in-memory mode, disable colors. | ||
| if (flag) { | ||
@@ -51,3 +51,3 @@ this.#printOptions.colors = false; | ||
| /** | ||
| * Get the accumulated logs as a string | ||
| * Get the accumulated logs as a string. | ||
| * @returns {string} All logs joined by the separator | ||
@@ -58,3 +58,3 @@ */ getMemoryLogs() { | ||
| /** | ||
| * Clear all accumulated logs from memory | ||
| * Clear all accumulated logs from memory. | ||
| */ clearMemoryLogs() { | ||
@@ -78,7 +78,7 @@ this.#memoryLogs = []; | ||
| } | ||
| // Store in memory if enabled | ||
| // Store in memory if enabled. | ||
| if (this.#inMemory) { | ||
| this.#memoryLogs.push(message); | ||
| } | ||
| // Still output to console if not in memory-only mode | ||
| // Still output to console if not in memory-only mode. | ||
| if (!this.#inMemory) { | ||
@@ -120,3 +120,4 @@ console[type.method](this.#printOptions.colors ? `${type.color(message)}` : message); | ||
| /** | ||
| * Log multiple error messages at the prompt using `console.error` behind the scenes. | ||
| * Log multiple error messages at the prompt using `console.error` behind the | ||
| * scenes. | ||
| * @param {string[]} errorMessages array of error message to display line by line | ||
@@ -138,3 +139,3 @@ * @param {number} [exitStatus] the process will exit with this value if provided | ||
| /** | ||
| * Print sets of logs in a box (wrapper to Boxen) | ||
| * Print sets of logs in a box (wrapper to Boxen). | ||
| * @param messages Messages to print | ||
@@ -149,4 +150,3 @@ * @param options | ||
| /** | ||
| * Setting some sensible Boxen options if | ||
| * not provided by the user. | ||
| * Setting some sensible Boxen options if not provided by the user. | ||
| */ const borderColor = options.borderColor || "yellow"; | ||
@@ -153,0 +153,0 @@ const boxenOptions = { |
@@ -1,1 +0,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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"} | ||
| {"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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"} |
+7
-3
| { | ||
| "name": "@node-cli/logger", | ||
| "version": "1.3.1", | ||
| "version": "1.3.2", | ||
| "license": "MIT", | ||
@@ -10,3 +10,4 @@ "author": "Arno Versini", | ||
| "files": [ | ||
| "dist" | ||
| "dist", | ||
| "README.md" | ||
| ], | ||
@@ -25,3 +26,5 @@ "node": ">=16", | ||
| "clean": "rimraf dist types coverage", | ||
| "comments:fix": "comments --merge-line-comments 'src/**/*.ts'", | ||
| "lint": "biome lint src", | ||
| "lint:fix": "biome check src --write --no-errors-on-unmatched", | ||
| "test": "vitest run --globals", | ||
@@ -36,6 +39,7 @@ "test:coverage": "vitest run --coverage --globals", | ||
| "devDependencies": { | ||
| "@node-cli/comments": "0.2.0", | ||
| "@vitest/coverage-v8": "3.2.4", | ||
| "vitest": "3.2.4" | ||
| }, | ||
| "gitHead": "2cef8f88aa5316a1789caad2bd7327ca908ccb9f" | ||
| "gitHead": "d90392dcb766dd605bc3eeabc7c7a7ab0c8e6da6" | ||
| } |
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
35723
0.51%275
0.36%3
50%