renovate 42.92.2 → 42.92.4

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 (60) hide show
  1. package/dist/config/decrypt/bcpgp.js +2 -0
  2. package/dist/config/decrypt/bcpgp.js.map +1 -1
  3. package/dist/config/decrypt/openpgp.js +2 -0
  4. package/dist/config/decrypt/openpgp.js.map +1 -1
  5. package/dist/config/decrypt.js +1 -0
  6. package/dist/config/decrypt.js.map +1 -1
  7. package/dist/config/migration.js +2 -0
  8. package/dist/config/migration.js.map +1 -1
  9. package/dist/config/migrations/custom/custom-managers-migration.js +1 -0
  10. package/dist/config/migrations/custom/custom-managers-migration.js.map +1 -1
  11. package/dist/config/migrations/custom/datasource-migration.js +1 -0
  12. package/dist/config/migrations/custom/datasource-migration.js.map +1 -1
  13. package/dist/config/migrations/custom/file-match-migration.js +1 -0
  14. package/dist/config/migrations/custom/file-match-migration.js.map +1 -1
  15. package/dist/config/migrations/custom/host-rules-migration.js +4 -0
  16. package/dist/config/migrations/custom/host-rules-migration.js.map +1 -1
  17. package/dist/config/migrations/custom/match-datasources-migration.js +1 -0
  18. package/dist/config/migrations/custom/match-datasources-migration.js.map +1 -1
  19. package/dist/config/migrations/custom/match-strings-migration.js +1 -0
  20. package/dist/config/migrations/custom/match-strings-migration.js.map +1 -1
  21. package/dist/config/migrations/custom/node-migration.js +1 -0
  22. package/dist/config/migrations/custom/node-migration.js.map +1 -1
  23. package/dist/config/migrations/custom/package-files-migration.js +2 -0
  24. package/dist/config/migrations/custom/package-files-migration.js.map +1 -1
  25. package/dist/config/migrations/custom/package-rules-migration.js +13 -0
  26. package/dist/config/migrations/custom/package-rules-migration.js.map +1 -1
  27. package/dist/config/migrations/custom/post-update-options-migration.js +1 -0
  28. package/dist/config/migrations/custom/post-update-options-migration.js.map +1 -1
  29. package/dist/config/migrations/custom/rebase-stale-prs-migration.js +1 -0
  30. package/dist/config/migrations/custom/rebase-stale-prs-migration.js.map +1 -1
  31. package/dist/config/migrations/custom/recreate-closed-migration.js +1 -0
  32. package/dist/config/migrations/custom/recreate-closed-migration.js.map +1 -1
  33. package/dist/config/migrations/custom/require-config-migration.js +1 -0
  34. package/dist/config/migrations/custom/require-config-migration.js.map +1 -1
  35. package/dist/config/migrations/custom/stability-days-migration.js +1 -0
  36. package/dist/config/migrations/custom/stability-days-migration.js.map +1 -1
  37. package/dist/config/migrations/custom/trust-level-migration.js +1 -0
  38. package/dist/config/migrations/custom/trust-level-migration.js.map +1 -1
  39. package/dist/config/options/index.js +1 -0
  40. package/dist/config/options/index.js.map +1 -1
  41. package/dist/config/validation-helpers/utils.js +1 -0
  42. package/dist/config/validation-helpers/utils.js.map +1 -1
  43. package/dist/config/validation.js +3 -0
  44. package/dist/config/validation.js.map +1 -1
  45. package/dist/instrumentation/index.js +2 -2
  46. package/dist/instrumentation/index.js.map +1 -1
  47. package/dist/instrumentation/reporting.js +1 -0
  48. package/dist/instrumentation/reporting.js.map +1 -1
  49. package/dist/logger/index.js +2 -0
  50. package/dist/logger/index.js.map +1 -1
  51. package/dist/logger/once.js +1 -0
  52. package/dist/logger/once.js.map +1 -1
  53. package/dist/logger/remap.js +2 -0
  54. package/dist/logger/remap.js.map +1 -1
  55. package/dist/logger/utils.js +5 -1
  56. package/dist/logger/utils.js.map +1 -1
  57. package/dist/util/git/span-processor.js +4 -7
  58. package/dist/util/git/span-processor.js.map +1 -1
  59. package/package.json +5 -5
  60. package/renovate-schema.json +2 -2
@@ -20,9 +20,11 @@ async function tryDecryptBcPgp(privateKey, encryptedStr) {
20
20
  logger_1.logger.debug('Adding base64 padding to armored message');
21
21
  armoredMessage += `=`.repeat(4 - (armoredMessage.length % 4));
22
22
  }
23
+ // v8 ignore else -- TODO: add test #40625
23
24
  if (!hasStartHeader) {
24
25
  armoredMessage = `${startBlock}${armoredMessage}`;
25
26
  }
