renovate 40.0.0-next.26 → 40.0.0-next.27

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 (520) hide show
  1. package/dist/config/decrypt.js +1 -1
  2. package/dist/config/decrypt.js.map +1 -1
  3. package/dist/config/migrate-validate.js +2 -2
  4. package/dist/config/migrate-validate.js.map +1 -1
  5. package/dist/config/migration.js +1 -1
  6. package/dist/config/migration.js.map +1 -1
  7. package/dist/config/options/index.js +2 -1
  8. package/dist/config/options/index.js.map +1 -1
  9. package/dist/config/presets/internal/group.js +30 -1
  10. package/dist/config/presets/internal/group.js.map +1 -1
  11. package/dist/config/presets/internal/workarounds.js +1 -0
  12. package/dist/config/presets/internal/workarounds.js.map +1 -1
  13. package/dist/config/presets/parse.js +2 -1
  14. package/dist/config/presets/parse.js.map +1 -1
  15. package/dist/config/types.d.ts +4 -1
  16. package/dist/config/types.js.map +1 -1
  17. package/dist/config/validation.js +2 -2
  18. package/dist/config/validation.js.map +1 -1
  19. package/dist/data/monorepo.json +3 -0
  20. package/dist/data/source-urls.json +1 -0
  21. package/dist/instrumentation/index.js +14 -12
  22. package/dist/instrumentation/index.js.map +1 -1
  23. package/dist/logger/index.js +1 -1
  24. package/dist/logger/index.js.map +1 -1
  25. package/dist/logger/once.js +2 -2
  26. package/dist/logger/once.js.map +1 -1
  27. package/dist/logger/renovate-logger.js +1 -1
  28. package/dist/logger/renovate-logger.js.map +1 -1
  29. package/dist/logger/utils.js +1 -1
  30. package/dist/logger/utils.js.map +1 -1
  31. package/dist/modules/datasource/api.js +2 -0
  32. package/dist/modules/datasource/api.js.map +1 -1
  33. package/dist/modules/datasource/artifactory/index.js +0 -1
  34. package/dist/modules/datasource/artifactory/index.js.map +1 -1
  35. package/dist/modules/datasource/aws-eks-addon/index.d.ts +11 -0
  36. package/dist/modules/datasource/aws-eks-addon/index.js +75 -0
  37. package/dist/modules/datasource/aws-eks-addon/index.js.map +1 -0
  38. package/dist/modules/datasource/aws-eks-addon/schema.d.ts +40 -0
  39. package/dist/modules/datasource/aws-eks-addon/schema.js +31 -0
  40. package/dist/modules/datasource/aws-eks-addon/schema.js.map +1 -0
  41. package/dist/modules/datasource/aws-machine-image/index.js +6 -5
  42. package/dist/modules/datasource/aws-machine-image/index.js.map +1 -1
  43. package/dist/modules/datasource/bazel/index.js +0 -1
  44. package/dist/modules/datasource/bazel/index.js.map +1 -1
  45. package/dist/modules/datasource/bitrise/index.js +1 -1
  46. package/dist/modules/datasource/bitrise/index.js.map +1 -1
  47. package/dist/modules/datasource/cdnjs/schema.d.ts +2 -2
  48. package/dist/modules/datasource/conda/index.js +18 -1
  49. package/dist/modules/datasource/conda/index.js.map +1 -1
  50. package/dist/modules/datasource/conda/prefix-dev.d.ts +3 -0
  51. package/dist/modules/datasource/conda/prefix-dev.js +83 -0
  52. package/dist/modules/datasource/conda/prefix-dev.js.map +1 -0
  53. package/dist/modules/datasource/conda/schema/prefix-dev.d.ts +189 -0
  54. package/dist/modules/datasource/conda/schema/prefix-dev.js +31 -0
  55. package/dist/modules/datasource/conda/schema/prefix-dev.js.map +1 -0
  56. package/dist/modules/datasource/conda/types.d.ts +1 -20
  57. package/dist/modules/datasource/conda/types.js.map +1 -1
  58. package/dist/modules/datasource/cpan/index.js +1 -1
  59. package/dist/modules/datasource/cpan/index.js.map +1 -1
  60. package/dist/modules/datasource/crate/index.js +2 -2
  61. package/dist/modules/datasource/crate/index.js.map +1 -1
  62. package/dist/modules/datasource/custom/index.js +4 -2
  63. package/dist/modules/datasource/custom/index.js.map +1 -1
  64. package/dist/modules/datasource/custom/schema.d.ts +27 -27
  65. package/dist/modules/datasource/custom/utils.js +1 -0
  66. package/dist/modules/datasource/custom/utils.js.map +1 -1
  67. package/dist/modules/datasource/dart/index.js +1 -1
  68. package/dist/modules/datasource/dart/index.js.map +1 -1
  69. package/dist/modules/datasource/dart-version/index.js +1 -1
  70. package/dist/modules/datasource/dart-version/index.js.map +1 -1
  71. package/dist/modules/datasource/datasource.js +0 -1
  72. package/dist/modules/datasource/datasource.js.map +1 -1
  73. package/dist/modules/datasource/deb/index.js +1 -1
  74. package/dist/modules/datasource/deb/index.js.map +1 -1
  75. package/dist/modules/datasource/deno/index.js +1 -1
  76. package/dist/modules/datasource/deno/index.js.map +1 -1
  77. package/dist/modules/datasource/deno/schema.d.ts +7 -7
  78. package/dist/modules/datasource/devbox/index.js +0 -1
  79. package/dist/modules/datasource/devbox/index.js.map +1 -1
  80. package/dist/modules/datasource/docker/common.js +4 -1
  81. package/dist/modules/datasource/docker/common.js.map +1 -1
  82. package/dist/modules/datasource/docker/index.js +5 -5
  83. package/dist/modules/datasource/docker/index.js.map +1 -1
  84. package/dist/modules/datasource/docker/schema.d.ts +27 -27
  85. package/dist/modules/datasource/docker/schema.js +2 -1
  86. package/dist/modules/datasource/docker/schema.js.map +1 -1
  87. package/dist/modules/datasource/flutter-version/index.js +1 -1
  88. package/dist/modules/datasource/flutter-version/index.js.map +1 -1
  89. package/dist/modules/datasource/galaxy-collection/schema.d.ts +5 -5
  90. package/dist/modules/datasource/git-refs/index.js +1 -1
  91. package/dist/modules/datasource/git-refs/index.js.map +1 -1
  92. package/dist/modules/datasource/gitea-releases/schema.d.ts +6 -6
  93. package/dist/modules/datasource/gitlab-packages/index.js +1 -1
  94. package/dist/modules/datasource/gitlab-packages/index.js.map +1 -1
  95. package/dist/modules/datasource/gitlab-releases/index.js +1 -3
  96. package/dist/modules/datasource/gitlab-releases/index.js.map +1 -1
  97. package/dist/modules/datasource/go/index.js +1 -1
  98. package/dist/modules/datasource/go/index.js.map +1 -1
  99. package/dist/modules/datasource/go/releases-direct.js +7 -4
  100. package/dist/modules/datasource/go/releases-direct.js.map +1 -1
  101. package/dist/modules/datasource/golang-version/index.js +1 -1
  102. package/dist/modules/datasource/golang-version/index.js.map +1 -1
  103. package/dist/modules/datasource/gradle-version/index.js +1 -1
  104. package/dist/modules/datasource/gradle-version/index.js.map +1 -1
  105. package/dist/modules/datasource/helm/index.js +1 -1
  106. package/dist/modules/datasource/helm/index.js.map +1 -1
  107. package/dist/modules/datasource/hex/index.js +1 -1
  108. package/dist/modules/datasource/hex/index.js.map +1 -1
  109. package/dist/modules/datasource/index.js +2 -2
  110. package/dist/modules/datasource/index.js.map +1 -1
  111. package/dist/modules/datasource/java-version/index.js +0 -1
  112. package/dist/modules/datasource/java-version/index.js.map +1 -1
  113. package/dist/modules/datasource/jenkins-plugins/index.js +1 -1
  114. package/dist/modules/datasource/jenkins-plugins/index.js.map +1 -1
  115. package/dist/modules/datasource/maven/index.js +35 -27
  116. package/dist/modules/datasource/maven/index.js.map +1 -1
  117. package/dist/modules/datasource/maven/types.d.ts +3 -6
  118. package/dist/modules/datasource/maven/types.js.map +1 -1
  119. package/dist/modules/datasource/maven/util.d.ts +4 -5
  120. package/dist/modules/datasource/maven/util.js +93 -156
  121. package/dist/modules/datasource/maven/util.js.map +1 -1
  122. package/dist/modules/datasource/node-version/index.js +1 -1
  123. package/dist/modules/datasource/node-version/index.js.map +1 -1
  124. package/dist/modules/datasource/npm/index.js +1 -1
  125. package/dist/modules/datasource/npm/index.js.map +1 -1
  126. package/dist/modules/datasource/npm/npmrc.js +1 -1
  127. package/dist/modules/datasource/npm/npmrc.js.map +1 -1
  128. package/dist/modules/datasource/nuget/index.js +1 -1
  129. package/dist/modules/datasource/nuget/index.js.map +1 -1
  130. package/dist/modules/datasource/nuget/v3.js +5 -5
  131. package/dist/modules/datasource/nuget/v3.js.map +1 -1
  132. package/dist/modules/datasource/orb/index.js +1 -1
  133. package/dist/modules/datasource/orb/index.js.map +1 -1
  134. package/dist/modules/datasource/packagist/index.js +2 -2
  135. package/dist/modules/datasource/packagist/index.js.map +1 -1
  136. package/dist/modules/datasource/packagist/schema.d.ts +18 -18
  137. package/dist/modules/datasource/pod/index.js +1 -1
  138. package/dist/modules/datasource/pod/index.js.map +1 -1
  139. package/dist/modules/datasource/postprocess-release.js +1 -1
  140. package/dist/modules/datasource/postprocess-release.js.map +1 -1
  141. package/dist/modules/datasource/python-version/index.js +1 -1
  142. package/dist/modules/datasource/python-version/index.js.map +1 -1
  143. package/dist/modules/datasource/repology/index.js +1 -1
  144. package/dist/modules/datasource/repology/index.js.map +1 -1
  145. package/dist/modules/datasource/rubygems/index.js +1 -1
  146. package/dist/modules/datasource/rubygems/index.js.map +1 -1
  147. package/dist/modules/datasource/sbt-package/index.js +1 -1
  148. package/dist/modules/datasource/sbt-package/index.js.map +1 -1
  149. package/dist/modules/datasource/sbt-plugin/index.js +1 -1
  150. package/dist/modules/datasource/sbt-plugin/index.js.map +1 -1
  151. package/dist/modules/datasource/schema.d.ts +4 -4
  152. package/dist/modules/datasource/terraform-module/index.js +1 -1
  153. package/dist/modules/datasource/terraform-module/index.js.map +1 -1
  154. package/dist/modules/datasource/terraform-provider/index.js +1 -2
  155. package/dist/modules/datasource/terraform-provider/index.js.map +1 -1
  156. package/dist/modules/datasource/types.d.ts +1 -0
  157. package/dist/modules/datasource/types.js.map +1 -1
  158. package/dist/modules/manager/api.js +2 -0
  159. package/dist/modules/manager/api.js.map +1 -1
  160. package/dist/modules/manager/argocd/extract.js +1 -1
  161. package/dist/modules/manager/argocd/extract.js.map +1 -1
  162. package/dist/modules/manager/asdf/upgradeable-tooling.js +94 -0
  163. package/dist/modules/manager/asdf/upgradeable-tooling.js.map +1 -1
  164. package/dist/modules/manager/azure-pipelines/schema.d.ts +24 -24
  165. package/dist/modules/manager/batect/schema.d.ts +2 -2
  166. package/dist/modules/manager/bazel/rules/docker.d.ts +3 -3
  167. package/dist/modules/manager/bazel/rules/git.js +2 -1
  168. package/dist/modules/manager/bazel/rules/git.js.map +1 -1
  169. package/dist/modules/manager/bazel/rules/maven.d.ts +7 -7
  170. package/dist/modules/manager/bazel/rules/oci.d.ts +3 -3
  171. package/dist/modules/manager/bazel-module/parser/maven.d.ts +13 -13
  172. package/dist/modules/manager/bun/artifacts.js +0 -1
  173. package/dist/modules/manager/bun/artifacts.js.map +1 -1
  174. package/dist/modules/manager/bundler/artifacts.js +0 -1
  175. package/dist/modules/manager/bundler/artifacts.js.map +1 -1
  176. package/dist/modules/manager/bundler/extract.js +2 -1
  177. package/dist/modules/manager/bundler/extract.js.map +1 -1
  178. package/dist/modules/manager/cake/index.js +4 -2
  179. package/dist/modules/manager/cake/index.js.map +1 -1
  180. package/dist/modules/manager/cargo/artifacts.js +5 -7
  181. package/dist/modules/manager/cargo/artifacts.js.map +1 -1
  182. package/dist/modules/manager/cargo/schema.d.ts +164 -164
  183. package/dist/modules/manager/circleci/schema.d.ts +6 -6
  184. package/dist/modules/manager/cocoapods/artifacts.js +1 -2
  185. package/dist/modules/manager/cocoapods/artifacts.js.map +1 -1
  186. package/dist/modules/manager/composer/artifacts.js +1 -2
  187. package/dist/modules/manager/composer/artifacts.js.map +1 -1
  188. package/dist/modules/manager/composer/schema.d.ts +36 -36
  189. package/dist/modules/manager/composer/schema.js +1 -1
  190. package/dist/modules/manager/composer/schema.js.map +1 -1
  191. package/dist/modules/manager/composer/utils.d.ts +1 -0
  192. package/dist/modules/manager/composer/utils.js +9 -0
  193. package/dist/modules/manager/composer/utils.js.map +1 -1
  194. package/dist/modules/manager/copier/artifacts.js +0 -1
  195. package/dist/modules/manager/copier/artifacts.js.map +1 -1
  196. package/dist/modules/manager/custom/jsonata/schema.d.ts +28 -28
  197. package/dist/modules/manager/custom/regex/index.js +2 -0
  198. package/dist/modules/manager/custom/regex/index.js.map +1 -1
  199. package/dist/modules/manager/deps-edn/extract.js +2 -1
  200. package/dist/modules/manager/deps-edn/extract.js.map +1 -1
  201. package/dist/modules/manager/devbox/artifacts.d.ts +1 -1
  202. package/dist/modules/manager/devbox/artifacts.js +1 -2
  203. package/dist/modules/manager/devbox/artifacts.js.map +1 -1
  204. package/dist/modules/manager/devbox/schema.js +1 -1
  205. package/dist/modules/manager/devbox/schema.js.map +1 -1
  206. package/dist/modules/manager/devcontainer/extract.js +43 -1
  207. package/dist/modules/manager/devcontainer/extract.js.map +1 -1
  208. package/dist/modules/manager/devcontainer/index.js +11 -1
  209. package/dist/modules/manager/devcontainer/index.js.map +1 -1
  210. package/dist/modules/manager/devcontainer/schema.d.ts +7 -3
  211. package/dist/modules/manager/devcontainer/schema.js +3 -1
  212. package/dist/modules/manager/devcontainer/schema.js.map +1 -1
  213. package/dist/modules/manager/docker-compose/schema.d.ts +6 -6
  214. package/dist/modules/manager/fingerprint.generated.js +83 -82
  215. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  216. package/dist/modules/manager/fleet/schema.d.ts +12 -12
  217. package/dist/modules/manager/flux/artifacts.js +0 -1
  218. package/dist/modules/manager/flux/artifacts.js.map +1 -1
  219. package/dist/modules/manager/flux/extract.js +27 -24
  220. package/dist/modules/manager/flux/extract.js.map +1 -1
  221. package/dist/modules/manager/flux/schema.d.ts +44 -44
  222. package/dist/modules/manager/github-actions/extract.js +60 -39
  223. package/dist/modules/manager/github-actions/extract.js.map +1 -1
  224. package/dist/modules/manager/github-actions/schema.d.ts +66 -0
  225. package/dist/modules/manager/github-actions/schema.js +38 -0
  226. package/dist/modules/manager/github-actions/schema.js.map +1 -0
  227. package/dist/modules/manager/gitlabci/extract.d.ts +1 -5
  228. package/dist/modules/manager/gitlabci/extract.js +27 -126
  229. package/dist/modules/manager/gitlabci/extract.js.map +1 -1
  230. package/dist/modules/manager/gitlabci/schema.d.ts +55 -0
  231. package/dist/modules/manager/gitlabci/schema.js +63 -0
  232. package/dist/modules/manager/gitlabci/schema.js.map +1 -0
  233. package/dist/modules/manager/gitlabci-include/extract.js +6 -54
  234. package/dist/modules/manager/gitlabci-include/extract.js.map +1 -1
  235. package/dist/modules/manager/gitlabci-include/schema.d.ts +13 -0
  236. package/dist/modules/manager/gitlabci-include/schema.js +46 -0
  237. package/dist/modules/manager/gitlabci-include/schema.js.map +1 -0
  238. package/dist/modules/manager/gomod/artifacts.js +24 -10
  239. package/dist/modules/manager/gomod/artifacts.js.map +1 -1
  240. package/dist/modules/manager/gomod/extract.js +23 -0
  241. package/dist/modules/manager/gomod/extract.js.map +1 -1
  242. package/dist/modules/manager/gomod/line-parser.js +16 -0
  243. package/dist/modules/manager/gomod/line-parser.js.map +1 -1
  244. package/dist/modules/manager/gomod/update.js +2 -2
  245. package/dist/modules/manager/gomod/update.js.map +1 -1
  246. package/dist/modules/manager/gradle/artifacts.js +0 -1
  247. package/dist/modules/manager/gradle/artifacts.js.map +1 -1
  248. package/dist/modules/manager/gradle/extract/catalog.js +1 -1
  249. package/dist/modules/manager/gradle/extract/catalog.js.map +1 -1
  250. package/dist/modules/manager/gradle/parser/assignments.js +2 -2
  251. package/dist/modules/manager/gradle/parser/assignments.js.map +1 -1
  252. package/dist/modules/manager/gradle/parser/handlers.d.ts +1 -2
  253. package/dist/modules/manager/gradle/parser/handlers.js +10 -25
  254. package/dist/modules/manager/gradle/parser/handlers.js.map +1 -1
  255. package/dist/modules/manager/gradle/parser/registry-urls.js +11 -3
  256. package/dist/modules/manager/gradle/parser/registry-urls.js.map +1 -1
  257. package/dist/modules/manager/gradle-wrapper/artifacts.js +0 -1
  258. package/dist/modules/manager/gradle-wrapper/artifacts.js.map +1 -1
  259. package/dist/modules/manager/helmfile/artifacts.js +0 -1
  260. package/dist/modules/manager/helmfile/artifacts.js.map +1 -1
  261. package/dist/modules/manager/helmfile/extract.js +4 -0
  262. package/dist/modules/manager/helmfile/extract.js.map +1 -1
  263. package/dist/modules/manager/helmfile/schema.d.ts +9 -9
  264. package/dist/modules/manager/helmv3/artifacts.js +0 -1
  265. package/dist/modules/manager/helmv3/artifacts.js.map +1 -1
  266. package/dist/modules/manager/helmv3/utils.js +3 -1
  267. package/dist/modules/manager/helmv3/utils.js.map +1 -1
  268. package/dist/modules/manager/hermit/artifacts.js +0 -1
  269. package/dist/modules/manager/hermit/artifacts.js.map +1 -1
  270. package/dist/modules/manager/homebrew/extract.js +0 -1
  271. package/dist/modules/manager/homebrew/extract.js.map +1 -1
  272. package/dist/modules/manager/jsonnet-bundler/artifacts.js +0 -1
  273. package/dist/modules/manager/jsonnet-bundler/artifacts.js.map +1 -1
  274. package/dist/modules/manager/kustomize/artifacts.d.ts +2 -0
  275. package/dist/modules/manager/kustomize/artifacts.js +154 -0
  276. package/dist/modules/manager/kustomize/artifacts.js.map +1 -0
  277. package/dist/modules/manager/kustomize/common.d.ts +3 -0
  278. package/dist/modules/manager/kustomize/common.js +22 -0
  279. package/dist/modules/manager/kustomize/common.js.map +1 -0
  280. package/dist/modules/manager/kustomize/index.d.ts +1 -0
  281. package/dist/modules/manager/kustomize/index.js +3 -1
  282. package/dist/modules/manager/kustomize/index.js.map +1 -1
  283. package/dist/modules/manager/kustomize/types.d.ts +4 -0
  284. package/dist/modules/manager/kustomize/types.js.map +1 -1
  285. package/dist/modules/manager/maven-wrapper/artifacts.js +0 -1
  286. package/dist/modules/manager/maven-wrapper/artifacts.js.map +1 -1
  287. package/dist/modules/manager/mix/artifacts.js +64 -14
  288. package/dist/modules/manager/mix/artifacts.js.map +1 -1
  289. package/dist/modules/manager/mix/index.d.ts +1 -0
  290. package/dist/modules/manager/mix/index.js +2 -1
  291. package/dist/modules/manager/mix/index.js.map +1 -1
  292. package/dist/modules/manager/nix/artifacts.js +0 -1
  293. package/dist/modules/manager/nix/artifacts.js.map +1 -1
  294. package/dist/modules/manager/nix/extract.js +1 -1
  295. package/dist/modules/manager/nix/extract.js.map +1 -1
  296. package/dist/modules/manager/nix/schema.d.ts +6 -6
  297. package/dist/modules/manager/npm/artifacts.js +0 -1
  298. package/dist/modules/manager/npm/artifacts.js.map +1 -1
  299. package/dist/modules/manager/npm/extract/yarn.js +2 -2
  300. package/dist/modules/manager/npm/extract/yarn.js.map +1 -1
  301. package/dist/modules/manager/npm/post-update/npm.js +0 -1
  302. package/dist/modules/manager/npm/post-update/npm.js.map +1 -1
  303. package/dist/modules/manager/npm/post-update/pnpm.js +13 -2
  304. package/dist/modules/manager/npm/post-update/pnpm.js.map +1 -1
  305. package/dist/modules/manager/npm/post-update/rules.js +11 -1
  306. package/dist/modules/manager/npm/post-update/rules.js.map +1 -1
  307. package/dist/modules/manager/npm/post-update/yarn.js +0 -1
  308. package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
  309. package/dist/modules/manager/npm/update/dependency/index.js +1 -1
  310. package/dist/modules/manager/npm/update/dependency/index.js.map +1 -1
  311. package/dist/modules/manager/nuget/artifacts.js +1 -2
  312. package/dist/modules/manager/nuget/artifacts.js.map +1 -1
  313. package/dist/modules/manager/nuget/package-tree.js +4 -0
  314. package/dist/modules/manager/nuget/package-tree.js.map +1 -1
  315. package/dist/modules/manager/nuget/util.js +4 -1
  316. package/dist/modules/manager/nuget/util.js.map +1 -1
  317. package/dist/modules/manager/pep621/processors/pdm.js +0 -1
  318. package/dist/modules/manager/pep621/processors/pdm.js.map +1 -1
  319. package/dist/modules/manager/pep621/processors/uv.js +0 -1
  320. package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
  321. package/dist/modules/manager/pep621/schema.d.ts +35 -30
  322. package/dist/modules/manager/pep621/schema.js +2 -0
  323. package/dist/modules/manager/pep621/schema.js.map +1 -1
  324. package/dist/modules/manager/pip-compile/common.js +0 -1
  325. package/dist/modules/manager/pip-compile/common.js.map +1 -1
  326. package/dist/modules/manager/pip_requirements/artifacts.js +0 -1
  327. package/dist/modules/manager/pip_requirements/artifacts.js.map +1 -1
  328. package/dist/modules/manager/pipenv/artifacts.js +0 -1
  329. package/dist/modules/manager/pipenv/artifacts.js.map +1 -1
  330. package/dist/modules/manager/pixi/artifacts.d.ts +3 -0
  331. package/dist/modules/manager/pixi/artifacts.js +84 -0
  332. package/dist/modules/manager/pixi/artifacts.js.map +1 -0
  333. package/dist/modules/manager/pixi/extract.d.ts +2 -0
  334. package/dist/modules/manager/pixi/extract.js +53 -0
  335. package/dist/modules/manager/pixi/extract.js.map +1 -0
  336. package/dist/modules/manager/pixi/index.d.ts +11 -0
  337. package/dist/modules/manager/pixi/index.js +22 -0
  338. package/dist/modules/manager/pixi/index.js.map +1 -0
  339. package/dist/modules/manager/pixi/lockfile.d.ts +6 -0
  340. package/dist/modules/manager/pixi/lockfile.js +25 -0
  341. package/dist/modules/manager/pixi/lockfile.js.map +1 -0
  342. package/dist/modules/manager/pixi/schema.d.ts +14 -0
  343. package/dist/modules/manager/pixi/schema.js +14 -0
  344. package/dist/modules/manager/pixi/schema.js.map +1 -0
  345. package/dist/modules/manager/poetry/artifacts.js +0 -1
  346. package/dist/modules/manager/poetry/artifacts.js.map +1 -1
  347. package/dist/modules/manager/poetry/schema.d.ts +31 -31
  348. package/dist/modules/manager/pub/artifacts.js +0 -1
  349. package/dist/modules/manager/pub/artifacts.js.map +1 -1
  350. package/dist/modules/manager/pub/schema.d.ts +8 -8
  351. package/dist/modules/manager/scalafmt/extract.js +1 -1
  352. package/dist/modules/manager/scalafmt/extract.js.map +1 -1
  353. package/dist/modules/manager/types.d.ts +6 -2
  354. package/dist/modules/manager/types.js.map +1 -1
  355. package/dist/modules/manager/vendir/schema.d.ts +23 -23
  356. package/dist/modules/platform/azure/azure-helper.js +2 -2
  357. package/dist/modules/platform/azure/azure-helper.js.map +1 -1
  358. package/dist/modules/platform/azure/index.js +14 -14
  359. package/dist/modules/platform/azure/index.js.map +1 -1
  360. package/dist/modules/platform/bitbucket/comments.js +4 -4
  361. package/dist/modules/platform/bitbucket/comments.js.map +1 -1
  362. package/dist/modules/platform/bitbucket/index.js +48 -43
  363. package/dist/modules/platform/bitbucket/index.js.map +1 -1
  364. package/dist/modules/platform/bitbucket/schema.d.ts +13 -13
  365. package/dist/modules/platform/bitbucket/utils.js +3 -3
  366. package/dist/modules/platform/bitbucket/utils.js.map +1 -1
  367. package/dist/modules/platform/bitbucket-server/index.d.ts +2 -2
  368. package/dist/modules/platform/bitbucket-server/index.js +70 -72
  369. package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
  370. package/dist/modules/platform/bitbucket-server/pr-cache.d.ts +23 -0
  371. package/dist/modules/platform/bitbucket-server/pr-cache.js +125 -0
  372. package/dist/modules/platform/bitbucket-server/pr-cache.js.map +1 -0
  373. package/dist/modules/platform/bitbucket-server/types.d.ts +6 -1
  374. package/dist/modules/platform/bitbucket-server/types.js.map +1 -1
  375. package/dist/modules/platform/bitbucket-server/utils.js +5 -1
  376. package/dist/modules/platform/bitbucket-server/utils.js.map +1 -1
  377. package/dist/modules/platform/codecommit/codecommit-client.js +6 -6
  378. package/dist/modules/platform/codecommit/codecommit-client.js.map +1 -1
  379. package/dist/modules/platform/codecommit/index.js +24 -24
  380. package/dist/modules/platform/codecommit/index.js.map +1 -1
  381. package/dist/modules/platform/gerrit/client.js +12 -1
  382. package/dist/modules/platform/gerrit/client.js.map +1 -1
  383. package/dist/modules/platform/gerrit/utils.js +1 -1
  384. package/dist/modules/platform/gerrit/utils.js.map +1 -1
  385. package/dist/modules/platform/gitea/gitea-helper.d.ts +1 -0
  386. package/dist/modules/platform/gitea/gitea-helper.js +16 -0
  387. package/dist/modules/platform/gitea/gitea-helper.js.map +1 -1
  388. package/dist/modules/platform/gitea/index.js +15 -7
  389. package/dist/modules/platform/gitea/index.js.map +1 -1
  390. package/dist/modules/platform/gitea/schema.d.ts +4 -4
  391. package/dist/modules/platform/gitea/types.d.ts +1 -1
  392. package/dist/modules/platform/gitea/types.js.map +1 -1
  393. package/dist/modules/platform/github/index.js +81 -78
  394. package/dist/modules/platform/github/index.js.map +1 -1
  395. package/dist/modules/platform/github/issue.d.ts +3 -3
  396. package/dist/modules/platform/github/massage-markdown-links.js +2 -2
  397. package/dist/modules/platform/github/massage-markdown-links.js.map +1 -1
  398. package/dist/modules/platform/github/pr.js +3 -3
  399. package/dist/modules/platform/github/pr.js.map +1 -1
  400. package/dist/modules/platform/github/schema.d.ts +11 -11
  401. package/dist/modules/platform/github/schema.js +3 -1
  402. package/dist/modules/platform/github/schema.js.map +1 -1
  403. package/dist/modules/platform/gitlab/index.js +61 -43
  404. package/dist/modules/platform/gitlab/index.js.map +1 -1
  405. package/dist/modules/platform/index.js +0 -1
  406. package/dist/modules/platform/index.js.map +1 -1
  407. package/dist/modules/versioning/api.js +2 -0
  408. package/dist/modules/versioning/api.js.map +1 -1
  409. package/dist/modules/versioning/conda/index.d.ts +41 -0
  410. package/dist/modules/versioning/conda/index.js +178 -0
  411. package/dist/modules/versioning/conda/index.js.map +1 -0
  412. package/dist/modules/versioning/hashicorp/convertor.d.ts +2 -1
  413. package/dist/modules/versioning/hashicorp/convertor.js +13 -8
  414. package/dist/modules/versioning/hashicorp/convertor.js.map +1 -1
  415. package/dist/modules/versioning/hex/index.js +3 -3
  416. package/dist/modules/versioning/hex/index.js.map +1 -1
  417. package/dist/proxy.js +1 -1
  418. package/dist/proxy.js.map +1 -1
  419. package/dist/renovate.js +2 -2
  420. package/dist/renovate.js.map +1 -1
  421. package/dist/util/cache/package/types.d.ts +1 -1
  422. package/dist/util/cache/package/types.js.map +1 -1
  423. package/dist/util/cache/repository/schema.d.ts +4 -4
  424. package/dist/util/cache/repository/types.d.ts +3 -0
  425. package/dist/util/cache/repository/types.js.map +1 -1
  426. package/dist/util/env.d.ts +4 -0
  427. package/dist/util/env.js +22 -0
  428. package/dist/util/env.js.map +1 -0
  429. package/dist/util/exec/containerbase.js +6 -0
  430. package/dist/util/exec/containerbase.js.map +1 -1
  431. package/dist/util/exec/index.js +5 -2
  432. package/dist/util/exec/index.js.map +1 -1
  433. package/dist/util/exec/types.d.ts +0 -2
  434. package/dist/util/exec/types.js.map +1 -1
  435. package/dist/util/exec/utils.d.ts +1 -1
  436. package/dist/util/exec/utils.js +6 -5
  437. package/dist/util/exec/utils.js.map +1 -1
  438. package/dist/util/git/author.js +1 -1
  439. package/dist/util/git/author.js.map +1 -1
  440. package/dist/util/git/config.js +0 -1
  441. package/dist/util/git/config.js.map +1 -1
  442. package/dist/util/git/error.js +4 -2
  443. package/dist/util/git/error.js.map +1 -1
  444. package/dist/util/git/index.js +73 -46
  445. package/dist/util/git/index.js.map +1 -1
  446. package/dist/util/git/private-key.js +1 -1
  447. package/dist/util/git/private-key.js.map +1 -1
  448. package/dist/util/github/graphql/query-adapters/releases-query-adapter.d.ts +5 -5
  449. package/dist/util/github/graphql/query-adapters/tags-query-adapter.d.ts +2 -2
  450. package/dist/util/http/bitbucket-server.js +4 -0
  451. package/dist/util/http/bitbucket-server.js.map +1 -1
  452. package/dist/util/http/bitbucket.js +5 -1
  453. package/dist/util/http/bitbucket.js.map +1 -1
  454. package/dist/util/http/cache/abstract-http-cache-provider.js +2 -2
  455. package/dist/util/http/cache/abstract-http-cache-provider.js.map +1 -1
  456. package/dist/util/http/cache/memory-http-cache-provider.d.ts +10 -0
  457. package/dist/util/http/cache/memory-http-cache-provider.js +29 -0
  458. package/dist/util/http/cache/memory-http-cache-provider.js.map +1 -0
  459. package/dist/util/http/gitea.js +2 -0
  460. package/dist/util/http/gitea.js.map +1 -1
  461. package/dist/util/http/github.js +1 -0
  462. package/dist/util/http/github.js.map +1 -1
  463. package/dist/util/http/gitlab.js +2 -0
  464. package/dist/util/http/gitlab.js.map +1 -1
  465. package/dist/util/http/host-rules.js +5 -4
  466. package/dist/util/http/host-rules.js.map +1 -1
  467. package/dist/util/http/http.js +12 -5
  468. package/dist/util/http/http.js.map +1 -1
  469. package/dist/util/stats.d.ts +10 -0
  470. package/dist/util/stats.js +45 -1
  471. package/dist/util/stats.js.map +1 -1
  472. package/dist/workers/global/config/parse/file.js +2 -2
  473. package/dist/workers/global/config/parse/file.js.map +1 -1
  474. package/dist/workers/global/config/parse/index.js +5 -0
  475. package/dist/workers/global/config/parse/index.js.map +1 -1
  476. package/dist/workers/repository/cache.js +1 -1
  477. package/dist/workers/repository/cache.js.map +1 -1
  478. package/dist/workers/repository/config-migration/branch/migrated-data.js +2 -0
  479. package/dist/workers/repository/config-migration/branch/migrated-data.js.map +1 -1
  480. package/dist/workers/repository/index.js +1 -0
  481. package/dist/workers/repository/index.js.map +1 -1
  482. package/dist/workers/repository/init/merge.js +6 -3
  483. package/dist/workers/repository/init/merge.js.map +1 -1
  484. package/dist/workers/repository/process/extract-update.js +0 -1
  485. package/dist/workers/repository/process/extract-update.js.map +1 -1
  486. package/dist/workers/repository/process/fingerprint-fields.js +0 -1
  487. package/dist/workers/repository/process/fingerprint-fields.js.map +1 -1
  488. package/dist/workers/repository/process/libyear.js +2 -2
  489. package/dist/workers/repository/process/libyear.js.map +1 -1
  490. package/dist/workers/repository/process/lookup/index.js +13 -4
  491. package/dist/workers/repository/process/lookup/index.js.map +1 -1
  492. package/dist/workers/repository/process/vulnerabilities.js +1 -1
  493. package/dist/workers/repository/process/vulnerabilities.js.map +1 -1
  494. package/dist/workers/repository/process/write.js +1 -8
  495. package/dist/workers/repository/process/write.js.map +1 -1
  496. package/dist/workers/repository/reconfigure/validate.js +1 -0
  497. package/dist/workers/repository/reconfigure/validate.js.map +1 -1
  498. package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js +10 -1
  499. package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js.map +1 -1
  500. package/dist/workers/repository/update/pr/changelog/github/index.js +6 -3
  501. package/dist/workers/repository/update/pr/changelog/github/index.js.map +1 -1
  502. package/dist/workers/repository/update/pr/changelog/source.js +1 -0
  503. package/dist/workers/repository/update/pr/changelog/source.js.map +1 -1
  504. package/dist/workers/repository/updates/flatten.js +8 -4
  505. package/dist/workers/repository/updates/flatten.js.map +1 -1
  506. package/dist/workers/repository/updates/generate.js +1 -2
  507. package/dist/workers/repository/updates/generate.js.map +1 -1
  508. package/dist/workers/types.d.ts +1 -4
  509. package/dist/workers/types.js.map +1 -1
  510. package/package.json +45 -43
  511. package/renovate-schema.json +14 -1
  512. package/dist/modules/manager/github-actions/types.d.ts +0 -30
  513. package/dist/modules/manager/github-actions/types.js +0 -3
  514. package/dist/modules/manager/github-actions/types.js.map +0 -1
  515. package/dist/modules/manager/gitlabci/common.d.ts +0 -6
  516. package/dist/modules/manager/gitlabci/common.js +0 -30
  517. package/dist/modules/manager/gitlabci/common.js.map +0 -1
  518. package/dist/modules/manager/gitlabci/types.d.ts +0 -35
  519. package/dist/modules/manager/gitlabci/types.js +0 -3
  520. package/dist/modules/manager/gitlabci/types.js.map +0 -1
