renovate 43.112.0 → 43.113.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.
@@ -94,7 +94,7 @@ hashMap.set("quadlet", "e355e13e104351a8b3516a8e272fc5f7e625c9f39b0c492ba27283a3
94
94
  hashMap.set("renovate-config-presets", "a394fe55f8b6ba356f29f76efd9f0d34b56baceb111e6d92f95b29b5ca50ac67");
95
95
  hashMap.set("ruby-version", "2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97");
96
96
  hashMap.set("runtime-version", "b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160");
97
- hashMap.set("sbt", "61f9323c91c45227da71d43120fa1eddc41685502be017118975f77b44fb1b8e");
97
+ hashMap.set("sbt", "74125bd9c76a5724092258cd1dee1ea99fc0d735b463a2b64fedc5d950efde2a");
98
98
  hashMap.set("scalafmt", "9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f");
99
99
  hashMap.set("setup-cfg", "7dea08c5708625e753bd56918bc214df7fb4d8543a26e936926a21ab43b5f785");
100
100
  hashMap.set("sveltos", "167a5cc79098803be3b815a28cc40ef3361c455751e1d6a7a99ba91bfce26709");
@@ -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','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\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','d8f83c65da1e80b639ad44a0d8641e7e97b1d93a1b6c873603333d337ad02011');\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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"}
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','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\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','d8f83c65da1e80b639ad44a0d8641e7e97b1d93a1b6c873603333d337ad02011');\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','74125bd9c76a5724092258cd1dee1ea99fc0d735b463a2b64fedc5d950efde2a');\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"}
@@ -16,14 +16,23 @@ import { lang, query } from "@renovatebot/good-enough-parser";
16
16
  const scala = lang.createLang("scala");
17
17
  const sbtVersionRegex = regEx("sbt\\.version *= *(?<version>\\d+\\.\\d+\\.\\d+)");
18
18
  const sbtProxyUrlRegex = regEx(/^\s*(?<repoName>\S+):\s+(?<proxy>https?:\/\/[\w./-]+)/);
