renovate 44.237.2 → 44.238.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/config/options/index.js +11 -1
  2. package/dist/config/options/index.js.map +1 -1
  3. package/dist/config/presets/internal/security.preset.js +14 -9
  4. package/dist/config/presets/internal/security.preset.js.map +1 -1
  5. package/dist/config/types.d.ts +1 -0
  6. package/dist/config/types.js.map +1 -1
  7. package/dist/global-config-option-defaults.generated.js +1 -1
  8. package/dist/global-config-option-defaults.generated.js.map +1 -1
  9. package/dist/modules/manager/cargo/artifacts.js +39 -10
  10. package/dist/modules/manager/cargo/artifacts.js.map +1 -1
  11. package/dist/modules/manager/cargo/extract.js +45 -28
  12. package/dist/modules/manager/cargo/extract.js.map +1 -1
  13. package/dist/modules/manager/cargo/index.js +10 -1
  14. package/dist/modules/manager/cargo/index.js.map +1 -1
  15. package/dist/modules/manager/cargo/locked-version.js +10 -4
  16. package/dist/modules/manager/cargo/locked-version.js.map +1 -1
  17. package/dist/modules/manager/cargo/minimum-release-age.js +216 -0
  18. package/dist/modules/manager/cargo/minimum-release-age.js.map +1 -0
  19. package/dist/modules/manager/cargo/schema.js +6 -1
  20. package/dist/modules/manager/cargo/schema.js.map +1 -1
  21. package/dist/modules/manager/cargo/utils.js +23 -1
  22. package/dist/modules/manager/cargo/utils.js.map +1 -1
  23. package/dist/modules/manager/fingerprint.generated.js +3 -3
  24. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  25. package/dist/modules/manager/npm/constants.js +3 -1
  26. package/dist/modules/manager/npm/constants.js.map +1 -1
  27. package/dist/modules/manager/npm/extract/index.js +1 -1
  28. package/dist/modules/manager/npm/extract/index.js.map +1 -1
  29. package/dist/modules/manager/npm/extract/npmrc.js +93 -0
  30. package/dist/modules/manager/npm/extract/npmrc.js.map +1 -0
  31. package/dist/modules/manager/npm/extract/pnpm-minimum-release-age.js +149 -0
  32. package/dist/modules/manager/npm/extract/pnpm-minimum-release-age.js.map +1 -0
  33. package/dist/modules/manager/npm/extract/pnpm.js +88 -2
  34. package/dist/modules/manager/npm/extract/pnpm.js.map +1 -1
  35. package/dist/modules/manager/npm/extract/post/index.js +7 -1
  36. package/dist/modules/manager/npm/extract/post/index.js.map +1 -1
  37. package/dist/modules/manager/npm/extract/utils.js +25 -1
  38. package/dist/modules/manager/npm/extract/utils.js.map +1 -1
  39. package/dist/modules/manager/npm/extract/yarn-minimum-release-age.js +181 -0
  40. package/dist/modules/manager/npm/extract/yarn-minimum-release-age.js.map +1 -0
  41. package/dist/modules/manager/npm/index.js +18 -4
  42. package/dist/modules/manager/npm/index.js.map +1 -1
  43. package/dist/modules/manager/npm/minimum-release-age.js +93 -0
  44. package/dist/modules/manager/npm/minimum-release-age.js.map +1 -0
  45. package/dist/modules/manager/npm/post-update/index.js +12 -3
  46. package/dist/modules/manager/npm/post-update/index.js.map +1 -1
  47. package/dist/modules/manager/npm/post-update/npm.js +89 -57
  48. package/dist/modules/manager/npm/post-update/npm.js.map +1 -1
  49. package/dist/modules/manager/npm/post-update/pnpm.js +132 -90
  50. package/dist/modules/manager/npm/post-update/pnpm.js.map +1 -1
  51. package/dist/modules/manager/npm/post-update/utils.js +7 -1
  52. package/dist/modules/manager/npm/post-update/utils.js.map +1 -1
  53. package/dist/modules/manager/npm/post-update/yarn.js +70 -3
  54. package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
  55. package/dist/modules/manager/npm/schema.js +21 -2
  56. package/dist/modules/manager/npm/schema.js.map +1 -1
  57. package/dist/modules/manager/types.d.ts +10 -3
  58. package/dist/modules/versioning/common.js +14 -2
  59. package/dist/modules/versioning/common.js.map +1 -1
  60. package/dist/modules/versioning/rust-release-channel/index.js +21 -0
  61. package/dist/modules/versioning/rust-release-channel/index.js.map +1 -1
  62. package/dist/util/minimum-release-age.js +20 -6
  63. package/dist/util/minimum-release-age.js.map +1 -1
  64. package/dist/util/schema-utils/index.js.map +1 -1
  65. package/dist/workers/repository/updates/flatten.js +1 -0
  66. package/dist/workers/repository/updates/flatten.js.map +1 -1
  67. package/package.json +3 -3
  68. package/renovate-schema.json +380 -2
@@ -1,8 +1,30 @@
1
+ import { logger } from "../../../logger/index.js";
2
+ import { readLocalFile } from "../../../util/fs/index.js";
3
+ import { CargoConfig } from "./schema.js";
1
4
  // lib/modules/manager/cargo/utils.ts
2
5
  /**
3
6
  * A sentinel value to signal the Default Registry (crates-io)
4
7
  */
5
8
  const DEFAULT_REGISTRY_URL = Symbol("DEFAULT_REGISTRY_URL");
6
- export { DEFAULT_REGISTRY_URL };
9
+ /** The name of crates.io in the cargo config */
10
+ const DEFAULT_REGISTRY_ID = "crates-io";
11
+ /** Reads `.cargo/config`, or, if not found, `.cargo/config.toml`, as cargo uses `.cargo/config` if both exist */
12
+ async function readCargoConfig() {
13
+ for (const configName of ["config", "config.toml"]) {
14
+ const path = `.cargo/${configName}`;
15
+ const payload = await readLocalFile(path, "utf8");
16
+ if (payload) {
17
+ const parsedCargoConfig = CargoConfig.safeParse(payload);
18
+ if (parsedCargoConfig.success) return parsedCargoConfig.data;
19
+ logger.debug({
20
+ err: parsedCargoConfig.error,
21
+ path
22
+ }, `Error parsing cargo config`);
23
+ }
24
+ }
25
+ logger.debug("Neither .cargo/config nor .cargo/config.toml found");
26
+ return null;
27
+ }
28
+ export { DEFAULT_REGISTRY_ID, DEFAULT_REGISTRY_URL, readCargoConfig };
7
29
 