@@ -4,11 +4,14 @@ exports.CondaDatasource = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const logger_1 = require("../../../logger");
6
6
  const external_host_error_1 = require("../../../types/errors/external-host-error");
7
+ const array_1 = require("../../../util/array");
7
8
  const decorator_1 = require("../../../util/cache/package/decorator");
8
9
  const http_1 = require("../../../util/http");
10
+ const timestamp_1 = require("../../../util/timestamp");
9
11
  const url_1 = require("../../../util/url");
10
12
  const datasource_1 = require("../datasource");
11
13
  const common_1 = require("./common");
14
+ const prefixDev = tslib_1.__importStar(require("./prefix-dev"));
12
15
  class CondaDatasource extends datasource_1.Datasource {
13
16
  static id = common_1.datasource;
14
17
  constructor() {
@@ -25,6 +28,15 @@ class CondaDatasource extends datasource_1.Datasource {
25
28
  if (!registryUrl) {
26
29
  return null;
27
30
  }
31
+ // fast.prefix.dev is a alias, deprecated, but still running.
32
+ // We expect registryUrl to be `https://prefix.dev/${channel}` here.
33
+ if (registryUrl.startsWith('https://prefix.dev/') ||
34
+ registryUrl.startsWith('https://fast.prefix.dev/')) {
35
+ // Since the registryUrl contains at least 3 `/` ,
36
+ // the channel varitable won't be undefined in any case.
37
+ const channel = (0, url_1.ensureTrailingSlash)(registryUrl).split('/').at(-2);
38
+ return prefixDev.getReleases(this.http, channel, packageName);
39
+ }
28
40
  const url = (0, url_1.joinUrlParts)(registryUrl, packageName);
29
41
  const result = {
30
42
  releases: [],
@@ -34,15 +46,20 @@ class CondaDatasource extends datasource_1.Datasource {
34
46
  response = await this.http.getJsonUnchecked(url);
35
47
  result.homepage = response.body.html_url;
36
48
  result.sourceUrl = response.body.dev_url;
49
+ const releaseDate = {};
50
+ // we assume all packages are roughly released on the same time
51
+ for (const file of (0, array_1.coerceArray)(response.body.files)) {
52
+ releaseDate[file.version] ??= timestamp_1.Timestamp.parse(file.upload_time);
53
+ }
37
54
  response.body.versions.forEach((version) => {
38
55
  const thisRelease = {
39
56
  version,
57
+ releaseTimestamp: releaseDate[version],
40
58
  };
41
59
  result.releases.push(thisRelease);
42
60
  });
43
61
  }
44
62
  catch (err) {
45
- // istanbul ignore else: not testable with nock
46
63
  if (err instanceof http_1.HttpError) {
47
64
  if (err.response?.statusCode !== 404) {
48
65
  throw new external_host_error_1.ExternalHostError(err);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/conda/index.ts"],"names":[],"mappings":";;;;AAAA,4CAAyC;AACzC,mFAA8E;AAC9E,qEAA8D;AAC9D,6CAA+C;AAC/C,2CAAiD;AACjD,8CAA2C;AAE3C,qCAA0D;AAG1D,MAAa,eAAgB,SAAQ,uBAAU;IAC7C,MAAM,CAAU,EAAE,GAAG,mBAAU,CAAC;IAEhC;QACE,KAAK,CAAC,mBAAU,CAAC,CAAC;IACpB,CAAC;IAEiB,qBAAqB,GAAG,IAAI,CAAC;IAE7B,gBAAgB,GAAG,MAAM,CAAC;IAE1B,mBAAmB,GAAG,CAAC,2BAAkB,CAAC,CAAC;IAE3C,OAAO,GAAG,IAAI,CAAC;IAEf,gBAAgB,GAAG,SAAS,CAAC;IAC7B,aAAa,GAC7B,uEAAuE,CAAC;IAQpE,AAAN,KAAK,CAAC,WAAW,CAAC,EAChB,WAAW,EACX,WAAW,GACO;QAClB,eAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,wBAAwB,CAAC,CAAC;QAErE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,GAAG,IAAA,kBAAY,EAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAkB;YAC5B,QAAQ,EAAE,EAAE;SACb,CAAC;QAEF,IAAI,QAAgC,CAAC;QAErC,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAEjD,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;YACzC,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;YAEzC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAe,EAAE,EAAE;gBACjD,MAAM,WAAW,GAAY;oBAC3B,OAAO;iBACR,CAAC;gBACF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,+CAA+C;YAC/C,IAAI,GAAG,YAAY,gBAAS,EAAE,CAAC;gBAC7B,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,KAAK,GAAG,EAAE,CAAC;oBACrC,MAAM,IAAI,uCAAiB,CAAC,GAAG,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YACD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,CAAC;;AAlEH,0CAmEC;AA1CO;IANL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,cAAc,mBAAU,EAAE;QACrC,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,EAAqB,EAAE,EAAE;QACvD,uBAAuB;QACvB,GAAG,WAAW,IAAI,WAAW,EAAE;KAClC,CAAC;kDA0CD","sourcesContent":["import { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { HttpError } from '../../../util/http';\nimport { joinUrlParts } from '../../../util/url';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, Release, ReleaseResult } from '../types';\nimport { datasource, defaultRegistryUrl } from './common';\nimport type { CondaPackage } from './types';\n\nexport class CondaDatasource extends Datasource {\n static readonly id = datasource;\n\n constructor() {\n super(datasource);\n }\n\n override readonly customRegistrySupport = true;\n\n override readonly registryStrategy = 'hunt';\n\n override readonly defaultRegistryUrls = [defaultRegistryUrl];\n\n override readonly caching = true;\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `dev_url` field in the results.';\n\n @cache({\n namespace: `datasource-${datasource}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `${registryUrl}:${packageName}`,\n })\n async getReleases({\n registryUrl,\n packageName,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n logger.trace({ registryUrl, packageName }, 'fetching conda package');\n\n if (!registryUrl) {\n return null;\n }\n\n const url = joinUrlParts(registryUrl, packageName);\n\n const result: ReleaseResult = {\n releases: [],\n };\n\n let response: { body: CondaPackage };\n\n try {\n response = await this.http.getJsonUnchecked(url);\n\n result.homepage = response.body.html_url;\n result.sourceUrl = response.body.dev_url;\n\n response.body.versions.forEach((version: string) => {\n const thisRelease: Release = {\n version,\n };\n result.releases.push(thisRelease);\n });\n } catch (err) {\n // istanbul ignore else: not testable with nock\n if (err instanceof HttpError) {\n if (err.response?.statusCode !== 404) {\n throw new ExternalHostError(err);\n }\n }\n this.handleGenericErrors(err);\n }\n\n return result.releases.length ? result : null;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/conda/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { coerceArray } from '../../../util/array';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { HttpError } from '../../../util/http';\nimport { Timestamp } from '../../../util/timestamp';\nimport { ensureTrailingSlash, joinUrlParts } from '../../../util/url';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, Release, ReleaseResult } from '../types';\nimport { datasource, defaultRegistryUrl } from './common';\nimport * as prefixDev from './prefix-dev';\nimport type { CondaPackage } from './types';\n\nexport class CondaDatasource extends Datasource {\n static readonly id = datasource;\n\n constructor() {\n super(datasource);\n }\n\n override readonly customRegistrySupport = true;\n\n override readonly registryStrategy = 'hunt';\n\n override readonly defaultRegistryUrls = [defaultRegistryUrl];\n\n override readonly caching = true;\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `dev_url` field in the results.';\n\n @cache({\n namespace: `datasource-${datasource}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `${registryUrl}:${packageName}`,\n })\n async getReleases({\n registryUrl,\n packageName,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n logger.trace({ registryUrl, packageName }, 'fetching conda package');\n\n if (!registryUrl) {\n return null;\n }\n\n // fast.prefix.dev is a alias, deprecated, but still running.\n // We expect registryUrl to be `https://prefix.dev/${channel}` here.\n if (\n registryUrl.startsWith('https://prefix.dev/') ||\n registryUrl.startsWith('https://fast.prefix.dev/')\n ) {\n // Since the registryUrl contains at least 3 `/` ,\n // the channel varitable won't be undefined in any case.\n const channel = ensureTrailingSlash(registryUrl).split('/').at(-2)!;\n\n return prefixDev.getReleases(this.http, channel, packageName);\n }\n\n const url = joinUrlParts(registryUrl, packageName);\n\n const result: ReleaseResult = {\n releases: [],\n };\n\n let response: { body: CondaPackage };\n\n try {\n response = await this.http.getJsonUnchecked(url);\n\n result.homepage = response.body.html_url;\n result.sourceUrl = response.body.dev_url;\n\n const releaseDate: Record<string, Timestamp> = {};\n // we assume all packages are roughly released on the same time\n for (const file of coerceArray(response.body.files)) {\n releaseDate[file.version] ??= Timestamp.parse(file.upload_time);\n }\n\n response.body.versions.forEach((version: string) => {\n const thisRelease: Release = {\n version,\n releaseTimestamp: releaseDate[version],\n };\n result.releases.push(thisRelease);\n });\n } catch (err) {\n if (err instanceof HttpError) {\n if (err.response?.statusCode !== 404) {\n throw new ExternalHostError(err);\n }\n }\n this.handleGenericErrors(err);\n }\n\n return result.releases.length ? result : null;\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { Http } from '../../../util/http';
2
+ import type { ReleaseResult } from '../types';
3
+ export declare function getReleases(http: Http, channel: string, packageName: string): Promise<ReleaseResult | null>;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getReleases = getReleases;
4
+ const logger_1 = require("../../../logger");
5
+ const array_1 = require("../../../util/array");
6
+ const timestamp_1 = require("../../../util/timestamp");
7
+ const prefix_dev_1 = require("./schema/prefix-dev");
8
+ const MAX_PREFIX_DEV_GRAPHQL_PAGE = 100;
9
+ const query = `
10
+ query search($channel: String!, $package: String!, $page: Int = 0) {
11
+ package(channelName: $channel, name: $package) {
12
+ variants(limit: 500, page: $page) {
13
+ pages
14
+ page {
15
+ createdAt
16
+ version
17
+ yankedReason
18
+ urls {
19
+ url
20
+ kind
21
+ }
22
+ }
23
+ }
24
+ }
25
+ }
26
+ `;
27
+ async function getReleases(http, channel, packageName) {
28
+ logger_1.logger.debug({ channel, packageName }, 'lookup package from prefix.dev graphql API');
29
+ const files = await getPagedResponse(http, query, {
30
+ channel,
31
+ package: packageName,
32
+ });
33
+ if (!files.length) {
34
+ return null;
35
+ }
36
+ let homepage = undefined;
37
+ let sourceUrl = undefined;
38
+ const releases = {};
39
+ for (const file of files) {
40
+ const version = file.version;
41
+ homepage ??= file.urls.HOME;
42
+ sourceUrl ??= file.urls.DEV;
43
+ releases[version] ??= { version };
44
+ // we assume all packages are roughly released on the same time
45
+ releases[version].releaseTimestamp =
46
+ releases[version].releaseTimestamp ??
47
+ timestamp_1.MaybeTimestamp.parse(file.createdAt);
48
+ // if the version has not been marked as deprecated, check other releases packages of the same version
49
+ if (!releases[version].isDeprecated) {
50
+ releases[version].isDeprecated = (0, array_1.isNotNullOrUndefined)(file.yankedReason);
51
+ }
52
+ }
53
+ return {
54
+ homepage,
55
+ sourceUrl,
56
+ releases: Object.values(releases),
57
+ };
58
+ }
59
+ async function getPagedResponse(http, query, data) {
60
+ const result = [];
61
+ for (let page = 0; page <= MAX_PREFIX_DEV_GRAPHQL_PAGE; page++) {
62
+ const res = await http.postJson('https://prefix.dev/api/graphql', {
63
+ body: {
64
+ operationName: 'search',
65
+ query,
66
+ variables: {
67
+ ...data,
68
+ page,
69
+ },
70
+ },
71
+ }, prefix_dev_1.PagedResponseSchema);
72
+ const currentPage = res.body.data.package?.variants;
73
+ if (!currentPage) {
74
+ break;
75
+ }
76
+ result.push(...currentPage.page);
77
+ if (page >= currentPage.pages - 1) {
78
+ break;
79
+ }
80
+ }
81
+ return result;
82
+ }
83
+ //# sourceMappingURL=prefix-dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefix-dev.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/conda/prefix-dev.ts"],"names":[],"mappings":";;AA4BA,kCA+CC;AA3ED,4CAAyC;AACzC,+CAA2D;AAE3D,uDAAyD;AAEzD,oDAAqE;AAErE,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAExC,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;CAiBb,CAAC;AAEK,KAAK,UAAU,WAAW,CAC/B,IAAU,EACV,OAAe,EACf,WAAmB;IAEnB,eAAM,CAAC,KAAK,CACV,EAAE,OAAO,EAAE,WAAW,EAAE,EACxB,4CAA4C,CAC7C,CAAC;IAEF,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE;QAChD,OAAO;QACP,OAAO,EAAE,WAAW;KACrB,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,QAAQ,GAAuB,SAAS,CAAC;IAC7C,IAAI,SAAS,GAAuB,SAAS,CAAC;IAE9C,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE7B,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAE5B,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QAElC,+DAA+D;QAC/D,QAAQ,CAAC,OAAO,CAAC,CAAC,gBAAgB;YAChC,QAAQ,CAAC,OAAO,CAAC,CAAC,gBAAgB;gBAClC,0BAAc,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvC,sGAAsG;QACtG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,CAAC;YACpC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,GAAG,IAAA,4BAAoB,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ;QACR,SAAS;QACT,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,IAAU,EACV,KAAa,EACb,IAAS;IAET,MAAM,MAAM,GAAW,EAAE,CAAC;IAE1B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,2BAA2B,EAAE,IAAI,EAAE,EAAE,CAAC;QAC/D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAC7B,gCAAgC,EAChC;YACE,IAAI,EAAE;gBACJ,aAAa,EAAE,QAAQ;gBACvB,KAAK;gBACL,SAAS,EAAE;oBACT,GAAG,IAAI;oBACP,IAAI;iBACL;aACF;SACF,EACD,gCAAmB,CACpB,CAAC;QAEF,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QACpD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM;QACR,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,IAAI,IAAI,WAAW,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { logger } from '../../../logger';\nimport { isNotNullOrUndefined } from '../../../util/array';\nimport type { Http } from '../../../util/http';\nimport { MaybeTimestamp } from '../../../util/timestamp';\nimport type { Release, ReleaseResult } from '../types';\nimport { type File, PagedResponseSchema } from './schema/prefix-dev';\n\nconst MAX_PREFIX_DEV_GRAPHQL_PAGE = 100;\n\nconst query = `\nquery search($channel: String!, $package: String!, $page: Int = 0) {\n package(channelName: $channel, name: $package) {\n variants(limit: 500, page: $page) {\n pages\n page {\n createdAt\n version\n yankedReason\n urls {\n url\n kind\n }\n }\n }\n }\n}\n`;\n\nexport async function getReleases(\n http: Http,\n channel: string,\n packageName: string,\n): Promise<ReleaseResult | null> {\n logger.debug(\n { channel, packageName },\n 'lookup package from prefix.dev graphql API',\n );\n\n const files = await getPagedResponse(http, query, {\n channel,\n package: packageName,\n });\n\n if (!files.length) {\n return null;\n }\n\n let homepage: string | undefined = undefined;\n let sourceUrl: string | undefined = undefined;\n\n const releases: Record<string, Release> = {};\n for (const file of files) {\n const version = file.version;\n\n homepage ??= file.urls.HOME;\n sourceUrl ??= file.urls.DEV;\n\n releases[version] ??= { version };\n\n // we assume all packages are roughly released on the same time\n releases[version].releaseTimestamp =\n releases[version].releaseTimestamp ??\n MaybeTimestamp.parse(file.createdAt);\n\n // if the version has not been marked as deprecated, check other releases packages of the same version\n if (!releases[version].isDeprecated) {\n releases[version].isDeprecated = isNotNullOrUndefined(file.yankedReason);\n }\n }\n\n return {\n homepage,\n sourceUrl,\n releases: Object.values(releases),\n };\n}\n\nasync function getPagedResponse(\n http: Http,\n query: string,\n data: any,\n): Promise<File[]> {\n const result: File[] = [];\n\n for (let page = 0; page <= MAX_PREFIX_DEV_GRAPHQL_PAGE; page++) {\n const res = await http.postJson(\n 'https://prefix.dev/api/graphql',\n {\n body: {\n operationName: 'search',\n query,\n variables: {\n ...data,\n page,\n },\n },\n },\n PagedResponseSchema,\n );\n\n const currentPage = res.body.data.package?.variants;\n if (!currentPage) {\n break;\n }\n\n result.push(...currentPage.page);\n\n if (page >= currentPage.pages - 1) {\n break;\n }\n }\n\n return result;\n}\n"]}
@@ -0,0 +1,189 @@
1
+ import { z } from 'zod';
2
+ export declare const File: z.ZodObject<{
3
+ version: z.ZodString;
4
+ createdAt: z.ZodNullable<z.ZodString>;
5
+ yankedReason: z.ZodNullable<z.ZodString>;
6
+ urls: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
7
+ url: z.ZodString;
8
+ kind: z.ZodString;
9
+ }, "strip", z.ZodTypeAny, {
10
+ url: string;
11
+ kind: string;
12
+ }, {
13
+ url: string;
14
+ kind: string;
15
+ }>, "many">>>, {
16
+ [k: string]: string;
17
+ }, {
18
+ url: string;
19
+ kind: string;
20
+ }[] | undefined>;
21
+ }, "strip", z.ZodTypeAny, {
22
+ urls: {
23
+ [k: string]: string;
24
+ };
25
+ version: string;
26
+ createdAt: string | null;
27
+ yankedReason: string | null;
28
+ }, {
29
+ version: string;
30
+ createdAt: string | null;
31
+ yankedReason: string | null;
32
+ urls?: {
33
+ url: string;
34
+ kind: string;
35
+ }[] | undefined;
36
+ }>;
37
+ export type File = z.infer<typeof File>;
38
+ export declare const PagedResponseSchema: z.ZodObject<{
39
+ data: z.ZodObject<{
40
+ package: z.ZodNullable<z.ZodObject<{
41
+ variants: z.ZodNullable<z.ZodObject<{
42
+ pages: z.ZodNumber;
43
+ page: z.ZodArray<z.ZodObject<{
44
+ version: z.ZodString;
45
+ createdAt: z.ZodNullable<z.ZodString>;
46
+ yankedReason: z.ZodNullable<z.ZodString>;
47
+ urls: z.ZodEffects<z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
48
+ url: z.ZodString;
49
+ kind: z.ZodString;
50
+ }, "strip", z.ZodTypeAny, {
51
+ url: string;
52
+ kind: string;
53
+ }, {
54
+ url: string;
55
+ kind: string;
56
+ }>, "many">>>, {
57
+ [k: string]: string;
58
+ }, {
59
+ url: string;
60
+ kind: string;
61
+ }[] | undefined>;
62
+ }, "strip", z.ZodTypeAny, {
63
+ urls: {
64
+ [k: string]: string;
65
+ };
66
+ version: string;
67
+ createdAt: string | null;
68
+ yankedReason: string | null;
69
+ }, {
70
+ version: string;
71
+ createdAt: string | null;
72
+ yankedReason: string | null;
73
+ urls?: {
74
+ url: string;
75
+ kind: string;
76
+ }[] | undefined;
77
+ }>, "many">;
78
+ }, "strip", z.ZodTypeAny, {
79
+ page: {
80
+ urls: {
81
+ [k: string]: string;
82
+ };
83
+ version: string;
84
+ createdAt: string | null;
85
+ yankedReason: string | null;
86
+ }[];
87
+ pages: number;
88
+ }, {
89
+ page: {
90
+ version: string;
91
+ createdAt: string | null;
92
+ yankedReason: string | null;
93
+ urls?: {
94
+ url: string;
95
+ kind: string;
96
+ }[] | undefined;
97
+ }[];
98
+ pages: number;
99
+ }>>;
100
+ }, "strip", z.ZodTypeAny, {
101
+ variants: {
102
+ page: {
103
+ urls: {
104
+ [k: string]: string;
105
+ };
106
+ version: string;
107
+ createdAt: string | null;
108
+ yankedReason: string | null;
109
+ }[];
110
+ pages: number;
111
+ } | null;
112
+ }, {
113
+ variants: {
114
+ page: {
115
+ version: string;
116
+ createdAt: string | null;
117
+ yankedReason: string | null;
118
+ urls?: {
119
+ url: string;
120
+ kind: string;
121
+ }[] | undefined;
122
+ }[];
123
+ pages: number;
124
+ } | null;
125
+ }>>;
126
+ }, "strip", z.ZodTypeAny, {
127
+ package: {
128
+ variants: {
129
+ page: {
130
+ urls: {
131
+ [k: string]: string;
132
+ };
133
+ version: string;
134
+ createdAt: string | null;
135
+ yankedReason: string | null;
136
+ }[];
137
+ pages: number;
138
+ } | null;
139
+ } | null;
140
+ }, {
141
+ package: {
142
+ variants: {
143
+ page: {
144
+ version: string;
145
+ createdAt: string | null;
146
+ yankedReason: string | null;
147
+ urls?: {
148
+ url: string;
149
+ kind: string;
150
+ }[] | undefined;
151
+ }[];
152
+ pages: number;
153
+ } | null;
154
+ } | null;
155
+ }>;
156
+ }, "strip", z.ZodTypeAny, {
157
+ data: {
158
+ package: {
159
+ variants: {
160
+ page: {
161
+ urls: {
162
+ [k: string]: string;
163
+ };
164
+ version: string;
165
+ createdAt: string | null;
166
+ yankedReason: string | null;
167
+ }[];
168
+ pages: number;
169
+ } | null;
170
+ } | null;
171
+ };
172
+ }, {
173
+ data: {
174
+ package: {
175
+ variants: {
176
+ page: {
177
+ version: string;
178
+ createdAt: string | null;
179
+ yankedReason: string | null;
180
+ urls?: {
181
+ url: string;
182
+ kind: string;
183
+ }[] | undefined;
184
+ }[];
185
+ pages: number;
186
+ } | null;
187
+ } | null;
188
+ };
189
+ }>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PagedResponseSchema = exports.File = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.File = zod_1.z.object({
6
+ version: zod_1.z.string(),
7
+ createdAt: zod_1.z.string().nullable(),
8
+ yankedReason: zod_1.z.string().nullable(),
9
+ urls: zod_1.z
10
+ .array(zod_1.z.object({ url: zod_1.z.string(), kind: zod_1.z.string() }))
11
+ .optional()
12
+ .default([])
13
+ .transform((urls) => {
14
+ return Object.fromEntries(urls.map((url) => [url.kind, url.url]));
15
+ }),
16
+ });
17
+ exports.PagedResponseSchema = zod_1.z.object({
18
+ data: zod_1.z.object({
19
+ package: zod_1.z
20
+ .object({
21
+ variants: zod_1.z
22
+ .object({
23
+ pages: zod_1.z.number(),
24
+ page: zod_1.z.array(exports.File),
25
+ })
26
+ .nullable(),
27
+ })
28
+ .nullable(),
29
+ }),
30
+ });
31
+ //# sourceMappingURL=prefix-dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefix-dev.js","sourceRoot":"","sources":["../../../../../lib/modules/datasource/conda/schema/prefix-dev.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,IAAI,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3B,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,IAAI,EAAE,OAAC;SACJ,KAAK,CAAC,OAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;SACtD,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;QAClB,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC;CACL,CAAC,CAAC;AAIU,QAAA,mBAAmB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,OAAC,CAAC,MAAM,CAAC;QACb,OAAO,EAAE,OAAC;aACP,MAAM,CAAC;YACN,QAAQ,EAAE,OAAC;iBACR,MAAM,CAAC;gBACN,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;gBACjB,IAAI,EAAE,OAAC,CAAC,KAAK,CAAC,YAAI,CAAC;aACpB,CAAC;iBACD,QAAQ,EAAE;SACd,CAAC;aACD,QAAQ,EAAE;KACd,CAAC;CACH,CAAC,CAAC","sourcesContent":["import { z } from 'zod';\n\nexport const File = z.object({\n version: z.string(),\n createdAt: z.string().nullable(),\n yankedReason: z.string().nullable(),\n urls: z\n .array(z.object({ url: z.string(), kind: z.string() }))\n .optional()\n .default([])\n .transform((urls) => {\n return Object.fromEntries(urls.map((url) => [url.kind, url.url]));\n }),\n});\n\nexport type File = z.infer<typeof File>;\n\nexport const PagedResponseSchema = z.object({\n data: z.object({\n package: z\n .object({\n variants: z\n .object({\n pages: z.number(),\n page: z.array(File),\n })\n .nullable(),\n })\n .nullable(),\n }),\n});\n"]}
@@ -5,8 +5,6 @@ export interface CondaPackage {
5
5
  full_name: string;
6
6
  owner: CondaPackageOwner;
7
7
  home: string;
8
- source_git_url: string;
9
- source_git_tag: string;
10
8
  app_type: Record<string, unknown>;
11
9
  upvoted: number;
12
10
  id: string;
@@ -29,7 +27,6 @@ export interface CondaPackage {
29
27
  modified_at: string;
30
28
  latest_version: CondaVersion;
31
29
  summary: string;
32
- license_url: string;
33
30
  doc_url: string;
34
31
  }
35
32
  export interface CondaPackageOwner {
@@ -48,7 +45,7 @@ export interface CondaRelease {
48
45
  full_name: string;
49
46
  }
50
47
  export interface CondaFile {
51
- description: string;
48
+ description?: string | null;
52
49
  basename: string;
53
50
  labels: string[];
54
51
  dependencies: string[];
@@ -62,20 +59,4 @@ export interface CondaFile {
62
59
  version: CondaVersion;
63
60
  md5: string;
64
61
  type: string;
65
- attrs: {
66
- build_number: number;
67
- name: string;
68
- license: string;
69
- timestamp: number;
70
- source_url: string;
71
- platform: string;
72
- depends: string[];
73
- version: CondaVersion;
74
- subdir: string;
75
- build: string;
76
- sha256: string;
77
- arch: string;
78
- md5: string;
79
- size: number;
80
- };
81
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/conda/types.ts"],"names":[],"mappings":";AAAA;;EAEE","sourcesContent":["/* For values of unknown type that are not used with renovate,\n any object is accepted in the types defined here\n*/\n\n// This can be improved with the documentation at\n// https://docs.conda.io/projects/conda/en/latest/user-guide/concepts/pkg-specs.html#supported-version-strings\nexport type CondaVersion = string;\n\nexport interface CondaPackage {\n app_entry: Record<string, unknown>;\n conda_platforms: string[];\n full_name: string;\n owner: CondaPackageOwner;\n home: string;\n source_git_url: string;\n source_git_tag: string;\n app_type: Record<string, unknown>;\n upvoted: number;\n id: string;\n app_summary: Record<string, unknown>;\n public: boolean;\n revision: number;\n files: CondaFile[];\n package_types: string[];\n description: string;\n releases: CondaRelease[];\n html_url: string;\n builds: string[];\n watchers: number;\n dev_url: string;\n name: string;\n license: string;\n versions: CondaVersion[];\n url: string;\n created_at: string;\n modified_at: string;\n latest_version: CondaVersion;\n summary: string;\n license_url: string;\n doc_url: string;\n}\n\nexport interface CondaPackageOwner {\n description: string;\n url: string;\n company: string;\n user_type: string;\n location: string;\n login: string;\n created_at: string;\n name: string;\n}\n\nexport interface CondaRelease {\n version: CondaVersion;\n distributions: string[];\n full_name: string;\n}\n\nexport interface CondaFile {\n description: string;\n basename: string;\n labels: string[];\n dependencies: string[];\n distribution_type: string;\n full_name: string;\n owner: string;\n size: number;\n upload_time: string;\n ndownloads: number;\n download_url: string;\n version: CondaVersion;\n md5: string;\n type: string;\n attrs: {\n build_number: number;\n name: string;\n license: string;\n timestamp: number;\n source_url: string;\n platform: string;\n depends: string[];\n version: CondaVersion;\n subdir: string;\n build: string;\n sha256: string;\n arch: string;\n md5: string;\n size: number;\n };\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/conda/types.ts"],"names":[],"mappings":";AAAA;;EAEE","sourcesContent":["/* For values of unknown type that are not used with renovate,\n any object is accepted in the types defined here\n*/\n\n// This can be improved with the documentation at\n// https://docs.conda.io/projects/conda/en/latest/user-guide/concepts/pkg-specs.html#supported-version-strings\nexport type CondaVersion = string;\n\nexport interface CondaPackage {\n app_entry: Record<string, unknown>;\n conda_platforms: string[];\n full_name: string;\n owner: CondaPackageOwner;\n home: string;\n app_type: Record<string, unknown>;\n upvoted: number;\n id: string;\n app_summary: Record<string, unknown>;\n public: boolean;\n revision: number;\n files: CondaFile[];\n package_types: string[];\n description: string;\n releases: CondaRelease[];\n html_url: string;\n builds: string[];\n watchers: number;\n dev_url: string;\n name: string;\n license: string;\n versions: CondaVersion[];\n url: string;\n created_at: string;\n modified_at: string;\n latest_version: CondaVersion;\n summary: string;\n doc_url: string;\n}\n\nexport interface CondaPackageOwner {\n description: string;\n url: string;\n company: string;\n user_type: string;\n location: string;\n login: string;\n created_at: string;\n name: string;\n}\n\nexport interface CondaRelease {\n version: CondaVersion;\n distributions: string[];\n full_name: string;\n}\n\nexport interface CondaFile {\n description?: string | null;\n basename: string;\n labels: string[];\n dependencies: string[];\n distribution_type: string;\n full_name: string;\n owner: string;\n size: number;\n upload_time: string;\n ndownloads: number;\n download_url: string;\n version: CondaVersion;\n md5: string;\n type: string;\n}\n"]}
@@ -18,7 +18,7 @@ class CpanDatasource extends datasource_1.Datasource {
18
18
  releaseTimestampSupport = true;
19
19
  releaseTimestampNote = 'The release timestamp is determined from the `date` field in the results.';
20
20
  async getReleases({ packageName, registryUrl, }) {
21
- // istanbul ignore if
21
+ /* v8 ignore next 3 -- should never happen */
22
22
  if (!registryUrl) {
23
23
  return null;
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/cpan/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { cache } from '../../../util/cache/package/decorator';\nimport { joinUrlParts } from '../../../util/url';\nimport * as perlVersioning from '../../versioning/perl';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport { MetaCpanApiFileSearchResponse } from './schema';\nimport type { CpanRelease } from './types';\n\nexport class CpanDatasource extends Datasource {\n static readonly id = 'cpan';\n\n constructor() {\n super(CpanDatasource.id);\n }\n\n override readonly customRegistrySupport = false;\n\n override readonly defaultRegistryUrls = ['https://fastapi.metacpan.org/'];\n\n override readonly defaultVersioning = perlVersioning.id;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `date` field in the results.';\n\n @cache({\n namespace: `datasource-${CpanDatasource.id}`,\n key: ({ packageName }: GetReleasesConfig) => `${packageName}`,\n })\n override async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n // istanbul ignore if\n if (!registryUrl) {\n return null;\n }\n\n let result: ReleaseResult | null = null;\n const searchUrl = joinUrlParts(registryUrl, 'v1/file/_search');\n\n let releases: CpanRelease[] | null = null;\n try {\n const body = {\n query: {\n filtered: {\n query: { match_all: {} },\n filter: {\n and: [\n { term: { 'module.name': packageName } },\n { term: { 'module.authorized': true } },\n { exists: { field: 'module.associated_pod' } },\n ],\n },\n },\n },\n _source: [\n 'module.name',\n 'module.version',\n 'distribution',\n 'date',\n 'deprecated',\n 'maturity',\n 'status',\n ],\n sort: [{ date: 'desc' }],\n };\n\n releases = (\n await this.http.postJson(\n searchUrl,\n { body },\n MetaCpanApiFileSearchResponse,\n )\n ).body;\n } catch (err) {\n this.handleGenericErrors(err);\n }\n\n let latestDistribution: string | null = null;\n let latestVersion: string | null = null;\n if (releases) {\n for (const release of releases) {\n if (!latestDistribution) {\n latestDistribution = release.distribution;\n }\n if (!latestVersion && release.isLatest) {\n latestVersion = release.version;\n }\n }\n }\n if (releases.length > 0 && latestDistribution) {\n result = {\n releases,\n changelogUrl: `https://metacpan.org/dist/${latestDistribution}/changes`,\n homepage: `https://metacpan.org/pod/${packageName}`,\n };\n\n if (latestVersion) {\n result.tags ??= {};\n result.tags.latest = latestVersion;\n }\n }\n\n return result;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/cpan/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { cache } from '../../../util/cache/package/decorator';\nimport { joinUrlParts } from '../../../util/url';\nimport * as perlVersioning from '../../versioning/perl';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport { MetaCpanApiFileSearchResponse } from './schema';\nimport type { CpanRelease } from './types';\n\nexport class CpanDatasource extends Datasource {\n static readonly id = 'cpan';\n\n constructor() {\n super(CpanDatasource.id);\n }\n\n override readonly customRegistrySupport = false;\n\n override readonly defaultRegistryUrls = ['https://fastapi.metacpan.org/'];\n\n override readonly defaultVersioning = perlVersioning.id;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `date` field in the results.';\n\n @cache({\n namespace: `datasource-${CpanDatasource.id}`,\n key: ({ packageName }: GetReleasesConfig) => `${packageName}`,\n })\n override async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n let result: ReleaseResult | null = null;\n const searchUrl = joinUrlParts(registryUrl, 'v1/file/_search');\n\n let releases: CpanRelease[] | null = null;\n try {\n const body = {\n query: {\n filtered: {\n query: { match_all: {} },\n filter: {\n and: [\n { term: { 'module.name': packageName } },\n { term: { 'module.authorized': true } },\n { exists: { field: 'module.associated_pod' } },\n ],\n },\n },\n },\n _source: [\n 'module.name',\n 'module.version',\n 'distribution',\n 'date',\n 'deprecated',\n 'maturity',\n 'status',\n ],\n sort: [{ date: 'desc' }],\n };\n\n releases = (\n await this.http.postJson(\n searchUrl,\n { body },\n MetaCpanApiFileSearchResponse,\n )\n ).body;\n } catch (err) {\n this.handleGenericErrors(err);\n }\n\n let latestDistribution: string | null = null;\n let latestVersion: string | null = null;\n if (releases) {\n for (const release of releases) {\n if (!latestDistribution) {\n latestDistribution = release.distribution;\n }\n if (!latestVersion && release.isLatest) {\n latestVersion = release.version;\n }\n }\n }\n if (releases.length > 0 && latestDistribution) {\n result = {\n releases,\n changelogUrl: `https://metacpan.org/dist/${latestDistribution}/changes`,\n homepage: `https://metacpan.org/pod/${packageName}`,\n };\n\n if (latestVersion) {\n result.tags ??= {};\n result.tags.latest = latestVersion;\n }\n }\n\n return result;\n }\n}\n"]}
@@ -28,7 +28,7 @@ class CrateDatasource extends datasource_1.Datasource {
28
28
  sourceUrlSupport = 'package';
29
29
  sourceUrlNote = 'The source URL is determined from the `repository` field in the results.';
30
30
  async getReleases({ packageName, registryUrl, }) {
31
- // istanbul ignore if
31
+ /* v8 ignore next 6 -- should never happen */
32
32
  if (!registryUrl) {
33
33
  logger_1.logger.warn('crate datasource: No registryUrl specified, cannot perform getReleases');
34
34
  return null;
@@ -161,7 +161,7 @@ class CrateDatasource extends datasource_1.Datasource {
161
161
  * url and clones it to cache.
162
162
  */
163
163
  static async fetchRegistryInfo({ packageName, registryUrl, }) {
164
- // istanbul ignore if
164
+ /* v8 ignore next 3 -- should never happen */
165
165
  if (!registryUrl) {
166
166
  return null;
167
167
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/crate/index.ts"],"names":[],"mappings":"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","sourcesContent":["import Git from 'simple-git';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport * as memCache from '../../../util/cache/memory';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { privateCacheDir, readCacheFile } from '../../../util/fs';\nimport { simpleGitConfig } from '../../../util/git/config';\nimport { toSha256 } from '../../../util/hash';\nimport { newlineRegex, regEx } from '../../../util/regex';\nimport { joinUrlParts, parseUrl } from '../../../util/url';\nimport * as cargoVersioning from '../../versioning/cargo';\nimport { Datasource } from '../datasource';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n Release,\n ReleaseResult,\n} from '../types';\nimport { ReleaseTimestampSchema } from './schema';\nimport type {\n CrateMetadata,\n CrateRecord,\n RegistryFlavor,\n RegistryInfo,\n} from './types';\n\nexport class CrateDatasource extends Datasource {\n static readonly id = 'crate';\n\n constructor() {\n super(CrateDatasource.id);\n }\n\n override defaultRegistryUrls = ['https://crates.io'];\n\n override defaultVersioning = cargoVersioning.id;\n\n static readonly CRATES_IO_BASE_URL =\n 'https://raw.githubusercontent.com/rust-lang/crates.io-index/master/';\n\n static readonly CRATES_IO_API_BASE_URL = 'https://crates.io/api/v1/';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `repository` field in the results.';\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `${registryUrl}/${packageName}`,\n cacheable: ({ registryUrl }: GetReleasesConfig) =>\n CrateDatasource.areReleasesCacheable(registryUrl),\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n // istanbul ignore if\n if (!registryUrl) {\n logger.warn(\n 'crate datasource: No registryUrl specified, cannot perform getReleases',\n );\n return null;\n }\n\n const registryInfo = await CrateDatasource.fetchRegistryInfo({\n packageName,\n registryUrl,\n });\n if (!registryInfo) {\n logger.debug(`Could not fetch registry info from ${registryUrl}`);\n return null;\n }\n\n const dependencyUrl = CrateDatasource.getDependencyUrl(\n registryInfo,\n packageName,\n );\n\n const payload = await this.fetchCrateRecordsPayload(\n registryInfo,\n packageName,\n );\n const lines = payload\n .split(newlineRegex) // break into lines\n .map((line) => line.trim()) // remove whitespace\n .filter((line) => line.length !== 0) // remove empty lines\n .map((line) => JSON.parse(line) as CrateRecord); // parse\n\n const metadata = await this.getCrateMetadata(registryInfo, packageName);\n\n const result: ReleaseResult = {\n dependencyUrl,\n releases: [],\n };\n\n if (metadata?.homepage) {\n result.homepage = metadata.homepage;\n }\n\n if (metadata?.repository) {\n result.sourceUrl = metadata.repository;\n }\n\n result.releases = lines\n .map((version) => {\n const release: Release = {\n version: version.vers.replace(/\\+.*$/, ''),\n };\n if (version.yanked) {\n release.isDeprecated = true;\n }\n if (version.rust_version) {\n release.constraints = {\n rust: [version.rust_version],\n };\n }\n return release;\n })\n .filter((release) => release.version);\n if (!result.releases.length) {\n return null;\n }\n\n return result;\n }\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}-metadata`,\n key: (info: RegistryInfo, packageName: string) =>\n `${info.rawUrl}/${packageName}`,\n cacheable: (info: RegistryInfo) =>\n CrateDatasource.areReleasesCacheable(info.rawUrl),\n ttlMinutes: 24 * 60, // 24 hours\n })\n public async getCrateMetadata(\n info: RegistryInfo,\n packageName: string,\n ): Promise<CrateMetadata | null> {\n if (info.flavor !== 'crates.io') {\n return null;\n }\n\n // The `?include=` suffix is required to avoid unnecessary database queries\n // on the crates.io server. This lets us work around the regular request\n // throttling of one request per second.\n const crateUrl = `${CrateDatasource.CRATES_IO_API_BASE_URL}crates/${packageName}?include=`;\n\n logger.debug(\n { crateUrl, packageName, registryUrl: info.rawUrl },\n 'downloading crate metadata',\n );\n\n try {\n interface Response {\n crate: CrateMetadata;\n }\n const response = await this.http.getJsonUnchecked<Response>(crateUrl);\n return response.body.crate;\n } catch (err) {\n logger.warn(\n { err, packageName, registryUrl: info.rawUrl },\n 'failed to download crate metadata',\n );\n }\n\n return null;\n }\n\n public async fetchCrateRecordsPayload(\n info: RegistryInfo,\n packageName: string,\n ): Promise<string> {\n if (info.clonePath) {\n const path = upath.join(\n info.clonePath,\n ...CrateDatasource.getIndexSuffix(packageName),\n );\n return readCacheFile(path, 'utf8');\n }\n\n const baseUrl =\n info.flavor === 'crates.io'\n ? CrateDatasource.CRATES_IO_BASE_URL\n : info.rawUrl;\n\n if (info.flavor === 'crates.io' || info.isSparse) {\n const packageSuffix = CrateDatasource.getIndexSuffix(\n packageName.toLowerCase(),\n );\n const crateUrl = joinUrlParts(baseUrl, ...packageSuffix);\n try {\n return (await this.http.getText(crateUrl)).body;\n } catch (err) {\n this.handleGenericErrors(err);\n }\n }\n throw new Error(`unsupported crate registry flavor: ${info.flavor}`);\n }\n\n /**\n * Computes the dependency URL for a crate, given\n * registry information\n */\n private static getDependencyUrl(\n info: RegistryInfo,\n packageName: string,\n ): string {\n switch (info.flavor) {\n case 'crates.io':\n return `https://crates.io/crates/${packageName}`;\n case 'cloudsmith': {\n // input: https://dl.cloudsmith.io/basic/$org/$repo/cargo/index.git\n const tokens = info.url.pathname.split('/');\n const org = tokens[2];\n const repo = tokens[3];\n return `https://cloudsmith.io/~${org}/repos/${repo}/packages/detail/cargo/${packageName}`;\n }\n default:\n return `${info.rawUrl}/${packageName}`;\n }\n }\n\n /**\n * Given a Git URL, computes a semi-human-readable name for a folder in which to\n * clone the repository.\n */\n private static cacheDirFromUrl(url: URL): string {\n const proto = url.protocol.replace(regEx(/:$/), '');\n const host = url.hostname;\n const hash = toSha256(url.pathname).substring(0, 7);\n\n return `crate-registry-${proto}-${host}-${hash}`;\n }\n\n private static isSparseRegistry(url: string): boolean {\n const parsed = parseUrl(url);\n if (!parsed) {\n return false;\n }\n return parsed.protocol.startsWith('sparse+');\n }\n\n /**\n * Fetches information about a registry, by url.\n * If no url is given, assumes crates.io.\n * If an url is given, assumes it's a valid Git repository\n * url and clones it to cache.\n */\n private static async fetchRegistryInfo({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<RegistryInfo | null> {\n // istanbul ignore if\n if (!registryUrl) {\n return null;\n }\n\n const isSparseRegistry = CrateDatasource.isSparseRegistry(registryUrl);\n const registryFetchUrl = isSparseRegistry\n ? registryUrl.replace(/^sparse\\+/, '')\n : registryUrl;\n\n const url = parseUrl(registryFetchUrl);\n if (!url) {\n logger.debug(`Could not parse registry URL ${registryFetchUrl}`);\n return null;\n }\n\n let flavor: RegistryFlavor;\n if (url.hostname === 'crates.io') {\n flavor = 'crates.io';\n } else if (url.hostname === 'dl.cloudsmith.io') {\n flavor = 'cloudsmith';\n } else {\n flavor = 'other';\n }\n\n const registry: RegistryInfo = {\n flavor,\n rawUrl: registryFetchUrl,\n url,\n isSparse: isSparseRegistry,\n };\n\n if (\n registry.flavor !== 'crates.io' &&\n !GlobalConfig.get('allowCustomCrateRegistries')\n ) {\n logger.warn(\n 'crate datasource: allowCustomCrateRegistries=true is required for registries other than crates.io, bailing out',\n );\n return null;\n }\n if (registry.flavor !== 'crates.io' && !registry.isSparse) {\n const cacheKey = `crate-datasource/registry-clone-path/${registryFetchUrl}`;\n const cacheKeyForError = `crate-datasource/registry-clone-path/${registryFetchUrl}/error`;\n\n // We need to ensure we don't run `git clone` in parallel. Therefore we store\n // a promise of the running operation in the mem cache, which in the end resolves\n // to the file path of the cloned repository.\n\n const clonePathPromise: Promise<string> | null = memCache.get(cacheKey);\n let clonePath: string;\n\n if (clonePathPromise) {\n clonePath = await clonePathPromise;\n } else {\n clonePath = upath.join(\n privateCacheDir(),\n CrateDatasource.cacheDirFromUrl(url),\n );\n logger.info(\n { clonePath, registryFetchUrl },\n `Cloning private cargo registry`,\n );\n\n const git = Git({ ...simpleGitConfig(), maxConcurrentProcesses: 1 });\n const clonePromise = git.clone(registryFetchUrl, clonePath, {\n '--depth': 1,\n });\n\n memCache.set(\n cacheKey,\n clonePromise.then(() => clonePath).catch(() => null),\n );\n\n try {\n await clonePromise;\n } catch (err) {\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'failed cloning git registry',\n );\n memCache.set(cacheKeyForError, err);\n\n return null;\n }\n }\n\n if (!clonePath) {\n const err = memCache.get(cacheKeyForError);\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'Previous git clone failed, bailing out.',\n );\n\n return null;\n }\n\n registry.clonePath = clonePath;\n }\n\n return registry;\n }\n\n private static areReleasesCacheable(\n registryUrl: string | undefined,\n ): boolean {\n // We only cache public releases, we don't want to cache private\n // cloned data between runs.\n return registryUrl === 'https://crates.io';\n }\n\n public static getIndexSuffix(packageName: string): string[] {\n const len = packageName.length;\n\n if (len === 1) {\n return ['1', packageName];\n }\n if (len === 2) {\n return ['2', packageName];\n }\n if (len === 3) {\n return ['3', packageName[0], packageName];\n }\n\n return [packageName.slice(0, 2), packageName.slice(2, 4), packageName];\n }\n\n @cache({\n namespace: `datasource-crate`,\n key: (\n { registryUrl, packageName }: PostprocessReleaseConfig,\n { version }: Release,\n ) => `postprocessRelease:${registryUrl}:${packageName}:${version}`,\n ttlMinutes: 7 * 24 * 60,\n cacheable: ({ registryUrl }: PostprocessReleaseConfig, _: Release) =>\n registryUrl === 'https://crates.io',\n })\n override async postprocessRelease(\n { packageName, registryUrl }: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n if (registryUrl !== 'https://crates.io') {\n return release;\n }\n\n const url = `https://crates.io/api/v1/crates/${packageName}/${release.version}`;\n const { body: releaseTimestamp } = await this.http.getJson(\n url,\n ReleaseTimestampSchema,\n );\n release.releaseTimestamp = releaseTimestamp;\n return release;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/crate/index.ts"],"names":[],"mappings":";;;;AAAA,oEAA6B;AAC7B,0DAA0B;AAC1B,mDAAsD;AACtD,4CAAyC;AACzC,6EAAuD;AACvD,qEAA8D;AAC9D,yCAAkE;AAClE,qDAA2D;AAC3D,6CAA8C;AAC9C,+CAA0D;AAC1D,2CAA2D;AAC3D,gFAA0D;AAC1D,8CAA2C;AAQ3C,qCAAkD;AAQlD,MAAa,eAAgB,SAAQ,uBAAU;IAC7C,MAAM,CAAU,EAAE,GAAG,OAAO,CAAC;IAE7B;QACE,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAEQ,mBAAmB,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAE5C,iBAAiB,GAAG,eAAe,CAAC,EAAE,CAAC;IAEhD,MAAM,CAAU,kBAAkB,GAChC,qEAAqE,CAAC;IAExE,MAAM,CAAU,sBAAsB,GAAG,2BAA2B,CAAC;IAEnD,gBAAgB,GAAG,SAAS,CAAC;IAC7B,aAAa,GAC7B,0EAA0E,CAAC;IAUvE,AAAN,KAAK,CAAC,WAAW,CAAC,EAChB,WAAW,EACX,WAAW,GACO;QAClB,6CAA6C;QAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,eAAM,CAAC,IAAI,CACT,wEAAwE,CACzE,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,iBAAiB,CAAC;YAC3D,WAAW;YACX,WAAW;SACZ,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,eAAM,CAAC,KAAK,CAAC,sCAAsC,WAAW,EAAE,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,aAAa,GAAG,eAAe,CAAC,gBAAgB,CACpD,YAAY,EACZ,WAAW,CACZ,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,wBAAwB,CACjD,YAAY,EACZ,WAAW,CACZ,CAAC;QACF,MAAM,KAAK,GAAG,OAAO;aAClB,KAAK,CAAC,oBAAY,CAAC,CAAC,mBAAmB;aACvC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,oBAAoB;aAC/C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,qBAAqB;aACzD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgB,CAAC,CAAC,CAAC,QAAQ;QAE3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAExE,MAAM,MAAM,GAAkB;YAC5B,aAAa;YACb,QAAQ,EAAE,EAAE;SACb,CAAC;QAEF,IAAI,QAAQ,EAAE,QAAQ,EAAE,CAAC;YACvB,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACtC,CAAC;QAED,IAAI,QAAQ,EAAE,UAAU,EAAE,CAAC;YACzB,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC;QACzC,CAAC;QAED,MAAM,CAAC,QAAQ,GAAG,KAAK;aACpB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACf,MAAM,OAAO,GAAY;gBACvB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;aAC3C,CAAC;YACF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;YAC9B,CAAC;YACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzB,OAAO,CAAC,WAAW,GAAG;oBACpB,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;iBAC7B,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAUY,AAAN,KAAK,CAAC,gBAAgB,CAC3B,IAAkB,EAClB,WAAmB;QAEnB,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2EAA2E;QAC3E,wEAAwE;QACxE,wCAAwC;QACxC,MAAM,QAAQ,GAAG,GAAG,eAAe,CAAC,sBAAsB,UAAU,WAAW,WAAW,CAAC;QAE3F,eAAM,CAAC,KAAK,CACV,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,EACnD,4BAA4B,CAC7B,CAAC;QAEF,IAAI,CAAC;YAIH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAW,QAAQ,CAAC,CAAC;YACtE,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,eAAM,CAAC,IAAI,CACT,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,EAC9C,mCAAmC,CACpC,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,wBAAwB,CACnC,IAAkB,EAClB,WAAmB;QAEnB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,eAAK,CAAC,IAAI,CACrB,IAAI,CAAC,SAAS,EACd,GAAG,eAAe,CAAC,cAAc,CAAC,WAAW,CAAC,CAC/C,CAAC;YACF,OAAO,IAAA,kBAAa,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,KAAK,WAAW;YACzB,CAAC,CAAC,eAAe,CAAC,kBAAkB;YACpC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAElB,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjD,MAAM,aAAa,GAAG,eAAe,CAAC,cAAc,CAClD,WAAW,CAAC,WAAW,EAAE,CAC1B,CAAC;YACF,MAAM,QAAQ,GAAG,IAAA,kBAAY,EAAC,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC;YACzD,IAAI,CAAC;gBACH,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YAClD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,sCAAsC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,gBAAgB,CAC7B,IAAkB,EAClB,WAAmB;QAEnB,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,WAAW;gBACd,OAAO,4BAA4B,WAAW,EAAE,CAAC;YACnD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,mEAAmE;gBACnE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvB,OAAO,0BAA0B,GAAG,UAAU,IAAI,0BAA0B,WAAW,EAAE,CAAC;YAC5F,CAAC;YACD;gBACE,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,eAAe,CAAC,GAAQ;QACrC,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAA,aAAK,EAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAA,eAAQ,EAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEpD,OAAO,kBAAkB,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;IACnD,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,GAAW;QACzC,MAAM,MAAM,GAAG,IAAA,cAAQ,EAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,EACrC,WAAW,EACX,WAAW,GACO;QAClB,6CAA6C;QAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,gBAAgB,GAAG,eAAe,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACvE,MAAM,gBAAgB,GAAG,gBAAgB;YACvC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YACtC,CAAC,CAAC,WAAW,CAAC;QAEhB,MAAM,GAAG,GAAG,IAAA,cAAQ,EAAC,gBAAgB,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,eAAM,CAAC,KAAK,CAAC,gCAAgC,gBAAgB,EAAE,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,MAAsB,CAAC;QAC3B,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;YACjC,MAAM,GAAG,WAAW,CAAC;QACvB,CAAC;aAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,kBAAkB,EAAE,CAAC;YAC/C,MAAM,GAAG,YAAY,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,OAAO,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAiB;YAC7B,MAAM;YACN,MAAM,EAAE,gBAAgB;YACxB,GAAG;YACH,QAAQ,EAAE,gBAAgB;SAC3B,CAAC;QAEF,IACE,QAAQ,CAAC,MAAM,KAAK,WAAW;YAC/B,CAAC,qBAAY,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAC/C,CAAC;YACD,eAAM,CAAC,IAAI,CACT,gHAAgH,CACjH,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC1D,MAAM,QAAQ,GAAG,wCAAwC,gBAAgB,EAAE,CAAC;YAC5E,MAAM,gBAAgB,GAAG,wCAAwC,gBAAgB,QAAQ,CAAC;YAE1F,6EAA6E;YAC7E,iFAAiF;YACjF,6CAA6C;YAE7C,MAAM,gBAAgB,GAA2B,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxE,IAAI,SAAiB,CAAC;YAEtB,IAAI,gBAAgB,EAAE,CAAC;gBACrB,SAAS,GAAG,MAAM,gBAAgB,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,eAAK,CAAC,IAAI,CACpB,IAAA,oBAAe,GAAE,EACjB,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,CACrC,CAAC;gBACF,eAAM,CAAC,IAAI,CACT,EAAE,SAAS,EAAE,gBAAgB,EAAE,EAC/B,gCAAgC,CACjC,CAAC;gBAEF,MAAM,GAAG,GAAG,IAAA,oBAAG,EAAC,EAAE,GAAG,IAAA,wBAAe,GAAE,EAAE,sBAAsB,EAAE,CAAC,EAAE,CAAC,CAAC;gBACrE,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,SAAS,EAAE;oBAC1D,SAAS,EAAE,CAAC;iBACb,CAAC,CAAC;gBAEH,QAAQ,CAAC,GAAG,CACV,QAAQ,EACR,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CACrD,CAAC;gBAEF,IAAI,CAAC;oBACH,MAAM,YAAY,CAAC;gBACrB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,eAAM,CAAC,IAAI,CACT,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE,EACtC,6BAA6B,CAC9B,CAAC;oBACF,QAAQ,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;oBAEpC,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAED,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAC3C,eAAM,CAAC,IAAI,CACT,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE,EACtC,yCAAyC,CAC1C,CAAC;gBAEF,OAAO,IAAI,CAAC;YACd,CAAC;YAED,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;QACjC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,MAAM,CAAC,oBAAoB,CACjC,WAA+B;QAE/B,gEAAgE;QAChE,4BAA4B;QAC5B,OAAO,WAAW,KAAK,mBAAmB,CAAC;IAC7C,CAAC;IAEM,MAAM,CAAC,cAAc,CAAC,WAAmB;QAC9C,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC;QAE/B,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IACzE,CAAC;IAYc,AAAN,KAAK,CAAC,kBAAkB,CAC/B,EAAE,WAAW,EAAE,WAAW,EAA4B,EACtD,OAAgB;QAEhB,IAAI,WAAW,KAAK,mBAAmB,EAAE,CAAC;YACxC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,GAAG,GAAG,mCAAmC,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAChF,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CACxD,GAAG,EACH,+BAAsB,CACvB,CAAC;QACF,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAC5C,OAAO,OAAO,CAAC;IACjB,CAAC;;AA5XH,0CA6XC;AAjWO;IARL,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,cAAc,eAAe,CAAC,EAAE,EAAE;QAC7C,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,EAAqB,EAAE,EAAE;QACvD,uBAAuB;QACvB,GAAG,WAAW,IAAI,WAAW,EAAE;QACjC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAqB,EAAE,EAAE,CAChD,eAAe,CAAC,oBAAoB,CAAC,WAAW,CAAC;KACpD,CAAC;kDAyED;AAUY;IARZ,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,cAAc,eAAe,CAAC,EAAE,WAAW;QACtD,GAAG,EAAE,CAAC,IAAkB,EAAE,WAAmB,EAAE,EAAE,CAC/C,GAAG,IAAI,CAAC,MAAM,IAAI,WAAW,EAAE;QACjC,SAAS,EAAE,CAAC,IAAkB,EAAE,EAAE,CAChC,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;QACnD,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE,WAAW;KACjC,CAAC;uDAiCD;AA+Nc;IAVd,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,kBAAkB;QAC7B,GAAG,EAAE,CACH,EAAE,WAAW,EAAE,WAAW,EAA4B,EACtD,EAAE,OAAO,EAAW,EACpB,EAAE,CAAC,sBAAsB,WAAW,IAAI,WAAW,IAAI,OAAO,EAAE;QAClE,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE;QACvB,SAAS,EAAE,CAAC,EAAE,WAAW,EAA4B,EAAE,CAAU,EAAE,EAAE,CACnE,WAAW,KAAK,mBAAmB;KACtC,CAAC;yDAgBD","sourcesContent":["import Git from 'simple-git';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global';\nimport { logger } from '../../../logger';\nimport * as memCache from '../../../util/cache/memory';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { privateCacheDir, readCacheFile } from '../../../util/fs';\nimport { simpleGitConfig } from '../../../util/git/config';\nimport { toSha256 } from '../../../util/hash';\nimport { newlineRegex, regEx } from '../../../util/regex';\nimport { joinUrlParts, parseUrl } from '../../../util/url';\nimport * as cargoVersioning from '../../versioning/cargo';\nimport { Datasource } from '../datasource';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n Release,\n ReleaseResult,\n} from '../types';\nimport { ReleaseTimestampSchema } from './schema';\nimport type {\n CrateMetadata,\n CrateRecord,\n RegistryFlavor,\n RegistryInfo,\n} from './types';\n\nexport class CrateDatasource extends Datasource {\n static readonly id = 'crate';\n\n constructor() {\n super(CrateDatasource.id);\n }\n\n override defaultRegistryUrls = ['https://crates.io'];\n\n override defaultVersioning = cargoVersioning.id;\n\n static readonly CRATES_IO_BASE_URL =\n 'https://raw.githubusercontent.com/rust-lang/crates.io-index/master/';\n\n static readonly CRATES_IO_API_BASE_URL = 'https://crates.io/api/v1/';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `repository` field in the results.';\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}`,\n key: ({ registryUrl, packageName }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `${registryUrl}/${packageName}`,\n cacheable: ({ registryUrl }: GetReleasesConfig) =>\n CrateDatasource.areReleasesCacheable(registryUrl),\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n /* v8 ignore next 6 -- should never happen */\n if (!registryUrl) {\n logger.warn(\n 'crate datasource: No registryUrl specified, cannot perform getReleases',\n );\n return null;\n }\n\n const registryInfo = await CrateDatasource.fetchRegistryInfo({\n packageName,\n registryUrl,\n });\n if (!registryInfo) {\n logger.debug(`Could not fetch registry info from ${registryUrl}`);\n return null;\n }\n\n const dependencyUrl = CrateDatasource.getDependencyUrl(\n registryInfo,\n packageName,\n );\n\n const payload = await this.fetchCrateRecordsPayload(\n registryInfo,\n packageName,\n );\n const lines = payload\n .split(newlineRegex) // break into lines\n .map((line) => line.trim()) // remove whitespace\n .filter((line) => line.length !== 0) // remove empty lines\n .map((line) => JSON.parse(line) as CrateRecord); // parse\n\n const metadata = await this.getCrateMetadata(registryInfo, packageName);\n\n const result: ReleaseResult = {\n dependencyUrl,\n releases: [],\n };\n\n if (metadata?.homepage) {\n result.homepage = metadata.homepage;\n }\n\n if (metadata?.repository) {\n result.sourceUrl = metadata.repository;\n }\n\n result.releases = lines\n .map((version) => {\n const release: Release = {\n version: version.vers.replace(/\\+.*$/, ''),\n };\n if (version.yanked) {\n release.isDeprecated = true;\n }\n if (version.rust_version) {\n release.constraints = {\n rust: [version.rust_version],\n };\n }\n return release;\n })\n .filter((release) => release.version);\n if (!result.releases.length) {\n return null;\n }\n\n return result;\n }\n\n @cache({\n namespace: `datasource-${CrateDatasource.id}-metadata`,\n key: (info: RegistryInfo, packageName: string) =>\n `${info.rawUrl}/${packageName}`,\n cacheable: (info: RegistryInfo) =>\n CrateDatasource.areReleasesCacheable(info.rawUrl),\n ttlMinutes: 24 * 60, // 24 hours\n })\n public async getCrateMetadata(\n info: RegistryInfo,\n packageName: string,\n ): Promise<CrateMetadata | null> {\n if (info.flavor !== 'crates.io') {\n return null;\n }\n\n // The `?include=` suffix is required to avoid unnecessary database queries\n // on the crates.io server. This lets us work around the regular request\n // throttling of one request per second.\n const crateUrl = `${CrateDatasource.CRATES_IO_API_BASE_URL}crates/${packageName}?include=`;\n\n logger.debug(\n { crateUrl, packageName, registryUrl: info.rawUrl },\n 'downloading crate metadata',\n );\n\n try {\n interface Response {\n crate: CrateMetadata;\n }\n const response = await this.http.getJsonUnchecked<Response>(crateUrl);\n return response.body.crate;\n } catch (err) {\n logger.warn(\n { err, packageName, registryUrl: info.rawUrl },\n 'failed to download crate metadata',\n );\n }\n\n return null;\n }\n\n public async fetchCrateRecordsPayload(\n info: RegistryInfo,\n packageName: string,\n ): Promise<string> {\n if (info.clonePath) {\n const path = upath.join(\n info.clonePath,\n ...CrateDatasource.getIndexSuffix(packageName),\n );\n return readCacheFile(path, 'utf8');\n }\n\n const baseUrl =\n info.flavor === 'crates.io'\n ? CrateDatasource.CRATES_IO_BASE_URL\n : info.rawUrl;\n\n if (info.flavor === 'crates.io' || info.isSparse) {\n const packageSuffix = CrateDatasource.getIndexSuffix(\n packageName.toLowerCase(),\n );\n const crateUrl = joinUrlParts(baseUrl, ...packageSuffix);\n try {\n return (await this.http.getText(crateUrl)).body;\n } catch (err) {\n this.handleGenericErrors(err);\n }\n }\n throw new Error(`unsupported crate registry flavor: ${info.flavor}`);\n }\n\n /**\n * Computes the dependency URL for a crate, given\n * registry information\n */\n private static getDependencyUrl(\n info: RegistryInfo,\n packageName: string,\n ): string {\n switch (info.flavor) {\n case 'crates.io':\n return `https://crates.io/crates/${packageName}`;\n case 'cloudsmith': {\n // input: https://dl.cloudsmith.io/basic/$org/$repo/cargo/index.git\n const tokens = info.url.pathname.split('/');\n const org = tokens[2];\n const repo = tokens[3];\n return `https://cloudsmith.io/~${org}/repos/${repo}/packages/detail/cargo/${packageName}`;\n }\n default:\n return `${info.rawUrl}/${packageName}`;\n }\n }\n\n /**\n * Given a Git URL, computes a semi-human-readable name for a folder in which to\n * clone the repository.\n */\n private static cacheDirFromUrl(url: URL): string {\n const proto = url.protocol.replace(regEx(/:$/), '');\n const host = url.hostname;\n const hash = toSha256(url.pathname).substring(0, 7);\n\n return `crate-registry-${proto}-${host}-${hash}`;\n }\n\n private static isSparseRegistry(url: string): boolean {\n const parsed = parseUrl(url);\n if (!parsed) {\n return false;\n }\n return parsed.protocol.startsWith('sparse+');\n }\n\n /**\n * Fetches information about a registry, by url.\n * If no url is given, assumes crates.io.\n * If an url is given, assumes it's a valid Git repository\n * url and clones it to cache.\n */\n private static async fetchRegistryInfo({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<RegistryInfo | null> {\n /* v8 ignore next 3 -- should never happen */\n if (!registryUrl) {\n return null;\n }\n\n const isSparseRegistry = CrateDatasource.isSparseRegistry(registryUrl);\n const registryFetchUrl = isSparseRegistry\n ? registryUrl.replace(/^sparse\\+/, '')\n : registryUrl;\n\n const url = parseUrl(registryFetchUrl);\n if (!url) {\n logger.debug(`Could not parse registry URL ${registryFetchUrl}`);\n return null;\n }\n\n let flavor: RegistryFlavor;\n if (url.hostname === 'crates.io') {\n flavor = 'crates.io';\n } else if (url.hostname === 'dl.cloudsmith.io') {\n flavor = 'cloudsmith';\n } else {\n flavor = 'other';\n }\n\n const registry: RegistryInfo = {\n flavor,\n rawUrl: registryFetchUrl,\n url,\n isSparse: isSparseRegistry,\n };\n\n if (\n registry.flavor !== 'crates.io' &&\n !GlobalConfig.get('allowCustomCrateRegistries')\n ) {\n logger.warn(\n 'crate datasource: allowCustomCrateRegistries=true is required for registries other than crates.io, bailing out',\n );\n return null;\n }\n if (registry.flavor !== 'crates.io' && !registry.isSparse) {\n const cacheKey = `crate-datasource/registry-clone-path/${registryFetchUrl}`;\n const cacheKeyForError = `crate-datasource/registry-clone-path/${registryFetchUrl}/error`;\n\n // We need to ensure we don't run `git clone` in parallel. Therefore we store\n // a promise of the running operation in the mem cache, which in the end resolves\n // to the file path of the cloned repository.\n\n const clonePathPromise: Promise<string> | null = memCache.get(cacheKey);\n let clonePath: string;\n\n if (clonePathPromise) {\n clonePath = await clonePathPromise;\n } else {\n clonePath = upath.join(\n privateCacheDir(),\n CrateDatasource.cacheDirFromUrl(url),\n );\n logger.info(\n { clonePath, registryFetchUrl },\n `Cloning private cargo registry`,\n );\n\n const git = Git({ ...simpleGitConfig(), maxConcurrentProcesses: 1 });\n const clonePromise = git.clone(registryFetchUrl, clonePath, {\n '--depth': 1,\n });\n\n memCache.set(\n cacheKey,\n clonePromise.then(() => clonePath).catch(() => null),\n );\n\n try {\n await clonePromise;\n } catch (err) {\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'failed cloning git registry',\n );\n memCache.set(cacheKeyForError, err);\n\n return null;\n }\n }\n\n if (!clonePath) {\n const err = memCache.get(cacheKeyForError);\n logger.warn(\n { err, packageName, registryFetchUrl },\n 'Previous git clone failed, bailing out.',\n );\n\n return null;\n }\n\n registry.clonePath = clonePath;\n }\n\n return registry;\n }\n\n private static areReleasesCacheable(\n registryUrl: string | undefined,\n ): boolean {\n // We only cache public releases, we don't want to cache private\n // cloned data between runs.\n return registryUrl === 'https://crates.io';\n }\n\n public static getIndexSuffix(packageName: string): string[] {\n const len = packageName.length;\n\n if (len === 1) {\n return ['1', packageName];\n }\n if (len === 2) {\n return ['2', packageName];\n }\n if (len === 3) {\n return ['3', packageName[0], packageName];\n }\n\n return [packageName.slice(0, 2), packageName.slice(2, 4), packageName];\n }\n\n @cache({\n namespace: `datasource-crate`,\n key: (\n { registryUrl, packageName }: PostprocessReleaseConfig,\n { version }: Release,\n ) => `postprocessRelease:${registryUrl}:${packageName}:${version}`,\n ttlMinutes: 7 * 24 * 60,\n cacheable: ({ registryUrl }: PostprocessReleaseConfig, _: Release) =>\n registryUrl === 'https://crates.io',\n })\n override async postprocessRelease(\n { packageName, registryUrl }: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n if (registryUrl !== 'https://crates.io') {\n return release;\n }\n\n const url = `https://crates.io/api/v1/crates/${packageName}/${release.version}`;\n const { body: releaseTimestamp } = await this.http.getJson(\n url,\n ReleaseTimestampSchema,\n );\n release.releaseTimestamp = releaseTimestamp;\n return release;\n }\n}\n"]}