@visulima/pail 1.0.0 → 1.1.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.
Files changed (105) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +3 -3
  3. package/dist/{abstract-pretty-reporter-doXJ0wsq.d.ts → abstract-pretty-reporter--LLgYlnT.d.cts} +1 -2
  4. package/dist/{abstract-pretty-reporter-dDQbeuZX.d.cts → abstract-pretty-reporter-OoXjZn2H.d.ts} +1 -2
  5. package/dist/chunk-2SZMC2SJ.cjs +13 -0
  6. package/dist/chunk-2SZMC2SJ.cjs.map +1 -0
  7. package/dist/chunk-576JQ6DN.js +9 -0
  8. package/dist/chunk-576JQ6DN.js.map +1 -0
  9. package/dist/chunk-5MNFJRLM.cjs +10 -0
  10. package/dist/chunk-5MNFJRLM.cjs.map +1 -0
  11. package/dist/{chunk-4RK45K5E.cjs → chunk-AFMDCM5W.js} +2 -4
  12. package/dist/chunk-AFMDCM5W.js.map +1 -0
  13. package/dist/chunk-ETY4VGL2.js +21 -0
  14. package/dist/chunk-ETY4VGL2.js.map +1 -0
  15. package/dist/chunk-F4FJCQ4L.cjs +9 -0
  16. package/dist/chunk-F4FJCQ4L.cjs.map +1 -0
  17. package/dist/chunk-KERJDMYV.js +8 -0
  18. package/dist/chunk-KERJDMYV.js.map +1 -0
  19. package/dist/{chunk-PVAYQO5O.js → chunk-N2UPJYJR.cjs} +4 -2
  20. package/dist/chunk-N2UPJYJR.cjs.map +1 -0
  21. package/dist/{chunk-EBP7SMYV.js → chunk-NF47XQ47.js} +3 -3
  22. package/dist/{chunk-EBP7SMYV.js.map → chunk-NF47XQ47.js.map} +1 -1
  23. package/dist/chunk-O34IIMWQ.cjs +31 -0
  24. package/dist/chunk-O34IIMWQ.cjs.map +1 -0
  25. package/dist/{chunk-MU2CRXVO.cjs → chunk-QINSQ6TU.cjs} +1 -1
  26. package/dist/{chunk-MU2CRXVO.cjs.map → chunk-QINSQ6TU.cjs.map} +1 -1
  27. package/dist/chunk-SR3Q3EUO.js +7 -0
  28. package/dist/chunk-SR3Q3EUO.js.map +1 -0
  29. package/dist/chunk-TAH23BHM.js +5 -0
  30. package/dist/chunk-TAH23BHM.js.map +1 -0
  31. package/dist/chunk-YP3U3DTV.cjs +10 -0
  32. package/dist/chunk-YP3U3DTV.cjs.map +1 -0
  33. package/dist/chunk-ZB7IIFHO.js +7 -0
  34. package/dist/chunk-ZB7IIFHO.js.map +1 -0
  35. package/dist/chunk-ZJMTPHZR.cjs +7 -0
  36. package/dist/chunk-ZJMTPHZR.cjs.map +1 -0
  37. package/dist/index.browser.cjs +7 -8
  38. package/dist/index.browser.cjs.map +1 -1
  39. package/dist/index.browser.d.cts +3 -4
  40. package/dist/index.browser.d.ts +3 -4
  41. package/dist/index.browser.js +6 -7
  42. package/dist/index.browser.js.map +1 -1
  43. package/dist/index.server.cjs +16 -17
  44. package/dist/index.server.cjs.map +1 -1
  45. package/dist/index.server.d.cts +3 -4
  46. package/dist/index.server.d.ts +3 -4
  47. package/dist/index.server.js +13 -14
  48. package/dist/index.server.js.map +1 -1
  49. package/dist/{pail.browser-DH-2bBhK.d.ts → pail.browser-8eK5giTJ.d.ts} +1 -2
  50. package/dist/{pail.browser-eQgV1vak.d.cts → pail.browser-yTupUnZE.d.cts} +1 -2
  51. package/dist/processor.browser.cjs +2 -3
  52. package/dist/processor.browser.d.cts +1 -2
  53. package/dist/processor.browser.d.ts +1 -2
  54. package/dist/processor.browser.js +1 -2
  55. package/dist/processor.server.cjs +2 -3
  56. package/dist/processor.server.cjs.map +1 -1
  57. package/dist/processor.server.d.cts +1 -2
  58. package/dist/processor.server.d.ts +1 -2
  59. package/dist/processor.server.js +1 -2
  60. package/dist/processor.server.js.map +1 -1
  61. package/dist/reporter.browser.cjs +7 -8
  62. package/dist/reporter.browser.cjs.map +1 -1
  63. package/dist/reporter.browser.d.cts +2 -3
  64. package/dist/reporter.browser.d.ts +2 -3
  65. package/dist/reporter.browser.js +5 -6
  66. package/dist/reporter.browser.js.map +1 -1
  67. package/dist/reporter.server.cjs +13 -14
  68. package/dist/reporter.server.cjs.map +1 -1
  69. package/dist/reporter.server.d.cts +2 -3
  70. package/dist/reporter.server.d.ts +2 -3
  71. package/dist/reporter.server.js +10 -11
  72. package/dist/reporter.server.js.map +1 -1
  73. package/dist/{types.d-RNxsa9NR.d.cts → types-Eye5gXn9.d.cts} +8 -49
  74. package/dist/{types.d-RNxsa9NR.d.ts → types-Eye5gXn9.d.ts} +8 -49
  75. package/package.json +4 -5
  76. package/dist/chunk-32FAOPTJ.cjs +0 -10
  77. package/dist/chunk-32FAOPTJ.cjs.map +0 -1
  78. package/dist/chunk-46NTLZF7.cjs +0 -10
  79. package/dist/chunk-46NTLZF7.cjs.map +0 -1
  80. package/dist/chunk-4RK45K5E.cjs.map +0 -1
  81. package/dist/chunk-57OYT2NC.js +0 -7
  82. package/dist/chunk-57OYT2NC.js.map +0 -1
  83. package/dist/chunk-6ATEEAVC.cjs +0 -9
  84. package/dist/chunk-6ATEEAVC.cjs.map +0 -1
  85. package/dist/chunk-7OFJLC7L.cjs +0 -7
  86. package/dist/chunk-7OFJLC7L.cjs.map +0 -1
  87. package/dist/chunk-FJCEDFRI.js +0 -9
  88. package/dist/chunk-FJCEDFRI.js.map +0 -1
  89. package/dist/chunk-G62M5WJH.js +0 -8
  90. package/dist/chunk-G62M5WJH.js.map +0 -1
  91. package/dist/chunk-GZRIZCRG.cjs +0 -32
  92. package/dist/chunk-GZRIZCRG.cjs.map +0 -1
  93. package/dist/chunk-HKIS52YX.js +0 -22
  94. package/dist/chunk-HKIS52YX.js.map +0 -1
  95. package/dist/chunk-ICPHL4AR.js +0 -8
  96. package/dist/chunk-ICPHL4AR.js.map +0 -1
  97. package/dist/chunk-IQF3SXQR.cjs +0 -10
  98. package/dist/chunk-IQF3SXQR.cjs.map +0 -1
  99. package/dist/chunk-JYHWIRFR.js +0 -5
  100. package/dist/chunk-JYHWIRFR.js.map +0 -1
  101. package/dist/chunk-PVAYQO5O.js.map +0 -1
  102. package/dist/chunk-Y36365SA.cjs +0 -13
  103. package/dist/chunk-Y36365SA.cjs.map +0 -1
  104. package/dist/chunk-YKHMQW6V.js +0 -5
  105. package/dist/chunk-YKHMQW6V.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/util/rotating-file-stream.ts","../src/util/safe-stream-handler.ts","../src/reporter/file/abstract-file-reporter.ts","../src/reporter/file/json-file-reporter.ts","../src/reporter/json/json.server.ts"],"names":["createRfsStream","SafeStreamHandler","stream","name","message","arguments_","error","RotatingFileStream","filePath","writeImmediately","options","fileStream","AbstractFileReporter","rfsOptions","meta","_stringify","JsonFileReporter","__privateAdd","function_","__privateSet","type","rest","__privateGet","process","_stdout","_stderr","JsonReporter","AbstractJsonReporter","stdout","stderr","logLevel","writeStream"],"mappings":"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","sourcesContent":["import type { Writable } from \"node:stream\";\n\nimport type { Options as RfsOptions } from \"rotating-file-stream\";\nimport { createStream as createRfsStream } from \"rotating-file-stream\";\n\nimport { SafeStreamHandler } from \"./safe-stream-handler\";\n\n/**\n * A wrapper for the `rfs` module that will optionally write to disk immediately\n * by creating and closing a new stream on each write.\n */\nexport class RotatingFileStream {\n private readonly _filePath: string;\n\n private readonly _immediate: boolean;\n\n private readonly _stream: Writable | undefined;\n\n private readonly _options: RfsOptions;\n\n public constructor(filePath: string, writeImmediately = false, options: RfsOptions = {}) {\n this._filePath = filePath;\n this._immediate = writeImmediately;\n this._options = options;\n\n if (!this._immediate) {\n this._stream = createRfsStream(this._filePath, options);\n }\n }\n\n /**\n * Writes `message` to the instance's internal _stream\n * @param message Message to write\n */\n public write(message: string): void {\n let fileStream = this._stream;\n\n if (this._immediate) {\n fileStream = createRfsStream(this._filePath, this._options);\n }\n\n const stream = new SafeStreamHandler(fileStream as Writable, this._filePath);\n\n stream.write(message);\n\n if (this._immediate) {\n stream.end();\n }\n }\n\n /**\n * Ends the instance's internal _stream\n *\n * When `immediate` is not `true`, a call to `write` after calling this method\n * will throw an error.\n */\n public end(): void {\n if (this._stream !== undefined) {\n this._stream.end();\n }\n }\n}\n","import type { Writable } from \"node:stream\";\n\n/**\n * A handler for writable streams that only writes if the stream has finished\n * processing or draining\n */\nexport class SafeStreamHandler {\n public _ready = true;\n\n protected _stream: Writable;\n\n protected _name: string;\n\n public constructor(stream: Writable, name: string) {\n this._stream = stream;\n this._name = name;\n }\n\n /**\n * Writes `message` to the instance's internal stream\n * @param message Message to write\n */\n public write(message: string): void {\n this.writeStream(message);\n }\n\n /**\n * Calls `end` on this instance's internal stream\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public end(...arguments_: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n this._stream.end(...arguments_);\n }\n\n protected writeStream(message: string): void {\n if (!this._ready) {\n // eslint-disable-next-line no-console\n console.warn(\"Stream busy: \" + this._name + '. Write will be dropped: \"' + message + '\"');\n return;\n }\n this._ready = false;\n\n this._stream.on(\"error\", (error) => {\n throw error;\n });\n this._stream.on(\"drain\", () => {\n this._ready = true;\n });\n this._stream.on(\"finish\", () => {\n this._ready = true;\n });\n this._ready = this._stream.write(message, () => {});\n }\n}\n","import type { Options as RfsOptions } from \"rotating-file-stream\";\n\nimport type { ReadonlyMeta, Reporter } from \"../../types\";\nimport { RotatingFileStream } from \"../../util/rotating-file-stream\";\n\nexport type Options = RfsOptions & {\n filePath: string;\n writeImmediately?: boolean;\n};\n\nexport abstract class AbstractFileReporter<L extends string = never> implements Reporter<L> {\n protected _stream: RotatingFileStream;\n\n protected constructor(options: Options) {\n const { filePath, writeImmediately = false, ...rfsOptions } = options;\n\n this._stream = new RotatingFileStream(filePath, writeImmediately, rfsOptions);\n }\n\n public log(meta: ReadonlyMeta<L>): void {\n this._stream.write(this._formatMessage(meta as ReadonlyMeta<L>) + \"\\n\");\n }\n\n protected abstract _formatMessage(data: ReadonlyMeta<L>): string;\n}\n","import type { stringify } from \"safe-stable-stringify\";\n\nimport type { Meta } from \"../../types\";\nimport type { Options as FileReporterOptions } from \"./abstract-file-reporter\";\nimport { AbstractFileReporter } from \"./abstract-file-reporter\";\n\nexport class JsonFileReporter<L extends string = never> extends AbstractFileReporter<L> {\n #stringify: typeof stringify | undefined;\n\n public constructor(options: FileReporterOptions) {\n super({\n compress: \"gzip\", // compress rotated files\n interval: \"1d\", // rotate daily\n size: \"10M\", // rotate every 10 MegaBytes written\n ...options,\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n public setStringify(function_: any): void {\n this.#stringify = function_;\n }\n\n protected _formatMessage(meta: Meta<L>): string {\n const { type, ...rest } = meta;\n\n if (rest.label) {\n rest.label = rest.label.trim();\n }\n\n if (rest.file) {\n // This is a hack to make the file property a string\n (rest as unknown as Omit<Meta<L>, \"file\"> & { file: string }).file =\n rest.file.name + \":\" + rest.file.line + (rest.file.column ? \":\" + rest.file.column : \"\");\n }\n\n return (this.#stringify as typeof stringify)(rest) as string;\n }\n}\n","import process from \"node:process\";\n\nimport type { LiteralUnion } from \"type-fest\";\n\nimport type { ExtendedRfc5424LogLevels, StreamAwareReporter } from \"../../types\";\nimport { writeStream } from \"../../util/write-stream\";\nimport { AbstractJsonReporter } from \"./abstract-json-reporter\";\n\nexport class JsonReporter<L extends string = never> extends AbstractJsonReporter<L> implements StreamAwareReporter<L> {\n #stdout: NodeJS.WriteStream;\n\n #stderr: NodeJS.WriteStream;\n\n public constructor() {\n super();\n\n this.#stdout = process.stdout;\n this.#stderr = process.stderr;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n public setStdout(stdout: NodeJS.WriteStream) {\n this.#stdout = stdout;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n public setStderr(stderr: NodeJS.WriteStream) {\n this.#stderr = stderr;\n }\n\n protected override _log(message: string, logLevel: LiteralUnion<ExtendedRfc5424LogLevels, L>): void {\n const stream = [\"error\", \"warn\"].includes(logLevel as string) ? this.#stderr : this.#stdout;\n\n writeStream(message + \"\\n\", stream);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/util/rotating-file-stream.ts","../src/util/safe-stream-handler.ts","../src/reporter/file/abstract-file-reporter.ts","../src/reporter/file/json-file-reporter.ts","../src/reporter/json/json.server.ts"],"names":["createRfsStream","SafeStreamHandler","stream","name","message","arguments_","error","RotatingFileStream","filePath","writeImmediately","options","fileStream","AbstractFileReporter","rfsOptions","meta","JsonFileReporter","#stringify","function_","type","rest","process","JsonReporter","AbstractJsonReporter","#stdout","#stderr","stdout","stderr","logLevel","writeStream"],"mappings":"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","sourcesContent":["import type { Writable } from \"node:stream\";\n\nimport type { Options as RfsOptions } from \"rotating-file-stream\";\nimport { createStream as createRfsStream } from \"rotating-file-stream\";\n\nimport { SafeStreamHandler } from \"./safe-stream-handler\";\n\n/**\n * A wrapper for the `rfs` module that will optionally write to disk immediately\n * by creating and closing a new stream on each write.\n */\nexport class RotatingFileStream {\n private readonly _filePath: string;\n\n private readonly _immediate: boolean;\n\n private readonly _stream: Writable | undefined;\n\n private readonly _options: RfsOptions;\n\n public constructor(filePath: string, writeImmediately = false, options: RfsOptions = {}) {\n this._filePath = filePath;\n this._immediate = writeImmediately;\n this._options = options;\n\n if (!this._immediate) {\n this._stream = createRfsStream(this._filePath, options);\n }\n }\n\n /**\n * Writes `message` to the instance's internal _stream\n * @param message Message to write\n */\n public write(message: string): void {\n let fileStream = this._stream;\n\n if (this._immediate) {\n fileStream = createRfsStream(this._filePath, this._options);\n }\n\n const stream = new SafeStreamHandler(fileStream as Writable, this._filePath);\n\n stream.write(message);\n\n if (this._immediate) {\n stream.end();\n }\n }\n\n /**\n * Ends the instance's internal _stream\n *\n * When `immediate` is not `true`, a call to `write` after calling this method\n * will throw an error.\n */\n public end(): void {\n if (this._stream !== undefined) {\n this._stream.end();\n }\n }\n}\n","import type { Writable } from \"node:stream\";\n\n/**\n * A handler for writable streams that only writes if the stream has finished\n * processing or draining\n */\nexport class SafeStreamHandler {\n public _ready = true;\n\n protected _stream: Writable;\n\n protected _name: string;\n\n public constructor(stream: Writable, name: string) {\n this._stream = stream;\n this._name = name;\n }\n\n /**\n * Writes `message` to the instance's internal stream\n * @param message Message to write\n */\n public write(message: string): void {\n this.writeStream(message);\n }\n\n /**\n * Calls `end` on this instance's internal stream\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public end(...arguments_: any[]): void {\n this._stream.end(...arguments_);\n }\n\n protected writeStream(message: string): void {\n if (!this._ready) {\n // eslint-disable-next-line no-console\n console.warn(\"Stream busy: \" + this._name + '. Write will be dropped: \"' + message + '\"');\n return;\n }\n this._ready = false;\n\n this._stream.on(\"error\", (error) => {\n throw error;\n });\n this._stream.on(\"drain\", () => {\n this._ready = true;\n });\n this._stream.on(\"finish\", () => {\n this._ready = true;\n });\n this._ready = this._stream.write(message, () => {});\n }\n}\n","import type { Options as RfsOptions } from \"rotating-file-stream\";\n\nimport type { ReadonlyMeta, Reporter } from \"../../types\";\nimport { RotatingFileStream } from \"../../util/rotating-file-stream\";\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport type Options = RfsOptions & {\n filePath: string;\n writeImmediately?: boolean;\n};\n\nexport abstract class AbstractFileReporter<L extends string = never> implements Reporter<L> {\n protected _stream: RotatingFileStream;\n\n protected constructor(options: Options) {\n const { filePath, writeImmediately = false, ...rfsOptions } = options;\n\n this._stream = new RotatingFileStream(filePath, writeImmediately, rfsOptions);\n }\n\n public log(meta: ReadonlyMeta<L>): void {\n this._stream.write(this._formatMessage(meta as ReadonlyMeta<L>) + \"\\n\");\n }\n\n protected abstract _formatMessage(data: ReadonlyMeta<L>): string;\n}\n","import type { stringify } from \"safe-stable-stringify\";\n\nimport type { Meta } from \"../../types\";\nimport type { Options as FileReporterOptions } from \"./abstract-file-reporter\";\nimport { AbstractFileReporter } from \"./abstract-file-reporter\";\n\nexport class JsonFileReporter<L extends string = never> extends AbstractFileReporter<L> {\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n #stringify: typeof stringify | undefined;\n\n public constructor(options: FileReporterOptions) {\n super({\n compress: \"gzip\", // compress rotated files\n interval: \"1d\", // rotate daily\n size: \"10M\", // rotate every 10 MegaBytes written\n ...options,\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n public setStringify(function_: any): void {\n this.#stringify = function_;\n }\n\n protected _formatMessage(meta: Meta<L>): string {\n const { type, ...rest } = meta;\n\n if (rest.label) {\n rest.label = rest.label.trim();\n }\n\n if (rest.file) {\n // This is a hack to make the file property a string\n (rest as unknown as Omit<Meta<L>, \"file\"> & { file: string }).file =\n rest.file.name + \":\" + rest.file.line + (rest.file.column ? \":\" + rest.file.column : \"\");\n }\n\n return (this.#stringify as typeof stringify)(rest) as string;\n }\n}\n","import process from \"node:process\";\n\nimport type { ExtendedRfc5424LogLevels, LiteralUnion, StreamAwareReporter } from \"../../types\";\nimport { writeStream } from \"../../util/write-stream\";\nimport { AbstractJsonReporter } from \"./abstract-json-reporter\";\n\nexport class JsonReporter<L extends string = never> extends AbstractJsonReporter<L> implements StreamAwareReporter<L> {\n #stdout: NodeJS.WriteStream;\n\n #stderr: NodeJS.WriteStream;\n\n public constructor() {\n super();\n\n this.#stdout = process.stdout;\n this.#stderr = process.stderr;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n public setStdout(stdout: NodeJS.WriteStream) {\n this.#stdout = stdout;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n public setStderr(stderr: NodeJS.WriteStream) {\n this.#stderr = stderr;\n }\n\n protected override _log(message: string, logLevel: LiteralUnion<ExtendedRfc5424LogLevels, L>): void {\n const stream = [\"error\", \"warn\"].includes(logLevel as string) ? this.#stderr : this.#stdout;\n\n writeStream(message + \"\\n\", stream);\n }\n}\n"]}
