renovate 41.0.0-next.21 → 41.0.0-next.23

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 (399) hide show
  1. package/dist/config/decrypt.js +5 -3
  2. package/dist/config/decrypt.js.map +1 -1
  3. package/dist/config/options/index.js +45 -3
  4. package/dist/config/options/index.js.map +1 -1
  5. package/dist/config/presets/github/index.js +2 -2
  6. package/dist/config/presets/github/index.js.map +1 -1
  7. package/dist/config/presets/internal/group.js +21 -0
  8. package/dist/config/presets/internal/group.js.map +1 -1
  9. package/dist/config/presets/internal/workarounds.js +11 -0
  10. package/dist/config/presets/internal/workarounds.js.map +1 -1
  11. package/dist/config/secrets.d.ts +2 -0
  12. package/dist/config/secrets.js +10 -77
  13. package/dist/config/secrets.js.map +1 -1
  14. package/dist/config/types.d.ts +9 -1
  15. package/dist/config/types.js.map +1 -1
  16. package/dist/config-validator.js +4 -2
  17. package/dist/config-validator.js.map +1 -1
  18. package/dist/data/monorepo.json +10 -1
  19. package/dist/data-files.generated.d.ts +1 -1
  20. package/dist/data-files.generated.js +2 -1
  21. package/dist/data-files.generated.js.map +1 -1
  22. package/dist/instrumentation/index.js +5 -3
  23. package/dist/instrumentation/index.js.map +1 -1
  24. package/dist/instrumentation/reporting.d.ts +2 -2
  25. package/dist/instrumentation/reporting.js +3 -7
  26. package/dist/instrumentation/reporting.js.map +1 -1
  27. package/dist/instrumentation/types.d.ts +11 -5
  28. package/dist/instrumentation/types.js.map +1 -1
  29. package/dist/instrumentation/utils.js +3 -2
  30. package/dist/instrumentation/utils.js.map +1 -1
  31. package/dist/logger/once.js +2 -0
  32. package/dist/logger/once.js.map +1 -1
  33. package/dist/modules/datasource/aws-eks-addon/schema.d.ts +14 -38
  34. package/dist/modules/datasource/aws-eks-addon/schema.js +11 -22
  35. package/dist/modules/datasource/aws-eks-addon/schema.js.map +1 -1
  36. package/dist/modules/datasource/cdnjs/index.js +2 -1
  37. package/dist/modules/datasource/cdnjs/index.js.map +1 -1
  38. package/dist/modules/datasource/crate/index.js +7 -2
  39. package/dist/modules/datasource/crate/index.js.map +1 -1
  40. package/dist/modules/datasource/docker/ecr.js +2 -2
  41. package/dist/modules/datasource/docker/ecr.js.map +1 -1
  42. package/dist/modules/datasource/docker/index.js +26 -9
  43. package/dist/modules/datasource/docker/index.js.map +1 -1
  44. package/dist/modules/datasource/docker/schema.d.ts +9 -87
  45. package/dist/modules/datasource/docker/schema.js +1 -1
  46. package/dist/modules/datasource/docker/schema.js.map +1 -1
  47. package/dist/modules/datasource/git-refs/base.js +2 -6
  48. package/dist/modules/datasource/git-refs/base.js.map +1 -1
  49. package/dist/modules/datasource/go/goproxy-parser.js +6 -2
  50. package/dist/modules/datasource/go/goproxy-parser.js.map +1 -1
  51. package/dist/modules/datasource/go/index.js +4 -2
  52. package/dist/modules/datasource/go/index.js.map +1 -1
  53. package/dist/modules/datasource/go/releases-goproxy.js +3 -2
  54. package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
  55. package/dist/modules/datasource/index.js +1 -1
  56. package/dist/modules/datasource/index.js.map +1 -1
  57. package/dist/modules/datasource/maven/index.js +5 -19
  58. package/dist/modules/datasource/maven/index.js.map +1 -1
  59. package/dist/modules/datasource/maven/util.js +8 -1
  60. package/dist/modules/datasource/maven/util.js.map +1 -1
  61. package/dist/modules/datasource/npm/get.js +2 -1
  62. package/dist/modules/datasource/npm/get.js.map +1 -1
  63. package/dist/modules/datasource/npm/npmrc.js +2 -1
  64. package/dist/modules/datasource/npm/npmrc.js.map +1 -1
  65. package/dist/modules/datasource/nuget/v3.js +3 -2
  66. package/dist/modules/datasource/nuget/v3.js.map +1 -1
  67. package/dist/modules/datasource/pod/index.js +3 -1
  68. package/dist/modules/datasource/pod/index.js.map +1 -1
  69. package/dist/modules/datasource/pypi/index.js +2 -1
  70. package/dist/modules/datasource/pypi/index.js.map +1 -1
  71. package/dist/modules/datasource/types.d.ts +2 -1
  72. package/dist/modules/datasource/types.js.map +1 -1
  73. package/dist/modules/manager/asdf/upgradeable-tooling.js +8 -0
  74. package/dist/modules/manager/asdf/upgradeable-tooling.js.map +1 -1
  75. package/dist/modules/manager/bazel/rules/git.d.ts +7 -7
  76. package/dist/modules/manager/bazel/rules/git.js +6 -1
  77. package/dist/modules/manager/bazel/rules/git.js.map +1 -1
  78. package/dist/modules/manager/bazel-module/bazelrc.d.ts +2 -0
  79. package/dist/modules/manager/bazel-module/bazelrc.js +30 -1
  80. package/dist/modules/manager/bazel-module/bazelrc.js.map +1 -1
  81. package/dist/modules/manager/bazel-module/parser/rules.js +1 -0
  82. package/dist/modules/manager/bazel-module/parser/rules.js.map +1 -1
  83. package/dist/modules/manager/bazel-module/rules.d.ts +62 -24
  84. package/dist/modules/manager/bazel-module/rules.js +10 -4
  85. package/dist/modules/manager/bazel-module/rules.js.map +1 -1
  86. package/dist/modules/manager/cargo/extract.js +2 -1
  87. package/dist/modules/manager/cargo/extract.js.map +1 -1
  88. package/dist/modules/manager/composer/schema.js +1 -1
  89. package/dist/modules/manager/composer/schema.js.map +1 -1
  90. package/dist/modules/manager/docker-compose/extract.js +2 -0
  91. package/dist/modules/manager/docker-compose/extract.js.map +1 -1
  92. package/dist/modules/manager/docker-compose/schema.d.ts +120 -9
  93. package/dist/modules/manager/docker-compose/schema.js +35 -4
  94. package/dist/modules/manager/docker-compose/schema.js.map +1 -1
  95. package/dist/modules/manager/fingerprint.generated.js +19 -19
  96. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  97. package/dist/modules/manager/fleet/extract.js +2 -2
  98. package/dist/modules/manager/fleet/extract.js.map +1 -1
  99. package/dist/modules/manager/fleet/schema.d.ts +5 -5
  100. package/dist/modules/manager/fleet/schema.js +1 -1
  101. package/dist/modules/manager/fleet/schema.js.map +1 -1
  102. package/dist/modules/manager/flux/extract.js +1 -1
  103. package/dist/modules/manager/flux/extract.js.map +1 -1
  104. package/dist/modules/manager/git-submodules/extract.js +2 -6
  105. package/dist/modules/manager/git-submodules/extract.js.map +1 -1
  106. package/dist/modules/manager/git-submodules/update.js +3 -7
  107. package/dist/modules/manager/git-submodules/update.js.map +1 -1
  108. package/dist/modules/manager/github-actions/extract.js +1 -1
  109. package/dist/modules/manager/github-actions/extract.js.map +1 -1
  110. package/dist/modules/manager/gleam/artifacts.js +5 -1
  111. package/dist/modules/manager/gleam/artifacts.js.map +1 -1
  112. package/dist/modules/manager/gomod/artifacts.js +8 -6
  113. package/dist/modules/manager/gomod/artifacts.js.map +1 -1
  114. package/dist/modules/manager/gradle/extract.js +4 -1
  115. package/dist/modules/manager/gradle/extract.js.map +1 -1
  116. package/dist/modules/manager/gradle/utils.js +8 -14
  117. package/dist/modules/manager/gradle/utils.js.map +1 -1
  118. package/dist/modules/manager/helmfile/utils.js +1 -1
  119. package/dist/modules/manager/helmfile/utils.js.map +1 -1
  120. package/dist/modules/manager/helmv3/artifacts.js +8 -2
  121. package/dist/modules/manager/helmv3/artifacts.js.map +1 -1
  122. package/dist/modules/manager/helmv3/common.d.ts +1 -1
  123. package/dist/modules/manager/helmv3/common.js +9 -3
  124. package/dist/modules/manager/helmv3/common.js.map +1 -1
  125. package/dist/modules/manager/hermit/artifacts.js +2 -2
  126. package/dist/modules/manager/hermit/artifacts.js.map +1 -1
  127. package/dist/modules/manager/kubernetes/extract.js +2 -2
  128. package/dist/modules/manager/kubernetes/extract.js.map +1 -1
  129. package/dist/modules/manager/kustomize/artifacts.js +1 -1
  130. package/dist/modules/manager/kustomize/artifacts.js.map +1 -1
  131. package/dist/modules/manager/maven/extract.d.ts +1 -1
  132. package/dist/modules/manager/maven/extract.js +82 -24
  133. package/dist/modules/manager/maven/extract.js.map +1 -1
  134. package/dist/modules/manager/maven/index.d.ts +0 -1
  135. package/dist/modules/manager/maven/index.js +2 -4
  136. package/dist/modules/manager/maven/index.js.map +1 -1
  137. package/dist/modules/manager/maven/update.js +15 -0
  138. package/dist/modules/manager/maven/update.js.map +1 -1
  139. package/dist/modules/manager/mise/backends.d.ts +48 -0
  140. package/dist/modules/manager/mise/backends.js +219 -0
  141. package/dist/modules/manager/mise/backends.js.map +1 -0
  142. package/dist/modules/manager/mise/extract.js +77 -10
  143. package/dist/modules/manager/mise/extract.js.map +1 -1
  144. package/dist/modules/manager/mise/index.js +37 -2
  145. package/dist/modules/manager/mise/index.js.map +1 -1
  146. package/dist/modules/manager/mise/schema.d.ts +24 -0
  147. package/dist/modules/manager/mise/schema.js +7 -1
  148. package/dist/modules/manager/mise/schema.js.map +1 -1
  149. package/dist/modules/manager/mise/upgradeable-tooling.js +210 -1
  150. package/dist/modules/manager/mise/upgradeable-tooling.js.map +1 -1
  151. package/dist/modules/manager/mix/artifacts.js +5 -0
  152. package/dist/modules/manager/mix/artifacts.js.map +1 -1
  153. package/dist/modules/manager/npm/extract/index.js +27 -24
  154. package/dist/modules/manager/npm/extract/index.js.map +1 -1
  155. package/dist/modules/manager/npm/post-update/index.js +9 -3
  156. package/dist/modules/manager/npm/post-update/index.js.map +1 -1
  157. package/dist/modules/manager/npm/post-update/npm.js +8 -5
  158. package/dist/modules/manager/npm/post-update/npm.js.map +1 -1
  159. package/dist/modules/manager/npm/post-update/pnpm.js +4 -0
  160. package/dist/modules/manager/npm/post-update/pnpm.js.map +1 -1
  161. package/dist/modules/manager/npm/post-update/utils.js +17 -0
  162. package/dist/modules/manager/npm/post-update/utils.js.map +1 -1
  163. package/dist/modules/manager/npm/post-update/yarn.js +7 -5
  164. package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
  165. package/dist/modules/manager/npm/schema.d.ts +116 -0
  166. package/dist/modules/manager/npm/schema.js +9 -0
  167. package/dist/modules/manager/npm/schema.js.map +1 -1
  168. package/dist/modules/manager/npm/utils.js +1 -1
  169. package/dist/modules/manager/npm/utils.js.map +1 -1
  170. package/dist/modules/manager/nuget/util.js +9 -0
  171. package/dist/modules/manager/nuget/util.js.map +1 -1
  172. package/dist/modules/manager/pep621/processors/uv.js +1 -1
  173. package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
  174. package/dist/modules/manager/pip-compile/artifacts.js +6 -4
  175. package/dist/modules/manager/pip-compile/artifacts.js.map +1 -1
  176. package/dist/modules/manager/pip_requirements/common.js +2 -1
  177. package/dist/modules/manager/pip_requirements/common.js.map +1 -1
  178. package/dist/modules/manager/poetry/schema.js +2 -1
  179. package/dist/modules/manager/poetry/schema.js.map +1 -1
  180. package/dist/modules/manager/pre-commit/index.js +2 -1
  181. package/dist/modules/manager/pre-commit/index.js.map +1 -1
  182. package/dist/modules/manager/renovate-config-presets/index.d.ts +1 -1
  183. package/dist/modules/manager/renovate-config-presets/index.js +1 -3
  184. package/dist/modules/manager/renovate-config-presets/index.js.map +1 -1
  185. package/dist/modules/manager/terraform/extractors/others/modules.js +4 -9
  186. package/dist/modules/manager/terraform/extractors/others/modules.js.map +1 -1
  187. package/dist/modules/manager/terraform/extractors/resources/generic-docker-image-ref.d.ts +1 -0
  188. package/dist/modules/manager/terraform/extractors/resources/generic-docker-image-ref.js +9 -4
  189. package/dist/modules/manager/terraform/extractors/resources/generic-docker-image-ref.js.map +1 -1
  190. package/dist/modules/manager/terraform/extractors/resources/utils.d.ts +1 -0
  191. package/dist/modules/manager/terraform/extractors/resources/utils.js +4 -1
  192. package/dist/modules/manager/terraform/extractors/resources/utils.js.map +1 -1
  193. package/dist/modules/manager/terraform/hcl/types.d.ts +1 -0
  194. package/dist/modules/manager/terraform/hcl/types.js.map +1 -1
  195. package/dist/modules/manager/types.d.ts +3 -0
  196. package/dist/modules/manager/types.js.map +1 -1
  197. package/dist/modules/platform/bitbucket-server/index.js +4 -2
  198. package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
  199. package/dist/modules/platform/codecommit/codecommit-client.js +7 -5
  200. package/dist/modules/platform/codecommit/codecommit-client.js.map +1 -1
  201. package/dist/modules/platform/codecommit/index.js +7 -5
  202. package/dist/modules/platform/codecommit/index.js.map +1 -1
  203. package/dist/modules/platform/default-scm.d.ts +1 -0
  204. package/dist/modules/platform/default-scm.js +3 -0
  205. package/dist/modules/platform/default-scm.js.map +1 -1
  206. package/dist/modules/platform/gerrit/client.d.ts +6 -7
  207. package/dist/modules/platform/gerrit/client.js +58 -38
  208. package/dist/modules/platform/gerrit/client.js.map +1 -1
  209. package/dist/modules/platform/gerrit/index.d.ts +4 -3
  210. package/dist/modules/platform/gerrit/index.js +103 -42
  211. package/dist/modules/platform/gerrit/index.js.map +1 -1
  212. package/dist/modules/platform/gerrit/scm.d.ts +1 -1
  213. package/dist/modules/platform/gerrit/scm.js +56 -34
  214. package/dist/modules/platform/gerrit/scm.js.map +1 -1
  215. package/dist/modules/platform/gerrit/types.d.ts +23 -12
  216. package/dist/modules/platform/gerrit/types.js.map +1 -1
  217. package/dist/modules/platform/gerrit/utils.d.ts +8 -4
  218. package/dist/modules/platform/gerrit/utils.js +24 -12
  219. package/dist/modules/platform/gerrit/utils.js.map +1 -1
  220. package/dist/modules/platform/gitea/index.js +7 -2
  221. package/dist/modules/platform/gitea/index.js.map +1 -1
  222. package/dist/modules/platform/gitea/types.d.ts +2 -1
  223. package/dist/modules/platform/gitea/types.js.map +1 -1
  224. package/dist/modules/platform/github/index.js +12 -26
  225. package/dist/modules/platform/github/index.js.map +1 -1
  226. package/dist/modules/platform/gitlab/code-owners.d.ts +2 -0
  227. package/dist/modules/platform/gitlab/code-owners.js +38 -0
  228. package/dist/modules/platform/gitlab/code-owners.js.map +1 -0
  229. package/dist/modules/platform/gitlab/index.d.ts +2 -1
  230. package/dist/modules/platform/gitlab/index.js +29 -56
  231. package/dist/modules/platform/gitlab/index.js.map +1 -1
  232. package/dist/modules/platform/gitlab/pr-cache.d.ts +21 -0
  233. package/dist/modules/platform/gitlab/pr-cache.js +124 -0
  234. package/dist/modules/platform/gitlab/pr-cache.js.map +1 -0
  235. package/dist/modules/platform/gitlab/types.d.ts +7 -0
  236. package/dist/modules/platform/gitlab/types.js.map +1 -1
  237. package/dist/modules/platform/gitlab/utils.js +1 -0
  238. package/dist/modules/platform/gitlab/utils.js.map +1 -1
  239. package/dist/modules/platform/types.d.ts +8 -0
  240. package/dist/modules/platform/types.js.map +1 -1
  241. package/dist/modules/versioning/api.js +2 -0
  242. package/dist/modules/versioning/api.js.map +1 -1
  243. package/dist/modules/versioning/cargo/index.js +20 -0
  244. package/dist/modules/versioning/cargo/index.js.map +1 -1
  245. package/dist/modules/versioning/composer/index.js +4 -0
  246. package/dist/modules/versioning/composer/index.js.map +1 -1
  247. package/dist/modules/versioning/lambda-node/index.d.ts +8 -0
  248. package/dist/modules/versioning/lambda-node/index.js +27 -0
  249. package/dist/modules/versioning/lambda-node/index.js.map +1 -0
  250. package/dist/modules/versioning/lambda-node/schedule.d.ts +10 -0
  251. package/dist/modules/versioning/lambda-node/schedule.js +19 -0
  252. package/dist/modules/versioning/lambda-node/schedule.js.map +1 -0
  253. package/dist/modules/versioning/npm/index.js +2 -0
  254. package/dist/modules/versioning/npm/index.js.map +1 -1
  255. package/dist/modules/versioning/npm/range.js +4 -0
  256. package/dist/modules/versioning/npm/range.js.map +1 -1
  257. package/dist/modules/versioning/pep440/index.js +1 -1
  258. package/dist/modules/versioning/pep440/index.js.map +1 -1
  259. package/dist/modules/versioning/python/index.d.ts +1 -0
  260. package/dist/modules/versioning/python/index.js +9 -0
  261. package/dist/modules/versioning/python/index.js.map +1 -1
  262. package/dist/modules/versioning/semver/index.d.ts +1 -0
  263. package/dist/modules/versioning/semver/index.js +15 -0
  264. package/dist/modules/versioning/semver/index.js.map +1 -1
  265. package/dist/modules/versioning/semver-coerced/index.js +9 -0
  266. package/dist/modules/versioning/semver-coerced/index.js.map +1 -1
  267. package/dist/modules/versioning/types.d.ts +1 -0
  268. package/dist/modules/versioning/types.js.map +1 -1
  269. package/dist/util/cache/memory/index.d.ts +1 -0
  270. package/dist/util/cache/memory/index.js +17 -6
  271. package/dist/util/cache/memory/index.js.map +1 -1
  272. package/dist/util/cache/package/index.js +2 -1
  273. package/dist/util/cache/package/index.js.map +1 -1
  274. package/dist/util/cache/package/key.js +1 -1
  275. package/dist/util/cache/package/key.js.map +1 -1
  276. package/dist/util/cache/package/types.d.ts +2 -2
  277. package/dist/util/cache/package/types.js.map +1 -1
  278. package/dist/util/cache/repository/impl/s3.js +2 -1
  279. package/dist/util/cache/repository/impl/s3.js.map +1 -1
  280. package/dist/util/cache/repository/types.d.ts +3 -0
  281. package/dist/util/cache/repository/types.js.map +1 -1
  282. package/dist/util/env.d.ts +6 -0
  283. package/dist/util/env.js +13 -0
  284. package/dist/util/env.js.map +1 -1
  285. package/dist/util/exec/common.js +2 -1
  286. package/dist/util/exec/common.js.map +1 -1
  287. package/dist/util/exec/containerbase.js +2 -1
  288. package/dist/util/exec/containerbase.js.map +1 -1
  289. package/dist/util/exec/env.js +1 -0
  290. package/dist/util/exec/env.js.map +1 -1
  291. package/dist/util/exec/utils.d.ts +1 -1
  292. package/dist/util/exec/utils.js +1 -1
  293. package/dist/util/exec/utils.js.map +1 -1
  294. package/dist/util/fs/index.js +2 -2
  295. package/dist/util/fs/index.js.map +1 -1
  296. package/dist/util/git/auth.js +4 -2
  297. package/dist/util/git/auth.js.map +1 -1
  298. package/dist/util/git/error.js +2 -1
  299. package/dist/util/git/error.js.map +1 -1
  300. package/dist/util/git/index.d.ts +20 -0
  301. package/dist/util/git/index.js +140 -10
  302. package/dist/util/git/index.js.map +1 -1
  303. package/dist/util/git/types.d.ts +1 -0
  304. package/dist/util/git/types.js.map +1 -1
  305. package/dist/util/github/graphql/datasource-fetcher.js +2 -3
  306. package/dist/util/github/graphql/datasource-fetcher.js.map +1 -1
  307. package/dist/util/github/graphql/query-adapters/tags-query-adapter.d.ts +48 -2
  308. package/dist/util/github/graphql/query-adapters/tags-query-adapter.js +27 -7
  309. package/dist/util/github/graphql/query-adapters/tags-query-adapter.js.map +1 -1
  310. package/dist/util/host-rules.js +4 -3
  311. package/dist/util/host-rules.js.map +1 -1
  312. package/dist/util/http/cache/package-http-cache-provider.d.ts +4 -4
  313. package/dist/util/http/cache/package-http-cache-provider.js +4 -4
  314. package/dist/util/http/cache/package-http-cache-provider.js.map +1 -1
  315. package/dist/util/http/github.js +20 -12
  316. package/dist/util/http/github.js.map +1 -1
  317. package/dist/util/http/gitlab.js +2 -1
  318. package/dist/util/http/gitlab.js.map +1 -1
  319. package/dist/util/http/http.js +7 -3
  320. package/dist/util/http/http.js.map +1 -1
  321. package/dist/util/interpolator.d.ts +8 -0
  322. package/dist/util/interpolator.js +85 -0
  323. package/dist/util/interpolator.js.map +1 -0
  324. package/dist/util/merge-confidence/index.js +4 -1
  325. package/dist/util/merge-confidence/index.js.map +1 -1
  326. package/dist/util/promises.d.ts +4 -4
  327. package/dist/util/promises.js +3 -4
  328. package/dist/util/promises.js.map +1 -1
  329. package/dist/util/regex.js +3 -2
  330. package/dist/util/regex.js.map +1 -1
  331. package/dist/util/{schema-utils.d.ts → schema-utils/index.d.ts} +2 -2
  332. package/dist/util/{schema-utils.js → schema-utils/index.js} +5 -5
  333. package/dist/util/schema-utils/index.js.map +1 -0
  334. package/dist/util/schema-utils/v4.d.ts +7 -0
  335. package/dist/util/schema-utils/v4.js +64 -0
  336. package/dist/util/schema-utils/v4.js.map +1 -0
  337. package/dist/util/stats.d.ts +13 -2
  338. package/dist/util/stats.js +38 -27
  339. package/dist/util/stats.js.map +1 -1
  340. package/dist/workers/global/config/parse/codespaces.js +7 -4
  341. package/dist/workers/global/config/parse/codespaces.js.map +1 -1
  342. package/dist/workers/global/index.js +7 -5
  343. package/dist/workers/global/index.js.map +1 -1
  344. package/dist/workers/repository/config-migration/branch/migrated-data.js +1 -1
  345. package/dist/workers/repository/config-migration/branch/migrated-data.js.map +1 -1
  346. package/dist/workers/repository/dependency-dashboard.d.ts +1 -0
  347. package/dist/workers/repository/dependency-dashboard.js +47 -0
  348. package/dist/workers/repository/dependency-dashboard.js.map +1 -1
  349. package/dist/workers/repository/index.js +1 -0
  350. package/dist/workers/repository/index.js.map +1 -1
  351. package/dist/workers/repository/init/inherited.js +10 -6
  352. package/dist/workers/repository/init/inherited.js.map +1 -1
  353. package/dist/workers/repository/init/merge.d.ts +2 -2
  354. package/dist/workers/repository/init/merge.js +12 -5
  355. package/dist/workers/repository/init/merge.js.map +1 -1
  356. package/dist/workers/repository/package-files.js +11 -1
  357. package/dist/workers/repository/package-files.js.map +1 -1
  358. package/dist/workers/repository/process/extract-update.d.ts +1 -1
  359. package/dist/workers/repository/process/extract-update.js +15 -10
  360. package/dist/workers/repository/process/extract-update.js.map +1 -1
  361. package/dist/workers/repository/process/index.d.ts +1 -1
  362. package/dist/workers/repository/process/index.js +6 -3
  363. package/dist/workers/repository/process/index.js.map +1 -1
  364. package/dist/workers/repository/process/libyear.js +15 -7
  365. package/dist/workers/repository/process/libyear.js.map +1 -1
  366. package/dist/workers/repository/process/lookup/abandonment.d.ts +3 -0
  367. package/dist/workers/repository/process/lookup/abandonment.js +50 -0
  368. package/dist/workers/repository/process/lookup/abandonment.js.map +1 -0
  369. package/dist/workers/repository/process/lookup/current.js +0 -5
  370. package/dist/workers/repository/process/lookup/current.js.map +1 -1
  371. package/dist/workers/repository/process/lookup/generate.js +10 -0
  372. package/dist/workers/repository/process/lookup/generate.js.map +1 -1
  373. package/dist/workers/repository/process/lookup/index.js +7 -0
  374. package/dist/workers/repository/process/lookup/index.js.map +1 -1
  375. package/dist/workers/repository/process/lookup/timestamps.d.ts +4 -4
  376. package/dist/workers/repository/process/lookup/timestamps.js +10 -10
  377. package/dist/workers/repository/process/lookup/timestamps.js.map +1 -1
  378. package/dist/workers/repository/process/lookup/types.d.ts +4 -0
  379. package/dist/workers/repository/process/lookup/types.js.map +1 -1
  380. package/dist/workers/repository/update/branch/auto-replace.js +30 -7
  381. package/dist/workers/repository/update/branch/auto-replace.js.map +1 -1
  382. package/dist/workers/repository/update/branch/bump-versions.d.ts +2 -0
  383. package/dist/workers/repository/update/branch/bump-versions.js +192 -0
  384. package/dist/workers/repository/update/branch/bump-versions.js.map +1 -0
  385. package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js +14 -8
  386. package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js.map +1 -1
  387. package/dist/workers/repository/update/branch/get-updated.js +3 -4
  388. package/dist/workers/repository/update/branch/get-updated.js.map +1 -1
  389. package/dist/workers/repository/update/branch/index.js +3 -0
  390. package/dist/workers/repository/update/branch/index.js.map +1 -1
  391. package/dist/workers/repository/update/pr/changelog/release-notes.js +23 -19
  392. package/dist/workers/repository/update/pr/changelog/release-notes.js.map +1 -1
  393. package/dist/workers/repository/update/pr/code-owners.js +13 -9
  394. package/dist/workers/repository/update/pr/code-owners.js.map +1 -1
  395. package/dist/workers/repository/updates/generate.js +1 -0
  396. package/dist/workers/repository/updates/generate.js.map +1 -1
  397. package/package.json +75 -80
  398. package/renovate-schema.json +78 -14
  399. package/dist/util/schema-utils.js.map +0 -1
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Toml = exports.MultidocYaml = exports.Yaml = exports.Jsonc = exports.Json5 = exports.Json = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const json5_1 = tslib_1.__importDefault(require("json5"));
6
+ const v4_1 = require("zod/v4");
7
+ const common_1 = require("../common");
8
+ const toml_1 = require("../toml");
9
+ const yaml_1 = require("../yaml");
10
+ exports.Json = v4_1.z.string().transform((str, ctx) => {
11
+ try {
12
+ return JSON.parse(str);
13
+ }
14
+ catch {
15
+ ctx.addIssue({ code: 'custom', message: 'Invalid JSON' });
16
+ return v4_1.z.NEVER;
17
+ }
18
+ });
19
+ exports.Json5 = v4_1.z.string().transform((str, ctx) => {
20
+ try {
21
+ return json5_1.default.parse(str);
22
+ }
23
+ catch {
24
+ ctx.addIssue({ code: 'custom', message: 'Invalid JSON5' });
25
+ return v4_1.z.NEVER;
26
+ }
27
+ });
28
+ exports.Jsonc = v4_1.z.string().transform((str, ctx) => {
29
+ try {
30
+ return (0, common_1.parseJsonc)(str);
31
+ }
32
+ catch {
33
+ ctx.addIssue({ code: 'custom', message: 'Invalid JSONC' });
34
+ return v4_1.z.NEVER;
35
+ }
36
+ });
37
+ exports.Yaml = v4_1.z.string().transform((str, ctx) => {
38
+ try {
39
+ return (0, yaml_1.parseSingleYaml)(str);
40
+ }
41
+ catch {
42
+ ctx.addIssue({ code: 'custom', message: 'Invalid YAML' });
43
+ return v4_1.z.NEVER;
44
+ }
45
+ });
46
+ exports.MultidocYaml = v4_1.z.string().transform((str, ctx) => {
47
+ try {
48
+ return (0, yaml_1.parseYaml)(str);
49
+ }
50
+ catch {
51
+ ctx.addIssue({ code: 'custom', message: 'Invalid YAML' });
52
+ return v4_1.z.NEVER;
53
+ }
54
+ });
55
+ exports.Toml = v4_1.z.string().transform((str, ctx) => {
56
+ try {
57
+ return (0, toml_1.parse)(str);
58
+ }
59
+ catch {
60
+ ctx.addIssue({ code: 'custom', message: 'Invalid TOML' });
61
+ return v4_1.z.NEVER;
62
+ }
63
+ });
64
+ //# sourceMappingURL=v4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v4.js","sourceRoot":"","sources":["../../../lib/util/schema-utils/v4.ts"],"names":[],"mappings":";;;;AAAA,0DAA0B;AAC1B,+BAA2B;AAC3B,sCAAuC;AACvC,kCAA6C;AAC7C,kCAAqD;AAExC,QAAA,IAAI,GAAG,MAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAW,EAAE;IAC7D,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QAC1D,OAAO,MAAC,CAAC,KAAK,CAAC;IACjB,CAAC;AACH,CAAC,CAAC,CAAC;AAEU,QAAA,KAAK,GAAG,MAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAW,EAAE;IAC9D,IAAI,CAAC;QACH,OAAO,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;QAC3D,OAAO,MAAC,CAAC,KAAK,CAAC;IACjB,CAAC;AACH,CAAC,CAAC,CAAC;AAEU,QAAA,KAAK,GAAG,MAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAW,EAAE;IAC9D,IAAI,CAAC;QACH,OAAO,IAAA,mBAAU,EAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;QAC3D,OAAO,MAAC,CAAC,KAAK,CAAC;IACjB,CAAC;AACH,CAAC,CAAC,CAAC;AAEU,QAAA,IAAI,GAAG,MAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAW,EAAE;IAC7D,IAAI,CAAC;QACH,OAAO,IAAA,sBAAe,EAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QAC1D,OAAO,MAAC,CAAC,KAAK,CAAC;IACjB,CAAC;AACH,CAAC,CAAC,CAAC;AAEU,QAAA,YAAY,GAAG,MAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAW,EAAE;IACrE,IAAI,CAAC;QACH,OAAO,IAAA,gBAAS,EAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QAC1D,OAAO,MAAC,CAAC,KAAK,CAAC;IACjB,CAAC;AACH,CAAC,CAAC,CAAC;AAEU,QAAA,IAAI,GAAG,MAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACpD,IAAI,CAAC;QACH,OAAO,IAAA,YAAS,EAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QAC1D,OAAO,MAAC,CAAC,KAAK,CAAC;IACjB,CAAC;AACH,CAAC,CAAC,CAAC","sourcesContent":["import JSON5 from 'json5';\nimport { z } from 'zod/v4';\nimport { parseJsonc } from '../common';\nimport { parse as parseToml } from '../toml';\nimport { parseSingleYaml, parseYaml } from '../yaml';\n\nexport const Json = z.string().transform((str, ctx): unknown => {\n try {\n return JSON.parse(str);\n } catch {\n ctx.addIssue({ code: 'custom', message: 'Invalid JSON' });\n return z.NEVER;\n }\n});\n\nexport const Json5 = z.string().transform((str, ctx): unknown => {\n try {\n return JSON5.parse(str);\n } catch {\n ctx.addIssue({ code: 'custom', message: 'Invalid JSON5' });\n return z.NEVER;\n }\n});\n\nexport const Jsonc = z.string().transform((str, ctx): unknown => {\n try {\n return parseJsonc(str);\n } catch {\n ctx.addIssue({ code: 'custom', message: 'Invalid JSONC' });\n return z.NEVER;\n }\n});\n\nexport const Yaml = z.string().transform((str, ctx): unknown => {\n try {\n return parseSingleYaml(str);\n } catch {\n ctx.addIssue({ code: 'custom', message: 'Invalid YAML' });\n return z.NEVER;\n }\n});\n\nexport const MultidocYaml = z.string().transform((str, ctx): unknown => {\n try {\n return parseYaml(str);\n } catch {\n ctx.addIssue({ code: 'custom', message: 'Invalid YAML' });\n return z.NEVER;\n }\n});\n\nexport const Toml = z.string().transform((str, ctx) => {\n try {\n return parseToml(str);\n } catch {\n ctx.addIssue({ code: 'custom', message: 'Invalid TOML' });\n return z.NEVER;\n }\n});\n"]}
@@ -104,13 +104,24 @@ export declare class HttpCacheStats {
104
104
  static report(): void;
105
105
  }