8
30
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../../../lib/modules/manager/cargo/utils.ts"],"sourcesContent":["/**\n * A sentinel value to signal the Default Registry (crates-io)\n */\nexport const DEFAULT_REGISTRY_URL = Symbol('DEFAULT_REGISTRY_URL');\n"],"mappings":";;;;AAGA,MAAa,uBAAuB,OAAO,sBAAsB"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../../../lib/modules/manager/cargo/utils.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { CargoConfig } from './schema.ts';\n\n/**\n * A sentinel value to signal the Default Registry (crates-io)\n */\nexport const DEFAULT_REGISTRY_URL = Symbol('DEFAULT_REGISTRY_URL');\n\n/** The name of crates.io in the cargo config */\nexport const DEFAULT_REGISTRY_ID = 'crates-io';\n\n/** Reads `.cargo/config`, or, if not found, `.cargo/config.toml`, as cargo uses `.cargo/config` if both exist */\nexport async function readCargoConfig(): Promise<CargoConfig | null> {\n for (const configName of ['config', 'config.toml']) {\n const path = `.cargo/${configName}`;\n const payload = await readLocalFile(path, 'utf8');\n if (payload) {\n const parsedCargoConfig = CargoConfig.safeParse(payload);\n if (parsedCargoConfig.success) {\n return parsedCargoConfig.data;\n }\n logger.debug(\n { err: parsedCargoConfig.error, path },\n `Error parsing cargo config`,\n );\n }\n }\n\n logger.debug('Neither .cargo/config nor .cargo/config.toml found');\n return null;\n}\n"],"mappings":";;;;;;;AAOA,MAAa,uBAAuB,OAAO,sBAAsB;;AAGjE,MAAa,sBAAsB;;AAGnC,eAAsB,kBAA+C;CACnE,KAAK,MAAM,cAAc,CAAC,UAAU,aAAa,GAAG;EAClD,MAAM,OAAO,UAAU;EACvB,MAAM,UAAU,MAAM,cAAc,MAAM,MAAM;EAChD,IAAI,SAAS;GACX,MAAM,oBAAoB,YAAY,UAAU,OAAO;GACvD,IAAI,kBAAkB,SACpB,OAAO,kBAAkB;GAE3B,OAAO,MACL;IAAE,KAAK,kBAAkB;IAAO;GAAK,GACrC,4BACF;EACF;CACF;CAEA,OAAO,MAAM,oDAAoD;CACjE,OAAO;AACT"}
@@ -21,7 +21,7 @@ hashMap.set("bun", "85f389e291218c49c1c0400ba4c6c9ff7532a6b098e9a37b872fd26569c0
21
21
  hashMap.set("bun-version", "df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4");
22
22
  hashMap.set("bundler", "0554277f0c9edfc12a8ba2aefdb74c890e274dabce1cbdb1383990063ddc510b");
23
23
  hashMap.set("cake", "9ebd8b481220b30a8860121d26184540a1a2fcc05ef780df9295dea39b386fad");
24
- hashMap.set("cargo", "74ac02207de7b297d66dfed5b77c7fdeffcdcf2eac639798ba434d0571a90384");
24
+ hashMap.set("cargo", "d2523cc0d0cf59d2e90c377bab1ba88d708efadb1745a20d87c346f362bf195a");
25
25
  hashMap.set("cdnurl", "9a81c8e3c6ad6c788498c99fc1067ffdfcd92a427c3afaf8c0130975d83131f2");
26
26
  hashMap.set("circleci", "91cbeb33ea20f9838e2c81a1195eb806f0b38fa282bc3679f62552f20575ca85");
27
27
  hashMap.set("cloudbuild", "f4e40388944652c8a19f8518771ac8d3f3c4ccf81ddef0e68b463aca833cb73c");
@@ -77,7 +77,7 @@ hashMap.set("mise", "432f3cd80b9fd3f76b2af73db5e96508edda102a0d7eb3265af232f07b8
77
77
  hashMap.set("mix", "0f79163dc2a1c896599d152be635c23beaf16812ae3d8fbfffec98c7bd0de872");
78
78
  hashMap.set("nix", "422242f1714be6972fc7006c37f4a497dbbd44ba9c3f68f7b73e7dd3d81fd74d");
79
79
  hashMap.set("nodenv", "ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8");
80
- hashMap.set("npm", "fd79695a5c7fb5e134308c5f4048c1376c3f3dc3d82c7d22e116445d4d7d321b");
80
+ hashMap.set("npm", "c1fd6b7e4f3bcd21ddf141a9aabb5f648c79888bcee6f8807d2c04ee4cd676d3");
81
81
  hashMap.set("nuget", "fb02247c67a198ffe414a44d23c7894bd114dcc53803334f82e39479e7b27f6f");
82
82
  hashMap.set("nvm", "3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322");
83
83
  hashMap.set("ocb", "032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca");
@@ -90,7 +90,7 @@ hashMap.set("pip_requirements", "bf3a407f72abf711230247bef94ba5dc84c08a35107b0f0
90
90
  hashMap.set("pip_setup", "df18fba2bdcf48f3ca12a8f7e5cd28df31e2368d5528127277038ef4206eca79");
91
91
  hashMap.set("pipenv", "9b8ac4f9432f2789f60847c80582966d5ed4f735d2f678c82416d0eb9548b4fa");
92
92
  hashMap.set("pixi", "e31c397982ffa34222b061f23f3b3683f42523dd5dca45ecce2448b0ebc55ea2");
93
- hashMap.set("poetry", "d63bb076c87f6bad104b8f5278fc9c3952b7425191481b02c54446da90f16705");
93
+ hashMap.set("poetry", "39d9dbdfe93957f830471bd65f9443b3f58629978f26664b5e07a2a31114cbe7");
94
94
  hashMap.set("pre-commit", "760f2c291ae084db889f722390798a0e2d431ccdc3bc676e73b14901ebea19ac");
95
95
  hashMap.set("proto", "412053d4550026b4ace490b46e970915b87ec1abf0b0a0c6c8c58ccf1fc16843");
96
96
  hashMap.set("pub", "8e7c65dfd1999de4f7c44392e949a4d8f4701eb86df59d550e4657feb06b1872");
@@ -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','a52394a36ac5517f7330473c31d93aa05b2ce607c5e951b48f25a4693cd20a81');\nhashMap.set('ansible-galaxy','8e11293c8f61b4cbae77a3b1634a47213031c59df2c9833d89db65bf4e6edc64');\nhashMap.set('ant','2df5943cf0ed19a21b94df13729dbb925655548130caf37e3e22bebaed518e17');\nhashMap.set('apm','559aca1db5b117b162962fe817db5550f1b17793b02b45982394ea2458e421f7');\nhashMap.set('argocd','cff9cd22257bc460ae4b9936570bf0ed5585f280a55d26629deaeeb0bfee8eb5');\nhashMap.set('asdf','430eb99b58171700c8a59c78b9e648575e9b176b781d90dd10a710f7b69015bb');\nhashMap.set('azure-pipelines','04a13dec4e08ba21004961c718072fde976226d65809fa3c838bf66ba93e5d5a');\nhashMap.set('batect','375d39b432013bedb1330cf40a2199dd822751b28578214f219e7bab98594b8d');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','4d4f1d9a6519ba552b316b396db13ff0654a2663d8ed976188899a2d57d306a2');\nhashMap.set('bazel-module','9fbba0339f9f7785d52ab85c5f0f6385003093c063483c13feccba13ae438bef');\nhashMap.set('bazelisk','770f75a746dc6ba90c518788d5987d7df4243ef9eee122d1bb0556a93d6e1b11');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','b8b404f53cd5d61c39153fddf93945e621471c4ac6aa9960c881cd868922bb4c');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','85f389e291218c49c1c0400ba4c6c9ff7532a6b098e9a37b872fd26569c02fc0');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','0554277f0c9edfc12a8ba2aefdb74c890e274dabce1cbdb1383990063ddc510b');\nhashMap.set('cake','9ebd8b481220b30a8860121d26184540a1a2fcc05ef780df9295dea39b386fad');\nhashMap.set('cargo','74ac02207de7b297d66dfed5b77c7fdeffcdcf2eac639798ba434d0571a90384');\nhashMap.set('cdnurl','9a81c8e3c6ad6c788498c99fc1067ffdfcd92a427c3afaf8c0130975d83131f2');\nhashMap.set('circleci','91cbeb33ea20f9838e2c81a1195eb806f0b38fa282bc3679f62552f20575ca85');\nhashMap.set('cloudbuild','f4e40388944652c8a19f8518771ac8d3f3c4ccf81ddef0e68b463aca833cb73c');\nhashMap.set('cocoapods','f832e2beef885bb3fd697ed9bb3e8cd742926bfec37ff41212edd2dbb4edb3ba');\nhashMap.set('composer','bbca094a652544845c147bd801b04ce4aae3719cb27acfb68b2ebac616940538');\nhashMap.set('conan','03cdeeffe4e688fb403766100cc1fc617dd388629f1c769ba54a966db3b23414');\nhashMap.set('copier','a0678cc1eec36301328780966eec215c6e18748ea80c98873c8e13291a684cfa');\nhashMap.set('cpanfile','07813fec3f3c2197056500e9266a0553b9774c02f2c74d5ca2e213188c7c12d3');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deno','3dfe9b92c437010925c07b10e84cf69656de399f4032fb6db59480ce0fc08f27');\nhashMap.set('deps-edn','06783dbc8b9c7bb84e162d1f75b7db56dfa021cc6f809dfd2314cee8b64af08d');\nhashMap.set('devbox','a40050cc61bd9b5d500ec111abb17bb15d5f82ab5b7699f66f628307ba8382c9');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','fba87b82cb0f2bfd66526631fbe928b8153e7ca701a5790d02b944df17417bb9');\nhashMap.set('dockerfile','b5faeb8f31d238e0d05a4aeebf9a837273687908ab8078b34e738bb0e369c80c');\nhashMap.set('droneci','661d2a2d7295af8dd7a1234c7090c42a89306bd574c3adf1fc67782efaad3998');\nhashMap.set('fleet','ffa222820f72c4eb4cdc4c229ae8c50433bee96f3b974f0633d5a7d1f6427c97');\nhashMap.set('flux','f881de9cb1b09788f78a3de7c7bbfd8407f88a4af49a39b99f4f91634584249f');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('gemspec','3e467cfce562a0d7aef8f35083aceb9e41f9dce83dc0d4010422aee8dbc2a9d2');\nhashMap.set('git-submodules','064fa55369f11feec61b699cb122df6ea81f8e0c09ea9f7dbb96796c87be6950');\nhashMap.set('github-actions','a287f0081e4b18c68209b0e90762496839088522caf662aaf064b0fb945e139c');\nhashMap.set('gitlabci','abc2a8a14a514d3c03eeca1fb67bb374931997b4221bc75733b81eb9a78018e5');\nhashMap.set('gitlabci-include','8860a15ab516fde00694f9bd9bf56fce4addafe5a55b5ddb9a4ec477d301d351');\nhashMap.set('glasskube','93e7b9000a17efa15a1abaaf320b5af9169b1ecd828fc0c881d98570ef9d9e30');\nhashMap.set('gleam','5e9b9f5f914afe5ed7b526c06c65111e3716d2dea9b0cbe7907bbc96db1064a3');\nhashMap.set('gomod','8b24033ac7fb1ef08c5fd4469854bef33064007b4aed6519ad09bd0d050048a2');\nhashMap.set('gradle','14ffeecba62452d47d3796e68753da745de2614b6e5ecc346da4f0067ed4bc6e');\nhashMap.set('gradle-wrapper','73ba30c34955fab7737454b5cff9aca6d1b5607d53c17c9e13d8ad96f6eaae87');\nhashMap.set('haskell-cabal','f158b7725e3143dfd2950e3de0bbccc2a61cd7eba87f7a54c5057e01252348e2');\nhashMap.set('helm-requirements','22f61344565f87ca3512c0ba8fac32627fde8ee919b7badae07b2116e285f049');\nhashMap.set('helm-values','0aa79bb0257d0d72e54dfd2653e59bfef63b97e46c035b7443593bdf6e6382aa');\nhashMap.set('helmfile','cb5377e2440515a79815f7a2833eb8510fbde2a454822bbb159e33ee027793fd');\nhashMap.set('helmsman','951deeb3355da751ef39c9e932b26ea749450e32e75759e4b5fc29359e100b37');\nhashMap.set('helmv3','927798e082caf46a0da703389ba07e9e61fa73ef571ab551301b8fc6b06957d1');\nhashMap.set('hermit','abf066a64be5e5112e4da68896cf14583691e817d8bf2fc5ec65aebcc0fde53b');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','dffe954a4e18c2dc4bfdaa12222fe8ddc3395869afd5afa603fc2b6264747984');\nhashMap.set('html','81fa6c2bf2b868596584a48b949645207a2aa3081951ed99183ee50b70b77d5f');\nhashMap.set('jenkins','7fda0e7e0f3d5e18088ccb3594f727f4cfc48b064706bdaaf1a0a075b6a2cff5');\nhashMap.set('jsonnet-bundler','4cedeb0394e5c38361d1868ff45b4f34747ab8c492378b6e63dcaf1f4f3c024d');\nhashMap.set('julia','1e8237ab435ea7acc9b8f3402385cd0a74f6c8f256d380b1ca4e8785cce6de8e');\nhashMap.set('kotlin-script','95ebc844c040ca047321b207d525220e29774a2a1fe06f9639e8353c66908564');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','11b17044d29321b3b0ad8cee40ba00cd3297b9e94648556211043f1e8635c8e7');\nhashMap.set('leiningen','c8397e376f1717c2f771ae9ea3ba6b720d2422b133cf937e762c44e42be146a2');\nhashMap.set('maven','c110b99291c2a5bc82cf7a69330275e9bbd7dc8ba3e9e987611dfcffbe002d8d');\nhashMap.set('maven-wrapper','f9df7bfca0f8ffc2eff230aec09a53c8ae3e4012ac499a38622b31df203f047a');\nhashMap.set('meteor','4636a47ba4dcfff19fe662572ef7a40d17146be3c966e00ef437e1fc8de92776');\nhashMap.set('mint','248fe4f1ea5c985921c286785792c97e06fc41f402b2d45df82f6aecd17f710e');\nhashMap.set('mise','432f3cd80b9fd3f76b2af73db5e96508edda102a0d7eb3265af232f07b8e8f21');\nhashMap.set('mix','0f79163dc2a1c896599d152be635c23beaf16812ae3d8fbfffec98c7bd0de872');\nhashMap.set('nix','422242f1714be6972fc7006c37f4a497dbbd44ba9c3f68f7b73e7dd3d81fd74d');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','fd79695a5c7fb5e134308c5f4048c1376c3f3dc3d82c7d22e116445d4d7d321b');\nhashMap.set('nuget','fb02247c67a198ffe414a44d23c7894bd114dcc53803334f82e39479e7b27f6f');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','d6567a733ef3983112b46fdccd7ceebfcd48411104e0c6b6e714d4310db48024');\nhashMap.set('paket','0cf8ff9b040ecf28f29b23bbe2ab2544ab3c94822bc1fb53ee4df7b74f000dea');\nhashMap.set('pep621','702b061ee6ffbadc9a163f3d9d0dd043a1142f1c733e9222535dd2a2b7132e77');\nhashMap.set('pep723','77022a0eae6a3cbb74a1e6d596db1276e379768e40448192b3fa81edd14ca73f');\nhashMap.set('pip-compile','a98dc76a002e1dc21662237f009ff8fea36236bb4e24cb82ee30c6a78f57271f');\nhashMap.set('pip_requirements','bf3a407f72abf711230247bef94ba5dc84c08a35107b0f017912fad66afa716a');\nhashMap.set('pip_setup','df18fba2bdcf48f3ca12a8f7e5cd28df31e2368d5528127277038ef4206eca79');\nhashMap.set('pipenv','9b8ac4f9432f2789f60847c80582966d5ed4f735d2f678c82416d0eb9548b4fa');\nhashMap.set('pixi','e31c397982ffa34222b061f23f3b3683f42523dd5dca45ecce2448b0ebc55ea2');\nhashMap.set('poetry','d63bb076c87f6bad104b8f5278fc9c3952b7425191481b02c54446da90f16705');\nhashMap.set('pre-commit','760f2c291ae084db889f722390798a0e2d431ccdc3bc676e73b14901ebea19ac');\nhashMap.set('proto','412053d4550026b4ace490b46e970915b87ec1abf0b0a0c6c8c58ccf1fc16843');\nhashMap.set('pub','8e7c65dfd1999de4f7c44392e949a4d8f4701eb86df59d550e4657feb06b1872');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','40927b98dd2bac45dba60e66b5fd0e6b84b61d02db8be536fda7b14546a4feb7');\nhashMap.set('renovate-config','890cabf707d01b58394e0bec05e3a29b73de8f0b43fcbe8a42cd26e328608d70');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('rust-toolchain','f30a8688f7cc19a6233d6efee51e942f32030d77a12c5d3201c67e3686de4936');\nhashMap.set('sbt','e1eb5c7f0171a9bb1b6bd4a36a91039a31b6c84e0983d91d930be31a69506d9e');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','4a3a7c812d34739c07685691e7e64c7d3127f9d7d4aff99dc45a25df97ed9745');\nhashMap.set('smithy','9641b91d065ffb63be0dd888139a0402dba41e550f8b44c592db9daf52109100');\nhashMap.set('sveltos','60dd75bb53ace31217211100d622fdb65068c6162758b6ae7103a6ce8bdc9f90');\nhashMap.set('swift','48cdb72ce0a5f3239a741a87982769ac622d6071edae18e3e55641402ca1f170');\nhashMap.set('tekton','33948f5bdf7553909fa63744adb26da97ddf366e9499bccab1250879570267c9');\nhashMap.set('terraform','6788a8569ba9c50c763ffa2bed952a4314ae8e696c29f93d3eb7c4a12d99ce20');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','300f8fb3c09667654412d2f5dd8ab4882e0f5d1d7a8bc39794993d2e7e58d1b7');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','f423bfa2b42a2bfc0e38a33ebd4f9d452473e7ed4e7ad6384a99eb9a35d97479');\nhashMap.set('travis','f3e2f38e699c390b00ff481be5e91dceaa81609e93caf9a4214933de759c84fc');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','30774cd456c443be2cd236fd5b8cd1cb821f1437c6309842e34960832df3557f');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('xcodegen','dad511d88a9ce1dbdde8b9731f3da7f2bdaa4ca8a083294ee58d56da62ab1683');\nhashMap.set('jsonata','f2b92bf8afd6e23f68d47fc830f79529522a93e1ee5fb3f7594c7ce956f291f1');\nhashMap.set('regex','273c1965c363bb4d8488cc11ac7c1400280f93d75e66e3c3f1d0a45ec65f6419');"],"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','a52394a36ac5517f7330473c31d93aa05b2ce607c5e951b48f25a4693cd20a81');\nhashMap.set('ansible-galaxy','8e11293c8f61b4cbae77a3b1634a47213031c59df2c9833d89db65bf4e6edc64');\nhashMap.set('ant','2df5943cf0ed19a21b94df13729dbb925655548130caf37e3e22bebaed518e17');\nhashMap.set('apm','559aca1db5b117b162962fe817db5550f1b17793b02b45982394ea2458e421f7');\nhashMap.set('argocd','cff9cd22257bc460ae4b9936570bf0ed5585f280a55d26629deaeeb0bfee8eb5');\nhashMap.set('asdf','430eb99b58171700c8a59c78b9e648575e9b176b781d90dd10a710f7b69015bb');\nhashMap.set('azure-pipelines','04a13dec4e08ba21004961c718072fde976226d65809fa3c838bf66ba93e5d5a');\nhashMap.set('batect','375d39b432013bedb1330cf40a2199dd822751b28578214f219e7bab98594b8d');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','4d4f1d9a6519ba552b316b396db13ff0654a2663d8ed976188899a2d57d306a2');\nhashMap.set('bazel-module','9fbba0339f9f7785d52ab85c5f0f6385003093c063483c13feccba13ae438bef');\nhashMap.set('bazelisk','770f75a746dc6ba90c518788d5987d7df4243ef9eee122d1bb0556a93d6e1b11');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','b8b404f53cd5d61c39153fddf93945e621471c4ac6aa9960c881cd868922bb4c');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','85f389e291218c49c1c0400ba4c6c9ff7532a6b098e9a37b872fd26569c02fc0');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','0554277f0c9edfc12a8ba2aefdb74c890e274dabce1cbdb1383990063ddc510b');\nhashMap.set('cake','9ebd8b481220b30a8860121d26184540a1a2fcc05ef780df9295dea39b386fad');\nhashMap.set('cargo','d2523cc0d0cf59d2e90c377bab1ba88d708efadb1745a20d87c346f362bf195a');\nhashMap.set('cdnurl','9a81c8e3c6ad6c788498c99fc1067ffdfcd92a427c3afaf8c0130975d83131f2');\nhashMap.set('circleci','91cbeb33ea20f9838e2c81a1195eb806f0b38fa282bc3679f62552f20575ca85');\nhashMap.set('cloudbuild','f4e40388944652c8a19f8518771ac8d3f3c4ccf81ddef0e68b463aca833cb73c');\nhashMap.set('cocoapods','f832e2beef885bb3fd697ed9bb3e8cd742926bfec37ff41212edd2dbb4edb3ba');\nhashMap.set('composer','bbca094a652544845c147bd801b04ce4aae3719cb27acfb68b2ebac616940538');\nhashMap.set('conan','03cdeeffe4e688fb403766100cc1fc617dd388629f1c769ba54a966db3b23414');\nhashMap.set('copier','a0678cc1eec36301328780966eec215c6e18748ea80c98873c8e13291a684cfa');\nhashMap.set('cpanfile','07813fec3f3c2197056500e9266a0553b9774c02f2c74d5ca2e213188c7c12d3');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deno','3dfe9b92c437010925c07b10e84cf69656de399f4032fb6db59480ce0fc08f27');\nhashMap.set('deps-edn','06783dbc8b9c7bb84e162d1f75b7db56dfa021cc6f809dfd2314cee8b64af08d');\nhashMap.set('devbox','a40050cc61bd9b5d500ec111abb17bb15d5f82ab5b7699f66f628307ba8382c9');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','fba87b82cb0f2bfd66526631fbe928b8153e7ca701a5790d02b944df17417bb9');\nhashMap.set('dockerfile','b5faeb8f31d238e0d05a4aeebf9a837273687908ab8078b34e738bb0e369c80c');\nhashMap.set('droneci','661d2a2d7295af8dd7a1234c7090c42a89306bd574c3adf1fc67782efaad3998');\nhashMap.set('fleet','ffa222820f72c4eb4cdc4c229ae8c50433bee96f3b974f0633d5a7d1f6427c97');\nhashMap.set('flux','f881de9cb1b09788f78a3de7c7bbfd8407f88a4af49a39b99f4f91634584249f');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('gemspec','3e467cfce562a0d7aef8f35083aceb9e41f9dce83dc0d4010422aee8dbc2a9d2');\nhashMap.set('git-submodules','064fa55369f11feec61b699cb122df6ea81f8e0c09ea9f7dbb96796c87be6950');\nhashMap.set('github-actions','a287f0081e4b18c68209b0e90762496839088522caf662aaf064b0fb945e139c');\nhashMap.set('gitlabci','abc2a8a14a514d3c03eeca1fb67bb374931997b4221bc75733b81eb9a78018e5');\nhashMap.set('gitlabci-include','8860a15ab516fde00694f9bd9bf56fce4addafe5a55b5ddb9a4ec477d301d351');\nhashMap.set('glasskube','93e7b9000a17efa15a1abaaf320b5af9169b1ecd828fc0c881d98570ef9d9e30');\nhashMap.set('gleam','5e9b9f5f914afe5ed7b526c06c65111e3716d2dea9b0cbe7907bbc96db1064a3');\nhashMap.set('gomod','8b24033ac7fb1ef08c5fd4469854bef33064007b4aed6519ad09bd0d050048a2');\nhashMap.set('gradle','14ffeecba62452d47d3796e68753da745de2614b6e5ecc346da4f0067ed4bc6e');\nhashMap.set('gradle-wrapper','73ba30c34955fab7737454b5cff9aca6d1b5607d53c17c9e13d8ad96f6eaae87');\nhashMap.set('haskell-cabal','f158b7725e3143dfd2950e3de0bbccc2a61cd7eba87f7a54c5057e01252348e2');\nhashMap.set('helm-requirements','22f61344565f87ca3512c0ba8fac32627fde8ee919b7badae07b2116e285f049');\nhashMap.set('helm-values','0aa79bb0257d0d72e54dfd2653e59bfef63b97e46c035b7443593bdf6e6382aa');\nhashMap.set('helmfile','cb5377e2440515a79815f7a2833eb8510fbde2a454822bbb159e33ee027793fd');\nhashMap.set('helmsman','951deeb3355da751ef39c9e932b26ea749450e32e75759e4b5fc29359e100b37');\nhashMap.set('helmv3','927798e082caf46a0da703389ba07e9e61fa73ef571ab551301b8fc6b06957d1');\nhashMap.set('hermit','abf066a64be5e5112e4da68896cf14583691e817d8bf2fc5ec65aebcc0fde53b');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','dffe954a4e18c2dc4bfdaa12222fe8ddc3395869afd5afa603fc2b6264747984');\nhashMap.set('html','81fa6c2bf2b868596584a48b949645207a2aa3081951ed99183ee50b70b77d5f');\nhashMap.set('jenkins','7fda0e7e0f3d5e18088ccb3594f727f4cfc48b064706bdaaf1a0a075b6a2cff5');\nhashMap.set('jsonnet-bundler','4cedeb0394e5c38361d1868ff45b4f34747ab8c492378b6e63dcaf1f4f3c024d');\nhashMap.set('julia','1e8237ab435ea7acc9b8f3402385cd0a74f6c8f256d380b1ca4e8785cce6de8e');\nhashMap.set('kotlin-script','95ebc844c040ca047321b207d525220e29774a2a1fe06f9639e8353c66908564');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','11b17044d29321b3b0ad8cee40ba00cd3297b9e94648556211043f1e8635c8e7');\nhashMap.set('leiningen','c8397e376f1717c2f771ae9ea3ba6b720d2422b133cf937e762c44e42be146a2');\nhashMap.set('maven','c110b99291c2a5bc82cf7a69330275e9bbd7dc8ba3e9e987611dfcffbe002d8d');\nhashMap.set('maven-wrapper','f9df7bfca0f8ffc2eff230aec09a53c8ae3e4012ac499a38622b31df203f047a');\nhashMap.set('meteor','4636a47ba4dcfff19fe662572ef7a40d17146be3c966e00ef437e1fc8de92776');\nhashMap.set('mint','248fe4f1ea5c985921c286785792c97e06fc41f402b2d45df82f6aecd17f710e');\nhashMap.set('mise','432f3cd80b9fd3f76b2af73db5e96508edda102a0d7eb3265af232f07b8e8f21');\nhashMap.set('mix','0f79163dc2a1c896599d152be635c23beaf16812ae3d8fbfffec98c7bd0de872');\nhashMap.set('nix','422242f1714be6972fc7006c37f4a497dbbd44ba9c3f68f7b73e7dd3d81fd74d');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','c1fd6b7e4f3bcd21ddf141a9aabb5f648c79888bcee6f8807d2c04ee4cd676d3');\nhashMap.set('nuget','fb02247c67a198ffe414a44d23c7894bd114dcc53803334f82e39479e7b27f6f');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','d6567a733ef3983112b46fdccd7ceebfcd48411104e0c6b6e714d4310db48024');\nhashMap.set('paket','0cf8ff9b040ecf28f29b23bbe2ab2544ab3c94822bc1fb53ee4df7b74f000dea');\nhashMap.set('pep621','702b061ee6ffbadc9a163f3d9d0dd043a1142f1c733e9222535dd2a2b7132e77');\nhashMap.set('pep723','77022a0eae6a3cbb74a1e6d596db1276e379768e40448192b3fa81edd14ca73f');\nhashMap.set('pip-compile','a98dc76a002e1dc21662237f009ff8fea36236bb4e24cb82ee30c6a78f57271f');\nhashMap.set('pip_requirements','bf3a407f72abf711230247bef94ba5dc84c08a35107b0f017912fad66afa716a');\nhashMap.set('pip_setup','df18fba2bdcf48f3ca12a8f7e5cd28df31e2368d5528127277038ef4206eca79');\nhashMap.set('pipenv','9b8ac4f9432f2789f60847c80582966d5ed4f735d2f678c82416d0eb9548b4fa');\nhashMap.set('pixi','e31c397982ffa34222b061f23f3b3683f42523dd5dca45ecce2448b0ebc55ea2');\nhashMap.set('poetry','39d9dbdfe93957f830471bd65f9443b3f58629978f26664b5e07a2a31114cbe7');\nhashMap.set('pre-commit','760f2c291ae084db889f722390798a0e2d431ccdc3bc676e73b14901ebea19ac');\nhashMap.set('proto','412053d4550026b4ace490b46e970915b87ec1abf0b0a0c6c8c58ccf1fc16843');\nhashMap.set('pub','8e7c65dfd1999de4f7c44392e949a4d8f4701eb86df59d550e4657feb06b1872');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','40927b98dd2bac45dba60e66b5fd0e6b84b61d02db8be536fda7b14546a4feb7');\nhashMap.set('renovate-config','890cabf707d01b58394e0bec05e3a29b73de8f0b43fcbe8a42cd26e328608d70');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('rust-toolchain','f30a8688f7cc19a6233d6efee51e942f32030d77a12c5d3201c67e3686de4936');\nhashMap.set('sbt','e1eb5c7f0171a9bb1b6bd4a36a91039a31b6c84e0983d91d930be31a69506d9e');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','4a3a7c812d34739c07685691e7e64c7d3127f9d7d4aff99dc45a25df97ed9745');\nhashMap.set('smithy','9641b91d065ffb63be0dd888139a0402dba41e550f8b44c592db9daf52109100');\nhashMap.set('sveltos','60dd75bb53ace31217211100d622fdb65068c6162758b6ae7103a6ce8bdc9f90');\nhashMap.set('swift','48cdb72ce0a5f3239a741a87982769ac622d6071edae18e3e55641402ca1f170');\nhashMap.set('tekton','33948f5bdf7553909fa63744adb26da97ddf366e9499bccab1250879570267c9');\nhashMap.set('terraform','6788a8569ba9c50c763ffa2bed952a4314ae8e696c29f93d3eb7c4a12d99ce20');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','300f8fb3c09667654412d2f5dd8ab4882e0f5d1d7a8bc39794993d2e7e58d1b7');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','f423bfa2b42a2bfc0e38a33ebd4f9d452473e7ed4e7ad6384a99eb9a35d97479');\nhashMap.set('travis','f3e2f38e699c390b00ff481be5e91dceaa81609e93caf9a4214933de759c84fc');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','30774cd456c443be2cd236fd5b8cd1cb821f1437c6309842e34960832df3557f');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('xcodegen','dad511d88a9ce1dbdde8b9731f3da7f2bdaa4ca8a083294ee58d56da62ab1683');\nhashMap.set('jsonata','f2b92bf8afd6e23f68d47fc830f79529522a93e1ee5fb3f7594c7ce956f291f1');\nhashMap.set('regex','273c1965c363bb4d8488cc11ac7c1400280f93d75e66e3c3f1d0a45ec65f6419');"],"mappings":"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"}
@@ -4,6 +4,8 @@ const PNPM_STORE_DIR = `${PNPM_CACHE_BASE_DIR}/store`;
4
4
  const PNPM_CACHE_DIR = `${PNPM_CACHE_BASE_DIR}/cache`;