@@ -1,7 +1,6 @@
1
1
  import { Options as Options$1 } from 'rotating-file-stream';
2
- import { R as Reporter, f as ReadonlyMeta, M as Meta, S as StreamAwareReporter, E as ExtendedRfc5424LogLevels, h as InteractiveStreamReporter, I as InteractiveManager } from './types.d-RNxsa9NR.cjs';
3
- import { LiteralUnion } from 'type-fest';
4
- import { A as AbstractJsonReporter, a as AbstractPrettyReporter, P as PrettyStyleOptions } from './abstract-pretty-reporter-dDQbeuZX.cjs';
2
+ import { R as Reporter, g as ReadonlyMeta, M as Meta, S as StreamAwareReporter, e as LiteralUnion, E as ExtendedRfc5424LogLevels, i as InteractiveStreamReporter, I as InteractiveManager } from './types-Eye5gXn9.cjs';
3
+ import { A as AbstractJsonReporter, a as AbstractPrettyReporter, P as PrettyStyleOptions } from './abstract-pretty-reporter--LLgYlnT.cjs';
5
4
  import '@visulima/colorize';
6
5
  import 'safe-stable-stringify';
7
6
 
@@ -1,7 +1,6 @@
1
1
  import { Options as Options$1 } from 'rotating-file-stream';