19
- const scalaVersionMatch = query.sym("scalaVersion").op(":=").alt(query.str((ctx, { value: scalaVersion }) => ({
19
+ const scalaVersionMatch = query.sym("scalaVersion").op(":=").alt(query.sym((ctx, { value: currentVarName }) => ({
20
20
  ...ctx,
21
- scalaVersion
22
- })), query.sym((ctx, { value: varName }) => {
21
+ currentVarName
22
+ })).op(".").sym((ctx, { value: varName }) => {
23
+ const dottedVariableName = `${ctx.currentVarName}.${varName}`;
24
+ const currentValue = ctx.vars[dottedVariableName];
25
+ if (currentValue) ctx.scalaVersion = currentValue;
26
+ delete ctx.currentVarName;
27
+ return ctx;
28
+ }), query.sym((ctx, { value: varName }) => {
23
29
  const scalaVersion = ctx.vars[varName];
24
30
  if (scalaVersion) ctx.scalaVersion = scalaVersion;
25
31
  return ctx;
26
- })).handler((ctx) => {
32
+ }), query.str((ctx, { value: scalaVersion }) => ({
33
+ ...ctx,
34
+ scalaVersion
35
+ }))).handler((ctx) => {
27
36
  if (ctx.scalaVersion) {
28
37
  const version = get(id);
29
38
  let packageName = "org.scala-lang:scala-library";
@@ -59,6 +68,21 @@ const variableValueMatch = query.str((ctx, { value }) => {
59
68
  });
60
69
  const assignmentMatch = query.sym("val").join(variableNameMatch).op("=");
61
70
  const variableDefinitionMatch = query.alt(query.sym("lazy").join(assignmentMatch), assignmentMatch, variableNameMatch.op(":=")).join(variableValueMatch);
71
+ const objectFieldMatch = query.sym((ctx, { value: fieldName }) => ({
72
+ ...ctx,
73
+ currentVarName: `${ctx.currentObjectName}.${fieldName}`
74
+ })).op("=").str((ctx, { value }) => {
75
+ ctx.vars[ctx.currentVarName] = value;
76
+ delete ctx.currentVarName;
77
+ return ctx;
78
+ });
79
+ const objectAssignmentMatch = query.sym("val").sym((ctx, { value: currentObjectName }) => ({
80
+ ...ctx,
81
+ currentObjectName
82
+ })).op("=").sym("new").tree({ search: query.many(objectFieldMatch) }).handler((ctx) => {
83
+ delete ctx.currentObjectName;
84
+ return ctx;
85
+ });
62
86
  const groupIdMatch = query.alt(query.sym((ctx, { value: varName }) => {
63
87
  const currentGroupId = ctx.vars[varName];
64
88
  if (currentGroupId) ctx.groupId = currentGroupId;
@@ -67,15 +91,27 @@ const groupIdMatch = query.alt(query.sym((ctx, { value: varName }) => {
67
91
  ...ctx,
68
92
  groupId
69
93
  })));
70
- const artifactIdMatch = query.alt(query.sym((ctx, { value: varName }) => {
71
- const artifactId = ctx.vars[varName];
94
+ const artifactIdMatch = query.alt(query.sym((ctx, { value }) => {
95
+ const artifactId = ctx.vars[value];
72
96
  if (artifactId) ctx.artifactId = artifactId;
73
97
  return ctx;
74
98
  }), query.str((ctx, { value: artifactId }) => ({
75
99
  ...ctx,
76
100
  artifactId
77
101
  })));
78
- const versionMatch = query.alt(query.sym((ctx, { value: varName }) => {
102
+ const versionMatch = query.alt(query.sym((ctx, { value: currentVarName }) => ({
103
+ ...ctx,
104
+ currentVarName
105
+ })).op(".").sym((ctx, { value: varName }) => {
106
+ const dottedVariableName = `${ctx.currentVarName}.${varName}`;
107
+ const currentValue = ctx.vars[dottedVariableName];
108
+ if (currentValue) {
109
+ ctx.currentValue = currentValue;
110
+ ctx.variableName = dottedVariableName;
111
+ }
112
+ delete ctx.currentVarName;
113
+ return ctx;
114
+ }), query.sym((ctx, { value: varName }) => {
79
115
  const currentValue = ctx.vars[varName];
80
116
  if (currentValue) {
81
117
  ctx.currentValue = currentValue;
@@ -150,7 +186,7 @@ function registryUrlHandler(ctx) {
150
186
  const query$1 = query.tree({
151
187
  type: "root-tree",
152
188
  maxDepth: 32,
153
- search: query.alt(scalaVersionMatch, packageFileVersionMatch, sbtPackageMatch, sbtPluginMatch, addResolverMatch, variableDefinitionMatch),
189
+ search: query.alt(scalaVersionMatch, packageFileVersionMatch, sbtPackageMatch, sbtPluginMatch, addResolverMatch, variableDefinitionMatch, objectAssignmentMatch),
154
190
  postHandler: registryUrlHandler
155
191
  });
156
192
  function extractProxyUrls(content, packageFile) {
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","names":["q","mavenVersioning.id","query","semverVersioning.id"],"sources":["../../../../lib/modules/manager/sbt/extract.ts"],"sourcesContent":["import { lang, query as q } from '@renovatebot/good-enough-parser';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { parseUrl } from '../../../util/url.ts';\nimport { GithubReleasesDatasource } from '../../datasource/github-releases/index.ts';\nimport { MAVEN_REPO } from '../../datasource/maven/common.ts';\nimport { MavenDatasource } from '../../datasource/maven/index.ts';\nimport { SbtPackageDatasource } from '../../datasource/sbt-package/index.ts';\nimport {\n SBT_PLUGINS_REPO,\n SbtPluginDatasource,\n} from '../../datasource/sbt-plugin/index.ts';\nimport { get } from '../../versioning/index.ts';\nimport * as mavenVersioning from '../../versioning/maven/index.ts';\nimport * as semverVersioning from '../../versioning/semver/index.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFile,\n PackageFileContent,\n} from '../types.ts';\nimport { normalizeScalaVersion, sortPackageFiles } from './util.ts';\n\ntype Vars = Record<string, string>;\n\ninterface Ctx {\n vars: Vars;\n deps: PackageDependency[];\n registryUrls: string[];\n\n scalaVersion?: string;\n packageFileVersion?: string;\n\n groupId?: string;\n artifactId?: string;\n currentValue?: string;\n\n currentVarName?: string;\n depType?: string;\n useScalaVersion?: boolean;\n variableName?: string;\n}\n\nconst scala = lang.createLang('scala');\n\nconst sbtVersionRegex = regEx(\n 'sbt\\\\.version *= *(?<version>\\\\d+\\\\.\\\\d+\\\\.\\\\d+)',\n);\n\nconst sbtProxyUrlRegex = regEx(\n /^\\s*(?<repoName>\\S+):\\s+(?<proxy>https?:\\/\\/[\\w./-]+)/,\n);\n\nconst scalaVersionMatch = q\n .sym<Ctx>('scalaVersion')\n .op(':=')\n .alt(\n q.str<Ctx>((ctx, { value: scalaVersion }) => ({ ...ctx, scalaVersion })),\n q.sym<Ctx>((ctx, { value: varName }) => {\n const scalaVersion = ctx.vars[varName];\n if (scalaVersion) {\n ctx.scalaVersion = scalaVersion;\n }\n return ctx;\n }),\n )\n .handler((ctx) => {\n if (ctx.scalaVersion) {\n const version = get(mavenVersioning.id);\n\n let packageName = 'org.scala-lang:scala-library';\n if (version.getMajor(ctx.scalaVersion) === 3) {\n packageName = 'org.scala-lang:scala3-library_3';\n }\n\n const dep: PackageDependency = {\n datasource: MavenDatasource.id,\n depName: 'scala',\n packageName,\n currentValue: ctx.scalaVersion,\n separateMinorPatch: true,\n };\n ctx.scalaVersion = normalizeScalaVersion(ctx.scalaVersion);\n ctx.deps.push(dep);\n }\n return ctx;\n });\n\nconst packageFileVersionMatch = q\n .sym<Ctx>('version')\n .op(':=')\n .alt(\n q.str<Ctx>((ctx, { value: packageFileVersion }) => ({\n ...ctx,\n packageFileVersion,\n })),\n q.sym<Ctx>((ctx, { value: varName }) => {\n const packageFileVersion = ctx.vars[varName];\n if (packageFileVersion) {\n ctx.packageFileVersion = packageFileVersion;\n }\n return ctx;\n }),\n );\n\nconst variableNameMatch = q\n .sym<Ctx>((ctx, { value: varName }) => ({\n ...ctx,\n currentVarName: varName,\n }))\n .opt(q.op<Ctx>(':').sym('String'));\n\nconst variableValueMatch = q.str<Ctx>((ctx, { value }) => {\n ctx.vars[ctx.currentVarName!] = value;\n delete ctx.currentVarName;\n return ctx;\n});\n\nconst assignmentMatch = q.sym<Ctx>('val').join(variableNameMatch).op('=');\n\nconst variableDefinitionMatch = q\n .alt(\n q.sym<Ctx>('lazy').join(assignmentMatch),\n assignmentMatch,\n variableNameMatch.op(':='),\n )\n .join(variableValueMatch);\n\nconst groupIdMatch = q.alt<Ctx>(\n q.sym<Ctx>((ctx, { value: varName }) => {\n const currentGroupId = ctx.vars[varName];\n if (currentGroupId) {\n ctx.groupId = currentGroupId;\n }\n return ctx;\n }),\n q.str<Ctx>((ctx, { value: groupId }) => ({ ...ctx, groupId })),\n);\n\nconst artifactIdMatch = q.alt<Ctx>(\n q.sym<Ctx>((ctx, { value: varName }) => {\n const artifactId = ctx.vars[varName];\n if (artifactId) {\n ctx.artifactId = artifactId;\n }\n return ctx;\n }),\n q.str<Ctx>((ctx, { value: artifactId }) => ({ ...ctx, artifactId })),\n);\n\nconst versionMatch = q.alt<Ctx>(\n q.sym<Ctx>((ctx, { value: varName }) => {\n const currentValue = ctx.vars[varName];\n if (currentValue) {\n ctx.currentValue = currentValue;\n ctx.variableName = varName;\n }\n return ctx;\n }),\n q.str<Ctx>((ctx, { value: currentValue }) => ({ ...ctx, currentValue })),\n);\n\nconst simpleDependencyMatch = groupIdMatch\n .op('%')\n .join(artifactIdMatch)\n .op('%')\n .join(versionMatch);\n\nconst versionedDependencyMatch = groupIdMatch\n .op('%%')\n .join(artifactIdMatch)\n .handler((ctx) => ({ ...ctx, useScalaVersion: true }))\n .op('%')\n .join(versionMatch);\n\nconst crossDependencyMatch = groupIdMatch\n .op('%%%')\n .join(artifactIdMatch)\n .handler((ctx) => ({ ...ctx, useScalaVersion: true }))\n .op('%')\n .join(versionMatch);\n\nfunction depHandler(ctx: Ctx): Ctx {\n const {\n scalaVersion,\n groupId,\n artifactId,\n currentValue,\n useScalaVersion,\n depType,\n variableName,\n } = ctx;\n\n delete ctx.groupId;\n delete ctx.artifactId;\n delete ctx.currentValue;\n delete ctx.useScalaVersion;\n delete ctx.depType;\n delete ctx.variableName;\n\n const depName = `${groupId!}:${artifactId!}`;\n\n const dep: PackageDependency = {\n datasource: SbtPackageDatasource.id,\n depName,\n packageName:\n scalaVersion && useScalaVersion ? `${depName}_${scalaVersion}` : depName,\n currentValue,\n };\n\n if (depType) {\n dep.depType = depType;\n }\n\n if (depType === 'plugin') {\n dep.datasource = SbtPluginDatasource.id;\n }\n\n if (variableName) {\n dep.sharedVariableName = variableName;\n dep.variableName = variableName;\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nfunction depTypeHandler(ctx: Ctx, { value: depType }: { value: string }): Ctx {\n return { ...ctx, depType };\n}\n\nconst sbtPackageMatch = q\n .opt<Ctx>(q.opt(q.sym<Ctx>('lazy')).sym('val').sym().op('='))\n .alt(crossDependencyMatch, simpleDependencyMatch, versionedDependencyMatch)\n .opt(\n q.alt<Ctx>(\n q.sym<Ctx>('classifier').str(depTypeHandler),\n q.op<Ctx>('%').sym(depTypeHandler),\n q.op<Ctx>('%').str(depTypeHandler),\n ),\n )\n .handler(depHandler);\n\nconst sbtPluginMatch = q\n .sym<Ctx>(regEx(/^(?:addSbtPlugin|addCompilerPlugin)$/))\n .tree({\n type: 'wrapped-tree',\n maxDepth: 1,\n search: q\n .begin<Ctx>()\n .alt(simpleDependencyMatch, versionedDependencyMatch)\n .end(),\n })\n .handler((ctx) => ({ ...ctx, depType: 'plugin' }))\n .handler(depHandler);\n\nconst resolverMatch = q\n .str<Ctx>()\n .sym('at')\n .str((ctx, { value }) => {\n if (parseUrl(value)) {\n ctx.registryUrls.push(value);\n }\n return ctx;\n });\n\nconst addResolverMatch = q.sym<Ctx>('resolvers').alt(\n q.op<Ctx>('+=').join(resolverMatch),\n q.op<Ctx>('++=').sym('Seq').tree({\n type: 'wrapped-tree',\n maxDepth: 1,\n search: resolverMatch,\n }),\n);\n\nfunction registryUrlHandler(ctx: Ctx): Ctx {\n for (const dep of ctx.deps) {\n dep.registryUrls = [...ctx.registryUrls];\n }\n return ctx;\n}\n\nconst query = q.tree<Ctx>({\n type: 'root-tree',\n maxDepth: 32,\n search: q.alt<Ctx>(\n scalaVersionMatch,\n packageFileVersionMatch,\n sbtPackageMatch,\n sbtPluginMatch,\n addResolverMatch,\n variableDefinitionMatch,\n ),\n postHandler: registryUrlHandler,\n});\n\nexport function extractProxyUrls(\n content: string,\n packageFile: string,\n): string[] {\n const extractedProxyUrls: string[] = [];\n logger.debug(`Parsing proxy repository file ${packageFile}`);\n for (const line of content.split(newlineRegex)) {\n const extraction = sbtProxyUrlRegex.exec(line);\n if (extraction?.groups?.proxy) {\n extractedProxyUrls.push(extraction.groups.proxy);\n } else if (line.trim() === 'maven-central') {\n extractedProxyUrls.push(MAVEN_REPO);\n }\n }\n return extractedProxyUrls;\n}\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n): PackageFileContent | null {\n return extractPackageFileInternal(content, packageFile);\n}\n\nfunction extractPackageFileInternal(\n content: string,\n packageFile: string,\n ctxScalaVersion?: string,\n): PackageFileContent | null {\n if (\n packageFile === 'project/build.properties' ||\n packageFile.endsWith('/project/build.properties')\n ) {\n const regexResult = sbtVersionRegex.exec(content);\n const sbtVersion = regexResult?.groups?.version;\n const matchString = regexResult?.[0];\n if (sbtVersion) {\n const sbtDependency: PackageDependency = {\n datasource: GithubReleasesDatasource.id,\n depName: 'sbt/sbt',\n packageName: 'sbt/sbt',\n versioning: semverVersioning.id,\n currentValue: sbtVersion,\n replaceString: matchString,\n extractVersion: '^v(?<version>\\\\S+)',\n registryUrls: [],\n };\n\n return {\n deps: [sbtDependency],\n };\n } else {\n return null;\n }\n }\n\n let parsedResult: Ctx | null = null;\n\n try {\n parsedResult = scala.query(content, query, {\n vars: {},\n deps: [],\n registryUrls: [],\n scalaVersion: ctxScalaVersion,\n });\n } catch (err) /* istanbul ignore next */ {\n logger.debug({ err, packageFile }, 'Sbt parsing error');\n }\n\n if (!parsedResult) {\n return null;\n }\n\n const { deps, scalaVersion, packageFileVersion } = parsedResult;\n\n if (!deps.length) {\n return null;\n }\n\n return { deps, packageFileVersion, managerData: { scalaVersion } };\n}\n\nexport async function extractAllPackageFiles(\n _config: ExtractConfig,\n packageFiles: string[],\n): Promise<PackageFile[]> {\n const packages: PackageFile[] = [];\n const proxyUrls: string[] = [];\n let ctxScalaVersion: string | undefined;\n\n const sortedPackageFiles = sortPackageFiles(packageFiles);\n\n for (const packageFile of sortedPackageFiles) {\n const content = await readLocalFile(packageFile, 'utf8');\n if (!content) {\n logger.debug({ packageFile }, 'packageFile has no content');\n continue;\n }\n if (packageFile === 'repositories') {\n const urls = extractProxyUrls(content, packageFile);\n proxyUrls.push(...urls);\n } else {\n const pkg = extractPackageFileInternal(\n content,\n packageFile,\n ctxScalaVersion,\n );\n if (pkg) {\n packages.push({ deps: pkg.deps, packageFile });\n if (pkg.managerData?.scalaVersion) {\n ctxScalaVersion = pkg.managerData.scalaVersion;\n }\n }\n }\n }\n for (const pkg of packages) {\n for (const dep of pkg.deps) {\n if (dep.datasource !== GithubReleasesDatasource.id) {\n if (proxyUrls.length > 0) {\n dep.registryUrls!.unshift(...proxyUrls);\n } else if (dep.depType === 'plugin') {\n dep.registryUrls!.unshift(SBT_PLUGINS_REPO, MAVEN_REPO);\n } else {\n dep.registryUrls!.unshift(MAVEN_REPO);\n }\n }\n }\n }\n return packages;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","names":["q","mavenVersioning.id","query","semverVersioning.id"],"sources":["../../../../lib/modules/manager/sbt/extract.ts"],"sourcesContent":["import { lang, query as q } from '@renovatebot/good-enough-parser';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { parseUrl } from '../../../util/url.ts';\nimport { GithubReleasesDatasource } from '../../datasource/github-releases/index.ts';\nimport { MAVEN_REPO } from '../../datasource/maven/common.ts';\nimport { MavenDatasource } from '../../datasource/maven/index.ts';\nimport { SbtPackageDatasource } from '../../datasource/sbt-package/index.ts';\nimport {\n SBT_PLUGINS_REPO,\n SbtPluginDatasource,\n} from '../../datasource/sbt-plugin/index.ts';\nimport { get } from '../../versioning/index.ts';\nimport * as mavenVersioning from '../../versioning/maven/index.ts';\nimport * as semverVersioning from '../../versioning/semver/index.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFile,\n PackageFileContent,\n} from '../types.ts';\nimport { normalizeScalaVersion, sortPackageFiles } from './util.ts';\n\ntype Vars = Record<string, string>;\n\ninterface Ctx {\n vars: Vars;\n deps: PackageDependency[];\n registryUrls: string[];\n\n scalaVersion?: string;\n packageFileVersion?: string;\n\n groupId?: string;\n artifactId?: string;\n currentValue?: string;\n\n currentVarName?: string;\n depType?: string;\n useScalaVersion?: boolean;\n variableName?: string;\n\n // Use to contain temporary object name\n // when parsing anonymous object structs.\n // See objectAssignmentMatch.\n currentObjectName?: string;\n}\n\nconst scala = lang.createLang('scala');\n\nconst sbtVersionRegex = regEx(\n 'sbt\\\\.version *= *(?<version>\\\\d+\\\\.\\\\d+\\\\.\\\\d+)',\n);\n\nconst sbtProxyUrlRegex = regEx(\n /^\\s*(?<repoName>\\S+):\\s+(?<proxy>https?:\\/\\/[\\w./-]+)/,\n);\n\nconst scalaVersionMatch = q\n .sym<Ctx>('scalaVersion')\n .op(':=')\n .alt(\n // Dotted symbol. Important to have this first in the `alt` as otherwise\n // the tree walker will eager parse a simple symbol and stop there.\n q\n // keep the first part of the path in context\n .sym<Ctx>((ctx, { value: currentVarName }) => ({\n ...ctx,\n currentVarName,\n }))\n .op('.')\n .sym((ctx, { value: varName }) => {\n // build the full variable name from what we saved earlier\n const dottedVariableName = `${ctx.currentVarName}.${varName}`;\n const currentValue = ctx.vars[dottedVariableName];\n if (currentValue) {\n ctx.scalaVersion = currentValue;\n }\n delete ctx.currentVarName;\n return ctx;\n }),\n // Simple symbol defined previously\n q.sym<Ctx>((ctx, { value: varName }) => {\n const scalaVersion = ctx.vars[varName];\n if (scalaVersion) {\n ctx.scalaVersion = scalaVersion;\n }\n return ctx;\n }),\n // Direct string\n q.str<Ctx>((ctx, { value: scalaVersion }) => ({ ...ctx, scalaVersion })),\n )\n .handler((ctx) => {\n if (ctx.scalaVersion) {\n const version = get(mavenVersioning.id);\n\n let packageName = 'org.scala-lang:scala-library';\n if (version.getMajor(ctx.scalaVersion) === 3) {\n packageName = 'org.scala-lang:scala3-library_3';\n }\n\n const dep: PackageDependency = {\n datasource: MavenDatasource.id,\n depName: 'scala',\n packageName,\n currentValue: ctx.scalaVersion,\n separateMinorPatch: true,\n };\n ctx.scalaVersion = normalizeScalaVersion(ctx.scalaVersion);\n ctx.deps.push(dep);\n }\n return ctx;\n });\n\nconst packageFileVersionMatch = q\n .sym<Ctx>('version')\n .op(':=')\n .alt(\n q.str<Ctx>((ctx, { value: packageFileVersion }) => ({\n ...ctx,\n packageFileVersion,\n })),\n q.sym<Ctx>((ctx, { value: varName }) => {\n const packageFileVersion = ctx.vars[varName];\n if (packageFileVersion) {\n ctx.packageFileVersion = packageFileVersion;\n }\n return ctx;\n }),\n );\n\nconst variableNameMatch = q\n .sym<Ctx>((ctx, { value: varName }) => ({\n ...ctx,\n currentVarName: varName,\n }))\n .opt(q.op<Ctx>(':').sym('String'));\n\nconst variableValueMatch = q.str<Ctx>((ctx, { value }) => {\n ctx.vars[ctx.currentVarName!] = value;\n delete ctx.currentVarName;\n return ctx;\n});\n\nconst assignmentMatch = q.sym<Ctx>('val').join(variableNameMatch).op('=');\n\nconst variableDefinitionMatch = q\n .alt(\n q.sym<Ctx>('lazy').join(assignmentMatch),\n assignmentMatch,\n variableNameMatch.op(':='),\n )\n .join(variableValueMatch);\n\n// Parses objects fields of the form `{name} = \"{version}\"`.\nconst objectFieldMatch = q\n .sym<Ctx>((ctx, { value: fieldName }) => ({\n ...ctx,\n currentVarName: `${ctx.currentObjectName}.${fieldName}`,\n }))\n .op('=')\n .str((ctx, { value }) => {\n ctx.vars[ctx.currentVarName!] = value;\n delete ctx.currentVarName;\n return ctx;\n });\n\n// Parses anonymous objects of the form\n// val {objName} = new {\n// {name} = \"{version}\"\n// }\n// and introduces a `objName.name` variable with value \"{version}\"\n// in the context.\nconst objectAssignmentMatch = q\n .sym<Ctx>('val')\n .sym((ctx, { value: currentObjectName }) => ({\n ...ctx,\n currentObjectName,\n }))\n .op('=')\n .sym('new')\n .tree({\n search: q.many(objectFieldMatch),\n })\n .handler((ctx) => {\n delete ctx.currentObjectName;\n return ctx;\n });\n\nconst groupIdMatch = q.alt<Ctx>(\n q.sym<Ctx>((ctx, { value: varName }) => {\n const currentGroupId = ctx.vars[varName];\n if (currentGroupId) {\n ctx.groupId = currentGroupId;\n }\n return ctx;\n }),\n q.str<Ctx>((ctx, { value: groupId }) => ({ ...ctx, groupId })),\n);\n\nconst artifactIdMatch = q.alt<Ctx>(\n q.sym<Ctx>((ctx, { value }) => {\n const artifactId = ctx.vars[value];\n if (artifactId) {\n ctx.artifactId = artifactId;\n }\n return ctx;\n }),\n q.str<Ctx>((ctx, { value: artifactId }) => ({ ...ctx, artifactId })),\n);\n\nconst versionMatch = q.alt<Ctx>(\n // Dotted symbol. Important to have this first in the `alt` as otherwise\n // the tree walker will eager parse a simple symbol and stop there.\n q\n .sym<Ctx>((ctx, { value: currentVarName }) => ({ ...ctx, currentVarName }))\n .op('.')\n .sym((ctx, { value: varName }) => {\n // build the full variable name from what we saved earlier\n const dottedVariableName = `${ctx.currentVarName}.${varName}`;\n const currentValue = ctx.vars[dottedVariableName];\n if (currentValue) {\n ctx.currentValue = currentValue;\n ctx.variableName = dottedVariableName;\n }\n delete ctx.currentVarName;\n return ctx;\n }),\n // Simple symbol defined earlier\n q.sym<Ctx>((ctx, { value: varName }) => {\n const currentValue = ctx.vars[varName];\n if (currentValue) {\n ctx.currentValue = currentValue;\n ctx.variableName = varName;\n }\n return ctx;\n }),\n // Direct string\n q.str<Ctx>((ctx, { value: currentValue }) => ({ ...ctx, currentValue })),\n);\n\nconst simpleDependencyMatch = groupIdMatch\n .op('%')\n .join(artifactIdMatch)\n .op('%')\n .join(versionMatch);\n\nconst versionedDependencyMatch = groupIdMatch\n .op('%%')\n .join(artifactIdMatch)\n .handler((ctx) => ({ ...ctx, useScalaVersion: true }))\n .op('%')\n .join(versionMatch);\n\nconst crossDependencyMatch = groupIdMatch\n .op('%%%')\n .join(artifactIdMatch)\n .handler((ctx) => ({ ...ctx, useScalaVersion: true }))\n .op('%')\n .join(versionMatch);\n\nfunction depHandler(ctx: Ctx): Ctx {\n const {\n scalaVersion,\n groupId,\n artifactId,\n currentValue,\n useScalaVersion,\n depType,\n variableName,\n } = ctx;\n\n delete ctx.groupId;\n delete ctx.artifactId;\n delete ctx.currentValue;\n delete ctx.useScalaVersion;\n delete ctx.depType;\n delete ctx.variableName;\n\n const depName = `${groupId!}:${artifactId!}`;\n\n const dep: PackageDependency = {\n datasource: SbtPackageDatasource.id,\n depName,\n packageName:\n scalaVersion && useScalaVersion ? `${depName}_${scalaVersion}` : depName,\n currentValue,\n };\n\n if (depType) {\n dep.depType = depType;\n }\n\n if (depType === 'plugin') {\n dep.datasource = SbtPluginDatasource.id;\n }\n\n if (variableName) {\n dep.sharedVariableName = variableName;\n dep.variableName = variableName;\n }\n\n ctx.deps.push(dep);\n\n return ctx;\n}\n\nfunction depTypeHandler(ctx: Ctx, { value: depType }: { value: string }): Ctx {\n return { ...ctx, depType };\n}\n\nconst sbtPackageMatch = q\n .opt<Ctx>(q.opt(q.sym<Ctx>('lazy')).sym('val').sym().op('='))\n .alt(crossDependencyMatch, simpleDependencyMatch, versionedDependencyMatch)\n .opt(\n q.alt<Ctx>(\n q.sym<Ctx>('classifier').str(depTypeHandler),\n q.op<Ctx>('%').sym(depTypeHandler),\n q.op<Ctx>('%').str(depTypeHandler),\n ),\n )\n .handler(depHandler);\n\nconst sbtPluginMatch = q\n .sym<Ctx>(regEx(/^(?:addSbtPlugin|addCompilerPlugin)$/))\n .tree({\n type: 'wrapped-tree',\n maxDepth: 1,\n search: q\n .begin<Ctx>()\n .alt(simpleDependencyMatch, versionedDependencyMatch)\n .end(),\n })\n .handler((ctx) => ({ ...ctx, depType: 'plugin' }))\n .handler(depHandler);\n\nconst resolverMatch = q\n .str<Ctx>()\n .sym('at')\n .str((ctx, { value }) => {\n if (parseUrl(value)) {\n ctx.registryUrls.push(value);\n }\n return ctx;\n });\n\nconst addResolverMatch = q.sym<Ctx>('resolvers').alt(\n q.op<Ctx>('+=').join(resolverMatch),\n q.op<Ctx>('++=').sym('Seq').tree({\n type: 'wrapped-tree',\n maxDepth: 1,\n search: resolverMatch,\n }),\n);\n\nfunction registryUrlHandler(ctx: Ctx): Ctx {\n for (const dep of ctx.deps) {\n dep.registryUrls = [...ctx.registryUrls];\n }\n return ctx;\n}\n\nconst query = q.tree<Ctx>({\n type: 'root-tree',\n maxDepth: 32,\n search: q.alt<Ctx>(\n scalaVersionMatch,\n packageFileVersionMatch,\n sbtPackageMatch,\n sbtPluginMatch,\n addResolverMatch,\n variableDefinitionMatch,\n objectAssignmentMatch,\n ),\n postHandler: registryUrlHandler,\n});\n\nexport function extractProxyUrls(\n content: string,\n packageFile: string,\n): string[] {\n const extractedProxyUrls: string[] = [];\n logger.debug(`Parsing proxy repository file ${packageFile}`);\n for (const line of content.split(newlineRegex)) {\n const extraction = sbtProxyUrlRegex.exec(line);\n if (extraction?.groups?.proxy) {\n extractedProxyUrls.push(extraction.groups.proxy);\n } else if (line.trim() === 'maven-central') {\n extractedProxyUrls.push(MAVEN_REPO);\n }\n }\n return extractedProxyUrls;\n}\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n): PackageFileContent | null {\n return extractPackageFileInternal(content, packageFile);\n}\n\nfunction extractPackageFileInternal(\n content: string,\n packageFile: string,\n ctxScalaVersion?: string,\n): PackageFileContent | null {\n if (\n packageFile === 'project/build.properties' ||\n packageFile.endsWith('/project/build.properties')\n ) {\n const regexResult = sbtVersionRegex.exec(content);\n const sbtVersion = regexResult?.groups?.version;\n const matchString = regexResult?.[0];\n if (sbtVersion) {\n const sbtDependency: PackageDependency = {\n datasource: GithubReleasesDatasource.id,\n depName: 'sbt/sbt',\n packageName: 'sbt/sbt',\n versioning: semverVersioning.id,\n currentValue: sbtVersion,\n replaceString: matchString,\n extractVersion: '^v(?<version>\\\\S+)',\n registryUrls: [],\n };\n\n return {\n deps: [sbtDependency],\n };\n } else {\n return null;\n }\n }\n\n let parsedResult: Ctx | null = null;\n\n try {\n parsedResult = scala.query(content, query, {\n vars: {},\n deps: [],\n registryUrls: [],\n scalaVersion: ctxScalaVersion,\n });\n } catch (err) /* istanbul ignore next */ {\n logger.debug({ err, packageFile }, 'Sbt parsing error');\n }\n\n if (!parsedResult) {\n return null;\n }\n\n const { deps, scalaVersion, packageFileVersion } = parsedResult;\n\n if (!deps.length) {\n return null;\n }\n\n return { deps, packageFileVersion, managerData: { scalaVersion } };\n}\n\nexport async function extractAllPackageFiles(\n _config: ExtractConfig,\n packageFiles: string[],\n): Promise<PackageFile[]> {\n const packages: PackageFile[] = [];\n const proxyUrls: string[] = [];\n let ctxScalaVersion: string | undefined;\n\n const sortedPackageFiles = sortPackageFiles(packageFiles);\n\n for (const packageFile of sortedPackageFiles) {\n const content = await readLocalFile(packageFile, 'utf8');\n if (!content) {\n logger.debug({ packageFile }, 'packageFile has no content');\n continue;\n }\n if (packageFile === 'repositories') {\n const urls = extractProxyUrls(content, packageFile);\n proxyUrls.push(...urls);\n } else {\n const pkg = extractPackageFileInternal(\n content,\n packageFile,\n ctxScalaVersion,\n );\n if (pkg) {\n packages.push({ deps: pkg.deps, packageFile });\n if (pkg.managerData?.scalaVersion) {\n ctxScalaVersion = pkg.managerData.scalaVersion;\n }\n }\n }\n }\n for (const pkg of packages) {\n for (const dep of pkg.deps) {\n if (dep.datasource !== GithubReleasesDatasource.id) {\n if (proxyUrls.length > 0) {\n dep.registryUrls!.unshift(...proxyUrls);\n } else if (dep.depType === 'plugin') {\n dep.registryUrls!.unshift(SBT_PLUGINS_REPO, MAVEN_REPO);\n } else {\n dep.registryUrls!.unshift(MAVEN_REPO);\n }\n }\n }\n }\n return packages;\n}\n"],"mappings":"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"}
@@ -21,6 +21,7 @@ async function decompress(input) {
21
21
  return JSON.parse(jsonStr);
22
22
  }
23
23
  var PackageCacheSqlite = class PackageCacheSqlite extends PackageCacheBase {
24
+ static busyTimeoutMs = 100;
24
25
  static async create(cacheDir) {
25
26
  const Sqlite = await sqlite();
26
27
  const sqliteDir = upath.join(cacheDir, "renovate/renovate-cache-sqlite");
@@ -40,6 +41,7 @@ var PackageCacheSqlite = class PackageCacheSqlite extends PackageCacheBase {
40
41
  this.client = client;
41
42
  client.pragma("journal_mode = WAL");
42
43
  client.pragma("encoding = 'UTF-8'");
44
+ client.pragma(`busy_timeout = ${PackageCacheSqlite.busyTimeoutMs}`);
43
45
  client.prepare(`
44
46
  CREATE TABLE IF NOT EXISTS package_cache (
45
47
  namespace TEXT NOT NULL,
@@ -69,30 +71,53 @@ var PackageCacheSqlite = class PackageCacheSqlite extends PackageCacheBase {
69
71
  this.countStatement = client.prepare("SELECT COUNT(*) FROM package_cache").pluck(true);
70
72
  }
71
73
  async set(namespace, key, value, hardTtlMinutes) {
72
- const compressedData = await compress(value);
73
- const ttlSeconds = hardTtlMinutes * 60;
74
- this.upsertStatement.run({
75
- namespace,
76
- key,
77
- data: compressedData,
78
- ttlSeconds
79
- });
74
+ try {
75
+ const compressedData = await compress(value);
76
+ const ttlSeconds = hardTtlMinutes * 60;
77
+ this.upsertStatement.run({
78
+ namespace,
79
+ key,
80
+ data: compressedData,
81
+ ttlSeconds
82
+ });
83
+ } catch (err) {
84
+ logger.once.warn({ err }, "Error while setting SQLite cache value");
85
+ }
80
86
  }
81
87
  async get(namespace, key) {
82
- const data = this.getStatement.get({
83
- namespace,
84
- key
85
- });
86
- if (!data) return;
87
- return await decompress(data);
88
+ try {
89
+ const data = this.getStatement.get({
90
+ namespace,
91
+ key
92
+ });
93
+ if (!data) {
94
+ logger.trace({
95
+ namespace,
96
+ key
97
+ }, "Cache miss");
98
+ return;
99
+ }
100
+ return await decompress(data);
101
+ } catch (err) {
102
+ logger.once.warn({ err }, "Error while reading SQLite cache value");
103
+ return;
104
+ }
88
105
  }
89
106
  destroy() {
90
- const startTime = Date.now();
91
- const totalCount = this.countStatement.get();
92
- const { changes: deletedCount } = this.deleteExpiredRows.run();
93
- const durationMs = Date.now() - startTime;
94
- logger.debug(`SQLite package cache: deleted ${deletedCount} of ${totalCount} entries in ${durationMs}ms`);
95
- this.client.close();
107
+ try {
108
+ const startTime = Date.now();
109
+ const totalCount = this.countStatement.get();
110
+ const { changes: deletedCount } = this.deleteExpiredRows.run();
111
+ const durationMs = Date.now() - startTime;
112
+ logger.debug(`SQLite package cache: deleted ${deletedCount} of ${totalCount} entries in ${durationMs}ms`);
113
+ } catch (err) {
114
+ logger.warn({ err }, "SQLite package cache cleanup failed");
115
+ }
116
+ try {
117
+ this.client.close();
118
+ } catch (err) {
119
+ logger.warn({ err }, "SQLite package cache close failed");
120
+ }
96
121
  return Promise.resolve();
97
122
  }
98
123
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.js","names":[],"sources":["../../../../../lib/util/cache/package/impl/sqlite.ts"],"sourcesContent":["import { promisify } from 'node:util';\nimport zlib, { constants } from 'node:zlib';\nimport type { Database, Statement } from 'better-sqlite3';\nimport fs from 'fs-extra';\nimport upath from 'upath';\nimport { sqlite } from '../../../../expose.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { ensureDir } from '../../../fs/index.ts';\nimport type { PackageCacheNamespace } from '../types.ts';\nimport { PackageCacheBase } from './base.ts';\n\nconst { exists } = fs;\nconst brotliCompress = promisify(zlib.brotliCompress);\nconst brotliDecompress = promisify(zlib.brotliDecompress);\n\nfunction compress(input: unknown): Promise<Buffer> {\n const jsonStr = JSON.stringify(input);\n return brotliCompress(jsonStr, {\n params: {\n [constants.BROTLI_PARAM_MODE]: constants.BROTLI_MODE_TEXT,\n [constants.BROTLI_PARAM_QUALITY]: 3,\n },\n });\n}\n\nasync function decompress<T>(input: Buffer): Promise<T> {\n const buf = await brotliDecompress(input);\n const jsonStr = buf.toString('utf8');\n return JSON.parse(jsonStr) as T;\n}\n\nexport class PackageCacheSqlite extends PackageCacheBase {\n static async create(cacheDir: string): Promise<PackageCacheSqlite> {\n const Sqlite = await sqlite();\n const sqliteDir = upath.join(cacheDir, 'renovate/renovate-cache-sqlite');\n await ensureDir(sqliteDir);\n const sqliteFile = upath.join(sqliteDir, 'db.sqlite');\n\n if (await exists(sqliteFile)) {\n logger.debug(`Using SQLite package cache: ${sqliteFile}`);\n } else {\n logger.debug(`Creating SQLite package cache: ${sqliteFile}`);\n }\n\n const client = new Sqlite(sqliteFile);\n return new PackageCacheSqlite(client);\n }\n\n private readonly upsertStatement: Statement<unknown[]>;\n private readonly getStatement: Statement<unknown[]>;\n private readonly deleteExpiredRows: Statement<unknown[]>;\n private readonly countStatement: Statement<unknown[]>;\n\n private readonly client: Database;\n\n private constructor(client: Database) {\n super();\n this.client = client;\n\n client.pragma('journal_mode = WAL');\n client.pragma(\"encoding = 'UTF-8'\");\n\n client\n .prepare(\n `\n CREATE TABLE IF NOT EXISTS package_cache (\n namespace TEXT NOT NULL,\n key TEXT NOT NULL,\n expiry INTEGER NOT NULL,\n data BLOB NOT NULL,\n PRIMARY KEY (namespace, key)\n )\n `,\n )\n .run();\n client\n .prepare('CREATE INDEX IF NOT EXISTS expiry ON package_cache (expiry)')\n .run();\n\n this.upsertStatement = client.prepare(`\n INSERT INTO package_cache (namespace, key, data, expiry)\n VALUES (@namespace, @key, @data, unixepoch() + @ttlSeconds)\n ON CONFLICT (namespace, key) DO UPDATE SET\n data = @data,\n expiry = unixepoch() + @ttlSeconds\n `);\n\n this.getStatement = client\n .prepare(\n `\n SELECT data FROM package_cache\n WHERE\n namespace = @namespace AND key = @key AND expiry > unixepoch()\n `,\n )\n .pluck(true);\n\n this.deleteExpiredRows = client.prepare(`\n DELETE FROM package_cache\n WHERE expiry <= unixepoch()\n `);\n\n this.countStatement = client\n .prepare('SELECT COUNT(*) FROM package_cache')\n .pluck(true);\n }\n\n override async set(\n namespace: PackageCacheNamespace,\n key: string,\n value: unknown,\n hardTtlMinutes: number,\n ): Promise<void> {\n const compressedData = await compress(value);\n const ttlSeconds = hardTtlMinutes * 60;\n this.upsertStatement.run({\n namespace,\n key,\n data: compressedData,\n ttlSeconds,\n });\n }\n\n override async get<T = unknown>(\n namespace: PackageCacheNamespace,\n key: string,\n ): Promise<T | undefined> {\n const data = this.getStatement.get({ namespace, key }) as\n | Buffer\n | undefined;\n\n if (!data) {\n return undefined;\n }\n\n return await decompress<T>(data);\n }\n\n override destroy(): Promise<void> {\n const startTime = Date.now();\n const totalCount = this.countStatement.get() as number;\n const { changes: deletedCount } = this.deleteExpiredRows.run();\n const durationMs = Date.now() - startTime;\n logger.debug(\n `SQLite package cache: deleted ${deletedCount} of ${totalCount} entries in ${durationMs}ms`,\n );\n this.client.close();\n return Promise.resolve();\n }\n}\n"],"mappings":";;;;;;;;;AAWA,MAAM,EAAE,WAAW;AACnB,MAAM,iBAAiB,UAAU,KAAK,eAAe;AACrD,MAAM,mBAAmB,UAAU,KAAK,iBAAiB;AAEzD,SAAS,SAAS,OAAiC;AAEjD,QAAO,eADS,KAAK,UAAU,MAAM,EACN,EAC7B,QAAQ;GACL,UAAU,oBAAoB,UAAU;GACxC,UAAU,uBAAuB;EACnC,EACF,CAAC;;AAGJ,eAAe,WAAc,OAA2B;CAEtD,MAAM,WADM,MAAM,iBAAiB,MAAM,EACrB,SAAS,OAAO;AACpC,QAAO,KAAK,MAAM,QAAQ;;AAG5B,IAAa,qBAAb,MAAa,2BAA2B,iBAAiB;CACvD,aAAa,OAAO,UAA+C;EACjE,MAAM,SAAS,MAAM,QAAQ;EAC7B,MAAM,YAAY,MAAM,KAAK,UAAU,iCAAiC;AACxE,QAAM,UAAU,UAAU;EAC1B,MAAM,aAAa,MAAM,KAAK,WAAW,YAAY;AAErD,MAAI,MAAM,OAAO,WAAW,CAC1B,QAAO,MAAM,+BAA+B,aAAa;MAEzD,QAAO,MAAM,kCAAkC,aAAa;AAI9D,SAAO,IAAI,mBADI,IAAI,OAAO,WAAW,CACA;;CAGvC;CACA;CACA;CACA;CAEA;CAEA,YAAoB,QAAkB;AACpC,SAAO;AACP,OAAK,SAAS;AAEd,SAAO,OAAO,qBAAqB;AACnC,SAAO,OAAO,qBAAqB;AAEnC,SACG,QACC;;;;;;;;UASD,CACA,KAAK;AACR,SACG,QAAQ,8DAA8D,CACtE,KAAK;AAER,OAAK,kBAAkB,OAAO,QAAQ;;;;;;MAMpC;AAEF,OAAK,eAAe,OACjB,QACC;;;;UAKD,CACA,MAAM,KAAK;AAEd,OAAK,oBAAoB,OAAO,QAAQ;;;MAGtC;AAEF,OAAK,iBAAiB,OACnB,QAAQ,qCAAqC,CAC7C,MAAM,KAAK;;CAGhB,MAAe,IACb,WACA,KACA,OACA,gBACe;EACf,MAAM,iBAAiB,MAAM,SAAS,MAAM;EAC5C,MAAM,aAAa,iBAAiB;AACpC,OAAK,gBAAgB,IAAI;GACvB;GACA;GACA,MAAM;GACN;GACD,CAAC;;CAGJ,MAAe,IACb,WACA,KACwB;EACxB,MAAM,OAAO,KAAK,aAAa,IAAI;GAAE;GAAW;GAAK,CAAC;AAItD,MAAI,CAAC,KACH;AAGF,SAAO,MAAM,WAAc,KAAK;;CAGlC,UAAkC;EAChC,MAAM,YAAY,KAAK,KAAK;EAC5B,MAAM,aAAa,KAAK,eAAe,KAAK;EAC5C,MAAM,EAAE,SAAS,iBAAiB,KAAK,kBAAkB,KAAK;EAC9D,MAAM,aAAa,KAAK,KAAK,GAAG;AAChC,SAAO,MACL,iCAAiC,aAAa,MAAM,WAAW,cAAc,WAAW,IACzF;AACD,OAAK,OAAO,OAAO;AACnB,SAAO,QAAQ,SAAS"}
1
+ {"version":3,"file":"sqlite.js","names":[],"sources":["../../../../../lib/util/cache/package/impl/sqlite.ts"],"sourcesContent":["import { promisify } from 'node:util';\nimport zlib, { constants } from 'node:zlib';\nimport type { Database, Statement } from 'better-sqlite3';\nimport fs from 'fs-extra';\nimport upath from 'upath';\nimport { sqlite } from '../../../../expose.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { ensureDir } from '../../../fs/index.ts';\nimport type { PackageCacheNamespace } from '../types.ts';\nimport { PackageCacheBase } from './base.ts';\n\nconst { exists } = fs;\nconst brotliCompress = promisify(zlib.brotliCompress);\nconst brotliDecompress = promisify(zlib.brotliDecompress);\n\nfunction compress(input: unknown): Promise<Buffer> {\n const jsonStr = JSON.stringify(input);\n return brotliCompress(jsonStr, {\n params: {\n [constants.BROTLI_PARAM_MODE]: constants.BROTLI_MODE_TEXT,\n [constants.BROTLI_PARAM_QUALITY]: 3,\n },\n });\n}\n\nasync function decompress<T>(input: Buffer): Promise<T> {\n const buf = await brotliDecompress(input);\n const jsonStr = buf.toString('utf8');\n return JSON.parse(jsonStr) as T;\n}\n\nexport class PackageCacheSqlite extends PackageCacheBase {\n private static readonly busyTimeoutMs = 100;\n\n static async create(cacheDir: string): Promise<PackageCacheSqlite> {\n const Sqlite = await sqlite();\n const sqliteDir = upath.join(cacheDir, 'renovate/renovate-cache-sqlite');\n await ensureDir(sqliteDir);\n const sqliteFile = upath.join(sqliteDir, 'db.sqlite');\n\n if (await exists(sqliteFile)) {\n logger.debug(`Using SQLite package cache: ${sqliteFile}`);\n } else {\n logger.debug(`Creating SQLite package cache: ${sqliteFile}`);\n }\n\n const client = new Sqlite(sqliteFile);\n return new PackageCacheSqlite(client);\n }\n\n private readonly upsertStatement: Statement<unknown[]>;\n private readonly getStatement: Statement<unknown[]>;\n private readonly deleteExpiredRows: Statement<unknown[]>;\n private readonly countStatement: Statement<unknown[]>;\n\n readonly client: Database;\n\n private constructor(client: Database) {\n super();\n this.client = client;\n\n client.pragma('journal_mode = WAL');\n client.pragma(\"encoding = 'UTF-8'\");\n client.pragma(`busy_timeout = ${PackageCacheSqlite.busyTimeoutMs}`);\n\n client\n .prepare(\n `\n CREATE TABLE IF NOT EXISTS package_cache (\n namespace TEXT NOT NULL,\n key TEXT NOT NULL,\n expiry INTEGER NOT NULL,\n data BLOB NOT NULL,\n PRIMARY KEY (namespace, key)\n )\n `,\n )\n .run();\n client\n .prepare('CREATE INDEX IF NOT EXISTS expiry ON package_cache (expiry)')\n .run();\n\n this.upsertStatement = client.prepare(`\n INSERT INTO package_cache (namespace, key, data, expiry)\n VALUES (@namespace, @key, @data, unixepoch() + @ttlSeconds)\n ON CONFLICT (namespace, key) DO UPDATE SET\n data = @data,\n expiry = unixepoch() + @ttlSeconds\n `);\n\n this.getStatement = client\n .prepare(\n `\n SELECT data FROM package_cache\n WHERE\n namespace = @namespace AND key = @key AND expiry > unixepoch()\n `,\n )\n .pluck(true);\n\n this.deleteExpiredRows = client.prepare(`\n DELETE FROM package_cache\n WHERE expiry <= unixepoch()\n `);\n\n this.countStatement = client\n .prepare('SELECT COUNT(*) FROM package_cache')\n .pluck(true);\n }\n\n override async set(\n namespace: PackageCacheNamespace,\n key: string,\n value: unknown,\n hardTtlMinutes: number,\n ): Promise<void> {\n try {\n const compressedData = await compress(value);\n const ttlSeconds = hardTtlMinutes * 60;\n this.upsertStatement.run({\n namespace,\n key,\n data: compressedData,\n ttlSeconds,\n });\n } catch (err) {\n logger.once.warn({ err }, 'Error while setting SQLite cache value');\n }\n }\n\n override async get<T = unknown>(\n namespace: PackageCacheNamespace,\n key: string,\n ): Promise<T | undefined> {\n try {\n const data = this.getStatement.get({ namespace, key }) as\n | Buffer\n | undefined;\n\n if (!data) {\n logger.trace({ namespace, key }, 'Cache miss');\n return undefined;\n }\n\n return await decompress<T>(data);\n } catch (err) {\n logger.once.warn({ err }, 'Error while reading SQLite cache value');\n return undefined;\n }\n }\n\n override destroy(): Promise<void> {\n try {\n const startTime = Date.now();\n const totalCount = this.countStatement.get() as number;\n const { changes: deletedCount } = this.deleteExpiredRows.run();\n const durationMs = Date.now() - startTime;\n logger.debug(\n `SQLite package cache: deleted ${deletedCount} of ${totalCount} entries in ${durationMs}ms`,\n );\n } catch (err) {\n logger.warn({ err }, 'SQLite package cache cleanup failed');\n }\n\n try {\n this.client.close();\n } catch (err) {\n logger.warn({ err }, 'SQLite package cache close failed');\n }\n\n return Promise.resolve();\n }\n}\n"],"mappings":";;;;;;;;;AAWA,MAAM,EAAE,WAAW;AACnB,MAAM,iBAAiB,UAAU,KAAK,eAAe;AACrD,MAAM,mBAAmB,UAAU,KAAK,iBAAiB;AAEzD,SAAS,SAAS,OAAiC;AAEjD,QAAO,eADS,KAAK,UAAU,MAAM,EACN,EAC7B,QAAQ;GACL,UAAU,oBAAoB,UAAU;GACxC,UAAU,uBAAuB;EACnC,EACF,CAAC;;AAGJ,eAAe,WAAc,OAA2B;CAEtD,MAAM,WADM,MAAM,iBAAiB,MAAM,EACrB,SAAS,OAAO;AACpC,QAAO,KAAK,MAAM,QAAQ;;AAG5B,IAAa,qBAAb,MAAa,2BAA2B,iBAAiB;CACvD,OAAwB,gBAAgB;CAExC,aAAa,OAAO,UAA+C;EACjE,MAAM,SAAS,MAAM,QAAQ;EAC7B,MAAM,YAAY,MAAM,KAAK,UAAU,iCAAiC;AACxE,QAAM,UAAU,UAAU;EAC1B,MAAM,aAAa,MAAM,KAAK,WAAW,YAAY;AAErD,MAAI,MAAM,OAAO,WAAW,CAC1B,QAAO,MAAM,+BAA+B,aAAa;MAEzD,QAAO,MAAM,kCAAkC,aAAa;AAI9D,SAAO,IAAI,mBADI,IAAI,OAAO,WAAW,CACA;;CAGvC;CACA;CACA;CACA;CAEA;CAEA,YAAoB,QAAkB;AACpC,SAAO;AACP,OAAK,SAAS;AAEd,SAAO,OAAO,qBAAqB;AACnC,SAAO,OAAO,qBAAqB;AACnC,SAAO,OAAO,kBAAkB,mBAAmB,gBAAgB;AAEnE,SACG,QACC;;;;;;;;UASD,CACA,KAAK;AACR,SACG,QAAQ,8DAA8D,CACtE,KAAK;AAER,OAAK,kBAAkB,OAAO,QAAQ;;;;;;MAMpC;AAEF,OAAK,eAAe,OACjB,QACC;;;;UAKD,CACA,MAAM,KAAK;AAEd,OAAK,oBAAoB,OAAO,QAAQ;;;MAGtC;AAEF,OAAK,iBAAiB,OACnB,QAAQ,qCAAqC,CAC7C,MAAM,KAAK;;CAGhB,MAAe,IACb,WACA,KACA,OACA,gBACe;AACf,MAAI;GACF,MAAM,iBAAiB,MAAM,SAAS,MAAM;GAC5C,MAAM,aAAa,iBAAiB;AACpC,QAAK,gBAAgB,IAAI;IACvB;IACA;IACA,MAAM;IACN;IACD,CAAC;WACK,KAAK;AACZ,UAAO,KAAK,KAAK,EAAE,KAAK,EAAE,yCAAyC;;;CAIvE,MAAe,IACb,WACA,KACwB;AACxB,MAAI;GACF,MAAM,OAAO,KAAK,aAAa,IAAI;IAAE;IAAW;IAAK,CAAC;AAItD,OAAI,CAAC,MAAM;AACT,WAAO,MAAM;KAAE;KAAW;KAAK,EAAE,aAAa;AAC9C;;AAGF,UAAO,MAAM,WAAc,KAAK;WACzB,KAAK;AACZ,UAAO,KAAK,KAAK,EAAE,KAAK,EAAE,yCAAyC;AACnE;;;CAIJ,UAAkC;AAChC,MAAI;GACF,MAAM,YAAY,KAAK,KAAK;GAC5B,MAAM,aAAa,KAAK,eAAe,KAAK;GAC5C,MAAM,EAAE,SAAS,iBAAiB,KAAK,kBAAkB,KAAK;GAC9D,MAAM,aAAa,KAAK,KAAK,GAAG;AAChC,UAAO,MACL,iCAAiC,aAAa,MAAM,WAAW,cAAc,WAAW,IACzF;WACM,KAAK;AACZ,UAAO,KAAK,EAAE,KAAK,EAAE,sCAAsC;;AAG7D,MAAI;AACF,QAAK,OAAO,OAAO;WACZ,KAAK;AACZ,UAAO,KAAK,EAAE,KAAK,EAAE,oCAAoC;;AAG3D,SAAO,QAAQ,SAAS"}
@@ -247,7 +247,7 @@ async function ensureDependencyDashboard(config, allBranches, packageFiles = {},
247
247
  if (hasDeprecationsOrReplacements) {
248
248
  issueBody += "## Deprecations / Replacements\n";
249
249
  issueBody += emojify("> :warning: **Warning**\n> \n");
250
- issueBody += "These dependencies are either deprecated or have replacements available:\n\n";
250
+ issueBody += "The following dependencies are either deprecated or have replacements available.\n\n";
251
251
  issueBody += "| Datasource | Package | Replacement PR? |\n";
252
252
  issueBody += "|------------|------|--------------|\n";
253
253
  for (const manager of Object.keys(deprecatedPackages).sort()) {
@@ -335,12 +335,13 @@ function getAbandonedPackagesMd(packageFiles) {
335
335
  };
336
336
  }
337
337
  if (abandonedCount === 0) return "";
338
- let abandonedMd = emojify("## Abandoned Dependencies\n\n> :information_source: **Note**\n> \n");
339
- abandonedMd += "Packages are marked as abandoned when they exceed the [`abandonmentThreshold`](https://docs.renovatebot.com/configuration-options/#abandonmentthreshold) since their last release. ";
340
- abandonedMd += "Unlike deprecated packages with official notices, abandonment is detected by release inactivity.\n> \n";
341
- abandonedMd += "> These dependencies have not received updates for an extended period and may be unmaintained:\n\n";
338
+ let abandonedMd = "## Abandoned Dependencies\n\n";
339
+ abandonedMd += "The following dependencies have not received updates for an extended period and may be unmaintained.\n\n";
342
340
  abandonedMd += "<details>\n";
343
341
  abandonedMd += `<summary>View abandoned dependencies (${abandonedCount})</summary>\n\n`;
342
+ abandonedMd += emojify("> :information_source: **Note**\n> \n");
343
+ abandonedMd += "Packages are marked as abandoned when they exceed the [`abandonmentThreshold`](https://docs.renovatebot.com/configuration-options/#abandonmentthreshold) since their last release. ";
344
+ abandonedMd += "Unlike deprecated packages with official notices, abandonment is detected by release inactivity.\n> \n";
344
345
  abandonedMd += "| Datasource | Package | Last Updated |\n";
345
346
  abandonedMd += "|------------|------|-------------|\n";
346
347
  for (const manager of Object.keys(abandonedPackages).sort()) {
@@ -1 +1 @@
1
- {"version":3,"file":"dependency-dashboard.js","names":["template.compile"],"sources":["../../../lib/workers/repository/dependency-dashboard.ts"],"sourcesContent":["import {\n isNonEmptyArray,\n isNonEmptyObject,\n isNonEmptyString,\n isNullOrUndefined,\n isTruthy,\n} from '@sindresorhus/is';\nimport { DateTime } from 'luxon';\nimport { GlobalConfig } from '../../config/global.ts';\nimport type { RenovateConfig } from '../../config/types.ts';\nimport { logger } from '../../logger/index.ts';\nimport type { PackageFile } from '../../modules/manager/types.ts';\nimport { platform } from '../../modules/platform/index.ts';\nimport { coerceArray } from '../../util/array.ts';\nimport { emojify } from '../../util/emoji.ts';\nimport { regEx } from '../../util/regex.ts';\nimport { coerceString } from '../../util/string.ts';\nimport * as template from '../../util/template/index.ts';\nimport type { BranchConfig, SelectAllConfig } from '../types.ts';\nimport { extractRepoProblems } from './common.ts';\nimport type { ConfigMigrationResult } from './config-migration/index.ts';\nimport { getDepWarningsDashboard } from './errors-warnings.ts';\nimport { PackageFiles } from './package-files.ts';\nimport type { Vulnerability } from './process/types.ts';\nimport { Vulnerabilities } from './process/vulnerabilities.ts';\n\ninterface DependencyDashboard {\n dependencyDashboardChecks: Record<string, string>;\n dependencyDashboardRebaseAllOpen: boolean;\n dependencyDashboardAllPending: boolean;\n dependencyDashboardAllRateLimited: boolean;\n dependencyDashboardAllAwaitingSchedule: boolean;\n}\n\nconst rateLimitedRe = regEx(\n ` - \\\\[ \\\\] ${getMarkdownComment('unlimit-branch=([^\\\\s]+)')}`,\n 'g',\n);\nconst pendingApprovalRe = regEx(\n ` - \\\\[ \\\\] ${getMarkdownComment('approve-branch=([^\\\\s]+)')}`,\n 'g',\n);\nconst awaitingScheduleRe = regEx(\n ` - \\\\[ \\\\] ${getMarkdownComment('unschedule-branch=([^\\\\s]+)')}`,\n 'g',\n);\nconst generalBranchRe = regEx(\n ` ${getMarkdownComment('([a-zA-Z]+)-branch=([^\\\\s]+)')}`,\n);\nconst markedBranchesRe = regEx(\n ` - \\\\[x\\\\] ${getMarkdownComment('([a-zA-Z]+)-branch=([^\\\\s]+)')}`,\n 'g',\n);\n\nconst approveAllPendingPrs = 'approve-all-pending-prs';\nconst createAllRateLimitedPrs = 'create-all-rate-limited-prs';\nconst createAllAwaitingSchedulePrs = 'create-all-awaiting-schedule-prs';\nconst createConfigMigrationPr = 'create-config-migration-pr';\nconst configMigrationPrInfo = 'config-migration-pr-info';\nconst rebaseAllOpenPrs = 'rebase-all-open-prs';\n\nfunction getMarkdownComment(comment: string): string {\n return `<!-- ${comment} -->`;\n}\n\nfunction isBoxChecked(issueBody: string, type: string): boolean {\n return issueBody.includes(getCheckbox(type, true));\n}\n\nfunction isBoxUnchecked(issueBody: string, type: string): boolean {\n return issueBody.includes(getCheckbox(type));\n}\n\nfunction getCheckbox(type: string, checked = false): string {\n return ` - [${checked ? 'x' : ' '}] ${getMarkdownComment(type)}`;\n}\n\nfunction checkOpenAllRateLimitedPR(issueBody: string): boolean {\n return isBoxChecked(issueBody, createAllRateLimitedPrs);\n}\n\nfunction checkOpenAllAwaitingSchedulePR(issueBody: string): boolean {\n return isBoxChecked(issueBody, createAllAwaitingSchedulePrs);\n}\n\nfunction checkApproveAllPendingPR(issueBody: string): boolean {\n return isBoxChecked(issueBody, approveAllPendingPrs);\n}\n\nfunction checkRebaseAll(issueBody: string): boolean {\n return isBoxChecked(issueBody, rebaseAllOpenPrs);\n}\n\nfunction getConfigMigrationCheckboxState(\n issueBody: string,\n): 'no-checkbox' | 'checked' | 'unchecked' | 'migration-pr-exists' {\n if (issueBody.includes(getMarkdownComment(configMigrationPrInfo))) {\n return 'migration-pr-exists';\n }\n\n if (isBoxChecked(issueBody, createConfigMigrationPr)) {\n return 'checked';\n }\n\n if (isBoxUnchecked(issueBody, createConfigMigrationPr)) {\n return 'unchecked';\n }\n\n return 'no-checkbox';\n}\n\nfunction selectAllRelevantBranches(issueBody: string): string[] {\n const checkedBranches = [];\n if (checkOpenAllRateLimitedPR(issueBody)) {\n for (const match of issueBody.matchAll(rateLimitedRe)) {\n checkedBranches.push(match[0]);\n }\n }\n if (checkOpenAllAwaitingSchedulePR(issueBody)) {\n for (const match of issueBody.matchAll(awaitingScheduleRe)) {\n checkedBranches.push(match[0]);\n }\n }\n if (checkApproveAllPendingPR(issueBody)) {\n for (const match of issueBody.matchAll(pendingApprovalRe)) {\n checkedBranches.push(match[0]);\n }\n }\n return checkedBranches;\n}\n\nfunction getAllSelectedBranches(\n issueBody: string,\n dependencyDashboardChecks: Record<string, string>,\n): Record<string, string> {\n const allRelevantBranches = selectAllRelevantBranches(issueBody);\n for (const branch of allRelevantBranches) {\n const [, type, branchName] = generalBranchRe.exec(branch)!;\n dependencyDashboardChecks[branchName] = type;\n }\n return dependencyDashboardChecks;\n}\n\nfunction getCheckedBranches(issueBody: string): Record<string, string> {\n let dependencyDashboardChecks: Record<string, string> = {};\n for (const [, type, branchName] of issueBody.matchAll(markedBranchesRe)) {\n dependencyDashboardChecks[branchName] = type;\n }\n dependencyDashboardChecks = getAllSelectedBranches(\n issueBody,\n dependencyDashboardChecks,\n );\n return dependencyDashboardChecks;\n}\n\nfunction parseDashboardIssue(issueBody: string): DependencyDashboard {\n const dependencyDashboardChecks = getCheckedBranches(issueBody);\n const dependencyDashboardRebaseAllOpen = checkRebaseAll(issueBody);\n const dependencyDashboardAllAwaitingSchedule =\n checkOpenAllAwaitingSchedulePR(issueBody);\n const dependencyDashboardAllPending = checkApproveAllPendingPR(issueBody);\n const dependencyDashboardAllRateLimited =\n checkOpenAllRateLimitedPR(issueBody);\n dependencyDashboardChecks.configMigrationCheckboxState =\n getConfigMigrationCheckboxState(issueBody);\n return {\n dependencyDashboardChecks,\n dependencyDashboardRebaseAllOpen,\n dependencyDashboardAllAwaitingSchedule,\n dependencyDashboardAllPending,\n dependencyDashboardAllRateLimited,\n };\n}\n\nexport async function readDashboardBody(\n config: SelectAllConfig,\n): Promise<void> {\n let dashboardChecks: DependencyDashboard = {\n dependencyDashboardChecks: {},\n dependencyDashboardRebaseAllOpen: false,\n dependencyDashboardAllAwaitingSchedule: false,\n dependencyDashboardAllPending: false,\n dependencyDashboardAllRateLimited: false,\n };\n const stringifiedConfig = JSON.stringify(config);\n if (\n config.dependencyDashboard === true ||\n stringifiedConfig.includes('\"dependencyDashboardApproval\":true') ||\n stringifiedConfig.includes('\"prCreation\":\"approval\"')\n ) {\n config.dependencyDashboardTitle =\n config.dependencyDashboardTitle ?? `Dependency Dashboard`;\n const issue = await platform.findIssue(config.dependencyDashboardTitle);\n if (issue) {\n config.dependencyDashboardIssue = issue.number;\n dashboardChecks = parseDashboardIssue(issue.body ?? '');\n }\n }\n\n if (config.checkedBranches) {\n const checkedBranchesRec: Record<string, string> = Object.fromEntries(\n config.checkedBranches.map((branchName) => [branchName, 'global-config']),\n );\n dashboardChecks.dependencyDashboardChecks = {\n ...dashboardChecks.dependencyDashboardChecks,\n ...checkedBranchesRec,\n };\n }\n\n Object.assign(config, dashboardChecks);\n}\n\nfunction formatAsMarkdownLink(name: string, url?: string | null): string {\n return url ? `[${name}](${url})` : `\\`${name}\\``;\n}\n\nfunction getListItem(branch: BranchConfig, type: string): string {\n let item = getCheckbox(`${type}-branch=${branch.branchName}`);\n if (branch.prNo) {\n // TODO: types (#22198)\n item += `[${branch.prTitle!}](../pull/${branch.prNo})`;\n } else {\n item += branch.prTitle;\n }\n const uniquePackages = [\n // TODO: types (#22198)\n ...new Set(branch.upgrades.map((upgrade) => `\\`${upgrade.depName!}\\``)),\n ];\n if (uniquePackages.length < 2) {\n return item + '\\n';\n }\n return item + ' (' + uniquePackages.join(', ') + ')\\n';\n}\n\nfunction splitBranchesByCategory(filteredBranches: BranchConfig[]): {\n categories: Record<string, BranchConfig[]>;\n uncategorized: BranchConfig[];\n hasCategorized: boolean;\n hasUncategorized: boolean;\n} {\n const categories: Record<string, BranchConfig[]> = {};\n const uncategorized: BranchConfig[] = [];\n let hasCategorized = false;\n let hasUncategorized = false;\n for (const branch of filteredBranches) {\n if (branch.dependencyDashboardCategory) {\n categories[branch.dependencyDashboardCategory] ??= [];\n categories[branch.dependencyDashboardCategory].push(branch);\n hasCategorized = true;\n continue;\n }\n uncategorized.push(branch);\n hasUncategorized = true;\n }\n return { categories, uncategorized, hasCategorized, hasUncategorized };\n}\n\nfunction getBranchList(branches: BranchConfig[], listItemType: string): string {\n return branches\n .map((branch: BranchConfig): string => getListItem(branch, listItemType))\n .join('');\n}\n\nfunction getBranchesListMd(\n branches: BranchConfig[],\n predicate: (\n value: BranchConfig,\n index: number,\n array: BranchConfig[],\n ) => unknown,\n title: string,\n description: string,\n listItemType = 'approvePr',\n bulkComment?: string,\n bulkMessage?: string,\n bulkIcon?: '🔐',\n): string {\n const filteredBranches = branches.filter(predicate);\n if (filteredBranches.length === 0) {\n return '';\n }\n let result = `## ${title}\\n\\n${description}\\n\\n`;\n const { categories, uncategorized, hasCategorized, hasUncategorized } =\n splitBranchesByCategory(filteredBranches);\n if (hasCategorized) {\n for (const [category, branches] of Object.entries(categories).sort(\n ([keyA], [keyB]) =>\n keyA.localeCompare(keyB, undefined, { numeric: true }),\n )) {\n result = result.trimEnd() + '\\n\\n';\n result += `### ${category}\\n\\n`;\n result += getBranchList(branches, listItemType);\n }\n if (hasUncategorized) {\n result = result.trimEnd() + '\\n\\n';\n result += `### Others`;\n }\n }\n result = result.trimEnd() + '\\n\\n';\n result += getBranchList(uncategorized, listItemType);\n\n if (bulkComment && bulkMessage && filteredBranches.length > 1) {\n if (hasCategorized) {\n result = result.trimEnd() + '\\n\\n';\n result += '### All\\n\\n';\n }\n result += getCheckbox(bulkComment);\n result += `${bulkIcon ? bulkIcon + ' ' : ''}**${bulkMessage}**${bulkIcon ? ' ' + bulkIcon : ''}`;\n }\n return result.trimEnd() + '\\n\\n';\n}\n\nfunction appendRepoProblems(config: RenovateConfig, issueBody: string): string {\n let newIssueBody = issueBody;\n const repoProblems = extractRepoProblems(config.repository);\n if (repoProblems.size) {\n newIssueBody += '## Repository Problems\\n\\n';\n const repoProblemsHeader =\n config.customizeDashboard?.repoProblemsHeader ??\n 'Renovate tried to run on this repository, but found these problems.';\n newIssueBody += template.compile(repoProblemsHeader, config) + '\\n\\n';\n\n for (const repoProblem of repoProblems) {\n newIssueBody += ` - ${repoProblem}\\n`;\n }\n newIssueBody += '\\n';\n }\n return newIssueBody;\n}\n\nexport async function ensureDependencyDashboard(\n config: SelectAllConfig,\n allBranches: BranchConfig[],\n packageFiles: Record<string, PackageFile[]> = {},\n configMigrationRes: ConfigMigrationResult,\n): Promise<void> {\n logger.debug('ensureDependencyDashboard()');\n if (config.mode === 'silent') {\n logger.debug(\n 'Dependency Dashboard issue is not created, updated or closed when mode=silent',\n );\n return;\n }\n // legacy/migrated issue\n const reuseTitle = 'Update Dependencies (Renovate Bot)';\n const branches = allBranches.filter(\n (branch) =>\n branch.result !== 'automerged' &&\n !branch.upgrades?.every((upgrade) => upgrade.remediationNotPossible),\n );\n if (\n !(\n config.dependencyDashboard === true ||\n config.dependencyDashboardApproval === true ||\n config.packageRules?.some((rule) => rule.dependencyDashboardApproval) ===\n true ||\n branches.some(\n (branch) =>\n !!branch.dependencyDashboardApproval ||\n !!branch.dependencyDashboardPrApproval,\n )\n )\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n { title: config.dependencyDashboardTitle },\n 'DRY-RUN: Would close Dependency Dashboard',\n );\n } else {\n logger.debug('Closing Dependency Dashboard');\n await platform.ensureIssueClosing(config.dependencyDashboardTitle!);\n }\n return;\n }\n // istanbul ignore if\n if (config.repoIsOnboarded === false) {\n logger.debug('Repo is onboarding - skipping dependency dashboard');\n return;\n }\n logger.debug('Ensuring Dependency Dashboard');\n\n // Check packageFiles for any deprecations or replacements\n let hasDeprecationsOrReplacements = false;\n const deprecatedPackages: Record<\n string,\n Record<string, { hasReplacement: boolean; sourceUrl?: string | null }>\n > = {};\n logger.debug('Checking packageFiles for deprecated or replacement packages');\n if (isNonEmptyObject(packageFiles)) {\n for (const [manager, fileNames] of Object.entries(packageFiles)) {\n for (const fileName of fileNames) {\n for (const dep of fileName.deps) {\n const name = dep.packageName ?? dep.depName;\n const hasReplacement = !!dep.updates?.find(\n (updates) => updates.updateType === 'replacement',\n );\n if (name && (dep.deprecationMessage ?? hasReplacement)) {\n hasDeprecationsOrReplacements = true;\n deprecatedPackages[manager] ??= {};\n deprecatedPackages[manager][name] ??= {\n hasReplacement,\n sourceUrl: dep.sourceUrl,\n };\n }\n }\n }\n }\n }\n\n const hasBranches = isNonEmptyArray(branches);\n if (\n config.dependencyDashboardAutoclose &&\n !hasBranches &&\n !hasDeprecationsOrReplacements\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n { title: config.dependencyDashboardTitle },\n 'DRY-RUN: Would close Dependency Dashboard',\n );\n } else {\n logger.debug('Closing Dependency Dashboard');\n await platform.ensureIssueClosing(config.dependencyDashboardTitle!);\n }\n return;\n }\n let issueBody = '';\n\n if (config.dependencyDashboardHeader?.length) {\n issueBody +=\n template.compile(config.dependencyDashboardHeader, config) + '\\n\\n';\n }\n\n if (configMigrationRes.result === 'pr-exists') {\n issueBody +=\n '## Config Migration Needed\\n\\n' +\n getMarkdownComment(configMigrationPrInfo) +\n ` See Config Migration PR: #${configMigrationRes.prNumber}.\\n\\n`;\n } else if (configMigrationRes?.result === 'pr-modified') {\n issueBody +=\n '## Config Migration Needed (Blocked)\\n\\n' +\n getMarkdownComment(configMigrationPrInfo) +\n ` The Config Migration branch exists but has been modified by another user. Renovate will not push to this branch unless it is first deleted. \\n\\n See Config Migration PR: #${configMigrationRes.prNumber}.\\n\\n`;\n } else if (configMigrationRes?.result === 'add-checkbox') {\n issueBody +=\n '## Config Migration Needed\\n\\n' +\n getCheckbox(createConfigMigrationPr) +\n ' Select this checkbox to let Renovate create an automated Config Migration PR.' +\n '\\n\\n';\n }\n\n issueBody = appendRepoProblems(config, issueBody);\n\n if (hasDeprecationsOrReplacements) {\n issueBody += '## Deprecations / Replacements\\n';\n issueBody += emojify('> :warning: **Warning**\\n> \\n');\n issueBody +=\n 'These dependencies are either deprecated or have replacements available:\\n\\n';\n issueBody += '| Datasource | Package | Replacement PR? |\\n';\n issueBody += '|------------|------|--------------|\\n';\n for (const manager of Object.keys(deprecatedPackages).sort()) {\n const deps = deprecatedPackages[manager];\n for (const depName of Object.keys(deps).sort()) {\n const { hasReplacement, sourceUrl } = deps[depName];\n const packageName = formatAsMarkdownLink(depName, sourceUrl);\n\n issueBody += `| ${manager} | ${packageName} | ${\n hasReplacement\n ? '![Available](https://img.shields.io/badge/available-green?style=flat-square)'\n : '![Unavailable](https://img.shields.io/badge/unavailable-orange?style=flat-square)'\n } |\\n`;\n }\n }\n issueBody += '\\n';\n }\n\n if (config.dependencyDashboardReportAbandonment) {\n issueBody += getAbandonedPackagesMd(packageFiles);\n }\n\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'needs-approval',\n 'Pending Approval',\n 'The following branches are pending approval. To create them, click on a checkbox below.',\n 'approve',\n approveAllPendingPrs,\n 'Create all pending approval PRs at once',\n '🔐',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'minimum-group-size-not-met',\n 'Group Size Not Met',\n 'The following branches have not met their minimum group size. To create them, click on a checkbox below.',\n 'approveGroup',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'not-scheduled',\n 'Awaiting Schedule',\n 'The following updates are awaiting their schedule. To get an update now, click on a checkbox below.',\n 'unschedule',\n createAllAwaitingSchedulePrs,\n 'Create all awaiting schedule PRs at once',\n '🔐',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) =>\n branch.result === 'branch-limit-reached' ||\n branch.result === 'pr-limit-reached' ||\n branch.result === 'commit-per-run-limit-reached' ||\n branch.result === 'commit-hourly-limit-reached',\n 'Rate-Limited',\n 'The following updates are currently rate-limited. To force their creation now, click on a checkbox below.',\n 'unlimit',\n createAllRateLimitedPrs,\n 'Create all rate-limited PRs at once',\n '🔐',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'error',\n 'Errored',\n 'The following updates encountered an error and will be retried. To force a retry now, click on a checkbox below.',\n 'retry',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'needs-pr-approval',\n 'PR Creation Approval Required',\n 'The following branches exist but PR creation requires approval. To approve PR creation, click on a checkbox below.',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'pr-edited',\n 'PR Edited (Blocked)',\n 'The following updates have been manually edited so Renovate will no longer make changes. To discard all commits and start over, click on a checkbox below.',\n 'rebase',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'pending',\n 'Pending Status Checks',\n 'The following updates await pending status checks. To force their creation now, click on a checkbox below.',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.prBlockedBy === 'BranchAutomerge',\n 'Pending Branch Automerge',\n 'The following updates await pending status checks before automerging. To abort the branch automerge and create a PR instead, click on a checkbox below.',\n );\n\n const warn = getDepWarningsDashboard(packageFiles, config);\n if (warn) {\n issueBody += warn;\n issueBody += '\\n';\n }\n\n const otherRes = [\n 'pending',\n 'needs-approval',\n 'needs-pr-approval',\n 'not-scheduled',\n 'pr-limit-reached',\n 'commit-per-run-limit-reached',\n 'commit-hourly-limit-reached',\n 'branch-limit-reached',\n 'already-existed',\n 'error',\n 'automerged',\n 'pr-edited',\n 'minimum-group-size-not-met',\n ];\n const inProgress = branches.filter(\n (branch) =>\n !otherRes.includes(branch.result!) &&\n branch.prBlockedBy !== 'BranchAutomerge',\n );\n issueBody += getBranchesListMd(\n inProgress,\n (branch) => !!branch.prBlockedBy || !branch.prNo,\n 'Other Branches',\n 'The following updates are pending. To force the creation of a PR, click on a checkbox below.',\n 'other',\n );\n issueBody += getBranchesListMd(\n inProgress,\n (branch) => branch.prNo && !branch.prBlockedBy,\n 'Open',\n 'The following updates have all been created. To force a retry/rebase of any, click on a checkbox below.',\n 'rebase',\n rebaseAllOpenPrs,\n 'Click on this checkbox to rebase all open PRs at once',\n );\n\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'already-existed',\n 'PR Closed (Blocked)',\n 'The following updates are blocked by an existing closed PR. To recreate the PR, click on a checkbox below.',\n 'recreate',\n );\n\n if (!hasBranches) {\n issueBody +=\n 'This repository currently has no open or pending branches.\\n\\n';\n }\n\n // add CVE section\n issueBody += await getDashboardMarkdownVulnerabilities(config, packageFiles);\n\n // fit the detected dependencies section\n const footer = getFooter(config);\n issueBody += PackageFiles.getDashboardMarkdown(\n platform.maxBodyLength() - issueBody.length - footer.length,\n );\n\n issueBody += footer;\n\n if (config.dependencyDashboardIssue) {\n // If we're not changing the dashboard issue, then we can skip checking if the user changed it.\n // The cached issue we get back here will reflect its state at the _start_ of our run\n const cachedIssue = await platform.getIssue?.(\n config.dependencyDashboardIssue,\n );\n if (cachedIssue?.body === issueBody) {\n logger.debug('No changes to dependency dashboard issue needed');\n return;\n }\n\n // Skip cache when getting the issue to ensure we get the latest body,\n // including any updates the user made after we started the run\n const updatedIssue = await platform.getIssue?.(\n config.dependencyDashboardIssue,\n false,\n );\n if (updatedIssue) {\n const { dependencyDashboardChecks } = parseDashboardIssue(\n coerceString(updatedIssue.body),\n );\n for (const branchName of Object.keys(config.dependencyDashboardChecks!)) {\n delete dependencyDashboardChecks[branchName];\n }\n for (const branchName of Object.keys(dependencyDashboardChecks)) {\n const checkText = getCheckbox(\n `${dependencyDashboardChecks[branchName]}-branch=${branchName}`,\n );\n issueBody = issueBody.replace(\n checkText,\n checkText.replace('[ ]', '[x]'),\n );\n }\n }\n }\n\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n { title: config.dependencyDashboardTitle },\n 'DRY-RUN: Would ensure Dependency Dashboard',\n );\n } else {\n await platform.ensureIssue({\n title: config.dependencyDashboardTitle!,\n reuseTitle,\n body: platform.massageMarkdown(issueBody, config.rebaseLabel),\n labels: config.dependencyDashboardLabels,\n confidential: config.confidential,\n });\n }\n}\n\nexport function getAbandonedPackagesMd(\n packageFiles: Record<string, PackageFile[]>,\n): string {\n const abandonedPackages: Record<\n string,\n Record<\n string,\n { mostRecentTimestamp?: string | null; sourceUrl?: string | null }\n >\n > = {};\n let abandonedCount = 0;\n\n for (const [manager, managerPackageFiles] of Object.entries(packageFiles)) {\n for (const packageFile of managerPackageFiles) {\n for (const dep of coerceArray(packageFile.deps)) {\n if (dep.depName && dep.isAbandoned) {\n abandonedCount++;\n abandonedPackages[manager] = abandonedPackages[manager] || {};\n abandonedPackages[manager][dep.depName] = {\n mostRecentTimestamp: dep.mostRecentTimestamp,\n sourceUrl: dep.sourceUrl,\n };\n }\n }\n }\n }\n\n if (abandonedCount === 0) {\n return '';\n }\n\n let abandonedMd = emojify(\n '## Abandoned Dependencies\\n\\n> :information_source: **Note**\\n> \\n',\n );\n\n abandonedMd +=\n 'Packages are marked as abandoned when they exceed the [`abandonmentThreshold`](https://docs.renovatebot.com/configuration-options/#abandonmentthreshold) since their last release. ';\n abandonedMd +=\n 'Unlike deprecated packages with official notices, abandonment is detected by release inactivity.\\n> \\n';\n\n abandonedMd +=\n '> These dependencies have not received updates for an extended period and may be unmaintained:\\n\\n';\n\n abandonedMd += '<details>\\n';\n abandonedMd += `<summary>View abandoned dependencies (${abandonedCount})</summary>\\n\\n`;\n abandonedMd += '| Datasource | Package | Last Updated |\\n';\n abandonedMd += '|------------|------|-------------|\\n';\n\n for (const manager of Object.keys(abandonedPackages).sort()) {\n const deps = abandonedPackages[manager];\n for (const depName of Object.keys(deps).sort()) {\n const { mostRecentTimestamp, sourceUrl } = deps[depName];\n const formattedDate = mostRecentTimestamp\n ? DateTime.fromISO(mostRecentTimestamp).toFormat('yyyy-MM-dd')\n : 'unknown';\n const packageName = formatAsMarkdownLink(depName, sourceUrl);\n abandonedMd += `| ${manager} | ${packageName} | \\`${formattedDate}\\` |\\n`;\n }\n }\n\n abandonedMd += '\\n</details>\\n\\n\\n';\n\n return abandonedMd;\n}\n\nfunction getFooter(config: RenovateConfig): string {\n let footer = '';\n if (config.dependencyDashboardFooter?.length) {\n footer +=\n '---\\n' +\n template.compile(config.dependencyDashboardFooter, config) +\n '\\n';\n }\n\n return footer;\n}\n\nexport async function getDashboardMarkdownVulnerabilities(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]>,\n): Promise<string> {\n let result = '';\n\n if (\n isNullOrUndefined(config.dependencyDashboardOSVVulnerabilitySummary) ||\n config.dependencyDashboardOSVVulnerabilitySummary === 'none'\n ) {\n return result;\n }\n\n result += '## Vulnerabilities\\n\\n';\n\n const vulnerabilityFetcher = await Vulnerabilities.create();\n const vulnerabilities = await vulnerabilityFetcher.fetchVulnerabilities(\n config,\n packageFiles,\n );\n\n if (vulnerabilities.length === 0) {\n result +=\n 'Renovate has not found any CVEs on [osv.dev](https://osv.dev).\\n\\n';\n return result;\n }\n\n const unresolvedVulnerabilities = vulnerabilities.filter((value) =>\n isNullOrUndefined(value.fixedVersion),\n );\n const resolvedVulnerabilitiesLength =\n vulnerabilities.length - unresolvedVulnerabilities.length;\n\n result += emojify('> :exclamation: **Important**\\n> \\n');\n result += `> \\`${resolvedVulnerabilitiesLength}\\`/\\`${vulnerabilities.length}\\``;\n if (isTruthy(config.osvVulnerabilityAlerts)) {\n result += ' CVEs have Renovate fixes.\\n\\n';\n } else {\n result +=\n ' CVEs have possible Renovate fixes.\\n> See [`osvVulnerabilityAlerts`](https://docs.renovatebot.com/configuration-options/#osvvulnerabilityalerts) to allow Renovate to supply fixes.\\n\\n';\n }\n\n let renderedVulnerabilities: Vulnerability[];\n switch (config.dependencyDashboardOSVVulnerabilitySummary) {\n // filter vulnerabilities to display based on configuration\n case 'unresolved':\n renderedVulnerabilities = unresolvedVulnerabilities;\n break;\n default:\n renderedVulnerabilities = vulnerabilities;\n }\n\n const managerRecords: Record<\n string,\n Record<string, Record<string, Vulnerability[]>>\n > = {};\n for (const vulnerability of renderedVulnerabilities) {\n const { manager, packageFile } = vulnerability.packageFileConfig;\n if (isNullOrUndefined(managerRecords[manager!])) {\n managerRecords[manager!] = {};\n }\n if (isNullOrUndefined(managerRecords[manager!][packageFile])) {\n managerRecords[manager!][packageFile] = {};\n }\n if (\n isNullOrUndefined(\n managerRecords[manager!][packageFile][vulnerability.packageName],\n )\n ) {\n managerRecords[manager!][packageFile][vulnerability.packageName] = [];\n }\n managerRecords[manager!][packageFile][vulnerability.packageName].push(\n vulnerability,\n );\n }\n\n for (const [manager, packageFileRecords] of Object.entries(managerRecords)) {\n result += `<details><summary>${manager}</summary>\\n<blockquote>\\n\\n`;\n for (const [packageFile, packageNameRecords] of Object.entries(\n packageFileRecords,\n )) {\n result += `<details><summary>${packageFile}</summary>\\n<blockquote>\\n\\n`;\n for (const [packageName, cves] of Object.entries(packageNameRecords)) {\n result += `<details><summary>${packageName}</summary>\\n<blockquote>\\n\\n`;\n for (const vul of cves) {\n const id = vul.vulnerability.id;\n const suffix = isNonEmptyString(vul.fixedVersion)\n ? ` (fixed in ${vul.fixedVersion})`\n : '';\n result += `- [${id}](https://osv.dev/vulnerability/${id})${suffix}\\n`;\n }\n result += `</blockquote>\\n</details>\\n\\n`;\n }\n result += `</blockquote>\\n</details>\\n\\n`;\n }\n result += `</blockquote>\\n</details>\\n\\n`;\n }\n\n return result;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dependency-dashboard.js","names":["template.compile"],"sources":["../../../lib/workers/repository/dependency-dashboard.ts"],"sourcesContent":["import {\n isNonEmptyArray,\n isNonEmptyObject,\n isNonEmptyString,\n isNullOrUndefined,\n isTruthy,\n} from '@sindresorhus/is';\nimport { DateTime } from 'luxon';\nimport { GlobalConfig } from '../../config/global.ts';\nimport type { RenovateConfig } from '../../config/types.ts';\nimport { logger } from '../../logger/index.ts';\nimport type { PackageFile } from '../../modules/manager/types.ts';\nimport { platform } from '../../modules/platform/index.ts';\nimport { coerceArray } from '../../util/array.ts';\nimport { emojify } from '../../util/emoji.ts';\nimport { regEx } from '../../util/regex.ts';\nimport { coerceString } from '../../util/string.ts';\nimport * as template from '../../util/template/index.ts';\nimport type { BranchConfig, SelectAllConfig } from '../types.ts';\nimport { extractRepoProblems } from './common.ts';\nimport type { ConfigMigrationResult } from './config-migration/index.ts';\nimport { getDepWarningsDashboard } from './errors-warnings.ts';\nimport { PackageFiles } from './package-files.ts';\nimport type { Vulnerability } from './process/types.ts';\nimport { Vulnerabilities } from './process/vulnerabilities.ts';\n\ninterface DependencyDashboard {\n dependencyDashboardChecks: Record<string, string>;\n dependencyDashboardRebaseAllOpen: boolean;\n dependencyDashboardAllPending: boolean;\n dependencyDashboardAllRateLimited: boolean;\n dependencyDashboardAllAwaitingSchedule: boolean;\n}\n\nconst rateLimitedRe = regEx(\n ` - \\\\[ \\\\] ${getMarkdownComment('unlimit-branch=([^\\\\s]+)')}`,\n 'g',\n);\nconst pendingApprovalRe = regEx(\n ` - \\\\[ \\\\] ${getMarkdownComment('approve-branch=([^\\\\s]+)')}`,\n 'g',\n);\nconst awaitingScheduleRe = regEx(\n ` - \\\\[ \\\\] ${getMarkdownComment('unschedule-branch=([^\\\\s]+)')}`,\n 'g',\n);\nconst generalBranchRe = regEx(\n ` ${getMarkdownComment('([a-zA-Z]+)-branch=([^\\\\s]+)')}`,\n);\nconst markedBranchesRe = regEx(\n ` - \\\\[x\\\\] ${getMarkdownComment('([a-zA-Z]+)-branch=([^\\\\s]+)')}`,\n 'g',\n);\n\nconst approveAllPendingPrs = 'approve-all-pending-prs';\nconst createAllRateLimitedPrs = 'create-all-rate-limited-prs';\nconst createAllAwaitingSchedulePrs = 'create-all-awaiting-schedule-prs';\nconst createConfigMigrationPr = 'create-config-migration-pr';\nconst configMigrationPrInfo = 'config-migration-pr-info';\nconst rebaseAllOpenPrs = 'rebase-all-open-prs';\n\nfunction getMarkdownComment(comment: string): string {\n return `<!-- ${comment} -->`;\n}\n\nfunction isBoxChecked(issueBody: string, type: string): boolean {\n return issueBody.includes(getCheckbox(type, true));\n}\n\nfunction isBoxUnchecked(issueBody: string, type: string): boolean {\n return issueBody.includes(getCheckbox(type));\n}\n\nfunction getCheckbox(type: string, checked = false): string {\n return ` - [${checked ? 'x' : ' '}] ${getMarkdownComment(type)}`;\n}\n\nfunction checkOpenAllRateLimitedPR(issueBody: string): boolean {\n return isBoxChecked(issueBody, createAllRateLimitedPrs);\n}\n\nfunction checkOpenAllAwaitingSchedulePR(issueBody: string): boolean {\n return isBoxChecked(issueBody, createAllAwaitingSchedulePrs);\n}\n\nfunction checkApproveAllPendingPR(issueBody: string): boolean {\n return isBoxChecked(issueBody, approveAllPendingPrs);\n}\n\nfunction checkRebaseAll(issueBody: string): boolean {\n return isBoxChecked(issueBody, rebaseAllOpenPrs);\n}\n\nfunction getConfigMigrationCheckboxState(\n issueBody: string,\n): 'no-checkbox' | 'checked' | 'unchecked' | 'migration-pr-exists' {\n if (issueBody.includes(getMarkdownComment(configMigrationPrInfo))) {\n return 'migration-pr-exists';\n }\n\n if (isBoxChecked(issueBody, createConfigMigrationPr)) {\n return 'checked';\n }\n\n if (isBoxUnchecked(issueBody, createConfigMigrationPr)) {\n return 'unchecked';\n }\n\n return 'no-checkbox';\n}\n\nfunction selectAllRelevantBranches(issueBody: string): string[] {\n const checkedBranches = [];\n if (checkOpenAllRateLimitedPR(issueBody)) {\n for (const match of issueBody.matchAll(rateLimitedRe)) {\n checkedBranches.push(match[0]);\n }\n }\n if (checkOpenAllAwaitingSchedulePR(issueBody)) {\n for (const match of issueBody.matchAll(awaitingScheduleRe)) {\n checkedBranches.push(match[0]);\n }\n }\n if (checkApproveAllPendingPR(issueBody)) {\n for (const match of issueBody.matchAll(pendingApprovalRe)) {\n checkedBranches.push(match[0]);\n }\n }\n return checkedBranches;\n}\n\nfunction getAllSelectedBranches(\n issueBody: string,\n dependencyDashboardChecks: Record<string, string>,\n): Record<string, string> {\n const allRelevantBranches = selectAllRelevantBranches(issueBody);\n for (const branch of allRelevantBranches) {\n const [, type, branchName] = generalBranchRe.exec(branch)!;\n dependencyDashboardChecks[branchName] = type;\n }\n return dependencyDashboardChecks;\n}\n\nfunction getCheckedBranches(issueBody: string): Record<string, string> {\n let dependencyDashboardChecks: Record<string, string> = {};\n for (const [, type, branchName] of issueBody.matchAll(markedBranchesRe)) {\n dependencyDashboardChecks[branchName] = type;\n }\n dependencyDashboardChecks = getAllSelectedBranches(\n issueBody,\n dependencyDashboardChecks,\n );\n return dependencyDashboardChecks;\n}\n\nfunction parseDashboardIssue(issueBody: string): DependencyDashboard {\n const dependencyDashboardChecks = getCheckedBranches(issueBody);\n const dependencyDashboardRebaseAllOpen = checkRebaseAll(issueBody);\n const dependencyDashboardAllAwaitingSchedule =\n checkOpenAllAwaitingSchedulePR(issueBody);\n const dependencyDashboardAllPending = checkApproveAllPendingPR(issueBody);\n const dependencyDashboardAllRateLimited =\n checkOpenAllRateLimitedPR(issueBody);\n dependencyDashboardChecks.configMigrationCheckboxState =\n getConfigMigrationCheckboxState(issueBody);\n return {\n dependencyDashboardChecks,\n dependencyDashboardRebaseAllOpen,\n dependencyDashboardAllAwaitingSchedule,\n dependencyDashboardAllPending,\n dependencyDashboardAllRateLimited,\n };\n}\n\nexport async function readDashboardBody(\n config: SelectAllConfig,\n): Promise<void> {\n let dashboardChecks: DependencyDashboard = {\n dependencyDashboardChecks: {},\n dependencyDashboardRebaseAllOpen: false,\n dependencyDashboardAllAwaitingSchedule: false,\n dependencyDashboardAllPending: false,\n dependencyDashboardAllRateLimited: false,\n };\n const stringifiedConfig = JSON.stringify(config);\n if (\n config.dependencyDashboard === true ||\n stringifiedConfig.includes('\"dependencyDashboardApproval\":true') ||\n stringifiedConfig.includes('\"prCreation\":\"approval\"')\n ) {\n config.dependencyDashboardTitle =\n config.dependencyDashboardTitle ?? `Dependency Dashboard`;\n const issue = await platform.findIssue(config.dependencyDashboardTitle);\n if (issue) {\n config.dependencyDashboardIssue = issue.number;\n dashboardChecks = parseDashboardIssue(issue.body ?? '');\n }\n }\n\n if (config.checkedBranches) {\n const checkedBranchesRec: Record<string, string> = Object.fromEntries(\n config.checkedBranches.map((branchName) => [branchName, 'global-config']),\n );\n dashboardChecks.dependencyDashboardChecks = {\n ...dashboardChecks.dependencyDashboardChecks,\n ...checkedBranchesRec,\n };\n }\n\n Object.assign(config, dashboardChecks);\n}\n\nfunction formatAsMarkdownLink(name: string, url?: string | null): string {\n return url ? `[${name}](${url})` : `\\`${name}\\``;\n}\n\nfunction getListItem(branch: BranchConfig, type: string): string {\n let item = getCheckbox(`${type}-branch=${branch.branchName}`);\n if (branch.prNo) {\n // TODO: types (#22198)\n item += `[${branch.prTitle!}](../pull/${branch.prNo})`;\n } else {\n item += branch.prTitle;\n }\n const uniquePackages = [\n // TODO: types (#22198)\n ...new Set(branch.upgrades.map((upgrade) => `\\`${upgrade.depName!}\\``)),\n ];\n if (uniquePackages.length < 2) {\n return item + '\\n';\n }\n return item + ' (' + uniquePackages.join(', ') + ')\\n';\n}\n\nfunction splitBranchesByCategory(filteredBranches: BranchConfig[]): {\n categories: Record<string, BranchConfig[]>;\n uncategorized: BranchConfig[];\n hasCategorized: boolean;\n hasUncategorized: boolean;\n} {\n const categories: Record<string, BranchConfig[]> = {};\n const uncategorized: BranchConfig[] = [];\n let hasCategorized = false;\n let hasUncategorized = false;\n for (const branch of filteredBranches) {\n if (branch.dependencyDashboardCategory) {\n categories[branch.dependencyDashboardCategory] ??= [];\n categories[branch.dependencyDashboardCategory].push(branch);\n hasCategorized = true;\n continue;\n }\n uncategorized.push(branch);\n hasUncategorized = true;\n }\n return { categories, uncategorized, hasCategorized, hasUncategorized };\n}\n\nfunction getBranchList(branches: BranchConfig[], listItemType: string): string {\n return branches\n .map((branch: BranchConfig): string => getListItem(branch, listItemType))\n .join('');\n}\n\nfunction getBranchesListMd(\n branches: BranchConfig[],\n predicate: (\n value: BranchConfig,\n index: number,\n array: BranchConfig[],\n ) => unknown,\n title: string,\n description: string,\n listItemType = 'approvePr',\n bulkComment?: string,\n bulkMessage?: string,\n bulkIcon?: '🔐',\n): string {\n const filteredBranches = branches.filter(predicate);\n if (filteredBranches.length === 0) {\n return '';\n }\n let result = `## ${title}\\n\\n${description}\\n\\n`;\n const { categories, uncategorized, hasCategorized, hasUncategorized } =\n splitBranchesByCategory(filteredBranches);\n if (hasCategorized) {\n for (const [category, branches] of Object.entries(categories).sort(\n ([keyA], [keyB]) =>\n keyA.localeCompare(keyB, undefined, { numeric: true }),\n )) {\n result = result.trimEnd() + '\\n\\n';\n result += `### ${category}\\n\\n`;\n result += getBranchList(branches, listItemType);\n }\n if (hasUncategorized) {\n result = result.trimEnd() + '\\n\\n';\n result += `### Others`;\n }\n }\n result = result.trimEnd() + '\\n\\n';\n result += getBranchList(uncategorized, listItemType);\n\n if (bulkComment && bulkMessage && filteredBranches.length > 1) {\n if (hasCategorized) {\n result = result.trimEnd() + '\\n\\n';\n result += '### All\\n\\n';\n }\n result += getCheckbox(bulkComment);\n result += `${bulkIcon ? bulkIcon + ' ' : ''}**${bulkMessage}**${bulkIcon ? ' ' + bulkIcon : ''}`;\n }\n return result.trimEnd() + '\\n\\n';\n}\n\nfunction appendRepoProblems(config: RenovateConfig, issueBody: string): string {\n let newIssueBody = issueBody;\n const repoProblems = extractRepoProblems(config.repository);\n if (repoProblems.size) {\n newIssueBody += '## Repository Problems\\n\\n';\n const repoProblemsHeader =\n config.customizeDashboard?.repoProblemsHeader ??\n 'Renovate tried to run on this repository, but found these problems.';\n newIssueBody += template.compile(repoProblemsHeader, config) + '\\n\\n';\n\n for (const repoProblem of repoProblems) {\n newIssueBody += ` - ${repoProblem}\\n`;\n }\n newIssueBody += '\\n';\n }\n return newIssueBody;\n}\n\nexport async function ensureDependencyDashboard(\n config: SelectAllConfig,\n allBranches: BranchConfig[],\n packageFiles: Record<string, PackageFile[]> = {},\n configMigrationRes: ConfigMigrationResult,\n): Promise<void> {\n logger.debug('ensureDependencyDashboard()');\n if (config.mode === 'silent') {\n logger.debug(\n 'Dependency Dashboard issue is not created, updated or closed when mode=silent',\n );\n return;\n }\n // legacy/migrated issue\n const reuseTitle = 'Update Dependencies (Renovate Bot)';\n const branches = allBranches.filter(\n (branch) =>\n branch.result !== 'automerged' &&\n !branch.upgrades?.every((upgrade) => upgrade.remediationNotPossible),\n );\n if (\n !(\n config.dependencyDashboard === true ||\n config.dependencyDashboardApproval === true ||\n config.packageRules?.some((rule) => rule.dependencyDashboardApproval) ===\n true ||\n branches.some(\n (branch) =>\n !!branch.dependencyDashboardApproval ||\n !!branch.dependencyDashboardPrApproval,\n )\n )\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n { title: config.dependencyDashboardTitle },\n 'DRY-RUN: Would close Dependency Dashboard',\n );\n } else {\n logger.debug('Closing Dependency Dashboard');\n await platform.ensureIssueClosing(config.dependencyDashboardTitle!);\n }\n return;\n }\n // istanbul ignore if\n if (config.repoIsOnboarded === false) {\n logger.debug('Repo is onboarding - skipping dependency dashboard');\n return;\n }\n logger.debug('Ensuring Dependency Dashboard');\n\n // Check packageFiles for any deprecations or replacements\n let hasDeprecationsOrReplacements = false;\n const deprecatedPackages: Record<\n string,\n Record<string, { hasReplacement: boolean; sourceUrl?: string | null }>\n > = {};\n logger.debug('Checking packageFiles for deprecated or replacement packages');\n if (isNonEmptyObject(packageFiles)) {\n for (const [manager, fileNames] of Object.entries(packageFiles)) {\n for (const fileName of fileNames) {\n for (const dep of fileName.deps) {\n const name = dep.packageName ?? dep.depName;\n const hasReplacement = !!dep.updates?.find(\n (updates) => updates.updateType === 'replacement',\n );\n if (name && (dep.deprecationMessage ?? hasReplacement)) {\n hasDeprecationsOrReplacements = true;\n deprecatedPackages[manager] ??= {};\n deprecatedPackages[manager][name] ??= {\n hasReplacement,\n sourceUrl: dep.sourceUrl,\n };\n }\n }\n }\n }\n }\n\n const hasBranches = isNonEmptyArray(branches);\n if (\n config.dependencyDashboardAutoclose &&\n !hasBranches &&\n !hasDeprecationsOrReplacements\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n { title: config.dependencyDashboardTitle },\n 'DRY-RUN: Would close Dependency Dashboard',\n );\n } else {\n logger.debug('Closing Dependency Dashboard');\n await platform.ensureIssueClosing(config.dependencyDashboardTitle!);\n }\n return;\n }\n let issueBody = '';\n\n if (config.dependencyDashboardHeader?.length) {\n issueBody +=\n template.compile(config.dependencyDashboardHeader, config) + '\\n\\n';\n }\n\n if (configMigrationRes.result === 'pr-exists') {\n issueBody +=\n '## Config Migration Needed\\n\\n' +\n getMarkdownComment(configMigrationPrInfo) +\n ` See Config Migration PR: #${configMigrationRes.prNumber}.\\n\\n`;\n } else if (configMigrationRes?.result === 'pr-modified') {\n issueBody +=\n '## Config Migration Needed (Blocked)\\n\\n' +\n getMarkdownComment(configMigrationPrInfo) +\n ` The Config Migration branch exists but has been modified by another user. Renovate will not push to this branch unless it is first deleted. \\n\\n See Config Migration PR: #${configMigrationRes.prNumber}.\\n\\n`;\n } else if (configMigrationRes?.result === 'add-checkbox') {\n issueBody +=\n '## Config Migration Needed\\n\\n' +\n getCheckbox(createConfigMigrationPr) +\n ' Select this checkbox to let Renovate create an automated Config Migration PR.' +\n '\\n\\n';\n }\n\n issueBody = appendRepoProblems(config, issueBody);\n\n if (hasDeprecationsOrReplacements) {\n issueBody += '## Deprecations / Replacements\\n';\n issueBody += emojify('> :warning: **Warning**\\n> \\n');\n issueBody +=\n 'The following dependencies are either deprecated or have replacements available.\\n\\n';\n issueBody += '| Datasource | Package | Replacement PR? |\\n';\n issueBody += '|------------|------|--------------|\\n';\n for (const manager of Object.keys(deprecatedPackages).sort()) {\n const deps = deprecatedPackages[manager];\n for (const depName of Object.keys(deps).sort()) {\n const { hasReplacement, sourceUrl } = deps[depName];\n const packageName = formatAsMarkdownLink(depName, sourceUrl);\n\n issueBody += `| ${manager} | ${packageName} | ${\n hasReplacement\n ? '![Available](https://img.shields.io/badge/available-green?style=flat-square)'\n : '![Unavailable](https://img.shields.io/badge/unavailable-orange?style=flat-square)'\n } |\\n`;\n }\n }\n issueBody += '\\n';\n }\n\n if (config.dependencyDashboardReportAbandonment) {\n issueBody += getAbandonedPackagesMd(packageFiles);\n }\n\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'needs-approval',\n 'Pending Approval',\n 'The following branches are pending approval. To create them, click on a checkbox below.',\n 'approve',\n approveAllPendingPrs,\n 'Create all pending approval PRs at once',\n '🔐',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'minimum-group-size-not-met',\n 'Group Size Not Met',\n 'The following branches have not met their minimum group size. To create them, click on a checkbox below.',\n 'approveGroup',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'not-scheduled',\n 'Awaiting Schedule',\n 'The following updates are awaiting their schedule. To get an update now, click on a checkbox below.',\n 'unschedule',\n createAllAwaitingSchedulePrs,\n 'Create all awaiting schedule PRs at once',\n '🔐',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) =>\n branch.result === 'branch-limit-reached' ||\n branch.result === 'pr-limit-reached' ||\n branch.result === 'commit-per-run-limit-reached' ||\n branch.result === 'commit-hourly-limit-reached',\n 'Rate-Limited',\n 'The following updates are currently rate-limited. To force their creation now, click on a checkbox below.',\n 'unlimit',\n createAllRateLimitedPrs,\n 'Create all rate-limited PRs at once',\n '🔐',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'error',\n 'Errored',\n 'The following updates encountered an error and will be retried. To force a retry now, click on a checkbox below.',\n 'retry',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'needs-pr-approval',\n 'PR Creation Approval Required',\n 'The following branches exist but PR creation requires approval. To approve PR creation, click on a checkbox below.',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'pr-edited',\n 'PR Edited (Blocked)',\n 'The following updates have been manually edited so Renovate will no longer make changes. To discard all commits and start over, click on a checkbox below.',\n 'rebase',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'pending',\n 'Pending Status Checks',\n 'The following updates await pending status checks. To force their creation now, click on a checkbox below.',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.prBlockedBy === 'BranchAutomerge',\n 'Pending Branch Automerge',\n 'The following updates await pending status checks before automerging. To abort the branch automerge and create a PR instead, click on a checkbox below.',\n );\n\n const warn = getDepWarningsDashboard(packageFiles, config);\n if (warn) {\n issueBody += warn;\n issueBody += '\\n';\n }\n\n const otherRes = [\n 'pending',\n 'needs-approval',\n 'needs-pr-approval',\n 'not-scheduled',\n 'pr-limit-reached',\n 'commit-per-run-limit-reached',\n 'commit-hourly-limit-reached',\n 'branch-limit-reached',\n 'already-existed',\n 'error',\n 'automerged',\n 'pr-edited',\n 'minimum-group-size-not-met',\n ];\n const inProgress = branches.filter(\n (branch) =>\n !otherRes.includes(branch.result!) &&\n branch.prBlockedBy !== 'BranchAutomerge',\n );\n issueBody += getBranchesListMd(\n inProgress,\n (branch) => !!branch.prBlockedBy || !branch.prNo,\n 'Other Branches',\n 'The following updates are pending. To force the creation of a PR, click on a checkbox below.',\n 'other',\n );\n issueBody += getBranchesListMd(\n inProgress,\n (branch) => branch.prNo && !branch.prBlockedBy,\n 'Open',\n 'The following updates have all been created. To force a retry/rebase of any, click on a checkbox below.',\n 'rebase',\n rebaseAllOpenPrs,\n 'Click on this checkbox to rebase all open PRs at once',\n );\n\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'already-existed',\n 'PR Closed (Blocked)',\n 'The following updates are blocked by an existing closed PR. To recreate the PR, click on a checkbox below.',\n 'recreate',\n );\n\n if (!hasBranches) {\n issueBody +=\n 'This repository currently has no open or pending branches.\\n\\n';\n }\n\n // add CVE section\n issueBody += await getDashboardMarkdownVulnerabilities(config, packageFiles);\n\n // fit the detected dependencies section\n const footer = getFooter(config);\n issueBody += PackageFiles.getDashboardMarkdown(\n platform.maxBodyLength() - issueBody.length - footer.length,\n );\n\n issueBody += footer;\n\n if (config.dependencyDashboardIssue) {\n // If we're not changing the dashboard issue, then we can skip checking if the user changed it.\n // The cached issue we get back here will reflect its state at the _start_ of our run\n const cachedIssue = await platform.getIssue?.(\n config.dependencyDashboardIssue,\n );\n if (cachedIssue?.body === issueBody) {\n logger.debug('No changes to dependency dashboard issue needed');\n return;\n }\n\n // Skip cache when getting the issue to ensure we get the latest body,\n // including any updates the user made after we started the run\n const updatedIssue = await platform.getIssue?.(\n config.dependencyDashboardIssue,\n false,\n );\n if (updatedIssue) {\n const { dependencyDashboardChecks } = parseDashboardIssue(\n coerceString(updatedIssue.body),\n );\n for (const branchName of Object.keys(config.dependencyDashboardChecks!)) {\n delete dependencyDashboardChecks[branchName];\n }\n for (const branchName of Object.keys(dependencyDashboardChecks)) {\n const checkText = getCheckbox(\n `${dependencyDashboardChecks[branchName]}-branch=${branchName}`,\n );\n issueBody = issueBody.replace(\n checkText,\n checkText.replace('[ ]', '[x]'),\n );\n }\n }\n }\n\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n { title: config.dependencyDashboardTitle },\n 'DRY-RUN: Would ensure Dependency Dashboard',\n );\n } else {\n await platform.ensureIssue({\n title: config.dependencyDashboardTitle!,\n reuseTitle,\n body: platform.massageMarkdown(issueBody, config.rebaseLabel),\n labels: config.dependencyDashboardLabels,\n confidential: config.confidential,\n });\n }\n}\n\nexport function getAbandonedPackagesMd(\n packageFiles: Record<string, PackageFile[]>,\n): string {\n const abandonedPackages: Record<\n string,\n Record<\n string,\n { mostRecentTimestamp?: string | null; sourceUrl?: string | null }\n >\n > = {};\n let abandonedCount = 0;\n\n for (const [manager, managerPackageFiles] of Object.entries(packageFiles)) {\n for (const packageFile of managerPackageFiles) {\n for (const dep of coerceArray(packageFile.deps)) {\n if (dep.depName && dep.isAbandoned) {\n abandonedCount++;\n abandonedPackages[manager] = abandonedPackages[manager] || {};\n abandonedPackages[manager][dep.depName] = {\n mostRecentTimestamp: dep.mostRecentTimestamp,\n sourceUrl: dep.sourceUrl,\n };\n }\n }\n }\n }\n\n if (abandonedCount === 0) {\n return '';\n }\n\n let abandonedMd = '## Abandoned Dependencies\\n\\n';\n abandonedMd +=\n 'The following dependencies have not received updates for an extended period and may be unmaintained.\\n\\n';\n\n abandonedMd += '<details>\\n';\n abandonedMd += `<summary>View abandoned dependencies (${abandonedCount})</summary>\\n\\n`;\n\n abandonedMd += emojify('> :information_source: **Note**\\n> \\n');\n abandonedMd +=\n 'Packages are marked as abandoned when they exceed the [`abandonmentThreshold`](https://docs.renovatebot.com/configuration-options/#abandonmentthreshold) since their last release. ';\n abandonedMd +=\n 'Unlike deprecated packages with official notices, abandonment is detected by release inactivity.\\n> \\n';\n\n abandonedMd += '| Datasource | Package | Last Updated |\\n';\n abandonedMd += '|------------|------|-------------|\\n';\n\n for (const manager of Object.keys(abandonedPackages).sort()) {\n const deps = abandonedPackages[manager];\n for (const depName of Object.keys(deps).sort()) {\n const { mostRecentTimestamp, sourceUrl } = deps[depName];\n const formattedDate = mostRecentTimestamp\n ? DateTime.fromISO(mostRecentTimestamp).toFormat('yyyy-MM-dd')\n : 'unknown';\n const packageName = formatAsMarkdownLink(depName, sourceUrl);\n abandonedMd += `| ${manager} | ${packageName} | \\`${formattedDate}\\` |\\n`;\n }\n }\n\n abandonedMd += '\\n</details>\\n\\n\\n';\n\n return abandonedMd;\n}\n\nfunction getFooter(config: RenovateConfig): string {\n let footer = '';\n if (config.dependencyDashboardFooter?.length) {\n footer +=\n '---\\n' +\n template.compile(config.dependencyDashboardFooter, config) +\n '\\n';\n }\n\n return footer;\n}\n\nexport async function getDashboardMarkdownVulnerabilities(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]>,\n): Promise<string> {\n let result = '';\n\n if (\n isNullOrUndefined(config.dependencyDashboardOSVVulnerabilitySummary) ||\n config.dependencyDashboardOSVVulnerabilitySummary === 'none'\n ) {\n return result;\n }\n\n result += '## Vulnerabilities\\n\\n';\n\n const vulnerabilityFetcher = await Vulnerabilities.create();\n const vulnerabilities = await vulnerabilityFetcher.fetchVulnerabilities(\n config,\n packageFiles,\n );\n\n if (vulnerabilities.length === 0) {\n result +=\n 'Renovate has not found any CVEs on [osv.dev](https://osv.dev).\\n\\n';\n return result;\n }\n\n const unresolvedVulnerabilities = vulnerabilities.filter((value) =>\n isNullOrUndefined(value.fixedVersion),\n );\n const resolvedVulnerabilitiesLength =\n vulnerabilities.length - unresolvedVulnerabilities.length;\n\n result += emojify('> :exclamation: **Important**\\n> \\n');\n result += `> \\`${resolvedVulnerabilitiesLength}\\`/\\`${vulnerabilities.length}\\``;\n if (isTruthy(config.osvVulnerabilityAlerts)) {\n result += ' CVEs have Renovate fixes.\\n\\n';\n } else {\n result +=\n ' CVEs have possible Renovate fixes.\\n> See [`osvVulnerabilityAlerts`](https://docs.renovatebot.com/configuration-options/#osvvulnerabilityalerts) to allow Renovate to supply fixes.\\n\\n';\n }\n\n let renderedVulnerabilities: Vulnerability[];\n switch (config.dependencyDashboardOSVVulnerabilitySummary) {\n // filter vulnerabilities to display based on configuration\n case 'unresolved':\n renderedVulnerabilities = unresolvedVulnerabilities;\n break;\n default:\n renderedVulnerabilities = vulnerabilities;\n }\n\n const managerRecords: Record<\n string,\n Record<string, Record<string, Vulnerability[]>>\n > = {};\n for (const vulnerability of renderedVulnerabilities) {\n const { manager, packageFile } = vulnerability.packageFileConfig;\n if (isNullOrUndefined(managerRecords[manager!])) {\n managerRecords[manager!] = {};\n }\n if (isNullOrUndefined(managerRecords[manager!][packageFile])) {\n managerRecords[manager!][packageFile] = {};\n }\n if (\n isNullOrUndefined(\n managerRecords[manager!][packageFile][vulnerability.packageName],\n )\n ) {\n managerRecords[manager!][packageFile][vulnerability.packageName] = [];\n }\n managerRecords[manager!][packageFile][vulnerability.packageName].push(\n vulnerability,\n );\n }\n\n for (const [manager, packageFileRecords] of Object.entries(managerRecords)) {\n result += `<details><summary>${manager}</summary>\\n<blockquote>\\n\\n`;\n for (const [packageFile, packageNameRecords] of Object.entries(\n packageFileRecords,\n )) {\n result += `<details><summary>${packageFile}</summary>\\n<blockquote>\\n\\n`;\n for (const [packageName, cves] of Object.entries(packageNameRecords)) {\n result += `<details><summary>${packageName}</summary>\\n<blockquote>\\n\\n`;\n for (const vul of cves) {\n const id = vul.vulnerability.id;\n const suffix = isNonEmptyString(vul.fixedVersion)\n ? ` (fixed in ${vul.fixedVersion})`\n : '';\n result += `- [${id}](https://osv.dev/vulnerability/${id})${suffix}\\n`;\n }\n result += `</blockquote>\\n</details>\\n\\n`;\n }\n result += `</blockquote>\\n</details>\\n\\n`;\n }\n result += `</blockquote>\\n</details>\\n\\n`;\n }\n\n return result;\n}\n"],"mappings":"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"}
@@ -9,6 +9,7 @@ import { filterConfig, getManagerConfig } from "../../../config/index.js";
9
9
  import { detectSemanticCommits } from "../../../util/git/semantic.js";
10
10
  import { applyPackageRules } from "../../../util/package-rules/index.js";
11
11
  import { generateBranchName } from "./branch-name.js";
12
+ import { isUndefined } from "@sindresorhus/is";
12
13
  //#region lib/workers/repository/updates/flatten.ts
13
14
  const upper = (str) => str.charAt(0).toUpperCase() + str.substring(1);
14
15
  function sanitizeDepName(depName) {
@@ -119,7 +120,7 @@ async function flattenUpdates(config, packageFiles) {
119
120
  const semanticCommits = await detectSemanticCommits();
120
121
  for (const update of updates) update.semanticCommits = semanticCommits;
121
122
  }
122
- const filteredUpdates = updates.filter((update) => update.enabled !== false).map(({ vulnerabilityAlerts: _, ...update }) => update).map((update) => filterConfig(update, "branch"));
123
+ const filteredUpdates = updates.filter((update) => update.enabled !== false).filter((update) => isUndefined(update.skipReason)).map(({ vulnerabilityAlerts: _, ...update }) => update).map((update) => filterConfig(update, "branch"));
123
124
  if (filteredUpdates.length < updates.length) logger.debug(`Filtered out ${updates.length - filteredUpdates.length} disabled update(s). ${filteredUpdates.length} update(s) remaining.`);
124
125
  return filteredUpdates;
125
126
  }
@@ -1 +1 @@
1
- {"version":3,"file":"flatten.js","names":["template.compile"],"sources":["../../../../lib/workers/repository/updates/flatten.ts"],"sourcesContent":["import {\n filterConfig,\n getManagerConfig,\n mergeChildConfig,\n} from '../../../config/index.ts';\nimport type { RenovateConfig } from '../../../config/types.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { getDefaultConfig } from '../../../modules/datasource/index.ts';\nimport { get } from '../../../modules/manager/index.ts';\nimport type { PackageFile } from '../../../modules/manager/types.ts';\nimport { detectSemanticCommits } from '../../../util/git/semantic.ts';\nimport { applyPackageRules } from '../../../util/package-rules/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport * as template from '../../../util/template/index.ts';\nimport { parseUrl } from '../../../util/url.ts';\nimport type { BranchUpgradeConfig } from '../../types.ts';\nimport { generateBranchName } from './branch-name.ts';\n\nconst upper = (str: string): string =>\n str.charAt(0).toUpperCase() + str.substring(1);\n\nexport function sanitizeDepName(depName: string): string {\n return depName\n .replace('@types/', '')\n .replace('@', '')\n .replace(regEx(/\\//g), '-')\n .replace(regEx(/\\s+/g), '-')\n .replace(regEx(/:/g), '-')\n .replace(regEx(/-+/), '-')\n .toLowerCase();\n}\n\nexport function applyUpdateConfig(input: BranchUpgradeConfig): any {\n const updateConfig = { ...input };\n delete updateConfig.packageRules;\n // TODO: Remove next line once #8075 is complete\n updateConfig.depNameSanitized = updateConfig.depName\n ? sanitizeDepName(updateConfig.depName)\n : undefined;\n updateConfig.newNameSanitized = updateConfig.newName\n ? sanitizeDepName(updateConfig.newName)\n : undefined;\n if (updateConfig.sourceUrl) {\n const parsedSourceUrl = parseUrl(updateConfig.sourceUrl);\n if (parsedSourceUrl?.pathname) {\n updateConfig.sourceRepoSlug = parsedSourceUrl.pathname\n .replace(regEx(/^\\//), '') // remove leading slash\n .replace(regEx(/\\//g), '-') // change slashes to hyphens\n .replace(regEx(/-+/g), '-'); // remove multiple hyphens\n updateConfig.sourceRepo = parsedSourceUrl.pathname.replace(\n regEx(/^\\//),\n '',\n ); // remove leading slash\n updateConfig.sourceRepoOrg = updateConfig.sourceRepo.replace(\n regEx(/\\/.*/g),\n '',\n ); // remove everything after first slash\n updateConfig.sourceRepoName = updateConfig.sourceRepo.replace(\n regEx(/.*\\//g),\n '',\n ); // remove everything up to the last slash\n }\n }\n if (updateConfig.sourceDirectory) {\n updateConfig.sourceDirectory = template.compile(\n updateConfig.sourceDirectory,\n updateConfig,\n );\n }\n generateBranchName(updateConfig);\n return updateConfig;\n}\n\nexport async function flattenUpdates(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]>,\n): Promise<BranchUpgradeConfig[]> {\n const updates = [];\n const updateTypes = [\n 'major',\n 'minor',\n 'patch',\n 'pin',\n 'digest',\n 'lockFileMaintenance',\n 'replacement',\n ];\n for (const [manager, files] of Object.entries(packageFiles)) {\n const managerConfig = getManagerConfig(config, manager);\n for (const packageFile of files) {\n const packageFileConfig: BranchUpgradeConfig = mergeChildConfig(\n managerConfig,\n packageFile,\n ) as never;\n const packagePath = packageFile.packageFile?.split('/');\n if (packagePath.length > 0) {\n packagePath.splice(-1, 1);\n }\n if (packagePath.length > 0) {\n packageFileConfig.parentDir = packagePath[packagePath.length - 1];\n packageFileConfig.packageFileDir = packagePath.join('/');\n } else {\n packageFileConfig.parentDir = '';\n packageFileConfig.packageFileDir = '';\n }\n let depIndex = 0;\n for (const dep of packageFile.deps) {\n if (dep.updates!.length) {\n const depConfig = mergeChildConfig(packageFileConfig, dep);\n // @ts-expect-error -- not easily typed\n delete depConfig.deps;\n depConfig.depIndex = depIndex; // used for autoreplace\n for (const update of dep.updates!) {\n let updateConfig = mergeChildConfig(depConfig, update);\n delete updateConfig.updates;\n if (updateConfig.updateType) {\n // @ts-expect-error -- not easily typed\n updateConfig[`is${upper(updateConfig.updateType)}`] = true;\n }\n if (updateConfig.updateTypes) {\n updateConfig.updateTypes.forEach((updateType: string) => {\n // @ts-expect-error -- not easily typed\n updateConfig[`is${upper(updateType)}`] = true;\n });\n }\n // apply config from datasource\n const datasourceConfig = await getDefaultConfig(\n depConfig.datasource!,\n );\n updateConfig = mergeChildConfig(updateConfig, datasourceConfig);\n updateConfig = await applyPackageRules(\n updateConfig,\n 'datasource-merge',\n );\n // apply major/minor/patch/pin/digest\n updateConfig = mergeChildConfig(\n updateConfig,\n // @ts-expect-error -- not easily typed\n updateConfig[updateConfig.updateType],\n );\n for (const updateType of updateTypes) {\n // @ts-expect-error -- not easily typed\n delete updateConfig[updateType];\n }\n // Apply again in case any were added by the updateType config\n updateConfig = await applyPackageRules(\n updateConfig,\n 'update-type-merge',\n );\n updateConfig = applyUpdateConfig(updateConfig);\n updateConfig.baseDeps = packageFile.deps;\n update.branchName = updateConfig.branchName;\n\n // make sure that we use the dependency's current state of attestation, rather than using the new update's value\n updateConfig.hasAttestation = depConfig.hasAttestation;\n\n updates.push(updateConfig);\n }\n }\n depIndex += 1;\n }\n if (\n get(manager, 'supportsLockFileMaintenance') &&\n packageFileConfig.lockFileMaintenance!.enabled\n ) {\n // Apply lockFileMaintenance config before packageRules\n let lockFileConfig = mergeChildConfig(\n packageFileConfig,\n packageFileConfig.lockFileMaintenance!,\n );\n lockFileConfig.updateType = 'lockFileMaintenance';\n lockFileConfig.isLockFileMaintenance = true;\n lockFileConfig = await applyPackageRules(\n lockFileConfig,\n 'lock-file-maintenance-merge',\n );\n // Apply lockFileMaintenance and packageRules again\n lockFileConfig = mergeChildConfig(\n lockFileConfig,\n lockFileConfig.lockFileMaintenance!,\n );\n lockFileConfig = await applyPackageRules(\n lockFileConfig,\n 'lock-file-maintenance-merge-2',\n );\n // Remove unnecessary objects\n for (const updateType of updateTypes) {\n // @ts-expect-error -- not easily typed\n delete lockFileConfig[updateType];\n }\n delete lockFileConfig.packageRules;\n // @ts-expect-error -- not easily typed\n delete lockFileConfig.deps;\n generateBranchName(lockFileConfig);\n updates.push(lockFileConfig);\n }\n if (get(manager, 'updateLockedDependency')) {\n for (const lockFile of packageFileConfig.lockFiles ?? []) {\n const lockfileRemediations = config.remediations as Record<\n string,\n Record<string, any>[]\n >;\n const remediations = lockfileRemediations?.[lockFile];\n if (remediations) {\n for (const remediation of remediations) {\n let updateConfig = mergeChildConfig(\n packageFileConfig,\n remediation,\n );\n updateConfig = mergeChildConfig(\n updateConfig,\n config.vulnerabilityAlerts,\n );\n delete updateConfig.vulnerabilityAlerts;\n updateConfig.isVulnerabilityAlert = true;\n updateConfig.isRemediation = true;\n updateConfig.lockFile = lockFile;\n updateConfig.currentValue = updateConfig.currentVersion;\n updateConfig.newValue = updateConfig.newVersion;\n updateConfig = applyUpdateConfig(updateConfig);\n updateConfig.enabled = true;\n updates.push(updateConfig);\n }\n }\n }\n }\n }\n }\n if (config.semanticCommits === 'auto') {\n const semanticCommits = await detectSemanticCommits();\n for (const update of updates) {\n update.semanticCommits = semanticCommits;\n }\n }\n const filteredUpdates = updates\n .filter((update) => update.enabled !== false)\n .map(({ vulnerabilityAlerts: _, ...update }) => update)\n .map((update) => filterConfig(update, 'branch'));\n if (filteredUpdates.length < updates.length) {\n logger.debug(\n `Filtered out ${updates.length - filteredUpdates.length} disabled update(s). ${filteredUpdates.length} update(s) remaining.`,\n );\n }\n return filteredUpdates;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"flatten.js","names":["template.compile"],"sources":["../../../../lib/workers/repository/updates/flatten.ts"],"sourcesContent":["import { isUndefined } from '@sindresorhus/is';\nimport {\n filterConfig,\n getManagerConfig,\n mergeChildConfig,\n} from '../../../config/index.ts';\nimport type { RenovateConfig } from '../../../config/types.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { getDefaultConfig } from '../../../modules/datasource/index.ts';\nimport { get } from '../../../modules/manager/index.ts';\nimport type { PackageFile } from '../../../modules/manager/types.ts';\nimport { detectSemanticCommits } from '../../../util/git/semantic.ts';\nimport { applyPackageRules } from '../../../util/package-rules/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport * as template from '../../../util/template/index.ts';\nimport { parseUrl } from '../../../util/url.ts';\nimport type { BranchUpgradeConfig } from '../../types.ts';\nimport { generateBranchName } from './branch-name.ts';\n\nconst upper = (str: string): string =>\n str.charAt(0).toUpperCase() + str.substring(1);\n\nexport function sanitizeDepName(depName: string): string {\n return depName\n .replace('@types/', '')\n .replace('@', '')\n .replace(regEx(/\\//g), '-')\n .replace(regEx(/\\s+/g), '-')\n .replace(regEx(/:/g), '-')\n .replace(regEx(/-+/), '-')\n .toLowerCase();\n}\n\nexport function applyUpdateConfig(input: BranchUpgradeConfig): any {\n const updateConfig = { ...input };\n delete updateConfig.packageRules;\n // TODO: Remove next line once #8075 is complete\n updateConfig.depNameSanitized = updateConfig.depName\n ? sanitizeDepName(updateConfig.depName)\n : undefined;\n updateConfig.newNameSanitized = updateConfig.newName\n ? sanitizeDepName(updateConfig.newName)\n : undefined;\n if (updateConfig.sourceUrl) {\n const parsedSourceUrl = parseUrl(updateConfig.sourceUrl);\n if (parsedSourceUrl?.pathname) {\n updateConfig.sourceRepoSlug = parsedSourceUrl.pathname\n .replace(regEx(/^\\//), '') // remove leading slash\n .replace(regEx(/\\//g), '-') // change slashes to hyphens\n .replace(regEx(/-+/g), '-'); // remove multiple hyphens\n updateConfig.sourceRepo = parsedSourceUrl.pathname.replace(\n regEx(/^\\//),\n '',\n ); // remove leading slash\n updateConfig.sourceRepoOrg = updateConfig.sourceRepo.replace(\n regEx(/\\/.*/g),\n '',\n ); // remove everything after first slash\n updateConfig.sourceRepoName = updateConfig.sourceRepo.replace(\n regEx(/.*\\//g),\n '',\n ); // remove everything up to the last slash\n }\n }\n if (updateConfig.sourceDirectory) {\n updateConfig.sourceDirectory = template.compile(\n updateConfig.sourceDirectory,\n updateConfig,\n );\n }\n generateBranchName(updateConfig);\n return updateConfig;\n}\n\nexport async function flattenUpdates(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]>,\n): Promise<BranchUpgradeConfig[]> {\n const updates = [];\n const updateTypes = [\n 'major',\n 'minor',\n 'patch',\n 'pin',\n 'digest',\n 'lockFileMaintenance',\n 'replacement',\n ];\n for (const [manager, files] of Object.entries(packageFiles)) {\n const managerConfig = getManagerConfig(config, manager);\n for (const packageFile of files) {\n const packageFileConfig: BranchUpgradeConfig = mergeChildConfig(\n managerConfig,\n packageFile,\n ) as never;\n const packagePath = packageFile.packageFile?.split('/');\n if (packagePath.length > 0) {\n packagePath.splice(-1, 1);\n }\n if (packagePath.length > 0) {\n packageFileConfig.parentDir = packagePath[packagePath.length - 1];\n packageFileConfig.packageFileDir = packagePath.join('/');\n } else {\n packageFileConfig.parentDir = '';\n packageFileConfig.packageFileDir = '';\n }\n let depIndex = 0;\n for (const dep of packageFile.deps) {\n if (dep.updates!.length) {\n const depConfig = mergeChildConfig(packageFileConfig, dep);\n // @ts-expect-error -- not easily typed\n delete depConfig.deps;\n depConfig.depIndex = depIndex; // used for autoreplace\n for (const update of dep.updates!) {\n let updateConfig = mergeChildConfig(depConfig, update);\n delete updateConfig.updates;\n if (updateConfig.updateType) {\n // @ts-expect-error -- not easily typed\n updateConfig[`is${upper(updateConfig.updateType)}`] = true;\n }\n if (updateConfig.updateTypes) {\n updateConfig.updateTypes.forEach((updateType: string) => {\n // @ts-expect-error -- not easily typed\n updateConfig[`is${upper(updateType)}`] = true;\n });\n }\n // apply config from datasource\n const datasourceConfig = await getDefaultConfig(\n depConfig.datasource!,\n );\n updateConfig = mergeChildConfig(updateConfig, datasourceConfig);\n updateConfig = await applyPackageRules(\n updateConfig,\n 'datasource-merge',\n );\n // apply major/minor/patch/pin/digest\n updateConfig = mergeChildConfig(\n updateConfig,\n // @ts-expect-error -- not easily typed\n updateConfig[updateConfig.updateType],\n );\n for (const updateType of updateTypes) {\n // @ts-expect-error -- not easily typed\n delete updateConfig[updateType];\n }\n // Apply again in case any were added by the updateType config\n updateConfig = await applyPackageRules(\n updateConfig,\n 'update-type-merge',\n );\n updateConfig = applyUpdateConfig(updateConfig);\n updateConfig.baseDeps = packageFile.deps;\n update.branchName = updateConfig.branchName;\n\n // make sure that we use the dependency's current state of attestation, rather than using the new update's value\n updateConfig.hasAttestation = depConfig.hasAttestation;\n\n updates.push(updateConfig);\n }\n }\n depIndex += 1;\n }\n if (\n get(manager, 'supportsLockFileMaintenance') &&\n packageFileConfig.lockFileMaintenance!.enabled\n ) {\n // Apply lockFileMaintenance config before packageRules\n let lockFileConfig = mergeChildConfig(\n packageFileConfig,\n packageFileConfig.lockFileMaintenance!,\n );\n lockFileConfig.updateType = 'lockFileMaintenance';\n lockFileConfig.isLockFileMaintenance = true;\n lockFileConfig = await applyPackageRules(\n lockFileConfig,\n 'lock-file-maintenance-merge',\n );\n // Apply lockFileMaintenance and packageRules again\n lockFileConfig = mergeChildConfig(\n lockFileConfig,\n lockFileConfig.lockFileMaintenance!,\n );\n lockFileConfig = await applyPackageRules(\n lockFileConfig,\n 'lock-file-maintenance-merge-2',\n );\n // Remove unnecessary objects\n for (const updateType of updateTypes) {\n // @ts-expect-error -- not easily typed\n delete lockFileConfig[updateType];\n }\n delete lockFileConfig.packageRules;\n // @ts-expect-error -- not easily typed\n delete lockFileConfig.deps;\n generateBranchName(lockFileConfig);\n updates.push(lockFileConfig);\n }\n if (get(manager, 'updateLockedDependency')) {\n for (const lockFile of packageFileConfig.lockFiles ?? []) {\n const lockfileRemediations = config.remediations as Record<\n string,\n Record<string, any>[]\n >;\n const remediations = lockfileRemediations?.[lockFile];\n if (remediations) {\n for (const remediation of remediations) {\n let updateConfig = mergeChildConfig(\n packageFileConfig,\n remediation,\n );\n updateConfig = mergeChildConfig(\n updateConfig,\n config.vulnerabilityAlerts,\n );\n delete updateConfig.vulnerabilityAlerts;\n updateConfig.isVulnerabilityAlert = true;\n updateConfig.isRemediation = true;\n updateConfig.lockFile = lockFile;\n updateConfig.currentValue = updateConfig.currentVersion;\n updateConfig.newValue = updateConfig.newVersion;\n updateConfig = applyUpdateConfig(updateConfig);\n updateConfig.enabled = true;\n updates.push(updateConfig);\n }\n }\n }\n }\n }\n }\n if (config.semanticCommits === 'auto') {\n const semanticCommits = await detectSemanticCommits();\n for (const update of updates) {\n update.semanticCommits = semanticCommits;\n }\n }\n const filteredUpdates = updates\n .filter((update) => update.enabled !== false)\n .filter((update) => isUndefined(update.skipReason))\n .map(({ vulnerabilityAlerts: _, ...update }) => update)\n .map((update) => filterConfig(update, 'branch'));\n if (filteredUpdates.length < updates.length) {\n logger.debug(\n `Filtered out ${updates.length - filteredUpdates.length} disabled update(s). ${filteredUpdates.length} update(s) remaining.`,\n );\n }\n return filteredUpdates;\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "renovate",
3
3
  "description": "Automated dependency updates. Flexible so you don't need to be.",
4
- "version": "43.112.0",
4
+ "version": "43.113.0",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "renovate": "dist/renovate.js",
@@ -222,7 +222,7 @@
222
222
  "@ls-lint/ls-lint": "2.3.1",
223
223
  "@openpgp/web-stream-tools": "0.3.0",
224
224
  "@semantic-release/exec": "7.1.0",
225
- "@smithy/util-stream": "4.5.21",
225
+ "@smithy/util-stream": "4.5.22",
226
226
  "@types/aws4": "1.11.6",
227
227
  "@types/better-sqlite3": "7.6.13",
228
228
  "@types/breejs__later": "4.1.5",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$id": "https://docs.renovatebot.com/renovate-schema.json",
3
- "title": "JSON schema for Renovate 43.112.0 config files (https://renovatebot.com/)",
3
+ "title": "JSON schema for Renovate 43.113.0 config files (https://renovatebot.com/)",
4
4
  "$schema": "http://json-schema.org/draft-07/schema#",
5
- "x-renovate-version": "43.112.0",
5
+ "x-renovate-version": "43.113.0",
6
6
  "allowComments": true,
7
7
  "type": "object",
8
8
  "properties": {