renovate 43.61.0 → 43.61.2
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 +3 -3
- 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":";;;;;;;;AAcA,MAAM,eAAiC;CACrC;CACA;CACA;CACA;CACA;CACA;CACD;AAID,IAAa,iBAAb,MAAa,eAAiC;CAC5C,AAAiB,QAAwB,EAAE;CAC3C,AAAS,SAAiB,EAAE,MAAM,EAASA,OAAW,EAAE;CACxD,AAAS,OAAO,KAAK,OAAO;CAC5B,AAAQ;CACR,AAAQ;CACR,AAAQ;CAER,YACE,SACA,MACA,cACA;AACA,OAAK,eAAe;AACpB,OAAK,UAAU;AACf,OAAK,OAAO;AACZ,OAAK,MAAM,SAAS,cAAc;AAChC,QAAK,OAAO,SAAS,KAAK,WAAW,MAAM;AAC3C,QAAK,OAAO,KAAK,SAAS,KAAK,UAAU,MAAM;;;CAMnD,MAAM,IAAkC,IAAmB;AACzD,OAAK,IAAI,SAAS,IAAI,GAAG;;CAK3B,MAAM,IAAkC,IAAmB;AACzD,OAAK,IAAI,SAAS,IAAI,GAAG;;CAK3B,KAAK,IAAkC,IAAmB;AACxD,OAAK,IAAI,QAAQ,IAAI,GAAG;;CAK1B,KAAK,IAAkC,IAAmB;AACxD,OAAK,IAAI,QAAQ,IAAI,GAAG;;CAK1B,MAAM,IAAkC,IAAmB;AACzD,OAAK,IAAI,SAAS,IAAI,GAAG;;CAK3B,MAAM,IAAkC,IAAmB;AACzD,OAAK,IAAI,SAAS,IAAI,GAAG;;CAG3B,eAAe,aAAsC;AACnD,OAAK,cAAc,CAAC,eAAe,YAAY;;CAGjD,UAAU,QAA4B;AACpC,OAAK,cAAc,CAAC,UAAU,cAAc,OAAO,CAAC;;CAGtD,cAA8B;AAC5B,SAAO,IAAI,eACT,KAAK,SACL,KAAK,MACL,KAAK,cAAc,CAAC,MAAM,EAAE,CAAC,CAC9B;;CAGH,OAAO,MAA4B,OAA6B;AAC9D,OAAK,cAAc,CAAC,OAAO,MAAM,MAAM;;CAGzC,IAAI,aAAqB;AACvB,SAAO,KAAK;;CAGd,IAAI,WAAW,SAAiB;AAC9B,OAAK,UAAU;;;;;CAMjB,IAAI,OAAO,cAA4B;AACrC,OAAK,eAAe;AAEpB,OAAK,MAAM,SAAS,KAAK,MACvB,QAAO;AAET,OAAK,MAAM,SAAS;;CAGtB,QAAQ,KAAoC;AAC1C,OAAK,OAAO,EAAE,GAAG,KAAK;;CAGxB,QAAQ,KAAoC;AAC1C,OAAK,OAAO;GAAE,GAAG,KAAK;GAAM,GAAG;GAAK;;CAGtC,WAAW,QAAwB;AACjC,OAAK,MAAM,OAAO,OAAO,KAAK,KAAK,KAAK,CACtC,KAAI,OAAO,SAAS,IAAI,CACtB,QAAO,KAAK,KAAK;;CAKvB,AAAQ,eAA6B;AACnC,MAAI,CAAC,KAAK,aACR,OAAM,IAAI,MAAM,uBAAuB;AAEzC,SAAO,KAAK;;CAGd,AAAQ,WAAW,QAAwC;AACzD,UAAQ,IAAkC,OAAsB;GAC9D,MAAM,OAAgC;IACpC,YAAY,KAAK;IACjB,GAAG,KAAK;IACR,GAAG,OAAO,GAAG;IACd;GACD,MAAM,MAAM,WAAW,IAAI,GAAG;GAC9B,IAAI,QAAQ;AAEZ,OAAI,SAAS,IAAI,EAAE;IACjB,MAAM,gBAAgB,iBAAiB,IAAI;;AAE3C,QAAI,eAAe;AACjB,UAAK,WAAW;AAChB,aAAQ;;AAEV,SAAK,cAAc,CAAC,OAAO,MAAM,IAAI;SAErC,MAAK,cAAc,CAAC,OAAO,KAAK;;;CAKtC,AAAQ,UAAU,OAAuC;EACvD,MAAM,aAAa,IAAkC,OAAsB;AACzE,cACQ;IACJ,MAAM,QAAQ,KAAK,OAAO,KAAK,KAAK;AACpC,QAAI,SAAS,GAAG,CACd,OAAM,GAAG;QAET,OAAM,IAAI,GAAG;MAGjB,WACA,IACA,GACD;;AAEH,SAAO;;CAGT,AAAQ,IACN,OACA,IACA,IACM;AACN,MAAI,CAAC,KAAK,cAAc;AAEtB,QAAK,MAAM,WAAW,KAAK,IAAI,OAAO,IAAI,GAAG,CAAC;AAC9C;;EAEF,MAAM,QAAQ,KAAK,OAAO;AAC1B,MAAI,SAAS,GAAG,CACd,OAAM,GAAG;MAET,OAAM,IAAI,GAAG"}
|
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
|