renovate 44.30.0 → 44.30.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 (203) hide show
  1. package/dist/config/migration.js +3 -3
  2. package/dist/config/migration.js.map +1 -1
  3. package/dist/config/migrations/custom/azure-gitlab-automerge-migration.js.map +1 -1
  4. package/dist/config/migrations/custom/dep-types-migration.js.map +1 -1
  5. package/dist/config/options/env.js +2 -1
  6. package/dist/config/options/env.js.map +1 -1
  7. package/dist/config/options/index.js +1 -1
  8. package/dist/config/options/index.js.map +1 -1
  9. package/dist/global-config-option-defaults.generated.js +1 -1
  10. package/dist/global-config-option-defaults.generated.js.map +1 -1
  11. package/dist/logger/utils.js +3 -3
  12. package/dist/logger/utils.js.map +1 -1
  13. package/dist/modules/datasource/crate/index.js +3 -3
  14. package/dist/modules/datasource/crate/index.js.map +1 -1
  15. package/dist/modules/datasource/go/base.js +1 -1
  16. package/dist/modules/datasource/go/base.js.map +1 -1
  17. package/dist/modules/datasource/go/goproxy-parser.js +1 -1
  18. package/dist/modules/datasource/go/goproxy-parser.js.map +1 -1
  19. package/dist/modules/datasource/hexpm-bob/index.js +3 -3
  20. package/dist/modules/datasource/hexpm-bob/index.js.map +1 -1
  21. package/dist/modules/datasource/maven/util.js +1 -1
  22. package/dist/modules/datasource/maven/util.js.map +1 -1
  23. package/dist/modules/datasource/packagist/schema.js +2 -1
  24. package/dist/modules/datasource/packagist/schema.js.map +1 -1
  25. package/dist/modules/datasource/pypi/common.js +1 -1
  26. package/dist/modules/datasource/pypi/common.js.map +1 -1
  27. package/dist/modules/datasource/rpm/repomd.js +2 -1
  28. package/dist/modules/datasource/rpm/repomd.js.map +1 -1
  29. package/dist/modules/datasource/sbt-package/util.js +3 -3
  30. package/dist/modules/datasource/sbt-package/util.js.map +1 -1
  31. package/dist/modules/datasource/terraform-provider/index.js +1 -1
  32. package/dist/modules/datasource/terraform-provider/index.js.map +1 -1
  33. package/dist/modules/manager/ansible-galaxy/util.js +4 -4
  34. package/dist/modules/manager/ansible-galaxy/util.js.map +1 -1
  35. package/dist/modules/manager/asdf/upgradeable-tooling.js +5 -5
  36. package/dist/modules/manager/asdf/upgradeable-tooling.js.map +1 -1
  37. package/dist/modules/manager/bazel-module/extract.js +2 -1
  38. package/dist/modules/manager/bazel-module/extract.js.map +1 -1
  39. package/dist/modules/manager/bazel-module/parser/repo-rules.js +1 -1
  40. package/dist/modules/manager/bazel-module/parser/repo-rules.js.map +1 -1
  41. package/dist/modules/manager/bitbucket-pipelines/extract.js +2 -2
  42. package/dist/modules/manager/bitbucket-pipelines/extract.js.map +1 -1
  43. package/dist/modules/manager/bun/utils.js +2 -1
  44. package/dist/modules/manager/bun/utils.js.map +1 -1
  45. package/dist/modules/manager/bundler/extract.js +1 -1
  46. package/dist/modules/manager/bundler/extract.js.map +1 -1
  47. package/dist/modules/manager/cake/index.js.map +1 -1
  48. package/dist/modules/manager/composer/schema.js +2 -2
  49. package/dist/modules/manager/composer/schema.js.map +1 -1
  50. package/dist/modules/manager/cpanfile/language.js.map +1 -1
  51. package/dist/modules/manager/cpanfile/parser.js +4 -4
  52. package/dist/modules/manager/cpanfile/parser.js.map +1 -1
  53. package/dist/modules/manager/crossplane/extract.js +2 -1
  54. package/dist/modules/manager/crossplane/extract.js.map +1 -1
  55. package/dist/modules/manager/deps-edn/extract.js +1 -1
  56. package/dist/modules/manager/deps-edn/extract.js.map +1 -1
  57. package/dist/modules/manager/deps-edn/parser.js.map +1 -1
  58. package/dist/modules/manager/dockerfile/extract.js +2 -2
  59. package/dist/modules/manager/dockerfile/extract.js.map +1 -1
  60. package/dist/modules/manager/flux/extract.js +2 -2
  61. package/dist/modules/manager/flux/extract.js.map +1 -1
  62. package/dist/modules/manager/git-submodules/extract.js +1 -1
  63. package/dist/modules/manager/git-submodules/extract.js.map +1 -1
  64. package/dist/modules/manager/gomod/artifacts.js +1 -1
  65. package/dist/modules/manager/gomod/artifacts.js.map +1 -1
  66. package/dist/modules/manager/gradle/extract/consistent-versions-plugin.js +2 -2
  67. package/dist/modules/manager/gradle/extract/consistent-versions-plugin.js.map +1 -1
  68. package/dist/modules/manager/gradle-wrapper/artifacts.js +2 -2
  69. package/dist/modules/manager/gradle-wrapper/artifacts.js.map +1 -1
  70. package/dist/modules/manager/helmv3/utils.js +2 -1
  71. package/dist/modules/manager/helmv3/utils.js.map +1 -1
  72. package/dist/modules/manager/hermit/extract.js +1 -1
  73. package/dist/modules/manager/hermit/extract.js.map +1 -1
  74. package/dist/modules/manager/homebrew/utils.js +3 -3
  75. package/dist/modules/manager/homebrew/utils.js.map +1 -1
  76. package/dist/modules/manager/jsonnet-bundler/extract.js +2 -1
  77. package/dist/modules/manager/jsonnet-bundler/extract.js.map +1 -1
  78. package/dist/modules/manager/leiningen/extract.js +2 -2
  79. package/dist/modules/manager/leiningen/extract.js.map +1 -1
  80. package/dist/modules/manager/maven-wrapper/artifacts.js +6 -6
  81. package/dist/modules/manager/maven-wrapper/artifacts.js.map +1 -1
  82. package/dist/modules/manager/mise/backends.js +3 -3
  83. package/dist/modules/manager/mise/backends.js.map +1 -1
  84. package/dist/modules/manager/mise/upgradeable-tooling.js +1 -1
  85. package/dist/modules/manager/mise/upgradeable-tooling.js.map +1 -1
  86. package/dist/modules/manager/npm/extract/common/dependency.js +2 -2
  87. package/dist/modules/manager/npm/extract/common/dependency.js.map +1 -1
  88. package/dist/modules/manager/npm/extract/post/locked-versions.js +2 -1
  89. package/dist/modules/manager/npm/extract/post/locked-versions.js.map +1 -1
  90. package/dist/modules/manager/npm/post-update/index.js +1 -1
  91. package/dist/modules/manager/npm/post-update/index.js.map +1 -1
  92. package/dist/modules/manager/npm/post-update/npm.js +2 -1
  93. package/dist/modules/manager/npm/post-update/npm.js.map +1 -1
  94. package/dist/modules/manager/npm/post-update/yarn.js +2 -2
  95. package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
  96. package/dist/modules/manager/npm/schema.js +2 -1
  97. package/dist/modules/manager/npm/schema.js.map +1 -1
  98. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/get-locked.js +2 -1
  99. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/get-locked.js.map +1 -1
  100. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/replace.js +1 -1
  101. package/dist/modules/manager/npm/update/locked-dependency/yarn-lock/replace.js.map +1 -1
  102. package/dist/modules/manager/nuget/extract.js +1 -1
  103. package/dist/modules/manager/nuget/extract.js.map +1 -1
  104. package/dist/modules/manager/nvm/extract.js +2 -1
  105. package/dist/modules/manager/nvm/extract.js.map +1 -1
  106. package/dist/modules/manager/osgi/extract.js +2 -1
  107. package/dist/modules/manager/osgi/extract.js.map +1 -1
  108. package/dist/modules/manager/pep621/processors/uv.js +2 -1
  109. package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
  110. package/dist/modules/manager/pip_requirements/extract.js +1 -1
  111. package/dist/modules/manager/pip_requirements/extract.js.map +1 -1
  112. package/dist/modules/manager/pip_setup/extract.js +3 -3
  113. package/dist/modules/manager/pip_setup/extract.js.map +1 -1
  114. package/dist/modules/manager/pixi/schema.js +2 -1
  115. package/dist/modules/manager/pixi/schema.js.map +1 -1
  116. package/dist/modules/manager/setup-cfg/extract.js +1 -1
  117. package/dist/modules/manager/setup-cfg/extract.js.map +1 -1
  118. package/dist/modules/manager/sveltos/util.js +1 -1
  119. package/dist/modules/manager/sveltos/util.js.map +1 -1
  120. package/dist/modules/manager/typst/extract.js +2 -2
  121. package/dist/modules/manager/typst/extract.js.map +1 -1
  122. package/dist/modules/platform/azure/issue.js +2 -1
  123. package/dist/modules/platform/azure/issue.js.map +1 -1
  124. package/dist/modules/platform/bitbucket/index.js +1 -1
  125. package/dist/modules/platform/bitbucket/index.js.map +1 -1
  126. package/dist/modules/platform/bitbucket/schema.js +2 -1
  127. package/dist/modules/platform/bitbucket/schema.js.map +1 -1
  128. package/dist/modules/platform/codecommit/codecommit-client.js +2 -1
  129. package/dist/modules/platform/codecommit/codecommit-client.js.map +1 -1
  130. package/dist/modules/platform/gerrit/utils.js +1 -1
  131. package/dist/modules/platform/gerrit/utils.js.map +1 -1
  132. package/dist/modules/platform/github/index.js +8 -8
  133. package/dist/modules/platform/github/index.js.map +1 -1
  134. package/dist/modules/platform/github/massage-markdown-links.js +6 -3
  135. package/dist/modules/platform/github/massage-markdown-links.js.map +1 -1
  136. package/dist/modules/versioning/apk/index.js +15 -15
  137. package/dist/modules/versioning/apk/index.js.map +1 -1
  138. package/dist/modules/versioning/bazel-module/bzlmod-version.js +3 -2
  139. package/dist/modules/versioning/bazel-module/bzlmod-version.js.map +1 -1
  140. package/dist/modules/versioning/bazel-module/index.js +2 -1
  141. package/dist/modules/versioning/bazel-module/index.js.map +1 -1
  142. package/dist/modules/versioning/composer/index.js +2 -2
  143. package/dist/modules/versioning/composer/index.js.map +1 -1
  144. package/dist/modules/versioning/conan/range.js +4 -3
  145. package/dist/modules/versioning/conan/range.js.map +1 -1
  146. package/dist/modules/versioning/conda/index.js +4 -3
  147. package/dist/modules/versioning/conda/index.js.map +1 -1
  148. package/dist/modules/versioning/distro.js +2 -1
  149. package/dist/modules/versioning/distro.js.map +1 -1
  150. package/dist/modules/versioning/generic.js +2 -1
  151. package/dist/modules/versioning/generic.js.map +1 -1
  152. package/dist/modules/versioning/hashicorp/convertor.js +1 -1
  153. package/dist/modules/versioning/hashicorp/convertor.js.map +1 -1
  154. package/dist/modules/versioning/npm/range.js +1 -1
  155. package/dist/modules/versioning/npm/range.js.map +1 -1
  156. package/dist/modules/versioning/nuget/range.js +2 -1
  157. package/dist/modules/versioning/nuget/range.js.map +1 -1
  158. package/dist/modules/versioning/perl/index.js +1 -1
  159. package/dist/modules/versioning/perl/index.js.map +1 -1
  160. package/dist/modules/versioning/poetry/transform.js +2 -2
  161. package/dist/modules/versioning/poetry/transform.js.map +1 -1
  162. package/dist/modules/versioning/rez/pattern.js.map +1 -1
  163. package/dist/modules/versioning/ruby/index.js +1 -1
  164. package/dist/modules/versioning/ruby/index.js.map +1 -1
  165. package/dist/modules/versioning/semver/index.js +2 -1
  166. package/dist/modules/versioning/semver/index.js.map +1 -1
  167. package/dist/modules/versioning/semver-coerced/index.js +1 -1
  168. package/dist/modules/versioning/semver-coerced/index.js.map +1 -1
  169. package/dist/util/emoji.js.map +1 -1
  170. package/dist/util/exec/containerbase.js +2 -1
  171. package/dist/util/exec/containerbase.js.map +1 -1
  172. package/dist/util/exec/env.js +2 -1
  173. package/dist/util/exec/env.js.map +1 -1
  174. package/dist/util/git/private-key.js +1 -1
  175. package/dist/util/git/private-key.js.map +1 -1
  176. package/dist/util/github/graphql/datasource-fetcher.js +2 -1
  177. package/dist/util/github/graphql/datasource-fetcher.js.map +1 -1
  178. package/dist/util/http/forgejo.js +2 -1
  179. package/dist/util/http/forgejo.js.map +1 -1
  180. package/dist/util/http/gitea.js +2 -1
  181. package/dist/util/http/gitea.js.map +1 -1
  182. package/dist/util/number.js +2 -1
  183. package/dist/util/number.js.map +1 -1
  184. package/dist/util/string-match.js +1 -1
  185. package/dist/util/string-match.js.map +1 -1
  186. package/dist/util/url.js +2 -2
  187. package/dist/util/url.js.map +1 -1
  188. package/dist/workers/global/config/parse/cli.js +1 -1
  189. package/dist/workers/global/config/parse/cli.js.map +1 -1
  190. package/dist/workers/global/config/parse/coersions.js +2 -1
  191. package/dist/workers/global/config/parse/coersions.js.map +1 -1
  192. package/dist/workers/global/config/parse/host-rules-from-env.js +2 -1
  193. package/dist/workers/global/config/parse/host-rules-from-env.js.map +1 -1
  194. package/dist/workers/repository/model/commit-message.js +2 -1
  195. package/dist/workers/repository/model/commit-message.js.map +1 -1
  196. package/dist/workers/repository/model/semantic-commit-message.js +2 -1
  197. package/dist/workers/repository/model/semantic-commit-message.js.map +1 -1
  198. package/dist/workers/repository/update/pr/changelog/common.js +1 -1
  199. package/dist/workers/repository/update/pr/changelog/common.js.map +1 -1
  200. package/dist/workers/repository/updates/generate.js +1 -1
  201. package/dist/workers/repository/updates/generate.js.map +1 -1
  202. package/package.json +1 -1
  203. package/renovate-schema.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","names":["rules.toPackageDependencies","bazelrc.read"],"sources":["../../../../lib/modules/manager/bazel-module/extract.ts"],"sourcesContent":["import upath from 'upath';\nimport { logger } from '../../../logger/index.ts';\nimport { isNotNullOrUndefined } from '../../../util/array.ts';\nimport { LooseArray } from '../../../util/schema-utils/index.ts';\nimport { getDep } from '../dockerfile/extract.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport * as bazelrc from './bazelrc.ts';\nimport { RuleToCratePackageDep } from './parser/crate.ts';\nimport type { ResultFragment } from './parser/fragments.ts';\nimport { parse } from './parser/index.ts';\nimport { RuleToMavenPackageDep, fillRegistryUrls } from './parser/maven.ts';\nimport { RuleToDockerPackageDep } from './parser/oci.ts';\nimport * as rules from './rules.ts';\nimport {\n GitRepositoryToPackageDep,\n RuleToBazelModulePackageDep,\n} from './rules.ts';\nimport { transformRulesImgCalls } from './rules-img.ts';\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n config?: ExtractConfig,\n): Promise<PackageFileContent | null> {\n try {\n const records = parse(content);\n const pfc = await extractBazelPfc(records, packageFile);\n const gitRepositoryDeps = extractGitRepositoryDeps(records);\n const mavenDeps = extractMavenDeps(records);\n const dockerDeps = LooseArray(RuleToDockerPackageDep)\n .transform((deps) =>\n deps.map((dep) => {\n // Reconstruct the image reference from parsed data\n const imageRef = `${dep.packageName}${dep.currentValue ? `:${dep.currentValue}` : ''}${dep.currentDigest ? `@${dep.currentDigest}` : ''}`;\n // Use getDep to handle registry aliases properly\n const processedDep = getDep(imageRef, false, config?.registryAliases);\n return {\n ...processedDep,\n depType: 'oci_pull',\n depName: dep.depName, // Keep the original name field from bazel\n replaceString: dep.replaceString, // Keep the original replace string\n };\n }),\n )\n .parse(records);\n const rulesImgDeps = transformRulesImgCalls(records);\n const crateDeps = LooseArray(RuleToCratePackageDep).parse(records);\n\n if (gitRepositoryDeps.length) {\n pfc.deps.push(...gitRepositoryDeps);\n }\n\n if (mavenDeps.length) {\n pfc.deps.push(...mavenDeps);\n }\n\n if (dockerDeps.length) {\n pfc.deps.push(...dockerDeps);\n }\n\n if (rulesImgDeps.length) {\n pfc.deps.push(...rulesImgDeps);\n }\n\n if (crateDeps.length) {\n pfc.deps.push(...crateDeps);\n }\n\n return pfc.deps.length ? pfc : null;\n } catch (err) {\n logger.debug({ err, packageFile }, 'Failed to parse bazel module file.');\n return null;\n }\n}\n\nasync function extractBazelPfc(\n records: ResultFragment[],\n packageFile: string,\n): Promise<PackageFileContent> {\n const pfc: PackageFileContent = LooseArray(RuleToBazelModulePackageDep)\n .transform(rules.toPackageDependencies)\n .transform((deps) => ({ deps }))\n .parse(records);\n\n const registryUrls = (await bazelrc.read(upath.dirname(packageFile)))\n // Ignore any entries for custom configurations\n .filter((ce) => ce.config === undefined)\n .map((ce) => ce.getOption('registry')?.value)\n .map((url) => url?.replace(/^[\"']|[\"']$/g, ''))\n .filter(isNotNullOrUndefined);\n if (registryUrls.length) {\n pfc.registryUrls = registryUrls;\n }\n\n return pfc;\n}\n\nfunction extractGitRepositoryDeps(\n records: ResultFragment[],\n): PackageDependency[] {\n return LooseArray(GitRepositoryToPackageDep).parse(records);\n}\n\nfunction extractMavenDeps(records: ResultFragment[]): PackageDependency[] {\n return LooseArray(RuleToMavenPackageDep)\n .transform(fillRegistryUrls)\n .parse(records);\n}\n"],"mappings":";;;;;;;;;;;;;AAuBA,eAAsB,mBACpB,SACA,aACA,QACoC;CACpC,IAAI;EACF,MAAM,UAAU,MAAM,OAAO;EAC7B,MAAM,MAAM,MAAM,gBAAgB,SAAS,WAAW;EACtD,MAAM,oBAAoB,yBAAyB,OAAO;EAC1D,MAAM,YAAY,iBAAiB,OAAO;EAC1C,MAAM,aAAa,WAAW,sBAAsB,CAAC,CAClD,WAAW,SACV,KAAK,KAAK,QAAQ;GAEhB,MAAM,WAAW,GAAG,IAAI,cAAc,IAAI,eAAe,IAAI,IAAI,iBAAiB,KAAK,IAAI,gBAAgB,IAAI,IAAI,kBAAkB;GAGrI,OAAO;IACL,GAFmB,OAAO,UAAU,OAAO,QAAQ,eAErC;IACd,SAAS;IACT,SAAS,IAAI;IACb,eAAe,IAAI;GACrB;EACF,CAAC,CACH,CAAC,CACA,MAAM,OAAO;EAChB,MAAM,eAAe,uBAAuB,OAAO;EACnD,MAAM,YAAY,WAAW,qBAAqB,CAAC,CAAC,MAAM,OAAO;EAEjE,IAAI,kBAAkB,QACpB,IAAI,KAAK,KAAK,GAAG,iBAAiB;EAGpC,IAAI,UAAU,QACZ,IAAI,KAAK,KAAK,GAAG,SAAS;EAG5B,IAAI,WAAW,QACb,IAAI,KAAK,KAAK,GAAG,UAAU;EAG7B,IAAI,aAAa,QACf,IAAI,KAAK,KAAK,GAAG,YAAY;EAG/B,IAAI,UAAU,QACZ,IAAI,KAAK,KAAK,GAAG,SAAS;EAG5B,OAAO,IAAI,KAAK,SAAS,MAAM;CACjC,SAAS,KAAK;EACZ,OAAO,MAAM;GAAE;GAAK;EAAY,GAAG,oCAAoC;EACvE,OAAO;CACT;AACF;AAEA,eAAe,gBACb,SACA,aAC6B;CAC7B,MAAM,MAA0B,WAAW,2BAA2B,CAAC,CACpE,UAAUA,qBAA2B,CAAC,CACtC,WAAW,UAAU,EAAE,KAAK,EAAE,CAAC,CAC/B,MAAM,OAAO;CAEhB,MAAM,gBAAgB,MAAMC,KAAa,MAAM,QAAQ,WAAW,CAAC,EAAA,CAEhE,QAAQ,OAAO,GAAG,WAAW,KAAA,CAAS,CAAC,CACvC,KAAK,OAAO,GAAG,UAAU,UAAU,CAAC,EAAE,KAAK,CAAC,CAC5C,KAAK,QAAQ,KAAK,QAAQ,gBAAgB,EAAE,CAAC,CAAC,CAC9C,OAAO,oBAAoB;CAC9B,IAAI,aAAa,QACf,IAAI,eAAe;CAGrB,OAAO;AACT;AAEA,SAAS,yBACP,SACqB;CACrB,OAAO,WAAW,yBAAyB,CAAC,CAAC,MAAM,OAAO;AAC5D;AAEA,SAAS,iBAAiB,SAAgD;CACxE,OAAO,WAAW,qBAAqB,CAAC,CACrC,UAAU,gBAAgB,CAAC,CAC3B,MAAM,OAAO;AAClB"}