5
5
  const YARN_CACHE_DIR = "yarn";
6
6
  const YARN_GLOBAL_DIR = "berry";
7
- export { PNPM_CACHE_BASE_DIR, PNPM_CACHE_DIR, PNPM_STORE_DIR, YARN_CACHE_DIR, YARN_GLOBAL_DIR };
7
+ const MINUTE_MS = 6e4;
8
+ const DAY_MS = 1440 * MINUTE_MS;
9
+ export { DAY_MS, MINUTE_MS, PNPM_CACHE_BASE_DIR, PNPM_CACHE_DIR, PNPM_STORE_DIR, YARN_CACHE_DIR, YARN_GLOBAL_DIR };
8
10
 
9
11
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":[],"sources":["../../../../lib/modules/manager/npm/constants.ts"],"sourcesContent":["export const NPM_CACHE_DIR = 'npm';\nexport const PNPM_CACHE_BASE_DIR = 'pnpm';\nexport const PNPM_STORE_DIR = `${PNPM_CACHE_BASE_DIR}/store`;\nexport const PNPM_CACHE_DIR = `${PNPM_CACHE_BASE_DIR}/cache`;\nexport const YARN_CACHE_DIR = 'yarn';\nexport const YARN_GLOBAL_DIR = 'berry';\n"],"mappings":";AACA,MAAa,sBAAsB;AACnC,MAAa,iBAAiB,GAAG,oBAAoB;AACrD,MAAa,iBAAiB,GAAG,oBAAoB;AACrD,MAAa,iBAAiB;AAC9B,MAAa,kBAAkB"}
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../../../../lib/modules/manager/npm/constants.ts"],"sourcesContent":["export const NPM_CACHE_DIR = 'npm';\nexport const PNPM_CACHE_BASE_DIR = 'pnpm';\nexport const PNPM_STORE_DIR = `${PNPM_CACHE_BASE_DIR}/store`;\nexport const PNPM_CACHE_DIR = `${PNPM_CACHE_BASE_DIR}/cache`;\nexport const YARN_CACHE_DIR = 'yarn';\nexport const YARN_GLOBAL_DIR = 'berry';\n\nexport const MINUTE_MS = 60 * 1000;\nexport const DAY_MS = 24 * 60 * MINUTE_MS;\n"],"mappings":";AACA,MAAa,sBAAsB;AACnC,MAAa,iBAAiB,GAAG,oBAAoB;AACrD,MAAa,iBAAiB,GAAG,oBAAoB;AACrD,MAAa,iBAAiB;AAC9B,MAAa,kBAAkB;AAE/B,MAAa,YAAY;AACzB,MAAa,SAAS,OAAU"}
@@ -159,7 +159,7 @@ async function extractAllPackageFiles(config, packageFiles) {
159
159
  }