106
106
  type ObsoleteCacheStats = Record<string, {
107
- callsite?: string;
108
107
  count: number;
109
108
  }>;
110
109
  export declare class ObsoleteCacheHitLogger {
111
110
  static getData(): ObsoleteCacheStats;
112
- private static getCallsite;
113
111
  static write(url: string): void;
114
112
  static report(): void;
115
113
  }
114
+ interface AbandonedPackage {
115
+ datasource: string;
116
+ packageName: string;
117
+ mostRecentTimestamp: string;
118
+ }
119
+ type AbandonedPackageReport = Record<string, Record<string, string>>;
120
+ export declare class AbandonedPackageStats {
121
+ static getData(): AbandonedPackage[];
122
+ private static setData;
123
+ static write(datasource: string, packageName: string, mostRecentTimestamp: string): void;
124
+ static getReport(): AbandonedPackageReport;
125
+ static report(): void;
126
+ }
116
127
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ObsoleteCacheHitLogger = exports.HttpCacheStats = exports.HttpStats = exports.DatasourceCacheStats = exports.PackageCacheStats = exports.LookupStats = void 0;
3
+ exports.AbandonedPackageStats = exports.ObsoleteCacheHitLogger = exports.HttpCacheStats = exports.HttpStats = exports.DatasourceCacheStats = exports.PackageCacheStats = exports.LookupStats = void 0;
4
4
  exports.makeTimingReport = makeTimingReport;
