renovate 43.61.0 → 43.61.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.
- package/dist/config/parse.js +1 -1
- package/dist/constants/error-messages.d.ts +3 -1
- package/dist/constants/error-messages.js +3 -1
- package/dist/constants/error-messages.js.map +1 -1
- package/dist/logger/bunyan.js +96 -0
- package/dist/logger/bunyan.js.map +1 -0
- package/dist/logger/index.d.ts +6 -8
- package/dist/logger/index.js +11 -67
- package/dist/logger/index.js.map +1 -1
- package/dist/logger/once.js.map +1 -1
- package/dist/logger/problem-stream.js +35 -0
- package/dist/logger/problem-stream.js.map +1 -0
- package/dist/logger/remap.js.map +1 -1
- package/dist/logger/renovate-logger.d.ts +12 -6
- package/dist/logger/renovate-logger.js +29 -7
- package/dist/logger/renovate-logger.js.map +1 -1
- package/dist/logger/types.d.ts +5 -3
- package/dist/logger/utils.js +2 -85
- package/dist/logger/utils.js.map +1 -1
- package/dist/logger/with-sanitizer.js +37 -0
- package/dist/logger/with-sanitizer.js.map +1 -0
- package/dist/modules/manager/cocoapods/artifacts.js +1 -1
- package/dist/modules/manager/copier/artifacts.js +1 -1
- package/dist/modules/manager/gomod/artifacts.js +1 -1
- package/dist/modules/manager/gradle/artifacts.js +1 -1
- package/dist/modules/manager/gradle-wrapper/artifacts.js +1 -1
- package/dist/modules/manager/helmv3/common.js +1 -1
- package/dist/modules/manager/hermit/artifacts.js +1 -1
- package/dist/modules/manager/kustomize/artifacts.js +1 -1
- package/dist/modules/manager/npm/artifacts.js +1 -1
- package/dist/modules/manager/npm/post-update/npm.js +1 -1
- package/dist/modules/manager/npm/post-update/pnpm.js +1 -1
- package/dist/modules/manager/npm/post-update/yarn.js +1 -1
- package/dist/modules/manager/nuget/artifacts.js +1 -1
- package/dist/modules/manager/pip-compile/artifacts.js +1 -1
- package/dist/modules/manager/pip-compile/common.js +1 -1
- package/dist/modules/platform/bitbucket/index.js +1 -1
- package/dist/renovate.js +4 -3
- package/dist/renovate.js.map +1 -1
- package/dist/util/cache/package/impl/file.js +1 -1
- package/dist/util/fs/index.js +1 -1
- package/dist/util/git/index.js +1 -1
- package/dist/workers/global/index.js +2 -2
- package/dist/workers/repository/config-migration/branch/migrated-data.js +1 -1
- package/dist/workers/repository/update/branch/commit.js +1 -1
- package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js +1 -1
- package/package.json +1 -1
- package/renovate-schema.json +2 -2
- package/dist/logger/utils.d.ts +0 -18
package/dist/config/parse.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { logger } from "../logger/index.js";
|
|
2
2
|
import { parseJson } from "../util/common.js";
|
|
3
|
-
import upath from "upath";
|
|
4
3
|
import JSON5 from "json5";
|
|
4
|
+
import upath from "upath";
|
|
5
5
|
import stripJsonComments from "strip-json-comments";
|
|
6
6
|
import jsonValidator from "json-dup-key-validator";
|
|
7
7
|
|
|
@@ -53,6 +53,8 @@ declare const UNKNOWN_ERROR = "unknown-error";
|
|
|
53
53
|
declare const INVALID_PATH = "invalid-path";
|
|
54
54
|
declare const PAGE_NOT_FOUND_ERROR = "page-not-found";
|
|
55
55
|
declare const MISSING_API_CREDENTIALS = "missing-api-credentials";
|
|
56
|
+
/** Logger not initialized */
|
|
57
|
+
declare const LOGGER_NOT_INITIALIZED = "logger-not-initialized";
|
|
56
58
|
//#endregion
|
|
57
|
-
export { BUNDLER_INVALID_CREDENTIALS, CONFIG_GIT_URL_UNAVAILABLE, CONFIG_INHERIT_NOT_FOUND, CONFIG_INHERIT_PARSE_ERROR, CONFIG_PRESETS_INVALID, CONFIG_SECRETS_EXPOSED, CONFIG_SECRETS_INVALID, CONFIG_VALIDATION, CONFIG_VARIABLES_INVALID, ConfigErrors, EXTERNAL_HOST_ERROR, FILE_ACCESS_VIOLATION_ERROR, HOST_DISABLED, IGNORABLE_HOST_ERROR, INVALID_PATH, MANAGER_LOCKFILE_ERROR, MISSING_API_CREDENTIALS, NO_VULNERABILITY_ALERTS, PAGE_NOT_FOUND_ERROR, PLATFORM_AUTHENTICATION_ERROR, PLATFORM_BAD_CREDENTIALS, PLATFORM_GPG_FAILED, PLATFORM_INTEGRATION_UNAUTHORIZED, PLATFORM_NOT_FOUND, PLATFORM_RATE_LIMIT_EXCEEDED, PLATFORM_UNKNOWN_ERROR, PlatformErrors, REPOSITORY_ACCESS_FORBIDDEN, REPOSITORY_ARCHIVED, REPOSITORY_BLOCKED, REPOSITORY_CANNOT_FORK, REPOSITORY_CHANGED, REPOSITORY_CLOSED_ONBOARDING, REPOSITORY_DISABLED, REPOSITORY_DISABLED_BY_CONFIG, REPOSITORY_EMPTY, REPOSITORY_FORKED, REPOSITORY_FORK_MISSING, REPOSITORY_FORK_MODE_FORKED, REPOSITORY_MIRRORED, REPOSITORY_NOT_FOUND, REPOSITORY_NO_CONFIG, REPOSITORY_NO_PACKAGE_FILES, REPOSITORY_RENAMED, REPOSITORY_UNINITIATED, RepositoryErrors, SYSTEM_INSUFFICIENT_DISK_SPACE, SYSTEM_INSUFFICIENT_MEMORY, SystemErrors, TEMPORARY_ERROR, TemporaryErrors, UNKNOWN_ERROR, WORKER_FILE_UPDATE_FAILED };
|
|
59
|
+
export { BUNDLER_INVALID_CREDENTIALS, CONFIG_GIT_URL_UNAVAILABLE, CONFIG_INHERIT_NOT_FOUND, CONFIG_INHERIT_PARSE_ERROR, CONFIG_PRESETS_INVALID, CONFIG_SECRETS_EXPOSED, CONFIG_SECRETS_INVALID, CONFIG_VALIDATION, CONFIG_VARIABLES_INVALID, ConfigErrors, EXTERNAL_HOST_ERROR, FILE_ACCESS_VIOLATION_ERROR, HOST_DISABLED, IGNORABLE_HOST_ERROR, INVALID_PATH, LOGGER_NOT_INITIALIZED, MANAGER_LOCKFILE_ERROR, MISSING_API_CREDENTIALS, NO_VULNERABILITY_ALERTS, PAGE_NOT_FOUND_ERROR, PLATFORM_AUTHENTICATION_ERROR, PLATFORM_BAD_CREDENTIALS, PLATFORM_GPG_FAILED, PLATFORM_INTEGRATION_UNAUTHORIZED, PLATFORM_NOT_FOUND, PLATFORM_RATE_LIMIT_EXCEEDED, PLATFORM_UNKNOWN_ERROR, PlatformErrors, REPOSITORY_ACCESS_FORBIDDEN, REPOSITORY_ARCHIVED, REPOSITORY_BLOCKED, REPOSITORY_CANNOT_FORK, REPOSITORY_CHANGED, REPOSITORY_CLOSED_ONBOARDING, REPOSITORY_DISABLED, REPOSITORY_DISABLED_BY_CONFIG, REPOSITORY_EMPTY, REPOSITORY_FORKED, REPOSITORY_FORK_MISSING, REPOSITORY_FORK_MODE_FORKED, REPOSITORY_MIRRORED, REPOSITORY_NOT_FOUND, REPOSITORY_NO_CONFIG, REPOSITORY_NO_PACKAGE_FILES, REPOSITORY_RENAMED, REPOSITORY_UNINITIATED, RepositoryErrors, SYSTEM_INSUFFICIENT_DISK_SPACE, SYSTEM_INSUFFICIENT_MEMORY, SystemErrors, TEMPORARY_ERROR, TemporaryErrors, UNKNOWN_ERROR, WORKER_FILE_UPDATE_FAILED };
|
|
58
60
|
//# sourceMappingURL=error-messages.d.ts.map
|
|
@@ -92,7 +92,9 @@ const UNKNOWN_ERROR = "unknown-error";
|
|
|
92
92
|
const INVALID_PATH = "invalid-path";
|
|
93
93
|
const PAGE_NOT_FOUND_ERROR = "page-not-found";
|
|
94
94
|
const MISSING_API_CREDENTIALS = "missing-api-credentials";
|
|
95
|
+
/** Logger not initialized */
|
|
96
|
+
const LOGGER_NOT_INITIALIZED = "logger-not-initialized";
|
|
95
97
|
|
|
96
98
|
//#endregion
|
|
97
|
-
export { BUNDLER_INVALID_CREDENTIALS, CONFIG_GIT_URL_UNAVAILABLE, CONFIG_INHERIT_NOT_FOUND, CONFIG_INHERIT_PARSE_ERROR, CONFIG_PRESETS_INVALID, CONFIG_SECRETS_EXPOSED, CONFIG_SECRETS_INVALID, CONFIG_VALIDATION, CONFIG_VARIABLES_INVALID, ConfigErrors, EXTERNAL_HOST_ERROR, FILE_ACCESS_VIOLATION_ERROR, HOST_DISABLED, IGNORABLE_HOST_ERROR, INVALID_PATH, MANAGER_LOCKFILE_ERROR, MISSING_API_CREDENTIALS, NO_VULNERABILITY_ALERTS, PAGE_NOT_FOUND_ERROR, PLATFORM_AUTHENTICATION_ERROR, PLATFORM_BAD_CREDENTIALS, PLATFORM_GPG_FAILED, PLATFORM_INTEGRATION_UNAUTHORIZED, PLATFORM_NOT_FOUND, PLATFORM_RATE_LIMIT_EXCEEDED, PLATFORM_UNKNOWN_ERROR, PlatformErrors, REPOSITORY_ACCESS_FORBIDDEN, REPOSITORY_ARCHIVED, REPOSITORY_BLOCKED, REPOSITORY_CANNOT_FORK, REPOSITORY_CHANGED, REPOSITORY_CLOSED_ONBOARDING, REPOSITORY_DISABLED, REPOSITORY_DISABLED_BY_CONFIG, REPOSITORY_EMPTY, REPOSITORY_FORKED, REPOSITORY_FORK_MISSING, REPOSITORY_FORK_MODE_FORKED, REPOSITORY_MIRRORED, REPOSITORY_NOT_FOUND, REPOSITORY_NO_CONFIG, REPOSITORY_NO_PACKAGE_FILES, REPOSITORY_RENAMED, REPOSITORY_UNINITIATED, RepositoryErrors, SYSTEM_INSUFFICIENT_DISK_SPACE, SYSTEM_INSUFFICIENT_MEMORY, SystemErrors, TEMPORARY_ERROR, TemporaryErrors, UNKNOWN_ERROR, WORKER_FILE_UPDATE_FAILED };
|
|
99
|
+
export { BUNDLER_INVALID_CREDENTIALS, CONFIG_GIT_URL_UNAVAILABLE, CONFIG_INHERIT_NOT_FOUND, CONFIG_INHERIT_PARSE_ERROR, CONFIG_PRESETS_INVALID, CONFIG_SECRETS_EXPOSED, CONFIG_SECRETS_INVALID, CONFIG_VALIDATION, CONFIG_VARIABLES_INVALID, ConfigErrors, EXTERNAL_HOST_ERROR, FILE_ACCESS_VIOLATION_ERROR, HOST_DISABLED, IGNORABLE_HOST_ERROR, INVALID_PATH, LOGGER_NOT_INITIALIZED, MANAGER_LOCKFILE_ERROR, MISSING_API_CREDENTIALS, NO_VULNERABILITY_ALERTS, PAGE_NOT_FOUND_ERROR, PLATFORM_AUTHENTICATION_ERROR, PLATFORM_BAD_CREDENTIALS, PLATFORM_GPG_FAILED, PLATFORM_INTEGRATION_UNAUTHORIZED, PLATFORM_NOT_FOUND, PLATFORM_RATE_LIMIT_EXCEEDED, PLATFORM_UNKNOWN_ERROR, PlatformErrors, REPOSITORY_ACCESS_FORBIDDEN, REPOSITORY_ARCHIVED, REPOSITORY_BLOCKED, REPOSITORY_CANNOT_FORK, REPOSITORY_CHANGED, REPOSITORY_CLOSED_ONBOARDING, REPOSITORY_DISABLED, REPOSITORY_DISABLED_BY_CONFIG, REPOSITORY_EMPTY, REPOSITORY_FORKED, REPOSITORY_FORK_MISSING, REPOSITORY_FORK_MODE_FORKED, REPOSITORY_MIRRORED, REPOSITORY_NOT_FOUND, REPOSITORY_NO_CONFIG, REPOSITORY_NO_PACKAGE_FILES, REPOSITORY_RENAMED, REPOSITORY_UNINITIATED, RepositoryErrors, SYSTEM_INSUFFICIENT_DISK_SPACE, SYSTEM_INSUFFICIENT_MEMORY, SystemErrors, TEMPORARY_ERROR, TemporaryErrors, UNKNOWN_ERROR, WORKER_FILE_UPDATE_FAILED };
|
|
98
100
|
//# sourceMappingURL=error-messages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-messages.js","names":[],"sources":["../../lib/constants/error-messages.ts"],"sourcesContent":["// System error\nexport const SYSTEM_INSUFFICIENT_DISK_SPACE = 'disk-space';\nexport const SYSTEM_INSUFFICIENT_MEMORY = 'out-of-memory';\n\nexport const SystemErrors = [\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n SYSTEM_INSUFFICIENT_MEMORY,\n] as const;\n\n// Platform Error\nexport const PLATFORM_AUTHENTICATION_ERROR = 'authentication-error';\nexport const PLATFORM_BAD_CREDENTIALS = 'bad-credentials';\nexport const PLATFORM_GPG_FAILED = 'gpg-failed';\nexport const PLATFORM_INTEGRATION_UNAUTHORIZED = 'integration-unauthorized';\nexport const PLATFORM_NOT_FOUND = 'platform-not-found';\nexport const PLATFORM_RATE_LIMIT_EXCEEDED = 'rate-limit-exceeded';\nexport const PLATFORM_UNKNOWN_ERROR = 'platform-unknown-error';\n\nexport const PlatformErrors = [\n PLATFORM_AUTHENTICATION_ERROR,\n PLATFORM_BAD_CREDENTIALS,\n PLATFORM_GPG_FAILED,\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_NOT_FOUND,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n PLATFORM_UNKNOWN_ERROR,\n] as const;\n\n// Config Error\nexport const CONFIG_VALIDATION = 'config-validation';\nexport const CONFIG_PRESETS_INVALID = 'config-presets-invalid';\nexport const CONFIG_SECRETS_EXPOSED = 'config-secrets-exposed';\nexport const CONFIG_SECRETS_INVALID = 'config-secrets-invalid';\nexport const CONFIG_VARIABLES_INVALID = 'config-variables-invalid';\nexport const CONFIG_GIT_URL_UNAVAILABLE = 'config-git-url-unavailable';\nexport const CONFIG_INHERIT_NOT_FOUND = 'config-inherit-not-found';\nexport const CONFIG_INHERIT_PARSE_ERROR = 'config-inherit-parse-error';\n\nexport const ConfigErrors = [\n CONFIG_VALIDATION,\n CONFIG_PRESETS_INVALID,\n CONFIG_SECRETS_EXPOSED,\n CONFIG_SECRETS_INVALID,\n CONFIG_VARIABLES_INVALID,\n CONFIG_GIT_URL_UNAVAILABLE,\n CONFIG_INHERIT_NOT_FOUND,\n CONFIG_INHERIT_PARSE_ERROR,\n] as const;\n\n// Repository Errors - causes repo to be considered as disabled\nexport const REPOSITORY_ACCESS_FORBIDDEN = 'forbidden';\nexport const REPOSITORY_ARCHIVED = 'archived';\nexport const REPOSITORY_BLOCKED = 'blocked';\nexport const REPOSITORY_CANNOT_FORK = 'cannot-fork';\nexport const REPOSITORY_DISABLED = 'disabled';\nexport const REPOSITORY_CLOSED_ONBOARDING = 'disabled-closed-onboarding';\nexport const REPOSITORY_DISABLED_BY_CONFIG = 'disabled-by-config';\nexport const REPOSITORY_NO_CONFIG = 'disabled-no-config';\nexport const REPOSITORY_EMPTY = 'empty';\nexport const REPOSITORY_FORK_MISSING = 'fork-missing';\nexport const REPOSITORY_FORK_MODE_FORKED = 'fork-mode-forked';\nexport const REPOSITORY_FORKED = 'fork';\nexport const REPOSITORY_MIRRORED = 'mirror';\nexport const REPOSITORY_NOT_FOUND = 'not-found';\nexport const REPOSITORY_NO_PACKAGE_FILES = 'no-package-files';\nexport const REPOSITORY_RENAMED = 'renamed';\nexport const REPOSITORY_UNINITIATED = 'uninitiated';\n\n/** cause repo to be considered as disabled */\nexport const RepositoryErrors = [\n REPOSITORY_ACCESS_FORBIDDEN,\n REPOSITORY_ARCHIVED,\n REPOSITORY_BLOCKED,\n REPOSITORY_CANNOT_FORK,\n REPOSITORY_DISABLED,\n REPOSITORY_CLOSED_ONBOARDING,\n REPOSITORY_DISABLED_BY_CONFIG,\n REPOSITORY_NO_CONFIG,\n REPOSITORY_EMPTY,\n REPOSITORY_FORK_MISSING,\n REPOSITORY_FORK_MODE_FORKED,\n REPOSITORY_FORKED,\n REPOSITORY_MIRRORED,\n REPOSITORY_NOT_FOUND,\n REPOSITORY_NO_PACKAGE_FILES,\n REPOSITORY_RENAMED,\n REPOSITORY_UNINITIATED,\n] as const;\n\n// Temporary Error\nexport const REPOSITORY_CHANGED = 'repository-changed';\nexport const TEMPORARY_ERROR = 'temporary-error';\nexport const NO_VULNERABILITY_ALERTS = 'no-vulnerability-alerts';\n\nexport const TemporaryErrors = [\n REPOSITORY_CHANGED,\n TEMPORARY_ERROR,\n NO_VULNERABILITY_ALERTS,\n] as const;\n\n// Manager Error\nexport const MANAGER_LOCKFILE_ERROR = 'lockfile-error';\nexport const FILE_ACCESS_VIOLATION_ERROR = 'file-access-violation-error';\n\n// Host error\nexport const EXTERNAL_HOST_ERROR = 'external-host-error';\nexport const IGNORABLE_HOST_ERROR = 'ignorable-host-error';\nexport const HOST_DISABLED = 'host-disabled';\n\n// Worker Error\nexport const WORKER_FILE_UPDATE_FAILED = 'update-failure';\n\n// Bundler Error\nexport const BUNDLER_INVALID_CREDENTIALS = 'bundler-credentials';\n\n// Unknown Error\nexport const UNKNOWN_ERROR = 'unknown-error';\n\n// PATH Error\nexport const INVALID_PATH = 'invalid-path';\n\n// PAGE NOT FOUND\nexport const PAGE_NOT_FOUND_ERROR = 'page-not-found';\n\n// Missing API required credentials\nexport const MISSING_API_CREDENTIALS = 'missing-api-credentials';\n"],"mappings":";AACA,MAAa,iCAAiC;AAC9C,MAAa,6BAA6B;AAE1C,MAAa,eAAe,CAC1B,gCACA,2BACD;AAGD,MAAa,gCAAgC;AAC7C,MAAa,2BAA2B;AACxC,MAAa,sBAAsB;AACnC,MAAa,oCAAoC;AACjD,MAAa,qBAAqB;AAClC,MAAa,+BAA+B;AAC5C,MAAa,yBAAyB;AAEtC,MAAa,iBAAiB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAGD,MAAa,oBAAoB;AACjC,MAAa,yBAAyB;AACtC,MAAa,yBAAyB;AACtC,MAAa,yBAAyB;AACtC,MAAa,2BAA2B;AACxC,MAAa,6BAA6B;AAC1C,MAAa,2BAA2B;AACxC,MAAa,6BAA6B;AAE1C,MAAa,eAAe;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAGD,MAAa,8BAA8B;AAC3C,MAAa,sBAAsB;AACnC,MAAa,qBAAqB;AAClC,MAAa,yBAAyB;AACtC,MAAa,sBAAsB;AACnC,MAAa,+BAA+B;AAC5C,MAAa,gCAAgC;AAC7C,MAAa,uBAAuB;AACpC,MAAa,mBAAmB;AAChC,MAAa,0BAA0B;AACvC,MAAa,8BAA8B;AAC3C,MAAa,oBAAoB;AACjC,MAAa,sBAAsB;AACnC,MAAa,uBAAuB;AACpC,MAAa,8BAA8B;AAC3C,MAAa,qBAAqB;AAClC,MAAa,yBAAyB;;AAGtC,MAAa,mBAAmB;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAGD,MAAa,qBAAqB;AAClC,MAAa,kBAAkB;AAC/B,MAAa,0BAA0B;AAEvC,MAAa,kBAAkB;CAC7B;CACA;CACA;CACD;AAGD,MAAa,yBAAyB;AACtC,MAAa,8BAA8B;AAG3C,MAAa,sBAAsB;AACnC,MAAa,uBAAuB;AACpC,MAAa,gBAAgB;AAG7B,MAAa,4BAA4B;AAGzC,MAAa,8BAA8B;AAG3C,MAAa,gBAAgB;AAG7B,MAAa,eAAe;AAG5B,MAAa,uBAAuB;AAGpC,MAAa,0BAA0B"}
|
|
1
|
+
{"version":3,"file":"error-messages.js","names":[],"sources":["../../lib/constants/error-messages.ts"],"sourcesContent":["// System error\nexport const SYSTEM_INSUFFICIENT_DISK_SPACE = 'disk-space';\nexport const SYSTEM_INSUFFICIENT_MEMORY = 'out-of-memory';\n\nexport const SystemErrors = [\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n SYSTEM_INSUFFICIENT_MEMORY,\n] as const;\n\n// Platform Error\nexport const PLATFORM_AUTHENTICATION_ERROR = 'authentication-error';\nexport const PLATFORM_BAD_CREDENTIALS = 'bad-credentials';\nexport const PLATFORM_GPG_FAILED = 'gpg-failed';\nexport const PLATFORM_INTEGRATION_UNAUTHORIZED = 'integration-unauthorized';\nexport const PLATFORM_NOT_FOUND = 'platform-not-found';\nexport const PLATFORM_RATE_LIMIT_EXCEEDED = 'rate-limit-exceeded';\nexport const PLATFORM_UNKNOWN_ERROR = 'platform-unknown-error';\n\nexport const PlatformErrors = [\n PLATFORM_AUTHENTICATION_ERROR,\n PLATFORM_BAD_CREDENTIALS,\n PLATFORM_GPG_FAILED,\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_NOT_FOUND,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n PLATFORM_UNKNOWN_ERROR,\n] as const;\n\n// Config Error\nexport const CONFIG_VALIDATION = 'config-validation';\nexport const CONFIG_PRESETS_INVALID = 'config-presets-invalid';\nexport const CONFIG_SECRETS_EXPOSED = 'config-secrets-exposed';\nexport const CONFIG_SECRETS_INVALID = 'config-secrets-invalid';\nexport const CONFIG_VARIABLES_INVALID = 'config-variables-invalid';\nexport const CONFIG_GIT_URL_UNAVAILABLE = 'config-git-url-unavailable';\nexport const CONFIG_INHERIT_NOT_FOUND = 'config-inherit-not-found';\nexport const CONFIG_INHERIT_PARSE_ERROR = 'config-inherit-parse-error';\n\nexport const ConfigErrors = [\n CONFIG_VALIDATION,\n CONFIG_PRESETS_INVALID,\n CONFIG_SECRETS_EXPOSED,\n CONFIG_SECRETS_INVALID,\n CONFIG_VARIABLES_INVALID,\n CONFIG_GIT_URL_UNAVAILABLE,\n CONFIG_INHERIT_NOT_FOUND,\n CONFIG_INHERIT_PARSE_ERROR,\n] as const;\n\n// Repository Errors - causes repo to be considered as disabled\nexport const REPOSITORY_ACCESS_FORBIDDEN = 'forbidden';\nexport const REPOSITORY_ARCHIVED = 'archived';\nexport const REPOSITORY_BLOCKED = 'blocked';\nexport const REPOSITORY_CANNOT_FORK = 'cannot-fork';\nexport const REPOSITORY_DISABLED = 'disabled';\nexport const REPOSITORY_CLOSED_ONBOARDING = 'disabled-closed-onboarding';\nexport const REPOSITORY_DISABLED_BY_CONFIG = 'disabled-by-config';\nexport const REPOSITORY_NO_CONFIG = 'disabled-no-config';\nexport const REPOSITORY_EMPTY = 'empty';\nexport const REPOSITORY_FORK_MISSING = 'fork-missing';\nexport const REPOSITORY_FORK_MODE_FORKED = 'fork-mode-forked';\nexport const REPOSITORY_FORKED = 'fork';\nexport const REPOSITORY_MIRRORED = 'mirror';\nexport const REPOSITORY_NOT_FOUND = 'not-found';\nexport const REPOSITORY_NO_PACKAGE_FILES = 'no-package-files';\nexport const REPOSITORY_RENAMED = 'renamed';\nexport const REPOSITORY_UNINITIATED = 'uninitiated';\n\n/** cause repo to be considered as disabled */\nexport const RepositoryErrors = [\n REPOSITORY_ACCESS_FORBIDDEN,\n REPOSITORY_ARCHIVED,\n REPOSITORY_BLOCKED,\n REPOSITORY_CANNOT_FORK,\n REPOSITORY_DISABLED,\n REPOSITORY_CLOSED_ONBOARDING,\n REPOSITORY_DISABLED_BY_CONFIG,\n REPOSITORY_NO_CONFIG,\n REPOSITORY_EMPTY,\n REPOSITORY_FORK_MISSING,\n REPOSITORY_FORK_MODE_FORKED,\n REPOSITORY_FORKED,\n REPOSITORY_MIRRORED,\n REPOSITORY_NOT_FOUND,\n REPOSITORY_NO_PACKAGE_FILES,\n REPOSITORY_RENAMED,\n REPOSITORY_UNINITIATED,\n] as const;\n\n// Temporary Error\nexport const REPOSITORY_CHANGED = 'repository-changed';\nexport const TEMPORARY_ERROR = 'temporary-error';\nexport const NO_VULNERABILITY_ALERTS = 'no-vulnerability-alerts';\n\nexport const TemporaryErrors = [\n REPOSITORY_CHANGED,\n TEMPORARY_ERROR,\n NO_VULNERABILITY_ALERTS,\n] as const;\n\n// Manager Error\nexport const MANAGER_LOCKFILE_ERROR = 'lockfile-error';\nexport const FILE_ACCESS_VIOLATION_ERROR = 'file-access-violation-error';\n\n// Host error\nexport const EXTERNAL_HOST_ERROR = 'external-host-error';\nexport const IGNORABLE_HOST_ERROR = 'ignorable-host-error';\nexport const HOST_DISABLED = 'host-disabled';\n\n// Worker Error\nexport const WORKER_FILE_UPDATE_FAILED = 'update-failure';\n\n// Bundler Error\nexport const BUNDLER_INVALID_CREDENTIALS = 'bundler-credentials';\n\n// Unknown Error\nexport const UNKNOWN_ERROR = 'unknown-error';\n\n// PATH Error\nexport const INVALID_PATH = 'invalid-path';\n\n// PAGE NOT FOUND\nexport const PAGE_NOT_FOUND_ERROR = 'page-not-found';\n\n// Missing API required credentials\nexport const MISSING_API_CREDENTIALS = 'missing-api-credentials';\n\n/** Logger not initialized */\nexport const LOGGER_NOT_INITIALIZED = 'logger-not-initialized';\n"],"mappings":";AACA,MAAa,iCAAiC;AAC9C,MAAa,6BAA6B;AAE1C,MAAa,eAAe,CAC1B,gCACA,2BACD;AAGD,MAAa,gCAAgC;AAC7C,MAAa,2BAA2B;AACxC,MAAa,sBAAsB;AACnC,MAAa,oCAAoC;AACjD,MAAa,qBAAqB;AAClC,MAAa,+BAA+B;AAC5C,MAAa,yBAAyB;AAEtC,MAAa,iBAAiB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAGD,MAAa,oBAAoB;AACjC,MAAa,yBAAyB;AACtC,MAAa,yBAAyB;AACtC,MAAa,yBAAyB;AACtC,MAAa,2BAA2B;AACxC,MAAa,6BAA6B;AAC1C,MAAa,2BAA2B;AACxC,MAAa,6BAA6B;AAE1C,MAAa,eAAe;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAGD,MAAa,8BAA8B;AAC3C,MAAa,sBAAsB;AACnC,MAAa,qBAAqB;AAClC,MAAa,yBAAyB;AACtC,MAAa,sBAAsB;AACnC,MAAa,+BAA+B;AAC5C,MAAa,gCAAgC;AAC7C,MAAa,uBAAuB;AACpC,MAAa,mBAAmB;AAChC,MAAa,0BAA0B;AACvC,MAAa,8BAA8B;AAC3C,MAAa,oBAAoB;AACjC,MAAa,sBAAsB;AACnC,MAAa,uBAAuB;AACpC,MAAa,8BAA8B;AAC3C,MAAa,qBAAqB;AAClC,MAAa,yBAAyB;;AAGtC,MAAa,mBAAmB;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAGD,MAAa,qBAAqB;AAClC,MAAa,kBAAkB;AAC/B,MAAa,0BAA0B;AAEvC,MAAa,kBAAkB;CAC7B;CACA;CACA;CACD;AAGD,MAAa,yBAAyB;AACtC,MAAa,8BAA8B;AAG3C,MAAa,sBAAsB;AACnC,MAAa,uBAAuB;AACpC,MAAa,gBAAgB;AAG7B,MAAa,4BAA4B;AAGzC,MAAa,8BAA8B;AAG3C,MAAa,gBAAgB;AAG7B,MAAa,eAAe;AAG5B,MAAa,uBAAuB;AAGpC,MAAa,0BAA0B;;AAGvC,MAAa,yBAAyB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { getEnv } from "./utils.js";
|
|
2
|
+
import { withSanitizer } from "./with-sanitizer.js";
|
|
3
|
+
import errSerializer from "./err-serializer.js";
|
|
4
|
+
import cmdSerializer from "./cmd-serializer.js";
|
|
5
|
+
import configSerializer from "./config-serializer.js";
|
|
6
|
+
import { RenovateStream } from "./pretty-stdout.js";
|
|
7
|
+
import fs from "fs-extra";
|
|
8
|
+
import { isNonEmptyStringAndNotWhitespace, isString, isUndefined } from "@sindresorhus/is";
|
|
9
|
+
import upath from "upath";
|
|
10
|
+
import * as bunyan from "bunyan";
|
|
11
|
+
|
|
12
|
+
//#region lib/logger/bunyan.ts
|
|
13
|
+
function createDefaultStreams(stdoutLevel, problems, logFile) {
|
|
14
|
+
const stdout = {
|
|
15
|
+
name: "stdout",
|
|
16
|
+
level: stdoutLevel,
|
|
17
|
+
stream: process.stdout
|
|
18
|
+
};
|
|
19
|
+
// v8 ignore else -- TODO: add test #40625
|
|
20
|
+
if (getEnv("LOG_FORMAT") !== "json") {
|
|
21
|
+
const prettyStdOut = new RenovateStream();
|
|
22
|
+
prettyStdOut.pipe(process.stdout);
|
|
23
|
+
stdout.stream = prettyStdOut;
|
|
24
|
+
stdout.type = "raw";
|
|
25
|
+
}
|
|
26
|
+
return [
|
|
27
|
+
stdout,
|
|
28
|
+
{
|
|
29
|
+
name: "problems",
|
|
30
|
+
level: "warn",
|
|
31
|
+
stream: problems,
|
|
32
|
+
type: "raw"
|
|
33
|
+
},
|
|
34
|
+
isString(logFile) ? createLogFileStream(logFile) : void 0
|
|
35
|
+
].filter(Boolean);
|
|
36
|
+
}
|
|
37
|
+
function createLogFileStream(logFile) {
|
|
38
|
+
const directoryName = upath.dirname(logFile);
|
|
39
|
+
fs.ensureDirSync(directoryName);
|
|
40
|
+
const file = {
|
|
41
|
+
name: "logfile",
|
|
42
|
+
path: logFile,
|
|
43
|
+
level: validateLogLevel(getEnv("LOG_FILE_LEVEL"), "debug")
|
|
44
|
+
};
|
|
45
|
+
const logFileFormat = getEnv("LOG_FILE_FORMAT");
|
|
46
|
+
if (isNonEmptyStringAndNotWhitespace(logFileFormat) && logFileFormat === "pretty") file.type = "raw";
|
|
47
|
+
return file;
|
|
48
|
+
}
|
|
49
|
+
function serializedSanitizedLogger(streams) {
|
|
50
|
+
return bunyan.createLogger({
|
|
51
|
+
name: "renovate",
|
|
52
|
+
serializers: {
|
|
53
|
+
body: configSerializer,
|
|
54
|
+
cmd: cmdSerializer,
|
|
55
|
+
config: configSerializer,
|
|
56
|
+
migratedConfig: configSerializer,
|
|
57
|
+
originalConfig: configSerializer,
|
|
58
|
+
presetConfig: configSerializer,
|
|
59
|
+
oldConfig: configSerializer,
|
|
60
|
+
newConfig: configSerializer,
|
|
61
|
+
err: errSerializer
|
|
62
|
+
},
|
|
63
|
+
streams: streams.map(withSanitizer)
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function createLogger(stdoutLevel, problems) {
|
|
67
|
+
return serializedSanitizedLogger(createDefaultStreams(stdoutLevel, problems, getEnv("LOG_FILE")));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* A function that terminates execution if the log level that was entered is
|
|
71
|
+
* not a valid value for the Bunyan logger.
|
|
72
|
+
* @param logLevelToCheck
|
|
73
|
+
* @returns returns the logLevel when the logLevelToCheck is valid or the defaultLevel passed as argument when it is undefined. Else it stops execution.
|
|
74
|
+
*/
|
|
75
|
+
function validateLogLevel(logLevelToCheck, defaultLevel) {
|
|
76
|
+
if (isUndefined(logLevelToCheck) || isString(logLevelToCheck) && [
|
|
77
|
+
"trace",
|
|
78
|
+
"debug",
|
|
79
|
+
"info",
|
|
80
|
+
"warn",
|
|
81
|
+
"error",
|
|
82
|
+
"fatal"
|
|
83
|
+
].includes(logLevelToCheck)) return logLevelToCheck ?? defaultLevel;
|
|
84
|
+
bunyan.createLogger({
|
|
85
|
+
name: "renovate",
|
|
86
|
+
streams: [{
|
|
87
|
+
level: "fatal",
|
|
88
|
+
stream: process.stdout
|
|
89
|
+
}]
|
|
90
|
+
}).fatal({ logLevel: logLevelToCheck }, "Invalid log level");
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
//#endregion
|
|
95
|
+
export { createLogger, validateLogLevel };
|
|
96
|
+
//# sourceMappingURL=bunyan.js.map
|
|
@@ -0,0 +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;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;AAYhD,CATe,OAAO,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"}
|
package/dist/logger/index.d.ts
CHANGED
|
@@ -1,27 +1,25 @@
|
|
|
1
|
-
import { BunyanRecord, Logger } from "./types.js";
|
|
2
|
-
import { ProblemStream } from "./utils.js";
|
|
3
|
-
import * as bunyan$1 from "bunyan";
|
|
1
|
+
import { BunyanLogLevel, BunyanRecord, BunyanStream, Logger } from "./types.js";
|
|
4
2
|
|
|
5
3
|
//#region lib/logger/index.d.ts
|
|
6
|
-
declare function logLevel():
|
|
7
|
-
declare function createDefaultStreams(stdoutLevel: bunyan$1.LogLevelString, problems: ProblemStream, logFile: string | undefined): bunyan$1.Stream[];
|
|
4
|
+
declare function logLevel(): BunyanLogLevel;
|
|
8
5
|
declare const logger: Logger;
|
|
6
|
+
declare function init(): Promise<void>;
|
|
9
7
|
declare function setContext(value: string): void;
|
|
10
8
|
declare function getContext(): any;
|
|
11
9
|
declare function setMeta(obj: Record<string, unknown>): void;
|
|
12
10
|
declare function addMeta(obj: Record<string, unknown>): void;
|
|
13
11
|
declare function removeMeta(fields: string[]): void;
|
|
14
12
|
declare function withMeta<T>(obj: Record<string, unknown>, cb: () => T): T;
|
|
15
|
-
declare function addStream(stream:
|
|
13
|
+
declare function addStream(stream: BunyanStream): void;
|
|
16
14
|
/**
|
|
17
15
|
* For testing purposes only
|
|
18
16
|
* @param name stream name
|
|
19
17
|
* @param level log level
|
|
20
18
|
* @private
|
|
21
19
|
*/
|
|
22
|
-
declare function levels(name: 'stdout' | 'logfile', level:
|
|
20
|
+
declare function levels(name: 'stdout' | 'logfile', level: BunyanLogLevel): void;
|
|
23
21
|
declare function getProblems(): BunyanRecord[];
|
|
24
22
|
declare function clearProblems(): void;
|
|
25
23
|
//#endregion
|
|
26
|
-
export { addMeta, addStream, clearProblems,
|
|
24
|
+
export { addMeta, addStream, clearProblems, getContext, getProblems, init, levels, logLevel, logger, removeMeta, setContext, setMeta, withMeta };
|
|
27
25
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/logger/index.js
CHANGED
|
@@ -1,77 +1,21 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import { ProblemStream, getEnv, validateLogLevel, withSanitizer } from "./utils.js";
|
|
4
|
-
import errSerializer from "./err-serializer.js";
|
|
5
|
-
import { RenovateStream } from "./pretty-stdout.js";
|
|
1
|
+
import { ProblemStream } from "./problem-stream.js";
|
|
2
|
+
import { getEnv } from "./utils.js";
|
|
6
3
|
import { RenovateLogger } from "./renovate-logger.js";
|
|
7
|
-
import fs from "fs-extra";
|
|
8
|
-
import { isNonEmptyStringAndNotWhitespace, isString } from "@sindresorhus/is";
|
|
9
4
|
import { randomUUID } from "node:crypto";
|
|
10
|
-
import * as bunyan$1 from "bunyan";
|
|
11
|
-
import upath from "upath";
|
|
12
5
|
|
|
13
6
|
//#region lib/logger/index.ts
|
|
14
7
|
const problems = new ProblemStream();
|
|
15
|
-
let stdoutLevel =
|
|
8
|
+
let stdoutLevel = "info";
|
|
16
9
|
function logLevel() {
|
|
17
10
|
return stdoutLevel;
|
|
18
11
|
}
|
|
19
|
-
|
|
20
|
-
const stdout = {
|
|
21
|
-
name: "stdout",
|
|
22
|
-
level: stdoutLevel,
|
|
23
|
-
stream: process.stdout
|
|
24
|
-
};
|
|
25
|
-
// v8 ignore else -- TODO: add test #40625
|
|
26
|
-
if (getEnv("LOG_FORMAT") !== "json") {
|
|
27
|
-
const prettyStdOut = new RenovateStream();
|
|
28
|
-
prettyStdOut.pipe(process.stdout);
|
|
29
|
-
stdout.stream = prettyStdOut;
|
|
30
|
-
stdout.type = "raw";
|
|
31
|
-
}
|
|
32
|
-
return [
|
|
33
|
-
stdout,
|
|
34
|
-
{
|
|
35
|
-
name: "problems",
|
|
36
|
-
level: "warn",
|
|
37
|
-
stream: problems,
|
|
38
|
-
type: "raw"
|
|
39
|
-
},
|
|
40
|
-
isString(logFile) ? createLogFileStream(logFile) : void 0
|
|
41
|
-
].filter(Boolean);
|
|
42
|
-
}
|
|
43
|
-
function createLogFileStream(logFile) {
|
|
44
|
-
const directoryName = upath.dirname(logFile);
|
|
45
|
-
fs.ensureDirSync(directoryName);
|
|
46
|
-
const file = {
|
|
47
|
-
name: "logfile",
|
|
48
|
-
path: logFile,
|
|
49
|
-
level: validateLogLevel(getEnv("LOG_FILE_LEVEL"), "debug")
|
|
50
|
-
};
|
|
51
|
-
const logFileFormat = getEnv("LOG_FILE_FORMAT");
|
|
52
|
-
if (isNonEmptyStringAndNotWhitespace(logFileFormat) && logFileFormat === "pretty") file.type = "raw";
|
|
53
|
-
return file;
|
|
54
|
-
}
|
|
55
|
-
function serializedSanitizedLogger(streams) {
|
|
56
|
-
return bunyan$1.createLogger({
|
|
57
|
-
name: "renovate",
|
|
58
|
-
serializers: {
|
|
59
|
-
body: configSerializer,
|
|
60
|
-
cmd: cmdSerializer,
|
|
61
|
-
config: configSerializer,
|
|
62
|
-
migratedConfig: configSerializer,
|
|
63
|
-
originalConfig: configSerializer,
|
|
64
|
-
presetConfig: configSerializer,
|
|
65
|
-
oldConfig: configSerializer,
|
|
66
|
-
newConfig: configSerializer,
|
|
67
|
-
err: errSerializer
|
|
68
|
-
},
|
|
69
|
-
streams: streams.map(withSanitizer)
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
const bunyanLogger = serializedSanitizedLogger(createDefaultStreams(stdoutLevel, problems, getEnv("LOG_FILE")));
|
|
73
|
-
const loggerInternal = new RenovateLogger(bunyanLogger, getEnv("LOG_CONTEXT") ?? randomUUID(), {});
|
|
12
|
+
const loggerInternal = new RenovateLogger(getEnv("LOG_CONTEXT") ?? randomUUID(), {});
|
|
74
13
|
const logger = loggerInternal;
|
|
14
|
+
async function init() {
|
|
15
|
+
const { createLogger, validateLogLevel } = await import("./bunyan.js");
|
|
16
|
+
stdoutLevel = validateLogLevel(getEnv("LOG_LEVEL"), "info");
|
|
17
|
+
loggerInternal.bunyan = createLogger(stdoutLevel, problems);
|
|
18
|
+
}
|
|
75
19
|
function setContext(value) {
|
|
76
20
|
loggerInternal.logContext = value;
|
|
77
21
|
}
|
|
@@ -105,7 +49,7 @@ function addStream(stream) {
|
|
|
105
49
|
* @private
|
|
106
50
|
*/
|
|
107
51
|
function levels(name, level) {
|
|
108
|
-
|
|
52
|
+
loggerInternal.levels(name, level);
|
|
109
53
|
// v8 ignore else -- TODO: add test #40625
|
|
110
54
|
if (name === "stdout") stdoutLevel = level;
|
|
111
55
|
}
|
|
@@ -117,5 +61,5 @@ function clearProblems() {
|
|
|
117
61
|
}
|
|
118
62
|
|
|
119
63
|
//#endregion
|
|
120
|
-
export { addMeta, addStream, clearProblems,
|
|
64
|
+
export { addMeta, addStream, clearProblems, getContext, getProblems, init, levels, logLevel, logger, removeMeta, setContext, setMeta, withMeta };
|
|
121
65
|
//# sourceMappingURL=index.js.map
|
package/dist/logger/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../lib/logger/index.ts"],"sourcesContent":["// Do not static import `bunyan` here!\n// Otherwise otel can't instrument it.\n\nimport { randomUUID } from 'node:crypto';\nimport { ProblemStream } from './problem-stream.ts';\nimport { RenovateLogger } from './renovate-logger.ts';\nimport type {\n BunyanLogLevel,\n BunyanRecord,\n BunyanStream,\n Logger,\n} from './types.ts';\nimport { getEnv } from './utils.ts';\n\nconst problems = new ProblemStream();\nlet stdoutLevel: BunyanLogLevel = 'info';\n\nexport function logLevel(): BunyanLogLevel {\n return stdoutLevel;\n}\n\nconst loggerInternal = new RenovateLogger(\n getEnv('LOG_CONTEXT') ?? randomUUID(),\n {},\n);\n\nexport const logger: Logger = loggerInternal;\n\nexport async function init(): Promise<void> {\n // dynamic import to allow bunyan to be instrumented by otel\n const { createLogger, validateLogLevel } = await import('./bunyan.ts');\n stdoutLevel = validateLogLevel(getEnv('LOG_LEVEL'), 'info');\n const bunyanLogger = createLogger(stdoutLevel, problems);\n loggerInternal.bunyan = bunyanLogger;\n}\n\nexport function setContext(value: string): void {\n loggerInternal.logContext = value;\n}\n\nexport function getContext(): any {\n return loggerInternal.logContext;\n}\n\n// setMeta overrides existing meta, may remove fields if no longer existing\nexport function setMeta(obj: Record<string, unknown>): void {\n loggerInternal.setMeta(obj);\n}\n\n// addMeta overrides or adds fields but does not remove any\nexport function addMeta(obj: Record<string, unknown>): void {\n loggerInternal.addMeta(obj);\n}\n\n// removeMeta removes the provided fields from meta\nexport function removeMeta(fields: string[]): void {\n loggerInternal.removeMeta(fields);\n}\n\nexport function withMeta<T>(obj: Record<string, unknown>, cb: () => T): T {\n addMeta(obj);\n try {\n return cb();\n } finally {\n removeMeta(Object.keys(obj));\n }\n}\n\nexport function addStream(stream: BunyanStream): void {\n loggerInternal.addStream(stream);\n}\n\n/**\n * For testing purposes only\n * @param name stream name\n * @param level log level\n * @private\n */\nexport function levels(\n name: 'stdout' | 'logfile',\n level: BunyanLogLevel,\n): void {\n loggerInternal.levels(name, level);\n // v8 ignore else -- TODO: add test #40625\n if (name === 'stdout') {\n stdoutLevel = level;\n }\n}\n\nexport function getProblems(): BunyanRecord[] {\n return problems.getProblems();\n}\n\nexport function clearProblems(): void {\n return problems.clearProblems();\n}\n"],"mappings":";;;;;;AAcA,MAAM,WAAW,IAAI,eAAe;AACpC,IAAI,cAA8B;AAElC,SAAgB,WAA2B;AACzC,QAAO;;AAGT,MAAM,iBAAiB,IAAI,eACzB,OAAO,cAAc,IAAI,YAAY,EACrC,EAAE,CACH;AAED,MAAa,SAAiB;AAE9B,eAAsB,OAAsB;CAE1C,MAAM,EAAE,cAAc,qBAAqB,MAAM,OAAO;AACxD,eAAc,iBAAiB,OAAO,YAAY,EAAE,OAAO;AAE3D,gBAAe,SADM,aAAa,aAAa,SAAS;;AAI1D,SAAgB,WAAW,OAAqB;AAC9C,gBAAe,aAAa;;AAG9B,SAAgB,aAAkB;AAChC,QAAO,eAAe;;AAIxB,SAAgB,QAAQ,KAAoC;AAC1D,gBAAe,QAAQ,IAAI;;AAI7B,SAAgB,QAAQ,KAAoC;AAC1D,gBAAe,QAAQ,IAAI;;AAI7B,SAAgB,WAAW,QAAwB;AACjD,gBAAe,WAAW,OAAO;;AAGnC,SAAgB,SAAY,KAA8B,IAAgB;AACxE,SAAQ,IAAI;AACZ,KAAI;AACF,SAAO,IAAI;WACH;AACR,aAAW,OAAO,KAAK,IAAI,CAAC;;;AAIhC,SAAgB,UAAU,QAA4B;AACpD,gBAAe,UAAU,OAAO;;;;;;;;AASlC,SAAgB,OACd,MACA,OACM;AACN,gBAAe,OAAO,MAAM,MAAM;;AAElC,KAAI,SAAS,SACX,eAAc;;AAIlB,SAAgB,cAA8B;AAC5C,QAAO,SAAS,aAAa;;AAG/B,SAAgB,gBAAsB;AACpC,QAAO,SAAS,eAAe"}
|
package/dist/logger/once.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"once.js","names":[],"sources":["../../lib/logger/once.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\nimport { stringify } from 'safe-stable-stringify';\n\ntype OmitFn = (...args: any[]) => any;\n\n// TODO: use `callsite` package instead?\n\n/**\n * Get the single frame of this function's callers stack.\n *\n * @param omitFn Starting from this function, stack frames will be ignored.\n * @returns The string containing file name, line number and column name.\n *\n * @example getCallSite() // => 'Object.<anonymous> (/path/to/file.js:10:15)'\n */\nfunction getCallSite(omitFn: OmitFn): string | null {\n const stackTraceLimitOrig = Error.stackTraceLimit;\n // We don't use `Error.captureStackTrace` directly, we simply restore it later.\n // oxlint-disable-next-line typescript/unbound-method\n const prepareStackTraceOrig = Error.prepareStackTrace;\n\n let result: string | null = null;\n try {\n const res: { stack: string[] } = { stack: [] };\n\n Error.stackTraceLimit = 1;\n Error.prepareStackTrace = (_err, stack) => stack;\n Error.captureStackTrace(res, omitFn);\n\n const [callsite] = res.stack;\n // v8 ignore else -- TODO: add test #40625\n if (callsite) {\n result = callsite.toString();\n }\n /* v8 ignore next 2 -- should not happen */\n } catch {\n // no-op\n } finally {\n Error.stackTraceLimit = stackTraceLimitOrig;\n Error.prepareStackTrace = prepareStackTraceOrig;\n }\n\n return result;\n}\n\nconst keys = new Set<string>();\n\nexport function once(\n callback: () => void,\n omitFn: OmitFn = once,\n p1: string | Record<string, any>,\n p2?: string,\n): void {\n const callsite = getCallSite(omitFn);\n\n /* v8 ignore next 3 -- should not happen */\n if (!callsite) {\n return;\n }\n\n const paramsKey = hashParams(p1, p2);\n const key = `${callsite}|${paramsKey}`;\n\n if (!keys.has(key)) {\n keys.add(key);\n callback();\n }\n}\n\n/**\n * Before processing each repository,\n * all keys are supposed to be reset.\n */\nexport function reset(): void {\n keys.clear();\n}\n\nfunction hashParams(p1: string | Record<string, any>, p2?: string): string {\n const data =\n p2 === undefined ? stringify(p1) : `${stringify(p1)}|${stringify(p2)}`;\n return createHash('sha256').update(data).digest('hex');\n}\n"],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"once.js","names":[],"sources":["../../lib/logger/once.ts"],"sourcesContent":["// Do not static import `bunyan` here!\n// Otherwise otel can't instrument it.\nimport { createHash } from 'node:crypto';\nimport { stringify } from 'safe-stable-stringify';\n\ntype OmitFn = (...args: any[]) => any;\n\n// TODO: use `callsite` package instead?\n\n/**\n * Get the single frame of this function's callers stack.\n *\n * @param omitFn Starting from this function, stack frames will be ignored.\n * @returns The string containing file name, line number and column name.\n *\n * @example getCallSite() // => 'Object.<anonymous> (/path/to/file.js:10:15)'\n */\nfunction getCallSite(omitFn: OmitFn): string | null {\n const stackTraceLimitOrig = Error.stackTraceLimit;\n // We don't use `Error.captureStackTrace` directly, we simply restore it later.\n // oxlint-disable-next-line typescript/unbound-method\n const prepareStackTraceOrig = Error.prepareStackTrace;\n\n let result: string | null = null;\n try {\n const res: { stack: string[] } = { stack: [] };\n\n Error.stackTraceLimit = 1;\n Error.prepareStackTrace = (_err, stack) => stack;\n Error.captureStackTrace(res, omitFn);\n\n const [callsite] = res.stack;\n // v8 ignore else -- TODO: add test #40625\n if (callsite) {\n result = callsite.toString();\n }\n /* v8 ignore next 2 -- should not happen */\n } catch {\n // no-op\n } finally {\n Error.stackTraceLimit = stackTraceLimitOrig;\n Error.prepareStackTrace = prepareStackTraceOrig;\n }\n\n return result;\n}\n\nconst keys = new Set<string>();\n\nexport function once(\n callback: () => void,\n omitFn: OmitFn = once,\n p1: string | Record<string, any>,\n p2?: string,\n): void {\n const callsite = getCallSite(omitFn);\n\n /* v8 ignore next 3 -- should not happen */\n if (!callsite) {\n return;\n }\n\n const paramsKey = hashParams(p1, p2);\n const key = `${callsite}|${paramsKey}`;\n\n if (!keys.has(key)) {\n keys.add(key);\n callback();\n }\n}\n\n/**\n * Before processing each repository,\n * all keys are supposed to be reset.\n */\nexport function reset(): void {\n keys.clear();\n}\n\nfunction hashParams(p1: string | Record<string, any>, p2?: string): string {\n const data =\n p2 === undefined ? stringify(p1) : `${stringify(p1)}|${stringify(p2)}`;\n return createHash('sha256').update(data).digest('hex');\n}\n"],"mappings":";;;;;;;;;;;;AAiBA,SAAS,YAAY,QAA+B;CAClD,MAAM,sBAAsB,MAAM;CAGlC,MAAM,wBAAwB,MAAM;CAEpC,IAAI,SAAwB;AAC5B,KAAI;EACF,MAAM,MAA2B,EAAE,OAAO,EAAE,EAAE;AAE9C,QAAM,kBAAkB;AACxB,QAAM,qBAAqB,MAAM,UAAU;AAC3C,QAAM,kBAAkB,KAAK,OAAO;EAEpC,MAAM,CAAC,YAAY,IAAI;;AAEvB,MAAI,SACF,UAAS,SAAS,UAAU;SAGxB,WAEE;AACR,QAAM,kBAAkB;AACxB,QAAM,oBAAoB;;AAG5B,QAAO;;AAGT,MAAM,uBAAO,IAAI,KAAa;AAE9B,SAAgB,KACd,UACA,SAAiB,MACjB,IACA,IACM;CACN,MAAM,WAAW,YAAY,OAAO;;AAGpC,KAAI,CAAC,SACH;CAIF,MAAM,MAAM,GAAG,SAAS,GADN,WAAW,IAAI,GAAG;AAGpC,KAAI,CAAC,KAAK,IAAI,IAAI,EAAE;AAClB,OAAK,IAAI,IAAI;AACb,YAAU;;;;;;;AAQd,SAAgB,QAAc;AAC5B,MAAK,OAAO;;AAGd,SAAS,WAAW,IAAkC,IAAqB;CACzE,MAAM,OACJ,OAAO,SAAY,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG;AACtE,QAAO,WAAW,SAAS,CAAC,OAAO,KAAK,CAAC,OAAO,MAAM"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Stream } from "node:stream";
|
|
2
|
+
|
|
3
|
+
//#region lib/logger/problem-stream.ts
|
|
4
|
+
const excludeProps = [
|
|
5
|
+
"pid",
|
|
6
|
+
"time",
|
|
7
|
+
"v",
|
|
8
|
+
"hostname"
|
|
9
|
+
];
|
|
10
|
+
var ProblemStream = class extends Stream {
|
|
11
|
+
_problems = [];
|
|
12
|
+
readable;
|
|
13
|
+
writable;
|
|
14
|
+
constructor() {
|
|
15
|
+
super();
|
|
16
|
+
this.readable = false;
|
|
17
|
+
this.writable = true;
|
|
18
|
+
}
|
|
19
|
+
write(data) {
|
|
20
|
+
const problem = { ...data };
|
|
21
|
+
for (const prop of excludeProps) delete problem[prop];
|
|
22
|
+
this._problems.push(problem);
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
getProblems() {
|
|
26
|
+
return this._problems;
|
|
27
|
+
}
|
|
28
|
+
clearProblems() {
|
|
29
|
+
this._problems = [];
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
//#endregion
|
|
34
|
+
export { ProblemStream };
|
|
35
|
+
//# sourceMappingURL=problem-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"problem-stream.js","names":[],"sources":["../../lib/logger/problem-stream.ts"],"sourcesContent":["// Do not static import `bunyan` here!\nimport { Stream } from 'node:stream';\nimport type { BunyanRecord } from './types.ts';\n\nexport const excludeProps = ['pid', 'time', 'v', 'hostname'];\n\nexport class ProblemStream extends Stream {\n private _problems: BunyanRecord[] = [];\n\n readable: boolean;\n\n writable: boolean;\n\n constructor() {\n super();\n this.readable = false;\n this.writable = true;\n }\n\n write(data: BunyanRecord): boolean {\n const problem = { ...data };\n for (const prop of excludeProps) {\n delete problem[prop];\n }\n this._problems.push(problem);\n return true;\n }\n\n getProblems(): BunyanRecord[] {\n return this._problems;\n }\n\n clearProblems(): void {\n this._problems = [];\n }\n}\n"],"mappings":";;;AAIA,MAAa,eAAe;CAAC;CAAO;CAAQ;CAAK;CAAW;AAE5D,IAAa,gBAAb,cAAmC,OAAO;CACxC,AAAQ,YAA4B,EAAE;CAEtC;CAEA;CAEA,cAAc;AACZ,SAAO;AACP,OAAK,WAAW;AAChB,OAAK,WAAW;;CAGlB,MAAM,MAA6B;EACjC,MAAM,UAAU,EAAE,GAAG,MAAM;AAC3B,OAAK,MAAM,QAAQ,aACjB,QAAO,QAAQ;AAEjB,OAAK,UAAU,KAAK,QAAQ;AAC5B,SAAO;;CAGT,cAA8B;AAC5B,SAAO,KAAK;;CAGd,gBAAsB;AACpB,OAAK,YAAY,EAAE"}
|
package/dist/logger/remap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remap.js","names":[],"sources":["../../lib/logger/remap.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"remap.js","names":[],"sources":["../../lib/logger/remap.ts"],"sourcesContent":["import type { StringMatchPredicate } from '../util/string-match.ts';\nimport { getRegexOrGlobPredicate } from '../util/string-match.ts';\nimport type { BunyanLogLevel, LogLevelRemap } from './types.ts';\n\nlet globalRemaps: LogLevelRemap[] | undefined;\nlet repositoryRemaps: LogLevelRemap[] | undefined;\n\nlet matcherCache = new WeakMap<LogLevelRemap, StringMatchPredicate>();\n\nfunction match(remap: LogLevelRemap, input: string): boolean {\n const { matchMessage: pattern } = remap;\n let matchFn = matcherCache.get(remap);\n // v8 ignore else -- TODO: add test #40625\n if (!matchFn) {\n matchFn = getRegexOrGlobPredicate(pattern);\n matcherCache.set(remap, matchFn);\n }\n\n return matchFn(input);\n}\n\nexport function getRemappedLevel(msg: string): BunyanLogLevel | null {\n if (repositoryRemaps) {\n for (const remap of repositoryRemaps) {\n // v8 ignore else -- TODO: add test #40625\n if (match(remap, msg)) {\n return remap.newLogLevel;\n }\n }\n }\n\n if (globalRemaps) {\n for (const remap of globalRemaps) {\n if (match(remap, msg)) {\n return remap.newLogLevel;\n }\n }\n }\n\n return null;\n}\n\nfunction resetMatcherCache(): void {\n matcherCache = new WeakMap();\n}\n\nexport function setGlobalLogLevelRemaps(\n remaps: LogLevelRemap[] | undefined,\n): void {\n globalRemaps = remaps;\n}\n\nexport function resetGlobalLogLevelRemaps(): void {\n globalRemaps = undefined;\n resetMatcherCache();\n}\n\nexport function setRepositoryLogLevelRemaps(\n remaps: LogLevelRemap[] | undefined,\n): void {\n repositoryRemaps = remaps;\n}\n\nexport function resetRepositoryLogLevelRemaps(): void {\n repositoryRemaps = undefined;\n resetMatcherCache();\n}\n"],"mappings":";;;AAIA,IAAI;AACJ,IAAI;AAEJ,IAAI,+BAAe,IAAI,SAA8C;AAErE,SAAS,MAAM,OAAsB,OAAwB;CAC3D,MAAM,EAAE,cAAc,YAAY;CAClC,IAAI,UAAU,aAAa,IAAI,MAAM;;AAErC,KAAI,CAAC,SAAS;AACZ,YAAU,wBAAwB,QAAQ;AAC1C,eAAa,IAAI,OAAO,QAAQ;;AAGlC,QAAO,QAAQ,MAAM;;AAGvB,SAAgB,iBAAiB,KAAoC;AACnE,KAAI,kBACF;OAAK,MAAM,SAAS;;AAElB,MAAI,MAAM,OAAO,IAAI,CACnB,QAAO,MAAM;;AAKnB,KAAI,cACF;OAAK,MAAM,SAAS,aAClB,KAAI,MAAM,OAAO,IAAI,CACnB,QAAO,MAAM;;AAKnB,QAAO;;AAGT,SAAS,oBAA0B;AACjC,gCAAe,IAAI,SAAS;;AAG9B,SAAgB,wBACd,QACM;AACN,gBAAe;;AAGjB,SAAgB,4BAAkC;AAChD,gBAAe;AACf,oBAAmB;;AAGrB,SAAgB,4BACd,QACM;AACN,oBAAmB;;AAGrB,SAAgB,gCAAsC;AACpD,oBAAmB;AACnB,oBAAmB"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { Logger } from "./types.js";
|
|
2
|
-
import * as bunyan$1 from "bunyan";
|
|
1
|
+
import { BunyanLogLevel, BunyanLogger, BunyanSerializers, BunyanStream, Logger } from "./types.js";
|
|
3
2
|
|
|
4
3
|
//#region lib/logger/renovate-logger.d.ts
|
|
5
4
|
declare class RenovateLogger implements Logger {
|
|
5
|
+
private readonly queue;
|
|
6
6
|
readonly logger: Logger;
|
|
7
7
|
readonly once: Logger & {
|
|
8
8
|
reset: () => void;
|
|
9
9
|
};
|
|
10
|
-
private
|
|
10
|
+
private bunyanLogger;
|
|
11
11
|
private context;
|
|
12
12
|
private meta;
|
|
13
|
-
constructor(
|
|
13
|
+
constructor(context: string, meta: Record<string, unknown>, bunyanLogger?: BunyanLogger);
|
|
14
14
|
trace(p1: string): void;
|
|
15
15
|
trace(p1: Record<string, any>, p2?: string): void;
|
|
16
16
|
debug(p1: string): void;
|
|
@@ -23,14 +23,20 @@ declare class RenovateLogger implements Logger {
|
|
|
23
23
|
error(p1: Record<string, any>, p2?: string): void;
|
|
24
24
|
fatal(p1: string): void;
|
|
25
25
|
fatal(p1: Record<string, any>, p2?: string): void;
|
|
26
|
-
addSerializers(serializers:
|
|
27
|
-
addStream(stream:
|
|
26
|
+
addSerializers(serializers: BunyanSerializers): void;
|
|
27
|
+
addStream(stream: BunyanStream): void;
|
|
28
28
|
childLogger(): RenovateLogger;
|
|
29
|
+
levels(name: 'stdout' | 'logfile', level: BunyanLogLevel): void;
|
|
29
30
|
get logContext(): string;
|
|
30
31
|
set logContext(context: string);
|
|
32
|
+
/**
|
|
33
|
+
* For internal initialization only
|
|
34
|
+
*/
|
|
35
|
+
set bunyan(bunyanLogger: BunyanLogger);
|
|
31
36
|
setMeta(obj: Record<string, unknown>): void;
|
|
32
37
|
addMeta(obj: Record<string, unknown>): void;
|
|
33
38
|
removeMeta(fields: string[]): void;
|
|
39
|
+
private ensureLogger;
|
|
34
40
|
private logFactory;
|
|
35
41
|
private logOnceFn;
|
|
36
42
|
private log;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LOGGER_NOT_INITIALIZED } from "../constants/error-messages.js";
|
|
2
2
|
import { once, reset } from "./once.js";
|
|
3
3
|
import { getRemappedLevel } from "./remap.js";
|
|
4
|
+
import { getMessage, toMeta } from "./utils.js";
|
|
5
|
+
import { withSanitizer } from "./with-sanitizer.js";
|
|
4
6
|
import { isString } from "@sindresorhus/is";
|
|
5
7
|
|
|
6
8
|
//#region lib/logger/renovate-logger.ts
|
|
@@ -13,12 +15,13 @@ const loggerLevels = [
|
|
|
13
15
|
"fatal"
|
|
14
16
|
];
|
|
15
17
|
var RenovateLogger = class RenovateLogger {
|
|
18
|
+
queue = [];
|
|
16
19
|
logger = { once: { reset } };
|
|
17
20
|
once = this.logger.once;
|
|
18
21
|
bunyanLogger;
|
|
19
22
|
context;
|
|
20
23
|
meta;
|
|
21
|
-
constructor(
|
|
24
|
+
constructor(context, meta, bunyanLogger) {
|
|
22
25
|
this.bunyanLogger = bunyanLogger;
|
|
23
26
|
this.context = context;
|
|
24
27
|
this.meta = meta;
|
|
@@ -46,13 +49,16 @@ var RenovateLogger = class RenovateLogger {
|
|
|
46
49
|
this.log("fatal", p1, p2);
|
|
47
50
|
}
|
|
48
51
|
addSerializers(serializers) {
|
|
49
|
-
this.
|
|
52
|
+
this.ensureLogger().addSerializers(serializers);
|
|
50
53
|
}
|
|
51
54
|
addStream(stream) {
|
|
52
|
-
this.
|
|
55
|
+
this.ensureLogger().addStream(withSanitizer(stream));
|
|
53
56
|
}
|
|
54
57
|
childLogger() {
|
|
55
|
-
return new RenovateLogger(this.
|
|
58
|
+
return new RenovateLogger(this.context, this.meta, this.ensureLogger().child({}));
|
|
59
|
+
}
|
|
60
|
+
levels(name, level) {
|
|
61
|
+
this.ensureLogger().levels(name, level);
|
|
56
62
|
}
|
|
57
63
|
get logContext() {
|
|
58
64
|
return this.context;
|
|
@@ -60,6 +66,14 @@ var RenovateLogger = class RenovateLogger {
|
|
|
60
66
|
set logContext(context) {
|
|
61
67
|
this.context = context;
|
|
62
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* For internal initialization only
|
|
71
|
+
*/
|
|
72
|
+
set bunyan(bunyanLogger) {
|
|
73
|
+
this.bunyanLogger = bunyanLogger;
|
|
74
|
+
for (const logFn of this.queue) logFn();
|
|
75
|
+
this.queue.length = 0;
|
|
76
|
+
}
|
|
63
77
|
setMeta(obj) {
|
|
64
78
|
this.meta = { ...obj };
|
|
65
79
|
}
|
|
@@ -72,6 +86,10 @@ var RenovateLogger = class RenovateLogger {
|
|
|
72
86
|
removeMeta(fields) {
|
|
73
87
|
for (const key of Object.keys(this.meta)) if (fields.includes(key)) delete this.meta[key];
|
|
74
88
|
}
|
|
89
|
+
ensureLogger() {
|
|
90
|
+
if (!this.bunyanLogger) throw new Error(LOGGER_NOT_INITIALIZED);
|
|
91
|
+
return this.bunyanLogger;
|
|
92
|
+
}
|
|
75
93
|
logFactory(_level) {
|
|
76
94
|
return (p1, p2) => {
|
|
77
95
|
const meta = {
|
|
@@ -88,8 +106,8 @@ var RenovateLogger = class RenovateLogger {
|
|
|
88
106
|
meta.oldLevel = level;
|
|
89
107
|
level = remappedLevel;
|
|
90
108
|
}
|
|
91
|
-
this.
|
|
92
|
-
} else this.
|
|
109
|
+
this.ensureLogger()[level](meta, msg);
|
|
110
|
+
} else this.ensureLogger()[level](meta);
|
|
93
111
|
};
|
|
94
112
|
}
|
|
95
113
|
logOnceFn(level) {
|
|
@@ -103,6 +121,10 @@ var RenovateLogger = class RenovateLogger {
|
|
|
103
121
|
return logOnceFn;
|
|
104
122
|
}
|
|
105
123
|
log(level, p1, p2) {
|
|
124
|
+
if (!this.bunyanLogger) {
|
|
125
|
+
this.queue.push(() => this.log(level, p1, p2));
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
106
128
|
const logFn = this.logger[level];
|
|
107
129
|
if (isString(p1)) logFn(p1);
|
|
108
130
|
else logFn(p1, p2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renovate-logger.js","names":["onceReset"],"sources":["../../lib/logger/renovate-logger.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport
|
|
1
|
+
{"version":3,"file":"renovate-logger.js","names":["onceReset"],"sources":["../../lib/logger/renovate-logger.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { LOGGER_NOT_INITIALIZED } from '../constants/error-messages.ts';\nimport { once, reset as onceReset } from './once.ts';\nimport { getRemappedLevel } from './remap.ts';\nimport type {\n BunyanLogLevel,\n BunyanLogger,\n BunyanSerializers,\n BunyanStream,\n Logger,\n} from './types.ts';\nimport { getMessage, toMeta } from './utils.ts';\nimport { withSanitizer } from './with-sanitizer.ts';\n\nconst loggerLevels: BunyanLogLevel[] = [\n 'trace',\n 'debug',\n 'info',\n 'warn',\n 'error',\n 'fatal',\n];\n\ntype LoggerFunction = (p1: string | Record<string, any>, p2?: string) => void;\n\nexport class RenovateLogger implements Logger {\n private readonly queue: (() => void)[] = [];\n readonly logger: Logger = { once: { reset: onceReset } } as any;\n readonly once = this.logger.once;\n private bunyanLogger: BunyanLogger | undefined;\n private context: string;\n private meta: Record<string, unknown>;\n\n constructor(\n context: string,\n meta: Record<string, unknown>,\n bunyanLogger?: BunyanLogger,\n ) {\n this.bunyanLogger = bunyanLogger;\n this.context = context;\n this.meta = meta;\n for (const level of loggerLevels) {\n this.logger[level] = this.logFactory(level) as never;\n this.logger.once[level] = this.logOnceFn(level);\n }\n }\n\n trace(p1: string): void;\n trace(p1: Record<string, any>, p2?: string): void;\n trace(p1: string | Record<string, any>, p2?: string): void {\n this.log('trace', p1, p2);\n }\n\n debug(p1: string): void;\n debug(p1: Record<string, any>, p2?: string): void;\n debug(p1: string | Record<string, any>, p2?: string): void {\n this.log('debug', p1, p2);\n }\n\n info(p1: string): void;\n info(p1: Record<string, any>, p2?: string): void;\n info(p1: string | Record<string, any>, p2?: string): void {\n this.log('info', p1, p2);\n }\n\n warn(p1: string): void;\n warn(p1: Record<string, any>, p2?: string): void;\n warn(p1: string | Record<string, any>, p2?: string): void {\n this.log('warn', p1, p2);\n }\n\n error(p1: string): void;\n error(p1: Record<string, any>, p2?: string): void;\n error(p1: string | Record<string, any>, p2?: string): void {\n this.log('error', p1, p2);\n }\n\n fatal(p1: string): void;\n fatal(p1: Record<string, any>, p2?: string): void;\n fatal(p1: string | Record<string, any>, p2?: string): void {\n this.log('fatal', p1, p2);\n }\n\n addSerializers(serializers: BunyanSerializers): void {\n this.ensureLogger().addSerializers(serializers);\n }\n\n addStream(stream: BunyanStream): void {\n this.ensureLogger().addStream(withSanitizer(stream));\n }\n\n childLogger(): RenovateLogger {\n return new RenovateLogger(\n this.context,\n this.meta,\n this.ensureLogger().child({}),\n );\n }\n\n levels(name: 'stdout' | 'logfile', level: BunyanLogLevel): void {\n this.ensureLogger().levels(name, level);\n }\n\n get logContext(): string {\n return this.context;\n }\n\n set logContext(context: string) {\n this.context = context;\n }\n\n /**\n * For internal initialization only\n */\n set bunyan(bunyanLogger: BunyanLogger) {\n this.bunyanLogger = bunyanLogger;\n // flush any logs that were queued before bunyan logger was initialized\n for (const logFn of this.queue) {\n logFn();\n }\n this.queue.length = 0;\n }\n\n setMeta(obj: Record<string, unknown>): void {\n this.meta = { ...obj };\n }\n\n addMeta(obj: Record<string, unknown>): void {\n this.meta = { ...this.meta, ...obj };\n }\n\n removeMeta(fields: string[]): void {\n for (const key of Object.keys(this.meta)) {\n if (fields.includes(key)) {\n delete this.meta[key];\n }\n }\n }\n\n private ensureLogger(): BunyanLogger {\n if (!this.bunyanLogger) {\n throw new Error(LOGGER_NOT_INITIALIZED);\n }\n return this.bunyanLogger;\n }\n\n private logFactory(_level: BunyanLogLevel): LoggerFunction {\n return (p1: string | Record<string, any>, p2?: string): void => {\n const meta: Record<string, unknown> = {\n logContext: this.context,\n ...this.meta,\n ...toMeta(p1),\n };\n const msg = getMessage(p1, p2);\n let level = _level;\n\n if (isString(msg)) {\n const remappedLevel = getRemappedLevel(msg);\n /* v8 ignore next 4 -- not easily testable */\n if (remappedLevel) {\n meta.oldLevel = level;\n level = remappedLevel;\n }\n this.ensureLogger()[level](meta, msg);\n } else {\n this.ensureLogger()[level](meta);\n }\n };\n }\n\n private logOnceFn(level: BunyanLogLevel): LoggerFunction {\n const logOnceFn = (p1: string | Record<string, any>, p2?: string): void => {\n once(\n () => {\n const logFn = this[level].bind(this); // bind to the instance.\n if (isString(p1)) {\n logFn(p1);\n } else {\n logFn(p1, p2);\n }\n },\n logOnceFn,\n p1,\n p2,\n );\n };\n return logOnceFn;\n }\n\n private log(\n level: BunyanLogLevel,\n p1: string | Record<string, any>,\n p2?: string,\n ): void {\n if (!this.bunyanLogger) {\n // defer logging until bunyan logger is initialized, to avoid losing logs during initialization\n this.queue.push(() => this.log(level, p1, p2));\n return;\n }\n const logFn = this.logger[level];\n if (isString(p1)) {\n logFn(p1);\n } else {\n logFn(p1, p2);\n }\n }\n}\n"],"mappings":"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"}
|
package/dist/logger/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { LogLevel, LogLevelString } from "bunyan";
|
|
2
1
|
import { Stream } from "node:stream";
|
|
2
|
+
import * as bunyan from "bunyan";
|
|
3
|
+
import { LogLevel, LogLevelString, LogLevelString as BunyanLogLevel, Serializers as BunyanSerializers, Stream as BunyanStream } from "bunyan";
|
|
3
4
|
|
|
4
5
|
//#region lib/logger/types.d.ts
|
|
5
6
|
interface LogError {
|
|
@@ -29,14 +30,15 @@ interface BunyanRecord extends Record<string, any> {
|
|
|
29
30
|
msg: string;
|
|
30
31
|
module?: string;
|
|
31
32
|
}
|
|
32
|
-
type
|
|
33
|
+
type BunyanNodeStream = (NodeJS.WritableStream | Stream) & {
|
|
33
34
|
writable?: boolean;
|
|
34
35
|
write: (chunk: BunyanRecord, enc: BufferEncoding, cb: (err?: Error | null) => void) => void;
|
|
35
36
|
};
|
|
37
|
+
type BunyanLogger = ReturnType<typeof bunyan.createLogger>;
|
|
36
38
|
interface LogLevelRemap {
|
|
37
39
|
matchMessage: string;
|
|
38
40
|
newLogLevel: LogLevelString;
|
|
39
41
|
}
|
|
40
42
|
//#endregion
|
|
41
|
-
export { BunyanRecord, BunyanStream, LogError, LogLevelRemap, Logger };
|
|
43
|
+
export { type BunyanLogLevel, BunyanLogger, BunyanNodeStream, BunyanRecord, type BunyanSerializers, type BunyanStream, LogError, LogLevelRemap, Logger };
|
|
42
44
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/logger/utils.js
CHANGED
|
@@ -1,44 +1,12 @@
|
|
|
1
1
|
import { regEx } from "../util/regex.js";
|
|
2
2
|
import { ExecError } from "../util/exec/exec-error.js";
|
|
3
3
|
import { redactedFields, sanitize } from "../util/sanitize.js";
|
|
4
|
-
import {
|
|
5
|
-
import fs from "fs-extra";
|
|
6
|
-
import { isArray, isBuffer, isDate, isEmptyObject, isError, isFunction, isNonEmptyObject, isNonEmptyStringAndNotWhitespace, isObject, isPlainObject, isString, isUndefined } from "@sindresorhus/is";
|
|
7
|
-
import bunyan from "bunyan";
|
|
8
|
-
import { Stream } from "node:stream";
|
|
4
|
+
import { isArray, isBuffer, isDate, isEmptyObject, isError, isFunction, isNonEmptyObject, isNonEmptyStringAndNotWhitespace, isObject, isPlainObject, isString } from "@sindresorhus/is";
|
|
9
5
|
import { RequestError } from "got";
|
|
10
6
|
import { DateTime } from "luxon";
|
|
11
7
|
import { ZodError } from "zod/v3";
|
|
12
8
|
|
|
13
9
|
//#region lib/logger/utils.ts
|
|
14
|
-
const excludeProps = [
|
|
15
|
-
"pid",
|
|
16
|
-
"time",
|
|
17
|
-
"v",
|
|
18
|
-
"hostname"
|
|
19
|
-
];
|
|
20
|
-
var ProblemStream = class extends Stream {
|
|
21
|
-
_problems = [];
|
|
22
|
-
readable;
|
|
23
|
-
writable;
|
|
24
|
-
constructor() {
|
|
25
|
-
super();
|
|
26
|
-
this.readable = false;
|
|
27
|
-
this.writable = true;
|
|
28
|
-
}
|
|
29
|
-
write(data) {
|
|
30
|
-
const problem = { ...data };
|
|
31
|
-
for (const prop of excludeProps) delete problem[prop];
|
|
32
|
-
this._problems.push(problem);
|
|
33
|
-
return true;
|
|
34
|
-
}
|
|
35
|
-
getProblems() {
|
|
36
|
-
return this._problems;
|
|
37
|
-
}
|
|
38
|
-
clearProblems() {
|
|
39
|
-
this._problems = [];
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
10
|
const contentFields = [
|
|
43
11
|
"content",
|
|
44
12
|
"contents",
|
|
@@ -153,57 +121,6 @@ function sanitizeValue(value, seen = /* @__PURE__ */ new WeakMap()) {
|
|
|
153
121
|
}
|
|
154
122
|
return value;
|
|
155
123
|
}
|
|
156
|
-
function withSanitizer(streamConfig) {
|
|
157
|
-
if (streamConfig.type === "rotating-file") throw new Error("Rotating files aren't supported");
|
|
158
|
-
const stream = streamConfig.stream;
|
|
159
|
-
if (stream?.writable) {
|
|
160
|
-
const write = (chunk, enc, cb) => {
|
|
161
|
-
const raw = sanitizeValue(chunk);
|
|
162
|
-
const result = streamConfig.type === "raw" ? raw : quickStringify(raw)?.replace(regEx(/\n?$/), "\n");
|
|
163
|
-
stream.write(result, enc, cb);
|
|
164
|
-
};
|
|
165
|
-
return {
|
|
166
|
-
...streamConfig,
|
|
167
|
-
type: "raw",
|
|
168
|
-
stream: { write }
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
if (streamConfig.path) {
|
|
172
|
-
const fileStream = fs.createWriteStream(streamConfig.path, {
|
|
173
|
-
flags: "a",
|
|
174
|
-
encoding: "utf8"
|
|
175
|
-
});
|
|
176
|
-
return withSanitizer({
|
|
177
|
-
...streamConfig,
|
|
178
|
-
stream: fileStream
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
throw new Error("Missing 'stream' or 'path' for bunyan stream");
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* A function that terminates execution if the log level that was entered is
|
|
185
|
-
* not a valid value for the Bunyan logger.
|
|
186
|
-
* @param logLevelToCheck
|
|
187
|
-
* @returns returns the logLevel when the logLevelToCheck is valid or the defaultLevel passed as argument when it is undefined. Else it stops execution.
|
|
188
|
-
*/
|
|
189
|
-
function validateLogLevel(logLevelToCheck, defaultLevel) {
|
|
190
|
-
if (isUndefined(logLevelToCheck) || isString(logLevelToCheck) && [
|
|
191
|
-
"trace",
|
|
192
|
-
"debug",
|
|
193
|
-
"info",
|
|
194
|
-
"warn",
|
|
195
|
-
"error",
|
|
196
|
-
"fatal"
|
|
197
|
-
].includes(logLevelToCheck)) return logLevelToCheck ?? defaultLevel;
|
|
198
|
-
bunyan.createLogger({
|
|
199
|
-
name: "renovate",
|
|
200
|
-
streams: [{
|
|
201
|
-
level: "fatal",
|
|
202
|
-
stream: process.stdout
|
|
203
|
-
}]
|
|
204
|
-
}).fatal({ logLevel: logLevelToCheck }, "Invalid log level");
|
|
205
|
-
process.exit(1);
|
|
206
|
-
}
|
|
207
124
|
const urlRe = /[a-z]{3,9}:\/\/[^@/]+@[a-z0-9.-]+/gi;
|
|
208
125
|
const urlCredRe = /\/\/[^@]+@/g;
|
|
209
126
|
const dataUriCredRe = /^(data:[0-9a-z-]+\/[0-9a-z-]+;).+/i;
|
|
@@ -223,5 +140,5 @@ function toMeta(p1) {
|
|
|
223
140
|
}
|
|
224
141
|
|
|
225
142
|
//#endregion
|
|
226
|
-
export {
|
|
143
|
+
export { prepareError as default, getEnv, getMessage, sanitizeValue, toMeta };
|
|
227
144
|
//# sourceMappingURL=utils.js.map
|
package/dist/logger/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["HttpError"],"sources":["../../lib/logger/utils.ts"],"sourcesContent":["import { Stream } from 'node:stream';\nimport {\n isArray,\n isBuffer,\n isDate,\n isEmptyObject,\n isError,\n isFunction,\n isNonEmptyObject,\n isNonEmptyStringAndNotWhitespace,\n isObject,\n isPlainObject,\n isString,\n isUndefined,\n} from '@sindresorhus/is';\nimport bunyan from 'bunyan';\nimport fs from 'fs-extra';\nimport { RequestError as HttpError } from 'got';\nimport { DateTime } from 'luxon';\nimport { ZodError } from 'zod/v3';\nimport { ExecError } from '../util/exec/exec-error.ts';\nimport { regEx } from '../util/regex.ts';\nimport { redactedFields, sanitize } from '../util/sanitize.ts';\nimport { quickStringify } from '../util/stringify.ts';\nimport type { BunyanRecord, BunyanStream } from './types.ts';\n\nconst excludeProps = ['pid', 'time', 'v', 'hostname'];\n\nexport class ProblemStream extends Stream {\n private _problems: BunyanRecord[] = [];\n\n readable: boolean;\n\n writable: boolean;\n\n constructor() {\n super();\n this.readable = false;\n this.writable = true;\n }\n\n write(data: BunyanRecord): boolean {\n const problem = { ...data };\n for (const prop of excludeProps) {\n delete problem[prop];\n }\n this._problems.push(problem);\n return true;\n }\n\n getProblems(): BunyanRecord[] {\n return this._problems;\n }\n\n clearProblems(): void {\n this._problems = [];\n }\n}\n\nconst contentFields = [\n 'content',\n 'contents',\n 'packageLockParsed',\n 'yarnLockParsed',\n];\n\ntype ZodShortenedIssue =\n | null\n | string\n | string[]\n | {\n [key: string]: ZodShortenedIssue;\n };\n\nexport function prepareZodIssues(input: unknown): ZodShortenedIssue {\n if (!isPlainObject(input)) {\n return null;\n }\n\n let err: null | string | string[] = null;\n // v8 ignore else -- TODO: add test #40625\n if (isArray(input._errors, isString)) {\n if (input._errors.length === 1) {\n err = input._errors[0];\n } else if (input._errors.length > 1) {\n err = input._errors;\n } else {\n err = null;\n }\n }\n delete input._errors;\n\n if (isEmptyObject(input)) {\n return err;\n }\n\n const output: Record<string, ZodShortenedIssue> = {};\n const entries = Object.entries(input);\n for (const [key, value] of entries.slice(0, 3)) {\n const child = prepareZodIssues(value);\n // v8 ignore else -- TODO: add test #40625\n if (child !== null) {\n output[key] = child;\n }\n }\n\n if (entries.length > 3) {\n output.___ = `... ${entries.length - 3} more`;\n }\n\n return output;\n}\n\nexport function prepareZodError(err: ZodError): Record<string, unknown> {\n Object.defineProperty(err, 'message', {\n get: () => 'Schema error',\n /* v8 ignore start -- TODO: drop set? */\n set: () => {\n /* intentionally empty */\n },\n // v8 ignore stop -- TODO: drop set? */\n });\n\n return {\n message: err.message,\n stack: err.stack,\n issues: prepareZodIssues(err.format()),\n };\n}\n\nexport default function prepareError(err: Error): Record<string, unknown> {\n if (err instanceof ZodError) {\n return prepareZodError(err);\n }\n\n const response: Record<string, unknown> = {\n ...err,\n };\n\n // Required as message is non-enumerable\n if (!response.message && err.message) {\n response.message = err.message;\n }\n\n // Required as stack is non-enumerable\n if (!response.stack && err.stack) {\n response.stack = err.stack;\n }\n\n if (err instanceof AggregateError) {\n response.errors = err.errors.map((error) => prepareError(error));\n }\n\n // handle rawExec error\n if (err instanceof ExecError && isNonEmptyObject(err.options?.env)) {\n const env = Object.keys(err.options.env);\n response.options = { ...err.options, env };\n }\n\n // handle got error\n if (err instanceof HttpError) {\n const options: Record<string, unknown> = {\n headers: structuredClone(err.options.headers),\n url: err.options.url?.toString(),\n hostType: err.options.context.hostType,\n };\n response.options = options;\n\n options.username = err.options.username;\n options.password = err.options.password;\n options.method = err.options.method;\n options.http2 = err.options.http2;\n\n // v8 ignore else -- TODO: add test #40625\n if (err.response) {\n response.response = {\n statusCode: err.response.statusCode,\n statusMessage: err.response.statusMessage,\n body:\n err.name === 'TimeoutError'\n ? undefined\n : structuredClone(err.response.body),\n headers: structuredClone(err.response.headers),\n httpVersion: err.response.httpVersion,\n retryCount: err.response.retryCount,\n };\n }\n }\n\n return response;\n}\n\ntype NestedValue = unknown[] | object;\n\nfunction isNested(value: unknown): value is NestedValue {\n return isArray(value) || isObject(value);\n}\n\nexport function sanitizeValue(\n value: unknown,\n seen = new WeakMap<NestedValue, unknown>(),\n): any {\n if (isString(value)) {\n return sanitize(sanitizeUrls(value));\n }\n\n if (isDate(value)) {\n return value;\n }\n\n if (DateTime.isDateTime(value)) {\n return value.toISO();\n }\n\n if (isFunction(value)) {\n return '[function]';\n }\n\n if (isBuffer(value)) {\n return '[content]';\n }\n\n if (isError(value)) {\n const err = prepareError(value);\n return sanitizeValue(err, seen);\n }\n\n if (isArray(value)) {\n const length = value.length;\n const arrayResult = Array(length);\n seen.set(value, arrayResult);\n for (let idx = 0; idx < length; idx += 1) {\n const val = value[idx];\n arrayResult[idx] =\n isNested(val) && seen.has(val)\n ? seen.get(val)\n : sanitizeValue(val, seen);\n }\n return arrayResult;\n }\n\n if (isObject(value)) {\n const objectResult: Record<string, any> = {};\n seen.set(value, objectResult);\n for (const [key, val] of Object.entries<any>(value)) {\n let curValue: any;\n if (!val) {\n curValue = val;\n } else if (redactedFields.includes(key)) {\n // Do not mask/sanitize secrets templates\n if (isString(val) && regEx(/^{{\\s*secrets\\..*}}$/).test(val)) {\n curValue = val;\n } else {\n curValue = '***********';\n }\n } else if (contentFields.includes(key)) {\n curValue = '[content]';\n } else if (key === 'secrets') {\n curValue = {};\n Object.keys(val).forEach((secretKey) => {\n curValue[secretKey] = '***********';\n });\n } else {\n curValue = seen.has(val) ? seen.get(val) : sanitizeValue(val, seen);\n }\n\n const sanitizedKey = sanitizeValue(key, seen);\n objectResult[sanitizedKey] = curValue;\n }\n\n return objectResult;\n }\n\n return value;\n}\n\nexport function withSanitizer(streamConfig: bunyan.Stream): bunyan.Stream {\n if (streamConfig.type === 'rotating-file') {\n throw new Error(\"Rotating files aren't supported\");\n }\n\n const stream = streamConfig.stream as BunyanStream;\n if (stream?.writable) {\n const write = (\n chunk: BunyanRecord,\n enc: BufferEncoding,\n cb: (err?: Error | null) => void,\n ): void => {\n const raw = sanitizeValue(chunk);\n const result =\n streamConfig.type === 'raw'\n ? raw\n : quickStringify(raw)?.replace(regEx(/\\n?$/), '\\n');\n stream.write(result, enc, cb);\n };\n\n return {\n ...streamConfig,\n type: 'raw',\n stream: { write },\n } as bunyan.Stream;\n }\n\n if (streamConfig.path) {\n const fileStream = fs.createWriteStream(streamConfig.path, {\n flags: 'a',\n encoding: 'utf8',\n });\n\n return withSanitizer({ ...streamConfig, stream: fileStream });\n }\n\n throw new Error(\"Missing 'stream' or 'path' for bunyan stream\");\n}\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: bunyan.LogLevelString,\n): bunyan.LogLevelString {\n const allowedValues: bunyan.LogLevelString[] = [\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 bunyan.LogLevelString))\n ) {\n // log level is in the allowed values or its undefined\n return (logLevelToCheck as bunyan.LogLevelString) ?? 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\n// Can't use `util/regex` because of circular reference to logger\nconst urlRe = /[a-z]{3,9}:\\/\\/[^@/]+@[a-z0-9.-]+/gi;\nconst urlCredRe = /\\/\\/[^@]+@/g;\nconst dataUriCredRe = /^(data:[0-9a-z-]+\\/[0-9a-z-]+;).+/i;\n\nexport function sanitizeUrls(text: string): string {\n return text\n .replace(urlRe, (url) => {\n return url.replace(urlCredRe, '//**redacted**@');\n })\n .replace(dataUriCredRe, '$1**redacted**');\n}\n\nexport function getEnv(key: string): string | undefined {\n return [process.env[`RENOVATE_${key}`], process.env[key]]\n .map((v) => v?.toLowerCase().trim())\n .find(isNonEmptyStringAndNotWhitespace);\n}\n\nexport function getMessage(\n p1: string | Record<string, any>,\n p2?: string,\n): string | undefined {\n return isString(p1) ? p1 : p2;\n}\n\nexport function toMeta(\n p1: string | Record<string, any>,\n): Record<string, unknown> {\n return isObject(p1) ? p1 : {};\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","names":["HttpError"],"sources":["../../lib/logger/utils.ts"],"sourcesContent":["import {\n isArray,\n isBuffer,\n isDate,\n isEmptyObject,\n isError,\n isFunction,\n isNonEmptyObject,\n isNonEmptyStringAndNotWhitespace,\n isObject,\n isPlainObject,\n isString,\n} from '@sindresorhus/is';\nimport { RequestError as HttpError } from 'got';\nimport { DateTime } from 'luxon';\nimport { ZodError } from 'zod/v3';\nimport { ExecError } from '../util/exec/exec-error.ts';\nimport { regEx } from '../util/regex.ts';\nimport { redactedFields, sanitize } from '../util/sanitize.ts';\n\nconst contentFields = [\n 'content',\n 'contents',\n 'packageLockParsed',\n 'yarnLockParsed',\n];\n\ntype ZodShortenedIssue =\n | null\n | string\n | string[]\n | {\n [key: string]: ZodShortenedIssue;\n };\n\nexport function prepareZodIssues(input: unknown): ZodShortenedIssue {\n if (!isPlainObject(input)) {\n return null;\n }\n\n let err: null | string | string[] = null;\n // v8 ignore else -- TODO: add test #40625\n if (isArray(input._errors, isString)) {\n if (input._errors.length === 1) {\n err = input._errors[0];\n } else if (input._errors.length > 1) {\n err = input._errors;\n } else {\n err = null;\n }\n }\n delete input._errors;\n\n if (isEmptyObject(input)) {\n return err;\n }\n\n const output: Record<string, ZodShortenedIssue> = {};\n const entries = Object.entries(input);\n for (const [key, value] of entries.slice(0, 3)) {\n const child = prepareZodIssues(value);\n // v8 ignore else -- TODO: add test #40625\n if (child !== null) {\n output[key] = child;\n }\n }\n\n if (entries.length > 3) {\n output.___ = `... ${entries.length - 3} more`;\n }\n\n return output;\n}\n\nexport function prepareZodError(err: ZodError): Record<string, unknown> {\n Object.defineProperty(err, 'message', {\n get: () => 'Schema error',\n /* v8 ignore start -- TODO: drop set? */\n set: () => {\n /* intentionally empty */\n },\n // v8 ignore stop -- TODO: drop set? */\n });\n\n return {\n message: err.message,\n stack: err.stack,\n issues: prepareZodIssues(err.format()),\n };\n}\n\nexport default function prepareError(err: Error): Record<string, unknown> {\n if (err instanceof ZodError) {\n return prepareZodError(err);\n }\n\n const response: Record<string, unknown> = {\n ...err,\n };\n\n // Required as message is non-enumerable\n if (!response.message && err.message) {\n response.message = err.message;\n }\n\n // Required as stack is non-enumerable\n if (!response.stack && err.stack) {\n response.stack = err.stack;\n }\n\n if (err instanceof AggregateError) {\n response.errors = err.errors.map((error) => prepareError(error));\n }\n\n // handle rawExec error\n if (err instanceof ExecError && isNonEmptyObject(err.options?.env)) {\n const env = Object.keys(err.options.env);\n response.options = { ...err.options, env };\n }\n\n // handle got error\n if (err instanceof HttpError) {\n const options: Record<string, unknown> = {\n headers: structuredClone(err.options.headers),\n url: err.options.url?.toString(),\n hostType: err.options.context.hostType,\n };\n response.options = options;\n\n options.username = err.options.username;\n options.password = err.options.password;\n options.method = err.options.method;\n options.http2 = err.options.http2;\n\n // v8 ignore else -- TODO: add test #40625\n if (err.response) {\n response.response = {\n statusCode: err.response.statusCode,\n statusMessage: err.response.statusMessage,\n body:\n err.name === 'TimeoutError'\n ? undefined\n : structuredClone(err.response.body),\n headers: structuredClone(err.response.headers),\n httpVersion: err.response.httpVersion,\n retryCount: err.response.retryCount,\n };\n }\n }\n\n return response;\n}\n\ntype NestedValue = unknown[] | object;\n\nfunction isNested(value: unknown): value is NestedValue {\n return isArray(value) || isObject(value);\n}\n\nexport function sanitizeValue(\n value: unknown,\n seen = new WeakMap<NestedValue, unknown>(),\n): any {\n if (isString(value)) {\n return sanitize(sanitizeUrls(value));\n }\n\n if (isDate(value)) {\n return value;\n }\n\n if (DateTime.isDateTime(value)) {\n return value.toISO();\n }\n\n if (isFunction(value)) {\n return '[function]';\n }\n\n if (isBuffer(value)) {\n return '[content]';\n }\n\n if (isError(value)) {\n const err = prepareError(value);\n return sanitizeValue(err, seen);\n }\n\n if (isArray(value)) {\n const length = value.length;\n const arrayResult = Array(length);\n seen.set(value, arrayResult);\n for (let idx = 0; idx < length; idx += 1) {\n const val = value[idx];\n arrayResult[idx] =\n isNested(val) && seen.has(val)\n ? seen.get(val)\n : sanitizeValue(val, seen);\n }\n return arrayResult;\n }\n\n if (isObject(value)) {\n const objectResult: Record<string, any> = {};\n seen.set(value, objectResult);\n for (const [key, val] of Object.entries<any>(value)) {\n let curValue: any;\n if (!val) {\n curValue = val;\n } else if (redactedFields.includes(key)) {\n // Do not mask/sanitize secrets templates\n if (isString(val) && regEx(/^{{\\s*secrets\\..*}}$/).test(val)) {\n curValue = val;\n } else {\n curValue = '***********';\n }\n } else if (contentFields.includes(key)) {\n curValue = '[content]';\n } else if (key === 'secrets') {\n curValue = {};\n Object.keys(val).forEach((secretKey) => {\n curValue[secretKey] = '***********';\n });\n } else {\n curValue = seen.has(val) ? seen.get(val) : sanitizeValue(val, seen);\n }\n\n const sanitizedKey = sanitizeValue(key, seen);\n objectResult[sanitizedKey] = curValue;\n }\n\n return objectResult;\n }\n\n return value;\n}\n\n// Can't use `util/regex` because of circular reference to logger\nconst urlRe = /[a-z]{3,9}:\\/\\/[^@/]+@[a-z0-9.-]+/gi;\nconst urlCredRe = /\\/\\/[^@]+@/g;\nconst dataUriCredRe = /^(data:[0-9a-z-]+\\/[0-9a-z-]+;).+/i;\n\nexport function sanitizeUrls(text: string): string {\n return text\n .replace(urlRe, (url) => {\n return url.replace(urlCredRe, '//**redacted**@');\n })\n .replace(dataUriCredRe, '$1**redacted**');\n}\n\nexport function getEnv(key: string): string | undefined {\n return [process.env[`RENOVATE_${key}`], process.env[key]]\n .map((v) => v?.toLowerCase().trim())\n .find(isNonEmptyStringAndNotWhitespace);\n}\n\nexport function getMessage(\n p1: string | Record<string, any>,\n p2?: string,\n): string | undefined {\n return isString(p1) ? p1 : p2;\n}\n\nexport function toMeta(\n p1: string | Record<string, any>,\n): Record<string, unknown> {\n return isObject(p1) ? p1 : {};\n}\n"],"mappings":";;;;;;;;;AAoBA,MAAM,gBAAgB;CACpB;CACA;CACA;CACA;CACD;AAUD,SAAgB,iBAAiB,OAAmC;AAClE,KAAI,CAAC,cAAc,MAAM,CACvB,QAAO;CAGT,IAAI,MAAgC;;AAEpC,KAAI,QAAQ,MAAM,SAAS,SAAS,CAClC,KAAI,MAAM,QAAQ,WAAW,EAC3B,OAAM,MAAM,QAAQ;UACX,MAAM,QAAQ,SAAS,EAChC,OAAM,MAAM;KAEZ,OAAM;AAGV,QAAO,MAAM;AAEb,KAAI,cAAc,MAAM,CACtB,QAAO;CAGT,MAAM,SAA4C,EAAE;CACpD,MAAM,UAAU,OAAO,QAAQ,MAAM;AACrC,MAAK,MAAM,CAAC,KAAK,UAAU,QAAQ,MAAM,GAAG,EAAE,EAAE;EAC9C,MAAM,QAAQ,iBAAiB,MAAM;;AAErC,MAAI,UAAU,KACZ,QAAO,OAAO;;AAIlB,KAAI,QAAQ,SAAS,EACnB,QAAO,MAAM,OAAO,QAAQ,SAAS,EAAE;AAGzC,QAAO;;AAGT,SAAgB,gBAAgB,KAAwC;AACtE,QAAO,eAAe,KAAK,WAAW;EACpC,WAAW;EAEX,WAAW;EAIZ,CAAC;AAEF,QAAO;EACL,SAAS,IAAI;EACb,OAAO,IAAI;EACX,QAAQ,iBAAiB,IAAI,QAAQ,CAAC;EACvC;;AAGH,SAAwB,aAAa,KAAqC;AACxE,KAAI,eAAe,SACjB,QAAO,gBAAgB,IAAI;CAG7B,MAAM,WAAoC,EACxC,GAAG,KACJ;AAGD,KAAI,CAAC,SAAS,WAAW,IAAI,QAC3B,UAAS,UAAU,IAAI;AAIzB,KAAI,CAAC,SAAS,SAAS,IAAI,MACzB,UAAS,QAAQ,IAAI;AAGvB,KAAI,eAAe,eACjB,UAAS,SAAS,IAAI,OAAO,KAAK,UAAU,aAAa,MAAM,CAAC;AAIlE,KAAI,eAAe,aAAa,iBAAiB,IAAI,SAAS,IAAI,EAAE;EAClE,MAAM,MAAM,OAAO,KAAK,IAAI,QAAQ,IAAI;AACxC,WAAS,UAAU;GAAE,GAAG,IAAI;GAAS;GAAK;;AAI5C,KAAI,eAAeA,cAAW;EAC5B,MAAM,UAAmC;GACvC,SAAS,gBAAgB,IAAI,QAAQ,QAAQ;GAC7C,KAAK,IAAI,QAAQ,KAAK,UAAU;GAChC,UAAU,IAAI,QAAQ,QAAQ;GAC/B;AACD,WAAS,UAAU;AAEnB,UAAQ,WAAW,IAAI,QAAQ;AAC/B,UAAQ,WAAW,IAAI,QAAQ;AAC/B,UAAQ,SAAS,IAAI,QAAQ;AAC7B,UAAQ,QAAQ,IAAI,QAAQ;;AAG5B,MAAI,IAAI,SACN,UAAS,WAAW;GAClB,YAAY,IAAI,SAAS;GACzB,eAAe,IAAI,SAAS;GAC5B,MACE,IAAI,SAAS,iBACT,SACA,gBAAgB,IAAI,SAAS,KAAK;GACxC,SAAS,gBAAgB,IAAI,SAAS,QAAQ;GAC9C,aAAa,IAAI,SAAS;GAC1B,YAAY,IAAI,SAAS;GAC1B;;AAIL,QAAO;;AAKT,SAAS,SAAS,OAAsC;AACtD,QAAO,QAAQ,MAAM,IAAI,SAAS,MAAM;;AAG1C,SAAgB,cACd,OACA,uBAAO,IAAI,SAA+B,EACrC;AACL,KAAI,SAAS,MAAM,CACjB,QAAO,SAAS,aAAa,MAAM,CAAC;AAGtC,KAAI,OAAO,MAAM,CACf,QAAO;AAGT,KAAI,SAAS,WAAW,MAAM,CAC5B,QAAO,MAAM,OAAO;AAGtB,KAAI,WAAW,MAAM,CACnB,QAAO;AAGT,KAAI,SAAS,MAAM,CACjB,QAAO;AAGT,KAAI,QAAQ,MAAM,CAEhB,QAAO,cADK,aAAa,MAAM,EACL,KAAK;AAGjC,KAAI,QAAQ,MAAM,EAAE;EAClB,MAAM,SAAS,MAAM;EACrB,MAAM,cAAc,MAAM,OAAO;AACjC,OAAK,IAAI,OAAO,YAAY;AAC5B,OAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,OAAO,GAAG;GACxC,MAAM,MAAM,MAAM;AAClB,eAAY,OACV,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,GAC1B,KAAK,IAAI,IAAI,GACb,cAAc,KAAK,KAAK;;AAEhC,SAAO;;AAGT,KAAI,SAAS,MAAM,EAAE;EACnB,MAAM,eAAoC,EAAE;AAC5C,OAAK,IAAI,OAAO,aAAa;AAC7B,OAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAa,MAAM,EAAE;GACnD,IAAI;AACJ,OAAI,CAAC,IACH,YAAW;YACF,eAAe,SAAS,IAAI,CAErC,KAAI,SAAS,IAAI,IAAI,MAAM,uBAAuB,CAAC,KAAK,IAAI,CAC1D,YAAW;OAEX,YAAW;YAEJ,cAAc,SAAS,IAAI,CACpC,YAAW;YACF,QAAQ,WAAW;AAC5B,eAAW,EAAE;AACb,WAAO,KAAK,IAAI,CAAC,SAAS,cAAc;AACtC,cAAS,aAAa;MACtB;SAEF,YAAW,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,cAAc,KAAK,KAAK;GAGrE,MAAM,eAAe,cAAc,KAAK,KAAK;AAC7C,gBAAa,gBAAgB;;AAG/B,SAAO;;AAGT,QAAO;;AAIT,MAAM,QAAQ;AACd,MAAM,YAAY;AAClB,MAAM,gBAAgB;AAEtB,SAAgB,aAAa,MAAsB;AACjD,QAAO,KACJ,QAAQ,QAAQ,QAAQ;AACvB,SAAO,IAAI,QAAQ,WAAW,kBAAkB;GAChD,CACD,QAAQ,eAAe,iBAAiB;;AAG7C,SAAgB,OAAO,KAAiC;AACtD,QAAO,CAAC,QAAQ,IAAI,YAAY,QAAQ,QAAQ,IAAI,KAAK,CACtD,KAAK,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CACnC,KAAK,iCAAiC;;AAG3C,SAAgB,WACd,IACA,IACoB;AACpB,QAAO,SAAS,GAAG,GAAG,KAAK;;AAG7B,SAAgB,OACd,IACyB;AACzB,QAAO,SAAS,GAAG,GAAG,KAAK,EAAE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { regEx } from "../util/regex.js";
|
|
2
|
+
import { sanitizeValue } from "./utils.js";
|
|
3
|
+
import { quickStringify } from "../util/stringify.js";
|
|
4
|
+
import fs from "fs-extra";
|
|
5
|
+
|
|
6
|
+
//#region lib/logger/with-sanitizer.ts
|
|
7
|
+
function withSanitizer(streamConfig) {
|
|
8
|
+
if (streamConfig.type === "rotating-file") throw new Error("Rotating files aren't supported");
|
|
9
|
+
const stream = streamConfig.stream;
|
|
10
|
+
if (stream?.writable) {
|
|
11
|
+
const write = (chunk, enc, cb) => {
|
|
12
|
+
const raw = sanitizeValue(chunk);
|
|
13
|
+
const result = streamConfig.type === "raw" ? raw : quickStringify(raw)?.replace(regEx(/\n?$/), "\n");
|
|
14
|
+
stream.write(result, enc, cb);
|
|
15
|
+
};
|
|
16
|
+
return {
|
|
17
|
+
...streamConfig,
|
|
18
|
+
type: "raw",
|
|
19
|
+
stream: { write }
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
if (streamConfig.path) {
|
|
23
|
+
const fileStream = fs.createWriteStream(streamConfig.path, {
|
|
24
|
+
flags: "a",
|
|
25
|
+
encoding: "utf8"
|
|
26
|
+
});
|
|
27
|
+
return withSanitizer({
|
|
28
|
+
...streamConfig,
|
|
29
|
+
stream: fileStream
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
throw new Error("Missing 'stream' or 'path' for bunyan stream");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
//#endregion
|
|
36
|
+
export { withSanitizer };
|
|
37
|
+
//# sourceMappingURL=with-sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-sanitizer.js","names":[],"sources":["../../lib/logger/with-sanitizer.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport { regEx } from '../util/regex.ts';\nimport { quickStringify } from '../util/stringify.ts';\nimport type { BunyanNodeStream, BunyanRecord, BunyanStream } from './types.ts';\nimport { sanitizeValue } from './utils.ts';\n\nexport function withSanitizer(streamConfig: BunyanStream): BunyanStream {\n if (streamConfig.type === 'rotating-file') {\n throw new Error(\"Rotating files aren't supported\");\n }\n\n const stream = streamConfig.stream as BunyanNodeStream;\n if (stream?.writable) {\n const write = (\n chunk: BunyanRecord,\n enc: BufferEncoding,\n cb: (err?: Error | null) => void,\n ): void => {\n const raw = sanitizeValue(chunk);\n const result =\n streamConfig.type === 'raw'\n ? raw\n : quickStringify(raw)?.replace(regEx(/\\n?$/), '\\n');\n stream.write(result, enc, cb);\n };\n\n return {\n ...streamConfig,\n type: 'raw',\n stream: { write },\n } as BunyanStream;\n }\n\n if (streamConfig.path) {\n const fileStream = fs.createWriteStream(streamConfig.path, {\n flags: 'a',\n encoding: 'utf8',\n });\n\n return withSanitizer({ ...streamConfig, stream: fileStream });\n }\n\n throw new Error(\"Missing 'stream' or 'path' for bunyan stream\");\n}\n"],"mappings":";;;;;;AAMA,SAAgB,cAAc,cAA0C;AACtE,KAAI,aAAa,SAAS,gBACxB,OAAM,IAAI,MAAM,kCAAkC;CAGpD,MAAM,SAAS,aAAa;AAC5B,KAAI,QAAQ,UAAU;EACpB,MAAM,SACJ,OACA,KACA,OACS;GACT,MAAM,MAAM,cAAc,MAAM;GAChC,MAAM,SACJ,aAAa,SAAS,QAClB,MACA,eAAe,IAAI,EAAE,QAAQ,MAAM,OAAO,EAAE,KAAK;AACvD,UAAO,MAAM,QAAQ,KAAK,GAAG;;AAG/B,SAAO;GACL,GAAG;GACH,MAAM;GACN,QAAQ,EAAE,OAAO;GAClB;;AAGH,KAAI,aAAa,MAAM;EACrB,MAAM,aAAa,GAAG,kBAAkB,aAAa,MAAM;GACzD,OAAO;GACP,UAAU;GACX,CAAC;AAEF,SAAO,cAAc;GAAE,GAAG;GAAc,QAAQ;GAAY,CAAC;;AAG/D,OAAM,IAAI,MAAM,+CAA+C"}
|
|
@@ -5,8 +5,8 @@ import { coerceArray } from "../../../util/array.js";
|
|
|
5
5
|
import { ensureCacheDir, getSiblingFileName, readLocalFile, writeLocalFile } from "../../../util/fs/index.js";
|
|
6
6
|
import { exec } from "../../../util/exec/index.js";
|
|
7
7
|
import { getRepoStatus } from "../../../util/git/index.js";
|
|
8
|
-
import upath from "upath";
|
|
9
8
|
import { quote } from "shlex";
|
|
9
|
+
import upath from "upath";
|
|
10
10
|
|
|
11
11
|
//#region lib/modules/manager/cocoapods/artifacts.ts
|
|
12
12
|
const pluginRegex = regEx(`^\\s*plugin\\s*(['"])(?<plugin>[^'"]+)(['"])`);
|
|
@@ -5,8 +5,8 @@ import { getGitEnvironmentVariables } from "../../../util/git/auth.js";
|
|
|
5
5
|
import { exec } from "../../../util/exec/index.js";
|
|
6
6
|
import { getRepoStatus } from "../../../util/git/index.js";
|
|
7
7
|
import { getCopierVersionConstraint, getPythonVersionConstraint } from "./utils.js";
|
|
8
|
-
import upath from "upath";
|
|
9
8
|
import { quote } from "shlex";
|
|
9
|
+
import upath from "upath";
|
|
10
10
|
|
|
11
11
|
//#region lib/modules/manager/copier/artifacts.ts
|
|
12
12
|
const DEFAULT_COMMAND_OPTIONS = ["--skip-answered", "--defaults"];
|
|
@@ -12,8 +12,8 @@ import { exec } from "../../../util/exec/index.js";
|
|
|
12
12
|
import { getRepoStatus } from "../../../util/git/index.js";
|
|
13
13
|
import { getExtraDepsNotice } from "./artifacts-extra.js";
|
|
14
14
|
import { isString } from "@sindresorhus/is";
|
|
15
|
-
import upath from "upath";
|
|
16
15
|
import { quote } from "shlex";
|
|
16
|
+
import upath from "upath";
|
|
17
17
|
import semver from "semver";
|
|
18
18
|
|
|
19
19
|
//#region lib/modules/manager/gomod/artifacts.ts
|
|
@@ -10,8 +10,8 @@ import { isGradleBuildFile } from "./utils.js";
|
|
|
10
10
|
import { extraEnv, extractGradleVersion, getJavaConstraint, gradleWrapperFileName, prepareGradleCommand } from "../gradle-wrapper/utils.js";
|
|
11
11
|
import { isGcvLockFile, isGcvPropsFile } from "./extract/consistent-versions-plugin.js";
|
|
12
12
|
import { isNonEmptyStringAndNotWhitespace } from "@sindresorhus/is";
|
|
13
|
-
import upath from "upath";
|
|
14
13
|
import { quote } from "shlex";
|
|
14
|
+
import upath from "upath";
|
|
15
15
|
|
|
16
16
|
//#region lib/modules/manager/gradle/artifacts.ts
|
|
17
17
|
function isGradleExecutionAllowed(command) {
|
|
@@ -10,8 +10,8 @@ import { extraEnv, getJavaConstraint, gradleWrapperFileName, prepareGradleComman
|
|
|
10
10
|
import { isGradleExecutionAllowed, updateArtifacts as updateArtifacts$1 } from "../gradle/artifacts.js";
|
|
11
11
|
import "../gradle/index.js";
|
|
12
12
|
import { isTruthy } from "@sindresorhus/is";
|
|
13
|
-
import upath from "upath";
|
|
14
13
|
import { quote } from "shlex";
|
|
14
|
+
import upath from "upath";
|
|
15
15
|
import { lang, query } from "@renovatebot/good-enough-parser";
|
|
16
16
|
|
|
17
17
|
//#region lib/modules/manager/gradle-wrapper/artifacts.ts
|
|
@@ -4,8 +4,8 @@ import { logger } from "../../../logger/index.js";
|
|
|
4
4
|
import { coerceArray } from "../../../util/array.js";
|
|
5
5
|
import { privateCacheDir } from "../../../util/fs/index.js";
|
|
6
6
|
import { ecrRegex, getECRAuthToken } from "../../datasource/docker/ecr.js";
|
|
7
|
-
import upath from "upath";
|
|
8
7
|
import { quote } from "shlex";
|
|
8
|
+
import upath from "upath";
|
|
9
9
|
|
|
10
10
|
//#region lib/modules/manager/helmv3/common.ts
|
|
11
11
|
async function generateLoginCmd(repositoryRule) {
|
|
@@ -3,8 +3,8 @@ import { localPathIsSymbolicLink, readLocalSymlink } from "../../../util/fs/inde
|
|
|
3
3
|
import { map } from "../../../util/promises.js";
|
|
4
4
|
import { exec } from "../../../util/exec/index.js";
|
|
5
5
|
import { getRepoStatus } from "../../../util/git/index.js";
|
|
6
|
-
import upath from "upath";
|
|
7
6
|
import { quote } from "shlex";
|
|
7
|
+
import upath from "upath";
|
|
8
8
|
|
|
9
9
|
//#region lib/modules/manager/hermit/artifacts.ts
|
|
10
10
|
/**
|
|
@@ -8,8 +8,8 @@ import { getRepoStatus } from "../../../util/git/index.js";
|
|
|
8
8
|
import { parseKustomize } from "./extract.js";
|
|
9
9
|
import { generateHelmEnvs } from "./common.js";
|
|
10
10
|
import { isNonEmptyString, isNullOrUndefined } from "@sindresorhus/is";
|
|
11
|
-
import upath from "upath";
|
|
12
11
|
import { quote } from "shlex";
|
|
12
|
+
import upath from "upath";
|
|
13
13
|
|
|
14
14
|
//#region lib/modules/manager/kustomize/artifacts.ts
|
|
15
15
|
async function localExistingChartPath(chartHome, dependencyName, version) {
|
|
@@ -9,8 +9,8 @@ import { processHostRules } from "./post-update/rules.js";
|
|
|
9
9
|
import { getNpmrcContent, resetNpmrcContent, updateNpmrcContent } from "./utils.js";
|
|
10
10
|
import { lazyLoadPackageJson } from "./post-update/utils.js";
|
|
11
11
|
import { isEmptyArray, isNonEmptyObject, isString } from "@sindresorhus/is";
|
|
12
|
-
import upath from "upath";
|
|
13
12
|
import { isScalar, isSeq, parseDocument } from "yaml";
|
|
13
|
+
import upath from "upath";
|
|
14
14
|
|
|
15
15
|
//#region lib/modules/manager/npm/artifacts.ts
|
|
16
16
|
const versionWithHashRegString = "^(?<version>.*)\\+(?<hash>.*)";
|
|
@@ -11,8 +11,8 @@ import { PackageLock } from "../schema.js";
|
|
|
11
11
|
import { composeLockFile, parseLockFile } from "../utils.js";
|
|
12
12
|
import { getNodeOptions, getPackageManagerVersion, lazyLoadPackageJson } from "./utils.js";
|
|
13
13
|
import { isNonEmptyString, isString } from "@sindresorhus/is";
|
|
14
|
-
import upath from "upath";
|
|
15
14
|
import { quote } from "shlex";
|
|
15
|
+
import upath from "upath";
|
|
16
16
|
import semver from "semver";
|
|
17
17
|
|
|
18
18
|
//#region lib/modules/manager/npm/post-update/npm.ts
|
|
@@ -9,8 +9,8 @@ import { PNPM_CACHE_DIR, PNPM_STORE_DIR } from "../constants.js";
|
|
|
9
9
|
import { getNodeToolConstraint } from "./node-version.js";
|
|
10
10
|
import { getNodeOptions, getPackageManagerVersion, lazyLoadPackageJson } from "./utils.js";
|
|
11
11
|
import { isNumber, isNumericString } from "@sindresorhus/is";
|
|
12
|
-
import upath from "upath";
|
|
13
12
|
import { quote } from "shlex";
|
|
13
|
+
import upath from "upath";
|
|
14
14
|
|
|
15
15
|
//#region lib/modules/manager/npm/post-update/pnpm.ts
|
|
16
16
|
function getPnpmConstraintFromUpgrades(upgrades) {
|
|
@@ -12,8 +12,8 @@ import { getNodeToolConstraint } from "./node-version.js";
|
|
|
12
12
|
import { getNodeOptions, getPackageManagerVersion, lazyLoadPackageJson } from "./utils.js";
|
|
13
13
|
import { getYarnLock, getYarnVersionFromLock } from "../extract/yarn.js";
|
|
14
14
|
import { isString } from "@sindresorhus/is";
|
|
15
|
-
import upath from "upath";
|
|
16
15
|
import { quote } from "shlex";
|
|
16
|
+
import upath from "upath";
|
|
17
17
|
import semver from "semver";
|
|
18
18
|
|
|
19
19
|
//#region lib/modules/manager/npm/post-update/yarn.ts
|
|
@@ -8,8 +8,8 @@ import { createNuGetConfigXml } from "./config-formatter.js";
|
|
|
8
8
|
import { findGlobalJson, getConfiguredRegistries, getDefaultRegistries } from "./util.js";
|
|
9
9
|
import { GLOBAL_JSON, MSBUILD_CENTRAL_FILE, NUGET_CENTRAL_FILE, getDependentPackageFiles } from "./package-tree.js";
|
|
10
10
|
import { isNonEmptyString } from "@sindresorhus/is";
|
|
11
|
-
import upath from "upath";
|
|
12
11
|
import { quote } from "shlex";
|
|
12
|
+
import upath from "upath";
|
|
13
13
|
|
|
14
14
|
//#region lib/modules/manager/nuget/artifacts.ts
|
|
15
15
|
async function createCachedNuGetConfigFile(nugetCacheDir, packageFileName, updatedDeps) {
|
|
@@ -7,8 +7,8 @@ import { getRepoStatus } from "../../../util/git/index.js";
|
|
|
7
7
|
import { extractPackageFileFlags } from "../pip_requirements/common.js";
|
|
8
8
|
import { extractHeaderCommand, extractPythonVersion, getExecOptions, getRegistryCredVarsFromPackageFiles, matchManager } from "./common.js";
|
|
9
9
|
import { inferCommandExecDir } from "./utils.js";
|
|
10
|
-
import upath from "upath";
|
|
11
10
|
import { quote } from "shlex";
|
|
11
|
+
import upath from "upath";
|
|
12
12
|
|
|
13
13
|
//#region lib/modules/manager/pip-compile/artifacts.ts
|
|
14
14
|
function haveCredentialsInPipEnvironmentVariables() {
|
|
@@ -5,8 +5,8 @@ import { isNotNullOrUndefined } from "../../../util/array.js";
|
|
|
5
5
|
import { ensureLocalPath } from "../../../util/fs/util.js";
|
|
6
6
|
import { ensureCacheDir } from "../../../util/fs/index.js";
|
|
7
7
|
import { isString } from "@sindresorhus/is";
|
|
8
|
-
import upath from "upath";
|
|
9
8
|
import { split } from "shlex";
|
|
9
|
+
import upath from "upath";
|
|
10
10
|
|
|
11
11
|
//#region lib/modules/manager/pip-compile/common.ts
|
|
12
12
|
function getPythonVersionConstraint(config, extractedPythonVersion) {
|
|
@@ -2,8 +2,8 @@ import { __exportAll } from "../../../_virtual/_rolldown/runtime.js";
|
|
|
2
2
|
import { REPOSITORY_NOT_FOUND } from "../../../constants/error-messages.js";
|
|
3
3
|
import { regEx } from "../../../util/regex.js";
|
|
4
4
|
import { GlobalConfig } from "../../../config/global.js";
|
|
5
|
-
import { sanitize } from "../../../util/sanitize.js";
|
|
6
5
|
import { UUIDRegex, matchRegexOrGlobList } from "../../../util/string-match.js";
|
|
6
|
+
import { sanitize } from "../../../util/sanitize.js";
|
|
7
7
|
import { logger } from "../../../logger/index.js";
|
|
8
8
|
import { find } from "../../../util/host-rules.js";
|
|
9
9
|
import { getInheritedOrGlobal, parseJson } from "../../../util/common.js";
|
package/dist/renovate.js
CHANGED
|
@@ -8,12 +8,13 @@ var import_punycode = require_punycode();
|
|
|
8
8
|
const otel = await import("./instrumentation/index.js");
|
|
9
9
|
otel.init();
|
|
10
10
|
(await import("./proxy.js")).bootstrap();
|
|
11
|
-
const
|
|
12
|
-
const { start } = await import("./workers/global/index.js");
|
|
11
|
+
const logger = await import("./logger/index.js");
|
|
13
12
|
/* v8 ignore next 3 -- not easily testable */
|
|
14
13
|
process.on("unhandledRejection", (err) => {
|
|
15
|
-
logger.error({ err }, "unhandledRejection");
|
|
14
|
+
logger.logger.error({ err }, "unhandledRejection");
|
|
16
15
|
});
|
|
16
|
+
await logger.init();
|
|
17
|
+
const { start } = await import("./workers/global/index.js");
|
|
17
18
|
process.exitCode = await otel.instrument("run", start);
|
|
18
19
|
await otel.shutdown();
|
|
19
20
|
/* v8 ignore next 3 -- no test required */
|
package/dist/renovate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renovate.js","names":[],"sources":["../lib/renovate.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport 'source-map-support/register.js';\nimport './punycode.cjs';\n\nvoid (async (): Promise<void> => {\n // has to be imported before logger and other libraries which are instrumentalised\n const otel = await import('./instrumentation/index.ts');\n otel.init();\n (await import('./proxy.ts')).bootstrap();\n const
|
|
1
|
+
{"version":3,"file":"renovate.js","names":[],"sources":["../lib/renovate.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport 'source-map-support/register.js';\nimport './punycode.cjs';\n\nvoid (async (): Promise<void> => {\n // has to be imported before logger and other libraries which are instrumentalised\n const otel = await import('./instrumentation/index.ts');\n otel.init();\n (await import('./proxy.ts')).bootstrap();\n\n const logger = await import('./logger/index.ts');\n /* v8 ignore next 3 -- not easily testable */\n process.on('unhandledRejection', (err) => {\n logger.logger.error({ err }, 'unhandledRejection');\n });\n await logger.init();\n\n const { start } = await import('./workers/global/index.ts');\n process.exitCode = await otel.instrument('run', start);\n await otel.shutdown(); //gracefully shutdown OpenTelemetry\n\n /* v8 ignore next 3 -- no test required */\n if (process.env.RENOVATE_X_HARD_EXIT) {\n process.exit(process.exitCode);\n }\n})();\n"],"mappings":";;;;;;CAKM,YAA2B;CAE/B,MAAM,OAAO,MAAM,OAAO;AAC1B,MAAK,MAAM;AACX,EAAC,MAAM,OAAO,eAAe,WAAW;CAExC,MAAM,SAAS,MAAM,OAAO;;AAE5B,SAAQ,GAAG,uBAAuB,QAAQ;AACxC,SAAO,OAAO,MAAM,EAAE,KAAK,EAAE,qBAAqB;GAClD;AACF,OAAM,OAAO,MAAM;CAEnB,MAAM,EAAE,UAAU,MAAM,OAAO;AAC/B,SAAQ,WAAW,MAAM,KAAK,WAAW,OAAO,MAAM;AACtD,OAAM,KAAK,UAAU;;AAGrB,KAAI,QAAQ,IAAI,qBACd,SAAQ,KAAK,QAAQ,SAAS;IAE9B"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { logger } from "../../../../logger/index.js";
|
|
2
2
|
import { compressToBase64, decompressFromBase64 } from "../../../compress.js";
|
|
3
3
|
import { PackageCacheBase } from "./base.js";
|
|
4
|
-
import upath from "upath";
|
|
5
4
|
import { DateTime } from "luxon";
|
|
5
|
+
import upath from "upath";
|
|
6
6
|
import cacache from "cacache";
|
|
7
7
|
|
|
8
8
|
//#region lib/util/cache/package/impl/file.ts
|
package/dist/util/fs/index.js
CHANGED
|
@@ -4,8 +4,8 @@ import { logWarningIfUnicodeHiddenCharactersInPackageFile } from "../unicode.js"
|
|
|
4
4
|
import { ensureCachePath, ensureLocalPath, isValidPath } from "./util.js";
|
|
5
5
|
import fs from "fs-extra";
|
|
6
6
|
import { isNonEmptyString } from "@sindresorhus/is";
|
|
7
|
-
import upath from "upath";
|
|
8
7
|
import stream from "node:stream";
|
|
8
|
+
import upath from "upath";
|
|
9
9
|
import util from "node:util";
|
|
10
10
|
import { findUp } from "find-up";
|
|
11
11
|
|
package/dist/util/git/index.js
CHANGED
|
@@ -23,8 +23,8 @@ import { getCachedModifiedResult, setCachedModifiedResult } from "./modified-cac
|
|
|
23
23
|
import { configSigningKey, setPrivateKey, writePrivateKey } from "./private-key.js";
|
|
24
24
|
import fs from "fs-extra";
|
|
25
25
|
import { isBoolean, isNonEmptyObject, isString } from "@sindresorhus/is";
|
|
26
|
-
import upath from "upath";
|
|
27
26
|
import { DateTime } from "luxon";
|
|
27
|
+
import upath from "upath";
|
|
28
28
|
import { setTimeout } from "timers/promises";
|
|
29
29
|
import { ResetMode, simpleGit } from "simple-git";
|
|
30
30
|
import semver from "semver";
|
|
@@ -3,8 +3,8 @@ import { pkg } from "../../expose.js";
|
|
|
3
3
|
import { getEnv } from "../../util/env.js";
|
|
4
4
|
import { regexEngineStatus } from "../../util/regex.js";
|
|
5
5
|
import { GlobalConfig } from "../../config/global.js";
|
|
6
|
-
import { addSecretForSanitizing } from "../../util/sanitize.js";
|
|
7
6
|
import { setGlobalLogLevelRemaps } from "../../logger/remap.js";
|
|
7
|
+
import { addSecretForSanitizing } from "../../util/sanitize.js";
|
|
8
8
|
import { getProblems, logLevel, logger, setMeta } from "../../logger/index.js";
|
|
9
9
|
import { add, clear } from "../../util/host-rules.js";
|
|
10
10
|
import { clear as clear$1 } from "../../util/http/queue.js";
|
|
@@ -22,9 +22,9 @@ import { renovateRepository } from "../repository/index.js";
|
|
|
22
22
|
import { globalFinalize, globalInitialize } from "./initialize.js";
|
|
23
23
|
import fs from "fs-extra";
|
|
24
24
|
import { isNonEmptyString, isNonEmptyStringAndNotWhitespace, isString } from "@sindresorhus/is";
|
|
25
|
-
import { ERROR } from "bunyan";
|
|
26
25
|
import upath from "upath";
|
|
27
26
|
import semver from "semver";
|
|
27
|
+
import { ERROR } from "bunyan";
|
|
28
28
|
import { ATTR_VCS_OWNER_NAME, ATTR_VCS_PROVIDER_NAME, ATTR_VCS_REPOSITORY_NAME } from "@opentelemetry/semantic-conventions/incubating";
|
|
29
29
|
|
|
30
30
|
//#region lib/workers/global/index.ts
|
|
@@ -8,8 +8,8 @@ import { EditorConfig } from "../../../../util/json-writer/editor-config.js";
|
|
|
8
8
|
import "../../../../util/json-writer/index.js";
|
|
9
9
|
import { detectRepoFileConfig } from "../../init/merge.js";
|
|
10
10
|
import { isNumber } from "@sindresorhus/is";
|
|
11
|
-
import upath from "upath";
|
|
12
11
|
import JSON5 from "json5";
|
|
12
|
+
import upath from "upath";
|
|
13
13
|
import detectIndent from "detect-indent";
|
|
14
14
|
|
|
15
15
|
//#region lib/workers/repository/config-migration/branch/migrated-data.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CONFIG_SECRETS_EXPOSED } from "../../../../constants/error-messages.js";
|
|
2
2
|
import { GlobalConfig } from "../../../../config/global.js";
|
|
3
|
-
import { sanitize } from "../../../../util/sanitize.js";
|
|
4
3
|
import { minimatch } from "../../../../util/minimatch.js";
|
|
4
|
+
import { sanitize } from "../../../../util/sanitize.js";
|
|
5
5
|
import { logger } from "../../../../logger/index.js";
|
|
6
6
|
import { scm } from "../../../../modules/platform/scm.js";
|
|
7
7
|
import { isNonEmptyArray } from "@sindresorhus/is";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { regEx } from "../../../../util/regex.js";
|
|
2
2
|
import { GlobalConfig } from "../../../../config/global.js";
|
|
3
|
-
import { sanitize } from "../../../../util/sanitize.js";
|
|
4
3
|
import { minimatch } from "../../../../util/minimatch.js";
|
|
4
|
+
import { sanitize } from "../../../../util/sanitize.js";
|
|
5
5
|
import { addMeta, logger } from "../../../../logger/index.js";
|
|
6
6
|
import { coerceArray } from "../../../../util/array.js";
|
|
7
7
|
import { compile } from "../../../../util/template/index.js";
|
package/package.json
CHANGED
package/renovate-schema.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"title": "JSON schema for Renovate 43.61.
|
|
2
|
+
"title": "JSON schema for Renovate 43.61.1 config files (https://renovatebot.com/)",
|
|
3
3
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
-
"x-renovate-version": "43.61.
|
|
4
|
+
"x-renovate-version": "43.61.1",
|
|
5
5
|
"allowComments": true,
|
|
6
6
|
"type": "object",
|
|
7
7
|
"properties": {
|
package/dist/logger/utils.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { BunyanRecord } from "./types.js";
|
|
2
|
-
import bunyan from "bunyan";
|
|
3
|
-
import { Stream } from "node:stream";
|
|
4
|
-
import { ZodError } from "zod/v3";
|
|
5
|
-
|
|
6
|
-
//#region lib/logger/utils.d.ts
|
|
7
|
-
declare class ProblemStream extends Stream {
|
|
8
|
-
private _problems;
|
|
9
|
-
readable: boolean;
|
|
10
|
-
writable: boolean;
|
|
11
|
-
constructor();
|
|
12
|
-
write(data: BunyanRecord): boolean;
|
|
13
|
-
getProblems(): BunyanRecord[];
|
|
14
|
-
clearProblems(): void;
|
|
15
|
-
}
|
|
16
|
-
//#endregion
|
|
17
|
-
export { ProblemStream };
|
|
18
|
-
//# sourceMappingURL=utils.d.ts.map
|