renovate 40.0.0-next.10 → 40.0.0-next.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/config/decrypt/legacy.js +0 -1
  2. package/dist/config/decrypt/legacy.js.map +1 -1
  3. package/dist/config/decrypt.js +2 -2
  4. package/dist/config/decrypt.js.map +1 -1
  5. package/dist/config/migrate-validate.js +3 -2
  6. package/dist/config/migrate-validate.js.map +1 -1
  7. package/dist/config/migration.js +2 -1
  8. package/dist/config/migration.js.map +1 -1
  9. package/dist/config/parse.js +2 -2
  10. package/dist/config/parse.js.map +1 -1
  11. package/dist/config/presets/gitea/index.js +0 -1
  12. package/dist/config/presets/gitea/index.js.map +1 -1
  13. package/dist/config/presets/github/index.js +0 -1
  14. package/dist/config/presets/github/index.js.map +1 -1
  15. package/dist/config/presets/http/index.js +0 -1
  16. package/dist/config/presets/http/index.js.map +1 -1
  17. package/dist/config/presets/index.js +0 -7
  18. package/dist/config/presets/index.js.map +1 -1
  19. package/dist/config/presets/internal/index.js +1 -3
  20. package/dist/config/presets/internal/index.js.map +1 -1
  21. package/dist/config/validation.js +2 -4
  22. package/dist/config/validation.js.map +1 -1
  23. package/dist/config-validator.js +0 -1
  24. package/dist/config-validator.js.map +1 -1
  25. package/dist/constants/category.js +0 -1
  26. package/dist/constants/category.js.map +1 -1
  27. package/dist/instrumentation/index.js +5 -3
  28. package/dist/instrumentation/index.js.map +1 -1
  29. package/dist/logger/cmd-serializer.js +0 -1
  30. package/dist/logger/cmd-serializer.js.map +1 -1
  31. package/dist/logger/config-serializer.js +0 -1
  32. package/dist/logger/config-serializer.js.map +1 -1
  33. package/dist/logger/index.js +0 -3
  34. package/dist/logger/index.js.map +1 -1
  35. package/dist/logger/once.js +4 -2
  36. package/dist/logger/once.js.map +1 -1
  37. package/dist/logger/pretty-stdout.js +0 -1
  38. package/dist/logger/pretty-stdout.js.map +1 -1
  39. package/dist/logger/renovate-logger.js +1 -1
  40. package/dist/logger/renovate-logger.js.map +1 -1
  41. package/dist/logger/utils.js +5 -10
  42. package/dist/logger/utils.js.map +1 -1
  43. package/dist/proxy.js +2 -1
  44. package/dist/proxy.js.map +1 -1
  45. package/dist/renovate.js +2 -2
  46. package/dist/renovate.js.map +1 -1
  47. package/dist/util/cache/package/redis.js +0 -1
  48. package/dist/util/cache/package/redis.js.map +1 -1
  49. package/dist/util/http/legacy.js +0 -1
  50. package/dist/util/http/legacy.js.map +1 -1
  51. package/dist/workers/repository/cache.js +0 -1
  52. package/dist/workers/repository/cache.js.map +1 -1
  53. package/package.json +2 -2
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.tryDecryptPublicKeyPKCS1 = tryDecryptPublicKeyPKCS1;
4
4
  exports.tryDecryptPublicKeyDefault = tryDecryptPublicKeyDefault;
5
5
  const tslib_1 = require("tslib");
6
- /** istanbul ignore file */
7
6
  const node_crypto_1 = tslib_1.__importDefault(require("node:crypto"));
8
7
  const logger_1 = require("../../logger");