5
5
  const tslib_1 = require("tslib");
6
6
  const logger_1 = require("../logger");
@@ -329,34 +329,10 @@ class ObsoleteCacheHitLogger {
329
329
  static getData() {
330
330
  return memCache.get('obsolete-cache-stats') ?? {};
331
331
  }
332
- static getCallsite() {
333
- const _prepareStackTrace = Error.prepareStackTrace;
334
- try {
335
- let result;
336
- Error.prepareStackTrace = (_, stack) => {
337
- result = stack
338
- .find((frame) => {
339
- const callsite = frame.toString();
340
- return (!callsite.includes('lib/util/http') &&
341
- !callsite.includes('lib/util/stats') &&
342
- !callsite.includes('(node:'));
343
- })
344
- ?.toString()
345
- ?.replace(/:\d+(?::\d+)?\)$/, ')');
346
- };
347
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions
348
- new Error().stack;
349
- return result;
350
- }
351
- finally {
352
- Error.prepareStackTrace = _prepareStackTrace;
353
- }
354
- }
355
332
  static write(url) {
356
333
  const data = this.getData();
357
334
  if (!data[url]) {
358
- const callsite = this.getCallsite();
359
- data[url] = { callsite, count: 0 };
335
+ data[url] = { count: 0 };
360
336
  }
361
337
  data[url].count++;
362
338
  memCache.set('obsolete-cache-stats', data);
@@ -367,5 +343,40 @@ class ObsoleteCacheHitLogger {
367
343
  }
368
344
  }
369
345
  exports.ObsoleteCacheHitLogger = ObsoleteCacheHitLogger;