2
- import { R as Reporter, f as ReadonlyMeta, M as Meta, S as StreamAwareReporter, E as ExtendedRfc5424LogLevels, h as InteractiveStreamReporter, I as InteractiveManager } from './types.d-RNxsa9NR.js';
3
- import { LiteralUnion } from 'type-fest';
4
- import { A as AbstractJsonReporter, a as AbstractPrettyReporter, P as PrettyStyleOptions } from './abstract-pretty-reporter-doXJ0wsq.js';
2
+ import { R as Reporter, g as ReadonlyMeta, M as Meta, S as StreamAwareReporter, e as LiteralUnion, E as ExtendedRfc5424LogLevels, i as InteractiveStreamReporter, I as InteractiveManager } from './types-Eye5gXn9.js';
3
+ import { A as AbstractJsonReporter, a as AbstractPrettyReporter, P as PrettyStyleOptions } from './abstract-pretty-reporter-OoXjZn2H.js';
5
4
  import '@visulima/colorize';
6
5
  import 'safe-stable-stringify';
7
6
 
@@ -1,16 +1,15 @@
1
- import { a as a$3 } from './chunk-HKIS52YX.js';
2
- export { b as PrettyReporter } from './chunk-HKIS52YX.js';
3
- import { a as a$2 } from './chunk-JYHWIRFR.js';
4
- import './chunk-57OYT2NC.js';
5
- import './chunk-EBP7SMYV.js';
6
- import { b, c, a as a$1 } from './chunk-YKHMQW6V.js';
1
+ import { a as a$1 } from './chunk-ETY4VGL2.js';
2
+ export { b as PrettyReporter } from './chunk-ETY4VGL2.js';
3
+ import { a } from './chunk-TAH23BHM.js';
4
+ import './chunk-ZB7IIFHO.js';
5
+ import './chunk-NF47XQ47.js';
7
6
  import { createStream } from 'rotating-file-stream';
8
- import S from 'process';
7
+ import h from 'process';
9
8
 