9
8
  function tryDecryptPublicKeyPKCS1(privateKey, encryptedStr) {
@@ -1 +1 @@
1
- {"version":3,"file":"legacy.js","sourceRoot":"","sources":["../../../lib/config/decrypt/legacy.ts"],"names":[],"mappings":";;AAIA,4DAmBC;AAED,gEAcC;;AAvCD,2BAA2B;AAC3B,sEAAiC;AACjC,yCAAsC;AAEtC,SAAgB,wBAAwB,CACtC,UAAkB,EAClB,YAAoB;IAEpB,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,YAAY,GAAG,qBAAM;aAClB,cAAc,CACb;YACE,GAAG,EAAE,UAAU;YACf,OAAO,EAAE,qBAAM,CAAC,SAAS,CAAC,iBAAiB;SAC5C,EACD,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CACpC;aACA,QAAQ,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,eAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAgB,0BAA0B,CACxC,UAAkB,EAClB,YAAoB;IAEpB,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,YAAY,GAAG,qBAAM;aAClB,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;aAC/D,QAAQ,EAAE,CAAC;QACd,eAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,eAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["/** istanbul ignore file */\nimport crypto from 'node:crypto';\nimport { logger } from '../../logger';\n\nexport function tryDecryptPublicKeyPKCS1(\n privateKey: string,\n encryptedStr: string,\n): string | null {\n let decryptedStr: string | null = null;\n try {\n decryptedStr = crypto\n .privateDecrypt(\n {\n key: privateKey,\n padding: crypto.constants.RSA_PKCS1_PADDING,\n },\n Buffer.from(encryptedStr, 'base64'),\n )\n .toString();\n } catch {\n logger.debug('Could not decrypt using PKCS1 padding');\n }\n return decryptedStr;\n}\n\nexport function tryDecryptPublicKeyDefault(\n privateKey: string,\n encryptedStr: string,\n): string | null {\n let decryptedStr: string | null = null;\n try {\n decryptedStr = crypto\n .privateDecrypt(privateKey, Buffer.from(encryptedStr, 'base64'))\n .toString();\n logger.debug('Decrypted config using default padding');\n } catch {\n logger.debug('Could not decrypt using default padding');\n }\n return decryptedStr;\n}\n"]}
1
+ {"version":3,"file":"legacy.js","sourceRoot":"","sources":["../../../lib/config/decrypt/legacy.ts"],"names":[],"mappings":";;AAGA,4DAmBC;AAED,gEAcC;;AAtCD,sEAAiC;AACjC,yCAAsC;AAEtC,SAAgB,wBAAwB,CACtC,UAAkB,EAClB,YAAoB;IAEpB,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,YAAY,GAAG,qBAAM;aAClB,cAAc,CACb;YACE,GAAG,EAAE,UAAU;YACf,OAAO,EAAE,qBAAM,CAAC,SAAS,CAAC,iBAAiB;SAC5C,EACD,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CACpC;aACA,QAAQ,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,eAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAgB,0BAA0B,CACxC,UAAkB,EAClB,YAAoB;IAEpB,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,YAAY,GAAG,qBAAM;aAClB,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;aAC/D,QAAQ,EAAE,CAAC;QACd,eAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,eAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["import crypto from 'node:crypto';\nimport { logger } from '../../logger';\n\nexport function tryDecryptPublicKeyPKCS1(\n privateKey: string,\n encryptedStr: string,\n): string | null {\n let decryptedStr: string | null = null;\n try {\n decryptedStr = crypto\n .privateDecrypt(\n {\n key: privateKey,\n padding: crypto.constants.RSA_PKCS1_PADDING,\n },\n Buffer.from(encryptedStr, 'base64'),\n )\n .toString();\n } catch {\n logger.debug('Could not decrypt using PKCS1 padding');\n }\n return decryptedStr;\n}\n\nexport function tryDecryptPublicKeyDefault(\n privateKey: string,\n encryptedStr: string,\n): string | null {\n let decryptedStr: string | null = null;\n try {\n decryptedStr = crypto\n .privateDecrypt(privateKey, Buffer.from(encryptedStr, 'base64'))\n .toString();\n logger.debug('Decrypted config using default padding');\n } catch {\n logger.debug('Could not decrypt using default padding');\n }\n return decryptedStr;\n}\n"]}
@@ -31,10 +31,11 @@ async function tryDecrypt(privateKey, encryptedStr, repository, keyName) {
31
31
  }
32
32
  else {
33
33
  decryptedStr = (0, legacy_1.tryDecryptPublicKeyPKCS1)(privateKey, encryptedStr);
34
- // istanbul ignore if
34
+ /* v8 ignore start: not testable */
35
35
  if (is_1.default.string(decryptedStr)) {
36
36
  logger_1.logger.warn({ keyName }, 'Encrypted value is using deprecated PKCS1 padding, please change to using PGP encryption.');
37
37
  }
38
+ /* v8 ignore stop */
38
39
  }
39
40
  }
40
41
  return decryptedStr;
@@ -42,7 +43,6 @@ async function tryDecrypt(privateKey, encryptedStr, repository, keyName) {
42
43
  function validateDecryptedValue(decryptedObjStr, repository) {
43
44
  try {
44
45
  const decryptedObj = schema_1.DecryptedObject.safeParse(decryptedObjStr);
45
- // istanbul ignore if
46
46
  if (!decryptedObj.success) {
47
47
  const error = new Error('config-validation');
48
48
  error.validationError = `Could not parse decrypted config.`;
@@ -1 +1 @@
1
- {"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../../lib/config/decrypt.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../constants/error-messages';\nimport { logger } from '../logger';\nimport { regEx } from '../util/regex';\nimport { addSecretForSanitizing } from '../util/sanitize';\nimport { ensureTrailingSlash } from '../util/url';\nimport { tryDecryptKbPgp } from './decrypt/kbpgp';\nimport {\n tryDecryptPublicKeyDefault,\n tryDecryptPublicKeyPKCS1,\n} from './decrypt/legacy';\nimport { tryDecryptOpenPgp } from './decrypt/openpgp';\nimport { GlobalConfig } from './global';\nimport { DecryptedObject } from './schema';\nimport type { RenovateConfig } from './types';\n\nexport async function tryDecrypt(\n privateKey: string,\n encryptedStr: string,\n repository: string,\n keyName: string,\n): Promise<string | null> {\n let decryptedStr: string | null = null;\n if (privateKey?.startsWith('-----BEGIN PGP PRIVATE KEY BLOCK-----')) {\n const decryptedObjStr =\n process.env.RENOVATE_X_USE_OPENPGP === 'true'\n ? await tryDecryptOpenPgp(privateKey, encryptedStr)\n : await tryDecryptKbPgp(privateKey, encryptedStr);\n if (decryptedObjStr) {\n decryptedStr = validateDecryptedValue(decryptedObjStr, repository);\n }\n } else {\n decryptedStr = tryDecryptPublicKeyDefault(privateKey, encryptedStr);\n if (is.string(decryptedStr)) {\n logger.warn(\n { keyName },\n 'Encrypted value is using deprecated default padding, please change to using PGP encryption.',\n );\n } else {\n decryptedStr = tryDecryptPublicKeyPKCS1(privateKey, encryptedStr);\n // istanbul ignore if\n if (is.string(decryptedStr)) {\n logger.warn(\n { keyName },\n 'Encrypted value is using deprecated PKCS1 padding, please change to using PGP encryption.',\n );\n }\n }\n }\n return decryptedStr;\n}\n\nfunction validateDecryptedValue(\n decryptedObjStr: string,\n repository: string,\n): string | null {\n try {\n const decryptedObj = DecryptedObject.safeParse(decryptedObjStr);\n // istanbul ignore if\n if (!decryptedObj.success) {\n const error = new Error('config-validation');\n error.validationError = `Could not parse decrypted config.`;\n throw error;\n }\n\n const { o: org, r: repo, v: value } = decryptedObj.data;\n\n if (!is.nonEmptyString(value)) {\n const error = new Error('config-validation');\n error.validationError = `Encrypted value in config is missing a value.`;\n throw error;\n }\n\n if (!is.nonEmptyString(org)) {\n const error = new Error('config-validation');\n error.validationError = `Encrypted value in config is missing a scope.`;\n throw error;\n }\n\n const orgPrefixes = org\n .split(',')\n .map((o) => o.trim())\n .map((o) => o.toUpperCase())\n .map((o) => ensureTrailingSlash(o));\n\n if (is.nonEmptyString(repo)) {\n const scopedRepos = orgPrefixes.map((orgPrefix) =>\n `${orgPrefix}${repo}`.toUpperCase(),\n );\n if (scopedRepos.some((r) => r === repository.toUpperCase())) {\n return value;\n }\n logger.debug(\n { scopedRepos },\n 'Secret is scoped to a different repository',\n );\n const error = new Error('config-validation');\n const scopeString = scopedRepos.join(',');\n error.validationError = `Encrypted secret is scoped to a different repository: \"${scopeString}\".`;\n throw error;\n }\n\n // no scoped repos, only org\n if (\n orgPrefixes.some((orgPrefix) =>\n repository.toUpperCase().startsWith(orgPrefix),\n )\n ) {\n return value;\n }\n logger.debug({ orgPrefixes }, 'Secret is scoped to a different org');\n const error = new Error('config-validation');\n const scopeString = orgPrefixes.join(',');\n error.validationError = `Encrypted secret is scoped to a different org: \"${scopeString}\".`;\n throw error;\n } catch (err) {\n logger.warn({ err }, 'Could not parse decrypted string');\n }\n return null;\n}\n\nexport async function decryptConfig(\n config: RenovateConfig,\n repository: string,\n): Promise<RenovateConfig> {\n logger.trace({ config }, 'decryptConfig()');\n const decryptedConfig = { ...config };\n const privateKey = GlobalConfig.get('privateKey');\n const privateKeyOld = GlobalConfig.get('privateKeyOld');\n for (const [key, val] of Object.entries(config)) {\n if (key === 'encrypted' && is.object(val)) {\n logger.debug({ config: val }, 'Found encrypted config');\n\n const encryptedWarning = GlobalConfig.get('encryptedWarning');\n if (is.string(encryptedWarning)) {\n logger.once.warn(encryptedWarning);\n }\n\n if (privateKey) {\n for (const [eKey, eVal] of Object.entries(val)) {\n logger.debug('Trying to decrypt ' + eKey);\n let decryptedStr = await tryDecrypt(\n privateKey,\n eVal,\n repository,\n eKey,\n );\n if (privateKeyOld && !is.nonEmptyString(decryptedStr)) {\n logger.debug(`Trying to decrypt with old private key`);\n decryptedStr = await tryDecrypt(\n privateKeyOld,\n eVal,\n repository,\n eKey,\n );\n }\n if (!is.nonEmptyString(decryptedStr)) {\n const error = new Error('config-validation');\n error.validationError = `Failed to decrypt field ${eKey}. Please re-encrypt and try again.`;\n throw error;\n }\n logger.debug(`Decrypted ${eKey}`);\n if (eKey === 'npmToken') {\n const token = decryptedStr.replace(regEx(/\\n$/), '');\n decryptedConfig[eKey] = token;\n addSecretForSanitizing(token);\n } else {\n decryptedConfig[eKey] = decryptedStr;\n addSecretForSanitizing(decryptedStr);\n }\n }\n } else {\n if (process.env.RENOVATE_X_ENCRYPTED_STRICT === 'true') {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'config';\n error.validationError = 'Encrypted config unsupported';\n error.validationMessage = `This config contains an encrypted object at location \\`$.${key}\\` but no privateKey is configured. To support encrypted config, the Renovate administrator must configure a \\`privateKey\\` in Global Configuration.`;\n if (process.env.MEND_HOSTED === 'true') {\n error.validationMessage = `Mend-hosted Renovate Apps no longer support the use of encrypted secrets in Renovate file config (e.g. renovate.json).\nPlease migrate all secrets to the Developer Portal using the web UI available at https://developer.mend.io/\n\nRefer to migration documents here: https://docs.renovatebot.com/mend-hosted/migrating-secrets/`;\n }\n throw error;\n } else {\n logger.error('Found encrypted data but no privateKey');\n }\n }\n delete decryptedConfig.encrypted;\n } else if (is.array(val)) {\n decryptedConfig[key] = [];\n for (const item of val) {\n if (is.object(item) && !is.array(item)) {\n (decryptedConfig[key] as RenovateConfig[]).push(\n await decryptConfig(item as RenovateConfig, repository),\n );\n } else {\n (decryptedConfig[key] as unknown[]).push(item);\n }\n }\n } else if (is.object(val) && key !== 'content') {\n decryptedConfig[key] = await decryptConfig(\n val as RenovateConfig,\n repository,\n );\n }\n }\n delete decryptedConfig.encrypted;\n logger.trace({ config: decryptedConfig }, 'decryptedConfig');\n return decryptedConfig;\n}\n"]}
1
+ {"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../../lib/config/decrypt.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../constants/error-messages';\nimport { logger } from '../logger';\nimport { regEx } from '../util/regex';\nimport { addSecretForSanitizing } from '../util/sanitize';\nimport { ensureTrailingSlash } from '../util/url';\nimport { tryDecryptKbPgp } from './decrypt/kbpgp';\nimport {\n tryDecryptPublicKeyDefault,\n tryDecryptPublicKeyPKCS1,\n} from './decrypt/legacy';\nimport { tryDecryptOpenPgp } from './decrypt/openpgp';\nimport { GlobalConfig } from './global';\nimport { DecryptedObject } from './schema';\nimport type { RenovateConfig } from './types';\n\nexport async function tryDecrypt(\n privateKey: string,\n encryptedStr: string,\n repository: string,\n keyName: string,\n): Promise<string | null> {\n let decryptedStr: string | null = null;\n if (privateKey?.startsWith('-----BEGIN PGP PRIVATE KEY BLOCK-----')) {\n const decryptedObjStr =\n process.env.RENOVATE_X_USE_OPENPGP === 'true'\n ? await tryDecryptOpenPgp(privateKey, encryptedStr)\n : await tryDecryptKbPgp(privateKey, encryptedStr);\n if (decryptedObjStr) {\n decryptedStr = validateDecryptedValue(decryptedObjStr, repository);\n }\n } else {\n decryptedStr = tryDecryptPublicKeyDefault(privateKey, encryptedStr);\n if (is.string(decryptedStr)) {\n logger.warn(\n { keyName },\n 'Encrypted value is using deprecated default padding, please change to using PGP encryption.',\n );\n } else {\n decryptedStr = tryDecryptPublicKeyPKCS1(privateKey, encryptedStr);\n /* v8 ignore start: not testable */\n if (is.string(decryptedStr)) {\n logger.warn(\n { keyName },\n 'Encrypted value is using deprecated PKCS1 padding, please change to using PGP encryption.',\n );\n }\n /* v8 ignore stop */\n }\n }\n return decryptedStr;\n}\n\nfunction validateDecryptedValue(\n decryptedObjStr: string,\n repository: string,\n): string | null {\n try {\n const decryptedObj = DecryptedObject.safeParse(decryptedObjStr);\n if (!decryptedObj.success) {\n const error = new Error('config-validation');\n error.validationError = `Could not parse decrypted config.`;\n throw error;\n }\n\n const { o: org, r: repo, v: value } = decryptedObj.data;\n\n if (!is.nonEmptyString(value)) {\n const error = new Error('config-validation');\n error.validationError = `Encrypted value in config is missing a value.`;\n throw error;\n }\n\n if (!is.nonEmptyString(org)) {\n const error = new Error('config-validation');\n error.validationError = `Encrypted value in config is missing a scope.`;\n throw error;\n }\n\n const orgPrefixes = org\n .split(',')\n .map((o) => o.trim())\n .map((o) => o.toUpperCase())\n .map((o) => ensureTrailingSlash(o));\n\n if (is.nonEmptyString(repo)) {\n const scopedRepos = orgPrefixes.map((orgPrefix) =>\n `${orgPrefix}${repo}`.toUpperCase(),\n );\n if (scopedRepos.some((r) => r === repository.toUpperCase())) {\n return value;\n }\n logger.debug(\n { scopedRepos },\n 'Secret is scoped to a different repository',\n );\n const error = new Error('config-validation');\n const scopeString = scopedRepos.join(',');\n error.validationError = `Encrypted secret is scoped to a different repository: \"${scopeString}\".`;\n throw error;\n }\n\n // no scoped repos, only org\n if (\n orgPrefixes.some((orgPrefix) =>\n repository.toUpperCase().startsWith(orgPrefix),\n )\n ) {\n return value;\n }\n logger.debug({ orgPrefixes }, 'Secret is scoped to a different org');\n const error = new Error('config-validation');\n const scopeString = orgPrefixes.join(',');\n error.validationError = `Encrypted secret is scoped to a different org: \"${scopeString}\".`;\n throw error;\n } catch (err) {\n logger.warn({ err }, 'Could not parse decrypted string');\n }\n return null;\n}\n\nexport async function decryptConfig(\n config: RenovateConfig,\n repository: string,\n): Promise<RenovateConfig> {\n logger.trace({ config }, 'decryptConfig()');\n const decryptedConfig = { ...config };\n const privateKey = GlobalConfig.get('privateKey');\n const privateKeyOld = GlobalConfig.get('privateKeyOld');\n for (const [key, val] of Object.entries(config)) {\n if (key === 'encrypted' && is.object(val)) {\n logger.debug({ config: val }, 'Found encrypted config');\n\n const encryptedWarning = GlobalConfig.get('encryptedWarning');\n if (is.string(encryptedWarning)) {\n logger.once.warn(encryptedWarning);\n }\n\n if (privateKey) {\n for (const [eKey, eVal] of Object.entries(val)) {\n logger.debug('Trying to decrypt ' + eKey);\n let decryptedStr = await tryDecrypt(\n privateKey,\n eVal,\n repository,\n eKey,\n );\n if (privateKeyOld && !is.nonEmptyString(decryptedStr)) {\n logger.debug(`Trying to decrypt with old private key`);\n decryptedStr = await tryDecrypt(\n privateKeyOld,\n eVal,\n repository,\n eKey,\n );\n }\n if (!is.nonEmptyString(decryptedStr)) {\n const error = new Error('config-validation');\n error.validationError = `Failed to decrypt field ${eKey}. Please re-encrypt and try again.`;\n throw error;\n }\n logger.debug(`Decrypted ${eKey}`);\n if (eKey === 'npmToken') {\n const token = decryptedStr.replace(regEx(/\\n$/), '');\n decryptedConfig[eKey] = token;\n addSecretForSanitizing(token);\n } else {\n decryptedConfig[eKey] = decryptedStr;\n addSecretForSanitizing(decryptedStr);\n }\n }\n } else {\n if (process.env.RENOVATE_X_ENCRYPTED_STRICT === 'true') {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'config';\n error.validationError = 'Encrypted config unsupported';\n error.validationMessage = `This config contains an encrypted object at location \\`$.${key}\\` but no privateKey is configured. To support encrypted config, the Renovate administrator must configure a \\`privateKey\\` in Global Configuration.`;\n if (process.env.MEND_HOSTED === 'true') {\n error.validationMessage = `Mend-hosted Renovate Apps no longer support the use of encrypted secrets in Renovate file config (e.g. renovate.json).\nPlease migrate all secrets to the Developer Portal using the web UI available at https://developer.mend.io/\n\nRefer to migration documents here: https://docs.renovatebot.com/mend-hosted/migrating-secrets/`;\n }\n throw error;\n } else {\n logger.error('Found encrypted data but no privateKey');\n }\n }\n delete decryptedConfig.encrypted;\n } else if (is.array(val)) {\n decryptedConfig[key] = [];\n for (const item of val) {\n if (is.object(item) && !is.array(item)) {\n (decryptedConfig[key] as RenovateConfig[]).push(\n await decryptConfig(item as RenovateConfig, repository),\n );\n } else {\n (decryptedConfig[key] as unknown[]).push(item);\n }\n }\n } else if (is.object(val) && key !== 'content') {\n decryptedConfig[key] = await decryptConfig(\n val as RenovateConfig,\n repository,\n );\n }\n }\n delete decryptedConfig.encrypted;\n logger.trace({ config: decryptedConfig }, 'decryptedConfig');\n return decryptedConfig;\n}\n"]}
@@ -24,7 +24,7 @@ async function migrateAndValidate(config, input) {
24
24
  logger_1.logger.debug({ config: massagedConfig }, 'Post-massage config');
25
25
  }
26
26
  const { warnings, errors, } = await configValidation.validateConfig('repo', massagedConfig);
27
- // istanbul ignore if
27
+ /* v8 ignore start: hard to test */
28
28
  if (is_1.default.nonEmptyArray(warnings)) {
29
29
  logger_1.logger.warn({ warnings }, 'Found renovate config warnings');
30
30
  }
@@ -36,8 +36,9 @@ async function migrateAndValidate(config, input) {
36
36
  massagedConfig.warnings = (config.warnings ?? []).concat(warnings);
37
37
  }
38
38
  return massagedConfig;
39
+ /* v8 ignore next 3: TODO: test me */
39
40
  }
40
- catch (err) /* istanbul ignore next */ {
41
+ catch (err) {
41
42
  logger_1.logger.debug({ config: input }, 'migrateAndValidate error');
42
43
  throw err;
43
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"migrate-validate.js","sourceRoot":"","sources":["../../lib/config/migrate-validate.ts"],"names":[],"mappings":";;AAQA,gDA2CC;;AAnDD,kEAAkC;AAClC,mCAAgC;AAChC,sCAAmC;AACnC,iEAA2C;AAC3C,qEAA+C;AAE/C,uEAAiD;AAE1C,KAAK,UAAU,kBAAkB,CACtC,MAAsB,EACtB,KAAqB;IAErB,eAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5E,IAAI,UAAU,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CACV,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,EAC/C,4BAA4B,CAC7B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,cAAc,GAAG,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACnE,2BAA2B;QAC3B,IAAI,CAAC,IAAA,eAAM,EAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;YACnC,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,qBAAqB,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,EACJ,QAAQ,EACR,MAAM,GACP,GAGG,MAAM,gBAAgB,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAClE,qBAAqB;QACrB,IAAI,YAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,eAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,gCAAgC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,YAAE,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,eAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,8BAA8B,CAAC,CAAC;QAC1D,CAAC;QACD,cAAc,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAC5B,cAAc,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;QACxC,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,0BAA0B,CAAC,CAAC;QAC5D,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { logger } from '../logger';\nimport * as configMassage from './massage';\nimport * as configMigration from './migration';\nimport type { RenovateConfig, ValidationMessage } from './types';\nimport * as configValidation from './validation';\n\nexport async function migrateAndValidate(\n config: RenovateConfig,\n input: RenovateConfig,\n): Promise<RenovateConfig> {\n logger.debug('migrateAndValidate()');\n try {\n const { isMigrated, migratedConfig } = configMigration.migrateConfig(input);\n if (isMigrated) {\n logger.debug(\n { oldConfig: input, newConfig: migratedConfig },\n 'Config migration necessary',\n );\n } else {\n logger.debug('No config migration necessary');\n }\n const massagedConfig = configMassage.massageConfig(migratedConfig);\n // log only if it's changed\n if (!dequal(input, massagedConfig)) {\n logger.debug({ config: massagedConfig }, 'Post-massage config');\n }\n const {\n warnings,\n errors,\n }: {\n warnings: ValidationMessage[];\n errors: ValidationMessage[];\n } = await configValidation.validateConfig('repo', massagedConfig);\n // istanbul ignore if\n if (is.nonEmptyArray(warnings)) {\n logger.warn({ warnings }, 'Found renovate config warnings');\n }\n if (is.nonEmptyArray(errors)) {\n logger.info({ errors }, 'Found renovate config errors');\n }\n massagedConfig.errors = (config.errors ?? []).concat(errors);\n if (!config.repoIsOnboarded) {\n massagedConfig.warnings = (config.warnings ?? []).concat(warnings);\n }\n return massagedConfig;\n } catch (err) /* istanbul ignore next */ {\n logger.debug({ config: input }, 'migrateAndValidate error');\n throw err;\n }\n}\n"]}
1
+ {"version":3,"file":"migrate-validate.js","sourceRoot":"","sources":["../../lib/config/migrate-validate.ts"],"names":[],"mappings":";;AAQA,gDA4CC;;AApDD,kEAAkC;AAClC,mCAAgC;AAChC,sCAAmC;AACnC,iEAA2C;AAC3C,qEAA+C;AAE/C,uEAAiD;AAE1C,KAAK,UAAU,kBAAkB,CACtC,MAAsB,EACtB,KAAqB;IAErB,eAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5E,IAAI,UAAU,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CACV,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,EAC/C,4BAA4B,CAC7B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,cAAc,GAAG,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACnE,2BAA2B;QAC3B,IAAI,CAAC,IAAA,eAAM,EAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;YACnC,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,qBAAqB,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,EACJ,QAAQ,EACR,MAAM,GACP,GAGG,MAAM,gBAAgB,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAClE,mCAAmC;QACnC,IAAI,YAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,eAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,gCAAgC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,YAAE,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,eAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,8BAA8B,CAAC,CAAC;QAC1D,CAAC;QACD,cAAc,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAC5B,cAAc,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,cAAc,CAAC;QACtB,qCAAqC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,0BAA0B,CAAC,CAAC;QAC5D,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { logger } from '../logger';\nimport * as configMassage from './massage';\nimport * as configMigration from './migration';\nimport type { RenovateConfig, ValidationMessage } from './types';\nimport * as configValidation from './validation';\n\nexport async function migrateAndValidate(\n config: RenovateConfig,\n input: RenovateConfig,\n): Promise<RenovateConfig> {\n logger.debug('migrateAndValidate()');\n try {\n const { isMigrated, migratedConfig } = configMigration.migrateConfig(input);\n if (isMigrated) {\n logger.debug(\n { oldConfig: input, newConfig: migratedConfig },\n 'Config migration necessary',\n );\n } else {\n logger.debug('No config migration necessary');\n }\n const massagedConfig = configMassage.massageConfig(migratedConfig);\n // log only if it's changed\n if (!dequal(input, massagedConfig)) {\n logger.debug({ config: massagedConfig }, 'Post-massage config');\n }\n const {\n warnings,\n errors,\n }: {\n warnings: ValidationMessage[];\n errors: ValidationMessage[];\n } = await configValidation.validateConfig('repo', massagedConfig);\n /* v8 ignore start: hard to test */\n if (is.nonEmptyArray(warnings)) {\n logger.warn({ warnings }, 'Found renovate config warnings');\n }\n if (is.nonEmptyArray(errors)) {\n logger.info({ errors }, 'Found renovate config errors');\n }\n massagedConfig.errors = (config.errors ?? []).concat(errors);\n if (!config.repoIsOnboarded) {\n massagedConfig.warnings = (config.warnings ?? []).concat(warnings);\n }\n return massagedConfig;\n /* v8 ignore next 3: TODO: test me */\n } catch (err) {\n logger.debug({ config: input }, 'migrateAndValidate error');\n throw err;\n }\n}\n"]}
@@ -166,8 +166,9 @@ function migrateConfig(config, parentKey) {
166
166
  };
167
167
  }
168
168
  return { isMigrated, migratedConfig };
169
+ /* v8 ignore next 4: TODO: test me */
169
170
  }