370
- /* v8 ignore stop: temporary code */
346
+ class AbandonedPackageStats {
347
+ static getData() {
348
+ return memCache.get('abandonment-stats') ?? [];
349
+ }
350
+ static setData(data) {
351
+ memCache.set('abandonment-stats', data);
352
+ }
353
+ static write(datasource, packageName, mostRecentTimestamp) {
354
+ const data = this.getData();
355
+ data.push({ datasource, packageName, mostRecentTimestamp });
356
+ this.setData(data);
357
+ }
358
+ static getReport() {
359
+ const data = this.getData();
360
+ const result = {};
361
+ for (const { datasource, packageName, mostRecentTimestamp } of data) {
362
+ result[datasource] ??= {};
363
+ result[datasource][packageName] = mostRecentTimestamp;
364
+ }
365
+ const sortedResult = {};
366
+ for (const datasource of Object.keys(result).sort()) {
367
+ sortedResult[datasource] = {};
368
+ for (const packageName of Object.keys(result[datasource]).sort()) {
369
+ sortedResult[datasource][packageName] = result[datasource][packageName];
370
+ }
371
+ }
372
+ return sortedResult;
373
+ }
374
+ static report() {
375
+ const report = this.getReport();
376
+ if (Object.keys(report).length > 0) {
377
+ logger_1.logger.debug(report, 'Abandoned package statistics');
378
+ }
379
+ }
380
+ }
381
+ exports.AbandonedPackageStats = AbandonedPackageStats;
371
382
  //# sourceMappingURL=stats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../lib/util/stats.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '../logger';\nimport * as memCache from './cache/memory';\nimport { parseUrl } from './url';\n\ntype LookupStatsData = Record<string, number[]>;\n\ninterface TimingStatsReport {\n count: number;\n avgMs: number;\n medianMs: number;\n maxMs: number;\n totalMs: number;\n}\n\nexport function makeTimingReport(data: number[]): TimingStatsReport {\n const count = data.length;\n const totalMs = data.reduce((a, c) => a + c, 0);\n const avgMs = count ? Math.round(totalMs / count) : 0;\n const maxMs = Math.max(0, ...data);\n const sorted = data.sort((a, b) => a - b);\n const medianMs = count ? sorted[Math.floor(count / 2)] : 0;\n return { count, avgMs, medianMs, maxMs, totalMs };\n}\n\nexport class LookupStats {\n static write(datasource: string, duration: number): void {\n const data = memCache.get<LookupStatsData>('lookup-stats') ?? {};\n data[datasource] ??= [];\n data[datasource].push(duration);\n memCache.set('lookup-stats', data);\n }\n\n static async wrap<T>(\n datasource: string,\n callback: () => Promise<T>,\n ): Promise<T> {\n const start = Date.now();\n const result = await callback();\n const duration = Date.now() - start;\n LookupStats.write(datasource, duration);\n return result;\n }\n\n static getReport(): Record<string, TimingStatsReport> {\n const report: Record<string, TimingStatsReport> = {};\n const data = memCache.get<LookupStatsData>('lookup-stats') ?? {};\n for (const [datasource, durations] of Object.entries(data)) {\n report[datasource] = makeTimingReport(durations);\n }\n return report;\n }\n\n static report(): void {\n const report = LookupStats.getReport();\n logger.debug(report, 'Lookup statistics');\n }\n}\n\ntype PackageCacheData = number[];\n\nexport class PackageCacheStats {\n static writeSet(duration: number): void {\n const data = memCache.get<PackageCacheData>('package-cache-sets') ?? [];\n data.push(duration);\n memCache.set('package-cache-sets', data);\n }\n\n static async wrapSet<T>(callback: () => Promise<T>): Promise<T> {\n const start = Date.now();\n const result = await callback();\n const duration = Date.now() - start;\n PackageCacheStats.writeSet(duration);\n return result;\n }\n\n static writeGet(duration: number): void {\n const data = memCache.get<PackageCacheData>('package-cache-gets') ?? [];\n data.push(duration);\n memCache.set('package-cache-gets', data);\n }\n\n static async wrapGet<T>(callback: () => Promise<T>): Promise<T> {\n const start = Date.now();\n const result = await callback();\n const duration = Date.now() - start;\n PackageCacheStats.writeGet(duration);\n return result;\n }\n\n static getReport(): { get: TimingStatsReport; set: TimingStatsReport } {\n const packageCacheGets =\n memCache.get<PackageCacheData>('package-cache-gets') ?? [];\n const get = makeTimingReport(packageCacheGets);\n\n const packageCacheSets =\n memCache.get<PackageCacheData>('package-cache-sets') ?? [];\n const set = makeTimingReport(packageCacheSets);\n\n return { get, set };\n }\n\n static report(): void {\n const report = PackageCacheStats.getReport();\n logger.debug(report, 'Package cache statistics');\n }\n}\n\ninterface DatasourceCacheDataPoint {\n datasource: string;\n registryUrl: string;\n packageName: string;\n action: 'hit' | 'miss' | 'set' | 'skip';\n}\n\n/* eslint-disable @typescript-eslint/consistent-indexed-object-style */\nexport interface DatasourceCacheReport {\n long: {\n [datasource in string]: {\n [registryUrl in string]: {\n [packageName in string]: {\n read?: 'hit' | 'miss';\n write?: 'set' | 'skip';\n };\n };\n };\n };\n short: {\n [datasource in string]: {\n [registryUrl in string]: {\n hit: number;\n miss: number;\n set: number;\n skip: number;\n };\n };\n };\n}\n/* eslint-enable @typescript-eslint/consistent-indexed-object-style */\n\nexport class DatasourceCacheStats {\n private static getData(): DatasourceCacheDataPoint[] {\n return (\n memCache.get<DatasourceCacheDataPoint[]>('datasource-cache-stats') ?? []\n );\n }\n\n private static setData(data: DatasourceCacheDataPoint[]): void {\n memCache.set('datasource-cache-stats', data);\n }\n\n static hit(\n datasource: string,\n registryUrl: string,\n packageName: string,\n ): void {\n const data = this.getData();\n data.push({ datasource, registryUrl, packageName, action: 'hit' });\n this.setData(data);\n }\n\n static miss(\n datasource: string,\n registryUrl: string,\n packageName: string,\n ): void {\n const data = this.getData();\n data.push({ datasource, registryUrl, packageName, action: 'miss' });\n this.setData(data);\n }\n\n static set(\n datasource: string,\n registryUrl: string,\n packageName: string,\n ): void {\n const data = this.getData();\n data.push({ datasource, registryUrl, packageName, action: 'set' });\n this.setData(data);\n }\n\n static skip(\n datasource: string,\n registryUrl: string,\n packageName: string,\n ): void {\n const data = this.getData();\n data.push({ datasource, registryUrl, packageName, action: 'skip' });\n this.setData(data);\n }\n\n static getReport(): DatasourceCacheReport {\n const data = this.getData();\n const result: DatasourceCacheReport = { long: {}, short: {} };\n for (const { datasource, registryUrl, packageName, action } of data) {\n result.long[datasource] ??= {};\n result.long[datasource][registryUrl] ??= {};\n result.long[datasource][registryUrl] ??= {};\n result.long[datasource][registryUrl][packageName] ??= {};\n\n result.short[datasource] ??= {};\n result.short[datasource][registryUrl] ??= {\n hit: 0,\n miss: 0,\n set: 0,\n skip: 0,\n };\n\n if (action === 'hit') {\n result.long[datasource][registryUrl][packageName].read = 'hit';\n result.short[datasource][registryUrl].hit += 1;\n continue;\n }\n\n if (action === 'miss') {\n result.long[datasource][registryUrl][packageName].read = 'miss';\n result.short[datasource][registryUrl].miss += 1;\n continue;\n }\n\n if (action === 'set') {\n result.long[datasource][registryUrl][packageName].write = 'set';\n result.short[datasource][registryUrl].set += 1;\n continue;\n }\n\n if (action === 'skip') {\n result.long[datasource][registryUrl][packageName].write = 'skip';\n result.short[datasource][registryUrl].skip += 1;\n continue;\n }\n }\n\n return result;\n }\n\n static report(): void {\n const { long, short } = this.getReport();\n\n if (Object.keys(short).length > 0) {\n logger.debug(short, 'Datasource cache statistics');\n }\n\n if (Object.keys(long).length > 0) {\n logger.trace(long, 'Datasource cache detailed statistics');\n }\n }\n}\n\nexport interface HttpRequestStatsDataPoint {\n method: string;\n url: string;\n reqMs: number;\n queueMs: number;\n status: number;\n}\n\ninterface HostStatsData {\n count: number;\n reqAvgMs: number;\n reqMedianMs: number;\n reqMaxMs: number;\n queueAvgMs: number;\n queueMedianMs: number;\n queueMaxMs: number;\n}\n\n// url -> method -> status -> count\ntype UrlHttpStat = Record<string, Record<string, Record<string, number>>>;\n\ninterface HttpStatsCollection {\n // debug data\n urls: UrlHttpStat;\n hosts: Record<string, HostStatsData>;\n requests: number;\n\n // trace data\n rawRequests: string[];\n hostRequests: Record<string, HttpRequestStatsDataPoint[]>;\n}\n\nexport class HttpStats {\n static write(data: HttpRequestStatsDataPoint): void {\n const httpRequests =\n memCache.get<HttpRequestStatsDataPoint[]>('http-requests') ?? [];\n httpRequests.push(data);\n memCache.set('http-requests', httpRequests);\n }\n\n static getDataPoints(): HttpRequestStatsDataPoint[] {\n const httpRequests =\n memCache.get<HttpRequestStatsDataPoint[]>('http-requests') ?? [];\n\n // istanbul ignore next: sorting is hard and not worth testing\n httpRequests.sort((a, b) => {\n if (a.url < b.url) {\n return -1;\n }\n\n if (a.url > b.url) {\n return 1;\n }\n\n return 0;\n });\n\n return httpRequests;\n }\n\n static getReport(): HttpStatsCollection {\n const dataPoints = HttpStats.getDataPoints();\n\n const requests = dataPoints.length;\n\n const urls: UrlHttpStat = {};\n const rawRequests: string[] = [];\n const hostRequests: Record<string, HttpRequestStatsDataPoint[]> = {};\n\n for (const dataPoint of dataPoints) {\n const { url, reqMs, queueMs, status } = dataPoint;\n const method = dataPoint.method.toUpperCase();\n\n const parsedUrl = parseUrl(url);\n if (!parsedUrl) {\n logger.debug({ url }, 'Failed to parse URL during stats reporting');\n continue;\n }\n const { hostname, origin, pathname } = parsedUrl;\n const baseUrl = `${origin}${pathname}`;\n\n urls[baseUrl] ??= {};\n urls[baseUrl][method] ??= {};\n urls[baseUrl][method][status] ??= 0;\n urls[baseUrl][method][status] += 1;\n\n rawRequests.push(`${method} ${url} ${status} ${reqMs} ${queueMs}`);\n\n hostRequests[hostname] ??= [];\n hostRequests[hostname].push(dataPoint);\n }\n\n const hosts: Record<string, HostStatsData> = {};\n\n for (const [hostname, dataPoints] of Object.entries(hostRequests)) {\n const count = dataPoints.length;\n\n const reqTimes = dataPoints.map((r) => r.reqMs);\n const queueTimes = dataPoints.map((r) => r.queueMs);\n\n const reqReport = makeTimingReport(reqTimes);\n const queueReport = makeTimingReport(queueTimes);\n\n hosts[hostname] = {\n count,\n reqAvgMs: reqReport.avgMs,\n reqMedianMs: reqReport.medianMs,\n reqMaxMs: reqReport.maxMs,\n queueAvgMs: queueReport.avgMs,\n queueMedianMs: queueReport.medianMs,\n queueMaxMs: queueReport.maxMs,\n };\n }\n\n return {\n urls,\n rawRequests,\n hostRequests,\n hosts,\n requests,\n };\n }\n\n static report(): void {\n const { urls, rawRequests, hostRequests, hosts, requests } =\n HttpStats.getReport();\n logger.trace({ rawRequests, hostRequests }, 'HTTP full statistics');\n logger.debug({ hosts, requests }, 'HTTP statistics');\n logger.trace({ urls }, 'HTTP URL statistics');\n }\n}\n\ninterface HttpCacheHostStatsData {\n hit: number;\n miss: number;\n localHit?: number;\n localMiss?: number;\n}\n\ntype HttpCacheStatsData = Record<string, HttpCacheHostStatsData>;\n\nfunction sortObject<T>(obj: Record<string, T>): Record<string, T> {\n const result: Record<string, T> = {};\n for (const key of Object.keys(obj).sort()) {\n result[key] = obj[key];\n }\n return result;\n}\n\nexport class HttpCacheStats {\n static getData(): HttpCacheStatsData {\n return memCache.get<HttpCacheStatsData>('http-cache-stats') ?? {};\n }\n\n static read(key: string): HttpCacheHostStatsData {\n return (\n this.getData()?.[key] ?? {\n hit: 0,\n miss: 0,\n }\n );\n }\n\n static write(key: string, data: HttpCacheHostStatsData): void {\n const stats = memCache.get<HttpCacheStatsData>('http-cache-stats') ?? {};\n stats[key] = data;\n memCache.set('http-cache-stats', stats);\n }\n\n static getBaseUrl(url: string): string | null {\n const parsedUrl = parseUrl(url);\n if (!parsedUrl) {\n logger.debug({ url }, 'Failed to parse URL during cache stats');\n return null;\n }\n const { origin, pathname } = parsedUrl;\n const baseUrl = `${origin}${pathname}`;\n return baseUrl;\n }\n\n static incLocalHits(url: string): void {\n const baseUrl = HttpCacheStats.getBaseUrl(url);\n if (baseUrl) {\n const host = baseUrl;\n const stats = HttpCacheStats.read(host);\n stats.localHit ??= 0;\n stats.localHit += 1;\n HttpCacheStats.write(host, stats);\n }\n }\n\n static incLocalMisses(url: string): void {\n const baseUrl = HttpCacheStats.getBaseUrl(url);\n if (baseUrl) {\n const host = baseUrl;\n const stats = HttpCacheStats.read(host);\n stats.localMiss ??= 0;\n stats.localMiss += 1;\n HttpCacheStats.write(host, stats);\n }\n }\n\n static incRemoteHits(url: string): void {\n const baseUrl = HttpCacheStats.getBaseUrl(url);\n if (baseUrl) {\n const host = baseUrl;\n const stats = HttpCacheStats.read(host);\n stats.hit += 1;\n HttpCacheStats.write(host, stats);\n }\n }\n\n static incRemoteMisses(url: string): void {\n const baseUrl = HttpCacheStats.getBaseUrl(url);\n if (baseUrl) {\n const host = baseUrl;\n const stats = HttpCacheStats.read(host);\n stats.miss += 1;\n HttpCacheStats.write(host, stats);\n }\n }\n\n static report(): void {\n const data = HttpCacheStats.getData();\n let report: Record<string, Record<string, HttpCacheHostStatsData>> = {};\n for (const [url, stats] of Object.entries(data)) {\n const parsedUrl = parseUrl(url);\n if (parsedUrl) {\n const { origin, pathname } = parsedUrl;\n report[origin] ??= {};\n report[origin][pathname] = stats;\n }\n }\n\n for (const [host, hostStats] of Object.entries(report)) {\n report[host] = sortObject(hostStats);\n }\n report = sortObject(report);\n\n logger.debug(report, 'HTTP cache statistics');\n }\n}\n\ntype ObsoleteCacheStats = Record<\n string,\n {\n callsite?: string;\n count: number;\n }\n>;\n\n/* v8 ignore start: temporary code */\nexport class ObsoleteCacheHitLogger {\n static getData(): ObsoleteCacheStats {\n return memCache.get<ObsoleteCacheStats>('obsolete-cache-stats') ?? {};\n }\n\n private static getCallsite(): string | undefined {\n const _prepareStackTrace = Error.prepareStackTrace;\n try {\n let result: string | undefined;\n Error.prepareStackTrace = (_, stack) => {\n result = stack\n .find((frame) => {\n const callsite = frame.toString();\n return (\n !callsite.includes('lib/util/http') &&\n !callsite.includes('lib/util/stats') &&\n !callsite.includes('(node:')\n );\n })\n ?.toString()\n ?.replace(/:\\d+(?::\\d+)?\\)$/, ')');\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n new Error().stack;\n\n return result;\n } finally {\n Error.prepareStackTrace = _prepareStackTrace;\n }\n }\n\n static write(url: string): void {\n const data = this.getData();\n if (!data[url]) {\n const callsite = this.getCallsite();\n data[url] = { callsite, count: 0 };\n }\n data[url].count++;\n memCache.set('obsolete-cache-stats', data);\n }\n\n static report(): void {\n const hits = this.getData();\n logger.debug(\n { count: Object.keys(hits).length, hits },\n 'Cache fallback URLs',\n );\n }\n}\n/* v8 ignore stop: temporary code */\n"]}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../lib/util/stats.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '../logger';\nimport * as memCache from './cache/memory';\nimport { parseUrl } from './url';\n\ntype LookupStatsData = Record<string, number[]>;\n\ninterface TimingStatsReport {\n count: number;\n avgMs: number;\n medianMs: number;\n maxMs: number;\n totalMs: number;\n}\n\nexport function makeTimingReport(data: number[]): TimingStatsReport {\n const count = data.length;\n const totalMs = data.reduce((a, c) => a + c, 0);\n const avgMs = count ? Math.round(totalMs / count) : 0;\n const maxMs = Math.max(0, ...data);\n const sorted = data.sort((a, b) => a - b);\n const medianMs = count ? sorted[Math.floor(count / 2)] : 0;\n return { count, avgMs, medianMs, maxMs, totalMs };\n}\n\nexport class LookupStats {\n static write(datasource: string, duration: number): void {\n const data = memCache.get<LookupStatsData>('lookup-stats') ?? {};\n data[datasource] ??= [];\n data[datasource].push(duration);\n memCache.set('lookup-stats', data);\n }\n\n static async wrap<T>(\n datasource: string,\n callback: () => Promise<T>,\n ): Promise<T> {\n const start = Date.now();\n const result = await callback();\n const duration = Date.now() - start;\n LookupStats.write(datasource, duration);\n return result;\n }\n\n static getReport(): Record<string, TimingStatsReport> {\n const report: Record<string, TimingStatsReport> = {};\n const data = memCache.get<LookupStatsData>('lookup-stats') ?? {};\n for (const [datasource, durations] of Object.entries(data)) {\n report[datasource] = makeTimingReport(durations);\n }\n return report;\n }\n\n static report(): void {\n const report = LookupStats.getReport();\n logger.debug(report, 'Lookup statistics');\n }\n}\n\ntype PackageCacheData = number[];\n\nexport class PackageCacheStats {\n static writeSet(duration: number): void {\n const data = memCache.get<PackageCacheData>('package-cache-sets') ?? [];\n data.push(duration);\n memCache.set('package-cache-sets', data);\n }\n\n static async wrapSet<T>(callback: () => Promise<T>): Promise<T> {\n const start = Date.now();\n const result = await callback();\n const duration = Date.now() - start;\n PackageCacheStats.writeSet(duration);\n return result;\n }\n\n static writeGet(duration: number): void {\n const data = memCache.get<PackageCacheData>('package-cache-gets') ?? [];\n data.push(duration);\n memCache.set('package-cache-gets', data);\n }\n\n static async wrapGet<T>(callback: () => Promise<T>): Promise<T> {\n const start = Date.now();\n const result = await callback();\n const duration = Date.now() - start;\n PackageCacheStats.writeGet(duration);\n return result;\n }\n\n static getReport(): { get: TimingStatsReport; set: TimingStatsReport } {\n const packageCacheGets =\n memCache.get<PackageCacheData>('package-cache-gets') ?? [];\n const get = makeTimingReport(packageCacheGets);\n\n const packageCacheSets =\n memCache.get<PackageCacheData>('package-cache-sets') ?? [];\n const set = makeTimingReport(packageCacheSets);\n\n return { get, set };\n }\n\n static report(): void {\n const report = PackageCacheStats.getReport();\n logger.debug(report, 'Package cache statistics');\n }\n}\n\ninterface DatasourceCacheDataPoint {\n datasource: string;\n registryUrl: string;\n packageName: string;\n action: 'hit' | 'miss' | 'set' | 'skip';\n}\n\n/* eslint-disable @typescript-eslint/consistent-indexed-object-style */\nexport interface DatasourceCacheReport {\n long: {\n [datasource in string]: {\n [registryUrl in string]: {\n [packageName in string]: {\n read?: 'hit' | 'miss';\n write?: 'set' | 'skip';\n };\n };\n };\n };\n short: {\n [datasource in string]: {\n [registryUrl in string]: {\n hit: number;\n miss: number;\n set: number;\n skip: number;\n };\n };\n };\n}\n/* eslint-enable @typescript-eslint/consistent-indexed-object-style */\n\nexport class DatasourceCacheStats {\n private static getData(): DatasourceCacheDataPoint[] {\n return (\n memCache.get<DatasourceCacheDataPoint[]>('datasource-cache-stats') ?? []\n );\n }\n\n private static setData(data: DatasourceCacheDataPoint[]): void {\n memCache.set('datasource-cache-stats', data);\n }\n\n static hit(\n datasource: string,\n registryUrl: string,\n packageName: string,\n ): void {\n const data = this.getData();\n data.push({ datasource, registryUrl, packageName, action: 'hit' });\n this.setData(data);\n }\n\n static miss(\n datasource: string,\n registryUrl: string,\n packageName: string,\n ): void {\n const data = this.getData();\n data.push({ datasource, registryUrl, packageName, action: 'miss' });\n this.setData(data);\n }\n\n static set(\n datasource: string,\n registryUrl: string,\n packageName: string,\n ): void {\n const data = this.getData();\n data.push({ datasource, registryUrl, packageName, action: 'set' });\n this.setData(data);\n }\n\n static skip(\n datasource: string,\n registryUrl: string,\n packageName: string,\n ): void {\n const data = this.getData();\n data.push({ datasource, registryUrl, packageName, action: 'skip' });\n this.setData(data);\n }\n\n static getReport(): DatasourceCacheReport {\n const data = this.getData();\n const result: DatasourceCacheReport = { long: {}, short: {} };\n for (const { datasource, registryUrl, packageName, action } of data) {\n result.long[datasource] ??= {};\n result.long[datasource][registryUrl] ??= {};\n result.long[datasource][registryUrl] ??= {};\n result.long[datasource][registryUrl][packageName] ??= {};\n\n result.short[datasource] ??= {};\n result.short[datasource][registryUrl] ??= {\n hit: 0,\n miss: 0,\n set: 0,\n skip: 0,\n };\n\n if (action === 'hit') {\n result.long[datasource][registryUrl][packageName].read = 'hit';\n result.short[datasource][registryUrl].hit += 1;\n continue;\n }\n\n if (action === 'miss') {\n result.long[datasource][registryUrl][packageName].read = 'miss';\n result.short[datasource][registryUrl].miss += 1;\n continue;\n }\n\n if (action === 'set') {\n result.long[datasource][registryUrl][packageName].write = 'set';\n result.short[datasource][registryUrl].set += 1;\n continue;\n }\n\n if (action === 'skip') {\n result.long[datasource][registryUrl][packageName].write = 'skip';\n result.short[datasource][registryUrl].skip += 1;\n continue;\n }\n }\n\n return result;\n }\n\n static report(): void {\n const { long, short } = this.getReport();\n\n if (Object.keys(short).length > 0) {\n logger.debug(short, 'Datasource cache statistics');\n }\n\n if (Object.keys(long).length > 0) {\n logger.trace(long, 'Datasource cache detailed statistics');\n }\n }\n}\n\nexport interface HttpRequestStatsDataPoint {\n method: string;\n url: string;\n reqMs: number;\n queueMs: number;\n status: number;\n}\n\ninterface HostStatsData {\n count: number;\n reqAvgMs: number;\n reqMedianMs: number;\n reqMaxMs: number;\n queueAvgMs: number;\n queueMedianMs: number;\n queueMaxMs: number;\n}\n\n// url -> method -> status -> count\ntype UrlHttpStat = Record<string, Record<string, Record<string, number>>>;\n\ninterface HttpStatsCollection {\n // debug data\n urls: UrlHttpStat;\n hosts: Record<string, HostStatsData>;\n requests: number;\n\n // trace data\n rawRequests: string[];\n hostRequests: Record<string, HttpRequestStatsDataPoint[]>;\n}\n\nexport class HttpStats {\n static write(data: HttpRequestStatsDataPoint): void {\n const httpRequests =\n memCache.get<HttpRequestStatsDataPoint[]>('http-requests') ?? [];\n httpRequests.push(data);\n memCache.set('http-requests', httpRequests);\n }\n\n static getDataPoints(): HttpRequestStatsDataPoint[] {\n const httpRequests =\n memCache.get<HttpRequestStatsDataPoint[]>('http-requests') ?? [];\n\n // istanbul ignore next: sorting is hard and not worth testing\n httpRequests.sort((a, b) => {\n if (a.url < b.url) {\n return -1;\n }\n\n if (a.url > b.url) {\n return 1;\n }\n\n return 0;\n });\n\n return httpRequests;\n }\n\n static getReport(): HttpStatsCollection {\n const dataPoints = HttpStats.getDataPoints();\n\n const requests = dataPoints.length;\n\n const urls: UrlHttpStat = {};\n const rawRequests: string[] = [];\n const hostRequests: Record<string, HttpRequestStatsDataPoint[]> = {};\n\n for (const dataPoint of dataPoints) {\n const { url, reqMs, queueMs, status } = dataPoint;\n const method = dataPoint.method.toUpperCase();\n\n const parsedUrl = parseUrl(url);\n if (!parsedUrl) {\n logger.debug({ url }, 'Failed to parse URL during stats reporting');\n continue;\n }\n const { hostname, origin, pathname } = parsedUrl;\n const baseUrl = `${origin}${pathname}`;\n\n urls[baseUrl] ??= {};\n urls[baseUrl][method] ??= {};\n urls[baseUrl][method][status] ??= 0;\n urls[baseUrl][method][status] += 1;\n\n rawRequests.push(`${method} ${url} ${status} ${reqMs} ${queueMs}`);\n\n hostRequests[hostname] ??= [];\n hostRequests[hostname].push(dataPoint);\n }\n\n const hosts: Record<string, HostStatsData> = {};\n\n for (const [hostname, dataPoints] of Object.entries(hostRequests)) {\n const count = dataPoints.length;\n\n const reqTimes = dataPoints.map((r) => r.reqMs);\n const queueTimes = dataPoints.map((r) => r.queueMs);\n\n const reqReport = makeTimingReport(reqTimes);\n const queueReport = makeTimingReport(queueTimes);\n\n hosts[hostname] = {\n count,\n reqAvgMs: reqReport.avgMs,\n reqMedianMs: reqReport.medianMs,\n reqMaxMs: reqReport.maxMs,\n queueAvgMs: queueReport.avgMs,\n queueMedianMs: queueReport.medianMs,\n queueMaxMs: queueReport.maxMs,\n };\n }\n\n return {\n urls,\n rawRequests,\n hostRequests,\n hosts,\n requests,\n };\n }\n\n static report(): void {\n const { urls, rawRequests, hostRequests, hosts, requests } =\n HttpStats.getReport();\n logger.trace({ rawRequests, hostRequests }, 'HTTP full statistics');\n logger.debug({ hosts, requests }, 'HTTP statistics');\n logger.trace({ urls }, 'HTTP URL statistics');\n }\n}\n\ninterface HttpCacheHostStatsData {\n hit: number;\n miss: number;\n localHit?: number;\n localMiss?: number;\n}\n\ntype HttpCacheStatsData = Record<string, HttpCacheHostStatsData>;\n\nfunction sortObject<T>(obj: Record<string, T>): Record<string, T> {\n const result: Record<string, T> = {};\n for (const key of Object.keys(obj).sort()) {\n result[key] = obj[key];\n }\n return result;\n}\n\nexport class HttpCacheStats {\n static getData(): HttpCacheStatsData {\n return memCache.get<HttpCacheStatsData>('http-cache-stats') ?? {};\n }\n\n static read(key: string): HttpCacheHostStatsData {\n return (\n this.getData()?.[key] ?? {\n hit: 0,\n miss: 0,\n }\n );\n }\n\n static write(key: string, data: HttpCacheHostStatsData): void {\n const stats = memCache.get<HttpCacheStatsData>('http-cache-stats') ?? {};\n stats[key] = data;\n memCache.set('http-cache-stats', stats);\n }\n\n static getBaseUrl(url: string): string | null {\n const parsedUrl = parseUrl(url);\n if (!parsedUrl) {\n logger.debug({ url }, 'Failed to parse URL during cache stats');\n return null;\n }\n const { origin, pathname } = parsedUrl;\n const baseUrl = `${origin}${pathname}`;\n return baseUrl;\n }\n\n static incLocalHits(url: string): void {\n const baseUrl = HttpCacheStats.getBaseUrl(url);\n if (baseUrl) {\n const host = baseUrl;\n const stats = HttpCacheStats.read(host);\n stats.localHit ??= 0;\n stats.localHit += 1;\n HttpCacheStats.write(host, stats);\n }\n }\n\n static incLocalMisses(url: string): void {\n const baseUrl = HttpCacheStats.getBaseUrl(url);\n if (baseUrl) {\n const host = baseUrl;\n const stats = HttpCacheStats.read(host);\n stats.localMiss ??= 0;\n stats.localMiss += 1;\n HttpCacheStats.write(host, stats);\n }\n }\n\n static incRemoteHits(url: string): void {\n const baseUrl = HttpCacheStats.getBaseUrl(url);\n if (baseUrl) {\n const host = baseUrl;\n const stats = HttpCacheStats.read(host);\n stats.hit += 1;\n HttpCacheStats.write(host, stats);\n }\n }\n\n static incRemoteMisses(url: string): void {\n const baseUrl = HttpCacheStats.getBaseUrl(url);\n if (baseUrl) {\n const host = baseUrl;\n const stats = HttpCacheStats.read(host);\n stats.miss += 1;\n HttpCacheStats.write(host, stats);\n }\n }\n\n static report(): void {\n const data = HttpCacheStats.getData();\n let report: Record<string, Record<string, HttpCacheHostStatsData>> = {};\n for (const [url, stats] of Object.entries(data)) {\n const parsedUrl = parseUrl(url);\n if (parsedUrl) {\n const { origin, pathname } = parsedUrl;\n report[origin] ??= {};\n report[origin][pathname] = stats;\n }\n }\n\n for (const [host, hostStats] of Object.entries(report)) {\n report[host] = sortObject(hostStats);\n }\n report = sortObject(report);\n\n logger.debug(report, 'HTTP cache statistics');\n }\n}\n\ntype ObsoleteCacheStats = Record<\n string,\n {\n count: number;\n }\n>;\n\n/* v8 ignore start: temporary code */\nexport class ObsoleteCacheHitLogger {\n static getData(): ObsoleteCacheStats {\n return memCache.get<ObsoleteCacheStats>('obsolete-cache-stats') ?? {};\n }\n\n static write(url: string): void {\n const data = this.getData();\n if (!data[url]) {\n data[url] = { count: 0 };\n }\n data[url].count++;\n memCache.set('obsolete-cache-stats', data);\n }\n\n static report(): void {\n const hits = this.getData();\n logger.debug(\n { count: Object.keys(hits).length, hits },\n 'Cache fallback URLs',\n );\n }\n}\n/* v8 ignore stop: temporary code */\n\ninterface AbandonedPackage {\n datasource: string;\n packageName: string;\n mostRecentTimestamp: string;\n}\n\ntype AbandonedPackageReport = Record<string, Record<string, string>>;\n\nexport class AbandonedPackageStats {\n static getData(): AbandonedPackage[] {\n return memCache.get<AbandonedPackage[]>('abandonment-stats') ?? [];\n }\n\n private static setData(data: AbandonedPackage[]): void {\n memCache.set('abandonment-stats', data);\n }\n\n static write(\n datasource: string,\n packageName: string,\n mostRecentTimestamp: string,\n ): void {\n const data = this.getData();\n data.push({ datasource, packageName, mostRecentTimestamp });\n this.setData(data);\n }\n\n static getReport(): AbandonedPackageReport {\n const data = this.getData();\n const result: AbandonedPackageReport = {};\n\n for (const { datasource, packageName, mostRecentTimestamp } of data) {\n result[datasource] ??= {};\n result[datasource][packageName] = mostRecentTimestamp;\n }\n\n const sortedResult: AbandonedPackageReport = {};\n for (const datasource of Object.keys(result).sort()) {\n sortedResult[datasource] = {};\n for (const packageName of Object.keys(result[datasource]).sort()) {\n sortedResult[datasource][packageName] = result[datasource][packageName];\n }\n }\n\n return sortedResult;\n }\n\n static report(): void {\n const report = this.getReport();\n if (Object.keys(report).length > 0) {\n logger.debug(report, 'Abandoned package statistics');\n }\n }\n}\n"]}