1
+ {"version":3,"file":"extract.js","names":["rules.toPackageDependencies","bazelrc.read"],"sources":["../../../../lib/modules/manager/bazel-module/extract.ts"],"sourcesContent":["import upath from 'upath';\nimport { logger } from '../../../logger/index.ts';\nimport { isNotNullOrUndefined } from '../../../util/array.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { LooseArray } from '../../../util/schema-utils/index.ts';\nimport { getDep } from '../dockerfile/extract.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport * as bazelrc from './bazelrc.ts';\nimport { RuleToCratePackageDep } from './parser/crate.ts';\nimport type { ResultFragment } from './parser/fragments.ts';\nimport { parse } from './parser/index.ts';\nimport { RuleToMavenPackageDep, fillRegistryUrls } from './parser/maven.ts';\nimport { RuleToDockerPackageDep } from './parser/oci.ts';\nimport * as rules from './rules.ts';\nimport {\n GitRepositoryToPackageDep,\n RuleToBazelModulePackageDep,\n} from './rules.ts';\nimport { transformRulesImgCalls } from './rules-img.ts';\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n config?: ExtractConfig,\n): Promise<PackageFileContent | null> {\n try {\n const records = parse(content);\n const pfc = await extractBazelPfc(records, packageFile);\n const gitRepositoryDeps = extractGitRepositoryDeps(records);\n const mavenDeps = extractMavenDeps(records);\n const dockerDeps = LooseArray(RuleToDockerPackageDep)\n .transform((deps) =>\n deps.map((dep) => {\n // Reconstruct the image reference from parsed data\n const imageRef = `${dep.packageName}${dep.currentValue ? `:${dep.currentValue}` : ''}${dep.currentDigest ? `@${dep.currentDigest}` : ''}`;\n // Use getDep to handle registry aliases properly\n const processedDep = getDep(imageRef, false, config?.registryAliases);\n return {\n ...processedDep,\n depType: 'oci_pull',\n depName: dep.depName, // Keep the original name field from bazel\n replaceString: dep.replaceString, // Keep the original replace string\n };\n }),\n )\n .parse(records);\n const rulesImgDeps = transformRulesImgCalls(records);\n const crateDeps = LooseArray(RuleToCratePackageDep).parse(records);\n\n if (gitRepositoryDeps.length) {\n pfc.deps.push(...gitRepositoryDeps);\n }\n\n if (mavenDeps.length) {\n pfc.deps.push(...mavenDeps);\n }\n\n if (dockerDeps.length) {\n pfc.deps.push(...dockerDeps);\n }\n\n if (rulesImgDeps.length) {\n pfc.deps.push(...rulesImgDeps);\n }\n\n if (crateDeps.length) {\n pfc.deps.push(...crateDeps);\n }\n\n return pfc.deps.length ? pfc : null;\n } catch (err) {\n logger.debug({ err, packageFile }, 'Failed to parse bazel module file.');\n return null;\n }\n}\n\nasync function extractBazelPfc(\n records: ResultFragment[],\n packageFile: string,\n): Promise<PackageFileContent> {\n const pfc: PackageFileContent = LooseArray(RuleToBazelModulePackageDep)\n .transform(rules.toPackageDependencies)\n .transform((deps) => ({ deps }))\n .parse(records);\n\n const registryUrls = (await bazelrc.read(upath.dirname(packageFile)))\n // Ignore any entries for custom configurations\n .filter((ce) => ce.config === undefined)\n .map((ce) => ce.getOption('registry')?.value)\n .map((url) => url?.replace(regEx(/^[\"']|[\"']$/g), ''))\n .filter(isNotNullOrUndefined);\n if (registryUrls.length) {\n pfc.registryUrls = registryUrls;\n }\n\n return pfc;\n}\n\nfunction extractGitRepositoryDeps(\n records: ResultFragment[],\n): PackageDependency[] {\n return LooseArray(GitRepositoryToPackageDep).parse(records);\n}\n\nfunction extractMavenDeps(records: ResultFragment[]): PackageDependency[] {\n return LooseArray(RuleToMavenPackageDep)\n .transform(fillRegistryUrls)\n .parse(records);\n}\n"],"mappings":";;;;;;;;;;;;;;AAwBA,eAAsB,mBACpB,SACA,aACA,QACoC;CACpC,IAAI;EACF,MAAM,UAAU,MAAM,OAAO;EAC7B,MAAM,MAAM,MAAM,gBAAgB,SAAS,WAAW;EACtD,MAAM,oBAAoB,yBAAyB,OAAO;EAC1D,MAAM,YAAY,iBAAiB,OAAO;EAC1C,MAAM,aAAa,WAAW,sBAAsB,CAAC,CAClD,WAAW,SACV,KAAK,KAAK,QAAQ;GAEhB,MAAM,WAAW,GAAG,IAAI,cAAc,IAAI,eAAe,IAAI,IAAI,iBAAiB,KAAK,IAAI,gBAAgB,IAAI,IAAI,kBAAkB;GAGrI,OAAO;IACL,GAFmB,OAAO,UAAU,OAAO,QAAQ,eAErC;IACd,SAAS;IACT,SAAS,IAAI;IACb,eAAe,IAAI;GACrB;EACF,CAAC,CACH,CAAC,CACA,MAAM,OAAO;EAChB,MAAM,eAAe,uBAAuB,OAAO;EACnD,MAAM,YAAY,WAAW,qBAAqB,CAAC,CAAC,MAAM,OAAO;EAEjE,IAAI,kBAAkB,QACpB,IAAI,KAAK,KAAK,GAAG,iBAAiB;EAGpC,IAAI,UAAU,QACZ,IAAI,KAAK,KAAK,GAAG,SAAS;EAG5B,IAAI,WAAW,QACb,IAAI,KAAK,KAAK,GAAG,UAAU;EAG7B,IAAI,aAAa,QACf,IAAI,KAAK,KAAK,GAAG,YAAY;EAG/B,IAAI,UAAU,QACZ,IAAI,KAAK,KAAK,GAAG,SAAS;EAG5B,OAAO,IAAI,KAAK,SAAS,MAAM;CACjC,SAAS,KAAK;EACZ,OAAO,MAAM;GAAE;GAAK;EAAY,GAAG,oCAAoC;EACvE,OAAO;CACT;AACF;AAEA,eAAe,gBACb,SACA,aAC6B;CAC7B,MAAM,MAA0B,WAAW,2BAA2B,CAAC,CACpE,UAAUA,qBAA2B,CAAC,CACtC,WAAW,UAAU,EAAE,KAAK,EAAE,CAAC,CAC/B,MAAM,OAAO;CAEhB,MAAM,gBAAgB,MAAMC,KAAa,MAAM,QAAQ,WAAW,CAAC,EAAA,CAEhE,QAAQ,OAAO,GAAG,WAAW,KAAA,CAAS,CAAC,CACvC,KAAK,OAAO,GAAG,UAAU,UAAU,CAAC,EAAE,KAAK,CAAC,CAC5C,KAAK,QAAQ,KAAK,QAAQ,MAAM,cAAc,GAAG,EAAE,CAAC,CAAC,CACrD,OAAO,oBAAoB;CAC9B,IAAI,aAAa,QACf,IAAI,eAAe;CAGrB,OAAO;AACT;AAEA,SAAS,yBACP,SACqB;CACrB,OAAO,WAAW,yBAAyB,CAAC,CAAC,MAAM,OAAO;AAC5D;AAEA,SAAS,iBAAiB,SAAgD;CACxE,OAAO,WAAW,qBAAqB,CAAC,CACrC,UAAU,gBAAgB,CAAC,CAC3B,MAAM,OAAO;AAClB"}
@@ -34,7 +34,7 @@ const useRepoRuleAssignment = query.sym((ctx, token) => {
34
34
  return ctx;
35
35
  }
36
36
  });
