renovate 44.61.0 → 44.61.2

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 (243) hide show
  1. package/dist/config/migration.js +1 -1
  2. package/dist/config/migration.js.map +1 -1
  3. package/dist/config/migrations/custom/schedule-migration.js +8 -8
  4. package/dist/config/migrations/custom/schedule-migration.js.map +1 -1
  5. package/dist/config/options/env.js +1 -1
  6. package/dist/config/options/env.js.map +1 -1
  7. package/dist/config/parse.js +1 -1
  8. package/dist/config/parse.js.map +1 -1
  9. package/dist/config/presets/parse.js +1 -1
  10. package/dist/config/presets/parse.js.map +1 -1
  11. package/dist/config/validation.js +1 -1
  12. package/dist/config/validation.js.map +1 -1
  13. package/dist/logger/utils.js +2 -2
  14. package/dist/logger/utils.js.map +1 -1
  15. package/dist/modules/datasource/deno/index.js +1 -1
  16. package/dist/modules/datasource/deno/index.js.map +1 -1
  17. package/dist/modules/datasource/docker/ecr.js +1 -1
  18. package/dist/modules/datasource/docker/ecr.js.map +1 -1
  19. package/dist/modules/datasource/docker/google.js +1 -1
  20. package/dist/modules/datasource/docker/google.js.map +1 -1
  21. package/dist/modules/datasource/go/base.js +1 -1
  22. package/dist/modules/datasource/go/base.js.map +1 -1
  23. package/dist/modules/datasource/go/goproxy-parser.js +1 -1
  24. package/dist/modules/datasource/go/goproxy-parser.js.map +1 -1
  25. package/dist/modules/datasource/go/releases-goproxy.js +1 -1
  26. package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
  27. package/dist/modules/datasource/gradle-version/index.js +1 -1
  28. package/dist/modules/datasource/gradle-version/index.js.map +1 -1
  29. package/dist/modules/datasource/helm/schema.js +2 -2
  30. package/dist/modules/datasource/helm/schema.js.map +1 -1
  31. package/dist/modules/datasource/hexpm-bob/index.js +1 -1
  32. package/dist/modules/datasource/hexpm-bob/index.js.map +1 -1
  33. package/dist/modules/datasource/npm/get.js +1 -1
  34. package/dist/modules/datasource/npm/get.js.map +1 -1
  35. package/dist/modules/datasource/npm/npmrc.js +1 -1
  36. package/dist/modules/datasource/npm/npmrc.js.map +1 -1
  37. package/dist/modules/datasource/pypi/common.js +2 -2
  38. package/dist/modules/datasource/pypi/common.js.map +1 -1
  39. package/dist/modules/datasource/pypi/index.js +1 -1
  40. package/dist/modules/datasource/pypi/index.js.map +1 -1
  41. package/dist/modules/manager/ansible/extract.js +2 -2
  42. package/dist/modules/manager/ansible/extract.js.map +1 -1
  43. package/dist/modules/manager/ansible-galaxy/collections.js +2 -2
  44. package/dist/modules/manager/ansible-galaxy/collections.js.map +1 -1
  45. package/dist/modules/manager/ansible-galaxy/roles.js +2 -2
  46. package/dist/modules/manager/ansible-galaxy/roles.js.map +1 -1
  47. package/dist/modules/manager/ansible-galaxy/util.js +4 -4
  48. package/dist/modules/manager/ansible-galaxy/util.js.map +1 -1
  49. package/dist/modules/manager/ant/properties.js +9 -9
  50. package/dist/modules/manager/ant/properties.js.map +1 -1
  51. package/dist/modules/manager/asdf/extract.js +1 -1
  52. package/dist/modules/manager/asdf/extract.js.map +1 -1
  53. package/dist/modules/manager/asdf/upgradeable-tooling.js +1 -1
  54. package/dist/modules/manager/asdf/upgradeable-tooling.js.map +1 -1
  55. package/dist/modules/manager/batect-wrapper/extract.js +2 -2
  56. package/dist/modules/manager/batect-wrapper/extract.js.map +1 -1
  57. package/dist/modules/manager/bazel/rules/go.js +1 -1
  58. package/dist/modules/manager/bazel/rules/go.js.map +1 -1
  59. package/dist/modules/manager/buildkite/extract.js +1 -1
  60. package/dist/modules/manager/buildkite/extract.js.map +1 -1
  61. package/dist/modules/manager/buildpacks/extract.js +1 -1
  62. package/dist/modules/manager/buildpacks/extract.js.map +1 -1
  63. package/dist/modules/manager/bundler/common.js +7 -7
  64. package/dist/modules/manager/bundler/common.js.map +1 -1
  65. package/dist/modules/manager/bundler/extract.js +4 -4
  66. package/dist/modules/manager/bundler/extract.js.map +1 -1
  67. package/dist/modules/manager/deno/utils.js +1 -1
  68. package/dist/modules/manager/deno/utils.js.map +1 -1
  69. package/dist/modules/manager/dockerfile/extract.js +11 -4
  70. package/dist/modules/manager/dockerfile/extract.js.map +1 -1
  71. package/dist/modules/manager/fingerprint.generated.js +4 -4
  72. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  73. package/dist/modules/manager/flux/extract.js +2 -1
  74. package/dist/modules/manager/flux/extract.js.map +1 -1
  75. package/dist/modules/manager/git-submodules/extract.js +1 -1
  76. package/dist/modules/manager/git-submodules/extract.js.map +1 -1
  77. package/dist/modules/manager/github-actions/common.js +3 -3
  78. package/dist/modules/manager/github-actions/common.js.map +1 -1
  79. package/dist/modules/manager/github-actions/parse.js +1 -1
  80. package/dist/modules/manager/github-actions/parse.js.map +1 -1
  81. package/dist/modules/manager/gomod/artifacts.js +4 -4
  82. package/dist/modules/manager/gomod/artifacts.js.map +1 -1
  83. package/dist/modules/manager/gomod/line-parser.js +1 -1
  84. package/dist/modules/manager/gomod/line-parser.js.map +1 -1
  85. package/dist/modules/manager/gomod/update.js +1 -1
  86. package/dist/modules/manager/gomod/update.js.map +1 -1
  87. package/dist/modules/manager/gradle/parser/handlers.js +1 -1
  88. package/dist/modules/manager/gradle/parser/handlers.js.map +1 -1
  89. package/dist/modules/manager/helmv3/utils.js +1 -1
  90. package/dist/modules/manager/helmv3/utils.js.map +1 -1
  91. package/dist/modules/manager/html/extract.js +2 -2
  92. package/dist/modules/manager/html/extract.js.map +1 -1
  93. package/dist/modules/manager/kustomize/extract.js +3 -3
  94. package/dist/modules/manager/kustomize/extract.js.map +1 -1
  95. package/dist/modules/manager/leiningen/extract.js +1 -1
  96. package/dist/modules/manager/leiningen/extract.js.map +1 -1
  97. package/dist/modules/manager/maven-wrapper/artifacts.js +6 -6
  98. package/dist/modules/manager/maven-wrapper/artifacts.js.map +1 -1
  99. package/dist/modules/manager/meteor/extract.js +2 -2
  100. package/dist/modules/manager/meteor/extract.js.map +1 -1
  101. package/dist/modules/manager/mise/upgradeable-tooling.js +2 -2
  102. package/dist/modules/manager/mise/upgradeable-tooling.js.map +1 -1
  103. package/dist/modules/manager/mix/extract.js +3 -3
  104. package/dist/modules/manager/mix/extract.js.map +1 -1
  105. package/dist/modules/manager/npm/extract/common/dependency.js +4 -4
  106. package/dist/modules/manager/npm/extract/common/dependency.js.map +1 -1
  107. package/dist/modules/manager/npm/extract/yarnrc.js +1 -1
  108. package/dist/modules/manager/npm/extract/yarnrc.js.map +1 -1
  109. package/dist/modules/manager/npm/npmrc.js +1 -1
  110. package/dist/modules/manager/npm/npmrc.js.map +1 -1
  111. package/dist/modules/manager/npm/post-update/yarn.js +1 -1
  112. package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
  113. package/dist/modules/manager/npm/update/locked-dependency/package-lock/dep-constraints.js +1 -1
  114. package/dist/modules/manager/npm/update/locked-dependency/package-lock/dep-constraints.js.map +1 -1
  115. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/replace.js +1 -1
  116. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/replace.js.map +1 -1
  117. package/dist/modules/manager/nuget/extract.js +1 -1
  118. package/dist/modules/manager/nuget/extract.js.map +1 -1
  119. package/dist/modules/manager/pep621/utils.js +1 -1
  120. package/dist/modules/manager/pep621/utils.js.map +1 -1
  121. package/dist/modules/manager/pep723/utils.js +1 -1
  122. package/dist/modules/manager/pep723/utils.js.map +1 -1
  123. package/dist/modules/manager/pip-compile/common.js +2 -2
  124. package/dist/modules/manager/pip-compile/common.js.map +1 -1
  125. package/dist/modules/manager/pip_requirements/common.js +1 -1
  126. package/dist/modules/manager/pip_requirements/common.js.map +1 -1
  127. package/dist/modules/manager/pip_requirements/extract.js +1 -1
  128. package/dist/modules/manager/pip_requirements/extract.js.map +1 -1
  129. package/dist/modules/manager/poetry/artifacts.js +4 -4
  130. package/dist/modules/manager/poetry/artifacts.js.map +1 -1
  131. package/dist/modules/manager/puppet/puppetfile-parser.js +5 -5
  132. package/dist/modules/manager/puppet/puppetfile-parser.js.map +1 -1
  133. package/dist/modules/manager/sbt/update.js +1 -1
  134. package/dist/modules/manager/sbt/update.js.map +1 -1
  135. package/dist/modules/manager/sbt/util.js +2 -2
  136. package/dist/modules/manager/sbt/util.js.map +1 -1
  137. package/dist/modules/manager/setup-cfg/extract.js +2 -2
  138. package/dist/modules/manager/setup-cfg/extract.js.map +1 -1
  139. package/dist/modules/manager/swift/artifacts.js +4 -4
  140. package/dist/modules/manager/swift/artifacts.js.map +1 -1
  141. package/dist/modules/manager/swift/extract.js +1 -1
  142. package/dist/modules/manager/swift/extract.js.map +1 -1
  143. package/dist/modules/manager/tekton/extract.js +1 -1
  144. package/dist/modules/manager/tekton/extract.js.map +1 -1
  145. package/dist/modules/manager/terraform/extractors/others/modules.js +5 -5
  146. package/dist/modules/manager/terraform/extractors/others/modules.js.map +1 -1
  147. package/dist/modules/manager/terraform/util.js +1 -1
  148. package/dist/modules/manager/terraform/util.js.map +1 -1
  149. package/dist/modules/manager/terragrunt/modules.js +3 -3
  150. package/dist/modules/manager/terragrunt/modules.js.map +1 -1
  151. package/dist/modules/platform/azure/azure-got-wrapper.js +15 -5
  152. package/dist/modules/platform/azure/azure-got-wrapper.js.map +1 -1
  153. package/dist/modules/platform/azure/index.js +28 -8
  154. package/dist/modules/platform/azure/index.js.map +1 -1
  155. package/dist/modules/platform/azure/types.js.map +1 -1
  156. package/dist/modules/platform/bitbucket/index.js +4 -4
  157. package/dist/modules/platform/bitbucket/index.js.map +1 -1
  158. package/dist/modules/platform/bitbucket-server/index.js +1 -1
  159. package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
  160. package/dist/modules/platform/gerrit/index.js +1 -1
  161. package/dist/modules/platform/gerrit/index.js.map +1 -1
  162. package/dist/modules/platform/gerrit/utils.js +3 -3
  163. package/dist/modules/platform/gerrit/utils.js.map +1 -1
  164. package/dist/modules/versioning/apk/index.js +3 -3
  165. package/dist/modules/versioning/apk/index.js.map +1 -1
  166. package/dist/modules/versioning/composer/index.js +11 -11
  167. package/dist/modules/versioning/composer/index.js.map +1 -1
  168. package/dist/modules/versioning/conan/range.js +1 -1
  169. package/dist/modules/versioning/conan/range.js.map +1 -1
  170. package/dist/modules/versioning/conda/index.js +1 -1
  171. package/dist/modules/versioning/conda/index.js.map +1 -1
  172. package/dist/modules/versioning/devbox/index.js +2 -2
  173. package/dist/modules/versioning/devbox/index.js.map +1 -1
  174. package/dist/modules/versioning/distro.js +1 -1
  175. package/dist/modules/versioning/distro.js.map +1 -1
  176. package/dist/modules/versioning/github-actions/index.js +2 -2
  177. package/dist/modules/versioning/github-actions/index.js.map +1 -1
  178. package/dist/modules/versioning/go-mod-directive/index.js +1 -1
  179. package/dist/modules/versioning/go-mod-directive/index.js.map +1 -1
  180. package/dist/modules/versioning/hashicorp/convertor.js +5 -5
  181. package/dist/modules/versioning/hashicorp/convertor.js.map +1 -1
  182. package/dist/modules/versioning/hex/index.js +4 -4
  183. package/dist/modules/versioning/hex/index.js.map +1 -1
  184. package/dist/modules/versioning/lambda-node/schedule.js +2 -2
  185. package/dist/modules/versioning/lambda-node/schedule.js.map +1 -1
  186. package/dist/modules/versioning/loose/index.js +2 -2
  187. package/dist/modules/versioning/loose/index.js.map +1 -1
  188. package/dist/modules/versioning/pep440/range.js +1 -1
  189. package/dist/modules/versioning/pep440/range.js.map +1 -1
  190. package/dist/modules/versioning/perl/index.js +4 -4
  191. package/dist/modules/versioning/perl/index.js.map +1 -1
  192. package/dist/modules/versioning/poetry/patterns.js +1 -1
  193. package/dist/modules/versioning/poetry/patterns.js.map +1 -1
  194. package/dist/modules/versioning/poetry/transform.js +3 -3
  195. package/dist/modules/versioning/poetry/transform.js.map +1 -1
  196. package/dist/modules/versioning/redhat/index.js +1 -1
  197. package/dist/modules/versioning/redhat/index.js.map +1 -1
  198. package/dist/modules/versioning/rpm/index.js +1 -1
  199. package/dist/modules/versioning/rpm/index.js.map +1 -1
  200. package/dist/modules/versioning/ruby/index.js +2 -2
  201. package/dist/modules/versioning/ruby/index.js.map +1 -1
  202. package/dist/modules/versioning/semver/common.js +1 -1
  203. package/dist/modules/versioning/semver/common.js.map +1 -1
  204. package/dist/modules/versioning/swift/range.js +13 -13
  205. package/dist/modules/versioning/swift/range.js.map +1 -1
  206. package/dist/modules/versioning/ubuntu/index.js +1 -1
  207. package/dist/modules/versioning/ubuntu/index.js.map +1 -1
  208. package/dist/modules/versioning/unity3d-packages/index.js +2 -2
  209. package/dist/modules/versioning/unity3d-packages/index.js.map +1 -1
  210. package/dist/util/cache/package/impl/redis.js +1 -1
  211. package/dist/util/cache/package/impl/redis.js.map +1 -1
  212. package/dist/util/exec/common.js +3 -3
  213. package/dist/util/exec/common.js.map +1 -1
  214. package/dist/util/git/author.js +1 -1
  215. package/dist/util/git/author.js.map +1 -1
  216. package/dist/util/git/semantic.js +1 -1
  217. package/dist/util/git/semantic.js.map +1 -1
  218. package/dist/util/http/www-authenticate.js +4 -4
  219. package/dist/util/http/www-authenticate.js.map +1 -1
  220. package/dist/util/ignore.js +1 -1
  221. package/dist/util/ignore.js.map +1 -1
  222. package/dist/util/markdown.js +8 -8
  223. package/dist/util/markdown.js.map +1 -1
  224. package/dist/util/pretty-time.js +3 -3
  225. package/dist/util/pretty-time.js.map +1 -1
  226. package/dist/util/regex.js +1 -1
  227. package/dist/util/regex.js.map +1 -1
  228. package/dist/workers/global/config/parse/cli.js +1 -1
  229. package/dist/workers/global/config/parse/cli.js.map +1 -1
  230. package/dist/workers/repository/model/semantic-commit-message.js +1 -1
  231. package/dist/workers/repository/model/semantic-commit-message.js.map +1 -1
  232. package/dist/workers/repository/onboarding/pr/pr-list.js +2 -2
  233. package/dist/workers/repository/onboarding/pr/pr-list.js.map +1 -1
  234. package/dist/workers/repository/update/pr/changelog/release-notes.js +3 -3
  235. package/dist/workers/repository/update/pr/changelog/release-notes.js.map +1 -1
  236. package/dist/workers/repository/updates/branch-name.js +1 -1
  237. package/dist/workers/repository/updates/branch-name.js.map +1 -1
  238. package/dist/workers/repository/updates/flatten.js +1 -1
  239. package/dist/workers/repository/updates/flatten.js.map +1 -1
  240. package/dist/workers/repository/updates/generate.js +1 -1
  241. package/dist/workers/repository/updates/generate.js.map +1 -1
  242. package/package.json +2 -2
  243. package/renovate-schema.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/leiningen/extract.ts"],"sourcesContent":["import { coerceArray } from '../../../util/array.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { ClojureDatasource } from '../../datasource/clojure/index.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport type { ExtractContext, ExtractedVariables } from './types.ts';\n\nexport function trimAtKey(str: string, kwName: string): string | null {\n // matching the whitespace instead of a lookahead is equivalent here,\n // as only the match offset is used\n const regex = regEx(`:${kwName}\\\\s`);\n const keyOffset = str.search(regex);\n if (keyOffset < 0) {\n return null;\n }\n const withSpaces = str.slice(keyOffset + kwName.length + 1);\n const valueOffset = withSpaces.search(regEx(/[^\\s]/));\n if (valueOffset < 0) {\n return null;\n }\n return withSpaces.slice(valueOffset);\n}\n\nexport function expandDepName(name: string): string {\n return name.includes('/') ? name.replace('/', ':') : `${name}:${name}`;\n}\n\nexport function extractFromVectors(\n str: string,\n ctx: ExtractContext = {},\n vars: ExtractedVariables = {},\n dimensions: 1 | 2 = 2,\n): PackageDependency[] {\n if (!str.startsWith('[')) {\n return [];\n }\n let balance = 0;\n const result: PackageDependency[] = [];\n let idx = 0;\n let vecPos = 0;\n let artifactId = '';\n let version = '';\n // Are we currently parsing a comment? If so, at what depth?\n let commentLevel: number | null = null;\n\n function isSpace(ch: string | null): boolean {\n return !!ch && regEx(/[\\s,]/).test(ch);\n }\n\n function cleanStrLiteral(s: string): string {\n return s.replace(regEx(/^\"/), '').replace(regEx(/\"$/), '');\n }\n\n function yieldDep(): void {\n if (!commentLevel && artifactId && version) {\n const depName = expandDepName(cleanStrLiteral(artifactId));\n if (version.startsWith('~')) {\n const varName = version.replace(regEx(/^~\\s*/), '');\n const currentValue = vars[varName];\n if (currentValue) {\n result.push({\n ...ctx,\n datasource: ClojureDatasource.id,\n depName,\n currentValue,\n sharedVariableName: varName,\n });\n }\n } else {\n result.push({\n ...ctx,\n datasource: ClojureDatasource.id,\n depName,\n currentValue: cleanStrLiteral(version),\n });\n }\n }\n artifactId = '';\n version = '';\n }\n\n let prevChar: string | null = null;\n while (idx < str.length) {\n const char = str.charAt(idx);\n\n if (str.substring(idx).startsWith('#_[')) {\n commentLevel = balance;\n }\n\n if (char === '[') {\n balance += 1;\n if (balance === dimensions) {\n vecPos = 0;\n }\n } else if (char === ']') {\n balance -= 1;\n\n if (commentLevel === balance) {\n artifactId = '';\n version = '';\n commentLevel = null;\n }\n\n if (balance === dimensions - 1) {\n yieldDep();\n }\n\n if (balance === 0) {\n break;\n }\n } else if (balance === dimensions) {\n if (isSpace(char)) {\n if (!isSpace(prevChar)) {\n vecPos += 1;\n }\n } else if (vecPos === 0) {\n artifactId += char;\n } else if (vecPos === 1) {\n version += char;\n }\n }\n prevChar = char;\n idx += 1;\n }\n return result;\n}\n\nfunction extractLeinRepos(content: string): string[] {\n const result: string[] = [];\n\n const repoContent = trimAtKey(\n content.replace(regEx(/;;.*([\\r\\n])/g), '$1'), // get rid of comments\n 'repositories',\n );\n\n if (repoContent) {\n let balance = 0;\n let endIdx = 0;\n for (let idx = 0; idx < repoContent.length; idx += 1) {\n const char = repoContent.charAt(idx);\n if (char === '[') {\n balance += 1;\n } else if (char === ']') {\n balance -= 1;\n if (balance <= 0) {\n endIdx = idx;\n break;\n }\n }\n }\n const repoSectionContent = repoContent.slice(0, endIdx);\n const matches = coerceArray(\n repoSectionContent.match(regEx(/\"https?:\\/\\/[^\"]*\"/g)),\n );\n const urls = matches.map((x) =>\n x.replace(regEx(/^\"/), '').replace(regEx(/\"$/), ''),\n );\n urls.forEach((url) => result.push(url));\n }\n\n return result;\n}\n\nconst defRegex = regEx(\n /^[\\s,]*\\([\\s,]*def[\\s,]+(?<varName>[-+*=<>.!?#$%&_|a-zA-Z][-+*=<>.!?#$%&_|a-zA-Z0-9']+)[\\s,]*\"(?<stringValue>[^\"]*)\"[\\s,]*\\)[\\s,]*$/,\n);\n\nexport function extractVariables(content: string): ExtractedVariables {\n const result: ExtractedVariables = {};\n const lines = content.split(newlineRegex);\n for (const line of lines) {\n const match = defRegex.exec(line);\n if (match?.groups) {\n const { varName: key, stringValue: val } = match.groups;\n result[key] = val;\n }\n }\n return result;\n}\n\ninterface CollectDepsOptions {\n nested: boolean;\n depType?: string;\n}\n\nfunction collectDeps(\n content: string,\n key: string,\n registryUrls: string[],\n vars: ExtractedVariables,\n options: CollectDepsOptions = {\n nested: true,\n },\n): PackageDependency[] {\n const ctx = {\n depType: options.depType ?? key,\n registryUrls,\n };\n // A vector like [[\"dep-1\" \"1.0.0\"] [\"dep-2\" \"0.0.0\"]] is nested\n // A vector like [\"dep-1\" \"1.0.0\"] is not\n const dimensions = options.nested ? 2 : 1;\n let result: PackageDependency[] = [];\n let restContent = trimAtKey(content, key);\n while (restContent) {\n result = [\n ...result,\n ...extractFromVectors(restContent, ctx, vars, dimensions),\n ];\n restContent = trimAtKey(restContent, key);\n }\n return result;\n}\n\nexport function extractPackageFile(content: string): PackageFileContent {\n const registryUrls = extractLeinRepos(content);\n const vars = extractVariables(content);\n\n const deps: PackageDependency[] = [\n ...collectDeps(content, 'dependencies', registryUrls, vars),\n ...collectDeps(content, 'managed-dependencies', registryUrls, vars),\n ...collectDeps(content, 'plugins', registryUrls, vars),\n ...collectDeps(content, 'pom-plugins', registryUrls, vars),\n // 'coords' is used in lein parent, and specifies zero or one\n // dependencies. These are not wrapped in a vector in the way other\n // dependencies are. The project.clj fragment looks like\n //\n // :parent-project {... :coords [\"parent\" \"version\"] ...}\n //\n // - https://github.com/achin/lein-parent\n ...collectDeps(content, 'coords', registryUrls, vars, {\n nested: false,\n // The top-level key is 'parent-project', but we skip directly to 'coords'.\n // So fix the dep type label\n depType: 'parent-project',\n }),\n ];\n\n return { deps };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/leiningen/extract.ts"],"sourcesContent":["import { coerceArray } from '../../../util/array.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { ClojureDatasource } from '../../datasource/clojure/index.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport type { ExtractContext, ExtractedVariables } from './types.ts';\n\nexport function trimAtKey(str: string, kwName: string): string | null {\n // matching the whitespace instead of a lookahead is equivalent here,\n // as only the match offset is used\n const regex = regEx(`:${kwName}\\\\s`);\n const keyOffset = str.search(regex);\n if (keyOffset < 0) {\n return null;\n }\n const withSpaces = str.slice(keyOffset + kwName.length + 1);\n const valueOffset = withSpaces.search(regEx(/[^\\s]/));\n if (valueOffset < 0) {\n return null;\n }\n return withSpaces.slice(valueOffset);\n}\n\nexport function expandDepName(name: string): string {\n return name.includes('/') ? name.replace('/', ':') : `${name}:${name}`;\n}\n\nexport function extractFromVectors(\n str: string,\n ctx: ExtractContext = {},\n vars: ExtractedVariables = {},\n dimensions: 1 | 2 = 2,\n): PackageDependency[] {\n if (!str.startsWith('[')) {\n return [];\n }\n let balance = 0;\n const result: PackageDependency[] = [];\n let idx = 0;\n let vecPos = 0;\n let artifactId = '';\n let version = '';\n // Are we currently parsing a comment? If so, at what depth?\n let commentLevel: number | null = null;\n\n function isSpace(ch: string | null): boolean {\n return !!ch && regEx(/[\\s,]/).test(ch);\n }\n\n function cleanStrLiteral(s: string): string {\n return s.replace(regEx(/^\"/), '').replace(regEx(/\"$/), '');\n }\n\n function yieldDep(): void {\n if (!commentLevel && artifactId && version) {\n const depName = expandDepName(cleanStrLiteral(artifactId));\n if (version.startsWith('~')) {\n const varName = version.replace(regEx(/^~\\s*/), '');\n const currentValue = vars[varName];\n if (currentValue) {\n result.push({\n ...ctx,\n datasource: ClojureDatasource.id,\n depName,\n currentValue,\n sharedVariableName: varName,\n });\n }\n } else {\n result.push({\n ...ctx,\n datasource: ClojureDatasource.id,\n depName,\n currentValue: cleanStrLiteral(version),\n });\n }\n }\n artifactId = '';\n version = '';\n }\n\n let prevChar: string | null = null;\n while (idx < str.length) {\n const char = str.charAt(idx);\n\n if (str.substring(idx).startsWith('#_[')) {\n commentLevel = balance;\n }\n\n if (char === '[') {\n balance += 1;\n if (balance === dimensions) {\n vecPos = 0;\n }\n } else if (char === ']') {\n balance -= 1;\n\n if (commentLevel === balance) {\n artifactId = '';\n version = '';\n commentLevel = null;\n }\n\n if (balance === dimensions - 1) {\n yieldDep();\n }\n\n if (balance === 0) {\n break;\n }\n } else if (balance === dimensions) {\n if (isSpace(char)) {\n if (!isSpace(prevChar)) {\n vecPos += 1;\n }\n } else if (vecPos === 0) {\n artifactId += char;\n } else if (vecPos === 1) {\n version += char;\n }\n }\n prevChar = char;\n idx += 1;\n }\n return result;\n}\n\nfunction extractLeinRepos(content: string): string[] {\n const result: string[] = [];\n\n const repoContent = trimAtKey(\n content.replace(regEx(/;;.*(?<newline>[\\r\\n])/g), '$<newline>'), // get rid of comments\n 'repositories',\n );\n\n if (repoContent) {\n let balance = 0;\n let endIdx = 0;\n for (let idx = 0; idx < repoContent.length; idx += 1) {\n const char = repoContent.charAt(idx);\n if (char === '[') {\n balance += 1;\n } else if (char === ']') {\n balance -= 1;\n if (balance <= 0) {\n endIdx = idx;\n break;\n }\n }\n }\n const repoSectionContent = repoContent.slice(0, endIdx);\n const matches = coerceArray(\n repoSectionContent.match(regEx(/\"https?:\\/\\/[^\"]*\"/g)),\n );\n const urls = matches.map((x) =>\n x.replace(regEx(/^\"/), '').replace(regEx(/\"$/), ''),\n );\n urls.forEach((url) => result.push(url));\n }\n\n return result;\n}\n\nconst defRegex = regEx(\n /^[\\s,]*\\([\\s,]*def[\\s,]+(?<varName>[-+*=<>.!?#$%&_|a-zA-Z][-+*=<>.!?#$%&_|a-zA-Z0-9']+)[\\s,]*\"(?<stringValue>[^\"]*)\"[\\s,]*\\)[\\s,]*$/,\n);\n\nexport function extractVariables(content: string): ExtractedVariables {\n const result: ExtractedVariables = {};\n const lines = content.split(newlineRegex);\n for (const line of lines) {\n const match = defRegex.exec(line);\n if (match?.groups) {\n const { varName: key, stringValue: val } = match.groups;\n result[key] = val;\n }\n }\n return result;\n}\n\ninterface CollectDepsOptions {\n nested: boolean;\n depType?: string;\n}\n\nfunction collectDeps(\n content: string,\n key: string,\n registryUrls: string[],\n vars: ExtractedVariables,\n options: CollectDepsOptions = {\n nested: true,\n },\n): PackageDependency[] {\n const ctx = {\n depType: options.depType ?? key,\n registryUrls,\n };\n // A vector like [[\"dep-1\" \"1.0.0\"] [\"dep-2\" \"0.0.0\"]] is nested\n // A vector like [\"dep-1\" \"1.0.0\"] is not\n const dimensions = options.nested ? 2 : 1;\n let result: PackageDependency[] = [];\n let restContent = trimAtKey(content, key);\n while (restContent) {\n result = [\n ...result,\n ...extractFromVectors(restContent, ctx, vars, dimensions),\n ];\n restContent = trimAtKey(restContent, key);\n }\n return result;\n}\n\nexport function extractPackageFile(content: string): PackageFileContent {\n const registryUrls = extractLeinRepos(content);\n const vars = extractVariables(content);\n\n const deps: PackageDependency[] = [\n ...collectDeps(content, 'dependencies', registryUrls, vars),\n ...collectDeps(content, 'managed-dependencies', registryUrls, vars),\n ...collectDeps(content, 'plugins', registryUrls, vars),\n ...collectDeps(content, 'pom-plugins', registryUrls, vars),\n // 'coords' is used in lein parent, and specifies zero or one\n // dependencies. These are not wrapped in a vector in the way other\n // dependencies are. The project.clj fragment looks like\n //\n // :parent-project {... :coords [\"parent\" \"version\"] ...}\n //\n // - https://github.com/achin/lein-parent\n ...collectDeps(content, 'coords', registryUrls, vars, {\n nested: false,\n // The top-level key is 'parent-project', but we skip directly to 'coords'.\n // So fix the dep type label\n depType: 'parent-project',\n }),\n ];\n\n return { deps };\n}\n"],"mappings":"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"}
@@ -52,13 +52,13 @@ async function updateChecksums(content, updatedDeps, addDistributionChecksum, ad
52
52
  if (distUrl) try {
53
53
  const checksum = await getChecksumFromUrl(distUrl);
54
54
  if (existingChecksum) updatedContent = updatedContent.replace(regEx(/distributionSha256Sum=.*/), `distributionSha256Sum=${checksum}`);
55
- else updatedContent = addChecksumAfterLine(updatedContent, regEx(/^(distributionUrl\s*=\s*.+)$/m), "distributionSha256Sum", checksum);
55
+ else updatedContent = addChecksumAfterLine(updatedContent, regEx(/^(?:distributionUrl\s*=\s*.+)$/m), "distributionSha256Sum", checksum);
56
56
  } catch (err) {
57
57
  logger.warn({
58
58
  err,
59
59
  url: distUrl
60
60
  }, "Failed to fetch distribution checksum");
61
- if (!existingChecksum && fallbackChecksum) updatedContent = addChecksumAfterLine(updatedContent, regEx(/^(distributionUrl\s*=\s*.+)$/m), "distributionSha256Sum", fallbackChecksum);
61
+ if (!existingChecksum && fallbackChecksum) updatedContent = addChecksumAfterLine(updatedContent, regEx(/^(?:distributionUrl\s*=\s*.+)$/m), "distributionSha256Sum", fallbackChecksum);
62
62
  }
63
63
  }
64
64
  if (addWrapperChecksum) {
@@ -72,13 +72,13 @@ async function updateChecksums(content, updatedDeps, addDistributionChecksum, ad
72
72
  if (wrapperUrl) try {
73
73
  const checksum = await getChecksumFromUrl(wrapperUrl);
74
74
  if (existingChecksum) updatedContent = updatedContent.replace(regEx(/wrapperSha256Sum=.*/), `wrapperSha256Sum=${checksum}`);
75
- else updatedContent = addChecksumAfterLine(updatedContent, regEx(/^(wrapperUrl\s*=\s*.+|wrapperVersion\s*=\s*.+)$/m), "wrapperSha256Sum", checksum);
75
+ else updatedContent = addChecksumAfterLine(updatedContent, regEx(/^(?:wrapperUrl\s*=\s*.+|wrapperVersion\s*=\s*.+)$/m), "wrapperSha256Sum", checksum);
76
76
  } catch (err) {
77
77
  logger.warn({
78
78
  err,
79
79
  url: wrapperUrl
80
80
  }, "Failed to fetch wrapper checksum");
81
- if (!existingChecksum && fallbackChecksum) updatedContent = addChecksumAfterLine(updatedContent, regEx(/^(wrapperUrl\s*=\s*.+|wrapperVersion\s*=\s*.+)$/m), "wrapperSha256Sum", fallbackChecksum);
81
+ if (!existingChecksum && fallbackChecksum) updatedContent = addChecksumAfterLine(updatedContent, regEx(/^(?:wrapperUrl\s*=\s*.+|wrapperVersion\s*=\s*.+)$/m), "wrapperSha256Sum", fallbackChecksum);
82
82
  }
83
83
  }
84
84
  return updatedContent;
@@ -195,9 +195,9 @@ function getExtraEnvOptions(deps) {
195
195
  function getCustomMavenWrapperRepoUrl(deps) {
196
196
  const replaceString = deps.find((dep) => dep.depName === "maven-wrapper")?.replaceString;
197
197
  if (!replaceString) return null;
198
- const match = regEx(/^(.*?)\/org\/apache\/maven\/wrapper\//).exec(replaceString);
198
+ const match = regEx(/^(?<repoUrl>.*?)\/org\/apache\/maven\/wrapper\//).exec(replaceString);
199
199
  if (!match) return null;
200
- return match[1] === DEFAULT_MAVEN_REPO_URL ? null : match[1];
200
+ return match.groups.repoUrl === DEFAULT_MAVEN_REPO_URL ? null : match.groups.repoUrl;
201
201
  }
202
202
  async function createWrapperCommand(packageFileName, distributionType) {
203
203
  const { wrapperExecutableFileName, localProjectDir, wrapperFullyQualifiedPath } = getMavenPaths(packageFileName);
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","names":["mavenVersioning"],"sources":["../../../../lib/modules/manager/maven-wrapper/artifacts.ts"],"sourcesContent":["import type { Stats } from 'node:fs';\nimport os from 'node:os';\nimport { isTruthy } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport { exec } from '../../../util/exec/index.ts';\nimport type { ExecOptions, ExtraEnv } from '../../../util/exec/types.ts';\nimport {\n chmodLocalFile,\n deleteLocalFile,\n readLocalFile,\n statLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport { getRepoStatus } from '../../../util/git/index.ts';\nimport type { StatusResult } from '../../../util/git/types.ts';\nimport { hashStream } from '../../../util/hash.ts';\nimport { Http } from '../../../util/http/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport mavenVersioning from '../../versioning/maven/index.ts';\nimport type {\n PackageDependency,\n UpdateArtifact,\n UpdateArtifactsConfig,\n UpdateArtifactsResult,\n} from '../types.ts';\n\nconst http = new Http('maven-wrapper');\nconst DEFAULT_MAVEN_REPO_URL = 'https://repo.maven.apache.org/maven2';\n\nfunction getChecksumFromUrl(url: string): Promise<string> {\n return withCache(\n {\n namespace: 'url-sha256',\n key: url,\n ttlMinutes: 3 * 24 * 60, // 3 days\n },\n () => hashStream(http.stream(url), 'sha256'),\n );\n}\n\nfunction getDistributionUrl(content: string): string | null {\n const match = regEx(/^distributionUrl\\s*=\\s*(?<distributionUrl>.+)$/m).exec(\n content,\n );\n return (\n match?.groups?.distributionUrl?.replace(regEx(/\\\\:/g), ':').trim() ?? null\n );\n}\n\nfunction getWrapperUrl(content: string): string | null {\n const match = regEx(/^wrapperUrl\\s*=\\s*(?<wrapperUrl>.+)$/m).exec(content);\n return match?.groups?.wrapperUrl?.replace(regEx(/\\\\:/g), ':').trim() ?? null;\n}\n\nfunction constructWrapperUrl(\n version: string,\n repoUrl: string = DEFAULT_MAVEN_REPO_URL,\n): string {\n return `${repoUrl}/org/apache/maven/wrapper/maven-wrapper/${version}/maven-wrapper-${version}.jar`;\n}\n\nfunction getWrapperVersion(content: string): string | null {\n const match = regEx(/^wrapperVersion\\s*=\\s*(?<wrapperVersion>.+)$/m).exec(\n content,\n );\n return match?.groups?.wrapperVersion?.trim() ?? null;\n}\n\nfunction getDistributionType(content: string): string | null {\n const match = regEx(/^distributionType\\s*=\\s*(?<distributionType>.+)$/m).exec(\n content,\n );\n return match?.groups?.distributionType?.trim() ?? null;\n}\n\nfunction getChecksumValue(content: string, key: string): string | null {\n const match = regEx(`^${key}\\\\s*=\\\\s*(?<value>.+)$`, 'm').exec(content);\n return match?.groups?.value?.trim() ?? null;\n}\n\nfunction addChecksumAfterLine(\n content: string,\n lineRegex: RegExp,\n key: string,\n value: string,\n): string {\n return content.replace(\n regEx(lineRegex),\n (lineMatch) => `${lineMatch}\\n${key}=${value}`,\n );\n}\n\nasync function updateChecksums(\n content: string,\n updatedDeps: PackageDependency[],\n addDistributionChecksum: boolean,\n addWrapperChecksum: boolean,\n originalContent: string,\n): Promise<string> {\n let updatedContent = content;\n\n // Update or add distribution checksum\n if (addDistributionChecksum) {\n const existingChecksum = getChecksumValue(\n updatedContent,\n 'distributionSha256Sum',\n );\n const fallbackChecksum = getChecksumValue(\n originalContent,\n 'distributionSha256Sum',\n );\n const distUrl = getDistributionUrl(updatedContent);\n if (distUrl) {\n try {\n const checksum = await getChecksumFromUrl(distUrl);\n if (existingChecksum) {\n updatedContent = updatedContent.replace(\n regEx(/distributionSha256Sum=.*/),\n `distributionSha256Sum=${checksum}`,\n );\n } else {\n // Add checksum after distributionUrl\n updatedContent = addChecksumAfterLine(\n updatedContent,\n regEx(/^(distributionUrl\\s*=\\s*.+)$/m),\n 'distributionSha256Sum',\n checksum,\n );\n }\n } catch (err) {\n logger.warn(\n { err, url: distUrl },\n 'Failed to fetch distribution checksum',\n );\n if (!existingChecksum && fallbackChecksum) {\n updatedContent = addChecksumAfterLine(\n updatedContent,\n regEx(/^(distributionUrl\\s*=\\s*.+)$/m),\n 'distributionSha256Sum',\n fallbackChecksum,\n );\n }\n }\n }\n }\n\n // Update or add wrapper checksum\n if (addWrapperChecksum) {\n const existingChecksum = getChecksumValue(\n updatedContent,\n 'wrapperSha256Sum',\n );\n const fallbackChecksum = getChecksumValue(\n originalContent,\n 'wrapperSha256Sum',\n );\n let wrapperUrl = getWrapperUrl(updatedContent);\n\n // If no wrapperUrl, try to construct from wrapperVersion\n if (!wrapperUrl) {\n const wrapperVersion = getWrapperVersion(updatedContent);\n if (wrapperVersion) {\n const customRepoUrl = getCustomMavenWrapperRepoUrl(updatedDeps);\n wrapperUrl = constructWrapperUrl(\n wrapperVersion,\n customRepoUrl ?? DEFAULT_MAVEN_REPO_URL,\n );\n }\n }\n\n if (wrapperUrl) {\n try {\n const checksum = await getChecksumFromUrl(wrapperUrl);\n if (existingChecksum) {\n updatedContent = updatedContent.replace(\n regEx(/wrapperSha256Sum=.*/),\n `wrapperSha256Sum=${checksum}`,\n );\n } else {\n // Add checksum after wrapperUrl or wrapperVersion\n updatedContent = addChecksumAfterLine(\n updatedContent,\n regEx(/^(wrapperUrl\\s*=\\s*.+|wrapperVersion\\s*=\\s*.+)$/m),\n 'wrapperSha256Sum',\n checksum,\n );\n }\n } catch (err) {\n logger.warn(\n { err, url: wrapperUrl },\n 'Failed to fetch wrapper checksum',\n );\n if (!existingChecksum && fallbackChecksum) {\n updatedContent = addChecksumAfterLine(\n updatedContent,\n regEx(/^(wrapperUrl\\s*=\\s*.+|wrapperVersion\\s*=\\s*.+)$/m),\n 'wrapperSha256Sum',\n fallbackChecksum,\n );\n }\n }\n }\n }\n\n return updatedContent;\n}\n\ninterface MavenWrapperPaths {\n wrapperExecutableFileName: string;\n localProjectDir: string;\n wrapperFullyQualifiedPath: string;\n}\n\nasync function addIfUpdated(\n status: StatusResult,\n fileProjectPath: string,\n): Promise<UpdateArtifactsResult | null> {\n if (status.modified.includes(fileProjectPath)) {\n return {\n file: {\n type: 'addition',\n path: fileProjectPath,\n contents: await readLocalFile(fileProjectPath),\n },\n };\n }\n return null;\n}\n\nexport async function updateArtifacts({\n packageFileName,\n newPackageFileContent,\n updatedDeps,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n try {\n logger.debug({ updatedDeps }, 'maven-wrapper.updateArtifacts()');\n\n const hasMavenUpdate = updatedDeps.some((dep) => dep.depName === 'maven');\n const hasWrapperUpdate = updatedDeps.some(\n (dep) => dep.depName === 'maven-wrapper',\n );\n // Remember original content properties - we'll restore them after wrapper:wrapper\n const hadDistributionChecksum = newPackageFileContent.includes(\n 'distributionSha256Sum=',\n );\n const hadWrapperChecksum =\n newPackageFileContent.includes('wrapperSha256Sum=');\n const originalDistributionType = getDistributionType(newPackageFileContent);\n\n // Skip if no relevant updates\n if (!hasWrapperUpdate && !(hasMavenUpdate && hadDistributionChecksum)) {\n logger.debug(\n 'No Maven wrapper or distribution checksum updates - skipping Artifacts update',\n );\n return null;\n }\n\n // If wrapper is being updated, check if mvnw exists first\n let cmd: string | null = null;\n if (hasWrapperUpdate) {\n cmd = await createWrapperCommand(\n packageFileName,\n originalDistributionType,\n );\n\n if (!cmd) {\n logger.info('No mvnw found - skipping Artifacts update');\n return null;\n }\n }\n\n // Delete old maven-wrapper.jar if checksums exist and wrapper:wrapper will run\n // This prevents checksum validation failure when wrapper:wrapper runs\n if (hasWrapperUpdate && (hadWrapperChecksum || hadDistributionChecksum)) {\n const jarPath = packageFileName.replace(\n 'maven-wrapper.properties',\n 'maven-wrapper.jar',\n );\n if (jarPath.endsWith('maven-wrapper.jar')) {\n try {\n await deleteLocalFile(jarPath);\n logger.debug({ jarPath }, 'Deleted old maven-wrapper.jar');\n } catch {\n // File may not exist, ignore\n }\n }\n }\n\n // Strip checksum lines before running wrapper:wrapper to avoid validation failure\n // (mvnw would try to validate NEW jar against OLD checksum)\n let contentToWrite = newPackageFileContent;\n if (hasWrapperUpdate && (hadWrapperChecksum || hadDistributionChecksum)) {\n contentToWrite = contentToWrite\n .replace(regEx(/^distributionSha256Sum=.*\\n?/m), '')\n .replace(regEx(/^wrapperSha256Sum=.*\\n?/m), '');\n }\n\n // Write the properties file\n await writeLocalFile(packageFileName, contentToWrite);\n\n // Run wrapper:wrapper if the wrapper itself is being updated\n if (hasWrapperUpdate && cmd) {\n const extraEnv = getExtraEnvOptions(updatedDeps);\n await executeWrapperCommand(cmd, config, packageFileName, extraEnv);\n }\n\n // Now update checksums AFTER wrapper:wrapper has run (if it ran)\n // This ensures we compute checksums for the actual generated content\n if (hadDistributionChecksum || hadWrapperChecksum) {\n const currentContent = await readLocalFile(packageFileName, 'utf8');\n if (currentContent) {\n const contentWithChecksums = await updateChecksums(\n currentContent,\n updatedDeps,\n hadDistributionChecksum,\n hadWrapperChecksum,\n newPackageFileContent,\n );\n await writeLocalFile(packageFileName, contentWithChecksums);\n }\n }\n\n const status = await getRepoStatus();\n const artifactFileNames = [\n '.mvn/wrapper/maven-wrapper.properties',\n '.mvn/wrapper/maven-wrapper.jar',\n '.mvn/wrapper/MavenWrapperDownloader.java',\n 'mvnw',\n 'mvnw.cmd',\n ].map(\n (filename) =>\n packageFileName.replace('.mvn/wrapper/maven-wrapper.properties', '') +\n filename,\n );\n const updateArtifactsResult = (\n await getUpdatedArtifacts(status, artifactFileNames)\n ).filter(isTruthy);\n\n logger.debug(\n { files: updateArtifactsResult.map((r) => r.file?.path) },\n `Returning updated maven-wrapper files`,\n );\n return updateArtifactsResult;\n } catch (err) {\n logger.debug({ err }, 'Error setting new Maven Wrapper release value');\n return [\n {\n artifactError: {\n fileName: packageFileName,\n stderr: err.message,\n },\n },\n ];\n }\n}\n\nasync function getUpdatedArtifacts(\n status: StatusResult,\n artifactFileNames: string[],\n): Promise<UpdateArtifactsResult[]> {\n const updatedResults: UpdateArtifactsResult[] = [];\n for (const artifactFileName of artifactFileNames) {\n const updatedResult = await addIfUpdated(status, artifactFileName);\n if (updatedResult !== null) {\n updatedResults.push(updatedResult);\n }\n }\n return updatedResults;\n}\n\n/**\n * Find compatible java version for maven.\n * see https://maven.apache.org/developers/compatibility-plan.html\n * @param mavenWrapperVersion current maven version\n * @returns A Java semver range\n */\nexport function getJavaConstraint(\n mavenWrapperVersion: string | null | undefined,\n): string | null {\n const major = mavenWrapperVersion\n ? mavenVersioning.getMajor(mavenWrapperVersion)\n : null;\n\n if (major && major >= 3) {\n return '^17.0.0';\n }\n\n return '^8.0.0';\n}\n\nasync function executeWrapperCommand(\n cmd: string,\n config: UpdateArtifactsConfig,\n packageFileName: string,\n extraEnv: ExtraEnv,\n): Promise<void> {\n logger.debug(`Updating maven wrapper: \"${cmd}\"`);\n const { wrapperFullyQualifiedPath } = getMavenPaths(packageFileName);\n\n const execOptions: ExecOptions = {\n cwdFile: wrapperFullyQualifiedPath,\n docker: {},\n extraEnv,\n toolConstraints: [\n {\n toolName: 'java',\n constraint:\n config.constraints?.java ?? getJavaConstraint(config.currentValue),\n },\n ],\n };\n\n try {\n await exec(cmd, execOptions);\n } catch (err) {\n logger.error({ err }, 'Error executing maven wrapper update command.');\n throw err;\n }\n}\n\nfunction getExtraEnvOptions(deps: PackageDependency[]): ExtraEnv {\n const customMavenWrapperUrl = getCustomMavenWrapperRepoUrl(deps);\n if (customMavenWrapperUrl) {\n return { MVNW_REPOURL: customMavenWrapperUrl };\n }\n return {};\n}\n\nfunction getCustomMavenWrapperRepoUrl(\n deps: PackageDependency[],\n): string | null {\n const replaceString = deps.find(\n (dep) => dep.depName === 'maven-wrapper',\n )?.replaceString;\n\n if (!replaceString) {\n return null;\n }\n\n const match = regEx(/^(.*?)\\/org\\/apache\\/maven\\/wrapper\\//).exec(\n replaceString,\n );\n\n if (!match) {\n return null;\n }\n\n return match[1] === DEFAULT_MAVEN_REPO_URL ? null : match[1];\n}\n\nasync function createWrapperCommand(\n packageFileName: string,\n distributionType: string | null,\n): Promise<string | null> {\n const {\n wrapperExecutableFileName,\n localProjectDir,\n wrapperFullyQualifiedPath,\n } = getMavenPaths(packageFileName);\n\n // Use existing distributionType or default to 'script' to preserve JAR-based mode\n // (prevents Maven 3.3.x from defaulting to only-script which doesn't support checksums)\n const type = distributionType ?? 'script';\n const args = `wrapper:wrapper -Dtype=${quote(type)}`;\n\n return await prepareCommand(\n wrapperExecutableFileName,\n localProjectDir,\n await statLocalFile(wrapperFullyQualifiedPath),\n args,\n );\n}\n\nfunction mavenWrapperFileName(): string {\n if (\n os.platform() === 'win32' &&\n GlobalConfig.get('binarySource') !== 'docker'\n ) {\n return 'mvnw.cmd';\n }\n return './mvnw';\n}\n\nfunction getMavenPaths(packageFileName: string): MavenWrapperPaths {\n const wrapperExecutableFileName = mavenWrapperFileName();\n const localProjectDir = upath.join(\n upath.dirname(packageFileName),\n packageFileName.includes('mvnw') ? '.' : '../../',\n );\n const wrapperFullyQualifiedPath = upath.join(\n localProjectDir,\n wrapperExecutableFileName,\n );\n return {\n wrapperExecutableFileName,\n localProjectDir,\n wrapperFullyQualifiedPath,\n };\n}\n\nasync function prepareCommand(\n fileName: string,\n cwd: string | undefined,\n pathFileStats: Stats | null,\n args: string | null,\n): Promise<string | null> {\n /* v8 ignore next -- hard to test */\n if (pathFileStats?.isFile() === true) {\n // if the file is not executable by others\n if (os.platform() !== 'win32' && (pathFileStats.mode & 0o1) === 0) {\n // add the execution permission to the owner, group and others\n logger.warn('Maven wrapper is missing the executable bit');\n await chmodLocalFile(\n // TODO: types (#22198)\n upath.join(cwd!, fileName),\n pathFileStats.mode | 0o111,\n );\n }\n if (args === null) {\n return fileName;\n }\n return `${fileName} ${args}`;\n }\n return null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"artifacts.js","names":["mavenVersioning"],"sources":["../../../../lib/modules/manager/maven-wrapper/artifacts.ts"],"sourcesContent":["import type { Stats } from 'node:fs';\nimport os from 'node:os';\nimport { isTruthy } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport upath from 'upath';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { withCache } from '../../../util/cache/package/with-cache.ts';\nimport { exec } from '../../../util/exec/index.ts';\nimport type { ExecOptions, ExtraEnv } from '../../../util/exec/types.ts';\nimport {\n chmodLocalFile,\n deleteLocalFile,\n readLocalFile,\n statLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport { getRepoStatus } from '../../../util/git/index.ts';\nimport type { StatusResult } from '../../../util/git/types.ts';\nimport { hashStream } from '../../../util/hash.ts';\nimport { Http } from '../../../util/http/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport mavenVersioning from '../../versioning/maven/index.ts';\nimport type {\n PackageDependency,\n UpdateArtifact,\n UpdateArtifactsConfig,\n UpdateArtifactsResult,\n} from '../types.ts';\n\nconst http = new Http('maven-wrapper');\nconst DEFAULT_MAVEN_REPO_URL = 'https://repo.maven.apache.org/maven2';\n\nfunction getChecksumFromUrl(url: string): Promise<string> {\n return withCache(\n {\n namespace: 'url-sha256',\n key: url,\n ttlMinutes: 3 * 24 * 60, // 3 days\n },\n () => hashStream(http.stream(url), 'sha256'),\n );\n}\n\nfunction getDistributionUrl(content: string): string | null {\n const match = regEx(/^distributionUrl\\s*=\\s*(?<distributionUrl>.+)$/m).exec(\n content,\n );\n return (\n match?.groups?.distributionUrl?.replace(regEx(/\\\\:/g), ':').trim() ?? null\n );\n}\n\nfunction getWrapperUrl(content: string): string | null {\n const match = regEx(/^wrapperUrl\\s*=\\s*(?<wrapperUrl>.+)$/m).exec(content);\n return match?.groups?.wrapperUrl?.replace(regEx(/\\\\:/g), ':').trim() ?? null;\n}\n\nfunction constructWrapperUrl(\n version: string,\n repoUrl: string = DEFAULT_MAVEN_REPO_URL,\n): string {\n return `${repoUrl}/org/apache/maven/wrapper/maven-wrapper/${version}/maven-wrapper-${version}.jar`;\n}\n\nfunction getWrapperVersion(content: string): string | null {\n const match = regEx(/^wrapperVersion\\s*=\\s*(?<wrapperVersion>.+)$/m).exec(\n content,\n );\n return match?.groups?.wrapperVersion?.trim() ?? null;\n}\n\nfunction getDistributionType(content: string): string | null {\n const match = regEx(/^distributionType\\s*=\\s*(?<distributionType>.+)$/m).exec(\n content,\n );\n return match?.groups?.distributionType?.trim() ?? null;\n}\n\nfunction getChecksumValue(content: string, key: string): string | null {\n const match = regEx(`^${key}\\\\s*=\\\\s*(?<value>.+)$`, 'm').exec(content);\n return match?.groups?.value?.trim() ?? null;\n}\n\nfunction addChecksumAfterLine(\n content: string,\n lineRegex: RegExp,\n key: string,\n value: string,\n): string {\n return content.replace(\n regEx(lineRegex),\n (lineMatch) => `${lineMatch}\\n${key}=${value}`,\n );\n}\n\nasync function updateChecksums(\n content: string,\n updatedDeps: PackageDependency[],\n addDistributionChecksum: boolean,\n addWrapperChecksum: boolean,\n originalContent: string,\n): Promise<string> {\n let updatedContent = content;\n\n // Update or add distribution checksum\n if (addDistributionChecksum) {\n const existingChecksum = getChecksumValue(\n updatedContent,\n 'distributionSha256Sum',\n );\n const fallbackChecksum = getChecksumValue(\n originalContent,\n 'distributionSha256Sum',\n );\n const distUrl = getDistributionUrl(updatedContent);\n if (distUrl) {\n try {\n const checksum = await getChecksumFromUrl(distUrl);\n if (existingChecksum) {\n updatedContent = updatedContent.replace(\n regEx(/distributionSha256Sum=.*/),\n `distributionSha256Sum=${checksum}`,\n );\n } else {\n // Add checksum after distributionUrl\n updatedContent = addChecksumAfterLine(\n updatedContent,\n regEx(/^(?:distributionUrl\\s*=\\s*.+)$/m),\n 'distributionSha256Sum',\n checksum,\n );\n }\n } catch (err) {\n logger.warn(\n { err, url: distUrl },\n 'Failed to fetch distribution checksum',\n );\n if (!existingChecksum && fallbackChecksum) {\n updatedContent = addChecksumAfterLine(\n updatedContent,\n regEx(/^(?:distributionUrl\\s*=\\s*.+)$/m),\n 'distributionSha256Sum',\n fallbackChecksum,\n );\n }\n }\n }\n }\n\n // Update or add wrapper checksum\n if (addWrapperChecksum) {\n const existingChecksum = getChecksumValue(\n updatedContent,\n 'wrapperSha256Sum',\n );\n const fallbackChecksum = getChecksumValue(\n originalContent,\n 'wrapperSha256Sum',\n );\n let wrapperUrl = getWrapperUrl(updatedContent);\n\n // If no wrapperUrl, try to construct from wrapperVersion\n if (!wrapperUrl) {\n const wrapperVersion = getWrapperVersion(updatedContent);\n if (wrapperVersion) {\n const customRepoUrl = getCustomMavenWrapperRepoUrl(updatedDeps);\n wrapperUrl = constructWrapperUrl(\n wrapperVersion,\n customRepoUrl ?? DEFAULT_MAVEN_REPO_URL,\n );\n }\n }\n\n if (wrapperUrl) {\n try {\n const checksum = await getChecksumFromUrl(wrapperUrl);\n if (existingChecksum) {\n updatedContent = updatedContent.replace(\n regEx(/wrapperSha256Sum=.*/),\n `wrapperSha256Sum=${checksum}`,\n );\n } else {\n // Add checksum after wrapperUrl or wrapperVersion\n updatedContent = addChecksumAfterLine(\n updatedContent,\n regEx(/^(?:wrapperUrl\\s*=\\s*.+|wrapperVersion\\s*=\\s*.+)$/m),\n 'wrapperSha256Sum',\n checksum,\n );\n }\n } catch (err) {\n logger.warn(\n { err, url: wrapperUrl },\n 'Failed to fetch wrapper checksum',\n );\n if (!existingChecksum && fallbackChecksum) {\n updatedContent = addChecksumAfterLine(\n updatedContent,\n regEx(/^(?:wrapperUrl\\s*=\\s*.+|wrapperVersion\\s*=\\s*.+)$/m),\n 'wrapperSha256Sum',\n fallbackChecksum,\n );\n }\n }\n }\n }\n\n return updatedContent;\n}\n\ninterface MavenWrapperPaths {\n wrapperExecutableFileName: string;\n localProjectDir: string;\n wrapperFullyQualifiedPath: string;\n}\n\nasync function addIfUpdated(\n status: StatusResult,\n fileProjectPath: string,\n): Promise<UpdateArtifactsResult | null> {\n if (status.modified.includes(fileProjectPath)) {\n return {\n file: {\n type: 'addition',\n path: fileProjectPath,\n contents: await readLocalFile(fileProjectPath),\n },\n };\n }\n return null;\n}\n\nexport async function updateArtifacts({\n packageFileName,\n newPackageFileContent,\n updatedDeps,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n try {\n logger.debug({ updatedDeps }, 'maven-wrapper.updateArtifacts()');\n\n const hasMavenUpdate = updatedDeps.some((dep) => dep.depName === 'maven');\n const hasWrapperUpdate = updatedDeps.some(\n (dep) => dep.depName === 'maven-wrapper',\n );\n // Remember original content properties - we'll restore them after wrapper:wrapper\n const hadDistributionChecksum = newPackageFileContent.includes(\n 'distributionSha256Sum=',\n );\n const hadWrapperChecksum =\n newPackageFileContent.includes('wrapperSha256Sum=');\n const originalDistributionType = getDistributionType(newPackageFileContent);\n\n // Skip if no relevant updates\n if (!hasWrapperUpdate && !(hasMavenUpdate && hadDistributionChecksum)) {\n logger.debug(\n 'No Maven wrapper or distribution checksum updates - skipping Artifacts update',\n );\n return null;\n }\n\n // If wrapper is being updated, check if mvnw exists first\n let cmd: string | null = null;\n if (hasWrapperUpdate) {\n cmd = await createWrapperCommand(\n packageFileName,\n originalDistributionType,\n );\n\n if (!cmd) {\n logger.info('No mvnw found - skipping Artifacts update');\n return null;\n }\n }\n\n // Delete old maven-wrapper.jar if checksums exist and wrapper:wrapper will run\n // This prevents checksum validation failure when wrapper:wrapper runs\n if (hasWrapperUpdate && (hadWrapperChecksum || hadDistributionChecksum)) {\n const jarPath = packageFileName.replace(\n 'maven-wrapper.properties',\n 'maven-wrapper.jar',\n );\n if (jarPath.endsWith('maven-wrapper.jar')) {\n try {\n await deleteLocalFile(jarPath);\n logger.debug({ jarPath }, 'Deleted old maven-wrapper.jar');\n } catch {\n // File may not exist, ignore\n }\n }\n }\n\n // Strip checksum lines before running wrapper:wrapper to avoid validation failure\n // (mvnw would try to validate NEW jar against OLD checksum)\n let contentToWrite = newPackageFileContent;\n if (hasWrapperUpdate && (hadWrapperChecksum || hadDistributionChecksum)) {\n contentToWrite = contentToWrite\n .replace(regEx(/^distributionSha256Sum=.*\\n?/m), '')\n .replace(regEx(/^wrapperSha256Sum=.*\\n?/m), '');\n }\n\n // Write the properties file\n await writeLocalFile(packageFileName, contentToWrite);\n\n // Run wrapper:wrapper if the wrapper itself is being updated\n if (hasWrapperUpdate && cmd) {\n const extraEnv = getExtraEnvOptions(updatedDeps);\n await executeWrapperCommand(cmd, config, packageFileName, extraEnv);\n }\n\n // Now update checksums AFTER wrapper:wrapper has run (if it ran)\n // This ensures we compute checksums for the actual generated content\n if (hadDistributionChecksum || hadWrapperChecksum) {\n const currentContent = await readLocalFile(packageFileName, 'utf8');\n if (currentContent) {\n const contentWithChecksums = await updateChecksums(\n currentContent,\n updatedDeps,\n hadDistributionChecksum,\n hadWrapperChecksum,\n newPackageFileContent,\n );\n await writeLocalFile(packageFileName, contentWithChecksums);\n }\n }\n\n const status = await getRepoStatus();\n const artifactFileNames = [\n '.mvn/wrapper/maven-wrapper.properties',\n '.mvn/wrapper/maven-wrapper.jar',\n '.mvn/wrapper/MavenWrapperDownloader.java',\n 'mvnw',\n 'mvnw.cmd',\n ].map(\n (filename) =>\n packageFileName.replace('.mvn/wrapper/maven-wrapper.properties', '') +\n filename,\n );\n const updateArtifactsResult = (\n await getUpdatedArtifacts(status, artifactFileNames)\n ).filter(isTruthy);\n\n logger.debug(\n { files: updateArtifactsResult.map((r) => r.file?.path) },\n `Returning updated maven-wrapper files`,\n );\n return updateArtifactsResult;\n } catch (err) {\n logger.debug({ err }, 'Error setting new Maven Wrapper release value');\n return [\n {\n artifactError: {\n fileName: packageFileName,\n stderr: err.message,\n },\n },\n ];\n }\n}\n\nasync function getUpdatedArtifacts(\n status: StatusResult,\n artifactFileNames: string[],\n): Promise<UpdateArtifactsResult[]> {\n const updatedResults: UpdateArtifactsResult[] = [];\n for (const artifactFileName of artifactFileNames) {\n const updatedResult = await addIfUpdated(status, artifactFileName);\n if (updatedResult !== null) {\n updatedResults.push(updatedResult);\n }\n }\n return updatedResults;\n}\n\n/**\n * Find compatible java version for maven.\n * see https://maven.apache.org/developers/compatibility-plan.html\n * @param mavenWrapperVersion current maven version\n * @returns A Java semver range\n */\nexport function getJavaConstraint(\n mavenWrapperVersion: string | null | undefined,\n): string | null {\n const major = mavenWrapperVersion\n ? mavenVersioning.getMajor(mavenWrapperVersion)\n : null;\n\n if (major && major >= 3) {\n return '^17.0.0';\n }\n\n return '^8.0.0';\n}\n\nasync function executeWrapperCommand(\n cmd: string,\n config: UpdateArtifactsConfig,\n packageFileName: string,\n extraEnv: ExtraEnv,\n): Promise<void> {\n logger.debug(`Updating maven wrapper: \"${cmd}\"`);\n const { wrapperFullyQualifiedPath } = getMavenPaths(packageFileName);\n\n const execOptions: ExecOptions = {\n cwdFile: wrapperFullyQualifiedPath,\n docker: {},\n extraEnv,\n toolConstraints: [\n {\n toolName: 'java',\n constraint:\n config.constraints?.java ?? getJavaConstraint(config.currentValue),\n },\n ],\n };\n\n try {\n await exec(cmd, execOptions);\n } catch (err) {\n logger.error({ err }, 'Error executing maven wrapper update command.');\n throw err;\n }\n}\n\nfunction getExtraEnvOptions(deps: PackageDependency[]): ExtraEnv {\n const customMavenWrapperUrl = getCustomMavenWrapperRepoUrl(deps);\n if (customMavenWrapperUrl) {\n return { MVNW_REPOURL: customMavenWrapperUrl };\n }\n return {};\n}\n\nfunction getCustomMavenWrapperRepoUrl(\n deps: PackageDependency[],\n): string | null {\n const replaceString = deps.find(\n (dep) => dep.depName === 'maven-wrapper',\n )?.replaceString;\n\n if (!replaceString) {\n return null;\n }\n\n const match = regEx(/^(?<repoUrl>.*?)\\/org\\/apache\\/maven\\/wrapper\\//).exec(\n replaceString,\n );\n\n if (!match) {\n return null;\n }\n\n return match.groups!.repoUrl === DEFAULT_MAVEN_REPO_URL\n ? null\n : match.groups!.repoUrl;\n}\n\nasync function createWrapperCommand(\n packageFileName: string,\n distributionType: string | null,\n): Promise<string | null> {\n const {\n wrapperExecutableFileName,\n localProjectDir,\n wrapperFullyQualifiedPath,\n } = getMavenPaths(packageFileName);\n\n // Use existing distributionType or default to 'script' to preserve JAR-based mode\n // (prevents Maven 3.3.x from defaulting to only-script which doesn't support checksums)\n const type = distributionType ?? 'script';\n const args = `wrapper:wrapper -Dtype=${quote(type)}`;\n\n return await prepareCommand(\n wrapperExecutableFileName,\n localProjectDir,\n await statLocalFile(wrapperFullyQualifiedPath),\n args,\n );\n}\n\nfunction mavenWrapperFileName(): string {\n if (\n os.platform() === 'win32' &&\n GlobalConfig.get('binarySource') !== 'docker'\n ) {\n return 'mvnw.cmd';\n }\n return './mvnw';\n}\n\nfunction getMavenPaths(packageFileName: string): MavenWrapperPaths {\n const wrapperExecutableFileName = mavenWrapperFileName();\n const localProjectDir = upath.join(\n upath.dirname(packageFileName),\n packageFileName.includes('mvnw') ? '.' : '../../',\n );\n const wrapperFullyQualifiedPath = upath.join(\n localProjectDir,\n wrapperExecutableFileName,\n );\n return {\n wrapperExecutableFileName,\n localProjectDir,\n wrapperFullyQualifiedPath,\n };\n}\n\nasync function prepareCommand(\n fileName: string,\n cwd: string | undefined,\n pathFileStats: Stats | null,\n args: string | null,\n): Promise<string | null> {\n /* v8 ignore next -- hard to test */\n if (pathFileStats?.isFile() === true) {\n // if the file is not executable by others\n if (os.platform() !== 'win32' && (pathFileStats.mode & 0o1) === 0) {\n // add the execution permission to the owner, group and others\n logger.warn('Maven wrapper is missing the executable bit');\n await chmodLocalFile(\n // TODO: types (#22198)\n upath.join(cwd!, fileName),\n pathFileStats.mode | 0o111,\n );\n }\n if (args === null) {\n return fileName;\n }\n return `${fileName} ${args}`;\n }\n return null;\n}\n"],"mappings":"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"}
@@ -4,10 +4,10 @@ import { NpmDatasource } from "../../datasource/npm/index.js";
4
4
  //#region lib/modules/manager/meteor/extract.ts
5
5
  function extractPackageFile(content, packageFile) {
6
6
  let deps = [];
7
- const npmDepends = regEx(/\nNpm\.depends\({([\s\S]*?)}\);/).exec(content);
7
+ const npmDepends = regEx(/\nNpm\.depends\({(?<body>[\s\S]*?)}\);/).exec(content);
8
8
  if (!npmDepends) return null;
9
9
  try {
10
- deps = npmDepends[1].replace(regEx(/(\s|\\n|\\t|'|")/g), "").split(",").map((dep) => dep.trim()).filter((dep) => dep.length).map((dep) => dep.split(regEx(/:(.*)/))).map((arr) => {
10
+ deps = npmDepends.groups.body.replace(regEx(/(?:\s|\\n|\\t|'|")/g), "").split(",").map((dep) => dep.trim()).filter((dep) => dep.length).map((dep) => dep.split(regEx(/:(?<value>.*)/))).map((arr) => {
11
11
  const [depName, currentValue] = arr;
12
12
  // istanbul ignore if
13
13
  if (!(depName && currentValue)) logger.warn({ content }, "Incomplete npm.depends match");
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/meteor/extract.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { NpmDatasource } from '../../datasource/npm/index.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\n\nexport function extractPackageFile(\n content: string,\n packageFile?: string,\n): PackageFileContent | null {\n let deps: PackageDependency[] = [];\n const npmDepends = regEx(/\\nNpm\\.depends\\({([\\s\\S]*?)}\\);/).exec(content);\n if (!npmDepends) {\n return null;\n }\n try {\n deps = npmDepends[1]\n .replace(regEx(/(\\s|\\\\n|\\\\t|'|\")/g), '')\n .split(',')\n .map((dep) => dep.trim())\n .filter((dep) => dep.length)\n .map((dep) => dep.split(regEx(/:(.*)/)))\n .map((arr) => {\n const [depName, currentValue] = arr;\n // istanbul ignore if\n if (!(depName && currentValue)) {\n logger.warn({ content }, 'Incomplete npm.depends match');\n }\n return {\n depName,\n currentValue,\n datasource: NpmDatasource.id,\n };\n })\n .filter((dep) => dep.depName && dep.currentValue);\n } catch (err) /* istanbul ignore next */ {\n logger.warn({ err, packageFile }, 'Failed to parse meteor package.js');\n }\n // istanbul ignore if\n if (!deps.length) {\n return null;\n }\n return { deps };\n}\n"],"mappings":";;;;AAKA,SAAgB,mBACd,SACA,aAC2B;CAC3B,IAAI,OAA4B,CAAC;CACjC,MAAM,aAAa,MAAM,iCAAiC,CAAC,CAAC,KAAK,OAAO;CACxE,IAAI,CAAC,YACH,OAAO;CAET,IAAI;EACF,OAAO,WAAW,EAAE,CACjB,QAAQ,MAAM,mBAAmB,GAAG,EAAE,CAAC,CACvC,MAAM,GAAG,CAAC,CACV,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CACxB,QAAQ,QAAQ,IAAI,MAAM,CAAC,CAC3B,KAAK,QAAQ,IAAI,MAAM,MAAM,OAAO,CAAC,CAAC,CAAC,CACvC,KAAK,QAAQ;GACZ,MAAM,CAAC,SAAS,gBAAgB;;GAEhC,IAAI,EAAE,WAAW,eACf,OAAO,KAAK,EAAE,QAAQ,GAAG,8BAA8B;GAEzD,OAAO;IACL;IACA;IACA,YAAY,cAAc;GAC5B;EACF,CAAC,CAAC,CACD,QAAQ,QAAQ,IAAI,WAAW,IAAI,YAAY;CACpD,SAAS,gCAAgC;EACvC,OAAO,KAAK;GAAE;GAAK;EAAY,GAAG,mCAAmC;CACvE;;CAEA,IAAI,CAAC,KAAK,QACR,OAAO;CAET,OAAO,EAAE,KAAK;AAChB"}
1
+ {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/meteor/extract.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { NpmDatasource } from '../../datasource/npm/index.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\n\nexport function extractPackageFile(\n content: string,\n packageFile?: string,\n): PackageFileContent | null {\n let deps: PackageDependency[] = [];\n const npmDepends = regEx(/\\nNpm\\.depends\\({(?<body>[\\s\\S]*?)}\\);/).exec(\n content,\n );\n if (!npmDepends) {\n return null;\n }\n try {\n deps = npmDepends\n .groups!.body.replace(regEx(/(?:\\s|\\\\n|\\\\t|'|\")/g), '')\n .split(',')\n .map((dep) => dep.trim())\n .filter((dep) => dep.length)\n .map((dep) => dep.split(regEx(/:(?<value>.*)/)))\n .map((arr) => {\n const [depName, currentValue] = arr;\n // istanbul ignore if\n if (!(depName && currentValue)) {\n logger.warn({ content }, 'Incomplete npm.depends match');\n }\n return {\n depName,\n currentValue,\n datasource: NpmDatasource.id,\n };\n })\n .filter((dep) => dep.depName && dep.currentValue);\n } catch (err) /* istanbul ignore next */ {\n logger.warn({ err, packageFile }, 'Failed to parse meteor package.js');\n }\n // istanbul ignore if\n if (!deps.length) {\n return null;\n }\n return { deps };\n}\n"],"mappings":";;;;AAKA,SAAgB,mBACd,SACA,aAC2B;CAC3B,IAAI,OAA4B,CAAC;CACjC,MAAM,aAAa,MAAM,wCAAwC,CAAC,CAAC,KACjE,OACF;CACA,IAAI,CAAC,YACH,OAAO;CAET,IAAI;EACF,OAAO,WACJ,OAAQ,KAAK,QAAQ,MAAM,qBAAqB,GAAG,EAAE,CAAC,CACtD,MAAM,GAAG,CAAC,CACV,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CACxB,QAAQ,QAAQ,IAAI,MAAM,CAAC,CAC3B,KAAK,QAAQ,IAAI,MAAM,MAAM,eAAe,CAAC,CAAC,CAAC,CAC/C,KAAK,QAAQ;GACZ,MAAM,CAAC,SAAS,gBAAgB;;GAEhC,IAAI,EAAE,WAAW,eACf,OAAO,KAAK,EAAE,QAAQ,GAAG,8BAA8B;GAEzD,OAAO;IACL;IACA;IACA,YAAY,cAAc;GAC5B;EACF,CAAC,CAAC,CACD,QAAQ,QAAQ,IAAI,WAAW,IAAI,YAAY;CACpD,SAAS,gCAAgC;EACvC,OAAO,KAAK;GAAE;GAAK;EAAY,GAAG,mCAAmC;CACvE;;CAEA,IAAI,CAAC,KAAK,QACR,OAAO;CAET,OAAO,EAAE,KAAK;AAChB"}
@@ -17,7 +17,7 @@ import mise_registry_default from "../../../data/mise-registry.js";
17
17
  //#region lib/modules/manager/mise/upgradeable-tooling.ts
18
18
  const asdfTooling = upgradeableTooling;
19
19
  function shortJavaVersioning(version) {
20
- if (regEx(/^\d+(\.\d+)?$/).test(version)) return { versioning: id$2 };
20
+ if (regEx(/^\d+(?:\.\d+)?$/).test(version)) return { versioning: id$2 };
21
21
  return {};
22
22
  }
23
23
  const miseCoreTooling = {
@@ -61,7 +61,7 @@ const miseCoreTooling = {
61
61
  java: {
62
62
  misePluginUrl: "https://mise.jdx.dev/lang/java.html",
63
63
  config: (version) => {
64
- const versionMatch = regEx(/^(\d\S+)/).exec(version)?.[1];
64
+ const versionMatch = regEx(/^(?<version>\d\S+)/).exec(version)?.groups?.version;
65
65
  if (versionMatch) return {
66
66
  datasource: JavaVersionDatasource.id,
67
67
  packageName: "java-jdk",
@@ -1 +1 @@
1
- {"version":3,"file":"upgradeable-tooling.js","names":["semverPartialVersioning.id","regexVersioning.id","semverVersioning.id","miseRegistry"],"sources":["../../../../lib/modules/manager/mise/upgradeable-tooling.ts"],"sourcesContent":["import miseRegistry from '../../../data/mise-registry.json' with { type: 'json' };\nimport { coerceObject } from '../../../util/object.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { GithubReleasesDatasource } from '../../datasource/github-releases/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { HexpmBobDatasource } from '../../datasource/hexpm-bob/index.ts';\nimport { JavaVersionDatasource } from '../../datasource/java-version/index.ts';\nimport { NodeVersionDatasource } from '../../datasource/node-version/index.ts';\nimport { NpmDatasource } from '../../datasource/npm/index.ts';\nimport { RubyVersionDatasource } from '../../datasource/ruby-version/index.ts';\nimport { RustVersionDatasource } from '../../datasource/rust-version/index.ts';\nimport * as regexVersioning from '../../versioning/regex/index.ts';\nimport * as semverVersioning from '../../versioning/semver/index.ts';\nimport * as semverPartialVersioning from '../../versioning/semver-partial/index.ts';\nimport { upgradeableTooling } from '../asdf/upgradeable-tooling.ts';\nimport { MiseRegistryJson } from './schema.ts';\nimport type { MiseRegistryData, ToolingDefinition } from './types.ts';\n\nexport const asdfTooling = upgradeableTooling;\n\nfunction shortJavaVersioning(version: string): { versioning?: string } {\n if (regEx(/^\\d+(\\.\\d+)?$/).test(version)) {\n return { versioning: semverPartialVersioning.id };\n }\n return {};\n}\n\nconst miseCoreTooling: Record<string, ToolingDefinition> = {\n bun: {\n misePluginUrl: 'https://mise.jdx.dev/lang/bun.html',\n config: {\n packageName: 'oven-sh/bun',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^bun-v(?<version>\\\\S+)',\n },\n },\n deno: {\n misePluginUrl: 'https://mise.jdx.dev/lang/deno.html',\n config: {\n packageName: 'denoland/deno',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n elixir: {\n misePluginUrl: 'https://mise.jdx.dev/lang/elixir.html',\n config: {\n datasource: HexpmBobDatasource.id,\n },\n },\n erlang: {\n misePluginUrl: 'https://mise.jdx.dev/lang/erlang.html',\n config: {\n packageName: 'erlang/otp',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^OTP-(?<version>\\\\S+)',\n versioning: `${regexVersioning.id}:^(?<major>\\\\d+?)\\\\.(?<minor>\\\\d+?)(\\\\.(?<patch>\\\\d+))?$`,\n },\n },\n go: {\n misePluginUrl: 'https://mise.jdx.dev/lang/go.html',\n config: {\n packageName: 'golang/go',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^go(?<version>\\\\S+)',\n },\n },\n java: {\n misePluginUrl: 'https://mise.jdx.dev/lang/java.html',\n config: (version) => {\n // no prefix is shorthand for openjdk\n const versionMatch = regEx(/^(\\d\\S+)/).exec(version)?.[1];\n if (versionMatch) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: versionMatch,\n ...shortJavaVersioning(versionMatch),\n };\n }\n const openJdkMatches = regEx(/^openjdk-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (openJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: openJdkMatches.version,\n ...shortJavaVersioning(openJdkMatches.version),\n };\n }\n const adoptOpenJdkMatches = regEx(/^adoptopenjdk-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (adoptOpenJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: adoptOpenJdkMatches.version,\n ...shortJavaVersioning(adoptOpenJdkMatches.version),\n };\n }\n const temurinJdkMatches = regEx(/^temurin-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (temurinJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: temurinJdkMatches.version,\n ...shortJavaVersioning(temurinJdkMatches.version),\n };\n }\n const correttoJdkMatches = regEx(/^corretto-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (correttoJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: correttoJdkMatches.version,\n ...shortJavaVersioning(correttoJdkMatches.version),\n };\n }\n const zuluJdkMatches = regEx(/^zulu-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (zuluJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: zuluJdkMatches.version,\n ...shortJavaVersioning(zuluJdkMatches.version),\n };\n }\n const oracleGraalvmJdkMatches = regEx(\n /^oracle-graalvm-(?<version>\\d\\S+)/,\n ).exec(version)?.groups;\n if (oracleGraalvmJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: oracleGraalvmJdkMatches.version,\n ...shortJavaVersioning(oracleGraalvmJdkMatches.version),\n };\n }\n\n return undefined;\n },\n },\n node: {\n misePluginUrl: 'https://mise.jdx.dev/lang/node.html',\n config: {\n packageName: 'node',\n datasource: NodeVersionDatasource.id,\n },\n },\n python: {\n misePluginUrl: 'https://mise.jdx.dev/lang/python.html',\n config: {\n packageName: 'python/cpython',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n ruby: {\n misePluginUrl: 'https://mise.jdx.dev/lang/ruby.html',\n config: {\n packageName: 'ruby-version',\n datasource: RubyVersionDatasource.id,\n versioning: semverVersioning.id,\n },\n },\n rust: {\n misePluginUrl: 'https://mise.jdx.dev/lang/rust.html',\n config: {\n packageName: 'rust',\n datasource: RustVersionDatasource.id,\n },\n },\n swift: {\n misePluginUrl: 'https://mise.jdx.dev/lang/swift.html',\n config: {\n packageName: 'swift-lang/swift',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^swift-(?<version>\\\\S+)',\n },\n },\n zig: {\n misePluginUrl: 'https://mise.jdx.dev/lang/zig.html',\n config: {\n packageName: 'ziglang/zig',\n datasource: GithubTagsDatasource.id,\n },\n },\n};\n\nconst miseRegistryTooling: Record<string, ToolingDefinition> = {\n actionlint: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'rhysd/actionlint',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n astro: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'astronomer/astro-cli',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n 'aws-cli': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n datasource: GithubTagsDatasource.id,\n packageName: 'aws/aws-cli',\n },\n },\n 'aws-vault': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n datasource: GithubReleasesDatasource.id,\n packageName: '99designs/aws-vault',\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n buf: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'bufbuild/buf',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n caddy: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'caddyserver/caddy',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n ccache: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'ccache/ccache',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n 'clang-format': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'llvm/llvm-project',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^llvmorg-(?<version>\\\\S+)',\n },\n },\n committed: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'crate-ci/committed',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n conan: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'conan-io/conan',\n datasource: GithubReleasesDatasource.id,\n },\n },\n consul: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'hashicorp/consul',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n gh: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'cli/cli',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n 'dotenv-linter': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'dotenv-linter/dotenv-linter',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n hivemind: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'DarthSim/hivemind',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n hk: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'jdx/hk',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n jq: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'jqlang/jq',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^jq-(?<version>\\\\S+)',\n },\n },\n kafka: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: (version) => {\n const apacheMatches = regEx(/^apache-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (apacheMatches) {\n return {\n datasource: GithubTagsDatasource.id,\n packageName: 'apache/kafka',\n currentValue: apacheMatches.version,\n };\n }\n\n return undefined;\n },\n },\n lefthook: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'evilmartians/lefthook',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n localstack: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'localstack/localstack',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n lychee: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'lycheeverse/lychee',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^lychee-v(?<version>\\\\S+)',\n },\n },\n npm: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'npm',\n datasource: NpmDatasource.id,\n },\n },\n opentofu: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'opentofu/opentofu',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n openfga: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'openfga/openfga',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n packer: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'hashicorp/packer',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n pipx: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'pypa/pipx',\n datasource: GithubReleasesDatasource.id,\n },\n },\n pkl: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'apple/pkl',\n datasource: GithubReleasesDatasource.id,\n },\n },\n prettier: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'prettier/prettier',\n datasource: GithubReleasesDatasource.id,\n },\n },\n protoc: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'protocolbuffers/protobuf',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n pnpm: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'pnpm',\n datasource: NpmDatasource.id,\n },\n },\n redis: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'redis/redis',\n datasource: GithubReleasesDatasource.id,\n },\n },\n ruff: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'astral-sh/ruff',\n datasource: GithubReleasesDatasource.id,\n },\n },\n rumdl: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'rvben/rumdl',\n datasource: GithubReleasesDatasource.id,\n },\n },\n shellcheck: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'koalaman/shellcheck',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n skeema: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'skeema/skeema',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n sops: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'getsops/sops',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n sqlite: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'sqlite/sqlite',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^version-(?<version>\\\\S+)',\n },\n },\n stripe: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'stripe/stripe-cli',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n swiftformat: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'nicklockwood/SwiftFormat',\n datasource: GithubReleasesDatasource.id,\n },\n },\n swiftlint: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'realm/SwiftLint',\n datasource: GithubReleasesDatasource.id,\n },\n },\n taplo: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'tamasfe/taplo',\n datasource: GithubReleasesDatasource.id,\n },\n },\n tart: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'cirruslabs/tart',\n datasource: GithubReleasesDatasource.id,\n },\n },\n terragrunt: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'gruntwork-io/terragrunt',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n tilt: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'tilt-dev/tilt',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n tusd: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'tus/tusd',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n usage: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'jdx/usage',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n yarn: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: '@yarnpkg/cli',\n datasource: NpmDatasource.id,\n },\n },\n};\n\nexport const miseTooling: Record<string, ToolingDefinition> = {\n ...miseCoreTooling,\n ...miseRegistryTooling,\n};\n\nexport const parsedMiseRegistry: MiseRegistryData = Object.freeze(\n MiseRegistryJson.parse(miseRegistry),\n);\n\nexport function getOrderedMiseRegistryBackends(\n toolName: string,\n): Record<string, string> {\n return coerceObject(parsedMiseRegistry.tools[toolName]);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"upgradeable-tooling.js","names":["semverPartialVersioning.id","regexVersioning.id","semverVersioning.id","miseRegistry"],"sources":["../../../../lib/modules/manager/mise/upgradeable-tooling.ts"],"sourcesContent":["import miseRegistry from '../../../data/mise-registry.json' with { type: 'json' };\nimport { coerceObject } from '../../../util/object.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { GithubReleasesDatasource } from '../../datasource/github-releases/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { HexpmBobDatasource } from '../../datasource/hexpm-bob/index.ts';\nimport { JavaVersionDatasource } from '../../datasource/java-version/index.ts';\nimport { NodeVersionDatasource } from '../../datasource/node-version/index.ts';\nimport { NpmDatasource } from '../../datasource/npm/index.ts';\nimport { RubyVersionDatasource } from '../../datasource/ruby-version/index.ts';\nimport { RustVersionDatasource } from '../../datasource/rust-version/index.ts';\nimport * as regexVersioning from '../../versioning/regex/index.ts';\nimport * as semverVersioning from '../../versioning/semver/index.ts';\nimport * as semverPartialVersioning from '../../versioning/semver-partial/index.ts';\nimport { upgradeableTooling } from '../asdf/upgradeable-tooling.ts';\nimport { MiseRegistryJson } from './schema.ts';\nimport type { MiseRegistryData, ToolingDefinition } from './types.ts';\n\nexport const asdfTooling = upgradeableTooling;\n\nfunction shortJavaVersioning(version: string): { versioning?: string } {\n if (regEx(/^\\d+(?:\\.\\d+)?$/).test(version)) {\n return { versioning: semverPartialVersioning.id };\n }\n return {};\n}\n\nconst miseCoreTooling: Record<string, ToolingDefinition> = {\n bun: {\n misePluginUrl: 'https://mise.jdx.dev/lang/bun.html',\n config: {\n packageName: 'oven-sh/bun',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^bun-v(?<version>\\\\S+)',\n },\n },\n deno: {\n misePluginUrl: 'https://mise.jdx.dev/lang/deno.html',\n config: {\n packageName: 'denoland/deno',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n elixir: {\n misePluginUrl: 'https://mise.jdx.dev/lang/elixir.html',\n config: {\n datasource: HexpmBobDatasource.id,\n },\n },\n erlang: {\n misePluginUrl: 'https://mise.jdx.dev/lang/erlang.html',\n config: {\n packageName: 'erlang/otp',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^OTP-(?<version>\\\\S+)',\n versioning: `${regexVersioning.id}:^(?<major>\\\\d+?)\\\\.(?<minor>\\\\d+?)(\\\\.(?<patch>\\\\d+))?$`,\n },\n },\n go: {\n misePluginUrl: 'https://mise.jdx.dev/lang/go.html',\n config: {\n packageName: 'golang/go',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^go(?<version>\\\\S+)',\n },\n },\n java: {\n misePluginUrl: 'https://mise.jdx.dev/lang/java.html',\n config: (version) => {\n // no prefix is shorthand for openjdk\n const versionMatch =\n regEx(/^(?<version>\\d\\S+)/).exec(version)?.groups?.version;\n if (versionMatch) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: versionMatch,\n ...shortJavaVersioning(versionMatch),\n };\n }\n const openJdkMatches = regEx(/^openjdk-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (openJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: openJdkMatches.version,\n ...shortJavaVersioning(openJdkMatches.version),\n };\n }\n const adoptOpenJdkMatches = regEx(/^adoptopenjdk-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (adoptOpenJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: adoptOpenJdkMatches.version,\n ...shortJavaVersioning(adoptOpenJdkMatches.version),\n };\n }\n const temurinJdkMatches = regEx(/^temurin-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (temurinJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: temurinJdkMatches.version,\n ...shortJavaVersioning(temurinJdkMatches.version),\n };\n }\n const correttoJdkMatches = regEx(/^corretto-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (correttoJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: correttoJdkMatches.version,\n ...shortJavaVersioning(correttoJdkMatches.version),\n };\n }\n const zuluJdkMatches = regEx(/^zulu-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (zuluJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: zuluJdkMatches.version,\n ...shortJavaVersioning(zuluJdkMatches.version),\n };\n }\n const oracleGraalvmJdkMatches = regEx(\n /^oracle-graalvm-(?<version>\\d\\S+)/,\n ).exec(version)?.groups;\n if (oracleGraalvmJdkMatches) {\n return {\n datasource: JavaVersionDatasource.id,\n packageName: 'java-jdk',\n currentValue: oracleGraalvmJdkMatches.version,\n ...shortJavaVersioning(oracleGraalvmJdkMatches.version),\n };\n }\n\n return undefined;\n },\n },\n node: {\n misePluginUrl: 'https://mise.jdx.dev/lang/node.html',\n config: {\n packageName: 'node',\n datasource: NodeVersionDatasource.id,\n },\n },\n python: {\n misePluginUrl: 'https://mise.jdx.dev/lang/python.html',\n config: {\n packageName: 'python/cpython',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n ruby: {\n misePluginUrl: 'https://mise.jdx.dev/lang/ruby.html',\n config: {\n packageName: 'ruby-version',\n datasource: RubyVersionDatasource.id,\n versioning: semverVersioning.id,\n },\n },\n rust: {\n misePluginUrl: 'https://mise.jdx.dev/lang/rust.html',\n config: {\n packageName: 'rust',\n datasource: RustVersionDatasource.id,\n },\n },\n swift: {\n misePluginUrl: 'https://mise.jdx.dev/lang/swift.html',\n config: {\n packageName: 'swift-lang/swift',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^swift-(?<version>\\\\S+)',\n },\n },\n zig: {\n misePluginUrl: 'https://mise.jdx.dev/lang/zig.html',\n config: {\n packageName: 'ziglang/zig',\n datasource: GithubTagsDatasource.id,\n },\n },\n};\n\nconst miseRegistryTooling: Record<string, ToolingDefinition> = {\n actionlint: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'rhysd/actionlint',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n astro: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'astronomer/astro-cli',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n 'aws-cli': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n datasource: GithubTagsDatasource.id,\n packageName: 'aws/aws-cli',\n },\n },\n 'aws-vault': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n datasource: GithubReleasesDatasource.id,\n packageName: '99designs/aws-vault',\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n buf: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'bufbuild/buf',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n caddy: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'caddyserver/caddy',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n ccache: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'ccache/ccache',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n 'clang-format': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'llvm/llvm-project',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^llvmorg-(?<version>\\\\S+)',\n },\n },\n committed: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'crate-ci/committed',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n conan: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'conan-io/conan',\n datasource: GithubReleasesDatasource.id,\n },\n },\n consul: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'hashicorp/consul',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n gh: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'cli/cli',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n 'dotenv-linter': {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'dotenv-linter/dotenv-linter',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n hivemind: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'DarthSim/hivemind',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n hk: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'jdx/hk',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n jq: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'jqlang/jq',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^jq-(?<version>\\\\S+)',\n },\n },\n kafka: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: (version) => {\n const apacheMatches = regEx(/^apache-(?<version>\\d\\S+)/).exec(\n version,\n )?.groups;\n if (apacheMatches) {\n return {\n datasource: GithubTagsDatasource.id,\n packageName: 'apache/kafka',\n currentValue: apacheMatches.version,\n };\n }\n\n return undefined;\n },\n },\n lefthook: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'evilmartians/lefthook',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n localstack: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'localstack/localstack',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n lychee: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'lycheeverse/lychee',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^lychee-v(?<version>\\\\S+)',\n },\n },\n npm: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'npm',\n datasource: NpmDatasource.id,\n },\n },\n opentofu: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'opentofu/opentofu',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n openfga: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'openfga/openfga',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n packer: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'hashicorp/packer',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n pipx: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'pypa/pipx',\n datasource: GithubReleasesDatasource.id,\n },\n },\n pkl: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'apple/pkl',\n datasource: GithubReleasesDatasource.id,\n },\n },\n prettier: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'prettier/prettier',\n datasource: GithubReleasesDatasource.id,\n },\n },\n protoc: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'protocolbuffers/protobuf',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n pnpm: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'pnpm',\n datasource: NpmDatasource.id,\n },\n },\n redis: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'redis/redis',\n datasource: GithubReleasesDatasource.id,\n },\n },\n ruff: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'astral-sh/ruff',\n datasource: GithubReleasesDatasource.id,\n },\n },\n rumdl: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'rvben/rumdl',\n datasource: GithubReleasesDatasource.id,\n },\n },\n shellcheck: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'koalaman/shellcheck',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n skeema: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'skeema/skeema',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n sops: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'getsops/sops',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n sqlite: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'sqlite/sqlite',\n datasource: GithubTagsDatasource.id,\n extractVersion: '^version-(?<version>\\\\S+)',\n },\n },\n stripe: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'stripe/stripe-cli',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n swiftformat: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'nicklockwood/SwiftFormat',\n datasource: GithubReleasesDatasource.id,\n },\n },\n swiftlint: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'realm/SwiftLint',\n datasource: GithubReleasesDatasource.id,\n },\n },\n taplo: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'tamasfe/taplo',\n datasource: GithubReleasesDatasource.id,\n },\n },\n tart: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'cirruslabs/tart',\n datasource: GithubReleasesDatasource.id,\n },\n },\n terragrunt: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'gruntwork-io/terragrunt',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n tilt: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'tilt-dev/tilt',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n tusd: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'tus/tusd',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n usage: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: 'jdx/usage',\n datasource: GithubReleasesDatasource.id,\n extractVersion: '^v(?<version>\\\\S+)',\n },\n },\n yarn: {\n misePluginUrl: 'https://mise.jdx.dev/registry.html#tools',\n config: {\n packageName: '@yarnpkg/cli',\n datasource: NpmDatasource.id,\n },\n },\n};\n\nexport const miseTooling: Record<string, ToolingDefinition> = {\n ...miseCoreTooling,\n ...miseRegistryTooling,\n};\n\nexport const parsedMiseRegistry: MiseRegistryData = Object.freeze(\n MiseRegistryJson.parse(miseRegistry),\n);\n\nexport function getOrderedMiseRegistryBackends(\n toolName: string,\n): Record<string, string> {\n return coerceObject(parsedMiseRegistry.tools[toolName]);\n}\n"],"mappings":"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"}
@@ -6,7 +6,7 @@ import { GithubTagsDatasource } from "../../datasource/github-tags/index.js";
6
6
  import { HexDatasource } from "../../datasource/hex/index.js";
7
7
  //#region lib/modules/manager/mix/extract.ts
8
8
  const depSectionRegExp = regEx(/defp\s+deps.*do/g);
9
- const depMatchRegExp = regEx(/{:(?<app>\w+)(\s*,\s*"(?<requirement>[^"]+)")?(\s*,\s*(?<opts>[^}]+))?}/gm);
9
+ const depMatchRegExp = regEx(/{:(?<app>\w+)(?:\s*,\s*"(?<requirement>[^"]+)")?(?:\s*,\s*(?<opts>[^}]+))?}/gm);
10
10
  const gitRegexp = regEx(/git:\s*"(?<value>[^"]+)"/);
11
11
  const githubRegexp = regEx(/github:\s*"(?<value>[^"]+)"/);
12
12
  const refRegexp = regEx(/ref:\s*"(?<value>[^"]+)"/);
@@ -16,7 +16,7 @@ const commentMatchRegExp = regEx(/#.*$/);
16
16
  const lockedVersionRegExp = regEx(/^\s+"(?<app>\w+)".*?"(?<lockedVersion>\d+\.\d+\.\d+)"/);
17
17
  const hexRegexp = regEx(/hex:\s*(?:"(?<strValue>[^"]+)"|:(?<atomValue>\w+))/);
18
18
  const onlyValueRegexp = regEx(/only:\s*(?<only>\[[^\]]*\]|:\w+)/);
19
- const onlyEnvironmentsRegexp = regEx(/:(\w+)/gm);
19
+ const onlyEnvironmentsRegexp = regEx(/:(?<env>\w+)/gm);
20
20
  async function extractPackageFile(content, packageFile) {
21
21
  logger.trace(`mix.extractPackageFile(${packageFile})`);
22
22
  const deps = /* @__PURE__ */ new Map();
@@ -38,7 +38,7 @@ async function extractPackageFile(content, packageFile) {
38
38
  const hex = hexGroups?.strValue ?? hexGroups?.atomValue;
39
39
  const onlyValue = onlyValueRegexp.exec(opts)?.groups?.only;
40
40
  const onlyEnvironments = [];
41
- if (onlyValue) for (const match of onlyValue.matchAll(onlyEnvironmentsRegexp)) onlyEnvironments.push(match[1]);
41
+ if (onlyValue) for (const match of onlyValue.matchAll(onlyEnvironmentsRegexp)) onlyEnvironments.push(match.groups.env);
42
42
  const dep = {
43
43
  depName: app,
44
44
  depType: "prod"
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/mix/extract.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport {\n findLocalSiblingOrParent,\n readLocalFile,\n} from '../../../util/fs/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { HexDatasource } from '../../datasource/hex/index.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\n\nconst depSectionRegExp = regEx(/defp\\s+deps.*do/g);\nconst depMatchRegExp = regEx(\n /{:(?<app>\\w+)(\\s*,\\s*\"(?<requirement>[^\"]+)\")?(\\s*,\\s*(?<opts>[^}]+))?}/gm,\n);\nconst gitRegexp = regEx(/git:\\s*\"(?<value>[^\"]+)\"/);\nconst githubRegexp = regEx(/github:\\s*\"(?<value>[^\"]+)\"/);\nconst refRegexp = regEx(/ref:\\s*\"(?<value>[^\"]+)\"/);\nconst branchOrTagRegexp = regEx(/(?:branch|tag):\\s*\"(?<value>[^\"]+)\"/);\nconst organizationRegexp = regEx(/organization:\\s*\"(?<value>[^\"]+)\"/);\nconst commentMatchRegExp = regEx(/#.*$/);\nconst lockedVersionRegExp = regEx(\n /^\\s+\"(?<app>\\w+)\".*?\"(?<lockedVersion>\\d+\\.\\d+\\.\\d+)\"/,\n);\nconst hexRegexp = regEx(/hex:\\s*(?:\"(?<strValue>[^\"]+)\"|:(?<atomValue>\\w+))/);\nconst onlyValueRegexp = regEx(/only:\\s*(?<only>\\[[^\\]]*\\]|:\\w+)/);\nconst onlyEnvironmentsRegexp = regEx(/:(\\w+)/gm);\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n): Promise<PackageFileContent | null> {\n logger.trace(`mix.extractPackageFile(${packageFile})`);\n const deps = new Map<string, PackageDependency>();\n const contentArr = content\n .split(newlineRegex)\n .map((line) => line.replace(commentMatchRegExp, ''));\n for (let lineNumber = 0; lineNumber < contentArr.length; lineNumber += 1) {\n if (contentArr[lineNumber].match(depSectionRegExp)) {\n let depBuffer = '';\n do {\n depBuffer += `${contentArr[lineNumber]}\\n`;\n lineNumber += 1;\n } while (contentArr[lineNumber].trim() !== 'end');\n for (const depMatch of depBuffer.matchAll(depMatchRegExp)) {\n const { app, requirement, opts } = depMatch.groups!;\n const github = githubRegexp.exec(opts)?.groups?.value;\n const git = gitRegexp.exec(opts)?.groups?.value;\n const ref = refRegexp.exec(opts)?.groups?.value;\n const branchOrTag = branchOrTagRegexp.exec(opts)?.groups?.value;\n const organization = organizationRegexp.exec(opts)?.groups?.value;\n const hexGroups = hexRegexp.exec(opts)?.groups;\n const hex = hexGroups?.strValue ?? hexGroups?.atomValue;\n\n const onlyValue = onlyValueRegexp.exec(opts)?.groups?.only;\n const onlyEnvironments = [];\n if (onlyValue) {\n for (const match of onlyValue.matchAll(onlyEnvironmentsRegexp)) {\n onlyEnvironments.push(match[1]);\n }\n }\n\n const dep: PackageDependency = {\n depName: app,\n depType: 'prod',\n };\n\n if (git ?? github) {\n dep.currentDigest = ref;\n dep.currentValue = branchOrTag;\n dep.datasource = git ? GitTagsDatasource.id : GithubTagsDatasource.id;\n dep.packageName = git ?? github;\n } else {\n dep.currentValue = requirement;\n dep.datasource = HexDatasource.id;\n if (organization) {\n dep.packageName = `${app}:${organization}`;\n } else if (hex) {\n dep.packageName = hex;\n } else {\n dep.packageName = app;\n }\n\n if (requirement?.startsWith('==')) {\n dep.currentVersion = requirement.replace(regEx(/^==\\s*/), '');\n }\n }\n\n if (onlyValue !== undefined && !onlyEnvironments.includes('prod')) {\n dep.depType = 'dev';\n }\n\n deps.set(app, dep);\n logger.trace({ dep }, `setting ${app}`);\n }\n }\n }\n const lockFileName =\n (await findLocalSiblingOrParent(packageFile, 'mix.lock')) ?? 'mix.lock';\n const lockFileContent = await readLocalFile(lockFileName, 'utf8');\n\n if (lockFileContent) {\n const lockFileLines = lockFileContent.split(newlineRegex).slice(1, -1);\n\n for (const line of lockFileLines) {\n const groups = lockedVersionRegExp.exec(line)?.groups;\n if (groups?.app && groups?.lockedVersion) {\n const dep = deps.get(groups.app);\n if (!dep) {\n continue;\n }\n dep.lockedVersion = groups.lockedVersion;\n logger.trace(`Found ${groups.lockedVersion} for ${groups.app}`);\n }\n }\n }\n const depsArray = Array.from(deps.values());\n if (depsArray.length === 0) {\n return null;\n }\n return {\n deps: depsArray,\n lockFiles: lockFileContent ? [lockFileName] : undefined,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/mix/extract.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport {\n findLocalSiblingOrParent,\n readLocalFile,\n} from '../../../util/fs/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { HexDatasource } from '../../datasource/hex/index.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\n\nconst depSectionRegExp = regEx(/defp\\s+deps.*do/g);\nconst depMatchRegExp = regEx(\n /{:(?<app>\\w+)(?:\\s*,\\s*\"(?<requirement>[^\"]+)\")?(?:\\s*,\\s*(?<opts>[^}]+))?}/gm,\n);\nconst gitRegexp = regEx(/git:\\s*\"(?<value>[^\"]+)\"/);\nconst githubRegexp = regEx(/github:\\s*\"(?<value>[^\"]+)\"/);\nconst refRegexp = regEx(/ref:\\s*\"(?<value>[^\"]+)\"/);\nconst branchOrTagRegexp = regEx(/(?:branch|tag):\\s*\"(?<value>[^\"]+)\"/);\nconst organizationRegexp = regEx(/organization:\\s*\"(?<value>[^\"]+)\"/);\nconst commentMatchRegExp = regEx(/#.*$/);\nconst lockedVersionRegExp = regEx(\n /^\\s+\"(?<app>\\w+)\".*?\"(?<lockedVersion>\\d+\\.\\d+\\.\\d+)\"/,\n);\nconst hexRegexp = regEx(/hex:\\s*(?:\"(?<strValue>[^\"]+)\"|:(?<atomValue>\\w+))/);\nconst onlyValueRegexp = regEx(/only:\\s*(?<only>\\[[^\\]]*\\]|:\\w+)/);\nconst onlyEnvironmentsRegexp = regEx(/:(?<env>\\w+)/gm);\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n): Promise<PackageFileContent | null> {\n logger.trace(`mix.extractPackageFile(${packageFile})`);\n const deps = new Map<string, PackageDependency>();\n const contentArr = content\n .split(newlineRegex)\n .map((line) => line.replace(commentMatchRegExp, ''));\n for (let lineNumber = 0; lineNumber < contentArr.length; lineNumber += 1) {\n if (contentArr[lineNumber].match(depSectionRegExp)) {\n let depBuffer = '';\n do {\n depBuffer += `${contentArr[lineNumber]}\\n`;\n lineNumber += 1;\n } while (contentArr[lineNumber].trim() !== 'end');\n for (const depMatch of depBuffer.matchAll(depMatchRegExp)) {\n const { app, requirement, opts } = depMatch.groups!;\n const github = githubRegexp.exec(opts)?.groups?.value;\n const git = gitRegexp.exec(opts)?.groups?.value;\n const ref = refRegexp.exec(opts)?.groups?.value;\n const branchOrTag = branchOrTagRegexp.exec(opts)?.groups?.value;\n const organization = organizationRegexp.exec(opts)?.groups?.value;\n const hexGroups = hexRegexp.exec(opts)?.groups;\n const hex = hexGroups?.strValue ?? hexGroups?.atomValue;\n\n const onlyValue = onlyValueRegexp.exec(opts)?.groups?.only;\n const onlyEnvironments = [];\n if (onlyValue) {\n for (const match of onlyValue.matchAll(onlyEnvironmentsRegexp)) {\n onlyEnvironments.push(match.groups!.env);\n }\n }\n\n const dep: PackageDependency = {\n depName: app,\n depType: 'prod',\n };\n\n if (git ?? github) {\n dep.currentDigest = ref;\n dep.currentValue = branchOrTag;\n dep.datasource = git ? GitTagsDatasource.id : GithubTagsDatasource.id;\n dep.packageName = git ?? github;\n } else {\n dep.currentValue = requirement;\n dep.datasource = HexDatasource.id;\n if (organization) {\n dep.packageName = `${app}:${organization}`;\n } else if (hex) {\n dep.packageName = hex;\n } else {\n dep.packageName = app;\n }\n\n if (requirement?.startsWith('==')) {\n dep.currentVersion = requirement.replace(regEx(/^==\\s*/), '');\n }\n }\n\n if (onlyValue !== undefined && !onlyEnvironments.includes('prod')) {\n dep.depType = 'dev';\n }\n\n deps.set(app, dep);\n logger.trace({ dep }, `setting ${app}`);\n }\n }\n }\n const lockFileName =\n (await findLocalSiblingOrParent(packageFile, 'mix.lock')) ?? 'mix.lock';\n const lockFileContent = await readLocalFile(lockFileName, 'utf8');\n\n if (lockFileContent) {\n const lockFileLines = lockFileContent.split(newlineRegex).slice(1, -1);\n\n for (const line of lockFileLines) {\n const groups = lockedVersionRegExp.exec(line)?.groups;\n if (groups?.app && groups?.lockedVersion) {\n const dep = deps.get(groups.app);\n if (!dep) {\n continue;\n }\n dep.lockedVersion = groups.lockedVersion;\n logger.trace(`Found ${groups.lockedVersion} for ${groups.app}`);\n }\n }\n }\n const depsArray = Array.from(deps.values());\n if (depsArray.length === 0) {\n return null;\n }\n return {\n deps: depsArray,\n lockFiles: lockFileContent ? [lockFileName] : undefined,\n };\n}\n"],"mappings":";;;;;;;AAWA,MAAM,mBAAmB,MAAM,kBAAkB;AACjD,MAAM,iBAAiB,MACrB,+EACF;AACA,MAAM,YAAY,MAAM,0BAA0B;AAClD,MAAM,eAAe,MAAM,6BAA6B;AACxD,MAAM,YAAY,MAAM,0BAA0B;AAClD,MAAM,oBAAoB,MAAM,qCAAqC;AACrE,MAAM,qBAAqB,MAAM,mCAAmC;AACpE,MAAM,qBAAqB,MAAM,MAAM;AACvC,MAAM,sBAAsB,MAC1B,uDACF;AACA,MAAM,YAAY,MAAM,oDAAoD;AAC5E,MAAM,kBAAkB,MAAM,kCAAkC;AAChE,MAAM,yBAAyB,MAAM,gBAAgB;AAErD,eAAsB,mBACpB,SACA,aACoC;CACpC,OAAO,MAAM,0BAA0B,YAAY,EAAE;CACrD,MAAM,uBAAO,IAAI,IAA+B;CAChD,MAAM,aAAa,QAChB,MAAM,YAAY,CAAC,CACnB,KAAK,SAAS,KAAK,QAAQ,oBAAoB,EAAE,CAAC;CACrD,KAAK,IAAI,aAAa,GAAG,aAAa,WAAW,QAAQ,cAAc,GACrE,IAAI,WAAW,WAAW,CAAC,MAAM,gBAAgB,GAAG;EAClD,IAAI,YAAY;EAChB,GAAG;GACD,aAAa,GAAG,WAAW,YAAY;GACvC,cAAc;EAChB,SAAS,WAAW,WAAW,CAAC,KAAK,MAAM;EAC3C,KAAK,MAAM,YAAY,UAAU,SAAS,cAAc,GAAG;GACzD,MAAM,EAAE,KAAK,aAAa,SAAS,SAAS;GAC5C,MAAM,SAAS,aAAa,KAAK,IAAI,CAAC,EAAE,QAAQ;GAChD,MAAM,MAAM,UAAU,KAAK,IAAI,CAAC,EAAE,QAAQ;GAC1C,MAAM,MAAM,UAAU,KAAK,IAAI,CAAC,EAAE,QAAQ;GAC1C,MAAM,cAAc,kBAAkB,KAAK,IAAI,CAAC,EAAE,QAAQ;GAC1D,MAAM,eAAe,mBAAmB,KAAK,IAAI,CAAC,EAAE,QAAQ;GAC5D,MAAM,YAAY,UAAU,KAAK,IAAI,CAAC,EAAE;GACxC,MAAM,MAAM,WAAW,YAAY,WAAW;GAE9C,MAAM,YAAY,gBAAgB,KAAK,IAAI,CAAC,EAAE,QAAQ;GACtD,MAAM,mBAAmB,CAAC;GAC1B,IAAI,WACF,KAAK,MAAM,SAAS,UAAU,SAAS,sBAAsB,GAC3D,iBAAiB,KAAK,MAAM,OAAQ,GAAG;GAI3C,MAAM,MAAyB;IAC7B,SAAS;IACT,SAAS;GACX;GAEA,IAAI,OAAO,QAAQ;IACjB,IAAI,gBAAgB;IACpB,IAAI,eAAe;IACnB,IAAI,aAAa,MAAM,kBAAkB,KAAK,qBAAqB;IACnE,IAAI,cAAc,OAAO;GAC3B,OAAO;IACL,IAAI,eAAe;IACnB,IAAI,aAAa,cAAc;IAC/B,IAAI,cACF,IAAI,cAAc,GAAG,IAAI,GAAG;SACvB,IAAI,KACT,IAAI,cAAc;SAElB,IAAI,cAAc;IAGpB,IAAI,aAAa,WAAW,IAAI,GAC9B,IAAI,iBAAiB,YAAY,QAAQ,MAAM,QAAQ,GAAG,EAAE;GAEhE;GAEA,IAAI,cAAc,KAAA,KAAa,CAAC,iBAAiB,SAAS,MAAM,GAC9D,IAAI,UAAU;GAGhB,KAAK,IAAI,KAAK,GAAG;GACjB,OAAO,MAAM,EAAE,IAAI,GAAG,WAAW,KAAK;EACxC;CACF;CAEF,MAAM,eACH,MAAM,yBAAyB,aAAa,UAAU,KAAM;CAC/D,MAAM,kBAAkB,MAAM,cAAc,cAAc,MAAM;CAEhE,IAAI,iBAAiB;EACnB,MAAM,gBAAgB,gBAAgB,MAAM,YAAY,CAAC,CAAC,MAAM,GAAG,EAAE;EAErE,KAAK,MAAM,QAAQ,eAAe;GAChC,MAAM,SAAS,oBAAoB,KAAK,IAAI,CAAC,EAAE;GAC/C,IAAI,QAAQ,OAAO,QAAQ,eAAe;IACxC,MAAM,MAAM,KAAK,IAAI,OAAO,GAAG;IAC/B,IAAI,CAAC,KACH;IAEF,IAAI,gBAAgB,OAAO;IAC3B,OAAO,MAAM,SAAS,OAAO,cAAc,OAAO,OAAO,KAAK;GAChE;EACF;CACF;CACA,MAAM,YAAY,MAAM,KAAK,KAAK,OAAO,CAAC;CAC1C,IAAI,UAAU,WAAW,GACvB,OAAO;CAET,OAAO;EACL,MAAM;EACN,WAAW,kBAAkB,CAAC,YAAY,IAAI,KAAA;CAChD;AACF"}
@@ -9,7 +9,7 @@ import { NpmDatasource } from "../../../../datasource/npm/index.js";
9
9
  import { isString } from "@sindresorhus/is";
10
10
  import validateNpmPackageName from "validate-npm-package-name";
11
11
  //#region lib/modules/manager/npm/extract/common/dependency.ts
12
- const RE_REPOSITORY_GITHUB_SSH_FORMAT = regEx(/(?:git@)github.com:([^/]+)\/([^/]+?)(?:\.git)?$/);
12
+ const RE_REPOSITORY_GITHUB_SSH_FORMAT = regEx(/(?:git@)github.com:(?<owner>[^/]+)\/(?<repo>[^/]+?)(?:\.git)?$/);
13
13
  function parseDepName(depType, key) {
14
14
  if (depType !== "resolutions") return key;
15
15
  const parts = key.split("/");
@@ -22,7 +22,7 @@ function parseDepName(depType, key) {
22
22
  } else segments.push(part);
23
23
  }
24
24
  const lastSegment = segments.at(-1);
25
- const [, depName] = coerceArray(regEx(/^((?:@[^/]+\/)?[^@]+)/).exec(lastSegment ?? ""));
25
+ const [, depName] = coerceArray(regEx(/^(?<depName>(?:@[^/]+\/)?[^@]+)/).exec(lastSegment ?? ""));
26
26
  return depName;
27
27
  }
28
28
  function extractDependency(depType, depName, input) {
@@ -117,8 +117,8 @@ function extractDependency(depType, depName, input) {
117
117
  }
118
118
  [githubOwner, githubRepo] = githubRepoSplit;
119
119
  } else {
120
- githubOwner = matchUrlSshFormat[1];
121
- githubRepo = matchUrlSshFormat[2];
120
+ githubOwner = matchUrlSshFormat.groups.owner;
121
+ githubRepo = matchUrlSshFormat.groups.repo;
122
122
  githubOwnerRepo = `${githubOwner}/${githubRepo}`;
123
123
  }
124
124
  const githubOwnerRegex = regEx(/^[a-z\d](?:-?[a-z\d]){0,38}$/i);
@@ -1 +1 @@
1
- {"version":3,"file":"dependency.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/extract/common/dependency.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport validateNpmPackageName from 'validate-npm-package-name';\nimport { logger } from '../../../../../logger/index.ts';\nimport { coerceArray } from '../../../../../util/array.ts';\nimport type { ConstraintName } from '../../../../../util/exec/types.ts';\nimport { isConstraintName } from '../../../../../util/exec/types.ts';\nimport { regEx } from '../../../../../util/regex.ts';\nimport { GithubTagsDatasource } from '../../../../datasource/github-tags/index.ts';\nimport { NodeVersionDatasource } from '../../../../datasource/node-version/index.ts';\nimport { NpmDatasource } from '../../../../datasource/npm/index.ts';\nimport {\n api,\n isValid,\n isVersion,\n id as npmVersioningId,\n} from '../../../../versioning/npm/index.ts';\nimport type { PackageDependency } from '../../../types.ts';\n\nconst RE_REPOSITORY_GITHUB_SSH_FORMAT = regEx(\n /(?:git@)github.com:([^/]+)\\/([^/]+?)(?:\\.git)?$/,\n);\n\nexport function parseDepName(depType: string, key: string): string {\n if (depType !== 'resolutions') {\n return key;\n }\n\n // Yarn selective dependency resolutions may nest a path of parent\n // packages before the target package, e.g. `parent/child` or\n // `@scope/parent/child`, and any segment (including the last) may carry\n // a `@range` suffix used to disambiguate which version of that package\n // to match, e.g. `@cypress/request/qs@~6.14.1`.\n const parts = key.split('/');\n const segments: string[] = [];\n for (let i = 0; i < parts.length; i += 1) {\n const part = parts[i];\n if (part.startsWith('@') && i + 1 < parts.length) {\n i += 1;\n segments.push(`${part}/${parts[i]}`);\n } else {\n segments.push(part);\n }\n }\n\n const lastSegment = segments.at(-1);\n const [, depName] = coerceArray(\n regEx(/^((?:@[^/]+\\/)?[^@]+)/).exec(lastSegment ?? ''),\n );\n return depName;\n}\n\nexport function extractDependency(\n depType: string,\n depName: string,\n input: string,\n): PackageDependency {\n const dep: PackageDependency = {};\n if (!validateNpmPackageName(depName).validForOldPackages) {\n dep.skipReason = 'invalid-name';\n return dep;\n }\n if (!isString(input)) {\n dep.skipReason = 'invalid-value';\n return dep;\n }\n dep.currentValue = input.trim();\n if (depType === 'engines' || depType === 'packageManager') {\n if (depName === 'node') {\n dep.datasource = NodeVersionDatasource.id;\n } else if (depName === 'yarn') {\n dep.datasource = NpmDatasource.id;\n dep.commitMessageTopic = 'Yarn';\n const major =\n isVersion(dep.currentValue) && api.getMajor(dep.currentValue);\n if (major && major > 1) {\n dep.packageName = '@yarnpkg/cli';\n }\n } else if (depName === 'npm') {\n dep.datasource = NpmDatasource.id;\n dep.commitMessageTopic = 'npm';\n } else if (depName === 'pnpm') {\n dep.datasource = NpmDatasource.id;\n dep.commitMessageTopic = 'pnpm';\n } else if (depName === 'vscode') {\n dep.datasource = GithubTagsDatasource.id;\n dep.packageName = 'microsoft/vscode';\n dep.versioning = npmVersioningId;\n } else if (depName === 'bun') {\n dep.datasource = NpmDatasource.id;\n dep.commitMessageTopic = 'Bun';\n } else {\n dep.skipReason = 'unknown-engines';\n }\n if (!isValid(dep.currentValue)) {\n dep.skipReason = 'unspecified-version';\n }\n return dep;\n }\n\n // support for volta\n if (depType === 'volta') {\n if (depName === 'node') {\n dep.datasource = NodeVersionDatasource.id;\n } else if (depName === 'yarn') {\n dep.datasource = NpmDatasource.id;\n dep.commitMessageTopic = 'Yarn';\n const major =\n isVersion(dep.currentValue) && api.getMajor(dep.currentValue);\n if (major && major > 1) {\n dep.packageName = '@yarnpkg/cli';\n }\n } else if (depName === 'npm') {\n dep.datasource = NpmDatasource.id;\n } else if (depName === 'pnpm') {\n dep.datasource = NpmDatasource.id;\n dep.commitMessageTopic = 'pnpm';\n } else {\n dep.skipReason = 'unknown-volta';\n }\n if (!isValid(dep.currentValue)) {\n dep.skipReason = 'unspecified-version';\n }\n return dep;\n }\n\n if (dep.currentValue.startsWith('npm:')) {\n dep.npmPackageAlias = true;\n const valSplit = dep.currentValue.replace('npm:', '').split('@');\n if (valSplit.length === 1) {\n dep.packageName = depName;\n dep.currentValue = valSplit[0];\n } else if (valSplit.length === 2) {\n dep.packageName = valSplit[0];\n dep.currentValue = valSplit[1];\n } else if (valSplit.length === 3) {\n dep.packageName = `${valSplit[0]}@${valSplit[1]}`;\n dep.currentValue = valSplit[2];\n } else {\n logger.debug(\n `Invalid npm package alias for dependency: \"${depName}\":\"${dep.currentValue}\"`,\n );\n }\n }\n if (dep.currentValue.startsWith('file:')) {\n dep.skipReason = 'file';\n return dep;\n }\n\n if (isValid(dep.currentValue)) {\n dep.datasource = NpmDatasource.id;\n if (dep.currentValue === '') {\n dep.skipReason = 'empty';\n }\n return dep;\n }\n const hashSplit = dep.currentValue.split('#');\n if (hashSplit.length !== 2) {\n dep.skipReason = 'unspecified-version';\n return dep;\n }\n const [depNamePart, depRefPart] = hashSplit;\n\n let githubOwnerRepo: string;\n let githubOwner: string;\n let githubRepo: string;\n const matchUrlSshFormat = RE_REPOSITORY_GITHUB_SSH_FORMAT.exec(depNamePart);\n if (matchUrlSshFormat === null) {\n githubOwnerRepo = depNamePart\n .replace(regEx(/^github:/), '')\n .replace(regEx(/^git\\+/), '')\n .replace(regEx(/^https:\\/\\/github\\.com\\//), '')\n .replace(regEx(/\\.git$/), '');\n const githubRepoSplit = githubOwnerRepo.split('/');\n if (githubRepoSplit.length !== 2) {\n dep.skipReason = 'unspecified-version';\n return dep;\n }\n [githubOwner, githubRepo] = githubRepoSplit;\n } else {\n githubOwner = matchUrlSshFormat[1];\n githubRepo = matchUrlSshFormat[2];\n githubOwnerRepo = `${githubOwner}/${githubRepo}`;\n }\n // combined with the length check below, this is equivalent to\n // /^[a-z\\d](?:[a-z\\d]|-(?=[a-z\\d])){0,38}$/i without the lookahead\n const githubOwnerRegex = regEx(/^[a-z\\d](?:-?[a-z\\d]){0,38}$/i);\n const githubRepoRegex = regEx(/^[a-zA-Z0-9._-]{1,100}$/);\n if (\n githubOwner.length > 39 ||\n !githubOwnerRegex.test(githubOwner) ||\n !githubRepoRegex.test(githubRepo)\n ) {\n dep.skipReason = 'unspecified-version';\n return dep;\n }\n if (isVersion(depRefPart)) {\n dep.currentRawValue = dep.currentValue;\n dep.currentValue = depRefPart;\n dep.datasource = GithubTagsDatasource.id;\n dep.versioning = npmVersioningId;\n dep.packageName = githubOwnerRepo;\n dep.pinDigests = false;\n } else if (\n regEx(/^[0-9a-f]{7}$/).test(depRefPart) ||\n regEx(/^[0-9a-f]{40}$/).test(depRefPart)\n ) {\n dep.currentRawValue = dep.currentValue;\n dep.currentValue = null;\n dep.currentDigest = depRefPart;\n dep.datasource = GithubTagsDatasource.id;\n dep.versioning = npmVersioningId;\n dep.packageName = githubOwnerRepo;\n } else {\n // <protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]\n // https://docs.npmjs.com/cli/v10/configuring-npm/package-json#git-urls-as-dependencies\n const len = 7; // length of 'semver:'\n const maybeVersion = depRefPart.substring(len);\n\n if (depRefPart.startsWith('semver:') && isValid(maybeVersion)) {\n dep.currentRawValue = dep.currentValue;\n dep.currentValue = maybeVersion;\n dep.datasource = GithubTagsDatasource.id;\n dep.versioning = npmVersioningId;\n dep.packageName = githubOwnerRepo;\n dep.pinDigests = false;\n } else {\n dep.skipReason = 'unversioned-reference';\n return dep;\n }\n }\n dep.sourceUrl = `https://github.com/${githubOwnerRepo}`;\n dep.gitRef = true;\n return dep;\n}\n\nexport function getExtractedConstraints(\n deps: PackageDependency[],\n): Partial<Record<ConstraintName, string>> {\n const extractedConstraints: Partial<Record<ConstraintName, string>> = {};\n const constraints: ConstraintName[] = [\n 'bun',\n 'node',\n 'yarn',\n 'npm',\n 'pnpm',\n 'vscode',\n ];\n for (const dep of deps) {\n if (\n !dep.skipReason &&\n (dep.depType === 'engines' || dep.depType === 'packageManager') &&\n dep.depName &&\n isConstraintName(dep.depName) &&\n constraints.includes(dep.depName) &&\n isString(dep.currentValue)\n ) {\n extractedConstraints[dep.depName] = dep.currentValue;\n }\n }\n return extractedConstraints;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dependency.js","names":[],"sources":["../../../../../../lib/modules/manager/npm/extract/common/dependency.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport validateNpmPackageName from 'validate-npm-package-name';\nimport { logger } from '../../../../../logger/index.ts';\nimport { coerceArray } from '../../../../../util/array.ts';\nimport type { ConstraintName } from '../../../../../util/exec/types.ts';\nimport { isConstraintName } from '../../../../../util/exec/types.ts';\nimport { regEx } from '../../../../../util/regex.ts';\nimport { GithubTagsDatasource } from '../../../../datasource/github-tags/index.ts';\nimport { NodeVersionDatasource } from '../../../../datasource/node-version/index.ts';\nimport { NpmDatasource } from '../../../../datasource/npm/index.ts';\nimport {\n api,\n isValid,\n isVersion,\n id as npmVersioningId,\n} from '../../../../versioning/npm/index.ts';\nimport type { PackageDependency } from '../../../types.ts';\n\nconst RE_REPOSITORY_GITHUB_SSH_FORMAT = regEx(\n /(?:git@)github.com:(?<owner>[^/]+)\\/(?<repo>[^/]+?)(?:\\.git)?$/,\n);\n\nexport function parseDepName(depType: string, key: string): string {\n if (depType !== 'resolutions') {\n return key;\n }\n\n // Yarn selective dependency resolutions may nest a path of parent\n // packages before the target package, e.g. `parent/child` or\n // `@scope/parent/child`, and any segment (including the last) may carry\n // a `@range` suffix used to disambiguate which version of that package\n // to match, e.g. `@cypress/request/qs@~6.14.1`.\n const parts = key.split('/');\n const segments: string[] = [];\n for (let i = 0; i < parts.length; i += 1) {\n const part = parts[i];\n if (part.startsWith('@') && i + 1 < parts.length) {\n i += 1;\n segments.push(`${part}/${parts[i]}`);\n } else {\n segments.push(part);\n }\n }\n\n const lastSegment = segments.at(-1);\n const [, depName] = coerceArray(\n regEx(/^(?<depName>(?:@[^/]+\\/)?[^@]+)/).exec(lastSegment ?? ''),\n );\n return depName;\n}\n\nexport function extractDependency(\n depType: string,\n depName: string,\n input: string,\n): PackageDependency {\n const dep: PackageDependency = {};\n if (!validateNpmPackageName(depName).validForOldPackages) {\n dep.skipReason = 'invalid-name';\n return dep;\n }\n if (!isString(input)) {\n dep.skipReason = 'invalid-value';\n return dep;\n }\n dep.currentValue = input.trim();\n if (depType === 'engines' || depType === 'packageManager') {\n if (depName === 'node') {\n dep.datasource = NodeVersionDatasource.id;\n } else if (depName === 'yarn') {\n dep.datasource = NpmDatasource.id;\n dep.commitMessageTopic = 'Yarn';\n const major =\n isVersion(dep.currentValue) && api.getMajor(dep.currentValue);\n if (major && major > 1) {\n dep.packageName = '@yarnpkg/cli';\n }\n } else if (depName === 'npm') {\n dep.datasource = NpmDatasource.id;\n dep.commitMessageTopic = 'npm';\n } else if (depName === 'pnpm') {\n dep.datasource = NpmDatasource.id;\n dep.commitMessageTopic = 'pnpm';\n } else if (depName === 'vscode') {\n dep.datasource = GithubTagsDatasource.id;\n dep.packageName = 'microsoft/vscode';\n dep.versioning = npmVersioningId;\n } else if (depName === 'bun') {\n dep.datasource = NpmDatasource.id;\n dep.commitMessageTopic = 'Bun';\n } else {\n dep.skipReason = 'unknown-engines';\n }\n if (!isValid(dep.currentValue)) {\n dep.skipReason = 'unspecified-version';\n }\n return dep;\n }\n\n // support for volta\n if (depType === 'volta') {\n if (depName === 'node') {\n dep.datasource = NodeVersionDatasource.id;\n } else if (depName === 'yarn') {\n dep.datasource = NpmDatasource.id;\n dep.commitMessageTopic = 'Yarn';\n const major =\n isVersion(dep.currentValue) && api.getMajor(dep.currentValue);\n if (major && major > 1) {\n dep.packageName = '@yarnpkg/cli';\n }\n } else if (depName === 'npm') {\n dep.datasource = NpmDatasource.id;\n } else if (depName === 'pnpm') {\n dep.datasource = NpmDatasource.id;\n dep.commitMessageTopic = 'pnpm';\n } else {\n dep.skipReason = 'unknown-volta';\n }\n if (!isValid(dep.currentValue)) {\n dep.skipReason = 'unspecified-version';\n }\n return dep;\n }\n\n if (dep.currentValue.startsWith('npm:')) {\n dep.npmPackageAlias = true;\n const valSplit = dep.currentValue.replace('npm:', '').split('@');\n if (valSplit.length === 1) {\n dep.packageName = depName;\n dep.currentValue = valSplit[0];\n } else if (valSplit.length === 2) {\n dep.packageName = valSplit[0];\n dep.currentValue = valSplit[1];\n } else if (valSplit.length === 3) {\n dep.packageName = `${valSplit[0]}@${valSplit[1]}`;\n dep.currentValue = valSplit[2];\n } else {\n logger.debug(\n `Invalid npm package alias for dependency: \"${depName}\":\"${dep.currentValue}\"`,\n );\n }\n }\n if (dep.currentValue.startsWith('file:')) {\n dep.skipReason = 'file';\n return dep;\n }\n\n if (isValid(dep.currentValue)) {\n dep.datasource = NpmDatasource.id;\n if (dep.currentValue === '') {\n dep.skipReason = 'empty';\n }\n return dep;\n }\n const hashSplit = dep.currentValue.split('#');\n if (hashSplit.length !== 2) {\n dep.skipReason = 'unspecified-version';\n return dep;\n }\n const [depNamePart, depRefPart] = hashSplit;\n\n let githubOwnerRepo: string;\n let githubOwner: string;\n let githubRepo: string;\n const matchUrlSshFormat = RE_REPOSITORY_GITHUB_SSH_FORMAT.exec(depNamePart);\n if (matchUrlSshFormat === null) {\n githubOwnerRepo = depNamePart\n .replace(regEx(/^github:/), '')\n .replace(regEx(/^git\\+/), '')\n .replace(regEx(/^https:\\/\\/github\\.com\\//), '')\n .replace(regEx(/\\.git$/), '');\n const githubRepoSplit = githubOwnerRepo.split('/');\n if (githubRepoSplit.length !== 2) {\n dep.skipReason = 'unspecified-version';\n return dep;\n }\n [githubOwner, githubRepo] = githubRepoSplit;\n } else {\n githubOwner = matchUrlSshFormat.groups!.owner;\n githubRepo = matchUrlSshFormat.groups!.repo;\n githubOwnerRepo = `${githubOwner}/${githubRepo}`;\n }\n // combined with the length check below, this is equivalent to\n // /^[a-z\\d](?:[a-z\\d]|-(?=[a-z\\d])){0,38}$/i without the lookahead\n const githubOwnerRegex = regEx(/^[a-z\\d](?:-?[a-z\\d]){0,38}$/i);\n const githubRepoRegex = regEx(/^[a-zA-Z0-9._-]{1,100}$/);\n if (\n githubOwner.length > 39 ||\n !githubOwnerRegex.test(githubOwner) ||\n !githubRepoRegex.test(githubRepo)\n ) {\n dep.skipReason = 'unspecified-version';\n return dep;\n }\n if (isVersion(depRefPart)) {\n dep.currentRawValue = dep.currentValue;\n dep.currentValue = depRefPart;\n dep.datasource = GithubTagsDatasource.id;\n dep.versioning = npmVersioningId;\n dep.packageName = githubOwnerRepo;\n dep.pinDigests = false;\n } else if (\n regEx(/^[0-9a-f]{7}$/).test(depRefPart) ||\n regEx(/^[0-9a-f]{40}$/).test(depRefPart)\n ) {\n dep.currentRawValue = dep.currentValue;\n dep.currentValue = null;\n dep.currentDigest = depRefPart;\n dep.datasource = GithubTagsDatasource.id;\n dep.versioning = npmVersioningId;\n dep.packageName = githubOwnerRepo;\n } else {\n // <protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]\n // https://docs.npmjs.com/cli/v10/configuring-npm/package-json#git-urls-as-dependencies\n const len = 7; // length of 'semver:'\n const maybeVersion = depRefPart.substring(len);\n\n if (depRefPart.startsWith('semver:') && isValid(maybeVersion)) {\n dep.currentRawValue = dep.currentValue;\n dep.currentValue = maybeVersion;\n dep.datasource = GithubTagsDatasource.id;\n dep.versioning = npmVersioningId;\n dep.packageName = githubOwnerRepo;\n dep.pinDigests = false;\n } else {\n dep.skipReason = 'unversioned-reference';\n return dep;\n }\n }\n dep.sourceUrl = `https://github.com/${githubOwnerRepo}`;\n dep.gitRef = true;\n return dep;\n}\n\nexport function getExtractedConstraints(\n deps: PackageDependency[],\n): Partial<Record<ConstraintName, string>> {\n const extractedConstraints: Partial<Record<ConstraintName, string>> = {};\n const constraints: ConstraintName[] = [\n 'bun',\n 'node',\n 'yarn',\n 'npm',\n 'pnpm',\n 'vscode',\n ];\n for (const dep of deps) {\n if (\n !dep.skipReason &&\n (dep.depType === 'engines' || dep.depType === 'packageManager') &&\n dep.depName &&\n isConstraintName(dep.depName) &&\n constraints.includes(dep.depName) &&\n isString(dep.currentValue)\n ) {\n extractedConstraints[dep.depName] = dep.currentValue;\n }\n }\n return extractedConstraints;\n}\n"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { Result } from "../../../../util/result.js";
4
4
  import { YarnConfig } from "../schema.js";
5
5
  import { isTruthy } from "@sindresorhus/is";
6
6
  //#region lib/modules/manager/npm/extract/yarnrc.ts
7
- const registryRegEx = regEx(/^"?(@(?<scope>[^:]+):)?registry"? "?(?<registryUrl>[^"]+)"?$/gm);
7
+ const registryRegEx = regEx(/^"?(?:@(?<scope>[^:]+):)?registry"? "?(?<registryUrl>[^"]+)"?$/gm);
8
8
  function loadConfigFromLegacyYarnrc(legacyYarnrc) {
9
9
  const registryMatches = [...legacyYarnrc.matchAll(registryRegEx)].map((m) => m.groups).filter(isTruthy);
10
10
  const yarnrcConfig = {};
@@ -1 +1 @@
1
- {"version":3,"file":"yarnrc.js","names":[],"sources":["../../../../../lib/modules/manager/npm/extract/yarnrc.ts"],"sourcesContent":["import { isTruthy } from '@sindresorhus/is';\nimport { logger } from '../../../../logger/index.ts';\nimport { regEx } from '../../../../util/regex.ts';\nimport { Result } from '../../../../util/result.ts';\nimport { YarnConfig } from '../schema.ts';\n\nconst registryRegEx = regEx(\n /^\"?(@(?<scope>[^:]+):)?registry\"? \"?(?<registryUrl>[^\"]+)\"?$/gm,\n);\n\nexport function loadConfigFromLegacyYarnrc(\n legacyYarnrc: string,\n): YarnConfig | null {\n const registryMatches = [...legacyYarnrc.matchAll(registryRegEx)]\n .map((m) => m.groups)\n .filter(isTruthy);\n\n const yarnrcConfig: YarnConfig = {};\n for (const registryMatch of registryMatches) {\n if (registryMatch.scope) {\n yarnrcConfig.npmScopes ??= {};\n yarnrcConfig.npmScopes[registryMatch.scope] ??= {};\n yarnrcConfig.npmScopes[registryMatch.scope].npmRegistryServer =\n registryMatch.registryUrl;\n } else {\n yarnrcConfig.npmRegistryServer = registryMatch.registryUrl;\n }\n }\n return yarnrcConfig;\n}\n\nexport function loadConfigFromYarnrcYml(yarnrcYml: string): YarnConfig | null {\n return Result.parse(yarnrcYml, YarnConfig)\n .onError((err) => {\n logger.warn({ yarnrcYml, err }, `Failed to load yarnrc file`);\n })\n .unwrapOrNull();\n}\n\nexport function resolveRegistryUrl(\n packageName: string,\n yarnrcConfig: YarnConfig,\n): string | null {\n if (yarnrcConfig.npmScopes) {\n for (const scope in yarnrcConfig.npmScopes) {\n if (packageName.startsWith(`@${scope}/`)) {\n return yarnrcConfig.npmScopes[scope].npmRegistryServer ?? null;\n }\n }\n }\n if (yarnrcConfig.npmRegistryServer) {\n return yarnrcConfig.npmRegistryServer;\n }\n return null;\n}\n"],"mappings":";;;;;;AAMA,MAAM,gBAAgB,MACpB,gEACF;AAEA,SAAgB,2BACd,cACmB;CACnB,MAAM,kBAAkB,CAAC,GAAG,aAAa,SAAS,aAAa,CAAC,CAAC,CAC9D,KAAK,MAAM,EAAE,MAAM,CAAC,CACpB,OAAO,QAAQ;CAElB,MAAM,eAA2B,CAAC;CAClC,KAAK,MAAM,iBAAiB,iBAC1B,IAAI,cAAc,OAAO;EACvB,aAAa,cAAc,CAAC;EAC5B,aAAa,UAAU,cAAc,WAAW,CAAC;EACjD,aAAa,UAAU,cAAc,MAAM,CAAC,oBAC1C,cAAc;CAClB,OACE,aAAa,oBAAoB,cAAc;CAGnD,OAAO;AACT;AAEA,SAAgB,wBAAwB,WAAsC;CAC5E,OAAO,OAAO,MAAM,WAAW,UAAU,CAAC,CACvC,SAAS,QAAQ;EAChB,OAAO,KAAK;GAAE;GAAW;EAAI,GAAG,4BAA4B;CAC9D,CAAC,CAAC,CACD,aAAa;AAClB;AAEA,SAAgB,mBACd,aACA,cACe;CACf,IAAI,aAAa,WACV;OAAA,MAAM,SAAS,aAAa,WAC/B,IAAI,YAAY,WAAW,IAAI,MAAM,EAAE,GACrC,OAAO,aAAa,UAAU,MAAM,CAAC,qBAAqB;CAAA;CAIhE,IAAI,aAAa,mBACf,OAAO,aAAa;CAEtB,OAAO;AACT"}
1
+ {"version":3,"file":"yarnrc.js","names":[],"sources":["../../../../../lib/modules/manager/npm/extract/yarnrc.ts"],"sourcesContent":["import { isTruthy } from '@sindresorhus/is';\nimport { logger } from '../../../../logger/index.ts';\nimport { regEx } from '../../../../util/regex.ts';\nimport { Result } from '../../../../util/result.ts';\nimport { YarnConfig } from '../schema.ts';\n\nconst registryRegEx = regEx(\n /^\"?(?:@(?<scope>[^:]+):)?registry\"? \"?(?<registryUrl>[^\"]+)\"?$/gm,\n);\n\nexport function loadConfigFromLegacyYarnrc(\n legacyYarnrc: string,\n): YarnConfig | null {\n const registryMatches = [...legacyYarnrc.matchAll(registryRegEx)]\n .map((m) => m.groups)\n .filter(isTruthy);\n\n const yarnrcConfig: YarnConfig = {};\n for (const registryMatch of registryMatches) {\n if (registryMatch.scope) {\n yarnrcConfig.npmScopes ??= {};\n yarnrcConfig.npmScopes[registryMatch.scope] ??= {};\n yarnrcConfig.npmScopes[registryMatch.scope].npmRegistryServer =\n registryMatch.registryUrl;\n } else {\n yarnrcConfig.npmRegistryServer = registryMatch.registryUrl;\n }\n }\n return yarnrcConfig;\n}\n\nexport function loadConfigFromYarnrcYml(yarnrcYml: string): YarnConfig | null {\n return Result.parse(yarnrcYml, YarnConfig)\n .onError((err) => {\n logger.warn({ yarnrcYml, err }, `Failed to load yarnrc file`);\n })\n .unwrapOrNull();\n}\n\nexport function resolveRegistryUrl(\n packageName: string,\n yarnrcConfig: YarnConfig,\n): string | null {\n if (yarnrcConfig.npmScopes) {\n for (const scope in yarnrcConfig.npmScopes) {\n if (packageName.startsWith(`@${scope}/`)) {\n return yarnrcConfig.npmScopes[scope].npmRegistryServer ?? null;\n }\n }\n }\n if (yarnrcConfig.npmRegistryServer) {\n return yarnrcConfig.npmRegistryServer;\n }\n return null;\n}\n"],"mappings":";;;;;;AAMA,MAAM,gBAAgB,MACpB,kEACF;AAEA,SAAgB,2BACd,cACmB;CACnB,MAAM,kBAAkB,CAAC,GAAG,aAAa,SAAS,aAAa,CAAC,CAAC,CAC9D,KAAK,MAAM,EAAE,MAAM,CAAC,CACpB,OAAO,QAAQ;CAElB,MAAM,eAA2B,CAAC;CAClC,KAAK,MAAM,iBAAiB,iBAC1B,IAAI,cAAc,OAAO;EACvB,aAAa,cAAc,CAAC;EAC5B,aAAa,UAAU,cAAc,WAAW,CAAC;EACjD,aAAa,UAAU,cAAc,MAAM,CAAC,oBAC1C,cAAc;CAClB,OACE,aAAa,oBAAoB,cAAc;CAGnD,OAAO;AACT;AAEA,SAAgB,wBAAwB,WAAsC;CAC5E,OAAO,OAAO,MAAM,WAAW,UAAU,CAAC,CACvC,SAAS,QAAQ;EAChB,OAAO,KAAK;GAAE;GAAW;EAAI,GAAG,4BAA4B;CAC9D,CAAC,CAAC,CACD,aAAa;AAClB;AAEA,SAAgB,mBACd,aACA,cACe;CACf,IAAI,aAAa,WACV;OAAA,MAAM,SAAS,aAAa,WAC/B,IAAI,YAAY,WAAW,IAAI,MAAM,EAAE,GACrC,OAAO,aAAa,UAAU,MAAM,CAAC,qBAAqB;CAAA;CAIhE,IAAI,aAAa,mBACf,OAAO,aAAa;CAEtB,OAAO;AACT"}