renovate 40.0.0-next.9 → 40.0.1

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 (816) hide show
  1. package/dist/config/decrypt/legacy.js +0 -1
  2. package/dist/config/decrypt/legacy.js.map +1 -1
  3. package/dist/config/decrypt.d.ts +3 -1
  4. package/dist/config/decrypt.js +56 -13
  5. package/dist/config/decrypt.js.map +1 -1
  6. package/dist/config/global.js +0 -1
  7. package/dist/config/global.js.map +1 -1
  8. package/dist/config/migrate-validate.js +3 -2
  9. package/dist/config/migrate-validate.js.map +1 -1
  10. package/dist/config/migration.js +2 -1
  11. package/dist/config/migration.js.map +1 -1
  12. package/dist/config/migrations/custom/rebase-stale-prs-migration.js +1 -1
  13. package/dist/config/migrations/custom/rebase-stale-prs-migration.js.map +1 -1
  14. package/dist/config/migrations/migrations-service.js +3 -2
  15. package/dist/config/migrations/migrations-service.js.map +1 -1
  16. package/dist/config/options/index.js +18 -11
  17. package/dist/config/options/index.js.map +1 -1
  18. package/dist/config/parse.js +2 -2
  19. package/dist/config/parse.js.map +1 -1
  20. package/dist/config/presets/common.js +1 -0
  21. package/dist/config/presets/common.js.map +1 -1
  22. package/dist/config/presets/gitea/index.js +0 -1
  23. package/dist/config/presets/gitea/index.js.map +1 -1
  24. package/dist/config/presets/github/index.js +4 -2
  25. package/dist/config/presets/github/index.js.map +1 -1
  26. package/dist/config/presets/gitlab/index.js +1 -1
  27. package/dist/config/presets/gitlab/index.js.map +1 -1
  28. package/dist/config/presets/http/index.js +2 -2
  29. package/dist/config/presets/http/index.js.map +1 -1
  30. package/dist/config/presets/index.js +0 -7
  31. package/dist/config/presets/index.js.map +1 -1
  32. package/dist/config/presets/internal/custom-managers.js +18 -4
  33. package/dist/config/presets/internal/custom-managers.js.map +1 -1
  34. package/dist/config/presets/internal/group.js +30 -1
  35. package/dist/config/presets/internal/group.js.map +1 -1
  36. package/dist/config/presets/internal/index.js +1 -3
  37. package/dist/config/presets/internal/index.js.map +1 -1
  38. package/dist/config/presets/internal/workarounds.js +1 -0
  39. package/dist/config/presets/internal/workarounds.js.map +1 -1
  40. package/dist/config/presets/npm/index.js +4 -1
  41. package/dist/config/presets/npm/index.js.map +1 -1
  42. package/dist/config/presets/parse.js +2 -1
  43. package/dist/config/presets/parse.js.map +1 -1
  44. package/dist/config/schema.d.ts +2 -2
  45. package/dist/config/types.d.ts +4 -2
  46. package/dist/config/types.js.map +1 -1
  47. package/dist/config/validation.js +3 -5
  48. package/dist/config/validation.js.map +1 -1
  49. package/dist/config-validator.js +0 -1
  50. package/dist/config-validator.js.map +1 -1
  51. package/dist/constants/category.js +0 -1
  52. package/dist/constants/category.js.map +1 -1
  53. package/dist/constants/platforms.js +5 -1
  54. package/dist/constants/platforms.js.map +1 -1
  55. package/dist/data/monorepo.json +9 -2
  56. package/dist/data/replacements.json +13 -0
  57. package/dist/data/source-urls.json +1 -0
  58. package/dist/data-files.generated.js +2 -2
  59. package/dist/data-files.generated.js.map +1 -1
  60. package/dist/instrumentation/index.js +39 -15
  61. package/dist/instrumentation/index.js.map +1 -1
  62. package/dist/instrumentation/utils.js +1 -1
  63. package/dist/instrumentation/utils.js.map +1 -1
  64. package/dist/logger/cmd-serializer.js +0 -1
  65. package/dist/logger/cmd-serializer.js.map +1 -1
  66. package/dist/logger/config-serializer.js +0 -1
  67. package/dist/logger/config-serializer.js.map +1 -1
  68. package/dist/logger/index.js +1 -4
  69. package/dist/logger/index.js.map +1 -1
  70. package/dist/logger/once.js +4 -2
  71. package/dist/logger/once.js.map +1 -1
  72. package/dist/logger/pretty-stdout.js +0 -1
  73. package/dist/logger/pretty-stdout.js.map +1 -1
  74. package/dist/logger/renovate-logger.js +1 -1
  75. package/dist/logger/renovate-logger.js.map +1 -1
  76. package/dist/logger/utils.js +5 -10
  77. package/dist/logger/utils.js.map +1 -1
  78. package/dist/modules/datasource/api.js +4 -0
  79. package/dist/modules/datasource/api.js.map +1 -1
  80. package/dist/modules/datasource/artifactory/index.js +1 -2
  81. package/dist/modules/datasource/artifactory/index.js.map +1 -1
  82. package/dist/modules/datasource/aws-eks-addon/index.d.ts +11 -0
  83. package/dist/modules/datasource/aws-eks-addon/index.js +75 -0
  84. package/dist/modules/datasource/aws-eks-addon/index.js.map +1 -0
  85. package/dist/modules/datasource/aws-eks-addon/schema.d.ts +40 -0
  86. package/dist/modules/datasource/aws-eks-addon/schema.js +31 -0
  87. package/dist/modules/datasource/aws-eks-addon/schema.js.map +1 -0
  88. package/dist/modules/datasource/aws-machine-image/index.js +6 -5
  89. package/dist/modules/datasource/aws-machine-image/index.js.map +1 -1
  90. package/dist/modules/datasource/azure-pipelines-tasks/index.js +15 -1
  91. package/dist/modules/datasource/azure-pipelines-tasks/index.js.map +1 -1
  92. package/dist/modules/datasource/azure-pipelines-tasks/schema.d.ts +24 -0
  93. package/dist/modules/datasource/azure-pipelines-tasks/schema.js +3 -0
  94. package/dist/modules/datasource/azure-pipelines-tasks/schema.js.map +1 -1
  95. package/dist/modules/datasource/bazel/index.js +18 -2
  96. package/dist/modules/datasource/bazel/index.js.map +1 -1
  97. package/dist/modules/datasource/bazel/schema.d.ts +1 -0
  98. package/dist/modules/datasource/bazel/schema.js.map +1 -1
  99. package/dist/modules/datasource/bitbucket-server-tags/index.d.ts +19 -0
  100. package/dist/modules/datasource/bitbucket-server-tags/index.js +133 -0
  101. package/dist/modules/datasource/bitbucket-server-tags/index.js.map +1 -0
  102. package/dist/modules/datasource/bitbucket-server-tags/schema.d.ts +28 -0
  103. package/dist/modules/datasource/bitbucket-server-tags/schema.js +13 -0
  104. package/dist/modules/datasource/bitbucket-server-tags/schema.js.map +1 -0
  105. package/dist/modules/datasource/bitrise/index.js +1 -1
  106. package/dist/modules/datasource/bitrise/index.js.map +1 -1
  107. package/dist/modules/datasource/cdnjs/schema.d.ts +2 -2
  108. package/dist/modules/datasource/conda/index.js +18 -1
  109. package/dist/modules/datasource/conda/index.js.map +1 -1
  110. package/dist/modules/datasource/conda/prefix-dev.d.ts +3 -0
  111. package/dist/modules/datasource/conda/prefix-dev.js +81 -0
  112. package/dist/modules/datasource/conda/prefix-dev.js.map +1 -0
  113. package/dist/modules/datasource/conda/schema/prefix-dev.d.ts +189 -0
  114. package/dist/modules/datasource/conda/schema/prefix-dev.js +31 -0
  115. package/dist/modules/datasource/conda/schema/prefix-dev.js.map +1 -0
  116. package/dist/modules/datasource/conda/types.d.ts +1 -20
  117. package/dist/modules/datasource/conda/types.js.map +1 -1
  118. package/dist/modules/datasource/cpan/index.js +2 -4
  119. package/dist/modules/datasource/cpan/index.js.map +1 -1
  120. package/dist/modules/datasource/crate/index.js +3 -3
  121. package/dist/modules/datasource/crate/index.js.map +1 -1
  122. package/dist/modules/datasource/custom/formats/html.js +1 -1
  123. package/dist/modules/datasource/custom/formats/html.js.map +1 -1
  124. package/dist/modules/datasource/custom/formats/yaml.js +1 -1
  125. package/dist/modules/datasource/custom/formats/yaml.js.map +1 -1
  126. package/dist/modules/datasource/custom/index.js +4 -2
  127. package/dist/modules/datasource/custom/index.js.map +1 -1
  128. package/dist/modules/datasource/custom/schema.d.ts +22 -22
  129. package/dist/modules/datasource/custom/utils.js +1 -0
  130. package/dist/modules/datasource/custom/utils.js.map +1 -1
  131. package/dist/modules/datasource/dart/index.js +1 -1
  132. package/dist/modules/datasource/dart/index.js.map +1 -1
  133. package/dist/modules/datasource/dart-version/index.js +1 -1
  134. package/dist/modules/datasource/dart-version/index.js.map +1 -1
  135. package/dist/modules/datasource/datasource.js +0 -1
  136. package/dist/modules/datasource/datasource.js.map +1 -1
  137. package/dist/modules/datasource/deb/index.d.ts +4 -5
  138. package/dist/modules/datasource/deb/index.js +10 -11
  139. package/dist/modules/datasource/deb/index.js.map +1 -1
  140. package/dist/modules/datasource/deb/url.d.ts +3 -3
  141. package/dist/modules/datasource/deb/url.js +17 -13
  142. package/dist/modules/datasource/deb/url.js.map +1 -1
  143. package/dist/modules/datasource/deno/index.js +1 -1
  144. package/dist/modules/datasource/deno/index.js.map +1 -1
  145. package/dist/modules/datasource/deno/schema.d.ts +1 -1
  146. package/dist/modules/datasource/devbox/index.js +0 -1
  147. package/dist/modules/datasource/devbox/index.js.map +1 -1
  148. package/dist/modules/datasource/docker/common.js +5 -2
  149. package/dist/modules/datasource/docker/common.js.map +1 -1
  150. package/dist/modules/datasource/docker/index.js +8 -6
  151. package/dist/modules/datasource/docker/index.js.map +1 -1
  152. package/dist/modules/datasource/docker/schema.d.ts +77 -101
  153. package/dist/modules/datasource/docker/schema.js +2 -1
  154. package/dist/modules/datasource/docker/schema.js.map +1 -1
  155. package/dist/modules/datasource/flutter-version/index.js +1 -1
  156. package/dist/modules/datasource/flutter-version/index.js.map +1 -1
  157. package/dist/modules/datasource/galaxy/schema.d.ts +1 -1
  158. package/dist/modules/datasource/galaxy-collection/schema.d.ts +8 -8
  159. package/dist/modules/datasource/git-refs/index.js +1 -1
  160. package/dist/modules/datasource/git-refs/index.js.map +1 -1
  161. package/dist/modules/datasource/gitea-releases/schema.d.ts +6 -6
  162. package/dist/modules/datasource/gitea-tags/schema.d.ts +4 -4
  163. package/dist/modules/datasource/github-release-attachments/index.js +2 -2
  164. package/dist/modules/datasource/github-release-attachments/index.js.map +1 -1
  165. package/dist/modules/datasource/github-runners/index.js +2 -2
  166. package/dist/modules/datasource/github-runners/index.js.map +1 -1
  167. package/dist/modules/datasource/github-tags/index.js +4 -1
  168. package/dist/modules/datasource/github-tags/index.js.map +1 -1
  169. package/dist/modules/datasource/gitlab-packages/index.js +1 -1
  170. package/dist/modules/datasource/gitlab-packages/index.js.map +1 -1
  171. package/dist/modules/datasource/gitlab-releases/index.js +1 -3
  172. package/dist/modules/datasource/gitlab-releases/index.js.map +1 -1
  173. package/dist/modules/datasource/go/base.js +1 -1
  174. package/dist/modules/datasource/go/base.js.map +1 -1
  175. package/dist/modules/datasource/go/index.js +1 -1
  176. package/dist/modules/datasource/go/index.js.map +1 -1
  177. package/dist/modules/datasource/go/releases-direct.js +7 -4
  178. package/dist/modules/datasource/go/releases-direct.js.map +1 -1
  179. package/dist/modules/datasource/go/releases-goproxy.js +1 -1
  180. package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
  181. package/dist/modules/datasource/golang-version/index.js +2 -2
  182. package/dist/modules/datasource/golang-version/index.js.map +1 -1
  183. package/dist/modules/datasource/gradle-version/index.js +1 -1
  184. package/dist/modules/datasource/gradle-version/index.js.map +1 -1
  185. package/dist/modules/datasource/helm/index.js +1 -1
  186. package/dist/modules/datasource/helm/index.js.map +1 -1
  187. package/dist/modules/datasource/hex/index.js +1 -1
  188. package/dist/modules/datasource/hex/index.js.map +1 -1
  189. package/dist/modules/datasource/hex/schema.d.ts +11 -11
  190. package/dist/modules/datasource/hexpm-bob/index.js +1 -1
  191. package/dist/modules/datasource/hexpm-bob/index.js.map +1 -1
  192. package/dist/modules/datasource/index.js +46 -5
  193. package/dist/modules/datasource/index.js.map +1 -1
  194. package/dist/modules/datasource/java-version/index.js +0 -1
  195. package/dist/modules/datasource/java-version/index.js.map +1 -1
  196. package/dist/modules/datasource/jenkins-plugins/index.js +1 -1
  197. package/dist/modules/datasource/jenkins-plugins/index.js.map +1 -1
  198. package/dist/modules/datasource/maven/index.d.ts +2 -2
  199. package/dist/modules/datasource/maven/index.js +56 -33
  200. package/dist/modules/datasource/maven/index.js.map +1 -1
  201. package/dist/modules/datasource/maven/types.d.ts +7 -6
  202. package/dist/modules/datasource/maven/types.js.map +1 -1
  203. package/dist/modules/datasource/maven/util.d.ts +4 -5
  204. package/dist/modules/datasource/maven/util.js +94 -157
  205. package/dist/modules/datasource/maven/util.js.map +1 -1
  206. package/dist/modules/datasource/metadata.js +9 -1
  207. package/dist/modules/datasource/metadata.js.map +1 -1
  208. package/dist/modules/datasource/node-version/index.js +1 -1
  209. package/dist/modules/datasource/node-version/index.js.map +1 -1
  210. package/dist/modules/datasource/npm/get.d.ts +0 -1
  211. package/dist/modules/datasource/npm/get.js +14 -68
  212. package/dist/modules/datasource/npm/get.js.map +1 -1
  213. package/dist/modules/datasource/npm/index.js +1 -1
  214. package/dist/modules/datasource/npm/index.js.map +1 -1
  215. package/dist/modules/datasource/npm/npmrc.js +1 -1
  216. package/dist/modules/datasource/npm/npmrc.js.map +1 -1
  217. package/dist/modules/datasource/npm/types.d.ts +0 -8
  218. package/dist/modules/datasource/npm/types.js.map +1 -1
  219. package/dist/modules/datasource/nuget/index.js +1 -1
  220. package/dist/modules/datasource/nuget/index.js.map +1 -1
  221. package/dist/modules/datasource/nuget/v2.js +1 -1
  222. package/dist/modules/datasource/nuget/v2.js.map +1 -1
  223. package/dist/modules/datasource/nuget/v3.js +8 -6
  224. package/dist/modules/datasource/nuget/v3.js.map +1 -1
  225. package/dist/modules/datasource/orb/index.js +1 -1
  226. package/dist/modules/datasource/orb/index.js.map +1 -1
  227. package/dist/modules/datasource/packagist/index.js +2 -2
  228. package/dist/modules/datasource/packagist/index.js.map +1 -1
  229. package/dist/modules/datasource/packagist/schema.d.ts +32 -32
  230. package/dist/modules/datasource/pod/index.js +2 -2
  231. package/dist/modules/datasource/pod/index.js.map +1 -1
  232. package/dist/modules/datasource/postprocess-release.js +1 -1
  233. package/dist/modules/datasource/postprocess-release.js.map +1 -1
  234. package/dist/modules/datasource/pypi/index.js +1 -1
  235. package/dist/modules/datasource/pypi/index.js.map +1 -1
  236. package/dist/modules/datasource/python-version/index.js +1 -1
  237. package/dist/modules/datasource/python-version/index.js.map +1 -1
  238. package/dist/modules/datasource/repology/index.js +1 -1
  239. package/dist/modules/datasource/repology/index.js.map +1 -1
  240. package/dist/modules/datasource/ruby-version/index.js +1 -1
  241. package/dist/modules/datasource/ruby-version/index.js.map +1 -1
  242. package/dist/modules/datasource/rubygems/index.js +2 -2
  243. package/dist/modules/datasource/rubygems/index.js.map +1 -1
  244. package/dist/modules/datasource/rubygems/versions-endpoint-cache.js +2 -2
  245. package/dist/modules/datasource/rubygems/versions-endpoint-cache.js.map +1 -1
  246. package/dist/modules/datasource/sbt-package/index.js +1 -1
  247. package/dist/modules/datasource/sbt-package/index.js.map +1 -1
  248. package/dist/modules/datasource/sbt-plugin/index.js +1 -1
  249. package/dist/modules/datasource/sbt-plugin/index.js.map +1 -1
  250. package/dist/modules/datasource/schema.d.ts +4 -4
  251. package/dist/modules/datasource/terraform-module/index.js +1 -1
  252. package/dist/modules/datasource/terraform-module/index.js.map +1 -1
  253. package/dist/modules/datasource/terraform-provider/index.js +2 -3
  254. package/dist/modules/datasource/terraform-provider/index.js.map +1 -1
  255. package/dist/modules/datasource/types.d.ts +2 -0
  256. package/dist/modules/datasource/types.js.map +1 -1
  257. package/dist/modules/manager/api.js +2 -0
  258. package/dist/modules/manager/api.js.map +1 -1
  259. package/dist/modules/manager/argocd/extract.js +1 -1
  260. package/dist/modules/manager/argocd/extract.js.map +1 -1
  261. package/dist/modules/manager/argocd/schema.d.ts +22 -22
  262. package/dist/modules/manager/asdf/upgradeable-tooling.js +94 -0
  263. package/dist/modules/manager/asdf/upgradeable-tooling.js.map +1 -1
  264. package/dist/modules/manager/azure-pipelines/schema.d.ts +32 -32
  265. package/dist/modules/manager/batect/schema.d.ts +4 -4
  266. package/dist/modules/manager/batect-wrapper/artifacts.js +1 -1
  267. package/dist/modules/manager/batect-wrapper/artifacts.js.map +1 -1
  268. package/dist/modules/manager/bazel/rules/docker.d.ts +6 -6
  269. package/dist/modules/manager/bazel/rules/git.d.ts +10 -10
  270. package/dist/modules/manager/bazel/rules/git.js +9 -2
  271. package/dist/modules/manager/bazel/rules/git.js.map +1 -1
  272. package/dist/modules/manager/bazel/rules/go.d.ts +5 -5
  273. package/dist/modules/manager/bazel/rules/maven.d.ts +7 -7
  274. package/dist/modules/manager/bazel/rules/oci.d.ts +6 -6
  275. package/dist/modules/manager/bazel-module/parser/fragments.d.ts +40 -40
  276. package/dist/modules/manager/bazel-module/parser/maven.d.ts +44 -90
  277. package/dist/modules/manager/bazel-module/parser/oci.d.ts +19 -42
  278. package/dist/modules/manager/bazel-module/rules.d.ts +50 -160
  279. package/dist/modules/manager/buildpacks/extract.d.ts +6 -1
  280. package/dist/modules/manager/buildpacks/extract.js +24 -14
  281. package/dist/modules/manager/buildpacks/extract.js.map +1 -1
  282. package/dist/modules/manager/bun/artifacts.js +0 -1
  283. package/dist/modules/manager/bun/artifacts.js.map +1 -1
  284. package/dist/modules/manager/bun/extract.d.ts +1 -0
  285. package/dist/modules/manager/bun/extract.js +53 -27
  286. package/dist/modules/manager/bun/extract.js.map +1 -1
  287. package/dist/modules/manager/bun/index.js +1 -1
  288. package/dist/modules/manager/bun/index.js.map +1 -1
  289. package/dist/modules/manager/bun/utils.d.ts +2 -0
  290. package/dist/modules/manager/bun/utils.js +22 -0
  291. package/dist/modules/manager/bun/utils.js.map +1 -0
  292. package/dist/modules/manager/bundler/artifacts.js +0 -1
  293. package/dist/modules/manager/bundler/artifacts.js.map +1 -1
  294. package/dist/modules/manager/bundler/extract.js +2 -1
  295. package/dist/modules/manager/bundler/extract.js.map +1 -1
  296. package/dist/modules/manager/cake/index.js +4 -2
  297. package/dist/modules/manager/cake/index.js.map +1 -1
  298. package/dist/modules/manager/cargo/artifacts.js +5 -7
  299. package/dist/modules/manager/cargo/artifacts.js.map +1 -1
  300. package/dist/modules/manager/cargo/schema.d.ts +166 -166
  301. package/dist/modules/manager/circleci/extract.js +21 -30
  302. package/dist/modules/manager/circleci/extract.js.map +1 -1
  303. package/dist/modules/manager/circleci/schema.d.ts +33 -144
  304. package/dist/modules/manager/circleci/schema.js +21 -17
  305. package/dist/modules/manager/circleci/schema.js.map +1 -1
  306. package/dist/modules/manager/cocoapods/artifacts.js +1 -2
  307. package/dist/modules/manager/cocoapods/artifacts.js.map +1 -1
  308. package/dist/modules/manager/composer/artifacts.js +1 -2
  309. package/dist/modules/manager/composer/artifacts.js.map +1 -1
  310. package/dist/modules/manager/composer/schema.d.ts +32 -34
  311. package/dist/modules/manager/composer/schema.js +1 -1
  312. package/dist/modules/manager/composer/schema.js.map +1 -1
  313. package/dist/modules/manager/composer/utils.d.ts +1 -0
  314. package/dist/modules/manager/composer/utils.js +18 -6
  315. package/dist/modules/manager/composer/utils.js.map +1 -1
  316. package/dist/modules/manager/conan/artifacts.d.ts +2 -0
  317. package/dist/modules/manager/conan/artifacts.js +76 -0
  318. package/dist/modules/manager/conan/artifacts.js.map +1 -0
  319. package/dist/modules/manager/conan/index.d.ts +2 -0
  320. package/dist/modules/manager/conan/index.js +4 -1
  321. package/dist/modules/manager/conan/index.js.map +1 -1
  322. package/dist/modules/manager/copier/artifacts.js +0 -1
  323. package/dist/modules/manager/copier/artifacts.js.map +1 -1
  324. package/dist/modules/manager/crossplane/schema.d.ts +2 -2
  325. package/dist/modules/manager/custom/jsonata/schema.d.ts +21 -21
  326. package/dist/modules/manager/custom/regex/index.js +2 -0
  327. package/dist/modules/manager/custom/regex/index.js.map +1 -1
  328. package/dist/modules/manager/deps-edn/extract.js +2 -1
  329. package/dist/modules/manager/deps-edn/extract.js.map +1 -1
  330. package/dist/modules/manager/devbox/artifacts.d.ts +1 -1
  331. package/dist/modules/manager/devbox/artifacts.js +35 -11
  332. package/dist/modules/manager/devbox/artifacts.js.map +1 -1
  333. package/dist/modules/manager/devbox/schema.js +1 -1
  334. package/dist/modules/manager/devbox/schema.js.map +1 -1
  335. package/dist/modules/manager/devcontainer/extract.js +43 -1
  336. package/dist/modules/manager/devcontainer/extract.js.map +1 -1
  337. package/dist/modules/manager/devcontainer/index.js +11 -1
  338. package/dist/modules/manager/devcontainer/index.js.map +1 -1
  339. package/dist/modules/manager/devcontainer/schema.d.ts +7 -3
  340. package/dist/modules/manager/devcontainer/schema.js +3 -1
  341. package/dist/modules/manager/devcontainer/schema.js.map +1 -1
  342. package/dist/modules/manager/docker-compose/schema.d.ts +6 -6
  343. package/dist/modules/manager/dockerfile/extract.js +2 -6
  344. package/dist/modules/manager/dockerfile/extract.js.map +1 -1
  345. package/dist/modules/manager/fingerprint.generated.js +86 -85
  346. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  347. package/dist/modules/manager/fleet/schema.d.ts +4 -4
  348. package/dist/modules/manager/flux/artifacts.js +0 -1
  349. package/dist/modules/manager/flux/artifacts.js.map +1 -1
  350. package/dist/modules/manager/flux/extract.js +27 -24
  351. package/dist/modules/manager/flux/extract.js.map +1 -1
  352. package/dist/modules/manager/flux/schema.d.ts +130 -154
  353. package/dist/modules/manager/github-actions/extract.js +60 -39
  354. package/dist/modules/manager/github-actions/extract.js.map +1 -1
  355. package/dist/modules/manager/github-actions/schema.d.ts +66 -0
  356. package/dist/modules/manager/github-actions/schema.js +38 -0
  357. package/dist/modules/manager/github-actions/schema.js.map +1 -0
  358. package/dist/modules/manager/gitlabci/extract.d.ts +1 -5
  359. package/dist/modules/manager/gitlabci/extract.js +27 -126
  360. package/dist/modules/manager/gitlabci/extract.js.map +1 -1
  361. package/dist/modules/manager/gitlabci/schema.d.ts +55 -0
  362. package/dist/modules/manager/gitlabci/schema.js +63 -0
  363. package/dist/modules/manager/gitlabci/schema.js.map +1 -0
  364. package/dist/modules/manager/gitlabci-include/extract.js +6 -54
  365. package/dist/modules/manager/gitlabci-include/extract.js.map +1 -1
  366. package/dist/modules/manager/gitlabci-include/schema.d.ts +13 -0
  367. package/dist/modules/manager/gitlabci-include/schema.js +46 -0
  368. package/dist/modules/manager/gitlabci-include/schema.js.map +1 -0
  369. package/dist/modules/manager/glasskube/schema.d.ts +8 -8
  370. package/dist/modules/manager/gomod/artifacts-extra.js +12 -4
  371. package/dist/modules/manager/gomod/artifacts-extra.js.map +1 -1
  372. package/dist/modules/manager/gomod/artifacts.js +24 -10
  373. package/dist/modules/manager/gomod/artifacts.js.map +1 -1
  374. package/dist/modules/manager/gomod/extract.js +23 -0
  375. package/dist/modules/manager/gomod/extract.js.map +1 -1
  376. package/dist/modules/manager/gomod/line-parser.js +16 -0
  377. package/dist/modules/manager/gomod/line-parser.js.map +1 -1
  378. package/dist/modules/manager/gomod/update.js +5 -3
  379. package/dist/modules/manager/gomod/update.js.map +1 -1
  380. package/dist/modules/manager/gradle/artifacts.js +0 -1
  381. package/dist/modules/manager/gradle/artifacts.js.map +1 -1
  382. package/dist/modules/manager/gradle/extract/catalog.js +1 -1
  383. package/dist/modules/manager/gradle/extract/catalog.js.map +1 -1
  384. package/dist/modules/manager/gradle/extract.js +8 -13
  385. package/dist/modules/manager/gradle/extract.js.map +1 -1
  386. package/dist/modules/manager/gradle/parser/assignments.js +2 -2
  387. package/dist/modules/manager/gradle/parser/assignments.js.map +1 -1
  388. package/dist/modules/manager/gradle/parser/handlers.d.ts +1 -2
  389. package/dist/modules/manager/gradle/parser/handlers.js +17 -24
  390. package/dist/modules/manager/gradle/parser/handlers.js.map +1 -1
  391. package/dist/modules/manager/gradle/parser/registry-urls.js +46 -12
  392. package/dist/modules/manager/gradle/parser/registry-urls.js.map +1 -1
  393. package/dist/modules/manager/gradle/types.d.ts +1 -0
  394. package/dist/modules/manager/gradle/types.js.map +1 -1
  395. package/dist/modules/manager/gradle-wrapper/artifacts.js +1 -2
  396. package/dist/modules/manager/gradle-wrapper/artifacts.js.map +1 -1
  397. package/dist/modules/manager/helmfile/artifacts.js +0 -1
  398. package/dist/modules/manager/helmfile/artifacts.js.map +1 -1
  399. package/dist/modules/manager/helmfile/extract.js +4 -0
  400. package/dist/modules/manager/helmfile/extract.js.map +1 -1
  401. package/dist/modules/manager/helmfile/schema.d.ts +9 -9
  402. package/dist/modules/manager/helmv3/artifacts.js +0 -1
  403. package/dist/modules/manager/helmv3/artifacts.js.map +1 -1
  404. package/dist/modules/manager/helmv3/utils.js +3 -1
  405. package/dist/modules/manager/helmv3/utils.js.map +1 -1
  406. package/dist/modules/manager/hermit/artifacts.js +0 -1
  407. package/dist/modules/manager/hermit/artifacts.js.map +1 -1
  408. package/dist/modules/manager/homebrew/extract.js +0 -1
  409. package/dist/modules/manager/homebrew/extract.js.map +1 -1
  410. package/dist/modules/manager/jsonnet-bundler/artifacts.js +0 -1
  411. package/dist/modules/manager/jsonnet-bundler/artifacts.js.map +1 -1
  412. package/dist/modules/manager/kustomize/artifacts.d.ts +2 -0
  413. package/dist/modules/manager/kustomize/artifacts.js +154 -0
  414. package/dist/modules/manager/kustomize/artifacts.js.map +1 -0
  415. package/dist/modules/manager/kustomize/common.d.ts +3 -0
  416. package/dist/modules/manager/kustomize/common.js +22 -0
  417. package/dist/modules/manager/kustomize/common.js.map +1 -0
  418. package/dist/modules/manager/kustomize/index.d.ts +1 -0
  419. package/dist/modules/manager/kustomize/index.js +3 -1
  420. package/dist/modules/manager/kustomize/index.js.map +1 -1
  421. package/dist/modules/manager/kustomize/types.d.ts +4 -0
  422. package/dist/modules/manager/kustomize/types.js.map +1 -1
  423. package/dist/modules/manager/maven/extract.d.ts +2 -2
  424. package/dist/modules/manager/maven/extract.js +14 -9
  425. package/dist/modules/manager/maven/extract.js.map +1 -1
  426. package/dist/modules/manager/maven-wrapper/artifacts.js +0 -1
  427. package/dist/modules/manager/maven-wrapper/artifacts.js.map +1 -1
  428. package/dist/modules/manager/mise/extract.js +1 -1
  429. package/dist/modules/manager/mise/extract.js.map +1 -1
  430. package/dist/modules/manager/mix/artifacts.js +64 -14
  431. package/dist/modules/manager/mix/artifacts.js.map +1 -1
  432. package/dist/modules/manager/mix/index.d.ts +1 -0
  433. package/dist/modules/manager/mix/index.js +2 -1
  434. package/dist/modules/manager/mix/index.js.map +1 -1
  435. package/dist/modules/manager/nix/artifacts.js +0 -1
  436. package/dist/modules/manager/nix/artifacts.js.map +1 -1
  437. package/dist/modules/manager/nix/extract.js +1 -1
  438. package/dist/modules/manager/nix/extract.js.map +1 -1
  439. package/dist/modules/manager/nix/schema.d.ts +20 -20
  440. package/dist/modules/manager/nix/schema.js +1 -0
  441. package/dist/modules/manager/nix/schema.js.map +1 -1
  442. package/dist/modules/manager/npm/artifacts.js +0 -1
  443. package/dist/modules/manager/npm/artifacts.js.map +1 -1
  444. package/dist/modules/manager/npm/extract/common/package-file.js +1 -0
  445. package/dist/modules/manager/npm/extract/common/package-file.js.map +1 -1
  446. package/dist/modules/manager/npm/extract/yarn.js +2 -2
  447. package/dist/modules/manager/npm/extract/yarn.js.map +1 -1
  448. package/dist/modules/manager/npm/post-update/npm.js +0 -1
  449. package/dist/modules/manager/npm/post-update/npm.js.map +1 -1
  450. package/dist/modules/manager/npm/post-update/pnpm.js +13 -2
  451. package/dist/modules/manager/npm/post-update/pnpm.js.map +1 -1
  452. package/dist/modules/manager/npm/post-update/rules.js +11 -1
  453. package/dist/modules/manager/npm/post-update/rules.js.map +1 -1
  454. package/dist/modules/manager/npm/post-update/yarn.js +0 -1
  455. package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
  456. package/dist/modules/manager/npm/schema.d.ts +13 -13
  457. package/dist/modules/manager/npm/update/dependency/index.js +1 -1
  458. package/dist/modules/manager/npm/update/dependency/index.js.map +1 -1
  459. package/dist/modules/manager/nuget/artifacts.js +1 -2
  460. package/dist/modules/manager/nuget/artifacts.js.map +1 -1
  461. package/dist/modules/manager/nuget/extract.js +21 -18
  462. package/dist/modules/manager/nuget/extract.js.map +1 -1
  463. package/dist/modules/manager/nuget/package-tree.js +4 -0
  464. package/dist/modules/manager/nuget/package-tree.js.map +1 -1
  465. package/dist/modules/manager/nuget/schema.d.ts +8 -8
  466. package/dist/modules/manager/nuget/util.js +4 -1
  467. package/dist/modules/manager/nuget/util.js.map +1 -1
  468. package/dist/modules/manager/ocb/schema.d.ts +6 -6
  469. package/dist/modules/manager/pep621/extract.js +19 -3
  470. package/dist/modules/manager/pep621/extract.js.map +1 -1
  471. package/dist/modules/manager/pep621/processors/pdm.js +3 -2
  472. package/dist/modules/manager/pep621/processors/pdm.js.map +1 -1
  473. package/dist/modules/manager/pep621/processors/uv.js +4 -1
  474. package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
  475. package/dist/modules/manager/pep621/schema.d.ts +341 -49
  476. package/dist/modules/manager/pep621/schema.js +3 -1
  477. package/dist/modules/manager/pep621/schema.js.map +1 -1
  478. package/dist/modules/manager/pep621/utils.js +1 -1
  479. package/dist/modules/manager/pep621/utils.js.map +1 -1
  480. package/dist/modules/manager/pip-compile/common.js +0 -1
  481. package/dist/modules/manager/pip-compile/common.js.map +1 -1
  482. package/dist/modules/manager/pip_requirements/artifacts.js +0 -1
  483. package/dist/modules/manager/pip_requirements/artifacts.js.map +1 -1
  484. package/dist/modules/manager/pip_requirements/common.js +2 -6
  485. package/dist/modules/manager/pip_requirements/common.js.map +1 -1
  486. package/dist/modules/manager/pipenv/artifacts.js +0 -1
  487. package/dist/modules/manager/pipenv/artifacts.js.map +1 -1
  488. package/dist/modules/manager/pixi/artifacts.d.ts +3 -0
  489. package/dist/modules/manager/pixi/artifacts.js +78 -0
  490. package/dist/modules/manager/pixi/artifacts.js.map +1 -0
  491. package/dist/modules/manager/pixi/extract.d.ts +4 -0
  492. package/dist/modules/manager/pixi/extract.js +131 -0
  493. package/dist/modules/manager/pixi/extract.js.map +1 -0
  494. package/dist/modules/manager/pixi/index.d.ts +10 -0
  495. package/dist/modules/manager/pixi/index.js +20 -0
  496. package/dist/modules/manager/pixi/index.js.map +1 -0
  497. package/dist/modules/manager/pixi/schema.d.ts +405 -0
  498. package/dist/modules/manager/pixi/schema.js +147 -0
  499. package/dist/modules/manager/pixi/schema.js.map +1 -0
  500. package/dist/modules/manager/poetry/artifacts.js +3 -4
  501. package/dist/modules/manager/poetry/artifacts.js.map +1 -1
  502. package/dist/modules/manager/poetry/extract.js +2 -1
  503. package/dist/modules/manager/poetry/extract.js.map +1 -1
  504. package/dist/modules/manager/poetry/schema.d.ts +44 -44
  505. package/dist/modules/manager/pub/artifacts.js +0 -1
  506. package/dist/modules/manager/pub/artifacts.js.map +1 -1
  507. package/dist/modules/manager/pub/schema.d.ts +8 -8
  508. package/dist/modules/manager/scalafmt/extract.js +1 -1
  509. package/dist/modules/manager/scalafmt/extract.js.map +1 -1
  510. package/dist/modules/manager/sveltos/schema.d.ts +30 -42
  511. package/dist/modules/manager/terraform/lockfile/hash.d.ts +1 -1
  512. package/dist/modules/manager/terraform/util.js +1 -3
  513. package/dist/modules/manager/terraform/util.js.map +1 -1
  514. package/dist/modules/manager/types.d.ts +6 -2
  515. package/dist/modules/manager/types.js.map +1 -1
  516. package/dist/modules/manager/vendir/schema.d.ts +7 -7
  517. package/dist/modules/platform/api.d.ts +1 -1
  518. package/dist/modules/platform/azure/azure-helper.js +2 -2
  519. package/dist/modules/platform/azure/azure-helper.js.map +1 -1
  520. package/dist/modules/platform/azure/index.js +14 -14
  521. package/dist/modules/platform/azure/index.js.map +1 -1
  522. package/dist/modules/platform/bitbucket/comments.js +4 -4
  523. package/dist/modules/platform/bitbucket/comments.js.map +1 -1
  524. package/dist/modules/platform/bitbucket/index.js +49 -44
  525. package/dist/modules/platform/bitbucket/index.js.map +1 -1
  526. package/dist/modules/platform/bitbucket/schema.d.ts +14 -14
  527. package/dist/modules/platform/bitbucket/utils.js +3 -3
  528. package/dist/modules/platform/bitbucket/utils.js.map +1 -1
  529. package/dist/modules/platform/bitbucket-server/index.d.ts +2 -2
  530. package/dist/modules/platform/bitbucket-server/index.js +81 -81
  531. package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
  532. package/dist/modules/platform/bitbucket-server/pr-cache.d.ts +23 -0
  533. package/dist/modules/platform/bitbucket-server/pr-cache.js +125 -0
  534. package/dist/modules/platform/bitbucket-server/pr-cache.js.map +1 -0
  535. package/dist/modules/platform/bitbucket-server/schema.d.ts +76 -0
  536. package/dist/modules/platform/bitbucket-server/schema.js +15 -1
  537. package/dist/modules/platform/bitbucket-server/schema.js.map +1 -1
  538. package/dist/modules/platform/bitbucket-server/types.d.ts +8 -2
  539. package/dist/modules/platform/bitbucket-server/types.js.map +1 -1
  540. package/dist/modules/platform/bitbucket-server/utils.d.ts +0 -2
  541. package/dist/modules/platform/bitbucket-server/utils.js +6 -52
  542. package/dist/modules/platform/bitbucket-server/utils.js.map +1 -1
  543. package/dist/modules/platform/codecommit/codecommit-client.js +6 -6
  544. package/dist/modules/platform/codecommit/codecommit-client.js.map +1 -1
  545. package/dist/modules/platform/codecommit/index.js +24 -24
  546. package/dist/modules/platform/codecommit/index.js.map +1 -1
  547. package/dist/modules/platform/gerrit/client.d.ts +0 -3
  548. package/dist/modules/platform/gerrit/client.js +20 -29
  549. package/dist/modules/platform/gerrit/client.js.map +1 -1
  550. package/dist/modules/platform/gerrit/index.js +0 -6
  551. package/dist/modules/platform/gerrit/index.js.map +1 -1
  552. package/dist/modules/platform/gerrit/scm.js +5 -6
  553. package/dist/modules/platform/gerrit/scm.js.map +1 -1
  554. package/dist/modules/platform/gerrit/types.d.ts +1 -4
  555. package/dist/modules/platform/gerrit/types.js.map +1 -1
  556. package/dist/modules/platform/gerrit/utils.d.ts +3 -2
  557. package/dist/modules/platform/gerrit/utils.js +4 -8
  558. package/dist/modules/platform/gerrit/utils.js.map +1 -1
  559. package/dist/modules/platform/gitea/gitea-helper.d.ts +1 -0
  560. package/dist/modules/platform/gitea/gitea-helper.js +16 -0
  561. package/dist/modules/platform/gitea/gitea-helper.js.map +1 -1
  562. package/dist/modules/platform/gitea/index.js +22 -16
  563. package/dist/modules/platform/gitea/index.js.map +1 -1
  564. package/dist/modules/platform/gitea/schema.d.ts +8 -8
  565. package/dist/modules/platform/gitea/types.d.ts +1 -1
  566. package/dist/modules/platform/gitea/types.js.map +1 -1
  567. package/dist/modules/platform/github/common.d.ts +2 -0
  568. package/dist/modules/platform/github/common.js +16 -0
  569. package/dist/modules/platform/github/common.js.map +1 -1
  570. package/dist/modules/platform/github/index.d.ts +1 -1
  571. package/dist/modules/platform/github/index.js +87 -82
  572. package/dist/modules/platform/github/index.js.map +1 -1
  573. package/dist/modules/platform/github/issue.d.ts +18 -18
  574. package/dist/modules/platform/github/massage-markdown-links.js +2 -2
  575. package/dist/modules/platform/github/massage-markdown-links.js.map +1 -1
  576. package/dist/modules/platform/github/pr.js +3 -3
  577. package/dist/modules/platform/github/pr.js.map +1 -1
  578. package/dist/modules/platform/github/schema.d.ts +128 -128
  579. package/dist/modules/platform/github/schema.js +3 -1
  580. package/dist/modules/platform/github/schema.js.map +1 -1
  581. package/dist/modules/platform/gitlab/index.js +63 -49
  582. package/dist/modules/platform/gitlab/index.js.map +1 -1
  583. package/dist/modules/platform/index.js +0 -1
  584. package/dist/modules/platform/index.js.map +1 -1
  585. package/dist/modules/platform/scm.d.ts +1 -1
  586. package/dist/modules/versioning/api.js +2 -0
  587. package/dist/modules/versioning/api.js.map +1 -1
  588. package/dist/modules/versioning/composer/index.js +10 -0
  589. package/dist/modules/versioning/composer/index.js.map +1 -1
  590. package/dist/modules/versioning/conda/index.d.ts +41 -0
  591. package/dist/modules/versioning/conda/index.js +178 -0
  592. package/dist/modules/versioning/conda/index.js.map +1 -0
  593. package/dist/modules/versioning/distro.js +1 -3
  594. package/dist/modules/versioning/distro.js.map +1 -1
  595. package/dist/modules/versioning/hashicorp/convertor.d.ts +2 -1
  596. package/dist/modules/versioning/hashicorp/convertor.js +13 -8
  597. package/dist/modules/versioning/hashicorp/convertor.js.map +1 -1
  598. package/dist/modules/versioning/hex/index.js +3 -3
  599. package/dist/modules/versioning/hex/index.js.map +1 -1
  600. package/dist/modules/versioning/npm/index.js +2 -1
  601. package/dist/modules/versioning/npm/index.js.map +1 -1
  602. package/dist/modules/versioning/types.d.ts +4 -0
  603. package/dist/modules/versioning/types.js.map +1 -1
  604. package/dist/proxy.js +2 -1
  605. package/dist/proxy.js.map +1 -1
  606. package/dist/renovate.js +2 -2
  607. package/dist/renovate.js.map +1 -1
  608. package/dist/util/cache/package/redis.js +0 -1
  609. package/dist/util/cache/package/redis.js.map +1 -1
  610. package/dist/util/cache/package/types.d.ts +1 -1
  611. package/dist/util/cache/package/types.js.map +1 -1
  612. package/dist/util/cache/repository/impl/base.d.ts +1 -1
  613. package/dist/util/cache/repository/impl/base.js +4 -0
  614. package/dist/util/cache/repository/impl/base.js.map +1 -1
  615. package/dist/util/cache/repository/schema.d.ts +4 -4
  616. package/dist/util/cache/repository/types.d.ts +3 -0
  617. package/dist/util/cache/repository/types.js.map +1 -1
  618. package/dist/util/common.d.ts +4 -2
  619. package/dist/util/common.js +17 -3
  620. package/dist/util/common.js.map +1 -1
  621. package/dist/util/env.d.ts +4 -0
  622. package/dist/util/env.js +22 -0
  623. package/dist/util/env.js.map +1 -0
  624. package/dist/util/exec/containerbase.js +19 -14
  625. package/dist/util/exec/containerbase.js.map +1 -1
  626. package/dist/util/exec/index.js +5 -2
  627. package/dist/util/exec/index.js.map +1 -1
  628. package/dist/util/exec/types.d.ts +0 -2
  629. package/dist/util/exec/types.js.map +1 -1
  630. package/dist/util/exec/utils.d.ts +1 -1
  631. package/dist/util/exec/utils.js +6 -5
  632. package/dist/util/exec/utils.js.map +1 -1
  633. package/dist/util/git/auth.js +8 -5
  634. package/dist/util/git/auth.js.map +1 -1
  635. package/dist/util/git/author.js +1 -1
  636. package/dist/util/git/author.js.map +1 -1
  637. package/dist/util/git/config.js +0 -1
  638. package/dist/util/git/config.js.map +1 -1
  639. package/dist/util/git/error.js +4 -2
  640. package/dist/util/git/error.js.map +1 -1
  641. package/dist/util/git/index.js +75 -52
  642. package/dist/util/git/index.js.map +1 -1
  643. package/dist/util/git/private-key.js +2 -4
  644. package/dist/util/git/private-key.js.map +1 -1
  645. package/dist/util/git/types.d.ts +2 -0
  646. package/dist/util/git/types.js.map +1 -1
  647. package/dist/util/git/url.js +1 -1
  648. package/dist/util/git/url.js.map +1 -1
  649. package/dist/util/github/graphql/datasource-fetcher.js +3 -5
  650. package/dist/util/github/graphql/datasource-fetcher.js.map +1 -1
  651. package/dist/util/github/graphql/query-adapters/releases-query-adapter.d.ts +2 -2
  652. package/dist/util/github/graphql/query-adapters/tags-query-adapter.d.ts +2 -2
  653. package/dist/util/http/auth.js +0 -1
  654. package/dist/util/http/auth.js.map +1 -1
  655. package/dist/util/http/bitbucket-server.d.ts +7 -5
  656. package/dist/util/http/bitbucket-server.js +26 -23
  657. package/dist/util/http/bitbucket-server.js.map +1 -1
  658. package/dist/util/http/bitbucket.d.ts +6 -5
  659. package/dist/util/http/bitbucket.js +34 -31
  660. package/dist/util/http/bitbucket.js.map +1 -1
  661. package/dist/util/http/cache/abstract-http-cache-provider.js +2 -2
  662. package/dist/util/http/cache/abstract-http-cache-provider.js.map +1 -1
  663. package/dist/util/http/cache/memory-http-cache-provider.d.ts +10 -0
  664. package/dist/util/http/cache/memory-http-cache-provider.js +29 -0
  665. package/dist/util/http/cache/memory-http-cache-provider.js.map +1 -0
  666. package/dist/util/http/cache/package-http-cache-provider.d.ts +23 -0
  667. package/dist/util/http/cache/package-http-cache-provider.js +80 -0
  668. package/dist/util/http/cache/package-http-cache-provider.js.map +1 -0
  669. package/dist/util/http/cache/schema.d.ts +2 -2
  670. package/dist/util/http/errors.d.ts +2 -0
  671. package/dist/util/http/errors.js +8 -0
  672. package/dist/util/http/errors.js.map +1 -0
  673. package/dist/util/http/gerrit.d.ts +6 -4
  674. package/dist/util/http/gerrit.js +11 -12
  675. package/dist/util/http/gerrit.js.map +1 -1
  676. package/dist/util/http/gitea.d.ts +5 -4
  677. package/dist/util/http/gitea.js +14 -13
  678. package/dist/util/http/gitea.js.map +1 -1
  679. package/dist/util/http/github.d.ts +14 -8
  680. package/dist/util/http/github.js +65 -60
  681. package/dist/util/http/github.js.map +1 -1
  682. package/dist/util/http/gitlab.d.ts +7 -5
  683. package/dist/util/http/gitlab.js +58 -46
  684. package/dist/util/http/gitlab.js.map +1 -1
  685. package/dist/util/http/got.d.ts +9 -0
  686. package/dist/util/http/got.js +54 -0
  687. package/dist/util/http/got.js.map +1 -0
  688. package/dist/util/http/host-rules.d.ts +2 -1
  689. package/dist/util/http/host-rules.js +17 -4
  690. package/dist/util/http/host-rules.js.map +1 -1
  691. package/dist/util/http/http.d.ts +93 -0
  692. package/dist/util/http/http.js +346 -0
  693. package/dist/util/http/http.js.map +1 -0
  694. package/dist/util/http/index.d.ts +6 -74
  695. package/dist/util/http/index.js +5 -359
  696. package/dist/util/http/index.js.map +1 -1
  697. package/dist/util/http/legacy.js +4 -1
  698. package/dist/util/http/legacy.js.map +1 -1
  699. package/dist/util/http/types.d.ts +9 -16
  700. package/dist/util/http/types.js.map +1 -1
  701. package/dist/util/schema-utils.d.ts +1 -0
  702. package/dist/util/schema-utils.js +43 -8
  703. package/dist/util/schema-utils.js.map +1 -1
  704. package/dist/util/stats.d.ts +10 -0
  705. package/dist/util/stats.js +45 -1
  706. package/dist/util/stats.js.map +1 -1
  707. package/dist/util/string.d.ts +16 -0
  708. package/dist/util/string.js +79 -0
  709. package/dist/util/string.js.map +1 -1
  710. package/dist/util/toml.d.ts +1 -0
  711. package/dist/util/toml.js +6 -0
  712. package/dist/util/toml.js.map +1 -1
  713. package/dist/util/url.js +3 -8
  714. package/dist/util/url.js.map +1 -1
  715. package/dist/util/yaml.js +3 -8
  716. package/dist/util/yaml.js.map +1 -1
  717. package/dist/workers/global/autodiscover.js +1 -19
  718. package/dist/workers/global/autodiscover.js.map +1 -1
  719. package/dist/workers/global/config/parse/env.js +3 -3
  720. package/dist/workers/global/config/parse/env.js.map +1 -1
  721. package/dist/workers/global/config/parse/file.js +18 -8
  722. package/dist/workers/global/config/parse/file.js.map +1 -1
  723. package/dist/workers/global/config/parse/host-rules-from-env.js +6 -2
  724. package/dist/workers/global/config/parse/host-rules-from-env.js.map +1 -1
  725. package/dist/workers/global/config/parse/index.js +15 -0
  726. package/dist/workers/global/config/parse/index.js.map +1 -1
  727. package/dist/workers/global/index.js +4 -2
  728. package/dist/workers/global/index.js.map +1 -1
  729. package/dist/workers/repository/cache.js +1 -2
  730. package/dist/workers/repository/cache.js.map +1 -1
  731. package/dist/workers/repository/config-migration/branch/migrated-data.js +2 -0
  732. package/dist/workers/repository/config-migration/branch/migrated-data.js.map +1 -1
  733. package/dist/workers/repository/index.js +1 -0
  734. package/dist/workers/repository/index.js.map +1 -1
  735. package/dist/workers/repository/init/merge.js +6 -3
  736. package/dist/workers/repository/init/merge.js.map +1 -1
  737. package/dist/workers/repository/onboarding/pr/config-description.js +3 -1
  738. package/dist/workers/repository/onboarding/pr/config-description.js.map +1 -1
  739. package/dist/workers/repository/onboarding/pr/index.js +4 -0
  740. package/dist/workers/repository/onboarding/pr/index.js.map +1 -1
  741. package/dist/workers/repository/process/extract-update.js +0 -1
  742. package/dist/workers/repository/process/extract-update.js.map +1 -1
  743. package/dist/workers/repository/process/fingerprint-fields.js +0 -1
  744. package/dist/workers/repository/process/fingerprint-fields.js.map +1 -1
  745. package/dist/workers/repository/process/libyear.js +2 -2
  746. package/dist/workers/repository/process/libyear.js.map +1 -1
  747. package/dist/workers/repository/process/lookup/index.js +15 -4
  748. package/dist/workers/repository/process/lookup/index.js.map +1 -1
  749. package/dist/workers/repository/process/lookup/timestamps.d.ts +18 -0
  750. package/dist/workers/repository/process/lookup/timestamps.js +69 -0
  751. package/dist/workers/repository/process/lookup/timestamps.js.map +1 -0
  752. package/dist/workers/repository/process/lookup/types.d.ts +1 -0
  753. package/dist/workers/repository/process/lookup/types.js.map +1 -1
  754. package/dist/workers/repository/process/lookup/utils.js +20 -9
  755. package/dist/workers/repository/process/lookup/utils.js.map +1 -1
  756. package/dist/workers/repository/process/sort.js +1 -1
  757. package/dist/workers/repository/process/sort.js.map +1 -1
  758. package/dist/workers/repository/process/vulnerabilities.js +1 -1
  759. package/dist/workers/repository/process/vulnerabilities.js.map +1 -1
  760. package/dist/workers/repository/process/write.js +1 -8
  761. package/dist/workers/repository/process/write.js.map +1 -1
  762. package/dist/workers/repository/reconfigure/utils.d.ts +2 -0
  763. package/dist/workers/repository/reconfigure/utils.js +16 -0
  764. package/dist/workers/repository/reconfigure/utils.js.map +1 -1
  765. package/dist/workers/repository/reconfigure/validate.js +6 -17
  766. package/dist/workers/repository/reconfigure/validate.js.map +1 -1
  767. package/dist/workers/repository/update/branch/auto-replace.js +25 -5
  768. package/dist/workers/repository/update/branch/auto-replace.js.map +1 -1
  769. package/dist/workers/repository/update/branch/commit.js +2 -0
  770. package/dist/workers/repository/update/branch/commit.js.map +1 -1
  771. package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js +17 -8
  772. package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js.map +1 -1
  773. package/dist/workers/repository/update/pr/body/config-description.js +26 -1
  774. package/dist/workers/repository/update/pr/body/config-description.js.map +1 -1
  775. package/dist/workers/repository/update/pr/body/index.js +21 -14
  776. package/dist/workers/repository/update/pr/body/index.js.map +1 -1
  777. package/dist/workers/repository/update/pr/changelog/api.js +8 -6
  778. package/dist/workers/repository/update/pr/changelog/api.js.map +1 -1
  779. package/dist/workers/repository/update/pr/changelog/bitbucket/index.js +1 -1
  780. package/dist/workers/repository/update/pr/changelog/bitbucket/index.js.map +1 -1
  781. package/dist/workers/repository/update/pr/changelog/bitbucket-server/index.d.ts +3 -0
  782. package/dist/workers/repository/update/pr/changelog/bitbucket-server/index.js +39 -0
  783. package/dist/workers/repository/update/pr/changelog/bitbucket-server/index.js.map +1 -0
  784. package/dist/workers/repository/update/pr/changelog/bitbucket-server/source.d.ts +8 -0
  785. package/dist/workers/repository/update/pr/changelog/bitbucket-server/source.js +31 -0
  786. package/dist/workers/repository/update/pr/changelog/bitbucket-server/source.js.map +1 -0
  787. package/dist/workers/repository/update/pr/changelog/github/index.js +6 -3
  788. package/dist/workers/repository/update/pr/changelog/github/index.js.map +1 -1
  789. package/dist/workers/repository/update/pr/changelog/gitlab/index.js +1 -1
  790. package/dist/workers/repository/update/pr/changelog/gitlab/index.js.map +1 -1
  791. package/dist/workers/repository/update/pr/changelog/release-notes.js +12 -8
  792. package/dist/workers/repository/update/pr/changelog/release-notes.js.map +1 -1
  793. package/dist/workers/repository/update/pr/changelog/source.d.ts +1 -1
  794. package/dist/workers/repository/update/pr/changelog/source.js +1 -0
  795. package/dist/workers/repository/update/pr/changelog/source.js.map +1 -1
  796. package/dist/workers/repository/update/pr/changelog/types.d.ts +1 -1
  797. package/dist/workers/repository/update/pr/changelog/types.js.map +1 -1
  798. package/dist/workers/repository/update/pr/index.js +2 -4
  799. package/dist/workers/repository/update/pr/index.js.map +1 -1
  800. package/dist/workers/repository/updates/flatten.js +8 -4
  801. package/dist/workers/repository/updates/flatten.js.map +1 -1
  802. package/dist/workers/repository/updates/generate.js +3 -2
  803. package/dist/workers/repository/updates/generate.js.map +1 -1
  804. package/dist/workers/types.d.ts +1 -4
  805. package/dist/workers/types.js.map +1 -1
  806. package/package.json +86 -83
  807. package/renovate-schema.json +25 -10
  808. package/dist/modules/manager/github-actions/types.d.ts +0 -30
  809. package/dist/modules/manager/github-actions/types.js +0 -3
  810. package/dist/modules/manager/github-actions/types.js.map +0 -1
  811. package/dist/modules/manager/gitlabci/common.d.ts +0 -6
  812. package/dist/modules/manager/gitlabci/common.js +0 -30
  813. package/dist/modules/manager/gitlabci/common.js.map +0 -1
  814. package/dist/modules/manager/gitlabci/types.d.ts +0 -35
  815. package/dist/modules/manager/gitlabci/types.js +0 -3
  816. package/dist/modules/manager/gitlabci/types.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/repology/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { HOST_DISABLED } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { getQueryString, joinUrlParts } from '../../../util/url';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport type { RepologyPackage, RepologyPackageType } from './types';\n\nconst packageTypes: RepologyPackageType[] = ['binname', 'srcname'];\n\nfunction findPackageInResponse(\n response: RepologyPackage[],\n repoName: string,\n pkgName: string,\n types: RepologyPackageType[],\n): RepologyPackage[] | null {\n const repoPackages = response.filter((pkg) => pkg.repo === repoName);\n\n if (repoPackages.length === 0) {\n // no packages associated with repoName\n return null;\n }\n\n if (repoPackages.length === 1) {\n // repo contains exactly one package, so we can return them safely\n return repoPackages;\n }\n\n // In some cases Repology bundles multiple packages into a single project, which might result in ambiguous results.\n // We need to do additional filtering by matching allowed package types passed as params with package description.\n // Remaining packages are the one we are looking for\n const packagesWithType = repoPackages.filter((pkg) => {\n for (const pkgType of types) {\n if (pkg[pkgType] && pkg[pkgType] === pkgName) {\n return true;\n }\n }\n return false;\n });\n\n return packagesWithType.length > 0 ? packagesWithType : null;\n}\n\nexport class RepologyDatasource extends Datasource {\n static readonly id = 'repology';\n\n override readonly defaultRegistryUrls = ['https://repology.org/'];\n\n override readonly registryStrategy = 'hunt';\n\n constructor() {\n super(RepologyDatasource.id);\n }\n\n private async queryPackages(url: string): Promise<RepologyPackage[]> {\n try {\n const res = await this.http.getJsonUnchecked<RepologyPackage[]>(url);\n return res.body;\n } catch (err) {\n if (err.statusCode === 404) {\n // Return an array here because the api does not return proper http codes\n // and instead of an 404 error an empty array with code 200 is returned\n // When querying the resolver 404 is thrown if package could not be resolved\n // and 403 if the repo is not supported\n // 403 is handled later because in this case we are trying the API\n return [];\n }\n\n throw err;\n }\n }\n\n private async queryPackagesViaResolver(\n registryUrl: string,\n repoName: string,\n packageName: string,\n packageType: RepologyPackageType,\n ): Promise<RepologyPackage[]> {\n const query = getQueryString({\n repo: repoName,\n name_type: packageType,\n target_page: 'api_v1_project',\n noautoresolve: 'on',\n name: packageName,\n });\n\n // Retrieve list of packages by looking up Repology project\n const packages = await this.queryPackages(\n joinUrlParts(registryUrl, `tools/project-by?${query}`),\n );\n\n return packages;\n }\n\n private async queryPackagesViaAPI(\n registryUrl: string,\n packageName: string,\n ): Promise<RepologyPackage[]> {\n // Directly query the package via the API. This will only work if `packageName` has the\n // same name as the repology project\n const packages = await this.queryPackages(\n joinUrlParts(registryUrl, `api/v1/project`, packageName),\n );\n\n return packages;\n }\n\n @cache({\n ttlMinutes: 60,\n namespace: `datasource-${RepologyDatasource.id}`,\n key: (registryUrl: string, repoName: string, pkgName: string) =>\n joinUrlParts(registryUrl, repoName, pkgName),\n })\n async queryPackage(\n registryUrl: string,\n repoName: string,\n pkgName: string,\n ): Promise<RepologyPackage[] | undefined> {\n let response: RepologyPackage[];\n // Try getting the packages from tools/project-by first for type binname and\n // afterwards for srcname. This needs to be done first, because some packages\n // resolve to repology projects which have a different name than the package\n // e.g. `pulseaudio-utils` resolves to project `pulseaudio`, BUT there is also\n // a project called `pulseaudio-utils` but it does not contain the package we\n // are looking for.\n try {\n for (const pkgType of packageTypes) {\n response = await this.queryPackagesViaResolver(\n registryUrl,\n repoName,\n pkgName,\n pkgType,\n );\n\n if (response) {\n const pkg = findPackageInResponse(response, repoName, pkgName, [\n pkgType,\n ]);\n if (is.nonEmptyArray(pkg)) {\n // exit immediately if package found\n return pkg;\n }\n }\n }\n } catch (err) {\n if (err.statusCode === 403) {\n logger.debug(\n { repoName, pkgName },\n 'Repology does not support tools/project-by lookups for repository. Will try direct API access now',\n );\n\n // If the repository is not supported in tools/project-by we try directly accessing the\n // API. This will support all repositories but requires that the project name is equal to the\n // package name. This won't be always the case but for a good portion we might be able to resolve\n // the package this way.\n response = await this.queryPackagesViaAPI(registryUrl, pkgName);\n const pkg = findPackageInResponse(\n response,\n repoName,\n pkgName,\n packageTypes,\n );\n if (is.nonEmptyArray(pkg)) {\n // exit immediately if package found\n return pkg;\n }\n } else if (err.statusCode === 300) {\n logger.warn(\n { repoName, pkgName },\n 'Ambiguous redirection from package name to project name in Repology. Skipping this package',\n );\n return undefined;\n }\n\n throw err;\n }\n\n logger.debug(\n { repoName, pkgName },\n 'Repository or package not found on Repology',\n );\n\n return undefined;\n }\n\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n // istanbul ignore if\n if (!registryUrl) {\n return null;\n }\n // Ensure lookup name contains both repository and package\n const [repoName, pkgName] = packageName.split('/', 2);\n if (!repoName || !pkgName) {\n throw new ExternalHostError(\n new Error(\n 'Repology lookup name must contain repository and package separated by slash (<repo>/<pkg>)',\n ),\n );\n }\n\n logger.trace(`repology.getReleases(${repoName}, ${pkgName})`);\n try {\n // Try to retrieve (cached) package information from Repology\n const pkg = await this.queryPackage(registryUrl, repoName, pkgName);\n if (!pkg) {\n return null;\n }\n\n // Always prefer origversion if available, otherwise default to version\n // This is required as source packages usually have no origversion\n const releases = pkg.map((item) => ({\n version: item.origversion ?? item.version,\n }));\n return { releases };\n } catch (err) {\n if (err.message === HOST_DISABLED) {\n logger.trace({ packageName, err }, 'Host disabled');\n } else {\n logger.warn(\n { packageName, err },\n 'Repology lookup failed with unexpected error',\n );\n }\n\n throw new ExternalHostError(err);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/repology/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { HOST_DISABLED } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { getQueryString, joinUrlParts } from '../../../util/url';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport type { RepologyPackage, RepologyPackageType } from './types';\n\nconst packageTypes: RepologyPackageType[] = ['binname', 'srcname'];\n\nfunction findPackageInResponse(\n response: RepologyPackage[],\n repoName: string,\n pkgName: string,\n types: RepologyPackageType[],\n): RepologyPackage[] | null {\n const repoPackages = response.filter((pkg) => pkg.repo === repoName);\n\n if (repoPackages.length === 0) {\n // no packages associated with repoName\n return null;\n }\n\n if (repoPackages.length === 1) {\n // repo contains exactly one package, so we can return them safely\n return repoPackages;\n }\n\n // In some cases Repology bundles multiple packages into a single project, which might result in ambiguous results.\n // We need to do additional filtering by matching allowed package types passed as params with package description.\n // Remaining packages are the one we are looking for\n const packagesWithType = repoPackages.filter((pkg) => {\n for (const pkgType of types) {\n if (pkg[pkgType] && pkg[pkgType] === pkgName) {\n return true;\n }\n }\n return false;\n });\n\n return packagesWithType.length > 0 ? packagesWithType : null;\n}\n\nexport class RepologyDatasource extends Datasource {\n static readonly id = 'repology';\n\n override readonly defaultRegistryUrls = ['https://repology.org/'];\n\n override readonly registryStrategy = 'hunt';\n\n constructor() {\n super(RepologyDatasource.id);\n }\n\n private async queryPackages(url: string): Promise<RepologyPackage[]> {\n try {\n const res = await this.http.getJsonUnchecked<RepologyPackage[]>(url);\n return res.body;\n } catch (err) {\n if (err.statusCode === 404) {\n // Return an array here because the api does not return proper http codes\n // and instead of an 404 error an empty array with code 200 is returned\n // When querying the resolver 404 is thrown if package could not be resolved\n // and 403 if the repo is not supported\n // 403 is handled later because in this case we are trying the API\n return [];\n }\n\n throw err;\n }\n }\n\n private async queryPackagesViaResolver(\n registryUrl: string,\n repoName: string,\n packageName: string,\n packageType: RepologyPackageType,\n ): Promise<RepologyPackage[]> {\n const query = getQueryString({\n repo: repoName,\n name_type: packageType,\n target_page: 'api_v1_project',\n noautoresolve: 'on',\n name: packageName,\n });\n\n // Retrieve list of packages by looking up Repology project\n const packages = await this.queryPackages(\n joinUrlParts(registryUrl, `tools/project-by?${query}`),\n );\n\n return packages;\n }\n\n private async queryPackagesViaAPI(\n registryUrl: string,\n packageName: string,\n ): Promise<RepologyPackage[]> {\n // Directly query the package via the API. This will only work if `packageName` has the\n // same name as the repology project\n const packages = await this.queryPackages(\n joinUrlParts(registryUrl, `api/v1/project`, packageName),\n );\n\n return packages;\n }\n\n @cache({\n ttlMinutes: 60,\n namespace: `datasource-${RepologyDatasource.id}`,\n key: (registryUrl: string, repoName: string, pkgName: string) =>\n joinUrlParts(registryUrl, repoName, pkgName),\n })\n async queryPackage(\n registryUrl: string,\n repoName: string,\n pkgName: string,\n ): Promise<RepologyPackage[] | undefined> {\n let response: RepologyPackage[];\n // Try getting the packages from tools/project-by first for type binname and\n // afterwards for srcname. This needs to be done first, because some packages\n // resolve to repology projects which have a different name than the package\n // e.g. `pulseaudio-utils` resolves to project `pulseaudio`, BUT there is also\n // a project called `pulseaudio-utils` but it does not contain the package we\n // are looking for.\n try {\n for (const pkgType of packageTypes) {\n response = await this.queryPackagesViaResolver(\n registryUrl,\n repoName,\n pkgName,\n pkgType,\n );\n\n if (response) {\n const pkg = findPackageInResponse(response, repoName, pkgName, [\n pkgType,\n ]);\n if (is.nonEmptyArray(pkg)) {\n // exit immediately if package found\n return pkg;\n }\n }\n }\n } catch (err) {\n if (err.statusCode === 403) {\n logger.debug(\n { repoName, pkgName },\n 'Repology does not support tools/project-by lookups for repository. Will try direct API access now',\n );\n\n // If the repository is not supported in tools/project-by we try directly accessing the\n // API. This will support all repositories but requires that the project name is equal to the\n // package name. This won't be always the case but for a good portion we might be able to resolve\n // the package this way.\n response = await this.queryPackagesViaAPI(registryUrl, pkgName);\n const pkg = findPackageInResponse(\n response,\n repoName,\n pkgName,\n packageTypes,\n );\n if (is.nonEmptyArray(pkg)) {\n // exit immediately if package found\n return pkg;\n }\n } else if (err.statusCode === 300) {\n logger.warn(\n { repoName, pkgName },\n 'Ambiguous redirection from package name to project name in Repology. Skipping this package',\n );\n return undefined;\n }\n\n throw err;\n }\n\n logger.debug(\n { repoName, pkgName },\n 'Repository or package not found on Repology',\n );\n\n return undefined;\n }\n\n 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 // Ensure lookup name contains both repository and package\n const [repoName, pkgName] = packageName.split('/', 2);\n if (!repoName || !pkgName) {\n throw new ExternalHostError(\n new Error(\n 'Repology lookup name must contain repository and package separated by slash (<repo>/<pkg>)',\n ),\n );\n }\n\n logger.trace(`repology.getReleases(${repoName}, ${pkgName})`);\n try {\n // Try to retrieve (cached) package information from Repology\n const pkg = await this.queryPackage(registryUrl, repoName, pkgName);\n if (!pkg) {\n return null;\n }\n\n // Always prefer origversion if available, otherwise default to version\n // This is required as source packages usually have no origversion\n const releases = pkg.map((item) => ({\n version: item.origversion ?? item.version,\n }));\n return { releases };\n } catch (err) {\n if (err.message === HOST_DISABLED) {\n logger.trace({ packageName, err }, 'Host disabled');\n } else {\n logger.warn(\n { packageName, err },\n 'Repology lookup failed with unexpected error',\n );\n }\n\n throw new ExternalHostError(err);\n }\n }\n}\n"]}
@@ -30,7 +30,7 @@ class RubyVersionDatasource extends datasource_1.Datasource {
30
30
  // TODO: types (#22198)
31
31
  const rubyVersionsUrl = `${registryUrl}en/downloads/releases/`;
32
32
  try {
33
- const response = await this.http.get(rubyVersionsUrl);
33
+ const response = await this.http.getText(rubyVersionsUrl);
34
34
  const root = (0, html_1.parse)(response.body);
35
35
  const rows = root.querySelector('.release-list')?.querySelectorAll('tr') ?? [];
36
36
  rows.forEach((row) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/ruby-version/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { parse } from '../../../util/html';\nimport type { HttpError } from '../../../util/http';\nimport { asTimestamp } from '../../../util/timestamp';\nimport { isVersion, id as rubyVersioningId } from '../../versioning/ruby';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\n\nexport class RubyVersionDatasource extends Datasource {\n static readonly id = 'ruby-version';\n\n constructor() {\n super(RubyVersionDatasource.id);\n }\n\n override readonly defaultRegistryUrls = ['https://www.ruby-lang.org/'];\n\n override readonly customRegistrySupport = false;\n\n override readonly defaultVersioning = rubyVersioningId;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `release-list` table in the results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'We use the URL: https://github.com/ruby/ruby.';\n\n @cache({ namespace: `datasource-${RubyVersionDatasource.id}`, key: 'all' })\n async getReleases({\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n const res: ReleaseResult = {\n homepage: 'https://www.ruby-lang.org',\n sourceUrl: 'https://github.com/ruby/ruby',\n releases: [],\n };\n // TODO: types (#22198)\n const rubyVersionsUrl = `${registryUrl}en/downloads/releases/`;\n try {\n const response = await this.http.get(rubyVersionsUrl);\n\n const root = parse(response.body);\n const rows =\n root.querySelector('.release-list')?.querySelectorAll('tr') ?? [];\n rows.forEach((row) => {\n const tds = row.querySelectorAll('td');\n const columns: string[] = [];\n tds.forEach((td) => columns.push(td.innerHTML));\n if (columns.length) {\n const version = columns[0].replace('Ruby ', '');\n if (isVersion(version)) {\n const releaseTimestamp = asTimestamp(columns[1]);\n const changelogUrl = columns[2]\n .replace('<a href=\"', 'https://www.ruby-lang.org')\n .replace('\">more...</a>', '');\n res.releases.push({ version, releaseTimestamp, changelogUrl });\n }\n }\n });\n if (!res.releases.length) {\n logger.warn({ registryUrl }, 'Missing ruby releases');\n return null;\n }\n } catch (err) {\n this.handleGenericErrors(err);\n }\n\n return res;\n }\n\n override handleHttpErrors(err: HttpError): never | void {\n throw new ExternalHostError(err);\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/ruby-version/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '../../../logger';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { parse } from '../../../util/html';\nimport type { HttpError } from '../../../util/http';\nimport { asTimestamp } from '../../../util/timestamp';\nimport { isVersion, id as rubyVersioningId } from '../../versioning/ruby';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\n\nexport class RubyVersionDatasource extends Datasource {\n static readonly id = 'ruby-version';\n\n constructor() {\n super(RubyVersionDatasource.id);\n }\n\n override readonly defaultRegistryUrls = ['https://www.ruby-lang.org/'];\n\n override readonly customRegistrySupport = false;\n\n override readonly defaultVersioning = rubyVersioningId;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `release-list` table in the results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'We use the URL: https://github.com/ruby/ruby.';\n\n @cache({ namespace: `datasource-${RubyVersionDatasource.id}`, key: 'all' })\n async getReleases({\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n const res: ReleaseResult = {\n homepage: 'https://www.ruby-lang.org',\n sourceUrl: 'https://github.com/ruby/ruby',\n releases: [],\n };\n // TODO: types (#22198)\n const rubyVersionsUrl = `${registryUrl}en/downloads/releases/`;\n try {\n const response = await this.http.getText(rubyVersionsUrl);\n\n const root = parse(response.body);\n const rows =\n root.querySelector('.release-list')?.querySelectorAll('tr') ?? [];\n rows.forEach((row) => {\n const tds = row.querySelectorAll('td');\n const columns: string[] = [];\n tds.forEach((td) => columns.push(td.innerHTML));\n if (columns.length) {\n const version = columns[0].replace('Ruby ', '');\n if (isVersion(version)) {\n const releaseTimestamp = asTimestamp(columns[1]);\n const changelogUrl = columns[2]\n .replace('<a href=\"', 'https://www.ruby-lang.org')\n .replace('\">more...</a>', '');\n res.releases.push({ version, releaseTimestamp, changelogUrl });\n }\n }\n });\n if (!res.releases.length) {\n logger.warn({ registryUrl }, 'Missing ruby releases');\n return null;\n }\n } catch (err) {\n this.handleGenericErrors(err);\n }\n\n return res;\n }\n\n override handleHttpErrors(err: HttpError): never | void {\n throw new ExternalHostError(err);\n }\n}\n"]}
@@ -41,7 +41,7 @@ class RubygemsDatasource extends datasource_1.Datasource {
41
41
  sourceUrlSupport = 'release';
42
42
  sourceUrlNote = 'The source URL is determined from the `source_code_uri` field in the results.';
43
43
  async getReleases({ packageName, registryUrl, }) {
44
- // istanbul ignore if
44
+ /* v8 ignore next 3 -- should never happen */
45
45
  if (!registryUrl) {
46
46
  return null;
47
47
  }
@@ -71,7 +71,7 @@ class RubygemsDatasource extends datasource_1.Datasource {
71
71
  }
72
72
  getReleasesViaInfoEndpoint(registryUrl, packageName) {
73
73
  const url = (0, url_1.joinUrlParts)(registryUrl, '/info', packageName);
74
- return result_1.Result.wrap(this.http.get(url))
74
+ return result_1.Result.wrap(this.http.getText(url))
75
75
  .transform(({ body }) => body)
76
76
  .parse(schema_1.GemInfo);
77
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/rubygems/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Marshal } from '@qnighy/marshal';\nimport type { ZodError } from 'zod';\nimport { logger } from '../../../logger';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { Http, HttpError } from '../../../util/http';\nimport { AsyncResult, Result } from '../../../util/result';\nimport { getQueryString, joinUrlParts, parseUrl } from '../../../util/url';\nimport * as rubyVersioning from '../../versioning/ruby';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport { getV1Releases } from './common';\nimport { MetadataCache } from './metadata-cache';\nimport { GemInfo, MarshalledVersionInfo } from './schema';\nimport { VersionsEndpointCache } from './versions-endpoint-cache';\n\nfunction unlessServerSide<\n T extends NonNullable<unknown>,\n E extends NonNullable<unknown>,\n>(err: E, cb: () => AsyncResult<T, E>): AsyncResult<T, E> {\n if (err instanceof HttpError && err.response?.statusCode) {\n const code = err.response.statusCode;\n if (code >= 500 && code <= 599) {\n return AsyncResult.err(err);\n }\n }\n return cb();\n}\n\nexport class RubygemsDatasource extends Datasource {\n static readonly id = 'rubygems';\n\n private metadataCache: MetadataCache;\n\n constructor() {\n super(RubygemsDatasource.id);\n this.http = new Http(RubygemsDatasource.id);\n this.versionsEndpointCache = new VersionsEndpointCache(this.http);\n this.metadataCache = new MetadataCache(this.http);\n }\n\n override readonly defaultRegistryUrls = ['https://rubygems.org'];\n\n override readonly defaultVersioning = rubyVersioning.id;\n\n override readonly registryStrategy = 'hunt';\n\n private readonly versionsEndpointCache: VersionsEndpointCache;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `created_at` field in the results.';\n override readonly sourceUrlSupport = 'release';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `source_code_uri` field in the results.';\n\n @cache({\n namespace: `datasource-${RubygemsDatasource.id}`,\n key: ({ packageName, registryUrl }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `releases:${registryUrl!}:${packageName}`,\n cacheable: ({ registryUrl }: GetReleasesConfig) => {\n const registryHostname = parseUrl(registryUrl)?.hostname;\n return registryHostname === 'rubygems.org';\n },\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n // istanbul ignore if\n if (!registryUrl) {\n return null;\n }\n\n const registryHostname = parseUrl(registryUrl)?.hostname;\n\n let result: AsyncResult<ReleaseResult, Error | string>;\n if (registryHostname === 'rubygems.org') {\n result = Result.wrap(\n this.versionsEndpointCache.getVersions(registryUrl, packageName),\n ).transform((versions) =>\n this.metadataCache.getRelease(registryUrl, packageName, versions),\n );\n } else if (\n registryHostname === 'rubygems.pkg.github.com' ||\n registryHostname === 'gitlab.com'\n ) {\n result = this.getReleasesViaDeprecatedAPI(registryUrl, packageName);\n } else {\n result = getV1Releases(this.http, registryUrl, packageName)\n .catch((err) =>\n unlessServerSide(err, () =>\n this.getReleasesViaInfoEndpoint(registryUrl, packageName),\n ),\n )\n .catch((err) =>\n unlessServerSide(err, () =>\n this.getReleasesViaDeprecatedAPI(registryUrl, packageName),\n ),\n );\n }\n\n const { val, err } = await result.unwrap();\n if (val) {\n return val;\n }\n\n if (err instanceof Error) {\n this.handleGenericErrors(err);\n }\n\n logger.debug({ packageName, registryUrl }, `Rubygems fetch error: ${err}`);\n return null;\n }\n\n private getReleasesViaInfoEndpoint(\n registryUrl: string,\n packageName: string,\n ): AsyncResult<ReleaseResult, Error | ZodError> {\n const url = joinUrlParts(registryUrl, '/info', packageName);\n return Result.wrap(this.http.get(url))\n .transform(({ body }) => body)\n .parse(GemInfo);\n }\n\n private getReleasesViaDeprecatedAPI(\n registryUrl: string,\n packageName: string,\n ): AsyncResult<ReleaseResult, Error | ZodError> {\n const path = joinUrlParts(registryUrl, `/api/v1/dependencies`);\n const query = getQueryString({ gems: packageName });\n const url = `${path}?${query}`;\n const bufPromise = this.http.getBuffer(url);\n return Result.wrap(bufPromise).transform(({ body }) =>\n MarshalledVersionInfo.safeParse(Marshal.parse(body)),\n );\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/rubygems/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Marshal } from '@qnighy/marshal';\nimport type { ZodError } from 'zod';\nimport { logger } from '../../../logger';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { Http, HttpError } from '../../../util/http';\nimport { AsyncResult, Result } from '../../../util/result';\nimport { getQueryString, joinUrlParts, parseUrl } from '../../../util/url';\nimport * as rubyVersioning from '../../versioning/ruby';\nimport { Datasource } from '../datasource';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport { getV1Releases } from './common';\nimport { MetadataCache } from './metadata-cache';\nimport { GemInfo, MarshalledVersionInfo } from './schema';\nimport { VersionsEndpointCache } from './versions-endpoint-cache';\n\nfunction unlessServerSide<\n T extends NonNullable<unknown>,\n E extends NonNullable<unknown>,\n>(err: E, cb: () => AsyncResult<T, E>): AsyncResult<T, E> {\n if (err instanceof HttpError && err.response?.statusCode) {\n const code = err.response.statusCode;\n if (code >= 500 && code <= 599) {\n return AsyncResult.err(err);\n }\n }\n return cb();\n}\n\nexport class RubygemsDatasource extends Datasource {\n static readonly id = 'rubygems';\n\n private metadataCache: MetadataCache;\n\n constructor() {\n super(RubygemsDatasource.id);\n this.http = new Http(RubygemsDatasource.id);\n this.versionsEndpointCache = new VersionsEndpointCache(this.http);\n this.metadataCache = new MetadataCache(this.http);\n }\n\n override readonly defaultRegistryUrls = ['https://rubygems.org'];\n\n override readonly defaultVersioning = rubyVersioning.id;\n\n override readonly registryStrategy = 'hunt';\n\n private readonly versionsEndpointCache: VersionsEndpointCache;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is determined from the `created_at` field in the results.';\n override readonly sourceUrlSupport = 'release';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `source_code_uri` field in the results.';\n\n @cache({\n namespace: `datasource-${RubygemsDatasource.id}`,\n key: ({ packageName, registryUrl }: GetReleasesConfig) =>\n // TODO: types (#22198)\n `releases:${registryUrl!}:${packageName}`,\n cacheable: ({ registryUrl }: GetReleasesConfig) => {\n const registryHostname = parseUrl(registryUrl)?.hostname;\n return registryHostname === 'rubygems.org';\n },\n })\n 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 const registryHostname = parseUrl(registryUrl)?.hostname;\n\n let result: AsyncResult<ReleaseResult, Error | string>;\n if (registryHostname === 'rubygems.org') {\n result = Result.wrap(\n this.versionsEndpointCache.getVersions(registryUrl, packageName),\n ).transform((versions) =>\n this.metadataCache.getRelease(registryUrl, packageName, versions),\n );\n } else if (\n registryHostname === 'rubygems.pkg.github.com' ||\n registryHostname === 'gitlab.com'\n ) {\n result = this.getReleasesViaDeprecatedAPI(registryUrl, packageName);\n } else {\n result = getV1Releases(this.http, registryUrl, packageName)\n .catch((err) =>\n unlessServerSide(err, () =>\n this.getReleasesViaInfoEndpoint(registryUrl, packageName),\n ),\n )\n .catch((err) =>\n unlessServerSide(err, () =>\n this.getReleasesViaDeprecatedAPI(registryUrl, packageName),\n ),\n );\n }\n\n const { val, err } = await result.unwrap();\n if (val) {\n return val;\n }\n\n if (err instanceof Error) {\n this.handleGenericErrors(err);\n }\n\n logger.debug({ packageName, registryUrl }, `Rubygems fetch error: ${err}`);\n return null;\n }\n\n private getReleasesViaInfoEndpoint(\n registryUrl: string,\n packageName: string,\n ): AsyncResult<ReleaseResult, Error | ZodError> {\n const url = joinUrlParts(registryUrl, '/info', packageName);\n return Result.wrap(this.http.getText(url))\n .transform(({ body }) => body)\n .parse(GemInfo);\n }\n\n private getReleasesViaDeprecatedAPI(\n registryUrl: string,\n packageName: string,\n ): AsyncResult<ReleaseResult, Error | ZodError> {\n const path = joinUrlParts(registryUrl, `/api/v1/dependencies`);\n const query = getQueryString({ gems: packageName });\n const url = `${path}?${query}`;\n const bufPromise = this.http.getBuffer(url);\n return Result.wrap(bufPromise).transform(({ body }) =>\n MarshalledVersionInfo.safeParse(Marshal.parse(body)),\n );\n }\n}\n"]}
@@ -146,7 +146,7 @@ class VersionsEndpointCache {
146
146
  try {
147
147
  const url = `${registryUrl}/versions`;
148
148
  const opts = { headers: { 'Accept-Encoding': 'gzip' } };
149
- const { body } = await this.http.get(url, opts);
149
+ const { body } = await this.http.getText(url, opts);
150
150
  return parseFullBody(body);
151
151
  }
152
152
  catch (err) {
@@ -166,7 +166,7 @@ class VersionsEndpointCache {
166
166
  ['Range']: `bytes=${startByte}-`,
167
167
  },
168
168
  };
169
- const { statusCode, body } = await this.http.get(url, opts);
169
+ const { statusCode, body } = await this.http.getText(url, opts);
170
170
  /**
171
171
  * Rubygems will return the full body instead of `416 Range Not Satisfiable`.
172
172
  * In this case, status code will be 200 instead of 206.
@@ -1 +1 @@
1
- {"version":3,"file":"versions-endpoint-cache.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/rubygems/versions-endpoint-cache.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport { logger } from '../../../logger';\nimport { getElapsedMinutes } from '../../../util/date';\nimport type { Http } from '../../../util/http';\nimport { HttpError } from '../../../util/http';\nimport type { HttpOptions } from '../../../util/http/types';\nimport { newlineRegex } from '../../../util/regex';\nimport { Result } from '../../../util/result';\nimport { LooseArray } from '../../../util/schema-utils';\nimport { copystr } from '../../../util/string';\nimport { parseUrl } from '../../../util/url';\n\ntype PackageVersions = Map<string, string[]>;\n\ninterface VersionsEndpointData {\n packageVersions: PackageVersions;\n syncedAt: Date;\n contentLength: number;\n\n /**\n * Last 33 characters of the response (32 hex digits + newline)\n */\n contentTail: string;\n}\n\nfunction getContentTail(content: string): string {\n return content.slice(-33);\n}\n\nfunction getContentHead(content: string): string {\n return content.slice(0, 33);\n}\n\nfunction stripContentHead(content: string): string {\n return content.slice(33);\n}\n\nfunction reconcilePackageVersions(\n packageVersions: PackageVersions,\n versionLines: VersionLines,\n): PackageVersions {\n for (const line of versionLines) {\n const packageName = copystr(line.packageName);\n let versions = packageVersions.get(packageName) ?? [];\n\n const { deletedVersions, addedVersions } = line;\n\n if (deletedVersions.size > 0) {\n versions = versions.filter((v) => !deletedVersions.has(v));\n }\n\n if (addedVersions.length > 0) {\n const existingVersions = new Set(versions);\n for (const addedVersion of addedVersions) {\n if (!existingVersions.has(addedVersion)) {\n const version = copystr(addedVersion);\n versions.push(version);\n }\n }\n }\n\n packageVersions.set(packageName, versions);\n }\n\n return packageVersions;\n}\n\nfunction parseFullBody(body: string): VersionsEndpointResult {\n const packageVersions = reconcilePackageVersions(\n new Map<string, string[]>(),\n VersionLines.parse(body),\n );\n const syncedAt = new Date();\n const contentLength = body.length;\n const contentTail = getContentTail(body);\n\n return Result.ok({\n packageVersions,\n syncedAt,\n contentLength,\n contentTail,\n });\n}\n\ntype VersionsEndpointResult = Result<VersionsEndpointData, 'unsupported-api'>;\n\nexport const memCache = new Map<string, VersionsEndpointResult>();\n\nfunction cacheResult(\n registryUrl: string,\n result: VersionsEndpointResult,\n): void {\n const registryHostname = parseUrl(registryUrl)?.hostname;\n if (registryHostname === 'rubygems.org') {\n memCache.set(registryUrl, result);\n }\n}\n\nconst VersionLines = z\n .string()\n .transform((x) => x.split(newlineRegex))\n .pipe(\n LooseArray(\n z\n .string()\n .transform((line) => line.trim())\n .refine((line) => line.length > 0)\n .refine((line) => !line.startsWith('created_at:'))\n .refine((line) => line !== '---')\n .transform((line) => line.split(' '))\n .pipe(z.tuple([z.string(), z.string()]).rest(z.string()))\n .transform(([packageName, versions]) => {\n const deletedVersions = new Set<string>();\n const addedVersions: string[] = [];\n for (const version of versions.split(',')) {\n if (version.startsWith('-')) {\n deletedVersions.add(version.slice(1));\n } else {\n addedVersions.push(version);\n }\n }\n return { packageName, deletedVersions, addedVersions };\n }),\n ),\n );\ntype VersionLines = z.infer<typeof VersionLines>;\n\nfunction isStale(regCache: VersionsEndpointData): boolean {\n return getElapsedMinutes(regCache.syncedAt) >= 15;\n}\n\nexport type VersionsResult = Result<\n string[],\n 'unsupported-api' | 'package-not-found'\n>;\n\nexport class VersionsEndpointCache {\n constructor(private readonly http: Http) {}\n\n private cacheRequests = new Map<string, Promise<VersionsEndpointResult>>();\n\n /**\n * At any given time, there should only be one request for a given registryUrl.\n */\n private async getCache(registryUrl: string): Promise<VersionsEndpointResult> {\n const oldResult = memCache.get(registryUrl);\n if (!oldResult) {\n const newResult = await this.fullSync(registryUrl);\n cacheResult(registryUrl, newResult);\n return newResult;\n }\n\n const { val: data } = oldResult.unwrap();\n if (!data) {\n return oldResult;\n }\n\n if (isStale(data)) {\n memCache.delete(registryUrl); // If no error is thrown, we'll re-set the cache\n const newResult = await this.deltaSync(data, registryUrl);\n cacheResult(registryUrl, newResult);\n return newResult;\n }\n\n return oldResult;\n }\n\n async getVersions(\n registryUrl: string,\n packageName: string,\n ): Promise<VersionsResult> {\n /**\n * Ensure that only one request for a given registryUrl is in flight at a time.\n */\n let cacheRequest = this.cacheRequests.get(registryUrl);\n if (!cacheRequest) {\n cacheRequest = this.getCache(registryUrl);\n this.cacheRequests.set(registryUrl, cacheRequest);\n }\n let cachedResult: VersionsEndpointResult;\n try {\n cachedResult = await cacheRequest;\n } finally {\n this.cacheRequests.delete(registryUrl);\n }\n\n const { val: cachedData } = cachedResult.unwrap();\n if (!cachedData) {\n logger.debug(\n { packageName, registryUrl },\n 'Rubygems: endpoint not supported',\n );\n return Result.err('unsupported-api');\n }\n\n const versions = cachedData.packageVersions.get(packageName);\n if (!versions?.length) {\n logger.debug(\n { packageName, registryUrl },\n 'Rubygems: versions not found',\n );\n return Result.err('package-not-found');\n }\n\n return Result.ok(versions);\n }\n\n private async fullSync(registryUrl: string): Promise<VersionsEndpointResult> {\n try {\n const url = `${registryUrl}/versions`;\n const opts: HttpOptions = { headers: { 'Accept-Encoding': 'gzip' } };\n const { body } = await this.http.get(url, opts);\n return parseFullBody(body);\n } catch (err) {\n if (err instanceof HttpError && err.response?.statusCode === 404) {\n return Result.err('unsupported-api');\n }\n\n throw err;\n }\n }\n\n private async deltaSync(\n oldCache: VersionsEndpointData,\n registryUrl: string,\n ): Promise<VersionsEndpointResult> {\n try {\n const url = `${registryUrl}/versions`;\n const startByte = oldCache.contentLength - oldCache.contentTail.length;\n const opts: HttpOptions = {\n headers: {\n ['Accept-Encoding']: 'deflate, compress, br', // Note: `gzip` usage breaks http client, when used with `Range` header\n ['Range']: `bytes=${startByte}-`,\n },\n };\n const { statusCode, body } = await this.http.get(url, opts);\n\n /**\n * Rubygems will return the full body instead of `416 Range Not Satisfiable`.\n * In this case, status code will be 200 instead of 206.\n */\n if (statusCode === 200) {\n return parseFullBody(body);\n }\n\n /**\n * We request data in range that overlaps previously fetched data.\n * If the head of the response doesn't match the tail of the previous response,\n * it means that the data we have is no longer valid.\n * In this case we start over with a full sync.\n */\n const contentHead = getContentHead(body);\n if (contentHead !== oldCache.contentTail) {\n return this.fullSync(registryUrl);\n }\n\n /**\n * Update the cache with the new data.\n */\n const delta = stripContentHead(body);\n const packageVersions = reconcilePackageVersions(\n oldCache.packageVersions,\n VersionLines.parse(delta),\n );\n const syncedAt = new Date();\n const contentLength = oldCache.contentLength + delta.length;\n const contentTail = getContentTail(body);\n\n return Result.ok({\n packageVersions,\n syncedAt,\n contentLength,\n contentTail,\n });\n } catch (err) {\n if (err instanceof HttpError) {\n const responseStatus = err.response?.statusCode;\n\n /**\n * In case of `416 Range Not Satisfiable` we do a full sync.\n * This is unlikely to happen in real life, but anyway.\n */\n if (responseStatus === 416) {\n return this.fullSync(registryUrl);\n }\n\n /**\n * If the endpoint is not supported, we stop trying.\n * This is unlikely to happen in real life, but still.\n */\n if (responseStatus === 404) {\n return Result.err('unsupported-api');\n }\n }\n\n throw err;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"versions-endpoint-cache.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/rubygems/versions-endpoint-cache.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport { logger } from '../../../logger';\nimport { getElapsedMinutes } from '../../../util/date';\nimport type { Http } from '../../../util/http';\nimport { HttpError } from '../../../util/http';\nimport type { HttpOptions } from '../../../util/http/types';\nimport { newlineRegex } from '../../../util/regex';\nimport { Result } from '../../../util/result';\nimport { LooseArray } from '../../../util/schema-utils';\nimport { copystr } from '../../../util/string';\nimport { parseUrl } from '../../../util/url';\n\ntype PackageVersions = Map<string, string[]>;\n\ninterface VersionsEndpointData {\n packageVersions: PackageVersions;\n syncedAt: Date;\n contentLength: number;\n\n /**\n * Last 33 characters of the response (32 hex digits + newline)\n */\n contentTail: string;\n}\n\nfunction getContentTail(content: string): string {\n return content.slice(-33);\n}\n\nfunction getContentHead(content: string): string {\n return content.slice(0, 33);\n}\n\nfunction stripContentHead(content: string): string {\n return content.slice(33);\n}\n\nfunction reconcilePackageVersions(\n packageVersions: PackageVersions,\n versionLines: VersionLines,\n): PackageVersions {\n for (const line of versionLines) {\n const packageName = copystr(line.packageName);\n let versions = packageVersions.get(packageName) ?? [];\n\n const { deletedVersions, addedVersions } = line;\n\n if (deletedVersions.size > 0) {\n versions = versions.filter((v) => !deletedVersions.has(v));\n }\n\n if (addedVersions.length > 0) {\n const existingVersions = new Set(versions);\n for (const addedVersion of addedVersions) {\n if (!existingVersions.has(addedVersion)) {\n const version = copystr(addedVersion);\n versions.push(version);\n }\n }\n }\n\n packageVersions.set(packageName, versions);\n }\n\n return packageVersions;\n}\n\nfunction parseFullBody(body: string): VersionsEndpointResult {\n const packageVersions = reconcilePackageVersions(\n new Map<string, string[]>(),\n VersionLines.parse(body),\n );\n const syncedAt = new Date();\n const contentLength = body.length;\n const contentTail = getContentTail(body);\n\n return Result.ok({\n packageVersions,\n syncedAt,\n contentLength,\n contentTail,\n });\n}\n\ntype VersionsEndpointResult = Result<VersionsEndpointData, 'unsupported-api'>;\n\nexport const memCache = new Map<string, VersionsEndpointResult>();\n\nfunction cacheResult(\n registryUrl: string,\n result: VersionsEndpointResult,\n): void {\n const registryHostname = parseUrl(registryUrl)?.hostname;\n if (registryHostname === 'rubygems.org') {\n memCache.set(registryUrl, result);\n }\n}\n\nconst VersionLines = z\n .string()\n .transform((x) => x.split(newlineRegex))\n .pipe(\n LooseArray(\n z\n .string()\n .transform((line) => line.trim())\n .refine((line) => line.length > 0)\n .refine((line) => !line.startsWith('created_at:'))\n .refine((line) => line !== '---')\n .transform((line) => line.split(' '))\n .pipe(z.tuple([z.string(), z.string()]).rest(z.string()))\n .transform(([packageName, versions]) => {\n const deletedVersions = new Set<string>();\n const addedVersions: string[] = [];\n for (const version of versions.split(',')) {\n if (version.startsWith('-')) {\n deletedVersions.add(version.slice(1));\n } else {\n addedVersions.push(version);\n }\n }\n return { packageName, deletedVersions, addedVersions };\n }),\n ),\n );\ntype VersionLines = z.infer<typeof VersionLines>;\n\nfunction isStale(regCache: VersionsEndpointData): boolean {\n return getElapsedMinutes(regCache.syncedAt) >= 15;\n}\n\nexport type VersionsResult = Result<\n string[],\n 'unsupported-api' | 'package-not-found'\n>;\n\nexport class VersionsEndpointCache {\n constructor(private readonly http: Http) {}\n\n private cacheRequests = new Map<string, Promise<VersionsEndpointResult>>();\n\n /**\n * At any given time, there should only be one request for a given registryUrl.\n */\n private async getCache(registryUrl: string): Promise<VersionsEndpointResult> {\n const oldResult = memCache.get(registryUrl);\n if (!oldResult) {\n const newResult = await this.fullSync(registryUrl);\n cacheResult(registryUrl, newResult);\n return newResult;\n }\n\n const { val: data } = oldResult.unwrap();\n if (!data) {\n return oldResult;\n }\n\n if (isStale(data)) {\n memCache.delete(registryUrl); // If no error is thrown, we'll re-set the cache\n const newResult = await this.deltaSync(data, registryUrl);\n cacheResult(registryUrl, newResult);\n return newResult;\n }\n\n return oldResult;\n }\n\n async getVersions(\n registryUrl: string,\n packageName: string,\n ): Promise<VersionsResult> {\n /**\n * Ensure that only one request for a given registryUrl is in flight at a time.\n */\n let cacheRequest = this.cacheRequests.get(registryUrl);\n if (!cacheRequest) {\n cacheRequest = this.getCache(registryUrl);\n this.cacheRequests.set(registryUrl, cacheRequest);\n }\n let cachedResult: VersionsEndpointResult;\n try {\n cachedResult = await cacheRequest;\n } finally {\n this.cacheRequests.delete(registryUrl);\n }\n\n const { val: cachedData } = cachedResult.unwrap();\n if (!cachedData) {\n logger.debug(\n { packageName, registryUrl },\n 'Rubygems: endpoint not supported',\n );\n return Result.err('unsupported-api');\n }\n\n const versions = cachedData.packageVersions.get(packageName);\n if (!versions?.length) {\n logger.debug(\n { packageName, registryUrl },\n 'Rubygems: versions not found',\n );\n return Result.err('package-not-found');\n }\n\n return Result.ok(versions);\n }\n\n private async fullSync(registryUrl: string): Promise<VersionsEndpointResult> {\n try {\n const url = `${registryUrl}/versions`;\n const opts: HttpOptions = { headers: { 'Accept-Encoding': 'gzip' } };\n const { body } = await this.http.getText(url, opts);\n return parseFullBody(body);\n } catch (err) {\n if (err instanceof HttpError && err.response?.statusCode === 404) {\n return Result.err('unsupported-api');\n }\n\n throw err;\n }\n }\n\n private async deltaSync(\n oldCache: VersionsEndpointData,\n registryUrl: string,\n ): Promise<VersionsEndpointResult> {\n try {\n const url = `${registryUrl}/versions`;\n const startByte = oldCache.contentLength - oldCache.contentTail.length;\n const opts: HttpOptions = {\n headers: {\n ['Accept-Encoding']: 'deflate, compress, br', // Note: `gzip` usage breaks http client, when used with `Range` header\n ['Range']: `bytes=${startByte}-`,\n },\n };\n const { statusCode, body } = await this.http.getText(url, opts);\n\n /**\n * Rubygems will return the full body instead of `416 Range Not Satisfiable`.\n * In this case, status code will be 200 instead of 206.\n */\n if (statusCode === 200) {\n return parseFullBody(body);\n }\n\n /**\n * We request data in range that overlaps previously fetched data.\n * If the head of the response doesn't match the tail of the previous response,\n * it means that the data we have is no longer valid.\n * In this case we start over with a full sync.\n */\n const contentHead = getContentHead(body);\n if (contentHead !== oldCache.contentTail) {\n return this.fullSync(registryUrl);\n }\n\n /**\n * Update the cache with the new data.\n */\n const delta = stripContentHead(body);\n const packageVersions = reconcilePackageVersions(\n oldCache.packageVersions,\n VersionLines.parse(delta),\n );\n const syncedAt = new Date();\n const contentLength = oldCache.contentLength + delta.length;\n const contentTail = getContentTail(body);\n\n return Result.ok({\n packageVersions,\n syncedAt,\n contentLength,\n contentTail,\n });\n } catch (err) {\n if (err instanceof HttpError) {\n const responseStatus = err.response?.statusCode;\n\n /**\n * In case of `416 Range Not Satisfiable` we do a full sync.\n * This is unlikely to happen in real life, but anyway.\n */\n if (responseStatus === 416) {\n return this.fullSync(registryUrl);\n }\n\n /**\n * If the endpoint is not supported, we stop trying.\n * This is unlikely to happen in real life, but still.\n */\n if (responseStatus === 404) {\n return Result.err('unsupported-api');\n }\n }\n\n throw err;\n }\n }\n}\n"]}
@@ -210,7 +210,7 @@ class SbtPackageDatasource extends maven_1.MavenDatasource {
210
210
  return null;
211
211
  }
212
212
  async postprocessRelease(config, release) {
213
- // istanbul ignore if
213
+ /* v8 ignore next 3 -- should never happen */
214
214
  if (!config.registryUrl) {
215
215
  return release;
216
216
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/sbt-package/index.ts"],"names":[],"mappings":"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","sourcesContent":["import * as upath from 'upath';\nimport { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger';\nimport * as packageCache from '../../../util/cache/package';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { Http } from '../../../util/http';\nimport { regEx } from '../../../util/regex';\nimport type { Timestamp } from '../../../util/timestamp';\nimport { asTimestamp } from '../../../util/timestamp';\nimport { ensureTrailingSlash, trimTrailingSlash } from '../../../util/url';\nimport * as ivyVersioning from '../../versioning/ivy';\nimport { compare } from '../../versioning/maven/compare';\nimport { MavenDatasource } from '../maven';\nimport { MAVEN_REPO } from '../maven/common';\nimport { downloadHttpContent, downloadHttpProtocol } from '../maven/util';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n RegistryStrategy,\n Release,\n ReleaseResult,\n} from '../types';\nimport { extractPageLinks, getLatestVersion } from './util';\n\ninterface ScalaDepCoordinate {\n groupId: string;\n artifactId: string;\n scalaVersion?: string;\n}\n\ninterface PomInfo {\n homepage?: string;\n sourceUrl?: string;\n releaseTimestamp?: Timestamp;\n}\n\nexport class SbtPackageDatasource extends MavenDatasource {\n static override readonly id = 'sbt-package';\n\n override readonly defaultRegistryUrls = [MAVEN_REPO];\n\n override readonly defaultVersioning = ivyVersioning.id;\n\n override readonly registryStrategy: RegistryStrategy = 'hunt';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `scm` tags in the results.';\n\n constructor(id = SbtPackageDatasource.id) {\n super(id);\n this.http = new Http('sbt');\n }\n\n protected static parseDepCoordinate(packageName: string): ScalaDepCoordinate {\n const [groupId, javaArtifactId] = packageName.split(':');\n const [artifactId, scalaVersion] = javaArtifactId.split('_');\n return { groupId, artifactId, scalaVersion };\n }\n\n async getSbtReleases(\n registryUrl: string,\n packageName: string,\n ): Promise<ReleaseResult | null> {\n const { groupId, artifactId, scalaVersion } =\n SbtPackageDatasource.parseDepCoordinate(packageName);\n\n const groupIdSplit = groupId.split('.');\n const repoRootUrl = ensureTrailingSlash(registryUrl);\n\n const validRootUrlKey = `valid-root-url:${registryUrl}:${packageName}`;\n const validRootUrl = await packageCache.get<string>(\n 'datasource-sbt-package',\n validRootUrlKey,\n );\n\n const packageRootUrls: string[] = [];\n // istanbul ignore if: not easily testable\n if (validRootUrl) {\n packageRootUrls.push(validRootUrl);\n } else {\n const packageRootUrlWith = (sep: string): string =>\n `${repoRootUrl}${groupIdSplit.join(sep)}`;\n packageRootUrls.push(ensureTrailingSlash(packageRootUrlWith('/')));\n packageRootUrls.push(ensureTrailingSlash(packageRootUrlWith('.')));\n }\n\n let dependencyUrl: string | undefined;\n let packageUrls: string[] | undefined;\n for (const packageRootUrl of packageRootUrls) {\n const packageRootContent = await downloadHttpContent(\n this.http,\n packageRootUrl,\n );\n if (!packageRootContent) {\n continue;\n }\n\n await packageCache.set(\n 'datasource-sbt-package',\n validRootUrlKey,\n packageRootUrl,\n 30 * 24 * 60,\n );\n\n dependencyUrl = trimTrailingSlash(packageRootUrl);\n\n const rootPath = new URL(packageRootUrl).pathname;\n const artifactSubdirs = extractPageLinks(packageRootContent, (href) => {\n const path = href.replace(rootPath, '');\n\n if (\n path.startsWith(`${artifactId}_native`) ||\n path.startsWith(`${artifactId}_sjs`)\n ) {\n return null;\n }\n\n if (path === artifactId || path.startsWith(`${artifactId}_`)) {\n return ensureTrailingSlash(`${packageRootUrl}${path}`);\n }\n\n return null;\n });\n\n if (scalaVersion) {\n const scalaSubdir = artifactSubdirs.find((x) =>\n x.endsWith(`/${artifactId}_${scalaVersion}/`),\n );\n if (scalaSubdir) {\n packageUrls = [scalaSubdir];\n break;\n }\n }\n\n packageUrls = artifactSubdirs;\n break;\n }\n\n if (!packageUrls) {\n return null;\n }\n\n const invalidPackageUrlsKey = `invalid-package-urls:${registryUrl}:${packageName}`;\n const invalidPackageUrls = new Set(\n await packageCache.get<string[]>(\n 'datasource-sbt-package',\n invalidPackageUrlsKey,\n ),\n );\n packageUrls = packageUrls.filter((url) => !invalidPackageUrls.has(url));\n\n const allVersions = new Set<string>();\n for (const pkgUrl of packageUrls) {\n const packageContent = await downloadHttpContent(this.http, pkgUrl);\n // istanbul ignore if\n if (!packageContent) {\n invalidPackageUrls.add(pkgUrl);\n continue;\n }\n\n const rootPath = new URL(pkgUrl).pathname;\n const versions = extractPageLinks(packageContent, (href) => {\n const path = href.replace(rootPath, '');\n if (path.startsWith('.')) {\n return null;\n }\n\n return path;\n });\n\n for (const version of versions) {\n allVersions.add(version);\n }\n }\n\n if (invalidPackageUrls.size > 0) {\n await packageCache.set(\n 'datasource-sbt-package',\n invalidPackageUrlsKey,\n [...invalidPackageUrls],\n 30 * 24 * 60,\n );\n }\n\n if (packageUrls.length > 0) {\n const packageUrlsKey = `package-urls:${registryUrl}:${packageName}`;\n await packageCache.set(\n 'datasource-sbt-package',\n packageUrlsKey,\n packageUrls,\n 30 * 24 * 60,\n );\n }\n\n const versions = [...allVersions];\n if (!versions.length) {\n return null;\n }\n\n const releases: Release[] = [...allVersions]\n .sort(compare)\n .map((version) => ({ version }));\n const res: ReleaseResult = { releases, dependencyUrl };\n\n const latestVersion = getLatestVersion(versions);\n const pomInfo = await this.getPomInfo(\n registryUrl,\n packageName,\n latestVersion,\n packageUrls,\n );\n\n if (pomInfo?.homepage) {\n res.homepage = pomInfo.homepage;\n }\n\n if (pomInfo?.sourceUrl) {\n res.sourceUrl = pomInfo.sourceUrl;\n }\n\n return res;\n }\n\n async getPomInfo(\n registryUrl: string,\n packageName: string,\n version: string | null,\n pkgUrls?: string[],\n ): Promise<PomInfo | null> {\n const packageUrlsKey = `package-urls:${registryUrl}:${packageName}`;\n // istanbul ignore next: will be covered later\n const packageUrls =\n pkgUrls ??\n (await packageCache.get<string[]>(\n 'datasource-sbt-package',\n packageUrlsKey,\n ));\n\n // istanbul ignore if\n if (!packageUrls?.length) {\n return null;\n }\n\n // istanbul ignore if\n if (!version) {\n return null;\n }\n\n const invalidPomFilesKey = `invalid-pom-files:${registryUrl}:${packageName}:${version}`;\n const invalidPomFiles = new Set(\n await packageCache.get<string[]>(\n 'datasource-sbt-package',\n invalidPomFilesKey,\n ),\n );\n\n const saveCache = async (): Promise<void> => {\n if (invalidPomFiles.size > 0) {\n await packageCache.set(\n 'datasource-sbt-package',\n invalidPomFilesKey,\n [...invalidPomFiles],\n 30 * 24 * 60,\n );\n }\n };\n\n for (const packageUrl of packageUrls) {\n const artifactDir = upath.basename(packageUrl);\n const [artifact] = artifactDir.split('_');\n\n for (const pomFilePrefix of [artifactDir, artifact]) {\n const pomFileName = `${pomFilePrefix}-${version}.pom`;\n const pomUrl = `${packageUrl}${version}/${pomFileName}`;\n if (invalidPomFiles.has(pomUrl)) {\n continue;\n }\n\n const res = await downloadHttpProtocol(this.http, pomUrl);\n const { val } = res.unwrap();\n if (!val) {\n invalidPomFiles.add(pomUrl);\n continue;\n }\n\n const result: PomInfo = {};\n\n const releaseTimestamp = asTimestamp(val.lastModified);\n if (releaseTimestamp) {\n result.releaseTimestamp = releaseTimestamp;\n }\n\n const pomXml = new XmlDocument(val.data);\n\n const homepage = pomXml.valueWithPath('url');\n if (homepage) {\n result.homepage = homepage;\n }\n\n const sourceUrl = pomXml.valueWithPath('scm.url');\n if (sourceUrl) {\n result.sourceUrl = sourceUrl\n .replace(regEx(/^scm:/), '')\n .replace(regEx(/^git:/), '')\n .replace(regEx(/^git@github.com:/), 'https://github.com/')\n .replace(regEx(/\\.git$/), '');\n }\n\n await saveCache();\n return result;\n }\n }\n\n await saveCache();\n return null;\n }\n\n override async getReleases(\n config: GetReleasesConfig,\n ): Promise<ReleaseResult | null> {\n const { packageName, registryUrl } = config;\n // istanbul ignore if\n if (!registryUrl) {\n return null;\n }\n\n const sbtReleases = await this.getSbtReleases(registryUrl, packageName);\n if (sbtReleases) {\n return sbtReleases;\n }\n\n logger.debug(\n `Sbt: no versions discovered for ${packageName} listing organization root package folder, fallback to maven datasource for version discovery`,\n );\n const mavenReleaseResult = await super.getReleases(config);\n if (mavenReleaseResult) {\n return mavenReleaseResult;\n }\n\n logger.debug(`Sbt: no versions found for \"${packageName}\"`);\n return null;\n }\n\n @cache({\n namespace: 'datasource-sbt-package',\n key: (\n { registryUrl, packageName }: PostprocessReleaseConfig,\n { version }: Release,\n ) => `postprocessRelease:${registryUrl}:${packageName}:${version}`,\n ttlMinutes: 30 * 24 * 60,\n })\n override async postprocessRelease(\n config: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n // istanbul ignore if\n if (!config.registryUrl) {\n return release;\n }\n\n const res = await this.getPomInfo(\n config.registryUrl,\n config.packageName,\n release.version,\n );\n\n if (res?.releaseTimestamp) {\n release.releaseTimestamp = res.releaseTimestamp;\n }\n\n return release;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/sbt-package/index.ts"],"names":[],"mappings":";;;;AAAA,qDAA+B;AAC/B,mCAAqC;AACrC,4CAAyC;AACzC,kFAA4D;AAC5D,qEAA8D;AAC9D,6CAA0C;AAC1C,+CAA4C;AAE5C,uDAAsD;AACtD,2CAA2E;AAC3E,4EAAsD;AACtD,4DAAyD;AACzD,oCAA2C;AAC3C,4CAA6C;AAC7C,wCAA0E;AAS1E,iCAA4D;AAc5D,MAAa,oBAAqB,SAAQ,uBAAe;IACvD,MAAM,CAAmB,EAAE,GAAG,aAAa,CAAC;IAE1B,mBAAmB,GAAG,CAAC,mBAAU,CAAC,CAAC;IAEnC,iBAAiB,GAAG,aAAa,CAAC,EAAE,CAAC;IAErC,gBAAgB,GAAqB,MAAM,CAAC;IAE5C,gBAAgB,GAAG,SAAS,CAAC;IAC7B,aAAa,GAC7B,kEAAkE,CAAC;IAErE,YAAY,EAAE,GAAG,oBAAoB,CAAC,EAAE;QACtC,KAAK,CAAC,EAAE,CAAC,CAAC;QACV,IAAI,CAAC,IAAI,GAAG,IAAI,WAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAES,MAAM,CAAC,kBAAkB,CAAC,WAAmB;QACrD,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,WAAmB,EACnB,WAAmB;QAEnB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,GACzC,oBAAoB,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAEvD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,IAAA,yBAAmB,EAAC,WAAW,CAAC,CAAC;QAErD,MAAM,eAAe,GAAG,kBAAkB,WAAW,IAAI,WAAW,EAAE,CAAC;QACvE,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,GAAG,CACzC,wBAAwB,EACxB,eAAe,CAChB,CAAC;QAEF,MAAM,eAAe,GAAa,EAAE,CAAC;QACrC,0CAA0C;QAC1C,IAAI,YAAY,EAAE,CAAC;YACjB,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAU,EAAE,CACjD,GAAG,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5C,eAAe,CAAC,IAAI,CAAC,IAAA,yBAAmB,EAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACnE,eAAe,CAAC,IAAI,CAAC,IAAA,yBAAmB,EAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,aAAiC,CAAC;QACtC,IAAI,WAAiC,CAAC;QACtC,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE,CAAC;YAC7C,MAAM,kBAAkB,GAAG,MAAM,IAAA,0BAAmB,EAClD,IAAI,CAAC,IAAI,EACT,cAAc,CACf,CAAC;YACF,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACxB,SAAS;YACX,CAAC;YAED,MAAM,YAAY,CAAC,GAAG,CACpB,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,EAAE,GAAG,EAAE,GAAG,EAAE,CACb,CAAC;YAEF,aAAa,GAAG,IAAA,uBAAiB,EAAC,cAAc,CAAC,CAAC;YAElD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC;YAClD,MAAM,eAAe,GAAG,IAAA,uBAAgB,EAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE;gBACpE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAExC,IACE,IAAI,CAAC,UAAU,CAAC,GAAG,UAAU,SAAS,CAAC;oBACvC,IAAI,CAAC,UAAU,CAAC,GAAG,UAAU,MAAM,CAAC,EACpC,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC;oBAC7D,OAAO,IAAA,yBAAmB,EAAC,GAAG,cAAc,GAAG,IAAI,EAAE,CAAC,CAAC;gBACzD,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7C,CAAC,CAAC,QAAQ,CAAC,IAAI,UAAU,IAAI,YAAY,GAAG,CAAC,CAC9C,CAAC;gBACF,IAAI,WAAW,EAAE,CAAC;oBAChB,WAAW,GAAG,CAAC,WAAW,CAAC,CAAC;oBAC5B,MAAM;gBACR,CAAC;YACH,CAAC;YAED,WAAW,GAAG,eAAe,CAAC;YAC9B,MAAM;QACR,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,qBAAqB,GAAG,wBAAwB,WAAW,IAAI,WAAW,EAAE,CAAC;QACnF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAChC,MAAM,YAAY,CAAC,GAAG,CACpB,wBAAwB,EACxB,qBAAqB,CACtB,CACF,CAAC;QACF,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAExE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YACjC,MAAM,cAAc,GAAG,MAAM,IAAA,0BAAmB,EAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACpE,qBAAqB;YACrB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC/B,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAA,uBAAgB,EAAC,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACxC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzB,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,IAAI,kBAAkB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,YAAY,CAAC,GAAG,CACpB,wBAAwB,EACxB,qBAAqB,EACrB,CAAC,GAAG,kBAAkB,CAAC,EACvB,EAAE,GAAG,EAAE,GAAG,EAAE,CACb,CAAC;QACJ,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,cAAc,GAAG,gBAAgB,WAAW,IAAI,WAAW,EAAE,CAAC;YACpE,MAAM,YAAY,CAAC,GAAG,CACpB,wBAAwB,EACxB,cAAc,EACd,WAAW,EACX,EAAE,GAAG,EAAE,GAAG,EAAE,CACb,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAc,CAAC,GAAG,WAAW,CAAC;aACzC,IAAI,CAAC,iBAAO,CAAC;aACb,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,GAAG,GAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAEvD,MAAM,aAAa,GAAG,IAAA,uBAAgB,EAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CACnC,WAAW,EACX,WAAW,EACX,aAAa,EACb,WAAW,CACZ,CAAC;QAEF,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,CAAC;QAED,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;YACvB,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACpC,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,UAAU,CACd,WAAmB,EACnB,WAAmB,EACnB,OAAsB,EACtB,OAAkB;QAElB,MAAM,cAAc,GAAG,gBAAgB,WAAW,IAAI,WAAW,EAAE,CAAC;QACpE,8CAA8C;QAC9C,MAAM,WAAW,GACf,OAAO;YACP,CAAC,MAAM,YAAY,CAAC,GAAG,CACrB,wBAAwB,EACxB,cAAc,CACf,CAAC,CAAC;QAEL,qBAAqB;QACrB,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,kBAAkB,GAAG,qBAAqB,WAAW,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;QACxF,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,MAAM,YAAY,CAAC,GAAG,CACpB,wBAAwB,EACxB,kBAAkB,CACnB,CACF,CAAC;QAEF,MAAM,SAAS,GAAG,KAAK,IAAmB,EAAE;YAC1C,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,YAAY,CAAC,GAAG,CACpB,wBAAwB,EACxB,kBAAkB,EAClB,CAAC,GAAG,eAAe,CAAC,EACpB,EAAE,GAAG,EAAE,GAAG,EAAE,CACb,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE1C,KAAK,MAAM,aAAa,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACpD,MAAM,WAAW,GAAG,GAAG,aAAa,IAAI,OAAO,MAAM,CAAC;gBACtD,MAAM,MAAM,GAAG,GAAG,UAAU,GAAG,OAAO,IAAI,WAAW,EAAE,CAAC;gBACxD,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAChC,SAAS;gBACX,CAAC;gBAED,MAAM,GAAG,GAAG,MAAM,IAAA,2BAAoB,EAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC1D,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC5B,SAAS;gBACX,CAAC;gBAED,MAAM,MAAM,GAAY,EAAE,CAAC;gBAE3B,MAAM,gBAAgB,GAAG,IAAA,uBAAW,EAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACvD,IAAI,gBAAgB,EAAE,CAAC;oBACrB,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;gBAC7C,CAAC;gBAED,MAAM,MAAM,GAAG,IAAI,oBAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAEzC,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC7C,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAC7B,CAAC;gBAED,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBAClD,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,CAAC,SAAS,GAAG,SAAS;yBACzB,OAAO,CAAC,IAAA,aAAK,EAAC,OAAO,CAAC,EAAE,EAAE,CAAC;yBAC3B,OAAO,CAAC,IAAA,aAAK,EAAC,OAAO,CAAC,EAAE,EAAE,CAAC;yBAC3B,OAAO,CAAC,IAAA,aAAK,EAAC,kBAAkB,CAAC,EAAE,qBAAqB,CAAC;yBACzD,OAAO,CAAC,IAAA,aAAK,EAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClC,CAAC;gBAED,MAAM,SAAS,EAAE,CAAC;gBAClB,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAED,MAAM,SAAS,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,KAAK,CAAC,WAAW,CACxB,MAAyB;QAEzB,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;QAC5C,qBAAqB;QACrB,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACxE,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,eAAM,CAAC,KAAK,CACV,mCAAmC,WAAW,+FAA+F,CAC9I,CAAC;QACF,MAAM,kBAAkB,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO,kBAAkB,CAAC;QAC5B,CAAC;QAED,eAAM,CAAC,KAAK,CAAC,+BAA+B,WAAW,GAAG,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAUc,AAAN,KAAK,CAAC,kBAAkB,CAC/B,MAAgC,EAChC,OAAgB;QAEhB,6CAA6C;QAC7C,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAC/B,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,WAAW,EAClB,OAAO,CAAC,OAAO,CAChB,CAAC;QAEF,IAAI,GAAG,EAAE,gBAAgB,EAAE,CAAC;YAC1B,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,CAAC;QAClD,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;;AAhVH,oDAiVC;AArBgB;IARd,IAAA,iBAAK,EAAC;QACL,SAAS,EAAE,wBAAwB;QACnC,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,EAAE,GAAG,EAAE,GAAG,EAAE;KACzB,CAAC;8DAqBD","sourcesContent":["import * as upath from 'upath';\nimport { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger';\nimport * as packageCache from '../../../util/cache/package';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { Http } from '../../../util/http';\nimport { regEx } from '../../../util/regex';\nimport type { Timestamp } from '../../../util/timestamp';\nimport { asTimestamp } from '../../../util/timestamp';\nimport { ensureTrailingSlash, trimTrailingSlash } from '../../../util/url';\nimport * as ivyVersioning from '../../versioning/ivy';\nimport { compare } from '../../versioning/maven/compare';\nimport { MavenDatasource } from '../maven';\nimport { MAVEN_REPO } from '../maven/common';\nimport { downloadHttpContent, downloadHttpProtocol } from '../maven/util';\nimport type {\n GetReleasesConfig,\n PostprocessReleaseConfig,\n PostprocessReleaseResult,\n RegistryStrategy,\n Release,\n ReleaseResult,\n} from '../types';\nimport { extractPageLinks, getLatestVersion } from './util';\n\ninterface ScalaDepCoordinate {\n groupId: string;\n artifactId: string;\n scalaVersion?: string;\n}\n\ninterface PomInfo {\n homepage?: string;\n sourceUrl?: string;\n releaseTimestamp?: Timestamp;\n}\n\nexport class SbtPackageDatasource extends MavenDatasource {\n static override readonly id = 'sbt-package';\n\n override readonly defaultRegistryUrls = [MAVEN_REPO];\n\n override readonly defaultVersioning = ivyVersioning.id;\n\n override readonly registryStrategy: RegistryStrategy = 'hunt';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `scm` tags in the results.';\n\n constructor(id = SbtPackageDatasource.id) {\n super(id);\n this.http = new Http('sbt');\n }\n\n protected static parseDepCoordinate(packageName: string): ScalaDepCoordinate {\n const [groupId, javaArtifactId] = packageName.split(':');\n const [artifactId, scalaVersion] = javaArtifactId.split('_');\n return { groupId, artifactId, scalaVersion };\n }\n\n async getSbtReleases(\n registryUrl: string,\n packageName: string,\n ): Promise<ReleaseResult | null> {\n const { groupId, artifactId, scalaVersion } =\n SbtPackageDatasource.parseDepCoordinate(packageName);\n\n const groupIdSplit = groupId.split('.');\n const repoRootUrl = ensureTrailingSlash(registryUrl);\n\n const validRootUrlKey = `valid-root-url:${registryUrl}:${packageName}`;\n const validRootUrl = await packageCache.get<string>(\n 'datasource-sbt-package',\n validRootUrlKey,\n );\n\n const packageRootUrls: string[] = [];\n // istanbul ignore if: not easily testable\n if (validRootUrl) {\n packageRootUrls.push(validRootUrl);\n } else {\n const packageRootUrlWith = (sep: string): string =>\n `${repoRootUrl}${groupIdSplit.join(sep)}`;\n packageRootUrls.push(ensureTrailingSlash(packageRootUrlWith('/')));\n packageRootUrls.push(ensureTrailingSlash(packageRootUrlWith('.')));\n }\n\n let dependencyUrl: string | undefined;\n let packageUrls: string[] | undefined;\n for (const packageRootUrl of packageRootUrls) {\n const packageRootContent = await downloadHttpContent(\n this.http,\n packageRootUrl,\n );\n if (!packageRootContent) {\n continue;\n }\n\n await packageCache.set(\n 'datasource-sbt-package',\n validRootUrlKey,\n packageRootUrl,\n 30 * 24 * 60,\n );\n\n dependencyUrl = trimTrailingSlash(packageRootUrl);\n\n const rootPath = new URL(packageRootUrl).pathname;\n const artifactSubdirs = extractPageLinks(packageRootContent, (href) => {\n const path = href.replace(rootPath, '');\n\n if (\n path.startsWith(`${artifactId}_native`) ||\n path.startsWith(`${artifactId}_sjs`)\n ) {\n return null;\n }\n\n if (path === artifactId || path.startsWith(`${artifactId}_`)) {\n return ensureTrailingSlash(`${packageRootUrl}${path}`);\n }\n\n return null;\n });\n\n if (scalaVersion) {\n const scalaSubdir = artifactSubdirs.find((x) =>\n x.endsWith(`/${artifactId}_${scalaVersion}/`),\n );\n if (scalaSubdir) {\n packageUrls = [scalaSubdir];\n break;\n }\n }\n\n packageUrls = artifactSubdirs;\n break;\n }\n\n if (!packageUrls) {\n return null;\n }\n\n const invalidPackageUrlsKey = `invalid-package-urls:${registryUrl}:${packageName}`;\n const invalidPackageUrls = new Set(\n await packageCache.get<string[]>(\n 'datasource-sbt-package',\n invalidPackageUrlsKey,\n ),\n );\n packageUrls = packageUrls.filter((url) => !invalidPackageUrls.has(url));\n\n const allVersions = new Set<string>();\n for (const pkgUrl of packageUrls) {\n const packageContent = await downloadHttpContent(this.http, pkgUrl);\n // istanbul ignore if\n if (!packageContent) {\n invalidPackageUrls.add(pkgUrl);\n continue;\n }\n\n const rootPath = new URL(pkgUrl).pathname;\n const versions = extractPageLinks(packageContent, (href) => {\n const path = href.replace(rootPath, '');\n if (path.startsWith('.')) {\n return null;\n }\n\n return path;\n });\n\n for (const version of versions) {\n allVersions.add(version);\n }\n }\n\n if (invalidPackageUrls.size > 0) {\n await packageCache.set(\n 'datasource-sbt-package',\n invalidPackageUrlsKey,\n [...invalidPackageUrls],\n 30 * 24 * 60,\n );\n }\n\n if (packageUrls.length > 0) {\n const packageUrlsKey = `package-urls:${registryUrl}:${packageName}`;\n await packageCache.set(\n 'datasource-sbt-package',\n packageUrlsKey,\n packageUrls,\n 30 * 24 * 60,\n );\n }\n\n const versions = [...allVersions];\n if (!versions.length) {\n return null;\n }\n\n const releases: Release[] = [...allVersions]\n .sort(compare)\n .map((version) => ({ version }));\n const res: ReleaseResult = { releases, dependencyUrl };\n\n const latestVersion = getLatestVersion(versions);\n const pomInfo = await this.getPomInfo(\n registryUrl,\n packageName,\n latestVersion,\n packageUrls,\n );\n\n if (pomInfo?.homepage) {\n res.homepage = pomInfo.homepage;\n }\n\n if (pomInfo?.sourceUrl) {\n res.sourceUrl = pomInfo.sourceUrl;\n }\n\n return res;\n }\n\n async getPomInfo(\n registryUrl: string,\n packageName: string,\n version: string | null,\n pkgUrls?: string[],\n ): Promise<PomInfo | null> {\n const packageUrlsKey = `package-urls:${registryUrl}:${packageName}`;\n // istanbul ignore next: will be covered later\n const packageUrls =\n pkgUrls ??\n (await packageCache.get<string[]>(\n 'datasource-sbt-package',\n packageUrlsKey,\n ));\n\n // istanbul ignore if\n if (!packageUrls?.length) {\n return null;\n }\n\n // istanbul ignore if\n if (!version) {\n return null;\n }\n\n const invalidPomFilesKey = `invalid-pom-files:${registryUrl}:${packageName}:${version}`;\n const invalidPomFiles = new Set(\n await packageCache.get<string[]>(\n 'datasource-sbt-package',\n invalidPomFilesKey,\n ),\n );\n\n const saveCache = async (): Promise<void> => {\n if (invalidPomFiles.size > 0) {\n await packageCache.set(\n 'datasource-sbt-package',\n invalidPomFilesKey,\n [...invalidPomFiles],\n 30 * 24 * 60,\n );\n }\n };\n\n for (const packageUrl of packageUrls) {\n const artifactDir = upath.basename(packageUrl);\n const [artifact] = artifactDir.split('_');\n\n for (const pomFilePrefix of [artifactDir, artifact]) {\n const pomFileName = `${pomFilePrefix}-${version}.pom`;\n const pomUrl = `${packageUrl}${version}/${pomFileName}`;\n if (invalidPomFiles.has(pomUrl)) {\n continue;\n }\n\n const res = await downloadHttpProtocol(this.http, pomUrl);\n const { val } = res.unwrap();\n if (!val) {\n invalidPomFiles.add(pomUrl);\n continue;\n }\n\n const result: PomInfo = {};\n\n const releaseTimestamp = asTimestamp(val.lastModified);\n if (releaseTimestamp) {\n result.releaseTimestamp = releaseTimestamp;\n }\n\n const pomXml = new XmlDocument(val.data);\n\n const homepage = pomXml.valueWithPath('url');\n if (homepage) {\n result.homepage = homepage;\n }\n\n const sourceUrl = pomXml.valueWithPath('scm.url');\n if (sourceUrl) {\n result.sourceUrl = sourceUrl\n .replace(regEx(/^scm:/), '')\n .replace(regEx(/^git:/), '')\n .replace(regEx(/^git@github.com:/), 'https://github.com/')\n .replace(regEx(/\\.git$/), '');\n }\n\n await saveCache();\n return result;\n }\n }\n\n await saveCache();\n return null;\n }\n\n override async getReleases(\n config: GetReleasesConfig,\n ): Promise<ReleaseResult | null> {\n const { packageName, registryUrl } = config;\n // istanbul ignore if\n if (!registryUrl) {\n return null;\n }\n\n const sbtReleases = await this.getSbtReleases(registryUrl, packageName);\n if (sbtReleases) {\n return sbtReleases;\n }\n\n logger.debug(\n `Sbt: no versions discovered for ${packageName} listing organization root package folder, fallback to maven datasource for version discovery`,\n );\n const mavenReleaseResult = await super.getReleases(config);\n if (mavenReleaseResult) {\n return mavenReleaseResult;\n }\n\n logger.debug(`Sbt: no versions found for \"${packageName}\"`);\n return null;\n }\n\n @cache({\n namespace: 'datasource-sbt-package',\n key: (\n { registryUrl, packageName }: PostprocessReleaseConfig,\n { version }: Release,\n ) => `postprocessRelease:${registryUrl}:${packageName}:${version}`,\n ttlMinutes: 30 * 24 * 60,\n })\n override async postprocessRelease(\n config: PostprocessReleaseConfig,\n release: Release,\n ): Promise<PostprocessReleaseResult> {\n /* v8 ignore next 3 -- should never happen */\n if (!config.registryUrl) {\n return release;\n }\n\n const res = await this.getPomInfo(\n config.registryUrl,\n config.packageName,\n release.version,\n );\n\n if (res?.releaseTimestamp) {\n release.releaseTimestamp = res.releaseTimestamp;\n }\n\n return release;\n }\n}\n"]}
@@ -151,7 +151,7 @@ class SbtPluginDatasource extends datasource_1.Datasource {
151
151
  return null;
152
152
  }
153
153
  async getReleases({ packageName, registryUrl, }) {
154
- // istanbul ignore if
154
+ /* v8 ignore next 3 -- should never happen */
155
155
  if (!registryUrl) {
156
156
  return null;
157
157
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/sbt-plugin/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger';\nimport { Http } from '../../../util/http';\nimport { regEx } from '../../../util/regex';\nimport { ensureTrailingSlash } from '../../../util/url';\nimport * as ivyVersioning from '../../versioning/ivy';\nimport { compare } from '../../versioning/maven/compare';\nimport { Datasource } from '../datasource';\nimport { MAVEN_REPO } from '../maven/common';\nimport { downloadHttpContent } from '../maven/util';\nimport { extractPageLinks, getLatestVersion } from '../sbt-package/util';\nimport type {\n GetReleasesConfig,\n RegistryStrategy,\n ReleaseResult,\n} from '../types';\n\nexport const SBT_PLUGINS_REPO =\n 'https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases';\n\nexport class SbtPluginDatasource extends Datasource {\n static readonly id = 'sbt-plugin';\n\n override readonly defaultRegistryUrls = [SBT_PLUGINS_REPO, MAVEN_REPO];\n\n override readonly defaultVersioning = ivyVersioning.id;\n\n override readonly registryStrategy: RegistryStrategy = 'merge';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `scm` tags in the results.';\n\n constructor() {\n super(SbtPluginDatasource.id);\n this.http = new Http('sbt');\n }\n\n // istanbul ignore next: to be rewritten\n async getArtifactSubdirs(\n searchRoot: string,\n artifact: string,\n scalaVersion: string,\n ): Promise<string[] | null> {\n const pkgUrl = ensureTrailingSlash(searchRoot);\n const indexContent = await downloadHttpContent(this.http, pkgUrl);\n if (indexContent) {\n const rootPath = new URL(pkgUrl).pathname;\n let artifactSubdirs = extractPageLinks(indexContent, (href) => {\n const path = href.replace(rootPath, '');\n if (\n path.startsWith(`${artifact}_native`) ||\n path.startsWith(`${artifact}_sjs`)\n ) {\n return null;\n }\n\n if (path === artifact || path.startsWith(`${artifact}_`)) {\n return path;\n }\n\n return null;\n });\n\n if (\n scalaVersion &&\n artifactSubdirs.includes(`${artifact}_${scalaVersion}`)\n ) {\n artifactSubdirs = [`${artifact}_${scalaVersion}`];\n }\n return artifactSubdirs;\n }\n\n return null;\n }\n\n // istanbul ignore next: to be rewritten\n async getPackageReleases(\n searchRoot: string,\n artifactSubdirs: string[] | null,\n ): Promise<string[] | null> {\n if (artifactSubdirs) {\n const releases: string[] = [];\n for (const searchSubdir of artifactSubdirs) {\n const pkgUrl = ensureTrailingSlash(`${searchRoot}/${searchSubdir}`);\n const content = await downloadHttpContent(this.http, pkgUrl);\n if (content) {\n const rootPath = new URL(pkgUrl).pathname;\n const subdirReleases = extractPageLinks(content, (href) => {\n const path = href.replace(rootPath, '');\n if (path.startsWith('.')) {\n return null;\n }\n\n return path;\n });\n\n subdirReleases.forEach((x) => releases.push(x));\n }\n }\n if (releases.length) {\n return [...new Set(releases)].sort(compare);\n }\n }\n\n return null;\n }\n\n // istanbul ignore next: to be rewritten\n async getUrls(\n searchRoot: string,\n artifactDirs: string[] | null,\n version: string | null,\n ): Promise<Partial<ReleaseResult>> {\n const result: Partial<ReleaseResult> = {};\n\n if (!artifactDirs?.length) {\n return result;\n }\n\n if (!version) {\n return result;\n }\n\n for (const artifactDir of artifactDirs) {\n const [artifact] = artifactDir.split('_');\n const pomFileNames = [\n `${artifactDir}-${version}.pom`,\n `${artifact}-${version}.pom`,\n ];\n\n for (const pomFileName of pomFileNames) {\n const pomUrl = `${searchRoot}/${artifactDir}/${version}/${pomFileName}`;\n const content = await downloadHttpContent(this.http, pomUrl);\n if (content) {\n const pomXml = new XmlDocument(content);\n\n const homepage = pomXml.valueWithPath('url');\n if (homepage) {\n result.homepage = homepage;\n }\n\n const sourceUrl = pomXml.valueWithPath('scm.url');\n if (sourceUrl) {\n result.sourceUrl = sourceUrl\n .replace(regEx(/^scm:/), '')\n .replace(regEx(/^git:/), '')\n .replace(regEx(/^git@github.com:/), 'https://github.com/')\n .replace(regEx(/\\.git$/), '');\n }\n\n return result;\n }\n }\n }\n\n return result;\n }\n\n async resolvePluginReleases(\n rootUrl: string,\n artifact: string,\n scalaVersion: string,\n ): Promise<string[] | null> {\n const searchRoot = `${rootUrl}/${artifact}`;\n const hrefFilterMap = (href: string): string | null => {\n if (href.startsWith('.')) {\n return null;\n }\n\n return href;\n };\n const searchRootContent = await downloadHttpContent(\n this.http,\n ensureTrailingSlash(searchRoot),\n );\n if (searchRootContent) {\n const releases: string[] = [];\n const scalaVersionItems = extractPageLinks(\n searchRootContent,\n hrefFilterMap,\n );\n const scalaVersions = scalaVersionItems.map((x) =>\n x.replace(regEx(/^scala_/), ''),\n );\n const searchVersions = scalaVersions.includes(scalaVersion)\n ? [scalaVersion]\n : scalaVersions;\n for (const searchVersion of searchVersions) {\n const searchSubRoot = `${searchRoot}/scala_${searchVersion}`;\n const subRootContent = await downloadHttpContent(\n this.http,\n ensureTrailingSlash(searchSubRoot),\n );\n if (subRootContent) {\n const sbtVersionItems = extractPageLinks(\n subRootContent,\n hrefFilterMap,\n );\n for (const sbtItem of sbtVersionItems) {\n const releasesRoot = `${searchSubRoot}/${sbtItem}`;\n const releasesIndexContent = await downloadHttpContent(\n this.http,\n ensureTrailingSlash(releasesRoot),\n );\n if (releasesIndexContent) {\n const releasesParsed = extractPageLinks(\n releasesIndexContent,\n hrefFilterMap,\n );\n releasesParsed.forEach((x) => releases.push(x));\n }\n }\n }\n }\n if (releases.length) {\n return [...new Set(releases)].sort(compare);\n }\n }\n return null;\n }\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 const [groupId, artifactId] = packageName.split(':');\n const groupIdSplit = groupId.split('.');\n const artifactIdSplit = artifactId.split('_');\n const [artifact, scalaVersion] = artifactIdSplit;\n\n const repoRoot = ensureTrailingSlash(registryUrl);\n const searchRoots: string[] = [];\n // Optimize lookup order\n if (!registryUrl.startsWith(MAVEN_REPO)) {\n searchRoots.push(`${repoRoot}${groupIdSplit.join('.')}`);\n }\n searchRoots.push(`${repoRoot}${groupIdSplit.join('/')}`);\n\n for (const searchRoot of searchRoots) {\n let versions = await this.resolvePluginReleases(\n searchRoot,\n artifact,\n scalaVersion,\n );\n let urls = {};\n\n if (!versions?.length) {\n const artifactSubdirs = await this.getArtifactSubdirs(\n searchRoot,\n artifact,\n scalaVersion,\n );\n versions = await this.getPackageReleases(searchRoot, artifactSubdirs);\n const latestVersion = getLatestVersion(versions);\n urls = await this.getUrls(searchRoot, artifactSubdirs, latestVersion);\n }\n\n const dependencyUrl = `${searchRoot}/${artifact}`;\n\n logger.trace({ dependency: packageName, versions }, `Package versions`);\n if (versions) {\n return {\n ...urls,\n dependencyUrl,\n releases: versions.map((v) => ({ version: v })),\n };\n }\n }\n\n logger.debug(\n `No versions found for ${packageName} in ${searchRoots.length} repositories`,\n );\n return null;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/sbt-plugin/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { XmlDocument } from 'xmldoc';\nimport { logger } from '../../../logger';\nimport { Http } from '../../../util/http';\nimport { regEx } from '../../../util/regex';\nimport { ensureTrailingSlash } from '../../../util/url';\nimport * as ivyVersioning from '../../versioning/ivy';\nimport { compare } from '../../versioning/maven/compare';\nimport { Datasource } from '../datasource';\nimport { MAVEN_REPO } from '../maven/common';\nimport { downloadHttpContent } from '../maven/util';\nimport { extractPageLinks, getLatestVersion } from '../sbt-package/util';\nimport type {\n GetReleasesConfig,\n RegistryStrategy,\n ReleaseResult,\n} from '../types';\n\nexport const SBT_PLUGINS_REPO =\n 'https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases';\n\nexport class SbtPluginDatasource extends Datasource {\n static readonly id = 'sbt-plugin';\n\n override readonly defaultRegistryUrls = [SBT_PLUGINS_REPO, MAVEN_REPO];\n\n override readonly defaultVersioning = ivyVersioning.id;\n\n override readonly registryStrategy: RegistryStrategy = 'merge';\n\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the `scm` tags in the results.';\n\n constructor() {\n super(SbtPluginDatasource.id);\n this.http = new Http('sbt');\n }\n\n // istanbul ignore next: to be rewritten\n async getArtifactSubdirs(\n searchRoot: string,\n artifact: string,\n scalaVersion: string,\n ): Promise<string[] | null> {\n const pkgUrl = ensureTrailingSlash(searchRoot);\n const indexContent = await downloadHttpContent(this.http, pkgUrl);\n if (indexContent) {\n const rootPath = new URL(pkgUrl).pathname;\n let artifactSubdirs = extractPageLinks(indexContent, (href) => {\n const path = href.replace(rootPath, '');\n if (\n path.startsWith(`${artifact}_native`) ||\n path.startsWith(`${artifact}_sjs`)\n ) {\n return null;\n }\n\n if (path === artifact || path.startsWith(`${artifact}_`)) {\n return path;\n }\n\n return null;\n });\n\n if (\n scalaVersion &&\n artifactSubdirs.includes(`${artifact}_${scalaVersion}`)\n ) {\n artifactSubdirs = [`${artifact}_${scalaVersion}`];\n }\n return artifactSubdirs;\n }\n\n return null;\n }\n\n // istanbul ignore next: to be rewritten\n async getPackageReleases(\n searchRoot: string,\n artifactSubdirs: string[] | null,\n ): Promise<string[] | null> {\n if (artifactSubdirs) {\n const releases: string[] = [];\n for (const searchSubdir of artifactSubdirs) {\n const pkgUrl = ensureTrailingSlash(`${searchRoot}/${searchSubdir}`);\n const content = await downloadHttpContent(this.http, pkgUrl);\n if (content) {\n const rootPath = new URL(pkgUrl).pathname;\n const subdirReleases = extractPageLinks(content, (href) => {\n const path = href.replace(rootPath, '');\n if (path.startsWith('.')) {\n return null;\n }\n\n return path;\n });\n\n subdirReleases.forEach((x) => releases.push(x));\n }\n }\n if (releases.length) {\n return [...new Set(releases)].sort(compare);\n }\n }\n\n return null;\n }\n\n // istanbul ignore next: to be rewritten\n async getUrls(\n searchRoot: string,\n artifactDirs: string[] | null,\n version: string | null,\n ): Promise<Partial<ReleaseResult>> {\n const result: Partial<ReleaseResult> = {};\n\n if (!artifactDirs?.length) {\n return result;\n }\n\n if (!version) {\n return result;\n }\n\n for (const artifactDir of artifactDirs) {\n const [artifact] = artifactDir.split('_');\n const pomFileNames = [\n `${artifactDir}-${version}.pom`,\n `${artifact}-${version}.pom`,\n ];\n\n for (const pomFileName of pomFileNames) {\n const pomUrl = `${searchRoot}/${artifactDir}/${version}/${pomFileName}`;\n const content = await downloadHttpContent(this.http, pomUrl);\n if (content) {\n const pomXml = new XmlDocument(content);\n\n const homepage = pomXml.valueWithPath('url');\n if (homepage) {\n result.homepage = homepage;\n }\n\n const sourceUrl = pomXml.valueWithPath('scm.url');\n if (sourceUrl) {\n result.sourceUrl = sourceUrl\n .replace(regEx(/^scm:/), '')\n .replace(regEx(/^git:/), '')\n .replace(regEx(/^git@github.com:/), 'https://github.com/')\n .replace(regEx(/\\.git$/), '');\n }\n\n return result;\n }\n }\n }\n\n return result;\n }\n\n async resolvePluginReleases(\n rootUrl: string,\n artifact: string,\n scalaVersion: string,\n ): Promise<string[] | null> {\n const searchRoot = `${rootUrl}/${artifact}`;\n const hrefFilterMap = (href: string): string | null => {\n if (href.startsWith('.')) {\n return null;\n }\n\n return href;\n };\n const searchRootContent = await downloadHttpContent(\n this.http,\n ensureTrailingSlash(searchRoot),\n );\n if (searchRootContent) {\n const releases: string[] = [];\n const scalaVersionItems = extractPageLinks(\n searchRootContent,\n hrefFilterMap,\n );\n const scalaVersions = scalaVersionItems.map((x) =>\n x.replace(regEx(/^scala_/), ''),\n );\n const searchVersions = scalaVersions.includes(scalaVersion)\n ? [scalaVersion]\n : scalaVersions;\n for (const searchVersion of searchVersions) {\n const searchSubRoot = `${searchRoot}/scala_${searchVersion}`;\n const subRootContent = await downloadHttpContent(\n this.http,\n ensureTrailingSlash(searchSubRoot),\n );\n if (subRootContent) {\n const sbtVersionItems = extractPageLinks(\n subRootContent,\n hrefFilterMap,\n );\n for (const sbtItem of sbtVersionItems) {\n const releasesRoot = `${searchSubRoot}/${sbtItem}`;\n const releasesIndexContent = await downloadHttpContent(\n this.http,\n ensureTrailingSlash(releasesRoot),\n );\n if (releasesIndexContent) {\n const releasesParsed = extractPageLinks(\n releasesIndexContent,\n hrefFilterMap,\n );\n releasesParsed.forEach((x) => releases.push(x));\n }\n }\n }\n }\n if (releases.length) {\n return [...new Set(releases)].sort(compare);\n }\n }\n return null;\n }\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 const [groupId, artifactId] = packageName.split(':');\n const groupIdSplit = groupId.split('.');\n const artifactIdSplit = artifactId.split('_');\n const [artifact, scalaVersion] = artifactIdSplit;\n\n const repoRoot = ensureTrailingSlash(registryUrl);\n const searchRoots: string[] = [];\n // Optimize lookup order\n if (!registryUrl.startsWith(MAVEN_REPO)) {\n searchRoots.push(`${repoRoot}${groupIdSplit.join('.')}`);\n }\n searchRoots.push(`${repoRoot}${groupIdSplit.join('/')}`);\n\n for (const searchRoot of searchRoots) {\n let versions = await this.resolvePluginReleases(\n searchRoot,\n artifact,\n scalaVersion,\n );\n let urls = {};\n\n if (!versions?.length) {\n const artifactSubdirs = await this.getArtifactSubdirs(\n searchRoot,\n artifact,\n scalaVersion,\n );\n versions = await this.getPackageReleases(searchRoot, artifactSubdirs);\n const latestVersion = getLatestVersion(versions);\n urls = await this.getUrls(searchRoot, artifactSubdirs, latestVersion);\n }\n\n const dependencyUrl = `${searchRoot}/${artifact}`;\n\n logger.trace({ dependency: packageName, versions }, `Package versions`);\n if (versions) {\n return {\n ...urls,\n dependencyUrl,\n releases: versions.map((v) => ({ version: v })),\n };\n }\n }\n\n logger.debug(\n `No versions found for ${packageName} in ${searchRoots.length} repositories`,\n );\n return null;\n }\n}\n"]}
@@ -3,19 +3,19 @@ export declare const ReleasesConfig: z.ZodObject<{
3
3
  packageName: z.ZodString;
4
4
  registryUrl: z.ZodString;
5
5
  }, "strip", z.ZodTypeAny, {
6
- packageName: string;
7
6
  registryUrl: string;
8
- }, {
9
7
  packageName: string;
8
+ }, {
10
9
  registryUrl: string;
10
+ packageName: string;
11
11
  }>;
12
12
  export declare const DigestsConfig: z.ZodObject<{
13
13
  packageName: z.ZodString;
14
14
  registryUrl: z.ZodString;
15
15
  }, "strip", z.ZodTypeAny, {
16
- packageName: string;
17
16
  registryUrl: string;
18
- }, {
19
17
  packageName: string;
18
+ }, {
20
19
  registryUrl: string;
20
+ packageName: string;
21
21
  }>;
@@ -32,7 +32,7 @@ class TerraformModuleDatasource extends base_1.TerraformDatasource {
32
32
  * - `homepage` is set to the Terraform registry's page if it's on the official main registry
33
33
  */
34
34
  async getReleases({ packageName, registryUrl, }) {
35
- // istanbul ignore if
35
+ /* v8 ignore next 3 -- should never happen */
36
36
  if (!registryUrl) {
37
37
  return null;
38
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/terraform-module/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '../../../logger';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { regEx } from '../../../util/regex';\nimport { coerceString } from '../../../util/string';\nimport { asTimestamp } from '../../../util/timestamp';\nimport { isHttpUrl } from '../../../util/url';\nimport * as hashicorpVersioning from '../../versioning/hashicorp';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport { TerraformDatasource } from './base';\nimport type {\n RegistryRepository,\n ServiceDiscoveryResult,\n TerraformModuleVersions,\n TerraformRelease,\n} from './types';\nimport { createSDBackendURL } from './utils';\n\nexport class TerraformModuleDatasource extends TerraformDatasource {\n static override readonly id = 'terraform-module';\n\n constructor() {\n super(TerraformModuleDatasource.id);\n }\n\n override readonly defaultRegistryUrls = ['https://registry.terraform.io'];\n\n override readonly defaultVersioning = hashicorpVersioning.id;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is only supported for the latest version, and is determined from the `published_at` field in the results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the the `source` field in the results.';\n\n readonly extendedApiRegistryUrls = [\n 'https://registry.terraform.io',\n 'https://app.terraform.io',\n ];\n\n /**\n * This function will fetch a package from the specified Terraform registry and return all semver versions.\n * - `sourceUrl` is supported if \"source\" field is set\n * - `homepage` is set to the Terraform registry's page if it's on the official main registry\n */\n @cache({\n namespace: `datasource-${TerraformModuleDatasource.id}`,\n key: (getReleasesConfig: GetReleasesConfig) =>\n TerraformModuleDatasource.getCacheKey(getReleasesConfig),\n })\n async getReleases({\n packageName,\n registryUrl,\n }: GetReleasesConfig): Promise<ReleaseResult | null> {\n // istanbul ignore if\n if (!registryUrl) {\n return null;\n }\n\n const { registry: registryUrlNormalized, repository } =\n TerraformModuleDatasource.getRegistryRepository(packageName, registryUrl);\n logger.trace(\n { registryUrlNormalized, terraformRepository: repository },\n 'terraform-module.getReleases()',\n );\n\n const serviceDiscovery = await this.getTerraformServiceDiscoveryResult(\n registryUrlNormalized,\n );\n if (this.extendedApiRegistryUrls.includes(registryUrlNormalized)) {\n return await this.queryRegistryExtendedApi(\n serviceDiscovery,\n registryUrlNormalized,\n repository,\n );\n }\n\n return await this.queryRegistryVersions(\n serviceDiscovery,\n registryUrlNormalized,\n repository,\n );\n }\n\n /**\n * this uses the api that terraform registry has in addition to the base api\n * this endpoint provides more information, such as release date\n * https://www.terraform.io/registry/api-docs#latest-version-for-a-specific-module-provider\n */\n private async queryRegistryExtendedApi(\n serviceDiscovery: ServiceDiscoveryResult,\n registryUrl: string,\n repository: string,\n ): Promise<ReleaseResult | null> {\n let res: TerraformRelease;\n let pkgUrl: string;\n\n try {\n // TODO: types (#22198)\n\n pkgUrl = createSDBackendURL(\n registryUrl,\n 'modules.v1',\n serviceDiscovery,\n repository,\n );\n res = (await this.http.getJsonUnchecked<TerraformRelease>(pkgUrl)).body;\n const returnedName = res.namespace + '/' + res.name + '/' + res.provider;\n if (returnedName !== repository) {\n logger.warn({ pkgUrl }, 'Terraform registry result mismatch');\n return null;\n }\n } catch (err) {\n this.handleGenericErrors(err);\n }\n\n // Simplify response before caching and returning\n const dep: ReleaseResult = {\n releases: res.versions.map((version) => ({\n version,\n })),\n };\n if (res.source) {\n dep.sourceUrl = res.source;\n }\n dep.homepage = `${registryUrl}/modules/${repository}`;\n // set published date for latest release\n const latestVersion = dep.releases.find(\n (release) => res.version === release.version,\n );\n if (latestVersion) {\n latestVersion.releaseTimestamp = asTimestamp(res.published_at);\n }\n return dep;\n }\n\n /**\n * this version uses the Module Registry Protocol that all registries are required to implement\n * https://www.terraform.io/internals/module-registry-protocol\n */\n private async queryRegistryVersions(\n serviceDiscovery: ServiceDiscoveryResult,\n registryUrl: string,\n repository: string,\n ): Promise<ReleaseResult | null> {\n let res: TerraformModuleVersions;\n let pkgUrl: string;\n try {\n // TODO: types (#22198)\n pkgUrl = createSDBackendURL(\n registryUrl,\n 'modules.v1',\n serviceDiscovery,\n `${repository}/versions`,\n );\n res = (await this.http.getJsonUnchecked<TerraformModuleVersions>(pkgUrl))\n .body;\n if (res.modules.length < 1) {\n logger.warn({ pkgUrl }, 'Terraform registry result mismatch');\n return null;\n }\n } catch (err) {\n this.handleGenericErrors(err);\n }\n\n // Simplify response before caching and returning\n const dep: ReleaseResult = {\n releases: res.modules[0].versions.map(({ version }) => ({\n version,\n })),\n };\n\n // Add the source URL if given\n if (isHttpUrl(res.modules[0].source)) {\n dep.sourceUrl = res.modules[0].source;\n }\n\n return dep;\n }\n\n private static getRegistryRepository(\n packageName: string,\n registryUrl: string | undefined,\n ): RegistryRepository {\n let registry: string;\n const split = packageName.split('/');\n if (split.length > 3 && split[0].includes('.')) {\n [registry] = split;\n split.shift();\n } else {\n registry = coerceString(registryUrl);\n }\n if (!regEx(/^https?:\\/\\//).test(registry)) {\n registry = `https://${registry}`;\n }\n const repository = split.join('/');\n return {\n registry,\n repository,\n };\n }\n\n private static getCacheKey({\n packageName,\n registryUrl,\n }: GetReleasesConfig): string {\n const { registry, repository } =\n TerraformModuleDatasource.getRegistryRepository(packageName, registryUrl);\n return `${registry}/${repository}`;\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/datasource/terraform-module/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '../../../logger';\nimport { cache } from '../../../util/cache/package/decorator';\nimport { regEx } from '../../../util/regex';\nimport { coerceString } from '../../../util/string';\nimport { asTimestamp } from '../../../util/timestamp';\nimport { isHttpUrl } from '../../../util/url';\nimport * as hashicorpVersioning from '../../versioning/hashicorp';\nimport type { GetReleasesConfig, ReleaseResult } from '../types';\nimport { TerraformDatasource } from './base';\nimport type {\n RegistryRepository,\n ServiceDiscoveryResult,\n TerraformModuleVersions,\n TerraformRelease,\n} from './types';\nimport { createSDBackendURL } from './utils';\n\nexport class TerraformModuleDatasource extends TerraformDatasource {\n static override readonly id = 'terraform-module';\n\n constructor() {\n super(TerraformModuleDatasource.id);\n }\n\n override readonly defaultRegistryUrls = ['https://registry.terraform.io'];\n\n override readonly defaultVersioning = hashicorpVersioning.id;\n\n override readonly releaseTimestampSupport = true;\n override readonly releaseTimestampNote =\n 'The release timestamp is only supported for the latest version, and is determined from the `published_at` field in the results.';\n override readonly sourceUrlSupport = 'package';\n override readonly sourceUrlNote =\n 'The source URL is determined from the the `source` field in the results.';\n\n readonly extendedApiRegistryUrls = [\n 'https://registry.terraform.io',\n 'https://app.terraform.io',\n ];\n\n /**\n * This function will fetch a package from the specified Terraform registry and return all semver versions.\n * - `sourceUrl` is supported if \"source\" field is set\n * - `homepage` is set to the Terraform registry's page if it's on the official main registry\n */\n @cache({\n namespace: `datasource-${TerraformModuleDatasource.id}`,\n key: (getReleasesConfig: GetReleasesConfig) =>\n TerraformModuleDatasource.getCacheKey(getReleasesConfig),\n })\n 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 const { registry: registryUrlNormalized, repository } =\n TerraformModuleDatasource.getRegistryRepository(packageName, registryUrl);\n logger.trace(\n { registryUrlNormalized, terraformRepository: repository },\n 'terraform-module.getReleases()',\n );\n\n const serviceDiscovery = await this.getTerraformServiceDiscoveryResult(\n registryUrlNormalized,\n );\n if (this.extendedApiRegistryUrls.includes(registryUrlNormalized)) {\n return await this.queryRegistryExtendedApi(\n serviceDiscovery,\n registryUrlNormalized,\n repository,\n );\n }\n\n return await this.queryRegistryVersions(\n serviceDiscovery,\n registryUrlNormalized,\n repository,\n );\n }\n\n /**\n * this uses the api that terraform registry has in addition to the base api\n * this endpoint provides more information, such as release date\n * https://www.terraform.io/registry/api-docs#latest-version-for-a-specific-module-provider\n */\n private async queryRegistryExtendedApi(\n serviceDiscovery: ServiceDiscoveryResult,\n registryUrl: string,\n repository: string,\n ): Promise<ReleaseResult | null> {\n let res: TerraformRelease;\n let pkgUrl: string;\n\n try {\n // TODO: types (#22198)\n\n pkgUrl = createSDBackendURL(\n registryUrl,\n 'modules.v1',\n serviceDiscovery,\n repository,\n );\n res = (await this.http.getJsonUnchecked<TerraformRelease>(pkgUrl)).body;\n const returnedName = res.namespace + '/' + res.name + '/' + res.provider;\n if (returnedName !== repository) {\n logger.warn({ pkgUrl }, 'Terraform registry result mismatch');\n return null;\n }\n } catch (err) {\n this.handleGenericErrors(err);\n }\n\n // Simplify response before caching and returning\n const dep: ReleaseResult = {\n releases: res.versions.map((version) => ({\n version,\n })),\n };\n if (res.source) {\n dep.sourceUrl = res.source;\n }\n dep.homepage = `${registryUrl}/modules/${repository}`;\n // set published date for latest release\n const latestVersion = dep.releases.find(\n (release) => res.version === release.version,\n );\n if (latestVersion) {\n latestVersion.releaseTimestamp = asTimestamp(res.published_at);\n }\n return dep;\n }\n\n /**\n * this version uses the Module Registry Protocol that all registries are required to implement\n * https://www.terraform.io/internals/module-registry-protocol\n */\n private async queryRegistryVersions(\n serviceDiscovery: ServiceDiscoveryResult,\n registryUrl: string,\n repository: string,\n ): Promise<ReleaseResult | null> {\n let res: TerraformModuleVersions;\n let pkgUrl: string;\n try {\n // TODO: types (#22198)\n pkgUrl = createSDBackendURL(\n registryUrl,\n 'modules.v1',\n serviceDiscovery,\n `${repository}/versions`,\n );\n res = (await this.http.getJsonUnchecked<TerraformModuleVersions>(pkgUrl))\n .body;\n if (res.modules.length < 1) {\n logger.warn({ pkgUrl }, 'Terraform registry result mismatch');\n return null;\n }\n } catch (err) {\n this.handleGenericErrors(err);\n }\n\n // Simplify response before caching and returning\n const dep: ReleaseResult = {\n releases: res.modules[0].versions.map(({ version }) => ({\n version,\n })),\n };\n\n // Add the source URL if given\n if (isHttpUrl(res.modules[0].source)) {\n dep.sourceUrl = res.modules[0].source;\n }\n\n return dep;\n }\n\n private static getRegistryRepository(\n packageName: string,\n registryUrl: string | undefined,\n ): RegistryRepository {\n let registry: string;\n const split = packageName.split('/');\n if (split.length > 3 && split[0].includes('.')) {\n [registry] = split;\n split.shift();\n } else {\n registry = coerceString(registryUrl);\n }\n if (!regEx(/^https?:\\/\\//).test(registry)) {\n registry = `https://${registry}`;\n }\n const repository = split.join('/');\n return {\n registry,\n repository,\n };\n }\n\n private static getCacheKey({\n packageName,\n registryUrl,\n }: GetReleasesConfig): string {\n const { registry, repository } =\n TerraformModuleDatasource.getRegistryRepository(packageName, registryUrl);\n return `${registry}/${repository}`;\n }\n}\n"]}
@@ -32,7 +32,7 @@ class TerraformProviderDatasource extends base_1.TerraformDatasource {
32
32
  sourceUrlSupport = 'package';
33
33
  sourceUrlNote = 'The source URL is determined from the the `source` field in the results.';
34
34
  async getReleases({ packageName, registryUrl, }) {
35
- // istanbul ignore if
35
+ /* v8 ignore next 3 -- should never happen */
36
36
  if (!registryUrl) {
37
37
  return null;
38
38
  }
@@ -70,7 +70,6 @@ class TerraformProviderDatasource extends base_1.TerraformDatasource {
70
70
  }
71
71
  // set published date for latest release
72
72
  const latestVersion = dep.releases.find((release) => res.version === release.version);
73
- // istanbul ignore else
74
73
  if (latestVersion) {
75
74
  latestVersion.releaseTimestamp = (0, timestamp_1.asTimestamp)(res.published_at);
76
75
  }
@@ -173,7 +172,7 @@ class TerraformProviderDatasource extends base_1.TerraformDatasource {
173
172
  // The hashes are formatted as the result of sha256sum in plain text, each line: <hash>\t<filename>
174
173
  let rawHashData;
175
174
  try {
176
- rawHashData = (await this.http.get(zipHashUrl)).body;
175
+ rawHashData = (await this.http.getText(zipHashUrl)).body;
177
176
  }
178
177
  catch (err) {
179
178
  /* istanbul ignore next */