renovate 43.109.4 → 43.110.0

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 (59) hide show
  1. package/dist/modules/manager/fingerprint.generated.js +1 -1
  2. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  3. package/dist/modules/manager/npm/artifacts.js +1 -0
  4. package/dist/modules/manager/npm/artifacts.js.map +1 -1
  5. package/dist/modules/manager/npm/dep-types.js +7 -1
  6. package/dist/modules/manager/npm/dep-types.js.map +1 -1
  7. package/dist/modules/manager/npm/detect.js +1 -0
  8. package/dist/modules/manager/npm/detect.js.map +1 -1
  9. package/dist/modules/manager/npm/extract/common/package-file.js +2 -1
  10. package/dist/modules/manager/npm/extract/common/package-file.js.map +1 -1
  11. package/dist/modules/manager/npm/extract/index.js +36 -24
  12. package/dist/modules/manager/npm/extract/index.js.map +1 -1
  13. package/dist/modules/manager/npm/extract/pnpm.js +16 -14
  14. package/dist/modules/manager/npm/extract/pnpm.js.map +1 -1
  15. package/dist/modules/manager/npm/extract/post/locked-versions.js +3 -0
  16. package/dist/modules/manager/npm/extract/post/locked-versions.js.map +1 -1
  17. package/dist/modules/manager/npm/extract/yarn.js +2 -1
  18. package/dist/modules/manager/npm/extract/yarn.js.map +1 -1
  19. package/dist/modules/manager/npm/index.js +1 -1
  20. package/dist/modules/manager/npm/npmrc.js +1 -0
  21. package/dist/modules/manager/npm/npmrc.js.map +1 -1
  22. package/dist/modules/manager/npm/post-update/index.js +13 -7
  23. package/dist/modules/manager/npm/post-update/index.js.map +1 -1
  24. package/dist/modules/manager/npm/post-update/node-version.js +2 -0
  25. package/dist/modules/manager/npm/post-update/node-version.js.map +1 -1
  26. package/dist/modules/manager/npm/post-update/npm.js +7 -1
  27. package/dist/modules/manager/npm/post-update/npm.js.map +1 -1
  28. package/dist/modules/manager/npm/post-update/pnpm.js +2 -1
  29. package/dist/modules/manager/npm/post-update/pnpm.js.map +1 -1
  30. package/dist/modules/manager/npm/post-update/rules.js +1 -0
  31. package/dist/modules/manager/npm/post-update/rules.js.map +1 -1
  32. package/dist/modules/manager/npm/post-update/utils.js +1 -0
  33. package/dist/modules/manager/npm/post-update/utils.js.map +1 -1
  34. package/dist/modules/manager/npm/post-update/yarn.js +7 -0
  35. package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
  36. package/dist/modules/manager/npm/schema.js +6 -5
  37. package/dist/modules/manager/npm/schema.js.map +1 -1
  38. package/dist/modules/manager/npm/update/dependency/index.js +11 -3
  39. package/dist/modules/manager/npm/update/dependency/index.js.map +1 -1
  40. package/dist/modules/manager/npm/update/dependency/pnpm.js +16 -14
  41. package/dist/modules/manager/npm/update/dependency/pnpm.js.map +1 -1
  42. package/dist/modules/manager/npm/update/dependency/yarn.js +1 -0
  43. package/dist/modules/manager/npm/update/dependency/yarn.js.map +1 -1
  44. package/dist/modules/manager/npm/update/locked-dependency/common/parent-version.js +1 -1
  45. package/dist/modules/manager/npm/update/locked-dependency/common/parent-version.js.map +1 -1
  46. package/dist/modules/manager/npm/update/locked-dependency/package-lock/dep-constraints.js +1 -0
  47. package/dist/modules/manager/npm/update/locked-dependency/package-lock/dep-constraints.js.map +1 -1
  48. package/dist/modules/manager/npm/update/locked-dependency/package-lock/index.js +5 -2
  49. package/dist/modules/manager/npm/update/locked-dependency/package-lock/index.js.map +1 -1
  50. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/get-locked.js +2 -2
  51. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/get-locked.js.map +1 -1
  52. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/index.js +1 -1
  53. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/index.js.map +1 -1
  54. package/dist/modules/manager/npm/utils.js +3 -5
  55. package/dist/modules/manager/npm/utils.js.map +1 -1
  56. package/dist/util/vulnerability/utils.js +6 -11
  57. package/dist/util/vulnerability/utils.js.map +1 -1
  58. package/package.json +2 -2
  59. package/renovate-schema.json +2 -2
