nightingale 18.0.0 → 18.2.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/CHANGELOG.md +27 -0
- package/README.md +0 -1
- package/dist/definitions/formatters/ANSIFormatter.d.ts +1 -1
- package/dist/definitions/formatters/ANSIFormatter.d.ts.map +1 -1
- package/dist/definitions/formatters/BrowserConsoleFormatter.d.ts +1 -1
- package/dist/definitions/formatters/BrowserConsoleFormatter.d.ts.map +1 -1
- package/dist/definitions/loggers/LoggerCLI.d.ts +1 -5
- package/dist/definitions/loggers/LoggerCLI.d.ts.map +1 -1
- package/dist/index-browser.es.js +29 -6
- package/dist/index-browser.es.js.map +1 -1
- package/dist/index-node22.mjs +29 -6
- package/dist/index-node22.mjs.map +1 -1
- package/dist/index-react-native.es.js +29 -6
- package/dist/index-react-native.es.js.map +1 -1
- package/package.json +29 -26
- package/src/config.ts +1 -1
- package/src/debug/debug.test.ts +1 -0
- package/src/formatter-utils/formatObject.test.ts +2 -1
- package/src/formatter-utils/index.test.ts +1 -0
- package/src/formatters/ANSIFormatter.test.ts +1 -0
- package/src/formatters/ANSIFormatter.ts +1 -1
- package/src/formatters/BrowserConsoleFormatter.test.ts +2 -1
- package/src/formatters/BrowserConsoleFormatter.ts +1 -1
- package/src/formatters/HTMLFormatter.test.ts +1 -0
- package/src/formatters/JSONFormatter.test.ts +1 -0
- package/src/formatters/MarkdownFormatter.test.ts +1 -0
- package/src/formatters/RawFormatter.test.ts +1 -0
- package/src/handlers/ConsoleCLIHandler.ts +2 -2
- package/src/index.test.ts +1 -0
- package/src/loggers/LoggerCLI.test.ts +36 -7
- package/src/loggers/LoggerCLI.ts +0 -16
package/dist/index-node22.mjs
CHANGED
|
@@ -734,6 +734,19 @@ const JSONFormatter = {
|
|
|
734
734
|
];
|
|
735
735
|
}
|
|
736
736
|
};
|
|
737
|
+
const JSONCLIFormatter = {
|
|
738
|
+
format(record) {
|
|
739
|
+
return [
|
|
740
|
+
stringify({
|
|
741
|
+
key: record.key,
|
|
742
|
+
time: record.datetime.toTimeString().split(" ", 2)[0],
|
|
743
|
+
message: record.message,
|
|
744
|
+
...record.metadata,
|
|
745
|
+
...record.extra
|
|
746
|
+
})
|
|
747
|
+
];
|
|
748
|
+
}
|
|
749
|
+
};
|
|
737
750
|
|
|
738
751
|
const ansiStyles = {
|
|
739
752
|
black: ansi.black,
|
|
@@ -806,6 +819,7 @@ const style = (styleToHtmlStyle, args) => (styles, string) => {
|
|
|
806
819
|
return `%c${string}%c`;
|
|
807
820
|
};
|
|
808
821
|
class BrowserConsoleFormatter {
|
|
822
|
+
styleToHtmlStyle;
|
|
809
823
|
constructor(theme = "light") {
|
|
810
824
|
this.styleToHtmlStyle = theme === "dark" ? styleToHtmlStyleThemeDark : styleToHtmlStyleThemeLight;
|
|
811
825
|
}
|
|
@@ -826,8 +840,9 @@ function consoleOutput(param, record) {
|
|
|
826
840
|
}
|
|
827
841
|
|
|
828
842
|
class StringHandler {
|
|
843
|
+
minLevel;
|
|
844
|
+
_buffer = "";
|
|
829
845
|
constructor(minLevel) {
|
|
830
|
-
this._buffer = "";
|
|
831
846
|
this.minLevel = minLevel;
|
|
832
847
|
}
|
|
833
848
|
get string() {
|
|
@@ -860,8 +875,10 @@ const createHandler = (theme = getDefaultTheme()) => {
|
|
|
860
875
|
};
|
|
861
876
|
};
|
|
862
877
|
class BrowserConsoleHandler {
|
|
878
|
+
minLevel = 0;
|
|
879
|
+
handle;
|
|
880
|
+
isHandling;
|
|
863
881
|
constructor(minLevel, options = {}) {
|
|
864
|
-
this.minLevel = 0;
|
|
865
882
|
this.isHandling = (level, key) => level >= findDebugLevel$2(minLevel, key);
|
|
866
883
|
this.handle = createHandler(options.theme);
|
|
867
884
|
}
|
|
@@ -876,8 +893,10 @@ const createHandle$1 = (formatter = defaultFormatter, output = consoleOutput) =>
|
|
|
876
893
|
};
|
|
877
894
|
const findDebugLevel$1 = createFindDebugLevel(process.env.DEBUG);
|
|
878
895
|
class ConsoleHandler {
|
|
896
|
+
minLevel = Level.ALL;
|
|
897
|
+
isHandling;
|
|
898
|
+
handle;
|
|
879
899
|
constructor(minLevel, options = {}) {
|
|
880
|
-
this.minLevel = Level.ALL;
|
|
881
900
|
this.minLevel = minLevel;
|
|
882
901
|
this.isHandling = (level, key) => level >= findDebugLevel$1(minLevel, key);
|
|
883
902
|
this.handle = createHandle$1(options.formatter, options.output);
|
|
@@ -893,7 +912,7 @@ const createHandle = ({
|
|
|
893
912
|
noColor = process.env.NO_COLOR === "1" || process.env.NO_COLOR === "true"
|
|
894
913
|
}) => {
|
|
895
914
|
const formatter = (() => {
|
|
896
|
-
if (json) return
|
|
915
|
+
if (json) return JSONCLIFormatter.format;
|
|
897
916
|
if (noColor) return RawFormatter.format;
|
|
898
917
|
return ANSIFormatter.format;
|
|
899
918
|
})();
|
|
@@ -904,8 +923,10 @@ const createHandle = ({
|
|
|
904
923
|
};
|
|
905
924
|
const findDebugLevel = createFindDebugLevel(process.env.DEBUG);
|
|
906
925
|
class ConsoleCLIHandler {
|
|
926
|
+
minLevel = Level.ALL;
|
|
927
|
+
isHandling;
|
|
928
|
+
handle;
|
|
907
929
|
constructor(minLevel, options = {}) {
|
|
908
|
-
this.minLevel = Level.ALL;
|
|
909
930
|
this.minLevel = minLevel;
|
|
910
931
|
this.isHandling = (level, key) => level >= findDebugLevel(minLevel, key);
|
|
911
932
|
this.handle = createHandle(options);
|
|
@@ -913,9 +934,11 @@ class ConsoleCLIHandler {
|
|
|
913
934
|
}
|
|
914
935
|
|
|
915
936
|
class LoggerCLI extends Logger {
|
|
937
|
+
handlers;
|
|
938
|
+
processors = [];
|
|
939
|
+
json;
|
|
916
940
|
constructor(key, { displayName, processors, json = false, noColor } = {}) {
|
|
917
941
|
super(key, displayName);
|
|
918
|
-
this.processors = [];
|
|
919
942
|
this.handlers = [new ConsoleCLIHandler(Level$1.INFO, { json, noColor })];
|
|
920
943
|
this.processors = processors ?? [];
|
|
921
944
|
this.json = json;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-node22.mjs","sources":["../src/config.ts","../src/formatter-utils/levelToStyles.ts","../src/formatter-utils/levelToSymbol.ts","../src/formatter-utils/styleToHexColor.ts","../src/formatter-utils/styleToHtmlStyle.ts","../src/formatter-utils/formatStyles.ts","../src/formatter-utils/formatObject.ts","../src/formatter-utils/formatRecordToString.ts","../src/debug/debug.ts","../src/formatters/RawFormatter.ts","../src/formatters/MarkdownFormatter.ts","../src/formatters/JSONFormatter.ts","../src/formatters/ANSIFormatter.ts","../src/formatters/HTMLFormatter.ts","../src/formatters/BrowserConsoleFormatter.ts","../src/outputs/consoleOutput.target-node.ts","../src/handlers/StringHandler.ts","../src/debug/getDebugString.ts","../src/handlers/BrowserConsoleHandler.ts","../src/handlers/defaultFormatter.target-node.ts","../src/handlers/ConsoleHandler.ts","../src/outputs/cliConsoleOutput.ts","../src/handlers/ConsoleCLIHandler.ts","../src/loggers/LoggerCLI.ts","../src/index.ts"],"sourcesContent":["import type { ComputedConfigForKey, Config } from \"nightingale-logger\";\nimport type { Handler, Level } from \"nightingale-types\";\n\nconst globalOrWindow: typeof global =\n typeof global !== \"undefined\" ? global : (window as typeof global);\n\nif (\n process.env.NODE_ENV !== \"production\" &&\n globalOrWindow.__NIGHTINGALE_GLOBAL_HANDLERS\n) {\n throw new Error(\"nightingale: update all to ^5.0.0\");\n}\n\nif (!globalOrWindow.__NIGHTINGALE_CONFIG) {\n globalOrWindow.__NIGHTINGALE_CONFIG = [];\n globalOrWindow.__NIGHTINGALE_LOGGER_MAP_CACHE = new Map<\n string,\n ComputedConfigForKey\n >();\n globalOrWindow.__NIGHTINGALE_CONFIG_DEFAULT = {\n handlers: [],\n processors: [],\n };\n}\n\nfunction clearCache(): void {\n globalOrWindow.__NIGHTINGALE_LOGGER_MAP_CACHE.clear();\n}\n\nfunction handleConfig(config: Config): Config {\n if (config.keys) {\n if (config.pattern) {\n throw new Error(\"Cannot have key and pattern for the same config\");\n }\n if (config.key) {\n throw new Error(\"Cannot have key and keys for the same config\");\n }\n } else if (config.key) {\n if (config.pattern) {\n throw new Error(\"Cannot have key and pattern for the same config\");\n }\n config.keys = [config.key];\n delete config.key;\n }\n\n if (config.handler) {\n if (config.handlers) {\n throw new Error(\"Cannot have handler and handlers for the same config\");\n }\n config.handlers = [config.handler];\n delete config.handler;\n }\n\n if (config.processor) {\n if (config.processors) {\n throw new Error(\n \"Cannot have processors and processors for the same config\",\n );\n }\n config.processors = [config.processor];\n delete config.processor;\n }\n\n return config;\n}\n\nexport function configure(config: Config[]): void {\n if (globalOrWindow.__NIGHTINGALE_CONFIG.length > 0) {\n // eslint-disable-next-line no-console\n console.log(\"nightingale: warning: config overridden\");\n }\n\n clearCache();\n globalOrWindow.__NIGHTINGALE_CONFIG = config.map(handleConfig);\n}\n\nexport function addConfig(config: Config, unshift = false): void {\n config = handleConfig(config);\n globalOrWindow.__NIGHTINGALE_CONFIG[unshift ? \"unshift\" : \"push\"](config);\n clearCache();\n}\n\nconst configIsForKey = (key: string) => (config: Config) => {\n if (config.keys) return config.keys.includes(key);\n if (config.pattern) return config.pattern.test(key);\n return true;\n};\n\nglobalOrWindow.__NIGHTINGALE_GET_CONFIG_FOR_LOGGER = (\n key: string,\n): ComputedConfigForKey => {\n const globalCache = globalOrWindow.__NIGHTINGALE_LOGGER_MAP_CACHE;\n\n const existingCache = globalCache.get(key);\n\n if (existingCache) {\n return existingCache;\n }\n\n const loggerConfig: ComputedConfigForKey = {\n handlers: [],\n processors: [],\n };\n\n globalOrWindow.__NIGHTINGALE_CONFIG\n .filter(configIsForKey(key))\n .some((config: Config) => {\n if (config.handlers) loggerConfig.handlers.push(...config.handlers);\n if (config.processors) loggerConfig.processors.push(...config.processors);\n return config.stop;\n });\n\n globalCache.set(key, loggerConfig);\n return loggerConfig;\n};\n\nif (globalOrWindow.__NIGHTINGALE_GET_CONFIG_FOR_LOGGER_RECORD) {\n globalOrWindow.__NIGHTINGALE_GET_CONFIG_FOR_LOGGER_RECORD = (\n key: string,\n level: Level,\n ): ComputedConfigForKey => {\n const { handlers, processors }: ComputedConfigForKey =\n globalOrWindow.__NIGHTINGALE_GET_CONFIG_FOR_LOGGER(key);\n\n return {\n handlers: handlers.filter(\n (handler: Handler) =>\n level >= handler.minLevel &&\n (!handler.isHandling || handler.isHandling(level, key)),\n ),\n processors,\n };\n };\n}\n","import { Level } from \"nightingale-levels\";\n\nexport type LevelToStyles = Readonly<Record<number, string[]>>;\n\nexport const levelToStyles: LevelToStyles = {\n [Level.TRACE]: [\"gray\"],\n [Level.DEBUG]: [\"gray\"],\n // [Level.INFO]: ['gray'],\n [Level.WARN]: [\"yellow\"],\n [Level.ERROR]: [\"red\", \"bold\"],\n [Level.CRITICAL]: [\"red\", \"bold\"],\n [Level.FATAL]: [\"bgRed\", \"white\"],\n [Level.EMERGENCY]: [\"bgRed\", \"white\"],\n};\n","import { Level } from \"nightingale-levels\";\n\nexport type LevelToSymbol = Readonly<Record<number, string>>;\n\nexport const levelToSymbol: LevelToSymbol = {\n [Level.TRACE]: \"•\",\n [Level.DEBUG]: \"•\",\n [Level.INFO]: \"→\",\n [Level.WARN]: \"⚠\",\n [Level.ERROR]: \"✖\",\n [Level.CRITICAL]: \"!\",\n [Level.FATAL]: \"‼\",\n [Level.EMERGENCY]: \"‼\",\n};\n","export const styleToHexColor = {\n orange: \"ff5f00\",\n} as const;\n\nexport type StyleToHexColor = Readonly<\n Record<keyof typeof styleToHexColor, string>\n>;\n","import { styleToHexColor } from \"./styleToHexColor.ts\";\n\nexport interface HtmlStyle {\n readonly open: string;\n readonly close: string;\n}\n\nexport const styleToHtmlStyleThemeLight = {\n // text style\n bold: { open: \"font-weight: bold\", close: \"font-weight: normal\" },\n italic: { open: \"font-style: italic\", close: \"font-style: normal\" },\n underline: {\n open: \"text-decoration: underline\",\n close: \"text-decoration: none\",\n },\n inverse: {\n open: \"unicode-bidi: bidi-override; direction: rtl\",\n close: \"unicode-bidi: normal; direction: ltr\",\n },\n strikethrough: {\n open: \"text-decoration: line-through\",\n close: \"text-decoration: none\",\n },\n\n black: { open: \"color: black\", close: \"color: currentcolor\" },\n red: { open: \"color: #ff0020\", close: \"color: currentcolor\" },\n green: { open: \"color: #00b317\", close: \"color: currentcolor\" },\n yellow: { open: \"color: #ffcc00\", close: \"color: currentcolor\" },\n blue: { open: \"color: #00a0ff\", close: \"color: currentcolor\" },\n magenta: { open: \"color: #ff00a0\", close: \"color: currentcolor\" },\n cyan: { open: \"color: #00cfd8\", close: \"color: currentcolor\" },\n white: { open: \"color: white\", close: \"color: currentcolor\" },\n gray: { open: \"color: gray\", close: \"color: currentcolor\" },\n dim: { open: \"color: #808080\", close: \"color: currentcolor\" },\n\n bgBlack: { open: \"background: black\", close: \"background: initial\" },\n bgRed: { open: \"background: #ff0020\", close: \"background: initial\" },\n bgGreen: { open: \"background: #00b317\", close: \"background: initial\" },\n bgYellow: { open: \"background: #ffcc00\", close: \"background: initial\" },\n bgBlue: { open: \"background: #00a0ff\", close: \"background: initial\" },\n bgMagenta: { open: \"background: #ff00a0\", close: \"background: initial\" },\n bgCyan: { open: \"background: #00cfd8\", close: \"background: initial\" },\n bgWhite: { open: \"background: white\", close: \"background: initial\" },\n\n orange: {\n open: `color: #${styleToHexColor.orange}`,\n close: \"color: currentcolor\",\n },\n} as const;\n\nexport type StyleToHtmlStyle = Readonly<\n Record<keyof typeof styleToHtmlStyleThemeLight, HtmlStyle>\n>;\n\nexport const styleToHtmlStyleThemeDark: StyleToHtmlStyle = {\n ...styleToHtmlStyleThemeLight,\n black: styleToHtmlStyleThemeLight.white,\n bgBlack: styleToHtmlStyleThemeLight.bgWhite,\n white: styleToHtmlStyleThemeLight.black,\n bgWhite: styleToHtmlStyleThemeLight.bgBlack,\n gray: { open: \"color: lightgray\", close: \"color: currentcolor\" },\n};\n","/* eslint sort-keys: error */\n\nexport const formatStyles = {\n bigint: [\"yellow\", \"bold\"],\n boolean: [\"green\"],\n date: [\"magenta\"],\n error: [\"red\"],\n function: [\"blue\"],\n null: [\"bold\"],\n number: [\"yellow\"],\n regexp: [\"magenta\"],\n string: [\"orange\"],\n symbol: [\"magenta\"],\n undefined: [\"dim\"],\n};\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type { Styles } from \"nightingale-types\";\nimport { formatStyles } from \"./formatStyles.ts\";\n\nexport interface FormatObjectOptions {\n padding?: string;\n maxDepth?: number;\n}\n\nexport type StyleFn = (styles: Styles, value: string) => string;\n\nexport type ObjectStyles<Keys extends string = string> = Record<Keys, Styles>;\n\nconst noStyleFn: StyleFn = (styles: Styles, value: string): string => value;\n\ninterface InternalFormatParams {\n padding: string;\n depth: number;\n maxDepth: number;\n objects: Set<unknown>;\n}\n\ninterface FormattedKey {\n stringKey: string;\n formattedKey: string;\n}\n\ntype FormatKey<Key> = (\n key: Key,\n styleFn: StyleFn,\n internalFormatParams: InternalFormatParams,\n) => FormattedKey;\n\ninterface Value<Key> {\n key: Key;\n value: unknown;\n}\n\ninterface FormattedValue {\n stringValue: string;\n formattedValue: string;\n}\n\ntype Values<Key> = Value<Key>[];\n\ninterface InternalFormatIteratorParams<Key> {\n prefix: string;\n suffix: string;\n formatKey: FormatKey<Key>;\n prefixSuffixSpace?: string;\n}\n\nfunction tryStringify(arg: unknown): string {\n try {\n return JSON.stringify(arg).replace(/\\\\n/g, \"\\n\");\n } catch {\n return \"[Circular]\";\n }\n}\n\nconst sameRawFormattedValue = (value: string): FormattedValue => ({\n stringValue: value,\n formattedValue: value,\n});\n\nconst numericSeparator = \"_\";\n\nconst formatIntegerValue = (integerAsString: string): string => {\n let result = \"\";\n let i = integerAsString.length;\n const start = integerAsString.startsWith(\"-\") ? 1 : 0;\n for (; i >= start + 4; i -= 3) {\n result = `${numericSeparator}${integerAsString.slice(i - 3, i)}${result}`;\n }\n return i === integerAsString.length\n ? integerAsString\n : `${integerAsString.slice(0, i)}${result}`;\n};\n\nconst formatDecimalIntegerValue = (integerAsString: string): string => {\n let result = \"\";\n let i = 0;\n for (; i < integerAsString.length - 3; i += 3) {\n result += `${integerAsString.slice(i, i + 3)}${numericSeparator}`;\n }\n return i === 0 ? integerAsString : `${result}${integerAsString.slice(i)}`;\n};\n\nconst formatNumberValue = (value: number): string => {\n if (Number.isNaN(value)) {\n return \"NaN\";\n }\n if (value === Number.POSITIVE_INFINITY) {\n return \"+Infinity\";\n }\n if (value === Number.NEGATIVE_INFINITY) {\n return \"-Infinity\";\n }\n if (value === Number.EPSILON) {\n return \"Epsilon\";\n }\n if (Object.is(value, -0)) {\n return \"-0\";\n }\n const integer = Math.trunc(value);\n const integerAsString = integer.toString();\n if (integer === value) {\n if (integerAsString.includes(\"e\")) {\n return integerAsString;\n }\n return formatIntegerValue(integerAsString);\n } else {\n return `${formatIntegerValue(integerAsString)}.${formatDecimalIntegerValue(String(value).slice(integerAsString.length + 1))}`;\n }\n};\n\nfunction internalFormatValue(\n value: unknown,\n styleFn: StyleFn,\n styles: Styles,\n { padding, depth, maxDepth, objects }: InternalFormatParams,\n): FormattedValue {\n const typeofValue = typeof value;\n\n if (!styles) {\n if (value === null) {\n styles = [\"bold\"];\n } else {\n switch (typeofValue) {\n case \"bigint\":\n styles = formatStyles.bigint;\n break;\n case \"boolean\":\n styles = formatStyles.boolean;\n break;\n case \"undefined\":\n styles = formatStyles.undefined;\n break;\n case \"number\":\n styles = formatStyles.number;\n break;\n case \"string\":\n styles = formatStyles.string;\n break;\n case \"symbol\":\n styles = formatStyles.symbol;\n break;\n case \"object\":\n if (value instanceof Date) {\n styles = formatStyles.date;\n }\n if (value instanceof RegExp) {\n styles = formatStyles.regexp;\n }\n if (value instanceof Error) {\n styles = formatStyles.error;\n }\n break;\n case \"function\":\n styles = formatStyles.function;\n break;\n default:\n break;\n }\n }\n }\n\n let stringValue: string;\n if (value === null) {\n stringValue = \"null\";\n } else if (value === undefined) {\n stringValue = \"undefined\";\n } else if (typeofValue === \"number\") {\n stringValue = formatNumberValue(value as number);\n } else if (typeofValue === \"boolean\") {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n stringValue = (value as any).toString() as string;\n } else if ((value as () => unknown).constructor === Object) {\n if (depth >= maxDepth) {\n stringValue = \"{Object...}\";\n } else {\n return internalFormatObject(\n value as Record<string, unknown>,\n styleFn,\n undefined,\n {\n padding,\n depth: depth + 1,\n maxDepth,\n objects,\n },\n );\n }\n } else if (Array.isArray(value)) {\n if (depth >= maxDepth) {\n stringValue = \"[Array...]\";\n } else {\n return internalFormatArray(value, styleFn, {\n padding,\n depth: depth + 1,\n maxDepth,\n objects,\n });\n }\n } else if (value instanceof Error) {\n const stack = value.stack;\n stringValue =\n stack?.startsWith(value.message) ||\n stack?.startsWith(`${value.name}: ${value.message}`)\n ? stack\n : `${value.message}\\n${stack || \"\"}`;\n } else if (value instanceof Map) {\n const name = value.constructor.name;\n if (depth >= maxDepth) {\n stringValue = `{${name}...}`;\n } else {\n return internalFormatMap(name, value, styleFn, {\n padding,\n depth: depth + 1,\n maxDepth,\n objects,\n });\n }\n } else if (typeofValue === \"bigint\") {\n stringValue = `[BigInt: ${(value as bigint).toString()}]`;\n } else if (typeofValue === \"symbol\") {\n stringValue = (value as symbol).toString();\n } else if (value instanceof Set) {\n const name = value.constructor.name;\n if (depth >= maxDepth) {\n stringValue = `{${name}...}`;\n } else {\n return internalFormatSet(name, value, styleFn, {\n padding,\n depth: depth + 1,\n maxDepth,\n objects,\n });\n }\n } else if (value instanceof WeakMap) {\n stringValue = \"{WeakMap...}\";\n } else if (value instanceof WeakSet) {\n stringValue = \"{WeakSet...}\";\n } else if (value instanceof Date) {\n stringValue = `[Date: ${value.toISOString()}]`;\n } else if (value instanceof RegExp) {\n stringValue = `[RegExp: ${value.toString()}]`;\n } else if (typeof value === \"function\") {\n stringValue = `[Function: ${value.name}]`;\n } else {\n stringValue = tryStringify(value);\n }\n\n const formattedValue = styleFn(styles, stringValue);\n\n return {\n stringValue,\n formattedValue,\n };\n}\n\nconst separator = \",\";\n\nconst internalFormatKey: FormatKey<string> = (\n key: string,\n styleFn: StyleFn,\n internalFormatParams: InternalFormatParams,\n): FormattedKey => {\n return {\n stringKey: `${key}: `,\n formattedKey: `${styleFn([\"dim\", \"bold\"], `${key}:`)} `,\n };\n};\n\nconst internalNoKey: FormatKey<undefined> = (\n key: string | undefined,\n styleFn: StyleFn,\n internalFormatParams: InternalFormatParams,\n): FormattedKey => {\n return { stringKey: \"\", formattedKey: \"\" };\n};\n\nconst internalFormatMapKey: FormatKey<unknown> = (\n key: unknown,\n styleFn: StyleFn,\n internalFormatParams: InternalFormatParams,\n): FormattedKey => {\n const { stringValue, formattedValue } = internalFormatValue(\n key,\n noStyleFn,\n undefined,\n internalFormatParams,\n );\n return {\n stringKey: `${stringValue} => `,\n formattedKey: `${styleFn([\"dim\", \"bold\"], `${formattedValue}:`)} `,\n };\n};\n\nconst internalFormatIterator = <Key>(\n values: Values<Key>,\n styleFn: StyleFn,\n objectStyles: ObjectStyles | undefined,\n { padding, depth, maxDepth, objects }: InternalFormatParams,\n {\n prefix,\n suffix,\n prefixSuffixSpace = \" \",\n formatKey,\n }: InternalFormatIteratorParams<Key>,\n): FormattedValue => {\n let breakLine = false;\n const formattedSeparator = (): string => styleFn([\"gray\"], separator);\n\n const valuesMaxIndex = values.length - 1;\n const formattedValues: FormattedValue[] = values.map(\n ({ key, value }, index: number) => {\n const nextDepth = depth + 1;\n const internalFormatParams = {\n padding,\n depth: nextDepth,\n maxDepth,\n objects,\n };\n\n // key must be formatted before value (browser-formatter needs order)\n const { stringKey, formattedKey } = formatKey(\n key,\n styleFn,\n internalFormatParams,\n );\n\n let { stringValue, formattedValue } = internalFormatValue(\n value,\n styleFn,\n key && objectStyles\n ? objectStyles[key as unknown as string]\n : undefined,\n internalFormatParams,\n );\n\n if (\n stringValue &&\n (stringValue.length > 80 || stringValue.includes(\"\\n\"))\n ) {\n breakLine = true;\n stringValue = stringValue.replace(/\\n/g, `\\n${padding}`);\n formattedValue = formattedValue.replace(/\\n/g, `\\n${padding}`);\n }\n\n return {\n stringValue:\n stringKey + stringValue + (index === valuesMaxIndex ? \"\" : separator),\n formattedValue:\n formattedKey +\n formattedValue +\n (index === valuesMaxIndex ? \"\" : formattedSeparator()),\n // note: we need to format the separator for each values for browser-formatter\n };\n },\n );\n\n return {\n stringValue:\n prefix +\n formattedValues\n .map(\n breakLine\n ? (v) => `\\n${padding}${v.stringValue}`\n : (fv) => fv.stringValue,\n )\n .join(breakLine ? \"\\n\" : \" \") +\n suffix,\n formattedValue: `${prefix}${\n breakLine ? \"\" : prefixSuffixSpace\n }${formattedValues\n .map(\n breakLine\n ? (v) => `\\n${padding}${v.formattedValue}`\n : (v) => v.formattedValue,\n )\n .join(breakLine ? \"\" : \" \")}${\n breakLine ? \",\\n\" : prefixSuffixSpace\n }${suffix}`,\n };\n};\n\nfunction internalFormatObject(\n object: Record<string, unknown>,\n styleFn: StyleFn,\n objectStyles: ObjectStyles | undefined,\n { padding, depth, maxDepth, objects }: InternalFormatParams,\n): FormattedValue {\n if (objects.has(object)) {\n return sameRawFormattedValue(\"{Circular Object}\");\n }\n\n const keys: string[] = Object.keys(object);\n if (keys.length === 0) {\n return sameRawFormattedValue(\"{}\");\n }\n\n objects.add(object);\n\n const result = internalFormatIterator(\n keys.map((key) => ({ key, value: object[key] })),\n styleFn,\n objectStyles,\n { padding, depth, maxDepth, objects },\n { prefix: \"{\", suffix: \"}\", formatKey: internalFormatKey },\n );\n\n objects.delete(object);\n\n return result;\n}\n\nfunction internalFormatMap(\n name: string,\n map: Map<unknown, unknown>,\n styleFn: StyleFn,\n { padding, depth, maxDepth, objects }: InternalFormatParams,\n): FormattedValue {\n if (objects.has(map)) {\n return sameRawFormattedValue(`{Circular ${name}}`);\n }\n\n const keys = [...map.keys()];\n if (keys.length === 0) {\n return sameRawFormattedValue(`${name} {}`);\n }\n\n objects.add(map);\n\n const result = internalFormatIterator(\n keys.map((key) => ({ key, value: map.get(key) })),\n styleFn,\n undefined,\n { padding, depth, maxDepth, objects },\n { prefix: `${name} {`, suffix: \"}\", formatKey: internalFormatMapKey },\n );\n\n objects.delete(map);\n\n return result;\n}\n\nfunction internalFormatArray(\n array: unknown[],\n styleFn: StyleFn,\n { padding, depth, maxDepth, objects }: InternalFormatParams,\n): FormattedValue {\n if (objects.has(array)) {\n return sameRawFormattedValue(\"{Circular Array}\");\n }\n\n if (array.length === 0) {\n return sameRawFormattedValue(\"[]\");\n }\n\n objects.add(array);\n\n const result = internalFormatIterator(\n array.map((value) => ({ key: undefined, value })),\n styleFn,\n undefined,\n { padding, depth, maxDepth, objects },\n {\n prefix: \"[\",\n suffix: \"]\",\n prefixSuffixSpace: \"\",\n formatKey: internalNoKey,\n },\n );\n\n objects.delete(array);\n\n return result;\n}\n\nfunction internalFormatSet(\n name: string,\n set: Set<unknown>,\n styleFn: StyleFn,\n { padding, depth, maxDepth, objects }: InternalFormatParams,\n): FormattedValue {\n if (objects.has(set)) {\n return sameRawFormattedValue(`{Circular ${name}}`);\n }\n\n const values = [...set.values()];\n if (values.length === 0) {\n return sameRawFormattedValue(`${name} []`);\n }\n\n objects.add(set);\n\n const result = internalFormatIterator(\n values.map((value) => ({ key: undefined, value })),\n styleFn,\n undefined,\n { padding, depth, maxDepth, objects },\n { prefix: `${name} [`, suffix: \"]\", formatKey: internalNoKey },\n );\n\n objects.delete(set);\n\n return result;\n}\n\nexport function formatObject(\n object: Record<string, unknown>,\n styleFn: StyleFn = noStyleFn,\n objectStyles?: ObjectStyles,\n { padding = \" \", maxDepth = 10 }: FormatObjectOptions = {},\n): string {\n const { formattedValue: result } = internalFormatObject(\n object,\n styleFn,\n objectStyles,\n {\n padding,\n maxDepth,\n depth: 0,\n objects: new Set(),\n },\n );\n\n if (result === \"{}\") {\n return \"\";\n }\n\n return result;\n}\n","import type { LogRecord, Metadata } from \"nightingale-types\";\nimport type { ObjectStyles, StyleFn } from \"./formatObject.ts\";\nimport { formatObject } from \"./formatObject.ts\";\nimport { levelToStyles } from \"./levelToStyles.ts\";\nimport { levelToSymbol } from \"./levelToSymbol.ts\";\n\nexport function formatRecordToString<T extends Metadata>(\n record: LogRecord<T>,\n style: StyleFn,\n): [string, ...string[]] {\n const parts: string[] = [];\n\n if (record.displayName) {\n parts.push(style([\"dim\"], record.displayName));\n } else if (record.key) {\n parts.push(style([\"dim\"], record.key));\n }\n\n if (record.datetime) {\n parts.push(\n style([\"gray\", \"bold\"], record.datetime.toTimeString().split(\" \", 2)[0]!),\n );\n /* new Date().toFormat('HH24:MI:SS') */\n }\n\n let message: string = record.symbol || levelToSymbol[record.level] || \"\";\n const styles = record.styles || levelToStyles[record.level];\n\n if (record.message) {\n if (message) {\n message += ` ${record.message}`;\n } else {\n message = record.message;\n }\n }\n\n if (message) {\n if (styles) {\n message = style(styles, message);\n }\n parts.push(message);\n }\n\n const formatRecordObject = (\n key: string,\n object: Record<string, unknown> | undefined,\n objectStyles: ObjectStyles | undefined,\n ): void => {\n if (!object) {\n return;\n }\n\n const stringObject = formatObject(object, style, objectStyles);\n\n if (!stringObject) {\n return;\n }\n\n parts.push(stringObject);\n };\n\n formatRecordObject(\"metadata\", record.metadata, record.metadataStyles);\n formatRecordObject(\"extra\", record.extra, undefined);\n formatRecordObject(\"context\", record.context, undefined);\n\n return [parts.join(\" \")];\n}\n","/* eslint-disable complexity */\nimport { Level } from \"nightingale-levels\";\n\nconst specialRegexpChars = /[$()+.?[\\\\\\]^{|}]/;\n\ntype TestFunction = (string: string) => boolean;\nexport type DebugValueType = RegExp | string[] | string;\n\nconst createTestFunctionFromRegexp =\n (regexp: RegExp): TestFunction =>\n (string: string) =>\n regexp.test(string);\n\nconst createTestFunctionFromRegexpString = (value: string): TestFunction => {\n if (!value.endsWith(\"/\")) throw new Error(\"Invalid RegExp DEBUG value\");\n return createTestFunctionFromRegexp(new RegExp(value.slice(1, -1)));\n};\n\nconst createTestFunctionFromValue = (value: string): TestFunction => {\n if (value.endsWith(\":*\")) {\n value = value.slice(0, -2);\n return (string: string) => string.startsWith(value);\n }\n\n return (string: string) => string === value;\n};\n\nexport type FindDebugLevel = (minLevel: Level, key: string) => Level;\n\nexport function createFindDebugLevel(\n debugValue?: DebugValueType,\n): FindDebugLevel {\n let isWildcard = false;\n const debugValues: TestFunction[] = [];\n const skips: TestFunction[] = [];\n\n if (!Array.isArray(debugValue)) {\n if (debugValue instanceof RegExp) {\n debugValues.push(createTestFunctionFromRegexp(debugValue));\n debugValue = undefined;\n } else if (debugValue) {\n debugValue = debugValue.trim();\n\n if (debugValue.startsWith(\"/\")) {\n debugValues.push(createTestFunctionFromRegexpString(debugValue));\n debugValue = undefined;\n } else {\n debugValue = debugValue.split(/[\\s,]+/);\n }\n }\n }\n\n if (debugValue) {\n (debugValue as string[]).forEach((value) => {\n if (specialRegexpChars.test(value)) {\n throw new Error(\n `Invalid debug value: \"${value}\" (contains special chars)`,\n );\n }\n\n if (!value) return;\n\n if (value === \"*\") {\n isWildcard = true;\n return;\n }\n\n if (value.startsWith(\"-\")) {\n skips.push(createTestFunctionFromValue(value.slice(1)));\n } else if (!isWildcard) {\n debugValues.push(createTestFunctionFromValue(value));\n }\n });\n }\n\n if (isWildcard) {\n if (skips.length === 0) {\n return () => Level.ALL;\n } else {\n return (minLevel: Level, key: string) =>\n skips.some((skip) => skip(key)) ? minLevel : Level.ALL;\n }\n }\n\n if (debugValues.length === 0) {\n return (minLevel: Level) => minLevel;\n }\n\n return (minLevel: Level, key: string) => {\n if (minLevel === Level.ALL || !key) {\n return minLevel;\n }\n\n if (debugValues.some((dv) => dv(key))) {\n return skips.some((skip) => skip(key)) ? minLevel : Level.ALL;\n }\n\n return minLevel;\n };\n}\n","import type { Styles } from \"nightingale-types\";\nimport type { NightingaleFormatter } from \"../formatter-utils\";\nimport { formatRecordToString } from \"../formatter-utils/index.ts\";\n\nexport function style(styles: Styles, value: string): string {\n return value;\n}\n\nexport const RawFormatter: NightingaleFormatter = {\n format(record) {\n return formatRecordToString(record, style);\n },\n};\n","import type { Styles } from \"nightingale-types\";\nimport type { NightingaleFormatter } from \"../formatter-utils\";\nimport { formatRecordToString } from \"../formatter-utils/index.ts\";\n\nexport function style(styles: Styles, string: string): string {\n if (!styles || styles.length === 0 || !string) {\n return string;\n }\n\n // eslint-disable-next-line unicorn/no-array-reduce\n return styles.reduce((part, styleName) => {\n switch (styleName) {\n case \"bold\":\n return `*${part}*`;\n case \"italic\":\n return `_${part}_`;\n case \"strikethrough\":\n return `~${part}~`;\n\n // no default\n }\n\n return part;\n }, string);\n}\n\nexport const MarkdownFormatter: NightingaleFormatter = {\n format(record) {\n return formatRecordToString(record, style);\n },\n};\n","import type { NightingaleFormatter } from \"../formatter-utils\";\n\nfunction map2object(map: Map<unknown, unknown>): unknown {\n const object: Record<string, unknown> = {};\n\n map.forEach((value, key) => {\n if (typeof key === \"object\") {\n // ignore key\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n object[String(key)] = value;\n });\n\n return object;\n}\n\nfunction stringify(value: unknown, space?: number | string): string {\n return JSON.stringify(\n value,\n (key, objectValue) => {\n if (objectValue instanceof Map) {\n return map2object(objectValue);\n }\n if (objectValue instanceof Error) {\n return {\n message: objectValue.message,\n stack: objectValue.stack,\n };\n }\n\n return objectValue as unknown;\n },\n space,\n );\n}\n\nexport const JSONFormatter: NightingaleFormatter = {\n format(record) {\n return [\n stringify({\n key: record.key,\n level: record.level,\n datetime: record.datetime,\n message: record.message,\n metadata: record.metadata,\n extra: record.extra,\n }),\n ];\n },\n};\n\nexport const JSONCLIFormatter: NightingaleFormatter = {\n format(record) {\n return [\n stringify({\n key: record.key,\n time: record.datetime.toTimeString().split(\" \", 2)[0]!,\n message: record.message,\n ...record.metadata,\n ...record.extra,\n }),\n ];\n },\n};\n","import ansi from \"ansi-styles\";\nimport type { NightingaleFormatter } from \"nightingale\";\nimport type { Styles } from \"nightingale-types\";\nimport {\n formatRecordToString,\n styleToHexColor,\n} from \"../formatter-utils/index.ts\";\n\nexport type { Styles } from \"nightingale-types\";\n\ninterface CodePair {\n open: string;\n close: string;\n}\n\ntype AnsiStyles = Record<string, CodePair | undefined>;\n\nconst ansiStyles: AnsiStyles = {\n black: ansi.black,\n red: ansi.red,\n green: ansi.green,\n yellow: ansi.yellow,\n blue: ansi.blue,\n magenta: ansi.magenta,\n cyan: ansi.cyan,\n white: ansi.white,\n gray: ansi.gray,\n dim: ansi.dim,\n\n bgBlack: ansi.bgBlack,\n bgRed: ansi.bgRed,\n bgGreen: ansi.bgGreen,\n bgYellow: ansi.bgYellow,\n bgBlue: ansi.bgBlue,\n bgMagenta: ansi.bgMagenta,\n bgCyan: ansi.bgCyan,\n bgWhite: ansi.bgWhite,\n\n bold: ansi.bold,\n underline: ansi.underline,\n\n // http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html\n orange: {\n open: ansi.color.ansi256(ansi.hexToAnsi256(styleToHexColor.orange)),\n close: ansi.color.close,\n },\n};\n\nexport function style(styles: Styles, string: string): string {\n if (!styles || styles.length === 0 || !string) {\n return string;\n }\n\n // eslint-disable-next-line unicorn/no-array-reduce\n return styles.reduce((styledString: string, styleName: string) => {\n const codePair: CodePair | undefined = ansiStyles[styleName];\n\n if (!codePair) {\n throw new Error(`Unknown style: ${styleName}`);\n }\n\n return codePair.open + styledString + codePair.close;\n }, string);\n}\n\nexport const ANSIFormatter: NightingaleFormatter = {\n format: (record) => formatRecordToString(record, style),\n};\n","import type { Styles } from \"nightingale-types\";\nimport type {\n NightingaleFormatter,\n StyleToHtmlStyle,\n} from \"../formatter-utils\";\nimport {\n formatRecordToString,\n styleToHtmlStyleThemeLight,\n} from \"../formatter-utils/index.ts\";\n\nexport function style(styles: Styles, string: string): string {\n if (!styles || styles.length === 0 || !string) {\n return string;\n }\n\n return `<span style=\"${styles\n .map(\n (styleName) =>\n styleToHtmlStyleThemeLight[styleName as keyof StyleToHtmlStyle].open,\n )\n .join(\"; \")}\">${string}</span>`;\n}\n\nexport const HTMLFormatter: NightingaleFormatter = {\n format(record) {\n return formatRecordToString(record, style);\n },\n};\n","import type { StyleToHtmlStyle } from \"nightingale\";\nimport type { LogRecord, Metadata, Styles } from \"nightingale-types\";\nimport type { NightingaleFormatter } from \"../formatter-utils\";\nimport {\n formatRecordToString,\n styleToHtmlStyleThemeDark,\n styleToHtmlStyleThemeLight,\n} from \"../formatter-utils/index.ts\";\n\nexport const style =\n (styleToHtmlStyle: StyleToHtmlStyle, args: string[]) =>\n (styles: Styles, string: string): string => {\n if (!styles || styles.length === 0 || !string) {\n return string;\n }\n\n const htmlStyles = styles.map(\n (styleName) => styleToHtmlStyle[styleName as keyof StyleToHtmlStyle],\n );\n\n args.push(\n htmlStyles.map((s) => s.open).join(\"; \"),\n htmlStyles.map((s) => s.close).join(\"; \"),\n );\n return `%c${string}%c`;\n };\n\nexport class BrowserConsoleFormatter implements NightingaleFormatter {\n styleToHtmlStyle: StyleToHtmlStyle;\n constructor(theme: \"dark\" | \"light\" = \"light\") {\n this.styleToHtmlStyle =\n theme === \"dark\" ? styleToHtmlStyleThemeDark : styleToHtmlStyleThemeLight;\n }\n\n format<T extends Metadata>(record: LogRecord<T>): [string, ...string[]] {\n const args: string[] = [];\n const string = formatRecordToString(\n record,\n style(this.styleToHtmlStyle, args),\n )[0];\n return [string, ...args];\n }\n}\n","import { Level } from \"nightingale-levels\";\nimport type { LogRecord, Metadata } from \"nightingale-types\";\n\nexport function consoleOutput<T extends Metadata>(\n param: [string, ...string[]],\n record: LogRecord<T>,\n): void {\n const outKey = record.level >= Level.ERROR ? \"stderr\" : \"stdout\";\n process[outKey].write(`${param[0]}\\n`);\n}\n","/* eslint-disable prefer-template */\nimport type { Handler, Level, LogRecord, Metadata } from \"nightingale-types\";\nimport { RawFormatter } from \"../formatters/RawFormatter.ts\";\n\nexport class StringHandler implements Handler {\n readonly minLevel: Level;\n\n private _buffer = \"\";\n\n constructor(minLevel: Level) {\n this.minLevel = minLevel;\n }\n\n get string(): string {\n return this._buffer;\n }\n\n handle<T extends Metadata>(record: LogRecord<T>): void {\n this._buffer += RawFormatter.format(record)[0] + \"\\n\";\n }\n}\n","export function getDebugString(): string {\n return \"\";\n}\n","import type {\n Handle,\n Handler,\n IsHandling,\n Level,\n LogRecord,\n Metadata,\n} from \"nightingale-types\";\nimport { createFindDebugLevel } from \"../debug/debug.ts\";\nimport { getDebugString } from \"../debug/getDebugString.ts\";\nimport { BrowserConsoleFormatter } from \"../formatters/BrowserConsoleFormatter.ts\";\nimport { consoleOutput } from \"../outputs/consoleOutput.ts\";\n\n// debug string can change any time (localStorage), so we need a new object each time.\nconst findDebugLevel = (minLevel: Level, key: string): Level =>\n createFindDebugLevel(getDebugString())(minLevel, key);\n\ntype Theme = \"dark\" | \"light\";\n\nconst getDefaultTheme = (): Theme => {\n try {\n const configInLocalStorage = localStorage.getItem(\"NIGHTINGALE_THEME\");\n if (configInLocalStorage && configInLocalStorage === \"dark\") {\n return configInLocalStorage;\n }\n } catch {}\n return \"light\";\n};\n\nconst createHandler = (theme: Theme = getDefaultTheme()): Handle => {\n const browserConsoleFormatter = new BrowserConsoleFormatter(theme);\n return <T extends Metadata>(record: LogRecord<T>) => {\n consoleOutput(browserConsoleFormatter.format(record), record);\n };\n};\n\nexport interface BrowserConsoleHandlerOptions {\n theme?: Theme;\n}\n\nexport class BrowserConsoleHandler implements Handler {\n minLevel: Level = 0;\n\n handle: Handle;\n\n isHandling: IsHandling;\n\n constructor(minLevel: Level, options: BrowserConsoleHandlerOptions = {}) {\n this.isHandling = (level: Level, key: string) =>\n level >= findDebugLevel(minLevel, key);\n\n this.handle = createHandler(options.theme);\n }\n}\n","import { ANSIFormatter } from \"../formatters/ANSIFormatter.ts\";\nimport { JSONFormatter } from \"../formatters/JSONFormatter.ts\";\n\nexport const defaultFormatter =\n !process.stdout.isTTY && process.env.NIGHTINGALE_CONSOLE_FORMATTER !== \"ansi\"\n ? JSONFormatter.format\n : ANSIFormatter.format;\n","import { Level } from \"nightingale-levels\";\nimport type {\n Handle,\n Handler,\n IsHandling,\n LogRecord,\n Metadata,\n} from \"nightingale-types\";\nimport { createFindDebugLevel } from \"../debug/debug.ts\";\nimport type { NightingaleFormatter } from \"../formatter-utils\";\nimport { consoleOutput } from \"../outputs/consoleOutput.ts\";\nimport { defaultFormatter } from \"./defaultFormatter.ts\";\n\nconst createHandle = (\n formatter = defaultFormatter,\n output = consoleOutput,\n): Handle => {\n return <T extends Metadata>(record: LogRecord<T>): void => {\n output(formatter(record), record);\n };\n};\nconst findDebugLevel = createFindDebugLevel(process.env.DEBUG);\n\nexport interface ConsoleHandlerOptions {\n formatter?: NightingaleFormatter[\"format\"];\n output?: <T extends Metadata>(\n param: string[] | string,\n record: LogRecord<T>,\n ) => void;\n // compat with nightingale-app-console, not used yet\n theme?: \"dark\" | \"light\";\n}\n\nexport class ConsoleHandler implements Handler {\n minLevel: Level = Level.ALL;\n\n isHandling: IsHandling;\n\n handle: Handle;\n\n constructor(minLevel: Level, options: ConsoleHandlerOptions = {}) {\n this.minLevel = minLevel;\n this.isHandling = (level: Level, key: string) =>\n level >= findDebugLevel(minLevel, key);\n this.handle = createHandle(options.formatter, options.output);\n }\n}\n","/* eslint-disable no-console */\nimport { Level } from \"nightingale-levels\";\nimport type { LogRecord, Metadata } from \"nightingale-types\";\n\nexport function cliConsoleOutput<T extends Metadata>(\n param: [string, ...string[]],\n record: LogRecord<T>,\n): void {\n console[record.level >= Level.ERROR ? \"error\" : \"log\"](...param);\n}\n","import { Level } from \"nightingale-levels\";\nimport type {\n Handle,\n Handler,\n IsHandling,\n LogRecord,\n Metadata,\n} from \"nightingale-types\";\nimport { createFindDebugLevel } from \"../debug/debug.ts\";\nimport { ANSIFormatter } from \"../formatters/ANSIFormatter.ts\";\nimport { JSONFormatter } from \"../formatters/JSONFormatter.ts\";\nimport { RawFormatter } from \"../formatters/RawFormatter.ts\";\nimport { cliConsoleOutput } from \"../outputs/cliConsoleOutput.ts\";\nimport { consoleOutput } from \"../outputs/consoleOutput.ts\";\n\nconst createHandle = ({\n json,\n noColor = process.env.NO_COLOR === \"1\" || process.env.NO_COLOR === \"true\",\n}: ConsoleCLIHandlerOptions): Handle => {\n const formatter = (() => {\n if (json) return JSONFormatter.format;\n if (noColor) return RawFormatter.format;\n return ANSIFormatter.format;\n })();\n const output = json ? consoleOutput : cliConsoleOutput;\n return <T extends Metadata>(record: LogRecord<T>): void => {\n output(formatter(record), record);\n };\n};\nconst findDebugLevel = createFindDebugLevel(process.env.DEBUG);\n\nexport interface ConsoleCLIHandlerOptions {\n json?: boolean;\n noColor?: boolean;\n}\n\nexport class ConsoleCLIHandler implements Handler {\n minLevel: Level = Level.ALL;\n\n isHandling: IsHandling;\n\n handle: Handle;\n\n constructor(minLevel: Level, options: ConsoleCLIHandlerOptions = {}) {\n this.minLevel = minLevel;\n this.isHandling = (level: Level, key: string) =>\n level >= findDebugLevel(minLevel, key);\n this.handle = createHandle(options);\n }\n}\n","import type { ComputedConfigForKey } from \"nightingale-logger\";\nimport { Level, Logger } from \"nightingale-logger\";\nimport type { Handler, Processor } from \"nightingale-types\";\nimport { ConsoleCLIHandler } from \"../handlers/ConsoleCLIHandler.ts\";\n\nexport interface LoggerCLIOptions {\n displayName?: string;\n handlers?: Handler[];\n processors?: Processor[];\n json?: boolean;\n noColor?: boolean;\n}\n\nexport class LoggerCLI extends Logger {\n private handlers: Handler[];\n private processors: Processor[] = [];\n private json: boolean;\n constructor(\n key: string,\n { displayName, processors, json = false, noColor }: LoggerCLIOptions = {},\n ) {\n super(key, displayName);\n this.handlers = [new ConsoleCLIHandler(Level.INFO, { json, noColor })];\n this.processors = processors ?? [];\n this.json = json;\n }\n\n protected override getHandlersAndProcessors(\n recordLevel: number,\n ): ComputedConfigForKey {\n return {\n handlers: this.handlers,\n processors: this.processors,\n };\n }\n\n logJsonOnly(\n messageOrError: string,\n metadata: Record<string, unknown>,\n level: Level = Level.INFO,\n ): void {\n if (this.json) {\n this.log(messageOrError, metadata, level);\n }\n }\n\n debugJsonOnly(\n messageOrError: string,\n metadata: Record<string, unknown>,\n ): void {\n if (this.json) {\n this.debug(messageOrError, metadata);\n }\n }\n\n noticeJsonOnly(\n messageOrError: string,\n metadata: Record<string, unknown>,\n ): void {\n if (this.json) {\n this.notice(messageOrError, metadata);\n }\n }\n\n infoJsonOnly(\n messageOrError: string,\n metadata: Record<string, unknown>,\n ): void {\n if (this.json) {\n this.info(messageOrError, metadata);\n }\n }\n\n warnJsonOnly(\n messageOrError: string,\n metadata: Record<string, unknown>,\n ): void {\n if (this.json) {\n this.warn(messageOrError, metadata);\n }\n }\n\n group<T, Result extends Awaited<T> | Promise<T>>(\n name: string,\n fn: () => Result,\n ): Result extends Promise<infer V> ? Promise<V> : Awaited<T> {\n if (this.json) {\n return fn() as Result extends Promise<infer V> ? Promise<V> : Awaited<T>;\n } else {\n console.group(name);\n const result = fn();\n if (result instanceof Promise) {\n return result.finally(() => {\n console.groupEnd();\n }) as Result extends Promise<infer V> ? Promise<V> : never;\n } else {\n console.groupEnd();\n return result as Result extends Promise<infer V>\n ? Promise<V>\n : Awaited<T>;\n }\n }\n }\n\n separator(): void {\n console.log();\n }\n}\n\nexport class LoggerCLIString extends LoggerCLI {\n constructor(\n key: string,\n {\n displayName,\n handlers,\n processors,\n json = false,\n noColor = false,\n }: LoggerCLIOptions = {},\n ) {\n super(key, { displayName, handlers, processors, json, noColor });\n }\n}\n","import { Logger } from \"nightingale-logger\";\n\nexport { Logger } from \"nightingale-logger\";\nexport { Level, Level as levels } from \"nightingale-levels\";\nexport { configure, addConfig } from \"./config.ts\";\nexport * from \"./formatter-utils/index.ts\";\nexport { createFindDebugLevel } from \"./debug/debug.ts\";\nexport { RawFormatter } from \"./formatters/RawFormatter.ts\";\nexport { MarkdownFormatter } from \"./formatters/MarkdownFormatter.ts\";\nexport { JSONFormatter } from \"./formatters/JSONFormatter.ts\";\nexport { ANSIFormatter } from \"./formatters/ANSIFormatter.ts\";\nexport { HTMLFormatter } from \"./formatters/HTMLFormatter.ts\";\nexport { BrowserConsoleFormatter } from \"./formatters/BrowserConsoleFormatter.ts\";\nexport { consoleOutput } from \"./outputs/consoleOutput.ts\";\nexport { StringHandler } from \"./handlers/StringHandler.ts\";\nexport { BrowserConsoleHandler } from \"./handlers/BrowserConsoleHandler.ts\";\nexport { ConsoleHandler } from \"./handlers/ConsoleHandler.ts\";\nexport { ConsoleCLIHandler } from \"./handlers/ConsoleCLIHandler.ts\";\nexport { LoggerCLI } from \"./loggers/LoggerCLI.ts\";\nexport { formatStyles } from \"./formatter-utils/formatStyles.ts\";\n\n/**\n * listen to uncaughtException and unhandledRejection\n * @param {Logger} [logger]\n */\nexport function listenUnhandledErrors(\n logger: Logger = new Logger(\n \"nightingale:listenUnhandledErrors\",\n \"UnhandledErrors\",\n ),\n): void {\n process.on(\"uncaughtException\", (error) => {\n logger.error(error, {\n unhandled: true,\n type: \"uncaughtException\",\n });\n });\n process.on(\"unhandledRejection\", (error) => {\n logger.error(error as Error, {\n unhandled: true,\n type: \"unhandledRejection\",\n });\n });\n}\n"],"names":["style","findDebugLevel","createHandle","Level"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-node22.mjs","sources":["../src/config.ts","../src/formatter-utils/levelToStyles.ts","../src/formatter-utils/levelToSymbol.ts","../src/formatter-utils/styleToHexColor.ts","../src/formatter-utils/styleToHtmlStyle.ts","../src/formatter-utils/formatStyles.ts","../src/formatter-utils/formatObject.ts","../src/formatter-utils/formatRecordToString.ts","../src/debug/debug.ts","../src/formatters/RawFormatter.ts","../src/formatters/MarkdownFormatter.ts","../src/formatters/JSONFormatter.ts","../src/formatters/ANSIFormatter.ts","../src/formatters/HTMLFormatter.ts","../src/formatters/BrowserConsoleFormatter.ts","../src/outputs/consoleOutput.target-node.ts","../src/handlers/StringHandler.ts","../src/debug/getDebugString.ts","../src/handlers/BrowserConsoleHandler.ts","../src/handlers/defaultFormatter.target-node.ts","../src/handlers/ConsoleHandler.ts","../src/outputs/cliConsoleOutput.ts","../src/handlers/ConsoleCLIHandler.ts","../src/loggers/LoggerCLI.ts","../src/index.ts"],"sourcesContent":["import type { ComputedConfigForKey, Config } from \"nightingale-logger\";\nimport type { Handler, Level } from \"nightingale-types\";\n\nconst globalOrWindow: typeof global =\n typeof global !== \"undefined\" ? global : window;\n\nif (\n process.env.NODE_ENV !== \"production\" &&\n globalOrWindow.__NIGHTINGALE_GLOBAL_HANDLERS\n) {\n throw new Error(\"nightingale: update all to ^5.0.0\");\n}\n\nif (!globalOrWindow.__NIGHTINGALE_CONFIG) {\n globalOrWindow.__NIGHTINGALE_CONFIG = [];\n globalOrWindow.__NIGHTINGALE_LOGGER_MAP_CACHE = new Map<\n string,\n ComputedConfigForKey\n >();\n globalOrWindow.__NIGHTINGALE_CONFIG_DEFAULT = {\n handlers: [],\n processors: [],\n };\n}\n\nfunction clearCache(): void {\n globalOrWindow.__NIGHTINGALE_LOGGER_MAP_CACHE.clear();\n}\n\nfunction handleConfig(config: Config): Config {\n if (config.keys) {\n if (config.pattern) {\n throw new Error(\"Cannot have key and pattern for the same config\");\n }\n if (config.key) {\n throw new Error(\"Cannot have key and keys for the same config\");\n }\n } else if (config.key) {\n if (config.pattern) {\n throw new Error(\"Cannot have key and pattern for the same config\");\n }\n config.keys = [config.key];\n delete config.key;\n }\n\n if (config.handler) {\n if (config.handlers) {\n throw new Error(\"Cannot have handler and handlers for the same config\");\n }\n config.handlers = [config.handler];\n delete config.handler;\n }\n\n if (config.processor) {\n if (config.processors) {\n throw new Error(\n \"Cannot have processors and processors for the same config\",\n );\n }\n config.processors = [config.processor];\n delete config.processor;\n }\n\n return config;\n}\n\nexport function configure(config: Config[]): void {\n if (globalOrWindow.__NIGHTINGALE_CONFIG.length > 0) {\n // eslint-disable-next-line no-console\n console.log(\"nightingale: warning: config overridden\");\n }\n\n clearCache();\n globalOrWindow.__NIGHTINGALE_CONFIG = config.map(handleConfig);\n}\n\nexport function addConfig(config: Config, unshift = false): void {\n config = handleConfig(config);\n globalOrWindow.__NIGHTINGALE_CONFIG[unshift ? \"unshift\" : \"push\"](config);\n clearCache();\n}\n\nconst configIsForKey = (key: string) => (config: Config) => {\n if (config.keys) return config.keys.includes(key);\n if (config.pattern) return config.pattern.test(key);\n return true;\n};\n\nglobalOrWindow.__NIGHTINGALE_GET_CONFIG_FOR_LOGGER = (\n key: string,\n): ComputedConfigForKey => {\n const globalCache = globalOrWindow.__NIGHTINGALE_LOGGER_MAP_CACHE;\n\n const existingCache = globalCache.get(key);\n\n if (existingCache) {\n return existingCache;\n }\n\n const loggerConfig: ComputedConfigForKey = {\n handlers: [],\n processors: [],\n };\n\n globalOrWindow.__NIGHTINGALE_CONFIG\n .filter(configIsForKey(key))\n .some((config: Config) => {\n if (config.handlers) loggerConfig.handlers.push(...config.handlers);\n if (config.processors) loggerConfig.processors.push(...config.processors);\n return config.stop;\n });\n\n globalCache.set(key, loggerConfig);\n return loggerConfig;\n};\n\nif (globalOrWindow.__NIGHTINGALE_GET_CONFIG_FOR_LOGGER_RECORD) {\n globalOrWindow.__NIGHTINGALE_GET_CONFIG_FOR_LOGGER_RECORD = (\n key: string,\n level: Level,\n ): ComputedConfigForKey => {\n const { handlers, processors }: ComputedConfigForKey =\n globalOrWindow.__NIGHTINGALE_GET_CONFIG_FOR_LOGGER(key);\n\n return {\n handlers: handlers.filter(\n (handler: Handler) =>\n level >= handler.minLevel &&\n (!handler.isHandling || handler.isHandling(level, key)),\n ),\n processors,\n };\n };\n}\n","import { Level } from \"nightingale-levels\";\n\nexport type LevelToStyles = Readonly<Record<number, string[]>>;\n\nexport const levelToStyles: LevelToStyles = {\n [Level.TRACE]: [\"gray\"],\n [Level.DEBUG]: [\"gray\"],\n // [Level.INFO]: ['gray'],\n [Level.WARN]: [\"yellow\"],\n [Level.ERROR]: [\"red\", \"bold\"],\n [Level.CRITICAL]: [\"red\", \"bold\"],\n [Level.FATAL]: [\"bgRed\", \"white\"],\n [Level.EMERGENCY]: [\"bgRed\", \"white\"],\n};\n","import { Level } from \"nightingale-levels\";\n\nexport type LevelToSymbol = Readonly<Record<number, string>>;\n\nexport const levelToSymbol: LevelToSymbol = {\n [Level.TRACE]: \"•\",\n [Level.DEBUG]: \"•\",\n [Level.INFO]: \"→\",\n [Level.WARN]: \"⚠\",\n [Level.ERROR]: \"✖\",\n [Level.CRITICAL]: \"!\",\n [Level.FATAL]: \"‼\",\n [Level.EMERGENCY]: \"‼\",\n};\n","export const styleToHexColor = {\n orange: \"ff5f00\",\n} as const;\n\nexport type StyleToHexColor = Readonly<\n Record<keyof typeof styleToHexColor, string>\n>;\n","import { styleToHexColor } from \"./styleToHexColor.ts\";\n\nexport interface HtmlStyle {\n readonly open: string;\n readonly close: string;\n}\n\nexport const styleToHtmlStyleThemeLight = {\n // text style\n bold: { open: \"font-weight: bold\", close: \"font-weight: normal\" },\n italic: { open: \"font-style: italic\", close: \"font-style: normal\" },\n underline: {\n open: \"text-decoration: underline\",\n close: \"text-decoration: none\",\n },\n inverse: {\n open: \"unicode-bidi: bidi-override; direction: rtl\",\n close: \"unicode-bidi: normal; direction: ltr\",\n },\n strikethrough: {\n open: \"text-decoration: line-through\",\n close: \"text-decoration: none\",\n },\n\n black: { open: \"color: black\", close: \"color: currentcolor\" },\n red: { open: \"color: #ff0020\", close: \"color: currentcolor\" },\n green: { open: \"color: #00b317\", close: \"color: currentcolor\" },\n yellow: { open: \"color: #ffcc00\", close: \"color: currentcolor\" },\n blue: { open: \"color: #00a0ff\", close: \"color: currentcolor\" },\n magenta: { open: \"color: #ff00a0\", close: \"color: currentcolor\" },\n cyan: { open: \"color: #00cfd8\", close: \"color: currentcolor\" },\n white: { open: \"color: white\", close: \"color: currentcolor\" },\n gray: { open: \"color: gray\", close: \"color: currentcolor\" },\n dim: { open: \"color: #808080\", close: \"color: currentcolor\" },\n\n bgBlack: { open: \"background: black\", close: \"background: initial\" },\n bgRed: { open: \"background: #ff0020\", close: \"background: initial\" },\n bgGreen: { open: \"background: #00b317\", close: \"background: initial\" },\n bgYellow: { open: \"background: #ffcc00\", close: \"background: initial\" },\n bgBlue: { open: \"background: #00a0ff\", close: \"background: initial\" },\n bgMagenta: { open: \"background: #ff00a0\", close: \"background: initial\" },\n bgCyan: { open: \"background: #00cfd8\", close: \"background: initial\" },\n bgWhite: { open: \"background: white\", close: \"background: initial\" },\n\n orange: {\n open: `color: #${styleToHexColor.orange}`,\n close: \"color: currentcolor\",\n },\n} as const;\n\nexport type StyleToHtmlStyle = Readonly<\n Record<keyof typeof styleToHtmlStyleThemeLight, HtmlStyle>\n>;\n\nexport const styleToHtmlStyleThemeDark: StyleToHtmlStyle = {\n ...styleToHtmlStyleThemeLight,\n black: styleToHtmlStyleThemeLight.white,\n bgBlack: styleToHtmlStyleThemeLight.bgWhite,\n white: styleToHtmlStyleThemeLight.black,\n bgWhite: styleToHtmlStyleThemeLight.bgBlack,\n gray: { open: \"color: lightgray\", close: \"color: currentcolor\" },\n};\n","/* eslint sort-keys: error */\n\nexport const formatStyles = {\n bigint: [\"yellow\", \"bold\"],\n boolean: [\"green\"],\n date: [\"magenta\"],\n error: [\"red\"],\n function: [\"blue\"],\n null: [\"bold\"],\n number: [\"yellow\"],\n regexp: [\"magenta\"],\n string: [\"orange\"],\n symbol: [\"magenta\"],\n undefined: [\"dim\"],\n};\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type { Styles } from \"nightingale-types\";\nimport { formatStyles } from \"./formatStyles.ts\";\n\nexport interface FormatObjectOptions {\n padding?: string;\n maxDepth?: number;\n}\n\nexport type StyleFn = (styles: Styles, value: string) => string;\n\nexport type ObjectStyles<Keys extends string = string> = Record<Keys, Styles>;\n\nconst noStyleFn: StyleFn = (styles: Styles, value: string): string => value;\n\ninterface InternalFormatParams {\n padding: string;\n depth: number;\n maxDepth: number;\n objects: Set<unknown>;\n}\n\ninterface FormattedKey {\n stringKey: string;\n formattedKey: string;\n}\n\ntype FormatKey<Key> = (\n key: Key,\n styleFn: StyleFn,\n internalFormatParams: InternalFormatParams,\n) => FormattedKey;\n\ninterface Value<Key> {\n key: Key;\n value: unknown;\n}\n\ninterface FormattedValue {\n stringValue: string;\n formattedValue: string;\n}\n\ntype Values<Key> = Value<Key>[];\n\ninterface InternalFormatIteratorParams<Key> {\n prefix: string;\n suffix: string;\n formatKey: FormatKey<Key>;\n prefixSuffixSpace?: string;\n}\n\nfunction tryStringify(arg: unknown): string {\n try {\n return JSON.stringify(arg).replace(/\\\\n/g, \"\\n\");\n } catch {\n return \"[Circular]\";\n }\n}\n\nconst sameRawFormattedValue = (value: string): FormattedValue => ({\n stringValue: value,\n formattedValue: value,\n});\n\nconst numericSeparator = \"_\";\n\nconst formatIntegerValue = (integerAsString: string): string => {\n let result = \"\";\n let i = integerAsString.length;\n const start = integerAsString.startsWith(\"-\") ? 1 : 0;\n for (; i >= start + 4; i -= 3) {\n result = `${numericSeparator}${integerAsString.slice(i - 3, i)}${result}`;\n }\n return i === integerAsString.length\n ? integerAsString\n : `${integerAsString.slice(0, i)}${result}`;\n};\n\nconst formatDecimalIntegerValue = (integerAsString: string): string => {\n let result = \"\";\n let i = 0;\n for (; i < integerAsString.length - 3; i += 3) {\n result += `${integerAsString.slice(i, i + 3)}${numericSeparator}`;\n }\n return i === 0 ? integerAsString : `${result}${integerAsString.slice(i)}`;\n};\n\nconst formatNumberValue = (value: number): string => {\n if (Number.isNaN(value)) {\n return \"NaN\";\n }\n if (value === Number.POSITIVE_INFINITY) {\n return \"+Infinity\";\n }\n if (value === Number.NEGATIVE_INFINITY) {\n return \"-Infinity\";\n }\n if (value === Number.EPSILON) {\n return \"Epsilon\";\n }\n if (Object.is(value, -0)) {\n return \"-0\";\n }\n const integer = Math.trunc(value);\n const integerAsString = integer.toString();\n if (integer === value) {\n if (integerAsString.includes(\"e\")) {\n return integerAsString;\n }\n return formatIntegerValue(integerAsString);\n } else {\n return `${formatIntegerValue(integerAsString)}.${formatDecimalIntegerValue(String(value).slice(integerAsString.length + 1))}`;\n }\n};\n\nfunction internalFormatValue(\n value: unknown,\n styleFn: StyleFn,\n styles: Styles,\n { padding, depth, maxDepth, objects }: InternalFormatParams,\n): FormattedValue {\n const typeofValue = typeof value;\n\n if (!styles) {\n if (value === null) {\n styles = [\"bold\"];\n } else {\n switch (typeofValue) {\n case \"bigint\":\n styles = formatStyles.bigint;\n break;\n case \"boolean\":\n styles = formatStyles.boolean;\n break;\n case \"undefined\":\n styles = formatStyles.undefined;\n break;\n case \"number\":\n styles = formatStyles.number;\n break;\n case \"string\":\n styles = formatStyles.string;\n break;\n case \"symbol\":\n styles = formatStyles.symbol;\n break;\n case \"object\":\n if (value instanceof Date) {\n styles = formatStyles.date;\n }\n if (value instanceof RegExp) {\n styles = formatStyles.regexp;\n }\n if (value instanceof Error) {\n styles = formatStyles.error;\n }\n break;\n case \"function\":\n styles = formatStyles.function;\n break;\n default:\n break;\n }\n }\n }\n\n let stringValue: string;\n if (value === null) {\n stringValue = \"null\";\n } else if (value === undefined) {\n stringValue = \"undefined\";\n } else if (typeofValue === \"number\") {\n stringValue = formatNumberValue(value as number);\n } else if (typeofValue === \"boolean\") {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n stringValue = (value as any).toString() as string;\n } else if ((value as () => unknown).constructor === Object) {\n if (depth >= maxDepth) {\n stringValue = \"{Object...}\";\n } else {\n return internalFormatObject(\n value as Record<string, unknown>,\n styleFn,\n undefined,\n {\n padding,\n depth: depth + 1,\n maxDepth,\n objects,\n },\n );\n }\n } else if (Array.isArray(value)) {\n if (depth >= maxDepth) {\n stringValue = \"[Array...]\";\n } else {\n return internalFormatArray(value, styleFn, {\n padding,\n depth: depth + 1,\n maxDepth,\n objects,\n });\n }\n } else if (value instanceof Error) {\n const stack = value.stack;\n stringValue =\n stack?.startsWith(value.message) ||\n stack?.startsWith(`${value.name}: ${value.message}`)\n ? stack\n : `${value.message}\\n${stack || \"\"}`;\n } else if (value instanceof Map) {\n const name = value.constructor.name;\n if (depth >= maxDepth) {\n stringValue = `{${name}...}`;\n } else {\n return internalFormatMap(name, value, styleFn, {\n padding,\n depth: depth + 1,\n maxDepth,\n objects,\n });\n }\n } else if (typeofValue === \"bigint\") {\n stringValue = `[BigInt: ${(value as bigint).toString()}]`;\n } else if (typeofValue === \"symbol\") {\n stringValue = (value as symbol).toString();\n } else if (value instanceof Set) {\n const name = value.constructor.name;\n if (depth >= maxDepth) {\n stringValue = `{${name}...}`;\n } else {\n return internalFormatSet(name, value, styleFn, {\n padding,\n depth: depth + 1,\n maxDepth,\n objects,\n });\n }\n } else if (value instanceof WeakMap) {\n stringValue = \"{WeakMap...}\";\n } else if (value instanceof WeakSet) {\n stringValue = \"{WeakSet...}\";\n } else if (value instanceof Date) {\n stringValue = `[Date: ${value.toISOString()}]`;\n } else if (value instanceof RegExp) {\n stringValue = `[RegExp: ${value.toString()}]`;\n } else if (typeof value === \"function\") {\n stringValue = `[Function: ${value.name}]`;\n } else {\n stringValue = tryStringify(value);\n }\n\n const formattedValue = styleFn(styles, stringValue);\n\n return {\n stringValue,\n formattedValue,\n };\n}\n\nconst separator = \",\";\n\nconst internalFormatKey: FormatKey<string> = (\n key: string,\n styleFn: StyleFn,\n internalFormatParams: InternalFormatParams,\n): FormattedKey => {\n return {\n stringKey: `${key}: `,\n formattedKey: `${styleFn([\"dim\", \"bold\"], `${key}:`)} `,\n };\n};\n\nconst internalNoKey: FormatKey<undefined> = (\n key: string | undefined,\n styleFn: StyleFn,\n internalFormatParams: InternalFormatParams,\n): FormattedKey => {\n return { stringKey: \"\", formattedKey: \"\" };\n};\n\nconst internalFormatMapKey: FormatKey<unknown> = (\n key: unknown,\n styleFn: StyleFn,\n internalFormatParams: InternalFormatParams,\n): FormattedKey => {\n const { stringValue, formattedValue } = internalFormatValue(\n key,\n noStyleFn,\n undefined,\n internalFormatParams,\n );\n return {\n stringKey: `${stringValue} => `,\n formattedKey: `${styleFn([\"dim\", \"bold\"], `${formattedValue}:`)} `,\n };\n};\n\nconst internalFormatIterator = <Key>(\n values: Values<Key>,\n styleFn: StyleFn,\n objectStyles: ObjectStyles | undefined,\n { padding, depth, maxDepth, objects }: InternalFormatParams,\n {\n prefix,\n suffix,\n prefixSuffixSpace = \" \",\n formatKey,\n }: InternalFormatIteratorParams<Key>,\n): FormattedValue => {\n let breakLine = false;\n const formattedSeparator = (): string => styleFn([\"gray\"], separator);\n\n const valuesMaxIndex = values.length - 1;\n const formattedValues: FormattedValue[] = values.map(\n ({ key, value }, index: number) => {\n const nextDepth = depth + 1;\n const internalFormatParams = {\n padding,\n depth: nextDepth,\n maxDepth,\n objects,\n };\n\n // key must be formatted before value (browser-formatter needs order)\n const { stringKey, formattedKey } = formatKey(\n key,\n styleFn,\n internalFormatParams,\n );\n\n let { stringValue, formattedValue } = internalFormatValue(\n value,\n styleFn,\n key && objectStyles\n ? objectStyles[key as unknown as string]\n : undefined,\n internalFormatParams,\n );\n\n if (\n stringValue &&\n (stringValue.length > 80 || stringValue.includes(\"\\n\"))\n ) {\n breakLine = true;\n stringValue = stringValue.replace(/\\n/g, `\\n${padding}`);\n formattedValue = formattedValue.replace(/\\n/g, `\\n${padding}`);\n }\n\n return {\n stringValue:\n stringKey + stringValue + (index === valuesMaxIndex ? \"\" : separator),\n formattedValue:\n formattedKey +\n formattedValue +\n (index === valuesMaxIndex ? \"\" : formattedSeparator()),\n // note: we need to format the separator for each values for browser-formatter\n };\n },\n );\n\n return {\n stringValue:\n prefix +\n formattedValues\n .map(\n breakLine\n ? (v) => `\\n${padding}${v.stringValue}`\n : (fv) => fv.stringValue,\n )\n .join(breakLine ? \"\\n\" : \" \") +\n suffix,\n formattedValue: `${prefix}${\n breakLine ? \"\" : prefixSuffixSpace\n }${formattedValues\n .map(\n breakLine\n ? (v) => `\\n${padding}${v.formattedValue}`\n : (v) => v.formattedValue,\n )\n .join(breakLine ? \"\" : \" \")}${\n breakLine ? \",\\n\" : prefixSuffixSpace\n }${suffix}`,\n };\n};\n\nfunction internalFormatObject(\n object: Record<string, unknown>,\n styleFn: StyleFn,\n objectStyles: ObjectStyles | undefined,\n { padding, depth, maxDepth, objects }: InternalFormatParams,\n): FormattedValue {\n if (objects.has(object)) {\n return sameRawFormattedValue(\"{Circular Object}\");\n }\n\n const keys: string[] = Object.keys(object);\n if (keys.length === 0) {\n return sameRawFormattedValue(\"{}\");\n }\n\n objects.add(object);\n\n const result = internalFormatIterator(\n keys.map((key) => ({ key, value: object[key] })),\n styleFn,\n objectStyles,\n { padding, depth, maxDepth, objects },\n { prefix: \"{\", suffix: \"}\", formatKey: internalFormatKey },\n );\n\n objects.delete(object);\n\n return result;\n}\n\nfunction internalFormatMap(\n name: string,\n map: Map<unknown, unknown>,\n styleFn: StyleFn,\n { padding, depth, maxDepth, objects }: InternalFormatParams,\n): FormattedValue {\n if (objects.has(map)) {\n return sameRawFormattedValue(`{Circular ${name}}`);\n }\n\n const keys = [...map.keys()];\n if (keys.length === 0) {\n return sameRawFormattedValue(`${name} {}`);\n }\n\n objects.add(map);\n\n const result = internalFormatIterator(\n keys.map((key) => ({ key, value: map.get(key) })),\n styleFn,\n undefined,\n { padding, depth, maxDepth, objects },\n { prefix: `${name} {`, suffix: \"}\", formatKey: internalFormatMapKey },\n );\n\n objects.delete(map);\n\n return result;\n}\n\nfunction internalFormatArray(\n array: unknown[],\n styleFn: StyleFn,\n { padding, depth, maxDepth, objects }: InternalFormatParams,\n): FormattedValue {\n if (objects.has(array)) {\n return sameRawFormattedValue(\"{Circular Array}\");\n }\n\n if (array.length === 0) {\n return sameRawFormattedValue(\"[]\");\n }\n\n objects.add(array);\n\n const result = internalFormatIterator(\n array.map((value) => ({ key: undefined, value })),\n styleFn,\n undefined,\n { padding, depth, maxDepth, objects },\n {\n prefix: \"[\",\n suffix: \"]\",\n prefixSuffixSpace: \"\",\n formatKey: internalNoKey,\n },\n );\n\n objects.delete(array);\n\n return result;\n}\n\nfunction internalFormatSet(\n name: string,\n set: Set<unknown>,\n styleFn: StyleFn,\n { padding, depth, maxDepth, objects }: InternalFormatParams,\n): FormattedValue {\n if (objects.has(set)) {\n return sameRawFormattedValue(`{Circular ${name}}`);\n }\n\n const values = [...set.values()];\n if (values.length === 0) {\n return sameRawFormattedValue(`${name} []`);\n }\n\n objects.add(set);\n\n const result = internalFormatIterator(\n values.map((value) => ({ key: undefined, value })),\n styleFn,\n undefined,\n { padding, depth, maxDepth, objects },\n { prefix: `${name} [`, suffix: \"]\", formatKey: internalNoKey },\n );\n\n objects.delete(set);\n\n return result;\n}\n\nexport function formatObject(\n object: Record<string, unknown>,\n styleFn: StyleFn = noStyleFn,\n objectStyles?: ObjectStyles,\n { padding = \" \", maxDepth = 10 }: FormatObjectOptions = {},\n): string {\n const { formattedValue: result } = internalFormatObject(\n object,\n styleFn,\n objectStyles,\n {\n padding,\n maxDepth,\n depth: 0,\n objects: new Set(),\n },\n );\n\n if (result === \"{}\") {\n return \"\";\n }\n\n return result;\n}\n","import type { LogRecord, Metadata } from \"nightingale-types\";\nimport type { ObjectStyles, StyleFn } from \"./formatObject.ts\";\nimport { formatObject } from \"./formatObject.ts\";\nimport { levelToStyles } from \"./levelToStyles.ts\";\nimport { levelToSymbol } from \"./levelToSymbol.ts\";\n\nexport function formatRecordToString<T extends Metadata>(\n record: LogRecord<T>,\n style: StyleFn,\n): [string, ...string[]] {\n const parts: string[] = [];\n\n if (record.displayName) {\n parts.push(style([\"dim\"], record.displayName));\n } else if (record.key) {\n parts.push(style([\"dim\"], record.key));\n }\n\n if (record.datetime) {\n parts.push(\n style([\"gray\", \"bold\"], record.datetime.toTimeString().split(\" \", 2)[0]!),\n );\n /* new Date().toFormat('HH24:MI:SS') */\n }\n\n let message: string = record.symbol || levelToSymbol[record.level] || \"\";\n const styles = record.styles || levelToStyles[record.level];\n\n if (record.message) {\n if (message) {\n message += ` ${record.message}`;\n } else {\n message = record.message;\n }\n }\n\n if (message) {\n if (styles) {\n message = style(styles, message);\n }\n parts.push(message);\n }\n\n const formatRecordObject = (\n key: string,\n object: Record<string, unknown> | undefined,\n objectStyles: ObjectStyles | undefined,\n ): void => {\n if (!object) {\n return;\n }\n\n const stringObject = formatObject(object, style, objectStyles);\n\n if (!stringObject) {\n return;\n }\n\n parts.push(stringObject);\n };\n\n formatRecordObject(\"metadata\", record.metadata, record.metadataStyles);\n formatRecordObject(\"extra\", record.extra, undefined);\n formatRecordObject(\"context\", record.context, undefined);\n\n return [parts.join(\" \")];\n}\n","/* eslint-disable complexity */\nimport { Level } from \"nightingale-levels\";\n\nconst specialRegexpChars = /[$()+.?[\\\\\\]^{|}]/;\n\ntype TestFunction = (string: string) => boolean;\nexport type DebugValueType = RegExp | string[] | string;\n\nconst createTestFunctionFromRegexp =\n (regexp: RegExp): TestFunction =>\n (string: string) =>\n regexp.test(string);\n\nconst createTestFunctionFromRegexpString = (value: string): TestFunction => {\n if (!value.endsWith(\"/\")) throw new Error(\"Invalid RegExp DEBUG value\");\n return createTestFunctionFromRegexp(new RegExp(value.slice(1, -1)));\n};\n\nconst createTestFunctionFromValue = (value: string): TestFunction => {\n if (value.endsWith(\":*\")) {\n value = value.slice(0, -2);\n return (string: string) => string.startsWith(value);\n }\n\n return (string: string) => string === value;\n};\n\nexport type FindDebugLevel = (minLevel: Level, key: string) => Level;\n\nexport function createFindDebugLevel(\n debugValue?: DebugValueType,\n): FindDebugLevel {\n let isWildcard = false;\n const debugValues: TestFunction[] = [];\n const skips: TestFunction[] = [];\n\n if (!Array.isArray(debugValue)) {\n if (debugValue instanceof RegExp) {\n debugValues.push(createTestFunctionFromRegexp(debugValue));\n debugValue = undefined;\n } else if (debugValue) {\n debugValue = debugValue.trim();\n\n if (debugValue.startsWith(\"/\")) {\n debugValues.push(createTestFunctionFromRegexpString(debugValue));\n debugValue = undefined;\n } else {\n debugValue = debugValue.split(/[\\s,]+/);\n }\n }\n }\n\n if (debugValue) {\n (debugValue as string[]).forEach((value) => {\n if (specialRegexpChars.test(value)) {\n throw new Error(\n `Invalid debug value: \"${value}\" (contains special chars)`,\n );\n }\n\n if (!value) return;\n\n if (value === \"*\") {\n isWildcard = true;\n return;\n }\n\n if (value.startsWith(\"-\")) {\n skips.push(createTestFunctionFromValue(value.slice(1)));\n } else if (!isWildcard) {\n debugValues.push(createTestFunctionFromValue(value));\n }\n });\n }\n\n if (isWildcard) {\n if (skips.length === 0) {\n return () => Level.ALL;\n } else {\n return (minLevel: Level, key: string) =>\n skips.some((skip) => skip(key)) ? minLevel : Level.ALL;\n }\n }\n\n if (debugValues.length === 0) {\n return (minLevel: Level) => minLevel;\n }\n\n return (minLevel: Level, key: string) => {\n if (minLevel === Level.ALL || !key) {\n return minLevel;\n }\n\n if (debugValues.some((dv) => dv(key))) {\n return skips.some((skip) => skip(key)) ? minLevel : Level.ALL;\n }\n\n return minLevel;\n };\n}\n","import type { Styles } from \"nightingale-types\";\nimport type { NightingaleFormatter } from \"../formatter-utils\";\nimport { formatRecordToString } from \"../formatter-utils/index.ts\";\n\nexport function style(styles: Styles, value: string): string {\n return value;\n}\n\nexport const RawFormatter: NightingaleFormatter = {\n format(record) {\n return formatRecordToString(record, style);\n },\n};\n","import type { Styles } from \"nightingale-types\";\nimport type { NightingaleFormatter } from \"../formatter-utils\";\nimport { formatRecordToString } from \"../formatter-utils/index.ts\";\n\nexport function style(styles: Styles, string: string): string {\n if (!styles || styles.length === 0 || !string) {\n return string;\n }\n\n // eslint-disable-next-line unicorn/no-array-reduce\n return styles.reduce((part, styleName) => {\n switch (styleName) {\n case \"bold\":\n return `*${part}*`;\n case \"italic\":\n return `_${part}_`;\n case \"strikethrough\":\n return `~${part}~`;\n\n // no default\n }\n\n return part;\n }, string);\n}\n\nexport const MarkdownFormatter: NightingaleFormatter = {\n format(record) {\n return formatRecordToString(record, style);\n },\n};\n","import type { NightingaleFormatter } from \"../formatter-utils\";\n\nfunction map2object(map: Map<unknown, unknown>): unknown {\n const object: Record<string, unknown> = {};\n\n map.forEach((value, key) => {\n if (typeof key === \"object\") {\n // ignore key\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n object[String(key)] = value;\n });\n\n return object;\n}\n\nfunction stringify(value: unknown, space?: number | string): string {\n return JSON.stringify(\n value,\n (key, objectValue) => {\n if (objectValue instanceof Map) {\n return map2object(objectValue);\n }\n if (objectValue instanceof Error) {\n return {\n message: objectValue.message,\n stack: objectValue.stack,\n };\n }\n\n return objectValue as unknown;\n },\n space,\n );\n}\n\nexport const JSONFormatter: NightingaleFormatter = {\n format(record) {\n return [\n stringify({\n key: record.key,\n level: record.level,\n datetime: record.datetime,\n message: record.message,\n metadata: record.metadata,\n extra: record.extra,\n }),\n ];\n },\n};\n\nexport const JSONCLIFormatter: NightingaleFormatter = {\n format(record) {\n return [\n stringify({\n key: record.key,\n time: record.datetime.toTimeString().split(\" \", 2)[0]!,\n message: record.message,\n ...record.metadata,\n ...record.extra,\n }),\n ];\n },\n};\n","import ansi from \"ansi-styles\";\nimport type { Styles } from \"nightingale-types\";\nimport type { NightingaleFormatter } from \"nightingale\";\nimport {\n formatRecordToString,\n styleToHexColor,\n} from \"../formatter-utils/index.ts\";\n\nexport type { Styles } from \"nightingale-types\";\n\ninterface CodePair {\n open: string;\n close: string;\n}\n\ntype AnsiStyles = Record<string, CodePair | undefined>;\n\nconst ansiStyles: AnsiStyles = {\n black: ansi.black,\n red: ansi.red,\n green: ansi.green,\n yellow: ansi.yellow,\n blue: ansi.blue,\n magenta: ansi.magenta,\n cyan: ansi.cyan,\n white: ansi.white,\n gray: ansi.gray,\n dim: ansi.dim,\n\n bgBlack: ansi.bgBlack,\n bgRed: ansi.bgRed,\n bgGreen: ansi.bgGreen,\n bgYellow: ansi.bgYellow,\n bgBlue: ansi.bgBlue,\n bgMagenta: ansi.bgMagenta,\n bgCyan: ansi.bgCyan,\n bgWhite: ansi.bgWhite,\n\n bold: ansi.bold,\n underline: ansi.underline,\n\n // http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html\n orange: {\n open: ansi.color.ansi256(ansi.hexToAnsi256(styleToHexColor.orange)),\n close: ansi.color.close,\n },\n};\n\nexport function style(styles: Styles, string: string): string {\n if (!styles || styles.length === 0 || !string) {\n return string;\n }\n\n // eslint-disable-next-line unicorn/no-array-reduce\n return styles.reduce((styledString: string, styleName: string) => {\n const codePair: CodePair | undefined = ansiStyles[styleName];\n\n if (!codePair) {\n throw new Error(`Unknown style: ${styleName}`);\n }\n\n return codePair.open + styledString + codePair.close;\n }, string);\n}\n\nexport const ANSIFormatter: NightingaleFormatter = {\n format: (record) => formatRecordToString(record, style),\n};\n","import type { Styles } from \"nightingale-types\";\nimport type {\n NightingaleFormatter,\n StyleToHtmlStyle,\n} from \"../formatter-utils\";\nimport {\n formatRecordToString,\n styleToHtmlStyleThemeLight,\n} from \"../formatter-utils/index.ts\";\n\nexport function style(styles: Styles, string: string): string {\n if (!styles || styles.length === 0 || !string) {\n return string;\n }\n\n return `<span style=\"${styles\n .map(\n (styleName) =>\n styleToHtmlStyleThemeLight[styleName as keyof StyleToHtmlStyle].open,\n )\n .join(\"; \")}\">${string}</span>`;\n}\n\nexport const HTMLFormatter: NightingaleFormatter = {\n format(record) {\n return formatRecordToString(record, style);\n },\n};\n","import type { LogRecord, Metadata, Styles } from \"nightingale-types\";\nimport type { StyleToHtmlStyle } from \"nightingale\";\nimport type { NightingaleFormatter } from \"../formatter-utils\";\nimport {\n formatRecordToString,\n styleToHtmlStyleThemeDark,\n styleToHtmlStyleThemeLight,\n} from \"../formatter-utils/index.ts\";\n\nexport const style =\n (styleToHtmlStyle: StyleToHtmlStyle, args: string[]) =>\n (styles: Styles, string: string): string => {\n if (!styles || styles.length === 0 || !string) {\n return string;\n }\n\n const htmlStyles = styles.map(\n (styleName) => styleToHtmlStyle[styleName as keyof StyleToHtmlStyle],\n );\n\n args.push(\n htmlStyles.map((s) => s.open).join(\"; \"),\n htmlStyles.map((s) => s.close).join(\"; \"),\n );\n return `%c${string}%c`;\n };\n\nexport class BrowserConsoleFormatter implements NightingaleFormatter {\n styleToHtmlStyle: StyleToHtmlStyle;\n constructor(theme: \"dark\" | \"light\" = \"light\") {\n this.styleToHtmlStyle =\n theme === \"dark\" ? styleToHtmlStyleThemeDark : styleToHtmlStyleThemeLight;\n }\n\n format<T extends Metadata>(record: LogRecord<T>): [string, ...string[]] {\n const args: string[] = [];\n const string = formatRecordToString(\n record,\n style(this.styleToHtmlStyle, args),\n )[0];\n return [string, ...args];\n }\n}\n","import { Level } from \"nightingale-levels\";\nimport type { LogRecord, Metadata } from \"nightingale-types\";\n\nexport function consoleOutput<T extends Metadata>(\n param: [string, ...string[]],\n record: LogRecord<T>,\n): void {\n const outKey = record.level >= Level.ERROR ? \"stderr\" : \"stdout\";\n process[outKey].write(`${param[0]}\\n`);\n}\n","/* eslint-disable prefer-template */\nimport type { Handler, Level, LogRecord, Metadata } from \"nightingale-types\";\nimport { RawFormatter } from \"../formatters/RawFormatter.ts\";\n\nexport class StringHandler implements Handler {\n readonly minLevel: Level;\n\n private _buffer = \"\";\n\n constructor(minLevel: Level) {\n this.minLevel = minLevel;\n }\n\n get string(): string {\n return this._buffer;\n }\n\n handle<T extends Metadata>(record: LogRecord<T>): void {\n this._buffer += RawFormatter.format(record)[0] + \"\\n\";\n }\n}\n","export function getDebugString(): string {\n return \"\";\n}\n","import type {\n Handle,\n Handler,\n IsHandling,\n Level,\n LogRecord,\n Metadata,\n} from \"nightingale-types\";\nimport { createFindDebugLevel } from \"../debug/debug.ts\";\nimport { getDebugString } from \"../debug/getDebugString.ts\";\nimport { BrowserConsoleFormatter } from \"../formatters/BrowserConsoleFormatter.ts\";\nimport { consoleOutput } from \"../outputs/consoleOutput.ts\";\n\n// debug string can change any time (localStorage), so we need a new object each time.\nconst findDebugLevel = (minLevel: Level, key: string): Level =>\n createFindDebugLevel(getDebugString())(minLevel, key);\n\ntype Theme = \"dark\" | \"light\";\n\nconst getDefaultTheme = (): Theme => {\n try {\n const configInLocalStorage = localStorage.getItem(\"NIGHTINGALE_THEME\");\n if (configInLocalStorage && configInLocalStorage === \"dark\") {\n return configInLocalStorage;\n }\n } catch {}\n return \"light\";\n};\n\nconst createHandler = (theme: Theme = getDefaultTheme()): Handle => {\n const browserConsoleFormatter = new BrowserConsoleFormatter(theme);\n return <T extends Metadata>(record: LogRecord<T>) => {\n consoleOutput(browserConsoleFormatter.format(record), record);\n };\n};\n\nexport interface BrowserConsoleHandlerOptions {\n theme?: Theme;\n}\n\nexport class BrowserConsoleHandler implements Handler {\n minLevel: Level = 0;\n\n handle: Handle;\n\n isHandling: IsHandling;\n\n constructor(minLevel: Level, options: BrowserConsoleHandlerOptions = {}) {\n this.isHandling = (level: Level, key: string) =>\n level >= findDebugLevel(minLevel, key);\n\n this.handle = createHandler(options.theme);\n }\n}\n","import { ANSIFormatter } from \"../formatters/ANSIFormatter.ts\";\nimport { JSONFormatter } from \"../formatters/JSONFormatter.ts\";\n\nexport const defaultFormatter =\n !process.stdout.isTTY && process.env.NIGHTINGALE_CONSOLE_FORMATTER !== \"ansi\"\n ? JSONFormatter.format\n : ANSIFormatter.format;\n","import { Level } from \"nightingale-levels\";\nimport type {\n Handle,\n Handler,\n IsHandling,\n LogRecord,\n Metadata,\n} from \"nightingale-types\";\nimport { createFindDebugLevel } from \"../debug/debug.ts\";\nimport type { NightingaleFormatter } from \"../formatter-utils\";\nimport { consoleOutput } from \"../outputs/consoleOutput.ts\";\nimport { defaultFormatter } from \"./defaultFormatter.ts\";\n\nconst createHandle = (\n formatter = defaultFormatter,\n output = consoleOutput,\n): Handle => {\n return <T extends Metadata>(record: LogRecord<T>): void => {\n output(formatter(record), record);\n };\n};\nconst findDebugLevel = createFindDebugLevel(process.env.DEBUG);\n\nexport interface ConsoleHandlerOptions {\n formatter?: NightingaleFormatter[\"format\"];\n output?: <T extends Metadata>(\n param: string[] | string,\n record: LogRecord<T>,\n ) => void;\n // compat with nightingale-app-console, not used yet\n theme?: \"dark\" | \"light\";\n}\n\nexport class ConsoleHandler implements Handler {\n minLevel: Level = Level.ALL;\n\n isHandling: IsHandling;\n\n handle: Handle;\n\n constructor(minLevel: Level, options: ConsoleHandlerOptions = {}) {\n this.minLevel = minLevel;\n this.isHandling = (level: Level, key: string) =>\n level >= findDebugLevel(minLevel, key);\n this.handle = createHandle(options.formatter, options.output);\n }\n}\n","/* eslint-disable no-console */\nimport { Level } from \"nightingale-levels\";\nimport type { LogRecord, Metadata } from \"nightingale-types\";\n\nexport function cliConsoleOutput<T extends Metadata>(\n param: [string, ...string[]],\n record: LogRecord<T>,\n): void {\n console[record.level >= Level.ERROR ? \"error\" : \"log\"](...param);\n}\n","import { Level } from \"nightingale-levels\";\nimport type {\n Handle,\n Handler,\n IsHandling,\n LogRecord,\n Metadata,\n} from \"nightingale-types\";\nimport { createFindDebugLevel } from \"../debug/debug.ts\";\nimport { ANSIFormatter } from \"../formatters/ANSIFormatter.ts\";\nimport { JSONCLIFormatter } from \"../formatters/JSONFormatter.ts\";\nimport { RawFormatter } from \"../formatters/RawFormatter.ts\";\nimport { cliConsoleOutput } from \"../outputs/cliConsoleOutput.ts\";\nimport { consoleOutput } from \"../outputs/consoleOutput.ts\";\n\nconst createHandle = ({\n json,\n noColor = process.env.NO_COLOR === \"1\" || process.env.NO_COLOR === \"true\",\n}: ConsoleCLIHandlerOptions): Handle => {\n const formatter = (() => {\n if (json) return JSONCLIFormatter.format;\n if (noColor) return RawFormatter.format;\n return ANSIFormatter.format;\n })();\n const output = json ? consoleOutput : cliConsoleOutput;\n return <T extends Metadata>(record: LogRecord<T>): void => {\n output(formatter(record), record);\n };\n};\nconst findDebugLevel = createFindDebugLevel(process.env.DEBUG);\n\nexport interface ConsoleCLIHandlerOptions {\n json?: boolean;\n noColor?: boolean;\n}\n\nexport class ConsoleCLIHandler implements Handler {\n minLevel: Level = Level.ALL;\n\n isHandling: IsHandling;\n\n handle: Handle;\n\n constructor(minLevel: Level, options: ConsoleCLIHandlerOptions = {}) {\n this.minLevel = minLevel;\n this.isHandling = (level: Level, key: string) =>\n level >= findDebugLevel(minLevel, key);\n this.handle = createHandle(options);\n }\n}\n","import type { ComputedConfigForKey } from \"nightingale-logger\";\nimport { Level, Logger } from \"nightingale-logger\";\nimport type { Handler, Processor } from \"nightingale-types\";\nimport { ConsoleCLIHandler } from \"../handlers/ConsoleCLIHandler.ts\";\n\nexport interface LoggerCLIOptions {\n displayName?: string;\n processors?: Processor[];\n json?: boolean;\n noColor?: boolean;\n}\n\nexport class LoggerCLI extends Logger {\n private handlers: Handler[];\n private processors: Processor[] = [];\n private json: boolean;\n constructor(\n key: string,\n { displayName, processors, json = false, noColor }: LoggerCLIOptions = {},\n ) {\n super(key, displayName);\n this.handlers = [new ConsoleCLIHandler(Level.INFO, { json, noColor })];\n this.processors = processors ?? [];\n this.json = json;\n }\n\n protected override getHandlersAndProcessors(\n recordLevel: number,\n ): ComputedConfigForKey {\n return {\n handlers: this.handlers,\n processors: this.processors,\n };\n }\n\n logJsonOnly(\n messageOrError: string,\n metadata: Record<string, unknown>,\n level: Level = Level.INFO,\n ): void {\n if (this.json) {\n this.log(messageOrError, metadata, level);\n }\n }\n\n debugJsonOnly(\n messageOrError: string,\n metadata: Record<string, unknown>,\n ): void {\n if (this.json) {\n this.debug(messageOrError, metadata);\n }\n }\n\n noticeJsonOnly(\n messageOrError: string,\n metadata: Record<string, unknown>,\n ): void {\n if (this.json) {\n this.notice(messageOrError, metadata);\n }\n }\n\n infoJsonOnly(\n messageOrError: string,\n metadata: Record<string, unknown>,\n ): void {\n if (this.json) {\n this.info(messageOrError, metadata);\n }\n }\n\n warnJsonOnly(\n messageOrError: string,\n metadata: Record<string, unknown>,\n ): void {\n if (this.json) {\n this.warn(messageOrError, metadata);\n }\n }\n\n group<T, Result extends Awaited<T> | Promise<T>>(\n name: string,\n fn: () => Result,\n ): Result extends Promise<infer V> ? Promise<V> : Awaited<T> {\n if (this.json) {\n return fn() as Result extends Promise<infer V> ? Promise<V> : Awaited<T>;\n } else {\n console.group(name);\n const result = fn();\n if (result instanceof Promise) {\n return result.finally(() => {\n console.groupEnd();\n }) as Result extends Promise<infer V> ? Promise<V> : never;\n } else {\n console.groupEnd();\n return result as Result extends Promise<infer V>\n ? Promise<V>\n : Awaited<T>;\n }\n }\n }\n\n separator(): void {\n console.log();\n }\n}\n","import { Logger } from \"nightingale-logger\";\n\nexport { Logger } from \"nightingale-logger\";\nexport { Level, Level as levels } from \"nightingale-levels\";\nexport { configure, addConfig } from \"./config.ts\";\nexport * from \"./formatter-utils/index.ts\";\nexport { createFindDebugLevel } from \"./debug/debug.ts\";\nexport { RawFormatter } from \"./formatters/RawFormatter.ts\";\nexport { MarkdownFormatter } from \"./formatters/MarkdownFormatter.ts\";\nexport { JSONFormatter } from \"./formatters/JSONFormatter.ts\";\nexport { ANSIFormatter } from \"./formatters/ANSIFormatter.ts\";\nexport { HTMLFormatter } from \"./formatters/HTMLFormatter.ts\";\nexport { BrowserConsoleFormatter } from \"./formatters/BrowserConsoleFormatter.ts\";\nexport { consoleOutput } from \"./outputs/consoleOutput.ts\";\nexport { StringHandler } from \"./handlers/StringHandler.ts\";\nexport { BrowserConsoleHandler } from \"./handlers/BrowserConsoleHandler.ts\";\nexport { ConsoleHandler } from \"./handlers/ConsoleHandler.ts\";\nexport { ConsoleCLIHandler } from \"./handlers/ConsoleCLIHandler.ts\";\nexport { LoggerCLI } from \"./loggers/LoggerCLI.ts\";\nexport { formatStyles } from \"./formatter-utils/formatStyles.ts\";\n\n/**\n * listen to uncaughtException and unhandledRejection\n * @param {Logger} [logger]\n */\nexport function listenUnhandledErrors(\n logger: Logger = new Logger(\n \"nightingale:listenUnhandledErrors\",\n \"UnhandledErrors\",\n ),\n): void {\n process.on(\"uncaughtException\", (error) => {\n logger.error(error, {\n unhandled: true,\n type: \"uncaughtException\",\n });\n });\n process.on(\"unhandledRejection\", (error) => {\n logger.error(error as Error, {\n unhandled: true,\n type: \"unhandledRejection\",\n });\n });\n}\n"],"names":["style","findDebugLevel","createHandle","Level"],"mappings":"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"}
|
|
@@ -734,6 +734,19 @@ const JSONFormatter = {
|
|
|
734
734
|
];
|
|
735
735
|
}
|
|
736
736
|
};
|
|
737
|
+
const JSONCLIFormatter = {
|
|
738
|
+
format(record) {
|
|
739
|
+
return [
|
|
740
|
+
stringify({
|
|
741
|
+
key: record.key,
|
|
742
|
+
time: record.datetime.toTimeString().split(" ", 2)[0],
|
|
743
|
+
message: record.message,
|
|
744
|
+
...record.metadata,
|
|
745
|
+
...record.extra
|
|
746
|
+
})
|
|
747
|
+
];
|
|
748
|
+
}
|
|
749
|
+
};
|
|
737
750
|
|
|
738
751
|
const ansiStyles = {
|
|
739
752
|
black: ansi.black,
|
|
@@ -806,6 +819,7 @@ const style = (styleToHtmlStyle, args) => (styles, string) => {
|
|
|
806
819
|
return `%c${string}%c`;
|
|
807
820
|
};
|
|
808
821
|
class BrowserConsoleFormatter {
|
|
822
|
+
styleToHtmlStyle;
|
|
809
823
|
constructor(theme = "light") {
|
|
810
824
|
this.styleToHtmlStyle = theme === "dark" ? styleToHtmlStyleThemeDark : styleToHtmlStyleThemeLight;
|
|
811
825
|
}
|
|
@@ -824,8 +838,9 @@ function consoleOutput(param, record) {
|
|
|
824
838
|
}
|
|
825
839
|
|
|
826
840
|
class StringHandler {
|
|
841
|
+
minLevel;
|
|
842
|
+
_buffer = "";
|
|
827
843
|
constructor(minLevel) {
|
|
828
|
-
this._buffer = "";
|
|
829
844
|
this.minLevel = minLevel;
|
|
830
845
|
}
|
|
831
846
|
get string() {
|
|
@@ -858,8 +873,10 @@ const createHandler = (theme = getDefaultTheme()) => {
|
|
|
858
873
|
};
|
|
859
874
|
};
|
|
860
875
|
class BrowserConsoleHandler {
|
|
876
|
+
minLevel = 0;
|
|
877
|
+
handle;
|
|
878
|
+
isHandling;
|
|
861
879
|
constructor(minLevel, options = {}) {
|
|
862
|
-
this.minLevel = 0;
|
|
863
880
|
this.isHandling = (level, key) => level >= findDebugLevel$2(minLevel, key);
|
|
864
881
|
this.handle = createHandler(options.theme);
|
|
865
882
|
}
|
|
@@ -874,8 +891,10 @@ const createHandle$1 = (formatter = defaultFormatter, output = consoleOutput) =>
|
|
|
874
891
|
};
|
|
875
892
|
const findDebugLevel$1 = createFindDebugLevel(process.env.DEBUG);
|
|
876
893
|
class ConsoleHandler {
|
|
894
|
+
minLevel = Level.ALL;
|
|
895
|
+
isHandling;
|
|
896
|
+
handle;
|
|
877
897
|
constructor(minLevel, options = {}) {
|
|
878
|
-
this.minLevel = Level.ALL;
|
|
879
898
|
this.minLevel = minLevel;
|
|
880
899
|
this.isHandling = (level, key) => level >= findDebugLevel$1(minLevel, key);
|
|
881
900
|
this.handle = createHandle$1(options.formatter, options.output);
|
|
@@ -891,7 +910,7 @@ const createHandle = ({
|
|
|
891
910
|
noColor = process.env.NO_COLOR === "1" || process.env.NO_COLOR === "true"
|
|
892
911
|
}) => {
|
|
893
912
|
const formatter = (() => {
|
|
894
|
-
if (json) return
|
|
913
|
+
if (json) return JSONCLIFormatter.format;
|
|
895
914
|
if (noColor) return RawFormatter.format;
|
|
896
915
|
return ANSIFormatter.format;
|
|
897
916
|
})();
|
|
@@ -902,8 +921,10 @@ const createHandle = ({
|
|
|
902
921
|
};
|
|
903
922
|
const findDebugLevel = createFindDebugLevel(process.env.DEBUG);
|
|
904
923
|
class ConsoleCLIHandler {
|
|
924
|
+
minLevel = Level.ALL;
|
|
925
|
+
isHandling;
|
|
926
|
+
handle;
|
|
905
927
|
constructor(minLevel, options = {}) {
|
|
906
|
-
this.minLevel = Level.ALL;
|
|
907
928
|
this.minLevel = minLevel;
|
|
908
929
|
this.isHandling = (level, key) => level >= findDebugLevel(minLevel, key);
|
|
909
930
|
this.handle = createHandle(options);
|
|
@@ -911,9 +932,11 @@ class ConsoleCLIHandler {
|
|
|
911
932
|
}
|
|
912
933
|
|
|
913
934
|
class LoggerCLI extends Logger {
|
|
935
|
+
handlers;
|
|
936
|
+
processors = [];
|
|
937
|
+
json;
|
|
914
938
|
constructor(key, { displayName, processors, json = false, noColor } = {}) {
|
|
915
939
|
super(key, displayName);
|
|
916
|
-
this.processors = [];
|
|
917
940
|
this.handlers = [new ConsoleCLIHandler(Level$1.INFO, { json, noColor })];
|
|
918
941
|
this.processors = processors ?? [];
|
|
919
942
|
this.json = json;
|