170
- catch (err) /* istanbul ignore next */ {
171
+ catch (err) {
171
172
  logger_1.logger.debug({ config, err }, 'migrateConfig() error');
172
173
  throw err;
173
174
  }
@@ -1 +1 @@
1
- {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../lib/config/migration.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { logger } from '../logger';\nimport { clone } from '../util/clone';\nimport { regEx } from '../util/regex';\nimport { MigrationsService } from './migrations';\nimport { getOptions } from './options';\nimport type {\n MigratedConfig,\n MigratedRenovateConfig,\n PackageRule,\n RenovateConfig,\n RenovateOptions,\n} from './types';\nimport { mergeChildConfig } from './utils';\n\nconst options = getOptions();\nexport function fixShortHours(input: string): string {\n return input.replace(regEx(/( \\d?\\d)((a|p)m)/g), '$1:00$2');\n}\n\nlet optionTypes: Record<string, RenovateOptions['type']>;\n// Returns a migrated config\nexport function migrateConfig(\n config: RenovateConfig,\n parentKey?: string,\n): MigratedConfig {\n try {\n if (!optionTypes) {\n optionTypes = {};\n options.forEach((option) => {\n optionTypes[option.name] = option.type;\n });\n }\n const newConfig = MigrationsService.run(config, parentKey);\n const migratedConfig = clone(newConfig) as MigratedRenovateConfig;\n\n for (const [key, val] of Object.entries(newConfig)) {\n if (is.string(val) && val.includes('{{baseDir}}')) {\n migratedConfig[key] = val.replace(\n regEx(/{{baseDir}}/g),\n '{{packageFileDir}}',\n );\n } else if (is.string(val) && val.includes('{{lookupName}}')) {\n migratedConfig[key] = val.replace(\n regEx(/{{lookupName}}/g),\n '{{packageName}}',\n );\n } else if (is.string(val) && val.includes('{{depNameShort}}')) {\n migratedConfig[key] = val.replace(\n regEx(/{{depNameShort}}/g),\n '{{depName}}',\n );\n } else if (is.string(val) && val.startsWith('{{semanticPrefix}}')) {\n migratedConfig[key] = val.replace(\n '{{semanticPrefix}}',\n '{{#if semanticCommitType}}{{semanticCommitType}}{{#if semanticCommitScope}}({{semanticCommitScope}}){{/if}}: {{/if}}',\n );\n } else if (optionTypes[key] === 'object' && is.boolean(val)) {\n migratedConfig[key] = { enabled: val };\n } else if (optionTypes[key] === 'boolean') {\n if (val === 'true') {\n migratedConfig[key] = true;\n } else if (val === 'false') {\n migratedConfig[key] = false;\n }\n } else if (\n optionTypes[key] === 'string' &&\n is.array(val) &&\n val.length === 1\n ) {\n migratedConfig[key] = String(val[0]);\n } else if (is.array(val)) {\n if (is.array(migratedConfig?.[key])) {\n const newArray = [];\n for (const item of migratedConfig[key]) {\n if (is.object(item) && !is.array(item)) {\n const arrMigrate = migrateConfig(item as RenovateConfig);\n newArray.push(arrMigrate.migratedConfig);\n } else {\n newArray.push(item);\n }\n }\n migratedConfig[key] = newArray;\n }\n } else if (is.object(val)) {\n const subMigrate = migrateConfig(\n migratedConfig[key] as RenovateConfig,\n key,\n );\n if (subMigrate.isMigrated) {\n migratedConfig[key] = subMigrate.migratedConfig;\n }\n }\n\n const migratedTemplates = {\n fromVersion: 'currentVersion',\n newValueMajor: 'newMajor',\n newValueMinor: 'newMinor',\n newVersionMajor: 'newMajor',\n newVersionMinor: 'newMinor',\n toVersion: 'newVersion',\n };\n if (is.string(migratedConfig[key])) {\n for (const [from, to] of Object.entries(migratedTemplates)) {\n migratedConfig[key] = (migratedConfig[key] as string).replace(\n regEx(from, 'g'),\n to,\n );\n }\n }\n }\n const languages = [\n 'docker',\n 'dotnet',\n 'golang',\n 'java',\n 'js',\n 'node',\n 'php',\n 'python',\n 'ruby',\n 'rust',\n ];\n for (const language of languages) {\n if (is.nonEmptyObject(migratedConfig[language])) {\n migratedConfig.packageRules ??= [];\n const currentContent = migratedConfig[language] as any;\n const packageRule = {\n matchCategories: [language],\n ...currentContent,\n };\n migratedConfig.packageRules.unshift(packageRule);\n delete migratedConfig[language];\n }\n }\n // Migrate nested packageRules\n if (is.nonEmptyArray(migratedConfig.packageRules)) {\n const existingRules = migratedConfig.packageRules;\n migratedConfig.packageRules = [];\n for (const packageRule of existingRules) {\n if (is.array(packageRule.packageRules)) {\n logger.debug('Flattening nested packageRules');\n // merge each subrule and add to the parent list\n for (const subrule of packageRule.packageRules) {\n // TODO: fix types #22198\n const combinedRule = mergeChildConfig(\n packageRule,\n subrule as PackageRule,\n );\n delete combinedRule.packageRules;\n migratedConfig.packageRules.push(combinedRule);\n }\n } else {\n migratedConfig.packageRules.push(packageRule);\n }\n }\n }\n if (\n is.nonEmptyObject(migratedConfig['pip-compile']) &&\n is.nonEmptyArray(migratedConfig['pip-compile'].fileMatch)\n ) {\n migratedConfig['pip-compile'].fileMatch = migratedConfig[\n 'pip-compile'\n ].fileMatch.map((fileMatch) => {\n const match = fileMatch as string;\n if (match.endsWith('.in')) {\n return match.replace(/\\.in$/, '.txt');\n }\n return match.replace(/\\.in\\$$/, '.txt$');\n });\n }\n if (is.nonEmptyArray(migratedConfig.matchManagers)) {\n if (migratedConfig.matchManagers.includes('gradle-lite')) {\n if (!migratedConfig.matchManagers.includes('gradle')) {\n migratedConfig.matchManagers.push('gradle');\n }\n migratedConfig.matchManagers = migratedConfig.matchManagers.filter(\n (manager) => manager !== 'gradle-lite',\n );\n }\n }\n if (is.nonEmptyObject(migratedConfig['gradle-lite'])) {\n migratedConfig.gradle = mergeChildConfig(\n migratedConfig.gradle ?? {},\n migratedConfig['gradle-lite'],\n );\n }\n delete migratedConfig['gradle-lite'];\n const isMigrated = !dequal(config, migratedConfig);\n if (isMigrated) {\n // recursive call in case any migrated configs need further migrating\n return {\n isMigrated,\n migratedConfig: migrateConfig(migratedConfig).migratedConfig,\n };\n }\n return { isMigrated, migratedConfig };\n } catch (err) /* istanbul ignore next */ {\n logger.debug({ config, err }, 'migrateConfig() error');\n throw err;\n }\n}\n"]}
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../lib/config/migration.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { logger } from '../logger';\nimport { clone } from '../util/clone';\nimport { regEx } from '../util/regex';\nimport { MigrationsService } from './migrations';\nimport { getOptions } from './options';\nimport type {\n MigratedConfig,\n MigratedRenovateConfig,\n PackageRule,\n RenovateConfig,\n RenovateOptions,\n} from './types';\nimport { mergeChildConfig } from './utils';\n\nconst options = getOptions();\nexport function fixShortHours(input: string): string {\n return input.replace(regEx(/( \\d?\\d)((a|p)m)/g), '$1:00$2');\n}\n\nlet optionTypes: Record<string, RenovateOptions['type']>;\n// Returns a migrated config\nexport function migrateConfig(\n config: RenovateConfig,\n parentKey?: string,\n): MigratedConfig {\n try {\n if (!optionTypes) {\n optionTypes = {};\n options.forEach((option) => {\n optionTypes[option.name] = option.type;\n });\n }\n const newConfig = MigrationsService.run(config, parentKey);\n const migratedConfig = clone(newConfig) as MigratedRenovateConfig;\n\n for (const [key, val] of Object.entries(newConfig)) {\n if (is.string(val) && val.includes('{{baseDir}}')) {\n migratedConfig[key] = val.replace(\n regEx(/{{baseDir}}/g),\n '{{packageFileDir}}',\n );\n } else if (is.string(val) && val.includes('{{lookupName}}')) {\n migratedConfig[key] = val.replace(\n regEx(/{{lookupName}}/g),\n '{{packageName}}',\n );\n } else if (is.string(val) && val.includes('{{depNameShort}}')) {\n migratedConfig[key] = val.replace(\n regEx(/{{depNameShort}}/g),\n '{{depName}}',\n );\n } else if (is.string(val) && val.startsWith('{{semanticPrefix}}')) {\n migratedConfig[key] = val.replace(\n '{{semanticPrefix}}',\n '{{#if semanticCommitType}}{{semanticCommitType}}{{#if semanticCommitScope}}({{semanticCommitScope}}){{/if}}: {{/if}}',\n );\n } else if (optionTypes[key] === 'object' && is.boolean(val)) {\n migratedConfig[key] = { enabled: val };\n } else if (optionTypes[key] === 'boolean') {\n if (val === 'true') {\n migratedConfig[key] = true;\n } else if (val === 'false') {\n migratedConfig[key] = false;\n }\n } else if (\n optionTypes[key] === 'string' &&\n is.array(val) &&\n val.length === 1\n ) {\n migratedConfig[key] = String(val[0]);\n } else if (is.array(val)) {\n if (is.array(migratedConfig?.[key])) {\n const newArray = [];\n for (const item of migratedConfig[key]) {\n if (is.object(item) && !is.array(item)) {\n const arrMigrate = migrateConfig(item as RenovateConfig);\n newArray.push(arrMigrate.migratedConfig);\n } else {\n newArray.push(item);\n }\n }\n migratedConfig[key] = newArray;\n }\n } else if (is.object(val)) {\n const subMigrate = migrateConfig(\n migratedConfig[key] as RenovateConfig,\n key,\n );\n if (subMigrate.isMigrated) {\n migratedConfig[key] = subMigrate.migratedConfig;\n }\n }\n\n const migratedTemplates = {\n fromVersion: 'currentVersion',\n newValueMajor: 'newMajor',\n newValueMinor: 'newMinor',\n newVersionMajor: 'newMajor',\n newVersionMinor: 'newMinor',\n toVersion: 'newVersion',\n };\n if (is.string(migratedConfig[key])) {\n for (const [from, to] of Object.entries(migratedTemplates)) {\n migratedConfig[key] = (migratedConfig[key] as string).replace(\n regEx(from, 'g'),\n to,\n );\n }\n }\n }\n const languages = [\n 'docker',\n 'dotnet',\n 'golang',\n 'java',\n 'js',\n 'node',\n 'php',\n 'python',\n 'ruby',\n 'rust',\n ];\n for (const language of languages) {\n if (is.nonEmptyObject(migratedConfig[language])) {\n migratedConfig.packageRules ??= [];\n const currentContent = migratedConfig[language] as any;\n const packageRule = {\n matchCategories: [language],\n ...currentContent,\n };\n migratedConfig.packageRules.unshift(packageRule);\n delete migratedConfig[language];\n }\n }\n // Migrate nested packageRules\n if (is.nonEmptyArray(migratedConfig.packageRules)) {\n const existingRules = migratedConfig.packageRules;\n migratedConfig.packageRules = [];\n for (const packageRule of existingRules) {\n if (is.array(packageRule.packageRules)) {\n logger.debug('Flattening nested packageRules');\n // merge each subrule and add to the parent list\n for (const subrule of packageRule.packageRules) {\n // TODO: fix types #22198\n const combinedRule = mergeChildConfig(\n packageRule,\n subrule as PackageRule,\n );\n delete combinedRule.packageRules;\n migratedConfig.packageRules.push(combinedRule);\n }\n } else {\n migratedConfig.packageRules.push(packageRule);\n }\n }\n }\n if (\n is.nonEmptyObject(migratedConfig['pip-compile']) &&\n is.nonEmptyArray(migratedConfig['pip-compile'].fileMatch)\n ) {\n migratedConfig['pip-compile'].fileMatch = migratedConfig[\n 'pip-compile'\n ].fileMatch.map((fileMatch) => {\n const match = fileMatch as string;\n if (match.endsWith('.in')) {\n return match.replace(/\\.in$/, '.txt');\n }\n return match.replace(/\\.in\\$$/, '.txt$');\n });\n }\n if (is.nonEmptyArray(migratedConfig.matchManagers)) {\n if (migratedConfig.matchManagers.includes('gradle-lite')) {\n if (!migratedConfig.matchManagers.includes('gradle')) {\n migratedConfig.matchManagers.push('gradle');\n }\n migratedConfig.matchManagers = migratedConfig.matchManagers.filter(\n (manager) => manager !== 'gradle-lite',\n );\n }\n }\n if (is.nonEmptyObject(migratedConfig['gradle-lite'])) {\n migratedConfig.gradle = mergeChildConfig(\n migratedConfig.gradle ?? {},\n migratedConfig['gradle-lite'],\n );\n }\n delete migratedConfig['gradle-lite'];\n const isMigrated = !dequal(config, migratedConfig);\n if (isMigrated) {\n // recursive call in case any migrated configs need further migrating\n return {\n isMigrated,\n migratedConfig: migrateConfig(migratedConfig).migratedConfig,\n };\n }\n return { isMigrated, migratedConfig };\n /* v8 ignore next 4: TODO: test me */\n } catch (err) {\n logger.debug({ config, err }, 'migrateConfig() error');\n throw err;\n }\n}\n"]}
@@ -13,7 +13,7 @@ function parseFileConfig(fileName, fileContents) {
13
13
  try {
14
14
  return { success: true, parsedContents: json5_1.default.parse(fileContents) };
15
15
  }
16
- catch (err) /* istanbul ignore next */ {
16
+ catch (err) {
17
17
  logger_1.logger.debug({ fileName, fileContents }, 'Error parsing JSON5 file');
18
18
  const validationError = 'Invalid JSON5 (parsing failed)';
19
19
  const validationMessage = `JSON5.parse error: \`${err.message.replaceAll('`', "'")}\``;
@@ -53,7 +53,7 @@ function parseFileConfig(fileName, fileContents) {
53
53
  parsedContents: (0, common_1.parseJson)(fileContents, fileName),
54
54
  };
55
55
  }
56
- catch (err) /* istanbul ignore next */ {
56
+ catch (err) {
57
57
  logger_1.logger.debug({ fileContents }, 'Error parsing renovate config');
58
58
  const validationError = 'Invalid JSON (parsing failed)';
59
59
  const validationMessage = `JSON.parse error: \`${err.message.replaceAll('`', "'")}\``;
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../lib/config/parse.ts"],"names":[],"mappings":";;AAMA,0CAoEC;;AA1ED,4FAAmD;AACnD,0DAA0B;AAC1B,0DAA0B;AAC1B,sCAAmC;AACnC,2CAA2C;AAE3C,SAAgB,eAAe,CAC7B,QAAgB,EAChB,YAAoB;IAIpB,MAAM,QAAQ,GAAG,eAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEzC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,eAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACtE,CAAC;QAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;YACxC,eAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,0BAA0B,CAAC,CAAC;YACrE,MAAM,eAAe,GAAG,gCAAgC,CAAC;YACzD,MAAM,iBAAiB,GAAG,wBAAwB,GAAG,CAAC,OAAO,CAAC,UAAU,CACtE,GAAG,EACH,GAAG,CACJ,IAAI,CAAC;YACN,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,eAAe;gBACf,iBAAiB;aAClB,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,kBAAkB,GAAG,IAAI,CAAC;QAC9B,IAAI,mBAAmB,GAAG,gCAAa,CAAC,QAAQ,CAC9C,YAAY,EACZ,kBAAkB,CACnB,CAAC;QACF,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,eAAe,GAAG,+BAA+B,CAAC;YACxD,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;YAC9C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,eAAe;gBACf,iBAAiB;aAClB,CAAC;QACJ,CAAC;QACD,kBAAkB,GAAG,KAAK,CAAC;QAC3B,mBAAmB,GAAG,gCAAa,CAAC,QAAQ,CAC1C,YAAY,EACZ,kBAAkB,CACnB,CAAC;QACF,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,eAAe,GAAG,wBAAwB,CAAC;YACjD,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YAC9D,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,eAAe;gBACf,iBAAiB;aAClB,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,cAAc,EAAE,IAAA,kBAAS,EAAC,YAAY,EAAE,QAAQ,CAAC;aAClD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;YACxC,eAAM,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,EAAE,+BAA+B,CAAC,CAAC;YAChE,MAAM,eAAe,GAAG,+BAA+B,CAAC;YACxD,MAAM,iBAAiB,GAAG,wBAAwB,GAAG,CAAC,OAAO,CAAC,UAAU,CACtE,GAAG,EACH,GAAG,CACJ,IAAI,CAAC;YACN,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC;QAChE,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import jsonValidator from 'json-dup-key-validator';\nimport JSON5 from 'json5';\nimport upath from 'upath';\nimport { logger } from '../logger';\nimport { parseJson } from '../util/common';\n\nexport function parseFileConfig(\n fileName: string,\n fileContents: string,\n):\n | { success: true; parsedContents: unknown }\n | { success: false; validationError: string; validationMessage: string } {\n const fileType = upath.extname(fileName);\n\n if (fileType === '.json5') {\n try {\n return { success: true, parsedContents: JSON5.parse(fileContents) };\n } catch (err) /* istanbul ignore next */ {\n logger.debug({ fileName, fileContents }, 'Error parsing JSON5 file');\n const validationError = 'Invalid JSON5 (parsing failed)';\n const validationMessage = `JSON5.parse error: \\`${err.message.replaceAll(\n '`',\n \"'\",\n )}\\``;\n return {\n success: false,\n validationError,\n validationMessage,\n };\n }\n } else {\n let allowDuplicateKeys = true;\n let jsonValidationError = jsonValidator.validate(\n fileContents,\n allowDuplicateKeys,\n );\n if (jsonValidationError) {\n const validationError = 'Invalid JSON (parsing failed)';\n const validationMessage = jsonValidationError;\n return {\n success: false,\n validationError,\n validationMessage,\n };\n }\n allowDuplicateKeys = false;\n jsonValidationError = jsonValidator.validate(\n fileContents,\n allowDuplicateKeys,\n );\n if (jsonValidationError) {\n const validationError = 'Duplicate keys in JSON';\n const validationMessage = JSON.stringify(jsonValidationError);\n return {\n success: false,\n validationError,\n validationMessage,\n };\n }\n try {\n return {\n success: true,\n parsedContents: parseJson(fileContents, fileName),\n };\n } catch (err) /* istanbul ignore next */ {\n logger.debug({ fileContents }, 'Error parsing renovate config');\n const validationError = 'Invalid JSON (parsing failed)';\n const validationMessage = `JSON.parse error: \\`${err.message.replaceAll(\n '`',\n \"'\",\n )}\\``;\n return { success: false, validationError, validationMessage };\n }\n }\n}\n"]}
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../lib/config/parse.ts"],"names":[],"mappings":";;AAMA,0CAoEC;;AA1ED,4FAAmD;AACnD,0DAA0B;AAC1B,0DAA0B;AAC1B,sCAAmC;AACnC,2CAA2C;AAE3C,SAAgB,eAAe,CAC7B,QAAgB,EAChB,YAAoB;IAIpB,MAAM,QAAQ,GAAG,eAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEzC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,eAAK,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACtE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,eAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,0BAA0B,CAAC,CAAC;YACrE,MAAM,eAAe,GAAG,gCAAgC,CAAC;YACzD,MAAM,iBAAiB,GAAG,wBAAwB,GAAG,CAAC,OAAO,CAAC,UAAU,CACtE,GAAG,EACH,GAAG,CACJ,IAAI,CAAC;YACN,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,eAAe;gBACf,iBAAiB;aAClB,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,kBAAkB,GAAG,IAAI,CAAC;QAC9B,IAAI,mBAAmB,GAAG,gCAAa,CAAC,QAAQ,CAC9C,YAAY,EACZ,kBAAkB,CACnB,CAAC;QACF,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,eAAe,GAAG,+BAA+B,CAAC;YACxD,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;YAC9C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,eAAe;gBACf,iBAAiB;aAClB,CAAC;QACJ,CAAC;QACD,kBAAkB,GAAG,KAAK,CAAC;QAC3B,mBAAmB,GAAG,gCAAa,CAAC,QAAQ,CAC1C,YAAY,EACZ,kBAAkB,CACnB,CAAC;QACF,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,eAAe,GAAG,wBAAwB,CAAC;YACjD,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YAC9D,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,eAAe;gBACf,iBAAiB;aAClB,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,cAAc,EAAE,IAAA,kBAAS,EAAC,YAAY,EAAE,QAAQ,CAAC;aAClD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,eAAM,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,EAAE,+BAA+B,CAAC,CAAC;YAChE,MAAM,eAAe,GAAG,+BAA+B,CAAC;YACxD,MAAM,iBAAiB,GAAG,wBAAwB,GAAG,CAAC,OAAO,CAAC,UAAU,CACtE,GAAG,EACH,GAAG,CACJ,IAAI,CAAC;YACN,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC;QAChE,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import jsonValidator from 'json-dup-key-validator';\nimport JSON5 from 'json5';\nimport upath from 'upath';\nimport { logger } from '../logger';\nimport { parseJson } from '../util/common';\n\nexport function parseFileConfig(\n fileName: string,\n fileContents: string,\n):\n | { success: true; parsedContents: unknown }\n | { success: false; validationError: string; validationMessage: string } {\n const fileType = upath.extname(fileName);\n\n if (fileType === '.json5') {\n try {\n return { success: true, parsedContents: JSON5.parse(fileContents) };\n } catch (err) {\n logger.debug({ fileName, fileContents }, 'Error parsing JSON5 file');\n const validationError = 'Invalid JSON5 (parsing failed)';\n const validationMessage = `JSON5.parse error: \\`${err.message.replaceAll(\n '`',\n \"'\",\n )}\\``;\n return {\n success: false,\n validationError,\n validationMessage,\n };\n }\n } else {\n let allowDuplicateKeys = true;\n let jsonValidationError = jsonValidator.validate(\n fileContents,\n allowDuplicateKeys,\n );\n if (jsonValidationError) {\n const validationError = 'Invalid JSON (parsing failed)';\n const validationMessage = jsonValidationError;\n return {\n success: false,\n validationError,\n validationMessage,\n };\n }\n allowDuplicateKeys = false;\n jsonValidationError = jsonValidator.validate(\n fileContents,\n allowDuplicateKeys,\n );\n if (jsonValidationError) {\n const validationError = 'Duplicate keys in JSON';\n const validationMessage = JSON.stringify(jsonValidationError);\n return {\n success: false,\n validationError,\n validationMessage,\n };\n }\n try {\n return {\n success: true,\n parsedContents: parseJson(fileContents, fileName),\n };\n } catch (err) {\n logger.debug({ fileContents }, 'Error parsing renovate config');\n const validationError = 'Invalid JSON (parsing failed)';\n const validationMessage = `JSON.parse error: \\`${err.message.replaceAll(\n '`',\n \"'\",\n )}\\``;\n return { success: false, validationError, validationMessage };\n }\n }\n}\n"]}
@@ -18,7 +18,6 @@ async function fetchJSONFile(repo, fileName, endpoint, tag) {
18
18
  });
19
19
  }
20
20
  catch (err) {
21
- // istanbul ignore if: not testable with nock
22
21
  if (err instanceof external_host_error_1.ExternalHostError) {
23
22
  throw err;
24
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/config/presets/gitea/index.ts"],"names":[],"mappings":";;;AAUA,sCAsBC;AAED,sDAeC;AAED,8BAOC;AA1DD,4CAAyC;AACzC,+EAA+E;AAE/E,mFAA8E;AAC9E,iDAAkD;AAElD,kCAAyE;AAE5D,QAAA,QAAQ,GAAG,oBAAoB,CAAC;AAEtC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,QAAgB,EAChB,QAAgB,EAChB,GAAmB;IAEnB,IAAI,GAAiB,CAAC;IACtB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,IAAA,8BAAe,EAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE;YAC/C,OAAO,EAAE,QAAQ;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,6CAA6C;QAC7C,IAAI,GAAG,YAAY,uCAAiB,EAAE,CAAC;YACrC,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,eAAM,CAAC,KAAK,CAAC,eAAe,QAAQ,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,2BAAoB,CAAC,CAAC;IACxC,CAAC;IAED,0BAA0B;IAC1B,OAAO,IAAA,kBAAW,EAAC,IAAA,mBAAU,EAAC,GAAG,CAAC,OAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,qBAAqB,CACnC,IAAY,EACZ,UAAkB,EAClB,UAAmB,EACnB,QAAQ,GAAG,gBAAQ,EACnB,GAAY;IAEZ,OAAO,IAAA,kBAAW,EAAC;QACjB,IAAI;QACJ,UAAU;QACV,UAAU;QACV,QAAQ;QACR,GAAG;QACH,KAAK,EAAE,aAAa;KACrB,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,UAAU,GAAG,SAAS,EACtB,UAAU,EACV,GAAG,GAAG,SAAS,GACF;IACb,OAAO,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAQ,EAAE,GAAG,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["import { logger } from '../../../logger';\nimport { getRepoContents } from '../../../modules/platform/gitea/gitea-helper';\nimport type { RepoContents } from '../../../modules/platform/gitea/types';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { fromBase64 } from '../../../util/string';\nimport type { Preset, PresetConfig } from '../types';\nimport { PRESET_DEP_NOT_FOUND, fetchPreset, parsePreset } from '../util';\n\nexport const Endpoint = 'https://gitea.com/';\n\nexport async function fetchJSONFile(\n repo: string,\n fileName: string,\n endpoint: string,\n tag?: string | null,\n): Promise<Preset> {\n let res: RepoContents;\n try {\n res = await getRepoContents(repo, fileName, tag, {\n baseUrl: endpoint,\n });\n } catch (err) {\n // istanbul ignore if: not testable with nock\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(`Preset file ${fileName} not found in ${repo}`);\n throw new Error(PRESET_DEP_NOT_FOUND);\n }\n\n // TODO: null check #22198\n return parsePreset(fromBase64(res.content!), fileName);\n}\n\nexport function getPresetFromEndpoint(\n repo: string,\n filePreset: string,\n presetPath?: string,\n endpoint = Endpoint,\n tag?: string,\n): Promise<Preset | undefined> {\n return fetchPreset({\n repo,\n filePreset,\n presetPath,\n endpoint,\n tag,\n fetch: fetchJSONFile,\n });\n}\n\nexport function getPreset({\n repo,\n presetName = 'default',\n presetPath,\n tag = undefined,\n}: PresetConfig): Promise<Preset | undefined> {\n return getPresetFromEndpoint(repo, presetName, presetPath, Endpoint, tag);\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/config/presets/gitea/index.ts"],"names":[],"mappings":";;;AAUA,sCAqBC;AAED,sDAeC;AAED,8BAOC;AAzDD,4CAAyC;AACzC,+EAA+E;AAE/E,mFAA8E;AAC9E,iDAAkD;AAElD,kCAAyE;AAE5D,QAAA,QAAQ,GAAG,oBAAoB,CAAC;AAEtC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,QAAgB,EAChB,QAAgB,EAChB,GAAmB;IAEnB,IAAI,GAAiB,CAAC;IACtB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,IAAA,8BAAe,EAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE;YAC/C,OAAO,EAAE,QAAQ;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,uCAAiB,EAAE,CAAC;YACrC,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,eAAM,CAAC,KAAK,CAAC,eAAe,QAAQ,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,2BAAoB,CAAC,CAAC;IACxC,CAAC;IAED,0BAA0B;IAC1B,OAAO,IAAA,kBAAW,EAAC,IAAA,mBAAU,EAAC,GAAG,CAAC,OAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,qBAAqB,CACnC,IAAY,EACZ,UAAkB,EAClB,UAAmB,EACnB,QAAQ,GAAG,gBAAQ,EACnB,GAAY;IAEZ,OAAO,IAAA,kBAAW,EAAC;QACjB,IAAI;QACJ,UAAU;QACV,UAAU;QACV,QAAQ;QACR,GAAG;QACH,KAAK,EAAE,aAAa;KACrB,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,UAAU,GAAG,SAAS,EACtB,UAAU,EACV,GAAG,GAAG,SAAS,GACF;IACb,OAAO,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAQ,EAAE,GAAG,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["import { logger } from '../../../logger';\nimport { getRepoContents } from '../../../modules/platform/gitea/gitea-helper';\nimport type { RepoContents } from '../../../modules/platform/gitea/types';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { fromBase64 } from '../../../util/string';\nimport type { Preset, PresetConfig } from '../types';\nimport { PRESET_DEP_NOT_FOUND, fetchPreset, parsePreset } from '../util';\n\nexport const Endpoint = 'https://gitea.com/';\n\nexport async function fetchJSONFile(\n repo: string,\n fileName: string,\n endpoint: string,\n tag?: string | null,\n): Promise<Preset> {\n let res: RepoContents;\n try {\n res = await getRepoContents(repo, fileName, tag, {\n baseUrl: endpoint,\n });\n } catch (err) {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(`Preset file ${fileName} not found in ${repo}`);\n throw new Error(PRESET_DEP_NOT_FOUND);\n }\n\n // TODO: null check #22198\n return parsePreset(fromBase64(res.content!), fileName);\n}\n\nexport function getPresetFromEndpoint(\n repo: string,\n filePreset: string,\n presetPath?: string,\n endpoint = Endpoint,\n tag?: string,\n): Promise<Preset | undefined> {\n return fetchPreset({\n repo,\n filePreset,\n presetPath,\n endpoint,\n tag,\n fetch: fetchJSONFile,\n });\n}\n\nexport function getPreset({\n repo,\n presetName = 'default',\n presetPath,\n tag = undefined,\n}: PresetConfig): Promise<Preset | undefined> {\n return getPresetFromEndpoint(repo, presetName, presetPath, Endpoint, tag);\n}\n"]}
@@ -25,7 +25,6 @@ async function fetchJSONFile(repo, fileName, endpoint, tag) {
25
25
  res = await http.getJsonUnchecked(url);
26
26
  }
27
27
  catch (err) {
28
- // istanbul ignore if: not testable with nock
29
28
  if (err instanceof external_host_error_1.ExternalHostError) {
30
29
  throw err;
31
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/config/presets/github/index.ts"],"names":[],"mappings":";;;AAYA,sCAyBC;AAED,sDAeC;AAED,8BAOC;;AA/DD,kEAAkC;AAClC,4CAAyC;AACzC,mFAA8E;AAC9E,sDAAuD;AACvD,iDAAkD;AAElD,kCAAyE;AAE5D,QAAA,QAAQ,GAAG,yBAAyB,CAAC;AAElD,MAAM,IAAI,GAAG,IAAI,mBAAU,EAAE,CAAC;AAEvB,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,QAAgB,EAChB,QAAgB,EAChB,GAAY;IAEZ,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,YAAE,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,GAAG,GAAG,QAAQ,GAAG,EAAE,CAAC;IACtB,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,QAAQ,SAAS,IAAI,aAAa,QAAQ,GAAG,GAAG,EAAE,CAAC;IAClE,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IACpC,IAAI,GAAkC,CAAC;IACvC,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,6CAA6C;QAC7C,IAAI,GAAG,YAAY,uCAAiB,EAAE,CAAC;YACrC,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,eAAM,CAAC,KAAK,CAAC,eAAe,QAAQ,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,2BAAoB,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,IAAA,kBAAW,EAAC,IAAA,mBAAU,EAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,SAAgB,qBAAqB,CACnC,IAAY,EACZ,UAAkB,EAClB,UAAmB,EACnB,QAAQ,GAAG,gBAAQ,EACnB,GAAY;IAEZ,OAAO,IAAA,kBAAW,EAAC;QACjB,IAAI;QACJ,UAAU;QACV,UAAU;QACV,QAAQ;QACR,GAAG;QACH,KAAK,EAAE,aAAa;KACrB,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,UAAU,GAAG,SAAS,EACtB,UAAU,EACV,GAAG,GACU;IACb,OAAO,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAQ,EAAE,GAAG,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { GithubHttp } from '../../../util/http/github';\nimport { fromBase64 } from '../../../util/string';\nimport type { Preset, PresetConfig } from '../types';\nimport { PRESET_DEP_NOT_FOUND, fetchPreset, parsePreset } from '../util';\n\nexport const Endpoint = 'https://api.github.com/';\n\nconst http = new GithubHttp();\n\nexport async function fetchJSONFile(\n repo: string,\n fileName: string,\n endpoint: string,\n tag?: string,\n): Promise<Preset> {\n let ref = '';\n if (is.nonEmptyString(tag)) {\n ref = `?ref=${tag}`;\n }\n const url = `${endpoint}repos/${repo}/contents/${fileName}${ref}`;\n logger.trace({ url }, `Preset URL`);\n let res: { body: { content: string } };\n try {\n res = await http.getJsonUnchecked(url);\n } catch (err) {\n // istanbul ignore if: not testable with nock\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(`Preset file ${fileName} not found in ${repo}`);\n throw new Error(PRESET_DEP_NOT_FOUND);\n }\n\n return parsePreset(fromBase64(res.body.content), fileName);\n}\n\nexport function getPresetFromEndpoint(\n repo: string,\n filePreset: string,\n presetPath?: string,\n endpoint = Endpoint,\n tag?: string,\n): Promise<Preset | undefined> {\n return fetchPreset({\n repo,\n filePreset,\n presetPath,\n endpoint,\n tag,\n fetch: fetchJSONFile,\n });\n}\n\nexport function getPreset({\n repo,\n presetName = 'default',\n presetPath,\n tag,\n}: PresetConfig): Promise<Preset | undefined> {\n return getPresetFromEndpoint(repo, presetName, presetPath, Endpoint, tag);\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/config/presets/github/index.ts"],"names":[],"mappings":";;;AAYA,sCAwBC;AAED,sDAeC;AAED,8BAOC;;AA9DD,kEAAkC;AAClC,4CAAyC;AACzC,mFAA8E;AAC9E,sDAAuD;AACvD,iDAAkD;AAElD,kCAAyE;AAE5D,QAAA,QAAQ,GAAG,yBAAyB,CAAC;AAElD,MAAM,IAAI,GAAG,IAAI,mBAAU,EAAE,CAAC;AAEvB,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,QAAgB,EAChB,QAAgB,EAChB,GAAY;IAEZ,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,YAAE,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,GAAG,GAAG,QAAQ,GAAG,EAAE,CAAC;IACtB,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,QAAQ,SAAS,IAAI,aAAa,QAAQ,GAAG,GAAG,EAAE,CAAC;IAClE,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;IACpC,IAAI,GAAkC,CAAC;IACvC,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,uCAAiB,EAAE,CAAC;YACrC,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,eAAM,CAAC,KAAK,CAAC,eAAe,QAAQ,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,2BAAoB,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,IAAA,kBAAW,EAAC,IAAA,mBAAU,EAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED,SAAgB,qBAAqB,CACnC,IAAY,EACZ,UAAkB,EAClB,UAAmB,EACnB,QAAQ,GAAG,gBAAQ,EACnB,GAAY;IAEZ,OAAO,IAAA,kBAAW,EAAC;QACjB,IAAI;QACJ,UAAU;QACV,UAAU;QACV,QAAQ;QACR,GAAG;QACH,KAAK,EAAE,aAAa;KACrB,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,UAAU,GAAG,SAAS,EACtB,UAAU,EACV,GAAG,GACU;IACb,OAAO,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAQ,EAAE,GAAG,CAAC,CAAC;AAC5E,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { GithubHttp } from '../../../util/http/github';\nimport { fromBase64 } from '../../../util/string';\nimport type { Preset, PresetConfig } from '../types';\nimport { PRESET_DEP_NOT_FOUND, fetchPreset, parsePreset } from '../util';\n\nexport const Endpoint = 'https://api.github.com/';\n\nconst http = new GithubHttp();\n\nexport async function fetchJSONFile(\n repo: string,\n fileName: string,\n endpoint: string,\n tag?: string,\n): Promise<Preset> {\n let ref = '';\n if (is.nonEmptyString(tag)) {\n ref = `?ref=${tag}`;\n }\n const url = `${endpoint}repos/${repo}/contents/${fileName}${ref}`;\n logger.trace({ url }, `Preset URL`);\n let res: { body: { content: string } };\n try {\n res = await http.getJsonUnchecked(url);\n } catch (err) {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.debug(`Preset file ${fileName} not found in ${repo}`);\n throw new Error(PRESET_DEP_NOT_FOUND);\n }\n\n return parsePreset(fromBase64(res.body.content), fileName);\n}\n\nexport function getPresetFromEndpoint(\n repo: string,\n filePreset: string,\n presetPath?: string,\n endpoint = Endpoint,\n tag?: string,\n): Promise<Preset | undefined> {\n return fetchPreset({\n repo,\n filePreset,\n presetPath,\n endpoint,\n tag,\n fetch: fetchJSONFile,\n });\n}\n\nexport function getPreset({\n repo,\n presetName = 'default',\n presetPath,\n tag,\n}: PresetConfig): Promise<Preset | undefined> {\n return getPresetFromEndpoint(repo, presetName, presetPath, Endpoint, tag);\n}\n"]}
@@ -18,7 +18,6 @@ async function getPreset({ repo: url, }) {
18
18
  response = await http.get(url);
19
19
  }
20
20
  catch (err) {
21
- // istanbul ignore if: not testable with nock
22
21
  if (err instanceof external_host_error_1.ExternalHostError) {
23
22
  throw err;
24
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/config/presets/http/index.ts"],"names":[],"mappings":";;AAUA,8BAwBC;AAlCD,4CAAyC;AACzC,mFAA8E;AAC9E,6CAA0C;AAE1C,2CAA6C;AAE7C,kCAA4D;AAE5D,MAAM,IAAI,GAAG,IAAI,WAAI,CAAC,QAAQ,CAAC,CAAC;AAEzB,KAAK,UAAU,SAAS,CAAC,EAC9B,IAAI,EAAE,GAAG,GACI;IACb,MAAM,SAAS,GAAG,IAAA,cAAQ,EAAC,GAAG,CAAC,CAAC;IAChC,IAAI,QAAsB,CAAC;IAE3B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,eAAM,CAAC,KAAK,CAAC,cAAc,GAAG,eAAe,CAAC,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,2BAAoB,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,6CAA6C;QAC7C,IAAI,GAAG,YAAY,uCAAiB,EAAE,CAAC;YACrC,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,eAAM,CAAC,KAAK,CAAC,eAAe,GAAG,YAAY,CAAC,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,2BAAoB,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,IAAA,kBAAW,EAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;AACxD,CAAC","sourcesContent":["import { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { Http } from '../../../util/http';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { parseUrl } from '../../../util/url';\nimport type { Preset, PresetConfig } from '../types';\nimport { PRESET_DEP_NOT_FOUND, parsePreset } from '../util';\n\nconst http = new Http('preset');\n\nexport async function getPreset({\n repo: url,\n}: PresetConfig): Promise<Preset | null | undefined> {\n const parsedUrl = parseUrl(url);\n let response: HttpResponse;\n\n if (!parsedUrl) {\n logger.debug(`Preset URL ${url} is malformed`);\n throw new Error(PRESET_DEP_NOT_FOUND);\n }\n\n try {\n response = await http.get(url);\n } catch (err) {\n // istanbul ignore if: not testable with nock\n if (err instanceof ExternalHostError) {\n throw err;\n }\n\n logger.debug(`Preset file ${url} not found`);\n throw new Error(PRESET_DEP_NOT_FOUND);\n }\n\n return parsePreset(response.body, parsedUrl.pathname);\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/config/presets/http/index.ts"],"names":[],"mappings":";;AAUA,8BAuBC;AAjCD,4CAAyC;AACzC,mFAA8E;AAC9E,6CAA0C;AAE1C,2CAA6C;AAE7C,kCAA4D;AAE5D,MAAM,IAAI,GAAG,IAAI,WAAI,CAAC,QAAQ,CAAC,CAAC;AAEzB,KAAK,UAAU,SAAS,CAAC,EAC9B,IAAI,EAAE,GAAG,GACI;IACb,MAAM,SAAS,GAAG,IAAA,cAAQ,EAAC,GAAG,CAAC,CAAC;IAChC,IAAI,QAAsB,CAAC;IAE3B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,eAAM,CAAC,KAAK,CAAC,cAAc,GAAG,eAAe,CAAC,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,2BAAoB,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,uCAAiB,EAAE,CAAC;YACrC,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,eAAM,CAAC,KAAK,CAAC,eAAe,GAAG,YAAY,CAAC,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,2BAAoB,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,IAAA,kBAAW,EAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;AACxD,CAAC","sourcesContent":["import { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { Http } from '../../../util/http';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { parseUrl } from '../../../util/url';\nimport type { Preset, PresetConfig } from '../types';\nimport { PRESET_DEP_NOT_FOUND, parsePreset } from '../util';\n\nconst http = new Http('preset');\n\nexport async function getPreset({\n repo: url,\n}: PresetConfig): Promise<Preset | null | undefined> {\n const parsedUrl = parseUrl(url);\n let response: HttpResponse;\n\n if (!parsedUrl) {\n logger.debug(`Preset URL ${url} is malformed`);\n throw new Error(PRESET_DEP_NOT_FOUND);\n }\n\n try {\n response = await http.get(url);\n } catch (err) {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n\n logger.debug(`Preset file ${url} not found`);\n throw new Error(PRESET_DEP_NOT_FOUND);\n }\n\n return parsePreset(response.body, parsedUrl.pathname);\n}\n"]}
@@ -110,7 +110,6 @@ async function getPreset(preset, baseConfig) {
110
110
  }
111
111
  logger_1.logger.trace({ presetConfig }, `Applied params to preset ${preset}`);
112
112
  const presetKeys = Object.keys(presetConfig);
113
- // istanbul ignore if
114
113
  if (presetKeys.length === 2 &&
115
114
  presetKeys.includes('description') &&
116
115
  presetKeys.includes('extends')) {
@@ -140,7 +139,6 @@ async function resolveConfigPresets(inputConfig, baseConfig, _ignorePresets, exi
140
139
  logger_1.logger.trace(`Resolving preset "${preset}"`);
141
140
  const fetchedPreset = await fetchPreset(preset, baseConfig, inputConfig, existingPresets);
142
141
  const presetConfig = await resolveConfigPresets(fetchedPreset, baseConfig ?? inputConfig, ignorePresets, existingPresets.concat([preset]));
143
- // istanbul ignore if
144
142
  if (inputConfig?.ignoreDeps?.length === 0) {
145
143
  delete presetConfig.description;
146
144
  }
@@ -184,11 +182,9 @@ async function fetchPreset(preset, baseConfig, inputConfig, existingPresets) {
184
182
  }
185
183
  catch (err) {
186
184
  logger_1.logger.debug({ preset, err }, 'Preset fetch error');
187
- // istanbul ignore if
188
185
  if (err instanceof external_host_error_1.ExternalHostError) {
189
186
  throw err;
190
187
  }
191
- // istanbul ignore if
192
188
  if (err.message === error_messages_1.PLATFORM_RATE_LIMIT_EXCEEDED) {
193
189
  throw err;
194
190
  }
@@ -214,7 +210,6 @@ async function fetchPreset(preset, baseConfig, inputConfig, existingPresets) {
214
210
  else {
215
211
  error.validationError = `Preset caused unexpected error (${preset})`;
216
212
  }
217
- // istanbul ignore if
218
213
  if (existingPresets.length) {
219
214
  error.validationError +=
220
215
  '. Note: this is a *nested* preset so please contact the preset author if you are unable to fix it yourself.';
@@ -224,13 +219,11 @@ async function fetchPreset(preset, baseConfig, inputConfig, existingPresets) {
224
219
  }
225
220
  }
226
221
  function shouldResolvePreset(preset, existingPresets, ignorePresets) {
227
- // istanbul ignore if
228
222
  if (existingPresets.includes(preset)) {
229
223
  logger_1.logger.debug(`Already seen preset ${preset} in [${existingPresets.join(', ')}]`);
230
224
  return false;
231
225
  }
232
226
  if (ignorePresets.includes(preset)) {
233
- // istanbul ignore next
234
227
  logger_1.logger.debug(`Ignoring preset ${preset} in [${existingPresets.join(', ')}]`);
235
228
  return false;
236
229
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/config/presets/index.ts"],"names":[],"mappings":";;AAwEA,kCA2BC;AAED,8BA2EC;AAED,oDAmFC;;AArQD,kEAAkC;AAClC,mEAGwC;AACxC,yCAAsC;AACtC,gFAA2E;AAC3E,0EAAoD;AACpD,+EAAyD;AACzD,sDAA8D;AAC9D,4CAAyC;AACzC,4CAAyC;AACzC,sEAAgD;AAChD,sCAAyC;AACzC,4DAAsC;AACtC,gEAA0C;AAE1C,oCAA4C;AAC5C,qCAA0C;AAC1C,uDAAiC;AACjC,yDAAmC;AACnC,yDAAmC;AACnC,qDAA+B;AAC/B,6DAAuC;AACvC,uDAAiC;AACjC,mDAA6B;AAC7B,mCAAsC;AAEtC,iCAOgB;AAEhB,MAAM,aAAa,GAA8B;IAC/C,MAAM;IACN,GAAG;IACH,MAAM;IACN,KAAK;IACL,KAAK;IACL,QAAQ;IACR,IAAI;CACL,CAAC;AAEF,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAyBtC,SAAgB,WAAW,CACzB,GAAoE,EACpE,UAA+B;IAE/B,IAAI,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,IAAI,SAAS,GAAG,GAAG,CAAC;QACpB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACvD,MAAM,EAAE,GAAG,IAAA,aAAK,EAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3C,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,YAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;YACvB,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,SAAS,GAAwB,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAEM,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,UAA2B;IAE3B,eAAM,CAAC,KAAK,CAAC,aAAa,MAAM,GAAG,CAAC,CAAC;IACrC,mDAAmD;IACnD,MAAM,SAAS,GAAG,uBAAc,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAC/D,IAAA,mBAAW,EAAC,MAAM,CAAC,CAAC;IACtB,MAAM,QAAQ,GAAG,UAAU,MAAM,EAAE,CAAC;IACpC,MAAM,sBAAsB,GAAG,qBAAY,CAAC,GAAG,CAC7C,wBAAwB,EACxB,KAAK,CACN,CAAC;IAEF,IAAI,YAAuC,CAAC;IAE5C,IAAI,sBAAsB,EAAE,CAAC;QAC3B,YAAY,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,YAAE,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC;QACrC,YAAY,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC;YACzD,IAAI;YACJ,UAAU;YACV,UAAU;YACV,GAAG;SACJ,CAAC,CAAC;QACH,IAAI,sBAAsB,EAAE,CAAC;YAC3B,MAAM,YAAY,CAAC,GAAG,CACpB,oBAAoB,EACpB,QAAQ,EACR,YAAY,EACZ,IAAA,oBAAc,EAAC,oBAAoB,CAAC,IAAI,EAAE,CAC3C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,2BAAoB,CAAC,CAAC;IACxC,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,EAAE,gBAAgB,MAAM,EAAE,CAAC,CAAC;IACzD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9C,UAAU,CAAC,MAAM,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;QACpC,CAAC;QACD,YAAY,GAAG,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACvD,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,EAAE,4BAA4B,MAAM,EAAE,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,qBAAqB;IACrB,IACE,UAAU,CAAC,MAAM,KAAK,CAAC;QACvB,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC;QAClC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAC9B,CAAC;QACD,+CAA+C;QAC/C,OAAO,YAAY,CAAC,WAAW,CAAC;IAClC,CAAC;IACD,MAAM,eAAe,GAAG,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC7D,OAAO,YAAY,CAAC,WAAW,CAAC;IAClC,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACjE,OAAO,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;AAC/C,CAAC;AAEM,KAAK,UAAU,oBAAoB,CACxC,WAAsB,EACtB,UAA2B,EAC3B,cAAyB,EACzB,kBAA4B,EAAE;IAE9B,IAAI,aAAa,GAAG,IAAA,aAAK,EAAC,cAAc,CAAC,CAAC;IAC1C,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,aAAa,GAAG,WAAW,CAAC,aAAa,IAAI,EAAE,CAAC;IAClD,CAAC;IACD,eAAM,CAAC,KAAK,CACV,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,EACxC,sBAAsB,CACvB,CAAC;IACF,IAAI,MAAM,GAAc,EAAE,CAAC;IAC3B,yDAAyD;IACzD,IAAI,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAChC,oBAAoB;QACpB,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACrD,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAC3B,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,CAAC;gBAChE,eAAM,CAAC,KAAK,CAAC,qBAAqB,MAAM,GAAG,CAAC,CAAC;gBAC7C,MAAM,aAAa,GAAG,MAAM,WAAW,CACrC,MAAM,EACN,UAAU,EACV,WAAW,EACX,eAAe,CAChB,CAAC;gBACF,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAC7C,aAAa,EACb,UAAU,IAAI,WAAW,EACzB,aAAa,EACb,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CACjC,CAAC;gBACF,qBAAqB;gBACrB,IAAI,WAAW,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1C,OAAO,YAAY,CAAC,WAAW,CAAC;gBAClC,CAAC;gBACD,MAAM,GAAG,IAAA,wBAAgB,EAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,4BAA4B,CAAC,CAAC;IACvD,qCAAqC;IACrC,MAAM,GAAG,IAAA,wBAAgB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,OAAO,CAAC;IACtB,OAAO,MAAM,CAAC,aAAa,CAAC;IAC5B,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,2BAA2B,CAAC,CAAC;IACtD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACpD,IAAI,YAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,uCAAuC;YACvC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACjB,KAAK,MAAM,OAAO,IAAI,GAAG,EAAE,CAAC;gBAC1B,IAAI,YAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtB,MAAM,CAAC,GAAG,CAAsB,CAAC,IAAI,CACpC,MAAM,oBAAoB,CACxB,OAAyB,EACzB,UAAU,EACV,aAAa,EACb,eAAe,CAChB,CACF,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACL,MAAM,CAAC,GAAG,CAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,yBAAyB;YACzB,eAAM,CAAC,KAAK,CAAC,qBAAqB,GAAG,GAAG,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,oBAAoB,CACtC,GAAqB,EACrB,UAAU,EACV,aAAa,EACb,eAAe,CAChB,CAAC;QACJ,CAAC;IACH,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,cAAc,CAAC,CAAC;IACtD,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,MAAc,EACd,UAAsC,EACtC,WAAsB,EACtB,eAAyB;IAEzB,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,CAAC,MAAM,EAAE,UAAU,IAAI,WAAW,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAAC;QACpD,qBAAqB;QACrB,IAAI,GAAG,YAAY,uCAAiB,EAAE,CAAC;YACrC,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,qBAAqB;QACrB,IAAI,GAAG,CAAC,OAAO,KAAK,6CAA4B,EAAE,CAAC;YACjD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,kCAAiB,CAAC,CAAC;QAC3C,IAAI,GAAG,CAAC,OAAO,KAAK,2BAAoB,EAAE,CAAC;YACzC,KAAK,CAAC,eAAe,GAAG,iCAAiC,MAAM,GAAG,CAAC;QACrE,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,KAAK,uCAAgC,EAAE,CAAC;YAC5D,KAAK,CAAC,eAAe,GAAG,sDAAsD,MAAM,GAAG,CAAC;QAC1F,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,KAAK,uBAAgB,EAAE,CAAC;YAC5C,KAAK,CAAC,eAAe,GAAG,yDAAyD,MAAM,GAAG,CAAC;QAC7F,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,KAAK,qBAAc,EAAE,CAAC;YAC1C,KAAK,CAAC,eAAe,GAAG,sBAAsB,MAAM,GAAG,CAAC;QAC1D,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,KAAK,kCAA2B,EAAE,CAAC;YACvD,KAAK,CAAC,eAAe,GAAG,sDAAsD,MAAM,GAAG,CAAC;QAC1F,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,KAAK,0BAAmB,EAAE,CAAC;YAC/C,KAAK,CAAC,eAAe,GAAG,2BAA2B,MAAM,GAAG,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,eAAe,GAAG,mCAAmC,MAAM,GAAG,CAAC;QACvE,CAAC;QACD,qBAAqB;QACrB,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;YAC3B,KAAK,CAAC,eAAe;gBACnB,6GAA6G,CAAC;QAClH,CAAC;QACD,eAAM,CAAC,IAAI,CACT,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,EAC1C,uBAAuB,CACxB,CAAC;QACF,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAc,EACd,eAAyB,EACzB,aAAuB;IAEvB,qBAAqB;IACrB,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,eAAM,CAAC,KAAK,CACV,uBAAuB,MAAM,QAAQ,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACnE,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,uBAAuB;QACvB,eAAM,CAAC,KAAK,CACV,mBAAmB,MAAM,QAAQ,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC/D,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport {\n CONFIG_VALIDATION,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n} from '../../constants/error-messages';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport * as memCache from '../../util/cache/memory';\nimport * as packageCache from '../../util/cache/package';\nimport { getTtlOverride } from '../../util/cache/package/ttl';\nimport { clone } from '../../util/clone';\nimport { regEx } from '../../util/regex';\nimport * as template from '../../util/template';\nimport { GlobalConfig } from '../global';\nimport * as massage from '../massage';\nimport * as migration from '../migration';\nimport type { AllConfig, RenovateConfig } from '../types';\nimport { mergeChildConfig } from '../utils';\nimport { removedPresets } from './common';\nimport * as gitea from './gitea';\nimport * as github from './github';\nimport * as gitlab from './gitlab';\nimport * as http from './http';\nimport * as internal from './internal';\nimport * as local from './local';\nimport * as npm from './npm';\nimport { parsePreset } from './parse';\nimport type { Preset, PresetApi } from './types';\nimport {\n PRESET_DEP_NOT_FOUND,\n PRESET_INVALID,\n PRESET_INVALID_JSON,\n PRESET_NOT_FOUND,\n PRESET_PROHIBITED_SUBPRESET,\n PRESET_RENOVATE_CONFIG_NOT_FOUND,\n} from './util';\n\nconst presetSources: Record<string, PresetApi> = {\n github,\n npm,\n gitlab,\n gitea,\n local,\n internal,\n http,\n};\n\nconst presetCacheNamespace = 'preset';\n\nexport function replaceArgs(\n obj: string,\n argMapping: Record<string, any>,\n): string;\nexport function replaceArgs(\n obj: string[],\n argMapping: Record<string, any>,\n): string[];\nexport function replaceArgs(\n obj: Record<string, any>,\n argMapping: Record<string, any>,\n): Record<string, any>;\nexport function replaceArgs(\n obj: Record<string, any>[],\n argMapping: Record<string, any>,\n): Record<string, any>[];\n\n/**\n * TODO: fix me #22198\n * @param obj\n * @param argMapping\n */\nexport function replaceArgs(obj: any, argMapping: Record<string, any>): any;\nexport function replaceArgs(\n obj: string | string[] | Record<string, any> | Record<string, any>[],\n argMapping: Record<string, any>,\n): any {\n if (is.string(obj)) {\n let returnStr = obj;\n for (const [arg, argVal] of Object.entries(argMapping)) {\n const re = regEx(`{{${arg}}}`, 'g', false);\n returnStr = returnStr.replace(re, argVal);\n }\n return returnStr;\n }\n if (is.array(obj)) {\n const returnArray = [];\n for (const item of obj) {\n returnArray.push(replaceArgs(item, argMapping));\n }\n return returnArray;\n }\n if (is.object(obj)) {\n const returnObj: Record<string, any> = {};\n for (const [key, val] of Object.entries(obj)) {\n returnObj[key] = replaceArgs(val, argMapping);\n }\n return returnObj;\n }\n return obj;\n}\n\nexport async function getPreset(\n preset: string,\n baseConfig?: RenovateConfig,\n): Promise<RenovateConfig> {\n logger.trace(`getPreset(${preset})`);\n // Check if the preset has been removed or replaced\n const newPreset = removedPresets[preset];\n if (newPreset) {\n return getPreset(newPreset, baseConfig);\n }\n if (newPreset === null) {\n return {};\n }\n const { presetSource, repo, presetPath, presetName, tag, params } =\n parsePreset(preset);\n const cacheKey = `preset:${preset}`;\n const presetCachePersistence = GlobalConfig.get(\n 'presetCachePersistence',\n false,\n );\n\n let presetConfig: Preset | null | undefined;\n\n if (presetCachePersistence) {\n presetConfig = await packageCache.get(presetCacheNamespace, cacheKey);\n } else {\n presetConfig = memCache.get(cacheKey);\n }\n\n if (is.nullOrUndefined(presetConfig)) {\n presetConfig = await presetSources[presetSource].getPreset({\n repo,\n presetPath,\n presetName,\n tag,\n });\n if (presetCachePersistence) {\n await packageCache.set(\n presetCacheNamespace,\n cacheKey,\n presetConfig,\n getTtlOverride(presetCacheNamespace) ?? 15,\n );\n } else {\n memCache.set(cacheKey, presetConfig);\n }\n }\n if (!presetConfig) {\n throw new Error(PRESET_DEP_NOT_FOUND);\n }\n logger.trace({ presetConfig }, `Found preset ${preset}`);\n if (params) {\n const argMapping: Record<string, string> = {};\n for (const [index, value] of params.entries()) {\n argMapping[`arg${index}`] = value;\n }\n presetConfig = replaceArgs(presetConfig, argMapping);\n }\n logger.trace({ presetConfig }, `Applied params to preset ${preset}`);\n const presetKeys = Object.keys(presetConfig);\n // istanbul ignore if\n if (\n presetKeys.length === 2 &&\n presetKeys.includes('description') &&\n presetKeys.includes('extends')\n ) {\n // preset is just a collection of other presets\n delete presetConfig.description;\n }\n const packageListKeys = ['description', 'matchPackageNames'];\n if (presetKeys.every((key) => packageListKeys.includes(key))) {\n delete presetConfig.description;\n }\n const { migratedConfig } = migration.migrateConfig(presetConfig);\n return massage.massageConfig(migratedConfig);\n}\n\nexport async function resolveConfigPresets(\n inputConfig: AllConfig,\n baseConfig?: RenovateConfig,\n _ignorePresets?: string[],\n existingPresets: string[] = [],\n): Promise<AllConfig> {\n let ignorePresets = clone(_ignorePresets);\n if (!ignorePresets || ignorePresets.length === 0) {\n ignorePresets = inputConfig.ignorePresets ?? [];\n }\n logger.trace(\n { config: inputConfig, existingPresets },\n 'resolveConfigPresets',\n );\n let config: AllConfig = {};\n // First, merge all the preset configs from left to right\n if (inputConfig.extends?.length) {\n // Compile templates\n inputConfig.extends = inputConfig.extends.map((tmpl) =>\n template.compile(tmpl, {}),\n );\n for (const preset of inputConfig.extends) {\n if (shouldResolvePreset(preset, existingPresets, ignorePresets)) {\n logger.trace(`Resolving preset \"${preset}\"`);\n const fetchedPreset = await fetchPreset(\n preset,\n baseConfig,\n inputConfig,\n existingPresets,\n );\n const presetConfig = await resolveConfigPresets(\n fetchedPreset,\n baseConfig ?? inputConfig,\n ignorePresets,\n existingPresets.concat([preset]),\n );\n // istanbul ignore if\n if (inputConfig?.ignoreDeps?.length === 0) {\n delete presetConfig.description;\n }\n config = mergeChildConfig(config, presetConfig);\n }\n }\n }\n logger.trace({ config }, `Post-preset resolve config`);\n // Now assign \"regular\" config on top\n config = mergeChildConfig(config, inputConfig);\n delete config.extends;\n delete config.ignorePresets;\n logger.trace({ config }, `Post-merge resolve config`);\n for (const [key, val] of Object.entries(config)) {\n const ignoredKeys = ['content', 'onboardingConfig'];\n if (is.array(val)) {\n // Resolve nested objects inside arrays\n config[key] = [];\n for (const element of val) {\n if (is.object(element)) {\n (config[key] as RenovateConfig[]).push(\n await resolveConfigPresets(\n element as RenovateConfig,\n baseConfig,\n ignorePresets,\n existingPresets,\n ),\n );\n } else {\n (config[key] as unknown[]).push(element);\n }\n }\n } else if (is.object(val) && !ignoredKeys.includes(key)) {\n // Resolve nested objects\n logger.trace(`Resolving object \"${key}\"`);\n config[key] = await resolveConfigPresets(\n val as RenovateConfig,\n baseConfig,\n ignorePresets,\n existingPresets,\n );\n }\n }\n logger.trace({ config: inputConfig }, 'Input config');\n logger.trace({ config }, 'Resolved config');\n return config;\n}\n\nasync function fetchPreset(\n preset: string,\n baseConfig: RenovateConfig | undefined,\n inputConfig: AllConfig,\n existingPresets: string[],\n): Promise<AllConfig> {\n try {\n return await getPreset(preset, baseConfig ?? inputConfig);\n } catch (err) {\n logger.debug({ preset, err }, 'Preset fetch error');\n // istanbul ignore if\n if (err instanceof ExternalHostError) {\n throw err;\n }\n // istanbul ignore if\n if (err.message === PLATFORM_RATE_LIMIT_EXCEEDED) {\n throw err;\n }\n const error = new Error(CONFIG_VALIDATION);\n if (err.message === PRESET_DEP_NOT_FOUND) {\n error.validationError = `Cannot find preset's package (${preset})`;\n } else if (err.message === PRESET_RENOVATE_CONFIG_NOT_FOUND) {\n error.validationError = `Preset package is missing a renovate-config entry (${preset})`;\n } else if (err.message === PRESET_NOT_FOUND) {\n error.validationError = `Preset name not found within published preset config (${preset})`;\n } else if (err.message === PRESET_INVALID) {\n error.validationError = `Preset is invalid (${preset})`;\n } else if (err.message === PRESET_PROHIBITED_SUBPRESET) {\n error.validationError = `Sub-presets cannot be combined with a custom path (${preset})`;\n } else if (err.message === PRESET_INVALID_JSON) {\n error.validationError = `Preset is invalid JSON (${preset})`;\n } else {\n error.validationError = `Preset caused unexpected error (${preset})`;\n }\n // istanbul ignore if\n if (existingPresets.length) {\n error.validationError +=\n '. Note: this is a *nested* preset so please contact the preset author if you are unable to fix it yourself.';\n }\n logger.info(\n { validationError: error.validationError },\n 'Throwing preset error',\n );\n throw error;\n }\n}\n\nfunction shouldResolvePreset(\n preset: string,\n existingPresets: string[],\n ignorePresets: string[],\n): boolean {\n // istanbul ignore if\n if (existingPresets.includes(preset)) {\n logger.debug(\n `Already seen preset ${preset} in [${existingPresets.join(', ')}]`,\n );\n return false;\n }\n if (ignorePresets.includes(preset)) {\n // istanbul ignore next\n logger.debug(\n `Ignoring preset ${preset} in [${existingPresets.join(', ')}]`,\n );\n return false;\n }\n return true;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/config/presets/index.ts"],"names":[],"mappings":";;AAwEA,kCA2BC;AAED,8BA0EC;AAED,oDAkFC;;AAnQD,kEAAkC;AAClC,mEAGwC;AACxC,yCAAsC;AACtC,gFAA2E;AAC3E,0EAAoD;AACpD,+EAAyD;AACzD,sDAA8D;AAC9D,4CAAyC;AACzC,4CAAyC;AACzC,sEAAgD;AAChD,sCAAyC;AACzC,4DAAsC;AACtC,gEAA0C;AAE1C,oCAA4C;AAC5C,qCAA0C;AAC1C,uDAAiC;AACjC,yDAAmC;AACnC,yDAAmC;AACnC,qDAA+B;AAC/B,6DAAuC;AACvC,uDAAiC;AACjC,mDAA6B;AAC7B,mCAAsC;AAEtC,iCAOgB;AAEhB,MAAM,aAAa,GAA8B;IAC/C,MAAM;IACN,GAAG;IACH,MAAM;IACN,KAAK;IACL,KAAK;IACL,QAAQ;IACR,IAAI;CACL,CAAC;AAEF,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAyBtC,SAAgB,WAAW,CACzB,GAAoE,EACpE,UAA+B;IAE/B,IAAI,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,IAAI,SAAS,GAAG,GAAG,CAAC;QACpB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACvD,MAAM,EAAE,GAAG,IAAA,aAAK,EAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3C,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,YAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;YACvB,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,SAAS,GAAwB,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAEM,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,UAA2B;IAE3B,eAAM,CAAC,KAAK,CAAC,aAAa,MAAM,GAAG,CAAC,CAAC;IACrC,mDAAmD;IACnD,MAAM,SAAS,GAAG,uBAAc,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAC/D,IAAA,mBAAW,EAAC,MAAM,CAAC,CAAC;IACtB,MAAM,QAAQ,GAAG,UAAU,MAAM,EAAE,CAAC;IACpC,MAAM,sBAAsB,GAAG,qBAAY,CAAC,GAAG,CAC7C,wBAAwB,EACxB,KAAK,CACN,CAAC;IAEF,IAAI,YAAuC,CAAC;IAE5C,IAAI,sBAAsB,EAAE,CAAC;QAC3B,YAAY,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,YAAE,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC;QACrC,YAAY,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC;YACzD,IAAI;YACJ,UAAU;YACV,UAAU;YACV,GAAG;SACJ,CAAC,CAAC;QACH,IAAI,sBAAsB,EAAE,CAAC;YAC3B,MAAM,YAAY,CAAC,GAAG,CACpB,oBAAoB,EACpB,QAAQ,EACR,YAAY,EACZ,IAAA,oBAAc,EAAC,oBAAoB,CAAC,IAAI,EAAE,CAC3C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IACD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,2BAAoB,CAAC,CAAC;IACxC,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,EAAE,gBAAgB,MAAM,EAAE,CAAC,CAAC;IACzD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9C,UAAU,CAAC,MAAM,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;QACpC,CAAC;QACD,YAAY,GAAG,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACvD,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,EAAE,4BAA4B,MAAM,EAAE,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,IACE,UAAU,CAAC,MAAM,KAAK,CAAC;QACvB,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC;QAClC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAC9B,CAAC;QACD,+CAA+C;QAC/C,OAAO,YAAY,CAAC,WAAW,CAAC;IAClC,CAAC;IACD,MAAM,eAAe,GAAG,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC7D,OAAO,YAAY,CAAC,WAAW,CAAC;IAClC,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACjE,OAAO,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;AAC/C,CAAC;AAEM,KAAK,UAAU,oBAAoB,CACxC,WAAsB,EACtB,UAA2B,EAC3B,cAAyB,EACzB,kBAA4B,EAAE;IAE9B,IAAI,aAAa,GAAG,IAAA,aAAK,EAAC,cAAc,CAAC,CAAC;IAC1C,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjD,aAAa,GAAG,WAAW,CAAC,aAAa,IAAI,EAAE,CAAC;IAClD,CAAC;IACD,eAAM,CAAC,KAAK,CACV,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,EACxC,sBAAsB,CACvB,CAAC;IACF,IAAI,MAAM,GAAc,EAAE,CAAC;IAC3B,yDAAyD;IACzD,IAAI,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAChC,oBAAoB;QACpB,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACrD,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAC3B,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,mBAAmB,CAAC,MAAM,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,CAAC;gBAChE,eAAM,CAAC,KAAK,CAAC,qBAAqB,MAAM,GAAG,CAAC,CAAC;gBAC7C,MAAM,aAAa,GAAG,MAAM,WAAW,CACrC,MAAM,EACN,UAAU,EACV,WAAW,EACX,eAAe,CAChB,CAAC;gBACF,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAC7C,aAAa,EACb,UAAU,IAAI,WAAW,EACzB,aAAa,EACb,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CACjC,CAAC;gBACF,IAAI,WAAW,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1C,OAAO,YAAY,CAAC,WAAW,CAAC;gBAClC,CAAC;gBACD,MAAM,GAAG,IAAA,wBAAgB,EAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,4BAA4B,CAAC,CAAC;IACvD,qCAAqC;IACrC,MAAM,GAAG,IAAA,wBAAgB,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,OAAO,CAAC;IACtB,OAAO,MAAM,CAAC,aAAa,CAAC;IAC5B,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,2BAA2B,CAAC,CAAC;IACtD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,MAAM,WAAW,GAAG,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACpD,IAAI,YAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,uCAAuC;YACvC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACjB,KAAK,MAAM,OAAO,IAAI,GAAG,EAAE,CAAC;gBAC1B,IAAI,YAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtB,MAAM,CAAC,GAAG,CAAsB,CAAC,IAAI,CACpC,MAAM,oBAAoB,CACxB,OAAyB,EACzB,UAAU,EACV,aAAa,EACb,eAAe,CAChB,CACF,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACL,MAAM,CAAC,GAAG,CAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,yBAAyB;YACzB,eAAM,CAAC,KAAK,CAAC,qBAAqB,GAAG,GAAG,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,oBAAoB,CACtC,GAAqB,EACrB,UAAU,EACV,aAAa,EACb,eAAe,CAChB,CAAC;QACJ,CAAC;IACH,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,cAAc,CAAC,CAAC;IACtD,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,MAAc,EACd,UAAsC,EACtC,WAAsB,EACtB,eAAyB;IAEzB,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,CAAC,MAAM,EAAE,UAAU,IAAI,WAAW,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAAC;QACpD,IAAI,GAAG,YAAY,uCAAiB,EAAE,CAAC;YACrC,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,6CAA4B,EAAE,CAAC;YACjD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,kCAAiB,CAAC,CAAC;QAC3C,IAAI,GAAG,CAAC,OAAO,KAAK,2BAAoB,EAAE,CAAC;YACzC,KAAK,CAAC,eAAe,GAAG,iCAAiC,MAAM,GAAG,CAAC;QACrE,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,KAAK,uCAAgC,EAAE,CAAC;YAC5D,KAAK,CAAC,eAAe,GAAG,sDAAsD,MAAM,GAAG,CAAC;QAC1F,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,KAAK,uBAAgB,EAAE,CAAC;YAC5C,KAAK,CAAC,eAAe,GAAG,yDAAyD,MAAM,GAAG,CAAC;QAC7F,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,KAAK,qBAAc,EAAE,CAAC;YAC1C,KAAK,CAAC,eAAe,GAAG,sBAAsB,MAAM,GAAG,CAAC;QAC1D,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,KAAK,kCAA2B,EAAE,CAAC;YACvD,KAAK,CAAC,eAAe,GAAG,sDAAsD,MAAM,GAAG,CAAC;QAC1F,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,KAAK,0BAAmB,EAAE,CAAC;YAC/C,KAAK,CAAC,eAAe,GAAG,2BAA2B,MAAM,GAAG,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,eAAe,GAAG,mCAAmC,MAAM,GAAG,CAAC;QACvE,CAAC;QACD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;YAC3B,KAAK,CAAC,eAAe;gBACnB,6GAA6G,CAAC;QAClH,CAAC;QACD,eAAM,CAAC,IAAI,CACT,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,EAC1C,uBAAuB,CACxB,CAAC;QACF,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAc,EACd,eAAyB,EACzB,aAAuB;IAEvB,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,eAAM,CAAC,KAAK,CACV,uBAAuB,MAAM,QAAQ,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACnE,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,eAAM,CAAC,KAAK,CACV,mBAAmB,MAAM,QAAQ,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC/D,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport {\n CONFIG_VALIDATION,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n} from '../../constants/error-messages';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport * as memCache from '../../util/cache/memory';\nimport * as packageCache from '../../util/cache/package';\nimport { getTtlOverride } from '../../util/cache/package/ttl';\nimport { clone } from '../../util/clone';\nimport { regEx } from '../../util/regex';\nimport * as template from '../../util/template';\nimport { GlobalConfig } from '../global';\nimport * as massage from '../massage';\nimport * as migration from '../migration';\nimport type { AllConfig, RenovateConfig } from '../types';\nimport { mergeChildConfig } from '../utils';\nimport { removedPresets } from './common';\nimport * as gitea from './gitea';\nimport * as github from './github';\nimport * as gitlab from './gitlab';\nimport * as http from './http';\nimport * as internal from './internal';\nimport * as local from './local';\nimport * as npm from './npm';\nimport { parsePreset } from './parse';\nimport type { Preset, PresetApi } from './types';\nimport {\n PRESET_DEP_NOT_FOUND,\n PRESET_INVALID,\n PRESET_INVALID_JSON,\n PRESET_NOT_FOUND,\n PRESET_PROHIBITED_SUBPRESET,\n PRESET_RENOVATE_CONFIG_NOT_FOUND,\n} from './util';\n\nconst presetSources: Record<string, PresetApi> = {\n github,\n npm,\n gitlab,\n gitea,\n local,\n internal,\n http,\n};\n\nconst presetCacheNamespace = 'preset';\n\nexport function replaceArgs(\n obj: string,\n argMapping: Record<string, any>,\n): string;\nexport function replaceArgs(\n obj: string[],\n argMapping: Record<string, any>,\n): string[];\nexport function replaceArgs(\n obj: Record<string, any>,\n argMapping: Record<string, any>,\n): Record<string, any>;\nexport function replaceArgs(\n obj: Record<string, any>[],\n argMapping: Record<string, any>,\n): Record<string, any>[];\n\n/**\n * TODO: fix me #22198\n * @param obj\n * @param argMapping\n */\nexport function replaceArgs(obj: any, argMapping: Record<string, any>): any;\nexport function replaceArgs(\n obj: string | string[] | Record<string, any> | Record<string, any>[],\n argMapping: Record<string, any>,\n): any {\n if (is.string(obj)) {\n let returnStr = obj;\n for (const [arg, argVal] of Object.entries(argMapping)) {\n const re = regEx(`{{${arg}}}`, 'g', false);\n returnStr = returnStr.replace(re, argVal);\n }\n return returnStr;\n }\n if (is.array(obj)) {\n const returnArray = [];\n for (const item of obj) {\n returnArray.push(replaceArgs(item, argMapping));\n }\n return returnArray;\n }\n if (is.object(obj)) {\n const returnObj: Record<string, any> = {};\n for (const [key, val] of Object.entries(obj)) {\n returnObj[key] = replaceArgs(val, argMapping);\n }\n return returnObj;\n }\n return obj;\n}\n\nexport async function getPreset(\n preset: string,\n baseConfig?: RenovateConfig,\n): Promise<RenovateConfig> {\n logger.trace(`getPreset(${preset})`);\n // Check if the preset has been removed or replaced\n const newPreset = removedPresets[preset];\n if (newPreset) {\n return getPreset(newPreset, baseConfig);\n }\n if (newPreset === null) {\n return {};\n }\n const { presetSource, repo, presetPath, presetName, tag, params } =\n parsePreset(preset);\n const cacheKey = `preset:${preset}`;\n const presetCachePersistence = GlobalConfig.get(\n 'presetCachePersistence',\n false,\n );\n\n let presetConfig: Preset | null | undefined;\n\n if (presetCachePersistence) {\n presetConfig = await packageCache.get(presetCacheNamespace, cacheKey);\n } else {\n presetConfig = memCache.get(cacheKey);\n }\n\n if (is.nullOrUndefined(presetConfig)) {\n presetConfig = await presetSources[presetSource].getPreset({\n repo,\n presetPath,\n presetName,\n tag,\n });\n if (presetCachePersistence) {\n await packageCache.set(\n presetCacheNamespace,\n cacheKey,\n presetConfig,\n getTtlOverride(presetCacheNamespace) ?? 15,\n );\n } else {\n memCache.set(cacheKey, presetConfig);\n }\n }\n if (!presetConfig) {\n throw new Error(PRESET_DEP_NOT_FOUND);\n }\n logger.trace({ presetConfig }, `Found preset ${preset}`);\n if (params) {\n const argMapping: Record<string, string> = {};\n for (const [index, value] of params.entries()) {\n argMapping[`arg${index}`] = value;\n }\n presetConfig = replaceArgs(presetConfig, argMapping);\n }\n logger.trace({ presetConfig }, `Applied params to preset ${preset}`);\n const presetKeys = Object.keys(presetConfig);\n if (\n presetKeys.length === 2 &&\n presetKeys.includes('description') &&\n presetKeys.includes('extends')\n ) {\n // preset is just a collection of other presets\n delete presetConfig.description;\n }\n const packageListKeys = ['description', 'matchPackageNames'];\n if (presetKeys.every((key) => packageListKeys.includes(key))) {\n delete presetConfig.description;\n }\n const { migratedConfig } = migration.migrateConfig(presetConfig);\n return massage.massageConfig(migratedConfig);\n}\n\nexport async function resolveConfigPresets(\n inputConfig: AllConfig,\n baseConfig?: RenovateConfig,\n _ignorePresets?: string[],\n existingPresets: string[] = [],\n): Promise<AllConfig> {\n let ignorePresets = clone(_ignorePresets);\n if (!ignorePresets || ignorePresets.length === 0) {\n ignorePresets = inputConfig.ignorePresets ?? [];\n }\n logger.trace(\n { config: inputConfig, existingPresets },\n 'resolveConfigPresets',\n );\n let config: AllConfig = {};\n // First, merge all the preset configs from left to right\n if (inputConfig.extends?.length) {\n // Compile templates\n inputConfig.extends = inputConfig.extends.map((tmpl) =>\n template.compile(tmpl, {}),\n );\n for (const preset of inputConfig.extends) {\n if (shouldResolvePreset(preset, existingPresets, ignorePresets)) {\n logger.trace(`Resolving preset \"${preset}\"`);\n const fetchedPreset = await fetchPreset(\n preset,\n baseConfig,\n inputConfig,\n existingPresets,\n );\n const presetConfig = await resolveConfigPresets(\n fetchedPreset,\n baseConfig ?? inputConfig,\n ignorePresets,\n existingPresets.concat([preset]),\n );\n if (inputConfig?.ignoreDeps?.length === 0) {\n delete presetConfig.description;\n }\n config = mergeChildConfig(config, presetConfig);\n }\n }\n }\n logger.trace({ config }, `Post-preset resolve config`);\n // Now assign \"regular\" config on top\n config = mergeChildConfig(config, inputConfig);\n delete config.extends;\n delete config.ignorePresets;\n logger.trace({ config }, `Post-merge resolve config`);\n for (const [key, val] of Object.entries(config)) {\n const ignoredKeys = ['content', 'onboardingConfig'];\n if (is.array(val)) {\n // Resolve nested objects inside arrays\n config[key] = [];\n for (const element of val) {\n if (is.object(element)) {\n (config[key] as RenovateConfig[]).push(\n await resolveConfigPresets(\n element as RenovateConfig,\n baseConfig,\n ignorePresets,\n existingPresets,\n ),\n );\n } else {\n (config[key] as unknown[]).push(element);\n }\n }\n } else if (is.object(val) && !ignoredKeys.includes(key)) {\n // Resolve nested objects\n logger.trace(`Resolving object \"${key}\"`);\n config[key] = await resolveConfigPresets(\n val as RenovateConfig,\n baseConfig,\n ignorePresets,\n existingPresets,\n );\n }\n }\n logger.trace({ config: inputConfig }, 'Input config');\n logger.trace({ config }, 'Resolved config');\n return config;\n}\n\nasync function fetchPreset(\n preset: string,\n baseConfig: RenovateConfig | undefined,\n inputConfig: AllConfig,\n existingPresets: string[],\n): Promise<AllConfig> {\n try {\n return await getPreset(preset, baseConfig ?? inputConfig);\n } catch (err) {\n logger.debug({ preset, err }, 'Preset fetch error');\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.message === PLATFORM_RATE_LIMIT_EXCEEDED) {\n throw err;\n }\n const error = new Error(CONFIG_VALIDATION);\n if (err.message === PRESET_DEP_NOT_FOUND) {\n error.validationError = `Cannot find preset's package (${preset})`;\n } else if (err.message === PRESET_RENOVATE_CONFIG_NOT_FOUND) {\n error.validationError = `Preset package is missing a renovate-config entry (${preset})`;\n } else if (err.message === PRESET_NOT_FOUND) {\n error.validationError = `Preset name not found within published preset config (${preset})`;\n } else if (err.message === PRESET_INVALID) {\n error.validationError = `Preset is invalid (${preset})`;\n } else if (err.message === PRESET_PROHIBITED_SUBPRESET) {\n error.validationError = `Sub-presets cannot be combined with a custom path (${preset})`;\n } else if (err.message === PRESET_INVALID_JSON) {\n error.validationError = `Preset is invalid JSON (${preset})`;\n } else {\n error.validationError = `Preset caused unexpected error (${preset})`;\n }\n if (existingPresets.length) {\n error.validationError +=\n '. Note: this is a *nested* preset so please contact the preset author if you are unable to fix it yourself.';\n }\n logger.info(\n { validationError: error.validationError },\n 'Throwing preset error',\n );\n throw error;\n }\n}\n\nfunction shouldResolvePreset(\n preset: string,\n existingPresets: string[],\n ignorePresets: string[],\n): boolean {\n if (existingPresets.includes(preset)) {\n logger.debug(\n `Already seen preset ${preset} in [${existingPresets.join(', ')}]`,\n );\n return false;\n }\n if (ignorePresets.includes(preset)) {\n logger.debug(\n `Ignoring preset ${preset} in [${existingPresets.join(', ')}]`,\n );\n return false;\n }\n return true;\n}\n"]}
@@ -39,8 +39,6 @@ exports.groups = {
39
39
  workarounds: workaroundsPreset.presets,
40
40
  };
41
41
  function getPreset({ repo, presetName, }) {
42
- return exports.groups[repo] && presetName
43
- ? exports.groups[repo][presetName]
44
- : /* istanbul ignore next */ undefined;
42
+ return exports.groups[repo] && presetName ? exports.groups[repo][presetName] : undefined;
45
43
  }
46
44
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/config/presets/internal/index.ts"],"names":[],"mappings":";;;AAuCA,8BAOC;;AA7CD,+DAAyC;AACzC,gFAA0D;AAC1D,iEAA2C;AAC3C,+DAAyC;AACzC,+DAAyC;AACzC,6DAAuC;AACvC,iEAA2C;AAC3C,4EAAsD;AACtD,oEAA8C;AAC9C,mDAA6B;AAC7B,mEAA6C;AAC7C,iEAA2C;AAC3C,qEAA+C;AAC/C,mEAA6C;AAC7C,mEAA6C;AAC7C,yEAAmD;AAEnD,+EAA+E;AAElE,QAAA,MAAM,GAA2C;IAC5D,MAAM,EAAE,YAAY,CAAC,OAAO;IAC5B,cAAc,EAAE,oBAAoB,CAAC,OAAO;IAC5C,OAAO,EAAE,aAAa,CAAC,OAAO;IAC9B,MAAM,EAAE,YAAY,CAAC,OAAO;IAC5B,MAAM,EAAE,YAAY,CAAC,OAAO;IAC5B,KAAK,EAAE,WAAW,CAAC,OAAO;IAC1B,OAAO,EAAE,aAAa,CAAC,OAAO;IAC9B,eAAe,EAAE,eAAe,CAAC,OAAO;IACxC,QAAQ,EAAE,cAAc,CAAC,OAAO;IAChC,GAAG,EAAE,GAAG,CAAC,OAAO;IAChB,QAAQ,EAAE,cAAc,CAAC,OAAO;IAChC,OAAO,EAAE,aAAa,CAAC,OAAO;IAC9B,YAAY,EAAE,YAAY,CAAC,OAAO;IAClC,QAAQ,EAAE,cAAc,CAAC,OAAO;IAChC,QAAQ,EAAE,cAAc,CAAC,OAAO;IAChC,WAAW,EAAE,iBAAiB,CAAC,OAAO;CACvC,CAAC;AAEF,SAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,UAAU,GACG;IACb,OAAO,cAAM,CAAC,IAAI,CAAC,IAAI,UAAU;QAC/B,CAAC,CAAC,cAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;QAC1B,CAAC,CAAC,0BAA0B,CAAC,SAAS,CAAC;AAC3C,CAAC","sourcesContent":["import type { Preset, PresetConfig } from '../types';\nimport * as configPreset from './config';\nimport * as customManagersPreset from './custom-managers';\nimport * as defaultPreset from './default';\nimport * as dockerPreset from './docker';\nimport * as globalPreset from './global';\nimport * as groupPreset from './group';\nimport * as helpersPreset from './helpers';\nimport * as mergeConfidence from './merge-confidence';\nimport * as monorepoPreset from './monorepos';\nimport * as npm from './npm';\nimport * as packagesPreset from './packages';\nimport * as previewPreset from './preview';\nimport * as replacements from './replacements';\nimport * as schedulePreset from './schedule';\nimport * as securityPreset from './security';\nimport * as workaroundsPreset from './workarounds';\n\n/* eslint sort-keys: [\"error\", \"asc\", {caseSensitive: false, natural: true}] */\n\nexport const groups: Record<string, Record<string, Preset>> = {\n config: configPreset.presets,\n customManagers: customManagersPreset.presets,\n default: defaultPreset.presets,\n docker: dockerPreset.presets,\n global: globalPreset.presets,\n group: groupPreset.presets,\n helpers: helpersPreset.presets,\n mergeConfidence: mergeConfidence.presets,\n monorepo: monorepoPreset.presets,\n npm: npm.presets,\n packages: packagesPreset.presets,\n preview: previewPreset.presets,\n replacements: replacements.presets,\n schedule: schedulePreset.presets,\n security: securityPreset.presets,\n workarounds: workaroundsPreset.presets,\n};\n\nexport function getPreset({\n repo,\n presetName,\n}: PresetConfig): Preset | undefined {\n return groups[repo] && presetName\n ? groups[repo][presetName]\n : /* istanbul ignore next */ undefined;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/config/presets/internal/index.ts"],"names":[],"mappings":";;;AAuCA,8BAKC;;AA3CD,+DAAyC;AACzC,gFAA0D;AAC1D,iEAA2C;AAC3C,+DAAyC;AACzC,+DAAyC;AACzC,6DAAuC;AACvC,iEAA2C;AAC3C,4EAAsD;AACtD,oEAA8C;AAC9C,mDAA6B;AAC7B,mEAA6C;AAC7C,iEAA2C;AAC3C,qEAA+C;AAC/C,mEAA6C;AAC7C,mEAA6C;AAC7C,yEAAmD;AAEnD,+EAA+E;AAElE,QAAA,MAAM,GAA2C;IAC5D,MAAM,EAAE,YAAY,CAAC,OAAO;IAC5B,cAAc,EAAE,oBAAoB,CAAC,OAAO;IAC5C,OAAO,EAAE,aAAa,CAAC,OAAO;IAC9B,MAAM,EAAE,YAAY,CAAC,OAAO;IAC5B,MAAM,EAAE,YAAY,CAAC,OAAO;IAC5B,KAAK,EAAE,WAAW,CAAC,OAAO;IAC1B,OAAO,EAAE,aAAa,CAAC,OAAO;IAC9B,eAAe,EAAE,eAAe,CAAC,OAAO;IACxC,QAAQ,EAAE,cAAc,CAAC,OAAO;IAChC,GAAG,EAAE,GAAG,CAAC,OAAO;IAChB,QAAQ,EAAE,cAAc,CAAC,OAAO;IAChC,OAAO,EAAE,aAAa,CAAC,OAAO;IAC9B,YAAY,EAAE,YAAY,CAAC,OAAO;IAClC,QAAQ,EAAE,cAAc,CAAC,OAAO;IAChC,QAAQ,EAAE,cAAc,CAAC,OAAO;IAChC,WAAW,EAAE,iBAAiB,CAAC,OAAO;CACvC,CAAC;AAEF,SAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,UAAU,GACG;IACb,OAAO,cAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,cAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC","sourcesContent":["import type { Preset, PresetConfig } from '../types';\nimport * as configPreset from './config';\nimport * as customManagersPreset from './custom-managers';\nimport * as defaultPreset from './default';\nimport * as dockerPreset from './docker';\nimport * as globalPreset from './global';\nimport * as groupPreset from './group';\nimport * as helpersPreset from './helpers';\nimport * as mergeConfidence from './merge-confidence';\nimport * as monorepoPreset from './monorepos';\nimport * as npm from './npm';\nimport * as packagesPreset from './packages';\nimport * as previewPreset from './preview';\nimport * as replacements from './replacements';\nimport * as schedulePreset from './schedule';\nimport * as securityPreset from './security';\nimport * as workaroundsPreset from './workarounds';\n\n/* eslint sort-keys: [\"error\", \"asc\", {caseSensitive: false, natural: true}] */\n\nexport const groups: Record<string, Record<string, Preset>> = {\n config: configPreset.presets,\n customManagers: customManagersPreset.presets,\n default: defaultPreset.presets,\n docker: dockerPreset.presets,\n global: globalPreset.presets,\n group: groupPreset.presets,\n helpers: helpersPreset.presets,\n mergeConfidence: mergeConfidence.presets,\n monorepo: monorepoPreset.presets,\n npm: npm.presets,\n packages: packagesPreset.presets,\n preview: previewPreset.presets,\n replacements: replacements.presets,\n schedule: schedulePreset.presets,\n security: securityPreset.presets,\n workarounds: workaroundsPreset.presets,\n};\n\nexport function getPreset({\n repo,\n presetName,\n}: PresetConfig): Preset | undefined {\n return groups[repo] && presetName ? groups[repo][presetName] : undefined;\n}\n"]}
@@ -113,7 +113,7 @@ async function validateConfig(configType, config, isPreset, parentPath) {
113
113
  let warnings = [];
114
114
  for (const [key, val] of Object.entries(config)) {
115
115
  const currentPath = parentPath ? `${parentPath}.${key}` : key;
116
- // istanbul ignore if
116
+ /* v8 ignore next 7: TODO: test me */
117
117
  if (key === '__proto__') {
118
118
  errors.push({
119
119
  topic: 'Config security error',
@@ -690,11 +690,9 @@ async function validateConfig(configType, config, isPreset, parentPath) {
690
690
  }
691
691
  }
692
692
  function sortAll(a, b) {
693
- // istanbul ignore else: currently never happen
694
693
  if (a.topic === b.topic) {
695
694
  return a.message > b.message ? 1 : -1;
696
695
  }
697
- // istanbul ignore next: currently never happen
698
696
  return a.topic > b.topic ? 1 : -1;
699
697
  }
700
698
  errors.sort(sortAll);
@@ -705,7 +703,7 @@ async function validateConfig(configType, config, isPreset, parentPath) {
705
703
  * Basic validation for global config options
706
704
  */
707
705
  async function validateGlobalConfig(key, val, type, warnings, errors, currentPath, config) {
708
- // istanbul ignore if
706
+ /* v8 ignore next 5: not testable yet */
709
707
  if (getDeprecationMessage(key)) {
710
708
  warnings.push({
711
709
  topic: 'Deprecation Warning',