10
- var h=class{constructor(e,t){this._ready=!0;this._stream=e,this._name=t;}write(e){this.writeStream(e);}end(...e){this._stream.end(...e);}writeStream(e){if(!this._ready){console.warn("Stream busy: "+this._name+'. Write will be dropped: "'+e+'"');return}this._ready=!1,this._stream.on("error",t=>{throw t}),this._stream.on("drain",()=>{this._ready=!0;}),this._stream.on("finish",()=>{this._ready=!0;}),this._ready=this._stream.write(e,()=>{});}};var y=class{constructor(e,t=!1,i={}){this._filePath=e,this._immediate=t,this._options=i,this._immediate||(this._stream=createStream(this._filePath,i));}write(e){let t=this._stream;this._immediate&&(t=createStream(this._filePath,this._options));let i=new h(t,this._filePath);i.write(e),this._immediate&&i.end();}end(){this._stream!==void 0&&this._stream.end();}};var f=class{constructor(e){let{filePath:t,writeImmediately:i=!1,...r}=e;this._stream=new y(t,i,r);}log(e){this._stream.write(this._formatMessage(e)+`
11
- `);}};var d,_=class extends f{constructor(t){super({compress:"gzip",interval:"1d",size:"10M",...t});b(this,d,void 0);}setStringify(t){c(this,d,t);}_formatMessage(t){let{type:i,...r}=t;return r.label&&(r.label=r.label.trim()),r.file&&(r.file=r.file.name+":"+r.file.line+(r.file.column?":"+r.file.column:"")),a$1(this,d).call(this,r)}};d=new WeakMap;var o,a,u=class extends a$2{constructor(){super();b(this,o,void 0);b(this,a,void 0);c(this,o,S.stdout),c(this,a,S.stderr);}setStdout(t){c(this,o,t);}setStderr(t){c(this,a,t);}_log(t,i){let r=["error","warn"].includes(i)?a$1(this,a):a$1(this,o);a$3(t+`
12
- `,r);}};o=new WeakMap,a=new WeakMap;
9
+ var n=class{_ready=!0;_stream;_name;constructor(t,r){this._stream=t,this._name=r;}write(t){this.writeStream(t);}end(...t){this._stream.end(...t);}writeStream(t){if(!this._ready){console.warn("Stream busy: "+this._name+'. Write will be dropped: "'+t+'"');return}this._ready=!1,this._stream.on("error",r=>{throw r}),this._stream.on("drain",()=>{this._ready=!0;}),this._stream.on("finish",()=>{this._ready=!0;}),this._ready=this._stream.write(t,()=>{});}};var p=class{_filePath;_immediate;_stream;_options;constructor(t,r=!1,e={}){this._filePath=t,this._immediate=r,this._options=e,this._immediate||(this._stream=createStream(this._filePath,e));}write(t){let r=this._stream;this._immediate&&(r=createStream(this._filePath,this._options));let e=new n(r,this._filePath);e.write(t),this._immediate&&e.end();}end(){this._stream!==void 0&&this._stream.end();}};var o=class{_stream;constructor(t){let{filePath:r,writeImmediately:e=!1,...y}=t;this._stream=new p(r,e,y);}log(t){this._stream.write(this._formatMessage(t)+`
10
+ `);}};var m=class extends o{#t;constructor(t){super({compress:"gzip",interval:"1d",size:"10M",...t});}setStringify(t){this.#t=t;}_formatMessage(t){let{type:r,...e}=t;return e.label&&(e.label=e.label.trim()),e.file&&(e.file=e.file.name+":"+e.file.line+(e.file.column?":"+e.file.column:"")),this.#t(e)}};var l=class extends a{#t;#e;constructor(){super(),this.#t=h.stdout,this.#e=h.stderr;}setStdout(t){this.#t=t;}setStderr(t){this.#e=t;}_log(t,r){let e=["error","warn"].includes(r)?this.#e:this.#t;a$1(t+`
11
+ `,e);}};
13
12
 
14
- export { f as AbstractFileReporter, _ as JsonFileReporter, u as JsonReporter };
13
+ export { o as AbstractFileReporter, m as JsonFileReporter, l as JsonReporter };
15
14
  //# sourceMappingURL=out.js.map
16
15
  //# sourceMappingURL=reporter.server.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/util/rotating-file-stream.ts","../src/util/safe-stream-handler.ts","../src/reporter/file/abstract-file-reporter.ts","../src/reporter/file/json-file-reporter.ts","../src/reporter/json/json.server.ts"],"names":["createRfsStream","SafeStreamHandler","stream","name","message","arguments_","error","RotatingFileStream","filePath","writeImmediately","options","fileStream","AbstractFileReporter","rfsOptions","meta","_stringify","JsonFileReporter","__privateAdd","function_","__privateSet","type","rest","__privateGet","process","_stdout","_stderr","JsonReporter","AbstractJsonReporter","stdout","stderr","logLevel","writeStream"],"mappings":"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","sourcesContent":["import type { Writable } from \"node:stream\";\n\nimport type { Options as RfsOptions } from \"rotating-file-stream\";\nimport { createStream as createRfsStream } from \"rotating-file-stream\";\n\nimport { SafeStreamHandler } from \"./safe-stream-handler\";\n\n/**\n * A wrapper for the `rfs` module that will optionally write to disk immediately\n * by creating and closing a new stream on each write.\n */\nexport class RotatingFileStream {\n private readonly _filePath: string;\n\n private readonly _immediate: boolean;\n\n private readonly _stream: Writable | undefined;\n\n private readonly _options: RfsOptions;\n\n public constructor(filePath: string, writeImmediately = false, options: RfsOptions = {}) {\n this._filePath = filePath;\n this._immediate = writeImmediately;\n this._options = options;\n\n if (!this._immediate) {\n this._stream = createRfsStream(this._filePath, options);\n }\n }\n\n /**\n * Writes `message` to the instance's internal _stream\n * @param message Message to write\n */\n public write(message: string): void {\n let fileStream = this._stream;\n\n if (this._immediate) {\n fileStream = createRfsStream(this._filePath, this._options);\n }\n\n const stream = new SafeStreamHandler(fileStream as Writable, this._filePath);\n\n stream.write(message);\n\n if (this._immediate) {\n stream.end();\n }\n }\n\n /**\n * Ends the instance's internal _stream\n *\n * When `immediate` is not `true`, a call to `write` after calling this method\n * will throw an error.\n */\n public end(): void {\n if (this._stream !== undefined) {\n this._stream.end();\n }\n }\n}\n","import type { Writable } from \"node:stream\";\n\n/**\n * A handler for writable streams that only writes if the stream has finished\n * processing or draining\n */\nexport class SafeStreamHandler {\n public _ready = true;\n\n protected _stream: Writable;\n\n protected _name: string;\n\n public constructor(stream: Writable, name: string) {\n this._stream = stream;\n this._name = name;\n }\n\n /**\n * Writes `message` to the instance's internal stream\n * @param message Message to write\n */\n public write(message: string): void {\n this.writeStream(message);\n }\n\n /**\n * Calls `end` on this instance's internal stream\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public end(...arguments_: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n this._stream.end(...arguments_);\n }\n\n protected writeStream(message: string): void {\n if (!this._ready) {\n // eslint-disable-next-line no-console\n console.warn(\"Stream busy: \" + this._name + '. Write will be dropped: \"' + message + '\"');\n return;\n }\n this._ready = false;\n\n this._stream.on(\"error\", (error) => {\n throw error;\n });\n this._stream.on(\"drain\", () => {\n this._ready = true;\n });\n this._stream.on(\"finish\", () => {\n this._ready = true;\n });\n this._ready = this._stream.write(message, () => {});\n }\n}\n","import type { Options as RfsOptions } from \"rotating-file-stream\";\n\nimport type { ReadonlyMeta, Reporter } from \"../../types\";\nimport { RotatingFileStream } from \"../../util/rotating-file-stream\";\n\nexport type Options = RfsOptions & {\n filePath: string;\n writeImmediately?: boolean;\n};\n\nexport abstract class AbstractFileReporter<L extends string = never> implements Reporter<L> {\n protected _stream: RotatingFileStream;\n\n protected constructor(options: Options) {\n const { filePath, writeImmediately = false, ...rfsOptions } = options;\n\n this._stream = new RotatingFileStream(filePath, writeImmediately, rfsOptions);\n }\n\n public log(meta: ReadonlyMeta<L>): void {\n this._stream.write(this._formatMessage(meta as ReadonlyMeta<L>) + \"\\n\");\n }\n\n protected abstract _formatMessage(data: ReadonlyMeta<L>): string;\n}\n","import type { stringify } from \"safe-stable-stringify\";\n\nimport type { Meta } from \"../../types\";\nimport type { Options as FileReporterOptions } from \"./abstract-file-reporter\";\nimport { AbstractFileReporter } from \"./abstract-file-reporter\";\n\nexport class JsonFileReporter<L extends string = never> extends AbstractFileReporter<L> {\n #stringify: typeof stringify | undefined;\n\n public constructor(options: FileReporterOptions) {\n super({\n compress: \"gzip\", // compress rotated files\n interval: \"1d\", // rotate daily\n size: \"10M\", // rotate every 10 MegaBytes written\n ...options,\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n public setStringify(function_: any): void {\n this.#stringify = function_;\n }\n\n protected _formatMessage(meta: Meta<L>): string {\n const { type, ...rest } = meta;\n\n if (rest.label) {\n rest.label = rest.label.trim();\n }\n\n if (rest.file) {\n // This is a hack to make the file property a string\n (rest as unknown as Omit<Meta<L>, \"file\"> & { file: string }).file =\n rest.file.name + \":\" + rest.file.line + (rest.file.column ? \":\" + rest.file.column : \"\");\n }\n\n return (this.#stringify as typeof stringify)(rest) as string;\n }\n}\n","import process from \"node:process\";\n\nimport type { LiteralUnion } from \"type-fest\";\n\nimport type { ExtendedRfc5424LogLevels, StreamAwareReporter } from \"../../types\";\nimport { writeStream } from \"../../util/write-stream\";\nimport { AbstractJsonReporter } from \"./abstract-json-reporter\";\n\nexport class JsonReporter<L extends string = never> extends AbstractJsonReporter<L> implements StreamAwareReporter<L> {\n #stdout: NodeJS.WriteStream;\n\n #stderr: NodeJS.WriteStream;\n\n public constructor() {\n super();\n\n this.#stdout = process.stdout;\n this.#stderr = process.stderr;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n public setStdout(stdout: NodeJS.WriteStream) {\n this.#stdout = stdout;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n public setStderr(stderr: NodeJS.WriteStream) {\n this.#stderr = stderr;\n }\n\n protected override _log(message: string, logLevel: LiteralUnion<ExtendedRfc5424LogLevels, L>): void {\n const stream = [\"error\", \"warn\"].includes(logLevel as string) ? this.#stderr : this.#stdout;\n\n writeStream(message + \"\\n\", stream);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/util/rotating-file-stream.ts","../src/util/safe-stream-handler.ts","../src/reporter/file/abstract-file-reporter.ts","../src/reporter/file/json-file-reporter.ts","../src/reporter/json/json.server.ts"],"names":["createRfsStream","SafeStreamHandler","stream","name","message","arguments_","error","RotatingFileStream","filePath","writeImmediately","options","fileStream","AbstractFileReporter","rfsOptions","meta","JsonFileReporter","#stringify","function_","type","rest","process","JsonReporter","AbstractJsonReporter","#stdout","#stderr","stdout","stderr","logLevel","writeStream"],"mappings":"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","sourcesContent":["import type { Writable } from \"node:stream\";\n\nimport type { Options as RfsOptions } from \"rotating-file-stream\";\nimport { createStream as createRfsStream } from \"rotating-file-stream\";\n\nimport { SafeStreamHandler } from \"./safe-stream-handler\";\n\n/**\n * A wrapper for the `rfs` module that will optionally write to disk immediately\n * by creating and closing a new stream on each write.\n */\nexport class RotatingFileStream {\n private readonly _filePath: string;\n\n private readonly _immediate: boolean;\n\n private readonly _stream: Writable | undefined;\n\n private readonly _options: RfsOptions;\n\n public constructor(filePath: string, writeImmediately = false, options: RfsOptions = {}) {\n this._filePath = filePath;\n this._immediate = writeImmediately;\n this._options = options;\n\n if (!this._immediate) {\n this._stream = createRfsStream(this._filePath, options);\n }\n }\n\n /**\n * Writes `message` to the instance's internal _stream\n * @param message Message to write\n */\n public write(message: string): void {\n let fileStream = this._stream;\n\n if (this._immediate) {\n fileStream = createRfsStream(this._filePath, this._options);\n }\n\n const stream = new SafeStreamHandler(fileStream as Writable, this._filePath);\n\n stream.write(message);\n\n if (this._immediate) {\n stream.end();\n }\n }\n\n /**\n * Ends the instance's internal _stream\n *\n * When `immediate` is not `true`, a call to `write` after calling this method\n * will throw an error.\n */\n public end(): void {\n if (this._stream !== undefined) {\n this._stream.end();\n }\n }\n}\n","import type { Writable } from \"node:stream\";\n\n/**\n * A handler for writable streams that only writes if the stream has finished\n * processing or draining\n */\nexport class SafeStreamHandler {\n public _ready = true;\n\n protected _stream: Writable;\n\n protected _name: string;\n\n public constructor(stream: Writable, name: string) {\n this._stream = stream;\n this._name = name;\n }\n\n /**\n * Writes `message` to the instance's internal stream\n * @param message Message to write\n */\n public write(message: string): void {\n this.writeStream(message);\n }\n\n /**\n * Calls `end` on this instance's internal stream\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public end(...arguments_: any[]): void {\n this._stream.end(...arguments_);\n }\n\n protected writeStream(message: string): void {\n if (!this._ready) {\n // eslint-disable-next-line no-console\n console.warn(\"Stream busy: \" + this._name + '. Write will be dropped: \"' + message + '\"');\n return;\n }\n this._ready = false;\n\n this._stream.on(\"error\", (error) => {\n throw error;\n });\n this._stream.on(\"drain\", () => {\n this._ready = true;\n });\n this._stream.on(\"finish\", () => {\n this._ready = true;\n });\n this._ready = this._stream.write(message, () => {});\n }\n}\n","import type { Options as RfsOptions } from \"rotating-file-stream\";\n\nimport type { ReadonlyMeta, Reporter } from \"../../types\";\nimport { RotatingFileStream } from \"../../util/rotating-file-stream\";\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport type Options = RfsOptions & {\n filePath: string;\n writeImmediately?: boolean;\n};\n\nexport abstract class AbstractFileReporter<L extends string = never> implements Reporter<L> {\n protected _stream: RotatingFileStream;\n\n protected constructor(options: Options) {\n const { filePath, writeImmediately = false, ...rfsOptions } = options;\n\n this._stream = new RotatingFileStream(filePath, writeImmediately, rfsOptions);\n }\n\n public log(meta: ReadonlyMeta<L>): void {\n this._stream.write(this._formatMessage(meta as ReadonlyMeta<L>) + \"\\n\");\n }\n\n protected abstract _formatMessage(data: ReadonlyMeta<L>): string;\n}\n","import type { stringify } from \"safe-stable-stringify\";\n\nimport type { Meta } from \"../../types\";\nimport type { Options as FileReporterOptions } from \"./abstract-file-reporter\";\nimport { AbstractFileReporter } from \"./abstract-file-reporter\";\n\nexport class JsonFileReporter<L extends string = never> extends AbstractFileReporter<L> {\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n #stringify: typeof stringify | undefined;\n\n public constructor(options: FileReporterOptions) {\n super({\n compress: \"gzip\", // compress rotated files\n interval: \"1d\", // rotate daily\n size: \"10M\", // rotate every 10 MegaBytes written\n ...options,\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n public setStringify(function_: any): void {\n this.#stringify = function_;\n }\n\n protected _formatMessage(meta: Meta<L>): string {\n const { type, ...rest } = meta;\n\n if (rest.label) {\n rest.label = rest.label.trim();\n }\n\n if (rest.file) {\n // This is a hack to make the file property a string\n (rest as unknown as Omit<Meta<L>, \"file\"> & { file: string }).file =\n rest.file.name + \":\" + rest.file.line + (rest.file.column ? \":\" + rest.file.column : \"\");\n }\n\n return (this.#stringify as typeof stringify)(rest) as string;\n }\n}\n","import process from \"node:process\";\n\nimport type { ExtendedRfc5424LogLevels, LiteralUnion, StreamAwareReporter } from \"../../types\";\nimport { writeStream } from \"../../util/write-stream\";\nimport { AbstractJsonReporter } from \"./abstract-json-reporter\";\n\nexport class JsonReporter<L extends string = never> extends AbstractJsonReporter<L> implements StreamAwareReporter<L> {\n #stdout: NodeJS.WriteStream;\n\n #stderr: NodeJS.WriteStream;\n\n public constructor() {\n super();\n\n this.#stdout = process.stdout;\n this.#stderr = process.stderr;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n public setStdout(stdout: NodeJS.WriteStream) {\n this.#stdout = stdout;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n public setStderr(stderr: NodeJS.WriteStream) {\n this.#stderr = stderr;\n }\n\n protected override _log(message: string, logLevel: LiteralUnion<ExtendedRfc5424LogLevels, L>): void {\n const stream = [\"error\", \"warn\"].includes(logLevel as string) ? this.#stderr : this.#stdout;\n\n writeStream(message + \"\\n\", stream);\n }\n}\n"]}
@@ -1,5 +1,4 @@
1
1
  import { AnsiColors } from '@visulima/colorize';
2
- import { LiteralUnion, Primitive, UnknownArray, UnknownRecord } from 'type-fest';
3
2
 
4
3
  declare class InteractiveStreamHook {
5
4
  #private;
@@ -29,103 +28,67 @@ declare class InteractiveManager {
29
28
  private _clear;
30
29
  }
31
30
 
32
- /**
33
- * * This is a special exported interface for other packages/app to declare additional metadata for the logger.
34
- */
35
31
  declare global {
36
32
  namespace VisulimaPail {
37
- // eslint-disable-next-line @typescript-eslint/no-empty-interface,@typescript-eslint/no-unused-vars
38
- interface CustomMeta<L> {}
33
+ interface CustomMeta<L> {
34
+ }
39
35
  }
40
36
  }
41
-
37
+ type Primitive = bigint | boolean | number | string | symbol | null | undefined;
38
+ type LiteralUnion<LiteralType, BaseType extends Primitive> = LiteralType | (BaseType & Record<never, never>);
42
39
  interface Meta<L> extends VisulimaPail.CustomMeta<L> {
43
40
  badge: string | undefined;
44
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
41
  context: any[] | undefined;
46
42
  date: Date | string;
47
43
  error: Error | undefined;
48
44
  groups: string[];
49
45
  label: string | undefined;
50
- message: Primitive | UnknownArray | UnknownRecord;
46
+ message: Primitive | ReadonlyArray<unknown> | Record<PropertyKey, unknown>;
51
47
  prefix: string | undefined;
52
48
  repeated?: number | undefined;
53
49
  scope: string[] | undefined;
54
50
  suffix: string | undefined;
55
- traceError: Error | undefined; // for internal use
51
+ traceError: Error | undefined;
56
52
  type: {
57
53
  level: ExtendedRfc5424LogLevels | L;
58
54
  name: string;
59
55
  };
60
56
  }
61
-
62
57
  type ExtendedRfc5424LogLevels = "alert" | "critical" | "debug" | "emergency" | "error" | "informational" | "notice" | "trace" | "warning";
63
-
64
- type DefaultLogTypes =
65
- | "alert"
66
- | "await"
67
- | "complete"
68
- | "critical"
69
- | "debug"
70
- | "emergency"
71
- | "error"
72
- | "info"
73
- | "log"
74
- | "notice"
75
- | "pending"
76
- | "start"
77
- | "stop"
78
- | "success"
79
- | "trace"
80
- | "wait"
81
- | "warn"
82
- | "watch";
83
-
84
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
+ type DefaultLogTypes = "alert" | "await" | "complete" | "critical" | "debug" | "emergency" | "error" | "info" | "log" | "notice" | "pending" | "start" | "stop" | "success" | "trace" | "wait" | "warn" | "watch";
85
59
  type LoggerFunction = (...message: any[]) => void;
86
- // alias for backward-compatibility
87
60
  interface LoggerConfiguration<L extends string = never> {
88
61
  badge?: string;
89
62
  color?: AnsiColors | undefined;
90
63
  label: string;
91
64
  logLevel: LiteralUnion<ExtendedRfc5424LogLevels, L>;
92
65
  }
93
-
94
66
  type LoggerTypesConfig<T extends string, L extends string = never> = Record<T, Partial<LoggerConfiguration<L>>>;
95
67
  type DefaultLoggerTypes<L extends string = never> = Record<DefaultLogTypes, LoggerConfiguration<L>>;
96
-
97
68
  type ReadonlyMeta<L extends string = never> = Readonly<Meta<L>>;
98
-
99
69
  interface Reporter<L extends string = never> {
100
70
  log: (meta: ReadonlyMeta<L>) => void;
101
71
  }
102
-
103
72
  interface StreamAwareReporter<L extends string = never> extends Reporter<L> {
104
73
  setStderr: (stderr: NodeJS.WriteStream) => void;
105
74
  setStdout: (stdout: NodeJS.WriteStream) => void;
106
75
  }
107
-
108
76
  interface LoggerTypesAwareReporter<T extends string = never, L extends string = never> extends Reporter<L> {
109
77
  setLoggerTypes: (types: LoggerTypesConfig<T, L> & Partial<LoggerTypesConfig<DefaultLogTypes, L>>) => void;
110
78
  }
111
-
112
79
  interface StringifyAwareReporter<L extends string = never> extends Reporter<L> {
113
80
  setStringify: (stringify: typeof JSON.stringify) => void;
114
81
  }
115
-
116
82
  interface InteractiveStreamReporter<L extends string = never> extends StreamAwareReporter<L> {
117
83
  setInteractiveManager: (manager?: InteractiveManager) => void;
118
84
  setIsInteractive: (interactive: boolean) => void;
119
85
  }
120
-
121
86
  interface Processor<L extends string = never> {
122
87
  process: (meta: Meta<L>) => Meta<L>;
123
88
  }
124
-
125
89
  interface StringifyAwareProcessor<L extends string = never> extends Processor<L> {
126
90
  setStringify: (stringify: typeof JSON.stringify) => void;
127
91
  }
128
-
129
92
  interface ConstructorOptions<T extends string = never, L extends string = never> {
130
93
  disabled?: boolean;
131
94
  logLevel?: LiteralUnion<ExtendedRfc5424LogLevels, L>;
@@ -140,16 +103,12 @@ interface ConstructorOptions<T extends string = never, L extends string = never>
140
103
  scope?: string[] | string;
141
104
  throttle?: number;
142
105
  throttleMin?: number;
143
- // we can't negate DefaultLogTypes from string
144
- // see https://github.com/microsoft/TypeScript/pull/29317 (not merged as for 31 march 2021)
145
- // so we can't distinguish logger configuration between default log types and passed one
146
106
  types?: LoggerTypesConfig<T, L> & Partial<LoggerTypesConfig<DefaultLogTypes, L>>;
147
107
  }
148
-
149
108
  interface ServerConstructorOptions<T extends string = never, L extends string = never> extends ConstructorOptions<T, L> {
150
109
  interactive?: boolean;
151
110
  stderr?: NodeJS.WriteStream;
152
111
  stdout?: NodeJS.WriteStream;
153
112
  }
154
113
 
155
- export { type ConstructorOptions as C, type DefaultLoggerTypes as D, type ExtendedRfc5424LogLevels as E, InteractiveManager as I, type LoggerConfiguration as L, type Meta as M, type Processor as P, type Reporter as R, type StreamAwareReporter as S, type DefaultLogTypes as a, type LoggerFunction as b, type LoggerTypesAwareReporter as c, type LoggerTypesConfig as d, type ServerConstructorOptions as e, type ReadonlyMeta as f, type StringifyAwareReporter as g, type InteractiveStreamReporter as h, type StringifyAwareProcessor as i };
114
+ export { type ConstructorOptions as C, type DefaultLoggerTypes as D, type ExtendedRfc5424LogLevels as E, InteractiveManager as I, type LoggerConfiguration as L, type Meta as M, type Processor as P, type Reporter as R, type StreamAwareReporter as S, type DefaultLogTypes as a, type LoggerFunction as b, type LoggerTypesAwareReporter as c, type LoggerTypesConfig as d, type LiteralUnion as e, type ServerConstructorOptions as f, type ReadonlyMeta as g, type StringifyAwareReporter as h, type InteractiveStreamReporter as i, type StringifyAwareProcessor as j };
@@ -1,5 +1,4 @@
1
1
  import { AnsiColors } from '@visulima/colorize';
2
- import { LiteralUnion, Primitive, UnknownArray, UnknownRecord } from 'type-fest';
3
2
 
4
3
  declare class InteractiveStreamHook {
5
4
  #private;
@@ -29,103 +28,67 @@ declare class InteractiveManager {
29
28
  private _clear;
30
29
  }
31
30
 
32
- /**
33
- * * This is a special exported interface for other packages/app to declare additional metadata for the logger.
34
- */
35
31
  declare global {
36
32
  namespace VisulimaPail {
37
- // eslint-disable-next-line @typescript-eslint/no-empty-interface,@typescript-eslint/no-unused-vars
38
- interface CustomMeta<L> {}
33
+ interface CustomMeta<L> {
34
+ }
39
35
  }
40
36
  }
41
-
37
+ type Primitive = bigint | boolean | number | string | symbol | null | undefined;
38
+ type LiteralUnion<LiteralType, BaseType extends Primitive> = LiteralType | (BaseType & Record<never, never>);
42
39
  interface Meta<L> extends VisulimaPail.CustomMeta<L> {
43
40
  badge: string | undefined;
44
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
41
  context: any[] | undefined;
46
42
  date: Date | string;
47
43
  error: Error | undefined;
48
44
  groups: string[];
49
45
  label: string | undefined;
50
- message: Primitive | UnknownArray | UnknownRecord;
46
+ message: Primitive | ReadonlyArray<unknown> | Record<PropertyKey, unknown>;
51
47
  prefix: string | undefined;
52
48
  repeated?: number | undefined;
53
49
  scope: string[] | undefined;
54
50
  suffix: string | undefined;
55
- traceError: Error | undefined; // for internal use
51
+ traceError: Error | undefined;
56
52
  type: {
57
53
  level: ExtendedRfc5424LogLevels | L;
58
54
  name: string;
59
55
  };
60
56
  }
61
-
62
57
  type ExtendedRfc5424LogLevels = "alert" | "critical" | "debug" | "emergency" | "error" | "informational" | "notice" | "trace" | "warning";
63
-
64
- type DefaultLogTypes =
65
- | "alert"
66
- | "await"
67
- | "complete"
68
- | "critical"
69
- | "debug"
70
- | "emergency"
71
- | "error"
72
- | "info"
73
- | "log"
74
- | "notice"
75
- | "pending"
76
- | "start"
77
- | "stop"
78
- | "success"
79
- | "trace"
80
- | "wait"
81
- | "warn"
82
- | "watch";
83
-
84
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
+ type DefaultLogTypes = "alert" | "await" | "complete" | "critical" | "debug" | "emergency" | "error" | "info" | "log" | "notice" | "pending" | "start" | "stop" | "success" | "trace" | "wait" | "warn" | "watch";
85
59
  type LoggerFunction = (...message: any[]) => void;
86
- // alias for backward-compatibility
87
60
  interface LoggerConfiguration<L extends string = never> {
88
61
  badge?: string;
89
62
  color?: AnsiColors | undefined;
90
63
  label: string;
91
64
  logLevel: LiteralUnion<ExtendedRfc5424LogLevels, L>;
92
65
  }
93
-
94
66
  type LoggerTypesConfig<T extends string, L extends string = never> = Record<T, Partial<LoggerConfiguration<L>>>;
95
67
  type DefaultLoggerTypes<L extends string = never> = Record<DefaultLogTypes, LoggerConfiguration<L>>;
96
-
97
68
  type ReadonlyMeta<L extends string = never> = Readonly<Meta<L>>;
98
-
99
69
  interface Reporter<L extends string = never> {
100
70
  log: (meta: ReadonlyMeta<L>) => void;
101
71
  }
102
-
103
72
  interface StreamAwareReporter<L extends string = never> extends Reporter<L> {
104
73
  setStderr: (stderr: NodeJS.WriteStream) => void;
105
74
  setStdout: (stdout: NodeJS.WriteStream) => void;
106
75
  }
107
-
108
76
  interface LoggerTypesAwareReporter<T extends string = never, L extends string = never> extends Reporter<L> {
109
77
  setLoggerTypes: (types: LoggerTypesConfig<T, L> & Partial<LoggerTypesConfig<DefaultLogTypes, L>>) => void;
110
78
  }
111
-
112
79
  interface StringifyAwareReporter<L extends string = never> extends Reporter<L> {
113
80
  setStringify: (stringify: typeof JSON.stringify) => void;
114
81
  }
115
-
116
82
  interface InteractiveStreamReporter<L extends string = never> extends StreamAwareReporter<L> {
117
83
  setInteractiveManager: (manager?: InteractiveManager) => void;
118
84
  setIsInteractive: (interactive: boolean) => void;
119
85
  }
120
-
121
86
  interface Processor<L extends string = never> {
122
87
  process: (meta: Meta<L>) => Meta<L>;
123
88
  }
124
-
125
89
  interface StringifyAwareProcessor<L extends string = never> extends Processor<L> {
126
90
  setStringify: (stringify: typeof JSON.stringify) => void;
127
91
  }
128
-
129
92
  interface ConstructorOptions<T extends string = never, L extends string = never> {
130
93
  disabled?: boolean;
131
94
  logLevel?: LiteralUnion<ExtendedRfc5424LogLevels, L>;
@@ -140,16 +103,12 @@ interface ConstructorOptions<T extends string = never, L extends string = never>
140
103
  scope?: string[] | string;
141
104
  throttle?: number;
142
105
  throttleMin?: number;
143
- // we can't negate DefaultLogTypes from string
144
- // see https://github.com/microsoft/TypeScript/pull/29317 (not merged as for 31 march 2021)
145
- // so we can't distinguish logger configuration between default log types and passed one
146
106
  types?: LoggerTypesConfig<T, L> & Partial<LoggerTypesConfig<DefaultLogTypes, L>>;
147
107
  }
148
-
149
108
  interface ServerConstructorOptions<T extends string = never, L extends string = never> extends ConstructorOptions<T, L> {
150
109
  interactive?: boolean;
151
110
  stderr?: NodeJS.WriteStream;
152
111
  stdout?: NodeJS.WriteStream;
153
112
  }
154
113
 
155
- export { type ConstructorOptions as C, type DefaultLoggerTypes as D, type ExtendedRfc5424LogLevels as E, InteractiveManager as I, type LoggerConfiguration as L, type Meta as M, type Processor as P, type Reporter as R, type StreamAwareReporter as S, type DefaultLogTypes as a, type LoggerFunction as b, type LoggerTypesAwareReporter as c, type LoggerTypesConfig as d, type ServerConstructorOptions as e, type ReadonlyMeta as f, type StringifyAwareReporter as g, type InteractiveStreamReporter as h, type StringifyAwareProcessor as i };
114
+ export { type ConstructorOptions as C, type DefaultLoggerTypes as D, type ExtendedRfc5424LogLevels as E, InteractiveManager as I, type LoggerConfiguration as L, type Meta as M, type Processor as P, type Reporter as R, type StreamAwareReporter as S, type DefaultLogTypes as a, type LoggerFunction as b, type LoggerTypesAwareReporter as c, type LoggerTypesConfig as d, type LiteralUnion as e, type ServerConstructorOptions as f, type ReadonlyMeta as g, type StringifyAwareReporter as h, type InteractiveStreamReporter as i, type StringifyAwareProcessor as j };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visulima/pail",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Find a file or directory by walking up parent directories.",
5
5
  "keywords": [
6
6
  "anolilab",
@@ -181,8 +181,8 @@
181
181
  "test:watch": "vitest"
182
182
  },
183
183
  "dependencies": {
184
- "@visulima/colorize": "1.2.2",
185
- "@visulima/fmt": "1.1.2",
184
+ "@visulima/colorize": "1.3.0",
185
+ "@visulima/fmt": "1.1.3",
186
186
  "safe-stable-stringify": "^2.4.3",
187
187
  "string-length": "^6.0.0",
188
188
  "terminal-size": "^4.0.0",
@@ -192,7 +192,7 @@
192
192
  "@anolilab/eslint-config": "^15.0.3",
193
193
  "@anolilab/prettier-config": "^5.0.14",
194
194
  "@anolilab/semantic-release-preset": "^8.0.3",
195
- "@babel/core": "^7.23.9",
195
+ "@babel/core": "^7.24.0",
196
196
  "@rushstack/eslint-plugin-security": "^0.8.1",
197
197
  "@secretlint/secretlint-rule-preset-recommend": "^8.1.2",
198
198
  "@total-typescript/ts-reset": "^0.5.1",
@@ -214,7 +214,6 @@
214
214
  "semantic-release": "^23.0.2",
215
215
  "sort-package-json": "^2.8.0",
216
216
  "tsup": "^8.0.2",
217
- "type-fest": "^4.10.3",
218
217
  "typescript": "^5.3.3",
219
218
  "vitest": "^1.3.1"
220
219
  },
@@ -1,10 +0,0 @@
1
- 'use strict';
2
-
3
- var chunk4RK45K5E_cjs = require('./chunk-4RK45K5E.cjs');
4
- var chunk7OFJLC7L_cjs = require('./chunk-7OFJLC7L.cjs');
5
-
6
- var t=class extends chunk7OFJLC7L_cjs.a{constructor(){super();}_log(r,n){chunk4RK45K5E_cjs.a(n)(r);}};
7
-
8
- exports.a = t;
9
- //# sourceMappingURL=out.js.map
10
- //# sourceMappingURL=chunk-32FAOPTJ.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/reporter/json/json.browser.ts"],"names":["JsonReporter","AbstractJsonReporter","message","logLevel","writeConsoleLogBasedOnLevel"],"mappings":"kFAMO,IAAMA,EAAN,cAAqDC,CAAwB,CACzE,aAAc,CACjB,MAAM,CACV,CAGmB,KAAKC,EAAiBC,EAA2D,CACrEC,EAA4BD,CAAQ,EAE5CD,CAAO,CAC9B,CACJ","sourcesContent":["import type { LiteralUnion } from \"type-fest\";\n\nimport type { ExtendedRfc5424LogLevels } from \"../../types\";\nimport { writeConsoleLogBasedOnLevel } from \"../../util/write-console-log\";\nimport { AbstractJsonReporter } from \"./abstract-json-reporter\";\n\nexport class JsonReporter<L extends string = never> extends AbstractJsonReporter<L> {\n public constructor() {\n super();\n }\n\n // eslint-disable-next-line class-methods-use-this\n protected override _log(message: string, logLevel: LiteralUnion<ExtendedRfc5424LogLevels, L>): void {\n const consoleLogFunction = writeConsoleLogBasedOnLevel(logLevel);\n\n consoleLogFunction(message);\n }\n}\n"]}
@@ -1,10 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkMU2CRXVO_cjs = require('./chunk-MU2CRXVO.cjs');
4
-
5
- var a=o=>{let e=Object.keys(o).map(t=>o[t].badge??"");return e.length===0?"":e.reduce((t,r)=>t.length>r.length?t:r)};var n=class{constructor(e){this._styles={bold:{label:!1},dateFormatter:t=>[t.getHours(),t.getMinutes(),t.getSeconds()].map(r=>String(r).padStart(2,"0")).join(":"),underline:{label:!1,message:!1,prefix:!1,suffix:!1},uppercase:{label:!1},...e},this._loggerTypes=chunkMU2CRXVO_cjs.b;}setStringify(e){this._stringify=e;}setLoggerTypes(e){this._loggerTypes=e;}};
6
-
7
- exports.a = a;
8
- exports.b = n;
9
- //# sourceMappingURL=out.js.map
10
- //# sourceMappingURL=chunk-46NTLZF7.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/util/get-longest-badge.ts","../src/reporter/pretty/abstract-pretty-reporter.ts"],"names":["getLongestBadge","types","badges","x","y","AbstractPrettyReporter","options","date","n","LOG_TYPES","function_"],"mappings":"yCAIO,IAAMA,EAAuDC,GAA0E,CAE1I,IAAMC,EAAS,OAAO,KAAKD,CAAK,EAAE,IAAKE,GAAMF,EAAME,CAAM,EAAE,OAAS,EAAE,EAEtE,OAAID,EAAO,SAAW,EACX,GAIJA,EAAO,OAAO,CAACC,EAAGC,IAAOD,EAAE,OAASC,EAAE,OAASD,EAAIC,CAAE,CAChE,ECRO,IAAeC,EAAf,KAEP,CAOc,YAAYC,EAAsC,CACxD,KAAK,QAAU,CACX,KAAM,CACF,MAAO,EACX,EACA,cAAgBC,GAAe,CAACA,EAAK,SAAS,EAAGA,EAAK,WAAW,EAAGA,EAAK,WAAW,CAAC,EAAE,IAAKC,GAAM,OAAOA,CAAC,EAAE,SAAS,EAAG,GAAG,CAAC,EAAE,KAAK,GAAG,EACtI,UAAW,CACP,MAAO,GACP,QAAS,GACT,OAAQ,GACR,OAAQ,EACZ,EACA,UAAW,CACP,MAAO,EACX,EACA,GAAGF,CACP,EAEA,KAAK,aAAeG,CACxB,CAGO,aAAaC,EAAsB,CACtC,KAAK,WAAaA,CACtB,CAEO,eAAeT,EAAqE,CACvF,KAAK,aAAeA,CACxB,CAGJ","sourcesContent":["import type { LiteralUnion } from \"type-fest\";\n\nimport type { DefaultLogTypes, LoggerTypesConfig } from \"../types\";\n\nexport const getLongestBadge = <L extends string, T extends string>(types: LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>): string => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const badges = Object.keys(types).map((x) => types[x as T].badge ?? \"\");\n\n if (badges.length === 0) {\n return \"\";\n }\n\n // eslint-disable-next-line unicorn/no-array-reduce\n return badges.reduce((x, y) => (x.length > y.length ? x : y));\n};\n","import type { stringify } from \"safe-stable-stringify\";\nimport type { LiteralUnion } from \"type-fest\";\n\nimport { LOG_TYPES } from \"../../constants\";\nimport type { DefaultLogTypes, LoggerTypesAwareReporter, LoggerTypesConfig, ReadonlyMeta, StringifyAwareReporter } from \"../../types\";\n\nexport abstract class AbstractPrettyReporter<T extends string = never, L extends string = never>\n implements LoggerTypesAwareReporter<T, L>, StringifyAwareReporter<L>\n{\n protected readonly _styles: PrettyStyleOptions;\n\n protected _loggerTypes: LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>;\n\n protected _stringify: typeof stringify | undefined;\n\n protected constructor(options: Partial<PrettyStyleOptions>) {\n this._styles = {\n bold: {\n label: false,\n },\n dateFormatter: (date: Date) => [date.getHours(), date.getMinutes(), date.getSeconds()].map((n) => String(n).padStart(2, \"0\")).join(\":\"),\n underline: {\n label: false,\n message: false,\n prefix: false,\n suffix: false,\n },\n uppercase: {\n label: false,\n },\n ...options,\n } as PrettyStyleOptions;\n\n this._loggerTypes = LOG_TYPES as LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n public setStringify(function_: any): void {\n this._stringify = function_;\n }\n\n public setLoggerTypes(types: LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>): void {\n this._loggerTypes = types;\n }\n\n public abstract log(meta: ReadonlyMeta<L>): void;\n}\n\nexport type PrettyStyleOptions = {\n bold: {\n label: boolean;\n };\n dateFormatter: (date: Date) => string;\n // Length of the message before a line break is inserted\n messageLength: number | undefined;\n underline: {\n label: boolean;\n prefix: boolean;\n suffix: boolean;\n };\n uppercase: {\n label: boolean;\n };\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/util/write-console-log.ts"],"names":["writeConsoleLogBasedOnLevel","level"],"mappings":"AAKO,IAAMA,EAAyDC,GAC9DA,IAAU,QAEF,QAAgB,SAAW,QAAQ,MAG3CA,IAAU,OAEF,QAAgB,QAAU,QAAQ,KAG1CA,IAAU,QAEF,QAAgB,SAAW,QAAQ,MAIvC,QAAgB,OAAS,QAAQ","sourcesContent":["import type { LiteralUnion } from \"type-fest\";\n\nimport type { ExtendedRfc5424LogLevels } from \"../types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const writeConsoleLogBasedOnLevel = <L extends string = never>(level: LiteralUnion<ExtendedRfc5424LogLevels, L>): ((...data: any[]) => void) => {\n if (level === \"error\") {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,no-console\n return (console as any).__error ?? console.error;\n }\n\n if (level === \"warn\") {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,no-console\n return (console as any).__warn ?? console.warn;\n }\n\n if (level === \"trace\") {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,no-console\n return (console as any).__trace ?? console.trace;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,no-console\n return (console as any).__log ?? console.log;\n};\n"]}
@@ -1,7 +0,0 @@
1
- import { b } from './chunk-EBP7SMYV.js';
2
-
3
- var g=o=>{let e=Object.keys(o).map(t=>o[t].badge??"");return e.length===0?"":e.reduce((t,r)=>t.length>r.length?t:r)};var n=class{constructor(e){this._styles={bold:{label:!1},dateFormatter:t=>[t.getHours(),t.getMinutes(),t.getSeconds()].map(r=>String(r).padStart(2,"0")).join(":"),underline:{label:!1,message:!1,prefix:!1,suffix:!1},uppercase:{label:!1},...e},this._loggerTypes=b;}setStringify(e){this._stringify=e;}setLoggerTypes(e){this._loggerTypes=e;}};
4
-
5
- export { g as a, n as b };
6
- //# sourceMappingURL=out.js.map
7
- //# sourceMappingURL=chunk-57OYT2NC.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/util/get-longest-badge.ts","../src/reporter/pretty/abstract-pretty-reporter.ts"],"names":["getLongestBadge","types","badges","x","y","AbstractPrettyReporter","options","date","n","LOG_TYPES","function_"],"mappings":"wCAIO,IAAMA,EAAuDC,GAA0E,CAE1I,IAAMC,EAAS,OAAO,KAAKD,CAAK,EAAE,IAAKE,GAAMF,EAAME,CAAM,EAAE,OAAS,EAAE,EAEtE,OAAID,EAAO,SAAW,EACX,GAIJA,EAAO,OAAO,CAACC,EAAGC,IAAOD,EAAE,OAASC,EAAE,OAASD,EAAIC,CAAE,CAChE,ECRO,IAAeC,EAAf,KAEP,CAOc,YAAYC,EAAsC,CACxD,KAAK,QAAU,CACX,KAAM,CACF,MAAO,EACX,EACA,cAAgBC,GAAe,CAACA,EAAK,SAAS,EAAGA,EAAK,WAAW,EAAGA,EAAK,WAAW,CAAC,EAAE,IAAKC,GAAM,OAAOA,CAAC,EAAE,SAAS,EAAG,GAAG,CAAC,EAAE,KAAK,GAAG,EACtI,UAAW,CACP,MAAO,GACP,QAAS,GACT,OAAQ,GACR,OAAQ,EACZ,EACA,UAAW,CACP,MAAO,EACX,EACA,GAAGF,CACP,EAEA,KAAK,aAAeG,CACxB,CAGO,aAAaC,EAAsB,CACtC,KAAK,WAAaA,CACtB,CAEO,eAAeT,EAAqE,CACvF,KAAK,aAAeA,CACxB,CAGJ","sourcesContent":["import type { LiteralUnion } from \"type-fest\";\n\nimport type { DefaultLogTypes, LoggerTypesConfig } from \"../types\";\n\nexport const getLongestBadge = <L extends string, T extends string>(types: LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>): string => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n const badges = Object.keys(types).map((x) => types[x as T].badge ?? \"\");\n\n if (badges.length === 0) {\n return \"\";\n }\n\n // eslint-disable-next-line unicorn/no-array-reduce\n return badges.reduce((x, y) => (x.length > y.length ? x : y));\n};\n","import type { stringify } from \"safe-stable-stringify\";\nimport type { LiteralUnion } from \"type-fest\";\n\nimport { LOG_TYPES } from \"../../constants\";\nimport type { DefaultLogTypes, LoggerTypesAwareReporter, LoggerTypesConfig, ReadonlyMeta, StringifyAwareReporter } from \"../../types\";\n\nexport abstract class AbstractPrettyReporter<T extends string = never, L extends string = never>\n implements LoggerTypesAwareReporter<T, L>, StringifyAwareReporter<L>\n{\n protected readonly _styles: PrettyStyleOptions;\n\n protected _loggerTypes: LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>;\n\n protected _stringify: typeof stringify | undefined;\n\n protected constructor(options: Partial<PrettyStyleOptions>) {\n this._styles = {\n bold: {\n label: false,\n },\n dateFormatter: (date: Date) => [date.getHours(), date.getMinutes(), date.getSeconds()].map((n) => String(n).padStart(2, \"0\")).join(\":\"),\n underline: {\n label: false,\n message: false,\n prefix: false,\n suffix: false,\n },\n uppercase: {\n label: false,\n },\n ...options,\n } as PrettyStyleOptions;\n\n this._loggerTypes = LOG_TYPES as LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n public setStringify(function_: any): void {\n this._stringify = function_;\n }\n\n public setLoggerTypes(types: LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>): void {\n this._loggerTypes = types;\n }\n\n public abstract log(meta: ReadonlyMeta<L>): void;\n}\n\nexport type PrettyStyleOptions = {\n bold: {\n label: boolean;\n };\n dateFormatter: (date: Date) => string;\n // Length of the message before a line break is inserted\n messageLength: number | undefined;\n underline: {\n label: boolean;\n prefix: boolean;\n suffix: boolean;\n };\n uppercase: {\n label: boolean;\n };\n};\n"]}
@@ -1,9 +0,0 @@
1
- 'use strict';
2
-
3
- var e=(a,b,c)=>{if(!b.has(a))throw TypeError("Cannot "+c)};var f=(a,b,c)=>(e(a,b,"read from private field"),c?c.call(a):b.get(a)),g=(a,b,c)=>{if(b.has(a))throw TypeError("Cannot add the same private member more than once");b instanceof WeakSet?b.add(a):b.set(a,c);},h=(a,b,c,d)=>(e(a,b,"write to private field"),d?d.call(a,c):b.set(a,c),c);
4
-
5
- exports.a = f;
6
- exports.b = g;
7
- exports.c = h;
8
- //# sourceMappingURL=out.js.map
9
- //# sourceMappingURL=chunk-6ATEEAVC.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
@@ -1,7 +0,0 @@
1
- 'use strict';
2
-
3
- var n=class{setStringify(i){this._stringify=i;}log(i){let{file:t,type:s,...e}=i;e.label&&(e.label=e.label.trim()),t&&(e.file=t.name+":"+t.line+(t.column?":"+t.column:"")),e.scope?.length===0&&delete e.scope,this._log(this._stringify(e),s.level);}};
4
-
5
- exports.a = n;
6
- //# sourceMappingURL=out.js.map
7
- //# sourceMappingURL=chunk-7OFJLC7L.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/reporter/json/abstract-json-reporter.ts"],"names":["AbstractJsonReporter","function_","meta","file","type","rest"],"mappings":"AAKO,IAAeA,EAAf,KAAmG,CAI/F,aAAaC,EAAsB,CACtC,KAAK,WAAaA,CACtB,CAEO,IAAIC,EAA6B,CAEpC,GAAM,CAAE,KAAAC,EAAM,KAAAC,EAAM,GAAGC,CAAK,EAAIH,EAE5BG,EAAK,QACLA,EAAK,MAAQA,EAAK,MAAM,KAAK,GAG7BF,IAECE,EAAqE,KAAOF,EAAK,KAAO,IAAMA,EAAK,MAAQA,EAAK,OAAS,IAAMA,EAAK,OAAS,KAG9IE,EAAK,OAAO,SAAW,GACvB,OAAOA,EAAK,MAGhB,KAAK,KAAM,KAAK,WAAgCA,CAAI,EAAaD,EAAK,KAAK,CAC/E,CAGJ","sourcesContent":["import type { stringify } from \"safe-stable-stringify\";\nimport type { LiteralUnion } from \"type-fest\";\n\nimport type { ExtendedRfc5424LogLevels, ReadonlyMeta, StringifyAwareReporter } from \"../../types\";\n\nexport abstract class AbstractJsonReporter<L extends string = never> implements StringifyAwareReporter<L> {\n protected _stringify: typeof stringify | undefined;\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any\n public setStringify(function_: any): void {\n this._stringify = function_;\n }\n\n public log(meta: ReadonlyMeta<L>): void {\n // @ts-expect-error -- tsup can find the type\n const { file, type, ...rest } = meta;\n\n if (rest.label) {\n rest.label = rest.label.trim();\n }\n\n if (file) {\n // This is a hack to make the file property a string\n (rest as unknown as Omit<ReadonlyMeta<L>, \"file\"> & { file: string }).file = file.name + \":\" + file.line + (file.column ? \":\" + file.column : \"\");\n }\n\n if (rest.scope?.length === 0) {\n delete rest.scope;\n }\n\n this._log((this._stringify as typeof stringify)(rest) as string, type.level);\n }\n\n protected abstract _log(message: string, logLevel: LiteralUnion<ExtendedRfc5424LogLevels, L>): void;\n}\n"]}
@@ -1,9 +0,0 @@
1
- import { a as a$1 } from './chunk-PVAYQO5O.js';
2
- import { b, c as c$1, a } from './chunk-EBP7SMYV.js';
3
- import { configure } from 'safe-stable-stringify';
4
-
5
- var L=class{log(e){let{context:r=[],message:t,type:o}=e;a$1(o.level)(t,...r);}};var v=s=>s===void 0?[]:Array.isArray(s)?s:[s];var x=(s,e)=>{let r={...s};return Object.keys(e).forEach(t=>{r[t]={...r[t],...e[t]};}),r};var E=(s,e)=>s.length>=e?s:s.padEnd(e);var C={badge:void 0,context:void 0,error:void 0,label:void 0,message:void 0,prefix:void 0,repeated:void 0,scope:void 0,suffix:void 0},y=class{constructor(e){this.throttle=e.throttle??1e3,this.throttleMin=e.throttleMin??5,this.stringify=configure({strict:!0}),this.startTimerMessage=e?.messages?.timerStart??"Initialized timer...",this.endTimerMessage=e?.messages?.timerEnd??"Timer run for:",this.types=x(b,e.types??{}),this.longestLabel=c$1(this.types),this.logLevels={...a,...e.logLevels},this.generalLogLevel=this._normalizeLogLevel(e.logLevel),this.reporters=new Set,this.processors=new Set,this.disabled=e.disabled??!1,this.scopeName=v(e.scope).filter(Boolean),this.timersMap=new Map,this.countMap=new Map,this.groups=[],this.seqTimers=new Set;for(let r in this.types)this[r]=this._logger.bind(this,r,!1);this.lastLog={},Array.isArray(e?.reporters)&&this.registerReporters(e.reporters),this.rawReporter=this.extendReporter(e.rawReporter??new L),Array.isArray(e?.processors)&&this.registerProcessors(e?.processors);}wrapConsole(){for(let e in this.types)console["__"+e]||(console["__"+e]=console[e]),console[e]=this[e].log;}restoreConsole(){for(let e in this.types)console["__"+e]&&(console[e]=console["__"+e],delete console["__"+e]);}wrapException(){process.on("uncaughtException",e=>{this.error(e);}),process.on("unhandledRejection",e=>{this.error(e);});}disable(){this.disabled=!0;}enable(){this.disabled=!1;}isEnabled(){return !this.disabled}scope(...e){if(e.length===0)throw new Error("No scope name was defined.");return this.scopeName=e.flat(),this}unscope(){this.scopeName=[];}time(e="default"){this.seqTimers.has(e)?this._logger("warn",!1,{message:"Timer '"+e+"' already exists",prefix:e}):(this.seqTimers.add(e),this.timersMap.set(e,Date.now()),this._logger("start",!1,{message:this.startTimerMessage,prefix:e}));}timeLog(e,...r){if(!e&&this.seqTimers.size>0&&(e=[...this.seqTimers].pop()),e&&this.timersMap.has(e)){let t=Date.now()-this.timersMap.get(e);this._logger("info",!1,{context:r,message:t<1e3?t+" ms":(t/1e3).toFixed(2)+" s",prefix:e});}else this._logger("warn",!1,{context:r,message:"Timer not found",prefix:e});}timeEnd(e){if(!e&&this.seqTimers.size>0&&(e=[...this.seqTimers].pop()),e&&this.timersMap.has(e)){let r=Date.now()-this.timersMap.get(e);this.timersMap.delete(e),this._logger("stop",!1,{message:this.endTimerMessage+" "+(r<1e3?r+" ms":(r/1e3).toFixed(2)+" s"),prefix:e});}}group(e="console.group"){typeof window>"u"?console.group(e):this.groups.push(e);}groupEnd(){typeof window>"u"?console.groupEnd():this.groups.pop();}count(e="default"){let r=this.countMap.get(e)??0;this.countMap.set(e,r+1),this._logger("log",!1,{message:e+": "+(r+1),prefix:e});}countReset(e="default"){this.countMap.has(e)?this.countMap.delete(e):this._logger("warn",!1,{message:"Count for "+e+" does not exist",prefix:e});}clear(){console.clear();}raw(e,...r){this.disabled||this._logger("log",!0,{context:r,message:e});}extendReporter(e){return e.setLoggerTypes&&e.setLoggerTypes(this.types),e.setStringify&&e.setStringify(this.stringify),e}registerReporters(e){for(let r of e)this.reporters.add(this.extendReporter(r));}_report(e,r){if(r)this.rawReporter.log(Object.freeze(e));else for(let t of this.reporters)t.log(Object.freeze(e));}registerProcessors(e){for(let r of e)r.setStringify&&r.setStringify(this.stringify),this.processors.add(r);}_normalizeLogLevel(e){return e&&this.logLevels[e]?e:"debug"}_buildMeta(e,r,...t){let o={...C};if(o.type={level:r.logLevel,name:e},o.groups=this.groups,o.scope=this.scopeName,o.date=new Date,t.length===1&&typeof t[0]=="object"&&t[0]!==null)if(t[0]instanceof Error)o.error=t[0];else if("message"in t[0]){let{context:i,message:d,prefix:f,suffix:n}=t[0];i&&(o.context=i),f&&(o.prefix=f),n&&(o.suffix=n),o.message=d;}else o.message=t[0];else t.length>1&&typeof t[0]=="string"?(o.message=t[0],o.context=t.slice(1)):o.message=t[0];return r.logLevel==="trace"&&(o.traceError=new Error("Trace")),r.badge&&(o.badge=E(r.badge,r.badge.length+1)),r.label&&(o.label=r.label),o}_logger(e,r,...t){if(this.disabled)return;let o=this._normalizeLogLevel(this.types[e].logLevel);if(this.logLevels[o]>=this.logLevels[this.generalLogLevel]){let i=this._buildMeta(e,this.types[e],...t),d=(n=!1)=>{let l=(this.lastLog.count||0)-this.throttleMin;if(this.lastLog.object&&l>0){let u={...this.lastLog.object};l>1&&(u.repeated=l),this._report(u,r),this.lastLog.count=1;}if(n){for(let u of this.processors)i={...u.process(i)};this.lastLog.object=i,this._report(i,r);}};clearTimeout(this.lastLog.timeout);let f=this.lastLog.time&&i.date?new Date(i.date).getTime()-this.lastLog.time.getTime():0;if(this.lastLog.time=new Date(i.date),f<this.throttle)try{let n=JSON.stringify([i.label,i.scope,i.type,i.message,i.prefix,i.suffix,i.context]),l=this.lastLog.serialized===n;if(this.lastLog.serialized=n,l&&(this.lastLog.count=(this.lastLog.count||0)+1,this.lastLog.count>this.throttleMin)){this.lastLog.timeout=setTimeout(d,this.throttle);return}}catch{}d(!0);}}},G=y;var g=Symbol("circular-reference-tag"),m=Symbol("raw-error-ref"),M=Object.create({},{aggregateErrors:{enumerable:!0,value:void 0,writable:!0},cause:{enumerable:!0,value:void 0,writable:!0},code:{enumerable:!0,value:void 0,writable:!0},message:{enumerable:!0,value:void 0,writable:!0},name:{enumerable:!0,value:void 0,writable:!0},raw:{enumerable:!1,get(){return this[m]},set(s){this[m]=s;}},stack:{enumerable:!0,value:void 0,writable:!0}});Object.defineProperty(M,m,{value:{},writable:!0});var R=M;var c=(s,e={})=>{s[g]=void 0;let r=Object.create(R);r.name=Object.prototype.toString.call(s.constructor)==="[object Function]"?s.constructor.name:s.name,r.message=s.message,r.stack=s.stack,Array.isArray(s.errors)&&(r.aggregateErrors=s.errors.map(t=>c(t,e))),s.cause instanceof Error&&!Object.prototype.hasOwnProperty.call(s.cause,g)&&(r.cause=c(s.cause,e));for(let t in s)if(r[t]===void 0){let o=s[t];if(o instanceof Error)Object.prototype.hasOwnProperty.call(o,g)||(r[t]=c(o,e));else if(typeof o=="function")r[t]="[Function: "+(o.name||"anonymous");else try{r[t]=o;}catch{}}return delete s[g],r.raw=s,r};var S=class{constructor(e={}){this._options={maxDepth:Number.POSITIVE_INFINITY,useToJSON:!0,...e};}process(e){return e.error&&(e.error=c(e.error,this._options)),e}};
6
-
7
- export { y as a, G as b, S as c };
8
- //# sourceMappingURL=out.js.map
9
- //# sourceMappingURL=chunk-FJCEDFRI.js.map