nightingale 14.2.1 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +204 -57
  3. package/dist/definitions/config.d.ts +1 -1
  4. package/dist/definitions/debug/debug.d.ts +5 -0
  5. package/dist/definitions/debug/debug.d.ts.map +1 -0
  6. package/dist/definitions/debug/debug.test.d.ts +2 -0
  7. package/dist/definitions/debug/debug.test.d.ts.map +1 -0
  8. package/dist/definitions/formatter-utils/formatObject.d.ts +9 -0
  9. package/dist/definitions/formatter-utils/formatObject.d.ts.map +1 -0
  10. package/dist/definitions/formatter-utils/formatObject.test.d.ts +2 -0
  11. package/dist/definitions/formatter-utils/formatObject.test.d.ts.map +1 -0
  12. package/dist/definitions/formatter-utils/formatRecordToString.d.ts +4 -0
  13. package/dist/definitions/formatter-utils/formatRecordToString.d.ts.map +1 -0
  14. package/dist/definitions/formatter-utils/index.d.ts +15 -0
  15. package/dist/definitions/formatter-utils/index.d.ts.map +1 -0
  16. package/dist/definitions/formatter-utils/index.test.d.ts +2 -0
  17. package/dist/definitions/formatter-utils/index.test.d.ts.map +1 -0
  18. package/dist/definitions/formatter-utils/levelToStyles.d.ts +3 -0
  19. package/dist/definitions/formatter-utils/levelToStyles.d.ts.map +1 -0
  20. package/dist/definitions/formatter-utils/levelToSymbol.d.ts +3 -0
  21. package/dist/definitions/formatter-utils/levelToSymbol.d.ts.map +1 -0
  22. package/dist/definitions/formatter-utils/styleToHexColor.d.ts +7 -0
  23. package/dist/definitions/formatter-utils/styleToHexColor.d.ts.map +1 -0
  24. package/dist/definitions/formatter-utils/styleToHtmlStyle.d.ts +109 -0
  25. package/dist/definitions/formatter-utils/styleToHtmlStyle.d.ts.map +1 -0
  26. package/dist/definitions/formatters/ANSIFormatter.d.ts +6 -0
  27. package/dist/definitions/formatters/ANSIFormatter.d.ts.map +1 -0
  28. package/dist/definitions/formatters/ANSIFormatter.test.d.ts +2 -0
  29. package/dist/definitions/formatters/ANSIFormatter.test.d.ts.map +1 -0
  30. package/dist/definitions/formatters/BrowserConsoleFormatter.d.ts +10 -0
  31. package/dist/definitions/formatters/BrowserConsoleFormatter.d.ts.map +1 -0
  32. package/dist/definitions/formatters/BrowserConsoleFormatter.test.d.ts +2 -0
  33. package/dist/definitions/formatters/BrowserConsoleFormatter.test.d.ts.map +1 -0
  34. package/dist/definitions/formatters/HTMLFormatter.d.ts +5 -0
  35. package/dist/definitions/formatters/HTMLFormatter.d.ts.map +1 -0
  36. package/dist/definitions/formatters/HTMLFormatter.test.d.ts +2 -0
  37. package/dist/definitions/formatters/HTMLFormatter.test.d.ts.map +1 -0
  38. package/dist/definitions/formatters/JSONFormatter.d.ts +4 -0
  39. package/dist/definitions/formatters/JSONFormatter.d.ts.map +1 -0
  40. package/dist/definitions/formatters/JSONFormatter.test.d.ts +2 -0
  41. package/dist/definitions/formatters/JSONFormatter.test.d.ts.map +1 -0
  42. package/dist/definitions/formatters/MarkdownFormatter.d.ts +5 -0
  43. package/dist/definitions/formatters/MarkdownFormatter.d.ts.map +1 -0
  44. package/dist/definitions/formatters/MarkdownFormatter.test.d.ts +2 -0
  45. package/dist/definitions/formatters/MarkdownFormatter.test.d.ts.map +1 -0
  46. package/dist/definitions/formatters/RawFormatter.d.ts +5 -0
  47. package/dist/definitions/formatters/RawFormatter.d.ts.map +1 -0
  48. package/dist/definitions/formatters/RawFormatter.test.d.ts +2 -0
  49. package/dist/definitions/formatters/RawFormatter.test.d.ts.map +1 -0
  50. package/dist/definitions/handlers/BrowserConsoleHandler.d.ts +14 -0
  51. package/dist/definitions/handlers/BrowserConsoleHandler.d.ts.map +1 -0
  52. package/dist/definitions/handlers/ConsoleCLIHandler.d.ts +12 -0
  53. package/dist/definitions/handlers/ConsoleCLIHandler.d.ts.map +1 -0
  54. package/dist/definitions/handlers/ConsoleHandler.d.ts +14 -0
  55. package/dist/definitions/handlers/ConsoleHandler.d.ts.map +1 -0
  56. package/dist/definitions/handlers/StringHandler.d.ts +9 -0
  57. package/dist/definitions/handlers/StringHandler.d.ts.map +1 -0
  58. package/dist/definitions/index.d.ts +18 -4
  59. package/dist/definitions/index.d.ts.map +1 -1
  60. package/dist/definitions/loggers/LoggerCLI.d.ts +23 -0
  61. package/dist/definitions/loggers/LoggerCLI.d.ts.map +1 -0
  62. package/dist/definitions/outputs/cliConsoleOutput.d.ts +3 -0
  63. package/dist/definitions/outputs/cliConsoleOutput.d.ts.map +1 -0
  64. package/dist/definitions/outputs/consoleOutput.d.ts +3 -0
  65. package/dist/definitions/outputs/consoleOutput.d.ts.map +1 -0
  66. package/dist/index-browser.es.js +936 -46
  67. package/dist/index-browser.es.js.map +1 -1
  68. package/dist/index-node20.mjs +1023 -0
  69. package/dist/index-node20.mjs.map +1 -0
  70. package/package.json +31 -37
  71. package/src/config.ts +12 -12
  72. package/src/debug/debug.test.ts +50 -0
  73. package/src/debug/debug.ts +100 -0
  74. package/src/formatter-utils/formatObject.test.ts +153 -0
  75. package/src/formatter-utils/formatObject.ts +462 -0
  76. package/src/formatter-utils/formatRecordToString.ts +67 -0
  77. package/src/formatter-utils/index.test.ts +33 -0
  78. package/src/formatter-utils/index.ts +20 -0
  79. package/src/formatter-utils/levelToStyles.ts +14 -0
  80. package/src/formatter-utils/levelToSymbol.ts +14 -0
  81. package/src/formatter-utils/styleToHexColor.ts +9 -0
  82. package/src/formatter-utils/styleToHtmlStyle.ts +69 -0
  83. package/src/formatters/ANSIFormatter.test.ts +27 -0
  84. package/src/formatters/ANSIFormatter.ts +68 -0
  85. package/src/formatters/BrowserConsoleFormatter.test.ts +59 -0
  86. package/src/formatters/BrowserConsoleFormatter.ts +45 -0
  87. package/src/formatters/HTMLFormatter.test.ts +23 -0
  88. package/src/formatters/HTMLFormatter.ts +28 -0
  89. package/src/formatters/JSONFormatter.test.ts +62 -0
  90. package/src/formatters/JSONFormatter.ts +62 -0
  91. package/src/formatters/MarkdownFormatter.test.ts +19 -0
  92. package/src/formatters/MarkdownFormatter.ts +31 -0
  93. package/src/formatters/RawFormatter.test.ts +21 -0
  94. package/src/formatters/RawFormatter.ts +13 -0
  95. package/src/handlers/BrowserConsoleHandler.ts +78 -0
  96. package/src/handlers/ConsoleCLIHandler.ts +41 -0
  97. package/src/handlers/ConsoleHandler.ts +55 -0
  98. package/src/handlers/StringHandler.ts +21 -0
  99. package/src/index.test.ts +29 -29
  100. package/src/index.ts +24 -10
  101. package/src/loggers/LoggerCLI.ts +91 -0
  102. package/src/outputs/cliConsoleOutput.ts +17 -0
  103. package/src/outputs/consoleOutput.ts +18 -0
  104. package/dist/index-browsermodern.es.js +0 -120
  105. package/dist/index-browsermodern.es.js.map +0 -1
  106. package/dist/index-node18.mjs +0 -120
  107. package/dist/index-node18.mjs.map +0 -1
  108. package/src/.eslintrc.json +0 -30
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-node20.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/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.ts","../src/handlers/StringHandler.ts","../src/handlers/BrowserConsoleHandler.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 grayLight: \"808080\",\n \"gray-light\": \"808080\",\n} as const;\n\nexport type StyleToHexColor = Readonly<\n Record<keyof typeof styleToHexColor, string>\n>;\n","import { styleToHexColor } from \"./styleToHexColor\";\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\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 grayLight: {\n open: `color: #${styleToHexColor.grayLight}`,\n close: \"color: currentcolor\",\n },\n \"gray-light\": {\n open: `color: #${styleToHexColor.grayLight}`,\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-disable @typescript-eslint/no-use-before-define */\nimport type { Styles } from \"nightingale-types\";\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\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 = [\"cyan\"];\n } else {\n switch (typeofValue) {\n case \"undefined\":\n styles = [\"cyan\"];\n break;\n case \"boolean\":\n styles = [\"green\"];\n break;\n case \"number\":\n styles = [\"yellow\"];\n break;\n case \"bigint\":\n styles = [\"red\"];\n break;\n case \"string\":\n styles = [\"orange\"];\n break;\n case \"symbol\":\n styles = [\"magenta\"];\n break;\n case \"object\":\n case \"function\":\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 === \"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 = (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 {\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([\"gray-light\", \"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([\"gray-light\", \"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\";\nimport { formatObject } from \"./formatObject\";\nimport { levelToStyles } from \"./levelToStyles\";\nimport { levelToSymbol } from \"./levelToSymbol\";\n\nexport function formatRecordToString<T extends Metadata>(\n record: LogRecord<T>,\n style: StyleFn,\n): string {\n const parts: string[] = [];\n\n if (record.displayName) {\n parts.push(style([\"gray-light\"], record.displayName));\n } else if (record.key) {\n parts.push(style([\"gray-light\"], 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\";\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\";\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 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\nexport const JSONCLIFormatter: NightingaleFormatter = {\n format(record) {\n return 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","import ansi from \"ansi-styles\";\nimport type { NightingaleFormatter } from \"nightingale\";\nimport type { Styles } from \"nightingale-types\";\nimport { formatRecordToString, styleToHexColor } from \"../formatter-utils\";\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\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 \"gray-light\": {\n open: ansi.color.ansi256(ansi.hexToAnsi256(styleToHexColor[\"gray-light\"])),\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\";\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 {\n formatRecordToString,\n styleToHtmlStyleThemeDark,\n styleToHtmlStyleThemeLight,\n} from \"../formatter-utils\";\nimport type { StringArrayNightingaleFormatter } from \"../formatter-utils\";\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\n implements StringArrayNightingaleFormatter\n{\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[] {\n const args: string[] = [];\n const string = formatRecordToString(\n record,\n style(this.styleToHtmlStyle, args),\n );\n return [string, ...args];\n }\n}\n","/* eslint-disable no-console */\nimport { Level } from \"nightingale-levels\";\nimport type { LogRecord, Metadata } from \"nightingale-types\";\nimport { POB_TARGET } from \"pob-babel\";\n\nexport function consoleOutput<T extends Metadata>(\n param: string[] | string,\n record: LogRecord<T>,\n): void {\n if (POB_TARGET !== \"browser\") {\n const outKey = record.level >= Level.ERROR ? \"stderr\" : \"stdout\";\n process[outKey].write(`${param as string}\\n`);\n } else {\n console[record.level >= Level.ERROR ? \"error\" : \"log\"](\n ...(param as string[]),\n );\n }\n}\n","/* eslint-disable prefer-template */\nimport type { Handler, Level, LogRecord, Metadata } from \"nightingale-types\";\nimport { RawFormatter } from \"../formatters/RawFormatter\";\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) + \"\\n\";\n }\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\";\nimport { BrowserConsoleFormatter } from \"../formatters/BrowserConsoleFormatter\";\nimport { consoleOutput } from \"../outputs/consoleOutput\";\n\nexport function getDebugString(): string {\n const querystring = document.location.search;\n const debugFromLocalStorage =\n // eslint-disable-next-line unicorn/prefer-global-this, @typescript-eslint/no-unnecessary-condition\n window.localStorage?.getItem(\"debug\") || \"\";\n\n if (!querystring) {\n return debugFromLocalStorage;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/URLUtils/search#Get_the_value_of_a_single_search_param\n const debugFromQueryString = decodeURI(\n querystring.replace(\n // eslint-disable-next-line prefer-regex-literals, regexp/no-super-linear-backtracking\n new RegExp(\"^(?:.*[&?]DEBUG(?:=([^&]*))?)?.*$\", \"i\"),\n \"$1\",\n ),\n );\n\n return (\n (debugFromLocalStorage ? `${debugFromLocalStorage},` : \"\") +\n debugFromQueryString\n );\n}\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 { Level } from \"nightingale-levels\";\nimport type {\n Handle,\n Handler,\n IsHandling,\n LogRecord,\n Metadata,\n} from \"nightingale-types\";\nimport { POB_TARGET } from \"pob-babel\";\nimport { createFindDebugLevel } from \"../debug/debug\";\nimport { ANSIFormatter } from \"../formatters/ANSIFormatter\";\nimport { JSONFormatter } from \"../formatters/JSONFormatter\";\nimport { consoleOutput } from \"../outputs/consoleOutput\";\n\nconst defaultFormatter =\n POB_TARGET === \"node\" &&\n !process.stdout.isTTY &&\n process.env.NIGHTINGALE_CONSOLE_FORMATTER !== \"ansi\"\n ? JSONFormatter.format\n : ANSIFormatter.format;\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?: <T extends Metadata>(record: LogRecord<T>) => string;\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\";\nimport { POB_TARGET } from \"pob-babel\";\n\nexport function cliConsoleOutput<T extends Metadata>(\n param: string[] | string,\n record: LogRecord<T>,\n): void {\n if (POB_TARGET !== \"browser\") {\n console[record.level >= Level.ERROR ? \"error\" : \"log\"](param as string);\n } else {\n console[record.level >= Level.ERROR ? \"error\" : \"log\"](\n ...(param as string[]),\n );\n }\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\";\nimport { ANSIFormatter } from \"../formatters/ANSIFormatter\";\nimport { JSONFormatter } from \"../formatters/JSONFormatter\";\nimport { cliConsoleOutput } from \"../outputs/cliConsoleOutput\";\nimport { consoleOutput } from \"../outputs/consoleOutput\";\n\nconst createHandle = ({ json }: ConsoleCLIHandlerOptions): Handle => {\n const formatter = json ? JSONFormatter.format : ANSIFormatter.format;\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}\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\";\n\nexport interface LoggerCLIOptions {\n displayName?: string;\n handlers?: Handler[];\n processors?: Processor[];\n json?: 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 }: LoggerCLIOptions = {},\n ) {\n super(key, displayName);\n this.handlers = [new ConsoleCLIHandler(Level.INFO, { json })];\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(name: string, fn: () => void): void {\n if (this.json) {\n fn();\n } else {\n console.group(name);\n fn();\n console.groupEnd();\n }\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\";\nexport * from \"./formatter-utils\";\nexport { createFindDebugLevel } from \"./debug/debug\";\nexport { RawFormatter } from \"./formatters/RawFormatter\";\nexport { MarkdownFormatter } from \"./formatters/MarkdownFormatter\";\nexport { JSONFormatter } from \"./formatters/JSONFormatter\";\nexport { ANSIFormatter } from \"./formatters/ANSIFormatter\";\nexport { HTMLFormatter } from \"./formatters/HTMLFormatter\";\nexport { BrowserConsoleFormatter } from \"./formatters/BrowserConsoleFormatter\";\nexport { consoleOutput } from \"./outputs/consoleOutput\";\nexport { StringHandler } from \"./handlers/StringHandler\";\nexport { BrowserConsoleHandler } from \"./handlers/BrowserConsoleHandler\";\nexport { ConsoleHandler } from \"./handlers/ConsoleHandler\";\nexport { ConsoleCLIHandler } from \"./handlers/ConsoleCLIHandler\";\nexport { LoggerCLI } from \"./loggers/LoggerCLI\";\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":["globalOrWindow","global","window","process","env","NODE_ENV","__NIGHTINGALE_GLOBAL_HANDLERS","Error","__NIGHTINGALE_CONFIG","__NIGHTINGALE_LOGGER_MAP_CACHE","Map","__NIGHTINGALE_CONFIG_DEFAULT","handlers","processors","clearCache","clear","handleConfig","config","keys","pattern","key","handler","processor","configure","length","console","log","map","addConfig","unshift","configIsForKey","includes","test","__NIGHTINGALE_GET_CONFIG_FOR_LOGGER","globalCache","existingCache","get","loggerConfig","filter","some","push","stop","set","__NIGHTINGALE_GET_CONFIG_FOR_LOGGER_RECORD","level","minLevel","isHandling","levelToStyles","Level","TRACE","DEBUG","WARN","ERROR","CRITICAL","FATAL","EMERGENCY","levelToSymbol","INFO","styleToHexColor","orange","grayLight","styleToHtmlStyleThemeLight","bold","open","close","italic","underline","inverse","strikethrough","black","red","green","yellow","blue","magenta","cyan","white","gray","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","styleToHtmlStyleThemeDark","noStyleFn","styles","value","tryStringify","arg","JSON","stringify","replace","sameRawFormattedValue","stringValue","formattedValue","internalFormatValue","styleFn","padding","depth","maxDepth","objects","typeofValue","undefined","toString","constructor","Object","internalFormatObject","Array","isArray","internalFormatArray","stack","startsWith","message","name","internalFormatMap","Set","internalFormatSet","WeakMap","WeakSet","separator","internalFormatKey","stringKey","formattedKey","internalNoKey","internalFormatMapKey","internalFormatParams","internalFormatIterator","values","objectStyles","prefix","suffix","prefixSuffixSpace","formatKey","breakLine","formattedSeparator","valuesMaxIndex","formattedValues","index","v","fv","join","object","has","add","result","delete","array","formatObject","formatRecordToString","record","style","parts","displayName","datetime","toTimeString","split","symbol","formatRecordObject","stringObject","metadata","metadataStyles","extra","context","specialRegexpChars","createTestFunctionFromRegexp","regexp","string","createTestFunctionFromRegexpString","endsWith","RegExp","slice","createTestFunctionFromValue","createFindDebugLevel","debugValue","isWildcard","debugValues","skips","trim","forEach","ALL","skip","dv","RawFormatter","format","reduce","part","styleName","MarkdownFormatter","map2object","String","space","objectValue","JSONFormatter","ansiStyles","ansi","color","ansi256","hexToAnsi256","styledString","codePair","ANSIFormatter","HTMLFormatter","styleToHtmlStyle","args","htmlStyles","s","BrowserConsoleFormatter","theme","consoleOutput","param","outKey","write","StringHandler","_buffer","handle","getDebugString","querystring","document","location","search","debugFromLocalStorage","localStorage","getItem","debugFromQueryString","decodeURI","findDebugLevel","getDefaultTheme","configInLocalStorage","createHandler","browserConsoleFormatter","BrowserConsoleHandler","options","defaultFormatter","stdout","isTTY","NIGHTINGALE_CONSOLE_FORMATTER","createHandle","formatter","output","ConsoleHandler","cliConsoleOutput","json","ConsoleCLIHandler","LoggerCLI","Logger","getHandlersAndProcessors","logJsonOnly","messageOrError","debugJsonOnly","debug","noticeJsonOnly","notice","infoJsonOnly","info","warnJsonOnly","warn","group","fn","groupEnd","listenUnhandledErrors","logger","on","error","unhandled","type"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nightingale",
3
- "version": "14.2.1",
3
+ "version": "16.0.0",
4
4
  "description": "Logger for browser and node",
5
5
  "keywords": [
6
6
  "logger"
@@ -15,18 +15,10 @@
15
15
  "homepage": "https://github.com/christophehurpeau/nightingale",
16
16
  "type": "module",
17
17
  "engines": {
18
- "node": ">=18.12.0"
18
+ "node": ">=20.9.0"
19
19
  },
20
- "browserslist": {
21
- "production": [
22
- "defaults",
23
- "> 0.2%",
24
- "not ie < 12",
25
- "not safari < 10",
26
- "not ios_saf < 10"
27
- ]
28
- },
29
- "main": "./dist/index-node18.mjs",
20
+ "sideEffects": false,
21
+ "main": "./dist/index-node20.mjs",
30
22
  "types": "./dist/definitions/index.d.ts",
31
23
  "module": "./dist/index-browser.es.js",
32
24
  "browser": "./dist/index-browser.es.js",
@@ -35,17 +27,13 @@
35
27
  ".": {
36
28
  "types": "./dist/definitions/index.d.ts",
37
29
  "node": {
38
- "import": "./dist/index-node18.mjs"
30
+ "import": "./dist/index-node20.mjs"
39
31
  },
40
32
  "browser": {
41
- "browser:modern": {
42
- "import": "./dist/index-browsermodern.es.js"
43
- },
44
33
  "import": "./dist/index-browser.es.js"
45
34
  }
46
35
  }
47
36
  },
48
- "sideEffects": false,
49
37
  "files": [
50
38
  "src",
51
39
  "dist"
@@ -56,40 +44,46 @@
56
44
  "clean": "yarn clean:build",
57
45
  "clean:build": "pob-babel-clean-out dist",
58
46
  "lint": "yarn run lint:eslint",
59
- "lint:eslint": "yarn ../.. run eslint --report-unused-disable-directives --resolve-plugins-relative-to . --quiet packages/nightingale",
47
+ "lint:eslint": "yarn ../.. run eslint --quiet packages/nightingale",
60
48
  "test": "yarn ../../ run test -- packages/nightingale",
61
49
  "watch": "yarn clean:build && rollup --config rollup.config.mjs --watch"
62
50
  },
63
- "prettier": "@pob/root/prettier-config",
51
+ "browserslist": {
52
+ "production": [
53
+ "defaults",
54
+ "> 0.2%",
55
+ "not ie < 12",
56
+ "not safari < 10",
57
+ "not ios_saf < 10"
58
+ ]
59
+ },
64
60
  "pob": {
65
- "babelEnvs": [
61
+ "bundler": "rollup-babel",
62
+ "entries": [
63
+ "index"
64
+ ],
65
+ "envs": [
66
66
  {
67
67
  "target": "node",
68
- "version": "18"
69
- },
70
- {
71
- "target": "browser",
72
- "version": "modern"
68
+ "version": "20"
73
69
  },
74
70
  {
75
71
  "target": "browser"
76
72
  }
77
- ],
78
- "entries": [
79
- "index"
80
73
  ]
81
74
  },
75
+ "prettier": "@pob/root/prettier-config",
82
76
  "dependencies": {
83
- "@types/node": ">=18.0.0",
84
- "nightingale-levels": "14.2.1",
85
- "nightingale-logger": "14.2.1",
86
- "nightingale-types": "14.2.1"
77
+ "@types/node": ">=20.0.0",
78
+ "ansi-styles": "^6.2.1",
79
+ "nightingale-levels": "16.0.0",
80
+ "nightingale-logger": "16.0.0",
81
+ "nightingale-types": "16.0.0"
87
82
  },
88
83
  "devDependencies": {
89
- "@babel/core": "7.23.2",
90
- "@babel/preset-env": "7.23.2",
91
- "nightingale-string": "14.2.1",
92
- "pob-babel": "36.6.1",
93
- "typescript": "5.2.2"
84
+ "@babel/core": "7.26.10",
85
+ "@babel/preset-env": "7.26.9",
86
+ "pob-babel": "43.4.0",
87
+ "typescript": "5.8.2"
94
88
  }
95
89
  }
package/src/config.ts CHANGED
@@ -1,14 +1,14 @@
1
- import type { ComputedConfigForKey, Config } from 'nightingale-logger';
2
- import type { Handler, Level } from 'nightingale-types';
1
+ import type { ComputedConfigForKey, Config } from "nightingale-logger";
2
+ import type { Handler, Level } from "nightingale-types";
3
3
 
4
4
  const globalOrWindow: typeof global =
5
- typeof global !== 'undefined' ? global : (window as typeof global);
5
+ typeof global !== "undefined" ? global : (window as typeof global);
6
6
 
7
7
  if (
8
- process.env.NODE_ENV !== 'production' &&
8
+ process.env.NODE_ENV !== "production" &&
9
9
  globalOrWindow.__NIGHTINGALE_GLOBAL_HANDLERS
10
10
  ) {
11
- throw new Error('nightingale: update all to ^5.0.0');
11
+ throw new Error("nightingale: update all to ^5.0.0");
12
12
  }
13
13
 
14
14
  if (!globalOrWindow.__NIGHTINGALE_CONFIG) {
@@ -30,14 +30,14 @@ function clearCache(): void {
30
30
  function handleConfig(config: Config): Config {
31
31
  if (config.keys) {
32
32
  if (config.pattern) {
33
- throw new Error('Cannot have key and pattern for the same config');
33
+ throw new Error("Cannot have key and pattern for the same config");
34
34
  }
35
35
  if (config.key) {
36
- throw new Error('Cannot have key and keys for the same config');
36
+ throw new Error("Cannot have key and keys for the same config");
37
37
  }
38
38
  } else if (config.key) {
39
39
  if (config.pattern) {
40
- throw new Error('Cannot have key and pattern for the same config');
40
+ throw new Error("Cannot have key and pattern for the same config");
41
41
  }
42
42
  config.keys = [config.key];
43
43
  delete config.key;
@@ -45,7 +45,7 @@ function handleConfig(config: Config): Config {
45
45
 
46
46
  if (config.handler) {
47
47
  if (config.handlers) {
48
- throw new Error('Cannot have handler and handlers for the same config');
48
+ throw new Error("Cannot have handler and handlers for the same config");
49
49
  }
50
50
  config.handlers = [config.handler];
51
51
  delete config.handler;
@@ -54,7 +54,7 @@ function handleConfig(config: Config): Config {
54
54
  if (config.processor) {
55
55
  if (config.processors) {
56
56
  throw new Error(
57
- 'Cannot have processors and processors for the same config',
57
+ "Cannot have processors and processors for the same config",
58
58
  );
59
59
  }
60
60
  config.processors = [config.processor];
@@ -67,7 +67,7 @@ function handleConfig(config: Config): Config {
67
67
  export function configure(config: Config[]): void {
68
68
  if (globalOrWindow.__NIGHTINGALE_CONFIG.length > 0) {
69
69
  // eslint-disable-next-line no-console
70
- console.log('nightingale: warning: config overridden');
70
+ console.log("nightingale: warning: config overridden");
71
71
  }
72
72
 
73
73
  clearCache();
@@ -76,7 +76,7 @@ export function configure(config: Config[]): void {
76
76
 
77
77
  export function addConfig(config: Config, unshift = false): void {
78
78
  config = handleConfig(config);
79
- globalOrWindow.__NIGHTINGALE_CONFIG[unshift ? 'unshift' : 'push'](config);
79
+ globalOrWindow.__NIGHTINGALE_CONFIG[unshift ? "unshift" : "push"](config);
80
80
  clearCache();
81
81
  }
82
82
 
@@ -0,0 +1,50 @@
1
+ import { Level } from "nightingale-levels";
2
+ import { createFindDebugLevel } from "./debug";
3
+
4
+ describe("created with undefined", () => {
5
+ const findDebugLevel = createFindDebugLevel();
6
+ test("should always return level passed", () => {
7
+ expect(findDebugLevel(Level.ALL, "app")).toBe(Level.ALL);
8
+ expect(findDebugLevel(Level.TRACE, "app")).toBe(Level.TRACE);
9
+ expect(findDebugLevel(Level.INFO, "app")).toBe(Level.INFO);
10
+ expect(findDebugLevel(Level.WARN, "app")).toBe(Level.WARN);
11
+ expect(findDebugLevel(Level.FATAL, "app")).toBe(Level.FATAL);
12
+ });
13
+ });
14
+
15
+ describe("created with *", () => {
16
+ const findDebugLevel = createFindDebugLevel("*");
17
+ test("should always return level ALL", () => {
18
+ expect(findDebugLevel(Level.ALL, "app")).toBe(Level.ALL);
19
+ expect(findDebugLevel(Level.TRACE, "app")).toBe(Level.ALL);
20
+ expect(findDebugLevel(Level.INFO, "app")).toBe(Level.ALL);
21
+ expect(findDebugLevel(Level.WARN, "app")).toBe(Level.ALL);
22
+ expect(findDebugLevel(Level.FATAL, "app")).toBe(Level.ALL);
23
+ });
24
+ });
25
+
26
+ describe("created with *,-app:*", () => {
27
+ const findDebugLevel = createFindDebugLevel("*,-app:*");
28
+ test("app: should always return level passed", () => {
29
+ expect(findDebugLevel(Level.ALL, "app")).toBe(Level.ALL);
30
+ expect(findDebugLevel(Level.INFO, "app")).toBe(Level.INFO);
31
+ });
32
+
33
+ test("not app: should always return level ALL", () => {
34
+ expect(findDebugLevel(Level.ALL, "nightingale")).toBe(Level.ALL);
35
+ expect(findDebugLevel(Level.INFO, "nightingale")).toBe(Level.ALL);
36
+ });
37
+ });
38
+
39
+ describe("created with nightingale,-nightingale:debug", () => {
40
+ const findDebugLevel = createFindDebugLevel("nightingale,-nightingale:debug");
41
+ test("nightingale:debug: should always return level passed", () => {
42
+ expect(findDebugLevel(Level.ALL, "nightingale:debug")).toBe(Level.ALL);
43
+ expect(findDebugLevel(Level.INFO, "nightingale:debug")).toBe(Level.INFO);
44
+ });
45
+
46
+ test("nightingale: should always return level ALL", () => {
47
+ expect(findDebugLevel(Level.ALL, "nightingale")).toBe(Level.ALL);
48
+ expect(findDebugLevel(Level.INFO, "nightingale")).toBe(Level.ALL);
49
+ });
50
+ });
@@ -0,0 +1,100 @@
1
+ /* eslint-disable complexity */
2
+ import { Level } from "nightingale-levels";
3
+
4
+ const specialRegexpChars = /[$()+.?[\\\]^{|}]/;
5
+
6
+ type TestFunction = (string: string) => boolean;
7
+ export type DebugValueType = RegExp | string[] | string;
8
+
9
+ const createTestFunctionFromRegexp =
10
+ (regexp: RegExp): TestFunction =>
11
+ (string: string) =>
12
+ regexp.test(string);
13
+
14
+ const createTestFunctionFromRegexpString = (value: string): TestFunction => {
15
+ if (!value.endsWith("/")) throw new Error("Invalid RegExp DEBUG value");
16
+ return createTestFunctionFromRegexp(new RegExp(value.slice(1, -1)));
17
+ };
18
+
19
+ const createTestFunctionFromValue = (value: string): TestFunction => {
20
+ if (value.endsWith(":*")) {
21
+ value = value.slice(0, -2);
22
+ return (string: string) => string.startsWith(value);
23
+ }
24
+
25
+ return (string: string) => string === value;
26
+ };
27
+
28
+ export type FindDebugLevel = (minLevel: Level, key: string) => Level;
29
+
30
+ export function createFindDebugLevel(
31
+ debugValue?: DebugValueType,
32
+ ): FindDebugLevel {
33
+ let isWildcard = false;
34
+ const debugValues: TestFunction[] = [];
35
+ const skips: TestFunction[] = [];
36
+
37
+ if (!Array.isArray(debugValue)) {
38
+ if (debugValue instanceof RegExp) {
39
+ debugValues.push(createTestFunctionFromRegexp(debugValue));
40
+ debugValue = undefined;
41
+ } else if (debugValue) {
42
+ debugValue = debugValue.trim();
43
+
44
+ if (debugValue.startsWith("/")) {
45
+ debugValues.push(createTestFunctionFromRegexpString(debugValue));
46
+ debugValue = undefined;
47
+ } else {
48
+ debugValue = debugValue.split(/[\s,]+/);
49
+ }
50
+ }
51
+ }
52
+
53
+ if (debugValue) {
54
+ (debugValue as string[]).forEach((value) => {
55
+ if (specialRegexpChars.test(value)) {
56
+ throw new Error(
57
+ `Invalid debug value: "${value}" (contains special chars)`,
58
+ );
59
+ }
60
+
61
+ if (!value) return;
62
+
63
+ if (value === "*") {
64
+ isWildcard = true;
65
+ return;
66
+ }
67
+
68
+ if (value.startsWith("-")) {
69
+ skips.push(createTestFunctionFromValue(value.slice(1)));
70
+ } else if (!isWildcard) {
71
+ debugValues.push(createTestFunctionFromValue(value));
72
+ }
73
+ });
74
+ }
75
+
76
+ if (isWildcard) {
77
+ if (skips.length === 0) {
78
+ return () => Level.ALL;
79
+ } else {
80
+ return (minLevel: Level, key: string) =>
81
+ skips.some((skip) => skip(key)) ? minLevel : Level.ALL;
82
+ }
83
+ }
84
+
85
+ if (debugValues.length === 0) {
86
+ return (minLevel: Level) => minLevel;
87
+ }
88
+
89
+ return (minLevel: Level, key: string) => {
90
+ if (minLevel === Level.ALL || !key) {
91
+ return minLevel;
92
+ }
93
+
94
+ if (debugValues.some((dv) => dv(key))) {
95
+ return skips.some((skip) => skip(key)) ? minLevel : Level.ALL;
96
+ }
97
+
98
+ return minLevel;
99
+ };
100
+ }