27
+ // v8 ignore else -- TODO: add test #40625
26
28
  if (!hasEndHeader) {
27
29
  armoredMessage = `${armoredMessage}${endBlock}`;
28
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bcpgp.js","sourceRoot":"","sources":["../../../lib/config/decrypt/bcpgp.ts"],"names":[],"mappings":";;AAMA,0CA2CC;AAhDD,0CAA+D;AAC/D,yCAAsC;AACtC,wCAAwC;AACxC,4CAAyC;AAElC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,YAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,iCAAiC,CAAC;QACrD,MAAM,QAAQ,GAAG,6BAA6B,CAAC;QAC/C,IAAI,cAAc,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QAEzC,MAAM,cAAc,GAAG,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEvD,IACE,CAAC,cAAc;YACf,CAAC,YAAY;YACb,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC7B,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC9B,cAAc,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAC/B,CAAC;YACD,eAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YACzD,cAAc,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,cAAc,GAAG,GAAG,UAAU,GAAG,cAAc,EAAE,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,cAAc,GAAG,GAAG,cAAc,GAAG,QAAQ,EAAE,CAAC;QAClD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAA,aAAO,EACxB,UAAU,CAAC,OAAO,CAAC,IAAA,aAAK,EAAC,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,0CAA0C;QACxF,cAAc,EACd;YACE,OAAO,EAAE,OAAO,EAAE;SACnB,CACF,CAAC;QACF,eAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,+BAA+B,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,8DAA8D;AAC9D,qEAAqE;AACrE,SAAS,OAAO;IACd,MAAM,OAAO,GAAG,IAAA,YAAM,GAAE,CAAC,sBAAsB,CAAC;IAChD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,IAAA,wBAAkB,EAAC,OAAO,CAAC,EAAE,CAAC;YAChC,eAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,8BAA8B,CAAC,CAAC;YAC1D,OAAO,OAAO,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,wCAAwC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACvD,OAAO,aAAa,CAAC;AACvB,CAAC","sourcesContent":["import type { RuntimeType } from '@renovatebot/pgp';\nimport { decrypt, isSupportedRuntime } from '@renovatebot/pgp';\nimport { logger } from '../../logger';\nimport { getEnv } from '../../util/env';\nimport { regEx } from '../../util/regex';\n\nexport async function tryDecryptBcPgp(\n privateKey: string,\n encryptedStr: string,\n): Promise<string | null> {\n try {\n const startBlock = '-----BEGIN PGP MESSAGE-----\\n\\n';\n const endBlock = '\\n-----END PGP MESSAGE-----';\n let armoredMessage = encryptedStr.trim();\n\n const hasStartHeader = armoredMessage.startsWith(startBlock);\n const hasEndHeader = armoredMessage.endsWith(endBlock);\n\n if (\n !hasStartHeader &&\n !hasEndHeader &&\n !armoredMessage.includes('=') &&\n !armoredMessage.includes('\\n') &&\n armoredMessage.length % 4 !== 0\n ) {\n logger.debug('Adding base64 padding to armored message');\n armoredMessage += `=`.repeat(4 - (armoredMessage.length % 4));\n }\n\n if (!hasStartHeader) {\n armoredMessage = `${startBlock}${armoredMessage}`;\n }\n if (!hasEndHeader) {\n armoredMessage = `${armoredMessage}${endBlock}`;\n }\n\n const data = await decrypt(\n privateKey.replace(regEx(/\\n[ \\t]+/g), '\\n'), // little massage to help a common problem\n armoredMessage,\n {\n runtime: runtime(),\n },\n );\n logger.debug('Decrypted config using bcpgp');\n return data;\n } catch (err) {\n logger.debug({ err }, 'Could not decrypt using bcpgp');\n return null;\n }\n}\n\n// TODO: use `wasm-java` as default when we require node v24+.\n// Node v22 hungs on exit https://github.com/nodejs/node/issues/60584\nfunction runtime(): RuntimeType {\n const runtime = getEnv().RENOVATE_X_PGP_RUNTIME;\n if (runtime) {\n if (isSupportedRuntime(runtime)) {\n logger.trace({ runtime }, 'Using configured PGP runtime');\n return runtime;\n } else {\n logger.once.warn({ runtime }, 'Unknown PGP runtime, using wasm-dotnet');\n }\n }\n logger.trace('Using default PGP runtime: wasm-dotnet');\n return 'wasm-dotnet';\n}\n"]}
1
+ {"version":3,"file":"bcpgp.js","sourceRoot":"","sources":["../../../lib/config/decrypt/bcpgp.ts"],"names":[],"mappings":";;AAMA,0CA6CC;AAlDD,0CAA+D;AAC/D,yCAAsC;AACtC,wCAAwC;AACxC,4CAAyC;AAElC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,YAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,iCAAiC,CAAC;QACrD,MAAM,QAAQ,GAAG,6BAA6B,CAAC;QAC/C,IAAI,cAAc,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QAEzC,MAAM,cAAc,GAAG,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEvD,IACE,CAAC,cAAc;YACf,CAAC,YAAY;YACb,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC7B,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC9B,cAAc,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAC/B,CAAC;YACD,eAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YACzD,cAAc,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,0CAA0C;QAC1C,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,cAAc,GAAG,GAAG,UAAU,GAAG,cAAc,EAAE,CAAC;QACpD,CAAC;QACD,0CAA0C;QAC1C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,cAAc,GAAG,GAAG,cAAc,GAAG,QAAQ,EAAE,CAAC;QAClD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAA,aAAO,EACxB,UAAU,CAAC,OAAO,CAAC,IAAA,aAAK,EAAC,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,0CAA0C;QACxF,cAAc,EACd;YACE,OAAO,EAAE,OAAO,EAAE;SACnB,CACF,CAAC;QACF,eAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,+BAA+B,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,8DAA8D;AAC9D,qEAAqE;AACrE,SAAS,OAAO;IACd,MAAM,OAAO,GAAG,IAAA,YAAM,GAAE,CAAC,sBAAsB,CAAC;IAChD,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,IAAA,wBAAkB,EAAC,OAAO,CAAC,EAAE,CAAC;YAChC,eAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,8BAA8B,CAAC,CAAC;YAC1D,OAAO,OAAO,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,wCAAwC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACvD,OAAO,aAAa,CAAC;AACvB,CAAC","sourcesContent":["import type { RuntimeType } from '@renovatebot/pgp';\nimport { decrypt, isSupportedRuntime } from '@renovatebot/pgp';\nimport { logger } from '../../logger';\nimport { getEnv } from '../../util/env';\nimport { regEx } from '../../util/regex';\n\nexport async function tryDecryptBcPgp(\n privateKey: string,\n encryptedStr: string,\n): Promise<string | null> {\n try {\n const startBlock = '-----BEGIN PGP MESSAGE-----\\n\\n';\n const endBlock = '\\n-----END PGP MESSAGE-----';\n let armoredMessage = encryptedStr.trim();\n\n const hasStartHeader = armoredMessage.startsWith(startBlock);\n const hasEndHeader = armoredMessage.endsWith(endBlock);\n\n if (\n !hasStartHeader &&\n !hasEndHeader &&\n !armoredMessage.includes('=') &&\n !armoredMessage.includes('\\n') &&\n armoredMessage.length % 4 !== 0\n ) {\n logger.debug('Adding base64 padding to armored message');\n armoredMessage += `=`.repeat(4 - (armoredMessage.length % 4));\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (!hasStartHeader) {\n armoredMessage = `${startBlock}${armoredMessage}`;\n }\n // v8 ignore else -- TODO: add test #40625\n if (!hasEndHeader) {\n armoredMessage = `${armoredMessage}${endBlock}`;\n }\n\n const data = await decrypt(\n privateKey.replace(regEx(/\\n[ \\t]+/g), '\\n'), // little massage to help a common problem\n armoredMessage,\n {\n runtime: runtime(),\n },\n );\n logger.debug('Decrypted config using bcpgp');\n return data;\n } catch (err) {\n logger.debug({ err }, 'Could not decrypt using bcpgp');\n return null;\n }\n}\n\n// TODO: use `wasm-java` as default when we require node v24+.\n// Node v22 hungs on exit https://github.com/nodejs/node/issues/60584\nfunction runtime(): RuntimeType {\n const runtime = getEnv().RENOVATE_X_PGP_RUNTIME;\n if (runtime) {\n if (isSupportedRuntime(runtime)) {\n logger.trace({ runtime }, 'Using configured PGP runtime');\n return runtime;\n } else {\n logger.once.warn({ runtime }, 'Unknown PGP runtime, using wasm-dotnet');\n }\n }\n logger.trace('Using default PGP runtime: wasm-dotnet');\n return 'wasm-dotnet';\n}\n"]}
@@ -27,9 +27,11 @@ async function tryDecryptOpenPgp(privateKey, encryptedStr) {
27
27
  const startBlock = '-----BEGIN PGP MESSAGE-----\n\n';
28
28
  const endBlock = '\n-----END PGP MESSAGE-----';
29
29
  let armoredMessage = encryptedStr.trim();
30
+ // v8 ignore else -- TODO: add test #40625
30
31
  if (!armoredMessage.startsWith(startBlock)) {
31
32
  armoredMessage = `${startBlock}${armoredMessage}`;
32
33
  }
34
+ // v8 ignore else -- TODO: add test #40625
33
35
  if (!armoredMessage.endsWith(endBlock)) {
34
36
  armoredMessage = `${armoredMessage}${endBlock}`;
35
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"openpgp.js","sourceRoot":"","sources":["../../../lib/config/decrypt/openpgp.ts"],"names":[],"mappings":";;AAMA,8CA6CC;AAnDD,iDAA2C;AAC3C,yCAAsC;AACtC,4CAAyC;AAEzC,IAAI,GAAG,GAAgD,SAAS,CAAC;AAE1D,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,YAAoB;IAEpB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,GAAG,GAAG,IAAA,oBAAO,GAAE,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,eAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAAC;YAC3C,GAAG,GAAG,IAAI,CAAC;QACb,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC;YAClC,kBAAkB;YAClB,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,IAAA,aAAK,EAAC,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,0CAA0C;SACrG,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,iCAAiC,CAAC;QACrD,MAAM,QAAQ,GAAG,6BAA6B,CAAC;QAC/C,IAAI,cAAc,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3C,cAAc,GAAG,GAAG,UAAU,GAAG,cAAc,EAAE,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,cAAc,GAAG,GAAG,cAAc,GAAG,QAAQ,EAAE,CAAC;QAClD,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC;YACpC,cAAc;SACf,CAAC,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC;YACjC,OAAO;YACP,cAAc,EAAE,EAAE;SACnB,CAAC,CAAC;QACH,eAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,iCAAiC,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC","sourcesContent":["import { openpgp } from '../../expose.cjs';\nimport { logger } from '../../logger';\nimport { regEx } from '../../util/regex';\n\nlet pgp: typeof import('openpgp') | null | undefined = undefined;\n\nexport async function tryDecryptOpenPgp(\n privateKey: string,\n encryptedStr: string,\n): Promise<string | null> {\n if (pgp === undefined) {\n try {\n pgp = openpgp();\n } catch (err) {\n logger.warn({ err }, 'Could load openpgp');\n pgp = null;\n }\n }\n\n if (pgp === null) {\n logger.once.warn('Cannot load openpgp, skipping decryption');\n return null;\n }\n\n try {\n const pk = await pgp.readPrivateKey({\n // prettier-ignore\n armoredKey: privateKey.replace(regEx(/\\n[ \\t]+/g), '\\n'), // little massage to help a common problem\n });\n const startBlock = '-----BEGIN PGP MESSAGE-----\\n\\n';\n const endBlock = '\\n-----END PGP MESSAGE-----';\n let armoredMessage = encryptedStr.trim();\n if (!armoredMessage.startsWith(startBlock)) {\n armoredMessage = `${startBlock}${armoredMessage}`;\n }\n if (!armoredMessage.endsWith(endBlock)) {\n armoredMessage = `${armoredMessage}${endBlock}`;\n }\n const message = await pgp.readMessage({\n armoredMessage,\n });\n const { data } = await pgp.decrypt({\n message,\n decryptionKeys: pk,\n });\n logger.debug('Decrypted config using openpgp');\n return data;\n } catch (err) {\n logger.debug({ err }, 'Could not decrypt using openpgp');\n return null;\n }\n}\n"]}
1
+ {"version":3,"file":"openpgp.js","sourceRoot":"","sources":["../../../lib/config/decrypt/openpgp.ts"],"names":[],"mappings":";;AAMA,8CA+CC;AArDD,iDAA2C;AAC3C,yCAAsC;AACtC,4CAAyC;AAEzC,IAAI,GAAG,GAAgD,SAAS,CAAC;AAE1D,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,YAAoB;IAEpB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,GAAG,GAAG,IAAA,oBAAO,GAAE,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,eAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,oBAAoB,CAAC,CAAC;YAC3C,GAAG,GAAG,IAAI,CAAC;QACb,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC;YAClC,kBAAkB;YAClB,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,IAAA,aAAK,EAAC,WAAW,CAAC,EAAE,IAAI,CAAC,EAAE,0CAA0C;SACrG,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,iCAAiC,CAAC;QACrD,MAAM,QAAQ,GAAG,6BAA6B,CAAC;QAC/C,IAAI,cAAc,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QACzC,0CAA0C;QAC1C,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3C,cAAc,GAAG,GAAG,UAAU,GAAG,cAAc,EAAE,CAAC;QACpD,CAAC;QACD,0CAA0C;QAC1C,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,cAAc,GAAG,GAAG,cAAc,GAAG,QAAQ,EAAE,CAAC;QAClD,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC;YACpC,cAAc;SACf,CAAC,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC;YACjC,OAAO;YACP,cAAc,EAAE,EAAE;SACnB,CAAC,CAAC;QACH,eAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,iCAAiC,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC","sourcesContent":["import { openpgp } from '../../expose.cjs';\nimport { logger } from '../../logger';\nimport { regEx } from '../../util/regex';\n\nlet pgp: typeof import('openpgp') | null | undefined = undefined;\n\nexport async function tryDecryptOpenPgp(\n privateKey: string,\n encryptedStr: string,\n): Promise<string | null> {\n if (pgp === undefined) {\n try {\n pgp = openpgp();\n } catch (err) {\n logger.warn({ err }, 'Could load openpgp');\n pgp = null;\n }\n }\n\n if (pgp === null) {\n logger.once.warn('Cannot load openpgp, skipping decryption');\n return null;\n }\n\n try {\n const pk = await pgp.readPrivateKey({\n // prettier-ignore\n armoredKey: privateKey.replace(regEx(/\\n[ \\t]+/g), '\\n'), // little massage to help a common problem\n });\n const startBlock = '-----BEGIN PGP MESSAGE-----\\n\\n';\n const endBlock = '\\n-----END PGP MESSAGE-----';\n let armoredMessage = encryptedStr.trim();\n // v8 ignore else -- TODO: add test #40625\n if (!armoredMessage.startsWith(startBlock)) {\n armoredMessage = `${startBlock}${armoredMessage}`;\n }\n // v8 ignore else -- TODO: add test #40625\n if (!armoredMessage.endsWith(endBlock)) {\n armoredMessage = `${armoredMessage}${endBlock}`;\n }\n const message = await pgp.readMessage({\n armoredMessage,\n });\n const { data } = await pgp.decrypt({\n message,\n decryptionKeys: pk,\n });\n logger.debug('Decrypted config using openpgp');\n return data;\n } catch (err) {\n logger.debug({ err }, 'Could not decrypt using openpgp');\n return null;\n }\n}\n"]}
@@ -122,6 +122,7 @@ async function decryptConfig(config, repository, existingPath = '$') {
122
122
  throw error;
123
123
  }
124
124
  logger_1.logger.debug(`Decrypted ${eKey} in ${path}`);
125
+ // v8 ignore if -- TODO: add test #40625
125
126
  if (eKey === 'npmToken') {
126
127
  const token = decryptedStr.replace((0, regex_1.regEx)(/\n$/), '');
127
128
  decryptedConfig[eKey] = token;
@@ -1 +1 @@
1
- {"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../../lib/config/decrypt.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isArray,\n isNonEmptyString,\n isObject,\n isString,\n} from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../constants/error-messages';\nimport { logger } from '../logger';\nimport { getEnv } from '../util/env';\nimport { regEx } from '../util/regex';\nimport { addSecretForSanitizing } from '../util/sanitize';\nimport { ensureTrailingSlash, parseUrl, trimSlashes } from '../util/url';\nimport { tryDecryptBcPgp } from './decrypt/bcpgp';\nimport { tryDecryptOpenPgp } from './decrypt/openpgp';\nimport { GlobalConfig } from './global';\nimport { DecryptedObject } from './schema';\nimport type { AllConfig, RenovateConfig } from './types';\n\nlet privateKey: string | undefined;\nlet privateKeyOld: string | undefined;\n\nexport function setPrivateKeys(\n pKey: string | undefined,\n pKeyOld: string | undefined,\n): void {\n privateKey = pKey;\n privateKeyOld = pKeyOld;\n}\n\nexport async function tryDecrypt(\n key: string,\n encryptedStr: string,\n repository: string,\n): Promise<string | null> {\n let decryptedStr: string | null = null;\n const decryptedObjStr =\n getEnv().RENOVATE_X_USE_OPENPGP === 'true'\n ? await tryDecryptOpenPgp(key, encryptedStr)\n : await tryDecryptBcPgp(key, encryptedStr);\n if (decryptedObjStr) {\n decryptedStr = validateDecryptedValue(decryptedObjStr, repository);\n }\n return decryptedStr;\n}\n\nexport function 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 (!isNonEmptyString(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 (!isNonEmptyString(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 repositories = [repository.toUpperCase()];\n\n const azureCollection = getAzureCollection();\n if (isNonEmptyString(azureCollection)) {\n // used for full 'org/project/repo' matching\n repositories.push(`${azureCollection}/${repository}`.toUpperCase());\n // used for org prefix matching without repo\n repositories.push(`${azureCollection}/*/`.toUpperCase());\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 (isNonEmptyString(repo)) {\n const scopedRepos = orgPrefixes.map((orgPrefix) =>\n `${orgPrefix}${repo}`.toUpperCase(),\n );\n for (const rp of repositories) {\n if (scopedRepos.some((r) => r === rp)) {\n return value;\n }\n }\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 const azcol =\n azureCollection === undefined\n ? undefined\n : ensureTrailingSlash(azureCollection).toUpperCase();\n for (const rp of repositories) {\n if (\n orgPrefixes.some(\n (orgPrefix) => rp.startsWith(orgPrefix) && orgPrefix !== azcol,\n )\n ) {\n return value;\n }\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<T extends RenovateConfig = AllConfig>(\n config: T,\n repository: string,\n existingPath = '$',\n): Promise<T> {\n logger.trace({ config }, 'decryptConfig()');\n const decryptedConfig = { ...config };\n for (const [key, val] of Object.entries(config)) {\n if (key === 'encrypted' && isObject(val)) {\n const path = `${existingPath}.${key}`;\n logger.debug({ config: val }, `Found encrypted config in ${path}`);\n\n const encryptedWarning = GlobalConfig.get('encryptedWarning');\n if (isString(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} in ${path}`);\n let decryptedStr = await tryDecrypt(privateKey, eVal, repository);\n if (privateKeyOld && !isNonEmptyString(decryptedStr)) {\n logger.debug(`Trying to decrypt with old private key`);\n decryptedStr = await tryDecrypt(privateKeyOld, eVal, repository);\n }\n if (!isNonEmptyString(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} in ${path}`);\n if (eKey === 'npmToken') {\n const token = decryptedStr.replace(regEx(/\\n$/), '');\n decryptedConfig[eKey] = token;\n addSecretForSanitizing(token);\n } else {\n // @ts-expect-error -- type can't be narrowed\n decryptedConfig[eKey] = decryptedStr;\n addSecretForSanitizing(decryptedStr);\n }\n }\n } else {\n const env = getEnv();\n if (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 (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 (isArray(val)) {\n // @ts-expect-error -- type can't be narrowed\n decryptedConfig[key] = [];\n for (const [index, item] of val.entries()) {\n if (isObject(item) && !isArray(item)) {\n const path = `${existingPath}.${key}[${index}]`;\n // @ts-expect-error -- type can't be narrowed\n (decryptedConfig[key] as RenovateConfig[]).push(\n await decryptConfig(item as RenovateConfig, repository, path),\n );\n } else {\n // @ts-expect-error -- type can't be narrowed\n (decryptedConfig[key] as unknown[]).push(item);\n }\n }\n } else if (isObject(val) && key !== 'content') {\n const path = `${existingPath}.${key}`;\n // @ts-expect-error -- type can't be narrowed\n decryptedConfig[key] = await decryptConfig(\n val as RenovateConfig,\n repository,\n path,\n );\n }\n }\n delete decryptedConfig.encrypted;\n logger.trace({ config: decryptedConfig }, 'decryptedConfig');\n return decryptedConfig;\n}\n\nexport function getAzureCollection(): string | undefined {\n const platform = GlobalConfig.get('platform');\n if (platform !== 'azure') {\n return undefined;\n }\n\n const endpoint = GlobalConfig.get('endpoint');\n const endpointUrl = parseUrl(endpoint);\n if (endpointUrl === null) {\n // should not happen\n logger.warn({ endpoint }, 'Unable to parse endpoint for token decryption');\n return undefined;\n }\n\n const azureCollection = trimSlashes(endpointUrl.pathname);\n if (!isNonEmptyString(azureCollection)) {\n logger.debug({ endpoint }, 'Unable to find azure collection name from URL');\n return undefined;\n }\n\n if (azureCollection.startsWith('tfs/')) {\n // Azure DevOps Server\n return azureCollection.substring(4);\n }\n return azureCollection;\n}\n"]}
1
+ {"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../../lib/config/decrypt.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isArray,\n isNonEmptyString,\n isObject,\n isString,\n} from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../constants/error-messages';\nimport { logger } from '../logger';\nimport { getEnv } from '../util/env';\nimport { regEx } from '../util/regex';\nimport { addSecretForSanitizing } from '../util/sanitize';\nimport { ensureTrailingSlash, parseUrl, trimSlashes } from '../util/url';\nimport { tryDecryptBcPgp } from './decrypt/bcpgp';\nimport { tryDecryptOpenPgp } from './decrypt/openpgp';\nimport { GlobalConfig } from './global';\nimport { DecryptedObject } from './schema';\nimport type { AllConfig, RenovateConfig } from './types';\n\nlet privateKey: string | undefined;\nlet privateKeyOld: string | undefined;\n\nexport function setPrivateKeys(\n pKey: string | undefined,\n pKeyOld: string | undefined,\n): void {\n privateKey = pKey;\n privateKeyOld = pKeyOld;\n}\n\nexport async function tryDecrypt(\n key: string,\n encryptedStr: string,\n repository: string,\n): Promise<string | null> {\n let decryptedStr: string | null = null;\n const decryptedObjStr =\n getEnv().RENOVATE_X_USE_OPENPGP === 'true'\n ? await tryDecryptOpenPgp(key, encryptedStr)\n : await tryDecryptBcPgp(key, encryptedStr);\n if (decryptedObjStr) {\n decryptedStr = validateDecryptedValue(decryptedObjStr, repository);\n }\n return decryptedStr;\n}\n\nexport function 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 (!isNonEmptyString(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 (!isNonEmptyString(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 repositories = [repository.toUpperCase()];\n\n const azureCollection = getAzureCollection();\n if (isNonEmptyString(azureCollection)) {\n // used for full 'org/project/repo' matching\n repositories.push(`${azureCollection}/${repository}`.toUpperCase());\n // used for org prefix matching without repo\n repositories.push(`${azureCollection}/*/`.toUpperCase());\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 (isNonEmptyString(repo)) {\n const scopedRepos = orgPrefixes.map((orgPrefix) =>\n `${orgPrefix}${repo}`.toUpperCase(),\n );\n for (const rp of repositories) {\n if (scopedRepos.some((r) => r === rp)) {\n return value;\n }\n }\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 const azcol =\n azureCollection === undefined\n ? undefined\n : ensureTrailingSlash(azureCollection).toUpperCase();\n for (const rp of repositories) {\n if (\n orgPrefixes.some(\n (orgPrefix) => rp.startsWith(orgPrefix) && orgPrefix !== azcol,\n )\n ) {\n return value;\n }\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<T extends RenovateConfig = AllConfig>(\n config: T,\n repository: string,\n existingPath = '$',\n): Promise<T> {\n logger.trace({ config }, 'decryptConfig()');\n const decryptedConfig = { ...config };\n for (const [key, val] of Object.entries(config)) {\n if (key === 'encrypted' && isObject(val)) {\n const path = `${existingPath}.${key}`;\n logger.debug({ config: val }, `Found encrypted config in ${path}`);\n\n const encryptedWarning = GlobalConfig.get('encryptedWarning');\n if (isString(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} in ${path}`);\n let decryptedStr = await tryDecrypt(privateKey, eVal, repository);\n if (privateKeyOld && !isNonEmptyString(decryptedStr)) {\n logger.debug(`Trying to decrypt with old private key`);\n decryptedStr = await tryDecrypt(privateKeyOld, eVal, repository);\n }\n if (!isNonEmptyString(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} in ${path}`);\n // v8 ignore if -- TODO: add test #40625\n if (eKey === 'npmToken') {\n const token = decryptedStr.replace(regEx(/\\n$/), '');\n decryptedConfig[eKey] = token;\n addSecretForSanitizing(token);\n } else {\n // @ts-expect-error -- type can't be narrowed\n decryptedConfig[eKey] = decryptedStr;\n addSecretForSanitizing(decryptedStr);\n }\n }\n } else {\n const env = getEnv();\n if (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 (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 (isArray(val)) {\n // @ts-expect-error -- type can't be narrowed\n decryptedConfig[key] = [];\n for (const [index, item] of val.entries()) {\n if (isObject(item) && !isArray(item)) {\n const path = `${existingPath}.${key}[${index}]`;\n // @ts-expect-error -- type can't be narrowed\n (decryptedConfig[key] as RenovateConfig[]).push(\n await decryptConfig(item as RenovateConfig, repository, path),\n );\n } else {\n // @ts-expect-error -- type can't be narrowed\n (decryptedConfig[key] as unknown[]).push(item);\n }\n }\n } else if (isObject(val) && key !== 'content') {\n const path = `${existingPath}.${key}`;\n // @ts-expect-error -- type can't be narrowed\n decryptedConfig[key] = await decryptConfig(\n val as RenovateConfig,\n repository,\n path,\n );\n }\n }\n delete decryptedConfig.encrypted;\n logger.trace({ config: decryptedConfig }, 'decryptedConfig');\n return decryptedConfig;\n}\n\nexport function getAzureCollection(): string | undefined {\n const platform = GlobalConfig.get('platform');\n if (platform !== 'azure') {\n return undefined;\n }\n\n const endpoint = GlobalConfig.get('endpoint');\n const endpointUrl = parseUrl(endpoint);\n if (endpointUrl === null) {\n // should not happen\n logger.warn({ endpoint }, 'Unable to parse endpoint for token decryption');\n return undefined;\n }\n\n const azureCollection = trimSlashes(endpointUrl.pathname);\n if (!isNonEmptyString(azureCollection)) {\n logger.debug({ endpoint }, 'Unable to find azure collection name from URL');\n return undefined;\n }\n\n if (azureCollection.startsWith('tfs/')) {\n // Azure DevOps Server\n return azureCollection.substring(4);\n }\n return azureCollection;\n}\n"]}
@@ -65,6 +65,7 @@ function migrateConfig(config, parentKey) {
65
65
  }
66
66
  else if ((0, is_1.isArray)(val)) {
67
67
  // @ts-expect-error -- TODO: fix me
68
+ // v8 ignore else -- TODO: add test #40625
68
69
  if ((0, is_1.isArray)(migratedConfig?.[key])) {
69
70
  const newArray = [];
70
71
  // @ts-expect-error -- TODO: fix me
@@ -178,6 +179,7 @@ function migrateConfig(config, parentKey) {
178
179
  // @ts-expect-error -- TODO: fix me
179
180
  if (migratedConfig.matchManagers.includes('gradle-lite')) {
180
181
  // @ts-expect-error -- TODO: fix me
182
+ // v8 ignore else -- TODO: add test #40625
181
183
  if (!migratedConfig.matchManagers.includes('gradle')) {
182
184
  // @ts-expect-error -- TODO: fix me
183
185
  migratedConfig.matchManagers.push('gradle');
@@ -1 +1 @@
1
- {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../lib/config/migration.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isArray,\n isBoolean,\n isNonEmptyArray,\n isNonEmptyObject,\n isObject,\n isString,\n} 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 (isString(val) && val.includes('{{baseDir}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{baseDir}}/g),\n '{{packageFileDir}}',\n );\n } else if (isString(val) && val.includes('{{lookupName}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{lookupName}}/g),\n '{{packageName}}',\n );\n } else if (isString(val) && val.includes('{{depNameShort}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{depNameShort}}/g),\n '{{depName}}',\n );\n } else if (isString(val) && val.startsWith('{{semanticPrefix}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n '{{semanticPrefix}}',\n '{{#if semanticCommitType}}{{semanticCommitType}}{{#if semanticCommitScope}}({{semanticCommitScope}}){{/if}}: {{/if}}',\n );\n } else if (optionTypes[key] === 'object' && isBoolean(val)) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = { enabled: val };\n } else if (optionTypes[key] === 'boolean') {\n if (val === 'true') {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = true;\n } else if (val === 'false') {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = false;\n }\n } else if (\n optionTypes[key] === 'string' &&\n isArray(val) &&\n val.length === 1\n ) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = String(val[0]);\n } else if (isArray(val)) {\n // @ts-expect-error -- TODO: fix me\n if (isArray(migratedConfig?.[key])) {\n const newArray = [];\n // @ts-expect-error -- TODO: fix me\n for (const item of migratedConfig[key]) {\n if (isObject(item) && !isArray(item)) {\n const arrMigrate = migrateConfig(item as RenovateConfig);\n newArray.push(arrMigrate.migratedConfig);\n } else {\n newArray.push(item);\n }\n }\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = newArray;\n }\n } else if (isObject(val)) {\n const subMigrate = migrateConfig(\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] as RenovateConfig,\n key,\n );\n if (subMigrate.isMigrated) {\n // @ts-expect-error -- TODO: fix me\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 // @ts-expect-error -- TODO: fix me\n if (isString(migratedConfig[key])) {\n for (const [from, to] of Object.entries(migratedTemplates)) {\n // @ts-expect-error -- TODO: fix me\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 // @ts-expect-error -- TODO: fix me\n if (isNonEmptyObject(migratedConfig[language])) {\n migratedConfig.packageRules ??= [];\n // @ts-expect-error -- TODO: fix me\n const currentContent = migratedConfig[language] as any;\n const packageRule = {\n matchCategories: [language],\n ...currentContent,\n };\n migratedConfig.packageRules.unshift(packageRule);\n // @ts-expect-error -- TODO: fix me\n delete migratedConfig[language];\n }\n }\n // Migrate nested packageRules\n if (isNonEmptyArray(migratedConfig.packageRules)) {\n const existingRules = migratedConfig.packageRules;\n migratedConfig.packageRules = [];\n for (const packageRule of existingRules) {\n // @ts-expect-error -- TODO: fix me\n if (isArray(packageRule.packageRules)) {\n logger.debug('Flattening nested packageRules');\n // merge each subrule and add to the parent list\n // @ts-expect-error -- TODO: fix me\n for (const subrule of packageRule.packageRules) {\n // TODO: fix types #22198\n const combinedRule = mergeChildConfig(\n packageRule,\n subrule as PackageRule,\n );\n // @ts-expect-error -- TODO: fix me\n delete combinedRule.packageRules;\n migratedConfig.packageRules.push(combinedRule);\n }\n } else {\n migratedConfig.packageRules.push(packageRule);\n }\n }\n }\n if (\n // @ts-expect-error -- TODO: fix me\n isNonEmptyObject(migratedConfig['pip-compile']) &&\n // @ts-expect-error -- TODO: fix me\n isNonEmptyArray(migratedConfig['pip-compile'].managerFilePatterns)\n ) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig['pip-compile'].managerFilePatterns = migratedConfig[\n 'pip-compile'\n ].managerFilePatterns.map((filePattern) => {\n const pattern = filePattern as string;\n if (pattern.endsWith('.in')) {\n return pattern.replace(/\\.in$/, '.txt');\n }\n if (pattern.endsWith('.in/')) {\n return pattern.replace(/\\.in\\/$/, '.txt/');\n }\n return pattern.replace(/\\.in\\$\\/$/, '.txt$/');\n });\n }\n // @ts-expect-error -- TODO: fix me\n if (isNonEmptyArray(migratedConfig.matchManagers)) {\n // @ts-expect-error -- TODO: fix me\n if (migratedConfig.matchManagers.includes('gradle-lite')) {\n // @ts-expect-error -- TODO: fix me\n if (!migratedConfig.matchManagers.includes('gradle')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers.push('gradle');\n }\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers = migratedConfig.matchManagers.filter(\n // @ts-expect-error -- TODO: fix me\n (manager) => manager !== 'gradle-lite',\n );\n }\n }\n // @ts-expect-error -- TODO: fix me\n if (isNonEmptyObject(migratedConfig['gradle-lite'])) {\n migratedConfig.gradle = mergeChildConfig(\n migratedConfig.gradle ?? {},\n // @ts-expect-error -- TODO: fix me\n migratedConfig['gradle-lite'],\n );\n }\n // @ts-expect-error -- TODO: fix me\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) {\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 {\n isArray,\n isBoolean,\n isNonEmptyArray,\n isNonEmptyObject,\n isObject,\n isString,\n} 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 (isString(val) && val.includes('{{baseDir}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{baseDir}}/g),\n '{{packageFileDir}}',\n );\n } else if (isString(val) && val.includes('{{lookupName}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{lookupName}}/g),\n '{{packageName}}',\n );\n } else if (isString(val) && val.includes('{{depNameShort}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{depNameShort}}/g),\n '{{depName}}',\n );\n } else if (isString(val) && val.startsWith('{{semanticPrefix}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n '{{semanticPrefix}}',\n '{{#if semanticCommitType}}{{semanticCommitType}}{{#if semanticCommitScope}}({{semanticCommitScope}}){{/if}}: {{/if}}',\n );\n } else if (optionTypes[key] === 'object' && isBoolean(val)) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = { enabled: val };\n } else if (optionTypes[key] === 'boolean') {\n if (val === 'true') {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = true;\n } else if (val === 'false') {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = false;\n }\n } else if (\n optionTypes[key] === 'string' &&\n isArray(val) &&\n val.length === 1\n ) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = String(val[0]);\n } else if (isArray(val)) {\n // @ts-expect-error -- TODO: fix me\n // v8 ignore else -- TODO: add test #40625\n if (isArray(migratedConfig?.[key])) {\n const newArray = [];\n // @ts-expect-error -- TODO: fix me\n for (const item of migratedConfig[key]) {\n if (isObject(item) && !isArray(item)) {\n const arrMigrate = migrateConfig(item as RenovateConfig);\n newArray.push(arrMigrate.migratedConfig);\n } else {\n newArray.push(item);\n }\n }\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = newArray;\n }\n } else if (isObject(val)) {\n const subMigrate = migrateConfig(\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] as RenovateConfig,\n key,\n );\n if (subMigrate.isMigrated) {\n // @ts-expect-error -- TODO: fix me\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 // @ts-expect-error -- TODO: fix me\n if (isString(migratedConfig[key])) {\n for (const [from, to] of Object.entries(migratedTemplates)) {\n // @ts-expect-error -- TODO: fix me\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 // @ts-expect-error -- TODO: fix me\n if (isNonEmptyObject(migratedConfig[language])) {\n migratedConfig.packageRules ??= [];\n // @ts-expect-error -- TODO: fix me\n const currentContent = migratedConfig[language] as any;\n const packageRule = {\n matchCategories: [language],\n ...currentContent,\n };\n migratedConfig.packageRules.unshift(packageRule);\n // @ts-expect-error -- TODO: fix me\n delete migratedConfig[language];\n }\n }\n // Migrate nested packageRules\n if (isNonEmptyArray(migratedConfig.packageRules)) {\n const existingRules = migratedConfig.packageRules;\n migratedConfig.packageRules = [];\n for (const packageRule of existingRules) {\n // @ts-expect-error -- TODO: fix me\n if (isArray(packageRule.packageRules)) {\n logger.debug('Flattening nested packageRules');\n // merge each subrule and add to the parent list\n // @ts-expect-error -- TODO: fix me\n for (const subrule of packageRule.packageRules) {\n // TODO: fix types #22198\n const combinedRule = mergeChildConfig(\n packageRule,\n subrule as PackageRule,\n );\n // @ts-expect-error -- TODO: fix me\n delete combinedRule.packageRules;\n migratedConfig.packageRules.push(combinedRule);\n }\n } else {\n migratedConfig.packageRules.push(packageRule);\n }\n }\n }\n if (\n // @ts-expect-error -- TODO: fix me\n isNonEmptyObject(migratedConfig['pip-compile']) &&\n // @ts-expect-error -- TODO: fix me\n isNonEmptyArray(migratedConfig['pip-compile'].managerFilePatterns)\n ) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig['pip-compile'].managerFilePatterns = migratedConfig[\n 'pip-compile'\n ].managerFilePatterns.map((filePattern) => {\n const pattern = filePattern as string;\n if (pattern.endsWith('.in')) {\n return pattern.replace(/\\.in$/, '.txt');\n }\n if (pattern.endsWith('.in/')) {\n return pattern.replace(/\\.in\\/$/, '.txt/');\n }\n return pattern.replace(/\\.in\\$\\/$/, '.txt$/');\n });\n }\n // @ts-expect-error -- TODO: fix me\n if (isNonEmptyArray(migratedConfig.matchManagers)) {\n // @ts-expect-error -- TODO: fix me\n if (migratedConfig.matchManagers.includes('gradle-lite')) {\n // @ts-expect-error -- TODO: fix me\n // v8 ignore else -- TODO: add test #40625\n if (!migratedConfig.matchManagers.includes('gradle')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers.push('gradle');\n }\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers = migratedConfig.matchManagers.filter(\n // @ts-expect-error -- TODO: fix me\n (manager) => manager !== 'gradle-lite',\n );\n }\n }\n // @ts-expect-error -- TODO: fix me\n if (isNonEmptyObject(migratedConfig['gradle-lite'])) {\n migratedConfig.gradle = mergeChildConfig(\n migratedConfig.gradle ?? {},\n // @ts-expect-error -- TODO: fix me\n migratedConfig['gradle-lite'],\n );\n }\n // @ts-expect-error -- TODO: fix me\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) {\n logger.debug({ config, err }, 'migrateConfig() error');\n throw err;\n }\n}\n"]}
@@ -6,6 +6,7 @@ const abstract_migration_1 = require("../base/abstract-migration");
6
6
  class CustomManagersMigration extends abstract_migration_1.AbstractMigration {
7
7
  propertyName = 'customManagers';
8
8
  run(value) {
9
+ // v8 ignore else -- TODO: add test #40625
9
10
  if ((0, is_1.isNonEmptyArray)(value)) {
10
11
  const customManagers = value.map((mgr) => {
11
12
  if (mgr.customType) {
@@ -1 +1 @@
1
- {"version":3,"file":"custom-managers-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/custom-managers-migration.ts"],"names":[],"mappings":";;;AAAA,yCAAmD;AAEnD,mEAA+D;AAE/D,MAAa,uBAAwB,SAAQ,sCAAiB;IAC1C,YAAY,GAAG,gBAAgB,CAAC;IAEzC,GAAG,CAAC,KAAc;QACzB,IAAI,IAAA,oBAAe,EAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,cAAc,GAAI,KAAyB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC5D,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;oBACnB,OAAO,GAAG,CAAC;gBACb,CAAC;gBACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,6EAA6E;YACnI,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;CACF;AAfD,0DAeC","sourcesContent":["import { isNonEmptyArray } from '@sindresorhus/is';\nimport type { CustomManager } from '../../../modules/manager/custom/types';\nimport { AbstractMigration } from '../base/abstract-migration';\n\nexport class CustomManagersMigration extends AbstractMigration {\n override readonly propertyName = 'customManagers';\n\n override run(value: unknown): void {\n if (isNonEmptyArray(value)) {\n const customManagers = (value as CustomManager[]).map((mgr) => {\n if (mgr.customType) {\n return mgr;\n }\n return Object.assign({ customType: 'regex' }, mgr); // to make sure customType is at top, looks good when migration PR is created\n });\n\n this.rewrite(customManagers);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"custom-managers-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/custom-managers-migration.ts"],"names":[],"mappings":";;;AAAA,yCAAmD;AAEnD,mEAA+D;AAE/D,MAAa,uBAAwB,SAAQ,sCAAiB;IAC1C,YAAY,GAAG,gBAAgB,CAAC;IAEzC,GAAG,CAAC,KAAc;QACzB,0CAA0C;QAC1C,IAAI,IAAA,oBAAe,EAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,cAAc,GAAI,KAAyB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC5D,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;oBACnB,OAAO,GAAG,CAAC;gBACb,CAAC;gBACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,6EAA6E;YACnI,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;CACF;AAhBD,0DAgBC","sourcesContent":["import { isNonEmptyArray } from '@sindresorhus/is';\nimport type { CustomManager } from '../../../modules/manager/custom/types';\nimport { AbstractMigration } from '../base/abstract-migration';\n\nexport class CustomManagersMigration extends AbstractMigration {\n override readonly propertyName = 'customManagers';\n\n override run(value: unknown): void {\n // v8 ignore else -- TODO: add test #40625\n if (isNonEmptyArray(value)) {\n const customManagers = (value as CustomManager[]).map((mgr) => {\n if (mgr.customType) {\n return mgr;\n }\n return Object.assign({ customType: 'regex' }, mgr); // to make sure customType is at top, looks good when migration PR is created\n });\n\n this.rewrite(customManagers);\n }\n }\n}\n"]}
@@ -7,6 +7,7 @@ const abstract_migration_1 = require("../base/abstract-migration");
7
7
  class DatasourceMigration extends abstract_migration_1.AbstractMigration {
8
8
  propertyName = 'datasource';
9
9
  run(value) {
10
+ // v8 ignore else -- TODO: add test #40625
10
11
  if ((0, is_1.isString)(value)) {
11
12
  const newValue = migrateDatasource(value);
12
13
  this.rewrite(newValue);
@@ -1 +1 @@
1
- {"version":3,"file":"datasource-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/datasource-migration.ts"],"names":[],"mappings":";;;AAcA,8CAUC;AAxBD,yCAA4C;AAC5C,mEAA+D;AAE/D,MAAa,mBAAoB,SAAQ,sCAAiB;IACtC,YAAY,GAAG,YAAY,CAAC;IAErC,GAAG,CAAC,KAAc;QACzB,IAAI,IAAA,aAAQ,EAAC,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AATD,kDASC;AAED,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,eAAe;YAClB,OAAO,cAAc,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO,gBAAgB,CAAC;QAC1B,KAAK,MAAM;YACT,OAAO,cAAc,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { AbstractMigration } from '../base/abstract-migration';\n\nexport class DatasourceMigration extends AbstractMigration {\n override readonly propertyName = 'datasource';\n\n override run(value: unknown): void {\n if (isString(value)) {\n const newValue = migrateDatasource(value);\n this.rewrite(newValue);\n }\n }\n}\n\nexport function migrateDatasource(value: string): string {\n switch (value) {\n case 'adoptium-java':\n return 'java-version';\n case 'dotnet':\n return 'dotnet-version';\n case 'node':\n return 'node-version';\n }\n return value;\n}\n"]}
1
+ {"version":3,"file":"datasource-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/datasource-migration.ts"],"names":[],"mappings":";;;AAeA,8CAUC;AAzBD,yCAA4C;AAC5C,mEAA+D;AAE/D,MAAa,mBAAoB,SAAQ,sCAAiB;IACtC,YAAY,GAAG,YAAY,CAAC;IAErC,GAAG,CAAC,KAAc;QACzB,0CAA0C;QAC1C,IAAI,IAAA,aAAQ,EAAC,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AAVD,kDAUC;AAED,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,eAAe;YAClB,OAAO,cAAc,CAAC;QACxB,KAAK,QAAQ;YACX,OAAO,gBAAgB,CAAC;QAC1B,KAAK,MAAM;YACT,OAAO,cAAc,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { AbstractMigration } from '../base/abstract-migration';\n\nexport class DatasourceMigration extends AbstractMigration {\n override readonly propertyName = 'datasource';\n\n override run(value: unknown): void {\n // v8 ignore else -- TODO: add test #40625\n if (isString(value)) {\n const newValue = migrateDatasource(value);\n this.rewrite(newValue);\n }\n }\n}\n\nexport function migrateDatasource(value: string): string {\n switch (value) {\n case 'adoptium-java':\n return 'java-version';\n case 'dotnet':\n return 'dotnet-version';\n case 'node':\n return 'node-version';\n }\n return value;\n}\n"]}
@@ -7,6 +7,7 @@ class FileMatchMigration extends abstract_migration_1.AbstractMigration {
7
7
  deprecated = true;
8
8
  propertyName = 'fileMatch';
9
9
  run(value) {
10
+ // v8 ignore else -- TODO: add test #40625
10
11
  if ((0, is_1.isString)(value) || (0, is_1.isArray)(value, is_1.isString)) {
11
12
  const fileMatch = (0, is_1.isArray)(value) ? value : [value];
12
13
  let managerFilePatterns = this.get('managerFilePatterns') ?? [];
@@ -1 +1 @@
1
- {"version":3,"file":"file-match-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/file-match-migration.ts"],"names":[],"mappings":";;;AAAA,yCAAqD;AACrD,mEAA+D;AAE/D,MAAa,kBAAmB,SAAQ,sCAAiB;IACrC,UAAU,GAAG,IAAI,CAAC;IAClB,YAAY,GAAG,WAAW,CAAC;IAEpC,GAAG,CAAC,KAAc;QACzB,IAAI,IAAA,aAAQ,EAAC,KAAK,CAAC,IAAI,IAAA,YAAO,EAAC,KAAK,EAAE,aAAQ,CAAC,EAAE,CAAC;YAChD,MAAM,SAAS,GAAG,IAAA,YAAO,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAEnD,IAAI,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;YAChE,mBAAmB,GAAG,mBAAmB,CAAC,MAAM,CAC9C,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CACvC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF;AAhBD,gDAgBC","sourcesContent":["import { isArray, isString } from '@sindresorhus/is';\nimport { AbstractMigration } from '../base/abstract-migration';\n\nexport class FileMatchMigration extends AbstractMigration {\n override readonly deprecated = true;\n override readonly propertyName = 'fileMatch';\n\n override run(value: unknown): void {\n if (isString(value) || isArray(value, isString)) {\n const fileMatch = isArray(value) ? value : [value];\n\n let managerFilePatterns = this.get('managerFilePatterns') ?? [];\n managerFilePatterns = managerFilePatterns.concat(\n fileMatch.map((match) => `/${match}/`),\n );\n\n this.setHard('managerFilePatterns', managerFilePatterns);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"file-match-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/file-match-migration.ts"],"names":[],"mappings":";;;AAAA,yCAAqD;AACrD,mEAA+D;AAE/D,MAAa,kBAAmB,SAAQ,sCAAiB;IACrC,UAAU,GAAG,IAAI,CAAC;IAClB,YAAY,GAAG,WAAW,CAAC;IAEpC,GAAG,CAAC,KAAc;QACzB,0CAA0C;QAC1C,IAAI,IAAA,aAAQ,EAAC,KAAK,CAAC,IAAI,IAAA,YAAO,EAAC,KAAK,EAAE,aAAQ,CAAC,EAAE,CAAC;YAChD,MAAM,SAAS,GAAG,IAAA,YAAO,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAEnD,IAAI,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;YAChE,mBAAmB,GAAG,mBAAmB,CAAC,MAAM,CAC9C,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CACvC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF;AAjBD,gDAiBC","sourcesContent":["import { isArray, isString } from '@sindresorhus/is';\nimport { AbstractMigration } from '../base/abstract-migration';\n\nexport class FileMatchMigration extends AbstractMigration {\n override readonly deprecated = true;\n override readonly propertyName = 'fileMatch';\n\n override run(value: unknown): void {\n // v8 ignore else -- TODO: add test #40625\n if (isString(value) || isArray(value, isString)) {\n const fileMatch = isArray(value) ? value : [value];\n\n let managerFilePatterns = this.get('managerFilePatterns') ?? [];\n managerFilePatterns = managerFilePatterns.concat(\n fileMatch.map((match) => `/${match}/`),\n );\n\n this.setHard('managerFilePatterns', managerFilePatterns);\n }\n }\n}\n"]}
@@ -16,18 +16,21 @@ class HostRulesMigration extends abstract_migration_1.AbstractMigration {
16
16
  const newRule = {};
17
17
  for (const [key, value] of Object.entries(hostRule)) {
18
18
  if (key === 'platform') {
19
+ // v8 ignore else -- TODO: add test #40625
19
20
  if ((0, is_1.isString)(value)) {
20
21
  newRule.hostType ??= value;
21
22
  }
22
23
  continue;
23
24
  }
24
25
  if (key === 'matchHost') {
26
+ // v8 ignore else -- TODO: add test #40625
25
27
  if ((0, is_1.isString)(value)) {
26
28
  newRule.matchHost ??= (0, url_1.massageHostUrl)(value);
27
29
  }
28
30
  continue;
29
31
  }
30
32
  if (key === 'hostType') {
33
+ // v8 ignore else -- TODO: add test #40625
31
34
  if ((0, is_1.isString)(value)) {
32
35
  newRule.hostType ??= (0, datasource_migration_1.migrateDatasource)(value);
33
36
  }
@@ -38,6 +41,7 @@ class HostRulesMigration extends abstract_migration_1.AbstractMigration {
38
41
  key === 'baseUrl' ||
39
42
  key === 'hostName' ||
40
43
  key === 'domainName') {
44
+ // v8 ignore else -- TODO: add test #40625
41
45
  if ((0, is_1.isString)(value)) {
42
46
  newRule.matchHost ??= (0, url_1.massageHostUrl)(value);
43
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"host-rules-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/host-rules-migration.ts"],"names":[],"mappings":"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","sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport type { HostRule } from '../../../types';\nimport type { LegacyHostRule } from '../../../util/host-rules';\nimport { massageHostUrl } from '../../../util/url';\nimport { AbstractMigration } from '../base/abstract-migration';\nimport { migrateDatasource } from './datasource-migration';\n\nexport class HostRulesMigration extends AbstractMigration {\n override readonly propertyName = 'hostRules';\n\n override run(value: (LegacyHostRule & HostRule)[]): void {\n const newHostRules: HostRule[] = [];\n for (const hostRule of value) {\n validateHostRule(hostRule);\n const newRule: any = {};\n\n for (const [key, value] of Object.entries(hostRule)) {\n if (key === 'platform') {\n if (isString(value)) {\n newRule.hostType ??= value;\n }\n continue;\n }\n\n if (key === 'matchHost') {\n if (isString(value)) {\n newRule.matchHost ??= massageHostUrl(value);\n }\n continue;\n }\n\n if (key === 'hostType') {\n if (isString(value)) {\n newRule.hostType ??= migrateDatasource(value);\n }\n continue;\n }\n\n if (\n key === 'endpoint' ||\n key === 'host' ||\n key === 'baseUrl' ||\n key === 'hostName' ||\n key === 'domainName'\n ) {\n if (isString(value)) {\n newRule.matchHost ??= massageHostUrl(value);\n }\n continue;\n }\n\n newRule[key] = value;\n }\n\n newHostRules.push(newRule);\n }\n\n this.rewrite(newHostRules);\n }\n}\n\nfunction validateHostRule(rule: LegacyHostRule & HostRule): void {\n const { matchHost, hostName, domainName, baseUrl, endpoint, host } = rule;\n const hosts: Record<string, string> = removeUndefinedFields({\n matchHost,\n hostName,\n domainName,\n baseUrl,\n endpoint,\n host,\n });\n\n if (Object.keys(hosts).length > 1) {\n const distinctHostValues = new Set(Object.values(hosts));\n // check if the host values are duplicated\n if (distinctHostValues.size > 1) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'config';\n error.validationMessage =\n '`hostRules` cannot contain more than one host-matching field - use `matchHost` only.';\n error.validationError =\n 'The renovate configuration file contains some invalid settings';\n throw error;\n } else {\n logger.warn(\n { hosts },\n 'Duplicate host values found, please only use `matchHost` to specify the host',\n );\n }\n }\n}\n\nfunction removeUndefinedFields(\n obj: Record<string, any>,\n): Record<string, string> {\n const result: Record<string, string> = {};\n for (const key of Object.keys(obj)) {\n if (isString(obj[key])) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n"]}
1
+ {"version":3,"file":"host-rules-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/host-rules-migration.ts"],"names":[],"mappings":"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","sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport type { HostRule } from '../../../types';\nimport type { LegacyHostRule } from '../../../util/host-rules';\nimport { massageHostUrl } from '../../../util/url';\nimport { AbstractMigration } from '../base/abstract-migration';\nimport { migrateDatasource } from './datasource-migration';\n\nexport class HostRulesMigration extends AbstractMigration {\n override readonly propertyName = 'hostRules';\n\n override run(value: (LegacyHostRule & HostRule)[]): void {\n const newHostRules: HostRule[] = [];\n for (const hostRule of value) {\n validateHostRule(hostRule);\n const newRule: any = {};\n\n for (const [key, value] of Object.entries(hostRule)) {\n if (key === 'platform') {\n // v8 ignore else -- TODO: add test #40625\n if (isString(value)) {\n newRule.hostType ??= value;\n }\n continue;\n }\n\n if (key === 'matchHost') {\n // v8 ignore else -- TODO: add test #40625\n if (isString(value)) {\n newRule.matchHost ??= massageHostUrl(value);\n }\n continue;\n }\n\n if (key === 'hostType') {\n // v8 ignore else -- TODO: add test #40625\n if (isString(value)) {\n newRule.hostType ??= migrateDatasource(value);\n }\n continue;\n }\n\n if (\n key === 'endpoint' ||\n key === 'host' ||\n key === 'baseUrl' ||\n key === 'hostName' ||\n key === 'domainName'\n ) {\n // v8 ignore else -- TODO: add test #40625\n if (isString(value)) {\n newRule.matchHost ??= massageHostUrl(value);\n }\n continue;\n }\n\n newRule[key] = value;\n }\n\n newHostRules.push(newRule);\n }\n\n this.rewrite(newHostRules);\n }\n}\n\nfunction validateHostRule(rule: LegacyHostRule & HostRule): void {\n const { matchHost, hostName, domainName, baseUrl, endpoint, host } = rule;\n const hosts: Record<string, string> = removeUndefinedFields({\n matchHost,\n hostName,\n domainName,\n baseUrl,\n endpoint,\n host,\n });\n\n if (Object.keys(hosts).length > 1) {\n const distinctHostValues = new Set(Object.values(hosts));\n // check if the host values are duplicated\n if (distinctHostValues.size > 1) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'config';\n error.validationMessage =\n '`hostRules` cannot contain more than one host-matching field - use `matchHost` only.';\n error.validationError =\n 'The renovate configuration file contains some invalid settings';\n throw error;\n } else {\n logger.warn(\n { hosts },\n 'Duplicate host values found, please only use `matchHost` to specify the host',\n );\n }\n }\n}\n\nfunction removeUndefinedFields(\n obj: Record<string, any>,\n): Record<string, string> {\n const result: Record<string, string> = {};\n for (const key of Object.keys(obj)) {\n if (isString(obj[key])) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n"]}
@@ -6,6 +6,7 @@ const abstract_migration_1 = require("../base/abstract-migration");
6
6
  class MatchDatasourcesMigration extends abstract_migration_1.AbstractMigration {
7
7
  propertyName = 'matchDatasources';
8
8
  run(value) {
9
+ // v8 ignore else -- TODO: add test #40625
9
10
  if (Array.isArray(value)) {
10
11
  const newValue = value.filter(is_1.isNonEmptyString).map((datasource) => {
11
12
  switch (datasource) {
@@ -1 +1 @@
1
- {"version":3,"file":"match-datasources-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/match-datasources-migration.ts"],"names":[],"mappings":";;;AAAA,yCAAoD;AACpD,mEAA+D;AAE/D,MAAa,yBAA0B,SAAQ,sCAAiB;IAC5C,YAAY,GAAG,kBAAkB,CAAC;IAE3C,GAAG,CAAC,KAAc;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,qBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;gBACjE,QAAQ,UAAU,EAAE,CAAC;oBACnB,KAAK,eAAe;wBAClB,OAAO,cAAc,CAAC;oBACxB,KAAK,QAAQ;wBACX,OAAO,gBAAgB,CAAC;oBAC1B,KAAK,MAAM;wBACT,OAAO,cAAc,CAAC;oBACxB;wBACE,OAAO,UAAU,CAAC;gBACtB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AArBD,8DAqBC","sourcesContent":["import { isNonEmptyString } from '@sindresorhus/is';\nimport { AbstractMigration } from '../base/abstract-migration';\n\nexport class MatchDatasourcesMigration extends AbstractMigration {\n override readonly propertyName = 'matchDatasources';\n\n override run(value: unknown): void {\n if (Array.isArray(value)) {\n const newValue = value.filter(isNonEmptyString).map((datasource) => {\n switch (datasource) {\n case 'adoptium-java':\n return 'java-version';\n case 'dotnet':\n return 'dotnet-version';\n case 'node':\n return 'node-version';\n default:\n return datasource;\n }\n });\n\n this.rewrite(newValue);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"match-datasources-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/match-datasources-migration.ts"],"names":[],"mappings":";;;AAAA,yCAAoD;AACpD,mEAA+D;AAE/D,MAAa,yBAA0B,SAAQ,sCAAiB;IAC5C,YAAY,GAAG,kBAAkB,CAAC;IAE3C,GAAG,CAAC,KAAc;QACzB,0CAA0C;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,qBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;gBACjE,QAAQ,UAAU,EAAE,CAAC;oBACnB,KAAK,eAAe;wBAClB,OAAO,cAAc,CAAC;oBACxB,KAAK,QAAQ;wBACX,OAAO,gBAAgB,CAAC;oBAC1B,KAAK,MAAM;wBACT,OAAO,cAAc,CAAC;oBACxB;wBACE,OAAO,UAAU,CAAC;gBACtB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AAtBD,8DAsBC","sourcesContent":["import { isNonEmptyString } from '@sindresorhus/is';\nimport { AbstractMigration } from '../base/abstract-migration';\n\nexport class MatchDatasourcesMigration extends AbstractMigration {\n override readonly propertyName = 'matchDatasources';\n\n override run(value: unknown): void {\n // v8 ignore else -- TODO: add test #40625\n if (Array.isArray(value)) {\n const newValue = value.filter(isNonEmptyString).map((datasource) => {\n switch (datasource) {\n case 'adoptium-java':\n return 'java-version';\n case 'dotnet':\n return 'dotnet-version';\n case 'node':\n return 'node-version';\n default:\n return datasource;\n }\n });\n\n this.rewrite(newValue);\n }\n }\n}\n"]}
@@ -7,6 +7,7 @@ const abstract_migration_1 = require("../base/abstract-migration");
7
7
  class MatchStringsMigration extends abstract_migration_1.AbstractMigration {
8
8
  propertyName = 'matchStrings';
9
9
  run(value) {
10
+ // v8 ignore else -- TODO: add test #40625
10
11
  if (Array.isArray(value)) {
11
12
  const newValue = value
12
13
  .filter(is_1.isNonEmptyString)
@@ -1 +1 @@
1
- {"version":3,"file":"match-strings-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/match-strings-migration.ts"],"names":[],"mappings":";;;AAAA,yCAAoD;AACpD,+CAA4C;AAC5C,mEAA+D;AAE/D,MAAa,qBAAsB,SAAQ,sCAAiB;IACxC,YAAY,GAAG,cAAc,CAAC;IAEvC,GAAG,CAAC,KAAc;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,KAAK;iBACnB,MAAM,CAAC,qBAAgB,CAAC;iBACxB,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CACnB,WAAW,CAAC,OAAO,CAAC,IAAA,aAAK,EAAC,mBAAmB,CAAC,EAAE,iBAAiB,CAAC,CACnE,CAAC;YAEJ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AAdD,sDAcC","sourcesContent":["import { isNonEmptyString } from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex';\nimport { AbstractMigration } from '../base/abstract-migration';\n\nexport class MatchStringsMigration extends AbstractMigration {\n override readonly propertyName = 'matchStrings';\n\n override run(value: unknown): void {\n if (Array.isArray(value)) {\n const newValue = value\n .filter(isNonEmptyString)\n .map((matchString) =>\n matchString.replace(regEx(/\\(\\?<lookupName>/g), '(?<packageName>'),\n );\n\n this.rewrite(newValue);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"match-strings-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/match-strings-migration.ts"],"names":[],"mappings":";;;AAAA,yCAAoD;AACpD,+CAA4C;AAC5C,mEAA+D;AAE/D,MAAa,qBAAsB,SAAQ,sCAAiB;IACxC,YAAY,GAAG,cAAc,CAAC;IAEvC,GAAG,CAAC,KAAc;QACzB,0CAA0C;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,KAAK;iBACnB,MAAM,CAAC,qBAAgB,CAAC;iBACxB,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CACnB,WAAW,CAAC,OAAO,CAAC,IAAA,aAAK,EAAC,mBAAmB,CAAC,EAAE,iBAAiB,CAAC,CACnE,CAAC;YAEJ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AAfD,sDAeC","sourcesContent":["import { isNonEmptyString } from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex';\nimport { AbstractMigration } from '../base/abstract-migration';\n\nexport class MatchStringsMigration extends AbstractMigration {\n override readonly propertyName = 'matchStrings';\n\n override run(value: unknown): void {\n // v8 ignore else -- TODO: add test #40625\n if (Array.isArray(value)) {\n const newValue = value\n .filter(isNonEmptyString)\n .map((matchString) =>\n matchString.replace(regEx(/\\(\\?<lookupName>/g), '(?<packageName>'),\n );\n\n this.rewrite(newValue);\n }\n }\n}\n"]}
@@ -6,6 +6,7 @@ class NodeMigration extends abstract_migration_1.AbstractMigration {
6
6
  propertyName = 'node';
7
7
  run(value) {
8
8
  const node = this.get('node');
9
+ // v8 ignore else -- TODO: add test #40625
9
10
  if (value.enabled === true) {
10
11
  // validated non-null
11
12
  delete node.enabled;
@@ -1 +1 @@
1
- {"version":3,"file":"node-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/node-migration.ts"],"names":[],"mappings":";;;AACA,mEAA+D;AAE/D,MAAa,aAAc,SAAQ,sCAAiB;IAChC,YAAY,GAAG,MAAM,CAAC;IAE/B,GAAG,CAAC,KAAc;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QAC/B,IAAK,KAAwB,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC/C,qBAAqB;YACrB,OAAO,IAAI,CAAC,OAAO,CAAC;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF;AAlBD,sCAkBC","sourcesContent":["import type { RenovateConfig } from '../../types';\nimport { AbstractMigration } from '../base/abstract-migration';\n\nexport class NodeMigration extends AbstractMigration {\n override readonly propertyName = 'node';\n\n override run(value: unknown): void {\n const node = this.get('node')!;\n if ((value as RenovateConfig).enabled === true) {\n // validated non-null\n delete node.enabled;\n const travis = this.get('travis') ?? {};\n travis.enabled = true;\n if (Object.keys(node).length) {\n this.rewrite(node);\n } else {\n this.delete('node');\n }\n this.setSafely('travis', travis);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"node-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/node-migration.ts"],"names":[],"mappings":";;;AACA,mEAA+D;AAE/D,MAAa,aAAc,SAAQ,sCAAiB;IAChC,YAAY,GAAG,MAAM,CAAC;IAE/B,GAAG,CAAC,KAAc;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QAC/B,0CAA0C;QAC1C,IAAK,KAAwB,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC/C,qBAAqB;YACrB,OAAO,IAAI,CAAC,OAAO,CAAC;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF;AAnBD,sCAmBC","sourcesContent":["import type { RenovateConfig } from '../../types';\nimport { AbstractMigration } from '../base/abstract-migration';\n\nexport class NodeMigration extends AbstractMigration {\n override readonly propertyName = 'node';\n\n override run(value: unknown): void {\n const node = this.get('node')!;\n // v8 ignore else -- TODO: add test #40625\n if ((value as RenovateConfig).enabled === true) {\n // validated non-null\n delete node.enabled;\n const travis = this.get('travis') ?? {};\n travis.enabled = true;\n if (Object.keys(node).length) {\n this.rewrite(node);\n } else {\n this.delete('node');\n }\n this.setSafely('travis', travis);\n }\n }\n}\n"]}
@@ -8,9 +8,11 @@ class PackageFilesMigration extends abstract_migration_1.AbstractMigration {
8
8
  propertyName = 'packageFiles';
9
9
  run(value) {
10
10
  const packageRules = this.get('packageRules') ?? [];
11
+ // v8 ignore else -- TODO: add test #40625
11
12
  if ((0, is_1.isArray)(value)) {
12
13
  const fileList = [];
13
14
  for (const packageFile of value) {
15
+ // v8 ignore else -- TODO: add test #40625
14
16
  if ((0, is_1.isNonEmptyObject)(packageFile) &&
15
17
  'packageFile' in packageFile &&
16
18
  (0, is_1.isString)(packageFile.packageFile)) {
@@ -1 +1 @@
1
- {"version":3,"file":"package-files-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/package-files-migration.ts"],"names":[],"mappings":";;;AAAA,yCAAuE;AAEvE,mEAA+D;AAE/D,MAAa,qBAAsB,SAAQ,sCAAiB;IACxC,UAAU,GAAG,IAAI,CAAC;IAClB,YAAY,GAAG,cAAc,CAAC;IAEvC,GAAG,CAAC,KAAc;QACzB,MAAM,YAAY,GAAkB,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QACnE,IAAI,IAAA,YAAO,EAAC,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,KAAK,MAAM,WAAW,IAAI,KAAK,EAAE,CAAC;gBAChC,IACE,IAAA,qBAAgB,EAAC,WAAW,CAAC;oBAC7B,aAAa,IAAI,WAAW;oBAC5B,IAAA,aAAQ,EAAC,WAAW,CAAC,WAAW,CAAC,EACjC,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;oBACvC,WAAW,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;oBAC9C,OAAO,WAAW,CAAC,WAAW,CAAC;oBAE/B,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACxC,YAAY,CAAC,IAAI,CAAC;4BAChB,GAAG,WAAW;yBACf,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;qBAAM,IAAI,IAAA,YAAO,EAAC,WAAW,EAAE,aAAQ,CAAC,EAAE,CAAC;oBAC1C,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;gBAChC,CAAC;qBAAM,IAAI,IAAA,aAAQ,EAAC,WAAW,CAAC,EAAE,CAAC;oBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;gBACxB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;CACF;AArCD,sDAqCC","sourcesContent":["import { isArray, isNonEmptyObject, isString } from '@sindresorhus/is';\nimport type { PackageRule } from '../../types';\nimport { AbstractMigration } from '../base/abstract-migration';\n\nexport class PackageFilesMigration extends AbstractMigration {\n override readonly deprecated = true;\n override readonly propertyName = 'packageFiles';\n\n override run(value: unknown): void {\n const packageRules: PackageRule[] = this.get('packageRules') ?? [];\n if (isArray(value)) {\n const fileList: string[] = [];\n for (const packageFile of value) {\n if (\n isNonEmptyObject(packageFile) &&\n 'packageFile' in packageFile &&\n isString(packageFile.packageFile)\n ) {\n fileList.push(packageFile.packageFile);\n packageFile.paths = [packageFile.packageFile];\n delete packageFile.packageFile;\n\n if (Object.keys(packageFile).length > 1) {\n packageRules.push({\n ...packageFile,\n });\n }\n } else if (isArray(packageFile, isString)) {\n fileList.push(...packageFile);\n } else if (isString(packageFile)) {\n fileList.push(packageFile);\n }\n }\n if (fileList.length) {\n this.setSafely('includePaths', fileList);\n }\n if (packageRules.length) {\n this.setSafely('packageRules', packageRules);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"package-files-migration.js","sourceRoot":"","sources":["../../../../lib/config/migrations/custom/package-files-migration.ts"],"names":[],"mappings":";;;AAAA,yCAAuE;AAEvE,mEAA+D;AAE/D,MAAa,qBAAsB,SAAQ,sCAAiB;IACxC,UAAU,GAAG,IAAI,CAAC;IAClB,YAAY,GAAG,cAAc,CAAC;IAEvC,GAAG,CAAC,KAAc;QACzB,MAAM,YAAY,GAAkB,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QACnE,0CAA0C;QAC1C,IAAI,IAAA,YAAO,EAAC,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,KAAK,MAAM,WAAW,IAAI,KAAK,EAAE,CAAC;gBAChC,0CAA0C;gBAC1C,IACE,IAAA,qBAAgB,EAAC,WAAW,CAAC;oBAC7B,aAAa,IAAI,WAAW;oBAC5B,IAAA,aAAQ,EAAC,WAAW,CAAC,WAAW,CAAC,EACjC,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;oBACvC,WAAW,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;oBAC9C,OAAO,WAAW,CAAC,WAAW,CAAC;oBAE/B,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACxC,YAAY,CAAC,IAAI,CAAC;4BAChB,GAAG,WAAW;yBACf,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;qBAAM,IAAI,IAAA,YAAO,EAAC,WAAW,EAAE,aAAQ,CAAC,EAAE,CAAC;oBAC1C,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;gBAChC,CAAC;qBAAM,IAAI,IAAA,aAAQ,EAAC,WAAW,CAAC,EAAE,CAAC;oBACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;gBACxB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAvCD,sDAuCC","sourcesContent":["import { isArray, isNonEmptyObject, isString } from '@sindresorhus/is';\nimport type { PackageRule } from '../../types';\nimport { AbstractMigration } from '../base/abstract-migration';\n\nexport class PackageFilesMigration extends AbstractMigration {\n override readonly deprecated = true;\n override readonly propertyName = 'packageFiles';\n\n override run(value: unknown): void {\n const packageRules: PackageRule[] = this.get('packageRules') ?? [];\n // v8 ignore else -- TODO: add test #40625\n if (isArray(value)) {\n const fileList: string[] = [];\n for (const packageFile of value) {\n // v8 ignore else -- TODO: add test #40625\n if (\n isNonEmptyObject(packageFile) &&\n 'packageFile' in packageFile &&\n isString(packageFile.packageFile)\n ) {\n fileList.push(packageFile.packageFile);\n packageFile.paths = [packageFile.packageFile];\n delete packageFile.packageFile;\n\n if (Object.keys(packageFile).length > 1) {\n packageRules.push({\n ...packageFile,\n });\n }\n } else if (isArray(packageFile, isString)) {\n fileList.push(...packageFile);\n } else if (isString(packageFile)) {\n fileList.push(packageFile);\n }\n }\n if (fileList.length) {\n this.setSafely('includePaths', fileList);\n }\n if (packageRules.length) {\n this.setSafely('packageRules', packageRules);\n }\n }\n }\n}\n"]}
@@ -32,6 +32,7 @@ function mergeMatchers(packageRule) {
32
32
  const patterns = (0, is_1.isString)(val) ? [val] : val;
33
33
  // depName
34
34
  if (key === 'matchDepPrefixes') {
35
+ // v8 ignore else -- TODO: add test #40625
35
36
  if ((0, is_1.isArray)(patterns, is_1.isString)) {
36
37
  newPackageRule.matchDepNames ??= [];
37
38
  newPackageRule.matchDepNames.push(...patterns.map((v) => `${v}{/,}**`));
@@ -40,6 +41,7 @@ function mergeMatchers(packageRule) {
40
41
  delete newPackageRule.matchDepPrefixes;
41
42
  }
42
43
  if (key === 'matchDepPatterns') {
44
+ // v8 ignore else -- TODO: add test #40625
43
45
  if ((0, is_1.isArray)(patterns, is_1.isString)) {
44
46
  newPackageRule.matchDepNames ??= [];
45
47
  newPackageRule.matchDepNames.push(...patterns.map((v) => `/${v}/`));
@@ -48,6 +50,7 @@ function mergeMatchers(packageRule) {
48
50
  delete newPackageRule.matchDepPatterns;
49
51
  }
50
52
  if (key === 'excludeDepNames') {
53
+ // v8 ignore else -- TODO: add test #40625
51
54
  if ((0, is_1.isArray)(patterns, is_1.isString)) {
52
55
  newPackageRule.matchDepNames ??= [];
53
56
  newPackageRule.matchDepNames.push(...patterns.map((v) => `!${v}`));
@@ -56,6 +59,7 @@ function mergeMatchers(packageRule) {
56
59
  delete newPackageRule.excludeDepNames;
57
60
  }
58
61
  if (key === 'excludeDepPrefixes') {
62
+ // v8 ignore else -- TODO: add test #40625
59
63
  if ((0, is_1.isArray)(patterns, is_1.isString)) {
60
64
  newPackageRule.matchDepNames ??= [];
61
65
  newPackageRule.matchDepNames.push(...patterns.map((v) => `!${v}{/,}**`));
@@ -64,6 +68,7 @@ function mergeMatchers(packageRule) {
64
68
  delete newPackageRule.excludeDepPrefixes;
65
69
  }
66
70
  if (key === 'excludeDepPatterns') {
71
+ // v8 ignore else -- TODO: add test #40625
67
72
  if ((0, is_1.isArray)(patterns, is_1.isString)) {
68
73
  newPackageRule.matchDepNames ??= [];
69
74
  newPackageRule.matchDepNames.push(...patterns.map((v) => `!/${v}/`));
@@ -73,6 +78,7 @@ function mergeMatchers(packageRule) {
73
78
  }
74
79
  // packageName
75
80
  if (key === 'matchPackagePrefixes') {
81
+ // v8 ignore else -- TODO: add test #40625
76
82
  if ((0, is_1.isArray)(patterns, is_1.isString)) {
77
83
  newPackageRule.matchPackageNames ??= [];
78
84
  newPackageRule.matchPackageNames.push(...patterns.map((v) => `${v}{/,}**`));
@@ -81,6 +87,7 @@ function mergeMatchers(packageRule) {
81
87
  delete newPackageRule.matchPackagePrefixes;
82
88
  }
83
89
  if (key === 'matchPackagePatterns') {
90
+ // v8 ignore else -- TODO: add test #40625
84
91
  if ((0, is_1.isArray)(patterns, is_1.isString)) {
85
92
  newPackageRule.matchPackageNames ??= [];
86
93
  newPackageRule.matchPackageNames.push(...patterns.map((v) => {
@@ -94,6 +101,7 @@ function mergeMatchers(packageRule) {
94
101
  delete newPackageRule.matchPackagePatterns;
95
102
  }
96
103
  if (key === 'excludePackageNames') {
104
+ // v8 ignore else -- TODO: add test #40625
97
105
  if ((0, is_1.isArray)(patterns, is_1.isString)) {
98
106
  newPackageRule.matchPackageNames ??= [];
99
107
  newPackageRule.matchPackageNames.push(...patterns.map((v) => `!${v}`));
@@ -102,6 +110,7 @@ function mergeMatchers(packageRule) {
102
110
  delete newPackageRule.excludePackageNames;
103
111
  }
104
112
  if (key === 'excludePackagePrefixes') {
113
+ // v8 ignore else -- TODO: add test #40625
105
114
  if ((0, is_1.isArray)(patterns, is_1.isString)) {
106
115
  newPackageRule.matchPackageNames ??= [];
107
116
  newPackageRule.matchPackageNames.push(...patterns.map((v) => `!${v}{/,}**`));
@@ -110,6 +119,7 @@ function mergeMatchers(packageRule) {
110
119
  delete newPackageRule.excludePackagePrefixes;
111
120
  }
112
121
  if (key === 'excludePackagePatterns') {
122
+ // v8 ignore else -- TODO: add test #40625
113
123
  if ((0, is_1.isArray)(patterns, is_1.isString)) {
114
124
  newPackageRule.matchPackageNames ??= [];
115
125
  newPackageRule.matchPackageNames.push(...patterns.map((v) => `!/${v}/`));
@@ -119,6 +129,7 @@ function mergeMatchers(packageRule) {
119
129
  }
120
130
  // sourceUrl
121
131
  if (key === 'matchSourceUrlPrefixes') {
132
+ // v8 ignore else -- TODO: add test #40625
122
133
  if ((0, is_1.isArray)(patterns, is_1.isString)) {
123
134
  newPackageRule.matchSourceUrls ??= [];
124
135
  newPackageRule.matchSourceUrls.push(...patterns.map((v) => `${v}{/,}**`));
@@ -128,6 +139,7 @@ function mergeMatchers(packageRule) {
128
139
  }
129
140
  // repository
130
141
  if (key === 'excludeRepositories') {
142
+ // v8 ignore else -- TODO: add test #40625
131
143
  if ((0, is_1.isArray)(patterns, is_1.isString)) {
132
144
  newPackageRule.matchRepositories ??= [];
133
145
  newPackageRule.matchRepositories.push(...patterns.map((v) => `!${v}`));
@@ -142,6 +154,7 @@ class PackageRulesMigration extends abstract_migration_1.AbstractMigration {
142
154
  propertyName = 'packageRules';
143
155
  run(value) {
144
156
  let packageRules = this.get('packageRules');
157
+ // v8 ignore else -- TODO: add test #40625
145
158
  if ((0, is_1.isNonEmptyArray)(packageRules)) {
146
159
  packageRules = packageRules.map(renameKeys);
147
160
  packageRules = packageRules.map(mergeMatchers);