@node-cli/logger 1.2.5 → 1.3.0

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
@@ -4,18 +4,36 @@ export type PrintBoxOptions = {
4
4
  newLineAfter?: boolean;
5
5
  newLineBefore?: boolean;
6
6
  } & BoxenOptions;
7
+ export type LoggerOptions = {
8
+ boring?: boolean;
9
+ silent?: boolean;
10
+ prefix?: string;
11
+ timestamp?: boolean;
12
+ inMemory?: boolean;
13
+ };
7
14
  export declare class Logger {
8
15
  #private;
9
- constructor({ boring, silent, prefix, timestamp, }?: {
16
+ constructor({ boring, silent, prefix, timestamp, inMemory, }?: {
10
17
  boring?: boolean;
11
18
  silent?: boolean;
12
19
  prefix?: string;
13
20
  timestamp?: boolean;
21
+ inMemory?: boolean;
14
22
  });
15
23
  set silent(flag: boolean);
16
24
  set boring(flag: boolean);
17
25
  set prefix(prefix: string);
18
26
  set timestamp(flag: boolean);
27
+ set inMemory(flag: boolean);
28
+ /**
29
+ * Get the accumulated logs as a string
30
+ * @returns {string} All logs joined by the separator
31
+ */
32
+ getMemoryLogs(): string;
33
+ /**
34
+ * Clear all accumulated logs from memory
35
+ */
36
+ clearMemoryLogs(): void;
19
37
  info(...arguments_: any): void;
20
38
  log(...arguments_: any): void;
21
39
  debug(...arguments_: any): void;
package/dist/Logger.js CHANGED
@@ -7,12 +7,17 @@ export class Logger {
7
7
  #globalPrefix;
8
8
  #showTimestamp;
9
9
  #printOptions;
10
- constructor({ boring = false, silent = false, prefix = "", timestamp = false } = {}){
10
+ #inMemory;
11
+ #memoryLogs;
12
+ constructor({ boring = false, silent = false, prefix = "", timestamp = false, inMemory = false } = {}){
11
13
  this.#shouldLog = !silent;
12
14
  this.#globalPrefix = prefix;
13
15
  this.#showTimestamp = timestamp;
16
+ this.#inMemory = inMemory;
17
+ this.#memoryLogs = [];
18
+ // When in memory mode, we disable colors
14
19
  this.#printOptions = {
15
- colors: !boring,
20
+ colors: !boring && !inMemory,
16
21
  compact: false,
17
22
  depth: 5
18
23
  };
@@ -21,7 +26,10 @@ export class Logger {
21
26
  this.#shouldLog = !flag;
22
27
  }
23
28
  set boring(flag) {
24
- this.#printOptions.colors = !flag;
29
+ // Only set colors if not in memory mode
30
+ if (!this.#inMemory) {
31
+ this.#printOptions.colors = !flag;
32
+ }
25
33
  }
26
34
  set prefix(prefix) {
27
35
  this.#globalPrefix = prefix;
@@ -29,6 +37,24 @@ export class Logger {
29
37
  set timestamp(flag) {
30
38
  this.#showTimestamp = flag;
31
39
  }
40
+ set inMemory(flag) {
41
+ this.#inMemory = flag;
42
+ // When enabling in-memory mode, disable colors
43
+ if (flag) {
44
+ this.#printOptions.colors = false;
45
+ }
46
+ }
47
+ /**
48
+ * Get the accumulated logs as a string
49
+ * @returns {string} All logs joined by the separator
50
+ */ getMemoryLogs() {
51
+ return this.#memoryLogs.join("\n");
52
+ }
53
+ /**
54
+ * Clear all accumulated logs from memory
55
+ */ clearMemoryLogs() {
56
+ this.#memoryLogs = [];
57
+ }
32
58
  #_log(type, ...arguments_) {
33
59
  if (this.#shouldLog) {
34
60
  let message;
@@ -44,8 +70,14 @@ export class Logger {
44
70
  }
45
71
  message = util.formatWithOptions(this.#printOptions, prefix.join(" "), ...arguments_);
46
72
  }
47
- // eslint-disable-next-line no-console
48
- console[type.method](this.#printOptions.colors ? `${type.color(message)}` : message);
73
+ // Store in memory if enabled
74
+ if (this.#inMemory) {
75
+ this.#memoryLogs.push(message);
76
+ }
77
+ // Still output to console if not in memory-only mode
78
+ if (!this.#inMemory) {
79
+ console[type.method](this.#printOptions.colors ? `${type.color(message)}` : message);
80
+ }
49
81
  }
50
82
  }
51
83
  info(...arguments_) {
@@ -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 class Logger {\n\t#shouldLog: boolean;\n\t#globalPrefix: string;\n\t#showTimestamp: boolean;\n\t#printOptions: { colors: boolean; compact: boolean; depth: number };\n\n\tconstructor({\n\t\tboring = false,\n\t\tsilent = false,\n\t\tprefix = \"\",\n\t\ttimestamp = false,\n\t} = {}) {\n\t\tthis.#shouldLog = !silent;\n\t\tthis.#globalPrefix = prefix;\n\t\tthis.#showTimestamp = timestamp;\n\t\tthis.#printOptions = {\n\t\t\tcolors: !boring,\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\tthis.#printOptions.colors = !flag;\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\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\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole[type.method](\n\t\t\t\tthis.#printOptions.colors ? `${type.color(message)}` : message,\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/* istanbul ignore next */\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","shouldLog","globalPrefix","showTimestamp","printOptions","constructor","boring","silent","prefix","timestamp","colors","compact","depth","flag","_log","type","arguments_","message","formatWithOptions","now","Date","push","grey","toDateString","toLocaleTimeString","join","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"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
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/* istanbul ignore next */\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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@node-cli/logger",
3
- "version": "1.2.5",
3
+ "version": "1.3.0",
4
4
  "license": "MIT",
5
5
  "author": "Arno Versini",
6
6
  "description": "A tiny console logger for nodejs CLI apps",
@@ -11,9 +11,9 @@
11
11
  ],
12
12
  "node": ">=16",
13
13
  "dependencies": {
14
- "boxen": "7.1.1",
14
+ "boxen": "8.0.1",
15
15
  "kleur": "4.1.5",
16
- "ora": "8.0.1"
16
+ "ora": "8.2.0"
17
17
  },
18
18
  "scripts": {
19
19
  "build": "npm-run-all --serial clean build:types build:js build:barrel",
@@ -24,10 +24,11 @@
24
24
  "lint": "biome lint src",
25
25
  "test": "cross-env-shell NODE_OPTIONS=--experimental-vm-modules jest",
26
26
  "test:coverage": "npm run test -- --coverage",
27
+ "test:watch": "npm run test -- --watch",
27
28
  "watch": "swc --strip-leading-paths --watch --out-dir dist src"
28
29
  },
29
30
  "publishConfig": {
30
31
  "access": "public"
31
32
  },
32
- "gitHead": "d7d79f8f71fb3225e5a214aba3a42a89470d8340"
33
+ "gitHead": "92d48ec7a2e19ad36b077d9e219d91f782dd4a0a"
33
34
  }