37
- const repoRuleCall = query.sym(/^[a-zA-Z_]\w*$/, (ctx, token) => {
37
+ const repoRuleCall = query.sym(regEx(/^[a-zA-Z_]\w*$/), (ctx, token) => {
38
38
  return ctx.startRepoRuleCall(token.value, token.offset);
39
39
  }).join(query.tree({
40
40
  type: "wrapped-tree",
@@ -1 +1 @@
1
- {"version":3,"file":"repo-rules.js","names":["q"],"sources":["../../../../../lib/modules/manager/bazel-module/parser/repo-rules.ts"],"sourcesContent":["import type { parser } from '@renovatebot/good-enough-parser';\nimport { query as q } from '@renovatebot/good-enough-parser';\nimport { regEx } from '../../../../util/regex.ts';\nimport { kvParams } from './common.ts';\nimport type { Ctx } from './context.ts';\n\n// Store for tracking use_repo_rule assignments during parsing\nconst repoRuleVariables = new Map<\n string,\n { bzlFile: string; ruleName: string }\n>();\n\n// Parser for use_repo_rule assignments:\n// pull = use_repo_rule(\"@rules_img//img:pull.bzl\", \"pull\")\nexport const useRepoRuleAssignment = q\n .sym<Ctx>((ctx, token) => {\n // Store the variable name for later use\n ctx._tempVariableName = token.value;\n return ctx;\n })\n .op('=')\n .sym(regEx(/^use_repo_rule$/))\n .tree({\n type: 'wrapped-tree',\n maxDepth: 1,\n startsWith: '(',\n endsWith: ')',\n search: q.many(\n q.str<Ctx>((ctx, token) => {\n // Collect the string arguments\n ctx._tempStrings ??= [];\n ctx._tempStrings.push(token.value);\n return ctx;\n }),\n ),\n postHandler: (ctx, _tree) => {\n const variableName = ctx._tempVariableName;\n const strings = ctx._tempStrings;\n\n if (variableName && strings && strings.length >= 2) {\n const bzlFile = strings[0];\n const ruleName = strings[1];\n\n // Store for later use by repoRuleCall parser\n repoRuleVariables.set(variableName, { bzlFile, ruleName });\n\n // Create the useRepoRule fragment\n ctx.startUseRepoRule(variableName, bzlFile, ruleName);\n ctx.endUseRepoRule();\n }\n\n // Clean up\n delete ctx._tempVariableName;\n delete ctx._tempStrings;\n\n return ctx;\n },\n });\n\n// Parser for repository rule calls\n// This parser always creates repo rule call fragments, but they will be filtered\n// during extraction based on whether they correspond to known repo rule variables\nexport const repoRuleCall = q\n .sym<Ctx>(/^[a-zA-Z_]\\w*$/, (ctx, token) => {\n return ctx.startRepoRuleCall(token.value, token.offset);\n })\n .join(\n q.tree({\n type: 'wrapped-tree',\n maxDepth: 1,\n search: kvParams,\n postHandler: (ctx, tree) => {\n const { endsWith } = tree as parser.WrappedTree;\n const endOffset = endsWith.offset + endsWith.value.length;\n return ctx.endRepoRuleCall(endOffset);\n },\n }),\n );\n\nexport function clearRepoRuleVariables(): void {\n repoRuleVariables.clear();\n}\n"],"mappings":";;;;AAOA,MAAM,oCAAoB,IAAI,IAG5B;AAIF,MAAa,wBAAwBA,MAClC,KAAU,KAAK,UAAU;CAExB,IAAI,oBAAoB,MAAM;CAC9B,OAAO;AACT,CAAC,CAAC,CACD,GAAG,GAAG,CAAC,CACP,IAAI,MAAM,iBAAiB,CAAC,CAAC,CAC7B,KAAK;CACJ,MAAM;CACN,UAAU;CACV,YAAY;CACZ,UAAU;CACV,QAAQA,MAAE,KACRA,MAAE,KAAU,KAAK,UAAU;EAEzB,IAAI,iBAAiB,CAAC;EACtB,IAAI,aAAa,KAAK,MAAM,KAAK;EACjC,OAAO;CACT,CAAC,CACH;CACA,cAAc,KAAK,UAAU;EAC3B,MAAM,eAAe,IAAI;EACzB,MAAM,UAAU,IAAI;EAEpB,IAAI,gBAAgB,WAAW,QAAQ,UAAU,GAAG;GAClD,MAAM,UAAU,QAAQ;GACxB,MAAM,WAAW,QAAQ;GAGzB,kBAAkB,IAAI,cAAc;IAAE;IAAS;GAAS,CAAC;GAGzD,IAAI,iBAAiB,cAAc,SAAS,QAAQ;GACpD,IAAI,eAAe;EACrB;EAGA,OAAO,IAAI;EACX,OAAO,IAAI;EAEX,OAAO;CACT;AACF,CAAC;AAKH,MAAa,eAAeA,MACzB,IAAS,mBAAmB,KAAK,UAAU;CAC1C,OAAO,IAAI,kBAAkB,MAAM,OAAO,MAAM,MAAM;AACxD,CAAC,CAAC,CACD,KACCA,MAAE,KAAK;CACL,MAAM;CACN,UAAU;CACV,QAAQ;CACR,cAAc,KAAK,SAAS;EAC1B,MAAM,EAAE,aAAa;EACrB,MAAM,YAAY,SAAS,SAAS,SAAS,MAAM;EACnD,OAAO,IAAI,gBAAgB,SAAS;CACtC;AACF,CAAC,CACH;AAEF,SAAgB,yBAA+B;CAC7C,kBAAkB,MAAM;AAC1B"}
1
+ {"version":3,"file":"repo-rules.js","names":["q"],"sources":["../../../../../lib/modules/manager/bazel-module/parser/repo-rules.ts"],"sourcesContent":["import type { parser } from '@renovatebot/good-enough-parser';\nimport { query as q } from '@renovatebot/good-enough-parser';\nimport { regEx } from '../../../../util/regex.ts';\nimport { kvParams } from './common.ts';\nimport type { Ctx } from './context.ts';\n\n// Store for tracking use_repo_rule assignments during parsing\nconst repoRuleVariables = new Map<\n string,\n { bzlFile: string; ruleName: string }\n>();\n\n// Parser for use_repo_rule assignments:\n// pull = use_repo_rule(\"@rules_img//img:pull.bzl\", \"pull\")\nexport const useRepoRuleAssignment = q\n .sym<Ctx>((ctx, token) => {\n // Store the variable name for later use\n ctx._tempVariableName = token.value;\n return ctx;\n })\n .op('=')\n .sym(regEx(/^use_repo_rule$/))\n .tree({\n type: 'wrapped-tree',\n maxDepth: 1,\n startsWith: '(',\n endsWith: ')',\n search: q.many(\n q.str<Ctx>((ctx, token) => {\n // Collect the string arguments\n ctx._tempStrings ??= [];\n ctx._tempStrings.push(token.value);\n return ctx;\n }),\n ),\n postHandler: (ctx, _tree) => {\n const variableName = ctx._tempVariableName;\n const strings = ctx._tempStrings;\n\n if (variableName && strings && strings.length >= 2) {\n const bzlFile = strings[0];\n const ruleName = strings[1];\n\n // Store for later use by repoRuleCall parser\n repoRuleVariables.set(variableName, { bzlFile, ruleName });\n\n // Create the useRepoRule fragment\n ctx.startUseRepoRule(variableName, bzlFile, ruleName);\n ctx.endUseRepoRule();\n }\n\n // Clean up\n delete ctx._tempVariableName;\n delete ctx._tempStrings;\n\n return ctx;\n },\n });\n\n// Parser for repository rule calls\n// This parser always creates repo rule call fragments, but they will be filtered\n// during extraction based on whether they correspond to known repo rule variables\nexport const repoRuleCall = q\n .sym<Ctx>(regEx(/^[a-zA-Z_]\\w*$/), (ctx, token) => {\n return ctx.startRepoRuleCall(token.value, token.offset);\n })\n .join(\n q.tree({\n type: 'wrapped-tree',\n maxDepth: 1,\n search: kvParams,\n postHandler: (ctx, tree) => {\n const { endsWith } = tree as parser.WrappedTree;\n const endOffset = endsWith.offset + endsWith.value.length;\n return ctx.endRepoRuleCall(endOffset);\n },\n }),\n );\n\nexport function clearRepoRuleVariables(): void {\n repoRuleVariables.clear();\n}\n"],"mappings":";;;;AAOA,MAAM,oCAAoB,IAAI,IAG5B;AAIF,MAAa,wBAAwBA,MAClC,KAAU,KAAK,UAAU;CAExB,IAAI,oBAAoB,MAAM;CAC9B,OAAO;AACT,CAAC,CAAC,CACD,GAAG,GAAG,CAAC,CACP,IAAI,MAAM,iBAAiB,CAAC,CAAC,CAC7B,KAAK;CACJ,MAAM;CACN,UAAU;CACV,YAAY;CACZ,UAAU;CACV,QAAQA,MAAE,KACRA,MAAE,KAAU,KAAK,UAAU;EAEzB,IAAI,iBAAiB,CAAC;EACtB,IAAI,aAAa,KAAK,MAAM,KAAK;EACjC,OAAO;CACT,CAAC,CACH;CACA,cAAc,KAAK,UAAU;EAC3B,MAAM,eAAe,IAAI;EACzB,MAAM,UAAU,IAAI;EAEpB,IAAI,gBAAgB,WAAW,QAAQ,UAAU,GAAG;GAClD,MAAM,UAAU,QAAQ;GACxB,MAAM,WAAW,QAAQ;GAGzB,kBAAkB,IAAI,cAAc;IAAE;IAAS;GAAS,CAAC;GAGzD,IAAI,iBAAiB,cAAc,SAAS,QAAQ;GACpD,IAAI,eAAe;EACrB;EAGA,OAAO,IAAI;EACX,OAAO,IAAI;EAEX,OAAO;CACT;AACF,CAAC;AAKH,MAAa,eAAeA,MACzB,IAAS,MAAM,gBAAgB,IAAI,KAAK,UAAU;CACjD,OAAO,IAAI,kBAAkB,MAAM,OAAO,MAAM,MAAM;AACxD,CAAC,CAAC,CACD,KACCA,MAAE,KAAK;CACL,MAAM;CACN,UAAU;CACV,QAAQ;CACR,cAAc,KAAK,SAAS;EAC1B,MAAM,EAAE,aAAa;EACrB,MAAM,YAAY,SAAS,SAAS,SAAS,MAAM;EACnD,OAAO,IAAI,gBAAgB,SAAS;CACtC;AACF,CAAC,CACH;AAEF,SAAgB,yBAA+B;CAC7C,kBAAkB,MAAM;AAC1B"}
@@ -1,11 +1,11 @@
1
- import { newlineRegex } from "../../../util/regex.js";
1
+ import { newlineRegex, regEx } from "../../../util/regex.js";
2
2
  import { logger } from "../../../logger/index.js";
3
3
  import { addDepAsBitbucketTag, addDepAsDockerImage, addDepFromObject, dockerImageObjectRegex, dockerImageRegex, pipeRegex } from "./util.js";
4
4
  //#region lib/modules/manager/bitbucket-pipelines/extract.ts
5
5
  function extractPackageFile(content, packageFile, config) {
6
6
  const deps = [];
7
7
  try {
8
- const lines = content.replaceAll(/^\s*\r?\n/gm, "").replaceAll(/^\s*#.*\r?\n/gm, "").split(newlineRegex);
8
+ const lines = content.replaceAll(regEx(/^\s*\r?\n/gm), "").replaceAll(regEx(/^\s*#.*\r?\n/gm), "").split(newlineRegex);
9
9
  const len = lines.length;
10
10
  for (let lineIdx = 0; lineIdx < len; lineIdx++) {
11
11
  const line = lines[lineIdx];
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/bitbucket-pipelines/extract.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { newlineRegex } from '../../../util/regex.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport {\n addDepAsBitbucketTag,\n addDepAsDockerImage,\n addDepFromObject,\n dockerImageObjectRegex,\n dockerImageRegex,\n pipeRegex,\n} from './util.ts';\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n config: ExtractConfig,\n): PackageFileContent | null {\n const deps: PackageDependency[] = [];\n\n try {\n const lines = content\n .replaceAll(/^\\s*\\r?\\n/gm, '') // replace empty lines\n .replaceAll(/^\\s*#.*\\r?\\n/gm, '') // replace comment lines\n .split(newlineRegex);\n const len = lines.length;\n for (let lineIdx = 0; lineIdx < len; lineIdx++) {\n const line = lines[lineIdx];\n\n const dockerImageObjectGroups = dockerImageObjectRegex.exec(line)?.groups;\n if (dockerImageObjectGroups) {\n // image object\n // https://support.atlassian.com/bitbucket-cloud/docs/docker-image-options/\n lineIdx = addDepFromObject(\n deps,\n lines,\n lineIdx,\n len,\n dockerImageObjectGroups.spaces,\n config.registryAliases,\n );\n continue;\n }\n\n const pipeMatch = pipeRegex.exec(line);\n if (pipeMatch) {\n const pipe = pipeMatch[1];\n\n if (pipe.startsWith('docker://')) {\n const currentPipe = pipe.replace('docker://', '');\n addDepAsDockerImage(deps, currentPipe, config.registryAliases);\n } else {\n addDepAsBitbucketTag(deps, pipe);\n }\n continue;\n }\n\n const dockerImageMatch = dockerImageRegex.exec(line);\n if (dockerImageMatch) {\n const currentFrom = dockerImageMatch[1];\n addDepAsDockerImage(deps, currentFrom, config.registryAliases);\n }\n }\n } catch (err) /* istanbul ignore next */ {\n logger.debug(\n { err, packageFile },\n 'Error extracting Bitbucket Pipes dependencies',\n );\n }\n if (!deps.length) {\n return null;\n }\n return { deps };\n}\n"],"mappings":";;;;AAgBA,SAAgB,mBACd,SACA,aACA,QAC2B;CAC3B,MAAM,OAA4B,CAAC;CAEnC,IAAI;EACF,MAAM,QAAQ,QACX,WAAW,eAAe,EAAE,CAAC,CAC7B,WAAW,kBAAkB,EAAE,CAAC,CAChC,MAAM,YAAY;EACrB,MAAM,MAAM,MAAM;EAClB,KAAK,IAAI,UAAU,GAAG,UAAU,KAAK,WAAW;GAC9C,MAAM,OAAO,MAAM;GAEnB,MAAM,0BAA0B,uBAAuB,KAAK,IAAI,CAAC,EAAE;GACnE,IAAI,yBAAyB;IAG3B,UAAU,iBACR,MACA,OACA,SACA,KACA,wBAAwB,QACxB,OAAO,eACT;IACA;GACF;GAEA,MAAM,YAAY,UAAU,KAAK,IAAI;GACrC,IAAI,WAAW;IACb,MAAM,OAAO,UAAU;IAEvB,IAAI,KAAK,WAAW,WAAW,GAAG;KAChC,MAAM,cAAc,KAAK,QAAQ,aAAa,EAAE;KAChD,oBAAoB,MAAM,aAAa,OAAO,eAAe;IAC/D,OACE,qBAAqB,MAAM,IAAI;IAEjC;GACF;GAEA,MAAM,mBAAmB,iBAAiB,KAAK,IAAI;GACnD,IAAI,kBAAkB;IACpB,MAAM,cAAc,iBAAiB;IACrC,oBAAoB,MAAM,aAAa,OAAO,eAAe;GAC/D;EACF;CACF,SAAS,gCAAgC;EACvC,OAAO,MACL;GAAE;GAAK;EAAY,GACnB,+CACF;CACF;CACA,IAAI,CAAC,KAAK,QACR,OAAO;CAET,OAAO,EAAE,KAAK;AAChB"}
1
+ {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/bitbucket-pipelines/extract.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport {\n addDepAsBitbucketTag,\n addDepAsDockerImage,\n addDepFromObject,\n dockerImageObjectRegex,\n dockerImageRegex,\n pipeRegex,\n} from './util.ts';\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n config: ExtractConfig,\n): PackageFileContent | null {\n const deps: PackageDependency[] = [];\n\n try {\n const lines = content\n .replaceAll(regEx(/^\\s*\\r?\\n/gm), '') // replace empty lines\n .replaceAll(regEx(/^\\s*#.*\\r?\\n/gm), '') // replace comment lines\n .split(newlineRegex);\n const len = lines.length;\n for (let lineIdx = 0; lineIdx < len; lineIdx++) {\n const line = lines[lineIdx];\n\n const dockerImageObjectGroups = dockerImageObjectRegex.exec(line)?.groups;\n if (dockerImageObjectGroups) {\n // image object\n // https://support.atlassian.com/bitbucket-cloud/docs/docker-image-options/\n lineIdx = addDepFromObject(\n deps,\n lines,\n lineIdx,\n len,\n dockerImageObjectGroups.spaces,\n config.registryAliases,\n );\n continue;\n }\n\n const pipeMatch = pipeRegex.exec(line);\n if (pipeMatch) {\n const pipe = pipeMatch[1];\n\n if (pipe.startsWith('docker://')) {\n const currentPipe = pipe.replace('docker://', '');\n addDepAsDockerImage(deps, currentPipe, config.registryAliases);\n } else {\n addDepAsBitbucketTag(deps, pipe);\n }\n continue;\n }\n\n const dockerImageMatch = dockerImageRegex.exec(line);\n if (dockerImageMatch) {\n const currentFrom = dockerImageMatch[1];\n addDepAsDockerImage(deps, currentFrom, config.registryAliases);\n }\n }\n } catch (err) /* istanbul ignore next */ {\n logger.debug(\n { err, packageFile },\n 'Error extracting Bitbucket Pipes dependencies',\n );\n }\n if (!deps.length) {\n return null;\n }\n return { deps };\n}\n"],"mappings":";;;;AAgBA,SAAgB,mBACd,SACA,aACA,QAC2B;CAC3B,MAAM,OAA4B,CAAC;CAEnC,IAAI;EACF,MAAM,QAAQ,QACX,WAAW,MAAM,aAAa,GAAG,EAAE,CAAC,CACpC,WAAW,MAAM,gBAAgB,GAAG,EAAE,CAAC,CACvC,MAAM,YAAY;EACrB,MAAM,MAAM,MAAM;EAClB,KAAK,IAAI,UAAU,GAAG,UAAU,KAAK,WAAW;GAC9C,MAAM,OAAO,MAAM;GAEnB,MAAM,0BAA0B,uBAAuB,KAAK,IAAI,CAAC,EAAE;GACnE,IAAI,yBAAyB;IAG3B,UAAU,iBACR,MACA,OACA,SACA,KACA,wBAAwB,QACxB,OAAO,eACT;IACA;GACF;GAEA,MAAM,YAAY,UAAU,KAAK,IAAI;GACrC,IAAI,WAAW;IACb,MAAM,OAAO,UAAU;IAEvB,IAAI,KAAK,WAAW,WAAW,GAAG;KAChC,MAAM,cAAc,KAAK,QAAQ,aAAa,EAAE;KAChD,oBAAoB,MAAM,aAAa,OAAO,eAAe;IAC/D,OACE,qBAAqB,MAAM,IAAI;IAEjC;GACF;GAEA,MAAM,mBAAmB,iBAAiB,KAAK,IAAI;GACnD,IAAI,kBAAkB;IACpB,MAAM,cAAc,iBAAiB;IACrC,oBAAoB,MAAM,aAAa,OAAO,eAAe;GAC/D;EACF;CACF,SAAS,gCAAgC;EACvC,OAAO,MACL;GAAE;GAAK;EAAY,GACnB,+CACF;CACF;CACA,IAAI,CAAC,KAAK,QACR,OAAO;CAET,OAAO,EAAE,KAAK;AAChB"}
@@ -1,9 +1,10 @@
1
+ import { regEx } from "../../../util/regex.js";
1
2
  import { minimatch } from "../../../util/minimatch.js";
2
3
  import upath from "upath";
3
4
  //#region lib/modules/manager/bun/utils.ts
4
5
  function fileMatchesWorkspaces(pwd, fileName, workspaces) {
5
6
  if (!fileName.startsWith(pwd)) return false;
6
- const relativeFile = upath.relative(pwd, fileName).replace(/\/package\.json$/, "");
7
+ const relativeFile = upath.relative(pwd, fileName).replace(regEx(/\/package\.json$/), "");
7
8
  return workspaces.some((pattern) => minimatch(pattern, { dot: true }).match(relativeFile));
8
9
  }
9
10
  function filesMatchingWorkspaces(pwd, files, workspaces) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../../../lib/modules/manager/bun/utils.ts"],"sourcesContent":["import upath from 'upath';\nimport { minimatch } from '../../../util/minimatch.ts';\n\nexport function fileMatchesWorkspaces(\n pwd: string,\n fileName: string,\n workspaces: string[],\n): boolean {\n if (!fileName.startsWith(pwd)) {\n return false;\n }\n const relativeFile = upath\n .relative(pwd, fileName)\n .replace(/\\/package\\.json$/, '');\n return workspaces.some((pattern) =>\n // minimatch will also return true for an exact match\n minimatch(pattern, { dot: true }).match(relativeFile),\n );\n}\n\nexport function filesMatchingWorkspaces(\n pwd: string,\n files: string[],\n workspaces: string[],\n): string[] {\n return files.filter((file) => fileMatchesWorkspaces(pwd, file, workspaces));\n}\n"],"mappings":";;;AAGA,SAAgB,sBACd,KACA,UACA,YACS;CACT,IAAI,CAAC,SAAS,WAAW,GAAG,GAC1B,OAAO;CAET,MAAM,eAAe,MAClB,SAAS,KAAK,QAAQ,CAAC,CACvB,QAAQ,oBAAoB,EAAE;CACjC,OAAO,WAAW,MAAM,YAEtB,UAAU,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,YAAY,CACtD;AACF;AAEA,SAAgB,wBACd,KACA,OACA,YACU;CACV,OAAO,MAAM,QAAQ,SAAS,sBAAsB,KAAK,MAAM,UAAU,CAAC;AAC5E"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../../../lib/modules/manager/bun/utils.ts"],"sourcesContent":["import upath from 'upath';\nimport { minimatch } from '../../../util/minimatch.ts';\nimport { regEx } from '../../../util/regex.ts';\n\nexport function fileMatchesWorkspaces(\n pwd: string,\n fileName: string,\n workspaces: string[],\n): boolean {\n if (!fileName.startsWith(pwd)) {\n return false;\n }\n const relativeFile = upath\n .relative(pwd, fileName)\n .replace(regEx(/\\/package\\.json$/), '');\n return workspaces.some((pattern) =>\n // minimatch will also return true for an exact match\n minimatch(pattern, { dot: true }).match(relativeFile),\n );\n}\n\nexport function filesMatchingWorkspaces(\n pwd: string,\n files: string[],\n workspaces: string[],\n): string[] {\n return files.filter((file) => fileMatchesWorkspaces(pwd, file, workspaces));\n}\n"],"mappings":";;;;AAIA,SAAgB,sBACd,KACA,UACA,YACS;CACT,IAAI,CAAC,SAAS,WAAW,GAAG,GAC1B,OAAO;CAET,MAAM,eAAe,MAClB,SAAS,KAAK,QAAQ,CAAC,CACvB,QAAQ,MAAM,kBAAkB,GAAG,EAAE;CACxC,OAAO,WAAW,MAAM,YAEtB,UAAU,SAAS,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,YAAY,CACtD;AACF;AAEA,SAAgB,wBACd,KACA,OACA,YACU;CACV,OAAO,MAAM,QAAQ,SAAS,sBAAsB,KAAK,MAAM,UAAU,CAAC;AAC5E"}
@@ -97,7 +97,7 @@ async function extractPackageFile(content, packageFile) {
97
97
  if (gitRefsMatch.gitUrl) {
98
98
  const gitUrl = gitRefsMatch.gitUrl;
99
99
  dep.packageName = gitUrl;
100
- if (isHttpUrl(gitUrl)) dep.sourceUrl = gitUrl.replace(/\.git$/, "");
100
+ if (isHttpUrl(gitUrl)) dep.sourceUrl = gitUrl.replace(regEx(/\.git$/), "");
101
101
  } else if (gitRefsMatch.repoName) {
102
102
  dep.packageName = `https://github.com/${gitRefsMatch.repoName}`;
103
103
  dep.sourceUrl = dep.packageName;
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/bundler/extract.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { isHttpUrl } from '../../../util/url.ts';\nimport { GitRefsDatasource } from '../../datasource/git-refs/index.ts';\nimport { RubyVersionDatasource } from '../../datasource/ruby-version/index.ts';\nimport { RubygemsDatasource } from '../../datasource/rubygems/index.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport { delimiters, extractRubyVersion, getLockFilePath } from './common.ts';\nimport { extractLockFileEntries } from './locked-version.ts';\n\nfunction formatContent(input: string): string {\n return `${input.replace(regEx(/^ {2}/), '')}\\n`; //remove leading whitespace and add a new line at the end\n}\n\nconst variableMatchRegex = regEx(\n `^(?<key>\\\\w+)\\\\s*=\\\\s*['\"](?<value>[^'\"]+)['\"]`,\n);\nconst gemMatchRegex = regEx(\n `^\\\\s*gem\\\\s+(['\"])(?<depName>[^'\"]+)(['\"])(\\\\s*,\\\\s*(?<currentValue>(['\"])[^'\"]+['\"](\\\\s*,\\\\s*['\"][^'\"]+['\"])?))?`,\n);\nconst sourceMatchRegex = regEx(\n `source:\\\\s*((?:['\"](?<registryUrl>[^'\"]+)['\"])|(?<sourceName>\\\\w+))?`,\n);\nconst gitRefsMatchRegex = regEx(\n `((git:\\\\s*['\"](?<gitUrl>[^'\"]+)['\"])|(\\\\s*,\\\\s*github:\\\\s*['\"](?<repoName>[^'\"]+)['\"]))(\\\\s*,\\\\s*branch:\\\\s*['\"](?<branchName>[^'\"]+)['\"])?(\\\\s*,\\\\s*ref:\\\\s*['\"](?<refName>[^'\"]+)['\"])?(\\\\s*,\\\\s*tag:\\\\s*['\"](?<tagName>[^'\"]+)['\"])?`,\n);\nconst pathMatchRegex = regEx(`path:\\\\s*['\"](?<path>[^'\"]+)['\"]`);\n\nexport async function extractPackageFile(\n content: string,\n packageFile?: string,\n): Promise<PackageFileContent | null> {\n let lineNumber: number;\n async function processGroupBlock(\n line: string,\n repositoryUrl?: string,\n trimGroupLine = false,\n ): Promise<void> {\n const groupMatch = regEx(/^group\\s+(.*?)\\s+do/).exec(line);\n if (groupMatch) {\n const depTypes = groupMatch[1]\n .split(',')\n .map((group) => group.trim())\n .map((group) => group.replace(regEx(/^:/), ''));\n\n const groupLineNumber = lineNumber;\n let groupContent = '';\n let groupLine = '';\n\n while (\n lineNumber < lines.length &&\n (trimGroupLine ? groupLine.trim() !== 'end' : groupLine !== 'end')\n ) {\n lineNumber += 1;\n groupLine = lines[lineNumber];\n\n // istanbul ignore if\n if (!isString(groupLine)) {\n logger.debug(\n { content, packageFile, type: 'groupLine' },\n 'Bundler parsing error',\n );\n groupLine = 'end';\n }\n if (trimGroupLine ? groupLine.trim() !== 'end' : groupLine !== 'end') {\n groupContent += formatContent(groupLine);\n }\n }\n\n const groupRes = await extractPackageFile(groupContent);\n if (groupRes) {\n res.deps = res.deps.concat(\n groupRes.deps.map((dep) => {\n const depObject = {\n ...dep,\n depTypes,\n managerData: {\n lineNumber:\n Number(dep.managerData?.lineNumber) + groupLineNumber + 1,\n },\n };\n if (repositoryUrl) {\n depObject.registryUrls = [repositoryUrl];\n }\n return depObject;\n }),\n );\n }\n }\n }\n const res: PackageFileContent = {\n registryUrls: [],\n deps: [],\n };\n\n const variables: Record<string, string> = {};\n\n const lines = content.split(newlineRegex);\n for (lineNumber = 0; lineNumber < lines.length; lineNumber += 1) {\n const line = lines[lineNumber];\n let sourceMatch: RegExpMatchArray | null = null;\n for (const delimiter of delimiters) {\n sourceMatch =\n sourceMatch ??\n regEx(\n `^source ((${delimiter}(?<registryUrl>[^${delimiter}]+)${delimiter})|(?<sourceName>\\\\w+))\\\\s*$`,\n ).exec(line);\n }\n if (sourceMatch) {\n if (sourceMatch.groups?.registryUrl) {\n res.registryUrls?.push(sourceMatch.groups.registryUrl);\n }\n if (sourceMatch.groups?.sourceName) {\n const registryUrl = variables[sourceMatch.groups.sourceName];\n if (registryUrl) {\n res.registryUrls?.push(registryUrl);\n }\n }\n }\n\n const rubyMatch = extractRubyVersion(line);\n if (rubyMatch) {\n res.deps.push({\n depName: 'ruby',\n currentValue: rubyMatch,\n datasource: RubyVersionDatasource.id,\n registryUrls: null,\n });\n }\n\n const variableMatch = variableMatchRegex.exec(line);\n if (variableMatch?.groups?.key) {\n variables[variableMatch.groups?.key] = variableMatch.groups?.value;\n }\n\n const gemMatch = gemMatchRegex.exec(line)?.groups;\n\n if (gemMatch) {\n const dep: PackageDependency = {\n depName: gemMatch.depName,\n managerData: { lineNumber },\n datasource: RubygemsDatasource.id,\n };\n\n if (gemMatch.currentValue) {\n const currentValue = gemMatch.currentValue;\n dep.currentValue = currentValue;\n }\n\n const pathMatch = pathMatchRegex.exec(line)?.groups;\n if (pathMatch) {\n dep.skipReason = 'internal-package';\n }\n\n const sourceMatch = sourceMatchRegex.exec(line)?.groups;\n if (sourceMatch) {\n if (sourceMatch.registryUrl) {\n dep.registryUrls = [sourceMatch.registryUrl];\n } else if (sourceMatch.sourceName) {\n dep.registryUrls = [variables[sourceMatch.sourceName]];\n }\n }\n\n const gitRefsMatch = gitRefsMatchRegex.exec(line)?.groups;\n if (gitRefsMatch) {\n if (gitRefsMatch.gitUrl) {\n const gitUrl = gitRefsMatch.gitUrl;\n dep.packageName = gitUrl;\n\n if (isHttpUrl(gitUrl)) {\n dep.sourceUrl = gitUrl.replace(/\\.git$/, '');\n }\n } else if (gitRefsMatch.repoName) {\n dep.packageName = `https://github.com/${gitRefsMatch.repoName}`;\n dep.sourceUrl = dep.packageName;\n }\n if (gitRefsMatch.refName) {\n dep.currentDigest = gitRefsMatch.refName;\n } else if (gitRefsMatch.branchName) {\n dep.currentValue = gitRefsMatch.branchName;\n } else if (gitRefsMatch.tagName) {\n dep.currentValue = gitRefsMatch.tagName;\n }\n dep.datasource = GitRefsDatasource.id;\n }\n res.deps.push(dep);\n }\n\n await processGroupBlock(line);\n\n for (const delimiter of delimiters) {\n const sourceBlockMatch = regEx(\n `^source\\\\s+((${delimiter}(?<registryUrl>[^${delimiter}]+)${delimiter})|(?<sourceName>\\\\w+))\\\\s+do`,\n ).exec(line);\n if (sourceBlockMatch) {\n let repositoryUrl = '';\n if (sourceBlockMatch.groups?.registryUrl) {\n repositoryUrl = sourceBlockMatch.groups.registryUrl;\n }\n if (\n sourceBlockMatch.groups?.sourceName &&\n variables[sourceBlockMatch.groups.sourceName]\n ) {\n repositoryUrl = variables[sourceBlockMatch.groups.sourceName];\n }\n const sourceLineNumber = lineNumber;\n let sourceContent = '';\n let sourceLine = '';\n\n while (lineNumber < lines.length && sourceLine.trim() !== 'end') {\n lineNumber += 1;\n sourceLine = lines[lineNumber];\n // istanbul ignore if\n if (!isString(sourceLine)) {\n logger.debug(\n { content, packageFile, type: 'sourceLine' },\n 'Bundler parsing error',\n );\n sourceLine = 'end';\n }\n\n await processGroupBlock(sourceLine.trim(), repositoryUrl, true);\n\n if (sourceLine.trim() !== 'end') {\n sourceContent += formatContent(sourceLine);\n }\n }\n\n const sourceRes = await extractPackageFile(sourceContent);\n\n if (sourceRes) {\n res.deps = res.deps.concat(\n sourceRes.deps.map((dep) => ({\n ...dep,\n registryUrls: [repositoryUrl],\n managerData: {\n lineNumber:\n Number(dep.managerData?.lineNumber) + sourceLineNumber + 1,\n },\n })),\n );\n }\n }\n }\n const platformsMatch = regEx(/^platforms\\s+(.*?)\\s+do/).test(line);\n if (platformsMatch) {\n const platformsLineNumber = lineNumber;\n let platformsContent = '';\n let platformsLine = '';\n while (lineNumber < lines.length && platformsLine !== 'end') {\n lineNumber += 1;\n platformsLine = lines[lineNumber];\n // istanbul ignore if\n if (!isString(platformsLine)) {\n logger.debug(\n { content, packageFile, type: 'platformsLine' },\n 'Bundler parsing error',\n );\n platformsLine = 'end';\n }\n if (platformsLine !== 'end') {\n platformsContent += formatContent(platformsLine);\n }\n }\n const platformsRes = await extractPackageFile(platformsContent);\n if (platformsRes) {\n res.deps = res.deps.concat(\n platformsRes.deps.map((dep) => ({\n ...dep,\n managerData: {\n lineNumber:\n Number(dep.managerData?.lineNumber) + platformsLineNumber + 1,\n },\n })),\n );\n }\n }\n const ifMatch = regEx(/^if\\s+(.*?)/).test(line);\n if (ifMatch) {\n const ifLineNumber = lineNumber;\n let ifContent = '';\n let ifLine = '';\n while (lineNumber < lines.length && ifLine !== 'end') {\n lineNumber += 1;\n ifLine = lines[lineNumber];\n // istanbul ignore if\n if (!isString(ifLine)) {\n logger.debug(\n { content, packageFile, type: 'ifLine' },\n 'Bundler parsing error',\n );\n ifLine = 'end';\n }\n if (ifLine !== 'end') {\n ifContent += formatContent(ifLine);\n }\n }\n const ifRes = await extractPackageFile(ifContent);\n if (ifRes) {\n res.deps = res.deps.concat(\n ifRes.deps.map((dep) => ({\n ...dep,\n managerData: {\n lineNumber:\n Number(dep.managerData?.lineNumber) + ifLineNumber + 1,\n },\n })),\n );\n }\n }\n }\n if (!res.deps.length && !res.registryUrls?.length) {\n return null;\n }\n\n if (packageFile) {\n const gemfileLockPath = await getLockFilePath(packageFile);\n const lockContent = await readLocalFile(gemfileLockPath, 'utf8');\n if (lockContent) {\n logger.debug(\n `Found lock file ${gemfileLockPath} for packageFile: ${packageFile}`,\n );\n res.lockFiles = [gemfileLockPath];\n const lockedEntries = extractLockFileEntries(lockContent);\n for (const dep of res.deps) {\n // TODO: types (#22198)\n const lockedDepValue = lockedEntries.get(`${dep.depName!}`);\n if (lockedDepValue) {\n dep.lockedVersion = lockedDepValue;\n }\n }\n }\n }\n return res;\n}\n"],"mappings":";;;;;;;;;;;AAYA,SAAS,cAAc,OAAuB;CAC5C,OAAO,GAAG,MAAM,QAAQ,MAAM,OAAO,GAAG,EAAE,EAAE;AAC9C;AAEA,MAAM,qBAAqB,MACzB,gDACF;AACA,MAAM,gBAAgB,MACpB,mHACF;AACA,MAAM,mBAAmB,MACvB,sEACF;AACA,MAAM,oBAAoB,MACxB,yOACF;AACA,MAAM,iBAAiB,MAAM,kCAAkC;AAE/D,eAAsB,mBACpB,SACA,aACoC;CACpC,IAAI;CACJ,eAAe,kBACb,MACA,eACA,gBAAgB,OACD;EACf,MAAM,aAAa,MAAM,qBAAqB,CAAC,CAAC,KAAK,IAAI;EACzD,IAAI,YAAY;GACd,MAAM,WAAW,WAAW,EAAE,CAC3B,MAAM,GAAG,CAAC,CACV,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC,CAC5B,KAAK,UAAU,MAAM,QAAQ,MAAM,IAAI,GAAG,EAAE,CAAC;GAEhD,MAAM,kBAAkB;GACxB,IAAI,eAAe;GACnB,IAAI,YAAY;GAEhB,OACE,aAAa,MAAM,WAClB,gBAAgB,UAAU,KAAK,MAAM,QAAQ,cAAc,QAC5D;IACA,cAAc;IACd,YAAY,MAAM;;IAGlB,IAAI,CAAC,SAAS,SAAS,GAAG;KACxB,OAAO,MACL;MAAE;MAAS;MAAa,MAAM;KAAY,GAC1C,uBACF;KACA,YAAY;IACd;IACA,IAAI,gBAAgB,UAAU,KAAK,MAAM,QAAQ,cAAc,OAC7D,gBAAgB,cAAc,SAAS;GAE3C;GAEA,MAAM,WAAW,MAAM,mBAAmB,YAAY;GACtD,IAAI,UACF,IAAI,OAAO,IAAI,KAAK,OAClB,SAAS,KAAK,KAAK,QAAQ;IACzB,MAAM,YAAY;KAChB,GAAG;KACH;KACA,aAAa,EACX,YACE,OAAO,IAAI,aAAa,UAAU,IAAI,kBAAkB,EAC5D;IACF;IACA,IAAI,eACF,UAAU,eAAe,CAAC,aAAa;IAEzC,OAAO;GACT,CAAC,CACH;EAEJ;CACF;CACA,MAAM,MAA0B;EAC9B,cAAc,CAAC;EACf,MAAM,CAAC;CACT;CAEA,MAAM,YAAoC,CAAC;CAE3C,MAAM,QAAQ,QAAQ,MAAM,YAAY;CACxC,KAAK,aAAa,GAAG,aAAa,MAAM,QAAQ,cAAc,GAAG;EAC/D,MAAM,OAAO,MAAM;EACnB,IAAI,cAAuC;EAC3C,KAAK,MAAM,aAAa,YACtB,cACE,eACA,MACE,aAAa,UAAU,mBAAmB,UAAU,KAAK,UAAU,4BACrE,CAAC,CAAC,KAAK,IAAI;EAEf,IAAI,aAAa;GACf,IAAI,YAAY,QAAQ,aACtB,IAAI,cAAc,KAAK,YAAY,OAAO,WAAW;GAEvD,IAAI,YAAY,QAAQ,YAAY;IAClC,MAAM,cAAc,UAAU,YAAY,OAAO;IACjD,IAAI,aACF,IAAI,cAAc,KAAK,WAAW;GAEtC;EACF;EAEA,MAAM,YAAY,mBAAmB,IAAI;EACzC,IAAI,WACF,IAAI,KAAK,KAAK;GACZ,SAAS;GACT,cAAc;GACd,YAAY,sBAAsB;GAClC,cAAc;EAChB,CAAC;EAGH,MAAM,gBAAgB,mBAAmB,KAAK,IAAI;EAClD,IAAI,eAAe,QAAQ,KACzB,UAAU,cAAc,QAAQ,OAAO,cAAc,QAAQ;EAG/D,MAAM,WAAW,cAAc,KAAK,IAAI,CAAC,EAAE;EAE3C,IAAI,UAAU;GACZ,MAAM,MAAyB;IAC7B,SAAS,SAAS;IAClB,aAAa,EAAE,WAAW;IAC1B,YAAY,mBAAmB;GACjC;GAEA,IAAI,SAAS,cAEX,IAAI,eADiB,SAAS;GAKhC,IADkB,eAAe,KAAK,IAAI,CAAC,EAAE,QAE3C,IAAI,aAAa;GAGnB,MAAM,cAAc,iBAAiB,KAAK,IAAI,CAAC,EAAE;GACjD,IAAI,aACE;QAAA,YAAY,aACd,IAAI,eAAe,CAAC,YAAY,WAAW;SACtC,IAAI,YAAY,YACrB,IAAI,eAAe,CAAC,UAAU,YAAY,WAAW;GAAA;GAIzD,MAAM,eAAe,kBAAkB,KAAK,IAAI,CAAC,EAAE;GACnD,IAAI,cAAc;IAChB,IAAI,aAAa,QAAQ;KACvB,MAAM,SAAS,aAAa;KAC5B,IAAI,cAAc;KAElB,IAAI,UAAU,MAAM,GAClB,IAAI,YAAY,OAAO,QAAQ,UAAU,EAAE;IAE/C,OAAO,IAAI,aAAa,UAAU;KAChC,IAAI,cAAc,sBAAsB,aAAa;KACrD,IAAI,YAAY,IAAI;IACtB;IACA,IAAI,aAAa,SACf,IAAI,gBAAgB,aAAa;SAC5B,IAAI,aAAa,YACtB,IAAI,eAAe,aAAa;SAC3B,IAAI,aAAa,SACtB,IAAI,eAAe,aAAa;IAElC,IAAI,aAAa,kBAAkB;GACrC;GACA,IAAI,KAAK,KAAK,GAAG;EACnB;EAEA,MAAM,kBAAkB,IAAI;EAE5B,KAAK,MAAM,aAAa,YAAY;GAClC,MAAM,mBAAmB,MACvB,gBAAgB,UAAU,mBAAmB,UAAU,KAAK,UAAU,6BACxE,CAAC,CAAC,KAAK,IAAI;GACX,IAAI,kBAAkB;IACpB,IAAI,gBAAgB;IACpB,IAAI,iBAAiB,QAAQ,aAC3B,gBAAgB,iBAAiB,OAAO;IAE1C,IACE,iBAAiB,QAAQ,cACzB,UAAU,iBAAiB,OAAO,aAElC,gBAAgB,UAAU,iBAAiB,OAAO;IAEpD,MAAM,mBAAmB;IACzB,IAAI,gBAAgB;IACpB,IAAI,aAAa;IAEjB,OAAO,aAAa,MAAM,UAAU,WAAW,KAAK,MAAM,OAAO;KAC/D,cAAc;KACd,aAAa,MAAM;;KAEnB,IAAI,CAAC,SAAS,UAAU,GAAG;MACzB,OAAO,MACL;OAAE;OAAS;OAAa,MAAM;MAAa,GAC3C,uBACF;MACA,aAAa;KACf;KAEA,MAAM,kBAAkB,WAAW,KAAK,GAAG,eAAe,IAAI;KAE9D,IAAI,WAAW,KAAK,MAAM,OACxB,iBAAiB,cAAc,UAAU;IAE7C;IAEA,MAAM,YAAY,MAAM,mBAAmB,aAAa;IAExD,IAAI,WACF,IAAI,OAAO,IAAI,KAAK,OAClB,UAAU,KAAK,KAAK,SAAS;KAC3B,GAAG;KACH,cAAc,CAAC,aAAa;KAC5B,aAAa,EACX,YACE,OAAO,IAAI,aAAa,UAAU,IAAI,mBAAmB,EAC7D;IACF,EAAE,CACJ;GAEJ;EACF;EAEA,IADuB,MAAM,yBAAyB,CAAC,CAAC,KAAK,IAC5C,GAAG;GAClB,MAAM,sBAAsB;GAC5B,IAAI,mBAAmB;GACvB,IAAI,gBAAgB;GACpB,OAAO,aAAa,MAAM,UAAU,kBAAkB,OAAO;IAC3D,cAAc;IACd,gBAAgB,MAAM;;IAEtB,IAAI,CAAC,SAAS,aAAa,GAAG;KAC5B,OAAO,MACL;MAAE;MAAS;MAAa,MAAM;KAAgB,GAC9C,uBACF;KACA,gBAAgB;IAClB;IACA,IAAI,kBAAkB,OACpB,oBAAoB,cAAc,aAAa;GAEnD;GACA,MAAM,eAAe,MAAM,mBAAmB,gBAAgB;GAC9D,IAAI,cACF,IAAI,OAAO,IAAI,KAAK,OAClB,aAAa,KAAK,KAAK,SAAS;IAC9B,GAAG;IACH,aAAa,EACX,YACE,OAAO,IAAI,aAAa,UAAU,IAAI,sBAAsB,EAChE;GACF,EAAE,CACJ;EAEJ;EAEA,IADgB,MAAM,aAAa,CAAC,CAAC,KAAK,IAChC,GAAG;GACX,MAAM,eAAe;GACrB,IAAI,YAAY;GAChB,IAAI,SAAS;GACb,OAAO,aAAa,MAAM,UAAU,WAAW,OAAO;IACpD,cAAc;IACd,SAAS,MAAM;;IAEf,IAAI,CAAC,SAAS,MAAM,GAAG;KACrB,OAAO,MACL;MAAE;MAAS;MAAa,MAAM;KAAS,GACvC,uBACF;KACA,SAAS;IACX;IACA,IAAI,WAAW,OACb,aAAa,cAAc,MAAM;GAErC;GACA,MAAM,QAAQ,MAAM,mBAAmB,SAAS;GAChD,IAAI,OACF,IAAI,OAAO,IAAI,KAAK,OAClB,MAAM,KAAK,KAAK,SAAS;IACvB,GAAG;IACH,aAAa,EACX,YACE,OAAO,IAAI,aAAa,UAAU,IAAI,eAAe,EACzD;GACF,EAAE,CACJ;EAEJ;CACF;CACA,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,cAAc,QACzC,OAAO;CAGT,IAAI,aAAa;EACf,MAAM,kBAAkB,MAAM,gBAAgB,WAAW;EACzD,MAAM,cAAc,MAAM,cAAc,iBAAiB,MAAM;EAC/D,IAAI,aAAa;GACf,OAAO,MACL,mBAAmB,gBAAgB,oBAAoB,aACzD;GACA,IAAI,YAAY,CAAC,eAAe;GAChC,MAAM,gBAAgB,uBAAuB,WAAW;GACxD,KAAK,MAAM,OAAO,IAAI,MAAM;IAE1B,MAAM,iBAAiB,cAAc,IAAI,GAAG,IAAI,SAAU;IAC1D,IAAI,gBACF,IAAI,gBAAgB;GAExB;EACF;CACF;CACA,OAAO;AACT"}
1
+ {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/bundler/extract.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { newlineRegex, regEx } from '../../../util/regex.ts';\nimport { isHttpUrl } from '../../../util/url.ts';\nimport { GitRefsDatasource } from '../../datasource/git-refs/index.ts';\nimport { RubyVersionDatasource } from '../../datasource/ruby-version/index.ts';\nimport { RubygemsDatasource } from '../../datasource/rubygems/index.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport { delimiters, extractRubyVersion, getLockFilePath } from './common.ts';\nimport { extractLockFileEntries } from './locked-version.ts';\n\nfunction formatContent(input: string): string {\n return `${input.replace(regEx(/^ {2}/), '')}\\n`; //remove leading whitespace and add a new line at the end\n}\n\nconst variableMatchRegex = regEx(\n `^(?<key>\\\\w+)\\\\s*=\\\\s*['\"](?<value>[^'\"]+)['\"]`,\n);\nconst gemMatchRegex = regEx(\n `^\\\\s*gem\\\\s+(['\"])(?<depName>[^'\"]+)(['\"])(\\\\s*,\\\\s*(?<currentValue>(['\"])[^'\"]+['\"](\\\\s*,\\\\s*['\"][^'\"]+['\"])?))?`,\n);\nconst sourceMatchRegex = regEx(\n `source:\\\\s*((?:['\"](?<registryUrl>[^'\"]+)['\"])|(?<sourceName>\\\\w+))?`,\n);\nconst gitRefsMatchRegex = regEx(\n `((git:\\\\s*['\"](?<gitUrl>[^'\"]+)['\"])|(\\\\s*,\\\\s*github:\\\\s*['\"](?<repoName>[^'\"]+)['\"]))(\\\\s*,\\\\s*branch:\\\\s*['\"](?<branchName>[^'\"]+)['\"])?(\\\\s*,\\\\s*ref:\\\\s*['\"](?<refName>[^'\"]+)['\"])?(\\\\s*,\\\\s*tag:\\\\s*['\"](?<tagName>[^'\"]+)['\"])?`,\n);\nconst pathMatchRegex = regEx(`path:\\\\s*['\"](?<path>[^'\"]+)['\"]`);\n\nexport async function extractPackageFile(\n content: string,\n packageFile?: string,\n): Promise<PackageFileContent | null> {\n let lineNumber: number;\n async function processGroupBlock(\n line: string,\n repositoryUrl?: string,\n trimGroupLine = false,\n ): Promise<void> {\n const groupMatch = regEx(/^group\\s+(.*?)\\s+do/).exec(line);\n if (groupMatch) {\n const depTypes = groupMatch[1]\n .split(',')\n .map((group) => group.trim())\n .map((group) => group.replace(regEx(/^:/), ''));\n\n const groupLineNumber = lineNumber;\n let groupContent = '';\n let groupLine = '';\n\n while (\n lineNumber < lines.length &&\n (trimGroupLine ? groupLine.trim() !== 'end' : groupLine !== 'end')\n ) {\n lineNumber += 1;\n groupLine = lines[lineNumber];\n\n // istanbul ignore if\n if (!isString(groupLine)) {\n logger.debug(\n { content, packageFile, type: 'groupLine' },\n 'Bundler parsing error',\n );\n groupLine = 'end';\n }\n if (trimGroupLine ? groupLine.trim() !== 'end' : groupLine !== 'end') {\n groupContent += formatContent(groupLine);\n }\n }\n\n const groupRes = await extractPackageFile(groupContent);\n if (groupRes) {\n res.deps = res.deps.concat(\n groupRes.deps.map((dep) => {\n const depObject = {\n ...dep,\n depTypes,\n managerData: {\n lineNumber:\n Number(dep.managerData?.lineNumber) + groupLineNumber + 1,\n },\n };\n if (repositoryUrl) {\n depObject.registryUrls = [repositoryUrl];\n }\n return depObject;\n }),\n );\n }\n }\n }\n const res: PackageFileContent = {\n registryUrls: [],\n deps: [],\n };\n\n const variables: Record<string, string> = {};\n\n const lines = content.split(newlineRegex);\n for (lineNumber = 0; lineNumber < lines.length; lineNumber += 1) {\n const line = lines[lineNumber];\n let sourceMatch: RegExpMatchArray | null = null;\n for (const delimiter of delimiters) {\n sourceMatch =\n sourceMatch ??\n regEx(\n `^source ((${delimiter}(?<registryUrl>[^${delimiter}]+)${delimiter})|(?<sourceName>\\\\w+))\\\\s*$`,\n ).exec(line);\n }\n if (sourceMatch) {\n if (sourceMatch.groups?.registryUrl) {\n res.registryUrls?.push(sourceMatch.groups.registryUrl);\n }\n if (sourceMatch.groups?.sourceName) {\n const registryUrl = variables[sourceMatch.groups.sourceName];\n if (registryUrl) {\n res.registryUrls?.push(registryUrl);\n }\n }\n }\n\n const rubyMatch = extractRubyVersion(line);\n if (rubyMatch) {\n res.deps.push({\n depName: 'ruby',\n currentValue: rubyMatch,\n datasource: RubyVersionDatasource.id,\n registryUrls: null,\n });\n }\n\n const variableMatch = variableMatchRegex.exec(line);\n if (variableMatch?.groups?.key) {\n variables[variableMatch.groups?.key] = variableMatch.groups?.value;\n }\n\n const gemMatch = gemMatchRegex.exec(line)?.groups;\n\n if (gemMatch) {\n const dep: PackageDependency = {\n depName: gemMatch.depName,\n managerData: { lineNumber },\n datasource: RubygemsDatasource.id,\n };\n\n if (gemMatch.currentValue) {\n const currentValue = gemMatch.currentValue;\n dep.currentValue = currentValue;\n }\n\n const pathMatch = pathMatchRegex.exec(line)?.groups;\n if (pathMatch) {\n dep.skipReason = 'internal-package';\n }\n\n const sourceMatch = sourceMatchRegex.exec(line)?.groups;\n if (sourceMatch) {\n if (sourceMatch.registryUrl) {\n dep.registryUrls = [sourceMatch.registryUrl];\n } else if (sourceMatch.sourceName) {\n dep.registryUrls = [variables[sourceMatch.sourceName]];\n }\n }\n\n const gitRefsMatch = gitRefsMatchRegex.exec(line)?.groups;\n if (gitRefsMatch) {\n if (gitRefsMatch.gitUrl) {\n const gitUrl = gitRefsMatch.gitUrl;\n dep.packageName = gitUrl;\n\n if (isHttpUrl(gitUrl)) {\n dep.sourceUrl = gitUrl.replace(regEx(/\\.git$/), '');\n }\n } else if (gitRefsMatch.repoName) {\n dep.packageName = `https://github.com/${gitRefsMatch.repoName}`;\n dep.sourceUrl = dep.packageName;\n }\n if (gitRefsMatch.refName) {\n dep.currentDigest = gitRefsMatch.refName;\n } else if (gitRefsMatch.branchName) {\n dep.currentValue = gitRefsMatch.branchName;\n } else if (gitRefsMatch.tagName) {\n dep.currentValue = gitRefsMatch.tagName;\n }\n dep.datasource = GitRefsDatasource.id;\n }\n res.deps.push(dep);\n }\n\n await processGroupBlock(line);\n\n for (const delimiter of delimiters) {\n const sourceBlockMatch = regEx(\n `^source\\\\s+((${delimiter}(?<registryUrl>[^${delimiter}]+)${delimiter})|(?<sourceName>\\\\w+))\\\\s+do`,\n ).exec(line);\n if (sourceBlockMatch) {\n let repositoryUrl = '';\n if (sourceBlockMatch.groups?.registryUrl) {\n repositoryUrl = sourceBlockMatch.groups.registryUrl;\n }\n if (\n sourceBlockMatch.groups?.sourceName &&\n variables[sourceBlockMatch.groups.sourceName]\n ) {\n repositoryUrl = variables[sourceBlockMatch.groups.sourceName];\n }\n const sourceLineNumber = lineNumber;\n let sourceContent = '';\n let sourceLine = '';\n\n while (lineNumber < lines.length && sourceLine.trim() !== 'end') {\n lineNumber += 1;\n sourceLine = lines[lineNumber];\n // istanbul ignore if\n if (!isString(sourceLine)) {\n logger.debug(\n { content, packageFile, type: 'sourceLine' },\n 'Bundler parsing error',\n );\n sourceLine = 'end';\n }\n\n await processGroupBlock(sourceLine.trim(), repositoryUrl, true);\n\n if (sourceLine.trim() !== 'end') {\n sourceContent += formatContent(sourceLine);\n }\n }\n\n const sourceRes = await extractPackageFile(sourceContent);\n\n if (sourceRes) {\n res.deps = res.deps.concat(\n sourceRes.deps.map((dep) => ({\n ...dep,\n registryUrls: [repositoryUrl],\n managerData: {\n lineNumber:\n Number(dep.managerData?.lineNumber) + sourceLineNumber + 1,\n },\n })),\n );\n }\n }\n }\n const platformsMatch = regEx(/^platforms\\s+(.*?)\\s+do/).test(line);\n if (platformsMatch) {\n const platformsLineNumber = lineNumber;\n let platformsContent = '';\n let platformsLine = '';\n while (lineNumber < lines.length && platformsLine !== 'end') {\n lineNumber += 1;\n platformsLine = lines[lineNumber];\n // istanbul ignore if\n if (!isString(platformsLine)) {\n logger.debug(\n { content, packageFile, type: 'platformsLine' },\n 'Bundler parsing error',\n );\n platformsLine = 'end';\n }\n if (platformsLine !== 'end') {\n platformsContent += formatContent(platformsLine);\n }\n }\n const platformsRes = await extractPackageFile(platformsContent);\n if (platformsRes) {\n res.deps = res.deps.concat(\n platformsRes.deps.map((dep) => ({\n ...dep,\n managerData: {\n lineNumber:\n Number(dep.managerData?.lineNumber) + platformsLineNumber + 1,\n },\n })),\n );\n }\n }\n const ifMatch = regEx(/^if\\s+(.*?)/).test(line);\n if (ifMatch) {\n const ifLineNumber = lineNumber;\n let ifContent = '';\n let ifLine = '';\n while (lineNumber < lines.length && ifLine !== 'end') {\n lineNumber += 1;\n ifLine = lines[lineNumber];\n // istanbul ignore if\n if (!isString(ifLine)) {\n logger.debug(\n { content, packageFile, type: 'ifLine' },\n 'Bundler parsing error',\n );\n ifLine = 'end';\n }\n if (ifLine !== 'end') {\n ifContent += formatContent(ifLine);\n }\n }\n const ifRes = await extractPackageFile(ifContent);\n if (ifRes) {\n res.deps = res.deps.concat(\n ifRes.deps.map((dep) => ({\n ...dep,\n managerData: {\n lineNumber:\n Number(dep.managerData?.lineNumber) + ifLineNumber + 1,\n },\n })),\n );\n }\n }\n }\n if (!res.deps.length && !res.registryUrls?.length) {\n return null;\n }\n\n if (packageFile) {\n const gemfileLockPath = await getLockFilePath(packageFile);\n const lockContent = await readLocalFile(gemfileLockPath, 'utf8');\n if (lockContent) {\n logger.debug(\n `Found lock file ${gemfileLockPath} for packageFile: ${packageFile}`,\n );\n res.lockFiles = [gemfileLockPath];\n const lockedEntries = extractLockFileEntries(lockContent);\n for (const dep of res.deps) {\n // TODO: types (#22198)\n const lockedDepValue = lockedEntries.get(`${dep.depName!}`);\n if (lockedDepValue) {\n dep.lockedVersion = lockedDepValue;\n }\n }\n }\n }\n return res;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/manager/cake/index.ts"],"sourcesContent":["import moo from 'moo';\nimport type { Category } from '../../../constants/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { isHttpUrl, parseUrl } from '../../../util/url.ts';\nimport { NugetDatasource } from '../../datasource/nuget/index.ts';\nimport type { NugetPackageDependency, Registry } from '../nuget/types.ts';\nimport { applyRegistries, getConfiguredRegistries } from '../nuget/util.ts';\nimport type { ExtractConfig, PackageFileContent } from '../types.ts';\n\nexport const url = 'https://cakebuild.net/docs';\nexport const categories: Category[] = ['dotnet'];\n\nexport const defaultConfig = {\n managerFilePatterns: ['/\\\\.cake$/'],\n};\n\nexport const supportedDatasources = [NugetDatasource.id];\n\nconst lexer = moo.states({\n main: {\n lineComment: { match: /\\/\\/.*?$/ }, // TODO #12870\n multiLineComment: { match: /\\/\\*[^]*?\\*\\//, lineBreaks: true }, // TODO #12870\n dependency: {\n match: /^#(?:addin|tool|module|load|l)\\s+(?:nuget|dotnet):.*$/, // TODO #12870\n },\n dependencyQuoted: {\n match: /^#(?:addin|tool|module|load|l)\\s+\"(?:nuget|dotnet):[^\"]+\"\\s*$/, // TODO #12870\n value: (s: string) => s.trim().slice(1, -1),\n },\n dependencyFromInstallTools: {\n match: /(?:InstallTools?\\s*\\()[^)]+(?:\\s*\\)\\s*;)/,\n lineBreaks: true,\n },\n unknown: moo.fallback,\n },\n});\n\nfunction parseDependencyLine(line: string): NugetPackageDependency | null {\n let url = line.replace(regEx(/^[^:]*:/), '');\n const isEmptyHost = url.startsWith('?');\n url = isEmptyHost ? `http://localhost/${url}` : url;\n\n const parsedUrl = parseUrl(url);\n if (!parsedUrl) {\n return null;\n }\n const { origin, pathname, searchParams } = parsedUrl;\n\n const registryUrl = `${origin}${pathname}`;\n\n const depName = searchParams.get('package')!;\n const currentValue = searchParams.get('version') ?? undefined;\n\n const result: NugetPackageDependency = {\n datasource: NugetDatasource.id,\n depName,\n currentValue,\n };\n\n if (!isEmptyHost) {\n if (isHttpUrl(parsedUrl)) {\n result.registryUrls = [registryUrl];\n } else {\n result.skipReason = 'unsupported-url';\n }\n }\n\n return result;\n}\n\nfunction parseAndPushDependencyLine(\n registries: Registry[] | undefined,\n deps: NugetPackageDependency[],\n value: string,\n): void {\n const dep = parseDependencyLine(value);\n if (dep) {\n applyRegistries(dep, registries);\n deps.push(dep);\n }\n}\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n _config: ExtractConfig,\n): Promise<PackageFileContent> {\n const deps: NugetPackageDependency[] = [];\n const registries = await getConfiguredRegistries(packageFile);\n\n lexer.reset(content);\n let token = lexer.next();\n while (token) {\n const { type, value } = token;\n if (type === 'dependency' || type === 'dependencyQuoted') {\n parseAndPushDependencyLine(registries, deps, value);\n } else if (type === 'dependencyFromInstallTools') {\n const matches = value.matchAll(regEx(/\"dotnet:[^\"]+\"/g));\n for (const match of matches) {\n const withoutQuote = match.toString().slice(1, -1);\n parseAndPushDependencyLine(registries, deps, withoutQuote);\n }\n }\n token = lexer.next();\n }\n return { deps };\n}\n"],"mappings":";;;;;;;;;;;;;;AASA,MAAa,MAAM;AACnB,MAAa,aAAyB,CAAC,QAAQ;AAE/C,MAAa,gBAAgB,EAC3B,qBAAqB,CAAC,YAAY,EACpC;AAEA,MAAa,uBAAuB,CAAC,gBAAgB,EAAE;AAEvD,MAAM,QAAQ,IAAI,OAAO,EACvB,MAAM;CACJ,aAAa,EAAE,OAAO,WAAW;CACjC,kBAAkB;EAAE,OAAO;EAAiB,YAAY;CAAK;CAC7D,YAAY,EACV,OAAO,wDACT;CACA,kBAAkB;EAChB,OAAO;EACP,QAAQ,MAAc,EAAE,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE;CAC5C;CACA,4BAA4B;EAC1B,OAAO;EACP,YAAY;CACd;CACA,SAAS,IAAI;AACf,EACF,CAAC;AAED,SAAS,oBAAoB,MAA6C;CACxE,IAAI,MAAM,KAAK,QAAQ,MAAM,SAAS,GAAG,EAAE;CAC3C,MAAM,cAAc,IAAI,WAAW,GAAG;CACtC,MAAM,cAAc,oBAAoB,QAAQ;CAEhD,MAAM,YAAY,SAAS,GAAG;CAC9B,IAAI,CAAC,WACH,OAAO;CAET,MAAM,EAAE,QAAQ,UAAU,iBAAiB;CAE3C,MAAM,cAAc,GAAG,SAAS;CAEhC,MAAM,UAAU,aAAa,IAAI,SAAS;CAC1C,MAAM,eAAe,aAAa,IAAI,SAAS,KAAK,KAAA;CAEpD,MAAM,SAAiC;EACrC,YAAY,gBAAgB;EAC5B;EACA;CACF;CAEA,IAAI,CAAC,aACH,IAAI,UAAU,SAAS,GACrB,OAAO,eAAe,CAAC,WAAW;MAElC,OAAO,aAAa;CAIxB,OAAO;AACT;AAEA,SAAS,2BACP,YACA,MACA,OACM;CACN,MAAM,MAAM,oBAAoB,KAAK;CACrC,IAAI,KAAK;EACP,gBAAgB,KAAK,UAAU;EAC/B,KAAK,KAAK,GAAG;CACf;AACF;AAEA,eAAsB,mBACpB,SACA,aACA,SAC6B;CAC7B,MAAM,OAAiC,CAAC;CACxC,MAAM,aAAa,MAAM,wBAAwB,WAAW;CAE5D,MAAM,MAAM,OAAO;CACnB,IAAI,QAAQ,MAAM,KAAK;CACvB,OAAO,OAAO;EACZ,MAAM,EAAE,MAAM,UAAU;EACxB,IAAI,SAAS,gBAAgB,SAAS,oBACpC,2BAA2B,YAAY,MAAM,KAAK;OAC7C,IAAI,SAAS,8BAA8B;GAChD,MAAM,UAAU,MAAM,SAAS,MAAM,iBAAiB,CAAC;GACvD,KAAK,MAAM,SAAS,SAElB,2BAA2B,YAAY,MADlB,MAAM,SAAS,CAAC,CAAC,MAAM,GAAG,EACS,CAAC;EAE7D;EACA,QAAQ,MAAM,KAAK;CACrB;CACA,OAAO,EAAE,KAAK;AAChB"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../lib/modules/manager/cake/index.ts"],"sourcesContent":["import moo from 'moo';\nimport type { Category } from '../../../constants/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { isHttpUrl, parseUrl } from '../../../util/url.ts';\nimport { NugetDatasource } from '../../datasource/nuget/index.ts';\nimport type { NugetPackageDependency, Registry } from '../nuget/types.ts';\nimport { applyRegistries, getConfiguredRegistries } from '../nuget/util.ts';\nimport type { ExtractConfig, PackageFileContent } from '../types.ts';\n\nexport const url = 'https://cakebuild.net/docs';\nexport const categories: Category[] = ['dotnet'];\n\nexport const defaultConfig = {\n managerFilePatterns: ['/\\\\.cake$/'],\n};\n\nexport const supportedDatasources = [NugetDatasource.id];\n\n/* oxlint-disable renovate/require-regex-util -- moo lexer patterns must be native RegExp: moo recompiles their source with the native engine and rejects RE2 instances (TODO #12870) */\nconst lexer = moo.states({\n main: {\n lineComment: { match: /\\/\\/.*?$/ }, // TODO #12870\n multiLineComment: { match: /\\/\\*[^]*?\\*\\//, lineBreaks: true }, // TODO #12870\n dependency: {\n match: /^#(?:addin|tool|module|load|l)\\s+(?:nuget|dotnet):.*$/, // TODO #12870\n },\n dependencyQuoted: {\n match: /^#(?:addin|tool|module|load|l)\\s+\"(?:nuget|dotnet):[^\"]+\"\\s*$/, // TODO #12870\n value: (s: string) => s.trim().slice(1, -1),\n },\n dependencyFromInstallTools: {\n match: /(?:InstallTools?\\s*\\()[^)]+(?:\\s*\\)\\s*;)/,\n lineBreaks: true,\n },\n unknown: moo.fallback,\n },\n});\n/* oxlint-enable renovate/require-regex-util */\n\nfunction parseDependencyLine(line: string): NugetPackageDependency | null {\n let url = line.replace(regEx(/^[^:]*:/), '');\n const isEmptyHost = url.startsWith('?');\n url = isEmptyHost ? `http://localhost/${url}` : url;\n\n const parsedUrl = parseUrl(url);\n if (!parsedUrl) {\n return null;\n }\n const { origin, pathname, searchParams } = parsedUrl;\n\n const registryUrl = `${origin}${pathname}`;\n\n const depName = searchParams.get('package')!;\n const currentValue = searchParams.get('version') ?? undefined;\n\n const result: NugetPackageDependency = {\n datasource: NugetDatasource.id,\n depName,\n currentValue,\n };\n\n if (!isEmptyHost) {\n if (isHttpUrl(parsedUrl)) {\n result.registryUrls = [registryUrl];\n } else {\n result.skipReason = 'unsupported-url';\n }\n }\n\n return result;\n}\n\nfunction parseAndPushDependencyLine(\n registries: Registry[] | undefined,\n deps: NugetPackageDependency[],\n value: string,\n): void {\n const dep = parseDependencyLine(value);\n if (dep) {\n applyRegistries(dep, registries);\n deps.push(dep);\n }\n}\n\nexport async function extractPackageFile(\n content: string,\n packageFile: string,\n _config: ExtractConfig,\n): Promise<PackageFileContent> {\n const deps: NugetPackageDependency[] = [];\n const registries = await getConfiguredRegistries(packageFile);\n\n lexer.reset(content);\n let token = lexer.next();\n while (token) {\n const { type, value } = token;\n if (type === 'dependency' || type === 'dependencyQuoted') {\n parseAndPushDependencyLine(registries, deps, value);\n } else if (type === 'dependencyFromInstallTools') {\n const matches = value.matchAll(regEx(/\"dotnet:[^\"]+\"/g));\n for (const match of matches) {\n const withoutQuote = match.toString().slice(1, -1);\n parseAndPushDependencyLine(registries, deps, withoutQuote);\n }\n }\n token = lexer.next();\n }\n return { deps };\n}\n"],"mappings":";;;;;;;;;;;;;;AASA,MAAa,MAAM;AACnB,MAAa,aAAyB,CAAC,QAAQ;AAE/C,MAAa,gBAAgB,EAC3B,qBAAqB,CAAC,YAAY,EACpC;AAEA,MAAa,uBAAuB,CAAC,gBAAgB,EAAE;AAGvD,MAAM,QAAQ,IAAI,OAAO,EACvB,MAAM;CACJ,aAAa,EAAE,OAAO,WAAW;CACjC,kBAAkB;EAAE,OAAO;EAAiB,YAAY;CAAK;CAC7D,YAAY,EACV,OAAO,wDACT;CACA,kBAAkB;EAChB,OAAO;EACP,QAAQ,MAAc,EAAE,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE;CAC5C;CACA,4BAA4B;EAC1B,OAAO;EACP,YAAY;CACd;CACA,SAAS,IAAI;AACf,EACF,CAAC;AAGD,SAAS,oBAAoB,MAA6C;CACxE,IAAI,MAAM,KAAK,QAAQ,MAAM,SAAS,GAAG,EAAE;CAC3C,MAAM,cAAc,IAAI,WAAW,GAAG;CACtC,MAAM,cAAc,oBAAoB,QAAQ;CAEhD,MAAM,YAAY,SAAS,GAAG;CAC9B,IAAI,CAAC,WACH,OAAO;CAET,MAAM,EAAE,QAAQ,UAAU,iBAAiB;CAE3C,MAAM,cAAc,GAAG,SAAS;CAEhC,MAAM,UAAU,aAAa,IAAI,SAAS;CAC1C,MAAM,eAAe,aAAa,IAAI,SAAS,KAAK,KAAA;CAEpD,MAAM,SAAiC;EACrC,YAAY,gBAAgB;EAC5B;EACA;CACF;CAEA,IAAI,CAAC,aACH,IAAI,UAAU,SAAS,GACrB,OAAO,eAAe,CAAC,WAAW;MAElC,OAAO,aAAa;CAIxB,OAAO;AACT;AAEA,SAAS,2BACP,YACA,MACA,OACM;CACN,MAAM,MAAM,oBAAoB,KAAK;CACrC,IAAI,KAAK;EACP,gBAAgB,KAAK,UAAU;EAC/B,KAAK,KAAK,GAAG;CACf;AACF;AAEA,eAAsB,mBACpB,SACA,aACA,SAC6B;CAC7B,MAAM,OAAiC,CAAC;CACxC,MAAM,aAAa,MAAM,wBAAwB,WAAW;CAE5D,MAAM,MAAM,OAAO;CACnB,IAAI,QAAQ,MAAM,KAAK;CACvB,OAAO,OAAO;EACZ,MAAM,EAAE,MAAM,UAAU;EACxB,IAAI,SAAS,gBAAgB,SAAS,oBACpC,2BAA2B,YAAY,MAAM,KAAK;OAC7C,IAAI,SAAS,8BAA8B;GAChD,MAAM,UAAU,MAAM,SAAS,MAAM,iBAAiB,CAAC;GACvD,KAAK,MAAM,SAAS,SAElB,2BAA2B,YAAY,MADlB,MAAM,SAAS,CAAC,CAAC,MAAM,GAAG,EACS,CAAC;EAE7D;EACA,QAAQ,MAAM,KAAK;CACrB;CACA,OAAO,EAAE,KAAK;AAChB"}
@@ -18,7 +18,7 @@ const ComposerRepo = z.object({
18
18
  *
19
19
  * See https://github.com/composer/composer/blob/750a92b4b7aecda0e5b2f9b963f1cb1421900675/src/Composer/Repository/ComposerRepository.php#L815
20
20
  */
21
- url: z.string().transform((url) => url.replace(/\/packages\.json$/, ""))
21
+ url: z.string().transform((url) => url.replace(regEx(/\/packages\.json$/), ""))
22
22
  });
23
23
  const GitRepo = z.object({
24
24
  type: z.enum(["vcs", "git"]).transform(() => "git"),
@@ -129,7 +129,7 @@ const ComposerExtract = z.object({
129
129
  content: z.string(),
130
130
  fileName: z.string()
131
131
  }).transform(({ content, fileName }) => {
132
- const lockfileName = fileName.replace(/\.json$/, ".lock");
132
+ const lockfileName = fileName.replace(regEx(/\.json$/), ".lock");
133
133
  return {
134
134
  file: content,
135
135
  lockfileName,
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","names":["semverComposer"],"sources":["../../../../lib/modules/manager/composer/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport {\n Json,\n LooseArray,\n LooseRecord,\n withDebugMessage,\n} from '../../../util/schema-utils/index.ts';\nimport { BitbucketTagsDatasource } from '../../datasource/bitbucket-tags/index.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { PackagistDatasource } from '../../datasource/packagist/index.ts';\nimport { api as semverComposer } from '../../versioning/composer/index.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport type { ComposerManagerData } from './types.ts';\n\nexport const ComposerRepo = z.object({\n type: z.literal('composer'),\n /**\n * The regUrl is expected to be a base URL. GitLab composer repository installation guide specifies\n * to use a base URL containing packages.json. Composer still works in this scenario by determining\n * whether to add / remove packages.json from the URL.\n *\n * See https://github.com/composer/composer/blob/750a92b4b7aecda0e5b2f9b963f1cb1421900675/src/Composer/Repository/ComposerRepository.php#L815\n */\n url: z.string().transform((url) => url.replace(/\\/packages\\.json$/, '')),\n});\nexport type ComposerRepo = z.infer<typeof ComposerRepo>;\n\nexport const GitRepo = z.object({\n type: z.enum(['vcs', 'git']).transform(() => 'git' as const),\n url: z.string(),\n name: z.string().optional(),\n});\nexport type GitRepo = z.infer<typeof GitRepo>;\n\nexport const PathRepo = z.object({\n type: z.literal('path'),\n url: z.string(),\n name: z.string().optional(),\n});\nexport type PathRepo = z.infer<typeof PathRepo>;\n\nexport const PackageRepo = z.object({\n type: z.literal('package'),\n});\n\nexport const Repo = z.discriminatedUnion('type', [\n ComposerRepo,\n GitRepo,\n PathRepo,\n PackageRepo,\n]);\nexport type Repo = z.infer<typeof Repo>;\n\nexport const NamedRepo = z.discriminatedUnion('type', [\n ComposerRepo,\n GitRepo.extend({ name: z.string() }),\n PathRepo.extend({ name: z.string() }),\n PackageRepo,\n]);\nexport type NamedRepo = z.infer<typeof NamedRepo>;\n\nconst DisablePackagist = z.object({ type: z.literal('disable-packagist') });\nexport type DisablePackagist = z.infer<typeof DisablePackagist>;\n\nconst bitbucketUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)bitbucket\\.org[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\n\nexport const ReposRecord = LooseRecord(z.union([Repo, z.literal(false)]), {\n onError: ({ error: err }) => {\n logger.debug({ err }, 'Composer: error parsing repositories object');\n },\n}).transform((repos) => {\n const result: (NamedRepo | DisablePackagist)[] = [];\n for (const [name, repo] of Object.entries(repos)) {\n if (repo === false) {\n if (name === 'packagist' || name === 'packagist.org') {\n result.push({ type: 'disable-packagist' });\n }\n continue;\n }\n\n if (repo.type === 'path' || repo.type === 'git') {\n result.push({ name, ...repo });\n continue;\n }\n\n if (repo.type === 'composer') {\n result.push(repo);\n continue;\n }\n }\n\n return result;\n});\nexport type ReposRecord = z.infer<typeof ReposRecord>;\n\nexport const ReposArray = LooseArray(\n z.union([\n Repo,\n z\n .union([\n z.object({ packagist: z.literal(false) }),\n z.object({ 'packagist.org': z.literal(false) }),\n ])\n .transform((): DisablePackagist => ({ type: 'disable-packagist' })),\n ]),\n {\n onError: ({ error: err }) => {\n logger.debug({ err }, 'Composer: error parsing repositories array');\n },\n },\n).transform((repos) => {\n const result: (NamedRepo | DisablePackagist)[] = [];\n for (let idx = 0; idx < repos.length; idx++) {\n const repo = repos[idx];\n if (repo.type === 'path' || repo.type === 'git') {\n result.push({ name: `__${idx}`, ...repo });\n } else {\n result.push(repo);\n }\n }\n return result;\n});\nexport type ReposArray = z.infer<typeof ReposArray>;\n\nexport const Repos = z\n .union([ReposRecord, ReposArray])\n .default([]) // Prevents warnings for packages without repositories field\n .catch(withDebugMessage([], 'Composer: invalid \"repositories\" field'))\n .transform((repos) => {\n let packagist = true;\n const repoUrls: string[] = [];\n const gitRepos: Record<string, GitRepo> = {};\n const pathRepos: Record<string, PathRepo> = {};\n\n for (const repo of repos) {\n if (repo.type === 'composer') {\n repoUrls.push(repo.url);\n } else if (repo.type === 'git') {\n gitRepos[repo.name] = repo;\n } else if (repo.type === 'path') {\n pathRepos[repo.name] = repo;\n } else if (repo.type === 'disable-packagist') {\n packagist = false;\n }\n }\n\n if (packagist && repoUrls.length) {\n repoUrls.push('https://repo.packagist.org');\n }\n const registryUrls = repoUrls.length ? repoUrls : null;\n\n return { registryUrls, gitRepos, pathRepos };\n });\nexport type Repos = z.infer<typeof Repos>;\n\nconst RequireDefs = LooseRecord(z.string().transform((x) => x.trim())).catch(\n {},\n);\n\nexport const PackageFile = z\n .object({\n type: z.string().optional(),\n config: z\n .object({\n platform: z.object({\n php: z.string(),\n }),\n })\n .nullable()\n .catch(null),\n repositories: Repos,\n require: RequireDefs,\n 'require-dev': RequireDefs,\n })\n .transform(\n ({\n type: composerJsonType,\n config,\n repositories,\n require,\n 'require-dev': requireDev,\n }) => ({\n composerJsonType,\n config,\n repositories,\n require,\n requireDev,\n }),\n );\nexport type PackageFile = z.infer<typeof PackageFile>;\n\nconst LockedPackage = z.object({\n name: z.string(),\n version: z.string(),\n});\ntype LockedPackage = z.infer<typeof LockedPackage>;\n\nexport const Lockfile = z\n .object({\n 'plugin-api-version': z.string().optional(),\n packages: LooseArray(LockedPackage).catch([]),\n 'packages-dev': LooseArray(LockedPackage).catch([]),\n })\n .transform(\n ({\n 'plugin-api-version': pluginApiVersion,\n packages,\n 'packages-dev': packagesDev,\n }) => ({ pluginApiVersion, packages, packagesDev }),\n );\nexport type Lockfile = z.infer<typeof Lockfile>;\n\nexport const ComposerExtract = z\n .object({\n content: z.string(),\n fileName: z.string(),\n })\n .transform(({ content, fileName }) => {\n const lockfileName = fileName.replace(/\\.json$/, '.lock');\n return {\n file: content,\n lockfileName,\n lockfile: lockfileName,\n };\n })\n .pipe(\n z.object({\n file: Json.pipe(PackageFile),\n lockfileName: z.string(),\n lockfile: z\n .string()\n .transform((lockfileName) => readLocalFile(lockfileName, 'utf8'))\n .pipe(\n z.union([\n z.null(),\n z\n .string()\n .pipe(Json)\n .pipe(Lockfile)\n .nullable()\n .catch(withDebugMessage(null, 'Composer: does not match schema')),\n ]),\n ),\n }),\n )\n .transform(({ file, lockfile, lockfileName }) => {\n const { composerJsonType, require, requireDev } = file;\n const { registryUrls, gitRepos, pathRepos } = file.repositories;\n\n const deps: PackageDependency[] = [];\n\n const profiles = [\n {\n depType: 'require',\n req: require,\n locked: lockfile?.packages ?? [],\n },\n {\n depType: 'require-dev',\n req: requireDev,\n locked: lockfile?.packagesDev ?? [],\n },\n ];\n\n for (const { depType, req, locked } of profiles) {\n for (const [depName, currentValue] of Object.entries(req)) {\n if (depName === 'php') {\n deps.push({\n depType,\n depName,\n currentValue,\n datasource: GithubTagsDatasource.id,\n packageName: 'containerbase/php-prebuild',\n });\n continue;\n }\n\n if (pathRepos[depName]) {\n deps.push({\n depType,\n depName,\n currentValue,\n skipReason: 'path-dependency',\n });\n continue;\n }\n\n const dep: PackageDependency = {\n depType,\n depName,\n currentValue,\n };\n\n if (!depName.includes('/')) {\n dep.skipReason = 'unsupported';\n }\n\n const lockedDep = locked.find((item) => item.name === depName);\n if (lockedDep && semverComposer.isVersion(lockedDep.version)) {\n dep.lockedVersion = lockedDep.version.replace(regEx(/^v/i), '');\n }\n\n const gitRepo = gitRepos[depName];\n if (gitRepo) {\n const bitbucketMatchGroups = bitbucketUrlRegex.exec(\n gitRepo.url,\n )?.groups;\n\n if (bitbucketMatchGroups) {\n dep.datasource = BitbucketTagsDatasource.id;\n dep.packageName = bitbucketMatchGroups.packageName;\n deps.push(dep);\n continue;\n }\n\n dep.datasource = GitTagsDatasource.id;\n dep.packageName = gitRepo.url;\n deps.push(dep);\n continue;\n }\n\n dep.datasource = PackagistDatasource.id;\n\n if (registryUrls) {\n dep.registryUrls = registryUrls;\n }\n\n deps.push(dep);\n }\n }\n\n if (!deps.length) {\n return null;\n }\n\n const res: PackageFileContent<ComposerManagerData> = { deps };\n\n if (composerJsonType) {\n res.managerData = { composerJsonType };\n }\n\n if (require.php) {\n res.extractedConstraints = { php: require.php };\n }\n\n if (lockfile) {\n res.lockFiles = [lockfileName];\n }\n\n return res;\n });\nexport type ComposerExtract = z.infer<typeof ComposerExtract>;\n"],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","names":["semverComposer"],"sources":["../../../../lib/modules/manager/composer/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport {\n Json,\n LooseArray,\n LooseRecord,\n withDebugMessage,\n} from '../../../util/schema-utils/index.ts';\nimport { BitbucketTagsDatasource } from '../../datasource/bitbucket-tags/index.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { PackagistDatasource } from '../../datasource/packagist/index.ts';\nimport { api as semverComposer } from '../../versioning/composer/index.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport type { ComposerManagerData } from './types.ts';\n\nexport const ComposerRepo = z.object({\n type: z.literal('composer'),\n /**\n * The regUrl is expected to be a base URL. GitLab composer repository installation guide specifies\n * to use a base URL containing packages.json. Composer still works in this scenario by determining\n * whether to add / remove packages.json from the URL.\n *\n * See https://github.com/composer/composer/blob/750a92b4b7aecda0e5b2f9b963f1cb1421900675/src/Composer/Repository/ComposerRepository.php#L815\n */\n url: z\n .string()\n .transform((url) => url.replace(regEx(/\\/packages\\.json$/), '')),\n});\nexport type ComposerRepo = z.infer<typeof ComposerRepo>;\n\nexport const GitRepo = z.object({\n type: z.enum(['vcs', 'git']).transform(() => 'git' as const),\n url: z.string(),\n name: z.string().optional(),\n});\nexport type GitRepo = z.infer<typeof GitRepo>;\n\nexport const PathRepo = z.object({\n type: z.literal('path'),\n url: z.string(),\n name: z.string().optional(),\n});\nexport type PathRepo = z.infer<typeof PathRepo>;\n\nexport const PackageRepo = z.object({\n type: z.literal('package'),\n});\n\nexport const Repo = z.discriminatedUnion('type', [\n ComposerRepo,\n GitRepo,\n PathRepo,\n PackageRepo,\n]);\nexport type Repo = z.infer<typeof Repo>;\n\nexport const NamedRepo = z.discriminatedUnion('type', [\n ComposerRepo,\n GitRepo.extend({ name: z.string() }),\n PathRepo.extend({ name: z.string() }),\n PackageRepo,\n]);\nexport type NamedRepo = z.infer<typeof NamedRepo>;\n\nconst DisablePackagist = z.object({ type: z.literal('disable-packagist') });\nexport type DisablePackagist = z.infer<typeof DisablePackagist>;\n\nconst bitbucketUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)bitbucket\\.org[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\n\nexport const ReposRecord = LooseRecord(z.union([Repo, z.literal(false)]), {\n onError: ({ error: err }) => {\n logger.debug({ err }, 'Composer: error parsing repositories object');\n },\n}).transform((repos) => {\n const result: (NamedRepo | DisablePackagist)[] = [];\n for (const [name, repo] of Object.entries(repos)) {\n if (repo === false) {\n if (name === 'packagist' || name === 'packagist.org') {\n result.push({ type: 'disable-packagist' });\n }\n continue;\n }\n\n if (repo.type === 'path' || repo.type === 'git') {\n result.push({ name, ...repo });\n continue;\n }\n\n if (repo.type === 'composer') {\n result.push(repo);\n continue;\n }\n }\n\n return result;\n});\nexport type ReposRecord = z.infer<typeof ReposRecord>;\n\nexport const ReposArray = LooseArray(\n z.union([\n Repo,\n z\n .union([\n z.object({ packagist: z.literal(false) }),\n z.object({ 'packagist.org': z.literal(false) }),\n ])\n .transform((): DisablePackagist => ({ type: 'disable-packagist' })),\n ]),\n {\n onError: ({ error: err }) => {\n logger.debug({ err }, 'Composer: error parsing repositories array');\n },\n },\n).transform((repos) => {\n const result: (NamedRepo | DisablePackagist)[] = [];\n for (let idx = 0; idx < repos.length; idx++) {\n const repo = repos[idx];\n if (repo.type === 'path' || repo.type === 'git') {\n result.push({ name: `__${idx}`, ...repo });\n } else {\n result.push(repo);\n }\n }\n return result;\n});\nexport type ReposArray = z.infer<typeof ReposArray>;\n\nexport const Repos = z\n .union([ReposRecord, ReposArray])\n .default([]) // Prevents warnings for packages without repositories field\n .catch(withDebugMessage([], 'Composer: invalid \"repositories\" field'))\n .transform((repos) => {\n let packagist = true;\n const repoUrls: string[] = [];\n const gitRepos: Record<string, GitRepo> = {};\n const pathRepos: Record<string, PathRepo> = {};\n\n for (const repo of repos) {\n if (repo.type === 'composer') {\n repoUrls.push(repo.url);\n } else if (repo.type === 'git') {\n gitRepos[repo.name] = repo;\n } else if (repo.type === 'path') {\n pathRepos[repo.name] = repo;\n } else if (repo.type === 'disable-packagist') {\n packagist = false;\n }\n }\n\n if (packagist && repoUrls.length) {\n repoUrls.push('https://repo.packagist.org');\n }\n const registryUrls = repoUrls.length ? repoUrls : null;\n\n return { registryUrls, gitRepos, pathRepos };\n });\nexport type Repos = z.infer<typeof Repos>;\n\nconst RequireDefs = LooseRecord(z.string().transform((x) => x.trim())).catch(\n {},\n);\n\nexport const PackageFile = z\n .object({\n type: z.string().optional(),\n config: z\n .object({\n platform: z.object({\n php: z.string(),\n }),\n })\n .nullable()\n .catch(null),\n repositories: Repos,\n require: RequireDefs,\n 'require-dev': RequireDefs,\n })\n .transform(\n ({\n type: composerJsonType,\n config,\n repositories,\n require,\n 'require-dev': requireDev,\n }) => ({\n composerJsonType,\n config,\n repositories,\n require,\n requireDev,\n }),\n );\nexport type PackageFile = z.infer<typeof PackageFile>;\n\nconst LockedPackage = z.object({\n name: z.string(),\n version: z.string(),\n});\ntype LockedPackage = z.infer<typeof LockedPackage>;\n\nexport const Lockfile = z\n .object({\n 'plugin-api-version': z.string().optional(),\n packages: LooseArray(LockedPackage).catch([]),\n 'packages-dev': LooseArray(LockedPackage).catch([]),\n })\n .transform(\n ({\n 'plugin-api-version': pluginApiVersion,\n packages,\n 'packages-dev': packagesDev,\n }) => ({ pluginApiVersion, packages, packagesDev }),\n );\nexport type Lockfile = z.infer<typeof Lockfile>;\n\nexport const ComposerExtract = z\n .object({\n content: z.string(),\n fileName: z.string(),\n })\n .transform(({ content, fileName }) => {\n const lockfileName = fileName.replace(regEx(/\\.json$/), '.lock');\n return {\n file: content,\n lockfileName,\n lockfile: lockfileName,\n };\n })\n .pipe(\n z.object({\n file: Json.pipe(PackageFile),\n lockfileName: z.string(),\n lockfile: z\n .string()\n .transform((lockfileName) => readLocalFile(lockfileName, 'utf8'))\n .pipe(\n z.union([\n z.null(),\n z\n .string()\n .pipe(Json)\n .pipe(Lockfile)\n .nullable()\n .catch(withDebugMessage(null, 'Composer: does not match schema')),\n ]),\n ),\n }),\n )\n .transform(({ file, lockfile, lockfileName }) => {\n const { composerJsonType, require, requireDev } = file;\n const { registryUrls, gitRepos, pathRepos } = file.repositories;\n\n const deps: PackageDependency[] = [];\n\n const profiles = [\n {\n depType: 'require',\n req: require,\n locked: lockfile?.packages ?? [],\n },\n {\n depType: 'require-dev',\n req: requireDev,\n locked: lockfile?.packagesDev ?? [],\n },\n ];\n\n for (const { depType, req, locked } of profiles) {\n for (const [depName, currentValue] of Object.entries(req)) {\n if (depName === 'php') {\n deps.push({\n depType,\n depName,\n currentValue,\n datasource: GithubTagsDatasource.id,\n packageName: 'containerbase/php-prebuild',\n });\n continue;\n }\n\n if (pathRepos[depName]) {\n deps.push({\n depType,\n depName,\n currentValue,\n skipReason: 'path-dependency',\n });\n continue;\n }\n\n const dep: PackageDependency = {\n depType,\n depName,\n currentValue,\n };\n\n if (!depName.includes('/')) {\n dep.skipReason = 'unsupported';\n }\n\n const lockedDep = locked.find((item) => item.name === depName);\n if (lockedDep && semverComposer.isVersion(lockedDep.version)) {\n dep.lockedVersion = lockedDep.version.replace(regEx(/^v/i), '');\n }\n\n const gitRepo = gitRepos[depName];\n if (gitRepo) {\n const bitbucketMatchGroups = bitbucketUrlRegex.exec(\n gitRepo.url,\n )?.groups;\n\n if (bitbucketMatchGroups) {\n dep.datasource = BitbucketTagsDatasource.id;\n dep.packageName = bitbucketMatchGroups.packageName;\n deps.push(dep);\n continue;\n }\n\n dep.datasource = GitTagsDatasource.id;\n dep.packageName = gitRepo.url;\n deps.push(dep);\n continue;\n }\n\n dep.datasource = PackagistDatasource.id;\n\n if (registryUrls) {\n dep.registryUrls = registryUrls;\n }\n\n deps.push(dep);\n }\n }\n\n if (!deps.length) {\n return null;\n }\n\n const res: PackageFileContent<ComposerManagerData> = { deps };\n\n if (composerJsonType) {\n res.managerData = { composerJsonType };\n }\n\n if (require.php) {\n res.extractedConstraints = { php: require.php };\n }\n\n if (lockfile) {\n res.lockFiles = [lockfileName];\n }\n\n return res;\n });\nexport type ComposerExtract = z.infer<typeof ComposerExtract>;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"language.js","names":[],"sources":["../../../../lib/modules/manager/cpanfile/language.ts"],"sourcesContent":["import type { lexer as l, parser as p } from '@renovatebot/good-enough-parser';\nimport { lang } from '@renovatebot/good-enough-parser';\n\n/**\n * @see https://perldoc.perl.org/perldata#Scalar-value-constructors\n */\nconst bindigit = '[01]';\nconst octdigit = '[0-7]';\nconst digit = '[0-9]';\nconst nonzerodigit = '[1-9]';\nconst hexdigit = `(?:${digit}|[a-fA-F])`;\n\nconst bininteger = `(?:0[bB](?:_?${bindigit})+)`;\nconst octinteger = `(?:0(?:_?${octdigit})+)`;\nconst hexinteger = `(?:0[xX](?:_?${hexdigit})+)`;\nconst decinteger = `(?:${nonzerodigit}(?:_?${digit})*|0+(?:_?0)*)`;\nconst integer = `(?:${decinteger}|${bininteger}|${octinteger}|${hexinteger})`;\n\nconst digitpart = `(?:${digit}(?:_?${digit})*)`;\nconst fraction = `(?:\\\\.${digitpart})`;\nconst exponent = `(?:[eE][-+]?${digitpart})`;\nconst pointfloat = `(?:${digitpart}?${fraction}|${digitpart}\\\\.)`;\nconst exponentfloat = `(?:(?:${digitpart}|${pointfloat})${exponent})`;\nconst floatnumber = `(?:${pointfloat}|${exponentfloat})`;\n\nconst numbers = new RegExp(`(?:${floatnumber}|${integer})`);\n\nconst lexer: l.LexerConfig = {\n joinLines: null,\n comments: [{ type: 'line-comment', startsWith: '#' }],\n symbols: /[_a-zA-Z][_a-zA-Z0-9]*/,\n numbers,\n operators: ['==', '>=', '>', '=>', ',', ';'],\n brackets: [\n { startsWith: '{', endsWith: '}' },\n { startsWith: '(', endsWith: ')' },\n ],\n strings: [{ startsWith: \"'\" }, { startsWith: '\"' }],\n};\n\nconst parser: p.ParserConfig = {\n useIndentBlocks: false,\n};\n\nexport const cpanfile = lang.createLang({ lexer, parser });\n"],"mappings":";;;;;AAMA,MAAM,WAAW;AACjB,MAAM,WAAW;AACjB,MAAM,QAAQ;AACd,MAAM,eAAe;AACrB,MAAM,WAAW,MAAM,MAAM;AAE7B,MAAM,aAAa,gBAAgB,SAAS;AAC5C,MAAM,aAAa,YAAY,SAAS;AACxC,MAAM,aAAa,gBAAgB,SAAS;AAE5C,MAAM,UAAU,MAAM,MADG,aAAa,OAAO,MAAM,gBAClB,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW;AAE3E,MAAM,YAAY,MAAM,MAAM,OAAO,MAAM;AAC3C,MAAM,WAAW,SAAS,UAAU;AACpC,MAAM,WAAW,eAAe,UAAU;AAC1C,MAAM,aAAa,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU;AAE5D,MAAM,cAAc,MAAM,WAAW,GAAG,SADT,UAAU,GAAG,WAAW,GAAG,SAAS,GACb;AAItD,MAAM,QAAuB;CAC3B,WAAW;CACX,UAAU,CAAC;EAAE,MAAM;EAAgB,YAAY;CAAI,CAAC;CACpD,SAAS;CACT,SAAA,IANkB,OAAO,MAAM,YAAY,GAAG,QAAQ,EAMhD;CACN,WAAW;EAAC;EAAM;EAAM;EAAK;EAAM;EAAK;CAAG;CAC3C,UAAU,CACR;EAAE,YAAY;EAAK,UAAU;CAAI,GACjC;EAAE,YAAY;EAAK,UAAU;CAAI,CACnC;CACA,SAAS,CAAC,EAAE,YAAY,IAAI,GAAG,EAAE,YAAY,KAAI,CAAC;AACpD;AAMA,MAAa,WAAW,KAAK,WAAW;CAAE;CAAO,UAH/C,iBAAiB,MAG8B;AAAO,CAAC"}
1
+ {"version":3,"file":"language.js","names":[],"sources":["../../../../lib/modules/manager/cpanfile/language.ts"],"sourcesContent":["import type { lexer as l, parser as p } from '@renovatebot/good-enough-parser';\nimport { lang } from '@renovatebot/good-enough-parser';\n\n/**\n * @see https://perldoc.perl.org/perldata#Scalar-value-constructors\n */\nconst bindigit = '[01]';\nconst octdigit = '[0-7]';\nconst digit = '[0-9]';\nconst nonzerodigit = '[1-9]';\nconst hexdigit = `(?:${digit}|[a-fA-F])`;\n\nconst bininteger = `(?:0[bB](?:_?${bindigit})+)`;\nconst octinteger = `(?:0(?:_?${octdigit})+)`;\nconst hexinteger = `(?:0[xX](?:_?${hexdigit})+)`;\nconst decinteger = `(?:${nonzerodigit}(?:_?${digit})*|0+(?:_?0)*)`;\nconst integer = `(?:${decinteger}|${bininteger}|${octinteger}|${hexinteger})`;\n\nconst digitpart = `(?:${digit}(?:_?${digit})*)`;\nconst fraction = `(?:\\\\.${digitpart})`;\nconst exponent = `(?:[eE][-+]?${digitpart})`;\nconst pointfloat = `(?:${digitpart}?${fraction}|${digitpart}\\\\.)`;\nconst exponentfloat = `(?:(?:${digitpart}|${pointfloat})${exponent})`;\nconst floatnumber = `(?:${pointfloat}|${exponentfloat})`;\n\n/* oxlint-disable renovate/require-regex-util -- good-enough-parser lexer patterns must be native RegExp: the lexer config is deep-cloned and compiled with moo, which rejects RE2 instances (TODO #12870) */\nconst numbers = new RegExp(`(?:${floatnumber}|${integer})`);\n\nconst lexer: l.LexerConfig = {\n joinLines: null,\n comments: [{ type: 'line-comment', startsWith: '#' }],\n symbols: /[_a-zA-Z][_a-zA-Z0-9]*/,\n numbers,\n operators: ['==', '>=', '>', '=>', ',', ';'],\n brackets: [\n { startsWith: '{', endsWith: '}' },\n { startsWith: '(', endsWith: ')' },\n ],\n strings: [{ startsWith: \"'\" }, { startsWith: '\"' }],\n};\n/* oxlint-enable renovate/require-regex-util */\n\nconst parser: p.ParserConfig = {\n useIndentBlocks: false,\n};\n\nexport const cpanfile = lang.createLang({ lexer, parser });\n"],"mappings":";;;;;AAMA,MAAM,WAAW;AACjB,MAAM,WAAW;AACjB,MAAM,QAAQ;AACd,MAAM,eAAe;AACrB,MAAM,WAAW,MAAM,MAAM;AAE7B,MAAM,aAAa,gBAAgB,SAAS;AAC5C,MAAM,aAAa,YAAY,SAAS;AACxC,MAAM,aAAa,gBAAgB,SAAS;AAE5C,MAAM,UAAU,MAAM,MADG,aAAa,OAAO,MAAM,gBAClB,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW;AAE3E,MAAM,YAAY,MAAM,MAAM,OAAO,MAAM;AAC3C,MAAM,WAAW,SAAS,UAAU;AACpC,MAAM,WAAW,eAAe,UAAU;AAC1C,MAAM,aAAa,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU;AAE5D,MAAM,cAAc,MAAM,WAAW,GAAG,SADT,UAAU,GAAG,WAAW,GAAG,SAAS,GACb;AAKtD,MAAM,QAAuB;CAC3B,WAAW;CACX,UAAU,CAAC;EAAE,MAAM;EAAgB,YAAY;CAAI,CAAC;CACpD,SAAS;CACT,SAAA,IANkB,OAAO,MAAM,YAAY,GAAG,QAAQ,EAMhD;CACN,WAAW;EAAC;EAAM;EAAM;EAAK;EAAM;EAAK;CAAG;CAC3C,UAAU,CACR;EAAE,YAAY;EAAK,UAAU;CAAI,GACjC;EAAE,YAAY;EAAK,UAAU;CAAI,CACnC;CACA,SAAS,CAAC,EAAE,YAAY,IAAI,GAAG,EAAE,YAAY,KAAI,CAAC;AACpD;AAOA,MAAa,WAAW,KAAK,WAAW;CAAE;CAAO,UAH/C,iBAAiB,MAG8B;AAAO,CAAC"}
@@ -23,8 +23,8 @@ const perlVersionMatch = query.sym("requires").alt(query.sym("perl"), query.str(
23
23
  return ctx;
24
24
  });
25
25
  const requirementMatch = query.sym(regEx(/^(?:requires|recommends|suggests)$/));
26
- const phasedRequiresMatch = query.sym(/^(?:configure|build|test|author)_requires$/, (ctx, { value: phase }) => {
27
- ctx.tempPhase = phase.replace(/_requires/, "").replace(/author/, "develop");
26
+ const phasedRequiresMatch = query.sym(regEx(/^(?:configure|build|test|author)_requires$/), (ctx, { value: phase }) => {
27
+ ctx.tempPhase = phase.replace(regEx(/_requires/), "").replace(regEx(/author/), "develop");
28
28
  return ctx;
29
29
  });
30
30
  const moduleMatch = query.alt(requirementMatch, phasedRequiresMatch).str((ctx, { value: depName }) => ({
@@ -34,7 +34,7 @@ const moduleMatch = query.alt(requirementMatch, phasedRequiresMatch).str((ctx, {
34
34
  ...ctx,
35
35
  currentValue
36
36
  })), query.str((ctx, { value }) => {
37
- const currentValue = value.replace(/^(?:\s*(?:==|>=|>))?\s*v?/, "");
37
+ const currentValue = value.replace(regEx(/^(?:\s*(?:==|>=|>))?\s*v?/), "");
38
38
  return {
39
39
  ...ctx,
40
40
  currentValue
@@ -55,7 +55,7 @@ const moduleMatch = query.alt(requirementMatch, phasedRequiresMatch).str((ctx, {
55
55
  }
56
56
  return ctx;
57
57
  });
58
- const phaseRegex = /^(?:configure|build|test|runtime|develop)/;
58
+ const phaseRegex = regEx(/^(?:configure|build|test|runtime|develop)/);
59
59
  const phaseMatch = query.alt(query.sym(phaseRegex, (ctx, { value: phase }) => ({
60
60
  ...ctx,
61
61
  phase
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","names":["q","perlVersioning.id","query"],"sources":["../../../../lib/modules/manager/cpanfile/parser.ts"],"sourcesContent":["import { query as q } from '@renovatebot/good-enough-parser';\nimport { regEx } from '../../../util/regex.ts';\nimport { CpanDatasource } from '../../datasource/cpan/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport * as perlVersioning from '../../versioning/perl/index.ts';\nimport type { PackageDependency } from '../types.ts';\nimport { cpanfile } from './language.ts';\n\ninterface Ctx {\n deps: PackageDependency[];\n\n perlVersion?: string;\n\n phase?: string;\n tempPhase?: string;\n\n depName?: string;\n currentValue?: string;\n}\n\n// requires perl, '5.36.1';\n// requires 'perl' => 5.036001;\nconst perlVersionMatch = q\n .sym<Ctx>('requires')\n .alt(q.sym('perl'), q.str('perl'))\n .alt(q.op(','), q.op('=>'))\n .alt(\n q.num<Ctx>((ctx, { value: perlVersion }) => ({ ...ctx, perlVersion })),\n q.str<Ctx>((ctx, { value: perlVersion }) => ({ ...ctx, perlVersion })),\n )\n .op(';')\n .handler((ctx) => {\n if (ctx.perlVersion) {\n ctx.deps.push({\n depName: 'perl',\n packageName: 'Perl/perl5',\n currentValue: ctx.perlVersion,\n datasource: GithubTagsDatasource.id,\n versioning: perlVersioning.id,\n extractVersion: '^v(?<version>\\\\S+)',\n });\n }\n return ctx;\n });\n\nconst requirementMatch = q.sym<Ctx>(\n regEx(/^(?:requires|recommends|suggests)$/),\n);\n\nconst phasedRequiresMatch = q.sym<Ctx>(\n /^(?:configure|build|test|author)_requires$/,\n (ctx, { value: phase }) => {\n ctx.tempPhase = phase.replace(/_requires/, '').replace(/author/, 'develop');\n return ctx;\n },\n);\n\n// requires 'Foo::Bar';\n//\n// requires 'Foo::Bar', '1.23';\n// recommends 'Foo::Bar', '1.23';\n// suggests 'Foo::Bar', '1.23';\n//\n// configure_requires 'Foo::Bar' => 1.023;\n// build_requires 'Foo::Bar' => 1.023;\n// test_requires 'Foo::Bar' => 1.023;\n// author_requires 'Foo::Bar' => 1.023;\nconst moduleMatch = q\n .alt(requirementMatch, phasedRequiresMatch)\n .str((ctx, { value: depName }) => ({ ...ctx, depName }))\n .opt(\n q.alt<Ctx>(q.op(','), q.op('=>')).alt(\n q.num<Ctx>((ctx, { value: currentValue }) => ({ ...ctx, currentValue })),\n q.str<Ctx>((ctx, { value }) => {\n const currentValue = value.replace(/^(?:\\s*(?:==|>=|>))?\\s*v?/, '');\n return { ...ctx, currentValue };\n }),\n ),\n )\n .op(';')\n .handler((ctx) => {\n const { phase, tempPhase, depName, currentValue } = ctx;\n\n delete ctx.tempPhase;\n delete ctx.depName;\n delete ctx.currentValue;\n\n if (depName) {\n const dep: PackageDependency = {\n depName,\n };\n if (currentValue) {\n dep.currentValue = currentValue;\n } else {\n dep.skipReason = 'unspecified-version';\n }\n if (phase) {\n dep.depType = phase;\n } else if (tempPhase) {\n dep.depType = tempPhase;\n }\n\n dep.datasource = CpanDatasource.id;\n ctx.deps.push(dep);\n }\n\n return ctx;\n });\n\nconst phaseRegex = /^(?:configure|build|test|runtime|develop)/;\n\nconst phaseMatch = q.alt<Ctx>(\n q.sym(phaseRegex, (ctx, { value: phase }) => ({ ...ctx, phase })),\n q.str(phaseRegex, (ctx, { value: phase }) => ({ ...ctx, phase })),\n);\n\n// on 'configure' => sub {\n// on build => sub {\n// on 'test' => sub {\n// on runtime => sub {\n// on 'develop' => sub {\nconst onMatch = q\n .sym<Ctx>('on')\n .join(phaseMatch)\n .op('=>')\n .sym('sub')\n .tree({\n type: 'wrapped-tree',\n maxDepth: 1,\n search: moduleMatch,\n })\n .handler((ctx) => {\n delete ctx.phase;\n return ctx;\n });\n\nconst query = q.tree<Ctx>({\n type: 'root-tree',\n maxDepth: 4,\n search: q.alt<Ctx>(perlVersionMatch, moduleMatch, onMatch),\n});\n\nexport function parse(\n content: string,\n): Pick<Ctx, 'deps' | 'perlVersion'> | null {\n return cpanfile.query(content, query, {\n deps: [],\n });\n}\n"],"mappings":";;;;;;;AAsBA,MAAM,mBAAmBA,MACtB,IAAS,UAAU,CAAC,CACpB,IAAIA,MAAE,IAAI,MAAM,GAAGA,MAAE,IAAI,MAAM,CAAC,CAAC,CACjC,IAAIA,MAAE,GAAG,GAAG,GAAGA,MAAE,GAAG,IAAI,CAAC,CAAC,CAC1B,IACCA,MAAE,KAAU,KAAK,EAAE,OAAO,mBAAmB;CAAE,GAAG;CAAK;AAAY,EAAE,GACrEA,MAAE,KAAU,KAAK,EAAE,OAAO,mBAAmB;CAAE,GAAG;CAAK;AAAY,EAAE,CACvE,CAAC,CACA,GAAG,GAAG,CAAC,CACP,SAAS,QAAQ;CAChB,IAAI,IAAI,aACN,IAAI,KAAK,KAAK;EACZ,SAAS;EACT,aAAa;EACb,cAAc,IAAI;EAClB,YAAY,qBAAqB;EACjC,YAAYC;EACZ,gBAAgB;CAClB,CAAC;CAEH,OAAO;AACT,CAAC;AAEH,MAAM,mBAAmBD,MAAE,IACzB,MAAM,oCAAoC,CAC5C;AAEA,MAAM,sBAAsBA,MAAE,IAC5B,+CACC,KAAK,EAAE,OAAO,YAAY;CACzB,IAAI,YAAY,MAAM,QAAQ,aAAa,EAAE,CAAC,CAAC,QAAQ,UAAU,SAAS;CAC1E,OAAO;AACT,CACF;AAYA,MAAM,cAAcA,MACjB,IAAI,kBAAkB,mBAAmB,CAAC,CAC1C,KAAK,KAAK,EAAE,OAAO,eAAe;CAAE,GAAG;CAAK;AAAQ,EAAE,CAAC,CACvD,IACCA,MAAE,IAASA,MAAE,GAAG,GAAG,GAAGA,MAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAChCA,MAAE,KAAU,KAAK,EAAE,OAAO,oBAAoB;CAAE,GAAG;CAAK;AAAa,EAAE,GACvEA,MAAE,KAAU,KAAK,EAAE,YAAY;CAC7B,MAAM,eAAe,MAAM,QAAQ,6BAA6B,EAAE;CAClE,OAAO;EAAE,GAAG;EAAK;CAAa;AAChC,CAAC,CACH,CACF,CAAC,CACA,GAAG,GAAG,CAAC,CACP,SAAS,QAAQ;CAChB,MAAM,EAAE,OAAO,WAAW,SAAS,iBAAiB;CAEpD,OAAO,IAAI;CACX,OAAO,IAAI;CACX,OAAO,IAAI;CAEX,IAAI,SAAS;EACX,MAAM,MAAyB,EAC7B,QACF;EACA,IAAI,cACF,IAAI,eAAe;OAEnB,IAAI,aAAa;EAEnB,IAAI,OACF,IAAI,UAAU;OACT,IAAI,WACT,IAAI,UAAU;EAGhB,IAAI,aAAa,eAAe;EAChC,IAAI,KAAK,KAAK,GAAG;CACnB;CAEA,OAAO;AACT,CAAC;AAEH,MAAM,aAAa;AAEnB,MAAM,aAAaA,MAAE,IACnBA,MAAE,IAAI,aAAa,KAAK,EAAE,OAAO,aAAa;CAAE,GAAG;CAAK;AAAM,EAAE,GAChEA,MAAE,IAAI,aAAa,KAAK,EAAE,OAAO,aAAa;CAAE,GAAG;CAAK;AAAM,EAAE,CAClE;AAOA,MAAM,UAAUA,MACb,IAAS,IAAI,CAAC,CACd,KAAK,UAAU,CAAC,CAChB,GAAG,IAAI,CAAC,CACR,IAAI,KAAK,CAAC,CACV,KAAK;CACJ,MAAM;CACN,UAAU;CACV,QAAQ;AACV,CAAC,CAAC,CACD,SAAS,QAAQ;CAChB,OAAO,IAAI;CACX,OAAO;AACT,CAAC;AAEH,MAAME,UAAQF,MAAE,KAAU;CACxB,MAAM;CACN,UAAU;CACV,QAAQA,MAAE,IAAS,kBAAkB,aAAa,OAAO;AAC3D,CAAC;AAED,SAAgB,MACd,SAC0C;CAC1C,OAAO,SAAS,MAAM,SAASE,SAAO,EACpC,MAAM,CAAC,EACT,CAAC;AACH"}
1
+ {"version":3,"file":"parser.js","names":["q","perlVersioning.id","query"],"sources":["../../../../lib/modules/manager/cpanfile/parser.ts"],"sourcesContent":["import { query as q } from '@renovatebot/good-enough-parser';\nimport { regEx } from '../../../util/regex.ts';\nimport { CpanDatasource } from '../../datasource/cpan/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport * as perlVersioning from '../../versioning/perl/index.ts';\nimport type { PackageDependency } from '../types.ts';\nimport { cpanfile } from './language.ts';\n\ninterface Ctx {\n deps: PackageDependency[];\n\n perlVersion?: string;\n\n phase?: string;\n tempPhase?: string;\n\n depName?: string;\n currentValue?: string;\n}\n\n// requires perl, '5.36.1';\n// requires 'perl' => 5.036001;\nconst perlVersionMatch = q\n .sym<Ctx>('requires')\n .alt(q.sym('perl'), q.str('perl'))\n .alt(q.op(','), q.op('=>'))\n .alt(\n q.num<Ctx>((ctx, { value: perlVersion }) => ({ ...ctx, perlVersion })),\n q.str<Ctx>((ctx, { value: perlVersion }) => ({ ...ctx, perlVersion })),\n )\n .op(';')\n .handler((ctx) => {\n if (ctx.perlVersion) {\n ctx.deps.push({\n depName: 'perl',\n packageName: 'Perl/perl5',\n currentValue: ctx.perlVersion,\n datasource: GithubTagsDatasource.id,\n versioning: perlVersioning.id,\n extractVersion: '^v(?<version>\\\\S+)',\n });\n }\n return ctx;\n });\n\nconst requirementMatch = q.sym<Ctx>(\n regEx(/^(?:requires|recommends|suggests)$/),\n);\n\nconst phasedRequiresMatch = q.sym<Ctx>(\n regEx(/^(?:configure|build|test|author)_requires$/),\n (ctx, { value: phase }) => {\n ctx.tempPhase = phase\n .replace(regEx(/_requires/), '')\n .replace(regEx(/author/), 'develop');\n return ctx;\n },\n);\n\n// requires 'Foo::Bar';\n//\n// requires 'Foo::Bar', '1.23';\n// recommends 'Foo::Bar', '1.23';\n// suggests 'Foo::Bar', '1.23';\n//\n// configure_requires 'Foo::Bar' => 1.023;\n// build_requires 'Foo::Bar' => 1.023;\n// test_requires 'Foo::Bar' => 1.023;\n// author_requires 'Foo::Bar' => 1.023;\nconst moduleMatch = q\n .alt(requirementMatch, phasedRequiresMatch)\n .str((ctx, { value: depName }) => ({ ...ctx, depName }))\n .opt(\n q.alt<Ctx>(q.op(','), q.op('=>')).alt(\n q.num<Ctx>((ctx, { value: currentValue }) => ({ ...ctx, currentValue })),\n q.str<Ctx>((ctx, { value }) => {\n const currentValue = value.replace(\n regEx(/^(?:\\s*(?:==|>=|>))?\\s*v?/),\n '',\n );\n return { ...ctx, currentValue };\n }),\n ),\n )\n .op(';')\n .handler((ctx) => {\n const { phase, tempPhase, depName, currentValue } = ctx;\n\n delete ctx.tempPhase;\n delete ctx.depName;\n delete ctx.currentValue;\n\n if (depName) {\n const dep: PackageDependency = {\n depName,\n };\n if (currentValue) {\n dep.currentValue = currentValue;\n } else {\n dep.skipReason = 'unspecified-version';\n }\n if (phase) {\n dep.depType = phase;\n } else if (tempPhase) {\n dep.depType = tempPhase;\n }\n\n dep.datasource = CpanDatasource.id;\n ctx.deps.push(dep);\n }\n\n return ctx;\n });\n\nconst phaseRegex = regEx(/^(?:configure|build|test|runtime|develop)/);\n\nconst phaseMatch = q.alt<Ctx>(\n q.sym(phaseRegex, (ctx, { value: phase }) => ({ ...ctx, phase })),\n q.str(phaseRegex, (ctx, { value: phase }) => ({ ...ctx, phase })),\n);\n\n// on 'configure' => sub {\n// on build => sub {\n// on 'test' => sub {\n// on runtime => sub {\n// on 'develop' => sub {\nconst onMatch = q\n .sym<Ctx>('on')\n .join(phaseMatch)\n .op('=>')\n .sym('sub')\n .tree({\n type: 'wrapped-tree',\n maxDepth: 1,\n search: moduleMatch,\n })\n .handler((ctx) => {\n delete ctx.phase;\n return ctx;\n });\n\nconst query = q.tree<Ctx>({\n type: 'root-tree',\n maxDepth: 4,\n search: q.alt<Ctx>(perlVersionMatch, moduleMatch, onMatch),\n});\n\nexport function parse(\n content: string,\n): Pick<Ctx, 'deps' | 'perlVersion'> | null {\n return cpanfile.query(content, query, {\n deps: [],\n });\n}\n"],"mappings":";;;;;;;AAsBA,MAAM,mBAAmBA,MACtB,IAAS,UAAU,CAAC,CACpB,IAAIA,MAAE,IAAI,MAAM,GAAGA,MAAE,IAAI,MAAM,CAAC,CAAC,CACjC,IAAIA,MAAE,GAAG,GAAG,GAAGA,MAAE,GAAG,IAAI,CAAC,CAAC,CAC1B,IACCA,MAAE,KAAU,KAAK,EAAE,OAAO,mBAAmB;CAAE,GAAG;CAAK;AAAY,EAAE,GACrEA,MAAE,KAAU,KAAK,EAAE,OAAO,mBAAmB;CAAE,GAAG;CAAK;AAAY,EAAE,CACvE,CAAC,CACA,GAAG,GAAG,CAAC,CACP,SAAS,QAAQ;CAChB,IAAI,IAAI,aACN,IAAI,KAAK,KAAK;EACZ,SAAS;EACT,aAAa;EACb,cAAc,IAAI;EAClB,YAAY,qBAAqB;EACjC,YAAYC;EACZ,gBAAgB;CAClB,CAAC;CAEH,OAAO;AACT,CAAC;AAEH,MAAM,mBAAmBD,MAAE,IACzB,MAAM,oCAAoC,CAC5C;AAEA,MAAM,sBAAsBA,MAAE,IAC5B,MAAM,4CAA4C,IACjD,KAAK,EAAE,OAAO,YAAY;CACzB,IAAI,YAAY,MACb,QAAQ,MAAM,WAAW,GAAG,EAAE,CAAC,CAC/B,QAAQ,MAAM,QAAQ,GAAG,SAAS;CACrC,OAAO;AACT,CACF;AAYA,MAAM,cAAcA,MACjB,IAAI,kBAAkB,mBAAmB,CAAC,CAC1C,KAAK,KAAK,EAAE,OAAO,eAAe;CAAE,GAAG;CAAK;AAAQ,EAAE,CAAC,CACvD,IACCA,MAAE,IAASA,MAAE,GAAG,GAAG,GAAGA,MAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAChCA,MAAE,KAAU,KAAK,EAAE,OAAO,oBAAoB;CAAE,GAAG;CAAK;AAAa,EAAE,GACvEA,MAAE,KAAU,KAAK,EAAE,YAAY;CAC7B,MAAM,eAAe,MAAM,QACzB,MAAM,2BAA2B,GACjC,EACF;CACA,OAAO;EAAE,GAAG;EAAK;CAAa;AAChC,CAAC,CACH,CACF,CAAC,CACA,GAAG,GAAG,CAAC,CACP,SAAS,QAAQ;CAChB,MAAM,EAAE,OAAO,WAAW,SAAS,iBAAiB;CAEpD,OAAO,IAAI;CACX,OAAO,IAAI;CACX,OAAO,IAAI;CAEX,IAAI,SAAS;EACX,MAAM,MAAyB,EAC7B,QACF;EACA,IAAI,cACF,IAAI,eAAe;OAEnB,IAAI,aAAa;EAEnB,IAAI,OACF,IAAI,UAAU;OACT,IAAI,WACT,IAAI,UAAU;EAGhB,IAAI,aAAa,eAAe;EAChC,IAAI,KAAK,KAAK,GAAG;CACnB;CAEA,OAAO;AACT,CAAC;AAEH,MAAM,aAAa,MAAM,2CAA2C;AAEpE,MAAM,aAAaA,MAAE,IACnBA,MAAE,IAAI,aAAa,KAAK,EAAE,OAAO,aAAa;CAAE,GAAG;CAAK;AAAM,EAAE,GAChEA,MAAE,IAAI,aAAa,KAAK,EAAE,OAAO,aAAa;CAAE,GAAG;CAAK;AAAM,EAAE,CAClE;AAOA,MAAM,UAAUA,MACb,IAAS,IAAI,CAAC,CACd,KAAK,UAAU,CAAC,CAChB,GAAG,IAAI,CAAC,CACR,IAAI,KAAK,CAAC,CACV,KAAK;CACJ,MAAM;CACN,UAAU;CACV,QAAQ;AACV,CAAC,CAAC,CACD,SAAS,QAAQ;CAChB,OAAO,IAAI;CACX,OAAO;AACT,CAAC;AAEH,MAAME,UAAQF,MAAE,KAAU;CACxB,MAAM;CACN,UAAU;CACV,QAAQA,MAAE,IAAS,kBAAkB,aAAa,OAAO;AAC3D,CAAC;AAED,SAAgB,MACd,SAC0C;CAC1C,OAAO,SAAS,MAAM,SAASE,SAAO,EACpC,MAAM,CAAC,EACT,CAAC;AACH"}
@@ -1,10 +1,11 @@
1
+ import { regEx } from "../../../util/regex.js";
1
2
  import { logger } from "../../../logger/index.js";
2
3
  import { parseYaml } from "../../../util/yaml.js";
3
4
  import { getDep } from "../dockerfile/extract.js";
4
5
  import { XPKG } from "./schema.js";
5
6
  //#region lib/modules/manager/crossplane/extract.ts
6
7
  function extractPackageFile(content, packageFile, extractConfig) {
7
- if (!/apiVersion:\s+["']?pkg\.crossplane\.io\/v.+["']?/.test(content)) {
8
+ if (!regEx(/apiVersion:\s+["']?pkg\.crossplane\.io\/v.+["']?/).test(content)) {
8
9
  logger.trace({ packageFile }, "No Crossplane package found in file.");
9
10
  return null;
10
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/crossplane/extract.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { parseYaml } from '../../../util/yaml.ts';\nimport { getDep } from '../dockerfile/extract.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport { XPKG } from './schema.ts';\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n extractConfig?: ExtractConfig,\n): PackageFileContent | null {\n // avoid parsing the whole file if it doesn't contain any resource having any pkg.crossplane.io/v*\n if (!/apiVersion:\\s+[\"']?pkg\\.crossplane\\.io\\/v.+[\"']?/.test(content)) {\n logger.trace({ packageFile }, 'No Crossplane package found in file.');\n return null;\n }\n\n // not try and catching this as failureBehaviour is set to filter and therefore it will not throw\n const list = parseYaml(content, {\n customSchema: XPKG,\n failureBehaviour: 'filter',\n });\n\n const deps: PackageDependency[] = [];\n for (const xpkg of list) {\n const dep = getDep(xpkg.spec.package, true, extractConfig?.registryAliases);\n dep.depType = xpkg.kind.toLowerCase();\n deps.push(dep);\n }\n\n return deps.length ? { deps } : null;\n}\n"],"mappings":";;;;;AAUA,SAAgB,mBACd,SACA,aACA,eAC2B;CAE3B,IAAI,CAAC,mDAAmD,KAAK,OAAO,GAAG;EACrE,OAAO,MAAM,EAAE,YAAY,GAAG,sCAAsC;EACpE,OAAO;CACT;CAGA,MAAM,OAAO,UAAU,SAAS;EAC9B,cAAc;EACd,kBAAkB;CACpB,CAAC;CAED,MAAM,OAA4B,CAAC;CACnC,KAAK,MAAM,QAAQ,MAAM;EACvB,MAAM,MAAM,OAAO,KAAK,KAAK,SAAS,MAAM,eAAe,eAAe;EAC1E,IAAI,UAAU,KAAK,KAAK,YAAY;EACpC,KAAK,KAAK,GAAG;CACf;CAEA,OAAO,KAAK,SAAS,EAAE,KAAK,IAAI;AAClC"}
1
+ {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/crossplane/extract.ts"],"sourcesContent":["import { logger } from '../../../logger/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { parseYaml } from '../../../util/yaml.ts';\nimport { getDep } from '../dockerfile/extract.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFileContent,\n} from '../types.ts';\nimport { XPKG } from './schema.ts';\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n extractConfig?: ExtractConfig,\n): PackageFileContent | null {\n // avoid parsing the whole file if it doesn't contain any resource having any pkg.crossplane.io/v*\n if (\n !regEx(/apiVersion:\\s+[\"']?pkg\\.crossplane\\.io\\/v.+[\"']?/).test(content)\n ) {\n logger.trace({ packageFile }, 'No Crossplane package found in file.');\n return null;\n }\n\n // not try and catching this as failureBehaviour is set to filter and therefore it will not throw\n const list = parseYaml(content, {\n customSchema: XPKG,\n failureBehaviour: 'filter',\n });\n\n const deps: PackageDependency[] = [];\n for (const xpkg of list) {\n const dep = getDep(xpkg.spec.package, true, extractConfig?.registryAliases);\n dep.depType = xpkg.kind.toLowerCase();\n deps.push(dep);\n }\n\n return deps.length ? { deps } : null;\n}\n"],"mappings":";;;;;;AAWA,SAAgB,mBACd,SACA,aACA,eAC2B;CAE3B,IACE,CAAC,MAAM,kDAAkD,CAAC,CAAC,KAAK,OAAO,GACvE;EACA,OAAO,MAAM,EAAE,YAAY,GAAG,sCAAsC;EACpE,OAAO;CACT;CAGA,MAAM,OAAO,UAAU,SAAS;EAC9B,cAAc;EACd,kBAAkB;CACpB,CAAC;CAED,MAAM,OAA4B,CAAC;CACnC,KAAK,MAAM,QAAQ,MAAM;EACvB,MAAM,MAAM,OAAO,KAAK,KAAK,SAAS,MAAM,eAAe,eAAe;EAC1E,IAAI,UAAU,KAAK,KAAK,YAAY;EACpC,KAAK,KAAK,GAAG;CACf;CAEA,OAAO,KAAK,SAAS,EAAE,KAAK,IAAI;AAClC"}
@@ -72,7 +72,7 @@ function resolveGitPackageFromEdnVal(dep, val) {
72
72
  }
73
73
  dep.datasource = GitRefsDatasource.id;
74
74
  dep.packageName = gitUrl;
75
- if (isHttpUrl(gitUrl)) dep.sourceUrl = gitUrl.replace(/\.git$/, "");
75
+ if (isHttpUrl(gitUrl)) dep.sourceUrl = gitUrl.replace(regEx(/\.git$/), "");
76
76
  }
77
77
  function extractDependency(key, val, metadata, mavenRegistries, depType) {
78
78
  if (!isPlainObject(val)) return null;
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/deps-edn/extract.ts"],"sourcesContent":["import { isPlainObject, isString } from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex.ts';\nimport { isHttpUrl } from '../../../util/url.ts';\nimport { BitbucketTagsDatasource } from '../../datasource/bitbucket-tags/index.ts';\nimport { CLOJARS_REPO } from '../../datasource/clojure/common.ts';\nimport { ClojureDatasource } from '../../datasource/clojure/index.ts';\nimport { GitRefsDatasource } from '../../datasource/git-refs/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { GitlabTagsDatasource } from '../../datasource/gitlab-tags/index.ts';\nimport { MAVEN_REPO } from '../../datasource/maven/common.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport { parseDepsEdnFile } from './parser.ts';\nimport type {\n ParsedEdnData,\n ParsedEdnMetadata,\n ParsedEdnRecord,\n} from './types.ts';\n\nconst dependencyRegex = regEx(\n /^(?<groupId>[a-zA-Z][-_a-zA-Z0-9]*(?:\\.[a-zA-Z0-9][-_a-zA-Z0-9]*)*)(?:\\/(?<artifactId>[a-zA-Z][-_a-zA-Z0-9]*(?:\\.[a-zA-Z0-9][-_a-zA-Z0-9]*)*))?$/,\n);\n\nfunction getPackageName(depName: string): string | null {\n const matchGroups = dependencyRegex.exec(depName)?.groups;\n if (matchGroups) {\n const groupId = matchGroups.groupId;\n const artifactId = matchGroups.artifactId\n ? matchGroups.artifactId\n : groupId;\n return `${groupId}:${artifactId}`;\n }\n\n return null;\n}\n\nconst githubDependencyRegex = regEx(\n /^(?:com|io)\\.github\\.(?<packageName>[^/]+\\/[^/]+)$/,\n);\nconst gitlabDependencyRegex = regEx(\n /^(?:com|io)\\.gitlab\\.(?<packageName>[^/]+\\/[^/]+)$/,\n);\nconst bitbucketDependencyRegex = regEx(\n /^(?:org|io)\\.bitbucket\\.(?<packageName>[^/]+\\/[^/]+)$/,\n);\n\nfunction resolveGitPackageFromEdnKey(\n dep: PackageDependency,\n key: string,\n): void {\n if (dep.datasource) {\n return;\n }\n\n const githubDependencyGroups = githubDependencyRegex.exec(key)?.groups;\n if (githubDependencyGroups?.packageName) {\n dep.datasource = GithubTagsDatasource.id;\n dep.packageName = githubDependencyGroups.packageName;\n return;\n }\n\n const gitlabDependencyGroups = gitlabDependencyRegex.exec(key)?.groups;\n if (gitlabDependencyGroups?.packageName) {\n dep.datasource = GitlabTagsDatasource.id;\n dep.packageName = gitlabDependencyGroups.packageName;\n return;\n }\n\n const bitbucketDependencyGroups = bitbucketDependencyRegex.exec(key)?.groups;\n if (bitbucketDependencyGroups?.packageName) {\n dep.datasource = BitbucketTagsDatasource.id;\n dep.packageName = bitbucketDependencyGroups.packageName;\n return;\n }\n}\n\nconst githubUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)github\\.com[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\nconst gitlabUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)gitlab\\.com[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\nconst bitbucketUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)bitbucket\\.org[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\n\nfunction resolveGitPackageFromEdnVal(\n dep: PackageDependency,\n val: ParsedEdnRecord,\n): void {\n const gitUrl = val['git/url'];\n if (!isString(gitUrl)) {\n return;\n }\n\n const githubMatchGroups = githubUrlRegex.exec(gitUrl)?.groups;\n if (githubMatchGroups) {\n dep.datasource = GithubTagsDatasource.id;\n dep.packageName = githubMatchGroups.packageName;\n dep.sourceUrl = `https://github.com/${dep.packageName}`;\n return;\n }\n\n const gitlabMatchGroups = gitlabUrlRegex.exec(gitUrl)?.groups;\n const bitbucketMatchGroups = bitbucketUrlRegex.exec(gitUrl)?.groups;\n\n if (gitlabMatchGroups) {\n dep.datasource = GitlabTagsDatasource.id;\n dep.packageName = gitlabMatchGroups.packageName;\n dep.sourceUrl = `https://gitlab.com/${dep.packageName}`;\n return;\n }\n\n if (bitbucketMatchGroups) {\n dep.datasource = GitlabTagsDatasource.id;\n dep.packageName = bitbucketMatchGroups.packageName;\n dep.sourceUrl = `https://bitbucket.org/${dep.packageName}`;\n return;\n }\n\n dep.datasource = GitRefsDatasource.id;\n dep.packageName = gitUrl;\n if (isHttpUrl(gitUrl)) {\n dep.sourceUrl = gitUrl.replace(/\\.git$/, '');\n }\n}\n\nfunction extractDependency(\n key: string,\n val: ParsedEdnData,\n metadata: ParsedEdnMetadata,\n mavenRegistries: string[],\n depType?: string,\n): PackageDependency | null {\n if (!isPlainObject(val)) {\n return null;\n }\n\n const packageName = getPackageName(key);\n if (!packageName) {\n return null;\n }\n const depName = key;\n\n const dep: PackageDependency = {\n depName,\n packageName,\n currentValue: null,\n ...metadata.get(val),\n };\n\n if (depType) {\n dep.depType = depType;\n }\n\n const mvnVersion = val['mvn/version'];\n if (isString(mvnVersion)) {\n dep.datasource = ClojureDatasource.id;\n dep.currentValue = mvnVersion;\n dep.packageName = packageName.replace('/', ':');\n dep.registryUrls = [...mavenRegistries];\n return dep;\n }\n\n resolveGitPackageFromEdnVal(dep, val);\n resolveGitPackageFromEdnKey(dep, key);\n\n if (dep.datasource) {\n const gitTag = val['git/tag'];\n if (isString(gitTag)) {\n dep.currentValue = gitTag;\n }\n\n const gitSha = val['git/sha'] ?? val.sha;\n if (isString(gitSha)) {\n dep.currentDigest = gitSha;\n dep.currentDigestShort = gitSha.slice(0, 7);\n }\n\n return dep;\n }\n\n return null;\n}\n\nfunction extractSection(\n section: ParsedEdnData,\n metadata: ParsedEdnMetadata,\n mavenRegistries: string[],\n depType?: string,\n): PackageDependency[] {\n const deps: PackageDependency[] = [];\n if (isPlainObject(section)) {\n for (const [key, val] of Object.entries(section)) {\n const dep = extractDependency(\n key,\n val,\n metadata,\n mavenRegistries,\n depType,\n );\n if (dep) {\n deps.push(dep);\n }\n }\n }\n return deps;\n}\n\nexport function extractPackageFile(content: string): PackageFileContent | null {\n const parsed = parseDepsEdnFile(content);\n if (!parsed) {\n return null;\n }\n const { data, metadata } = parsed;\n\n const deps: PackageDependency[] = [];\n\n // See: https://clojure.org/reference/deps_and_cli#_modifying_the_default_repositories\n const registryMap: Record<string, string> = {\n clojars: CLOJARS_REPO,\n central: MAVEN_REPO,\n };\n const mavenRepos = data['mvn/repos'];\n if (isPlainObject(mavenRepos)) {\n for (const [repoName, repoSpec] of Object.entries(mavenRepos)) {\n if (isString(repoName)) {\n if (isPlainObject(repoSpec) && isString(repoSpec.url)) {\n registryMap[repoName] = repoSpec.url;\n } else if (isString(repoSpec) && repoSpec === 'nil') {\n delete registryMap[repoName];\n }\n }\n }\n }\n const mavenRegistries: string[] = Object.values(registryMap);\n\n deps.push(...extractSection(data.deps, metadata, mavenRegistries));\n\n const aliases = data.aliases;\n if (isPlainObject(aliases)) {\n for (const [depType, aliasSection] of Object.entries(aliases)) {\n if (isPlainObject(aliasSection)) {\n deps.push(\n ...extractSection(\n aliasSection['extra-deps'],\n metadata,\n mavenRegistries,\n depType,\n ),\n );\n deps.push(\n ...extractSection(\n aliasSection['override-deps'],\n metadata,\n mavenRegistries,\n depType,\n ),\n );\n }\n }\n }\n\n return { deps };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/deps-edn/extract.ts"],"sourcesContent":["import { isPlainObject, isString } from '@sindresorhus/is';\nimport { regEx } from '../../../util/regex.ts';\nimport { isHttpUrl } from '../../../util/url.ts';\nimport { BitbucketTagsDatasource } from '../../datasource/bitbucket-tags/index.ts';\nimport { CLOJARS_REPO } from '../../datasource/clojure/common.ts';\nimport { ClojureDatasource } from '../../datasource/clojure/index.ts';\nimport { GitRefsDatasource } from '../../datasource/git-refs/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { GitlabTagsDatasource } from '../../datasource/gitlab-tags/index.ts';\nimport { MAVEN_REPO } from '../../datasource/maven/common.ts';\nimport type { PackageDependency, PackageFileContent } from '../types.ts';\nimport { parseDepsEdnFile } from './parser.ts';\nimport type {\n ParsedEdnData,\n ParsedEdnMetadata,\n ParsedEdnRecord,\n} from './types.ts';\n\nconst dependencyRegex = regEx(\n /^(?<groupId>[a-zA-Z][-_a-zA-Z0-9]*(?:\\.[a-zA-Z0-9][-_a-zA-Z0-9]*)*)(?:\\/(?<artifactId>[a-zA-Z][-_a-zA-Z0-9]*(?:\\.[a-zA-Z0-9][-_a-zA-Z0-9]*)*))?$/,\n);\n\nfunction getPackageName(depName: string): string | null {\n const matchGroups = dependencyRegex.exec(depName)?.groups;\n if (matchGroups) {\n const groupId = matchGroups.groupId;\n const artifactId = matchGroups.artifactId\n ? matchGroups.artifactId\n : groupId;\n return `${groupId}:${artifactId}`;\n }\n\n return null;\n}\n\nconst githubDependencyRegex = regEx(\n /^(?:com|io)\\.github\\.(?<packageName>[^/]+\\/[^/]+)$/,\n);\nconst gitlabDependencyRegex = regEx(\n /^(?:com|io)\\.gitlab\\.(?<packageName>[^/]+\\/[^/]+)$/,\n);\nconst bitbucketDependencyRegex = regEx(\n /^(?:org|io)\\.bitbucket\\.(?<packageName>[^/]+\\/[^/]+)$/,\n);\n\nfunction resolveGitPackageFromEdnKey(\n dep: PackageDependency,\n key: string,\n): void {\n if (dep.datasource) {\n return;\n }\n\n const githubDependencyGroups = githubDependencyRegex.exec(key)?.groups;\n if (githubDependencyGroups?.packageName) {\n dep.datasource = GithubTagsDatasource.id;\n dep.packageName = githubDependencyGroups.packageName;\n return;\n }\n\n const gitlabDependencyGroups = gitlabDependencyRegex.exec(key)?.groups;\n if (gitlabDependencyGroups?.packageName) {\n dep.datasource = GitlabTagsDatasource.id;\n dep.packageName = gitlabDependencyGroups.packageName;\n return;\n }\n\n const bitbucketDependencyGroups = bitbucketDependencyRegex.exec(key)?.groups;\n if (bitbucketDependencyGroups?.packageName) {\n dep.datasource = BitbucketTagsDatasource.id;\n dep.packageName = bitbucketDependencyGroups.packageName;\n return;\n }\n}\n\nconst githubUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)github\\.com[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\nconst gitlabUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)gitlab\\.com[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\nconst bitbucketUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)bitbucket\\.org[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\n\nfunction resolveGitPackageFromEdnVal(\n dep: PackageDependency,\n val: ParsedEdnRecord,\n): void {\n const gitUrl = val['git/url'];\n if (!isString(gitUrl)) {\n return;\n }\n\n const githubMatchGroups = githubUrlRegex.exec(gitUrl)?.groups;\n if (githubMatchGroups) {\n dep.datasource = GithubTagsDatasource.id;\n dep.packageName = githubMatchGroups.packageName;\n dep.sourceUrl = `https://github.com/${dep.packageName}`;\n return;\n }\n\n const gitlabMatchGroups = gitlabUrlRegex.exec(gitUrl)?.groups;\n const bitbucketMatchGroups = bitbucketUrlRegex.exec(gitUrl)?.groups;\n\n if (gitlabMatchGroups) {\n dep.datasource = GitlabTagsDatasource.id;\n dep.packageName = gitlabMatchGroups.packageName;\n dep.sourceUrl = `https://gitlab.com/${dep.packageName}`;\n return;\n }\n\n if (bitbucketMatchGroups) {\n dep.datasource = GitlabTagsDatasource.id;\n dep.packageName = bitbucketMatchGroups.packageName;\n dep.sourceUrl = `https://bitbucket.org/${dep.packageName}`;\n return;\n }\n\n dep.datasource = GitRefsDatasource.id;\n dep.packageName = gitUrl;\n if (isHttpUrl(gitUrl)) {\n dep.sourceUrl = gitUrl.replace(regEx(/\\.git$/), '');\n }\n}\n\nfunction extractDependency(\n key: string,\n val: ParsedEdnData,\n metadata: ParsedEdnMetadata,\n mavenRegistries: string[],\n depType?: string,\n): PackageDependency | null {\n if (!isPlainObject(val)) {\n return null;\n }\n\n const packageName = getPackageName(key);\n if (!packageName) {\n return null;\n }\n const depName = key;\n\n const dep: PackageDependency = {\n depName,\n packageName,\n currentValue: null,\n ...metadata.get(val),\n };\n\n if (depType) {\n dep.depType = depType;\n }\n\n const mvnVersion = val['mvn/version'];\n if (isString(mvnVersion)) {\n dep.datasource = ClojureDatasource.id;\n dep.currentValue = mvnVersion;\n dep.packageName = packageName.replace('/', ':');\n dep.registryUrls = [...mavenRegistries];\n return dep;\n }\n\n resolveGitPackageFromEdnVal(dep, val);\n resolveGitPackageFromEdnKey(dep, key);\n\n if (dep.datasource) {\n const gitTag = val['git/tag'];\n if (isString(gitTag)) {\n dep.currentValue = gitTag;\n }\n\n const gitSha = val['git/sha'] ?? val.sha;\n if (isString(gitSha)) {\n dep.currentDigest = gitSha;\n dep.currentDigestShort = gitSha.slice(0, 7);\n }\n\n return dep;\n }\n\n return null;\n}\n\nfunction extractSection(\n section: ParsedEdnData,\n metadata: ParsedEdnMetadata,\n mavenRegistries: string[],\n depType?: string,\n): PackageDependency[] {\n const deps: PackageDependency[] = [];\n if (isPlainObject(section)) {\n for (const [key, val] of Object.entries(section)) {\n const dep = extractDependency(\n key,\n val,\n metadata,\n mavenRegistries,\n depType,\n );\n if (dep) {\n deps.push(dep);\n }\n }\n }\n return deps;\n}\n\nexport function extractPackageFile(content: string): PackageFileContent | null {\n const parsed = parseDepsEdnFile(content);\n if (!parsed) {\n return null;\n }\n const { data, metadata } = parsed;\n\n const deps: PackageDependency[] = [];\n\n // See: https://clojure.org/reference/deps_and_cli#_modifying_the_default_repositories\n const registryMap: Record<string, string> = {\n clojars: CLOJARS_REPO,\n central: MAVEN_REPO,\n };\n const mavenRepos = data['mvn/repos'];\n if (isPlainObject(mavenRepos)) {\n for (const [repoName, repoSpec] of Object.entries(mavenRepos)) {\n if (isString(repoName)) {\n if (isPlainObject(repoSpec) && isString(repoSpec.url)) {\n registryMap[repoName] = repoSpec.url;\n } else if (isString(repoSpec) && repoSpec === 'nil') {\n delete registryMap[repoName];\n }\n }\n }\n }\n const mavenRegistries: string[] = Object.values(registryMap);\n\n deps.push(...extractSection(data.deps, metadata, mavenRegistries));\n\n const aliases = data.aliases;\n if (isPlainObject(aliases)) {\n for (const [depType, aliasSection] of Object.entries(aliases)) {\n if (isPlainObject(aliasSection)) {\n deps.push(\n ...extractSection(\n aliasSection['extra-deps'],\n metadata,\n mavenRegistries,\n depType,\n ),\n );\n deps.push(\n ...extractSection(\n aliasSection['override-deps'],\n metadata,\n mavenRegistries,\n depType,\n ),\n );\n }\n }\n }\n\n return { deps };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","names":[],"sources":["../../../../lib/modules/manager/deps-edn/parser.ts"],"sourcesContent":["import { isPlainObject } from '@sindresorhus/is';\nimport moo from 'moo';\nimport { logger } from '../../../logger/index.ts';\nimport type {\n EdnMetadata,\n ParsedEdnArray,\n ParsedEdnMetadata,\n ParsedEdnRecord,\n ParsedEdnResult,\n ParserState,\n TokenTypes,\n} from './types.ts';\n\nconst lexerStates = {\n main: {\n comma: { match: ',' },\n lineComment: { match: /;.*?$/ },\n leftParen: { match: '(' },\n rightParen: { match: ')' },\n leftSquare: { match: '[' },\n rightSquare: { match: ']' },\n leftFigure: { match: '{' },\n rightFigure: { match: '}' },\n longDoubleQuoted: {\n match: '\"\"\"',\n push: 'longDoubleQuoted',\n },\n doubleQuoted: {\n match: '\"',\n push: 'doubleQuoted',\n },\n // https://clojure.org/reference/reader#_reader_forms\n keyword: {\n match:\n /:(?:[a-zA-Z*+!_'?<>=.-][a-zA-Z0-9*+!_'?<>=.-]*)(?:\\/(?:[a-zA-Z*+!_'?<>=.-][a-zA-Z0-9*+!_'?<>=.-]*))?/,\n value: (x: string) => x.slice(1),\n },\n symbol: {\n match:\n /(?:[a-zA-Z*+!_'?<>=.-][a-zA-Z0-9*+!_'?<>=.-]*)(?:\\/(?:[a-zA-Z*+!_'?<>=.-][a-zA-Z0-9*+!_'?<>=.-]*))?/,\n },\n double: {\n match:\n /(?:[0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?|(?:[0-9]+[eE][+-]?[0-9]+)/,\n },\n rational: { match: /[0-9]+\\/[0-9]+/ },\n integer: { match: /(?:0x[0-9a-fA-F]+|[0-9]+r[0-9a-zA-Z]+|[0-9]+)/ },\n unknown: moo.fallback,\n },\n longDoubleQuoted: {\n stringFinish: { match: '\"\"\"', pop: 1 },\n stringContent: moo.fallback,\n },\n doubleQuoted: {\n stringFinish: { match: '\"', pop: 1 },\n stringContent: moo.fallback,\n },\n};\n\ntype TokenType = TokenTypes<typeof lexerStates>;\n\nconst lexer = moo.states(lexerStates);\n\nexport function parseDepsEdnFile(content: string): ParsedEdnResult | null {\n lexer.reset(content);\n const tokens = [...lexer];\n lexer.reset();\n\n const stack: ParserState[] = [];\n let state: ParserState = { type: 'root', data: null };\n\n const metadata: ParsedEdnMetadata = new WeakMap<\n ParsedEdnRecord | ParsedEdnArray,\n EdnMetadata\n >();\n\n function popState(): boolean {\n const savedState = stack.pop();\n if (!savedState) {\n return false;\n }\n\n if (savedState.type === 'root') {\n savedState.data = state.data;\n state = savedState;\n return false;\n }\n\n if (savedState.type === 'record') {\n if (savedState.skipKey) {\n savedState.currentKey = null;\n savedState.skipKey = false;\n } else if (savedState.currentKey) {\n savedState.data[savedState.currentKey] = state.data;\n savedState.currentKey = null;\n } else {\n savedState.skipKey = true;\n }\n }\n\n if (savedState.type === 'array') {\n savedState.data.push(state.data);\n }\n\n state = savedState;\n return true;\n }\n\n for (const token of tokens) {\n const tokenType = token.type as TokenType;\n const stateType = state.type;\n\n // istanbul ignore else: token type comprehension\n if (\n tokenType === 'lineComment' ||\n tokenType === 'unknown' ||\n tokenType === 'doubleQuoted' ||\n tokenType === 'longDoubleQuoted' ||\n tokenType === 'stringFinish' ||\n tokenType === 'comma'\n ) {\n continue;\n } else if (\n tokenType === 'rightParen' ||\n tokenType === 'rightSquare' ||\n tokenType === 'rightFigure'\n ) {\n if (state.type === 'record' || state.type === 'array') {\n const { startIndex } = state;\n const endIndex = token.offset + token.value.length;\n const replaceString = content.slice(startIndex, endIndex);\n metadata.set(state.data, { replaceString });\n }\n\n if (!popState()) {\n break;\n }\n } else if (tokenType === 'leftParen' || tokenType === 'leftSquare') {\n stack.push(state);\n state = {\n type: 'array',\n startIndex: token.offset,\n data: [],\n };\n } else if (tokenType === 'leftFigure') {\n stack.push(state);\n state = {\n type: 'record',\n startIndex: token.offset,\n data: {},\n skipKey: false,\n currentKey: null,\n };\n } else if (\n tokenType === 'symbol' ||\n tokenType === 'keyword' ||\n tokenType === 'stringContent' ||\n tokenType === 'double' ||\n tokenType === 'rational' ||\n tokenType === 'integer'\n ) {\n if (stateType === 'record') {\n if (state.skipKey) {\n state.currentKey = null;\n state.skipKey = false;\n } else if (state.currentKey) {\n state.data[state.currentKey] = token.value;\n state.currentKey = null;\n } else {\n state.currentKey = token.value;\n }\n } else if (stateType === 'array') {\n state.data.push(token.value);\n } else if (stateType === 'root') {\n state.data = token.value;\n }\n } else {\n const unknownType: never = tokenType;\n logger.debug({ unknownType }, `Unknown token type for \"deps.edn\"`);\n }\n }\n\n while (stack.length) {\n popState();\n }\n\n if (isPlainObject(state.data)) {\n return { data: state.data, metadata };\n }\n\n return null;\n}\n"],"mappings":";;;;AAaA,MAAM,cAAc;CAClB,MAAM;EACJ,OAAO,EAAE,OAAO,IAAI;EACpB,aAAa,EAAE,OAAO,QAAQ;EAC9B,WAAW,EAAE,OAAO,IAAI;EACxB,YAAY,EAAE,OAAO,IAAI;EACzB,YAAY,EAAE,OAAO,IAAI;EACzB,aAAa,EAAE,OAAO,IAAI;EAC1B,YAAY,EAAE,OAAO,IAAI;EACzB,aAAa,EAAE,OAAO,IAAI;EAC1B,kBAAkB;GAChB,OAAO;GACP,MAAM;EACR;EACA,cAAc;GACZ,OAAO;GACP,MAAM;EACR;EAEA,SAAS;GACP,OACE;GACF,QAAQ,MAAc,EAAE,MAAM,CAAC;EACjC;EACA,QAAQ,EACN,OACE,sGACJ;EACA,QAAQ,EACN,OACE,kFACJ;EACA,UAAU,EAAE,OAAO,iBAAiB;EACpC,SAAS,EAAE,OAAO,gDAAgD;EAClE,SAAS,IAAI;CACf;CACA,kBAAkB;EAChB,cAAc;GAAE,OAAO;GAAO,KAAK;EAAE;EACrC,eAAe,IAAI;CACrB;CACA,cAAc;EACZ,cAAc;GAAE,OAAO;GAAK,KAAK;EAAE;EACnC,eAAe,IAAI;CACrB;AACF;AAIA,MAAM,QAAQ,IAAI,OAAO,WAAW;AAEpC,SAAgB,iBAAiB,SAAyC;CACxE,MAAM,MAAM,OAAO;CACnB,MAAM,SAAS,CAAC,GAAG,KAAK;CACxB,MAAM,MAAM;CAEZ,MAAM,QAAuB,CAAC;CAC9B,IAAI,QAAqB;EAAE,MAAM;EAAQ,MAAM;CAAK;CAEpD,MAAM,2BAA8B,IAAI,QAGtC;CAEF,SAAS,WAAoB;EAC3B,MAAM,aAAa,MAAM,IAAI;EAC7B,IAAI,CAAC,YACH,OAAO;EAGT,IAAI,WAAW,SAAS,QAAQ;GAC9B,WAAW,OAAO,MAAM;GACxB,QAAQ;GACR,OAAO;EACT;EAEA,IAAI,WAAW,SAAS,UACtB,IAAI,WAAW,SAAS;GACtB,WAAW,aAAa;GACxB,WAAW,UAAU;EACvB,OAAO,IAAI,WAAW,YAAY;GAChC,WAAW,KAAK,WAAW,cAAc,MAAM;GAC/C,WAAW,aAAa;EAC1B,OACE,WAAW,UAAU;EAIzB,IAAI,WAAW,SAAS,SACtB,WAAW,KAAK,KAAK,MAAM,IAAI;EAGjC,QAAQ;EACR,OAAO;CACT;CAEA,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,YAAY,MAAM;EACxB,MAAM,YAAY,MAAM;;EAGxB,IACE,cAAc,iBACd,cAAc,aACd,cAAc,kBACd,cAAc,sBACd,cAAc,kBACd,cAAc,SAEd;OACK,IACL,cAAc,gBACd,cAAc,iBACd,cAAc,eACd;GACA,IAAI,MAAM,SAAS,YAAY,MAAM,SAAS,SAAS;IACrD,MAAM,EAAE,eAAe;IACvB,MAAM,WAAW,MAAM,SAAS,MAAM,MAAM;IAC5C,MAAM,gBAAgB,QAAQ,MAAM,YAAY,QAAQ;IACxD,SAAS,IAAI,MAAM,MAAM,EAAE,cAAc,CAAC;GAC5C;GAEA,IAAI,CAAC,SAAS,GACZ;EAEJ,OAAO,IAAI,cAAc,eAAe,cAAc,cAAc;GAClE,MAAM,KAAK,KAAK;GAChB,QAAQ;IACN,MAAM;IACN,YAAY,MAAM;IAClB,MAAM,CAAC;GACT;EACF,OAAO,IAAI,cAAc,cAAc;GACrC,MAAM,KAAK,KAAK;GAChB,QAAQ;IACN,MAAM;IACN,YAAY,MAAM;IAClB,MAAM,CAAC;IACP,SAAS;IACT,YAAY;GACd;EACF,OAAO,IACL,cAAc,YACd,cAAc,aACd,cAAc,mBACd,cAAc,YACd,cAAc,cACd,cAAc,WAEV;OAAA,cAAc,UAChB,IAAI,MAAM,SAAS;IACjB,MAAM,aAAa;IACnB,MAAM,UAAU;GAClB,OAAO,IAAI,MAAM,YAAY;IAC3B,MAAM,KAAK,MAAM,cAAc,MAAM;IACrC,MAAM,aAAa;GACrB,OACE,MAAM,aAAa,MAAM;QAEtB,IAAI,cAAc,SACvB,MAAM,KAAK,KAAK,MAAM,KAAK;QACtB,IAAI,cAAc,QACvB,MAAM,OAAO,MAAM;EAAA,OAEhB;GACL,MAAM,cAAqB;GAC3B,OAAO,MAAM,EAAE,YAAY,GAAG,mCAAmC;EACnE;CACF;CAEA,OAAO,MAAM,QACX,SAAS;CAGX,IAAI,cAAc,MAAM,IAAI,GAC1B,OAAO;EAAE,MAAM,MAAM;EAAM;CAAS;CAGtC,OAAO;AACT"}
1
+ {"version":3,"file":"parser.js","names":[],"sources":["../../../../lib/modules/manager/deps-edn/parser.ts"],"sourcesContent":["import { isPlainObject } from '@sindresorhus/is';\nimport moo from 'moo';\nimport { logger } from '../../../logger/index.ts';\nimport type {\n EdnMetadata,\n ParsedEdnArray,\n ParsedEdnMetadata,\n ParsedEdnRecord,\n ParsedEdnResult,\n ParserState,\n TokenTypes,\n} from './types.ts';\n\n/* oxlint-disable renovate/require-regex-util -- moo lexer patterns must be native RegExp: moo recompiles their source with the native engine and rejects RE2 instances (TODO #12870) */\nconst lexerStates = {\n main: {\n comma: { match: ',' },\n lineComment: { match: /;.*?$/ },\n leftParen: { match: '(' },\n rightParen: { match: ')' },\n leftSquare: { match: '[' },\n rightSquare: { match: ']' },\n leftFigure: { match: '{' },\n rightFigure: { match: '}' },\n longDoubleQuoted: {\n match: '\"\"\"',\n push: 'longDoubleQuoted',\n },\n doubleQuoted: {\n match: '\"',\n push: 'doubleQuoted',\n },\n // https://clojure.org/reference/reader#_reader_forms\n keyword: {\n match:\n /:(?:[a-zA-Z*+!_'?<>=.-][a-zA-Z0-9*+!_'?<>=.-]*)(?:\\/(?:[a-zA-Z*+!_'?<>=.-][a-zA-Z0-9*+!_'?<>=.-]*))?/,\n value: (x: string) => x.slice(1),\n },\n symbol: {\n match:\n /(?:[a-zA-Z*+!_'?<>=.-][a-zA-Z0-9*+!_'?<>=.-]*)(?:\\/(?:[a-zA-Z*+!_'?<>=.-][a-zA-Z0-9*+!_'?<>=.-]*))?/,\n },\n double: {\n match:\n /(?:[0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?|(?:[0-9]+[eE][+-]?[0-9]+)/,\n },\n rational: { match: /[0-9]+\\/[0-9]+/ },\n integer: { match: /(?:0x[0-9a-fA-F]+|[0-9]+r[0-9a-zA-Z]+|[0-9]+)/ },\n unknown: moo.fallback,\n },\n longDoubleQuoted: {\n stringFinish: { match: '\"\"\"', pop: 1 },\n stringContent: moo.fallback,\n },\n doubleQuoted: {\n stringFinish: { match: '\"', pop: 1 },\n stringContent: moo.fallback,\n },\n};\n/* oxlint-enable renovate/require-regex-util */\n\ntype TokenType = TokenTypes<typeof lexerStates>;\n\nconst lexer = moo.states(lexerStates);\n\nexport function parseDepsEdnFile(content: string): ParsedEdnResult | null {\n lexer.reset(content);\n const tokens = [...lexer];\n lexer.reset();\n\n const stack: ParserState[] = [];\n let state: ParserState = { type: 'root', data: null };\n\n const metadata: ParsedEdnMetadata = new WeakMap<\n ParsedEdnRecord | ParsedEdnArray,\n EdnMetadata\n >();\n\n function popState(): boolean {\n const savedState = stack.pop();\n if (!savedState) {\n return false;\n }\n\n if (savedState.type === 'root') {\n savedState.data = state.data;\n state = savedState;\n return false;\n }\n\n if (savedState.type === 'record') {\n if (savedState.skipKey) {\n savedState.currentKey = null;\n savedState.skipKey = false;\n } else if (savedState.currentKey) {\n savedState.data[savedState.currentKey] = state.data;\n savedState.currentKey = null;\n } else {\n savedState.skipKey = true;\n }\n }\n\n if (savedState.type === 'array') {\n savedState.data.push(state.data);\n }\n\n state = savedState;\n return true;\n }\n\n for (const token of tokens) {\n const tokenType = token.type as TokenType;\n const stateType = state.type;\n\n // istanbul ignore else: token type comprehension\n if (\n tokenType === 'lineComment' ||\n tokenType === 'unknown' ||\n tokenType === 'doubleQuoted' ||\n tokenType === 'longDoubleQuoted' ||\n tokenType === 'stringFinish' ||\n tokenType === 'comma'\n ) {\n continue;\n } else if (\n tokenType === 'rightParen' ||\n tokenType === 'rightSquare' ||\n tokenType === 'rightFigure'\n ) {\n if (state.type === 'record' || state.type === 'array') {\n const { startIndex } = state;\n const endIndex = token.offset + token.value.length;\n const replaceString = content.slice(startIndex, endIndex);\n metadata.set(state.data, { replaceString });\n }\n\n if (!popState()) {\n break;\n }\n } else if (tokenType === 'leftParen' || tokenType === 'leftSquare') {\n stack.push(state);\n state = {\n type: 'array',\n startIndex: token.offset,\n data: [],\n };\n } else if (tokenType === 'leftFigure') {\n stack.push(state);\n state = {\n type: 'record',\n startIndex: token.offset,\n data: {},\n skipKey: false,\n currentKey: null,\n };\n } else if (\n tokenType === 'symbol' ||\n tokenType === 'keyword' ||\n tokenType === 'stringContent' ||\n tokenType === 'double' ||\n tokenType === 'rational' ||\n tokenType === 'integer'\n ) {\n if (stateType === 'record') {\n if (state.skipKey) {\n state.currentKey = null;\n state.skipKey = false;\n } else if (state.currentKey) {\n state.data[state.currentKey] = token.value;\n state.currentKey = null;\n } else {\n state.currentKey = token.value;\n }\n } else if (stateType === 'array') {\n state.data.push(token.value);\n } else if (stateType === 'root') {\n state.data = token.value;\n }\n } else {\n const unknownType: never = tokenType;\n logger.debug({ unknownType }, `Unknown token type for \"deps.edn\"`);\n }\n }\n\n while (stack.length) {\n popState();\n }\n\n if (isPlainObject(state.data)) {\n return { data: state.data, metadata };\n }\n\n return null;\n}\n"],"mappings":"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"}
@@ -167,7 +167,7 @@ function extractPackageFile(content, _packageFile, config) {
167
167
  if (argMatchValue.startsWith("\"") && argMatchValue.endsWith("\"") || argMatchValue.startsWith("'") && argMatchValue.endsWith("'")) argMatchValue = argMatchValue.slice(1, -1);
168
168
  args[argMatch.groups.name] = argMatchValue || "";
169
169
  }
170
- const fromRegex = new RegExp(`^[ \\t]*FROM(?:${escapeChar}[ \\t]*\\r?\\n| |\\t|#.*?\\r?\\n|--platform=\\S+)+(?<image>\\S+)(?:(?:${escapeChar}[ \\t]*\\r?\\n| |\\t|#.*?\\r?\\n)+as[ \\t]+(?<name>\\S+))?`, "im");
170
+ const fromRegex = regEx(`^[ \\t]*FROM(?:${escapeChar}[ \\t]*\\r?\\n| |\\t|#.*?\\r?\\n|--platform=\\S+)+(?<image>\\S+)(?:(?:${escapeChar}[ \\t]*\\r?\\n| |\\t|#.*?\\r?\\n)+as[ \\t]+(?<name>\\S+))?`, "im");
171
171
  const fromMatch = instruction.match(fromRegex);
172
172
  if (fromMatch?.groups?.image) {
173
173
  let fromImage = fromMatch.groups.image;
@@ -199,7 +199,7 @@ function extractPackageFile(content, _packageFile, config) {
199
199
  deps.push(dep);
200
200
  }
201
201
  }
202
- const copyFromRegex = new RegExp(`^[ \\t]*COPY(?:${escapeChar}[ \\t]*\\r?\\n| |\\t|#.*?\\r?\\n|--[a-z]+(?:=[a-zA-Z0-9_.:-]+?)?)+--from=(?<image>\\S+)`, "im");
202
+ const copyFromRegex = regEx(`^[ \\t]*COPY(?:${escapeChar}[ \\t]*\\r?\\n| |\\t|#.*?\\r?\\n|--[a-z]+(?:=[a-zA-Z0-9_.:-]+?)?)+--from=(?<image>\\S+)`, "im");
203
203
  const copyFromMatch = instruction.match(copyFromRegex);
204
204
  if (copyFromMatch?.groups?.image) if (stageNames.includes(copyFromMatch.groups.image)) logger.debug({ image: copyFromMatch.groups.image }, "Skipping alias COPY --from");
205
205
  else if (Number.isNaN(Number(copyFromMatch.groups.image))) {