@@ -3,13 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setConfig = setConfig;
4
4
  const tslib_1 = require("tslib");
5
5
  const node_readline_1 = tslib_1.__importDefault(require("node:readline"));
6
- // istanbul ignore next
6
+ const env_1 = require("../../../../util/env");
7
+ /* v8 ignore start */
7
8
  async function setConfig(config) {
8
- if (process.env.CODESPACES !== 'true') {
9
+ const env = (0, env_1.getEnv)();
10
+ if (env.CODESPACES !== 'true') {
9
11
  return config;
10
12
  }
11
- if (!config.token && process.env.GITHUB_TOKEN) {
12
- config.token = process.env.GITHUB_TOKEN;
13
+ if (!config.token && env.GITHUB_TOKEN) {
14
+ config.token = env.GITHUB_TOKEN;
13
15
  }
14
16
  if (!config.repositories?.length) {
15
17
  const rl = node_readline_1.default.promises.createInterface({
@@ -21,4 +23,5 @@ async function setConfig(config) {
21
23
  }
22
24
  return config;
23
25
  }
26
+ /* v8 ignore stop */
24
27
  //# sourceMappingURL=codespaces.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codespaces.js","sourceRoot":"","sources":["../../../../../lib/workers/global/config/parse/codespaces.ts"],"names":[],"mappings":";;AAIA,8BAmBC;;AAvBD,0EAAqC;AAGrC,uBAAuB;AAChB,KAAK,UAAU,SAAS,CAAC,MAAiB;IAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC9C,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,uBAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC3C,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;QACxD,MAAM,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import readline from 'node:readline';\nimport type { AllConfig } from '../../../../config/types';\n\n// istanbul ignore next\nexport async function setConfig(config: AllConfig): Promise<AllConfig> {\n if (process.env.CODESPACES !== 'true') {\n return config;\n }\n\n if (!config.token && process.env.GITHUB_TOKEN) {\n config.token = process.env.GITHUB_TOKEN;\n }\n\n if (!config.repositories?.length) {\n const rl = readline.promises.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n const repo = await rl.question('\\n\\nRepository name: ');\n config.repositories = [repo];\n }\n\n return config;\n}\n"]}
1
+ {"version":3,"file":"codespaces.js","sourceRoot":"","sources":["../../../../../lib/workers/global/config/parse/codespaces.ts"],"names":[],"mappings":";;AAKA,8BAoBC;;AAzBD,0EAAqC;AAErC,8CAA8C;AAE9C,qBAAqB;AACd,KAAK,UAAU,SAAS,CAAC,MAAiB;IAC/C,MAAM,GAAG,GAAG,IAAA,YAAM,GAAE,CAAC;IACrB,IAAI,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACtC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,uBAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC3C,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;QACxD,MAAM,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,oBAAoB","sourcesContent":["import readline from 'node:readline';\nimport type { AllConfig } from '../../../../config/types';\nimport { getEnv } from '../../../../util/env';\n\n/* v8 ignore start */\nexport async function setConfig(config: AllConfig): Promise<AllConfig> {\n const env = getEnv();\n if (env.CODESPACES !== 'true') {\n return config;\n }\n\n if (!config.token && env.GITHUB_TOKEN) {\n config.token = env.GITHUB_TOKEN;\n }\n\n if (!config.repositories?.length) {\n const rl = readline.promises.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n const repo = await rl.question('\\n\\nRepository name: ');\n config.repositories = [repo];\n }\n\n return config;\n}\n/* v8 ignore stop */\n"]}
@@ -19,6 +19,7 @@ const instrumentation_1 = require("../../instrumentation");
19
19
  const reporting_1 = require("../../instrumentation/reporting");
20
20
  const logger_1 = require("../../logger");
21
21
  const remap_1 = require("../../logger/remap");
22
+ const env_1 = require("../../util/env");
22
23
  const hostRules = tslib_1.__importStar(require("../../util/host-rules"));
23
24
  const queue = tslib_1.__importStar(require("../../util/http/queue"));
24
25
  const throttle = tslib_1.__importStar(require("../../util/http/throttle"));
@@ -46,7 +47,7 @@ async function getRepositoryConfig(globalConfig, repository) {
46
47
  return configParser.filterConfig(repoConfig, 'repository');
47
48
  }
48
49
  function getGlobalConfig() {
49
- return (0, parse_1.parseConfigs)(process.env, process.argv);
50
+ return (0, parse_1.parseConfigs)((0, env_1.getEnv)(), process.argv);
50
51
  }
51
52
  function haveReachedLimits() {
52
53
  if ((0, limits_1.isLimitReached)('Commits')) {
@@ -87,12 +88,13 @@ async function start() {
87
88
  logger_1.logger.debug('RE2 regex engine is ignored via RENOVATE_X_IGNORE_RE2');
88
89
  }
89
90
  let config;
91
+ const env = (0, env_1.getEnv)();
90
92
  try {
91
- if (is_1.default.nonEmptyStringAndNotWhitespace(process.env.AWS_SECRET_ACCESS_KEY)) {
92
- (0, sanitize_1.addSecretForSanitizing)(process.env.AWS_SECRET_ACCESS_KEY, 'global');
93
+ if (is_1.default.nonEmptyStringAndNotWhitespace(env.AWS_SECRET_ACCESS_KEY)) {
94
+ (0, sanitize_1.addSecretForSanitizing)(env.AWS_SECRET_ACCESS_KEY, 'global');
93
95
  }
94
- if (is_1.default.nonEmptyStringAndNotWhitespace(process.env.AWS_SESSION_TOKEN)) {
95
- (0, sanitize_1.addSecretForSanitizing)(process.env.AWS_SESSION_TOKEN, 'global');
96
+ if (is_1.default.nonEmptyStringAndNotWhitespace(env.AWS_SESSION_TOKEN)) {
97
+ (0, sanitize_1.addSecretForSanitizing)(env.AWS_SESSION_TOKEN, 'global');
96
98
  }
97
99
  await (0, instrumentation_1.instrument)('config', async () => {
98
100
  // read global config from file, env and cli args
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/workers/global/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { ERROR } from 'bunyan';\nimport fs from 'fs-extra';\nimport semver from 'semver';\nimport upath from 'upath';\nimport * as configParser from '../../config';\nimport { GlobalConfig } from '../../config/global';\nimport { resolveConfigPresets } from '../../config/presets';\nimport { validateConfigSecrets } from '../../config/secrets';\nimport type {\n AllConfig,\n RenovateConfig,\n RenovateRepository,\n} from '../../config/types';\nimport { CONFIG_PRESETS_INVALID } from '../../constants/error-messages';\nimport { pkg } from '../../expose.cjs';\nimport { instrument } from '../../instrumentation';\nimport { exportStats, finalizeReport } from '../../instrumentation/reporting';\nimport { getProblems, logLevel, logger, setMeta } from '../../logger';\nimport { setGlobalLogLevelRemaps } from '../../logger/remap';\nimport * as hostRules from '../../util/host-rules';\nimport * as queue from '../../util/http/queue';\nimport * as throttle from '../../util/http/throttle';\nimport { regexEngineStatus } from '../../util/regex';\nimport { addSecretForSanitizing } from '../../util/sanitize';\nimport * as repositoryWorker from '../repository';\nimport { autodiscoverRepositories } from './autodiscover';\nimport { parseConfigs } from './config/parse';\nimport { globalFinalize, globalInitialize } from './initialize';\nimport { isLimitReached } from './limits';\n\nexport async function getRepositoryConfig(\n globalConfig: RenovateConfig,\n repository: RenovateRepository,\n): Promise<RenovateConfig> {\n const repoConfig = configParser.mergeChildConfig(\n globalConfig,\n is.string(repository) ? { repository } : repository,\n );\n const repoParts = repoConfig.repository.split('/');\n repoParts.pop();\n repoConfig.parentOrg = repoParts.join('/');\n repoConfig.topLevelOrg = repoParts.shift();\n // TODO: types (#22198)\n const platform = GlobalConfig.get('platform')!;\n repoConfig.localDir =\n platform === 'local'\n ? process.cwd()\n : upath.join(\n repoConfig.baseDir,\n `./repos/${platform}/${repoConfig.repository}`,\n );\n await fs.ensureDir(repoConfig.localDir);\n delete repoConfig.baseDir;\n return configParser.filterConfig(repoConfig, 'repository');\n}\n\nfunction getGlobalConfig(): Promise<RenovateConfig> {\n return parseConfigs(process.env, process.argv);\n}\n\nfunction haveReachedLimits(): boolean {\n if (isLimitReached('Commits')) {\n logger.info('Max commits created for this run.');\n return true;\n }\n return false;\n}\n\n/* istanbul ignore next */\nfunction checkEnv(): void {\n const range = pkg.engines!.node!;\n if (process.release?.name !== 'node' || !process.versions?.node) {\n logger.warn(\n { release: process.release, versions: process.versions },\n 'Unknown node environment detected.',\n );\n } else if (!semver.satisfies(process.versions?.node, range)) {\n logger.error(\n { versions: process.versions, range },\n 'Unsupported node environment detected. Please update your node version.',\n );\n }\n}\n\nexport async function validatePresets(config: AllConfig): Promise<void> {\n logger.debug('validatePresets()');\n try {\n await resolveConfigPresets(config);\n } catch (err) /* istanbul ignore next */ {\n logger.error({ err }, CONFIG_PRESETS_INVALID);\n throw new Error(CONFIG_PRESETS_INVALID);\n }\n}\n\nexport async function start(): Promise<number> {\n // istanbul ignore next\n if (regexEngineStatus.type === 'available') {\n logger.debug('Using RE2 regex engine');\n } else if (regexEngineStatus.type === 'unavailable') {\n logger.warn(\n { err: regexEngineStatus.err },\n 'RE2 not usable, falling back to RegExp',\n );\n } else if (regexEngineStatus.type === 'ignored') {\n logger.debug('RE2 regex engine is ignored via RENOVATE_X_IGNORE_RE2');\n }\n\n let config: AllConfig;\n try {\n if (is.nonEmptyStringAndNotWhitespace(process.env.AWS_SECRET_ACCESS_KEY)) {\n addSecretForSanitizing(process.env.AWS_SECRET_ACCESS_KEY, 'global');\n }\n if (is.nonEmptyStringAndNotWhitespace(process.env.AWS_SESSION_TOKEN)) {\n addSecretForSanitizing(process.env.AWS_SESSION_TOKEN, 'global');\n }\n\n await instrument('config', async () => {\n // read global config from file, env and cli args\n config = await getGlobalConfig();\n\n // Set allowedHeaders and userAgent in case hostRules headers are configured in file config\n GlobalConfig.set({\n allowedHeaders: config.allowedHeaders,\n userAgent: config.userAgent,\n });\n // initialize all submodules\n config = await globalInitialize(config);\n\n // Set platform, endpoint, allowedHeaders and userAgent in case local presets are used\n GlobalConfig.set({\n allowedHeaders: config.allowedHeaders,\n platform: config.platform,\n endpoint: config.endpoint,\n userAgent: config.userAgent,\n });\n\n await validatePresets(config);\n\n setGlobalLogLevelRemaps(config.logLevelRemap);\n\n checkEnv();\n\n // validate secrets. Will throw and abort if invalid\n validateConfigSecrets(config);\n });\n\n // autodiscover repositories (needs to come after platform initialization)\n config = await instrument('discover', () =>\n autodiscoverRepositories(config),\n );\n\n if (is.nonEmptyString(config.writeDiscoveredRepos)) {\n const content = JSON.stringify(config.repositories);\n await fs.writeFile(config.writeDiscoveredRepos, content);\n logger.info(\n `Written discovered repositories to ${config.writeDiscoveredRepos}`,\n );\n return 0;\n }\n\n // Iterate through repositories sequentially\n for (const repository of config.repositories!) {\n if (haveReachedLimits()) {\n break;\n }\n await instrument(\n 'repository',\n async () => {\n const repoConfig = await getRepositoryConfig(config, repository);\n if (repoConfig.hostRules) {\n logger.debug('Reinitializing hostRules for repo');\n hostRules.clear();\n repoConfig.hostRules.forEach((rule) => hostRules.add(rule));\n repoConfig.hostRules = [];\n }\n\n // host rules can change concurrency\n queue.clear();\n throttle.clear();\n\n await repositoryWorker.renovateRepository(repoConfig);\n setMeta({});\n },\n {\n attributes: {\n repository:\n typeof repository === 'string'\n ? repository\n : repository.repository,\n },\n },\n );\n }\n\n finalizeReport();\n await exportStats(config);\n } catch (err) /* istanbul ignore next */ {\n if (err.message.startsWith('Init: ')) {\n logger.fatal(\n { errorMessage: err.message.substring(6) },\n 'Initialization error',\n );\n } else {\n logger.fatal({ err }, 'Unknown error');\n }\n if (!config!) {\n // return early if we can't parse config options\n logger.debug(`Missing config`);\n return 2;\n }\n } finally {\n await globalFinalize(config!);\n if (logLevel() === 'info') {\n logger.info(\n `Renovate was run at log level \"${logLevel()}\". Set LOG_LEVEL=debug in environment variables to see extended debug logs.`,\n );\n }\n }\n const loggerErrors = getProblems().filter((p) => p.level >= ERROR);\n if (loggerErrors.length) {\n logger.info(\n { loggerErrors },\n 'Renovate is exiting with a non-zero code due to the following logged errors',\n );\n return 1;\n }\n return 0;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/workers/global/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { ERROR } from 'bunyan';\nimport fs from 'fs-extra';\nimport semver from 'semver';\nimport upath from 'upath';\nimport * as configParser from '../../config';\nimport { GlobalConfig } from '../../config/global';\nimport { resolveConfigPresets } from '../../config/presets';\nimport { validateConfigSecrets } from '../../config/secrets';\nimport type {\n AllConfig,\n RenovateConfig,\n RenovateRepository,\n} from '../../config/types';\nimport { CONFIG_PRESETS_INVALID } from '../../constants/error-messages';\nimport { pkg } from '../../expose.cjs';\nimport { instrument } from '../../instrumentation';\nimport { exportStats, finalizeReport } from '../../instrumentation/reporting';\nimport { getProblems, logLevel, logger, setMeta } from '../../logger';\nimport { setGlobalLogLevelRemaps } from '../../logger/remap';\nimport { getEnv } from '../../util/env';\nimport * as hostRules from '../../util/host-rules';\nimport * as queue from '../../util/http/queue';\nimport * as throttle from '../../util/http/throttle';\nimport { regexEngineStatus } from '../../util/regex';\nimport { addSecretForSanitizing } from '../../util/sanitize';\nimport * as repositoryWorker from '../repository';\nimport { autodiscoverRepositories } from './autodiscover';\nimport { parseConfigs } from './config/parse';\nimport { globalFinalize, globalInitialize } from './initialize';\nimport { isLimitReached } from './limits';\n\nexport async function getRepositoryConfig(\n globalConfig: RenovateConfig,\n repository: RenovateRepository,\n): Promise<RenovateConfig> {\n const repoConfig = configParser.mergeChildConfig(\n globalConfig,\n is.string(repository) ? { repository } : repository,\n );\n const repoParts = repoConfig.repository.split('/');\n repoParts.pop();\n repoConfig.parentOrg = repoParts.join('/');\n repoConfig.topLevelOrg = repoParts.shift();\n // TODO: types (#22198)\n const platform = GlobalConfig.get('platform')!;\n repoConfig.localDir =\n platform === 'local'\n ? process.cwd()\n : upath.join(\n repoConfig.baseDir,\n `./repos/${platform}/${repoConfig.repository}`,\n );\n await fs.ensureDir(repoConfig.localDir);\n delete repoConfig.baseDir;\n return configParser.filterConfig(repoConfig, 'repository');\n}\n\nfunction getGlobalConfig(): Promise<RenovateConfig> {\n return parseConfigs(getEnv(), process.argv);\n}\n\nfunction haveReachedLimits(): boolean {\n if (isLimitReached('Commits')) {\n logger.info('Max commits created for this run.');\n return true;\n }\n return false;\n}\n\n/* istanbul ignore next */\nfunction checkEnv(): void {\n const range = pkg.engines!.node!;\n if (process.release?.name !== 'node' || !process.versions?.node) {\n logger.warn(\n { release: process.release, versions: process.versions },\n 'Unknown node environment detected.',\n );\n } else if (!semver.satisfies(process.versions?.node, range)) {\n logger.error(\n { versions: process.versions, range },\n 'Unsupported node environment detected. Please update your node version.',\n );\n }\n}\n\nexport async function validatePresets(config: AllConfig): Promise<void> {\n logger.debug('validatePresets()');\n try {\n await resolveConfigPresets(config);\n } catch (err) /* istanbul ignore next */ {\n logger.error({ err }, CONFIG_PRESETS_INVALID);\n throw new Error(CONFIG_PRESETS_INVALID);\n }\n}\n\nexport async function start(): Promise<number> {\n // istanbul ignore next\n if (regexEngineStatus.type === 'available') {\n logger.debug('Using RE2 regex engine');\n } else if (regexEngineStatus.type === 'unavailable') {\n logger.warn(\n { err: regexEngineStatus.err },\n 'RE2 not usable, falling back to RegExp',\n );\n } else if (regexEngineStatus.type === 'ignored') {\n logger.debug('RE2 regex engine is ignored via RENOVATE_X_IGNORE_RE2');\n }\n\n let config: AllConfig;\n const env = getEnv();\n try {\n if (is.nonEmptyStringAndNotWhitespace(env.AWS_SECRET_ACCESS_KEY)) {\n addSecretForSanitizing(env.AWS_SECRET_ACCESS_KEY, 'global');\n }\n if (is.nonEmptyStringAndNotWhitespace(env.AWS_SESSION_TOKEN)) {\n addSecretForSanitizing(env.AWS_SESSION_TOKEN, 'global');\n }\n\n await instrument('config', async () => {\n // read global config from file, env and cli args\n config = await getGlobalConfig();\n\n // Set allowedHeaders and userAgent in case hostRules headers are configured in file config\n GlobalConfig.set({\n allowedHeaders: config.allowedHeaders,\n userAgent: config.userAgent,\n });\n // initialize all submodules\n config = await globalInitialize(config);\n\n // Set platform, endpoint, allowedHeaders and userAgent in case local presets are used\n GlobalConfig.set({\n allowedHeaders: config.allowedHeaders,\n platform: config.platform,\n endpoint: config.endpoint,\n userAgent: config.userAgent,\n });\n\n await validatePresets(config);\n\n setGlobalLogLevelRemaps(config.logLevelRemap);\n\n checkEnv();\n\n // validate secrets. Will throw and abort if invalid\n validateConfigSecrets(config);\n });\n\n // autodiscover repositories (needs to come after platform initialization)\n config = await instrument('discover', () =>\n autodiscoverRepositories(config),\n );\n\n if (is.nonEmptyString(config.writeDiscoveredRepos)) {\n const content = JSON.stringify(config.repositories);\n await fs.writeFile(config.writeDiscoveredRepos, content);\n logger.info(\n `Written discovered repositories to ${config.writeDiscoveredRepos}`,\n );\n return 0;\n }\n\n // Iterate through repositories sequentially\n for (const repository of config.repositories!) {\n if (haveReachedLimits()) {\n break;\n }\n await instrument(\n 'repository',\n async () => {\n const repoConfig = await getRepositoryConfig(config, repository);\n if (repoConfig.hostRules) {\n logger.debug('Reinitializing hostRules for repo');\n hostRules.clear();\n repoConfig.hostRules.forEach((rule) => hostRules.add(rule));\n repoConfig.hostRules = [];\n }\n\n // host rules can change concurrency\n queue.clear();\n throttle.clear();\n\n await repositoryWorker.renovateRepository(repoConfig);\n setMeta({});\n },\n {\n attributes: {\n repository:\n typeof repository === 'string'\n ? repository\n : repository.repository,\n },\n },\n );\n }\n\n finalizeReport();\n await exportStats(config);\n } catch (err) /* istanbul ignore next */ {\n if (err.message.startsWith('Init: ')) {\n logger.fatal(\n { errorMessage: err.message.substring(6) },\n 'Initialization error',\n );\n } else {\n logger.fatal({ err }, 'Unknown error');\n }\n if (!config!) {\n // return early if we can't parse config options\n logger.debug(`Missing config`);\n return 2;\n }\n } finally {\n await globalFinalize(config!);\n if (logLevel() === 'info') {\n logger.info(\n `Renovate was run at log level \"${logLevel()}\". Set LOG_LEVEL=debug in environment variables to see extended debug logs.`,\n );\n }\n }\n const loggerErrors = getProblems().filter((p) => p.level >= ERROR);\n if (loggerErrors.length) {\n logger.info(\n { loggerErrors },\n 'Renovate is exiting with a non-zero code due to the following logged errors',\n );\n return 1;\n }\n return 0;\n}\n"]}
@@ -45,7 +45,7 @@ async function applyPrettierFormatting(filename, content, parser, indent) {
45
45
  logger_1.logger.warn('applyPrettierFormatting - Error processing package.json file');
46
46
  }
47
47
  }
48
- if (!prettierExists) {
48
+ if (!prettierExists || !parser) {
49
49
  return content;
50
50
  }
51
51
  const options = {
@@ -1 +1 @@
1
- {"version":3,"file":"migrated-data.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/config-migration/branch/migrated-data.ts"],"names":[],"mappings":";;;AA2CA,0DAwDC;;AAnGD,kEAAkC;AAClC,0EAAyC;AACzC,0DAA0B;AAE1B,0DAA0B;AAC1B,4DAA6D;AAC7D,uDAAkD;AAClD,+CAA4C;AAC5C,2DAAwD;AACxD,0DAAuD;AACvD,4CAAoD;AACpD,8DAA4D;AAC5D,4CAAwD;AAcxD,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,aAAa;IACb,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;IAClB,mBAAmB;IACnB,gBAAgB;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,kBAAkB;CACnB,CAAC,CAAC;AAII,KAAK,UAAU,uBAAuB,CAC3C,QAAgB,EAChB,OAAe,EACf,MAAsB,EACtB,MAAe;IAEf,IAAI,CAAC;QACH,eAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,SAAG,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1C,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAClC,CAAC;QAEF,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CACtC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,eAAe,CACnC,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,kBAAkB,GAAG,MAAM,IAAA,kBAAa,EAAC,cAAc,EAAE,MAAM,CAAC,CAAC;gBACvE,cAAc;oBACZ,kBAAkB,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC;YAClE,CAAC;YAAC,MAAM,CAAC;gBACP,eAAM,CAAC,IAAI,CACT,8DAA8D,CAC/D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,OAAO,GAAY;YACvB,MAAM;YACN,QAAQ,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM;YACnD,OAAO,EAAE,MAAM,EAAE,IAAI,KAAK,KAAK;SAChC,CAAC;QAEF,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,UAAU,GAAG,MAAM,0BAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAE9D,6IAA6I;YAC7I,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;gBAC7B,OAAO,CAAC,UAAU,GAAG,YAAE,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC;oBACtD,CAAC,CAAC,UAAU,CAAC,aAAa;oBAC1B,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;YAC/B,CAAC;YAED,+DAA+D;QACjE,CAAC;QAED,OAAO,IAAA,qBAAQ,GAAE,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;YAAS,CAAC;QACT,eAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,MAAa,mBAAmB;IAC9B,YAAY;IACJ,MAAM,CAAC,IAAI,CAAsB;IAEzC,MAAM,CAAC,KAAK,CAAC,QAAQ;QACnB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAEpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,KAAK;QACV,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,uBAAuB,CAAC,EAC7B,OAAO,EACP,QAAQ,EACR,MAAM,GACO;QACb,MAAM,MAAM,GAAG,eAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAmB,CAAC;QAC1E,OAAO,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,KAAK;QACxB,IAAI,GAAG,GAAwB,IAAI,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,EAAE,cAAc,EAAE,gBAAgB,GAAG,EAAE,EAAE,GAC7C,MAAM,IAAA,4BAAoB,GAAE,CAAC;YAE/B,sBAAsB;YACtB,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,IAAA,yBAAa,EAAC,gBAAgB,CAAC,CAAC;YACvE,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,cAAc,CAAC,MAAM,CAAC;YAC7B,OAAO,cAAc,CAAC,QAAQ,CAAC;YAE/B,cAAc;YACd,MAAM,GAAG,GAAG,MAAM,mBAAQ,CAAC,UAAU,CAAC,cAAe,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAA,uBAAY,EAAC,GAAG,IAAI,EAAE,CAAC,CAAC;YACvC,8BAA8B;YAC9B,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC;YAC1C,MAAM,QAAQ,GAAG,cAAe,CAAC;YACjC,IAAI,OAAe,CAAC;YAEpB,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,OAAO,GAAG,eAAK,CAAC,SAAS,CAAC,cAAc,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YACnE,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,OAAO,IAAI,IAAI,CAAC;YAClB,CAAC;YAED,GAAG,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,eAAM,CAAC,KAAK,CACV,EAAE,GAAG,EAAE,EACP,yEAAyE,CAC1E,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAzED,kDAyEC","sourcesContent":["import is from '@sindresorhus/is';\nimport detectIndent from 'detect-indent';\nimport JSON5 from 'json5';\nimport type { BuiltInParserName, Options } from 'prettier';\nimport upath from 'upath';\nimport { migrateConfig } from '../../../../config/migration';\nimport { prettier } from '../../../../expose.cjs';\nimport { logger } from '../../../../logger';\nimport { platform } from '../../../../modules/platform';\nimport { scm } from '../../../../modules/platform/scm';\nimport { readLocalFile } from '../../../../util/fs';\nimport { EditorConfig } from '../../../../util/json-writer';\nimport { detectRepoFileConfig } from '../../init/merge';\n\nexport interface MigratedData {\n content: string;\n filename: string;\n indent: Indent;\n}\n\ninterface Indent {\n amount: number;\n indent: string;\n type?: string;\n}\n\nconst prettierConfigFilenames = new Set([\n '.prettierrc',\n '.prettierrc.json',\n '.prettierrc.yml',\n '.prettierrc.yaml',\n '.prettierrc.json5',\n '.prettierrc.js',\n '.prettierrc.cjs',\n '.prettierrc.mjs',\n 'prettier.config.js',\n 'prettier.config.cjs',\n 'prettier.config.mjs',\n '.prettierrc.toml',\n]);\n\nexport type PrettierParser = BuiltInParserName;\n\nexport async function applyPrettierFormatting(\n filename: string,\n content: string,\n parser: PrettierParser,\n indent?: Indent,\n): Promise<string> {\n try {\n logger.trace('applyPrettierFormatting - START');\n const fileList = await scm.getFileList();\n let prettierExists = fileList.some((file) =>\n prettierConfigFilenames.has(file),\n );\n\n const editorconfigExists = fileList.some(\n (file) => file === '.editorconfig',\n );\n\n if (!prettierExists) {\n try {\n const packageJsonContent = await readLocalFile('package.json', 'utf8');\n prettierExists =\n packageJsonContent && JSON.parse(packageJsonContent).prettier;\n } catch {\n logger.warn(\n 'applyPrettierFormatting - Error processing package.json file',\n );\n }\n }\n\n if (!prettierExists) {\n return content;\n }\n\n const options: Options = {\n parser,\n tabWidth: indent?.amount === 0 ? 2 : indent?.amount,\n useTabs: indent?.type === 'tab',\n };\n\n if (editorconfigExists) {\n const editorconf = await EditorConfig.getCodeFormat(filename);\n\n // https://github.com/prettier/prettier/blob/bab892242a1f9d8fcae50514b9304bf03f2e25ab/src/config/editorconfig/editorconfig-to-prettier.js#L47\n if (editorconf.maxLineLength) {\n options.printWidth = is.number(editorconf.maxLineLength)\n ? editorconf.maxLineLength\n : Number.POSITIVE_INFINITY;\n }\n\n // TODO: support editor config `indent_style` and `indent_size`\n }\n\n return prettier().format(content, options);\n } finally {\n logger.trace('applyPrettierFormatting - END');\n }\n}\n\nexport class MigratedDataFactory {\n // singleton\n private static data: MigratedData | null;\n\n static async getAsync(): Promise<MigratedData | null> {\n if (this.data) {\n return this.data;\n }\n const migrated = await this.build();\n\n if (!migrated) {\n return null;\n }\n\n this.data = migrated;\n return this.data;\n }\n\n static reset(): void {\n this.data = null;\n }\n\n static applyPrettierFormatting({\n content,\n filename,\n indent,\n }: MigratedData): Promise<string> {\n const parser = upath.extname(filename).replace('.', '') as PrettierParser;\n return applyPrettierFormatting(filename, content, parser, indent);\n }\n\n private static async build(): Promise<MigratedData | null> {\n let res: MigratedData | null = null;\n try {\n const { configFileName, configFileParsed = {} } =\n await detectRepoFileConfig();\n\n // get migrated config\n const { isMigrated, migratedConfig } = migrateConfig(configFileParsed);\n if (!isMigrated) {\n return null;\n }\n\n delete migratedConfig.errors;\n delete migratedConfig.warnings;\n\n // TODO #22198\n const raw = await platform.getRawFile(configFileName!);\n const indent = detectIndent(raw ?? '');\n // indent defaults to 2 spaces\n const indentSpace = indent.indent ?? ' ';\n const filename = configFileName!;\n let content: string;\n\n if (filename.endsWith('.json5')) {\n content = JSON5.stringify(migratedConfig, undefined, indentSpace);\n } else {\n content = JSON.stringify(migratedConfig, undefined, indentSpace);\n }\n\n if (!content.endsWith('\\n')) {\n content += '\\n';\n }\n\n res = { content, filename, indent };\n } catch (err) {\n logger.debug(\n { err },\n 'MigratedDataFactory.getAsync() Error initializing renovate MigratedData',\n );\n }\n return res;\n }\n}\n"]}
1
+ {"version":3,"file":"migrated-data.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/config-migration/branch/migrated-data.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport detectIndent from 'detect-indent';\nimport JSON5 from 'json5';\nimport type { BuiltInParserName, Options } from 'prettier';\nimport upath from 'upath';\nimport { migrateConfig } from '../../../../config/migration';\nimport { prettier } from '../../../../expose.cjs';\nimport { logger } from '../../../../logger';\nimport { platform } from '../../../../modules/platform';\nimport { scm } from '../../../../modules/platform/scm';\nimport { readLocalFile } from '../../../../util/fs';\nimport { EditorConfig } from '../../../../util/json-writer';\nimport { detectRepoFileConfig } from '../../init/merge';\n\nexport interface MigratedData {\n content: string;\n filename: string;\n indent: Indent;\n}\n\ninterface Indent {\n amount: number;\n indent: string;\n type?: string;\n}\n\nconst prettierConfigFilenames = new Set([\n '.prettierrc',\n '.prettierrc.json',\n '.prettierrc.yml',\n '.prettierrc.yaml',\n '.prettierrc.json5',\n '.prettierrc.js',\n '.prettierrc.cjs',\n '.prettierrc.mjs',\n 'prettier.config.js',\n 'prettier.config.cjs',\n 'prettier.config.mjs',\n '.prettierrc.toml',\n]);\n\nexport type PrettierParser = BuiltInParserName;\n\nexport async function applyPrettierFormatting(\n filename: string,\n content: string,\n parser: PrettierParser,\n indent?: Indent,\n): Promise<string> {\n try {\n logger.trace('applyPrettierFormatting - START');\n const fileList = await scm.getFileList();\n let prettierExists = fileList.some((file) =>\n prettierConfigFilenames.has(file),\n );\n\n const editorconfigExists = fileList.some(\n (file) => file === '.editorconfig',\n );\n\n if (!prettierExists) {\n try {\n const packageJsonContent = await readLocalFile('package.json', 'utf8');\n prettierExists =\n packageJsonContent && JSON.parse(packageJsonContent).prettier;\n } catch {\n logger.warn(\n 'applyPrettierFormatting - Error processing package.json file',\n );\n }\n }\n\n if (!prettierExists || !parser) {\n return content;\n }\n\n const options: Options = {\n parser,\n tabWidth: indent?.amount === 0 ? 2 : indent?.amount,\n useTabs: indent?.type === 'tab',\n };\n\n if (editorconfigExists) {\n const editorconf = await EditorConfig.getCodeFormat(filename);\n\n // https://github.com/prettier/prettier/blob/bab892242a1f9d8fcae50514b9304bf03f2e25ab/src/config/editorconfig/editorconfig-to-prettier.js#L47\n if (editorconf.maxLineLength) {\n options.printWidth = is.number(editorconf.maxLineLength)\n ? editorconf.maxLineLength\n : Number.POSITIVE_INFINITY;\n }\n\n // TODO: support editor config `indent_style` and `indent_size`\n }\n\n return prettier().format(content, options);\n } finally {\n logger.trace('applyPrettierFormatting - END');\n }\n}\n\nexport class MigratedDataFactory {\n // singleton\n private static data: MigratedData | null;\n\n static async getAsync(): Promise<MigratedData | null> {\n if (this.data) {\n return this.data;\n }\n const migrated = await this.build();\n\n if (!migrated) {\n return null;\n }\n\n this.data = migrated;\n return this.data;\n }\n\n static reset(): void {\n this.data = null;\n }\n\n static applyPrettierFormatting({\n content,\n filename,\n indent,\n }: MigratedData): Promise<string> {\n const parser = upath.extname(filename).replace('.', '') as PrettierParser;\n return applyPrettierFormatting(filename, content, parser, indent);\n }\n\n private static async build(): Promise<MigratedData | null> {\n let res: MigratedData | null = null;\n try {\n const { configFileName, configFileParsed = {} } =\n await detectRepoFileConfig();\n\n // get migrated config\n const { isMigrated, migratedConfig } = migrateConfig(configFileParsed);\n if (!isMigrated) {\n return null;\n }\n\n delete migratedConfig.errors;\n delete migratedConfig.warnings;\n\n // TODO #22198\n const raw = await platform.getRawFile(configFileName!);\n const indent = detectIndent(raw ?? '');\n // indent defaults to 2 spaces\n const indentSpace = indent.indent ?? ' ';\n const filename = configFileName!;\n let content: string;\n\n if (filename.endsWith('.json5')) {\n content = JSON5.stringify(migratedConfig, undefined, indentSpace);\n } else {\n content = JSON.stringify(migratedConfig, undefined, indentSpace);\n }\n\n if (!content.endsWith('\\n')) {\n content += '\\n';\n }\n\n res = { content, filename, indent };\n } catch (err) {\n logger.debug(\n { err },\n 'MigratedDataFactory.getAsync() Error initializing renovate MigratedData',\n );\n }\n return res;\n }\n}\n"]}
@@ -4,4 +4,5 @@ import type { BranchConfig, SelectAllConfig } from '../types';
4
4
  import type { ConfigMigrationResult } from './config-migration';
5
5
  export declare function readDashboardBody(config: SelectAllConfig): Promise<void>;
6
6
  export declare function ensureDependencyDashboard(config: SelectAllConfig, allBranches: BranchConfig[], packageFiles: Record<string, PackageFile[]> | undefined, configMigrationRes: ConfigMigrationResult): Promise<void>;
7
+ export declare function getAbandonedPackagesMd(packageFiles: Record<string, PackageFile[]>): string;
7
8
  export declare function getDashboardMarkdownVulnerabilities(config: RenovateConfig, packageFiles: Record<string, PackageFile[]>): Promise<string>;
@@ -2,12 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.readDashboardBody = readDashboardBody;
4
4
  exports.ensureDependencyDashboard = ensureDependencyDashboard;
5
+ exports.getAbandonedPackagesMd = getAbandonedPackagesMd;
5
6
  exports.getDashboardMarkdownVulnerabilities = getDashboardMarkdownVulnerabilities;
6
7
  const tslib_1 = require("tslib");
7
8
  const is_1 = tslib_1.__importDefault(require("@sindresorhus/is"));
9
+ const luxon_1 = require("luxon");
8
10
  const global_1 = require("../../config/global");
9
11
  const logger_1 = require("../../logger");
10
12
  const platform_1 = require("../../modules/platform");
13
+ const array_1 = require("../../util/array");
11
14
  const regex_1 = require("../../util/regex");
12
15
  const string_1 = require("../../util/string");
13
16
  const template = tslib_1.__importStar(require("../../util/template"));
@@ -245,6 +248,9 @@ async function ensureDependencyDashboard(config, allBranches, packageFiles = {},
245
248
  }
246
249
  issueBody += '\n';
247
250
  }
251
+ if (config.dependencyDashboardReportAbandonment) {
252
+ issueBody += getAbandonedPackagesMd(packageFiles);
253
+ }
248
254
  const pendingApprovals = branches.filter((branch) => branch.result === 'needs-approval');
249
255
  if (pendingApprovals.length) {
250
256
  issueBody += '## Pending Approval\n\n';
@@ -434,6 +440,47 @@ async function ensureDependencyDashboard(config, allBranches, packageFiles = {},
434
440
  });
435
441
  }
436
442
  }
443
+ function getAbandonedPackagesMd(packageFiles) {
444
+ const abandonedPackages = {};
445
+ let abandonedCount = 0;
446
+ for (const [manager, managerPackageFiles] of Object.entries(packageFiles)) {
447
+ for (const packageFile of managerPackageFiles) {
448
+ for (const dep of (0, array_1.coerceArray)(packageFile.deps)) {
449
+ if (dep.depName && dep.isAbandoned) {
450
+ abandonedCount++;
451
+ abandonedPackages[manager] = abandonedPackages[manager] || {};
452
+ abandonedPackages[manager][dep.depName] = dep.mostRecentTimestamp;
453
+ }
454
+ }
455
+ }
456
+ }
457
+ if (abandonedCount === 0) {
458
+ return '';
459
+ }
460
+ let abandonedMd = '> ℹ **Note**\n> \n';
461
+ abandonedMd +=
462
+ 'These dependencies have not received updates for an extended period and may be unmaintained:\n\n';
463
+ abandonedMd += '<details>\n';
464
+ abandonedMd += `<summary>View abandoned dependencies (${abandonedCount})</summary>\n\n`;
465
+ abandonedMd += '| Datasource | Name | Last Updated |\n';
466
+ abandonedMd += '|------------|------|-------------|\n';
467
+ for (const manager of Object.keys(abandonedPackages).sort()) {
468
+ const deps = abandonedPackages[manager];
469
+ for (const depName of Object.keys(deps).sort()) {
470
+ const mostRecentTimestamp = deps[depName];
471
+ const formattedDate = mostRecentTimestamp
472
+ ? luxon_1.DateTime.fromISO(mostRecentTimestamp).toFormat('yyyy-MM-dd')
473
+ : 'unknown';
474
+ abandonedMd += `| ${manager} | \`${depName}\` | \`${formattedDate}\` |\n`;
475
+ }
476
+ }
477
+ abandonedMd += '\n</details>\n\n';
478
+ abandonedMd +=
479
+ 'Packages are marked as abandoned when they exceed the [`abandonmentThreshold`](https://docs.renovatebot.com/configuration-options/#abandonmentthreshold) since their last release.\n';
480
+ abandonedMd +=
481
+ 'Unlike deprecated packages with official notices, abandonment is detected by release inactivity.\n\n';
482
+ return abandonedMd + '\n';
483
+ }
437
484
  function getFooter(config) {
438
485
  let footer = '';
439
486
  if (config.dependencyDashboardFooter?.length) {