renovate 43.120.0 → 43.120.1

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.
@@ -17,9 +17,7 @@ function createDefaultStreams(stdoutLevel, problems, logFile) {
17
17
  };
18
18
  // v8 ignore else -- TODO: add test #40625
19
19
  if (getEnv("LOG_FORMAT") !== "json") {
20
- const prettyStdOut = new RenovateStream();
21
- prettyStdOut.pipe(process.stdout);
22
- stdout.stream = prettyStdOut;
20
+ stdout.stream = new RenovateStream(process.stdout);
23
21
  stdout.type = "raw";
24
22
  }
25
23
  return [
@@ -42,7 +40,14 @@ function createLogFileStream(logFile) {
42
40
  level: validateLogLevel(getEnv("LOG_FILE_LEVEL"), "debug")
43
41
  };
44
42
  const logFileFormat = getEnv("LOG_FILE_FORMAT");
45
- if (isNonEmptyStringAndNotWhitespace(logFileFormat) && logFileFormat === "pretty") file.type = "raw";
43
+ if (isNonEmptyStringAndNotWhitespace(logFileFormat) && logFileFormat === "pretty") {
44
+ file.stream = new RenovateStream(fs.createWriteStream(logFile, {
45
+ flags: "a",
46
+ encoding: "utf8"
47
+ }), false);
48
+ file.type = "raw";
49
+ delete file.path;
50
+ }
46
51
  return file;
47
52
  }