160
160
  } else logger.debug({ packageFile }, `No content found`);
161
161
  }
162
- await postExtract(npmFiles);
162
+ await postExtract(npmFiles, config);
163
163
  return npmFiles;
164
164
  }
165
165
  export { extractAllPackageFiles, extractPackageFile };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../lib/modules/manager/npm/extract/index.ts"],"sourcesContent":["import {\n isArray,\n isNonEmptyStringAndNotWhitespace,\n isString,\n} from '@sindresorhus/is';\nimport upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport {\n findLocalSiblingOrParent,\n getSiblingFileName,\n readLocalFile,\n} from '../../../../util/fs/index.ts';\nimport { NpmDatasource } from '../../../datasource/npm/index.ts';\n\nimport type {\n ExtractConfig,\n NpmrcPackageFile,\n NpmrcPackageFileContent,\n} from '../../types.ts';\nimport { resolveNpmrc } from '../npmrc.ts';\nimport { PnpmWorkspaceFile, type YarnConfig } from '../schema.ts';\nimport type { NpmLockFiles, NpmManagerData } from '../types.ts';\nimport { getExtractedConstraints } from './common/dependency.ts';\nimport {\n extractPackageJson,\n hasDevEnginesPackageManager,\n hasPackageManager,\n} from './common/package-file.ts';\nimport {\n applyPnpmWorkspaceRegistries,\n extractPnpmWorkspaceFile,\n} from './pnpm.ts';\nimport { postExtract } from './post/index.ts';\nimport type { NpmPackage } from './types.ts';\nimport { extractYarnCatalogs, isZeroInstall } from './yarn.ts';\nimport {\n loadConfigFromLegacyYarnrc,\n loadConfigFromYarnrcYml,\n resolveRegistryUrl,\n} from './yarnrc.ts';\n\nfunction hasMultipleLockFiles(lockFiles: NpmLockFiles): boolean {\n return Object.values(lockFiles).filter(isString).length > 1;\n}\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n config: ExtractConfig,\n): Promise<NpmrcPackageFileContent<NpmManagerData> | null> {\n logger.trace(`npm.extractPackageFile(${packageFile})`);\n logger.trace({ content });\n let packageJson: NpmPackage;\n try {\n packageJson = JSON.parse(content);\n } catch {\n logger.debug({ packageFile }, `Invalid JSON`);\n return null;\n }\n\n const res = extractPackageJson(packageJson, packageFile);\n if (!res) {\n return null;\n }\n\n let workspacesPackages: string[] | undefined;\n if (isArray(packageJson.workspaces)) {\n workspacesPackages = packageJson.workspaces;\n } else {\n workspacesPackages = packageJson.workspaces?.packages;\n }\n\n const lockFiles: NpmLockFiles = {\n yarnLock: 'yarn.lock',\n packageLock: 'package-lock.json',\n shrinkwrapJson: 'npm-shrinkwrap.json',\n pnpmLockFile: 'pnpm-lock.yaml',\n };\n\n for (const [key, val] of Object.entries(lockFiles) as [\n 'yarnLock' | 'packageLock' | 'shrinkwrapJson' | 'pnpmLockFile',\n string,\n ][]) {\n const filePath = getSiblingFileName(packageFile, val);\n if (await readLocalFile(filePath, 'utf8')) {\n lockFiles[key] = filePath;\n } else {\n lockFiles[key] = undefined;\n }\n }\n lockFiles.npmLock = lockFiles.packageLock ?? lockFiles.shrinkwrapJson;\n delete lockFiles.packageLock;\n delete lockFiles.shrinkwrapJson;\n\n if (hasMultipleLockFiles(lockFiles)) {\n logger.warn(\n 'Updating multiple npm lock files is deprecated and support will be removed in future versions.',\n );\n }\n\n const { npmrc, npmrcFileName, repoNpmrc } = await resolveNpmrc(\n packageFile,\n config,\n );\n\n const yarnrcYmlFileName = await findLocalSiblingOrParent(\n packageFile,\n '.yarnrc.yml',\n );\n let yarnZeroInstall = false;\n if (yarnrcYmlFileName) {\n yarnZeroInstall = await isZeroInstall(yarnrcYmlFileName);\n }\n\n let yarnrcConfig: YarnConfig | null = null;\n let repoYarnrcYml: string | null = null;\n if (yarnrcYmlFileName) {\n repoYarnrcYml = await readLocalFile(yarnrcYmlFileName, 'utf8');\n }\n if (isString(repoYarnrcYml) && repoYarnrcYml.trim().length > 0) {\n yarnrcConfig = loadConfigFromYarnrcYml(repoYarnrcYml);\n }\n\n const legacyYarnrcFileName = await findLocalSiblingOrParent(\n packageFile,\n '.yarnrc',\n );\n let repoLegacyYarnrc: string | null = null;\n if (legacyYarnrcFileName) {\n repoLegacyYarnrc = await readLocalFile(legacyYarnrcFileName, 'utf8');\n }\n if (isString(repoLegacyYarnrc) && repoLegacyYarnrc.trim().length > 0) {\n yarnrcConfig = loadConfigFromLegacyYarnrc(repoLegacyYarnrc);\n }\n\n let pnpmWorkspaceRegistry: string | undefined;\n let pnpmWorkspaceRegistries: Record<string, string> | undefined;\n const pnpmWorkspaceYamlFileName = await findLocalSiblingOrParent(\n packageFile,\n 'pnpm-workspace.yaml',\n );\n let repoPnpmWorkspaceYaml: string | null = null;\n if (pnpmWorkspaceYamlFileName) {\n repoPnpmWorkspaceYaml = await readLocalFile(\n pnpmWorkspaceYamlFileName,\n 'utf8',\n );\n }\n if (isNonEmptyStringAndNotWhitespace(repoPnpmWorkspaceYaml)) {\n const parsed = await PnpmWorkspaceFile.safeParseAsync(\n repoPnpmWorkspaceYaml,\n );\n if (parsed.success) {\n pnpmWorkspaceRegistry = parsed.data.registry;\n pnpmWorkspaceRegistries = parsed.data.registries;\n } else {\n logger.debug(\n { packageFile: pnpmWorkspaceYamlFileName, err: parsed.error },\n 'Failed to parse pnpm-workspace.yaml',\n );\n }\n }\n\n if (res.deps.length === 0) {\n logger.debug('Package file has no deps');\n if (!(\n !!res.managerData?.packageJsonName ||\n !!res.packageFileVersion ||\n !!npmrc ||\n workspacesPackages\n )) {\n logger.debug('Skipping file');\n return null;\n }\n }\n let skipInstalls = config.skipInstalls;\n if (skipInstalls === null) {\n const hasFancyRefs = !!res.deps.some(\n (dep) =>\n !!dep.currentValue?.startsWith('file:') ||\n !!dep.currentValue?.startsWith('npm:'),\n );\n const hasFancyRefsWithNpmLock = hasFancyRefs && !!lockFiles.npmLock;\n if (hasFancyRefsWithNpmLock || yarnZeroInstall) {\n // https://github.com/npm/cli/issues/1432\n // Explanation:\n // - npm install --package-lock-only is buggy for transitive deps in file: and npm: references\n // - So we set skipInstalls to false if file: or npm: refs are found *and* the user hasn't explicitly set the value already\n // - Also, do not skip install if Yarn zero-install is used\n logger.debug('Automatically setting skipInstalls to false');\n skipInstalls = false;\n } else {\n skipInstalls = true;\n }\n }\n\n const extractedConstraints = getExtractedConstraints(res.deps);\n\n if (yarnrcConfig) {\n for (const dep of res.deps) {\n // v8 ignore else -- TODO: add tests #40625\n if (dep.depName) {\n const registryUrlFromYarnrcConfig = resolveRegistryUrl(\n dep.packageName ?? dep.depName,\n yarnrcConfig,\n );\n if (\n registryUrlFromYarnrcConfig &&\n dep.datasource === NpmDatasource.id\n ) {\n dep.registryUrls = [registryUrlFromYarnrcConfig];\n }\n }\n }\n }\n\n // Applied after the yarnrc resolution so pnpm-workspace.yaml wins in pnpm repos\n applyPnpmWorkspaceRegistries(\n res.deps,\n pnpmWorkspaceRegistries,\n pnpmWorkspaceRegistry,\n );\n\n return {\n ...res,\n ...(isString(npmrc) && { npmrc }),\n managerData: {\n ...res.managerData,\n ...lockFiles,\n yarnZeroInstall,\n hasPackageManager:\n isNonEmptyStringAndNotWhitespace(packageJson.packageManager) ||\n hasDevEnginesPackageManager(packageJson),\n workspacesPackages,\n npmrcFileName, // store npmrc file name so we can later tell if it came from the workspace or not\n repoNpmrc, // stored instead of `npmrc` in the repository cache, from which `npmrc` is rebuilt\n },\n skipInstalls,\n extractedConstraints,\n };\n}\n\nexport async function extractAllPackageFiles(\n config: ExtractConfig,\n packageFiles: string[],\n): Promise<NpmrcPackageFile<NpmManagerData>[]> {\n const npmFiles: NpmrcPackageFile<NpmManagerData>[] = [];\n for (const packageFile of packageFiles) {\n const content = await readLocalFile(packageFile, 'utf8');\n if (content) {\n // pnpm workspace files are their own package file, defined via managerFilePatterns.\n if (packageFile.endsWith('pnpm-workspace.yaml')) {\n logger.trace(\n { packageFile },\n `Extracting as a pnpm-workspace.yaml file`,\n );\n const parsedPnpmWorkspaceYaml =\n await PnpmWorkspaceFile.safeParseAsync(content);\n if (parsedPnpmWorkspaceYaml.success) {\n logger.trace(\n { packageFile },\n `Extracting file as a pnpm workspace YAML file`,\n );\n const deps = await extractPnpmWorkspaceFile(\n parsedPnpmWorkspaceYaml.data,\n packageFile,\n );\n // v8 ignore else -- TODO: add test #40625\n if (deps) {\n npmFiles.push({\n ...deps,\n packageFile,\n });\n }\n } else {\n logger.warn(\n { packageFile, err: parsedPnpmWorkspaceYaml.error },\n `Failed to parse pnpm-workspace.yaml file`,\n );\n }\n } else {\n if (packageFile.endsWith('json')) {\n logger.trace({ packageFile }, `Extracting as a package.json file`);\n\n const deps = await extractPackageFile(content, packageFile, config);\n // v8 ignore else -- TODO: add tests #40625\n if (deps) {\n npmFiles.push({\n ...deps,\n packageFile,\n });\n }\n } else {\n logger.trace({ packageFile }, `Extracting as a .yarnrc.yml file`);\n\n const yarnConfig = loadConfigFromYarnrcYml(content);\n\n // v8 ignore else -- TODO: add tests #40625\n if (yarnConfig?.catalogs || yarnConfig?.catalog) {\n const hasPackageManagerResult = await hasPackageManager(\n upath.dirname(packageFile),\n );\n const catalogsDeps = await extractYarnCatalogs(\n { catalog: yarnConfig.catalog, catalogs: yarnConfig.catalogs },\n packageFile,\n hasPackageManagerResult,\n );\n // v8 ignore else -- TODO: add tests #40625\n if (catalogsDeps) {\n npmFiles.push({\n ...catalogsDeps,\n packageFile,\n });\n }\n }\n }\n }\n } else {\n logger.debug({ packageFile }, `No content found`);\n }\n }\n\n await postExtract(npmFiles);\n return npmFiles;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../lib/modules/manager/npm/extract/index.ts"],"sourcesContent":["import {\n isArray,\n isNonEmptyStringAndNotWhitespace,\n isString,\n} from '@sindresorhus/is';\nimport upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport {\n findLocalSiblingOrParent,\n getSiblingFileName,\n readLocalFile,\n} from '../../../../util/fs/index.ts';\nimport { NpmDatasource } from '../../../datasource/npm/index.ts';\n\nimport type {\n ExtractConfig,\n NpmrcPackageFile,\n NpmrcPackageFileContent,\n} from '../../types.ts';\nimport { resolveNpmrc } from '../npmrc.ts';\nimport { PnpmWorkspaceFile, type YarnConfig } from '../schema.ts';\nimport type { NpmLockFiles, NpmManagerData } from '../types.ts';\nimport { getExtractedConstraints } from './common/dependency.ts';\nimport {\n extractPackageJson,\n hasDevEnginesPackageManager,\n hasPackageManager,\n} from './common/package-file.ts';\nimport {\n applyPnpmWorkspaceRegistries,\n extractPnpmWorkspaceFile,\n} from './pnpm.ts';\nimport { postExtract } from './post/index.ts';\nimport type { NpmPackage } from './types.ts';\nimport { extractYarnCatalogs, isZeroInstall } from './yarn.ts';\nimport {\n loadConfigFromLegacyYarnrc,\n loadConfigFromYarnrcYml,\n resolveRegistryUrl,\n} from './yarnrc.ts';\n\nfunction hasMultipleLockFiles(lockFiles: NpmLockFiles): boolean {\n return Object.values(lockFiles).filter(isString).length > 1;\n}\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n config: ExtractConfig,\n): Promise<NpmrcPackageFileContent<NpmManagerData> | null> {\n logger.trace(`npm.extractPackageFile(${packageFile})`);\n logger.trace({ content });\n let packageJson: NpmPackage;\n try {\n packageJson = JSON.parse(content);\n } catch {\n logger.debug({ packageFile }, `Invalid JSON`);\n return null;\n }\n\n const res = extractPackageJson(packageJson, packageFile);\n if (!res) {\n return null;\n }\n\n let workspacesPackages: string[] | undefined;\n if (isArray(packageJson.workspaces)) {\n workspacesPackages = packageJson.workspaces;\n } else {\n workspacesPackages = packageJson.workspaces?.packages;\n }\n\n const lockFiles: NpmLockFiles = {\n yarnLock: 'yarn.lock',\n packageLock: 'package-lock.json',\n shrinkwrapJson: 'npm-shrinkwrap.json',\n pnpmLockFile: 'pnpm-lock.yaml',\n };\n\n for (const [key, val] of Object.entries(lockFiles) as [\n 'yarnLock' | 'packageLock' | 'shrinkwrapJson' | 'pnpmLockFile',\n string,\n ][]) {\n const filePath = getSiblingFileName(packageFile, val);\n if (await readLocalFile(filePath, 'utf8')) {\n lockFiles[key] = filePath;\n } else {\n lockFiles[key] = undefined;\n }\n }\n lockFiles.npmLock = lockFiles.packageLock ?? lockFiles.shrinkwrapJson;\n delete lockFiles.packageLock;\n delete lockFiles.shrinkwrapJson;\n\n if (hasMultipleLockFiles(lockFiles)) {\n logger.warn(\n 'Updating multiple npm lock files is deprecated and support will be removed in future versions.',\n );\n }\n\n const { npmrc, npmrcFileName, repoNpmrc } = await resolveNpmrc(\n packageFile,\n config,\n );\n\n const yarnrcYmlFileName = await findLocalSiblingOrParent(\n packageFile,\n '.yarnrc.yml',\n );\n let yarnZeroInstall = false;\n if (yarnrcYmlFileName) {\n yarnZeroInstall = await isZeroInstall(yarnrcYmlFileName);\n }\n\n let yarnrcConfig: YarnConfig | null = null;\n let repoYarnrcYml: string | null = null;\n if (yarnrcYmlFileName) {\n repoYarnrcYml = await readLocalFile(yarnrcYmlFileName, 'utf8');\n }\n if (isString(repoYarnrcYml) && repoYarnrcYml.trim().length > 0) {\n yarnrcConfig = loadConfigFromYarnrcYml(repoYarnrcYml);\n }\n\n const legacyYarnrcFileName = await findLocalSiblingOrParent(\n packageFile,\n '.yarnrc',\n );\n let repoLegacyYarnrc: string | null = null;\n if (legacyYarnrcFileName) {\n repoLegacyYarnrc = await readLocalFile(legacyYarnrcFileName, 'utf8');\n }\n if (isString(repoLegacyYarnrc) && repoLegacyYarnrc.trim().length > 0) {\n yarnrcConfig = loadConfigFromLegacyYarnrc(repoLegacyYarnrc);\n }\n\n let pnpmWorkspaceRegistry: string | undefined;\n let pnpmWorkspaceRegistries: Record<string, string> | undefined;\n const pnpmWorkspaceYamlFileName = await findLocalSiblingOrParent(\n packageFile,\n 'pnpm-workspace.yaml',\n );\n let repoPnpmWorkspaceYaml: string | null = null;\n if (pnpmWorkspaceYamlFileName) {\n repoPnpmWorkspaceYaml = await readLocalFile(\n pnpmWorkspaceYamlFileName,\n 'utf8',\n );\n }\n if (isNonEmptyStringAndNotWhitespace(repoPnpmWorkspaceYaml)) {\n const parsed = await PnpmWorkspaceFile.safeParseAsync(\n repoPnpmWorkspaceYaml,\n );\n if (parsed.success) {\n pnpmWorkspaceRegistry = parsed.data.registry;\n pnpmWorkspaceRegistries = parsed.data.registries;\n } else {\n logger.debug(\n { packageFile: pnpmWorkspaceYamlFileName, err: parsed.error },\n 'Failed to parse pnpm-workspace.yaml',\n );\n }\n }\n\n if (res.deps.length === 0) {\n logger.debug('Package file has no deps');\n if (!(\n !!res.managerData?.packageJsonName ||\n !!res.packageFileVersion ||\n !!npmrc ||\n workspacesPackages\n )) {\n logger.debug('Skipping file');\n return null;\n }\n }\n let skipInstalls = config.skipInstalls;\n if (skipInstalls === null) {\n const hasFancyRefs = !!res.deps.some(\n (dep) =>\n !!dep.currentValue?.startsWith('file:') ||\n !!dep.currentValue?.startsWith('npm:'),\n );\n const hasFancyRefsWithNpmLock = hasFancyRefs && !!lockFiles.npmLock;\n if (hasFancyRefsWithNpmLock || yarnZeroInstall) {\n // https://github.com/npm/cli/issues/1432\n // Explanation:\n // - npm install --package-lock-only is buggy for transitive deps in file: and npm: references\n // - So we set skipInstalls to false if file: or npm: refs are found *and* the user hasn't explicitly set the value already\n // - Also, do not skip install if Yarn zero-install is used\n logger.debug('Automatically setting skipInstalls to false');\n skipInstalls = false;\n } else {\n skipInstalls = true;\n }\n }\n\n const extractedConstraints = getExtractedConstraints(res.deps);\n\n if (yarnrcConfig) {\n for (const dep of res.deps) {\n // v8 ignore else -- TODO: add tests #40625\n if (dep.depName) {\n const registryUrlFromYarnrcConfig = resolveRegistryUrl(\n dep.packageName ?? dep.depName,\n yarnrcConfig,\n );\n if (\n registryUrlFromYarnrcConfig &&\n dep.datasource === NpmDatasource.id\n ) {\n dep.registryUrls = [registryUrlFromYarnrcConfig];\n }\n }\n }\n }\n\n // Applied after the yarnrc resolution so pnpm-workspace.yaml wins in pnpm repos\n applyPnpmWorkspaceRegistries(\n res.deps,\n pnpmWorkspaceRegistries,\n pnpmWorkspaceRegistry,\n );\n\n return {\n ...res,\n ...(isString(npmrc) && { npmrc }),\n managerData: {\n ...res.managerData,\n ...lockFiles,\n yarnZeroInstall,\n hasPackageManager:\n isNonEmptyStringAndNotWhitespace(packageJson.packageManager) ||\n hasDevEnginesPackageManager(packageJson),\n workspacesPackages,\n npmrcFileName, // store npmrc file name so we can later tell if it came from the workspace or not\n repoNpmrc, // stored instead of `npmrc` in the repository cache, from which `npmrc` is rebuilt\n },\n skipInstalls,\n extractedConstraints,\n };\n}\n\nexport async function extractAllPackageFiles(\n config: ExtractConfig,\n packageFiles: string[],\n): Promise<NpmrcPackageFile<NpmManagerData>[]> {\n const npmFiles: NpmrcPackageFile<NpmManagerData>[] = [];\n for (const packageFile of packageFiles) {\n const content = await readLocalFile(packageFile, 'utf8');\n if (content) {\n // pnpm workspace files are their own package file, defined via managerFilePatterns.\n if (packageFile.endsWith('pnpm-workspace.yaml')) {\n logger.trace(\n { packageFile },\n `Extracting as a pnpm-workspace.yaml file`,\n );\n const parsedPnpmWorkspaceYaml =\n await PnpmWorkspaceFile.safeParseAsync(content);\n if (parsedPnpmWorkspaceYaml.success) {\n logger.trace(\n { packageFile },\n `Extracting file as a pnpm workspace YAML file`,\n );\n const deps = await extractPnpmWorkspaceFile(\n parsedPnpmWorkspaceYaml.data,\n packageFile,\n );\n // v8 ignore else -- TODO: add test #40625\n if (deps) {\n npmFiles.push({\n ...deps,\n packageFile,\n });\n }\n } else {\n logger.warn(\n { packageFile, err: parsedPnpmWorkspaceYaml.error },\n `Failed to parse pnpm-workspace.yaml file`,\n );\n }\n } else {\n if (packageFile.endsWith('json')) {\n logger.trace({ packageFile }, `Extracting as a package.json file`);\n\n const deps = await extractPackageFile(content, packageFile, config);\n // v8 ignore else -- TODO: add tests #40625\n if (deps) {\n npmFiles.push({\n ...deps,\n packageFile,\n });\n }\n } else {\n logger.trace({ packageFile }, `Extracting as a .yarnrc.yml file`);\n\n const yarnConfig = loadConfigFromYarnrcYml(content);\n\n // v8 ignore else -- TODO: add tests #40625\n if (yarnConfig?.catalogs || yarnConfig?.catalog) {\n const hasPackageManagerResult = await hasPackageManager(\n upath.dirname(packageFile),\n );\n const catalogsDeps = await extractYarnCatalogs(\n { catalog: yarnConfig.catalog, catalogs: yarnConfig.catalogs },\n packageFile,\n hasPackageManagerResult,\n );\n // v8 ignore else -- TODO: add tests #40625\n if (catalogsDeps) {\n npmFiles.push({\n ...catalogsDeps,\n packageFile,\n });\n }\n }\n }\n }\n } else {\n logger.debug({ packageFile }, `No content found`);\n }\n }\n\n await postExtract(npmFiles, config);\n return npmFiles;\n}\n"],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { logger } from "../../../../logger/index.js";
2
+ import { coerceArray } from "../../../../util/array.js";
3
+ import { coerceObject } from "../../../../util/object.js";
4
+ import { UtcDate } from "../../../../util/schema-utils/index.js";
5
+ import { coerceString } from "../../../../util/string.js";
6
+ import { NpmDatasource } from "../../../datasource/npm/index.js";
7
+ import { NpmrcCooldown } from "../schema.js";
8
+ import { isNonEmptyString, isNumber, isNumericString } from "@sindresorhus/is";
9
+ import upath from "upath";
10
+ // lib/modules/manager/npm/extract/npmrc.ts
11
+ function parseNpmrcDays(value, lenient) {
12
+ if (lenient) return parseInt(value, 10);
13
+ return isNumericString(value) ? parseFloat(value) : NaN;
14
+ }
15
+ /**
16
+ * Parses the `before` or `min-release-age` setting of an `.npmrc`, preferring a valid `before`. With `lenient`, a `min-release-age` which starts with a whole number, like `7d`, counts as that number of days.
17
+ */
18
+ function parseNpmrcCooldown(npmrcContent, lenient = false) {
19
+ if (!npmrcContent) return null;
20
+ const parsed = NpmrcCooldown.parse(npmrcContent);
21
+ const before = parsed.before;
22
+ if (isNonEmptyString(before)) {
23
+ const date = UtcDate.safeParse(before);
24
+ if (date.success) return {
25
+ source: "before",
26
+ date: date.data
27
+ };
28
+ logger.debug(`Invalid before date in .npmrc: ${before}, ignoring`);
29
+ }
30
+ const minReleaseAge = parsed["min-release-age"];
31
+ if (isNonEmptyString(minReleaseAge)) {
32
+ const days = parseNpmrcDays(minReleaseAge, lenient);
33
+ if (Number.isFinite(days) && days >= 0) return {
34
+ source: "min-release-age",
35
+ days
36
+ };
37
+ logger.debug(`Invalid min-release-age in .npmrc: ${minReleaseAge}, ignoring`);
38
+ }
39
+ return null;
40
+ }
41
+ /**
42
+ * Parses the `minimum-release-age` setting of an `.npmrc`, in minutes, which pnpm reads before v11.
43
+ */
44
+ function parseNpmrcPnpmMinimumReleaseAge(npmrcContent) {
45
+ if (!npmrcContent) return null;
46
+ const minimumReleaseAge = NpmrcCooldown.parse(npmrcContent)["minimum-release-age"];
47
+ if (!isNonEmptyString(minimumReleaseAge)) return null;
48
+ const minutes = parseInt(minimumReleaseAge, 10);
49
+ if (isNumber(minutes) && minutes >= 0) return minutes;
50
+ logger.debug(`Invalid minimum-release-age in .npmrc: ${minimumReleaseAge}, ignoring`);
51
+ return null;
52
+ }
53
+ /**
54
+ * The minimum release age set by the `before` or `min-release-age` setting of an `.npmrc`, as a duration or as the ISO 8601 date of `before`.
55
+ */
56
+ function getNpmrcMinimumReleaseAge(npmrcContent) {
57
+ const cooldown = parseNpmrcCooldown(npmrcContent);
58
+ if (cooldown?.source === "min-release-age") return `${cooldown.days} days`;
59
+ return cooldown?.date.toISO();
60
+ }
61
+ /**
62
+ * Whether npm reads the `.npmrc` of the package file when it generates the lock file, which is the case for the `npmrc` option and for an `.npmrc` next to the lock file, or next to the package file without a lock file.
63
+ */
64
+ function isNpmrcOfLockFile({ managerData, packageFile }) {
65
+ const { npmLock, npmrcFileName } = coerceObject(managerData);
66
+ if (!npmrcFileName) return true;
67
+ const lockFileDir = upath.dirname(coerceString(npmLock ?? packageFile));
68
+ return npmrcFileName === upath.join(lockFileDir, ".npmrc");
69
+ }
70
+ /**
71
+ * Adds a `packageRules` entry with the minimum release age of the merged `.npmrc` (the `npmrc` option and the repository `.npmrc`, as used by npm at post-update) to the package files which are not managed by Yarn or pnpm.
72
+ */
73
+ function setNpmrcMinimumReleaseAge(packageFiles) {
74
+ const npmPackageFiles = packageFiles.filter(({ managerData }) => !managerData?.yarnLock && !managerData?.pnpmLockFile);
75
+ for (const packageFile of npmPackageFiles) {
76
+ const { managerData } = packageFile;
77
+ const minimumReleaseAge = getNpmrcMinimumReleaseAge(packageFile.npmrc);
78
+ if (minimumReleaseAge && !isNpmrcOfLockFile(packageFile)) {
79
+ logger.debug(`Ignoring the minimum release age in the .npmrc ${managerData?.npmrcFileName} for ${packageFile.packageFile}, as it is not next to the lock file`);
80
+ continue;
81
+ }
82
+ if (minimumReleaseAge) {
83
+ logger.debug(`Found minimum release age ${minimumReleaseAge} in the .npmrc ${managerData?.npmrcFileName ?? "(config)"} for ${packageFile.packageFile}`);
84
+ packageFile.packageRules = [...coerceArray(packageFile.packageRules), {
85
+ matchDatasources: [NpmDatasource.id],
86
+ minimumReleaseAgeExtracted: minimumReleaseAge
87
+ }];
88
+ }
89
+ }
90
+ }
91
+ export { getNpmrcMinimumReleaseAge, isNpmrcOfLockFile, parseNpmrcCooldown, parseNpmrcPnpmMinimumReleaseAge, setNpmrcMinimumReleaseAge };
92
+
93
+ //# sourceMappingURL=npmrc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npmrc.js","names":["NpmrcCooldownSchema"],"sources":["../../../../../lib/modules/manager/npm/extract/npmrc.ts"],"sourcesContent":["import { isNonEmptyString, isNumber, isNumericString } from '@sindresorhus/is';\nimport upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport { coerceArray } from '../../../../util/array.ts';\nimport { coerceObject } from '../../../../util/object.ts';\nimport { UtcDate } from '../../../../util/schema-utils/index.ts';\nimport { coerceString } from '../../../../util/string.ts';\nimport { NpmDatasource } from '../../../datasource/npm/index.ts';\nimport type { NpmrcPackageFile } from '../../types.ts';\nimport { NpmrcCooldown as NpmrcCooldownSchema } from '../schema.ts';\nimport type { NpmManagerData } from '../types.ts';\nimport type { NpmrcCooldown } from './types.ts';\n\ninterface NpmrcLockFileConfig {\n managerData?: NpmManagerData;\n packageFile?: string;\n}\n\nfunction parseNpmrcDays(value: string, lenient: boolean): number {\n if (lenient) {\n return parseInt(value, 10);\n }\n // npm reads the setting as a number, and ignores values like `7d`\n return isNumericString(value) ? parseFloat(value) : Number.NaN;\n}\n\n/**\n * Parses the `before` or `min-release-age` setting of an `.npmrc`, preferring a valid `before`. With `lenient`, a `min-release-age` which starts with a whole number, like `7d`, counts as that number of days.\n */\nexport function parseNpmrcCooldown(\n npmrcContent: string | null | undefined,\n lenient = false,\n): NpmrcCooldown | null {\n if (!npmrcContent) {\n return null;\n }\n\n const parsed = NpmrcCooldownSchema.parse(npmrcContent);\n\n const before = parsed.before;\n if (isNonEmptyString(before)) {\n const date = UtcDate.safeParse(before);\n if (date.success) {\n return { source: 'before', date: date.data };\n }\n logger.debug(`Invalid before date in .npmrc: ${before}, ignoring`);\n }\n\n const minReleaseAge = parsed['min-release-age'];\n if (isNonEmptyString(minReleaseAge)) {\n const days = parseNpmrcDays(minReleaseAge, lenient);\n if (Number.isFinite(days) && days >= 0) {\n return { source: 'min-release-age', days };\n }\n logger.debug(\n `Invalid min-release-age in .npmrc: ${minReleaseAge}, ignoring`,\n );\n }\n\n return null;\n}\n\n/**\n * Parses the `minimum-release-age` setting of an `.npmrc`, in minutes, which pnpm reads before v11.\n */\nexport function parseNpmrcPnpmMinimumReleaseAge(\n npmrcContent: string | null | undefined,\n): number | null {\n if (!npmrcContent) {\n return null;\n }\n const minimumReleaseAge =\n NpmrcCooldownSchema.parse(npmrcContent)['minimum-release-age'];\n if (!isNonEmptyString(minimumReleaseAge)) {\n return null;\n }\n const minutes = parseInt(minimumReleaseAge, 10);\n if (isNumber(minutes) && minutes >= 0) {\n return minutes;\n }\n logger.debug(\n `Invalid minimum-release-age in .npmrc: ${minimumReleaseAge}, ignoring`,\n );\n return null;\n}\n\n/**\n * The minimum release age set by the `before` or `min-release-age` setting of an `.npmrc`, as a duration or as the ISO 8601 date of `before`.\n */\nexport function getNpmrcMinimumReleaseAge(\n npmrcContent: string | null | undefined,\n): string | undefined {\n const cooldown = parseNpmrcCooldown(npmrcContent);\n if (cooldown?.source === 'min-release-age') {\n return `${cooldown.days} days`;\n }\n // the date is kept as is, as the extract result is cached and the age grows\n // over time\n return cooldown?.date.toISO();\n}\n\n/**\n * Whether npm reads the `.npmrc` of the package file when it generates the lock file, which is the case for the `npmrc` option and for an `.npmrc` next to the lock file, or next to the package file without a lock file.\n */\nexport function isNpmrcOfLockFile({\n managerData,\n packageFile,\n}: NpmrcLockFileConfig): boolean {\n const { npmLock, npmrcFileName } = coerceObject(managerData);\n if (!npmrcFileName) {\n return true;\n }\n const lockFileDir = upath.dirname(coerceString(npmLock ?? packageFile));\n return npmrcFileName === upath.join(lockFileDir, '.npmrc');\n}\n\n/**\n * Adds a `packageRules` entry with the minimum release age of the merged `.npmrc` (the `npmrc` option and the repository `.npmrc`, as used by npm at post-update) to the package files which are not managed by Yarn or pnpm.\n */\nexport function setNpmrcMinimumReleaseAge(\n packageFiles: Partial<NpmrcPackageFile<NpmManagerData>>[],\n): void {\n const npmPackageFiles = packageFiles.filter(\n ({ managerData }) => !managerData?.yarnLock && !managerData?.pnpmLockFile,\n );\n for (const packageFile of npmPackageFiles) {\n const { managerData } = packageFile;\n const minimumReleaseAge = getNpmrcMinimumReleaseAge(packageFile.npmrc);\n if (minimumReleaseAge && !isNpmrcOfLockFile(packageFile)) {\n logger.debug(\n `Ignoring the minimum release age in the .npmrc ${managerData?.npmrcFileName} for ${packageFile.packageFile}, as it is not next to the lock file`,\n );\n continue;\n }\n if (minimumReleaseAge) {\n logger.debug(\n `Found minimum release age ${minimumReleaseAge} in the .npmrc ${managerData?.npmrcFileName ?? '(config)'} for ${packageFile.packageFile}`,\n );\n packageFile.packageRules = [\n ...coerceArray(packageFile.packageRules),\n {\n matchDatasources: [NpmDatasource.id],\n minimumReleaseAgeExtracted: minimumReleaseAge,\n },\n ];\n }\n }\n}\n"],"mappings":";;;;;;;;;;AAkBA,SAAS,eAAe,OAAe,SAA0B;CAC/D,IAAI,SACF,OAAO,SAAS,OAAO,EAAE;CAG3B,OAAO,gBAAgB,KAAK,IAAI,WAAW,KAAK,IAAI;AACtD;;;;AAKA,SAAgB,mBACd,cACA,UAAU,OACY;CACtB,IAAI,CAAC,cACH,OAAO;CAGT,MAAM,SAASA,cAAoB,MAAM,YAAY;CAErD,MAAM,SAAS,OAAO;CACtB,IAAI,iBAAiB,MAAM,GAAG;EAC5B,MAAM,OAAO,QAAQ,UAAU,MAAM;EACrC,IAAI,KAAK,SACP,OAAO;GAAE,QAAQ;GAAU,MAAM,KAAK;EAAK;EAE7C,OAAO,MAAM,kCAAkC,OAAO,WAAW;CACnE;CAEA,MAAM,gBAAgB,OAAO;CAC7B,IAAI,iBAAiB,aAAa,GAAG;EACnC,MAAM,OAAO,eAAe,eAAe,OAAO;EAClD,IAAI,OAAO,SAAS,IAAI,KAAK,QAAQ,GACnC,OAAO;GAAE,QAAQ;GAAmB;EAAK;EAE3C,OAAO,MACL,sCAAsC,cAAc,WACtD;CACF;CAEA,OAAO;AACT;;;;AAKA,SAAgB,gCACd,cACe;CACf,IAAI,CAAC,cACH,OAAO;CAET,MAAM,oBACJA,cAAoB,MAAM,YAAY,CAAC,CAAC;CAC1C,IAAI,CAAC,iBAAiB,iBAAiB,GACrC,OAAO;CAET,MAAM,UAAU,SAAS,mBAAmB,EAAE;CAC9C,IAAI,SAAS,OAAO,KAAK,WAAW,GAClC,OAAO;CAET,OAAO,MACL,0CAA0C,kBAAkB,WAC9D;CACA,OAAO;AACT;;;;AAKA,SAAgB,0BACd,cACoB;CACpB,MAAM,WAAW,mBAAmB,YAAY;CAChD,IAAI,UAAU,WAAW,mBACvB,OAAO,GAAG,SAAS,KAAK;CAI1B,OAAO,UAAU,KAAK,MAAM;AAC9B;;;;AAKA,SAAgB,kBAAkB,EAChC,aACA,eAC+B;CAC/B,MAAM,EAAE,SAAS,kBAAkB,aAAa,WAAW;CAC3D,IAAI,CAAC,eACH,OAAO;CAET,MAAM,cAAc,MAAM,QAAQ,aAAa,WAAW,WAAW,CAAC;CACtE,OAAO,kBAAkB,MAAM,KAAK,aAAa,QAAQ;AAC3D;;;;AAKA,SAAgB,0BACd,cACM;CACN,MAAM,kBAAkB,aAAa,QAClC,EAAE,kBAAkB,CAAC,aAAa,YAAY,CAAC,aAAa,YAC/D;CACA,KAAK,MAAM,eAAe,iBAAiB;EACzC,MAAM,EAAE,gBAAgB;EACxB,MAAM,oBAAoB,0BAA0B,YAAY,KAAK;EACrE,IAAI,qBAAqB,CAAC,kBAAkB,WAAW,GAAG;GACxD,OAAO,MACL,kDAAkD,aAAa,cAAc,OAAO,YAAY,YAAY,qCAC9G;GACA;EACF;EACA,IAAI,mBAAmB;GACrB,OAAO,MACL,6BAA6B,kBAAkB,iBAAiB,aAAa,iBAAiB,WAAW,OAAO,YAAY,aAC9H;GACA,YAAY,eAAe,CACzB,GAAG,YAAY,YAAY,YAAY,GACvC;IACE,kBAAkB,CAAC,cAAc,EAAE;IACnC,4BAA4B;GAC9B,CACF;EACF;CACF;AACF"}
@@ -0,0 +1,149 @@
1
+ import { logger } from "../../../../logger/index.js";
2
+ import { coerceArray } from "../../../../util/array.js";
3
+ import { readLocalFile } from "../../../../util/fs/index.js";
4
+ import { coerceObject } from "../../../../util/object.js";
5
+ import { regEx } from "../../../../util/regex.js";
6
+ import { matchRegexOrGlobList } from "../../../../util/string-match.js";
7
+ import { NpmDatasource } from "../../../datasource/npm/index.js";
8
+ import { intersectsWith, isSubsetOf } from "../../../versioning/common.js";
9
+ import { api } from "../../../versioning/npm/index.js";
10
+ import { PnpmWorkspaceMinimumReleaseAge, PnpmWorkspaceMinimumReleaseAgeSettings } from "../schema.js";
11
+ import { parseNpmrcPnpmMinimumReleaseAge } from "./npmrc.js";
12
+ import { resolvePnpmConstraint } from "./pnpm.js";
13
+ import { groupByLockFile } from "./utils.js";
14
+ import { isNonEmptyArray, isNonEmptyString, isNumber } from "@sindresorhus/is";
15
+ import upath from "upath";
16
+ import semver from "semver";
17
+ // lib/modules/manager/npm/extract/pnpm-minimum-release-age.ts
18
+ const pnpmNpmrcMinimumReleaseAgeRange = "<11.0.0";
19
+ const pnpmDefaultMinimumReleaseAgeRange = ">=11.0.0";
20
+ const pnpmDefaultMinimumReleaseAgeMinutes = 1440;
21
+ /**
22
+ * Reads the minimum release age settings of the `pnpm-workspace.yaml` next to a pnpm lock file, with `minimumReleaseAge` in minutes.
23
+ */
24
+ async function readPnpmWorkspaceMinimumReleaseAge(pnpmLockFile) {
25
+ const workspaceFile = upath.join(upath.dirname(pnpmLockFile), "pnpm-workspace.yaml");
26
+ const content = await readLocalFile(workspaceFile, "utf8");
27
+ if (!content) return {};
28
+ const parsed = PnpmWorkspaceMinimumReleaseAge.safeParse(content);
29
+ if (!parsed.success) {
30
+ logger.debug({
31
+ workspaceFile,
32
+ err: parsed.error
33
+ }, "Failed to parse the minimum release age of pnpm-workspace.yaml");
34
+ return {};
35
+ }
36
+ return parsed.data;
37
+ }
38
+ /**
39
+ * Returns the minimum release age settings of the parsed content of a `pnpm-workspace.yaml`, or none if it is no mapping.
40
+ */
41
+ function getPnpmWorkspaceMinimumReleaseAge(workspace) {
42
+ return coerceObject(PnpmWorkspaceMinimumReleaseAgeSettings.safeParse(workspace).data);
43
+ }
44
+ /**
45
+ * Returns the `minimumReleaseAge` in minutes which pnpm configures itself: the `pnpm-workspace.yaml` value, else `npmrcMinutes` if every allowed pnpm version is older than v11. With `lenient`, `npmrcMinutes` also counts if the pnpm version may be older than v11 or is unknown, and else the pnpm default if every allowed pnpm version is v11 or later.
46
+ */
47
+ function getPnpmMinimumReleaseAgeMinutes(workspace, npmrcMinutes, pnpmConstraint, lenient = false) {
48
+ if (workspace.minimumReleaseAge !== void 0) return workspace.minimumReleaseAge;
49
+ if (isNumber(npmrcMinutes) && readsNpmrc(pnpmConstraint, lenient)) return npmrcMinutes;
50
+ if (lenient && isSubsetOf(api, pnpmConstraint, ">=11.0.0")) return pnpmDefaultMinimumReleaseAgeMinutes;
51
+ }
52
+ /**
53
+ * Whether every pnpm version of `pnpmConstraint` reads `minimum-release-age` from the `.npmrc`, or with `lenient` whether one may or the version is unknown.
54
+ */
55
+ function readsNpmrc(pnpmConstraint, lenient) {
56
+ if (!lenient) return isSubsetOf(api, pnpmConstraint, pnpmNpmrcMinimumReleaseAgeRange);
57
+ return !(isNonEmptyString(pnpmConstraint) && api.isValid(pnpmConstraint)) || intersectsWith(api, pnpmConstraint, "<11.0.0");
58
+ }
59
+ const plainPackageNameRegex = regEx(/^[\w./@~-]+$/);
60
+ const regexSpecialCharacterRegex = regEx(/[.*+?^${}()|[\]\\]/g);
61
+ /**
62
+ * Translates a pnpm package name pattern, where `*` also matches `/`, `?` matches one character and a leading `!` negates the pattern, to a `matchPackageNames` name or regex, or returns `null` for a pattern which matches no package.
63
+ */
64
+ function toMatchPackageNamesPattern(pattern) {
65
+ const negated = pattern.startsWith("!");
66
+ const body = negated ? pattern.slice(1) : pattern;
67
+ const prefix = negated ? "!" : "";
68
+ if (body === "*") return negated ? null : "*";
69
+ if (plainPackageNameRegex.test(body)) return `${prefix}${body}`;
70
+ return `${prefix}/^${body.replace(regexSpecialCharacterRegex, "\\$&").replaceAll("\\*", ".*").replaceAll("\\?", ".")}$/`;
71
+ }
72
+ /**
73
+ * Parses the `minimumReleaseAgeExclude` entries of a `pnpm-workspace.yaml` like pnpm, which accepts a package name or name pattern, or a package name with a union of exact versions like `foo@1.0.0 || 2.0.0`.
74
+ */
75
+ function parsePnpmMinimumReleaseAgeExclude(entries) {
76
+ const result = {
77
+ packageNames: [],
78
+ versions: []
79
+ };
80
+ for (const entry of coerceArray(entries)) {
81
+ const atIndex = entry.indexOf("@", entry.startsWith("@") ? 1 : 0);
82
+ const name = atIndex === -1 ? entry : entry.slice(0, atIndex);
83
+ const packageName = toMatchPackageNamesPattern(name);
84
+ if (!packageName) {
85
+ logger.debug(`minimumReleaseAgeExclude entry ${entry} matches no package, ignoring`);
86
+ continue;
87
+ }
88
+ if (atIndex === -1) {
89
+ result.packageNames.push(packageName);
90
+ continue;
91
+ }
92
+ const versions = entry.slice(atIndex + 1).split("||").map((version) => semver.valid(version));
93
+ if (!plainPackageNameRegex.test(name) || versions.includes(null)) {
94
+ logger.debug(`Invalid minimumReleaseAgeExclude entry ${entry}, ignoring`);
95
+ continue;
96
+ }
97
+ result.versions.push({
98
+ packageName,
99
+ versions
100
+ });
101
+ }
102
+ return result;
103
+ }
104
+ /**
105
+ * Whether pnpm excludes `version` of `packageName` from its minimum release age.
106
+ */
107
+ function isPnpmMinimumReleaseAgeExcluded(exclude, packageName, version) {
108
+ if (exclude.packageNames.some((pattern) => matchRegexOrGlobList(packageName, [pattern]))) return true;
109
+ return exclude.versions.some((entry) => !!version && entry.versions.includes(version) && matchRegexOrGlobList(packageName, [entry.packageName]));
110
+ }
111
+ /**
112
+ * Returns the `packageRules` for a pnpm minimum release age of npm packages, with `minimumReleaseAgeExclude` entries without exact versions lifting it for the packages they name.
113
+ */
114
+ function getPnpmMinimumReleaseAgeRules(minutes, exclude) {
115
+ return [{
116
+ matchDatasources: [NpmDatasource.id],
117
+ minimumReleaseAgeExtracted: `${minutes} minutes`
118
+ }, ...exclude.packageNames.map((packageName) => ({
119
+ matchDatasources: [NpmDatasource.id],
120
+ matchPackageNames: [packageName],
121
+ minimumReleaseAgeExtracted: null
122
+ }))];
123
+ }
124
+ /**
125
+ * Adds `packageRules` with the pnpm minimum release age to the package files of each pnpm lock file, including its `pnpm-workspace.yaml`, from the `pnpm-workspace.yaml` `minimumReleaseAge`, before pnpm v11 the `minimum-release-age` of the merged `.npmrc` (the `npmrc` option and the repository `.npmrc`), or the pnpm v11 default, and keeps the settings of the lock file in the `managerData` of each of its package files.
126
+ */
127
+ async function setPnpmMinimumReleaseAge(packageFiles, config) {
128
+ for (const { lockFile: pnpmLockFile, packageFiles: lockFilePackageFiles, root } of groupByLockFile(packageFiles, "pnpmLockFile")) {
129
+ const workspace = await readPnpmWorkspaceMinimumReleaseAge(pnpmLockFile);
130
+ const pnpmConstraint = await resolvePnpmConstraint(config, pnpmLockFile, () => root?.extractedConstraints?.pnpm);
131
+ const npmrcMinimumReleaseAge = parseNpmrcPnpmMinimumReleaseAge(root?.npmrc);
132
+ const hasMinimumReleaseAgeExclude = isNonEmptyArray(workspace.minimumReleaseAgeExclude);
133
+ for (const packageFile of lockFilePackageFiles) packageFile.managerData.pnpmMinimumReleaseAge = {
134
+ minimumReleaseAge: workspace.minimumReleaseAge,
135
+ minimumReleaseAgeStrict: workspace.minimumReleaseAgeStrict,
136
+ ...hasMinimumReleaseAgeExclude && { hasMinimumReleaseAgeExclude },
137
+ pnpmConstraint,
138
+ ...npmrcMinimumReleaseAge !== null && { npmrcMinimumReleaseAge }
139
+ };
140
+ const minutes = getPnpmMinimumReleaseAgeMinutes(workspace, npmrcMinimumReleaseAge, pnpmConstraint, true);
141
+ if (!minutes) continue;
142
+ logger.debug(`Found pnpm minimum release age of ${minutes} minutes for ${pnpmLockFile}`);
143
+ const rules = getPnpmMinimumReleaseAgeRules(minutes, parsePnpmMinimumReleaseAgeExclude(workspace.minimumReleaseAgeExclude));
144
+ for (const packageFile of lockFilePackageFiles) packageFile.packageRules = [...coerceArray(packageFile.packageRules), ...rules];
145
+ }
146
+ }
147
+ export { getPnpmMinimumReleaseAgeMinutes, getPnpmMinimumReleaseAgeRules, getPnpmWorkspaceMinimumReleaseAge, isPnpmMinimumReleaseAgeExcluded, parsePnpmMinimumReleaseAgeExclude, pnpmDefaultMinimumReleaseAgeMinutes, pnpmDefaultMinimumReleaseAgeRange, pnpmNpmrcMinimumReleaseAgeRange, readPnpmWorkspaceMinimumReleaseAge, setPnpmMinimumReleaseAge, toMatchPackageNamesPattern };
148
+
149
+ //# sourceMappingURL=pnpm-minimum-release-age.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pnpm-minimum-release-age.js","names":["npmVersioning"],"sources":["../../../../../lib/modules/manager/npm/extract/pnpm-minimum-release-age.ts"],"sourcesContent":["import { isNonEmptyArray, isNonEmptyString, isNumber } from '@sindresorhus/is';\nimport semver from 'semver';\nimport upath from 'upath';\nimport { logger } from '../../../../logger/index.ts';\nimport { coerceArray } from '../../../../util/array.ts';\nimport { readLocalFile } from '../../../../util/fs/index.ts';\nimport { coerceObject } from '../../../../util/object.ts';\nimport { regEx } from '../../../../util/regex.ts';\nimport { matchRegexOrGlobList } from '../../../../util/string-match.ts';\nimport { NpmDatasource } from '../../../datasource/npm/index.ts';\nimport { intersectsWith, isSubsetOf } from '../../../versioning/common.ts';\nimport { api as npmVersioning } from '../../../versioning/npm/index.ts';\nimport type {\n ExtractConfig,\n ExtractedPackageRule,\n NpmrcPackageFile,\n} from '../../types.ts';\nimport {\n PnpmWorkspaceMinimumReleaseAge,\n PnpmWorkspaceMinimumReleaseAgeSettings,\n} from '../schema.ts';\nimport type { NpmManagerData } from '../types.ts';\nimport { parseNpmrcPnpmMinimumReleaseAge } from './npmrc.ts';\nimport { resolvePnpmConstraint } from './pnpm.ts';\nimport type { PnpmMinimumReleaseAgeExclude } from './types.ts';\nimport { groupByLockFile } from './utils.ts';\n\n// pnpm reads only auth and registry settings from `.npmrc` since v11.0.0\n// https://github.com/pnpm/pnpm/releases/tag/v11.0.0\nexport const pnpmNpmrcMinimumReleaseAgeRange = '<11.0.0';\n\n// pnpm defaults `minimumReleaseAge` to 1 day since v11.0.0\n// https://github.com/pnpm/pnpm/releases/tag/v11.0.0\nexport const pnpmDefaultMinimumReleaseAgeRange = '>=11.0.0';\nexport const pnpmDefaultMinimumReleaseAgeMinutes = 1440;\n\n/**\n * Reads the minimum release age settings of the `pnpm-workspace.yaml` next to a pnpm lock file, with `minimumReleaseAge` in minutes.\n */\nexport async function readPnpmWorkspaceMinimumReleaseAge(\n pnpmLockFile: string,\n): Promise<PnpmWorkspaceMinimumReleaseAge> {\n const workspaceFile = upath.join(\n upath.dirname(pnpmLockFile),\n 'pnpm-workspace.yaml',\n );\n const content = await readLocalFile(workspaceFile, 'utf8');\n if (!content) {\n return {};\n }\n const parsed = PnpmWorkspaceMinimumReleaseAge.safeParse(content);\n if (!parsed.success) {\n logger.debug(\n { workspaceFile, err: parsed.error },\n 'Failed to parse the minimum release age of pnpm-workspace.yaml',\n );\n return {};\n }\n return parsed.data;\n}\n\n/**\n * Returns the minimum release age settings of the parsed content of a `pnpm-workspace.yaml`, or none if it is no mapping.\n */\nexport function getPnpmWorkspaceMinimumReleaseAge(\n workspace: unknown,\n): PnpmWorkspaceMinimumReleaseAge {\n return coerceObject(\n PnpmWorkspaceMinimumReleaseAgeSettings.safeParse(workspace).data,\n );\n}\n\n/**\n * Returns the `minimumReleaseAge` in minutes which pnpm configures itself: the `pnpm-workspace.yaml` value, else `npmrcMinutes` if every allowed pnpm version is older than v11. With `lenient`, `npmrcMinutes` also counts if the pnpm version may be older than v11 or is unknown, and else the pnpm default if every allowed pnpm version is v11 or later.\n */\nexport function getPnpmMinimumReleaseAgeMinutes(\n workspace: Pick<PnpmWorkspaceMinimumReleaseAge, 'minimumReleaseAge'>,\n npmrcMinutes: number | null | undefined,\n pnpmConstraint: string | null | undefined,\n lenient = false,\n): number | undefined {\n if (workspace.minimumReleaseAge !== undefined) {\n return workspace.minimumReleaseAge;\n }\n if (isNumber(npmrcMinutes) && readsNpmrc(pnpmConstraint, lenient)) {\n return npmrcMinutes;\n }\n if (\n lenient &&\n isSubsetOf(npmVersioning, pnpmConstraint, pnpmDefaultMinimumReleaseAgeRange)\n ) {\n return pnpmDefaultMinimumReleaseAgeMinutes;\n }\n return undefined;\n}\n\n/**\n * Whether every pnpm version of `pnpmConstraint` reads `minimum-release-age` from the `.npmrc`, or with `lenient` whether one may or the version is unknown.\n */\nfunction readsNpmrc(\n pnpmConstraint: string | null | undefined,\n lenient: boolean,\n): boolean {\n if (!lenient) {\n return isSubsetOf(\n npmVersioning,\n pnpmConstraint,\n pnpmNpmrcMinimumReleaseAgeRange,\n );\n }\n const isKnownVersion =\n isNonEmptyString(pnpmConstraint) && npmVersioning.isValid(pnpmConstraint);\n return (\n !isKnownVersion ||\n intersectsWith(\n npmVersioning,\n pnpmConstraint,\n pnpmNpmrcMinimumReleaseAgeRange,\n )\n );\n}\n\nconst plainPackageNameRegex = regEx(/^[\\w./@~-]+$/);\nconst regexSpecialCharacterRegex = regEx(/[.*+?^${}()|[\\]\\\\]/g);\n\n/**\n * Translates a pnpm package name pattern, where `*` also matches `/`, `?` matches one character and a leading `!` negates the pattern, to a `matchPackageNames` name or regex, or returns `null` for a pattern which matches no package.\n */\nexport function toMatchPackageNamesPattern(pattern: string): string | null {\n const negated = pattern.startsWith('!');\n const body = negated ? pattern.slice(1) : pattern;\n const prefix = negated ? '!' : '';\n if (body === '*') {\n return negated ? null : '*';\n }\n if (plainPackageNameRegex.test(body)) {\n return `${prefix}${body}`;\n }\n const source = body\n .replace(regexSpecialCharacterRegex, '\\\\$&')\n .replaceAll('\\\\*', '.*')\n .replaceAll('\\\\?', '.');\n return `${prefix}/^${source}$/`;\n}\n\n/**\n * Parses the `minimumReleaseAgeExclude` entries of a `pnpm-workspace.yaml` like pnpm, which accepts a package name or name pattern, or a package name with a union of exact versions like `foo@1.0.0 || 2.0.0`.\n */\nexport function parsePnpmMinimumReleaseAgeExclude(\n entries: string[] | undefined,\n): PnpmMinimumReleaseAgeExclude {\n const result: PnpmMinimumReleaseAgeExclude = {\n packageNames: [],\n versions: [],\n };\n for (const entry of coerceArray(entries)) {\n const atIndex = entry.indexOf('@', entry.startsWith('@') ? 1 : 0);\n const name = atIndex === -1 ? entry : entry.slice(0, atIndex);\n const packageName = toMatchPackageNamesPattern(name);\n if (!packageName) {\n logger.debug(\n `minimumReleaseAgeExclude entry ${entry} matches no package, ignoring`,\n );\n continue;\n }\n if (atIndex === -1) {\n result.packageNames.push(packageName);\n continue;\n }\n const versions = entry\n .slice(atIndex + 1)\n .split('||')\n .map((version) => semver.valid(version));\n // pnpm accepts exact versions only for a plain package name\n if (!plainPackageNameRegex.test(name) || versions.includes(null)) {\n logger.debug(`Invalid minimumReleaseAgeExclude entry ${entry}, ignoring`);\n continue;\n }\n result.versions.push({ packageName, versions: versions as string[] });\n }\n return result;\n}\n\n/**\n * Whether pnpm excludes `version` of `packageName` from its minimum release age.\n */\nexport function isPnpmMinimumReleaseAgeExcluded(\n exclude: PnpmMinimumReleaseAgeExclude,\n packageName: string,\n version: string | undefined,\n): boolean {\n if (\n exclude.packageNames.some((pattern) =>\n matchRegexOrGlobList(packageName, [pattern]),\n )\n ) {\n return true;\n }\n return exclude.versions.some(\n (entry) =>\n !!version &&\n entry.versions.includes(version) &&\n matchRegexOrGlobList(packageName, [entry.packageName]),\n );\n}\n\n/**\n * Returns the `packageRules` for a pnpm minimum release age of npm packages, with `minimumReleaseAgeExclude` entries without exact versions lifting it for the packages they name.\n */\nexport function getPnpmMinimumReleaseAgeRules(\n minutes: number,\n exclude: PnpmMinimumReleaseAgeExclude,\n): ExtractedPackageRule[] {\n return [\n {\n matchDatasources: [NpmDatasource.id],\n minimumReleaseAgeExtracted: `${minutes} minutes`,\n },\n ...exclude.packageNames.map((packageName) => ({\n matchDatasources: [NpmDatasource.id],\n matchPackageNames: [packageName],\n minimumReleaseAgeExtracted: null,\n })),\n ];\n}\n\n/**\n * Adds `packageRules` with the pnpm minimum release age to the package files of each pnpm lock file, including its `pnpm-workspace.yaml`, from the `pnpm-workspace.yaml` `minimumReleaseAge`, before pnpm v11 the `minimum-release-age` of the merged `.npmrc` (the `npmrc` option and the repository `.npmrc`), or the pnpm v11 default, and keeps the settings of the lock file in the `managerData` of each of its package files.\n */\nexport async function setPnpmMinimumReleaseAge(\n packageFiles: Partial<NpmrcPackageFile<NpmManagerData>>[],\n config: ExtractConfig,\n): Promise<void> {\n for (const {\n lockFile: pnpmLockFile,\n packageFiles: lockFilePackageFiles,\n root,\n } of groupByLockFile(packageFiles, 'pnpmLockFile')) {\n const workspace = await readPnpmWorkspaceMinimumReleaseAge(pnpmLockFile);\n // the pnpm-workspace.yaml has no .npmrc or pnpm constraint of its own, so\n // the root package.json sets them for every package file of the lock file\n const pnpmConstraint = await resolvePnpmConstraint(\n config,\n pnpmLockFile,\n () => root?.extractedConstraints?.pnpm,\n );\n const npmrcMinimumReleaseAge = parseNpmrcPnpmMinimumReleaseAge(root?.npmrc);\n const hasMinimumReleaseAgeExclude = isNonEmptyArray(\n workspace.minimumReleaseAgeExclude,\n );\n for (const packageFile of lockFilePackageFiles) {\n packageFile.managerData!.pnpmMinimumReleaseAge = {\n minimumReleaseAge: workspace.minimumReleaseAge,\n minimumReleaseAgeStrict: workspace.minimumReleaseAgeStrict,\n ...(hasMinimumReleaseAgeExclude && { hasMinimumReleaseAgeExclude }),\n pnpmConstraint,\n ...(npmrcMinimumReleaseAge !== null && { npmrcMinimumReleaseAge }),\n };\n }\n const minutes = getPnpmMinimumReleaseAgeMinutes(\n workspace,\n npmrcMinimumReleaseAge,\n pnpmConstraint,\n true,\n );\n if (!minutes) {\n continue;\n }\n logger.debug(\n `Found pnpm minimum release age of ${minutes} minutes for ${pnpmLockFile}`,\n );\n const rules = getPnpmMinimumReleaseAgeRules(\n minutes,\n parsePnpmMinimumReleaseAgeExclude(workspace.minimumReleaseAgeExclude),\n );\n for (const packageFile of lockFilePackageFiles) {\n packageFile.packageRules = [\n ...coerceArray(packageFile.packageRules),\n ...rules,\n ];\n }\n }\n}\n"],"mappings":"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"}