@@ -73,7 +73,7 @@ hashMap.set("mise", "6192273014bff02a3e0c68aa8a52c3563398adb4c7d3f7141c25f8736f4
73
73
  hashMap.set("mix", "1116e1adf1c18c866f0a9e6fa065c4fb9da055d8d150e625344899bb94095481");
74
74
  hashMap.set("nix", "f3ffec2f14e7261de8068895b91392e992dcef208fbaf52110d6862e4712c031");
75
75
  hashMap.set("nodenv", "ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8");
76
- hashMap.set("npm", "36ca540aae66652d99f08b2c8bc91d190e8e74323626f5b34832a4e7e5094f02");
76
+ hashMap.set("npm", "eaf9fe4981de8f7504227f3be88445f60f87ba74f9b9c7e54284bc2bb41320b3");
77
77
  hashMap.set("nuget", "42175b1906e8e91ae0731a13d92d0df065108063665f8a36150aeae73aafdc78");
78
78
  hashMap.set("nvm", "3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322");
79
79
  hashMap.set("ocb", "032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca");
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.generated.js","names":[],"sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','1fbc76f78daa14a8c9ab1142e9d1e05c746c0419a9f1455e4279f476590d0c04');\nhashMap.set('ansible-galaxy','8226d47128f2018825d4d6f84794e3183eb79c706045fa7e88491edd5e64106f');\nhashMap.set('ant','7d6414a195345c60a25a9d92c4b17c0b6df90be086fc5559150e2e5496976890');\nhashMap.set('argocd','5d35b1992e53130bf83b0e59a0f90ccd3a78919974c69044f306dc5d162f48ce');\nhashMap.set('asdf','1f6fcf620e9c6cd35991380cb6eafb94ec60cd77cbd13335ebe3a1d9727416c9');\nhashMap.set('azure-pipelines','4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1cbce72dc33a66e796');\nhashMap.set('batect','fad98996bea8626525ab925f83a6ae0ce9262c53770e7aa7cb448a1e0f1ddf21');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','c6e0ad88ea468664c3a33263baf7452d83d2d37ff09ba920e18f64ee81fd0acb');\nhashMap.set('bazel-module','ff071fcf8b53036956627d2a430ccdf256e30bee4d7e80c329379879d836a931');\nhashMap.set('bazelisk','b6ec532dfa7c8f82ad4084df864ac6276e87c27285369323902afc146d3537ac');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','09eb044219d74331fea135f50121b7d4d146333eb97e4ccbfa9ddf0eb4012963');\nhashMap.set('bitrise','afdb46fe37fc0307943089e18b6724065394805e628b4b6c4430a6068c494030');\nhashMap.set('buildkite','a93effb1f1c5d65b3277c3b4709924eacde282e8efd028a8e3d8c1ce3ef69407');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','1322232bf1d0c4fa796e31a00488453bdcd00d4958431d9e424c1635e60a99bd');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','6d7e9d2018ac03e15f19e8b40ef70dd87d509d5affca24bc464d085899880a25');\nhashMap.set('cake','288c3c36a50371b26957fa71992cc335228d53563c75597b36919ac7286e96eb');\nhashMap.set('cargo','308d7ab4c6d24027b050bf659dfab0e510d9a22f8134695a7c68214908ee4634');\nhashMap.set('cdnurl','d3edf6cdc38e92eb43ff5a2b4e8df6a6a13154cf83244725c39e28d7e6ea9177');\nhashMap.set('circleci','135937d4720718304adb0ba998516f8ce38c3220ccd18b00b8c70c62b45df4da');\nhashMap.set('cloudbuild','8c0c739f7e4082bbfe8e3fdffebaf43e26f70a1314d95b306e9b93e4f4297886');\nhashMap.set('cocoapods','b6ac3b4a6b8a5b32daed37bf695fe177cdb1b4a94ae7f7fb2f4c4c096c0a004c');\nhashMap.set('composer','cdb6895574020cec402e0b878e4078b62f1acfd0392a861cbb523036634f6383');\nhashMap.set('conan','aecc3917d77146db4e57dd12944be1beff860e90b7ebdd2d8fbc449fc1a06574');\nhashMap.set('copier','faa3b79991256a6fc0957fdcd530a1bc8aee65913d5aff2b1b4d226dcd44d008');\nhashMap.set('cpanfile','6a1d67d9c8751123deaf0c7f3ac38a07024e960c140f8228fcbcb93954fdca01');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deps-edn','c87dd5e88587147ad1a78f047b814f3c4aa60d6de30d0c49d849391eeaf1b64c');\nhashMap.set('devbox','bcf5334e8a21190baaa25436acf2f17fbf095504262a4e9ee7c62ffb644eb716');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','5441af5b5abf8d347e46002d47f02f85743401bda28232f49fb7b3bbb772a4fb');\nhashMap.set('dockerfile','322b95f7e55dd78d7fe71306a6f649479eca61c60d75bb10b23604a230dbdd08');\nhashMap.set('droneci','237c8de87b9bf653fb943b56e84e99c45f6d86ae27d86e599b3f3f99c35ba8ee');\nhashMap.set('fleet','d73d5d35f10df0599a561d9c8d25f3935350407d0e3bd3a1d1545295f278912e');\nhashMap.set('flux','427e0c1a5b1d8337503a9a568a76532fbde0bab8b355fa8f47312de50eadf2f6');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','fbbf1c7b7b6f4166fa3beee96a3283d007b388e9ecb6a14f76123c8ab8c78071');\nhashMap.set('github-actions','99c975bf92692f8ae50306146589419b7f75a9c2020a1fa600774b960f3a8bfb');\nhashMap.set('gitlabci','0dec44dd398bfc5b3c19d0929bea2fef7f386c94acfd1b1d7bc2a31d81d96fd6');\nhashMap.set('gitlabci-include','354cfc4ea327c6d5cd5bee1f17763832efc7f5402e9fd22c579239fccb9c6dab');\nhashMap.set('glasskube','253d6db30bdec75ed5ab5d26f31d69bc07813ba10089a28da12c6a29eff4ec70');\nhashMap.set('gleam','b717a48c525ad6b1d434c6a9db828ddebbb85e94519e89ddc4040878e3600e84');\nhashMap.set('gomod','82e877b22c0dd0217368760bb5d38430657fff63d07c289793a866f0845d2976');\nhashMap.set('gradle','f430d8d768b56889ad1e5a69965841e85cc700e364d15db7bce680e8a5d6f821');\nhashMap.set('gradle-wrapper','90d2ecb9d0b113f8e946d4ea221c040f17f91af846e1ff4f9fc1514ad4324b74');\nhashMap.set('haskell-cabal','d796ec6859e63ab4f1b7030c4016071202c3a44c7c11d4a9131d7e2ba19b396d');\nhashMap.set('helm-requirements','4d90e5e18a380876ad48e21e1ad88ea62e25d973a1ddaa3763447fc0a9f9915b');\nhashMap.set('helm-values','b5c52c6a27d805557418c585c5d3030c95ee641d53057021f3fe060f81b6e1af');\nhashMap.set('helmfile','e5783484b81247279563da3c835afe4002edfc412e13fb91877818ca44ae65f2');\nhashMap.set('helmsman','ef9680c612f702c7f07aea9b6e5d811e91214dcfa5755c9f3803e9528090935e');\nhashMap.set('helmv3','7724bf6cc3ff4afec1809899f619a332f4350049b9578b5c4634514b4448cf2b');\nhashMap.set('hermit','672c328e4baea3a1ccd2cde2364db01c8033a8c077bf63a5b914fc20ee1de838');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','56ef90301143874355fd2ed25dff7c646875f701f97422d02e01d45608a88f31');\nhashMap.set('html','67c5f3c5c58e96f5dd257ba5987d900cf7fef81d667c3640e96c847b37de35a8');\nhashMap.set('jenkins','268ebfc8a1caf3edeb2192c2b1b2fa4bf18a78a3e731ba20a6c104940a5539f3');\nhashMap.set('jsonnet-bundler','4b73c32ddc3fe45d9777106d45b116777a2960e6e631256a6553060e602f893c');\nhashMap.set('kotlin-script','99ef296792a0ca575ed31d3defb514b05a58083dc01c52ea0890c69d867ba1dd');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','1e44d6ef8622252dac6d9649fb04badd12d4827eb2a55f74792aa9de2b915775');\nhashMap.set('leiningen','133fca2c3423f53f2ccc22518153ddbcafbf0f4812376c77e952eb3d24d81f85');\nhashMap.set('maven','fd6bfc21be851ed076eabea1a91a89b25eb82129734c7cb0c2e684385cf1ea69');\nhashMap.set('maven-wrapper','9a868d1328f911eb72f9e65a64d46c86ae347aab0153d1cf4e9a62ad9e0d6cb0');\nhashMap.set('meteor','4a93a326b27bedfe52118e27e06f39fecd7c55bd4cd7fccec4cb120cac14cec4');\nhashMap.set('mint','b816a49c8525716454d0a2bc9127916d5b27e5cca7b2aa2030312f218942af3e');\nhashMap.set('mise','6192273014bff02a3e0c68aa8a52c3563398adb4c7d3f7141c25f8736f488748');\nhashMap.set('mix','1116e1adf1c18c866f0a9e6fa065c4fb9da055d8d150e625344899bb94095481');\nhashMap.set('nix','f3ffec2f14e7261de8068895b91392e992dcef208fbaf52110d6862e4712c031');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','36ca540aae66652d99f08b2c8bc91d190e8e74323626f5b34832a4e7e5094f02');\nhashMap.set('nuget','42175b1906e8e91ae0731a13d92d0df065108063665f8a36150aeae73aafdc78');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','32233a1a8a2725699d7448ba438e3d0b78141f7799cd2b588de278d41e26ed10');\nhashMap.set('pep621','f503497a4adef31b29572176e9a69d52fa9b0bfe3477b6e228c906aeb4861de5');\nhashMap.set('pep723','b96683163de63ed93207ec0538066705b1e58a1cd5b8bd11c63fc28b26bddba1');\nhashMap.set('pip-compile','89152ad6c89f278395f32d289dc3890823c233366547d228e97dd1319aa144b5');\nhashMap.set('pip_requirements','d5c474c524bc7adc1aae065da0531bd22d9f7f52523b018f2461f6c29e12fdf3');\nhashMap.set('pip_setup','0175fe550c19d9bd31c978bd83fdc088cb40fcacd5d6751f640164274ae64e61');\nhashMap.set('pipenv','50f5a54ed714fd3d738c1aa9a353cf3aab767899acdcb763088d4bd04f3a737b');\nhashMap.set('pixi','b17af6eaa33e7babcc52cfc9a617c7801c0efb1125bbd6d0d4e9f6fe33afd353');\nhashMap.set('poetry','7f227b8b912b405df7735e9dc7c178f03021844f0c027d4b321c023c330c390a');\nhashMap.set('pre-commit','a6a6e847fdb0f56650e66ef7d69e68de752b390913f79ac31d1a7ec5955d03da');\nhashMap.set('pub','0fbad9f77579fcec3a623c6feab56e71934c67a79bb8f4f0f847452051d2a0ba');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','e355e13e104351a8b3516a8e272fc5f7e625c9f39b0c492ba27283a36227c2d4');\nhashMap.set('renovate-config-presets','a394fe55f8b6ba356f29f76efd9f0d34b56baceb111e6d92f95b29b5ca50ac67');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('sbt','61f9323c91c45227da71d43120fa1eddc41685502be017118975f77b44fb1b8e');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','7dea08c5708625e753bd56918bc214df7fb4d8543a26e936926a21ab43b5f785');\nhashMap.set('sveltos','167a5cc79098803be3b815a28cc40ef3361c455751e1d6a7a99ba91bfce26709');\nhashMap.set('swift','79ec9a6a2a8bb4853bb78bbb3a2a6e64e3b32b0ddeb312385abb3a14366ad505');\nhashMap.set('tekton','4e35c75bba4abc9c3cf49c55da6c19db4f4e9181d1fd9583288ab55ef7c944fd');\nhashMap.set('terraform','5bd62ce12c23896b8ecb2385a60a3cb9eb72badf10f9984bfed38f50f9262266');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','b8474c65383a702602eee432cc1434f9a49a1ef886d1213de92d7a84fb98b9cd');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','4a975f0cc1aa22cd258aa835de3dc98d7a5c0d1cee0a1092324338968e08a827');\nhashMap.set('travis','bb482a0195cd009ec3896a6227bb95617f5c84bedb518c7d971e50c62235d9ca');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','4627230d3b7698c41aac192d57b65b091c860c8f858c89d6af4b06ed6a32fae6');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('jsonata','3b5f465b586993f92c8490e70885e7eecce9b6556bcc376dd9c11db8ee9e6960');\nhashMap.set('regex','7b643b49e498465cf91b25b8b840bb1fec8c8a3a59bfa8f97a39c976675325a0');"],"mappings":";AAAA,MAAa,0BAAU,IAAI,KAAqB;AAEhD,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,kBAAiB,mEAAmE;AAChG,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,mBAAkB,mEAAmE;AACjG,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,kBAAiB,mEAAmE;AAChG,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,gBAAe,mEAAmE;AAC9F,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,uBAAsB,mEAAmE;AACrG,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,eAAc,mEAAmE;AAC7F,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,gBAAe,mEAAmE;AAC9F,QAAQ,IAAI,kBAAiB,mEAAmE;AAChG,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,kBAAiB,mEAAmE;AAChG,QAAQ,IAAI,kBAAiB,mEAAmE;AAChG,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,oBAAmB,mEAAmE;AAClG,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,kBAAiB,mEAAmE;AAChG,QAAQ,IAAI,iBAAgB,mEAAmE;AAC/F,QAAQ,IAAI,qBAAoB,mEAAmE;AACnG,QAAQ,IAAI,eAAc,mEAAmE;AAC7F,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,0BAAyB,mEAAmE;AACxG,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,mBAAkB,mEAAmE;AACjG,QAAQ,IAAI,iBAAgB,mEAAmE;AAC/F,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,iBAAgB,mEAAmE;AAC/F,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,eAAc,mEAAmE;AAC7F,QAAQ,IAAI,oBAAmB,mEAAmE;AAClG,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,QAAO,mEAAmE;AACtF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,2BAA0B,mEAAmE;AACzG,QAAQ,IAAI,gBAAe,mEAAmE;AAC9F,QAAQ,IAAI,mBAAkB,mEAAmE;AACjG,QAAQ,IAAI,OAAM,mEAAmE;AACrF,QAAQ,IAAI,YAAW,mEAAmE;AAC1F,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,aAAY,mEAAmE;AAC3F,QAAQ,IAAI,qBAAoB,mEAAmE;AACnG,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,sBAAqB,mEAAmE;AACpG,QAAQ,IAAI,iBAAgB,mEAAmE;AAC/F,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,SAAQ,mEAAmE;AACvF,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,UAAS,mEAAmE;AACxF,QAAQ,IAAI,cAAa,mEAAmE;AAC5F,QAAQ,IAAI,WAAU,mEAAmE;AACzF,QAAQ,IAAI,SAAQ,mEAAmE"}
1
+ {"version":3,"file":"fingerprint.generated.js","names":[],"sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','1fbc76f78daa14a8c9ab1142e9d1e05c746c0419a9f1455e4279f476590d0c04');\nhashMap.set('ansible-galaxy','8226d47128f2018825d4d6f84794e3183eb79c706045fa7e88491edd5e64106f');\nhashMap.set('ant','7d6414a195345c60a25a9d92c4b17c0b6df90be086fc5559150e2e5496976890');\nhashMap.set('argocd','5d35b1992e53130bf83b0e59a0f90ccd3a78919974c69044f306dc5d162f48ce');\nhashMap.set('asdf','1f6fcf620e9c6cd35991380cb6eafb94ec60cd77cbd13335ebe3a1d9727416c9');\nhashMap.set('azure-pipelines','4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1cbce72dc33a66e796');\nhashMap.set('batect','fad98996bea8626525ab925f83a6ae0ce9262c53770e7aa7cb448a1e0f1ddf21');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','c6e0ad88ea468664c3a33263baf7452d83d2d37ff09ba920e18f64ee81fd0acb');\nhashMap.set('bazel-module','ff071fcf8b53036956627d2a430ccdf256e30bee4d7e80c329379879d836a931');\nhashMap.set('bazelisk','b6ec532dfa7c8f82ad4084df864ac6276e87c27285369323902afc146d3537ac');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','09eb044219d74331fea135f50121b7d4d146333eb97e4ccbfa9ddf0eb4012963');\nhashMap.set('bitrise','afdb46fe37fc0307943089e18b6724065394805e628b4b6c4430a6068c494030');\nhashMap.set('buildkite','a93effb1f1c5d65b3277c3b4709924eacde282e8efd028a8e3d8c1ce3ef69407');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','1322232bf1d0c4fa796e31a00488453bdcd00d4958431d9e424c1635e60a99bd');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','6d7e9d2018ac03e15f19e8b40ef70dd87d509d5affca24bc464d085899880a25');\nhashMap.set('cake','288c3c36a50371b26957fa71992cc335228d53563c75597b36919ac7286e96eb');\nhashMap.set('cargo','308d7ab4c6d24027b050bf659dfab0e510d9a22f8134695a7c68214908ee4634');\nhashMap.set('cdnurl','d3edf6cdc38e92eb43ff5a2b4e8df6a6a13154cf83244725c39e28d7e6ea9177');\nhashMap.set('circleci','135937d4720718304adb0ba998516f8ce38c3220ccd18b00b8c70c62b45df4da');\nhashMap.set('cloudbuild','8c0c739f7e4082bbfe8e3fdffebaf43e26f70a1314d95b306e9b93e4f4297886');\nhashMap.set('cocoapods','b6ac3b4a6b8a5b32daed37bf695fe177cdb1b4a94ae7f7fb2f4c4c096c0a004c');\nhashMap.set('composer','cdb6895574020cec402e0b878e4078b62f1acfd0392a861cbb523036634f6383');\nhashMap.set('conan','aecc3917d77146db4e57dd12944be1beff860e90b7ebdd2d8fbc449fc1a06574');\nhashMap.set('copier','faa3b79991256a6fc0957fdcd530a1bc8aee65913d5aff2b1b4d226dcd44d008');\nhashMap.set('cpanfile','6a1d67d9c8751123deaf0c7f3ac38a07024e960c140f8228fcbcb93954fdca01');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deps-edn','c87dd5e88587147ad1a78f047b814f3c4aa60d6de30d0c49d849391eeaf1b64c');\nhashMap.set('devbox','bcf5334e8a21190baaa25436acf2f17fbf095504262a4e9ee7c62ffb644eb716');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','5441af5b5abf8d347e46002d47f02f85743401bda28232f49fb7b3bbb772a4fb');\nhashMap.set('dockerfile','322b95f7e55dd78d7fe71306a6f649479eca61c60d75bb10b23604a230dbdd08');\nhashMap.set('droneci','237c8de87b9bf653fb943b56e84e99c45f6d86ae27d86e599b3f3f99c35ba8ee');\nhashMap.set('fleet','d73d5d35f10df0599a561d9c8d25f3935350407d0e3bd3a1d1545295f278912e');\nhashMap.set('flux','427e0c1a5b1d8337503a9a568a76532fbde0bab8b355fa8f47312de50eadf2f6');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','fbbf1c7b7b6f4166fa3beee96a3283d007b388e9ecb6a14f76123c8ab8c78071');\nhashMap.set('github-actions','99c975bf92692f8ae50306146589419b7f75a9c2020a1fa600774b960f3a8bfb');\nhashMap.set('gitlabci','0dec44dd398bfc5b3c19d0929bea2fef7f386c94acfd1b1d7bc2a31d81d96fd6');\nhashMap.set('gitlabci-include','354cfc4ea327c6d5cd5bee1f17763832efc7f5402e9fd22c579239fccb9c6dab');\nhashMap.set('glasskube','253d6db30bdec75ed5ab5d26f31d69bc07813ba10089a28da12c6a29eff4ec70');\nhashMap.set('gleam','b717a48c525ad6b1d434c6a9db828ddebbb85e94519e89ddc4040878e3600e84');\nhashMap.set('gomod','82e877b22c0dd0217368760bb5d38430657fff63d07c289793a866f0845d2976');\nhashMap.set('gradle','f430d8d768b56889ad1e5a69965841e85cc700e364d15db7bce680e8a5d6f821');\nhashMap.set('gradle-wrapper','90d2ecb9d0b113f8e946d4ea221c040f17f91af846e1ff4f9fc1514ad4324b74');\nhashMap.set('haskell-cabal','d796ec6859e63ab4f1b7030c4016071202c3a44c7c11d4a9131d7e2ba19b396d');\nhashMap.set('helm-requirements','4d90e5e18a380876ad48e21e1ad88ea62e25d973a1ddaa3763447fc0a9f9915b');\nhashMap.set('helm-values','b5c52c6a27d805557418c585c5d3030c95ee641d53057021f3fe060f81b6e1af');\nhashMap.set('helmfile','e5783484b81247279563da3c835afe4002edfc412e13fb91877818ca44ae65f2');\nhashMap.set('helmsman','ef9680c612f702c7f07aea9b6e5d811e91214dcfa5755c9f3803e9528090935e');\nhashMap.set('helmv3','7724bf6cc3ff4afec1809899f619a332f4350049b9578b5c4634514b4448cf2b');\nhashMap.set('hermit','672c328e4baea3a1ccd2cde2364db01c8033a8c077bf63a5b914fc20ee1de838');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','56ef90301143874355fd2ed25dff7c646875f701f97422d02e01d45608a88f31');\nhashMap.set('html','67c5f3c5c58e96f5dd257ba5987d900cf7fef81d667c3640e96c847b37de35a8');\nhashMap.set('jenkins','268ebfc8a1caf3edeb2192c2b1b2fa4bf18a78a3e731ba20a6c104940a5539f3');\nhashMap.set('jsonnet-bundler','4b73c32ddc3fe45d9777106d45b116777a2960e6e631256a6553060e602f893c');\nhashMap.set('kotlin-script','99ef296792a0ca575ed31d3defb514b05a58083dc01c52ea0890c69d867ba1dd');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','1e44d6ef8622252dac6d9649fb04badd12d4827eb2a55f74792aa9de2b915775');\nhashMap.set('leiningen','133fca2c3423f53f2ccc22518153ddbcafbf0f4812376c77e952eb3d24d81f85');\nhashMap.set('maven','fd6bfc21be851ed076eabea1a91a89b25eb82129734c7cb0c2e684385cf1ea69');\nhashMap.set('maven-wrapper','9a868d1328f911eb72f9e65a64d46c86ae347aab0153d1cf4e9a62ad9e0d6cb0');\nhashMap.set('meteor','4a93a326b27bedfe52118e27e06f39fecd7c55bd4cd7fccec4cb120cac14cec4');\nhashMap.set('mint','b816a49c8525716454d0a2bc9127916d5b27e5cca7b2aa2030312f218942af3e');\nhashMap.set('mise','6192273014bff02a3e0c68aa8a52c3563398adb4c7d3f7141c25f8736f488748');\nhashMap.set('mix','1116e1adf1c18c866f0a9e6fa065c4fb9da055d8d150e625344899bb94095481');\nhashMap.set('nix','f3ffec2f14e7261de8068895b91392e992dcef208fbaf52110d6862e4712c031');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','eaf9fe4981de8f7504227f3be88445f60f87ba74f9b9c7e54284bc2bb41320b3');\nhashMap.set('nuget','42175b1906e8e91ae0731a13d92d0df065108063665f8a36150aeae73aafdc78');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','32233a1a8a2725699d7448ba438e3d0b78141f7799cd2b588de278d41e26ed10');\nhashMap.set('pep621','f503497a4adef31b29572176e9a69d52fa9b0bfe3477b6e228c906aeb4861de5');\nhashMap.set('pep723','b96683163de63ed93207ec0538066705b1e58a1cd5b8bd11c63fc28b26bddba1');\nhashMap.set('pip-compile','89152ad6c89f278395f32d289dc3890823c233366547d228e97dd1319aa144b5');\nhashMap.set('pip_requirements','d5c474c524bc7adc1aae065da0531bd22d9f7f52523b018f2461f6c29e12fdf3');\nhashMap.set('pip_setup','0175fe550c19d9bd31c978bd83fdc088cb40fcacd5d6751f640164274ae64e61');\nhashMap.set('pipenv','50f5a54ed714fd3d738c1aa9a353cf3aab767899acdcb763088d4bd04f3a737b');\nhashMap.set('pixi','b17af6eaa33e7babcc52cfc9a617c7801c0efb1125bbd6d0d4e9f6fe33afd353');\nhashMap.set('poetry','7f227b8b912b405df7735e9dc7c178f03021844f0c027d4b321c023c330c390a');\nhashMap.set('pre-commit','a6a6e847fdb0f56650e66ef7d69e68de752b390913f79ac31d1a7ec5955d03da');\nhashMap.set('pub','0fbad9f77579fcec3a623c6feab56e71934c67a79bb8f4f0f847452051d2a0ba');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','e355e13e104351a8b3516a8e272fc5f7e625c9f39b0c492ba27283a36227c2d4');\nhashMap.set('renovate-config-presets','a394fe55f8b6ba356f29f76efd9f0d34b56baceb111e6d92f95b29b5ca50ac67');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('sbt','61f9323c91c45227da71d43120fa1eddc41685502be017118975f77b44fb1b8e');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','7dea08c5708625e753bd56918bc214df7fb4d8543a26e936926a21ab43b5f785');\nhashMap.set('sveltos','167a5cc79098803be3b815a28cc40ef3361c455751e1d6a7a99ba91bfce26709');\nhashMap.set('swift','79ec9a6a2a8bb4853bb78bbb3a2a6e64e3b32b0ddeb312385abb3a14366ad505');\nhashMap.set('tekton','4e35c75bba4abc9c3cf49c55da6c19db4f4e9181d1fd9583288ab55ef7c944fd');\nhashMap.set('terraform','5bd62ce12c23896b8ecb2385a60a3cb9eb72badf10f9984bfed38f50f9262266');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','b8474c65383a702602eee432cc1434f9a49a1ef886d1213de92d7a84fb98b9cd');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','4a975f0cc1aa22cd258aa835de3dc98d7a5c0d1cee0a1092324338968e08a827');\nhashMap.set('travis','bb482a0195cd009ec3896a6227bb95617f5c84bedb518c7d971e50c62235d9ca');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','4627230d3b7698c41aac192d57b65b091c860c8f858c89d6af4b06ed6a32fae6');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('jsonata','3b5f465b586993f92c8490e70885e7eecce9b6556bcc376dd9c11db8ee9e6960');\nhashMap.set('regex','7b643b49e498465cf91b25b8b840bb1fec8c8a3a59bfa8f97a39c976675325a0');"],"mappings":"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"}
@@ -94,6 +94,7 @@ async function updatePnpmWorkspace(updateArtifactsConfig) {
94
94
  let updated = false;
95
95
  for (const upgrade of upgrades) {
96
96
  let excludeNode = doc.getIn(["minimumReleaseAgeExclude"]);
97
+ // v8 ignore next -- TODO: add test #40625
97
98
  const newVersion = upgrade.newVersion ?? upgrade.newValue;
98
99
  /* v8 ignore if -- should not happen, adding for type narrowing*/
99
100
  if (excludeNode && !isSeq(excludeNode)) return null;
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","names":[],"sources":["../../../../lib/modules/manager/npm/artifacts.ts"],"sourcesContent":["import { isEmptyArray, isNonEmptyObject, isString } from '@sindresorhus/is';\nimport upath from 'upath';\nimport type { Scalar, YAMLSeq } from 'yaml';\nimport { isScalar, isSeq, parseDocument } from 'yaml';\nimport { logger } from '../../../logger/index.ts';\nimport { exec } from '../../../util/exec/index.ts';\nimport type { ExecOptions } from '../../../util/exec/types.ts';\nimport {\n ensureCacheDir,\n localPathExists,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { matchRegexOrGlob } from '../../../util/string-match.ts';\nimport type { UpdateArtifact, UpdateArtifactsResult } from '../types.ts';\nimport { PNPM_CACHE_DIR, PNPM_STORE_DIR } from './constants.ts';\nimport { getNodeToolConstraint } from './post-update/node-version.ts';\nimport { processHostRules } from './post-update/rules.ts';\nimport { lazyLoadPackageJson } from './post-update/utils.ts';\nimport {\n getNpmrcContent,\n resetNpmrcContent,\n updateNpmrcContent,\n} from './utils.ts';\n\n// eg. 8.15.5+sha256.4b4efa12490e5055d59b9b9fc9438b7d581a6b7af3b5675eb5c5f447cee1a589\nconst versionWithHashRegString = '^(?<version>.*)\\\\+(?<hash>.*)';\n\n// Execute 'corepack use' command for npm manager updates\n// This step is necessary because Corepack recommends attaching a hash after the version\n// The hash is generated only after running 'corepack use' and cannot be fetched from the npm registry\nexport async function updateArtifacts(\n updateArtifactsConfig: UpdateArtifact,\n): Promise<UpdateArtifactsResult[] | null> {\n logger.debug(`npm.updateArtifacts(${updateArtifactsConfig.packageFileName})`);\n let res: UpdateArtifactsResult[] = [];\n res.push((await handlePackageManagerUpdates(updateArtifactsConfig)) ?? {});\n res.push((await updatePnpmWorkspace(updateArtifactsConfig)) ?? {});\n\n res = res.filter(isNonEmptyObject);\n if (res.length === 0) {\n return null;\n }\n\n return res;\n}\n\nasync function handlePackageManagerUpdates(\n updateArtifactsConfig: UpdateArtifact,\n): Promise<UpdateArtifactsResult | null> {\n const {\n packageFileName,\n config,\n updatedDeps,\n newPackageFileContent: existingPackageFileContent,\n } = updateArtifactsConfig;\n const packageManagerUpdate = updatedDeps.find(\n (dep) => dep.depType === 'packageManager',\n );\n\n if (!packageManagerUpdate) {\n logger.debug('No packageManager updates - returning null');\n return null;\n }\n\n const { currentValue, depName, newVersion } = packageManagerUpdate;\n\n // Execute 'corepack use' command only if the currentValue already has hash in it\n if (!currentValue || !regEx(versionWithHashRegString).test(currentValue)) {\n return null;\n }\n\n // write old updates before executing corepack update so that they are not removed from package file\n await writeLocalFile(packageFileName, existingPackageFileContent);\n\n // Asumming that corepack only needs to modify the package.json file in the root folder\n // As it should not be regular practice to have different package managers in different workspaces\n const pkgFileDir = upath.dirname(packageFileName);\n const { additionalNpmrcContent } = processHostRules();\n const npmrcContent = await getNpmrcContent(pkgFileDir);\n const lazyPkgJson = lazyLoadPackageJson(pkgFileDir);\n const cmd = `corepack use ${depName}@${newVersion}`;\n\n const nodeConstraints = await getNodeToolConstraint(\n config,\n updatedDeps,\n pkgFileDir,\n lazyPkgJson,\n );\n\n const pnpmConfigCacheDir = await ensureCacheDir(PNPM_CACHE_DIR);\n const pnpmConfigStoreDir = await ensureCacheDir(PNPM_STORE_DIR);\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv: {\n // To make sure pnpm store location is consistent between \"corepack use\"\n // here and the pnpm commands in ./post-update/pnpm.ts. Check\n // ./post-update/pnpm.ts for more details.\n npm_config_cache_dir: pnpmConfigCacheDir,\n npm_config_store_dir: pnpmConfigStoreDir,\n pnpm_config_cache_dir: pnpmConfigCacheDir,\n pnpm_config_store_dir: pnpmConfigStoreDir,\n },\n toolConstraints: [\n nodeConstraints,\n {\n toolName: 'corepack',\n constraint: config.constraints?.corepack,\n },\n ],\n docker: {},\n };\n\n await updateNpmrcContent(pkgFileDir, npmrcContent, additionalNpmrcContent);\n try {\n await exec(cmd, execOptions);\n await resetNpmrcContent(pkgFileDir, npmrcContent);\n const newPackageFileContent = await readLocalFile(packageFileName, 'utf8');\n if (\n !newPackageFileContent ||\n existingPackageFileContent === newPackageFileContent\n ) {\n return null;\n }\n logger.debug('Returning updated package.json');\n return {\n file: {\n type: 'addition',\n path: packageFileName,\n contents: newPackageFileContent,\n },\n };\n } catch (err) {\n logger.warn({ err }, 'Error updating package.json');\n await resetNpmrcContent(pkgFileDir, npmrcContent);\n return {\n artifactError: {\n fileName: packageFileName,\n stderr: err.message,\n },\n };\n }\n}\n\n/**\n * Update the minimumReleaseAgeExclude setting in pnpm-workspace.yaml if needed\n */\nasync function updatePnpmWorkspace(\n updateArtifactsConfig: UpdateArtifact,\n): Promise<UpdateArtifactsResult | null> {\n const upgrades = updateArtifactsConfig.updatedDeps.filter(\n (u) => u.isVulnerabilityAlert,\n );\n // return early if no security updates are present\n if (isEmptyArray(upgrades)) {\n return null;\n }\n\n const pnpmShrinkwrap = upgrades[0].managerData?.pnpmShrinkwrap;\n if (!isString(pnpmShrinkwrap)) {\n logger.debug(\n 'No pnpm shrinkwrap found, not attempting to update pnpm-workspace.yaml',\n );\n return null;\n }\n const lockFileDir = upath.dirname(pnpmShrinkwrap);\n const pnpmWorkspaceFilePath = upath.join(lockFileDir, 'pnpm-workspace.yaml');\n\n if (!(await localPathExists(pnpmWorkspaceFilePath))) {\n return null;\n }\n\n // use already-updated content when updating the workspace file itself\n const packageFileContent =\n updateArtifactsConfig.packageFileName === pnpmWorkspaceFilePath\n ? updateArtifactsConfig.newPackageFileContent\n : (await readLocalFile(pnpmWorkspaceFilePath, 'utf8'))!;\n const doc = parseDocument(packageFileContent);\n\n if (!doc.get('minimumReleaseAge')) {\n return null;\n }\n\n let updated = false;\n\n for (const upgrade of upgrades) {\n let excludeNode = doc.getIn(['minimumReleaseAgeExclude']) as YAMLSeq | null;\n const newVersion = upgrade.newVersion ?? upgrade.newValue;\n\n /* v8 ignore if -- should not happen, adding for type narrowing*/\n if (excludeNode && !isSeq(excludeNode)) {\n return null;\n }\n\n if (!excludeNode) {\n logger.debug('Adding new exclude block');\n excludeNode = doc.createNode([]) as YAMLSeq;\n const newItem = doc.createNode(`${upgrade.depName}@${newVersion}`);\n newItem.commentBefore = ` Renovate security update: ${upgrade.depName}@${newVersion}`;\n excludeNode.items.push(newItem);\n doc.set('minimumReleaseAgeExclude', excludeNode);\n updated = true;\n continue;\n }\n\n const { item: matchedItem, allExcluded } = getMatchedItem(\n upgrade.depName!,\n excludeNode.items,\n );\n\n if (allExcluded) {\n continue;\n }\n\n if (isScalar<string>(matchedItem)) {\n // if we have a comment before the list, which includes the dependency\n if (excludeNode?.commentBefore?.includes(`${upgrade.depName}@`)) {\n // and it doesn't already have the version included in it\n if (\n !minimumReleaseAgeExcludeIncludesDepNameAndVersion(\n excludeNode.commentBefore,\n upgrade.depName,\n newVersion,\n )\n ) {\n // then append it\n\n // normalize value (no quote handling needed)\n excludeNode.commentBefore =\n excludeNode.commentBefore + ` || ${newVersion}`;\n updated = true;\n }\n }\n // otherwise, if it's in our matched item's comment\n else if (matchedItem.commentBefore) {\n // add it\n if (\n !minimumReleaseAgeExcludeIncludesDepNameAndVersion(\n matchedItem.commentBefore,\n upgrade.depName,\n newVersion,\n )\n ) {\n // normalize value (no quote handling needed)\n matchedItem.commentBefore =\n matchedItem.commentBefore + ` || ${newVersion}`;\n updated = true;\n }\n } else {\n matchedItem.commentBefore = ` Renovate security update: ${upgrade.depName}@${newVersion}`;\n updated = true;\n }\n\n if (\n !minimumReleaseAgeExcludeIncludesDepNameAndVersion(\n matchedItem.value,\n upgrade.depName,\n newVersion,\n )\n ) {\n matchedItem.value = matchedItem.value + ` || ${newVersion}`;\n updated = true;\n }\n } else {\n // add new entry\n const newItem = doc.createNode(`${upgrade.depName}@${newVersion}`);\n newItem.commentBefore = ` Renovate security update: ${upgrade.depName}@${newVersion}`;\n\n excludeNode.items.push(newItem);\n updated = true;\n }\n }\n\n if (!updated) {\n return null;\n }\n\n const newContent = doc.toString();\n await writeLocalFile(pnpmWorkspaceFilePath, newContent);\n\n return {\n file: {\n type: 'addition',\n path: pnpmWorkspaceFilePath,\n contents: newContent,\n },\n };\n}\n\nfunction getMatchedItem(\n depName: string,\n items: unknown[],\n): {\n item: Scalar | null;\n allExcluded: boolean;\n} {\n for (const item of items) {\n /* v8 ignore if -- should not happen */\n if (!isScalar(item) || !isString(item.value)) {\n continue;\n }\n\n if (item.value.startsWith(`${depName}@`)) {\n return {\n allExcluded: false,\n item,\n };\n }\n\n if (item.value === depName || matchRegexOrGlob(depName, item.value)) {\n return {\n allExcluded: true,\n item,\n };\n }\n }\n\n return {\n item: null,\n allExcluded: false,\n };\n}\n\n/** determine whether a comment or a list item contains the depName at a given newVersion */\nfunction minimumReleaseAgeExcludeIncludesDepNameAndVersion(\n line: string,\n depName: string | undefined,\n newVersion: string | undefined,\n): boolean {\n if (line.includes(`${depName}@${newVersion}`)) {\n return true;\n }\n\n if (line.includes(`|| ${newVersion}`)) {\n return true;\n }\n\n return false;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"artifacts.js","names":[],"sources":["../../../../lib/modules/manager/npm/artifacts.ts"],"sourcesContent":["import { isEmptyArray, isNonEmptyObject, isString } from '@sindresorhus/is';\nimport upath from 'upath';\nimport type { Scalar, YAMLSeq } from 'yaml';\nimport { isScalar, isSeq, parseDocument } from 'yaml';\nimport { logger } from '../../../logger/index.ts';\nimport { exec } from '../../../util/exec/index.ts';\nimport type { ExecOptions } from '../../../util/exec/types.ts';\nimport {\n ensureCacheDir,\n localPathExists,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { matchRegexOrGlob } from '../../../util/string-match.ts';\nimport type { UpdateArtifact, UpdateArtifactsResult } from '../types.ts';\nimport { PNPM_CACHE_DIR, PNPM_STORE_DIR } from './constants.ts';\nimport { getNodeToolConstraint } from './post-update/node-version.ts';\nimport { processHostRules } from './post-update/rules.ts';\nimport { lazyLoadPackageJson } from './post-update/utils.ts';\nimport {\n getNpmrcContent,\n resetNpmrcContent,\n updateNpmrcContent,\n} from './utils.ts';\n\n// eg. 8.15.5+sha256.4b4efa12490e5055d59b9b9fc9438b7d581a6b7af3b5675eb5c5f447cee1a589\nconst versionWithHashRegString = '^(?<version>.*)\\\\+(?<hash>.*)';\n\n// Execute 'corepack use' command for npm manager updates\n// This step is necessary because Corepack recommends attaching a hash after the version\n// The hash is generated only after running 'corepack use' and cannot be fetched from the npm registry\nexport async function updateArtifacts(\n updateArtifactsConfig: UpdateArtifact,\n): Promise<UpdateArtifactsResult[] | null> {\n logger.debug(`npm.updateArtifacts(${updateArtifactsConfig.packageFileName})`);\n let res: UpdateArtifactsResult[] = [];\n res.push((await handlePackageManagerUpdates(updateArtifactsConfig)) ?? {});\n res.push((await updatePnpmWorkspace(updateArtifactsConfig)) ?? {});\n\n res = res.filter(isNonEmptyObject);\n if (res.length === 0) {\n return null;\n }\n\n return res;\n}\n\nasync function handlePackageManagerUpdates(\n updateArtifactsConfig: UpdateArtifact,\n): Promise<UpdateArtifactsResult | null> {\n const {\n packageFileName,\n config,\n updatedDeps,\n newPackageFileContent: existingPackageFileContent,\n } = updateArtifactsConfig;\n const packageManagerUpdate = updatedDeps.find(\n (dep) => dep.depType === 'packageManager',\n );\n\n if (!packageManagerUpdate) {\n logger.debug('No packageManager updates - returning null');\n return null;\n }\n\n const { currentValue, depName, newVersion } = packageManagerUpdate;\n\n // Execute 'corepack use' command only if the currentValue already has hash in it\n if (!currentValue || !regEx(versionWithHashRegString).test(currentValue)) {\n return null;\n }\n\n // write old updates before executing corepack update so that they are not removed from package file\n await writeLocalFile(packageFileName, existingPackageFileContent);\n\n // Asumming that corepack only needs to modify the package.json file in the root folder\n // As it should not be regular practice to have different package managers in different workspaces\n const pkgFileDir = upath.dirname(packageFileName);\n const { additionalNpmrcContent } = processHostRules();\n const npmrcContent = await getNpmrcContent(pkgFileDir);\n const lazyPkgJson = lazyLoadPackageJson(pkgFileDir);\n const cmd = `corepack use ${depName}@${newVersion}`;\n\n const nodeConstraints = await getNodeToolConstraint(\n config,\n updatedDeps,\n pkgFileDir,\n lazyPkgJson,\n );\n\n const pnpmConfigCacheDir = await ensureCacheDir(PNPM_CACHE_DIR);\n const pnpmConfigStoreDir = await ensureCacheDir(PNPM_STORE_DIR);\n const execOptions: ExecOptions = {\n cwdFile: packageFileName,\n extraEnv: {\n // To make sure pnpm store location is consistent between \"corepack use\"\n // here and the pnpm commands in ./post-update/pnpm.ts. Check\n // ./post-update/pnpm.ts for more details.\n npm_config_cache_dir: pnpmConfigCacheDir,\n npm_config_store_dir: pnpmConfigStoreDir,\n pnpm_config_cache_dir: pnpmConfigCacheDir,\n pnpm_config_store_dir: pnpmConfigStoreDir,\n },\n toolConstraints: [\n nodeConstraints,\n {\n toolName: 'corepack',\n constraint: config.constraints?.corepack,\n },\n ],\n docker: {},\n };\n\n await updateNpmrcContent(pkgFileDir, npmrcContent, additionalNpmrcContent);\n try {\n await exec(cmd, execOptions);\n await resetNpmrcContent(pkgFileDir, npmrcContent);\n const newPackageFileContent = await readLocalFile(packageFileName, 'utf8');\n if (\n !newPackageFileContent ||\n existingPackageFileContent === newPackageFileContent\n ) {\n return null;\n }\n logger.debug('Returning updated package.json');\n return {\n file: {\n type: 'addition',\n path: packageFileName,\n contents: newPackageFileContent,\n },\n };\n } catch (err) {\n logger.warn({ err }, 'Error updating package.json');\n await resetNpmrcContent(pkgFileDir, npmrcContent);\n return {\n artifactError: {\n fileName: packageFileName,\n stderr: err.message,\n },\n };\n }\n}\n\n/**\n * Update the minimumReleaseAgeExclude setting in pnpm-workspace.yaml if needed\n */\nasync function updatePnpmWorkspace(\n updateArtifactsConfig: UpdateArtifact,\n): Promise<UpdateArtifactsResult | null> {\n const upgrades = updateArtifactsConfig.updatedDeps.filter(\n (u) => u.isVulnerabilityAlert,\n );\n // return early if no security updates are present\n if (isEmptyArray(upgrades)) {\n return null;\n }\n\n const pnpmShrinkwrap = upgrades[0].managerData?.pnpmShrinkwrap;\n if (!isString(pnpmShrinkwrap)) {\n logger.debug(\n 'No pnpm shrinkwrap found, not attempting to update pnpm-workspace.yaml',\n );\n return null;\n }\n const lockFileDir = upath.dirname(pnpmShrinkwrap);\n const pnpmWorkspaceFilePath = upath.join(lockFileDir, 'pnpm-workspace.yaml');\n\n if (!(await localPathExists(pnpmWorkspaceFilePath))) {\n return null;\n }\n\n // use already-updated content when updating the workspace file itself\n const packageFileContent =\n updateArtifactsConfig.packageFileName === pnpmWorkspaceFilePath\n ? updateArtifactsConfig.newPackageFileContent\n : (await readLocalFile(pnpmWorkspaceFilePath, 'utf8'))!;\n const doc = parseDocument(packageFileContent);\n\n if (!doc.get('minimumReleaseAge')) {\n return null;\n }\n\n let updated = false;\n\n for (const upgrade of upgrades) {\n let excludeNode = doc.getIn(['minimumReleaseAgeExclude']) as YAMLSeq | null;\n // v8 ignore next -- TODO: add test #40625\n const newVersion = upgrade.newVersion ?? upgrade.newValue;\n\n /* v8 ignore if -- should not happen, adding for type narrowing*/\n if (excludeNode && !isSeq(excludeNode)) {\n return null;\n }\n\n if (!excludeNode) {\n logger.debug('Adding new exclude block');\n excludeNode = doc.createNode([]) as YAMLSeq;\n const newItem = doc.createNode(`${upgrade.depName}@${newVersion}`);\n newItem.commentBefore = ` Renovate security update: ${upgrade.depName}@${newVersion}`;\n excludeNode.items.push(newItem);\n doc.set('minimumReleaseAgeExclude', excludeNode);\n updated = true;\n continue;\n }\n\n const { item: matchedItem, allExcluded } = getMatchedItem(\n upgrade.depName!,\n excludeNode.items,\n );\n\n if (allExcluded) {\n continue;\n }\n\n if (isScalar<string>(matchedItem)) {\n // if we have a comment before the list, which includes the dependency\n if (excludeNode?.commentBefore?.includes(`${upgrade.depName}@`)) {\n // and it doesn't already have the version included in it\n if (\n !minimumReleaseAgeExcludeIncludesDepNameAndVersion(\n excludeNode.commentBefore,\n upgrade.depName,\n newVersion,\n )\n ) {\n // then append it\n\n // normalize value (no quote handling needed)\n excludeNode.commentBefore =\n excludeNode.commentBefore + ` || ${newVersion}`;\n updated = true;\n }\n }\n // otherwise, if it's in our matched item's comment\n else if (matchedItem.commentBefore) {\n // add it\n if (\n !minimumReleaseAgeExcludeIncludesDepNameAndVersion(\n matchedItem.commentBefore,\n upgrade.depName,\n newVersion,\n )\n ) {\n // normalize value (no quote handling needed)\n matchedItem.commentBefore =\n matchedItem.commentBefore + ` || ${newVersion}`;\n updated = true;\n }\n } else {\n matchedItem.commentBefore = ` Renovate security update: ${upgrade.depName}@${newVersion}`;\n updated = true;\n }\n\n if (\n !minimumReleaseAgeExcludeIncludesDepNameAndVersion(\n matchedItem.value,\n upgrade.depName,\n newVersion,\n )\n ) {\n matchedItem.value = matchedItem.value + ` || ${newVersion}`;\n updated = true;\n }\n } else {\n // add new entry\n const newItem = doc.createNode(`${upgrade.depName}@${newVersion}`);\n newItem.commentBefore = ` Renovate security update: ${upgrade.depName}@${newVersion}`;\n\n excludeNode.items.push(newItem);\n updated = true;\n }\n }\n\n if (!updated) {\n return null;\n }\n\n const newContent = doc.toString();\n await writeLocalFile(pnpmWorkspaceFilePath, newContent);\n\n return {\n file: {\n type: 'addition',\n path: pnpmWorkspaceFilePath,\n contents: newContent,\n },\n };\n}\n\nfunction getMatchedItem(\n depName: string,\n items: unknown[],\n): {\n item: Scalar | null;\n allExcluded: boolean;\n} {\n for (const item of items) {\n /* v8 ignore if -- should not happen */\n if (!isScalar(item) || !isString(item.value)) {\n continue;\n }\n\n if (item.value.startsWith(`${depName}@`)) {\n return {\n allExcluded: false,\n item,\n };\n }\n\n if (item.value === depName || matchRegexOrGlob(depName, item.value)) {\n return {\n allExcluded: true,\n item,\n };\n }\n }\n\n return {\n item: null,\n allExcluded: false,\n };\n}\n\n/** determine whether a comment or a list item contains the depName at a given newVersion */\nfunction minimumReleaseAgeExcludeIncludesDepNameAndVersion(\n line: string,\n depName: string | undefined,\n newVersion: string | undefined,\n): boolean {\n if (line.includes(`${depName}@${newVersion}`)) {\n return true;\n }\n\n if (line.includes(`|| ${newVersion}`)) {\n return true;\n }\n\n return false;\n}\n"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  //#region lib/modules/manager/npm/dep-types.ts
2
+ const pnpmWorkspaceOverrides = "pnpm-workspace.overrides";
2
3
  const knownDepTypes = [
3
4
  {
4
5
  depType: "dependencies",
@@ -54,10 +55,15 @@ const knownDepTypes = [
54
55
  depType: "pnpm.overrides",
55
56
  prettyDepType: "overrides",
56
57
  description: "Listed under `pnpm.overrides`"
58
+ },
59
+ {
60
+ depType: pnpmWorkspaceOverrides,
61
+ prettyDepType: "overrides",
62
+ description: "Listed under `overrides` in a pnpm workspace YAML file"
57
63
  }
58
64
  ];
59
65
  const supportsDynamicDepTypesNote = "Additionally, catalog dependencies produce dynamic `depType` values: `pnpm.catalog.<name>` for [pnpm catalogs](https://pnpm.io/catalogs#defining-catalogs) and `yarn.catalog.<name>` for [yarn catalogs](https://yarnpkg.com/features/catalogs).";
60
66
  //#endregion
61
- export { knownDepTypes, supportsDynamicDepTypesNote };
67
+ export { knownDepTypes, pnpmWorkspaceOverrides, supportsDynamicDepTypesNote };
62
68
 
63
69
  //# sourceMappingURL=dep-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dep-types.js","names":[],"sources":["../../../../lib/modules/manager/npm/dep-types.ts"],"sourcesContent":["import type { DepTypeMetadata } from '../types.ts';\n\nexport const knownDepTypes = [\n {\n depType: 'dependencies',\n prettyDepType: 'dependency',\n description: 'Listed under `dependencies`',\n },\n {\n depType: 'devDependencies',\n prettyDepType: 'devDependency',\n description: 'Listed under `devDependencies`',\n },\n {\n depType: 'optionalDependencies',\n prettyDepType: 'optionalDependency',\n description: 'Listed under `optionalDependencies`',\n },\n {\n depType: 'peerDependencies',\n prettyDepType: 'peerDependency',\n description: 'Listed under `peerDependencies`',\n },\n {\n depType: 'engines',\n prettyDepType: 'engine',\n description: 'Listed under `engines`',\n },\n {\n depType: 'volta',\n prettyDepType: 'volta',\n description: 'Listed under `volta`',\n },\n {\n depType: 'resolutions',\n prettyDepType: 'resolutions',\n description: 'Listed under `resolutions` (Yarn)',\n },\n {\n depType: 'packageManager',\n prettyDepType: 'packageManager',\n description: 'Listed under `packageManager`',\n },\n {\n depType: 'overrides',\n prettyDepType: 'overrides',\n description: 'Listed under `overrides`',\n },\n {\n depType: 'pnpm',\n prettyDepType: 'pnpm',\n description: 'Listed under the top-level `pnpm` field',\n },\n {\n depType: 'pnpm.overrides',\n prettyDepType: 'overrides',\n description: 'Listed under `pnpm.overrides`',\n },\n] as const satisfies readonly DepTypeMetadata[];\n\nexport const supportsDynamicDepTypesNote =\n 'Additionally, catalog dependencies produce dynamic `depType` values: `pnpm.catalog.<name>` for [pnpm catalogs](https://pnpm.io/catalogs#defining-catalogs) and `yarn.catalog.<name>` for [yarn catalogs](https://yarnpkg.com/features/catalogs).';\n"],"mappings":";AAEA,MAAa,gBAAgB;CAC3B;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACF;AAED,MAAa,8BACX"}
1
+ {"version":3,"file":"dep-types.js","names":[],"sources":["../../../../lib/modules/manager/npm/dep-types.ts"],"sourcesContent":["import type { DepTypeMetadata } from '../types.ts';\n\nexport const pnpmWorkspaceOverrides = 'pnpm-workspace.overrides' as const;\n\nexport const knownDepTypes = [\n {\n depType: 'dependencies',\n prettyDepType: 'dependency',\n description: 'Listed under `dependencies`',\n },\n {\n depType: 'devDependencies',\n prettyDepType: 'devDependency',\n description: 'Listed under `devDependencies`',\n },\n {\n depType: 'optionalDependencies',\n prettyDepType: 'optionalDependency',\n description: 'Listed under `optionalDependencies`',\n },\n {\n depType: 'peerDependencies',\n prettyDepType: 'peerDependency',\n description: 'Listed under `peerDependencies`',\n },\n {\n depType: 'engines',\n prettyDepType: 'engine',\n description: 'Listed under `engines`',\n },\n {\n depType: 'volta',\n prettyDepType: 'volta',\n description: 'Listed under `volta`',\n },\n {\n depType: 'resolutions',\n prettyDepType: 'resolutions',\n description: 'Listed under `resolutions` (Yarn)',\n },\n {\n depType: 'packageManager',\n prettyDepType: 'packageManager',\n description: 'Listed under `packageManager`',\n },\n {\n depType: 'overrides',\n prettyDepType: 'overrides',\n description: 'Listed under `overrides`',\n },\n {\n depType: 'pnpm',\n prettyDepType: 'pnpm',\n description: 'Listed under the top-level `pnpm` field',\n },\n {\n depType: 'pnpm.overrides',\n prettyDepType: 'overrides',\n description: 'Listed under `pnpm.overrides`',\n },\n {\n depType: pnpmWorkspaceOverrides,\n prettyDepType: 'overrides',\n description: 'Listed under `overrides` in a pnpm workspace YAML file',\n },\n] as const satisfies readonly DepTypeMetadata[];\n\nexport const supportsDynamicDepTypesNote =\n 'Additionally, catalog dependencies produce dynamic `depType` values: `pnpm.catalog.<name>` for [pnpm catalogs](https://pnpm.io/catalogs#defining-catalogs) and `yarn.catalog.<name>` for [yarn catalogs](https://yarnpkg.com/features/catalogs).';\n"],"mappings":";AAEA,MAAa,yBAAyB;AAEtC,MAAa,gBAAgB;CAC3B;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACD;EACE,SAAS;EACT,eAAe;EACf,aAAa;EACd;CACF;AAED,MAAa,8BACX"}
@@ -10,6 +10,7 @@ async function detectGlobalConfig() {
10
10
  const npmrcFileName = upath.join(homedir, ".npmrc");
11
11
  try {
12
12
  const npmrc = await readSystemFile(npmrcFileName, "utf8");
13
+ // v8 ignore else -- TODO: add test #40625
13
14
  if (isNonEmptyString(npmrc)) {
14
15
  res.npmrc = npmrc;
15
16
  res.npmrcMerge = true;
@@ -1 +1 @@
1
- {"version":3,"file":"detect.js","names":[],"sources":["../../../../lib/modules/manager/npm/detect.ts"],"sourcesContent":["import os from 'node:os';\nimport { isNonEmptyString } from '@sindresorhus/is';\nimport upath from 'upath';\nimport { logger } from '../../../logger/index.ts';\nimport { readSystemFile } from '../../../util/fs/index.ts';\nimport type { GlobalManagerConfig } from '../types.ts';\n\nexport async function detectGlobalConfig(): Promise<GlobalManagerConfig> {\n const res: GlobalManagerConfig = {};\n const homedir = os.homedir();\n const npmrcFileName = upath.join(homedir, '.npmrc');\n try {\n const npmrc = await readSystemFile(npmrcFileName, 'utf8');\n if (isNonEmptyString(npmrc)) {\n res.npmrc = npmrc;\n res.npmrcMerge = true;\n logger.debug(`Detected ${npmrcFileName} and adding it to global config`);\n }\n } catch {\n logger.warn({ npmrcFileName }, 'Error reading .npmrc file');\n }\n return res;\n}\n"],"mappings":";;;;;;AAOA,eAAsB,qBAAmD;CACvE,MAAM,MAA2B,EAAE;CACnC,MAAM,UAAU,GAAG,SAAS;CAC5B,MAAM,gBAAgB,MAAM,KAAK,SAAS,SAAS;AACnD,KAAI;EACF,MAAM,QAAQ,MAAM,eAAe,eAAe,OAAO;AACzD,MAAI,iBAAiB,MAAM,EAAE;AAC3B,OAAI,QAAQ;AACZ,OAAI,aAAa;AACjB,UAAO,MAAM,YAAY,cAAc,iCAAiC;;SAEpE;AACN,SAAO,KAAK,EAAE,eAAe,EAAE,4BAA4B;;AAE7D,QAAO"}
1
+ {"version":3,"file":"detect.js","names":[],"sources":["../../../../lib/modules/manager/npm/detect.ts"],"sourcesContent":["import os from 'node:os';\nimport { isNonEmptyString } from '@sindresorhus/is';\nimport upath from 'upath';\nimport { logger } from '../../../logger/index.ts';\nimport { readSystemFile } from '../../../util/fs/index.ts';\nimport type { GlobalManagerConfig } from '../types.ts';\n\nexport async function detectGlobalConfig(): Promise<GlobalManagerConfig> {\n const res: GlobalManagerConfig = {};\n const homedir = os.homedir();\n const npmrcFileName = upath.join(homedir, '.npmrc');\n try {\n const npmrc = await readSystemFile(npmrcFileName, 'utf8');\n // v8 ignore else -- TODO: add test #40625\n if (isNonEmptyString(npmrc)) {\n res.npmrc = npmrc;\n res.npmrcMerge = true;\n logger.debug(`Detected ${npmrcFileName} and adding it to global config`);\n }\n } catch {\n logger.warn({ npmrcFileName }, 'Error reading .npmrc file');\n }\n return res;\n}\n"],"mappings":";;;;;;AAOA,eAAsB,qBAAmD;CACvE,MAAM,MAA2B,EAAE;CACnC,MAAM,UAAU,GAAG,SAAS;CAC5B,MAAM,gBAAgB,MAAM,KAAK,SAAS,SAAS;AACnD,KAAI;EACF,MAAM,QAAQ,MAAM,eAAe,eAAe,OAAO;;AAEzD,MAAI,iBAAiB,MAAM,EAAE;AAC3B,OAAI,QAAQ;AACZ,OAAI,aAAa;AACjB,UAAO,MAAM,YAAY,cAAc,iCAAiC;;SAEpE;AACN,SAAO,KAAK,EAAE,eAAe,EAAE,4BAA4B;;AAE7D,QAAO"}
@@ -52,6 +52,7 @@ function extractPackageJson(packageJson, packageFile) {
52
52
  depName
53
53
  };
54
54
  if (depName !== key) dep.managerData = { key };
55
+ // v8 ignore else -- TODO: add test #40625
55
56
  if (depType === "overrides" && !isString(val)) deps.push(...extractOverrideDepsRec([depName], val));
56
57
  else if (depType === "pnpm" && depName === "overrides") {
57
58
  for (const [overridesKey, overridesVal] of Object.entries(val)) if (isString(overridesVal)) {
@@ -76,7 +77,7 @@ function extractPackageJson(packageJson, packageFile) {
76
77
  deps.push(dep);
77
78
  }
78
79
  }
79
- } catch (err) {
80
+ } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {
80
81
  logger.debug({
81
82
  fileName: packageFile,
82
83
  depType,
@@ -1 +1 @@
1
- {"version":3,"file":"package-file.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/extract/common/package-file.ts"],"sourcesContent":["import { parsePkgAndParentSelector } from '@pnpm/parse-overrides';\nimport {\n isNonEmptyObject,\n isNonEmptyString,\n isNonEmptyStringAndNotWhitespace,\n isObject,\n isString,\n} from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../../../../../constants/error-messages.ts';\nimport { logger } from '../../../../../logger/index.ts';\nimport { regEx } from '../../../../../util/regex.ts';\nimport type { PackageDependency, PackageFileContent } from '../../../types.ts';\nimport type { NpmManagerData } from '../../types.ts';\nimport { loadPackageJson } from '../../utils.ts';\nimport type { NpmPackage, NpmPackageDependency } from '../types.ts';\nimport {\n extractDependency,\n getExtractedConstraints,\n parseDepName,\n} from './dependency.ts';\nimport { setNodeCommitTopic } from './node.ts';\nimport { extractOverrideDepsRec } from './overrides.ts';\n\nexport function extractPackageJson(\n packageJson: NpmPackage,\n packageFile: string,\n): PackageFileContent<NpmManagerData> | null {\n logger.trace(`npm.extractPackageJson(${packageFile})`);\n const deps: PackageDependency[] = [];\n\n if (packageJson._id && packageJson._args && packageJson._from) {\n logger.debug({ packageFile }, 'Ignoring vendorised package.json');\n return null;\n }\n if (packageFile !== 'package.json' && packageJson.renovate) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = packageFile;\n error.validationError =\n 'Nested package.json must not contain Renovate configuration. Please use `packageRules` with `matchFileNames` in your main config instead.';\n throw error;\n }\n const packageJsonName = packageJson.name;\n logger.debug(\n `npm file ${packageFile} has name ${JSON.stringify(packageJsonName)}`,\n );\n const packageFileVersion = packageJson.version;\n\n const depTypes = {\n dependencies: 'dependency',\n devDependencies: 'devDependency',\n optionalDependencies: 'optionalDependency',\n peerDependencies: 'peerDependency',\n engines: 'engine',\n volta: 'volta',\n resolutions: 'resolutions',\n packageManager: 'packageManager',\n overrides: 'overrides',\n pnpm: 'pnpm',\n };\n\n for (const depType of Object.keys(depTypes) as (keyof typeof depTypes)[]) {\n let dependencies = packageJson[depType];\n if (dependencies) {\n try {\n if (depType === 'packageManager') {\n const match = regEx('^(?<name>.+)@(?<range>.+)$').exec(\n dependencies as string,\n );\n /* v8 ignore next 3 -- needs test */\n if (!match?.groups) {\n break;\n }\n dependencies = { [match.groups.name]: match.groups.range };\n }\n for (const [key, val] of Object.entries(\n dependencies as NpmPackageDependency,\n )) {\n const depName = parseDepName(depType, key);\n let dep: PackageDependency = {\n depType,\n depName,\n };\n if (depName !== key) {\n dep.managerData = { key };\n }\n if (depType === 'overrides' && !isString(val)) {\n // TODO: fix type #22198\n deps.push(\n ...extractOverrideDepsRec(\n [depName],\n val as unknown as NpmManagerData,\n ),\n );\n } else if (depType === 'pnpm' && depName === 'overrides') {\n // pnpm overrides\n // https://pnpm.io/package_json#pnpmoverrides\n for (const [overridesKey, overridesVal] of Object.entries(\n val as unknown as NpmPackageDependency,\n )) {\n if (isString(overridesVal)) {\n // Newer flat syntax: `parent>parent>child`\n const packageName =\n parsePkgAndParentSelector(overridesKey).targetPkg.name;\n dep = {\n depName: overridesKey,\n packageName,\n depType: 'pnpm.overrides',\n ...extractDependency(depName, packageName, overridesVal),\n };\n setNodeCommitTopic(dep);\n // TODO: Is this expected? It's always 'overrides'.\n dep.prettyDepType = depTypes[depName];\n deps.push(dep);\n } else if (isObject(overridesVal)) {\n // Older nested object syntax: `parent: { parent: { child: version } }`\n deps.push(\n ...extractOverrideDepsRec(\n [overridesKey],\n overridesVal as unknown as NpmManagerData,\n ),\n );\n }\n }\n } else {\n // TODO: fix type #22198\n dep = { ...dep, ...extractDependency(depType, depName, val!) };\n setNodeCommitTopic(dep);\n dep.prettyDepType = depTypes[depType];\n deps.push(dep);\n }\n } /* v8 ignore next -- needs test */\n } catch (err) {\n logger.debug(\n { fileName: packageFile, depType, err },\n 'Error parsing package.json',\n );\n return null;\n }\n }\n }\n\n const extractedConstraints = getExtractedConstraints(deps);\n\n return {\n deps,\n extractedConstraints,\n packageFileVersion,\n managerData: {\n packageJsonName,\n hasPackageManager:\n isNonEmptyStringAndNotWhitespace(packageJson.packageManager) ||\n isNonEmptyObject(packageJson.devEngines?.packageManager),\n workspaces: packageJson.workspaces,\n },\n };\n}\n\nexport async function hasPackageManager(\n packageJsonDir: string,\n): Promise<boolean> {\n logger.trace(`npm.hasPackageManager from package.json`);\n\n const packageJsonResult = await loadPackageJson(packageJsonDir);\n\n return (\n isNonEmptyString(packageJsonResult?.packageManager?.name) &&\n isNonEmptyString(packageJsonResult?.packageManager?.version)\n );\n}\n"],"mappings":";;;;;;;;;;AAuBA,SAAgB,mBACd,aACA,aAC2C;AAC3C,QAAO,MAAM,0BAA0B,YAAY,GAAG;CACtD,MAAM,OAA4B,EAAE;AAEpC,KAAI,YAAY,OAAO,YAAY,SAAS,YAAY,OAAO;AAC7D,SAAO,MAAM,EAAE,aAAa,EAAE,mCAAmC;AACjE,SAAO;;AAET,KAAI,gBAAgB,kBAAkB,YAAY,UAAU;EAC1D,MAAM,QAAQ,IAAI,MAAM,kBAAkB;AAC1C,QAAM,mBAAmB;AACzB,QAAM,kBACJ;AACF,QAAM;;CAER,MAAM,kBAAkB,YAAY;AACpC,QAAO,MACL,YAAY,YAAY,YAAY,KAAK,UAAU,gBAAgB,GACpE;CACD,MAAM,qBAAqB,YAAY;CAEvC,MAAM,WAAW;EACf,cAAc;EACd,iBAAiB;EACjB,sBAAsB;EACtB,kBAAkB;EAClB,SAAS;EACT,OAAO;EACP,aAAa;EACb,gBAAgB;EAChB,WAAW;EACX,MAAM;EACP;AAED,MAAK,MAAM,WAAW,OAAO,KAAK,SAAS,EAA+B;EACxE,IAAI,eAAe,YAAY;AAC/B,MAAI,aACF,KAAI;AACF,OAAI,YAAY,kBAAkB;IAChC,MAAM,QAAQ,MAAM,6BAA6B,CAAC,KAChD,aACD;;AAED,QAAI,CAAC,OAAO,OACV;AAEF,mBAAe,GAAG,MAAM,OAAO,OAAO,MAAM,OAAO,OAAO;;AAE5D,QAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAC9B,aACD,EAAE;IACD,MAAM,UAAU,aAAa,SAAS,IAAI;IAC1C,IAAI,MAAyB;KAC3B;KACA;KACD;AACD,QAAI,YAAY,IACd,KAAI,cAAc,EAAE,KAAK;AAE3B,QAAI,YAAY,eAAe,CAAC,SAAS,IAAI,CAE3C,MAAK,KACH,GAAG,uBACD,CAAC,QAAQ,EACT,IACD,CACF;aACQ,YAAY,UAAU,YAAY;UAGtC,MAAM,CAAC,cAAc,iBAAiB,OAAO,QAChD,IACD,CACC,KAAI,SAAS,aAAa,EAAE;MAE1B,MAAM,cACJ,0BAA0B,aAAa,CAAC,UAAU;AACpD,YAAM;OACJ,SAAS;OACT;OACA,SAAS;OACT,GAAG,kBAAkB,SAAS,aAAa,aAAa;OACzD;AACD,yBAAmB,IAAI;AAEvB,UAAI,gBAAgB,SAAS;AAC7B,WAAK,KAAK,IAAI;gBACL,SAAS,aAAa,CAE/B,MAAK,KACH,GAAG,uBACD,CAAC,aAAa,EACd,aACD,CACF;WAGA;AAEL,WAAM;MAAE,GAAG;MAAK,GAAG,kBAAkB,SAAS,SAAS,IAAK;MAAE;AAC9D,wBAAmB,IAAI;AACvB,SAAI,gBAAgB,SAAS;AAC7B,UAAK,KAAK,IAAI;;;WAGX,KAAK;AACZ,UAAO,MACL;IAAE,UAAU;IAAa;IAAS;IAAK,EACvC,6BACD;AACD,UAAO;;;AAOb,QAAO;EACL;EACA,sBAJ2B,wBAAwB,KAAK;EAKxD;EACA,aAAa;GACX;GACA,mBACE,iCAAiC,YAAY,eAAe,IAC5D,iBAAiB,YAAY,YAAY,eAAe;GAC1D,YAAY,YAAY;GACzB;EACF;;AAGH,eAAsB,kBACpB,gBACkB;AAClB,QAAO,MAAM,0CAA0C;CAEvD,MAAM,oBAAoB,MAAM,gBAAgB,eAAe;AAE/D,QACE,iBAAiB,mBAAmB,gBAAgB,KAAK,IACzD,iBAAiB,mBAAmB,gBAAgB,QAAQ"}
1
+ {"version":3,"file":"package-file.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/extract/common/package-file.ts"],"sourcesContent":["import { parsePkgAndParentSelector } from '@pnpm/parse-overrides';\nimport {\n isNonEmptyObject,\n isNonEmptyString,\n isNonEmptyStringAndNotWhitespace,\n isObject,\n isString,\n} from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../../../../../constants/error-messages.ts';\nimport { logger } from '../../../../../logger/index.ts';\nimport { regEx } from '../../../../../util/regex.ts';\nimport type { PackageDependency, PackageFileContent } from '../../../types.ts';\nimport type { NpmManagerData } from '../../types.ts';\nimport { loadPackageJson } from '../../utils.ts';\nimport type { NpmPackage, NpmPackageDependency } from '../types.ts';\nimport {\n extractDependency,\n getExtractedConstraints,\n parseDepName,\n} from './dependency.ts';\nimport { setNodeCommitTopic } from './node.ts';\nimport { extractOverrideDepsRec } from './overrides.ts';\n\nexport function extractPackageJson(\n packageJson: NpmPackage,\n packageFile: string,\n): PackageFileContent<NpmManagerData> | null {\n logger.trace(`npm.extractPackageJson(${packageFile})`);\n const deps: PackageDependency[] = [];\n\n if (packageJson._id && packageJson._args && packageJson._from) {\n logger.debug({ packageFile }, 'Ignoring vendorised package.json');\n return null;\n }\n if (packageFile !== 'package.json' && packageJson.renovate) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = packageFile;\n error.validationError =\n 'Nested package.json must not contain Renovate configuration. Please use `packageRules` with `matchFileNames` in your main config instead.';\n throw error;\n }\n const packageJsonName = packageJson.name;\n logger.debug(\n `npm file ${packageFile} has name ${JSON.stringify(packageJsonName)}`,\n );\n const packageFileVersion = packageJson.version;\n\n const depTypes = {\n dependencies: 'dependency',\n devDependencies: 'devDependency',\n optionalDependencies: 'optionalDependency',\n peerDependencies: 'peerDependency',\n engines: 'engine',\n volta: 'volta',\n resolutions: 'resolutions',\n packageManager: 'packageManager',\n overrides: 'overrides',\n pnpm: 'pnpm',\n };\n\n for (const depType of Object.keys(depTypes) as (keyof typeof depTypes)[]) {\n let dependencies = packageJson[depType];\n if (dependencies) {\n try {\n if (depType === 'packageManager') {\n const match = regEx('^(?<name>.+)@(?<range>.+)$').exec(\n dependencies as string,\n );\n /* v8 ignore next 3 -- needs test */\n if (!match?.groups) {\n break;\n }\n dependencies = { [match.groups.name]: match.groups.range };\n }\n for (const [key, val] of Object.entries(\n dependencies as NpmPackageDependency,\n )) {\n const depName = parseDepName(depType, key);\n let dep: PackageDependency = {\n depType,\n depName,\n };\n if (depName !== key) {\n dep.managerData = { key };\n }\n // v8 ignore else -- TODO: add test #40625\n if (depType === 'overrides' && !isString(val)) {\n // TODO: fix type #22198\n deps.push(\n ...extractOverrideDepsRec(\n [depName],\n val as unknown as NpmManagerData,\n ),\n );\n } else if (depType === 'pnpm' && depName === 'overrides') {\n // pnpm overrides\n // https://pnpm.io/package_json#pnpmoverrides\n for (const [overridesKey, overridesVal] of Object.entries(\n val as unknown as NpmPackageDependency,\n )) {\n if (isString(overridesVal)) {\n // Newer flat syntax: `parent>parent>child`\n const packageName =\n parsePkgAndParentSelector(overridesKey).targetPkg.name;\n dep = {\n depName: overridesKey,\n packageName,\n depType: 'pnpm.overrides',\n ...extractDependency(depName, packageName, overridesVal),\n };\n setNodeCommitTopic(dep);\n // TODO: Is this expected? It's always 'overrides'.\n dep.prettyDepType = depTypes[depName];\n deps.push(dep);\n } else if (isObject(overridesVal)) {\n // Older nested object syntax: `parent: { parent: { child: version } }`\n deps.push(\n ...extractOverrideDepsRec(\n [overridesKey],\n overridesVal as unknown as NpmManagerData,\n ),\n );\n }\n }\n } else {\n // TODO: fix type #22198\n dep = { ...dep, ...extractDependency(depType, depName, val!) };\n setNodeCommitTopic(dep);\n dep.prettyDepType = depTypes[depType];\n deps.push(dep);\n }\n }\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.debug(\n { fileName: packageFile, depType, err },\n 'Error parsing package.json',\n );\n return null;\n }\n }\n }\n\n const extractedConstraints = getExtractedConstraints(deps);\n\n return {\n deps,\n extractedConstraints,\n packageFileVersion,\n managerData: {\n packageJsonName,\n hasPackageManager:\n isNonEmptyStringAndNotWhitespace(packageJson.packageManager) ||\n isNonEmptyObject(packageJson.devEngines?.packageManager),\n workspaces: packageJson.workspaces,\n },\n };\n}\n\nexport async function hasPackageManager(\n packageJsonDir: string,\n): Promise<boolean> {\n logger.trace(`npm.hasPackageManager from package.json`);\n\n const packageJsonResult = await loadPackageJson(packageJsonDir);\n\n return (\n isNonEmptyString(packageJsonResult?.packageManager?.name) &&\n isNonEmptyString(packageJsonResult?.packageManager?.version)\n );\n}\n"],"mappings":";;;;;;;;;;AAuBA,SAAgB,mBACd,aACA,aAC2C;AAC3C,QAAO,MAAM,0BAA0B,YAAY,GAAG;CACtD,MAAM,OAA4B,EAAE;AAEpC,KAAI,YAAY,OAAO,YAAY,SAAS,YAAY,OAAO;AAC7D,SAAO,MAAM,EAAE,aAAa,EAAE,mCAAmC;AACjE,SAAO;;AAET,KAAI,gBAAgB,kBAAkB,YAAY,UAAU;EAC1D,MAAM,QAAQ,IAAI,MAAM,kBAAkB;AAC1C,QAAM,mBAAmB;AACzB,QAAM,kBACJ;AACF,QAAM;;CAER,MAAM,kBAAkB,YAAY;AACpC,QAAO,MACL,YAAY,YAAY,YAAY,KAAK,UAAU,gBAAgB,GACpE;CACD,MAAM,qBAAqB,YAAY;CAEvC,MAAM,WAAW;EACf,cAAc;EACd,iBAAiB;EACjB,sBAAsB;EACtB,kBAAkB;EAClB,SAAS;EACT,OAAO;EACP,aAAa;EACb,gBAAgB;EAChB,WAAW;EACX,MAAM;EACP;AAED,MAAK,MAAM,WAAW,OAAO,KAAK,SAAS,EAA+B;EACxE,IAAI,eAAe,YAAY;AAC/B,MAAI,aACF,KAAI;AACF,OAAI,YAAY,kBAAkB;IAChC,MAAM,QAAQ,MAAM,6BAA6B,CAAC,KAChD,aACD;;AAED,QAAI,CAAC,OAAO,OACV;AAEF,mBAAe,GAAG,MAAM,OAAO,OAAO,MAAM,OAAO,OAAO;;AAE5D,QAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAC9B,aACD,EAAE;IACD,MAAM,UAAU,aAAa,SAAS,IAAI;IAC1C,IAAI,MAAyB;KAC3B;KACA;KACD;AACD,QAAI,YAAY,IACd,KAAI,cAAc,EAAE,KAAK;;AAG3B,QAAI,YAAY,eAAe,CAAC,SAAS,IAAI,CAE3C,MAAK,KACH,GAAG,uBACD,CAAC,QAAQ,EACT,IACD,CACF;aACQ,YAAY,UAAU,YAAY;UAGtC,MAAM,CAAC,cAAc,iBAAiB,OAAO,QAChD,IACD,CACC,KAAI,SAAS,aAAa,EAAE;MAE1B,MAAM,cACJ,0BAA0B,aAAa,CAAC,UAAU;AACpD,YAAM;OACJ,SAAS;OACT;OACA,SAAS;OACT,GAAG,kBAAkB,SAAS,aAAa,aAAa;OACzD;AACD,yBAAmB,IAAI;AAEvB,UAAI,gBAAgB,SAAS;AAC7B,WAAK,KAAK,IAAI;gBACL,SAAS,aAAa,CAE/B,MAAK,KACH,GAAG,uBACD,CAAC,aAAa,EACd,aACD,CACF;WAGA;AAEL,WAAM;MAAE,GAAG;MAAK,GAAG,kBAAkB,SAAS,SAAS,IAAK;MAAE;AAC9D,wBAAmB,IAAI;AACvB,SAAI,gBAAgB,SAAS;AAC7B,UAAK,KAAK,IAAI;;;WAGX,qDAAmD;AAC1D,UAAO,MACL;IAAE,UAAU;IAAa;IAAS;IAAK,EACvC,6BACD;AACD,UAAO;;;AAOb,QAAO;EACL;EACA,sBAJ2B,wBAAwB,KAAK;EAKxD;EACA,aAAa;GACX;GACA,mBACE,iCAAiC,YAAY,eAAe,IAC5D,iBAAiB,YAAY,YAAY,eAAe;GAC1D,YAAY,YAAY;GACzB;EACF;;AAGH,eAAsB,kBACpB,gBACkB;AAClB,QAAO,MAAM,0CAA0C;CAEvD,MAAM,oBAAoB,MAAM,gBAAgB,eAAe;AAE/D,QACE,iBAAiB,mBAAmB,gBAAgB,KAAK,IACzD,iBAAiB,mBAAmB,gBAAgB,QAAQ"}
@@ -1,10 +1,11 @@
1
1
  import { logger } from "../../../../logger/index.js";
2
2
  import { findLocalSiblingOrParent, getSiblingFileName, readLocalFile } from "../../../../util/fs/index.js";
3
3
  import { NpmDatasource } from "../../../datasource/npm/index.js";
4
+ import { PnpmWorkspaceFile } from "../schema.js";
4
5
  import { resolveNpmrc } from "../npmrc.js";
5
6
  import { getExtractedConstraints } from "./common/dependency.js";
6
7
  import { extractPackageJson, hasPackageManager } from "./common/package-file.js";
7
- import { extractPnpmWorkspaceFile, tryParsePnpmWorkspaceYaml } from "./pnpm.js";
8
+ import { extractPnpmWorkspaceFile } from "./pnpm.js";
8
9
  import { extractYarnCatalogs, isZeroInstall } from "./yarn.js";
9
10
  import { postExtract } from "./post/index.js";
10
11
  import { loadConfigFromLegacyYarnrc, loadConfigFromYarnrcYml, resolveRegistryUrl } from "./yarnrc.js";
@@ -67,7 +68,9 @@ async function extractPackageFile(content, packageFile, config) {
67
68
  } else skipInstalls = true;
68
69
  const extractedConstraints = getExtractedConstraints(res.deps);
69
70
  if (yarnrcConfig) {
70
- for (const dep of res.deps) if (dep.depName) {
71
+ for (const dep of res.deps)
72
+ // v8 ignore else -- TODO: add tests #40625
73
+ if (dep.depName) {
71
74
  const registryUrlFromYarnrcConfig = resolveRegistryUrl(dep.packageName ?? dep.depName, yarnrcConfig);
72
75
  if (registryUrlFromYarnrcConfig && dep.datasource === NpmDatasource.id) dep.registryUrls = [registryUrlFromYarnrcConfig];
73
76
  }
@@ -91,38 +94,47 @@ async function extractAllPackageFiles(config, packageFiles) {
91
94
  const npmFiles = [];
92
95
  for (const packageFile of packageFiles) {
93
96
  const content = await readLocalFile(packageFile, "utf8");
94
- if (content) {
95
- const parsedPnpmWorkspaceYaml = tryParsePnpmWorkspaceYaml(content);
97
+ if (content) if (packageFile.endsWith("pnpm-workspace.yaml")) {
98
+ logger.trace({ packageFile }, `Extracting as a pnpm-workspace.yaml file`);
99
+ const parsedPnpmWorkspaceYaml = await PnpmWorkspaceFile.safeParseAsync(content);
96
100
  if (parsedPnpmWorkspaceYaml.success) {
97
101
  logger.trace({ packageFile }, `Extracting file as a pnpm workspace YAML file`);
98
102
  const deps = await extractPnpmWorkspaceFile(parsedPnpmWorkspaceYaml.data, packageFile);
103
+ // v8 ignore else -- TODO: add test #40625
99
104
  if (deps) npmFiles.push({
100
105
  ...deps,
101
106
  packageFile
102
107
  });
103
- } else if (packageFile.endsWith("json")) {
104
- logger.trace({ packageFile }, `Extracting as a package.json file`);
105
- const deps = await extractPackageFile(content, packageFile, config);
106
- if (deps) npmFiles.push({
107
- ...deps,
108
+ } else logger.warn({
109
+ packageFile,
110
+ err: parsedPnpmWorkspaceYaml.error
111
+ }, `Failed to parse pnpm-workspace.yaml file`);
112
+ } else if (packageFile.endsWith("json")) {
113
+ logger.trace({ packageFile }, `Extracting as a package.json file`);
114
+ const deps = await extractPackageFile(content, packageFile, config);
115
+ // v8 ignore else -- TODO: add tests #40625
116
+ if (deps) npmFiles.push({
117
+ ...deps,
118
+ packageFile
119
+ });
120
+ } else {
121
+ logger.trace({ packageFile }, `Extracting as a .yarnrc.yml file`);
122
+ const yarnConfig = loadConfigFromYarnrcYml(content);
123
+ // v8 ignore else -- TODO: add tests #40625
124
+ if (yarnConfig?.catalogs || yarnConfig?.catalog) {
125
+ const hasPackageManagerResult = await hasPackageManager(upath.dirname(packageFile));
126
+ const catalogsDeps = await extractYarnCatalogs({
127
+ catalog: yarnConfig.catalog,
128
+ catalogs: yarnConfig.catalogs
129
+ }, packageFile, hasPackageManagerResult);
130
+ // v8 ignore else -- TODO: add tests #40625
131
+ if (catalogsDeps) npmFiles.push({
132
+ ...catalogsDeps,
108
133
  packageFile
109
134
  });
110
- } else {
111
- logger.trace({ packageFile }, `Extracting as a .yarnrc.yml file`);
112
- const yarnConfig = loadConfigFromYarnrcYml(content);
113
- if (yarnConfig?.catalogs || yarnConfig?.catalog) {
114
- const hasPackageManagerResult = await hasPackageManager(upath.dirname(packageFile));
115
- const catalogsDeps = await extractYarnCatalogs({
116
- catalog: yarnConfig.catalog,
117
- catalogs: yarnConfig.catalogs
118
- }, packageFile, hasPackageManagerResult);
119
- if (catalogsDeps) npmFiles.push({
120
- ...catalogsDeps,
121
- packageFile
122
- });
123
- }
124
135
  }
125
- } else logger.debug({ packageFile }, `No content found`);
136
+ }
137
+ else logger.debug({ packageFile }, `No content found`);
126
138
  }
127
139
  await postExtract(npmFiles);
128
140
  return npmFiles;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../lib/modules/manager/npm/extract/index.ts"],"sourcesContent":["import {\n isArray,\n isNonEmptyObject,\n isNonEmptyStringAndNotWhitespace,\n isString,\n} from '@sindresorhus/is';\nimport upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport {\n findLocalSiblingOrParent,\n getSiblingFileName,\n readLocalFile,\n} from '../../../../util/fs/index.ts';\nimport { NpmDatasource } from '../../../datasource/npm/index.ts';\n\nimport type {\n ExtractConfig,\n PackageFile,\n PackageFileContent,\n} from '../../types.ts';\nimport { resolveNpmrc } from '../npmrc.ts';\nimport type { YarnConfig } from '../schema.ts';\nimport type { NpmLockFiles, NpmManagerData } from '../types.ts';\nimport { getExtractedConstraints } from './common/dependency.ts';\nimport {\n extractPackageJson,\n hasPackageManager,\n} from './common/package-file.ts';\nimport { extractPnpmWorkspaceFile, tryParsePnpmWorkspaceYaml } from './pnpm.ts';\nimport { postExtract } from './post/index.ts';\nimport type { NpmPackage } from './types.ts';\nimport { extractYarnCatalogs, isZeroInstall } from './yarn.ts';\nimport {\n loadConfigFromLegacyYarnrc,\n loadConfigFromYarnrcYml,\n resolveRegistryUrl,\n} from './yarnrc.ts';\n\nfunction hasMultipleLockFiles(lockFiles: NpmLockFiles): boolean {\n return Object.values(lockFiles).filter(isString).length > 1;\n}\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n config: ExtractConfig,\n): Promise<PackageFileContent<NpmManagerData> | null> {\n logger.trace(`npm.extractPackageFile(${packageFile})`);\n logger.trace({ content });\n let packageJson: NpmPackage;\n try {\n packageJson = JSON.parse(content);\n } catch {\n logger.debug({ packageFile }, `Invalid JSON`);\n return null;\n }\n\n const res = extractPackageJson(packageJson, packageFile);\n if (!res) {\n return null;\n }\n\n let workspacesPackages: string[] | undefined;\n if (isArray(packageJson.workspaces)) {\n workspacesPackages = packageJson.workspaces;\n } else {\n workspacesPackages = packageJson.workspaces?.packages;\n }\n\n const lockFiles: NpmLockFiles = {\n yarnLock: 'yarn.lock',\n packageLock: 'package-lock.json',\n shrinkwrapJson: 'npm-shrinkwrap.json',\n pnpmShrinkwrap: 'pnpm-lock.yaml',\n };\n\n for (const [key, val] of Object.entries(lockFiles) as [\n 'yarnLock' | 'packageLock' | 'shrinkwrapJson' | 'pnpmShrinkwrap',\n string,\n ][]) {\n const filePath = getSiblingFileName(packageFile, val);\n if (await readLocalFile(filePath, 'utf8')) {\n lockFiles[key] = filePath;\n } else {\n lockFiles[key] = undefined;\n }\n }\n lockFiles.npmLock = lockFiles.packageLock ?? lockFiles.shrinkwrapJson;\n delete lockFiles.packageLock;\n delete lockFiles.shrinkwrapJson;\n\n if (hasMultipleLockFiles(lockFiles)) {\n logger.warn(\n 'Updating multiple npm lock files is deprecated and support will be removed in future versions.',\n );\n }\n\n const { npmrc, npmrcFileName } = await resolveNpmrc(packageFile, config);\n\n const yarnrcYmlFileName = await findLocalSiblingOrParent(\n packageFile,\n '.yarnrc.yml',\n );\n const yarnZeroInstall = yarnrcYmlFileName\n ? await isZeroInstall(yarnrcYmlFileName)\n : false;\n\n let yarnrcConfig: YarnConfig | null = null;\n const repoYarnrcYml = yarnrcYmlFileName\n ? await readLocalFile(yarnrcYmlFileName, 'utf8')\n : null;\n if (isString(repoYarnrcYml) && repoYarnrcYml.trim().length > 0) {\n yarnrcConfig = loadConfigFromYarnrcYml(repoYarnrcYml);\n }\n\n const legacyYarnrcFileName = await findLocalSiblingOrParent(\n packageFile,\n '.yarnrc',\n );\n const repoLegacyYarnrc = legacyYarnrcFileName\n ? await readLocalFile(legacyYarnrcFileName, 'utf8')\n : null;\n if (isString(repoLegacyYarnrc) && repoLegacyYarnrc.trim().length > 0) {\n yarnrcConfig = loadConfigFromLegacyYarnrc(repoLegacyYarnrc);\n }\n\n if (res.deps.length === 0) {\n logger.debug('Package file has no deps');\n if (\n !(\n !!res.managerData?.packageJsonName ||\n !!res.packageFileVersion ||\n !!npmrc ||\n workspacesPackages\n )\n ) {\n logger.debug('Skipping file');\n return null;\n }\n }\n let skipInstalls = config.skipInstalls;\n if (skipInstalls === null) {\n const hasFancyRefs = !!res.deps.some(\n (dep) =>\n !!dep.currentValue?.startsWith('file:') ||\n !!dep.currentValue?.startsWith('npm:'),\n );\n if ((hasFancyRefs && !!lockFiles.npmLock) || yarnZeroInstall) {\n // https://github.com/npm/cli/issues/1432\n // Explanation:\n // - npm install --package-lock-only is buggy for transitive deps in file: and npm: references\n // - So we set skipInstalls to false if file: or npm: refs are found *and* the user hasn't explicitly set the value already\n // - Also, do not skip install if Yarn zero-install is used\n logger.debug('Automatically setting skipInstalls to false');\n skipInstalls = false;\n } else {\n skipInstalls = true;\n }\n }\n\n const extractedConstraints = getExtractedConstraints(res.deps);\n\n if (yarnrcConfig) {\n for (const dep of res.deps) {\n if (dep.depName) {\n const registryUrlFromYarnrcConfig = resolveRegistryUrl(\n dep.packageName ?? dep.depName,\n yarnrcConfig,\n );\n if (\n registryUrlFromYarnrcConfig &&\n dep.datasource === NpmDatasource.id\n ) {\n dep.registryUrls = [registryUrlFromYarnrcConfig];\n }\n }\n }\n }\n\n return {\n ...res,\n npmrc,\n managerData: {\n ...res.managerData,\n ...lockFiles,\n yarnZeroInstall,\n hasPackageManager:\n isNonEmptyStringAndNotWhitespace(packageJson.packageManager) ||\n isNonEmptyObject(packageJson.devEngines?.packageManager),\n workspacesPackages,\n npmrcFileName, // store npmrc file name so we can later tell if it came from the workspace or not\n },\n skipInstalls,\n extractedConstraints,\n };\n}\n\nexport async function extractAllPackageFiles(\n config: ExtractConfig,\n packageFiles: string[],\n): Promise<PackageFile<NpmManagerData>[]> {\n const npmFiles: PackageFile<NpmManagerData>[] = [];\n for (const packageFile of packageFiles) {\n const content = await readLocalFile(packageFile, 'utf8');\n if (content) {\n // pnpm workspace files are their own package file, defined via managerFilePatterns.\n // We duck-type the content here, to allow users to rename the file itself.\n const parsedPnpmWorkspaceYaml = tryParsePnpmWorkspaceYaml(content);\n if (parsedPnpmWorkspaceYaml.success) {\n logger.trace(\n { packageFile },\n `Extracting file as a pnpm workspace YAML file`,\n );\n const deps = await extractPnpmWorkspaceFile(\n parsedPnpmWorkspaceYaml.data,\n packageFile,\n );\n if (deps) {\n npmFiles.push({\n ...deps,\n packageFile,\n });\n }\n } else {\n if (packageFile.endsWith('json')) {\n logger.trace({ packageFile }, `Extracting as a package.json file`);\n\n const deps = await extractPackageFile(content, packageFile, config);\n if (deps) {\n npmFiles.push({\n ...deps,\n packageFile,\n });\n }\n } else {\n logger.trace({ packageFile }, `Extracting as a .yarnrc.yml file`);\n\n const yarnConfig = loadConfigFromYarnrcYml(content);\n\n if (yarnConfig?.catalogs || yarnConfig?.catalog) {\n const hasPackageManagerResult = await hasPackageManager(\n upath.dirname(packageFile),\n );\n const catalogsDeps = await extractYarnCatalogs(\n { catalog: yarnConfig.catalog, catalogs: yarnConfig.catalogs },\n packageFile,\n hasPackageManagerResult,\n );\n if (catalogsDeps) {\n npmFiles.push({\n ...catalogsDeps,\n packageFile,\n });\n }\n }\n }\n }\n } else {\n logger.debug({ packageFile }, `No content found`);\n }\n }\n\n await postExtract(npmFiles);\n return npmFiles;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../lib/modules/manager/npm/extract/index.ts"],"sourcesContent":["import {\n isArray,\n isNonEmptyObject,\n isNonEmptyStringAndNotWhitespace,\n isString,\n} from '@sindresorhus/is';\nimport upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport {\n findLocalSiblingOrParent,\n getSiblingFileName,\n readLocalFile,\n} from '../../../../util/fs/index.ts';\nimport { NpmDatasource } from '../../../datasource/npm/index.ts';\n\nimport type {\n ExtractConfig,\n PackageFile,\n PackageFileContent,\n} from '../../types.ts';\nimport { resolveNpmrc } from '../npmrc.ts';\nimport { PnpmWorkspaceFile, type YarnConfig } from '../schema.ts';\nimport type { NpmLockFiles, NpmManagerData } from '../types.ts';\nimport { getExtractedConstraints } from './common/dependency.ts';\nimport {\n extractPackageJson,\n hasPackageManager,\n} from './common/package-file.ts';\nimport { extractPnpmWorkspaceFile } from './pnpm.ts';\nimport { postExtract } from './post/index.ts';\nimport type { NpmPackage } from './types.ts';\nimport { extractYarnCatalogs, isZeroInstall } from './yarn.ts';\nimport {\n loadConfigFromLegacyYarnrc,\n loadConfigFromYarnrcYml,\n resolveRegistryUrl,\n} from './yarnrc.ts';\n\nfunction hasMultipleLockFiles(lockFiles: NpmLockFiles): boolean {\n return Object.values(lockFiles).filter(isString).length > 1;\n}\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n config: ExtractConfig,\n): Promise<PackageFileContent<NpmManagerData> | null> {\n logger.trace(`npm.extractPackageFile(${packageFile})`);\n logger.trace({ content });\n let packageJson: NpmPackage;\n try {\n packageJson = JSON.parse(content);\n } catch {\n logger.debug({ packageFile }, `Invalid JSON`);\n return null;\n }\n\n const res = extractPackageJson(packageJson, packageFile);\n if (!res) {\n return null;\n }\n\n let workspacesPackages: string[] | undefined;\n if (isArray(packageJson.workspaces)) {\n workspacesPackages = packageJson.workspaces;\n } else {\n workspacesPackages = packageJson.workspaces?.packages;\n }\n\n const lockFiles: NpmLockFiles = {\n yarnLock: 'yarn.lock',\n packageLock: 'package-lock.json',\n shrinkwrapJson: 'npm-shrinkwrap.json',\n pnpmShrinkwrap: 'pnpm-lock.yaml',\n };\n\n for (const [key, val] of Object.entries(lockFiles) as [\n 'yarnLock' | 'packageLock' | 'shrinkwrapJson' | 'pnpmShrinkwrap',\n string,\n ][]) {\n const filePath = getSiblingFileName(packageFile, val);\n if (await readLocalFile(filePath, 'utf8')) {\n lockFiles[key] = filePath;\n } else {\n lockFiles[key] = undefined;\n }\n }\n lockFiles.npmLock = lockFiles.packageLock ?? lockFiles.shrinkwrapJson;\n delete lockFiles.packageLock;\n delete lockFiles.shrinkwrapJson;\n\n if (hasMultipleLockFiles(lockFiles)) {\n logger.warn(\n 'Updating multiple npm lock files is deprecated and support will be removed in future versions.',\n );\n }\n\n const { npmrc, npmrcFileName } = await resolveNpmrc(packageFile, config);\n\n const yarnrcYmlFileName = await findLocalSiblingOrParent(\n packageFile,\n '.yarnrc.yml',\n );\n const yarnZeroInstall = yarnrcYmlFileName\n ? await isZeroInstall(yarnrcYmlFileName)\n : false;\n\n let yarnrcConfig: YarnConfig | null = null;\n const repoYarnrcYml = yarnrcYmlFileName\n ? await readLocalFile(yarnrcYmlFileName, 'utf8')\n : null;\n if (isString(repoYarnrcYml) && repoYarnrcYml.trim().length > 0) {\n yarnrcConfig = loadConfigFromYarnrcYml(repoYarnrcYml);\n }\n\n const legacyYarnrcFileName = await findLocalSiblingOrParent(\n packageFile,\n '.yarnrc',\n );\n const repoLegacyYarnrc = legacyYarnrcFileName\n ? await readLocalFile(legacyYarnrcFileName, 'utf8')\n : null;\n if (isString(repoLegacyYarnrc) && repoLegacyYarnrc.trim().length > 0) {\n yarnrcConfig = loadConfigFromLegacyYarnrc(repoLegacyYarnrc);\n }\n\n if (res.deps.length === 0) {\n logger.debug('Package file has no deps');\n if (\n !(\n !!res.managerData?.packageJsonName ||\n !!res.packageFileVersion ||\n !!npmrc ||\n workspacesPackages\n )\n ) {\n logger.debug('Skipping file');\n return null;\n }\n }\n let skipInstalls = config.skipInstalls;\n if (skipInstalls === null) {\n const hasFancyRefs = !!res.deps.some(\n (dep) =>\n !!dep.currentValue?.startsWith('file:') ||\n !!dep.currentValue?.startsWith('npm:'),\n );\n if ((hasFancyRefs && !!lockFiles.npmLock) || yarnZeroInstall) {\n // https://github.com/npm/cli/issues/1432\n // Explanation:\n // - npm install --package-lock-only is buggy for transitive deps in file: and npm: references\n // - So we set skipInstalls to false if file: or npm: refs are found *and* the user hasn't explicitly set the value already\n // - Also, do not skip install if Yarn zero-install is used\n logger.debug('Automatically setting skipInstalls to false');\n skipInstalls = false;\n } else {\n skipInstalls = true;\n }\n }\n\n const extractedConstraints = getExtractedConstraints(res.deps);\n\n if (yarnrcConfig) {\n for (const dep of res.deps) {\n // v8 ignore else -- TODO: add tests #40625\n if (dep.depName) {\n const registryUrlFromYarnrcConfig = resolveRegistryUrl(\n dep.packageName ?? dep.depName,\n yarnrcConfig,\n );\n if (\n registryUrlFromYarnrcConfig &&\n dep.datasource === NpmDatasource.id\n ) {\n dep.registryUrls = [registryUrlFromYarnrcConfig];\n }\n }\n }\n }\n\n return {\n ...res,\n npmrc,\n managerData: {\n ...res.managerData,\n ...lockFiles,\n yarnZeroInstall,\n hasPackageManager:\n isNonEmptyStringAndNotWhitespace(packageJson.packageManager) ||\n isNonEmptyObject(packageJson.devEngines?.packageManager),\n workspacesPackages,\n npmrcFileName, // store npmrc file name so we can later tell if it came from the workspace or not\n },\n skipInstalls,\n extractedConstraints,\n };\n}\n\nexport async function extractAllPackageFiles(\n config: ExtractConfig,\n packageFiles: string[],\n): Promise<PackageFile<NpmManagerData>[]> {\n const npmFiles: PackageFile<NpmManagerData>[] = [];\n for (const packageFile of packageFiles) {\n const content = await readLocalFile(packageFile, 'utf8');\n if (content) {\n // pnpm workspace files are their own package file, defined via managerFilePatterns.\n if (packageFile.endsWith('pnpm-workspace.yaml')) {\n logger.trace(\n { packageFile },\n `Extracting as a pnpm-workspace.yaml file`,\n );\n const parsedPnpmWorkspaceYaml =\n await PnpmWorkspaceFile.safeParseAsync(content);\n if (parsedPnpmWorkspaceYaml.success) {\n logger.trace(\n { packageFile },\n `Extracting file as a pnpm workspace YAML file`,\n );\n const deps = await extractPnpmWorkspaceFile(\n parsedPnpmWorkspaceYaml.data,\n packageFile,\n );\n // v8 ignore else -- TODO: add test #40625\n if (deps) {\n npmFiles.push({\n ...deps,\n packageFile,\n });\n }\n } else {\n logger.warn(\n { packageFile, err: parsedPnpmWorkspaceYaml.error },\n `Failed to parse pnpm-workspace.yaml file`,\n );\n }\n } else {\n if (packageFile.endsWith('json')) {\n logger.trace({ packageFile }, `Extracting as a package.json file`);\n\n const deps = await extractPackageFile(content, packageFile, config);\n // v8 ignore else -- TODO: add tests #40625\n if (deps) {\n npmFiles.push({\n ...deps,\n packageFile,\n });\n }\n } else {\n logger.trace({ packageFile }, `Extracting as a .yarnrc.yml file`);\n\n const yarnConfig = loadConfigFromYarnrcYml(content);\n\n // v8 ignore else -- TODO: add tests #40625\n if (yarnConfig?.catalogs || yarnConfig?.catalog) {\n const hasPackageManagerResult = await hasPackageManager(\n upath.dirname(packageFile),\n );\n const catalogsDeps = await extractYarnCatalogs(\n { catalog: yarnConfig.catalog, catalogs: yarnConfig.catalogs },\n packageFile,\n hasPackageManagerResult,\n );\n // v8 ignore else -- TODO: add tests #40625\n if (catalogsDeps) {\n npmFiles.push({\n ...catalogsDeps,\n packageFile,\n });\n }\n }\n }\n }\n } else {\n logger.debug({ packageFile }, `No content found`);\n }\n }\n\n await postExtract(npmFiles);\n return npmFiles;\n}\n"],"mappings":"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"}
@@ -2,10 +2,12 @@ import { GlobalConfig } from "../../../../config/global.js";
2
2
  import { logger } from "../../../../logger/index.js";
3
3
  import { parseSingleYaml } from "../../../../util/yaml.js";
4
4
  import { findLocalSiblingOrParent, getSiblingFileName, localPathExists, readLocalFile } from "../../../../util/fs/index.js";
5
- import { PnpmWorkspaceFile } from "../schema.js";
5
+ import { extractDependency } from "./common/dependency.js";
6
+ import { pnpmWorkspaceOverrides } from "../dep-types.js";
6
7
  import { extractCatalogDeps } from "./common/catalogs.js";
7
8
  import { isNonEmptyObject, isNumber, isObject, isPlainObject, isString } from "@sindresorhus/is";
8
9
  import upath from "upath";
10
+ import { parsePkgAndParentSelector } from "@pnpm/parse-overrides";
9
11
  import { findPackages } from "find-packages";
10
12
  //#region lib/modules/manager/npm/extract/pnpm.ts
11
13
  function isPnpmLockfile(obj) {
@@ -135,19 +137,19 @@ function getLockedDependencyVersions(obj) {
135
137
  }
136
138
  return res;
137
139
  }
138
- function tryParsePnpmWorkspaceYaml(content) {
139
- try {
140
- return {
141
- success: true,
142
- data: parseSingleYaml(content, { customSchema: PnpmWorkspaceFile })
143
- };
144
- } catch {
145
- return { success: false };
146
- }
147
- }
148
- async function extractPnpmWorkspaceFile(catalogs, packageFile) {
140
+ async function extractPnpmWorkspaceFile(workspaceFile, packageFile) {
149
141
  logger.trace(`pnpm.extractPnpmWorkspaceFile(${packageFile})`);
150
- const deps = extractCatalogDeps(pnpmCatalogsToArray(catalogs));
142
+ const deps = extractCatalogDeps(pnpmCatalogsToArray(workspaceFile));
143
+ if (workspaceFile.overrides) for (const [overridesKey, overridesVal] of Object.entries(workspaceFile.overrides)) {
144
+ const packageName = parsePkgAndParentSelector(overridesKey).targetPkg.name;
145
+ const depType = pnpmWorkspaceOverrides;
146
+ deps.push({
147
+ depName: overridesKey,
148
+ packageName,
149
+ depType,
150
+ ...extractDependency(depType, packageName, overridesVal)
151
+ });
152
+ }
151
153
  let pnpmShrinkwrap;
152
154
  const filePath = getSiblingFileName(packageFile, "pnpm-lock.yaml");
153
155
  if (await readLocalFile(filePath, "utf8")) pnpmShrinkwrap = filePath;
@@ -170,6 +172,6 @@ function pnpmCatalogsToArray({ catalog: defaultCatalogDeps, catalogs: namedCatal
170
172
  return result;
171
173
  }
172
174
  //#endregion
173
- export { detectPnpmWorkspaces, extractPnpmWorkspaceFile, getPnpmLock, tryParsePnpmWorkspaceYaml };
175
+ export { detectPnpmWorkspaces, extractPnpmWorkspaceFile, getPnpmLock };
174
176
 
175
177
  //# sourceMappingURL=pnpm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pnpm.js","names":[],"sources":["../../../../../lib/modules/manager/npm/extract/pnpm.ts"],"sourcesContent":["import {\n isNonEmptyObject,\n isNumber,\n isObject,\n isPlainObject,\n isString,\n} from '@sindresorhus/is';\nimport { findPackages } from 'find-packages';\nimport upath from 'upath';\nimport type { z } from 'zod/v3';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport {\n findLocalSiblingOrParent,\n getSiblingFileName,\n localPathExists,\n readLocalFile,\n} from '../../../../util/fs/index.ts';\nimport { parseSingleYaml } from '../../../../util/yaml.ts';\nimport type { PackageFile, PackageFileContent } from '../../types.ts';\nimport type { PnpmDependency, PnpmLockFile } from '../post-update/types.ts';\nimport type { PnpmCatalogs } from '../schema.ts';\nimport { PnpmWorkspaceFile } from '../schema.ts';\nimport type { NpmManagerData } from '../types.ts';\nimport { extractCatalogDeps } from './common/catalogs.ts';\nimport type { Catalog, LockFile } from './types.ts';\n\nfunction isPnpmLockfile(obj: any): obj is PnpmLockFile {\n return isPlainObject(obj) && 'lockfileVersion' in obj;\n}\n\nexport async function extractPnpmFilters(\n fileName: string,\n): Promise<string[] | undefined> {\n try {\n // TODO: use schema (#9610,#22198)\n const contents = parseSingleYaml<PnpmWorkspaceFile>(\n (await readLocalFile(fileName, 'utf8'))!,\n );\n if (\n !Array.isArray(contents.packages) ||\n !contents.packages.every((item) => isString(item))\n ) {\n logger.trace(\n { fileName },\n 'Failed to find required \"packages\" array in pnpm-workspace.yaml',\n );\n return undefined;\n }\n return contents.packages;\n } catch (err) {\n logger.trace({ fileName, err }, 'Failed to parse pnpm-workspace.yaml');\n return undefined;\n }\n}\n\nexport async function findPnpmWorkspace(\n packageFile: string,\n): Promise<{ lockFilePath: string; workspaceYamlPath: string } | null> {\n // search for pnpm-workspace.yaml\n const workspaceYamlPath = await findLocalSiblingOrParent(\n packageFile,\n 'pnpm-workspace.yaml',\n );\n if (!workspaceYamlPath) {\n logger.trace(\n { packageFile },\n 'Failed to locate pnpm-workspace.yaml in a parent directory.',\n );\n return null;\n }\n\n // search for pnpm-lock.yaml next to pnpm-workspace.yaml\n const pnpmLockfilePath = getSiblingFileName(\n workspaceYamlPath,\n 'pnpm-lock.yaml',\n );\n if (!(await localPathExists(pnpmLockfilePath))) {\n logger.trace(\n { workspaceYamlPath, packageFile },\n 'Failed to find a pnpm-lock.yaml sibling for the workspace.',\n );\n return null;\n }\n\n return {\n lockFilePath: pnpmLockfilePath,\n workspaceYamlPath,\n };\n}\n\nexport async function detectPnpmWorkspaces(\n packageFiles: Partial<PackageFile<NpmManagerData>>[],\n): Promise<void> {\n logger.debug(`Detecting pnpm Workspaces`);\n const packagePathCache = new Map<string, string[] | null>();\n\n for (const p of packageFiles) {\n const { packageFile, managerData } = p;\n const pnpmShrinkwrap = managerData?.pnpmShrinkwrap;\n\n // check if pnpmShrinkwrap-file has already been provided\n if (pnpmShrinkwrap) {\n logger.trace(\n { packageFile, pnpmShrinkwrap },\n 'Found an existing pnpm shrinkwrap file; skipping pnpm monorepo check.',\n );\n continue;\n }\n\n // search for corresponding pnpm workspace\n // TODO #22198\n const pnpmWorkspace = await findPnpmWorkspace(packageFile!);\n if (pnpmWorkspace === null) {\n continue;\n }\n const { workspaceYamlPath, lockFilePath } = pnpmWorkspace;\n\n // check if package matches workspace filter\n if (!packagePathCache.has(workspaceYamlPath)) {\n const filters = await extractPnpmFilters(workspaceYamlPath);\n const localDir = GlobalConfig.get('localDir');\n const packages = await findPackages(\n upath.dirname(upath.join(localDir, workspaceYamlPath)),\n {\n patterns: filters,\n // Match the ignores used in @pnpm/find-workspace-packages\n ignore: ['**/node_modules/**', '**/bower_components/**'],\n },\n );\n const packagePaths = packages.map((pkg) =>\n upath.join(pkg.dir, 'package.json'),\n );\n packagePathCache.set(workspaceYamlPath, packagePaths);\n }\n const packagePaths = packagePathCache.get(workspaceYamlPath);\n\n const isPackageInWorkspace = packagePaths?.some((p) =>\n p.endsWith(packageFile!),\n );\n\n if (isPackageInWorkspace) {\n p.managerData ??= {};\n p.managerData.pnpmShrinkwrap = lockFilePath;\n } else {\n logger.trace(\n { packageFile, workspaceYamlPath },\n `Didn't find the package in the pnpm workspace`,\n );\n }\n }\n}\n\nexport async function getPnpmLock(filePath: string): Promise<LockFile> {\n try {\n const pnpmLockRaw = await readLocalFile(filePath, 'utf8');\n if (!pnpmLockRaw) {\n throw new Error('Unable to read pnpm-lock.yaml');\n }\n\n const lockParsed = parseSingleYaml(pnpmLockRaw);\n if (!isPnpmLockfile(lockParsed)) {\n throw new Error('Invalid or empty lockfile');\n }\n logger.trace({ lockParsed }, 'pnpm lockfile parsed');\n\n // field lockfileVersion is type string in lockfileVersion = 6 and type number in < 6\n const lockfileVersion: number = isNumber(lockParsed.lockfileVersion)\n ? lockParsed.lockfileVersion\n : parseFloat(lockParsed.lockfileVersion);\n\n const lockedVersions = getLockedVersions(lockParsed);\n const lockedCatalogVersions = getLockedCatalogVersions(lockParsed);\n\n return {\n lockedVersionsWithPath: lockedVersions,\n lockedVersionsWithCatalog: lockedCatalogVersions,\n lockfileVersion,\n };\n } catch (err) {\n logger.debug({ filePath, err }, 'Warning: Exception parsing pnpm lockfile');\n return { lockedVersions: {} };\n }\n}\n\nfunction getLockedCatalogVersions(\n lockParsed: PnpmLockFile,\n): Record<string, Record<string, string>> {\n const lockedVersions: Record<string, Record<string, string>> = {};\n\n if (isNonEmptyObject(lockParsed.catalogs)) {\n for (const [catalog, dependencies] of Object.entries(lockParsed.catalogs)) {\n const versions: Record<string, string> = {};\n\n for (const [dep, versionCarrier] of Object.entries(dependencies)) {\n versions[dep] = versionCarrier.version;\n }\n\n lockedVersions[catalog] = versions;\n }\n }\n\n return lockedVersions;\n}\n\nfunction getLockedVersions(\n lockParsed: PnpmLockFile,\n): Record<string, Record<string, Record<string, string>>> {\n const lockedVersions: Record<\n string,\n Record<string, Record<string, string>>\n > = {};\n\n // monorepo\n if (isNonEmptyObject(lockParsed.importers)) {\n for (const [importer, imports] of Object.entries(lockParsed.importers)) {\n lockedVersions[importer] = getLockedDependencyVersions(imports);\n }\n }\n // normal repo\n else {\n lockedVersions['.'] = getLockedDependencyVersions(lockParsed);\n }\n\n return lockedVersions;\n}\n\nfunction getLockedDependencyVersions(\n obj: PnpmLockFile | Record<string, PnpmDependency>,\n): Record<string, Record<string, string>> {\n const dependencyTypes = [\n 'dependencies',\n 'devDependencies',\n 'optionalDependencies',\n ] as const;\n\n const res: Record<string, Record<string, string>> = {};\n for (const depType of dependencyTypes) {\n res[depType] = {};\n for (const [pkgName, versionCarrier] of Object.entries(\n obj[depType] ?? {},\n )) {\n let version: string;\n if (isObject(versionCarrier)) {\n version = versionCarrier.version;\n } else {\n version = versionCarrier;\n }\n\n const pkgVersion = version.split('(')[0].trim();\n res[depType][pkgName] = pkgVersion;\n }\n }\n\n return res;\n}\n\nexport function tryParsePnpmWorkspaceYaml(content: string):\n | {\n success: true;\n data: PnpmWorkspaceFile;\n }\n | { success: false; data?: never } {\n try {\n const data = parseSingleYaml(content, {\n customSchema: PnpmWorkspaceFile,\n });\n return { success: true, data };\n } catch {\n return { success: false };\n }\n}\n\ntype PnpmCatalogs = z.TypeOf<typeof PnpmCatalogs>;\n\nexport async function extractPnpmWorkspaceFile(\n catalogs: PnpmCatalogs,\n packageFile: string,\n): Promise<PackageFileContent<NpmManagerData> | null> {\n logger.trace(`pnpm.extractPnpmWorkspaceFile(${packageFile})`);\n\n const pnpmCatalogs = pnpmCatalogsToArray(catalogs);\n\n const deps = extractCatalogDeps(pnpmCatalogs);\n\n let pnpmShrinkwrap;\n const filePath = getSiblingFileName(packageFile, 'pnpm-lock.yaml');\n\n if (await readLocalFile(filePath, 'utf8')) {\n pnpmShrinkwrap = filePath;\n }\n\n return {\n deps,\n managerData: {\n pnpmShrinkwrap,\n },\n };\n}\n\nfunction pnpmCatalogsToArray({\n catalog: defaultCatalogDeps,\n catalogs: namedCatalogs,\n}: PnpmCatalogs): Catalog[] {\n const result: Catalog[] = [];\n\n if (defaultCatalogDeps !== undefined) {\n result.push({ name: 'default', dependencies: defaultCatalogDeps });\n }\n\n if (!namedCatalogs) {\n return result;\n }\n\n for (const [name, dependencies] of Object.entries(namedCatalogs)) {\n result.push({\n name,\n dependencies,\n });\n }\n\n return result;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"pnpm.js","names":[],"sources":["../../../../../lib/modules/manager/npm/extract/pnpm.ts"],"sourcesContent":["import { parsePkgAndParentSelector } from '@pnpm/parse-overrides';\nimport {\n isNonEmptyObject,\n isNumber,\n isObject,\n isPlainObject,\n isString,\n} from '@sindresorhus/is';\nimport { findPackages } from 'find-packages';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport {\n findLocalSiblingOrParent,\n getSiblingFileName,\n localPathExists,\n readLocalFile,\n} from '../../../../util/fs/index.ts';\nimport { parseSingleYaml } from '../../../../util/yaml.ts';\nimport type { PackageFile, PackageFileContent } from '../../types.ts';\nimport { pnpmWorkspaceOverrides } from '../dep-types.ts';\nimport type { PnpmDependency, PnpmLockFile } from '../post-update/types.ts';\nimport type { PnpmCatalogs, PnpmWorkspaceFile } from '../schema.ts';\nimport type { NpmManagerData } from '../types.ts';\nimport { extractCatalogDeps } from './common/catalogs.ts';\nimport { extractDependency } from './common/dependency.ts';\nimport type { Catalog, LockFile } from './types.ts';\n\nfunction isPnpmLockfile(obj: any): obj is PnpmLockFile {\n return isPlainObject(obj) && 'lockfileVersion' in obj;\n}\n\nexport async function extractPnpmFilters(\n fileName: string,\n): Promise<string[] | undefined> {\n try {\n // TODO: use schema (#9610,#22198)\n const contents = parseSingleYaml<PnpmWorkspaceFile>(\n (await readLocalFile(fileName, 'utf8'))!,\n );\n if (\n !Array.isArray(contents.packages) ||\n !contents.packages.every((item) => isString(item))\n ) {\n logger.trace(\n { fileName },\n 'Failed to find required \"packages\" array in pnpm-workspace.yaml',\n );\n return undefined;\n }\n return contents.packages;\n } catch (err) {\n logger.trace({ fileName, err }, 'Failed to parse pnpm-workspace.yaml');\n return undefined;\n }\n}\n\nexport async function findPnpmWorkspace(\n packageFile: string,\n): Promise<{ lockFilePath: string; workspaceYamlPath: string } | null> {\n // search for pnpm-workspace.yaml\n const workspaceYamlPath = await findLocalSiblingOrParent(\n packageFile,\n 'pnpm-workspace.yaml',\n );\n if (!workspaceYamlPath) {\n logger.trace(\n { packageFile },\n 'Failed to locate pnpm-workspace.yaml in a parent directory.',\n );\n return null;\n }\n\n // search for pnpm-lock.yaml next to pnpm-workspace.yaml\n const pnpmLockfilePath = getSiblingFileName(\n workspaceYamlPath,\n 'pnpm-lock.yaml',\n );\n if (!(await localPathExists(pnpmLockfilePath))) {\n logger.trace(\n { workspaceYamlPath, packageFile },\n 'Failed to find a pnpm-lock.yaml sibling for the workspace.',\n );\n return null;\n }\n\n return {\n lockFilePath: pnpmLockfilePath,\n workspaceYamlPath,\n };\n}\n\nexport async function detectPnpmWorkspaces(\n packageFiles: Partial<PackageFile<NpmManagerData>>[],\n): Promise<void> {\n logger.debug(`Detecting pnpm Workspaces`);\n const packagePathCache = new Map<string, string[] | null>();\n\n for (const p of packageFiles) {\n const { packageFile, managerData } = p;\n const pnpmShrinkwrap = managerData?.pnpmShrinkwrap;\n\n // check if pnpmShrinkwrap-file has already been provided\n if (pnpmShrinkwrap) {\n logger.trace(\n { packageFile, pnpmShrinkwrap },\n 'Found an existing pnpm shrinkwrap file; skipping pnpm monorepo check.',\n );\n continue;\n }\n\n // search for corresponding pnpm workspace\n // TODO #22198\n const pnpmWorkspace = await findPnpmWorkspace(packageFile!);\n if (pnpmWorkspace === null) {\n continue;\n }\n const { workspaceYamlPath, lockFilePath } = pnpmWorkspace;\n\n // check if package matches workspace filter\n if (!packagePathCache.has(workspaceYamlPath)) {\n const filters = await extractPnpmFilters(workspaceYamlPath);\n const localDir = GlobalConfig.get('localDir');\n const packages = await findPackages(\n upath.dirname(upath.join(localDir, workspaceYamlPath)),\n {\n patterns: filters,\n // Match the ignores used in @pnpm/find-workspace-packages\n ignore: ['**/node_modules/**', '**/bower_components/**'],\n },\n );\n const packagePaths = packages.map((pkg) =>\n upath.join(pkg.dir, 'package.json'),\n );\n packagePathCache.set(workspaceYamlPath, packagePaths);\n }\n const packagePaths = packagePathCache.get(workspaceYamlPath);\n\n const isPackageInWorkspace = packagePaths?.some((p) =>\n p.endsWith(packageFile!),\n );\n\n if (isPackageInWorkspace) {\n p.managerData ??= {};\n p.managerData.pnpmShrinkwrap = lockFilePath;\n } else {\n logger.trace(\n { packageFile, workspaceYamlPath },\n `Didn't find the package in the pnpm workspace`,\n );\n }\n }\n}\n\nexport async function getPnpmLock(filePath: string): Promise<LockFile> {\n try {\n const pnpmLockRaw = await readLocalFile(filePath, 'utf8');\n if (!pnpmLockRaw) {\n throw new Error('Unable to read pnpm-lock.yaml');\n }\n\n const lockParsed = parseSingleYaml(pnpmLockRaw);\n if (!isPnpmLockfile(lockParsed)) {\n throw new Error('Invalid or empty lockfile');\n }\n logger.trace({ lockParsed }, 'pnpm lockfile parsed');\n\n // field lockfileVersion is type string in lockfileVersion = 6 and type number in < 6\n const lockfileVersion: number = isNumber(lockParsed.lockfileVersion)\n ? lockParsed.lockfileVersion\n : parseFloat(lockParsed.lockfileVersion);\n\n const lockedVersions = getLockedVersions(lockParsed);\n const lockedCatalogVersions = getLockedCatalogVersions(lockParsed);\n\n return {\n lockedVersionsWithPath: lockedVersions,\n lockedVersionsWithCatalog: lockedCatalogVersions,\n lockfileVersion,\n };\n } catch (err) {\n logger.debug({ filePath, err }, 'Warning: Exception parsing pnpm lockfile');\n return { lockedVersions: {} };\n }\n}\n\nfunction getLockedCatalogVersions(\n lockParsed: PnpmLockFile,\n): Record<string, Record<string, string>> {\n const lockedVersions: Record<string, Record<string, string>> = {};\n\n if (isNonEmptyObject(lockParsed.catalogs)) {\n for (const [catalog, dependencies] of Object.entries(lockParsed.catalogs)) {\n const versions: Record<string, string> = {};\n\n for (const [dep, versionCarrier] of Object.entries(dependencies)) {\n versions[dep] = versionCarrier.version;\n }\n\n lockedVersions[catalog] = versions;\n }\n }\n\n return lockedVersions;\n}\n\nfunction getLockedVersions(\n lockParsed: PnpmLockFile,\n): Record<string, Record<string, Record<string, string>>> {\n const lockedVersions: Record<\n string,\n Record<string, Record<string, string>>\n > = {};\n\n // monorepo\n if (isNonEmptyObject(lockParsed.importers)) {\n for (const [importer, imports] of Object.entries(lockParsed.importers)) {\n lockedVersions[importer] = getLockedDependencyVersions(imports);\n }\n }\n // normal repo\n else {\n lockedVersions['.'] = getLockedDependencyVersions(lockParsed);\n }\n\n return lockedVersions;\n}\n\nfunction getLockedDependencyVersions(\n obj: PnpmLockFile | Record<string, PnpmDependency>,\n): Record<string, Record<string, string>> {\n const dependencyTypes = [\n 'dependencies',\n 'devDependencies',\n 'optionalDependencies',\n ] as const;\n\n const res: Record<string, Record<string, string>> = {};\n for (const depType of dependencyTypes) {\n res[depType] = {};\n for (const [pkgName, versionCarrier] of Object.entries(\n obj[depType] ?? {},\n )) {\n let version: string;\n if (isObject(versionCarrier)) {\n version = versionCarrier.version;\n } else {\n version = versionCarrier;\n }\n\n const pkgVersion = version.split('(')[0].trim();\n res[depType][pkgName] = pkgVersion;\n }\n }\n\n return res;\n}\n\nexport async function extractPnpmWorkspaceFile(\n workspaceFile: PnpmWorkspaceFile,\n packageFile: string,\n): Promise<PackageFileContent<NpmManagerData> | null> {\n logger.trace(`pnpm.extractPnpmWorkspaceFile(${packageFile})`);\n\n const pnpmCatalogs = pnpmCatalogsToArray(workspaceFile);\n\n const deps = extractCatalogDeps(pnpmCatalogs);\n\n if (workspaceFile.overrides) {\n for (const [overridesKey, overridesVal] of Object.entries(\n workspaceFile.overrides,\n )) {\n // flat syntax: `parent>parent>child`\n const packageName =\n parsePkgAndParentSelector(overridesKey).targetPkg.name;\n const depType = pnpmWorkspaceOverrides;\n deps.push({\n depName: overridesKey,\n packageName,\n depType,\n ...extractDependency(depType, packageName, overridesVal),\n });\n }\n }\n\n let pnpmShrinkwrap;\n const filePath = getSiblingFileName(packageFile, 'pnpm-lock.yaml');\n\n if (await readLocalFile(filePath, 'utf8')) {\n pnpmShrinkwrap = filePath;\n }\n\n return {\n deps,\n managerData: {\n pnpmShrinkwrap,\n },\n };\n}\n\nfunction pnpmCatalogsToArray({\n catalog: defaultCatalogDeps,\n catalogs: namedCatalogs,\n}: PnpmCatalogs): Catalog[] {\n const result: Catalog[] = [];\n\n if (defaultCatalogDeps !== undefined) {\n result.push({ name: 'default', dependencies: defaultCatalogDeps });\n }\n\n if (!namedCatalogs) {\n return result;\n }\n\n for (const [name, dependencies] of Object.entries(namedCatalogs)) {\n result.push({\n name,\n dependencies,\n });\n }\n\n return result;\n}\n"],"mappings":"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"}
@@ -17,6 +17,7 @@ async function getLockedVersions(packageFiles) {
17
17
  if (yarnLock) {
18
18
  logger.trace("Found yarnLock");
19
19
  lockFiles.push(yarnLock);
20
+ // v8 ignore else -- TODO: add test #40625
20
21
  if (!lockFileCache[yarnLock]) {
21
22
  logger.trace(`Retrieving/parsing ${yarnLock}`);
22
23
  lockFileCache[yarnLock] = await getYarnLock(yarnLock);
@@ -90,9 +91,11 @@ async function getLockedVersions(packageFiles) {
90
91
  const catalogName = pnpmCatalogDepTypeRe.exec(depType)?.groups?.version;
91
92
  if (catalogName) {
92
93
  const lockedVersion = semver.valid(lockFileCache[pnpmShrinkwrap].lockedVersionsWithCatalog?.[catalogName]?.[depName]);
94
+ // v8 ignore else -- TODO: add test #40625
93
95
  if (isString(lockedVersion)) dep.lockedVersion = lockedVersion;
94
96
  } else {
95
97
  const lockedVersion = semver.valid(lockFileCache[pnpmShrinkwrap].lockedVersionsWithPath?.[relativeDir]?.[depType]?.[depName]);
98
+ // v8 ignore else -- TODO: add test #40625
96
99
  if (isString(lockedVersion)) dep.lockedVersion = lockedVersion;
97
100
  }
98
101
  }