48
53
  function serializedSanitizedLogger(streams) {
@@ -1 +1 @@
1
- {"version":3,"file":"bunyan.js","names":[],"sources":["../../lib/logger/bunyan.ts"],"sourcesContent":["import {\n isNonEmptyStringAndNotWhitespace,\n isString,\n isUndefined,\n} from '@sindresorhus/is';\nimport * as bunyan from 'bunyan';\nimport fs from 'fs-extra';\nimport upath from 'upath';\nimport cmdSerializer from './cmd-serializer.ts';\nimport configSerializer from './config-serializer.ts';\nimport errSerializer from './err-serializer.ts';\nimport { RenovateStream } from './pretty-stdout.ts';\nimport type { ProblemStream } from './problem-stream.ts';\nimport type { BunyanLogLevel, BunyanLogger, BunyanStream } from './types.ts';\nimport { getEnv } from './utils.ts';\nimport { withSanitizer } from './with-sanitizer.ts';\n\nexport function createDefaultStreams(\n stdoutLevel: BunyanLogLevel,\n problems: ProblemStream,\n logFile: string | undefined,\n): BunyanStream[] {\n const stdout: BunyanStream = {\n name: 'stdout',\n level: stdoutLevel,\n stream: process.stdout,\n };\n\n // v8 ignore else -- TODO: add test #40625\n if (getEnv('LOG_FORMAT') !== 'json') {\n // TODO: typings (#9615)\n const prettyStdOut = new RenovateStream() as any;\n prettyStdOut.pipe(process.stdout);\n stdout.stream = prettyStdOut;\n stdout.type = 'raw';\n }\n\n const problemsStream: BunyanStream = {\n name: 'problems',\n level: 'warn' as BunyanLogLevel,\n stream: problems as any,\n type: 'raw',\n };\n\n const logFileStream: BunyanStream | undefined = isString(logFile)\n ? createLogFileStream(logFile)\n : undefined;\n\n return [stdout, problemsStream, logFileStream].filter(\n Boolean,\n ) as BunyanStream[];\n}\n\nfunction createLogFileStream(logFile: string): BunyanStream {\n // Ensure log file directory exists\n const directoryName = upath.dirname(logFile);\n fs.ensureDirSync(directoryName);\n\n const file: BunyanStream = {\n name: 'logfile',\n path: logFile,\n level: validateLogLevel(getEnv('LOG_FILE_LEVEL'), 'debug'),\n };\n\n const logFileFormat = getEnv('LOG_FILE_FORMAT');\n\n if (\n isNonEmptyStringAndNotWhitespace(logFileFormat) &&\n logFileFormat === 'pretty'\n ) {\n file.type = 'raw';\n }\n\n return file;\n}\n\nfunction serializedSanitizedLogger(streams: BunyanStream[]): BunyanLogger {\n return bunyan.createLogger({\n name: 'renovate',\n serializers: {\n body: configSerializer,\n cmd: cmdSerializer,\n config: configSerializer,\n migratedConfig: configSerializer,\n originalConfig: configSerializer,\n presetConfig: configSerializer,\n oldConfig: configSerializer,\n newConfig: configSerializer,\n err: errSerializer,\n },\n streams: streams.map(withSanitizer),\n });\n}\n\nexport function createLogger(\n stdoutLevel: BunyanLogLevel,\n problems: ProblemStream,\n): BunyanLogger {\n const defaultStreams = createDefaultStreams(\n stdoutLevel,\n problems,\n getEnv('LOG_FILE'),\n );\n\n return serializedSanitizedLogger(defaultStreams);\n}\n/**\n * A function that terminates execution if the log level that was entered is\n * not a valid value for the Bunyan logger.\n * @param logLevelToCheck\n * @returns returns the logLevel when the logLevelToCheck is valid or the defaultLevel passed as argument when it is undefined. Else it stops execution.\n */\nexport function validateLogLevel(\n logLevelToCheck: string | undefined,\n defaultLevel: BunyanLogLevel,\n): BunyanLogLevel {\n const allowedValues: BunyanLogLevel[] = [\n 'trace',\n 'debug',\n 'info',\n 'warn',\n 'error',\n 'fatal',\n ];\n\n if (\n isUndefined(logLevelToCheck) ||\n (isString(logLevelToCheck) &&\n allowedValues.includes(logLevelToCheck as BunyanLogLevel))\n ) {\n // log level is in the allowed values or its undefined\n return (logLevelToCheck as BunyanLogLevel) ?? defaultLevel;\n }\n\n const logger = bunyan.createLogger({\n name: 'renovate',\n streams: [\n {\n level: 'fatal',\n stream: process.stdout,\n },\n ],\n });\n logger.fatal({ logLevel: logLevelToCheck }, 'Invalid log level');\n process.exit(1);\n}\n"],"mappings":";;;;;;;;;;;AAiBA,SAAgB,qBACd,aACA,UACA,SACgB;CAChB,MAAM,SAAuB;EAC3B,MAAM;EACN,OAAO;EACP,QAAQ,QAAQ;EACjB;;AAGD,KAAI,OAAO,aAAa,KAAK,QAAQ;EAEnC,MAAM,eAAe,IAAI,gBAAgB;AACzC,eAAa,KAAK,QAAQ,OAAO;AACjC,SAAO,SAAS;AAChB,SAAO,OAAO;;AAchB,QAAO;EAAC;EAX6B;GACnC,MAAM;GACN,OAAO;GACP,QAAQ;GACR,MAAM;GACP;EAE+C,SAAS,QAAQ,GAC7D,oBAAoB,QAAQ,GAC5B,KAAA;EAE0C,CAAC,OAC7C,QACD;;AAGH,SAAS,oBAAoB,SAA+B;CAE1D,MAAM,gBAAgB,MAAM,QAAQ,QAAQ;AAC5C,IAAG,cAAc,cAAc;CAE/B,MAAM,OAAqB;EACzB,MAAM;EACN,MAAM;EACN,OAAO,iBAAiB,OAAO,iBAAiB,EAAE,QAAQ;EAC3D;CAED,MAAM,gBAAgB,OAAO,kBAAkB;AAE/C,KACE,iCAAiC,cAAc,IAC/C,kBAAkB,SAElB,MAAK,OAAO;AAGd,QAAO;;AAGT,SAAS,0BAA0B,SAAuC;AACxE,QAAO,OAAO,aAAa;EACzB,MAAM;EACN,aAAa;GACX,MAAM;GACN,KAAK;GACL,QAAQ;GACR,gBAAgB;GAChB,gBAAgB;GAChB,cAAc;GACd,WAAW;GACX,WAAW;GACX,KAAK;GACN;EACD,SAAS,QAAQ,IAAI,cAAc;EACpC,CAAC;;AAGJ,SAAgB,aACd,aACA,UACc;AAOd,QAAO,0BANgB,qBACrB,aACA,UACA,OAAO,WAAW,CACnB,CAE+C;;;;;;;;AAQlD,SAAgB,iBACd,iBACA,cACgB;AAUhB,KACE,YAAY,gBAAgB,IAC3B,SAAS,gBAAgB,IAXY;EACtC;EACA;EACA;EACA;EACA;EACA;EACD,CAKiB,SAAS,gBAAkC,CAG3D,QAAQ,mBAAsC;AAGjC,QAAO,aAAa;EACjC,MAAM;EACN,SAAS,CACP;GACE,OAAO;GACP,QAAQ,QAAQ;GACjB,CACF;EACF,CAAC,CACK,MAAM,EAAE,UAAU,iBAAiB,EAAE,oBAAoB;AAChE,SAAQ,KAAK,EAAE"}
1
+ {"version":3,"file":"bunyan.js","names":[],"sources":["../../lib/logger/bunyan.ts"],"sourcesContent":["import {\n isNonEmptyStringAndNotWhitespace,\n isString,\n isUndefined,\n} from '@sindresorhus/is';\nimport * as bunyan from 'bunyan';\nimport fs from 'fs-extra';\nimport upath from 'upath';\nimport cmdSerializer from './cmd-serializer.ts';\nimport configSerializer from './config-serializer.ts';\nimport errSerializer from './err-serializer.ts';\nimport { RenovateStream } from './pretty-stdout.ts';\nimport type { ProblemStream } from './problem-stream.ts';\nimport type { BunyanLogLevel, BunyanLogger, BunyanStream } from './types.ts';\nimport { getEnv } from './utils.ts';\nimport { withSanitizer } from './with-sanitizer.ts';\n\nexport function createDefaultStreams(\n stdoutLevel: BunyanLogLevel,\n problems: ProblemStream,\n logFile: string | undefined,\n): BunyanStream[] {\n const stdout: BunyanStream = {\n name: 'stdout',\n level: stdoutLevel,\n stream: process.stdout,\n };\n\n // v8 ignore else -- TODO: add test #40625\n if (getEnv('LOG_FORMAT') !== 'json') {\n const prettyStdOut = new RenovateStream(process.stdout);\n stdout.stream = prettyStdOut;\n stdout.type = 'raw';\n }\n\n const problemsStream: BunyanStream = {\n name: 'problems',\n level: 'warn' as BunyanLogLevel,\n stream: problems as any,\n type: 'raw',\n };\n\n const logFileStream: BunyanStream | undefined = isString(logFile)\n ? createLogFileStream(logFile)\n : undefined;\n\n return [stdout, problemsStream, logFileStream].filter(\n Boolean,\n ) as BunyanStream[];\n}\n\nfunction createLogFileStream(logFile: string): BunyanStream {\n // Ensure log file directory exists\n const directoryName = upath.dirname(logFile);\n fs.ensureDirSync(directoryName);\n\n const file: BunyanStream = {\n name: 'logfile',\n path: logFile,\n level: validateLogLevel(getEnv('LOG_FILE_LEVEL'), 'debug'),\n };\n\n const logFileFormat = getEnv('LOG_FILE_FORMAT');\n\n if (\n isNonEmptyStringAndNotWhitespace(logFileFormat) &&\n logFileFormat === 'pretty'\n ) {\n const fileStream = fs.createWriteStream(logFile, {\n flags: 'a',\n encoding: 'utf8',\n });\n const prettyFile = new RenovateStream(fileStream, false);\n file.stream = prettyFile;\n file.type = 'raw';\n delete file.path;\n }\n\n return file;\n}\n\nfunction serializedSanitizedLogger(streams: BunyanStream[]): BunyanLogger {\n return bunyan.createLogger({\n name: 'renovate',\n serializers: {\n body: configSerializer,\n cmd: cmdSerializer,\n config: configSerializer,\n migratedConfig: configSerializer,\n originalConfig: configSerializer,\n presetConfig: configSerializer,\n oldConfig: configSerializer,\n newConfig: configSerializer,\n err: errSerializer,\n },\n streams: streams.map(withSanitizer),\n });\n}\n\nexport function createLogger(\n stdoutLevel: BunyanLogLevel,\n problems: ProblemStream,\n): BunyanLogger {\n const defaultStreams = createDefaultStreams(\n stdoutLevel,\n problems,\n getEnv('LOG_FILE'),\n );\n\n return serializedSanitizedLogger(defaultStreams);\n}\n/**\n * A function that terminates execution if the log level that was entered is\n * not a valid value for the Bunyan logger.\n * @param logLevelToCheck\n * @returns returns the logLevel when the logLevelToCheck is valid or the defaultLevel passed as argument when it is undefined. Else it stops execution.\n */\nexport function validateLogLevel(\n logLevelToCheck: string | undefined,\n defaultLevel: BunyanLogLevel,\n): BunyanLogLevel {\n const allowedValues: BunyanLogLevel[] = [\n 'trace',\n 'debug',\n 'info',\n 'warn',\n 'error',\n 'fatal',\n ];\n\n if (\n isUndefined(logLevelToCheck) ||\n (isString(logLevelToCheck) &&\n allowedValues.includes(logLevelToCheck as BunyanLogLevel))\n ) {\n // log level is in the allowed values or its undefined\n return (logLevelToCheck as BunyanLogLevel) ?? defaultLevel;\n }\n\n const logger = bunyan.createLogger({\n name: 'renovate',\n streams: [\n {\n level: 'fatal',\n stream: process.stdout,\n },\n ],\n });\n logger.fatal({ logLevel: logLevelToCheck }, 'Invalid log level');\n process.exit(1);\n}\n"],"mappings":";;;;;;;;;;;AAiBA,SAAgB,qBACd,aACA,UACA,SACgB;CAChB,MAAM,SAAuB;EAC3B,MAAM;EACN,OAAO;EACP,QAAQ,QAAQ;EACjB;;AAGD,KAAI,OAAO,aAAa,KAAK,QAAQ;AAEnC,SAAO,SADc,IAAI,eAAe,QAAQ,OAAO;AAEvD,SAAO,OAAO;;AAchB,QAAO;EAAC;EAX6B;GACnC,MAAM;GACN,OAAO;GACP,QAAQ;GACR,MAAM;GACP;EAE+C,SAAS,QAAQ,GAC7D,oBAAoB,QAAQ,GAC5B,KAAA;EAE0C,CAAC,OAC7C,QACD;;AAGH,SAAS,oBAAoB,SAA+B;CAE1D,MAAM,gBAAgB,MAAM,QAAQ,QAAQ;AAC5C,IAAG,cAAc,cAAc;CAE/B,MAAM,OAAqB;EACzB,MAAM;EACN,MAAM;EACN,OAAO,iBAAiB,OAAO,iBAAiB,EAAE,QAAQ;EAC3D;CAED,MAAM,gBAAgB,OAAO,kBAAkB;AAE/C,KACE,iCAAiC,cAAc,IAC/C,kBAAkB,UAClB;AAMA,OAAK,SADc,IAAI,eAJJ,GAAG,kBAAkB,SAAS;GAC/C,OAAO;GACP,UAAU;GACX,CAAC,EACgD,MAAM;AAExD,OAAK,OAAO;AACZ,SAAO,KAAK;;AAGd,QAAO;;AAGT,SAAS,0BAA0B,SAAuC;AACxE,QAAO,OAAO,aAAa;EACzB,MAAM;EACN,aAAa;GACX,MAAM;GACN,KAAK;GACL,QAAQ;GACR,gBAAgB;GAChB,gBAAgB;GAChB,cAAc;GACd,WAAW;GACX,WAAW;GACX,KAAK;GACN;EACD,SAAS,QAAQ,IAAI,cAAc;EACpC,CAAC;;AAGJ,SAAgB,aACd,aACA,UACc;AAOd,QAAO,0BANgB,qBACrB,aACA,UACA,OAAO,WAAW,CACnB,CAE+C;;;;;;;;AAQlD,SAAgB,iBACd,iBACA,cACgB;AAUhB,KACE,YAAY,gBAAgB,IAC3B,SAAS,gBAAgB,IAXY;EACtC;EACA;EACA;EACA;EACA;EACA;EACD,CAKiB,SAAS,gBAAkC,CAG3D,QAAQ,mBAAsC;AAGjC,QAAO,aAAa;EACjC,MAAM;EACN,SAAS,CACP;GACE,OAAO;GACP,QAAQ,QAAQ;GACjB,CACF;EACF,CAAC,CACK,MAAM,EAAE,UAAU,iBAAiB,EAAE,oBAAoB;AAChE,SAAQ,KAAK,EAAE"}
@@ -1,5 +1,6 @@
1
1
  import { regEx } from "../util/regex.js";
2
- import { Stream } from "node:stream";
2
+ import { isNonEmptyObject, isPlainObject, isString } from "@sindresorhus/is";
3
+ import { Writable } from "node:stream";
3
4
  import * as util$1 from "node:util";
4
5
  import stringify from "json-stringify-pretty-compact";
5
6
  //#region lib/logger/pretty-stdout.ts
@@ -23,6 +24,14 @@ const metaFields = [
23
24
  "branch"
24
25
  ];
25
26
  const levels = {
27
+ 10: "TRACE",
28
+ 20: "DEBUG",
29
+ 30: " INFO",
30
+ 40: " WARN",
31
+ 50: "ERROR",
32
+ 60: "FATAL"
33
+ };
34
+ const colorizedLevels = {
26
35
  10: util$1.styleText("gray", "TRACE"),
27
36
  20: util$1.styleText("blue", "DEBUG"),
28
37
  30: util$1.styleText("green", " INFO"),
@@ -33,13 +42,13 @@ const levels = {
33
42
  function indent(str, leading = false) {
34
43
  return (leading ? " " : "") + str.split(regEx(/\r?\n/)).join("\n ");
35
44
  }
36
- function getMeta(rec) {
45
+ function getMeta(rec, colorize = true) {
37
46
  if (!rec) return "";
38
47
  let res = rec.module ? ` [${rec.module}]` : ``;
39
48
  const filteredMeta = metaFields.filter((elem) => rec[elem]);
40
49
  if (!filteredMeta.length) return res;
41
50
  res = ` (${filteredMeta.map((field) => `${field}=${String(rec[field])}`).join(", ")})${res}`;
42
- return util$1.styleText("gray", res);
51
+ return colorize ? util$1.styleText("gray", res) : res;
43
52
  }
44
53
  function getDetails(rec) {
45
54
  if (!rec) return "";
@@ -50,26 +59,38 @@ function getDetails(rec) {
50
59
  });
51
60
  const remainingKeys = Object.keys(recFiltered);
52
61
  if (remainingKeys.length === 0) return "";
62
+ const err = recFiltered.err;
63
+ if (isPlainObject(err) && isString(err.stack)) {
64
+ const { stack, ...errRest } = err;
65
+ recFiltered.err = isNonEmptyObject(errRest) ? errRest : void 0;
66
+ const parts = [];
67
+ for (const key of remainingKeys) {
68
+ if (key === "err" && recFiltered.err === void 0) continue;
69
+ parts.push(indent(`"${key}": ${stringify(recFiltered[key])}`, true));
70
+ }
71
+ const jsonPart = parts.join(",\n");
72
+ const stackPart = indent(stack, true);
73
+ return jsonPart ? `${jsonPart}\n${stackPart}\n` : `${stackPart}\n`;
74
+ }
53
75
  return `${remainingKeys.map((key) => `${indent(`"${key}": ${stringify(recFiltered[key])}`, true)}`).join(",\n")}\n`;
54
76
  }
55
- function formatRecord(rec) {
56
- const level = levels[rec.level];
77
+ function formatRecord(rec, colorize = true) {
78
+ const level = colorize ? colorizedLevels[rec.level] : levels[rec.level];
57
79
  const msg = `${indent(rec.msg)}`;
58
- const meta = getMeta(rec);
80
+ const meta = getMeta(rec, colorize);
59
81
  const details = getDetails(rec);
60
82
  return util$1.format("%s: %s%s\n%s", level, msg, meta, details);
61
83
  }
62
- var RenovateStream = class extends Stream {
63
- readable;
64
- writable;
65
- constructor() {
66
- super();
67
- this.readable = true;
68
- this.writable = true;
84
+ var RenovateStream = class extends Writable {
85
+ colorize;
86
+ destination;
87
+ constructor(destination, colorize = true) {
88
+ super({ objectMode: true });
89
+ this.colorize = colorize;
90
+ this.destination = destination;
69
91
  }
70
- write(data) {
71
- this.emit("data", formatRecord(data));
72
- return true;
92
+ _write(data, _encoding, callback) {
93
+ this.destination.write(formatRecord(data, this.colorize), callback);
73
94
  }
74
95
  };
75
96
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"pretty-stdout.js","names":["util"],"sources":["../../lib/logger/pretty-stdout.ts"],"sourcesContent":["// Code originally derived from https://github.com/hadfieldn/node-bunyan-prettystream but since heavily edited\n// Neither fork nor original repo appear to be maintained\n\nimport { Stream } from 'node:stream';\nimport * as util from 'node:util';\nimport stringify from 'json-stringify-pretty-compact';\nimport { regEx } from '../util/regex.ts';\nimport type { BunyanRecord } from './types.ts';\n\nconst bunyanFields = [\n 'name',\n 'hostname',\n 'pid',\n 'level',\n 'v',\n 'time',\n 'msg',\n 'start_time',\n];\nconst metaFields = [\n 'repository',\n 'baseBranch',\n 'packageFile',\n 'depType',\n 'dependency',\n 'dependencies',\n 'branch',\n];\n\nconst levels: Record<number, string> = {\n 10: util.styleText('gray', 'TRACE'),\n 20: util.styleText('blue', 'DEBUG'),\n 30: util.styleText('green', ' INFO'),\n 40: util.styleText('magenta', ' WARN'),\n 50: util.styleText('red', 'ERROR'),\n 60: util.styleText('bgRed', 'FATAL'),\n};\n\nexport function indent(str: string, leading = false): string {\n const prefix = leading ? ' ' : '';\n return prefix + str.split(regEx(/\\r?\\n/)).join('\\n ');\n}\n\nexport function getMeta(rec: BunyanRecord): string {\n if (!rec) {\n return '';\n }\n let res = rec.module ? ` [${rec.module}]` : ``;\n const filteredMeta = metaFields.filter((elem) => rec[elem]);\n if (!filteredMeta.length) {\n return res;\n }\n const metaStr = filteredMeta\n .map((field) => `${field}=${String(rec[field])}`)\n .join(', ');\n res = ` (${metaStr})${res}`;\n return util.styleText('gray', res);\n}\n\nexport function getDetails(rec: BunyanRecord): string {\n if (!rec) {\n return '';\n }\n const recFiltered = { ...rec };\n delete recFiltered.module;\n Object.keys(recFiltered).forEach((key) => {\n if (\n key === 'logContext' ||\n bunyanFields.includes(key) ||\n metaFields.includes(key)\n ) {\n delete recFiltered[key];\n }\n });\n const remainingKeys = Object.keys(recFiltered);\n if (remainingKeys.length === 0) {\n return '';\n }\n return `${remainingKeys\n .map((key) => `${indent(`\"${key}\": ${stringify(recFiltered[key])}`, true)}`)\n .join(',\\n')}\\n`;\n}\n\nexport function formatRecord(rec: BunyanRecord): string {\n const level = levels[rec.level];\n const msg = `${indent(rec.msg)}`;\n const meta = getMeta(rec);\n const details = getDetails(rec);\n return util.format('%s: %s%s\\n%s', level, msg, meta, details);\n}\n\nexport class RenovateStream extends Stream {\n readable: boolean;\n\n writable: boolean;\n\n constructor() {\n super();\n this.readable = true;\n this.writable = true;\n }\n\n write(data: BunyanRecord): boolean {\n this.emit('data', formatRecord(data));\n return true;\n }\n}\n"],"mappings":";;;;;AASA,MAAM,eAAe;CACnB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AACD,MAAM,aAAa;CACjB;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAM,SAAiC;CACrC,IAAIA,OAAK,UAAU,QAAQ,QAAQ;CACnC,IAAIA,OAAK,UAAU,QAAQ,QAAQ;CACnC,IAAIA,OAAK,UAAU,SAAS,QAAQ;CACpC,IAAIA,OAAK,UAAU,WAAW,QAAQ;CACtC,IAAIA,OAAK,UAAU,OAAO,QAAQ;CAClC,IAAIA,OAAK,UAAU,SAAS,QAAQ;CACrC;AAED,SAAgB,OAAO,KAAa,UAAU,OAAe;AAE3D,SADe,UAAU,YAAY,MACrB,IAAI,MAAM,MAAM,QAAQ,CAAC,CAAC,KAAK,YAAY;;AAG7D,SAAgB,QAAQ,KAA2B;AACjD,KAAI,CAAC,IACH,QAAO;CAET,IAAI,MAAM,IAAI,SAAS,KAAK,IAAI,OAAO,KAAK;CAC5C,MAAM,eAAe,WAAW,QAAQ,SAAS,IAAI,MAAM;AAC3D,KAAI,CAAC,aAAa,OAChB,QAAO;AAKT,OAAM,KAHU,aACb,KAAK,UAAU,GAAG,MAAM,GAAG,OAAO,IAAI,OAAO,GAAG,CAChD,KAAK,KAAK,CACM,GAAG;AACtB,QAAOA,OAAK,UAAU,QAAQ,IAAI;;AAGpC,SAAgB,WAAW,KAA2B;AACpD,KAAI,CAAC,IACH,QAAO;CAET,MAAM,cAAc,EAAE,GAAG,KAAK;AAC9B,QAAO,YAAY;AACnB,QAAO,KAAK,YAAY,CAAC,SAAS,QAAQ;AACxC,MACE,QAAQ,gBACR,aAAa,SAAS,IAAI,IAC1B,WAAW,SAAS,IAAI,CAExB,QAAO,YAAY;GAErB;CACF,MAAM,gBAAgB,OAAO,KAAK,YAAY;AAC9C,KAAI,cAAc,WAAW,EAC3B,QAAO;AAET,QAAO,GAAG,cACP,KAAK,QAAQ,GAAG,OAAO,IAAI,IAAI,KAAK,UAAU,YAAY,KAAK,IAAI,KAAK,GAAG,CAC3E,KAAK,MAAM,CAAC;;AAGjB,SAAgB,aAAa,KAA2B;CACtD,MAAM,QAAQ,OAAO,IAAI;CACzB,MAAM,MAAM,GAAG,OAAO,IAAI,IAAI;CAC9B,MAAM,OAAO,QAAQ,IAAI;CACzB,MAAM,UAAU,WAAW,IAAI;AAC/B,QAAOA,OAAK,OAAO,gBAAgB,OAAO,KAAK,MAAM,QAAQ;;AAG/D,IAAa,iBAAb,cAAoC,OAAO;CACzC;CAEA;CAEA,cAAc;AACZ,SAAO;AACP,OAAK,WAAW;AAChB,OAAK,WAAW;;CAGlB,MAAM,MAA6B;AACjC,OAAK,KAAK,QAAQ,aAAa,KAAK,CAAC;AACrC,SAAO"}
1
+ {"version":3,"file":"pretty-stdout.js","names":["util"],"sources":["../../lib/logger/pretty-stdout.ts"],"sourcesContent":["// Code originally derived from https://github.com/hadfieldn/node-bunyan-prettystream but since heavily edited\n// Neither fork nor original repo appear to be maintained\n\nimport { Writable } from 'node:stream';\nimport * as util from 'node:util';\nimport { isNonEmptyObject, isPlainObject, isString } from '@sindresorhus/is';\nimport stringify from 'json-stringify-pretty-compact';\nimport { regEx } from '../util/regex.ts';\nimport type { BunyanRecord } from './types.ts';\n\nconst bunyanFields = [\n 'name',\n 'hostname',\n 'pid',\n 'level',\n 'v',\n 'time',\n 'msg',\n 'start_time',\n];\nconst metaFields = [\n 'repository',\n 'baseBranch',\n 'packageFile',\n 'depType',\n 'dependency',\n 'dependencies',\n 'branch',\n];\n\nconst levels: Record<number, string> = {\n 10: 'TRACE',\n 20: 'DEBUG',\n 30: ' INFO',\n 40: ' WARN',\n 50: 'ERROR',\n 60: 'FATAL',\n};\n\nconst colorizedLevels: Record<number, string> = {\n 10: util.styleText('gray', 'TRACE'),\n 20: util.styleText('blue', 'DEBUG'),\n 30: util.styleText('green', ' INFO'),\n 40: util.styleText('magenta', ' WARN'),\n 50: util.styleText('red', 'ERROR'),\n 60: util.styleText('bgRed', 'FATAL'),\n};\n\nexport function indent(str: string, leading = false): string {\n const prefix = leading ? ' ' : '';\n return prefix + str.split(regEx(/\\r?\\n/)).join('\\n ');\n}\n\nexport function getMeta(rec: BunyanRecord, colorize = true): string {\n if (!rec) {\n return '';\n }\n let res = rec.module ? ` [${rec.module}]` : ``;\n const filteredMeta = metaFields.filter((elem) => rec[elem]);\n if (!filteredMeta.length) {\n return res;\n }\n const metaStr = filteredMeta\n .map((field) => `${field}=${String(rec[field])}`)\n .join(', ');\n res = ` (${metaStr})${res}`;\n return colorize ? util.styleText('gray', res) : res;\n}\n\nexport function getDetails(rec: BunyanRecord): string {\n if (!rec) {\n return '';\n }\n const recFiltered = { ...rec };\n delete recFiltered.module;\n Object.keys(recFiltered).forEach((key) => {\n if (\n key === 'logContext' ||\n bunyanFields.includes(key) ||\n metaFields.includes(key)\n ) {\n delete recFiltered[key];\n }\n });\n const remainingKeys = Object.keys(recFiltered);\n if (remainingKeys.length === 0) {\n return '';\n }\n\n // Handle err.stack specially for readable multi-line output\n const err = recFiltered.err;\n if (isPlainObject(err) && isString(err.stack)) {\n const { stack, ...errRest } = err;\n recFiltered.err = isNonEmptyObject(errRest) ? errRest : undefined;\n const parts: string[] = [];\n for (const key of remainingKeys) {\n if (key === 'err' && recFiltered.err === undefined) {\n continue;\n }\n parts.push(indent(`\"${key}\": ${stringify(recFiltered[key])}`, true));\n }\n const jsonPart = parts.join(',\\n');\n const stackPart = indent(stack, true);\n return jsonPart ? `${jsonPart}\\n${stackPart}\\n` : `${stackPart}\\n`;\n }\n\n return `${remainingKeys\n .map((key) => `${indent(`\"${key}\": ${stringify(recFiltered[key])}`, true)}`)\n .join(',\\n')}\\n`;\n}\n\nexport function formatRecord(rec: BunyanRecord, colorize = true): string {\n const level = colorize ? colorizedLevels[rec.level] : levels[rec.level];\n const msg = `${indent(rec.msg)}`;\n const meta = getMeta(rec, colorize);\n const details = getDetails(rec);\n return util.format('%s: %s%s\\n%s', level, msg, meta, details);\n}\n\nexport class RenovateStream extends Writable {\n private colorize: boolean;\n private destination: NodeJS.WritableStream;\n\n constructor(destination: NodeJS.WritableStream, colorize = true) {\n super({ objectMode: true });\n this.colorize = colorize;\n this.destination = destination;\n }\n\n override _write(\n data: BunyanRecord,\n _encoding: string,\n callback: (error?: Error | null) => void,\n ): void {\n this.destination.write(formatRecord(data, this.colorize), callback);\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "renovate",
3
3
  "description": "Automated dependency updates. Flexible so you don't need to be.",
4
- "version": "43.120.0",
4
+ "version": "43.120.1",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "renovate": "dist/renovate.js",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$id": "https://docs.renovatebot.com/renovate-schema.json",
3
- "title": "JSON schema for Renovate 43.120.0 config files (https://renovatebot.com/)",
3
+ "title": "JSON schema for Renovate 43.120.1 config files (https://renovatebot.com/)",
4
4
  "$schema": "http://json-schema.org/draft-07/schema#",
5
- "x-renovate-version": "43.120.0",
5
+ "x-renovate-version": "43.120.1",
6
6
  "allowComments": true,
7
7
  "type": "object",
8
8
  "properties": {